Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 911001 Details for
Bug 1111781
internal compiler error: Segmentation fault
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
preprocessed source 3
cc7YzUJp.out (text/plain), 6.83 MB, created by
josef radinger
on 2014-06-21 11:41:01 UTC
(
hide
)
Description:
preprocessed source 3
Filename:
MIME Type:
Creator:
josef radinger
Created:
2014-06-21 11:41:01 UTC
Size:
6.83 MB
patch
obsolete
>// /usr/libexec/gcc/x86_64-redhat-linux/4.8.2/cc1plus -fpreprocessed /tmp/ccache/tmp/gmic.tmp.localhost.localdomain.2850.ii -quiet -dumpbase gmic.tmp.localhost.localdomain.2850.ii -mtune=generic -march=x86-64 -auxbase-strip /tmp/ccache/a/2/ff807b3645e5e706ecbd3e97cff0cc-7152519.o.tmp.localhost.localdomain.2850 -O2 -Wall -Wextra -fPIC -fopenmp -fno-ipa-sra -o - -frandom-seed=0 ># 1 "gmic.cpp" ># 1 "<command-line>" ># 1 "/usr/include/stdc-predef.h" 1 3 4 ># 1 "<command-line>" 2 ># 1 "gmic.cpp" ># 1879 "gmic.cpp" ># 1 "gmic.h" 1 ># 47 "gmic.h" ># 1 "/usr/include/c++/4.8.2/locale" 1 3 ># 36 "/usr/include/c++/4.8.2/locale" 3 ># 37 "/usr/include/c++/4.8.2/locale" 3 > ># 1 "/usr/include/c++/4.8.2/bits/localefwd.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/localefwd.h" 3 ># 38 "/usr/include/c++/4.8.2/bits/localefwd.h" 3 > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 1 3 > > ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 4 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 2 3 ># 1855 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 3 >namespace std >{ > typedef long unsigned int size_t; > typedef long int ptrdiff_t; > > > > >} ># 2097 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/os_defines.h" 1 3 ># 39 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/os_defines.h" 3 ># 1 "/usr/include/features.h" 1 3 4 ># 364 "/usr/include/features.h" 3 4 ># 1 "/usr/include/sys/cdefs.h" 1 3 4 ># 385 "/usr/include/sys/cdefs.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 386 "/usr/include/sys/cdefs.h" 2 3 4 ># 365 "/usr/include/features.h" 2 3 4 ># 388 "/usr/include/features.h" 3 4 ># 1 "/usr/include/gnu/stubs.h" 1 3 4 ># 10 "/usr/include/gnu/stubs.h" 3 4 ># 1 "/usr/include/gnu/stubs-64.h" 1 3 4 ># 11 "/usr/include/gnu/stubs.h" 2 3 4 ># 389 "/usr/include/features.h" 2 3 4 ># 40 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/os_defines.h" 2 3 ># 2098 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 2 3 > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/cpu_defines.h" 1 3 ># 2101 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 2 3 ># 40 "/usr/include/c++/4.8.2/bits/localefwd.h" 2 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 1 3 ># 39 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 3 ># 40 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 3 > ># 1 "/usr/include/c++/4.8.2/clocale" 1 3 ># 39 "/usr/include/c++/4.8.2/clocale" 3 ># 40 "/usr/include/c++/4.8.2/clocale" 3 > > ># 1 "/usr/include/locale.h" 1 3 4 ># 28 "/usr/include/locale.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 29 "/usr/include/locale.h" 2 3 4 ># 1 "/usr/include/bits/locale.h" 1 3 4 ># 30 "/usr/include/locale.h" 2 3 4 > >extern "C" { ># 50 "/usr/include/locale.h" 3 4 > > > >struct lconv >{ > > > char *decimal_point; > char *thousands_sep; > > > > > > char *grouping; > > > > > > char *int_curr_symbol; > char *currency_symbol; > char *mon_decimal_point; > char *mon_thousands_sep; > char *mon_grouping; > char *positive_sign; > char *negative_sign; > char int_frac_digits; > char frac_digits; > > char p_cs_precedes; > > char p_sep_by_space; > > char n_cs_precedes; > > char n_sep_by_space; > > > > > > > char p_sign_posn; > char n_sign_posn; > > > char int_p_cs_precedes; > > char int_p_sep_by_space; > > char int_n_cs_precedes; > > char int_n_sep_by_space; > > > > > > > char int_p_sign_posn; > char int_n_sign_posn; ># 120 "/usr/include/locale.h" 3 4 >}; > > > >extern char *setlocale (int __category, const char *__locale) throw (); > > >extern struct lconv *localeconv (void) throw (); ># 145 "/usr/include/locale.h" 3 4 ># 1 "/usr/include/xlocale.h" 1 3 4 ># 27 "/usr/include/xlocale.h" 3 4 >typedef struct __locale_struct >{ > > struct __locale_data *__locales[13]; > > > const unsigned short int *__ctype_b; > const int *__ctype_tolower; > const int *__ctype_toupper; > > > const char *__names[13]; >} *__locale_t; > > >typedef __locale_t locale_t; ># 146 "/usr/include/locale.h" 2 3 4 > > > > > >extern __locale_t newlocale (int __category_mask, const char *__locale, > __locale_t __base) throw (); ># 186 "/usr/include/locale.h" 3 4 >extern __locale_t duplocale (__locale_t __dataset) throw (); > > > >extern void freelocale (__locale_t __dataset) throw (); > > > > > > >extern __locale_t uselocale (__locale_t __dataset) throw (); > > > > > > > >} ># 43 "/usr/include/c++/4.8.2/clocale" 2 3 ># 51 "/usr/include/c++/4.8.2/clocale" 3 >namespace std >{ > using ::lconv; > using ::setlocale; > using ::localeconv; >} ># 42 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 2 3 > > > > > > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > extern "C" __typeof(uselocale) __uselocale; > > >} > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > typedef __locale_t __c_locale; > > > > > > inline int > __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)), > char* __out, > const int __size __attribute__ ((__unused__)), > const char* __fmt, ...) > { > > __c_locale __old = __gnu_cxx::__uselocale(__cloc); ># 88 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 3 > __builtin_va_list __args; > __builtin_va_start(__args, __fmt); > > > const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); > > > > > __builtin_va_end(__args); > > > __gnu_cxx::__uselocale(__old); > > > > > > > > return __ret; > } > > >} ># 41 "/usr/include/c++/4.8.2/bits/localefwd.h" 2 3 ># 1 "/usr/include/c++/4.8.2/iosfwd" 1 3 ># 36 "/usr/include/c++/4.8.2/iosfwd" 3 ># 37 "/usr/include/c++/4.8.2/iosfwd" 3 > > ># 1 "/usr/include/c++/4.8.2/bits/stringfwd.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/stringfwd.h" 3 ># 38 "/usr/include/c++/4.8.2/bits/stringfwd.h" 3 > > ># 1 "/usr/include/c++/4.8.2/bits/memoryfwd.h" 1 3 ># 46 "/usr/include/c++/4.8.2/bits/memoryfwd.h" 3 ># 47 "/usr/include/c++/4.8.2/bits/memoryfwd.h" 3 > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 63 "/usr/include/c++/4.8.2/bits/memoryfwd.h" 3 > template<typename> > class allocator; > > template<> > class allocator<void>; > > > template<typename, typename> > struct uses_allocator; > > > > >} ># 41 "/usr/include/c++/4.8.2/bits/stringfwd.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 52 "/usr/include/c++/4.8.2/bits/stringfwd.h" 3 > template<class _CharT> > struct char_traits; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_string; > > template<> struct char_traits<char>; > > > typedef basic_string<char> string; > > > template<> struct char_traits<wchar_t>; > > > typedef basic_string<wchar_t> wstring; ># 86 "/usr/include/c++/4.8.2/bits/stringfwd.h" 3 > >} ># 40 "/usr/include/c++/4.8.2/iosfwd" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/postypes.h" 1 3 ># 38 "/usr/include/c++/4.8.2/bits/postypes.h" 3 ># 39 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > ># 1 "/usr/include/c++/4.8.2/cwchar" 1 3 ># 39 "/usr/include/c++/4.8.2/cwchar" 3 ># 40 "/usr/include/c++/4.8.2/cwchar" 3 > > > > ># 1 "/usr/include/wchar.h" 1 3 4 ># 36 "/usr/include/wchar.h" 3 4 ># 1 "/usr/include/stdio.h" 1 3 4 ># 44 "/usr/include/stdio.h" 3 4 >struct _IO_FILE; > > > >typedef struct _IO_FILE FILE; ># 64 "/usr/include/stdio.h" 3 4 >typedef struct _IO_FILE __FILE; ># 37 "/usr/include/wchar.h" 2 3 4 > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stdarg.h" 1 3 4 ># 40 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stdarg.h" 3 4 >typedef __builtin_va_list __gnuc_va_list; ># 40 "/usr/include/wchar.h" 2 3 4 > ># 1 "/usr/include/bits/wchar.h" 1 3 4 ># 42 "/usr/include/wchar.h" 2 3 4 ># 51 "/usr/include/wchar.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 212 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 3 4 >typedef long unsigned int size_t; ># 353 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 3 4 >typedef unsigned int wint_t; ># 52 "/usr/include/wchar.h" 2 3 4 ># 82 "/usr/include/wchar.h" 3 4 >typedef struct >{ > int __count; > union > { > > unsigned int __wch; > > > > char __wchb[4]; > } __value; >} __mbstate_t; ># 104 "/usr/include/wchar.h" 3 4 > > >typedef __mbstate_t mbstate_t; ># 132 "/usr/include/wchar.h" 3 4 >extern "C" { > > > > >struct tm; ># 147 "/usr/include/wchar.h" 3 4 >extern wchar_t *wcscpy (wchar_t *__restrict __dest, > const wchar_t *__restrict __src) throw (); > >extern wchar_t *wcsncpy (wchar_t *__restrict __dest, > const wchar_t *__restrict __src, size_t __n) > throw (); > > >extern wchar_t *wcscat (wchar_t *__restrict __dest, > const wchar_t *__restrict __src) throw (); > >extern wchar_t *wcsncat (wchar_t *__restrict __dest, > const wchar_t *__restrict __src, size_t __n) > throw (); > > >extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2) > throw () __attribute__ ((__pure__)); > >extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) > throw () __attribute__ ((__pure__)); > > > > >extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) throw (); > > >extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2, > size_t __n) throw (); > > > > > >extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2, > __locale_t __loc) throw (); > >extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2, > size_t __n, __locale_t __loc) throw (); > > > > > >extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) throw (); > > > >extern size_t wcsxfrm (wchar_t *__restrict __s1, > const wchar_t *__restrict __s2, size_t __n) throw (); ># 206 "/usr/include/wchar.h" 3 4 >extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2, > __locale_t __loc) throw (); > > > > >extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2, > size_t __n, __locale_t __loc) throw (); > > >extern wchar_t *wcsdup (const wchar_t *__s) throw () __attribute__ ((__malloc__)); > > > > > >extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc) > throw () __asm ("wcschr") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) > throw () __asm ("wcschr") __attribute__ ((__pure__)); > > > > > > >extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc) > throw () __asm ("wcsrchr") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) > throw () __asm ("wcsrchr") __attribute__ ((__pure__)); ># 245 "/usr/include/wchar.h" 3 4 >extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc) > throw () __attribute__ ((__pure__)); > > > > > >extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject) > throw () __attribute__ ((__pure__)); > > >extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept) > throw () __attribute__ ((__pure__)); > > >extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept) > throw () __asm ("wcspbrk") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs, > const wchar_t *__accept) > throw () __asm ("wcspbrk") __attribute__ ((__pure__)); > > > > > > >extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle) > throw () __asm ("wcsstr") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack, > const wchar_t *__needle) > throw () __asm ("wcsstr") __attribute__ ((__pure__)); > > > > > > >extern wchar_t *wcstok (wchar_t *__restrict __s, > const wchar_t *__restrict __delim, > wchar_t **__restrict __ptr) throw (); > > >extern size_t wcslen (const wchar_t *__s) throw () __attribute__ ((__pure__)); > > > > > >extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle) > throw () __asm ("wcswcs") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack, > const wchar_t *__needle) > throw () __asm ("wcswcs") __attribute__ ((__pure__)); ># 306 "/usr/include/wchar.h" 3 4 >extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen) > throw () __attribute__ ((__pure__)); > > > > > > >extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n) > throw () __asm ("wmemchr") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, > size_t __n) > throw () __asm ("wmemchr") __attribute__ ((__pure__)); > > > > > > >extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) > throw () __attribute__ ((__pure__)); > > >extern wchar_t *wmemcpy (wchar_t *__restrict __s1, > const wchar_t *__restrict __s2, size_t __n) throw (); > > > >extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) > throw (); > > >extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw (); > > > > > >extern wchar_t *wmempcpy (wchar_t *__restrict __s1, > const wchar_t *__restrict __s2, size_t __n) > throw (); > > > > > > >extern wint_t btowc (int __c) throw (); > > > >extern int wctob (wint_t __c) throw (); > > > >extern int mbsinit (const mbstate_t *__ps) throw () __attribute__ ((__pure__)); > > > >extern size_t mbrtowc (wchar_t *__restrict __pwc, > const char *__restrict __s, size_t __n, > mbstate_t *__restrict __p) throw (); > > >extern size_t wcrtomb (char *__restrict __s, wchar_t __wc, > mbstate_t *__restrict __ps) throw (); > > >extern size_t __mbrlen (const char *__restrict __s, size_t __n, > mbstate_t *__restrict __ps) throw (); >extern size_t mbrlen (const char *__restrict __s, size_t __n, > mbstate_t *__restrict __ps) throw (); ># 386 "/usr/include/wchar.h" 3 4 >extern wint_t __btowc_alias (int __c) __asm ("btowc"); >extern __inline __attribute__ ((__gnu_inline__)) wint_t >__attribute__ ((__leaf__)) btowc (int __c) throw () >{ return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f' > ? (wint_t) __c : __btowc_alias (__c)); } > >extern int __wctob_alias (wint_t __c) __asm ("wctob"); >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) wctob (wint_t __wc) throw () >{ return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f' > ? (int) __wc : __wctob_alias (__wc)); } > >extern __inline __attribute__ ((__gnu_inline__)) size_t >__attribute__ ((__leaf__)) mbrlen (const char *__restrict __s, size_t __n, mbstate_t *__restrict __ps) throw () > >{ return (__ps != __null > ? mbrtowc (__null, __s, __n, __ps) : __mbrlen (__s, __n, __null)); } > > > > > >extern size_t mbsrtowcs (wchar_t *__restrict __dst, > const char **__restrict __src, size_t __len, > mbstate_t *__restrict __ps) throw (); > > > >extern size_t wcsrtombs (char *__restrict __dst, > const wchar_t **__restrict __src, size_t __len, > mbstate_t *__restrict __ps) throw (); > > > > > > >extern size_t mbsnrtowcs (wchar_t *__restrict __dst, > const char **__restrict __src, size_t __nmc, > size_t __len, mbstate_t *__restrict __ps) throw (); > > > >extern size_t wcsnrtombs (char *__restrict __dst, > const wchar_t **__restrict __src, > size_t __nwc, size_t __len, > mbstate_t *__restrict __ps) throw (); > > > > > > >extern int wcwidth (wchar_t __c) throw (); > > > >extern int wcswidth (const wchar_t *__s, size_t __n) throw (); > > > > > > >extern double wcstod (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr) throw (); > > > > > >extern float wcstof (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr) throw (); >extern long double wcstold (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr) throw (); > > > > > > > >extern long int wcstol (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) throw (); > > > >extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > throw (); > > > > > > >__extension__ >extern long long int wcstoll (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > throw (); > > > >__extension__ >extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base) throw (); > > > > > > >__extension__ >extern long long int wcstoq (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > throw (); > > > >__extension__ >extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base) throw (); ># 530 "/usr/include/wchar.h" 3 4 >extern long int wcstol_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base, > __locale_t __loc) throw (); > >extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, __locale_t __loc) throw (); > >__extension__ >extern long long int wcstoll_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, __locale_t __loc) throw (); > >__extension__ >extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, __locale_t __loc) > throw (); > >extern double wcstod_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, __locale_t __loc) > throw (); > >extern float wcstof_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, __locale_t __loc) > throw (); > >extern long double wcstold_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > __locale_t __loc) throw (); > > > > > > >extern wchar_t *wcpcpy (wchar_t *__restrict __dest, > const wchar_t *__restrict __src) throw (); > > > >extern wchar_t *wcpncpy (wchar_t *__restrict __dest, > const wchar_t *__restrict __src, size_t __n) > throw (); > > > > > > >extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) throw (); > > > > > > >extern int fwide (__FILE *__fp, int __mode) throw (); > > > > > > >extern int fwprintf (__FILE *__restrict __stream, > const wchar_t *__restrict __format, ...) > ; > > > > >extern int wprintf (const wchar_t *__restrict __format, ...) > ; > >extern int swprintf (wchar_t *__restrict __s, size_t __n, > const wchar_t *__restrict __format, ...) > throw () ; > > > > > >extern int vfwprintf (__FILE *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) > ; > > > > >extern int vwprintf (const wchar_t *__restrict __format, > __gnuc_va_list __arg) > ; > > >extern int vswprintf (wchar_t *__restrict __s, size_t __n, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) > throw () ; > > > > > > >extern int fwscanf (__FILE *__restrict __stream, > const wchar_t *__restrict __format, ...) > ; > > > > >extern int wscanf (const wchar_t *__restrict __format, ...) > ; > >extern int swscanf (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, ...) > throw () ; ># 680 "/usr/include/wchar.h" 3 4 ># 689 "/usr/include/wchar.h" 3 4 >extern int vfwscanf (__FILE *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) > ; > > > > >extern int vwscanf (const wchar_t *__restrict __format, > __gnuc_va_list __arg) > ; > >extern int vswscanf (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) > throw () ; ># 736 "/usr/include/wchar.h" 3 4 ># 745 "/usr/include/wchar.h" 3 4 >extern wint_t fgetwc (__FILE *__stream); >extern wint_t getwc (__FILE *__stream); > > > > > >extern wint_t getwchar (void); > > > > > > >extern wint_t fputwc (wchar_t __wc, __FILE *__stream); >extern wint_t putwc (wchar_t __wc, __FILE *__stream); > > > > > >extern wint_t putwchar (wchar_t __wc); > > > > > > > >extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, > __FILE *__restrict __stream); > > > > > >extern int fputws (const wchar_t *__restrict __ws, > __FILE *__restrict __stream); > > > > > > >extern wint_t ungetwc (wint_t __wc, __FILE *__stream); ># 801 "/usr/include/wchar.h" 3 4 >extern wint_t getwc_unlocked (__FILE *__stream); >extern wint_t getwchar_unlocked (void); > > > > > > > >extern wint_t fgetwc_unlocked (__FILE *__stream); > > > > > > > >extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); ># 827 "/usr/include/wchar.h" 3 4 >extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); >extern wint_t putwchar_unlocked (wchar_t __wc); ># 837 "/usr/include/wchar.h" 3 4 >extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, > __FILE *__restrict __stream); > > > > > > > >extern int fputws_unlocked (const wchar_t *__restrict __ws, > __FILE *__restrict __stream); > > > > > > > >extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, > const wchar_t *__restrict __format, > const struct tm *__restrict __tp) throw (); > > > > > > > >extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, > const wchar_t *__restrict __format, > const struct tm *__restrict __tp, > __locale_t __loc) throw (); ># 891 "/usr/include/wchar.h" 3 4 >} ># 45 "/usr/include/c++/4.8.2/cwchar" 2 3 ># 62 "/usr/include/c++/4.8.2/cwchar" 3 >namespace std >{ > using ::mbstate_t; >} ># 135 "/usr/include/c++/4.8.2/cwchar" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > using ::wint_t; > > using ::btowc; > using ::fgetwc; > using ::fgetws; > using ::fputwc; > using ::fputws; > using ::fwide; > using ::fwprintf; > using ::fwscanf; > using ::getwc; > using ::getwchar; > using ::mbrlen; > using ::mbrtowc; > using ::mbsinit; > using ::mbsrtowcs; > using ::putwc; > using ::putwchar; > > using ::swprintf; > > using ::swscanf; > using ::ungetwc; > using ::vfwprintf; > > using ::vfwscanf; > > > using ::vswprintf; > > > using ::vswscanf; > > using ::vwprintf; > > using ::vwscanf; > > using ::wcrtomb; > using ::wcscat; > using ::wcscmp; > using ::wcscoll; > using ::wcscpy; > using ::wcscspn; > using ::wcsftime; > using ::wcslen; > using ::wcsncat; > using ::wcsncmp; > using ::wcsncpy; > using ::wcsrtombs; > using ::wcsspn; > using ::wcstod; > > using ::wcstof; > > using ::wcstok; > using ::wcstol; > using ::wcstoul; > using ::wcsxfrm; > using ::wctob; > using ::wmemcmp; > using ::wmemcpy; > using ::wmemmove; > using ::wmemset; > using ::wprintf; > using ::wscanf; > using ::wcschr; > using ::wcspbrk; > using ::wcsrchr; > using ::wcsstr; > using ::wmemchr; ># 232 "/usr/include/c++/4.8.2/cwchar" 3 > >} > > > > > > > >namespace __gnu_cxx >{ > > > > > > using ::wcstold; ># 257 "/usr/include/c++/4.8.2/cwchar" 3 > using ::wcstoll; > using ::wcstoull; > >} > >namespace std >{ > using ::__gnu_cxx::wcstold; > using ::__gnu_cxx::wcstoll; > using ::__gnu_cxx::wcstoull; >} ># 41 "/usr/include/c++/4.8.2/bits/postypes.h" 2 3 ># 68 "/usr/include/c++/4.8.2/bits/postypes.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 88 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > typedef long streamoff; ># 98 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > typedef ptrdiff_t streamsize; ># 111 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > template<typename _StateT> > class fpos > { > private: > streamoff _M_off; > _StateT _M_state; > > public: > > > > > fpos() > : _M_off(0), _M_state() { } ># 133 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > fpos(streamoff __off) > : _M_off(__off), _M_state() { } > > > operator streamoff() const { return _M_off; } > > > void > state(_StateT __st) > { _M_state = __st; } > > > _StateT > state() const > { return _M_state; } > > > > > > fpos& > operator+=(streamoff __off) > { > _M_off += __off; > return *this; > } > > > > > > fpos& > operator-=(streamoff __off) > { > _M_off -= __off; > return *this; > } > > > > > > > > fpos > operator+(streamoff __off) const > { > fpos __pos(*this); > __pos += __off; > return __pos; > } > > > > > > > > fpos > operator-(streamoff __off) const > { > fpos __pos(*this); > __pos -= __off; > return __pos; > } > > > > > > > streamoff > operator-(const fpos& __other) const > { return _M_off - __other._M_off; } > }; > > > > > > > template<typename _StateT> > inline bool > operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) > { return streamoff(__lhs) == streamoff(__rhs); } > > template<typename _StateT> > inline bool > operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) > { return streamoff(__lhs) != streamoff(__rhs); } > > > > > > typedef fpos<mbstate_t> streampos; > > typedef fpos<mbstate_t> wstreampos; ># 239 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > >} ># 41 "/usr/include/c++/4.8.2/iosfwd" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 74 "/usr/include/c++/4.8.2/iosfwd" 3 > class ios_base; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_ios; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_streambuf; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_istream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_ostream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_iostream; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_stringbuf; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_istringstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_ostringstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_stringstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_filebuf; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_ifstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_ofstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_fstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class istreambuf_iterator; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class ostreambuf_iterator; > > > > typedef basic_ios<char> ios; > > > typedef basic_streambuf<char> streambuf; > > > typedef basic_istream<char> istream; > > > typedef basic_ostream<char> ostream; > > > typedef basic_iostream<char> iostream; > > > typedef basic_stringbuf<char> stringbuf; > > > typedef basic_istringstream<char> istringstream; > > > typedef basic_ostringstream<char> ostringstream; > > > typedef basic_stringstream<char> stringstream; > > > typedef basic_filebuf<char> filebuf; > > > typedef basic_ifstream<char> ifstream; > > > typedef basic_ofstream<char> ofstream; > > > typedef basic_fstream<char> fstream; > > > > typedef basic_ios<wchar_t> wios; > > > typedef basic_streambuf<wchar_t> wstreambuf; > > > typedef basic_istream<wchar_t> wistream; > > > typedef basic_ostream<wchar_t> wostream; > > > typedef basic_iostream<wchar_t> wiostream; > > > typedef basic_stringbuf<wchar_t> wstringbuf; > > > typedef basic_istringstream<wchar_t> wistringstream; > > > typedef basic_ostringstream<wchar_t> wostringstream; > > > typedef basic_stringstream<wchar_t> wstringstream; > > > typedef basic_filebuf<wchar_t> wfilebuf; > > > typedef basic_ifstream<wchar_t> wifstream; > > > typedef basic_ofstream<wchar_t> wofstream; > > > typedef basic_fstream<wchar_t> wfstream; > > > > >} ># 42 "/usr/include/c++/4.8.2/bits/localefwd.h" 2 3 ># 1 "/usr/include/c++/4.8.2/cctype" 1 3 ># 39 "/usr/include/c++/4.8.2/cctype" 3 ># 40 "/usr/include/c++/4.8.2/cctype" 3 > > ># 1 "/usr/include/ctype.h" 1 3 4 ># 26 "/usr/include/ctype.h" 3 4 ># 1 "/usr/include/bits/types.h" 1 3 4 ># 27 "/usr/include/bits/types.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 28 "/usr/include/bits/types.h" 2 3 4 > > >typedef unsigned char __u_char; >typedef unsigned short int __u_short; >typedef unsigned int __u_int; >typedef unsigned long int __u_long; > > >typedef signed char __int8_t; >typedef unsigned char __uint8_t; >typedef signed short int __int16_t; >typedef unsigned short int __uint16_t; >typedef signed int __int32_t; >typedef unsigned int __uint32_t; > >typedef signed long int __int64_t; >typedef unsigned long int __uint64_t; > > > > > > > >typedef long int __quad_t; >typedef unsigned long int __u_quad_t; ># 121 "/usr/include/bits/types.h" 3 4 ># 1 "/usr/include/bits/typesizes.h" 1 3 4 ># 122 "/usr/include/bits/types.h" 2 3 4 > > >typedef unsigned long int __dev_t; >typedef unsigned int __uid_t; >typedef unsigned int __gid_t; >typedef unsigned long int __ino_t; >typedef unsigned long int __ino64_t; >typedef unsigned int __mode_t; >typedef unsigned long int __nlink_t; >typedef long int __off_t; >typedef long int __off64_t; >typedef int __pid_t; >typedef struct { int __val[2]; } __fsid_t; >typedef long int __clock_t; >typedef unsigned long int __rlim_t; >typedef unsigned long int __rlim64_t; >typedef unsigned int __id_t; >typedef long int __time_t; >typedef unsigned int __useconds_t; >typedef long int __suseconds_t; > >typedef int __daddr_t; >typedef int __key_t; > > >typedef int __clockid_t; > > >typedef void * __timer_t; > > >typedef long int __blksize_t; > > > > >typedef long int __blkcnt_t; >typedef long int __blkcnt64_t; > > >typedef unsigned long int __fsblkcnt_t; >typedef unsigned long int __fsblkcnt64_t; > > >typedef unsigned long int __fsfilcnt_t; >typedef unsigned long int __fsfilcnt64_t; > > >typedef long int __fsword_t; > >typedef long int __ssize_t; > > >typedef long int __syscall_slong_t; > >typedef unsigned long int __syscall_ulong_t; > > > >typedef __off64_t __loff_t; >typedef __quad_t *__qaddr_t; >typedef char *__caddr_t; > > >typedef long int __intptr_t; > > >typedef unsigned int __socklen_t; ># 27 "/usr/include/ctype.h" 2 3 4 > >extern "C" { ># 39 "/usr/include/ctype.h" 3 4 ># 1 "/usr/include/endian.h" 1 3 4 ># 36 "/usr/include/endian.h" 3 4 ># 1 "/usr/include/bits/endian.h" 1 3 4 ># 37 "/usr/include/endian.h" 2 3 4 ># 60 "/usr/include/endian.h" 3 4 ># 1 "/usr/include/bits/byteswap.h" 1 3 4 ># 28 "/usr/include/bits/byteswap.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 29 "/usr/include/bits/byteswap.h" 2 3 4 > > > > > > ># 1 "/usr/include/bits/byteswap-16.h" 1 3 4 ># 36 "/usr/include/bits/byteswap.h" 2 3 4 ># 44 "/usr/include/bits/byteswap.h" 3 4 >static __inline unsigned int >__bswap_32 (unsigned int __bsx) >{ > return __builtin_bswap32 (__bsx); >} ># 108 "/usr/include/bits/byteswap.h" 3 4 >static __inline __uint64_t >__bswap_64 (__uint64_t __bsx) >{ > return __builtin_bswap64 (__bsx); >} ># 61 "/usr/include/endian.h" 2 3 4 ># 40 "/usr/include/ctype.h" 2 3 4 > > > > > > >enum >{ > _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)), > _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)), > _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)), > _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)), > _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)), > _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)), > _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)), > _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)), > _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)), > _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)), > _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)), > _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8)) >}; ># 79 "/usr/include/ctype.h" 3 4 >extern const unsigned short int **__ctype_b_loc (void) > throw () __attribute__ ((__const__)); >extern const __int32_t **__ctype_tolower_loc (void) > throw () __attribute__ ((__const__)); >extern const __int32_t **__ctype_toupper_loc (void) > throw () __attribute__ ((__const__)); ># 104 "/usr/include/ctype.h" 3 4 > > > > > > >extern int isalnum (int) throw (); >extern int isalpha (int) throw (); >extern int iscntrl (int) throw (); >extern int isdigit (int) throw (); >extern int islower (int) throw (); >extern int isgraph (int) throw (); >extern int isprint (int) throw (); >extern int ispunct (int) throw (); >extern int isspace (int) throw (); >extern int isupper (int) throw (); >extern int isxdigit (int) throw (); > > > >extern int tolower (int __c) throw (); > > >extern int toupper (int __c) throw (); ># 136 "/usr/include/ctype.h" 3 4 >extern int isblank (int) throw (); > > > > > > >extern int isctype (int __c, int __mask) throw (); > > > > > > >extern int isascii (int __c) throw (); > > > >extern int toascii (int __c) throw (); > > > >extern int _toupper (int) throw (); >extern int _tolower (int) throw (); ># 271 "/usr/include/ctype.h" 3 4 >extern int isalnum_l (int, __locale_t) throw (); >extern int isalpha_l (int, __locale_t) throw (); >extern int iscntrl_l (int, __locale_t) throw (); >extern int isdigit_l (int, __locale_t) throw (); >extern int islower_l (int, __locale_t) throw (); >extern int isgraph_l (int, __locale_t) throw (); >extern int isprint_l (int, __locale_t) throw (); >extern int ispunct_l (int, __locale_t) throw (); >extern int isspace_l (int, __locale_t) throw (); >extern int isupper_l (int, __locale_t) throw (); >extern int isxdigit_l (int, __locale_t) throw (); > >extern int isblank_l (int, __locale_t) throw (); > > > >extern int __tolower_l (int __c, __locale_t __l) throw (); >extern int tolower_l (int __c, __locale_t __l) throw (); > > >extern int __toupper_l (int __c, __locale_t __l) throw (); >extern int toupper_l (int __c, __locale_t __l) throw (); ># 347 "/usr/include/ctype.h" 3 4 >} ># 43 "/usr/include/c++/4.8.2/cctype" 2 3 ># 62 "/usr/include/c++/4.8.2/cctype" 3 >namespace std >{ > using ::isalnum; > using ::isalpha; > using ::iscntrl; > using ::isdigit; > using ::isgraph; > using ::islower; > using ::isprint; > using ::ispunct; > using ::isspace; > using ::isupper; > using ::isxdigit; > using ::tolower; > using ::toupper; >} ># 43 "/usr/include/c++/4.8.2/bits/localefwd.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 55 "/usr/include/c++/4.8.2/bits/localefwd.h" 3 > class locale; > > template<typename _Facet> > bool > has_facet(const locale&) throw(); > > template<typename _Facet> > const _Facet& > use_facet(const locale&); > > > template<typename _CharT> > bool > isspace(_CharT, const locale&); > > template<typename _CharT> > bool > isprint(_CharT, const locale&); > > template<typename _CharT> > bool > iscntrl(_CharT, const locale&); > > template<typename _CharT> > bool > isupper(_CharT, const locale&); > > template<typename _CharT> > bool > islower(_CharT, const locale&); > > template<typename _CharT> > bool > isalpha(_CharT, const locale&); > > template<typename _CharT> > bool > isdigit(_CharT, const locale&); > > template<typename _CharT> > bool > ispunct(_CharT, const locale&); > > template<typename _CharT> > bool > isxdigit(_CharT, const locale&); > > template<typename _CharT> > bool > isalnum(_CharT, const locale&); > > template<typename _CharT> > bool > isgraph(_CharT, const locale&); > > template<typename _CharT> > _CharT > toupper(_CharT, const locale&); > > template<typename _CharT> > _CharT > tolower(_CharT, const locale&); > > > class ctype_base; > template<typename _CharT> > class ctype; > template<> class ctype<char>; > > template<> class ctype<wchar_t>; > > template<typename _CharT> > class ctype_byname; > > > class codecvt_base; > template<typename _InternT, typename _ExternT, typename _StateT> > class codecvt; > template<> class codecvt<char, char, mbstate_t>; > > template<> class codecvt<wchar_t, char, mbstate_t>; > > template<typename _InternT, typename _ExternT, typename _StateT> > class codecvt_byname; > > > > template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> > > class num_get; > template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> > > class num_put; > > template<typename _CharT> class numpunct; > template<typename _CharT> class numpunct_byname; > > > template<typename _CharT> > class collate; > template<typename _CharT> class > collate_byname; > > > class time_base; > template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> > > class time_get; > template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> > > class time_get_byname; > template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> > > class time_put; > template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> > > class time_put_byname; > > > class money_base; > > template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> > > class money_get; > template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> > > class money_put; > > template<typename _CharT, bool _Intl = false> > class moneypunct; > template<typename _CharT, bool _Intl = false> > class moneypunct_byname; > > > class messages_base; > template<typename _CharT> > class messages; > template<typename _CharT> > class messages_byname; > > >} ># 39 "/usr/include/c++/4.8.2/locale" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/locale_classes.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 ># 38 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > > ># 1 "/usr/include/c++/4.8.2/string" 1 3 ># 36 "/usr/include/c++/4.8.2/string" 3 ># 37 "/usr/include/c++/4.8.2/string" 3 > > > ># 1 "/usr/include/c++/4.8.2/bits/char_traits.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 ># 38 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > ># 1 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 1 3 ># 60 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 ># 1 "/usr/include/c++/4.8.2/bits/functexcept.h" 1 3 ># 40 "/usr/include/c++/4.8.2/bits/functexcept.h" 3 ># 1 "/usr/include/c++/4.8.2/bits/exception_defines.h" 1 3 ># 41 "/usr/include/c++/4.8.2/bits/functexcept.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > void > __throw_bad_exception(void) __attribute__((__noreturn__)); > > > void > __throw_bad_alloc(void) __attribute__((__noreturn__)); > > > void > __throw_bad_cast(void) __attribute__((__noreturn__)); > > void > __throw_bad_typeid(void) __attribute__((__noreturn__)); > > > void > __throw_logic_error(const char*) __attribute__((__noreturn__)); > > void > __throw_domain_error(const char*) __attribute__((__noreturn__)); > > void > __throw_invalid_argument(const char*) __attribute__((__noreturn__)); > > void > __throw_length_error(const char*) __attribute__((__noreturn__)); > > void > __throw_out_of_range(const char*) __attribute__((__noreturn__)); > > void > __throw_runtime_error(const char*) __attribute__((__noreturn__)); > > void > __throw_range_error(const char*) __attribute__((__noreturn__)); > > void > __throw_overflow_error(const char*) __attribute__((__noreturn__)); > > void > __throw_underflow_error(const char*) __attribute__((__noreturn__)); > > > void > __throw_ios_failure(const char*) __attribute__((__noreturn__)); > > void > __throw_system_error(int) __attribute__((__noreturn__)); > > void > __throw_future_error(int) __attribute__((__noreturn__)); > > > void > __throw_bad_function_call() __attribute__((__noreturn__)); > > >} ># 61 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 1 3 ># 35 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 ># 36 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 ># 68 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _Iterator, typename _Container> > class __normal_iterator; > > >} > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > struct __true_type { }; > struct __false_type { }; > > template<bool> > struct __truth_type > { typedef __false_type __type; }; > > template<> > struct __truth_type<true> > { typedef __true_type __type; }; > > > > template<class _Sp, class _Tp> > struct __traitor > { > enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; > typedef typename __truth_type<__value>::__type __type; > }; > > > template<typename, typename> > struct __are_same > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<typename _Tp> > struct __are_same<_Tp, _Tp> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > template<typename _Tp> > struct __is_void > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<> > struct __is_void<void> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_integer > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > > > > template<> > struct __is_integer<bool> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<signed char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > template<> > struct __is_integer<wchar_t> > { > enum { __value = 1 }; > typedef __true_type __type; > }; ># 198 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 > template<> > struct __is_integer<short> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned short> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<int> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned int> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<long> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned long> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<long long> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned long long> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_floating > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > > template<> > struct __is_floating<float> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_floating<double> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_floating<long double> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_pointer > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<typename _Tp> > struct __is_pointer<_Tp*> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_normal_iterator > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<typename _Iterator, typename _Container> > struct __is_normal_iterator< __gnu_cxx::__normal_iterator<_Iterator, > _Container> > > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_arithmetic > : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > > { }; > > > > > template<typename _Tp> > struct __is_fundamental > : public __traitor<__is_void<_Tp>, __is_arithmetic<_Tp> > > { }; > > > > > template<typename _Tp> > struct __is_scalar > : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > > { }; > > > > > template<typename _Tp> > struct __is_char > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<> > struct __is_char<char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > template<> > struct __is_char<wchar_t> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > template<typename _Tp> > struct __is_byte > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<> > struct __is_byte<char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_byte<signed char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_byte<unsigned char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_move_iterator > { > enum { __value = 0 }; > typedef __false_type __type; > }; ># 421 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 > >} ># 62 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/ext/type_traits.h" 1 3 ># 32 "/usr/include/c++/4.8.2/ext/type_traits.h" 3 ># 33 "/usr/include/c++/4.8.2/ext/type_traits.h" 3 > > > > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > > template<bool, typename> > struct __enable_if > { }; > > template<typename _Tp> > struct __enable_if<true, _Tp> > { typedef _Tp __type; }; > > > > template<bool _Cond, typename _Iftrue, typename _Iffalse> > struct __conditional_type > { typedef _Iftrue __type; }; > > template<typename _Iftrue, typename _Iffalse> > struct __conditional_type<false, _Iftrue, _Iffalse> > { typedef _Iffalse __type; }; > > > > template<typename _Tp> > struct __add_unsigned > { > private: > typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type; > > public: > typedef typename __if_type::__type __type; > }; > > template<> > struct __add_unsigned<char> > { typedef unsigned char __type; }; > > template<> > struct __add_unsigned<signed char> > { typedef unsigned char __type; }; > > template<> > struct __add_unsigned<short> > { typedef unsigned short __type; }; > > template<> > struct __add_unsigned<int> > { typedef unsigned int __type; }; > > template<> > struct __add_unsigned<long> > { typedef unsigned long __type; }; > > template<> > struct __add_unsigned<long long> > { typedef unsigned long long __type; }; > > > template<> > struct __add_unsigned<bool>; > > template<> > struct __add_unsigned<wchar_t>; > > > > template<typename _Tp> > struct __remove_unsigned > { > private: > typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type; > > public: > typedef typename __if_type::__type __type; > }; > > template<> > struct __remove_unsigned<char> > { typedef signed char __type; }; > > template<> > struct __remove_unsigned<unsigned char> > { typedef signed char __type; }; > > template<> > struct __remove_unsigned<unsigned short> > { typedef short __type; }; > > template<> > struct __remove_unsigned<unsigned int> > { typedef int __type; }; > > template<> > struct __remove_unsigned<unsigned long> > { typedef long __type; }; > > template<> > struct __remove_unsigned<unsigned long long> > { typedef long long __type; }; > > > template<> > struct __remove_unsigned<bool>; > > template<> > struct __remove_unsigned<wchar_t>; > > > > template<typename _Type> > inline bool > __is_null_pointer(_Type* __ptr) > { return __ptr == 0; } > > template<typename _Type> > inline bool > __is_null_pointer(_Type) > { return false; } > > > > template<typename _Tp, bool = std::__is_integer<_Tp>::__value> > struct __promote > { typedef double __type; }; > > > > > template<typename _Tp> > struct __promote<_Tp, false> > { }; > > template<> > struct __promote<long double> > { typedef long double __type; }; > > template<> > struct __promote<double> > { typedef double __type; }; > > template<> > struct __promote<float> > { typedef float __type; }; > > template<typename _Tp, typename _Up, > typename _Tp2 = typename __promote<_Tp>::__type, > typename _Up2 = typename __promote<_Up>::__type> > struct __promote_2 > { > typedef __typeof__(_Tp2() + _Up2()) __type; > }; > > template<typename _Tp, typename _Up, typename _Vp, > typename _Tp2 = typename __promote<_Tp>::__type, > typename _Up2 = typename __promote<_Up>::__type, > typename _Vp2 = typename __promote<_Vp>::__type> > struct __promote_3 > { > typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type; > }; > > template<typename _Tp, typename _Up, typename _Vp, typename _Wp, > typename _Tp2 = typename __promote<_Tp>::__type, > typename _Up2 = typename __promote<_Up>::__type, > typename _Vp2 = typename __promote<_Vp>::__type, > typename _Wp2 = typename __promote<_Wp>::__type> > struct __promote_4 > { > typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type; > }; > > >} ># 63 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 1 3 ># 32 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 3 ># 33 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 3 > > > > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ ># 54 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 3 > template<typename _Value> > struct __numeric_traits_integer > { > > static const _Value __min = (((_Value)(-1) < 0) ? (_Value)1 << (sizeof(_Value) * 8 - ((_Value)(-1) < 0)) : (_Value)0); > static const _Value __max = (((_Value)(-1) < 0) ? (((((_Value)1 << ((sizeof(_Value) * 8 - ((_Value)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(_Value)0); > > > > static const bool __is_signed = ((_Value)(-1) < 0); > static const int __digits = (sizeof(_Value) * 8 - ((_Value)(-1) < 0)); > }; > > template<typename _Value> > const _Value __numeric_traits_integer<_Value>::__min; > > template<typename _Value> > const _Value __numeric_traits_integer<_Value>::__max; > > template<typename _Value> > const bool __numeric_traits_integer<_Value>::__is_signed; > > template<typename _Value> > const int __numeric_traits_integer<_Value>::__digits; ># 99 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 3 > template<typename _Value> > struct __numeric_traits_floating > { > > static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 643L / 2136); > > > static const bool __is_signed = true; > static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18); > static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932); > }; > > template<typename _Value> > const int __numeric_traits_floating<_Value>::__max_digits10; > > template<typename _Value> > const bool __numeric_traits_floating<_Value>::__is_signed; > > template<typename _Value> > const int __numeric_traits_floating<_Value>::__digits10; > > template<typename _Value> > const int __numeric_traits_floating<_Value>::__max_exponent10; > > template<typename _Value> > struct __numeric_traits > : public __conditional_type<std::__is_integer<_Value>::__value, > __numeric_traits_integer<_Value>, > __numeric_traits_floating<_Value> >::__type > { }; > > >} ># 64 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_pair.h" 1 3 ># 59 "/usr/include/c++/4.8.2/bits/stl_pair.h" 3 ># 1 "/usr/include/c++/4.8.2/bits/move.h" 1 3 ># 34 "/usr/include/c++/4.8.2/bits/move.h" 3 ># 1 "/usr/include/c++/4.8.2/bits/concept_check.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/concept_check.h" 3 ># 34 "/usr/include/c++/4.8.2/bits/concept_check.h" 3 ># 35 "/usr/include/c++/4.8.2/bits/move.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > > template<typename _Tp> > inline _Tp* > __addressof(_Tp& __r) > { > return reinterpret_cast<_Tp*> > (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r))); > } > > >} ># 149 "/usr/include/c++/4.8.2/bits/move.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 164 "/usr/include/c++/4.8.2/bits/move.h" 3 > template<typename _Tp> > inline void > swap(_Tp& __a, _Tp& __b) > > > > > { > > > > _Tp __tmp = (__a); > __a = (__b); > __b = (__tmp); > } > > > > > template<typename _Tp, size_t _Nm> > inline void > swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) > > > > { > for (size_t __n = 0; __n < _Nm; ++__n) > swap(__a[__n], __b[__n]); > } > > > >} ># 60 "/usr/include/c++/4.8.2/bits/stl_pair.h" 2 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 95 "/usr/include/c++/4.8.2/bits/stl_pair.h" 3 > template<class _T1, class _T2> > struct pair > { > typedef _T1 first_type; > typedef _T2 second_type; > > _T1 first; > _T2 second; > > > > > > pair() > : first(), second() { } > > > pair(const _T1& __a, const _T2& __b) > : first(__a), second(__b) { } > > > > template<class _U1, class _U2> > pair(const pair<_U1, _U2>& __p) > : first(__p.first), second(__p.second) { } ># 209 "/usr/include/c++/4.8.2/bits/stl_pair.h" 3 > }; > > > template<class _T1, class _T2> > inline bool > operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return __x.first == __y.first && __x.second == __y.second; } > > > template<class _T1, class _T2> > inline bool > operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return __x.first < __y.first > || (!(__y.first < __x.first) && __x.second < __y.second); } > > > template<class _T1, class _T2> > inline bool > operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return !(__x == __y); } > > > template<class _T1, class _T2> > inline bool > operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return __y < __x; } > > > template<class _T1, class _T2> > inline bool > operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return !(__y < __x); } > > > template<class _T1, class _T2> > inline bool > operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return !(__x < __y); } ># 284 "/usr/include/c++/4.8.2/bits/stl_pair.h" 3 > template<class _T1, class _T2> > inline pair<_T1, _T2> > make_pair(_T1 __x, _T2 __y) > { return pair<_T1, _T2>(__x, __y); } > > > > > >} ># 65 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 1 3 ># 62 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 ># 63 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > > > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 89 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > struct input_iterator_tag { }; > > > struct output_iterator_tag { }; > > > struct forward_iterator_tag : public input_iterator_tag { }; > > > > struct bidirectional_iterator_tag : public forward_iterator_tag { }; > > > > struct random_access_iterator_tag : public bidirectional_iterator_tag { }; ># 116 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, > typename _Pointer = _Tp*, typename _Reference = _Tp&> > struct iterator > { > > typedef _Category iterator_category; > > typedef _Tp value_type; > > typedef _Distance difference_type; > > typedef _Pointer pointer; > > typedef _Reference reference; > }; ># 162 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > template<typename _Iterator> > struct iterator_traits > { > typedef typename _Iterator::iterator_category iterator_category; > typedef typename _Iterator::value_type value_type; > typedef typename _Iterator::difference_type difference_type; > typedef typename _Iterator::pointer pointer; > typedef typename _Iterator::reference reference; > }; > > > > template<typename _Tp> > struct iterator_traits<_Tp*> > { > typedef random_access_iterator_tag iterator_category; > typedef _Tp value_type; > typedef ptrdiff_t difference_type; > typedef _Tp* pointer; > typedef _Tp& reference; > }; > > > template<typename _Tp> > struct iterator_traits<const _Tp*> > { > typedef random_access_iterator_tag iterator_category; > typedef _Tp value_type; > typedef ptrdiff_t difference_type; > typedef const _Tp* pointer; > typedef const _Tp& reference; > }; > > > > > > template<typename _Iter> > inline typename iterator_traits<_Iter>::iterator_category > __iterator_category(const _Iter&) > { return typename iterator_traits<_Iter>::iterator_category(); } > > > > > > template<typename _Iterator, bool _HasBase> > struct _Iter_base > { > typedef _Iterator iterator_type; > static iterator_type _S_base(_Iterator __it) > { return __it; } > }; > > template<typename _Iterator> > struct _Iter_base<_Iterator, true> > { > typedef typename _Iterator::iterator_type iterator_type; > static iterator_type _S_base(_Iterator __it) > { return __it.base(); } > }; ># 232 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > >} ># 66 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 1 3 ># 62 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 ># 63 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > > ># 1 "/usr/include/c++/4.8.2/debug/debug.h" 1 3 ># 46 "/usr/include/c++/4.8.2/debug/debug.h" 3 >namespace std >{ > namespace __debug { } >} > > > > >namespace __gnu_debug >{ > using namespace std::__debug; >} ># 66 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _InputIterator> > inline typename iterator_traits<_InputIterator>::difference_type > __distance(_InputIterator __first, _InputIterator __last, > input_iterator_tag) > { > > > > typename iterator_traits<_InputIterator>::difference_type __n = 0; > while (__first != __last) > { > ++__first; > ++__n; > } > return __n; > } > > template<typename _RandomAccessIterator> > inline typename iterator_traits<_RandomAccessIterator>::difference_type > __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, > random_access_iterator_tag) > { > > > > return __last - __first; > } ># 112 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > template<typename _InputIterator> > inline typename iterator_traits<_InputIterator>::difference_type > distance(_InputIterator __first, _InputIterator __last) > { > > return std::__distance(__first, __last, > std::__iterator_category(__first)); > } > > template<typename _InputIterator, typename _Distance> > inline void > __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) > { > > > ; > while (__n--) > ++__i; > } > > template<typename _BidirectionalIterator, typename _Distance> > inline void > __advance(_BidirectionalIterator& __i, _Distance __n, > bidirectional_iterator_tag) > { > > > > if (__n > 0) > while (__n--) > ++__i; > else > while (__n++) > --__i; > } > > template<typename _RandomAccessIterator, typename _Distance> > inline void > __advance(_RandomAccessIterator& __i, _Distance __n, > random_access_iterator_tag) > { > > > > __i += __n; > } ># 171 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > template<typename _InputIterator, typename _Distance> > inline void > advance(_InputIterator& __i, _Distance __n) > { > > typename iterator_traits<_InputIterator>::difference_type __d = __n; > std::__advance(__i, __d, std::__iterator_category(__i)); > } ># 202 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > >} ># 67 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 1 3 ># 67 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 95 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Iterator> > class reverse_iterator > : public iterator<typename iterator_traits<_Iterator>::iterator_category, > typename iterator_traits<_Iterator>::value_type, > typename iterator_traits<_Iterator>::difference_type, > typename iterator_traits<_Iterator>::pointer, > typename iterator_traits<_Iterator>::reference> > { > protected: > _Iterator current; > > typedef iterator_traits<_Iterator> __traits_type; > > public: > typedef _Iterator iterator_type; > typedef typename __traits_type::difference_type difference_type; > typedef typename __traits_type::pointer pointer; > typedef typename __traits_type::reference reference; > > > > > > > > reverse_iterator() : current() { } > > > > > explicit > reverse_iterator(iterator_type __x) : current(__x) { } > > > > > reverse_iterator(const reverse_iterator& __x) > : current(__x.current) { } > > > > > > template<typename _Iter> > reverse_iterator(const reverse_iterator<_Iter>& __x) > : current(__x.base()) { } > > > > > iterator_type > base() const > { return current; } ># 159 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > reference > operator*() const > { > _Iterator __tmp = current; > return *--__tmp; > } > > > > > > > pointer > operator->() const > { return &(operator*()); } > > > > > > > reverse_iterator& > operator++() > { > --current; > return *this; > } > > > > > > > reverse_iterator > operator++(int) > { > reverse_iterator __tmp = *this; > --current; > return __tmp; > } > > > > > > > reverse_iterator& > operator--() > { > ++current; > return *this; > } > > > > > > > reverse_iterator > operator--(int) > { > reverse_iterator __tmp = *this; > ++current; > return __tmp; > } > > > > > > > reverse_iterator > operator+(difference_type __n) const > { return reverse_iterator(current - __n); } > > > > > > > > reverse_iterator& > operator+=(difference_type __n) > { > current -= __n; > return *this; > } > > > > > > > reverse_iterator > operator-(difference_type __n) const > { return reverse_iterator(current + __n); } > > > > > > > > reverse_iterator& > operator-=(difference_type __n) > { > current += __n; > return *this; > } > > > > > > > reference > operator[](difference_type __n) const > { return *(*this + __n); } > }; ># 289 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Iterator> > inline bool > operator==(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return __x.base() == __y.base(); } > > template<typename _Iterator> > inline bool > operator<(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return __y.base() < __x.base(); } > > template<typename _Iterator> > inline bool > operator!=(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return !(__x == __y); } > > template<typename _Iterator> > inline bool > operator>(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return __y < __x; } > > template<typename _Iterator> > inline bool > operator<=(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return !(__y < __x); } > > template<typename _Iterator> > inline bool > operator>=(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return !(__x < __y); } > > template<typename _Iterator> > inline typename reverse_iterator<_Iterator>::difference_type > operator-(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return __y.base() - __x.base(); } > > template<typename _Iterator> > inline reverse_iterator<_Iterator> > operator+(typename reverse_iterator<_Iterator>::difference_type __n, > const reverse_iterator<_Iterator>& __x) > { return reverse_iterator<_Iterator>(__x.base() - __n); } > > > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator==(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return __x.base() == __y.base(); } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator<(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return __y.base() < __x.base(); } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator!=(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return !(__x == __y); } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator>(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return __y < __x; } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator<=(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return !(__y < __x); } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator>=(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return !(__x < __y); } > > template<typename _IteratorL, typename _IteratorR> > > > > > > > > inline typename reverse_iterator<_IteratorL>::difference_type > operator-(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > > { return __y.base() - __x.base(); } ># 401 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > class back_insert_iterator > : public iterator<output_iterator_tag, void, void, void, void> > { > protected: > _Container* container; > > public: > > typedef _Container container_type; > > > explicit > back_insert_iterator(_Container& __x) : container(&__x) { } ># 428 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > back_insert_iterator& > operator=(typename _Container::const_reference __value) > { > container->push_back(__value); > return *this; > } ># 451 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > back_insert_iterator& > operator*() > { return *this; } > > > back_insert_iterator& > operator++() > { return *this; } > > > back_insert_iterator > operator++(int) > { return *this; } > }; ># 477 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > inline back_insert_iterator<_Container> > back_inserter(_Container& __x) > { return back_insert_iterator<_Container>(__x); } ># 492 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > class front_insert_iterator > : public iterator<output_iterator_tag, void, void, void, void> > { > protected: > _Container* container; > > public: > > typedef _Container container_type; > > > explicit front_insert_iterator(_Container& __x) : container(&__x) { } ># 518 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > front_insert_iterator& > operator=(typename _Container::const_reference __value) > { > container->push_front(__value); > return *this; > } ># 541 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > front_insert_iterator& > operator*() > { return *this; } > > > front_insert_iterator& > operator++() > { return *this; } > > > front_insert_iterator > operator++(int) > { return *this; } > }; ># 567 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > inline front_insert_iterator<_Container> > front_inserter(_Container& __x) > { return front_insert_iterator<_Container>(__x); } ># 586 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > class insert_iterator > : public iterator<output_iterator_tag, void, void, void, void> > { > protected: > _Container* container; > typename _Container::iterator iter; > > public: > > typedef _Container container_type; > > > > > > insert_iterator(_Container& __x, typename _Container::iterator __i) > : container(&__x), iter(__i) {} ># 629 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > insert_iterator& > operator=(typename _Container::const_reference __value) > { > iter = container->insert(iter, __value); > ++iter; > return *this; > } ># 655 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > insert_iterator& > operator*() > { return *this; } > > > insert_iterator& > operator++() > { return *this; } > > > insert_iterator& > operator++(int) > { return *this; } > }; ># 681 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container, typename _Iterator> > inline insert_iterator<_Container> > inserter(_Container& __x, _Iterator __i) > { > return insert_iterator<_Container>(__x, > typename _Container::iterator(__i)); > } > > > > >} > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ ># 705 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > using std::iterator_traits; > using std::iterator; > template<typename _Iterator, typename _Container> > class __normal_iterator > { > protected: > _Iterator _M_current; > > typedef iterator_traits<_Iterator> __traits_type; > > public: > typedef _Iterator iterator_type; > typedef typename __traits_type::iterator_category iterator_category; > typedef typename __traits_type::value_type value_type; > typedef typename __traits_type::difference_type difference_type; > typedef typename __traits_type::reference reference; > typedef typename __traits_type::pointer pointer; > > __normal_iterator() : _M_current(_Iterator()) { } > > explicit > __normal_iterator(const _Iterator& __i) : _M_current(__i) { } > > > template<typename _Iter> > __normal_iterator(const __normal_iterator<_Iter, > typename __enable_if< > (std::__are_same<_Iter, typename _Container::pointer>::__value), > _Container>::__type>& __i) > : _M_current(__i.base()) { } > > > reference > operator*() const > { return *_M_current; } > > pointer > operator->() const > { return _M_current; } > > __normal_iterator& > operator++() > { > ++_M_current; > return *this; > } > > __normal_iterator > operator++(int) > { return __normal_iterator(_M_current++); } > > > __normal_iterator& > operator--() > { > --_M_current; > return *this; > } > > __normal_iterator > operator--(int) > { return __normal_iterator(_M_current--); } > > > reference > operator[](const difference_type& __n) const > { return _M_current[__n]; } > > __normal_iterator& > operator+=(const difference_type& __n) > { _M_current += __n; return *this; } > > __normal_iterator > operator+(const difference_type& __n) const > { return __normal_iterator(_M_current + __n); } > > __normal_iterator& > operator-=(const difference_type& __n) > { _M_current -= __n; return *this; } > > __normal_iterator > operator-(const difference_type& __n) const > { return __normal_iterator(_M_current - __n); } > > const _Iterator& > base() const > { return _M_current; } > }; ># 803 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() == __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator==(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() == __rhs.base(); } > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() != __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() != __rhs.base(); } > > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() < __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator<(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() < __rhs.base(); } > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() > __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator>(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() > __rhs.base(); } > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() <= __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() <= __rhs.base(); } > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() >= __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() >= __rhs.base(); } > > > > > > template<typename _IteratorL, typename _IteratorR, typename _Container> > > > > > > > > inline typename __normal_iterator<_IteratorL, _Container>::difference_type > operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > > { return __lhs.base() - __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline typename __normal_iterator<_Iterator, _Container>::difference_type > operator-(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() - __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline __normal_iterator<_Iterator, _Container> > operator+(typename __normal_iterator<_Iterator, _Container>::difference_type > __n, const __normal_iterator<_Iterator, _Container>& __i) > { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } > > >} ># 68 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > template<bool _BoolType> > struct __iter_swap > { > template<typename _ForwardIterator1, typename _ForwardIterator2> > static void > iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) > { > typedef typename iterator_traits<_ForwardIterator1>::value_type > _ValueType1; > _ValueType1 __tmp = (*__a); > *__a = (*__b); > *__b = (__tmp); > } > }; > > template<> > struct __iter_swap<true> > { > template<typename _ForwardIterator1, typename _ForwardIterator2> > static void > iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) > { > swap(*__a, *__b); > } > }; ># 117 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator1, typename _ForwardIterator2> > inline void > iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) > { > > > > > > > > typedef typename iterator_traits<_ForwardIterator1>::value_type > _ValueType1; > typedef typename iterator_traits<_ForwardIterator2>::value_type > _ValueType2; > > > > > > > typedef typename iterator_traits<_ForwardIterator1>::reference > _ReferenceType1; > typedef typename iterator_traits<_ForwardIterator2>::reference > _ReferenceType2; > std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value > && __are_same<_ValueType1&, _ReferenceType1>::__value > && __are_same<_ValueType2&, _ReferenceType2>::__value>:: > iter_swap(__a, __b); > > > > } ># 163 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator1, typename _ForwardIterator2> > _ForwardIterator2 > swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, > _ForwardIterator2 __first2) > { > > > > > > ; > > for (; __first1 != __last1; ++__first1, ++__first2) > std::iter_swap(__first1, __first2); > return __first2; > } ># 191 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _Tp> > inline const _Tp& > min(const _Tp& __a, const _Tp& __b) > { > > > > if (__b < __a) > return __b; > return __a; > } ># 214 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _Tp> > inline const _Tp& > max(const _Tp& __a, const _Tp& __b) > { > > > > if (__a < __b) > return __b; > return __a; > } ># 237 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _Tp, typename _Compare> > inline const _Tp& > min(const _Tp& __a, const _Tp& __b, _Compare __comp) > { > > if (__comp(__b, __a)) > return __b; > return __a; > } ># 258 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _Tp, typename _Compare> > inline const _Tp& > max(const _Tp& __a, const _Tp& __b, _Compare __comp) > { > > if (__comp(__a, __b)) > return __b; > return __a; > } > > > > template<typename _Iterator> > struct _Niter_base > : _Iter_base<_Iterator, __is_normal_iterator<_Iterator>::__value> > { }; > > template<typename _Iterator> > inline typename _Niter_base<_Iterator>::iterator_type > __niter_base(_Iterator __it) > { return std::_Niter_base<_Iterator>::_S_base(__it); } > > > template<typename _Iterator> > struct _Miter_base > : _Iter_base<_Iterator, __is_move_iterator<_Iterator>::__value> > { }; > > template<typename _Iterator> > inline typename _Miter_base<_Iterator>::iterator_type > __miter_base(_Iterator __it) > { return std::_Miter_base<_Iterator>::_S_base(__it); } > > > > > > > > template<bool, bool, typename> > struct __copy_move > { > template<typename _II, typename _OI> > static _OI > __copy_m(_II __first, _II __last, _OI __result) > { > for (; __first != __last; ++__result, ++__first) > *__result = *__first; > return __result; > } > }; ># 325 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<> > struct __copy_move<false, false, random_access_iterator_tag> > { > template<typename _II, typename _OI> > static _OI > __copy_m(_II __first, _II __last, _OI __result) > { > typedef typename iterator_traits<_II>::difference_type _Distance; > for(_Distance __n = __last - __first; __n > 0; --__n) > { > *__result = *__first; > ++__first; > ++__result; > } > return __result; > } > }; ># 363 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<bool _IsMove> > struct __copy_move<_IsMove, true, random_access_iterator_tag> > { > template<typename _Tp> > static _Tp* > __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result) > { > const ptrdiff_t _Num = __last - __first; > if (_Num) > __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); > return __result + _Num; > } > }; > > template<bool _IsMove, typename _II, typename _OI> > inline _OI > __copy_move_a(_II __first, _II __last, _OI __result) > { > typedef typename iterator_traits<_II>::value_type _ValueTypeI; > typedef typename iterator_traits<_OI>::value_type _ValueTypeO; > typedef typename iterator_traits<_II>::iterator_category _Category; > const bool __simple = (__is_trivial(_ValueTypeI) > && __is_pointer<_II>::__value > && __is_pointer<_OI>::__value > && __are_same<_ValueTypeI, _ValueTypeO>::__value); > > return std::__copy_move<_IsMove, __simple, > _Category>::__copy_m(__first, __last, __result); > } > > > > template<typename _CharT> > struct char_traits; > > template<typename _CharT, typename _Traits> > class istreambuf_iterator; > > template<typename _CharT, typename _Traits> > class ostreambuf_iterator; > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type > __copy_move_a2(_CharT*, _CharT*, > ostreambuf_iterator<_CharT, char_traits<_CharT> >); > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type > __copy_move_a2(const _CharT*, const _CharT*, > ostreambuf_iterator<_CharT, char_traits<_CharT> >); > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > _CharT*>::__type > __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, > istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); > > template<bool _IsMove, typename _II, typename _OI> > inline _OI > __copy_move_a2(_II __first, _II __last, _OI __result) > { > return _OI(std::__copy_move_a<_IsMove>(std::__niter_base(__first), > std::__niter_base(__last), > std::__niter_base(__result))); > } ># 448 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _II, typename _OI> > inline _OI > copy(_II __first, _II __last, _OI __result) > { > > > > > ; > > return (std::__copy_move_a2<__is_move_iterator<_II>::__value> > (std::__miter_base(__first), std::__miter_base(__last), > __result)); > } ># 500 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<bool, bool, typename> > struct __copy_move_backward > { > template<typename _BI1, typename _BI2> > static _BI2 > __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) > { > while (__first != __last) > *--__result = *--__last; > return __result; > } > }; ># 528 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<> > struct __copy_move_backward<false, false, random_access_iterator_tag> > { > template<typename _BI1, typename _BI2> > static _BI2 > __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) > { > typename iterator_traits<_BI1>::difference_type __n; > for (__n = __last - __first; __n > 0; --__n) > *--__result = *--__last; > return __result; > } > }; ># 558 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<bool _IsMove> > struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> > { > template<typename _Tp> > static _Tp* > __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result) > { > const ptrdiff_t _Num = __last - __first; > if (_Num) > __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); > return __result - _Num; > } > }; > > template<bool _IsMove, typename _BI1, typename _BI2> > inline _BI2 > __copy_move_backward_a(_BI1 __first, _BI1 __last, _BI2 __result) > { > typedef typename iterator_traits<_BI1>::value_type _ValueType1; > typedef typename iterator_traits<_BI2>::value_type _ValueType2; > typedef typename iterator_traits<_BI1>::iterator_category _Category; > const bool __simple = (__is_trivial(_ValueType1) > && __is_pointer<_BI1>::__value > && __is_pointer<_BI2>::__value > && __are_same<_ValueType1, _ValueType2>::__value); > > return std::__copy_move_backward<_IsMove, __simple, > _Category>::__copy_move_b(__first, > __last, > __result); > } > > template<bool _IsMove, typename _BI1, typename _BI2> > inline _BI2 > __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) > { > return _BI2(std::__copy_move_backward_a<_IsMove> > (std::__niter_base(__first), std::__niter_base(__last), > std::__niter_base(__result))); > } ># 617 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _BI1, typename _BI2> > inline _BI2 > copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) > { > > > > > > > ; > > return (std::__copy_move_backward_a2<__is_move_iterator<_BI1>::__value> > (std::__miter_base(__first), std::__miter_base(__last), > __result)); > } ># 675 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator, typename _Tp> > inline typename > __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type > __fill_a(_ForwardIterator __first, _ForwardIterator __last, > const _Tp& __value) > { > for (; __first != __last; ++__first) > *__first = __value; > } > > template<typename _ForwardIterator, typename _Tp> > inline typename > __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type > __fill_a(_ForwardIterator __first, _ForwardIterator __last, > const _Tp& __value) > { > const _Tp __tmp = __value; > for (; __first != __last; ++__first) > *__first = __tmp; > } > > > template<typename _Tp> > inline typename > __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type > __fill_a(_Tp* __first, _Tp* __last, const _Tp& __c) > { > const _Tp __tmp = __c; > __builtin_memset(__first, static_cast<unsigned char>(__tmp), > __last - __first); > } ># 719 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator, typename _Tp> > inline void > fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) > { > > > > ; > > std::__fill_a(std::__niter_base(__first), std::__niter_base(__last), > __value); > } > > template<typename _OutputIterator, typename _Size, typename _Tp> > inline typename > __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type > __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) > { > for (__decltype(__n + 0) __niter = __n; > __niter > 0; --__niter, ++__first) > *__first = __value; > return __first; > } > > template<typename _OutputIterator, typename _Size, typename _Tp> > inline typename > __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type > __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) > { > const _Tp __tmp = __value; > for (__decltype(__n + 0) __niter = __n; > __niter > 0; --__niter, ++__first) > *__first = __tmp; > return __first; > } > > template<typename _Size, typename _Tp> > inline typename > __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, _Tp*>::__type > __fill_n_a(_Tp* __first, _Size __n, const _Tp& __c) > { > std::__fill_a(__first, __first + __n, __c); > return __first + __n; > } ># 779 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _OI, typename _Size, typename _Tp> > inline _OI > fill_n(_OI __first, _Size __n, const _Tp& __value) > { > > > > return _OI(std::__fill_n_a(std::__niter_base(__first), __n, __value)); > } > > template<bool _BoolType> > struct __equal > { > template<typename _II1, typename _II2> > static bool > equal(_II1 __first1, _II1 __last1, _II2 __first2) > { > for (; __first1 != __last1; ++__first1, ++__first2) > if (!(*__first1 == *__first2)) > return false; > return true; > } > }; > > template<> > struct __equal<true> > { > template<typename _Tp> > static bool > equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) > { > return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) > * (__last1 - __first1)); > } > }; > > template<typename _II1, typename _II2> > inline bool > __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) > { > typedef typename iterator_traits<_II1>::value_type _ValueType1; > typedef typename iterator_traits<_II2>::value_type _ValueType2; > const bool __simple = ((__is_integer<_ValueType1>::__value > || __is_pointer<_ValueType1>::__value) > && __is_pointer<_II1>::__value > && __is_pointer<_II2>::__value > && __are_same<_ValueType1, _ValueType2>::__value); > > return std::__equal<__simple>::equal(__first1, __last1, __first2); > } > > > template<typename, typename> > struct __lc_rai > { > template<typename _II1, typename _II2> > static _II1 > __newlast1(_II1, _II1 __last1, _II2, _II2) > { return __last1; } > > template<typename _II> > static bool > __cnd2(_II __first, _II __last) > { return __first != __last; } > }; > > template<> > struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag> > { > template<typename _RAI1, typename _RAI2> > static _RAI1 > __newlast1(_RAI1 __first1, _RAI1 __last1, > _RAI2 __first2, _RAI2 __last2) > { > const typename iterator_traits<_RAI1>::difference_type > __diff1 = __last1 - __first1; > const typename iterator_traits<_RAI2>::difference_type > __diff2 = __last2 - __first2; > return __diff2 < __diff1 ? __first1 + __diff2 : __last1; > } > > template<typename _RAI> > static bool > __cnd2(_RAI, _RAI) > { return true; } > }; > > template<bool _BoolType> > struct __lexicographical_compare > { > template<typename _II1, typename _II2> > static bool __lc(_II1, _II1, _II2, _II2); > }; > > template<bool _BoolType> > template<typename _II1, typename _II2> > bool > __lexicographical_compare<_BoolType>:: > __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) > { > typedef typename iterator_traits<_II1>::iterator_category _Category1; > typedef typename iterator_traits<_II2>::iterator_category _Category2; > typedef std::__lc_rai<_Category1, _Category2> __rai_type; > > __last1 = __rai_type::__newlast1(__first1, __last1, > __first2, __last2); > for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); > ++__first1, ++__first2) > { > if (*__first1 < *__first2) > return true; > if (*__first2 < *__first1) > return false; > } > return __first1 == __last1 && __first2 != __last2; > } > > template<> > struct __lexicographical_compare<true> > { > template<typename _Tp, typename _Up> > static bool > __lc(const _Tp* __first1, const _Tp* __last1, > const _Up* __first2, const _Up* __last2) > { > const size_t __len1 = __last1 - __first1; > const size_t __len2 = __last2 - __first2; > const int __result = __builtin_memcmp(__first1, __first2, > std::min(__len1, __len2)); > return __result != 0 ? __result < 0 : __len1 < __len2; > } > }; > > template<typename _II1, typename _II2> > inline bool > __lexicographical_compare_aux(_II1 __first1, _II1 __last1, > _II2 __first2, _II2 __last2) > { > typedef typename iterator_traits<_II1>::value_type _ValueType1; > typedef typename iterator_traits<_II2>::value_type _ValueType2; > const bool __simple = > (__is_byte<_ValueType1>::__value && __is_byte<_ValueType2>::__value > && !__gnu_cxx::__numeric_traits<_ValueType1>::__is_signed > && !__gnu_cxx::__numeric_traits<_ValueType2>::__is_signed > && __is_pointer<_II1>::__value > && __is_pointer<_II2>::__value); > > return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, > __first2, __last2); > } ># 941 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator, typename _Tp> > _ForwardIterator > lower_bound(_ForwardIterator __first, _ForwardIterator __last, > const _Tp& __val) > { > > > > > typedef typename iterator_traits<_ForwardIterator>::difference_type > _DistanceType; > > > > > ; > > _DistanceType __len = std::distance(__first, __last); > > while (__len > 0) > { > _DistanceType __half = __len >> 1; > _ForwardIterator __middle = __first; > std::advance(__middle, __half); > if (*__middle < __val) > { > __first = __middle; > ++__first; > __len = __len - __half - 1; > } > else > __len = __half; > } > return __first; > } > > > > inline int > __lg(int __n) > { return sizeof(int) * 8 - 1 - __builtin_clz(__n); } > > inline unsigned > __lg(unsigned __n) > { return sizeof(int) * 8 - 1 - __builtin_clz(__n); } > > inline long > __lg(long __n) > { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); } > > inline unsigned long > __lg(unsigned long __n) > { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); } > > inline long long > __lg(long long __n) > { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); } > > inline unsigned long long > __lg(unsigned long long __n) > { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); } ># 1019 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _II1, typename _II2> > inline bool > equal(_II1 __first1, _II1 __last1, _II2 __first2) > { > > > > > > > ; > > return std::__equal_aux(std::__niter_base(__first1), > std::__niter_base(__last1), > std::__niter_base(__first2)); > } ># 1051 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _IIter1, typename _IIter2, typename _BinaryPredicate> > inline bool > equal(_IIter1 __first1, _IIter1 __last1, > _IIter2 __first2, _BinaryPredicate __binary_pred) > { > > > > ; > > for (; __first1 != __last1; ++__first1, ++__first2) > if (!bool(__binary_pred(*__first1, *__first2))) > return false; > return true; > } ># 1082 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _II1, typename _II2> > inline bool > lexicographical_compare(_II1 __first1, _II1 __last1, > _II2 __first2, _II2 __last2) > { ># 1096 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > ; > ; > > return std::__lexicographical_compare_aux(std::__niter_base(__first1), > std::__niter_base(__last1), > std::__niter_base(__first2), > std::__niter_base(__last2)); > } ># 1118 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _II1, typename _II2, typename _Compare> > bool > lexicographical_compare(_II1 __first1, _II1 __last1, > _II2 __first2, _II2 __last2, _Compare __comp) > { > typedef typename iterator_traits<_II1>::iterator_category _Category1; > typedef typename iterator_traits<_II2>::iterator_category _Category2; > typedef std::__lc_rai<_Category1, _Category2> __rai_type; > > > > > ; > ; > > __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); > for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); > ++__first1, ++__first2) > { > if (__comp(*__first1, *__first2)) > return true; > if (__comp(*__first2, *__first1)) > return false; > } > return __first1 == __last1 && __first2 != __last2; > } ># 1158 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _InputIterator1, typename _InputIterator2> > pair<_InputIterator1, _InputIterator2> > mismatch(_InputIterator1 __first1, _InputIterator1 __last1, > _InputIterator2 __first2) > { > > > > > > > ; > > while (__first1 != __last1 && *__first1 == *__first2) > { > ++__first1; > ++__first2; > } > return pair<_InputIterator1, _InputIterator2>(__first1, __first2); > } ># 1195 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _InputIterator1, typename _InputIterator2, > typename _BinaryPredicate> > pair<_InputIterator1, _InputIterator2> > mismatch(_InputIterator1 __first1, _InputIterator1 __last1, > _InputIterator2 __first2, _BinaryPredicate __binary_pred) > { > > > > ; > > while (__first1 != __last1 && bool(__binary_pred(*__first1, *__first2))) > { > ++__first1; > ++__first2; > } > return pair<_InputIterator1, _InputIterator2>(__first1, __first2); > } > > >} ># 40 "/usr/include/c++/4.8.2/bits/char_traits.h" 2 3 > ># 1 "/usr/include/c++/4.8.2/cwchar" 1 3 ># 39 "/usr/include/c++/4.8.2/cwchar" 3 ># 40 "/usr/include/c++/4.8.2/cwchar" 3 > > > > ># 1 "/usr/include/wchar.h" 1 3 4 ># 45 "/usr/include/c++/4.8.2/cwchar" 2 3 ># 42 "/usr/include/c++/4.8.2/bits/char_traits.h" 2 3 > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ ># 57 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > template<typename _CharT> > struct _Char_types > { > typedef unsigned long int_type; > typedef std::streampos pos_type; > typedef std::streamoff off_type; > typedef std::mbstate_t state_type; > }; ># 82 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > template<typename _CharT> > struct char_traits > { > typedef _CharT char_type; > typedef typename _Char_types<_CharT>::int_type int_type; > typedef typename _Char_types<_CharT>::pos_type pos_type; > typedef typename _Char_types<_CharT>::off_type off_type; > typedef typename _Char_types<_CharT>::state_type state_type; > > static void > assign(char_type& __c1, const char_type& __c2) > { __c1 = __c2; } > > static bool > eq(const char_type& __c1, const char_type& __c2) > { return __c1 == __c2; } > > static bool > lt(const char_type& __c1, const char_type& __c2) > { return __c1 < __c2; } > > static int > compare(const char_type* __s1, const char_type* __s2, std::size_t __n); > > static std::size_t > length(const char_type* __s); > > static const char_type* > find(const char_type* __s, std::size_t __n, const char_type& __a); > > static char_type* > move(char_type* __s1, const char_type* __s2, std::size_t __n); > > static char_type* > copy(char_type* __s1, const char_type* __s2, std::size_t __n); > > static char_type* > assign(char_type* __s, std::size_t __n, char_type __a); > > static char_type > to_char_type(const int_type& __c) > { return static_cast<char_type>(__c); } > > static int_type > to_int_type(const char_type& __c) > { return static_cast<int_type>(__c); } > > static bool > eq_int_type(const int_type& __c1, const int_type& __c2) > { return __c1 == __c2; } > > static int_type > eof() > { return static_cast<int_type>(-1); } > > static int_type > not_eof(const int_type& __c) > { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } > }; > > template<typename _CharT> > int > char_traits<_CharT>:: > compare(const char_type* __s1, const char_type* __s2, std::size_t __n) > { > for (std::size_t __i = 0; __i < __n; ++__i) > if (lt(__s1[__i], __s2[__i])) > return -1; > else if (lt(__s2[__i], __s1[__i])) > return 1; > return 0; > } > > template<typename _CharT> > std::size_t > char_traits<_CharT>:: > length(const char_type* __p) > { > std::size_t __i = 0; > while (!eq(__p[__i], char_type())) > ++__i; > return __i; > } > > template<typename _CharT> > const typename char_traits<_CharT>::char_type* > char_traits<_CharT>:: > find(const char_type* __s, std::size_t __n, const char_type& __a) > { > for (std::size_t __i = 0; __i < __n; ++__i) > if (eq(__s[__i], __a)) > return __s + __i; > return 0; > } > > template<typename _CharT> > typename char_traits<_CharT>::char_type* > char_traits<_CharT>:: > move(char_type* __s1, const char_type* __s2, std::size_t __n) > { > return static_cast<_CharT*>(__builtin_memmove(__s1, __s2, > __n * sizeof(char_type))); > } > > template<typename _CharT> > typename char_traits<_CharT>::char_type* > char_traits<_CharT>:: > copy(char_type* __s1, const char_type* __s2, std::size_t __n) > { > > std::copy(__s2, __s2 + __n, __s1); > return __s1; > } > > template<typename _CharT> > typename char_traits<_CharT>::char_type* > char_traits<_CharT>:: > assign(char_type* __s, std::size_t __n, char_type __a) > { > > std::fill_n(__s, __n, __a); > return __s; > } > > >} > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 226 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > template<class _CharT> > struct char_traits : public __gnu_cxx::char_traits<_CharT> > { }; > > > > template<> > struct char_traits<char> > { > typedef char char_type; > typedef int int_type; > typedef streampos pos_type; > typedef streamoff off_type; > typedef mbstate_t state_type; > > static void > assign(char_type& __c1, const char_type& __c2) > { __c1 = __c2; } > > static bool > eq(const char_type& __c1, const char_type& __c2) > { return __c1 == __c2; } > > static bool > lt(const char_type& __c1, const char_type& __c2) > { return __c1 < __c2; } > > static int > compare(const char_type* __s1, const char_type* __s2, size_t __n) > { return __builtin_memcmp(__s1, __s2, __n); } > > static size_t > length(const char_type* __s) > { return __builtin_strlen(__s); } > > static const char_type* > find(const char_type* __s, size_t __n, const char_type& __a) > { return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n)); } > > static char_type* > move(char_type* __s1, const char_type* __s2, size_t __n) > { return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n)); } > > static char_type* > copy(char_type* __s1, const char_type* __s2, size_t __n) > { return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n)); } > > static char_type* > assign(char_type* __s, size_t __n, char_type __a) > { return static_cast<char_type*>(__builtin_memset(__s, __a, __n)); } > > static char_type > to_char_type(const int_type& __c) > { return static_cast<char_type>(__c); } > > > > static int_type > to_int_type(const char_type& __c) > { return static_cast<int_type>(static_cast<unsigned char>(__c)); } > > static bool > eq_int_type(const int_type& __c1, const int_type& __c2) > { return __c1 == __c2; } > > static int_type > eof() > { return static_cast<int_type>(-1); } > > static int_type > not_eof(const int_type& __c) > { return (__c == eof()) ? 0 : __c; } > }; > > > > > template<> > struct char_traits<wchar_t> > { > typedef wchar_t char_type; > typedef wint_t int_type; > typedef streamoff off_type; > typedef wstreampos pos_type; > typedef mbstate_t state_type; > > static void > assign(char_type& __c1, const char_type& __c2) > { __c1 = __c2; } > > static bool > eq(const char_type& __c1, const char_type& __c2) > { return __c1 == __c2; } > > static bool > lt(const char_type& __c1, const char_type& __c2) > { return __c1 < __c2; } > > static int > compare(const char_type* __s1, const char_type* __s2, size_t __n) > { return wmemcmp(__s1, __s2, __n); } > > static size_t > length(const char_type* __s) > { return wcslen(__s); } > > static const char_type* > find(const char_type* __s, size_t __n, const char_type& __a) > { return wmemchr(__s, __a, __n); } > > static char_type* > move(char_type* __s1, const char_type* __s2, size_t __n) > { return wmemmove(__s1, __s2, __n); } > > static char_type* > copy(char_type* __s1, const char_type* __s2, size_t __n) > { return wmemcpy(__s1, __s2, __n); } > > static char_type* > assign(char_type* __s, size_t __n, char_type __a) > { return wmemset(__s, __a, __n); } > > static char_type > to_char_type(const int_type& __c) > { return char_type(__c); } > > static int_type > to_int_type(const char_type& __c) > { return int_type(__c); } > > static bool > eq_int_type(const int_type& __c1, const int_type& __c2) > { return __c1 == __c2; } > > static int_type > eof() > { return static_cast<int_type>((0xffffffffu)); } > > static int_type > not_eof(const int_type& __c) > { return eq_int_type(__c, eof()) ? 0 : __c; } > }; > > > >} ># 41 "/usr/include/c++/4.8.2/string" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/allocator.h" 1 3 ># 46 "/usr/include/c++/4.8.2/bits/allocator.h" 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++allocator.h" 1 3 ># 33 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++allocator.h" 3 ># 1 "/usr/include/c++/4.8.2/ext/new_allocator.h" 1 3 ># 33 "/usr/include/c++/4.8.2/ext/new_allocator.h" 3 ># 1 "/usr/include/c++/4.8.2/new" 1 3 ># 37 "/usr/include/c++/4.8.2/new" 3 ># 38 "/usr/include/c++/4.8.2/new" 3 > > ># 1 "/usr/include/c++/4.8.2/exception" 1 3 ># 33 "/usr/include/c++/4.8.2/exception" 3 ># 34 "/usr/include/c++/4.8.2/exception" 3 > >#pragma GCC visibility push(default) > > ># 1 "/usr/include/c++/4.8.2/bits/atomic_lockfree_defines.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/atomic_lockfree_defines.h" 3 ># 34 "/usr/include/c++/4.8.2/bits/atomic_lockfree_defines.h" 3 ># 39 "/usr/include/c++/4.8.2/exception" 2 3 > >extern "C++" { > >namespace std >{ ># 60 "/usr/include/c++/4.8.2/exception" 3 > class exception > { > public: > exception() throw() { } > virtual ~exception() throw(); > > > > virtual const char* what() const throw(); > }; > > > > class bad_exception : public exception > { > public: > bad_exception() throw() { } > > > > virtual ~bad_exception() throw(); > > > virtual const char* what() const throw(); > }; > > > typedef void (*terminate_handler) (); > > > typedef void (*unexpected_handler) (); > > > terminate_handler set_terminate(terminate_handler) throw(); > > > > void terminate() throw() __attribute__ ((__noreturn__)); > > > unexpected_handler set_unexpected(unexpected_handler) throw(); > > > > void unexpected() __attribute__ ((__noreturn__)); ># 117 "/usr/include/c++/4.8.2/exception" 3 > bool uncaught_exception() throw() __attribute__ ((__pure__)); > > >} > >namespace __gnu_cxx >{ ># 142 "/usr/include/c++/4.8.2/exception" 3 > void __verbose_terminate_handler(); > > >} > >} > >#pragma GCC visibility pop ># 41 "/usr/include/c++/4.8.2/new" 2 3 > >#pragma GCC visibility push(default) > >extern "C++" { > >namespace std >{ > > > > > > > class bad_alloc : public exception > { > public: > bad_alloc() throw() { } > > > > virtual ~bad_alloc() throw(); > > > virtual const char* what() const throw(); > }; > > struct nothrow_t { }; > > extern const nothrow_t nothrow; > > > > typedef void (*new_handler)(); > > > > new_handler set_new_handler(new_handler) throw(); >} ># 91 "/usr/include/c++/4.8.2/new" 3 >void* operator new(std::size_t) throw(std::bad_alloc) > __attribute__((__externally_visible__)); >void* operator new[](std::size_t) throw(std::bad_alloc) > __attribute__((__externally_visible__)); >void operator delete(void*) throw() > __attribute__((__externally_visible__)); >void operator delete[](void*) throw() > __attribute__((__externally_visible__)); >void* operator new(std::size_t, const std::nothrow_t&) throw() > __attribute__((__externally_visible__)); >void* operator new[](std::size_t, const std::nothrow_t&) throw() > __attribute__((__externally_visible__)); >void operator delete(void*, const std::nothrow_t&) throw() > __attribute__((__externally_visible__)); >void operator delete[](void*, const std::nothrow_t&) throw() > __attribute__((__externally_visible__)); > > >inline void* operator new(std::size_t, void* __p) throw() >{ return __p; } >inline void* operator new[](std::size_t, void* __p) throw() >{ return __p; } > > >inline void operator delete (void*, void*) throw() { } >inline void operator delete[](void*, void*) throw() { } > >} > >#pragma GCC visibility pop ># 34 "/usr/include/c++/4.8.2/ext/new_allocator.h" 2 3 > > > > > > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > using std::size_t; > using std::ptrdiff_t; ># 57 "/usr/include/c++/4.8.2/ext/new_allocator.h" 3 > template<typename _Tp> > class new_allocator > { > public: > typedef size_t size_type; > typedef ptrdiff_t difference_type; > typedef _Tp* pointer; > typedef const _Tp* const_pointer; > typedef _Tp& reference; > typedef const _Tp& const_reference; > typedef _Tp value_type; > > template<typename _Tp1> > struct rebind > { typedef new_allocator<_Tp1> other; }; > > > > > > > > new_allocator() throw() { } > > new_allocator(const new_allocator&) throw() { } > > template<typename _Tp1> > new_allocator(const new_allocator<_Tp1>&) throw() { } > > ~new_allocator() throw() { } > > pointer > address(reference __x) const > { return std::__addressof(__x); } > > const_pointer > address(const_reference __x) const > { return std::__addressof(__x); } > > > > pointer > allocate(size_type __n, const void* = 0) > { > if (__n > this->max_size()) > std::__throw_bad_alloc(); > > return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); > } > > > void > deallocate(pointer __p, size_type) > { ::operator delete(__p); } > > size_type > max_size() const throw() > { return size_t(-1) / sizeof(_Tp); } ># 128 "/usr/include/c++/4.8.2/ext/new_allocator.h" 3 > void > construct(pointer __p, const _Tp& __val) > { ::new((void *)__p) _Tp(__val); } > > void > destroy(pointer __p) { __p->~_Tp(); } > > }; > > template<typename _Tp> > inline bool > operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&) > { return true; } > > template<typename _Tp> > inline bool > operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&) > { return false; } > > >} ># 34 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++allocator.h" 2 3 ># 47 "/usr/include/c++/4.8.2/bits/allocator.h" 2 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 62 "/usr/include/c++/4.8.2/bits/allocator.h" 3 > template<> > class allocator<void> > { > public: > typedef size_t size_type; > typedef ptrdiff_t difference_type; > typedef void* pointer; > typedef const void* const_pointer; > typedef void value_type; > > template<typename _Tp1> > struct rebind > { typedef allocator<_Tp1> other; }; > > > > > > > }; ># 91 "/usr/include/c++/4.8.2/bits/allocator.h" 3 > template<typename _Tp> > class allocator: public __gnu_cxx::new_allocator<_Tp> > { > public: > typedef size_t size_type; > typedef ptrdiff_t difference_type; > typedef _Tp* pointer; > typedef const _Tp* const_pointer; > typedef _Tp& reference; > typedef const _Tp& const_reference; > typedef _Tp value_type; > > template<typename _Tp1> > struct rebind > { typedef allocator<_Tp1> other; }; > > > > > > > > allocator() throw() { } > > allocator(const allocator& __a) throw() > : __gnu_cxx::new_allocator<_Tp>(__a) { } > > template<typename _Tp1> > allocator(const allocator<_Tp1>&) throw() { } > > ~allocator() throw() { } > > > }; > > template<typename _T1, typename _T2> > inline bool > operator==(const allocator<_T1>&, const allocator<_T2>&) > { return true; } > > template<typename _Tp> > inline bool > operator==(const allocator<_Tp>&, const allocator<_Tp>&) > { return true; } > > template<typename _T1, typename _T2> > inline bool > operator!=(const allocator<_T1>&, const allocator<_T2>&) > { return false; } > > template<typename _Tp> > inline bool > operator!=(const allocator<_Tp>&, const allocator<_Tp>&) > { return false; } > > > > > > > extern template class allocator<char>; > extern template class allocator<wchar_t>; > > > > > > > template<typename _Alloc, bool = __is_empty(_Alloc)> > struct __alloc_swap > { static void _S_do_it(_Alloc&, _Alloc&) { } }; > > template<typename _Alloc> > struct __alloc_swap<_Alloc, false> > { > static void > _S_do_it(_Alloc& __one, _Alloc& __two) > { > > if (__one != __two) > swap(__one, __two); > } > }; > > > template<typename _Alloc, bool = __is_empty(_Alloc)> > struct __alloc_neq > { > static bool > _S_do_it(const _Alloc&, const _Alloc&) > { return false; } > }; > > template<typename _Alloc> > struct __alloc_neq<_Alloc, false> > { > static bool > _S_do_it(const _Alloc& __one, const _Alloc& __two) > { return __one != __two; } > }; ># 218 "/usr/include/c++/4.8.2/bits/allocator.h" 3 > >} ># 42 "/usr/include/c++/4.8.2/string" 2 3 > > ># 1 "/usr/include/c++/4.8.2/bits/ostream_insert.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/ostream_insert.h" 3 ># 34 "/usr/include/c++/4.8.2/bits/ostream_insert.h" 3 > > ># 1 "/usr/include/c++/4.8.2/bits/cxxabi_forced.h" 1 3 ># 34 "/usr/include/c++/4.8.2/bits/cxxabi_forced.h" 3 ># 35 "/usr/include/c++/4.8.2/bits/cxxabi_forced.h" 3 > >#pragma GCC visibility push(default) > > >namespace __cxxabiv1 >{ > > > > > > > > class __forced_unwind > { > virtual ~__forced_unwind() throw(); > > > virtual void __pure_dummy() = 0; > }; >} > > >#pragma GCC visibility pop ># 37 "/usr/include/c++/4.8.2/bits/ostream_insert.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > inline void > __ostream_write(basic_ostream<_CharT, _Traits>& __out, > const _CharT* __s, streamsize __n) > { > typedef basic_ostream<_CharT, _Traits> __ostream_type; > typedef typename __ostream_type::ios_base __ios_base; > > const streamsize __put = __out.rdbuf()->sputn(__s, __n); > if (__put != __n) > __out.setstate(__ios_base::badbit); > } > > template<typename _CharT, typename _Traits> > inline void > __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n) > { > typedef basic_ostream<_CharT, _Traits> __ostream_type; > typedef typename __ostream_type::ios_base __ios_base; > > const _CharT __c = __out.fill(); > for (; __n > 0; --__n) > { > const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c); > if (_Traits::eq_int_type(__put, _Traits::eof())) > { > __out.setstate(__ios_base::badbit); > break; > } > } > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > __ostream_insert(basic_ostream<_CharT, _Traits>& __out, > const _CharT* __s, streamsize __n) > { > typedef basic_ostream<_CharT, _Traits> __ostream_type; > typedef typename __ostream_type::ios_base __ios_base; > > typename __ostream_type::sentry __cerb(__out); > if (__cerb) > { > try > { > const streamsize __w = __out.width(); > if (__w > __n) > { > const bool __left = ((__out.flags() > & __ios_base::adjustfield) > == __ios_base::left); > if (!__left) > __ostream_fill(__out, __w - __n); > if (__out.good()) > __ostream_write(__out, __s, __n); > if (__left && __out.good()) > __ostream_fill(__out, __w - __n); > } > else > __ostream_write(__out, __s, __n); > __out.width(0); > } > catch(__cxxabiv1::__forced_unwind&) > { > __out._M_setstate(__ios_base::badbit); > throw; > } > catch(...) > { __out._M_setstate(__ios_base::badbit); } > } > return __out; > } > > > > > extern template ostream& __ostream_insert(ostream&, const char*, streamsize); > > > extern template wostream& __ostream_insert(wostream&, const wchar_t*, > streamsize); > > > > >} ># 45 "/usr/include/c++/4.8.2/string" 2 3 > > > ># 1 "/usr/include/c++/4.8.2/bits/stl_function.h" 1 3 ># 59 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 100 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Arg, typename _Result> > struct unary_function > { > > typedef _Arg argument_type; > > > typedef _Result result_type; > }; > > > > > template<typename _Arg1, typename _Arg2, typename _Result> > struct binary_function > { > > typedef _Arg1 first_argument_type; > > > typedef _Arg2 second_argument_type; > > > typedef _Result result_type; > }; ># 139 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Tp> > struct plus : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x + __y; } > }; > > > template<typename _Tp> > struct minus : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x - __y; } > }; > > > template<typename _Tp> > struct multiplies : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x * __y; } > }; > > > template<typename _Tp> > struct divides : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x / __y; } > }; > > > template<typename _Tp> > struct modulus : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x % __y; } > }; > > > template<typename _Tp> > struct negate : public unary_function<_Tp, _Tp> > { > _Tp > operator()(const _Tp& __x) const > { return -__x; } > }; ># 203 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Tp> > struct equal_to : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x == __y; } > }; > > > template<typename _Tp> > struct not_equal_to : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x != __y; } > }; > > > template<typename _Tp> > struct greater : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x > __y; } > }; > > > template<typename _Tp> > struct less : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x < __y; } > }; > > > template<typename _Tp> > struct greater_equal : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x >= __y; } > }; > > > template<typename _Tp> > struct less_equal : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x <= __y; } > }; ># 267 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Tp> > struct logical_and : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x && __y; } > }; > > > template<typename _Tp> > struct logical_or : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x || __y; } > }; > > > template<typename _Tp> > struct logical_not : public unary_function<_Tp, bool> > { > bool > operator()(const _Tp& __x) const > { return !__x; } > }; > > > > > template<typename _Tp> > struct bit_and : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x & __y; } > }; > > template<typename _Tp> > struct bit_or : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x | __y; } > }; > > template<typename _Tp> > struct bit_xor : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x ^ __y; } > }; ># 350 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Predicate> > class unary_negate > : public unary_function<typename _Predicate::argument_type, bool> > { > protected: > _Predicate _M_pred; > > public: > explicit > unary_negate(const _Predicate& __x) : _M_pred(__x) { } > > bool > operator()(const typename _Predicate::argument_type& __x) const > { return !_M_pred(__x); } > }; > > > template<typename _Predicate> > inline unary_negate<_Predicate> > not1(const _Predicate& __pred) > { return unary_negate<_Predicate>(__pred); } > > > template<typename _Predicate> > class binary_negate > : public binary_function<typename _Predicate::first_argument_type, > typename _Predicate::second_argument_type, bool> > { > protected: > _Predicate _M_pred; > > public: > explicit > binary_negate(const _Predicate& __x) : _M_pred(__x) { } > > bool > operator()(const typename _Predicate::first_argument_type& __x, > const typename _Predicate::second_argument_type& __y) const > { return !_M_pred(__x, __y); } > }; > > > template<typename _Predicate> > inline binary_negate<_Predicate> > not2(const _Predicate& __pred) > { return binary_negate<_Predicate>(__pred); } ># 421 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Arg, typename _Result> > class pointer_to_unary_function : public unary_function<_Arg, _Result> > { > protected: > _Result (*_M_ptr)(_Arg); > > public: > pointer_to_unary_function() { } > > explicit > pointer_to_unary_function(_Result (*__x)(_Arg)) > : _M_ptr(__x) { } > > _Result > operator()(_Arg __x) const > { return _M_ptr(__x); } > }; > > > template<typename _Arg, typename _Result> > inline pointer_to_unary_function<_Arg, _Result> > ptr_fun(_Result (*__x)(_Arg)) > { return pointer_to_unary_function<_Arg, _Result>(__x); } > > > template<typename _Arg1, typename _Arg2, typename _Result> > class pointer_to_binary_function > : public binary_function<_Arg1, _Arg2, _Result> > { > protected: > _Result (*_M_ptr)(_Arg1, _Arg2); > > public: > pointer_to_binary_function() { } > > explicit > pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2)) > : _M_ptr(__x) { } > > _Result > operator()(_Arg1 __x, _Arg2 __y) const > { return _M_ptr(__x, __y); } > }; > > > template<typename _Arg1, typename _Arg2, typename _Result> > inline pointer_to_binary_function<_Arg1, _Arg2, _Result> > ptr_fun(_Result (*__x)(_Arg1, _Arg2)) > { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); } > > > template<typename _Tp> > struct _Identity > : public unary_function<_Tp,_Tp> > { > _Tp& > operator()(_Tp& __x) const > { return __x; } > > const _Tp& > operator()(const _Tp& __x) const > { return __x; } > }; > > template<typename _Pair> > struct _Select1st > : public unary_function<_Pair, typename _Pair::first_type> > { > typename _Pair::first_type& > operator()(_Pair& __x) const > { return __x.first; } > > const typename _Pair::first_type& > operator()(const _Pair& __x) const > { return __x.first; } ># 508 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > }; > > template<typename _Pair> > struct _Select2nd > : public unary_function<_Pair, typename _Pair::second_type> > { > typename _Pair::second_type& > operator()(_Pair& __x) const > { return __x.second; } > > const typename _Pair::second_type& > operator()(const _Pair& __x) const > { return __x.second; } > }; ># 541 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Ret, typename _Tp> > class mem_fun_t : public unary_function<_Tp*, _Ret> > { > public: > explicit > mem_fun_t(_Ret (_Tp::*__pf)()) > : _M_f(__pf) { } > > _Ret > operator()(_Tp* __p) const > { return (__p->*_M_f)(); } > > private: > _Ret (_Tp::*_M_f)(); > }; > > > > template<typename _Ret, typename _Tp> > class const_mem_fun_t : public unary_function<const _Tp*, _Ret> > { > public: > explicit > const_mem_fun_t(_Ret (_Tp::*__pf)() const) > : _M_f(__pf) { } > > _Ret > operator()(const _Tp* __p) const > { return (__p->*_M_f)(); } > > private: > _Ret (_Tp::*_M_f)() const; > }; > > > > template<typename _Ret, typename _Tp> > class mem_fun_ref_t : public unary_function<_Tp, _Ret> > { > public: > explicit > mem_fun_ref_t(_Ret (_Tp::*__pf)()) > : _M_f(__pf) { } > > _Ret > operator()(_Tp& __r) const > { return (__r.*_M_f)(); } > > private: > _Ret (_Tp::*_M_f)(); > }; > > > > template<typename _Ret, typename _Tp> > class const_mem_fun_ref_t : public unary_function<_Tp, _Ret> > { > public: > explicit > const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) > : _M_f(__pf) { } > > _Ret > operator()(const _Tp& __r) const > { return (__r.*_M_f)(); } > > private: > _Ret (_Tp::*_M_f)() const; > }; > > > > template<typename _Ret, typename _Tp, typename _Arg> > class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret> > { > public: > explicit > mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) > : _M_f(__pf) { } > > _Ret > operator()(_Tp* __p, _Arg __x) const > { return (__p->*_M_f)(__x); } > > private: > _Ret (_Tp::*_M_f)(_Arg); > }; > > > > template<typename _Ret, typename _Tp, typename _Arg> > class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret> > { > public: > explicit > const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) > : _M_f(__pf) { } > > _Ret > operator()(const _Tp* __p, _Arg __x) const > { return (__p->*_M_f)(__x); } > > private: > _Ret (_Tp::*_M_f)(_Arg) const; > }; > > > > template<typename _Ret, typename _Tp, typename _Arg> > class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> > { > public: > explicit > mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) > : _M_f(__pf) { } > > _Ret > operator()(_Tp& __r, _Arg __x) const > { return (__r.*_M_f)(__x); } > > private: > _Ret (_Tp::*_M_f)(_Arg); > }; > > > > template<typename _Ret, typename _Tp, typename _Arg> > class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> > { > public: > explicit > const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) > : _M_f(__pf) { } > > _Ret > operator()(const _Tp& __r, _Arg __x) const > { return (__r.*_M_f)(__x); } > > private: > _Ret (_Tp::*_M_f)(_Arg) const; > }; > > > > template<typename _Ret, typename _Tp> > inline mem_fun_t<_Ret, _Tp> > mem_fun(_Ret (_Tp::*__f)()) > { return mem_fun_t<_Ret, _Tp>(__f); } > > template<typename _Ret, typename _Tp> > inline const_mem_fun_t<_Ret, _Tp> > mem_fun(_Ret (_Tp::*__f)() const) > { return const_mem_fun_t<_Ret, _Tp>(__f); } > > template<typename _Ret, typename _Tp> > inline mem_fun_ref_t<_Ret, _Tp> > mem_fun_ref(_Ret (_Tp::*__f)()) > { return mem_fun_ref_t<_Ret, _Tp>(__f); } > > template<typename _Ret, typename _Tp> > inline const_mem_fun_ref_t<_Ret, _Tp> > mem_fun_ref(_Ret (_Tp::*__f)() const) > { return const_mem_fun_ref_t<_Ret, _Tp>(__f); } > > template<typename _Ret, typename _Tp, typename _Arg> > inline mem_fun1_t<_Ret, _Tp, _Arg> > mem_fun(_Ret (_Tp::*__f)(_Arg)) > { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } > > template<typename _Ret, typename _Tp, typename _Arg> > inline const_mem_fun1_t<_Ret, _Tp, _Arg> > mem_fun(_Ret (_Tp::*__f)(_Arg) const) > { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); } > > template<typename _Ret, typename _Tp, typename _Arg> > inline mem_fun1_ref_t<_Ret, _Tp, _Arg> > mem_fun_ref(_Ret (_Tp::*__f)(_Arg)) > { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } > > template<typename _Ret, typename _Tp, typename _Arg> > inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg> > mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const) > { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } > > > > >} > > ># 1 "/usr/include/c++/4.8.2/backward/binders.h" 1 3 ># 59 "/usr/include/c++/4.8.2/backward/binders.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 103 "/usr/include/c++/4.8.2/backward/binders.h" 3 > template<typename _Operation> > class binder1st > : public unary_function<typename _Operation::second_argument_type, > typename _Operation::result_type> > { > protected: > _Operation op; > typename _Operation::first_argument_type value; > > public: > binder1st(const _Operation& __x, > const typename _Operation::first_argument_type& __y) > : op(__x), value(__y) { } > > typename _Operation::result_type > operator()(const typename _Operation::second_argument_type& __x) const > { return op(value, __x); } > > > > typename _Operation::result_type > operator()(typename _Operation::second_argument_type& __x) const > { return op(value, __x); } > } ; > > > template<typename _Operation, typename _Tp> > inline binder1st<_Operation> > bind1st(const _Operation& __fn, const _Tp& __x) > { > typedef typename _Operation::first_argument_type _Arg1_type; > return binder1st<_Operation>(__fn, _Arg1_type(__x)); > } > > > template<typename _Operation> > class binder2nd > : public unary_function<typename _Operation::first_argument_type, > typename _Operation::result_type> > { > protected: > _Operation op; > typename _Operation::second_argument_type value; > > public: > binder2nd(const _Operation& __x, > const typename _Operation::second_argument_type& __y) > : op(__x), value(__y) { } > > typename _Operation::result_type > operator()(const typename _Operation::first_argument_type& __x) const > { return op(__x, value); } > > > > typename _Operation::result_type > operator()(typename _Operation::first_argument_type& __x) const > { return op(__x, value); } > } ; > > > template<typename _Operation, typename _Tp> > inline binder2nd<_Operation> > bind2nd(const _Operation& __fn, const _Tp& __x) > { > typedef typename _Operation::second_argument_type _Arg2_type; > return binder2nd<_Operation>(__fn, _Arg2_type(__x)); > } > > > >} ># 732 "/usr/include/c++/4.8.2/bits/stl_function.h" 2 3 ># 49 "/usr/include/c++/4.8.2/string" 2 3 > > ># 1 "/usr/include/c++/4.8.2/bits/range_access.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/range_access.h" 3 ># 34 "/usr/include/c++/4.8.2/bits/range_access.h" 3 ># 52 "/usr/include/c++/4.8.2/string" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/basic_string.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 ># 38 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > ># 1 "/usr/include/c++/4.8.2/ext/atomicity.h" 1 3 ># 32 "/usr/include/c++/4.8.2/ext/atomicity.h" 3 ># 33 "/usr/include/c++/4.8.2/ext/atomicity.h" 3 > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr.h" 1 3 ># 30 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr.h" 3 >#pragma GCC visibility push(default) ># 148 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr.h" 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 1 3 ># 35 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 ># 1 "/usr/include/pthread.h" 1 3 4 ># 23 "/usr/include/pthread.h" 3 4 ># 1 "/usr/include/sched.h" 1 3 4 ># 28 "/usr/include/sched.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 29 "/usr/include/sched.h" 2 3 4 > > > ># 1 "/usr/include/time.h" 1 3 4 ># 73 "/usr/include/time.h" 3 4 > > >typedef __time_t time_t; ># 120 "/usr/include/time.h" 3 4 >struct timespec > { > __time_t tv_sec; > __syscall_slong_t tv_nsec; > }; ># 33 "/usr/include/sched.h" 2 3 4 > > >typedef __pid_t pid_t; > > > > > ># 1 "/usr/include/bits/sched.h" 1 3 4 ># 72 "/usr/include/bits/sched.h" 3 4 >struct sched_param > { > int __sched_priority; > }; > >extern "C" { > > > >extern int clone (int (*__fn) (void *__arg), void *__child_stack, > int __flags, void *__arg, ...) throw (); > > >extern int unshare (int __flags) throw (); > > >extern int sched_getcpu (void) throw (); > > >extern int setns (int __fd, int __nstype) throw (); > > > >} > > > > > > > >struct __sched_param > { > int __sched_priority; > }; ># 118 "/usr/include/bits/sched.h" 3 4 >typedef unsigned long int __cpu_mask; > > > > > > >typedef struct >{ > __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))]; >} cpu_set_t; ># 201 "/usr/include/bits/sched.h" 3 4 >extern "C" { > >extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) > throw (); >extern cpu_set_t *__sched_cpualloc (size_t __count) throw () ; >extern void __sched_cpufree (cpu_set_t *__set) throw (); > >} ># 42 "/usr/include/sched.h" 2 3 4 > > > > >extern "C" { > > >extern int sched_setparam (__pid_t __pid, const struct sched_param *__param) > throw (); > > >extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw (); > > >extern int sched_setscheduler (__pid_t __pid, int __policy, > const struct sched_param *__param) throw (); > > >extern int sched_getscheduler (__pid_t __pid) throw (); > > >extern int sched_yield (void) throw (); > > >extern int sched_get_priority_max (int __algorithm) throw (); > > >extern int sched_get_priority_min (int __algorithm) throw (); > > >extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw (); ># 116 "/usr/include/sched.h" 3 4 >extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize, > const cpu_set_t *__cpuset) throw (); > > >extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize, > cpu_set_t *__cpuset) throw (); > > >} ># 24 "/usr/include/pthread.h" 2 3 4 ># 1 "/usr/include/time.h" 1 3 4 ># 29 "/usr/include/time.h" 3 4 >extern "C" { > > > > > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 38 "/usr/include/time.h" 2 3 4 > > > ># 1 "/usr/include/bits/time.h" 1 3 4 ># 30 "/usr/include/bits/time.h" 3 4 >struct timeval > { > __time_t tv_sec; > __suseconds_t tv_usec; > }; ># 86 "/usr/include/bits/time.h" 3 4 ># 1 "/usr/include/bits/timex.h" 1 3 4 ># 25 "/usr/include/bits/timex.h" 3 4 >struct timex >{ > unsigned int modes; > __syscall_slong_t offset; > __syscall_slong_t freq; > __syscall_slong_t maxerror; > __syscall_slong_t esterror; > int status; > __syscall_slong_t constant; > __syscall_slong_t precision; > __syscall_slong_t tolerance; > struct timeval time; > __syscall_slong_t tick; > __syscall_slong_t ppsfreq; > __syscall_slong_t jitter; > int shift; > __syscall_slong_t stabil; > __syscall_slong_t jitcnt; > __syscall_slong_t calcnt; > __syscall_slong_t errcnt; > __syscall_slong_t stbcnt; > > int tai; > > > int :32; int :32; int :32; int :32; > int :32; int :32; int :32; int :32; > int :32; int :32; int :32; >}; ># 87 "/usr/include/bits/time.h" 2 3 4 > >extern "C" { > > >extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw (); > >} ># 42 "/usr/include/time.h" 2 3 4 ># 57 "/usr/include/time.h" 3 4 > > >typedef __clock_t clock_t; ># 91 "/usr/include/time.h" 3 4 >typedef __clockid_t clockid_t; ># 103 "/usr/include/time.h" 3 4 >typedef __timer_t timer_t; ># 131 "/usr/include/time.h" 3 4 > > >struct tm >{ > int tm_sec; > int tm_min; > int tm_hour; > int tm_mday; > int tm_mon; > int tm_year; > int tm_wday; > int tm_yday; > int tm_isdst; > > > long int tm_gmtoff; > const char *tm_zone; > > > > >}; ># 161 "/usr/include/time.h" 3 4 >struct itimerspec > { > struct timespec it_interval; > struct timespec it_value; > }; > > >struct sigevent; ># 186 "/usr/include/time.h" 3 4 > > > >extern clock_t clock (void) throw (); > > >extern time_t time (time_t *__timer) throw (); > > >extern double difftime (time_t __time1, time_t __time0) > throw () __attribute__ ((__const__)); > > >extern time_t mktime (struct tm *__tp) throw (); > > > > > >extern size_t strftime (char *__restrict __s, size_t __maxsize, > const char *__restrict __format, > const struct tm *__restrict __tp) throw (); > > > > > >extern char *strptime (const char *__restrict __s, > const char *__restrict __fmt, struct tm *__tp) > throw (); > > > > > > > >extern size_t strftime_l (char *__restrict __s, size_t __maxsize, > const char *__restrict __format, > const struct tm *__restrict __tp, > __locale_t __loc) throw (); > > > >extern char *strptime_l (const char *__restrict __s, > const char *__restrict __fmt, struct tm *__tp, > __locale_t __loc) throw (); > > > > > > >extern struct tm *gmtime (const time_t *__timer) throw (); > > > >extern struct tm *localtime (const time_t *__timer) throw (); > > > > > >extern struct tm *gmtime_r (const time_t *__restrict __timer, > struct tm *__restrict __tp) throw (); > > > >extern struct tm *localtime_r (const time_t *__restrict __timer, > struct tm *__restrict __tp) throw (); > > > > > >extern char *asctime (const struct tm *__tp) throw (); > > >extern char *ctime (const time_t *__timer) throw (); > > > > > > > >extern char *asctime_r (const struct tm *__restrict __tp, > char *__restrict __buf) throw (); > > >extern char *ctime_r (const time_t *__restrict __timer, > char *__restrict __buf) throw (); > > > > >extern char *__tzname[2]; >extern int __daylight; >extern long int __timezone; > > > > >extern char *tzname[2]; > > > >extern void tzset (void) throw (); > > > >extern int daylight; >extern long int timezone; > > > > > >extern int stime (const time_t *__when) throw (); ># 319 "/usr/include/time.h" 3 4 >extern time_t timegm (struct tm *__tp) throw (); > > >extern time_t timelocal (struct tm *__tp) throw (); > > >extern int dysize (int __year) throw () __attribute__ ((__const__)); ># 334 "/usr/include/time.h" 3 4 >extern int nanosleep (const struct timespec *__requested_time, > struct timespec *__remaining); > > > >extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw (); > > >extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw (); > > >extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) > throw (); > > > > > > >extern int clock_nanosleep (clockid_t __clock_id, int __flags, > const struct timespec *__req, > struct timespec *__rem); > > >extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw (); > > > > >extern int timer_create (clockid_t __clock_id, > struct sigevent *__restrict __evp, > timer_t *__restrict __timerid) throw (); > > >extern int timer_delete (timer_t __timerid) throw (); > > >extern int timer_settime (timer_t __timerid, int __flags, > const struct itimerspec *__restrict __value, > struct itimerspec *__restrict __ovalue) throw (); > > >extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) > throw (); > > >extern int timer_getoverrun (timer_t __timerid) throw (); > > > > > >extern int timespec_get (struct timespec *__ts, int __base) > throw () __attribute__ ((__nonnull__ (1))); ># 403 "/usr/include/time.h" 3 4 >extern int getdate_err; ># 412 "/usr/include/time.h" 3 4 >extern struct tm *getdate (const char *__string); ># 426 "/usr/include/time.h" 3 4 >extern int getdate_r (const char *__restrict __string, > struct tm *__restrict __resbufp); > > >} ># 25 "/usr/include/pthread.h" 2 3 4 > ># 1 "/usr/include/bits/pthreadtypes.h" 1 3 4 ># 21 "/usr/include/bits/pthreadtypes.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 22 "/usr/include/bits/pthreadtypes.h" 2 3 4 ># 60 "/usr/include/bits/pthreadtypes.h" 3 4 >typedef unsigned long int pthread_t; > > >union pthread_attr_t >{ > char __size[56]; > long int __align; >}; > >typedef union pthread_attr_t pthread_attr_t; > > > > > >typedef struct __pthread_internal_list >{ > struct __pthread_internal_list *__prev; > struct __pthread_internal_list *__next; >} __pthread_list_t; ># 90 "/usr/include/bits/pthreadtypes.h" 3 4 >typedef union >{ > struct __pthread_mutex_s > { > int __lock; > unsigned int __count; > int __owner; > > unsigned int __nusers; > > > > int __kind; > > short __spins; > short __elision; > __pthread_list_t __list; ># 124 "/usr/include/bits/pthreadtypes.h" 3 4 > } __data; > char __size[40]; > long int __align; >} pthread_mutex_t; > >typedef union >{ > char __size[4]; > int __align; >} pthread_mutexattr_t; > > > > >typedef union >{ > struct > { > int __lock; > unsigned int __futex; > __extension__ unsigned long long int __total_seq; > __extension__ unsigned long long int __wakeup_seq; > __extension__ unsigned long long int __woken_seq; > void *__mutex; > unsigned int __nwaiters; > unsigned int __broadcast_seq; > } __data; > char __size[48]; > __extension__ long long int __align; >} pthread_cond_t; > >typedef union >{ > char __size[4]; > int __align; >} pthread_condattr_t; > > > >typedef unsigned int pthread_key_t; > > > >typedef int pthread_once_t; > > > > > >typedef union >{ > > struct > { > int __lock; > unsigned int __nr_readers; > unsigned int __readers_wakeup; > unsigned int __writer_wakeup; > unsigned int __nr_readers_queued; > unsigned int __nr_writers_queued; > int __writer; > int __shared; > unsigned long int __pad1; > unsigned long int __pad2; > > > unsigned int __flags; > > } __data; ># 211 "/usr/include/bits/pthreadtypes.h" 3 4 > char __size[56]; > long int __align; >} pthread_rwlock_t; > >typedef union >{ > char __size[8]; > long int __align; >} pthread_rwlockattr_t; > > > > > >typedef volatile int pthread_spinlock_t; > > > > >typedef union >{ > char __size[32]; > long int __align; >} pthread_barrier_t; > >typedef union >{ > char __size[4]; > int __align; >} pthread_barrierattr_t; ># 27 "/usr/include/pthread.h" 2 3 4 ># 1 "/usr/include/bits/setjmp.h" 1 3 4 ># 26 "/usr/include/bits/setjmp.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 27 "/usr/include/bits/setjmp.h" 2 3 4 > > > > >typedef long int __jmp_buf[8]; ># 28 "/usr/include/pthread.h" 2 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 29 "/usr/include/pthread.h" 2 3 4 > > > >enum >{ > PTHREAD_CREATE_JOINABLE, > > PTHREAD_CREATE_DETACHED > >}; > > > >enum >{ > PTHREAD_MUTEX_TIMED_NP, > PTHREAD_MUTEX_RECURSIVE_NP, > PTHREAD_MUTEX_ERRORCHECK_NP, > PTHREAD_MUTEX_ADAPTIVE_NP > > , > PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, > PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, > PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, > PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL > > > > , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP > >}; > > > > >enum >{ > PTHREAD_MUTEX_STALLED, > PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, > PTHREAD_MUTEX_ROBUST, > PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST >}; > > > > > >enum >{ > PTHREAD_PRIO_NONE, > PTHREAD_PRIO_INHERIT, > PTHREAD_PRIO_PROTECT >}; ># 125 "/usr/include/pthread.h" 3 4 >enum >{ > PTHREAD_RWLOCK_PREFER_READER_NP, > PTHREAD_RWLOCK_PREFER_WRITER_NP, > PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, > PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP >}; ># 166 "/usr/include/pthread.h" 3 4 >enum >{ > PTHREAD_INHERIT_SCHED, > > PTHREAD_EXPLICIT_SCHED > >}; > > > >enum >{ > PTHREAD_SCOPE_SYSTEM, > > PTHREAD_SCOPE_PROCESS > >}; > > > >enum >{ > PTHREAD_PROCESS_PRIVATE, > > PTHREAD_PROCESS_SHARED > >}; ># 201 "/usr/include/pthread.h" 3 4 >struct _pthread_cleanup_buffer >{ > void (*__routine) (void *); > void *__arg; > int __canceltype; > struct _pthread_cleanup_buffer *__prev; >}; > > >enum >{ > PTHREAD_CANCEL_ENABLE, > > PTHREAD_CANCEL_DISABLE > >}; >enum >{ > PTHREAD_CANCEL_DEFERRED, > > PTHREAD_CANCEL_ASYNCHRONOUS > >}; ># 239 "/usr/include/pthread.h" 3 4 >extern "C" { > > > > >extern int pthread_create (pthread_t *__restrict __newthread, > const pthread_attr_t *__restrict __attr, > void *(*__start_routine) (void *), > void *__restrict __arg) throw () __attribute__ ((__nonnull__ (1, 3))); > > > > > >extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); > > > > > > > >extern int pthread_join (pthread_t __th, void **__thread_return); > > > > >extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) throw (); > > > > > > > >extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, > const struct timespec *__abstime); > > > > > > >extern int pthread_detach (pthread_t __th) throw (); > > > >extern pthread_t pthread_self (void) throw () __attribute__ ((__const__)); > > >extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) > throw () __attribute__ ((__const__)); > > > > > > > >extern int pthread_attr_init (pthread_attr_t *__attr) throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_attr_destroy (pthread_attr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, > int *__detachstate) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, > int __detachstate) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, > size_t *__guardsize) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setguardsize (pthread_attr_t *__attr, > size_t __guardsize) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, > struct sched_param *__restrict __param) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, > const struct sched_param *__restrict > __param) throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict > __attr, int *__restrict __policy) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict > __attr, int *__restrict __inherit) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, > int __inherit) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, > int *__restrict __scope) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict > __attr, void **__restrict __stackaddr) > throw () __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__)); > > > > > >extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, > void *__stackaddr) > throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)); > > >extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict > __attr, size_t *__restrict __stacksize) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int pthread_attr_setstacksize (pthread_attr_t *__attr, > size_t __stacksize) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, > void **__restrict __stackaddr, > size_t *__restrict __stacksize) > throw () __attribute__ ((__nonnull__ (1, 2, 3))); > > > > >extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, > size_t __stacksize) throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, > size_t __cpusetsize, > const cpu_set_t *__cpuset) > throw () __attribute__ ((__nonnull__ (1, 3))); > > > >extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, > size_t __cpusetsize, > cpu_set_t *__cpuset) > throw () __attribute__ ((__nonnull__ (1, 3))); > > >extern int pthread_getattr_default_np (pthread_attr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_setattr_default_np (const pthread_attr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > > > >extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) > throw () __attribute__ ((__nonnull__ (2))); > > > > > > > >extern int pthread_setschedparam (pthread_t __target_thread, int __policy, > const struct sched_param *__param) > throw () __attribute__ ((__nonnull__ (3))); > > >extern int pthread_getschedparam (pthread_t __target_thread, > int *__restrict __policy, > struct sched_param *__restrict __param) > throw () __attribute__ ((__nonnull__ (2, 3))); > > >extern int pthread_setschedprio (pthread_t __target_thread, int __prio) > throw (); > > > > >extern int pthread_getname_np (pthread_t __target_thread, char *__buf, > size_t __buflen) > throw () __attribute__ ((__nonnull__ (2))); > > >extern int pthread_setname_np (pthread_t __target_thread, const char *__name) > throw () __attribute__ ((__nonnull__ (2))); > > > > > >extern int pthread_getconcurrency (void) throw (); > > >extern int pthread_setconcurrency (int __level) throw (); > > > > > > > >extern int pthread_yield (void) throw (); > > > > >extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, > const cpu_set_t *__cpuset) > throw () __attribute__ ((__nonnull__ (3))); > > >extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, > cpu_set_t *__cpuset) > throw () __attribute__ ((__nonnull__ (3))); ># 505 "/usr/include/pthread.h" 3 4 >extern int pthread_once (pthread_once_t *__once_control, > void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2))); ># 517 "/usr/include/pthread.h" 3 4 >extern int pthread_setcancelstate (int __state, int *__oldstate); > > > >extern int pthread_setcanceltype (int __type, int *__oldtype); > > >extern int pthread_cancel (pthread_t __th); > > > > >extern void pthread_testcancel (void); > > > > >typedef struct >{ > struct > { > __jmp_buf __cancel_jmp_buf; > int __mask_was_saved; > } __cancel_jmp_buf[1]; > void *__pad[4]; >} __pthread_unwind_buf_t __attribute__ ((__aligned__)); ># 551 "/usr/include/pthread.h" 3 4 >struct __pthread_cleanup_frame >{ > void (*__cancel_routine) (void *); > void *__cancel_arg; > int __do_it; > int __cancel_type; >}; > > > > >class __pthread_cleanup_class >{ > void (*__cancel_routine) (void *); > void *__cancel_arg; > int __do_it; > int __cancel_type; > > public: > __pthread_cleanup_class (void (*__fct) (void *), void *__arg) > : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } > ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } > void __setdoit (int __newval) { __do_it = __newval; } > void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, > &__cancel_type); } > void __restore () const { pthread_setcanceltype (__cancel_type, 0); } >}; ># 753 "/usr/include/pthread.h" 3 4 >struct __jmp_buf_tag; >extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) throw (); > > > > > >extern int pthread_mutex_init (pthread_mutex_t *__mutex, > const pthread_mutexattr_t *__mutexattr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutex_lock (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, > const struct timespec *__restrict > __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutex_getprioceiling (const pthread_mutex_t * > __restrict __mutex, > int *__restrict __prioceiling) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, > int __prioceiling, > int *__restrict __old_ceiling) > throw () __attribute__ ((__nonnull__ (1, 3))); > > > > >extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > >extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); ># 817 "/usr/include/pthread.h" 3 4 >extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * > __restrict __attr, > int *__restrict __pshared) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, > int __pshared) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict > __attr, int *__restrict __kind) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * > __restrict __attr, > int *__restrict __protocol) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, > int __protocol) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * > __restrict __attr, > int *__restrict __prioceiling) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, > int __prioceiling) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, > int *__robustness) > throw () __attribute__ ((__nonnull__ (1, 2))); > >extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr, > int *__robustness) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, > int __robustness) > throw () __attribute__ ((__nonnull__ (1))); > >extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr, > int __robustness) > throw () __attribute__ ((__nonnull__ (1))); ># 899 "/usr/include/pthread.h" 3 4 >extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, > const pthread_rwlockattr_t *__restrict > __attr) throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, > const struct timespec *__restrict > __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, > const struct timespec *__restrict > __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * > __restrict __attr, > int *__restrict __pshared) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, > int __pshared) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * > __restrict __attr, > int *__restrict __pref) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, > int __pref) throw () __attribute__ ((__nonnull__ (1))); > > > > > > > >extern int pthread_cond_init (pthread_cond_t *__restrict __cond, > const pthread_condattr_t *__restrict __cond_attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_cond_destroy (pthread_cond_t *__cond) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_cond_signal (pthread_cond_t *__cond) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_cond_broadcast (pthread_cond_t *__cond) > throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, > pthread_mutex_t *__restrict __mutex) > __attribute__ ((__nonnull__ (1, 2))); ># 1011 "/usr/include/pthread.h" 3 4 >extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, > pthread_mutex_t *__restrict __mutex, > const struct timespec *__restrict __abstime) > __attribute__ ((__nonnull__ (1, 2, 3))); > > > > >extern int pthread_condattr_init (pthread_condattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_condattr_destroy (pthread_condattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_condattr_getpshared (const pthread_condattr_t * > __restrict __attr, > int *__restrict __pshared) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, > int __pshared) throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_condattr_getclock (const pthread_condattr_t * > __restrict __attr, > __clockid_t *__restrict __clock_id) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_condattr_setclock (pthread_condattr_t *__attr, > __clockid_t __clock_id) > throw () __attribute__ ((__nonnull__ (1))); ># 1055 "/usr/include/pthread.h" 3 4 >extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_spin_destroy (pthread_spinlock_t *__lock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_spin_lock (pthread_spinlock_t *__lock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_spin_trylock (pthread_spinlock_t *__lock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_spin_unlock (pthread_spinlock_t *__lock) > throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, > const pthread_barrierattr_t *__restrict > __attr, unsigned int __count) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_barrier_wait (pthread_barrier_t *__barrier) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * > __restrict __attr, > int *__restrict __pshared) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, > int __pshared) > throw () __attribute__ ((__nonnull__ (1))); ># 1122 "/usr/include/pthread.h" 3 4 >extern int pthread_key_create (pthread_key_t *__key, > void (*__destr_function) (void *)) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_key_delete (pthread_key_t __key) throw (); > > >extern void *pthread_getspecific (pthread_key_t __key) throw (); > > >extern int pthread_setspecific (pthread_key_t __key, > const void *__pointer) throw () ; > > > > >extern int pthread_getcpuclockid (pthread_t __thread_id, > __clockid_t *__clock_id) > throw () __attribute__ ((__nonnull__ (2))); ># 1156 "/usr/include/pthread.h" 3 4 >extern int pthread_atfork (void (*__prepare) (void), > void (*__parent) (void), > void (*__child) (void)) throw (); > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2) throw () >{ > return __thread1 == __thread2; >} > > >} ># 36 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 2 3 ># 47 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >typedef pthread_t __gthread_t; >typedef pthread_key_t __gthread_key_t; >typedef pthread_once_t __gthread_once_t; >typedef pthread_mutex_t __gthread_mutex_t; >typedef pthread_mutex_t __gthread_recursive_mutex_t; >typedef pthread_cond_t __gthread_cond_t; >typedef struct timespec __gthread_time_t; ># 101 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static __typeof(pthread_once) __gthrw_pthread_once __attribute__ ((__weakref__("pthread_once"))); >static __typeof(pthread_getspecific) __gthrw_pthread_getspecific __attribute__ ((__weakref__("pthread_getspecific"))); >static __typeof(pthread_setspecific) __gthrw_pthread_setspecific __attribute__ ((__weakref__("pthread_setspecific"))); > >static __typeof(pthread_create) __gthrw_pthread_create __attribute__ ((__weakref__("pthread_create"))); >static __typeof(pthread_join) __gthrw_pthread_join __attribute__ ((__weakref__("pthread_join"))); >static __typeof(pthread_equal) __gthrw_pthread_equal __attribute__ ((__weakref__("pthread_equal"))); >static __typeof(pthread_self) __gthrw_pthread_self __attribute__ ((__weakref__("pthread_self"))); >static __typeof(pthread_detach) __gthrw_pthread_detach __attribute__ ((__weakref__("pthread_detach"))); > >static __typeof(pthread_cancel) __gthrw_pthread_cancel __attribute__ ((__weakref__("pthread_cancel"))); > >static __typeof(sched_yield) __gthrw_sched_yield __attribute__ ((__weakref__("sched_yield"))); > >static __typeof(pthread_mutex_lock) __gthrw_pthread_mutex_lock __attribute__ ((__weakref__("pthread_mutex_lock"))); >static __typeof(pthread_mutex_trylock) __gthrw_pthread_mutex_trylock __attribute__ ((__weakref__("pthread_mutex_trylock"))); > >static __typeof(pthread_mutex_timedlock) __gthrw_pthread_mutex_timedlock __attribute__ ((__weakref__("pthread_mutex_timedlock"))); > >static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock"))); >static __typeof(pthread_mutex_init) __gthrw_pthread_mutex_init __attribute__ ((__weakref__("pthread_mutex_init"))); >static __typeof(pthread_mutex_destroy) __gthrw_pthread_mutex_destroy __attribute__ ((__weakref__("pthread_mutex_destroy"))); > >static __typeof(pthread_cond_init) __gthrw_pthread_cond_init __attribute__ ((__weakref__("pthread_cond_init"))); >static __typeof(pthread_cond_broadcast) __gthrw_pthread_cond_broadcast __attribute__ ((__weakref__("pthread_cond_broadcast"))); >static __typeof(pthread_cond_signal) __gthrw_pthread_cond_signal __attribute__ ((__weakref__("pthread_cond_signal"))); >static __typeof(pthread_cond_wait) __gthrw_pthread_cond_wait __attribute__ ((__weakref__("pthread_cond_wait"))); >static __typeof(pthread_cond_timedwait) __gthrw_pthread_cond_timedwait __attribute__ ((__weakref__("pthread_cond_timedwait"))); >static __typeof(pthread_cond_destroy) __gthrw_pthread_cond_destroy __attribute__ ((__weakref__("pthread_cond_destroy"))); > >static __typeof(pthread_key_create) __gthrw_pthread_key_create __attribute__ ((__weakref__("pthread_key_create"))); >static __typeof(pthread_key_delete) __gthrw_pthread_key_delete __attribute__ ((__weakref__("pthread_key_delete"))); >static __typeof(pthread_mutexattr_init) __gthrw_pthread_mutexattr_init __attribute__ ((__weakref__("pthread_mutexattr_init"))); >static __typeof(pthread_mutexattr_settype) __gthrw_pthread_mutexattr_settype __attribute__ ((__weakref__("pthread_mutexattr_settype"))); >static __typeof(pthread_mutexattr_destroy) __gthrw_pthread_mutexattr_destroy __attribute__ ((__weakref__("pthread_mutexattr_destroy"))); ># 236 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static __typeof(pthread_key_create) __gthrw___pthread_key_create __attribute__ ((__weakref__("__pthread_key_create"))); ># 246 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static inline int >__gthread_active_p (void) >{ > static void *const __gthread_active_ptr > = __extension__ (void *) &__gthrw___pthread_key_create; > return __gthread_active_ptr != 0; >} ># 658 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static inline int >__gthread_create (__gthread_t *__threadid, void *(*__func) (void*), > void *__args) >{ > return __gthrw_pthread_create (__threadid, __null, __func, __args); >} > >static inline int >__gthread_join (__gthread_t __threadid, void **__value_ptr) >{ > return __gthrw_pthread_join (__threadid, __value_ptr); >} > >static inline int >__gthread_detach (__gthread_t __threadid) >{ > return __gthrw_pthread_detach (__threadid); >} > >static inline int >__gthread_equal (__gthread_t __t1, __gthread_t __t2) >{ > return __gthrw_pthread_equal (__t1, __t2); >} > >static inline __gthread_t >__gthread_self (void) >{ > return __gthrw_pthread_self (); >} > >static inline int >__gthread_yield (void) >{ > return __gthrw_sched_yield (); >} > >static inline int >__gthread_once (__gthread_once_t *__once, void (*__func) (void)) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_once (__once, __func); > else > return -1; >} > >static inline int >__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) >{ > return __gthrw_pthread_key_create (__key, __dtor); >} > >static inline int >__gthread_key_delete (__gthread_key_t __key) >{ > return __gthrw_pthread_key_delete (__key); >} > >static inline void * >__gthread_getspecific (__gthread_key_t __key) >{ > return __gthrw_pthread_getspecific (__key); >} > >static inline int >__gthread_setspecific (__gthread_key_t __key, const void *__ptr) >{ > return __gthrw_pthread_setspecific (__key, __ptr); >} > >static inline void >__gthread_mutex_init_function (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > __gthrw_pthread_mutex_init (__mutex, __null); >} > >static inline int >__gthread_mutex_destroy (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_destroy (__mutex); > else > return 0; >} > >static inline int >__gthread_mutex_lock (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_lock (__mutex); > else > return 0; >} > >static inline int >__gthread_mutex_trylock (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_trylock (__mutex); > else > return 0; >} > > >static inline int >__gthread_mutex_timedlock (__gthread_mutex_t *__mutex, > const __gthread_time_t *__abs_timeout) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_timedlock (__mutex, __abs_timeout); > else > return 0; >} > > >static inline int >__gthread_mutex_unlock (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_unlock (__mutex); > else > return 0; >} ># 807 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static inline int >__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) >{ > return __gthread_mutex_lock (__mutex); >} > >static inline int >__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) >{ > return __gthread_mutex_trylock (__mutex); >} > > >static inline int >__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, > const __gthread_time_t *__abs_timeout) >{ > return __gthread_mutex_timedlock (__mutex, __abs_timeout); >} > > >static inline int >__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) >{ > return __gthread_mutex_unlock (__mutex); >} > >static inline int >__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) >{ > return __gthread_mutex_destroy (__mutex); >} ># 849 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static inline int >__gthread_cond_broadcast (__gthread_cond_t *__cond) >{ > return __gthrw_pthread_cond_broadcast (__cond); >} > >static inline int >__gthread_cond_signal (__gthread_cond_t *__cond) >{ > return __gthrw_pthread_cond_signal (__cond); >} > >static inline int >__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) >{ > return __gthrw_pthread_cond_wait (__cond, __mutex); >} > >static inline int >__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, > const __gthread_time_t *__abs_timeout) >{ > return __gthrw_pthread_cond_timedwait (__cond, __mutex, __abs_timeout); >} > >static inline int >__gthread_cond_wait_recursive (__gthread_cond_t *__cond, > __gthread_recursive_mutex_t *__mutex) >{ > return __gthread_cond_wait (__cond, __mutex); >} > >static inline int >__gthread_cond_destroy (__gthread_cond_t* __cond) >{ > return __gthrw_pthread_cond_destroy (__cond); >} ># 149 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr.h" 2 3 > > >#pragma GCC visibility pop ># 36 "/usr/include/c++/4.8.2/ext/atomicity.h" 2 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/atomic_word.h" 1 3 ># 32 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/atomic_word.h" 3 >typedef int _Atomic_word; ># 37 "/usr/include/c++/4.8.2/ext/atomicity.h" 2 3 > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > > static inline _Atomic_word > __exchange_and_add(volatile _Atomic_word* __mem, int __val) > { return __atomic_fetch_add(__mem, __val, 4); } > > static inline void > __atomic_add(volatile _Atomic_word* __mem, int __val) > { __atomic_fetch_add(__mem, __val, 4); } ># 64 "/usr/include/c++/4.8.2/ext/atomicity.h" 3 > static inline _Atomic_word > __exchange_and_add_single(_Atomic_word* __mem, int __val) > { > _Atomic_word __result = *__mem; > *__mem += __val; > return __result; > } > > static inline void > __atomic_add_single(_Atomic_word* __mem, int __val) > { *__mem += __val; } > > static inline _Atomic_word > __attribute__ ((__unused__)) > __exchange_and_add_dispatch(_Atomic_word* __mem, int __val) > { > > if (__gthread_active_p()) > return __exchange_and_add(__mem, __val); > else > return __exchange_and_add_single(__mem, __val); > > > > } > > static inline void > __attribute__ ((__unused__)) > __atomic_add_dispatch(_Atomic_word* __mem, int __val) > { > > if (__gthread_active_p()) > __atomic_add(__mem, __val); > else > __atomic_add_single(__mem, __val); > > > > } > > >} ># 40 "/usr/include/c++/4.8.2/bits/basic_string.h" 2 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 111 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > class basic_string > { > typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type; > > > public: > typedef _Traits traits_type; > typedef typename _Traits::char_type value_type; > typedef _Alloc allocator_type; > typedef typename _CharT_alloc_type::size_type size_type; > typedef typename _CharT_alloc_type::difference_type difference_type; > typedef typename _CharT_alloc_type::reference reference; > typedef typename _CharT_alloc_type::const_reference const_reference; > typedef typename _CharT_alloc_type::pointer pointer; > typedef typename _CharT_alloc_type::const_pointer const_pointer; > typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator; > typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string> > const_iterator; > typedef std::reverse_iterator<const_iterator> const_reverse_iterator; > typedef std::reverse_iterator<iterator> reverse_iterator; > > private: ># 148 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > struct _Rep_base > { > size_type _M_length; > size_type _M_capacity; > _Atomic_word _M_refcount; > }; > > struct _Rep : _Rep_base > { > > typedef typename _Alloc::template rebind<char>::other _Raw_bytes_alloc; ># 173 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > static const size_type _S_max_size; > static const _CharT _S_terminal; > > > > static size_type _S_empty_rep_storage[]; > > static _Rep& > _S_empty_rep() > { > > > > void* __p = reinterpret_cast<void*>(&_S_empty_rep_storage); > return *reinterpret_cast<_Rep*>(__p); > } > > bool > _M_is_leaked() const > { return this->_M_refcount < 0; } > > bool > _M_is_shared() const > { return this->_M_refcount > 0; } > > void > _M_set_leaked() > { this->_M_refcount = -1; } > > void > _M_set_sharable() > { this->_M_refcount = 0; } > > void > _M_set_length_and_sharable(size_type __n) > { > > if (__builtin_expect(this != &_S_empty_rep(), false)) > > { > this->_M_set_sharable(); > this->_M_length = __n; > traits_type::assign(this->_M_refdata()[__n], _S_terminal); > > > } > } > > _CharT* > _M_refdata() throw() > { return reinterpret_cast<_CharT*>(this + 1); } > > _CharT* > _M_grab(const _Alloc& __alloc1, const _Alloc& __alloc2) > { > return (!_M_is_leaked() && __alloc1 == __alloc2) > ? _M_refcopy() : _M_clone(__alloc1); > } > > > static _Rep* > _S_create(size_type, size_type, const _Alloc&); > > void > _M_dispose(const _Alloc& __a) > { > > if (__builtin_expect(this != &_S_empty_rep(), false)) > > { > > ; > if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, > -1) <= 0) > { > ; > _M_destroy(__a); > } > } > } > > void > _M_destroy(const _Alloc&) throw(); > > _CharT* > _M_refcopy() throw() > { > > if (__builtin_expect(this != &_S_empty_rep(), false)) > > __gnu_cxx::__atomic_add_dispatch(&this->_M_refcount, 1); > return _M_refdata(); > } > > _CharT* > _M_clone(const _Alloc&, size_type __res = 0); > }; > > > struct _Alloc_hider : _Alloc > { > _Alloc_hider(_CharT* __dat, const _Alloc& __a) > : _Alloc(__a), _M_p(__dat) { } > > _CharT* _M_p; > }; > > public: > > > > > static const size_type npos = static_cast<size_type>(-1); > > private: > > mutable _Alloc_hider _M_dataplus; > > _CharT* > _M_data() const > { return _M_dataplus._M_p; } > > _CharT* > _M_data(_CharT* __p) > { return (_M_dataplus._M_p = __p); } > > _Rep* > _M_rep() const > { return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); } > > > > iterator > _M_ibegin() const > { return iterator(_M_data()); } > > iterator > _M_iend() const > { return iterator(_M_data() + this->size()); } > > void > _M_leak() > { > if (!_M_rep()->_M_is_leaked()) > _M_leak_hard(); > } > > size_type > _M_check(size_type __pos, const char* __s) const > { > if (__pos > this->size()) > __throw_out_of_range((__s)); > return __pos; > } > > void > _M_check_length(size_type __n1, size_type __n2, const char* __s) const > { > if (this->max_size() - (this->size() - __n1) < __n2) > __throw_length_error((__s)); > } > > > size_type > _M_limit(size_type __pos, size_type __off) const > { > const bool __testoff = __off < this->size() - __pos; > return __testoff ? __off : this->size() - __pos; > } > > > bool > _M_disjunct(const _CharT* __s) const > { > return (less<const _CharT*>()(__s, _M_data()) > || less<const _CharT*>()(_M_data() + this->size(), __s)); > } > > > > static void > _M_copy(_CharT* __d, const _CharT* __s, size_type __n) > { > if (__n == 1) > traits_type::assign(*__d, *__s); > else > traits_type::copy(__d, __s, __n); > } > > static void > _M_move(_CharT* __d, const _CharT* __s, size_type __n) > { > if (__n == 1) > traits_type::assign(*__d, *__s); > else > traits_type::move(__d, __s, __n); > } > > static void > _M_assign(_CharT* __d, size_type __n, _CharT __c) > { > if (__n == 1) > traits_type::assign(*__d, __c); > else > traits_type::assign(__d, __n, __c); > } > > > > template<class _Iterator> > static void > _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) > { > for (; __k1 != __k2; ++__k1, ++__p) > traits_type::assign(*__p, *__k1); > } > > static void > _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) > { _S_copy_chars(__p, __k1.base(), __k2.base()); } > > static void > _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) > { _S_copy_chars(__p, __k1.base(), __k2.base()); } > > static void > _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) > { _M_copy(__p, __k1, __k2 - __k1); } > > static void > _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) > { _M_copy(__p, __k1, __k2 - __k1); } > > static int > _S_compare(size_type __n1, size_type __n2) > { > const difference_type __d = difference_type(__n1 - __n2); > > if (__d > __gnu_cxx::__numeric_traits<int>::__max) > return __gnu_cxx::__numeric_traits<int>::__max; > else if (__d < __gnu_cxx::__numeric_traits<int>::__min) > return __gnu_cxx::__numeric_traits<int>::__min; > else > return int(__d); > } > > void > _M_mutate(size_type __pos, size_type __len1, size_type __len2); > > void > _M_leak_hard(); > > static _Rep& > _S_empty_rep() > { return _Rep::_S_empty_rep(); } > > public: > > > > > > > > basic_string() > > : _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) { } > > > > > > > > explicit > basic_string(const _Alloc& __a); > > > > > > > basic_string(const basic_string& __str); > > > > > > > basic_string(const basic_string& __str, size_type __pos, > size_type __n = npos); > > > > > > > > basic_string(const basic_string& __str, size_type __pos, > size_type __n, const _Alloc& __a); ># 483 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string(const _CharT* __s, size_type __n, > const _Alloc& __a = _Alloc()); > > > > > > basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()); > > > > > > > basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()); ># 531 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > basic_string(_InputIterator __beg, _InputIterator __end, > const _Alloc& __a = _Alloc()); > > > > > ~basic_string() > { _M_rep()->_M_dispose(this->get_allocator()); } > > > > > > basic_string& > operator=(const basic_string& __str) > { return this->assign(__str); } > > > > > > basic_string& > operator=(const _CharT* __s) > { return this->assign(__s); } ># 564 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > operator=(_CharT __c) > { > this->assign(1, __c); > return *this; > } ># 604 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > iterator > begin() > { > _M_leak(); > return iterator(_M_data()); > } > > > > > > const_iterator > begin() const > { return const_iterator(_M_data()); } > > > > > > iterator > end() > { > _M_leak(); > return iterator(_M_data() + this->size()); > } > > > > > > const_iterator > end() const > { return const_iterator(_M_data() + this->size()); } > > > > > > > reverse_iterator > rbegin() > { return reverse_iterator(this->end()); } > > > > > > > const_reverse_iterator > rbegin() const > { return const_reverse_iterator(this->end()); } > > > > > > > reverse_iterator > rend() > { return reverse_iterator(this->begin()); } > > > > > > > const_reverse_iterator > rend() const > { return const_reverse_iterator(this->begin()); } ># 710 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > public: > > > > size_type > size() const > { return _M_rep()->_M_length; } > > > > size_type > length() const > { return _M_rep()->_M_length; } > > > size_type > max_size() const > { return _Rep::_S_max_size; } ># 739 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > resize(size_type __n, _CharT __c); ># 752 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > resize(size_type __n) > { this->resize(__n, _CharT()); } ># 775 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > capacity() const > { return _M_rep()->_M_capacity; } ># 796 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > reserve(size_type __res_arg = 0); > > > > > void > clear() > { _M_mutate(0, this->size(), 0); } > > > > > > bool > empty() const > { return this->size() == 0; } ># 825 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > const_reference > operator[] (size_type __pos) const > { > ; > return _M_data()[__pos]; > } ># 842 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > reference > operator[](size_type __pos) > { > > ; > > ; > _M_leak(); > return _M_data()[__pos]; > } ># 863 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > const_reference > at(size_type __n) const > { > if (__n >= this->size()) > __throw_out_of_range(("basic_string::at")); > return _M_data()[__n]; > } ># 882 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > reference > at(size_type __n) > { > if (__n >= size()) > __throw_out_of_range(("basic_string::at")); > _M_leak(); > return _M_data()[__n]; > } ># 931 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > operator+=(const basic_string& __str) > { return this->append(__str); } > > > > > > > basic_string& > operator+=(const _CharT* __s) > { return this->append(__s); } > > > > > > > basic_string& > operator+=(_CharT __c) > { > this->push_back(__c); > return *this; > } ># 972 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > append(const basic_string& __str); ># 988 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > append(const basic_string& __str, size_type __pos, size_type __n); > > > > > > > > basic_string& > append(const _CharT* __s, size_type __n); > > > > > > > basic_string& > append(const _CharT* __s) > { > ; > return this->append(__s, traits_type::length(__s)); > } ># 1020 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > append(size_type __n, _CharT __c); ># 1042 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > basic_string& > append(_InputIterator __first, _InputIterator __last) > { return this->replace(_M_iend(), _M_iend(), __first, __last); } > > > > > > void > push_back(_CharT __c) > { > const size_type __len = 1 + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > this->reserve(__len); > traits_type::assign(_M_data()[this->size()], __c); > _M_rep()->_M_set_length_and_sharable(__len); > } > > > > > > > basic_string& > assign(const basic_string& __str); ># 1099 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > assign(const basic_string& __str, size_type __pos, size_type __n) > { return this->assign(__str._M_data() > + __str._M_check(__pos, "basic_string::assign"), > __str._M_limit(__pos, __n)); } ># 1115 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > assign(const _CharT* __s, size_type __n); ># 1127 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > assign(const _CharT* __s) > { > ; > return this->assign(__s, traits_type::length(__s)); > } ># 1143 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > assign(size_type __n, _CharT __c) > { return _M_replace_aux(size_type(0), this->size(), __n, __c); } ># 1155 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > basic_string& > assign(_InputIterator __first, _InputIterator __last) > { return this->replace(_M_ibegin(), _M_iend(), __first, __last); } ># 1184 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > insert(iterator __p, size_type __n, _CharT __c) > { this->replace(__p, __p, __n, __c); } ># 1200 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > void > insert(iterator __p, _InputIterator __beg, _InputIterator __end) > { this->replace(__p, __p, __beg, __end); } ># 1232 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos1, const basic_string& __str) > { return this->insert(__pos1, __str, size_type(0), __str.size()); } ># 1254 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos1, const basic_string& __str, > size_type __pos2, size_type __n) > { return this->insert(__pos1, __str._M_data() > + __str._M_check(__pos2, "basic_string::insert"), > __str._M_limit(__pos2, __n)); } ># 1277 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos, const _CharT* __s, size_type __n); ># 1295 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos, const _CharT* __s) > { > ; > return this->insert(__pos, __s, traits_type::length(__s)); > } ># 1318 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos, size_type __n, _CharT __c) > { return _M_replace_aux(_M_check(__pos, "basic_string::insert"), > size_type(0), __n, __c); } ># 1336 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > iterator > insert(iterator __p, _CharT __c) > { > ; > const size_type __pos = __p - _M_ibegin(); > _M_replace_aux(__pos, size_type(0), size_type(1), __c); > _M_rep()->_M_set_leaked(); > return iterator(_M_data() + __pos); > } ># 1361 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > erase(size_type __pos = 0, size_type __n = npos) > { > _M_mutate(_M_check(__pos, "basic_string::erase"), > _M_limit(__pos, __n), size_type(0)); > return *this; > } ># 1377 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > iterator > erase(iterator __position) > { > > ; > const size_type __pos = __position - _M_ibegin(); > _M_mutate(__pos, size_type(1), size_type(0)); > _M_rep()->_M_set_leaked(); > return iterator(_M_data() + __pos); > } ># 1397 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > iterator > erase(iterator __first, iterator __last); ># 1428 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos, size_type __n, const basic_string& __str) > { return this->replace(__pos, __n, __str._M_data(), __str.size()); } ># 1450 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos1, size_type __n1, const basic_string& __str, > size_type __pos2, size_type __n2) > { return this->replace(__pos1, __n1, __str._M_data() > + __str._M_check(__pos2, "basic_string::replace"), > __str._M_limit(__pos2, __n2)); } ># 1475 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos, size_type __n1, const _CharT* __s, > size_type __n2); ># 1495 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos, size_type __n1, const _CharT* __s) > { > ; > return this->replace(__pos, __n1, __s, traits_type::length(__s)); > } ># 1519 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) > { return _M_replace_aux(_M_check(__pos, "basic_string::replace"), > _M_limit(__pos, __n1), __n2, __c); } ># 1537 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(iterator __i1, iterator __i2, const basic_string& __str) > { return this->replace(__i1, __i2, __str._M_data(), __str.size()); } ># 1556 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(iterator __i1, iterator __i2, const _CharT* __s, size_type __n) > { > > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, __s, __n); > } ># 1577 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(iterator __i1, iterator __i2, const _CharT* __s) > { > ; > return this->replace(__i1, __i2, __s, traits_type::length(__s)); > } ># 1598 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(iterator __i1, iterator __i2, size_type __n, _CharT __c) > { > > ; > return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __c); > } ># 1621 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > basic_string& > replace(iterator __i1, iterator __i2, > _InputIterator __k1, _InputIterator __k2) > { > > ; > ; > typedef typename std::__is_integer<_InputIterator>::__type _Integral; > return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral()); > } > > > > basic_string& > replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2) > { > > ; > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, > __k1, __k2 - __k1); > } > > basic_string& > replace(iterator __i1, iterator __i2, > const _CharT* __k1, const _CharT* __k2) > { > > ; > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, > __k1, __k2 - __k1); > } > > basic_string& > replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2) > { > > ; > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, > __k1.base(), __k2 - __k1); > } > > basic_string& > replace(iterator __i1, iterator __i2, > const_iterator __k1, const_iterator __k2) > { > > ; > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, > __k1.base(), __k2 - __k1); > } ># 1697 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > private: > template<class _Integer> > basic_string& > _M_replace_dispatch(iterator __i1, iterator __i2, _Integer __n, > _Integer __val, __true_type) > { return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __val); } > > template<class _InputIterator> > basic_string& > _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1, > _InputIterator __k2, __false_type); > > basic_string& > _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, > _CharT __c); > > basic_string& > _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s, > size_type __n2); > > > > template<class _InIterator> > static _CharT* > _S_construct_aux(_InIterator __beg, _InIterator __end, > const _Alloc& __a, __false_type) > { > typedef typename iterator_traits<_InIterator>::iterator_category _Tag; > return _S_construct(__beg, __end, __a, _Tag()); > } > > > > template<class _Integer> > static _CharT* > _S_construct_aux(_Integer __beg, _Integer __end, > const _Alloc& __a, __true_type) > { return _S_construct_aux_2(static_cast<size_type>(__beg), > __end, __a); } > > static _CharT* > _S_construct_aux_2(size_type __req, _CharT __c, const _Alloc& __a) > { return _S_construct(__req, __c, __a); } > > template<class _InIterator> > static _CharT* > _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a) > { > typedef typename std::__is_integer<_InIterator>::__type _Integral; > return _S_construct_aux(__beg, __end, __a, _Integral()); > } > > > template<class _InIterator> > static _CharT* > _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, > input_iterator_tag); > > > > template<class _FwdIterator> > static _CharT* > _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a, > forward_iterator_tag); > > static _CharT* > _S_construct(size_type __req, _CharT __c, const _Alloc& __a); > > public: ># 1779 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > copy(_CharT* __s, size_type __n, size_type __pos = 0) const; ># 1789 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > swap(basic_string& __s); ># 1799 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > const _CharT* > c_str() const > { return _M_data(); } > > > > > > > > const _CharT* > data() const > { return _M_data(); } > > > > > allocator_type > get_allocator() const > { return _M_dataplus; } ># 1832 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find(const _CharT* __s, size_type __pos, size_type __n) const; ># 1845 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find(const basic_string& __str, size_type __pos = 0) const > > { return this->find(__str.data(), __pos, __str.size()); } ># 1860 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find(const _CharT* __s, size_type __pos = 0) const > { > ; > return this->find(__s, __pos, traits_type::length(__s)); > } ># 1877 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find(_CharT __c, size_type __pos = 0) const ; ># 1890 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > rfind(const basic_string& __str, size_type __pos = npos) const > > { return this->rfind(__str.data(), __pos, __str.size()); } ># 1907 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > rfind(const _CharT* __s, size_type __pos, size_type __n) const; ># 1920 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > rfind(const _CharT* __s, size_type __pos = npos) const > { > ; > return this->rfind(__s, __pos, traits_type::length(__s)); > } ># 1937 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > rfind(_CharT __c, size_type __pos = npos) const ; ># 1951 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_of(const basic_string& __str, size_type __pos = 0) const > > { return this->find_first_of(__str.data(), __pos, __str.size()); } ># 1968 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_of(const _CharT* __s, size_type __pos, size_type __n) const; ># 1981 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_of(const _CharT* __s, size_type __pos = 0) const > { > ; > return this->find_first_of(__s, __pos, traits_type::length(__s)); > } ># 2000 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_of(_CharT __c, size_type __pos = 0) const > { return this->find(__c, __pos); } ># 2015 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_of(const basic_string& __str, size_type __pos = npos) const > > { return this->find_last_of(__str.data(), __pos, __str.size()); } ># 2032 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_of(const _CharT* __s, size_type __pos, size_type __n) const; ># 2045 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_of(const _CharT* __s, size_type __pos = npos) const > { > ; > return this->find_last_of(__s, __pos, traits_type::length(__s)); > } ># 2064 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_of(_CharT __c, size_type __pos = npos) const > { return this->rfind(__c, __pos); } ># 2078 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_not_of(const basic_string& __str, size_type __pos = 0) const > > { return this->find_first_not_of(__str.data(), __pos, __str.size()); } ># 2095 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_not_of(const _CharT* __s, size_type __pos, > size_type __n) const; ># 2109 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_not_of(const _CharT* __s, size_type __pos = 0) const > { > ; > return this->find_first_not_of(__s, __pos, traits_type::length(__s)); > } ># 2126 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_not_of(_CharT __c, size_type __pos = 0) const > ; ># 2141 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_not_of(const basic_string& __str, size_type __pos = npos) const > > { return this->find_last_not_of(__str.data(), __pos, __str.size()); } ># 2158 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_not_of(const _CharT* __s, size_type __pos, > size_type __n) const; ># 2172 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_not_of(const _CharT* __s, size_type __pos = npos) const > { > ; > return this->find_last_not_of(__s, __pos, traits_type::length(__s)); > } ># 2189 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_not_of(_CharT __c, size_type __pos = npos) const > ; ># 2205 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string > substr(size_type __pos = 0, size_type __n = npos) const > { return basic_string(*this, > _M_check(__pos, "basic_string::substr"), __n); } ># 2224 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(const basic_string& __str) const > { > const size_type __size = this->size(); > const size_type __osize = __str.size(); > const size_type __len = std::min(__size, __osize); > > int __r = traits_type::compare(_M_data(), __str.data(), __len); > if (!__r) > __r = _S_compare(__size, __osize); > return __r; > } ># 2256 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(size_type __pos, size_type __n, const basic_string& __str) const; ># 2282 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(size_type __pos1, size_type __n1, const basic_string& __str, > size_type __pos2, size_type __n2) const; ># 2300 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(const _CharT* __s) const; ># 2324 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(size_type __pos, size_type __n1, const _CharT* __s) const; ># 2351 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(size_type __pos, size_type __n1, const _CharT* __s, > size_type __n2) const; > }; ># 2363 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc> > operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { > basic_string<_CharT, _Traits, _Alloc> __str(__lhs); > __str.append(__rhs); > return __str; > } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT,_Traits,_Alloc> > operator+(const _CharT* __lhs, > const basic_string<_CharT,_Traits,_Alloc>& __rhs); > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT,_Traits,_Alloc> > operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs); > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline basic_string<_CharT, _Traits, _Alloc> > operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { > basic_string<_CharT, _Traits, _Alloc> __str(__lhs); > __str.append(__rhs); > return __str; > } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline basic_string<_CharT, _Traits, _Alloc> > operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) > { > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __string_type::size_type __size_type; > __string_type __str(__lhs); > __str.append(__size_type(1), __rhs); > return __str; > } ># 2484 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) == 0; } > > template<typename _CharT> > inline > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type > operator==(const basic_string<_CharT>& __lhs, > const basic_string<_CharT>& __rhs) > { return (__lhs.size() == __rhs.size() > && !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(), > __lhs.size())); } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator==(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) == 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) == 0; } ># 2530 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return !(__lhs == __rhs); } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator!=(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return !(__lhs == __rhs); } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return !(__lhs == __rhs); } ># 2567 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) < 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) < 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) > 0; } ># 2604 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) > 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) > 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) < 0; } ># 2641 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) <= 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) <= 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<=(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) >= 0; } ># 2678 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) >= 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) >= 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>=(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) <= 0; } ># 2715 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline void > swap(basic_string<_CharT, _Traits, _Alloc>& __lhs, > basic_string<_CharT, _Traits, _Alloc>& __rhs) > { __lhs.swap(__rhs); } ># 2733 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __is, > basic_string<_CharT, _Traits, _Alloc>& __str); > > template<> > basic_istream<char>& > operator>>(basic_istream<char>& __is, basic_string<char>& __str); ># 2751 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __os, > const basic_string<_CharT, _Traits, _Alloc>& __str) > { > > > return __ostream_insert(__os, __str.data(), __str.size()); > } ># 2774 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > basic_istream<_CharT, _Traits>& > getline(basic_istream<_CharT, _Traits>& __is, > basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim); ># 2791 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline basic_istream<_CharT, _Traits>& > getline(basic_istream<_CharT, _Traits>& __is, > basic_string<_CharT, _Traits, _Alloc>& __str) > { return getline(__is, __str, __is.widen('\n')); } > > template<> > basic_istream<char>& > getline(basic_istream<char>& __in, basic_string<char>& __str, > char __delim); > > > template<> > basic_istream<wchar_t>& > getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str, > wchar_t __delim); > > > >} ># 53 "/usr/include/c++/4.8.2/string" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 1 3 ># 40 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 3 ># 41 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 3 > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits, typename _Alloc> > const typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > _Rep::_S_max_size = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4; > > template<typename _CharT, typename _Traits, typename _Alloc> > const _CharT > basic_string<_CharT, _Traits, _Alloc>:: > _Rep::_S_terminal = _CharT(); > > template<typename _CharT, typename _Traits, typename _Alloc> > const typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>::npos; > > > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_empty_rep_storage[ > (sizeof(_Rep_base) + sizeof(_CharT) + sizeof(size_type) - 1) / > sizeof(size_type)]; > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > template<typename _InIterator> > _CharT* > basic_string<_CharT, _Traits, _Alloc>:: > _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, > input_iterator_tag) > { > > if (__beg == __end && __a == _Alloc()) > return _S_empty_rep()._M_refdata(); > > > _CharT __buf[128]; > size_type __len = 0; > while (__beg != __end && __len < sizeof(__buf) / sizeof(_CharT)) > { > __buf[__len++] = *__beg; > ++__beg; > } > _Rep* __r = _Rep::_S_create(__len, size_type(0), __a); > _M_copy(__r->_M_refdata(), __buf, __len); > try > { > while (__beg != __end) > { > if (__len == __r->_M_capacity) > { > > _Rep* __another = _Rep::_S_create(__len + 1, __len, __a); > _M_copy(__another->_M_refdata(), __r->_M_refdata(), __len); > __r->_M_destroy(__a); > __r = __another; > } > __r->_M_refdata()[__len++] = *__beg; > ++__beg; > } > } > catch(...) > { > __r->_M_destroy(__a); > throw; > } > __r->_M_set_length_and_sharable(__len); > return __r->_M_refdata(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > template <typename _InIterator> > _CharT* > basic_string<_CharT, _Traits, _Alloc>:: > _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, > forward_iterator_tag) > { > > if (__beg == __end && __a == _Alloc()) > return _S_empty_rep()._M_refdata(); > > > if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end) > __throw_logic_error(("basic_string::_S_construct null not valid")); > > const size_type __dnew = static_cast<size_type>(std::distance(__beg, > __end)); > > _Rep* __r = _Rep::_S_create(__dnew, size_type(0), __a); > try > { _S_copy_chars(__r->_M_refdata(), __beg, __end); } > catch(...) > { > __r->_M_destroy(__a); > throw; > } > __r->_M_set_length_and_sharable(__dnew); > return __r->_M_refdata(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > _CharT* > basic_string<_CharT, _Traits, _Alloc>:: > _S_construct(size_type __n, _CharT __c, const _Alloc& __a) > { > > if (__n == 0 && __a == _Alloc()) > return _S_empty_rep()._M_refdata(); > > > _Rep* __r = _Rep::_S_create(__n, size_type(0), __a); > if (__n) > _M_assign(__r->_M_refdata(), __n, __c); > > __r->_M_set_length_and_sharable(__n); > return __r->_M_refdata(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const basic_string& __str) > : _M_dataplus(__str._M_rep()->_M_grab(_Alloc(__str.get_allocator()), > __str.get_allocator()), > __str.get_allocator()) > { } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const _Alloc& __a) > : _M_dataplus(_S_construct(size_type(), _CharT(), __a), __a) > { } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const basic_string& __str, size_type __pos, size_type __n) > : _M_dataplus(_S_construct(__str._M_data() > + __str._M_check(__pos, > "basic_string::basic_string"), > __str._M_data() + __str._M_limit(__pos, __n) > + __pos, _Alloc()), _Alloc()) > { } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const basic_string& __str, size_type __pos, > size_type __n, const _Alloc& __a) > : _M_dataplus(_S_construct(__str._M_data() > + __str._M_check(__pos, > "basic_string::basic_string"), > __str._M_data() + __str._M_limit(__pos, __n) > + __pos, __a), __a) > { } > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const _CharT* __s, size_type __n, const _Alloc& __a) > : _M_dataplus(_S_construct(__s, __s + __n, __a), __a) > { } > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const _CharT* __s, const _Alloc& __a) > : _M_dataplus(_S_construct(__s, __s ? __s + traits_type::length(__s) : > __s + npos, __a), __a) > { } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(size_type __n, _CharT __c, const _Alloc& __a) > : _M_dataplus(_S_construct(__n, __c, __a), __a) > { } > > > template<typename _CharT, typename _Traits, typename _Alloc> > template<typename _InputIterator> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a) > : _M_dataplus(_S_construct(__beg, __end, __a), __a) > { } ># 240 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > assign(const basic_string& __str) > { > if (_M_rep() != __str._M_rep()) > { > > const allocator_type __a = this->get_allocator(); > _CharT* __tmp = __str._M_rep()->_M_grab(__a, __str.get_allocator()); > _M_rep()->_M_dispose(__a); > _M_data(__tmp); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > assign(const _CharT* __s, size_type __n) > { > ; > _M_check_length(this->size(), __n, "basic_string::assign"); > if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) > return _M_replace_safe(size_type(0), this->size(), __s, __n); > else > { > > const size_type __pos = __s - _M_data(); > if (__pos >= __n) > _M_copy(_M_data(), __s, __n); > else if (__pos) > _M_move(_M_data(), __s, __n); > _M_rep()->_M_set_length_and_sharable(__n); > return *this; > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > append(size_type __n, _CharT __c) > { > if (__n) > { > _M_check_length(size_type(0), __n, "basic_string::append"); > const size_type __len = __n + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > this->reserve(__len); > _M_assign(_M_data() + this->size(), __n, __c); > _M_rep()->_M_set_length_and_sharable(__len); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > append(const _CharT* __s, size_type __n) > { > ; > if (__n) > { > _M_check_length(size_type(0), __n, "basic_string::append"); > const size_type __len = __n + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > { > if (_M_disjunct(__s)) > this->reserve(__len); > else > { > const size_type __off = __s - _M_data(); > this->reserve(__len); > __s = _M_data() + __off; > } > } > _M_copy(_M_data() + this->size(), __s, __n); > _M_rep()->_M_set_length_and_sharable(__len); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > append(const basic_string& __str) > { > const size_type __size = __str.size(); > if (__size) > { > const size_type __len = __size + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > this->reserve(__len); > _M_copy(_M_data() + this->size(), __str._M_data(), __size); > _M_rep()->_M_set_length_and_sharable(__len); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > append(const basic_string& __str, size_type __pos, size_type __n) > { > __str._M_check(__pos, "basic_string::append"); > __n = __str._M_limit(__pos, __n); > if (__n) > { > const size_type __len = __n + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > this->reserve(__len); > _M_copy(_M_data() + this->size(), __str._M_data() + __pos, __n); > _M_rep()->_M_set_length_and_sharable(__len); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > insert(size_type __pos, const _CharT* __s, size_type __n) > { > ; > _M_check(__pos, "basic_string::insert"); > _M_check_length(size_type(0), __n, "basic_string::insert"); > if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) > return _M_replace_safe(__pos, size_type(0), __s, __n); > else > { > > const size_type __off = __s - _M_data(); > _M_mutate(__pos, 0, __n); > __s = _M_data() + __off; > _CharT* __p = _M_data() + __pos; > if (__s + __n <= __p) > _M_copy(__p, __s, __n); > else if (__s >= __p) > _M_copy(__p, __s + __n, __n); > else > { > const size_type __nleft = __p - __s; > _M_copy(__p, __s, __nleft); > _M_copy(__p + __nleft, __p + __n, __n - __nleft); > } > return *this; > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::iterator > basic_string<_CharT, _Traits, _Alloc>:: > erase(iterator __first, iterator __last) > { > > ; > > > > > const size_type __size = __last - __first; > if (__size) > { > const size_type __pos = __first - _M_ibegin(); > _M_mutate(__pos, __size, size_type(0)); > _M_rep()->_M_set_leaked(); > return iterator(_M_data() + __pos); > } > else > return __first; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > replace(size_type __pos, size_type __n1, const _CharT* __s, > size_type __n2) > { > ; > _M_check(__pos, "basic_string::replace"); > __n1 = _M_limit(__pos, __n1); > _M_check_length(__n1, __n2, "basic_string::replace"); > bool __left; > if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) > return _M_replace_safe(__pos, __n1, __s, __n2); > else if ((__left = __s + __n2 <= _M_data() + __pos) > || _M_data() + __pos + __n1 <= __s) > { > > size_type __off = __s - _M_data(); > __left ? __off : (__off += __n2 - __n1); > _M_mutate(__pos, __n1, __n2); > _M_copy(_M_data() + __pos, _M_data() + __off, __n2); > return *this; > } > else > { > > const basic_string __tmp(__s, __n2); > return _M_replace_safe(__pos, __n1, __tmp._M_data(), __n2); > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>::_Rep:: > _M_destroy(const _Alloc& __a) throw () > { > const size_type __size = sizeof(_Rep_base) + > (this->_M_capacity + 1) * sizeof(_CharT); > _Raw_bytes_alloc(__a).deallocate(reinterpret_cast<char*>(this), __size); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > _M_leak_hard() > { > > if (_M_rep() == &_S_empty_rep()) > return; > > if (_M_rep()->_M_is_shared()) > _M_mutate(0, 0, 0); > _M_rep()->_M_set_leaked(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > _M_mutate(size_type __pos, size_type __len1, size_type __len2) > { > const size_type __old_size = this->size(); > const size_type __new_size = __old_size + __len2 - __len1; > const size_type __how_much = __old_size - __pos - __len1; > > if (__new_size > this->capacity() || _M_rep()->_M_is_shared()) > { > > const allocator_type __a = get_allocator(); > _Rep* __r = _Rep::_S_create(__new_size, this->capacity(), __a); > > if (__pos) > _M_copy(__r->_M_refdata(), _M_data(), __pos); > if (__how_much) > _M_copy(__r->_M_refdata() + __pos + __len2, > _M_data() + __pos + __len1, __how_much); > > _M_rep()->_M_dispose(__a); > _M_data(__r->_M_refdata()); > } > else if (__how_much && __len1 != __len2) > { > > _M_move(_M_data() + __pos + __len2, > _M_data() + __pos + __len1, __how_much); > } > _M_rep()->_M_set_length_and_sharable(__new_size); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > reserve(size_type __res) > { > if (__res != this->capacity() || _M_rep()->_M_is_shared()) > { > > if (__res < this->size()) > __res = this->size(); > const allocator_type __a = get_allocator(); > _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size()); > _M_rep()->_M_dispose(__a); > _M_data(__tmp); > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > swap(basic_string& __s) > { > if (_M_rep()->_M_is_leaked()) > _M_rep()->_M_set_sharable(); > if (__s._M_rep()->_M_is_leaked()) > __s._M_rep()->_M_set_sharable(); > if (this->get_allocator() == __s.get_allocator()) > { > _CharT* __tmp = _M_data(); > _M_data(__s._M_data()); > __s._M_data(__tmp); > } > > else > { > const basic_string __tmp1(_M_ibegin(), _M_iend(), > __s.get_allocator()); > const basic_string __tmp2(__s._M_ibegin(), __s._M_iend(), > this->get_allocator()); > *this = __tmp2; > __s = __tmp1; > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::_Rep* > basic_string<_CharT, _Traits, _Alloc>::_Rep:: > _S_create(size_type __capacity, size_type __old_capacity, > const _Alloc& __alloc) > { > > > if (__capacity > _S_max_size) > __throw_length_error(("basic_string::_S_create")); ># 577 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 3 > const size_type __pagesize = 4096; > const size_type __malloc_header_size = 4 * sizeof(void*); > > > > > > > > if (__capacity > __old_capacity && __capacity < 2 * __old_capacity) > __capacity = 2 * __old_capacity; > > > > > size_type __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep); > > const size_type __adj_size = __size + __malloc_header_size; > if (__adj_size > __pagesize && __capacity > __old_capacity) > { > const size_type __extra = __pagesize - __adj_size % __pagesize; > __capacity += __extra / sizeof(_CharT); > > if (__capacity > _S_max_size) > __capacity = _S_max_size; > __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep); > } > > > > void* __place = _Raw_bytes_alloc(__alloc).allocate(__size); > _Rep *__p = new (__place) _Rep; > __p->_M_capacity = __capacity; > > > > > > > > __p->_M_set_sharable(); > return __p; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > _CharT* > basic_string<_CharT, _Traits, _Alloc>::_Rep:: > _M_clone(const _Alloc& __alloc, size_type __res) > { > > const size_type __requested_cap = this->_M_length + __res; > _Rep* __r = _Rep::_S_create(__requested_cap, this->_M_capacity, > __alloc); > if (this->_M_length) > _M_copy(__r->_M_refdata(), _M_refdata(), this->_M_length); > > __r->_M_set_length_and_sharable(this->_M_length); > return __r->_M_refdata(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > resize(size_type __n, _CharT __c) > { > const size_type __size = this->size(); > _M_check_length(__size, __n, "basic_string::resize"); > if (__size < __n) > this->append(__n - __size, __c); > else if (__n < __size) > this->erase(__n); > > } > > template<typename _CharT, typename _Traits, typename _Alloc> > template<typename _InputIterator> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1, > _InputIterator __k2, __false_type) > { > const basic_string __s(__k1, __k2); > const size_type __n1 = __i2 - __i1; > _M_check_length(__n1, __s.size(), "basic_string::_M_replace_dispatch"); > return _M_replace_safe(__i1 - _M_ibegin(), __n1, __s._M_data(), > __s.size()); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, > _CharT __c) > { > _M_check_length(__n1, __n2, "basic_string::_M_replace_aux"); > _M_mutate(__pos1, __n1, __n2); > if (__n2) > _M_assign(_M_data() + __pos1, __n2, __c); > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s, > size_type __n2) > { > _M_mutate(__pos1, __n1, __n2); > if (__n2) > _M_copy(_M_data() + __pos1, __s, __n2); > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc> > operator+(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { > ; > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __string_type::size_type __size_type; > const __size_type __len = _Traits::length(__lhs); > __string_type __str; > __str.reserve(__len + __rhs.size()); > __str.append(__lhs, __len); > __str.append(__rhs); > return __str; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc> > operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __string_type::size_type __size_type; > __string_type __str; > const __size_type __len = __rhs.size(); > __str.reserve(__len + 1); > __str.append(__size_type(1), __lhs); > __str.append(__rhs); > return __str; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > copy(_CharT* __s, size_type __n, size_type __pos) const > { > _M_check(__pos, "basic_string::copy"); > __n = _M_limit(__pos, __n); > ; > if (__n) > _M_copy(__s, _M_data() + __pos, __n); > > return __n; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > const size_type __size = this->size(); > const _CharT* __data = _M_data(); > > if (__n == 0) > return __pos <= __size ? __pos : npos; > > if (__n <= __size) > { > for (; __pos <= __size - __n; ++__pos) > if (traits_type::eq(__data[__pos], __s[0]) > && traits_type::compare(__data + __pos + 1, > __s + 1, __n - 1) == 0) > return __pos; > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find(_CharT __c, size_type __pos) const > { > size_type __ret = npos; > const size_type __size = this->size(); > if (__pos < __size) > { > const _CharT* __data = _M_data(); > const size_type __n = __size - __pos; > const _CharT* __p = traits_type::find(__data + __pos, __n, __c); > if (__p) > __ret = __p - __data; > } > return __ret; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > rfind(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > const size_type __size = this->size(); > if (__n <= __size) > { > __pos = std::min(size_type(__size - __n), __pos); > const _CharT* __data = _M_data(); > do > { > if (traits_type::compare(__data + __pos, __s, __n) == 0) > return __pos; > } > while (__pos-- > 0); > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > rfind(_CharT __c, size_type __pos) const > { > size_type __size = this->size(); > if (__size) > { > if (--__size > __pos) > __size = __pos; > for (++__size; __size-- > 0; ) > if (traits_type::eq(_M_data()[__size], __c)) > return __size; > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_first_of(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > for (; __n && __pos < this->size(); ++__pos) > { > const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]); > if (__p) > return __pos; > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_last_of(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > size_type __size = this->size(); > if (__size && __n) > { > if (--__size > __pos) > __size = __pos; > do > { > if (traits_type::find(__s, __n, _M_data()[__size])) > return __size; > } > while (__size-- != 0); > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > for (; __pos < this->size(); ++__pos) > if (!traits_type::find(__s, __n, _M_data()[__pos])) > return __pos; > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_first_not_of(_CharT __c, size_type __pos) const > { > for (; __pos < this->size(); ++__pos) > if (!traits_type::eq(_M_data()[__pos], __c)) > return __pos; > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > size_type __size = this->size(); > if (__size) > { > if (--__size > __pos) > __size = __pos; > do > { > if (!traits_type::find(__s, __n, _M_data()[__size])) > return __size; > } > while (__size--); > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_last_not_of(_CharT __c, size_type __pos) const > { > size_type __size = this->size(); > if (__size) > { > if (--__size > __pos) > __size = __pos; > do > { > if (!traits_type::eq(_M_data()[__size], __c)) > return __size; > } > while (__size--); > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string<_CharT, _Traits, _Alloc>:: > compare(size_type __pos, size_type __n, const basic_string& __str) const > { > _M_check(__pos, "basic_string::compare"); > __n = _M_limit(__pos, __n); > const size_type __osize = __str.size(); > const size_type __len = std::min(__n, __osize); > int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len); > if (!__r) > __r = _S_compare(__n, __osize); > return __r; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string<_CharT, _Traits, _Alloc>:: > compare(size_type __pos1, size_type __n1, const basic_string& __str, > size_type __pos2, size_type __n2) const > { > _M_check(__pos1, "basic_string::compare"); > __str._M_check(__pos2, "basic_string::compare"); > __n1 = _M_limit(__pos1, __n1); > __n2 = __str._M_limit(__pos2, __n2); > const size_type __len = std::min(__n1, __n2); > int __r = traits_type::compare(_M_data() + __pos1, > __str.data() + __pos2, __len); > if (!__r) > __r = _S_compare(__n1, __n2); > return __r; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string<_CharT, _Traits, _Alloc>:: > compare(const _CharT* __s) const > { > ; > const size_type __size = this->size(); > const size_type __osize = traits_type::length(__s); > const size_type __len = std::min(__size, __osize); > int __r = traits_type::compare(_M_data(), __s, __len); > if (!__r) > __r = _S_compare(__size, __osize); > return __r; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string <_CharT, _Traits, _Alloc>:: > compare(size_type __pos, size_type __n1, const _CharT* __s) const > { > ; > _M_check(__pos, "basic_string::compare"); > __n1 = _M_limit(__pos, __n1); > const size_type __osize = traits_type::length(__s); > const size_type __len = std::min(__n1, __osize); > int __r = traits_type::compare(_M_data() + __pos, __s, __len); > if (!__r) > __r = _S_compare(__n1, __osize); > return __r; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string <_CharT, _Traits, _Alloc>:: > compare(size_type __pos, size_type __n1, const _CharT* __s, > size_type __n2) const > { > ; > _M_check(__pos, "basic_string::compare"); > __n1 = _M_limit(__pos, __n1); > const size_type __len = std::min(__n1, __n2); > int __r = traits_type::compare(_M_data() + __pos, __s, __len); > if (!__r) > __r = _S_compare(__n1, __n2); > return __r; > } > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __in, > basic_string<_CharT, _Traits, _Alloc>& __str) > { > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __istream_type::ios_base __ios_base; > typedef typename __istream_type::int_type __int_type; > typedef typename __string_type::size_type __size_type; > typedef ctype<_CharT> __ctype_type; > typedef typename __ctype_type::ctype_base __ctype_base; > > __size_type __extracted = 0; > typename __ios_base::iostate __err = __ios_base::goodbit; > typename __istream_type::sentry __cerb(__in, false); > if (__cerb) > { > try > { > > __str.erase(); > _CharT __buf[128]; > __size_type __len = 0; > const streamsize __w = __in.width(); > const __size_type __n = __w > 0 ? static_cast<__size_type>(__w) > : __str.max_size(); > const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); > const __int_type __eof = _Traits::eof(); > __int_type __c = __in.rdbuf()->sgetc(); > > while (__extracted < __n > && !_Traits::eq_int_type(__c, __eof) > && !__ct.is(__ctype_base::space, > _Traits::to_char_type(__c))) > { > if (__len == sizeof(__buf) / sizeof(_CharT)) > { > __str.append(__buf, sizeof(__buf) / sizeof(_CharT)); > __len = 0; > } > __buf[__len++] = _Traits::to_char_type(__c); > ++__extracted; > __c = __in.rdbuf()->snextc(); > } > __str.append(__buf, __len); > > if (_Traits::eq_int_type(__c, __eof)) > __err |= __ios_base::eofbit; > __in.width(0); > } > catch(__cxxabiv1::__forced_unwind&) > { > __in._M_setstate(__ios_base::badbit); > throw; > } > catch(...) > { > > > > __in._M_setstate(__ios_base::badbit); > } > } > > if (!__extracted) > __err |= __ios_base::failbit; > if (__err) > __in.setstate(__err); > return __in; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_istream<_CharT, _Traits>& > getline(basic_istream<_CharT, _Traits>& __in, > basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) > { > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __istream_type::ios_base __ios_base; > typedef typename __istream_type::int_type __int_type; > typedef typename __string_type::size_type __size_type; > > __size_type __extracted = 0; > const __size_type __n = __str.max_size(); > typename __ios_base::iostate __err = __ios_base::goodbit; > typename __istream_type::sentry __cerb(__in, true); > if (__cerb) > { > try > { > __str.erase(); > const __int_type __idelim = _Traits::to_int_type(__delim); > const __int_type __eof = _Traits::eof(); > __int_type __c = __in.rdbuf()->sgetc(); > > while (__extracted < __n > && !_Traits::eq_int_type(__c, __eof) > && !_Traits::eq_int_type(__c, __idelim)) > { > __str += _Traits::to_char_type(__c); > ++__extracted; > __c = __in.rdbuf()->snextc(); > } > > if (_Traits::eq_int_type(__c, __eof)) > __err |= __ios_base::eofbit; > else if (_Traits::eq_int_type(__c, __idelim)) > { > ++__extracted; > __in.rdbuf()->sbumpc(); > } > else > __err |= __ios_base::failbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > __in._M_setstate(__ios_base::badbit); > throw; > } > catch(...) > { > > > > __in._M_setstate(__ios_base::badbit); > } > } > if (!__extracted) > __err |= __ios_base::failbit; > if (__err) > __in.setstate(__err); > return __in; > } > > > > > extern template class basic_string<char>; > extern template > basic_istream<char>& > operator>>(basic_istream<char>&, string&); > extern template > basic_ostream<char>& > operator<<(basic_ostream<char>&, const string&); > extern template > basic_istream<char>& > getline(basic_istream<char>&, string&, char); > extern template > basic_istream<char>& > getline(basic_istream<char>&, string&); > > > extern template class basic_string<wchar_t>; > extern template > basic_istream<wchar_t>& > operator>>(basic_istream<wchar_t>&, wstring&); > extern template > basic_ostream<wchar_t>& > operator<<(basic_ostream<wchar_t>&, const wstring&); > extern template > basic_istream<wchar_t>& > getline(basic_istream<wchar_t>&, wstring&, wchar_t); > extern template > basic_istream<wchar_t>& > getline(basic_istream<wchar_t>&, wstring&); > > > > >} ># 54 "/usr/include/c++/4.8.2/string" 2 3 ># 41 "/usr/include/c++/4.8.2/bits/locale_classes.h" 2 3 > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 62 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > class locale > { > public: > > > typedef int category; > > > class facet; > class id; > class _Impl; > > friend class facet; > friend class _Impl; > > template<typename _Facet> > friend bool > has_facet(const locale&) throw(); > > template<typename _Facet> > friend const _Facet& > use_facet(const locale&); > > template<typename _Cache> > friend struct __use_cache; ># 98 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > static const category none = 0; > static const category ctype = 1L << 0; > static const category numeric = 1L << 1; > static const category collate = 1L << 2; > static const category time = 1L << 3; > static const category monetary = 1L << 4; > static const category messages = 1L << 5; > static const category all = (ctype | numeric | collate | > time | monetary | messages); ># 117 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > locale() throw(); ># 126 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > locale(const locale& __other) throw(); ># 136 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > explicit > locale(const char* __s); ># 151 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > locale(const locale& __base, const char* __s, category __cat); ># 164 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > locale(const locale& __base, const locale& __add, category __cat); ># 177 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > template<typename _Facet> > locale(const locale& __other, _Facet* __f); > > > ~locale() throw(); ># 191 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > const locale& > operator=(const locale& __other) throw(); ># 206 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > template<typename _Facet> > locale > combine(const locale& __other) const; > > > > > > > string > name() const; ># 225 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > bool > operator==(const locale& __other) const throw(); > > > > > > > > bool > operator!=(const locale& __other) const throw() > { return !(this->operator==(__other)); } ># 253 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > template<typename _Char, typename _Traits, typename _Alloc> > bool > operator()(const basic_string<_Char, _Traits, _Alloc>& __s1, > const basic_string<_Char, _Traits, _Alloc>& __s2) const; ># 269 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > static locale > global(const locale& __loc); > > > > > static const locale& > classic(); > > private: > > _Impl* _M_impl; > > > static _Impl* _S_classic; > > > static _Impl* _S_global; > > > > > > static const char* const* const _S_categories; ># 304 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > enum { _S_categories_size = 6 + 6 }; > > > static __gthread_once_t _S_once; > > > explicit > locale(_Impl*) throw(); > > static void > _S_initialize(); > > static void > _S_initialize_once() throw(); > > static category > _S_normalize_category(category); > > void > _M_coalesce(const locale& __base, const locale& __add, category __cat); > }; ># 338 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > class locale::facet > { > private: > friend class locale; > friend class locale::_Impl; > > mutable _Atomic_word _M_refcount; > > > static __c_locale _S_c_locale; > > > static const char _S_c_name[2]; > > > static __gthread_once_t _S_once; > > > static void > _S_initialize_once(); > > protected: ># 369 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > explicit > facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0) > { } > > > virtual > ~facet(); > > static void > _S_create_c_locale(__c_locale& __cloc, const char* __s, > __c_locale __old = 0); > > static __c_locale > _S_clone_c_locale(__c_locale& __cloc) throw(); > > static void > _S_destroy_c_locale(__c_locale& __cloc); > > static __c_locale > _S_lc_ctype_c_locale(__c_locale __cloc, const char* __s); > > > > static __c_locale > _S_get_c_locale(); > > __attribute__ ((__const__)) static const char* > _S_get_c_name() throw(); > > private: > void > _M_add_reference() const throw() > { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } > > void > _M_remove_reference() const throw() > { > > ; > if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) > { > ; > try > { delete this; } > catch(...) > { } > } > } > > facet(const facet&); > > facet& > operator=(const facet&); > }; ># 436 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > class locale::id > { > private: > friend class locale; > friend class locale::_Impl; > > template<typename _Facet> > friend const _Facet& > use_facet(const locale&); > > template<typename _Facet> > friend bool > has_facet(const locale&) throw(); > > > > > mutable size_t _M_index; > > > static _Atomic_word _S_refcount; > > void > operator=(const id&); > > id(const id&); > > public: > > > > id() { } > > size_t > _M_id() const throw(); > }; > > > > class locale::_Impl > { > public: > > friend class locale; > friend class locale::facet; > > template<typename _Facet> > friend bool > has_facet(const locale&) throw(); > > template<typename _Facet> > friend const _Facet& > use_facet(const locale&); > > template<typename _Cache> > friend struct __use_cache; > > private: > > _Atomic_word _M_refcount; > const facet** _M_facets; > size_t _M_facets_size; > const facet** _M_caches; > char** _M_names; > static const locale::id* const _S_id_ctype[]; > static const locale::id* const _S_id_numeric[]; > static const locale::id* const _S_id_collate[]; > static const locale::id* const _S_id_time[]; > static const locale::id* const _S_id_monetary[]; > static const locale::id* const _S_id_messages[]; > static const locale::id* const* const _S_facet_categories[]; > > void > _M_add_reference() throw() > { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } > > void > _M_remove_reference() throw() > { > > ; > if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) > { > ; > try > { delete this; } > catch(...) > { } > } > } > > _Impl(const _Impl&, size_t); > _Impl(const char*, size_t); > _Impl(size_t) throw(); > > ~_Impl() throw(); > > _Impl(const _Impl&); > > void > operator=(const _Impl&); > > bool > _M_check_same_name() > { > bool __ret = true; > if (_M_names[1]) > > for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i) > __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0; > return __ret; > } > > void > _M_replace_categories(const _Impl*, category); > > void > _M_replace_category(const _Impl*, const locale::id* const*); > > void > _M_replace_facet(const _Impl*, const locale::id*); > > void > _M_install_facet(const locale::id*, const facet*); > > template<typename _Facet> > void > _M_init_facet(_Facet* __facet) > { _M_install_facet(&_Facet::id, __facet); } > > void > _M_install_cache(const facet*, size_t); > }; ># 583 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > template<typename _CharT> > class collate : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > > protected: > > > __c_locale _M_c_locale_collate; > > public: > > static locale::id id; ># 610 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > explicit > collate(size_t __refs = 0) > : facet(__refs), _M_c_locale_collate(_S_get_c_locale()) > { } ># 624 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > explicit > collate(__c_locale __cloc, size_t __refs = 0) > : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc)) > { } ># 641 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > int > compare(const _CharT* __lo1, const _CharT* __hi1, > const _CharT* __lo2, const _CharT* __hi2) const > { return this->do_compare(__lo1, __hi1, __lo2, __hi2); } ># 660 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > string_type > transform(const _CharT* __lo, const _CharT* __hi) const > { return this->do_transform(__lo, __hi); } ># 674 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > long > hash(const _CharT* __lo, const _CharT* __hi) const > { return this->do_hash(__lo, __hi); } > > > int > _M_compare(const _CharT*, const _CharT*) const throw(); > > size_t > _M_transform(_CharT*, const _CharT*, size_t) const throw(); > > protected: > > virtual > ~collate() > { _S_destroy_c_locale(_M_c_locale_collate); } ># 703 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > virtual int > do_compare(const _CharT* __lo1, const _CharT* __hi1, > const _CharT* __lo2, const _CharT* __hi2) const; ># 717 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > virtual string_type > do_transform(const _CharT* __lo, const _CharT* __hi) const; ># 730 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > virtual long > do_hash(const _CharT* __lo, const _CharT* __hi) const; > }; > > template<typename _CharT> > locale::id collate<_CharT>::id; > > > template<> > int > collate<char>::_M_compare(const char*, const char*) const throw(); > > template<> > size_t > collate<char>::_M_transform(char*, const char*, size_t) const throw(); > > > template<> > int > collate<wchar_t>::_M_compare(const wchar_t*, const wchar_t*) const throw(); > > template<> > size_t > collate<wchar_t>::_M_transform(wchar_t*, const wchar_t*, size_t) const throw(); > > > > template<typename _CharT> > class collate_byname : public collate<_CharT> > { > public: > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > > explicit > collate_byname(const char* __s, size_t __refs = 0) > : collate<_CharT>(__refs) > { > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > this->_S_destroy_c_locale(this->_M_c_locale_collate); > this->_S_create_c_locale(this->_M_c_locale_collate, __s); > } > } > > protected: > virtual > ~collate_byname() { } > }; > > >} > ># 1 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 3 ># 38 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _Facet> > locale:: > locale(const locale& __other, _Facet* __f) > { > _M_impl = new _Impl(*__other._M_impl, 1); > > try > { _M_impl->_M_install_facet(&_Facet::id, __f); } > catch(...) > { > _M_impl->_M_remove_reference(); > throw; > } > delete [] _M_impl->_M_names[0]; > _M_impl->_M_names[0] = 0; > } > > template<typename _Facet> > locale > locale:: > combine(const locale& __other) const > { > _Impl* __tmp = new _Impl(*_M_impl, 1); > try > { > __tmp->_M_replace_facet(__other._M_impl, &_Facet::id); > } > catch(...) > { > __tmp->_M_remove_reference(); > throw; > } > return locale(__tmp); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > bool > locale:: > operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1, > const basic_string<_CharT, _Traits, _Alloc>& __s2) const > { > typedef std::collate<_CharT> __collate_type; > const __collate_type& __collate = use_facet<__collate_type>(*this); > return (__collate.compare(__s1.data(), __s1.data() + __s1.length(), > __s2.data(), __s2.data() + __s2.length()) < 0); > } ># 102 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 3 > template<typename _Facet> > bool > has_facet(const locale& __loc) throw() > { > const size_t __i = _Facet::id._M_id(); > const locale::facet** __facets = __loc._M_impl->_M_facets; > return (__i < __loc._M_impl->_M_facets_size > > && dynamic_cast<const _Facet*>(__facets[__i])); > > > > } ># 130 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 3 > template<typename _Facet> > const _Facet& > use_facet(const locale& __loc) > { > const size_t __i = _Facet::id._M_id(); > const locale::facet** __facets = __loc._M_impl->_M_facets; > if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i]) > __throw_bad_cast(); > > return dynamic_cast<const _Facet&>(*__facets[__i]); > > > > } > > > > template<typename _CharT> > int > collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw () > { return 0; } > > > template<typename _CharT> > size_t > collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw () > { return 0; } > > template<typename _CharT> > int > collate<_CharT>:: > do_compare(const _CharT* __lo1, const _CharT* __hi1, > const _CharT* __lo2, const _CharT* __hi2) const > { > > > const string_type __one(__lo1, __hi1); > const string_type __two(__lo2, __hi2); > > const _CharT* __p = __one.c_str(); > const _CharT* __pend = __one.data() + __one.length(); > const _CharT* __q = __two.c_str(); > const _CharT* __qend = __two.data() + __two.length(); > > > > > for (;;) > { > const int __res = _M_compare(__p, __q); > if (__res) > return __res; > > __p += char_traits<_CharT>::length(__p); > __q += char_traits<_CharT>::length(__q); > if (__p == __pend && __q == __qend) > return 0; > else if (__p == __pend) > return -1; > else if (__q == __qend) > return 1; > > __p++; > __q++; > } > } > > template<typename _CharT> > typename collate<_CharT>::string_type > collate<_CharT>:: > do_transform(const _CharT* __lo, const _CharT* __hi) const > { > string_type __ret; > > > const string_type __str(__lo, __hi); > > const _CharT* __p = __str.c_str(); > const _CharT* __pend = __str.data() + __str.length(); > > size_t __len = (__hi - __lo) * 2; > > _CharT* __c = new _CharT[__len]; > > try > { > > > > for (;;) > { > > size_t __res = _M_transform(__c, __p, __len); > > > if (__res >= __len) > { > __len = __res + 1; > delete [] __c, __c = 0; > __c = new _CharT[__len]; > __res = _M_transform(__c, __p, __len); > } > > __ret.append(__c, __res); > __p += char_traits<_CharT>::length(__p); > if (__p == __pend) > break; > > __p++; > __ret.push_back(_CharT()); > } > } > catch(...) > { > delete [] __c; > throw; > } > > delete [] __c; > > return __ret; > } > > template<typename _CharT> > long > collate<_CharT>:: > do_hash(const _CharT* __lo, const _CharT* __hi) const > { > unsigned long __val = 0; > for (; __lo < __hi; ++__lo) > __val = > *__lo + ((__val << 7) > | (__val >> (__gnu_cxx::__numeric_traits<unsigned long>:: > __digits - 7))); > return static_cast<long>(__val); > } > > > > > extern template class collate<char>; > extern template class collate_byname<char>; > > extern template > const collate<char>& > use_facet<collate<char> >(const locale&); > > extern template > bool > has_facet<collate<char> >(const locale&); > > > extern template class collate<wchar_t>; > extern template class collate_byname<wchar_t>; > > extern template > const collate<wchar_t>& > use_facet<collate<wchar_t> >(const locale&); > > extern template > bool > has_facet<collate<wchar_t> >(const locale&); > > > > >} ># 788 "/usr/include/c++/4.8.2/bits/locale_classes.h" 2 3 ># 40 "/usr/include/c++/4.8.2/locale" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/locale_facets.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 ># 38 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > ># 1 "/usr/include/c++/4.8.2/cwctype" 1 3 ># 39 "/usr/include/c++/4.8.2/cwctype" 3 ># 40 "/usr/include/c++/4.8.2/cwctype" 3 ># 50 "/usr/include/c++/4.8.2/cwctype" 3 ># 1 "/usr/include/wctype.h" 1 3 4 ># 33 "/usr/include/wctype.h" 3 4 ># 1 "/usr/include/wchar.h" 1 3 4 ># 34 "/usr/include/wctype.h" 2 3 4 ># 49 "/usr/include/wctype.h" 3 4 > > > >typedef unsigned long int wctype_t; ># 71 "/usr/include/wctype.h" 3 4 >enum >{ > __ISwupper = 0, > __ISwlower = 1, > __ISwalpha = 2, > __ISwdigit = 3, > __ISwxdigit = 4, > __ISwspace = 5, > __ISwprint = 6, > __ISwgraph = 7, > __ISwblank = 8, > __ISwcntrl = 9, > __ISwpunct = 10, > __ISwalnum = 11, > > _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))), > _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))), > _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))), > _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))), > _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))), > _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))), > _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))), > _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))), > _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))), > _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))), > _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))), > _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24)))) >}; > > > >extern "C" { ># 111 "/usr/include/wctype.h" 3 4 >extern int iswalnum (wint_t __wc) throw (); > > > > > >extern int iswalpha (wint_t __wc) throw (); > > >extern int iswcntrl (wint_t __wc) throw (); > > > >extern int iswdigit (wint_t __wc) throw (); > > > >extern int iswgraph (wint_t __wc) throw (); > > > > >extern int iswlower (wint_t __wc) throw (); > > >extern int iswprint (wint_t __wc) throw (); > > > > >extern int iswpunct (wint_t __wc) throw (); > > > > >extern int iswspace (wint_t __wc) throw (); > > > > >extern int iswupper (wint_t __wc) throw (); > > > > >extern int iswxdigit (wint_t __wc) throw (); > > > > > >extern int iswblank (wint_t __wc) throw (); ># 171 "/usr/include/wctype.h" 3 4 >extern wctype_t wctype (const char *__property) throw (); > > > >extern int iswctype (wint_t __wc, wctype_t __desc) throw (); ># 186 "/usr/include/wctype.h" 3 4 >typedef const __int32_t *wctrans_t; > > > > > > > >extern wint_t towlower (wint_t __wc) throw (); > > >extern wint_t towupper (wint_t __wc) throw (); > > >} ># 213 "/usr/include/wctype.h" 3 4 >extern "C" { > > > > >extern wctrans_t wctrans (const char *__property) throw (); > > >extern wint_t towctrans (wint_t __wc, wctrans_t __desc) throw (); ># 230 "/usr/include/wctype.h" 3 4 >extern int iswalnum_l (wint_t __wc, __locale_t __locale) throw (); > > > > > >extern int iswalpha_l (wint_t __wc, __locale_t __locale) throw (); > > >extern int iswcntrl_l (wint_t __wc, __locale_t __locale) throw (); > > > >extern int iswdigit_l (wint_t __wc, __locale_t __locale) throw (); > > > >extern int iswgraph_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswlower_l (wint_t __wc, __locale_t __locale) throw (); > > >extern int iswprint_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswpunct_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswspace_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswupper_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswxdigit_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswblank_l (wint_t __wc, __locale_t __locale) throw (); > > > >extern wctype_t wctype_l (const char *__property, __locale_t __locale) > throw (); > > > >extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale) > throw (); > > > > > > > >extern wint_t towlower_l (wint_t __wc, __locale_t __locale) throw (); > > >extern wint_t towupper_l (wint_t __wc, __locale_t __locale) throw (); > > > >extern wctrans_t wctrans_l (const char *__property, __locale_t __locale) > throw (); > > >extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc, > __locale_t __locale) throw (); > > > >} ># 51 "/usr/include/c++/4.8.2/cwctype" 2 3 ># 80 "/usr/include/c++/4.8.2/cwctype" 3 >namespace std >{ > using ::wctrans_t; > using ::wctype_t; > using ::wint_t; > > using ::iswalnum; > using ::iswalpha; > > using ::iswblank; > > using ::iswcntrl; > using ::iswctype; > using ::iswdigit; > using ::iswgraph; > using ::iswlower; > using ::iswprint; > using ::iswpunct; > using ::iswspace; > using ::iswupper; > using ::iswxdigit; > using ::towctrans; > using ::towlower; > using ::towupper; > using ::wctrans; > using ::wctype; >} ># 40 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 ># 1 "/usr/include/c++/4.8.2/cctype" 1 3 ># 39 "/usr/include/c++/4.8.2/cctype" 3 ># 40 "/usr/include/c++/4.8.2/cctype" 3 ># 41 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/ctype_base.h" 1 3 ># 36 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/ctype_base.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > struct ctype_base > { > > typedef const int* __to_type; > > > > typedef unsigned short mask; > static const mask upper = _ISupper; > static const mask lower = _ISlower; > static const mask alpha = _ISalpha; > static const mask digit = _ISdigit; > static const mask xdigit = _ISxdigit; > static const mask space = _ISspace; > static const mask print = _ISprint; > static const mask graph = _ISalpha | _ISdigit | _ISpunct; > static const mask cntrl = _IScntrl; > static const mask punct = _ISpunct; > static const mask alnum = _ISalpha | _ISdigit; > }; > > >} ># 42 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 > ># 1 "/usr/include/c++/4.8.2/bits/ios_base.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 ># 38 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > enum _Ios_Fmtflags > { > _S_boolalpha = 1L << 0, > _S_dec = 1L << 1, > _S_fixed = 1L << 2, > _S_hex = 1L << 3, > _S_internal = 1L << 4, > _S_left = 1L << 5, > _S_oct = 1L << 6, > _S_right = 1L << 7, > _S_scientific = 1L << 8, > _S_showbase = 1L << 9, > _S_showpoint = 1L << 10, > _S_showpos = 1L << 11, > _S_skipws = 1L << 12, > _S_unitbuf = 1L << 13, > _S_uppercase = 1L << 14, > _S_adjustfield = _S_left | _S_right | _S_internal, > _S_basefield = _S_dec | _S_oct | _S_hex, > _S_floatfield = _S_scientific | _S_fixed, > _S_ios_fmtflags_end = 1L << 16 > }; > > inline _Ios_Fmtflags > operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b) > { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); } > > inline _Ios_Fmtflags > operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b) > { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); } > > inline _Ios_Fmtflags > operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b) > { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); } > > inline _Ios_Fmtflags > operator~(_Ios_Fmtflags __a) > { return _Ios_Fmtflags(~static_cast<int>(__a)); } > > inline const _Ios_Fmtflags& > operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) > { return __a = __a | __b; } > > inline const _Ios_Fmtflags& > operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) > { return __a = __a & __b; } > > inline const _Ios_Fmtflags& > operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) > { return __a = __a ^ __b; } > > > enum _Ios_Openmode > { > _S_app = 1L << 0, > _S_ate = 1L << 1, > _S_bin = 1L << 2, > _S_in = 1L << 3, > _S_out = 1L << 4, > _S_trunc = 1L << 5, > _S_ios_openmode_end = 1L << 16 > }; > > inline _Ios_Openmode > operator&(_Ios_Openmode __a, _Ios_Openmode __b) > { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); } > > inline _Ios_Openmode > operator|(_Ios_Openmode __a, _Ios_Openmode __b) > { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); } > > inline _Ios_Openmode > operator^(_Ios_Openmode __a, _Ios_Openmode __b) > { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); } > > inline _Ios_Openmode > operator~(_Ios_Openmode __a) > { return _Ios_Openmode(~static_cast<int>(__a)); } > > inline const _Ios_Openmode& > operator|=(_Ios_Openmode& __a, _Ios_Openmode __b) > { return __a = __a | __b; } > > inline const _Ios_Openmode& > operator&=(_Ios_Openmode& __a, _Ios_Openmode __b) > { return __a = __a & __b; } > > inline const _Ios_Openmode& > operator^=(_Ios_Openmode& __a, _Ios_Openmode __b) > { return __a = __a ^ __b; } > > > enum _Ios_Iostate > { > _S_goodbit = 0, > _S_badbit = 1L << 0, > _S_eofbit = 1L << 1, > _S_failbit = 1L << 2, > _S_ios_iostate_end = 1L << 16 > }; > > inline _Ios_Iostate > operator&(_Ios_Iostate __a, _Ios_Iostate __b) > { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); } > > inline _Ios_Iostate > operator|(_Ios_Iostate __a, _Ios_Iostate __b) > { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); } > > inline _Ios_Iostate > operator^(_Ios_Iostate __a, _Ios_Iostate __b) > { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); } > > inline _Ios_Iostate > operator~(_Ios_Iostate __a) > { return _Ios_Iostate(~static_cast<int>(__a)); } > > inline const _Ios_Iostate& > operator|=(_Ios_Iostate& __a, _Ios_Iostate __b) > { return __a = __a | __b; } > > inline const _Ios_Iostate& > operator&=(_Ios_Iostate& __a, _Ios_Iostate __b) > { return __a = __a & __b; } > > inline const _Ios_Iostate& > operator^=(_Ios_Iostate& __a, _Ios_Iostate __b) > { return __a = __a ^ __b; } > > > enum _Ios_Seekdir > { > _S_beg = 0, > _S_cur = 1, > _S_end = 2, > _S_ios_seekdir_end = 1L << 16 > }; ># 199 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > class ios_base > { > public: > > > > > > > > class failure : public exception > { > public: > > > explicit > failure(const string& __str) throw(); > > > > virtual > ~failure() throw(); > > virtual const char* > what() const throw(); > > private: > string _M_msg; > }; ># 255 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef _Ios_Fmtflags fmtflags; > > > static const fmtflags boolalpha = _S_boolalpha; > > > static const fmtflags dec = _S_dec; > > > static const fmtflags fixed = _S_fixed; > > > static const fmtflags hex = _S_hex; > > > > > static const fmtflags internal = _S_internal; > > > > static const fmtflags left = _S_left; > > > static const fmtflags oct = _S_oct; > > > > static const fmtflags right = _S_right; > > > static const fmtflags scientific = _S_scientific; > > > > static const fmtflags showbase = _S_showbase; > > > > static const fmtflags showpoint = _S_showpoint; > > > static const fmtflags showpos = _S_showpos; > > > static const fmtflags skipws = _S_skipws; > > > static const fmtflags unitbuf = _S_unitbuf; > > > > static const fmtflags uppercase = _S_uppercase; > > > static const fmtflags adjustfield = _S_adjustfield; > > > static const fmtflags basefield = _S_basefield; > > > static const fmtflags floatfield = _S_floatfield; ># 330 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef _Ios_Iostate iostate; > > > > static const iostate badbit = _S_badbit; > > > static const iostate eofbit = _S_eofbit; > > > > > static const iostate failbit = _S_failbit; > > > static const iostate goodbit = _S_goodbit; ># 361 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef _Ios_Openmode openmode; > > > static const openmode app = _S_app; > > > static const openmode ate = _S_ate; > > > > > static const openmode binary = _S_bin; > > > static const openmode in = _S_in; > > > static const openmode out = _S_out; > > > static const openmode trunc = _S_trunc; ># 393 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef _Ios_Seekdir seekdir; > > > static const seekdir beg = _S_beg; > > > static const seekdir cur = _S_cur; > > > static const seekdir end = _S_end; > > > typedef int io_state; > typedef int open_mode; > typedef int seek_dir; > > typedef std::streampos streampos; > typedef std::streamoff streamoff; ># 419 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > enum event > { > erase_event, > imbue_event, > copyfmt_event > }; ># 436 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef void (*event_callback) (event __e, ios_base& __b, int __i); ># 448 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > void > register_callback(event_callback __fn, int __index); > > protected: > streamsize _M_precision; > streamsize _M_width; > fmtflags _M_flags; > iostate _M_exception; > iostate _M_streambuf_state; > > > > struct _Callback_list > { > > _Callback_list* _M_next; > ios_base::event_callback _M_fn; > int _M_index; > _Atomic_word _M_refcount; > > _Callback_list(ios_base::event_callback __fn, int __index, > _Callback_list* __cb) > : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { } > > void > _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } > > > int > _M_remove_reference() > { > > ; > int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); > if (__res == 0) > { > ; > } > return __res; > } > }; > > _Callback_list* _M_callbacks; > > void > _M_call_callbacks(event __ev) throw(); > > void > _M_dispose_callbacks(void) throw(); > > > struct _Words > { > void* _M_pword; > long _M_iword; > _Words() : _M_pword(0), _M_iword(0) { } > }; > > > _Words _M_word_zero; > > > > enum { _S_local_word_size = 8 }; > _Words _M_local_word[_S_local_word_size]; > > > int _M_word_size; > _Words* _M_word; > > _Words& > _M_grow_words(int __index, bool __iword); > > > locale _M_ios_locale; > > void > _M_init() throw(); > > public: > > > > > > class Init > { > friend class ios_base; > public: > Init(); > ~Init(); > > private: > static _Atomic_word _S_refcount; > static bool _S_synced_with_stdio; > }; > > > > > > > fmtflags > flags() const > { return _M_flags; } ># 561 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > fmtflags > flags(fmtflags __fmtfl) > { > fmtflags __old = _M_flags; > _M_flags = __fmtfl; > return __old; > } ># 577 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > fmtflags > setf(fmtflags __fmtfl) > { > fmtflags __old = _M_flags; > _M_flags |= __fmtfl; > return __old; > } ># 594 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > fmtflags > setf(fmtflags __fmtfl, fmtflags __mask) > { > fmtflags __old = _M_flags; > _M_flags &= ~__mask; > _M_flags |= (__fmtfl & __mask); > return __old; > } > > > > > > > > void > unsetf(fmtflags __mask) > { _M_flags &= ~__mask; } ># 620 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > streamsize > precision() const > { return _M_precision; } > > > > > > > streamsize > precision(streamsize __prec) > { > streamsize __old = _M_precision; > _M_precision = __prec; > return __old; > } > > > > > > > > streamsize > width() const > { return _M_width; } > > > > > > > streamsize > width(streamsize __wide) > { > streamsize __old = _M_width; > _M_width = __wide; > return __old; > } ># 671 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > static bool > sync_with_stdio(bool __sync = true); ># 683 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > locale > imbue(const locale& __loc) throw(); ># 694 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > locale > getloc() const > { return _M_ios_locale; } ># 705 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > const locale& > _M_getloc() const > { return _M_ios_locale; } ># 724 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > static int > xalloc() throw(); ># 740 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > long& > iword(int __ix) > { > _Words& __word = (__ix < _M_word_size) > ? _M_word[__ix] : _M_grow_words(__ix, true); > return __word._M_iword; > } ># 761 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > void*& > pword(int __ix) > { > _Words& __word = (__ix < _M_word_size) > ? _M_word[__ix] : _M_grow_words(__ix, false); > return __word._M_pword; > } ># 778 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > virtual ~ios_base(); > > protected: > ios_base() throw (); > > > > private: > ios_base(const ios_base&); > > ios_base& > operator=(const ios_base&); > }; > > > > inline ios_base& > boolalpha(ios_base& __base) > { > __base.setf(ios_base::boolalpha); > return __base; > } > > > inline ios_base& > noboolalpha(ios_base& __base) > { > __base.unsetf(ios_base::boolalpha); > return __base; > } > > > inline ios_base& > showbase(ios_base& __base) > { > __base.setf(ios_base::showbase); > return __base; > } > > > inline ios_base& > noshowbase(ios_base& __base) > { > __base.unsetf(ios_base::showbase); > return __base; > } > > > inline ios_base& > showpoint(ios_base& __base) > { > __base.setf(ios_base::showpoint); > return __base; > } > > > inline ios_base& > noshowpoint(ios_base& __base) > { > __base.unsetf(ios_base::showpoint); > return __base; > } > > > inline ios_base& > showpos(ios_base& __base) > { > __base.setf(ios_base::showpos); > return __base; > } > > > inline ios_base& > noshowpos(ios_base& __base) > { > __base.unsetf(ios_base::showpos); > return __base; > } > > > inline ios_base& > skipws(ios_base& __base) > { > __base.setf(ios_base::skipws); > return __base; > } > > > inline ios_base& > noskipws(ios_base& __base) > { > __base.unsetf(ios_base::skipws); > return __base; > } > > > inline ios_base& > uppercase(ios_base& __base) > { > __base.setf(ios_base::uppercase); > return __base; > } > > > inline ios_base& > nouppercase(ios_base& __base) > { > __base.unsetf(ios_base::uppercase); > return __base; > } > > > inline ios_base& > unitbuf(ios_base& __base) > { > __base.setf(ios_base::unitbuf); > return __base; > } > > > inline ios_base& > nounitbuf(ios_base& __base) > { > __base.unsetf(ios_base::unitbuf); > return __base; > } > > > > inline ios_base& > internal(ios_base& __base) > { > __base.setf(ios_base::internal, ios_base::adjustfield); > return __base; > } > > > inline ios_base& > left(ios_base& __base) > { > __base.setf(ios_base::left, ios_base::adjustfield); > return __base; > } > > > inline ios_base& > right(ios_base& __base) > { > __base.setf(ios_base::right, ios_base::adjustfield); > return __base; > } > > > > inline ios_base& > dec(ios_base& __base) > { > __base.setf(ios_base::dec, ios_base::basefield); > return __base; > } > > > inline ios_base& > hex(ios_base& __base) > { > __base.setf(ios_base::hex, ios_base::basefield); > return __base; > } > > > inline ios_base& > oct(ios_base& __base) > { > __base.setf(ios_base::oct, ios_base::basefield); > return __base; > } > > > > inline ios_base& > fixed(ios_base& __base) > { > __base.setf(ios_base::fixed, ios_base::floatfield); > return __base; > } > > > inline ios_base& > scientific(ios_base& __base) > { > __base.setf(ios_base::scientific, ios_base::floatfield); > return __base; > } > > >} ># 44 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 ># 1 "/usr/include/c++/4.8.2/streambuf" 1 3 ># 36 "/usr/include/c++/4.8.2/streambuf" 3 ># 37 "/usr/include/c++/4.8.2/streambuf" 3 ># 45 "/usr/include/c++/4.8.2/streambuf" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > streamsize > __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*, > basic_streambuf<_CharT, _Traits>*, bool&); ># 119 "/usr/include/c++/4.8.2/streambuf" 3 > template<typename _CharT, typename _Traits> > class basic_streambuf > { > public: > > > > > > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > > > > typedef basic_streambuf<char_type, traits_type> __streambuf_type; > > > friend class basic_ios<char_type, traits_type>; > friend class basic_istream<char_type, traits_type>; > friend class basic_ostream<char_type, traits_type>; > friend class istreambuf_iterator<char_type, traits_type>; > friend class ostreambuf_iterator<char_type, traits_type>; > > friend streamsize > __copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&); > > template<bool _IsMove, typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > _CharT2*>::__type > __copy_move_a2(istreambuf_iterator<_CharT2>, > istreambuf_iterator<_CharT2>, _CharT2*); > > template<typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > istreambuf_iterator<_CharT2> >::__type > find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, > const _CharT2&); > > template<typename _CharT2, typename _Traits2> > friend basic_istream<_CharT2, _Traits2>& > operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*); > > template<typename _CharT2, typename _Traits2, typename _Alloc> > friend basic_istream<_CharT2, _Traits2>& > operator>>(basic_istream<_CharT2, _Traits2>&, > basic_string<_CharT2, _Traits2, _Alloc>&); > > template<typename _CharT2, typename _Traits2, typename _Alloc> > friend basic_istream<_CharT2, _Traits2>& > getline(basic_istream<_CharT2, _Traits2>&, > basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2); > > protected: > > > > > > > > char_type* _M_in_beg; > char_type* _M_in_cur; > char_type* _M_in_end; > char_type* _M_out_beg; > char_type* _M_out_cur; > char_type* _M_out_end; > > > locale _M_buf_locale; > > public: > > virtual > ~basic_streambuf() > { } ># 208 "/usr/include/c++/4.8.2/streambuf" 3 > locale > pubimbue(const locale& __loc) > { > locale __tmp(this->getloc()); > this->imbue(__loc); > _M_buf_locale = __loc; > return __tmp; > } ># 225 "/usr/include/c++/4.8.2/streambuf" 3 > locale > getloc() const > { return _M_buf_locale; } ># 238 "/usr/include/c++/4.8.2/streambuf" 3 > basic_streambuf* > pubsetbuf(char_type* __s, streamsize __n) > { return this->setbuf(__s, __n); } ># 250 "/usr/include/c++/4.8.2/streambuf" 3 > pos_type > pubseekoff(off_type __off, ios_base::seekdir __way, > ios_base::openmode __mode = ios_base::in | ios_base::out) > { return this->seekoff(__off, __way, __mode); } ># 262 "/usr/include/c++/4.8.2/streambuf" 3 > pos_type > pubseekpos(pos_type __sp, > ios_base::openmode __mode = ios_base::in | ios_base::out) > { return this->seekpos(__sp, __mode); } > > > > > int > pubsync() { return this->sync(); } ># 283 "/usr/include/c++/4.8.2/streambuf" 3 > streamsize > in_avail() > { > const streamsize __ret = this->egptr() - this->gptr(); > return __ret ? __ret : this->showmanyc(); > } ># 297 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > snextc() > { > int_type __ret = traits_type::eof(); > if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(), > __ret), true)) > __ret = this->sgetc(); > return __ret; > } ># 315 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sbumpc() > { > int_type __ret; > if (__builtin_expect(this->gptr() < this->egptr(), true)) > { > __ret = traits_type::to_int_type(*this->gptr()); > this->gbump(1); > } > else > __ret = this->uflow(); > return __ret; > } ># 337 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sgetc() > { > int_type __ret; > if (__builtin_expect(this->gptr() < this->egptr(), true)) > __ret = traits_type::to_int_type(*this->gptr()); > else > __ret = this->underflow(); > return __ret; > } ># 356 "/usr/include/c++/4.8.2/streambuf" 3 > streamsize > sgetn(char_type* __s, streamsize __n) > { return this->xsgetn(__s, __n); } ># 371 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sputbackc(char_type __c) > { > int_type __ret; > const bool __testpos = this->eback() < this->gptr(); > if (__builtin_expect(!__testpos || > !traits_type::eq(__c, this->gptr()[-1]), false)) > __ret = this->pbackfail(traits_type::to_int_type(__c)); > else > { > this->gbump(-1); > __ret = traits_type::to_int_type(*this->gptr()); > } > return __ret; > } ># 396 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sungetc() > { > int_type __ret; > if (__builtin_expect(this->eback() < this->gptr(), true)) > { > this->gbump(-1); > __ret = traits_type::to_int_type(*this->gptr()); > } > else > __ret = this->pbackfail(); > return __ret; > } ># 423 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sputc(char_type __c) > { > int_type __ret; > if (__builtin_expect(this->pptr() < this->epptr(), true)) > { > *this->pptr() = __c; > this->pbump(1); > __ret = traits_type::to_int_type(__c); > } > else > __ret = this->overflow(traits_type::to_int_type(__c)); > return __ret; > } ># 449 "/usr/include/c++/4.8.2/streambuf" 3 > streamsize > sputn(const char_type* __s, streamsize __n) > { return this->xsputn(__s, __n); } > > protected: ># 463 "/usr/include/c++/4.8.2/streambuf" 3 > basic_streambuf() > : _M_in_beg(0), _M_in_cur(0), _M_in_end(0), > _M_out_beg(0), _M_out_cur(0), _M_out_end(0), > _M_buf_locale(locale()) > { } ># 481 "/usr/include/c++/4.8.2/streambuf" 3 > char_type* > eback() const { return _M_in_beg; } > > char_type* > gptr() const { return _M_in_cur; } > > char_type* > egptr() const { return _M_in_end; } ># 497 "/usr/include/c++/4.8.2/streambuf" 3 > void > gbump(int __n) { _M_in_cur += __n; } ># 508 "/usr/include/c++/4.8.2/streambuf" 3 > void > setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) > { > _M_in_beg = __gbeg; > _M_in_cur = __gnext; > _M_in_end = __gend; > } ># 528 "/usr/include/c++/4.8.2/streambuf" 3 > char_type* > pbase() const { return _M_out_beg; } > > char_type* > pptr() const { return _M_out_cur; } > > char_type* > epptr() const { return _M_out_end; } ># 544 "/usr/include/c++/4.8.2/streambuf" 3 > void > pbump(int __n) { _M_out_cur += __n; } ># 554 "/usr/include/c++/4.8.2/streambuf" 3 > void > setp(char_type* __pbeg, char_type* __pend) > { > _M_out_beg = _M_out_cur = __pbeg; > _M_out_end = __pend; > } ># 575 "/usr/include/c++/4.8.2/streambuf" 3 > virtual void > imbue(const locale& __loc) > { } ># 590 "/usr/include/c++/4.8.2/streambuf" 3 > virtual basic_streambuf<char_type,_Traits>* > setbuf(char_type*, streamsize) > { return this; } ># 601 "/usr/include/c++/4.8.2/streambuf" 3 > virtual pos_type > seekoff(off_type, ios_base::seekdir, > ios_base::openmode = ios_base::in | ios_base::out) > { return pos_type(off_type(-1)); } ># 613 "/usr/include/c++/4.8.2/streambuf" 3 > virtual pos_type > seekpos(pos_type, > ios_base::openmode = ios_base::in | ios_base::out) > { return pos_type(off_type(-1)); } ># 626 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int > sync() { return 0; } ># 648 "/usr/include/c++/4.8.2/streambuf" 3 > virtual streamsize > showmanyc() { return 0; } ># 664 "/usr/include/c++/4.8.2/streambuf" 3 > virtual streamsize > xsgetn(char_type* __s, streamsize __n); ># 686 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int_type > underflow() > { return traits_type::eof(); } ># 699 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int_type > uflow() > { > int_type __ret = traits_type::eof(); > const bool __testeof = traits_type::eq_int_type(this->underflow(), > __ret); > if (!__testeof) > { > __ret = traits_type::to_int_type(*this->gptr()); > this->gbump(1); > } > return __ret; > } ># 723 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int_type > pbackfail(int_type __c = traits_type::eof()) > { return traits_type::eof(); } ># 741 "/usr/include/c++/4.8.2/streambuf" 3 > virtual streamsize > xsputn(const char_type* __s, streamsize __n); ># 767 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int_type > overflow(int_type __c = traits_type::eof()) > { return traits_type::eof(); } > > > > public: ># 782 "/usr/include/c++/4.8.2/streambuf" 3 > void > stossc() > { > if (this->gptr() < this->egptr()) > this->gbump(1); > else > this->uflow(); > } > > > > void > __safe_gbump(streamsize __n) { _M_in_cur += __n; } > > void > __safe_pbump(streamsize __n) { _M_out_cur += __n; } > > private: > > > basic_streambuf(const basic_streambuf& __sb) > : _M_in_beg(__sb._M_in_beg), _M_in_cur(__sb._M_in_cur), > _M_in_end(__sb._M_in_end), _M_out_beg(__sb._M_out_beg), > _M_out_cur(__sb._M_out_cur), _M_out_end(__sb._M_out_cur), > _M_buf_locale(__sb._M_buf_locale) > { } > > basic_streambuf& > operator=(const basic_streambuf&) { return *this; }; > }; > > > template<> > streamsize > __copy_streambufs_eof(basic_streambuf<char>* __sbin, > basic_streambuf<char>* __sbout, bool& __ineof); > > template<> > streamsize > __copy_streambufs_eof(basic_streambuf<wchar_t>* __sbin, > basic_streambuf<wchar_t>* __sbout, bool& __ineof); > > > >} > ># 1 "/usr/include/c++/4.8.2/bits/streambuf.tcc" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/streambuf.tcc" 3 ># 38 "/usr/include/c++/4.8.2/bits/streambuf.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > streamsize > basic_streambuf<_CharT, _Traits>:: > xsgetn(char_type* __s, streamsize __n) > { > streamsize __ret = 0; > while (__ret < __n) > { > const streamsize __buf_len = this->egptr() - this->gptr(); > if (__buf_len) > { > const streamsize __remaining = __n - __ret; > const streamsize __len = std::min(__buf_len, __remaining); > traits_type::copy(__s, this->gptr(), __len); > __ret += __len; > __s += __len; > this->__safe_gbump(__len); > } > > if (__ret < __n) > { > const int_type __c = this->uflow(); > if (!traits_type::eq_int_type(__c, traits_type::eof())) > { > traits_type::assign(*__s++, traits_type::to_char_type(__c)); > ++__ret; > } > else > break; > } > } > return __ret; > } > > template<typename _CharT, typename _Traits> > streamsize > basic_streambuf<_CharT, _Traits>:: > xsputn(const char_type* __s, streamsize __n) > { > streamsize __ret = 0; > while (__ret < __n) > { > const streamsize __buf_len = this->epptr() - this->pptr(); > if (__buf_len) > { > const streamsize __remaining = __n - __ret; > const streamsize __len = std::min(__buf_len, __remaining); > traits_type::copy(this->pptr(), __s, __len); > __ret += __len; > __s += __len; > this->__safe_pbump(__len); > } > > if (__ret < __n) > { > int_type __c = this->overflow(traits_type::to_int_type(*__s)); > if (!traits_type::eq_int_type(__c, traits_type::eof())) > { > ++__ret; > ++__s; > } > else > break; > } > } > return __ret; > } > > > > > template<typename _CharT, typename _Traits> > streamsize > __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin, > basic_streambuf<_CharT, _Traits>* __sbout, > bool& __ineof) > { > streamsize __ret = 0; > __ineof = true; > typename _Traits::int_type __c = __sbin->sgetc(); > while (!_Traits::eq_int_type(__c, _Traits::eof())) > { > __c = __sbout->sputc(_Traits::to_char_type(__c)); > if (_Traits::eq_int_type(__c, _Traits::eof())) > { > __ineof = false; > break; > } > ++__ret; > __c = __sbin->snextc(); > } > return __ret; > } > > template<typename _CharT, typename _Traits> > inline streamsize > __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin, > basic_streambuf<_CharT, _Traits>* __sbout) > { > bool __ineof; > return __copy_streambufs_eof(__sbin, __sbout, __ineof); > } > > > > > extern template class basic_streambuf<char>; > extern template > streamsize > __copy_streambufs(basic_streambuf<char>*, > basic_streambuf<char>*); > extern template > streamsize > __copy_streambufs_eof(basic_streambuf<char>*, > basic_streambuf<char>*, bool&); > > > extern template class basic_streambuf<wchar_t>; > extern template > streamsize > __copy_streambufs(basic_streambuf<wchar_t>*, > basic_streambuf<wchar_t>*); > extern template > streamsize > __copy_streambufs_eof(basic_streambuf<wchar_t>*, > basic_streambuf<wchar_t>*, bool&); > > > > >} ># 829 "/usr/include/c++/4.8.2/streambuf" 2 3 ># 45 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 > > > ># 1 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 3 ># 34 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 3 > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 49 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 3 > template<typename _CharT, typename _Traits> > class istreambuf_iterator > : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type, > _CharT*, > > > > > _CharT&> > > { > public: > > > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef typename _Traits::int_type int_type; > typedef basic_streambuf<_CharT, _Traits> streambuf_type; > typedef basic_istream<_CharT, _Traits> istream_type; > > > template<typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > ostreambuf_iterator<_CharT2> >::__type > copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, > ostreambuf_iterator<_CharT2>); > > template<bool _IsMove, typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > _CharT2*>::__type > __copy_move_a2(istreambuf_iterator<_CharT2>, > istreambuf_iterator<_CharT2>, _CharT2*); > > template<typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > istreambuf_iterator<_CharT2> >::__type > find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, > const _CharT2&); > > private: > > > > > > > > mutable streambuf_type* _M_sbuf; > mutable int_type _M_c; > > public: > > istreambuf_iterator() throw() > : _M_sbuf(0), _M_c(traits_type::eof()) { } ># 112 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 3 > istreambuf_iterator(istream_type& __s) throw() > : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { } > > > istreambuf_iterator(streambuf_type* __s) throw() > : _M_sbuf(__s), _M_c(traits_type::eof()) { } > > > > > char_type > operator*() const > { > > > > > > > > return traits_type::to_char_type(_M_get()); > } > > > istreambuf_iterator& > operator++() > { > > > ; > if (_M_sbuf) > { > _M_sbuf->sbumpc(); > _M_c = traits_type::eof(); > } > return *this; > } > > > istreambuf_iterator > operator++(int) > { > > > ; > > istreambuf_iterator __old = *this; > if (_M_sbuf) > { > __old._M_c = _M_sbuf->sbumpc(); > _M_c = traits_type::eof(); > } > return __old; > } > > > > > > bool > equal(const istreambuf_iterator& __b) const > { return _M_at_eof() == __b._M_at_eof(); } > > private: > int_type > _M_get() const > { > const int_type __eof = traits_type::eof(); > int_type __ret = __eof; > if (_M_sbuf) > { > if (!traits_type::eq_int_type(_M_c, __eof)) > __ret = _M_c; > else if (!traits_type::eq_int_type((__ret = _M_sbuf->sgetc()), > __eof)) > _M_c = __ret; > else > _M_sbuf = 0; > } > return __ret; > } > > bool > _M_at_eof() const > { > const int_type __eof = traits_type::eof(); > return traits_type::eq_int_type(_M_get(), __eof); > } > }; > > template<typename _CharT, typename _Traits> > inline bool > operator==(const istreambuf_iterator<_CharT, _Traits>& __a, > const istreambuf_iterator<_CharT, _Traits>& __b) > { return __a.equal(__b); } > > template<typename _CharT, typename _Traits> > inline bool > operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, > const istreambuf_iterator<_CharT, _Traits>& __b) > { return !__a.equal(__b); } > > > template<typename _CharT, typename _Traits> > class ostreambuf_iterator > : public iterator<output_iterator_tag, void, void, void, void> > { > public: > > > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef basic_streambuf<_CharT, _Traits> streambuf_type; > typedef basic_ostream<_CharT, _Traits> ostream_type; > > > template<typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > ostreambuf_iterator<_CharT2> >::__type > copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, > ostreambuf_iterator<_CharT2>); > > private: > streambuf_type* _M_sbuf; > bool _M_failed; > > public: > > ostreambuf_iterator(ostream_type& __s) throw() > : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { } > > > ostreambuf_iterator(streambuf_type* __s) throw() > : _M_sbuf(__s), _M_failed(!_M_sbuf) { } > > > ostreambuf_iterator& > operator=(_CharT __c) > { > if (!_M_failed && > _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof())) > _M_failed = true; > return *this; > } > > > ostreambuf_iterator& > operator*() > { return *this; } > > > ostreambuf_iterator& > operator++(int) > { return *this; } > > > ostreambuf_iterator& > operator++() > { return *this; } > > > bool > failed() const throw() > { return _M_failed; } > > ostreambuf_iterator& > _M_put(const _CharT* __ws, streamsize __len) > { > if (__builtin_expect(!_M_failed, true) > && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len, > false)) > _M_failed = true; > return *this; > } > }; > > > template<typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT> >::__type > copy(istreambuf_iterator<_CharT> __first, > istreambuf_iterator<_CharT> __last, > ostreambuf_iterator<_CharT> __result) > { > if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed) > { > bool __ineof; > __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof); > if (!__ineof) > __result._M_failed = true; > } > return __result; > } > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT> >::__type > __copy_move_a2(_CharT* __first, _CharT* __last, > ostreambuf_iterator<_CharT> __result) > { > const streamsize __num = __last - __first; > if (__num > 0) > __result._M_put(__first, __num); > return __result; > } > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT> >::__type > __copy_move_a2(const _CharT* __first, const _CharT* __last, > ostreambuf_iterator<_CharT> __result) > { > const streamsize __num = __last - __first; > if (__num > 0) > __result._M_put(__first, __num); > return __result; > } > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > _CharT*>::__type > __copy_move_a2(istreambuf_iterator<_CharT> __first, > istreambuf_iterator<_CharT> __last, _CharT* __result) > { > typedef istreambuf_iterator<_CharT> __is_iterator_type; > typedef typename __is_iterator_type::traits_type traits_type; > typedef typename __is_iterator_type::streambuf_type streambuf_type; > typedef typename traits_type::int_type int_type; > > if (__first._M_sbuf && !__last._M_sbuf) > { > streambuf_type* __sb = __first._M_sbuf; > int_type __c = __sb->sgetc(); > while (!traits_type::eq_int_type(__c, traits_type::eof())) > { > const streamsize __n = __sb->egptr() - __sb->gptr(); > if (__n > 1) > { > traits_type::copy(__result, __sb->gptr(), __n); > __sb->__safe_gbump(__n); > __result += __n; > __c = __sb->underflow(); > } > else > { > *__result++ = traits_type::to_char_type(__c); > __c = __sb->snextc(); > } > } > } > return __result; > } > > template<typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > istreambuf_iterator<_CharT> >::__type > find(istreambuf_iterator<_CharT> __first, > istreambuf_iterator<_CharT> __last, const _CharT& __val) > { > typedef istreambuf_iterator<_CharT> __is_iterator_type; > typedef typename __is_iterator_type::traits_type traits_type; > typedef typename __is_iterator_type::streambuf_type streambuf_type; > typedef typename traits_type::int_type int_type; > > if (__first._M_sbuf && !__last._M_sbuf) > { > const int_type __ival = traits_type::to_int_type(__val); > streambuf_type* __sb = __first._M_sbuf; > int_type __c = __sb->sgetc(); > while (!traits_type::eq_int_type(__c, traits_type::eof()) > && !traits_type::eq_int_type(__c, __ival)) > { > streamsize __n = __sb->egptr() - __sb->gptr(); > if (__n > 1) > { > const _CharT* __p = traits_type::find(__sb->gptr(), > __n, __val); > if (__p) > __n = __p - __sb->gptr(); > __sb->__safe_gbump(__n); > __c = __sb->sgetc(); > } > else > __c = __sb->snextc(); > } > > if (!traits_type::eq_int_type(__c, traits_type::eof())) > __first._M_c = __c; > else > __first._M_sbuf = 0; > } > return __first; > } > > > > >} ># 49 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 64 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _Tp> > void > __convert_to_v(const char*, _Tp&, ios_base::iostate&, > const __c_locale&) throw(); > > > template<> > void > __convert_to_v(const char*, float&, ios_base::iostate&, > const __c_locale&) throw(); > > template<> > void > __convert_to_v(const char*, double&, ios_base::iostate&, > const __c_locale&) throw(); > > template<> > void > __convert_to_v(const char*, long double&, ios_base::iostate&, > const __c_locale&) throw(); > > > > template<typename _CharT, typename _Traits> > struct __pad > { > static void > _S_pad(ios_base& __io, _CharT __fill, _CharT* __news, > const _CharT* __olds, streamsize __newlen, streamsize __oldlen); > }; > > > > > > > template<typename _CharT> > _CharT* > __add_grouping(_CharT* __s, _CharT __sep, > const char* __gbeg, size_t __gsize, > const _CharT* __first, const _CharT* __last); > > > > > template<typename _CharT> > inline > ostreambuf_iterator<_CharT> > __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len) > { > __s._M_put(__ws, __len); > return __s; > } > > > template<typename _CharT, typename _OutIter> > inline > _OutIter > __write(_OutIter __s, const _CharT* __ws, int __len) > { > for (int __j = 0; __j < __len; __j++, ++__s) > *__s = __ws[__j]; > return __s; > } ># 142 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT> > class __ctype_abstract_base : public locale::facet, public ctype_base > { > public: > > > typedef _CharT char_type; ># 161 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > bool > is(mask __m, char_type __c) const > { return this->do_is(__m, __c); } ># 178 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > is(const char_type *__lo, const char_type *__hi, mask *__vec) const > { return this->do_is(__lo, __hi, __vec); } ># 194 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > scan_is(mask __m, const char_type* __lo, const char_type* __hi) const > { return this->do_scan_is(__m, __lo, __hi); } ># 210 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > scan_not(mask __m, const char_type* __lo, const char_type* __hi) const > { return this->do_scan_not(__m, __lo, __hi); } ># 224 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > toupper(char_type __c) const > { return this->do_toupper(__c); } ># 239 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > toupper(char_type *__lo, const char_type* __hi) const > { return this->do_toupper(__lo, __hi); } ># 253 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > tolower(char_type __c) const > { return this->do_tolower(__c); } ># 268 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > tolower(char_type* __lo, const char_type* __hi) const > { return this->do_tolower(__lo, __hi); } ># 285 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > widen(char __c) const > { return this->do_widen(__c); } ># 304 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char* > widen(const char* __lo, const char* __hi, char_type* __to) const > { return this->do_widen(__lo, __hi, __to); } ># 323 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char > narrow(char_type __c, char __dfault) const > { return this->do_narrow(__c, __dfault); } ># 345 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const > { return this->do_narrow(__lo, __hi, __dfault, __to); } > > protected: > explicit > __ctype_abstract_base(size_t __refs = 0): facet(__refs) { } > > virtual > ~__ctype_abstract_base() { } ># 370 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual bool > do_is(mask __m, char_type __c) const = 0; ># 389 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_is(const char_type* __lo, const char_type* __hi, > mask* __vec) const = 0; ># 408 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_scan_is(mask __m, const char_type* __lo, > const char_type* __hi) const = 0; ># 427 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_scan_not(mask __m, const char_type* __lo, > const char_type* __hi) const = 0; ># 445 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_toupper(char_type __c) const = 0; ># 462 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_toupper(char_type* __lo, const char_type* __hi) const = 0; ># 478 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_tolower(char_type __c) const = 0; ># 495 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_tolower(char_type* __lo, const char_type* __hi) const = 0; ># 514 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_widen(char __c) const = 0; ># 535 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char* > do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0; ># 556 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char > do_narrow(char_type __c, char __dfault) const = 0; ># 581 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const = 0; > }; ># 604 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT> > class ctype : public __ctype_abstract_base<_CharT> > { > public: > > typedef _CharT char_type; > typedef typename __ctype_abstract_base<_CharT>::mask mask; > > > static locale::id id; > > explicit > ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { } > > protected: > virtual > ~ctype(); > > virtual bool > do_is(mask __m, char_type __c) const; > > virtual const char_type* > do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; > > virtual const char_type* > do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; > > virtual const char_type* > do_scan_not(mask __m, const char_type* __lo, > const char_type* __hi) const; > > virtual char_type > do_toupper(char_type __c) const; > > virtual const char_type* > do_toupper(char_type* __lo, const char_type* __hi) const; > > virtual char_type > do_tolower(char_type __c) const; > > virtual const char_type* > do_tolower(char_type* __lo, const char_type* __hi) const; > > virtual char_type > do_widen(char __c) const; > > virtual const char* > do_widen(const char* __lo, const char* __hi, char_type* __dest) const; > > virtual char > do_narrow(char_type, char __dfault) const; > > virtual const char_type* > do_narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const; > }; > > template<typename _CharT> > locale::id ctype<_CharT>::id; ># 673 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<> > class ctype<char> : public locale::facet, public ctype_base > { > public: > > > typedef char char_type; > > protected: > > __c_locale _M_c_locale_ctype; > bool _M_del; > __to_type _M_toupper; > __to_type _M_tolower; > const mask* _M_table; > mutable char _M_widen_ok; > mutable char _M_widen[1 + static_cast<unsigned char>(-1)]; > mutable char _M_narrow[1 + static_cast<unsigned char>(-1)]; > mutable char _M_narrow_ok; > > > public: > > static locale::id id; > > static const size_t table_size = 1 + static_cast<unsigned char>(-1); ># 710 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0); ># 723 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false, > size_t __refs = 0); ># 736 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > inline bool > is(mask __m, char __c) const; ># 751 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > inline const char* > is(const char* __lo, const char* __hi, mask* __vec) const; ># 765 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > inline const char* > scan_is(mask __m, const char* __lo, const char* __hi) const; ># 779 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > inline const char* > scan_not(mask __m, const char* __lo, const char* __hi) const; ># 794 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > toupper(char_type __c) const > { return this->do_toupper(__c); } ># 811 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > toupper(char_type *__lo, const char_type* __hi) const > { return this->do_toupper(__lo, __hi); } ># 827 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > tolower(char_type __c) const > { return this->do_tolower(__c); } ># 844 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > tolower(char_type* __lo, const char_type* __hi) const > { return this->do_tolower(__lo, __hi); } ># 864 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > widen(char __c) const > { > if (_M_widen_ok) > return _M_widen[static_cast<unsigned char>(__c)]; > this->_M_widen_init(); > return this->do_widen(__c); > } ># 891 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char* > widen(const char* __lo, const char* __hi, char_type* __to) const > { > if (_M_widen_ok == 1) > { > __builtin_memcpy(__to, __lo, __hi - __lo); > return __hi; > } > if (!_M_widen_ok) > _M_widen_init(); > return this->do_widen(__lo, __hi, __to); > } ># 922 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char > narrow(char_type __c, char __dfault) const > { > if (_M_narrow[static_cast<unsigned char>(__c)]) > return _M_narrow[static_cast<unsigned char>(__c)]; > const char __t = do_narrow(__c, __dfault); > if (__t != __dfault) > _M_narrow[static_cast<unsigned char>(__c)] = __t; > return __t; > } ># 955 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const > { > if (__builtin_expect(_M_narrow_ok == 1, true)) > { > __builtin_memcpy(__to, __lo, __hi - __lo); > return __hi; > } > if (!_M_narrow_ok) > _M_narrow_init(); > return this->do_narrow(__lo, __hi, __dfault, __to); > } > > > > > > const mask* > table() const throw() > { return _M_table; } > > > static const mask* > classic_table() throw(); > protected: > > > > > > > > virtual > ~ctype(); ># 1004 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_toupper(char_type __c) const; ># 1021 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_toupper(char_type* __lo, const char_type* __hi) const; ># 1037 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_tolower(char_type __c) const; ># 1054 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_tolower(char_type* __lo, const char_type* __hi) const; ># 1074 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_widen(char __c) const > { return __c; } ># 1097 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char* > do_widen(const char* __lo, const char* __hi, char_type* __to) const > { > __builtin_memcpy(__to, __lo, __hi - __lo); > return __hi; > } ># 1123 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char > do_narrow(char_type __c, char __dfault) const > { return __c; } ># 1149 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const > { > __builtin_memcpy(__to, __lo, __hi - __lo); > return __hi; > } > > private: > void _M_narrow_init() const; > void _M_widen_init() const; > }; ># 1174 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<> > class ctype<wchar_t> : public __ctype_abstract_base<wchar_t> > { > public: > > > typedef wchar_t char_type; > typedef wctype_t __wmask_type; > > protected: > __c_locale _M_c_locale_ctype; > > > bool _M_narrow_ok; > char _M_narrow[128]; > wint_t _M_widen[1 + static_cast<unsigned char>(-1)]; > > > mask _M_bit[16]; > __wmask_type _M_wmask[16]; > > public: > > > static locale::id id; ># 1207 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > ctype(size_t __refs = 0); ># 1218 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > ctype(__c_locale __cloc, size_t __refs = 0); > > protected: > __wmask_type > _M_convert_to_wmask(const mask __m) const throw(); > > > virtual > ~ctype(); ># 1242 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual bool > do_is(mask __m, char_type __c) const; ># 1261 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; ># 1279 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; ># 1297 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_scan_not(mask __m, const char_type* __lo, > const char_type* __hi) const; ># 1314 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_toupper(char_type __c) const; ># 1331 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_toupper(char_type* __lo, const char_type* __hi) const; ># 1347 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_tolower(char_type __c) const; ># 1364 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_tolower(char_type* __lo, const char_type* __hi) const; ># 1384 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_widen(char __c) const; ># 1406 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char* > do_widen(const char* __lo, const char* __hi, char_type* __to) const; ># 1429 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char > do_narrow(char_type __c, char __dfault) const; ># 1455 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const; > > > void > _M_initialize_ctype() throw(); > }; > > > > template<typename _CharT> > class ctype_byname : public ctype<_CharT> > { > public: > typedef typename ctype<_CharT>::mask mask; > > explicit > ctype_byname(const char* __s, size_t __refs = 0); > > protected: > virtual > ~ctype_byname() { }; > }; > > > template<> > class ctype_byname<char> : public ctype<char> > { > public: > explicit > ctype_byname(const char* __s, size_t __refs = 0); > > protected: > virtual > ~ctype_byname(); > }; > > > template<> > class ctype_byname<wchar_t> : public ctype<wchar_t> > { > public: > explicit > ctype_byname(const char* __s, size_t __refs = 0); > > protected: > virtual > ~ctype_byname(); > }; > > > >} > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/ctype_inline.h" 1 3 ># 37 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/ctype_inline.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > bool > ctype<char>:: > is(mask __m, char __c) const > { return _M_table[static_cast<unsigned char>(__c)] & __m; } > > const char* > ctype<char>:: > is(const char* __low, const char* __high, mask* __vec) const > { > while (__low < __high) > *__vec++ = _M_table[static_cast<unsigned char>(*__low++)]; > return __high; > } > > const char* > ctype<char>:: > scan_is(mask __m, const char* __low, const char* __high) const > { > while (__low < __high > && !(_M_table[static_cast<unsigned char>(*__low)] & __m)) > ++__low; > return __low; > } > > const char* > ctype<char>:: > scan_not(mask __m, const char* __low, const char* __high) const > { > while (__low < __high > && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0) > ++__low; > return __low; > } > > >} ># 1512 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > class __num_base > { > public: > > > enum > { > _S_ominus, > _S_oplus, > _S_ox, > _S_oX, > _S_odigits, > _S_odigits_end = _S_odigits + 16, > _S_oudigits = _S_odigits_end, > _S_oudigits_end = _S_oudigits + 16, > _S_oe = _S_odigits + 14, > _S_oE = _S_oudigits + 14, > _S_oend = _S_oudigits_end > }; > > > > > > > static const char* _S_atoms_out; > > > > static const char* _S_atoms_in; > > enum > { > _S_iminus, > _S_iplus, > _S_ix, > _S_iX, > _S_izero, > _S_ie = _S_izero + 14, > _S_iE = _S_izero + 20, > _S_iend = 26 > }; > > > > static void > _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw(); > }; > > template<typename _CharT> > struct __numpunct_cache : public locale::facet > { > const char* _M_grouping; > size_t _M_grouping_size; > bool _M_use_grouping; > const _CharT* _M_truename; > size_t _M_truename_size; > const _CharT* _M_falsename; > size_t _M_falsename_size; > _CharT _M_decimal_point; > _CharT _M_thousands_sep; > > > > > > _CharT _M_atoms_out[__num_base::_S_oend]; > > > > > > _CharT _M_atoms_in[__num_base::_S_iend]; > > bool _M_allocated; > > __numpunct_cache(size_t __refs = 0) > : facet(__refs), _M_grouping(0), _M_grouping_size(0), > _M_use_grouping(false), > _M_truename(0), _M_truename_size(0), _M_falsename(0), > _M_falsename_size(0), _M_decimal_point(_CharT()), > _M_thousands_sep(_CharT()), _M_allocated(false) > { } > > ~__numpunct_cache(); > > void > _M_cache(const locale& __loc); > > private: > __numpunct_cache& > operator=(const __numpunct_cache&); > > explicit > __numpunct_cache(const __numpunct_cache&); > }; > > template<typename _CharT> > __numpunct_cache<_CharT>::~__numpunct_cache() > { > if (_M_allocated) > { > delete [] _M_grouping; > delete [] _M_truename; > delete [] _M_falsename; > } > } ># 1640 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT> > class numpunct : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > typedef __numpunct_cache<_CharT> __cache_type; > > protected: > __cache_type* _M_data; > > public: > > static locale::id id; > > > > > > > explicit > numpunct(size_t __refs = 0) > : facet(__refs), _M_data(0) > { _M_initialize_numpunct(); } ># 1678 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > numpunct(__cache_type* __cache, size_t __refs = 0) > : facet(__refs), _M_data(__cache) > { _M_initialize_numpunct(); } ># 1692 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > numpunct(__c_locale __cloc, size_t __refs = 0) > : facet(__refs), _M_data(0) > { _M_initialize_numpunct(__cloc); } ># 1706 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > decimal_point() const > { return this->do_decimal_point(); } ># 1719 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > thousands_sep() const > { return this->do_thousands_sep(); } ># 1750 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > string > grouping() const > { return this->do_grouping(); } ># 1763 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > string_type > truename() const > { return this->do_truename(); } ># 1776 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > string_type > falsename() const > { return this->do_falsename(); } > > protected: > > virtual > ~numpunct(); ># 1793 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_decimal_point() const > { return _M_data->_M_decimal_point; } ># 1805 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_thousands_sep() const > { return _M_data->_M_thousands_sep; } ># 1818 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual string > do_grouping() const > { return _M_data->_M_grouping; } ># 1831 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual string_type > do_truename() const > { return _M_data->_M_truename; } ># 1844 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual string_type > do_falsename() const > { return _M_data->_M_falsename; } > > > void > _M_initialize_numpunct(__c_locale __cloc = 0); > }; > > template<typename _CharT> > locale::id numpunct<_CharT>::id; > > template<> > numpunct<char>::~numpunct(); > > template<> > void > numpunct<char>::_M_initialize_numpunct(__c_locale __cloc); > > > template<> > numpunct<wchar_t>::~numpunct(); > > template<> > void > numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc); > > > > template<typename _CharT> > class numpunct_byname : public numpunct<_CharT> > { > public: > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > explicit > numpunct_byname(const char* __s, size_t __refs = 0) > : numpunct<_CharT>(__refs) > { > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > __c_locale __tmp; > this->_S_create_c_locale(__tmp, __s); > this->_M_initialize_numpunct(__tmp); > this->_S_destroy_c_locale(__tmp); > } > } > > protected: > virtual > ~numpunct_byname() { } > }; ># 1914 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT, typename _InIter> > class num_get : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef _InIter iter_type; > > > > static locale::id id; ># 1935 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > num_get(size_t __refs = 0) : facet(__refs) { } ># 1961 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, bool& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } ># 1998 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned short& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned int& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned long& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long long& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned long long& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } ># 2058 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, float& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, double& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long double& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } ># 2101 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, void*& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > protected: > > virtual ~num_get() { } > > iter_type > _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&, > string&) const; > > template<typename _ValueT> > iter_type > _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&, > _ValueT&) const; > > template<typename _CharT2> > typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type > _M_find(const _CharT2*, size_t __len, _CharT2 __c) const > { > int __ret = -1; > if (__len <= 10) > { > if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len)) > __ret = __c - _CharT2('0'); > } > else > { > if (__c >= _CharT2('0') && __c <= _CharT2('9')) > __ret = __c - _CharT2('0'); > else if (__c >= _CharT2('a') && __c <= _CharT2('f')) > __ret = 10 + (__c - _CharT2('a')); > else if (__c >= _CharT2('A') && __c <= _CharT2('F')) > __ret = 10 + (__c - _CharT2('A')); > } > return __ret; > } > > template<typename _CharT2> > typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value, > int>::__type > _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const > { > int __ret = -1; > const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c); > if (__q) > { > __ret = __q - __zero; > if (__ret > 15) > __ret -= 6; > } > return __ret; > } ># 2172 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const; > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned short& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned int& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned long& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long long& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned long long& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const; > > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, > double&) const; > > > > > > > > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, > long double&) const; > > > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const; ># 2235 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > }; > > template<typename _CharT, typename _InIter> > locale::id num_get<_CharT, _InIter>::id; ># 2253 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT, typename _OutIter> > class num_put : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef _OutIter iter_type; > > > > static locale::id id; ># 2274 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > num_put(size_t __refs = 0) : facet(__refs) { } ># 2292 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const > { return this->do_put(__s, __io, __fill, __v); } ># 2334 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, long __v) const > { return this->do_put(__s, __io, __fill, __v); } > > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > unsigned long __v) const > { return this->do_put(__s, __io, __fill, __v); } > > > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const > { return this->do_put(__s, __io, __fill, __v); } > > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > unsigned long long __v) const > { return this->do_put(__s, __io, __fill, __v); } ># 2397 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, double __v) const > { return this->do_put(__s, __io, __fill, __v); } > > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > long double __v) const > { return this->do_put(__s, __io, __fill, __v); } ># 2422 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > const void* __v) const > { return this->do_put(__s, __io, __fill, __v); } > > protected: > template<typename _ValueT> > iter_type > _M_insert_float(iter_type, ios_base& __io, char_type __fill, > char __mod, _ValueT __v) const; > > void > _M_group_float(const char* __grouping, size_t __grouping_size, > char_type __sep, const char_type* __p, char_type* __new, > char_type* __cs, int& __len) const; > > template<typename _ValueT> > iter_type > _M_insert_int(iter_type, ios_base& __io, char_type __fill, > _ValueT __v) const; > > void > _M_group_int(const char* __grouping, size_t __grouping_size, > char_type __sep, ios_base& __io, char_type* __new, > char_type* __cs, int& __len) const; > > void > _M_pad(char_type __fill, streamsize __w, ios_base& __io, > char_type* __new, const char_type* __cs, int& __len) const; > > > virtual > ~num_put() { }; ># 2470 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const; > > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const > { return _M_insert_int(__s, __io, __fill, __v); } > > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, > unsigned long __v) const > { return _M_insert_int(__s, __io, __fill, __v); } > > > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, > long long __v) const > { return _M_insert_int(__s, __io, __fill, __v); } > > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, > unsigned long long __v) const > { return _M_insert_int(__s, __io, __fill, __v); } > > > virtual iter_type > do_put(iter_type, ios_base&, char_type, double) const; > > > > > > > virtual iter_type > do_put(iter_type, ios_base&, char_type, long double) const; > > > virtual iter_type > do_put(iter_type, ios_base&, char_type, const void*) const; > > > > > > > > }; > > template <typename _CharT, typename _OutIter> > locale::id num_put<_CharT, _OutIter>::id; ># 2528 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT> > inline bool > isspace(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); } > > > template<typename _CharT> > inline bool > isprint(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); } > > > template<typename _CharT> > inline bool > iscntrl(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); } > > > template<typename _CharT> > inline bool > isupper(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); } > > > template<typename _CharT> > inline bool > islower(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); } > > > template<typename _CharT> > inline bool > isalpha(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); } > > > template<typename _CharT> > inline bool > isdigit(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); } > > > template<typename _CharT> > inline bool > ispunct(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); } > > > template<typename _CharT> > inline bool > isxdigit(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); } > > > template<typename _CharT> > inline bool > isalnum(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); } > > > template<typename _CharT> > inline bool > isgraph(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); } > > > template<typename _CharT> > inline _CharT > toupper(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).toupper(__c); } > > > template<typename _CharT> > inline _CharT > tolower(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).tolower(__c); } > > >} > ># 1 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 ># 34 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > template<typename _Facet> > struct __use_cache > { > const _Facet* > operator() (const locale& __loc) const; > }; > > > template<typename _CharT> > struct __use_cache<__numpunct_cache<_CharT> > > { > const __numpunct_cache<_CharT>* > operator() (const locale& __loc) const > { > const size_t __i = numpunct<_CharT>::id._M_id(); > const locale::facet** __caches = __loc._M_impl->_M_caches; > if (!__caches[__i]) > { > __numpunct_cache<_CharT>* __tmp = 0; > try > { > __tmp = new __numpunct_cache<_CharT>; > __tmp->_M_cache(__loc); > } > catch(...) > { > delete __tmp; > throw; > } > __loc._M_impl->_M_install_cache(__tmp, __i); > } > return static_cast<const __numpunct_cache<_CharT>*>(__caches[__i]); > } > }; > > template<typename _CharT> > void > __numpunct_cache<_CharT>::_M_cache(const locale& __loc) > { > _M_allocated = true; > > const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc); > > char* __grouping = 0; > _CharT* __truename = 0; > _CharT* __falsename = 0; > try > { > _M_grouping_size = __np.grouping().size(); > __grouping = new char[_M_grouping_size]; > __np.grouping().copy(__grouping, _M_grouping_size); > _M_grouping = __grouping; > _M_use_grouping = (_M_grouping_size > && static_cast<signed char>(_M_grouping[0]) > 0 > && (_M_grouping[0] > != __gnu_cxx::__numeric_traits<char>::__max)); > > _M_truename_size = __np.truename().size(); > __truename = new _CharT[_M_truename_size]; > __np.truename().copy(__truename, _M_truename_size); > _M_truename = __truename; > > _M_falsename_size = __np.falsename().size(); > __falsename = new _CharT[_M_falsename_size]; > __np.falsename().copy(__falsename, _M_falsename_size); > _M_falsename = __falsename; > > _M_decimal_point = __np.decimal_point(); > _M_thousands_sep = __np.thousands_sep(); > > const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc); > __ct.widen(__num_base::_S_atoms_out, > __num_base::_S_atoms_out > + __num_base::_S_oend, _M_atoms_out); > __ct.widen(__num_base::_S_atoms_in, > __num_base::_S_atoms_in > + __num_base::_S_iend, _M_atoms_in); > } > catch(...) > { > delete [] __grouping; > delete [] __truename; > delete [] __falsename; > throw; > } > } ># 136 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > __attribute__ ((__pure__)) bool > __verify_grouping(const char* __grouping, size_t __grouping_size, > const string& __grouping_tmp) throw (); > > > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io, > ios_base::iostate& __err, string& __xtrc) const > { > typedef char_traits<_CharT> __traits_type; > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > const _CharT* __lit = __lc->_M_atoms_in; > char_type __c = char_type(); > > > bool __testeof = __beg == __end; > > > if (!__testeof) > { > __c = *__beg; > const bool __plus = __c == __lit[__num_base::_S_iplus]; > if ((__plus || __c == __lit[__num_base::_S_iminus]) > && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > && !(__c == __lc->_M_decimal_point)) > { > __xtrc += __plus ? '+' : '-'; > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > } > > > bool __found_mantissa = false; > int __sep_pos = 0; > while (!__testeof) > { > if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > || __c == __lc->_M_decimal_point) > break; > else if (__c == __lit[__num_base::_S_izero]) > { > if (!__found_mantissa) > { > __xtrc += '0'; > __found_mantissa = true; > } > ++__sep_pos; > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > else > break; > } > > > bool __found_dec = false; > bool __found_sci = false; > string __found_grouping; > if (__lc->_M_use_grouping) > __found_grouping.reserve(32); > const char_type* __lit_zero = __lit + __num_base::_S_izero; > > if (!__lc->_M_allocated) > > while (!__testeof) > { > const int __digit = _M_find(__lit_zero, 10, __c); > if (__digit != -1) > { > __xtrc += '0' + __digit; > __found_mantissa = true; > } > else if (__c == __lc->_M_decimal_point > && !__found_dec && !__found_sci) > { > __xtrc += '.'; > __found_dec = true; > } > else if ((__c == __lit[__num_base::_S_ie] > || __c == __lit[__num_base::_S_iE]) > && !__found_sci && __found_mantissa) > { > > __xtrc += 'e'; > __found_sci = true; > > > if (++__beg != __end) > { > __c = *__beg; > const bool __plus = __c == __lit[__num_base::_S_iplus]; > if (__plus || __c == __lit[__num_base::_S_iminus]) > __xtrc += __plus ? '+' : '-'; > else > continue; > } > else > { > __testeof = true; > break; > } > } > else > break; > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > else > while (!__testeof) > { > > > if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > { > if (!__found_dec && !__found_sci) > { > > > if (__sep_pos) > { > __found_grouping += static_cast<char>(__sep_pos); > __sep_pos = 0; > } > else > { > > > __xtrc.clear(); > break; > } > } > else > break; > } > else if (__c == __lc->_M_decimal_point) > { > if (!__found_dec && !__found_sci) > { > > > > if (__found_grouping.size()) > __found_grouping += static_cast<char>(__sep_pos); > __xtrc += '.'; > __found_dec = true; > } > else > break; > } > else > { > const char_type* __q = > __traits_type::find(__lit_zero, 10, __c); > if (__q) > { > __xtrc += '0' + (__q - __lit_zero); > __found_mantissa = true; > ++__sep_pos; > } > else if ((__c == __lit[__num_base::_S_ie] > || __c == __lit[__num_base::_S_iE]) > && !__found_sci && __found_mantissa) > { > > if (__found_grouping.size() && !__found_dec) > __found_grouping += static_cast<char>(__sep_pos); > __xtrc += 'e'; > __found_sci = true; > > > if (++__beg != __end) > { > __c = *__beg; > const bool __plus = __c == __lit[__num_base::_S_iplus]; > if ((__plus || __c == __lit[__num_base::_S_iminus]) > && !(__lc->_M_use_grouping > && __c == __lc->_M_thousands_sep) > && !(__c == __lc->_M_decimal_point)) > __xtrc += __plus ? '+' : '-'; > else > continue; > } > else > { > __testeof = true; > break; > } > } > else > break; > } > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > > > > if (__found_grouping.size()) > { > > if (!__found_dec && !__found_sci) > __found_grouping += static_cast<char>(__sep_pos); > > if (!std::__verify_grouping(__lc->_M_grouping, > __lc->_M_grouping_size, > __found_grouping)) > __err = ios_base::failbit; > } > > return __beg; > } > > template<typename _CharT, typename _InIter> > template<typename _ValueT> > _InIter > num_get<_CharT, _InIter>:: > _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io, > ios_base::iostate& __err, _ValueT& __v) const > { > typedef char_traits<_CharT> __traits_type; > using __gnu_cxx::__add_unsigned; > typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > const _CharT* __lit = __lc->_M_atoms_in; > char_type __c = char_type(); > > > const ios_base::fmtflags __basefield = __io.flags() > & ios_base::basefield; > const bool __oct = __basefield == ios_base::oct; > int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10); > > > bool __testeof = __beg == __end; > > > bool __negative = false; > if (!__testeof) > { > __c = *__beg; > __negative = __c == __lit[__num_base::_S_iminus]; > if ((__negative || __c == __lit[__num_base::_S_iplus]) > && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > && !(__c == __lc->_M_decimal_point)) > { > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > } > > > > bool __found_zero = false; > int __sep_pos = 0; > while (!__testeof) > { > if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > || __c == __lc->_M_decimal_point) > break; > else if (__c == __lit[__num_base::_S_izero] > && (!__found_zero || __base == 10)) > { > __found_zero = true; > ++__sep_pos; > if (__basefield == 0) > __base = 8; > if (__base == 8) > __sep_pos = 0; > } > else if (__found_zero > && (__c == __lit[__num_base::_S_ix] > || __c == __lit[__num_base::_S_iX])) > { > if (__basefield == 0) > __base = 16; > if (__base == 16) > { > __found_zero = false; > __sep_pos = 0; > } > else > break; > } > else > break; > > if (++__beg != __end) > { > __c = *__beg; > if (!__found_zero) > break; > } > else > __testeof = true; > } > > > > const size_t __len = (__base == 16 ? __num_base::_S_iend > - __num_base::_S_izero : __base); > > > string __found_grouping; > if (__lc->_M_use_grouping) > __found_grouping.reserve(32); > bool __testfail = false; > bool __testoverflow = false; > const __unsigned_type __max = > (__negative && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) > ? -__gnu_cxx::__numeric_traits<_ValueT>::__min > : __gnu_cxx::__numeric_traits<_ValueT>::__max; > const __unsigned_type __smax = __max / __base; > __unsigned_type __result = 0; > int __digit = 0; > const char_type* __lit_zero = __lit + __num_base::_S_izero; > > if (!__lc->_M_allocated) > > while (!__testeof) > { > __digit = _M_find(__lit_zero, __len, __c); > if (__digit == -1) > break; > > if (__result > __smax) > __testoverflow = true; > else > { > __result *= __base; > __testoverflow |= __result > __max - __digit; > __result += __digit; > ++__sep_pos; > } > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > else > while (!__testeof) > { > > > if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > { > > > if (__sep_pos) > { > __found_grouping += static_cast<char>(__sep_pos); > __sep_pos = 0; > } > else > { > __testfail = true; > break; > } > } > else if (__c == __lc->_M_decimal_point) > break; > else > { > const char_type* __q = > __traits_type::find(__lit_zero, __len, __c); > if (!__q) > break; > > __digit = __q - __lit_zero; > if (__digit > 15) > __digit -= 6; > if (__result > __smax) > __testoverflow = true; > else > { > __result *= __base; > __testoverflow |= __result > __max - __digit; > __result += __digit; > ++__sep_pos; > } > } > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > > > > if (__found_grouping.size()) > { > > __found_grouping += static_cast<char>(__sep_pos); > > if (!std::__verify_grouping(__lc->_M_grouping, > __lc->_M_grouping_size, > __found_grouping)) > __err = ios_base::failbit; > } > > > > if ((!__sep_pos && !__found_zero && !__found_grouping.size()) > || __testfail) > { > __v = 0; > __err = ios_base::failbit; > } > else if (__testoverflow) > { > if (__negative > && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) > __v = __gnu_cxx::__numeric_traits<_ValueT>::__min; > else > __v = __gnu_cxx::__numeric_traits<_ValueT>::__max; > __err = ios_base::failbit; > } > else > __v = __negative ? -__result : __result; > > if (__testeof) > __err |= ios_base::eofbit; > return __beg; > } > > > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, bool& __v) const > { > if (!(__io.flags() & ios_base::boolalpha)) > { > > > > long __l = -1; > __beg = _M_extract_int(__beg, __end, __io, __err, __l); > if (__l == 0 || __l == 1) > __v = bool(__l); > else > { > > > __v = true; > __err = ios_base::failbit; > if (__beg == __end) > __err |= ios_base::eofbit; > } > } > else > { > > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > > bool __testf = true; > bool __testt = true; > bool __donef = __lc->_M_falsename_size == 0; > bool __donet = __lc->_M_truename_size == 0; > bool __testeof = false; > size_t __n = 0; > while (!__donef || !__donet) > { > if (__beg == __end) > { > __testeof = true; > break; > } > > const char_type __c = *__beg; > > if (!__donef) > __testf = __c == __lc->_M_falsename[__n]; > > if (!__testf && __donet) > break; > > if (!__donet) > __testt = __c == __lc->_M_truename[__n]; > > if (!__testt && __donef) > break; > > if (!__testt && !__testf) > break; > > ++__n; > ++__beg; > > __donef = !__testf || __n >= __lc->_M_falsename_size; > __donet = !__testt || __n >= __lc->_M_truename_size; > } > if (__testf && __n == __lc->_M_falsename_size && __n) > { > __v = false; > if (__testt && __n == __lc->_M_truename_size) > __err = ios_base::failbit; > else > __err = __testeof ? ios_base::eofbit : ios_base::goodbit; > } > else if (__testt && __n == __lc->_M_truename_size && __n) > { > __v = true; > __err = __testeof ? ios_base::eofbit : ios_base::goodbit; > } > else > { > > > __v = false; > __err = ios_base::failbit; > if (__testeof) > __err |= ios_base::eofbit; > } > } > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, float& __v) const > { > string __xtrc; > __xtrc.reserve(32); > __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); > std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, double& __v) const > { > string __xtrc; > __xtrc.reserve(32); > __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); > std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } ># 730 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long double& __v) const > { > string __xtrc; > __xtrc.reserve(32); > __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); > std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, void*& __v) const > { > > typedef ios_base::fmtflags fmtflags; > const fmtflags __fmt = __io.flags(); > __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex); > > typedef __gnu_cxx::__conditional_type<(sizeof(void*) > <= sizeof(unsigned long)), > unsigned long, unsigned long long>::__type _UIntPtrType; > > _UIntPtrType __ul; > __beg = _M_extract_int(__beg, __end, __io, __err, __ul); > > > __io.flags(__fmt); > > __v = reinterpret_cast<void*>(__ul); > return __beg; > } > > > > template<typename _CharT, typename _OutIter> > void > num_put<_CharT, _OutIter>:: > _M_pad(_CharT __fill, streamsize __w, ios_base& __io, > _CharT* __new, const _CharT* __cs, int& __len) const > { > > > __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new, > __cs, __w, __len); > __len = static_cast<int>(__w); > } > > > > template<typename _CharT, typename _ValueT> > int > __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit, > ios_base::fmtflags __flags, bool __dec) > { > _CharT* __buf = __bufend; > if (__builtin_expect(__dec, true)) > { > > do > { > *--__buf = __lit[(__v % 10) + __num_base::_S_odigits]; > __v /= 10; > } > while (__v != 0); > } > else if ((__flags & ios_base::basefield) == ios_base::oct) > { > > do > { > *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits]; > __v >>= 3; > } > while (__v != 0); > } > else > { > > const bool __uppercase = __flags & ios_base::uppercase; > const int __case_offset = __uppercase ? __num_base::_S_oudigits > : __num_base::_S_odigits; > do > { > *--__buf = __lit[(__v & 0xf) + __case_offset]; > __v >>= 4; > } > while (__v != 0); > } > return __bufend - __buf; > } > > > > template<typename _CharT, typename _OutIter> > void > num_put<_CharT, _OutIter>:: > _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep, > ios_base&, _CharT* __new, _CharT* __cs, int& __len) const > { > _CharT* __p = std::__add_grouping(__new, __sep, __grouping, > __grouping_size, __cs, __cs + __len); > __len = __p - __new; > } > > template<typename _CharT, typename _OutIter> > template<typename _ValueT> > _OutIter > num_put<_CharT, _OutIter>:: > _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill, > _ValueT __v) const > { > using __gnu_cxx::__add_unsigned; > typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > const _CharT* __lit = __lc->_M_atoms_out; > const ios_base::fmtflags __flags = __io.flags(); > > > const int __ilen = 5 * sizeof(_ValueT); > _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __ilen)); > > > > const ios_base::fmtflags __basefield = __flags & ios_base::basefield; > const bool __dec = (__basefield != ios_base::oct > && __basefield != ios_base::hex); > const __unsigned_type __u = ((__v > 0 || !__dec) > ? __unsigned_type(__v) > : -__unsigned_type(__v)); > int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec); > __cs += __ilen - __len; > > > if (__lc->_M_use_grouping) > { > > > _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * (__len + 1) > * 2)); > _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size, > __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len); > __cs = __cs2 + 2; > } > > > if (__builtin_expect(__dec, true)) > { > > if (__v >= 0) > { > if (bool(__flags & ios_base::showpos) > && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) > *--__cs = __lit[__num_base::_S_oplus], ++__len; > } > else > *--__cs = __lit[__num_base::_S_ominus], ++__len; > } > else if (bool(__flags & ios_base::showbase) && __v) > { > if (__basefield == ios_base::oct) > *--__cs = __lit[__num_base::_S_odigits], ++__len; > else > { > > const bool __uppercase = __flags & ios_base::uppercase; > *--__cs = __lit[__num_base::_S_ox + __uppercase]; > > *--__cs = __lit[__num_base::_S_odigits]; > __len += 2; > } > } > > > const streamsize __w = __io.width(); > if (__w > static_cast<streamsize>(__len)) > { > _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __w)); > _M_pad(__fill, __w, __io, __cs3, __cs, __len); > __cs = __cs3; > } > __io.width(0); > > > > return std::__write(__s, __cs, __len); > } > > template<typename _CharT, typename _OutIter> > void > num_put<_CharT, _OutIter>:: > _M_group_float(const char* __grouping, size_t __grouping_size, > _CharT __sep, const _CharT* __p, _CharT* __new, > _CharT* __cs, int& __len) const > { > > > > const int __declen = __p ? __p - __cs : __len; > _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping, > __grouping_size, > __cs, __cs + __declen); > > > int __newlen = __p2 - __new; > if (__p) > { > char_traits<_CharT>::copy(__p2, __p, __len - __declen); > __newlen += __len - __declen; > } > __len = __newlen; > } ># 966 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > template<typename _CharT, typename _OutIter> > template<typename _ValueT> > _OutIter > num_put<_CharT, _OutIter>:: > _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, > _ValueT __v) const > { > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > > > const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision(); > > const int __max_digits = > __gnu_cxx::__numeric_traits<_ValueT>::__digits10; > > > int __len; > > char __fbuf[16]; > __num_base::_S_format_float(__io, __fbuf, __mod); > > > > > int __cs_size = __max_digits * 3; > char* __cs = static_cast<char*>(__builtin_alloca(__cs_size)); > __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, > __fbuf, __prec, __v); > > > if (__len >= __cs_size) > { > __cs_size = __len + 1; > __cs = static_cast<char*>(__builtin_alloca(__cs_size)); > __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, > __fbuf, __prec, __v); > } ># 1027 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __len)); > __ctype.widen(__cs, __cs + __len, __ws); > > > _CharT* __wp = 0; > const char* __p = char_traits<char>::find(__cs, __len, '.'); > if (__p) > { > __wp = __ws + (__p - __cs); > *__wp = __lc->_M_decimal_point; > } > > > > > if (__lc->_M_use_grouping > && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9' > && __cs[1] >= '0' && __cs[2] >= '0'))) > { > > > _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __len * 2)); > > streamsize __off = 0; > if (__cs[0] == '-' || __cs[0] == '+') > { > __off = 1; > __ws2[0] = __ws[0]; > __len -= 1; > } > > _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size, > __lc->_M_thousands_sep, __wp, __ws2 + __off, > __ws + __off, __len); > __len += __off; > > __ws = __ws2; > } > > > const streamsize __w = __io.width(); > if (__w > static_cast<streamsize>(__len)) > { > _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __w)); > _M_pad(__fill, __w, __io, __ws3, __ws, __len); > __ws = __ws3; > } > __io.width(0); > > > > return std::__write(__s, __ws, __len); > } > > template<typename _CharT, typename _OutIter> > _OutIter > num_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const > { > const ios_base::fmtflags __flags = __io.flags(); > if ((__flags & ios_base::boolalpha) == 0) > { > const long __l = __v; > __s = _M_insert_int(__s, __io, __fill, __l); > } > else > { > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > > const _CharT* __name = __v ? __lc->_M_truename > : __lc->_M_falsename; > int __len = __v ? __lc->_M_truename_size > : __lc->_M_falsename_size; > > const streamsize __w = __io.width(); > if (__w > static_cast<streamsize>(__len)) > { > const streamsize __plen = __w - __len; > _CharT* __ps > = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __plen)); > > char_traits<_CharT>::assign(__ps, __plen, __fill); > __io.width(0); > > if ((__flags & ios_base::adjustfield) == ios_base::left) > { > __s = std::__write(__s, __name, __len); > __s = std::__write(__s, __ps, __plen); > } > else > { > __s = std::__write(__s, __ps, __plen); > __s = std::__write(__s, __name, __len); > } > return __s; > } > __io.width(0); > __s = std::__write(__s, __name, __len); > } > return __s; > } > > template<typename _CharT, typename _OutIter> > _OutIter > num_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const > { return _M_insert_float(__s, __io, __fill, char(), __v); } ># 1152 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > template<typename _CharT, typename _OutIter> > _OutIter > num_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type __fill, > long double __v) const > { return _M_insert_float(__s, __io, __fill, 'L', __v); } > > template<typename _CharT, typename _OutIter> > _OutIter > num_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type __fill, > const void* __v) const > { > const ios_base::fmtflags __flags = __io.flags(); > const ios_base::fmtflags __fmt = ~(ios_base::basefield > | ios_base::uppercase); > __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase)); > > typedef __gnu_cxx::__conditional_type<(sizeof(const void*) > <= sizeof(unsigned long)), > unsigned long, unsigned long long>::__type _UIntPtrType; > > __s = _M_insert_int(__s, __io, __fill, > reinterpret_cast<_UIntPtrType>(__v)); > __io.flags(__flags); > return __s; > } ># 1189 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > template<typename _CharT, typename _Traits> > void > __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill, > _CharT* __news, const _CharT* __olds, > streamsize __newlen, streamsize __oldlen) > { > const size_t __plen = static_cast<size_t>(__newlen - __oldlen); > const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield; > > > if (__adjust == ios_base::left) > { > _Traits::copy(__news, __olds, __oldlen); > _Traits::assign(__news + __oldlen, __plen, __fill); > return; > } > > size_t __mod = 0; > if (__adjust == ios_base::internal) > { > > > > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > if (__ctype.widen('-') == __olds[0] > || __ctype.widen('+') == __olds[0]) > { > __news[0] = __olds[0]; > __mod = 1; > ++__news; > } > else if (__ctype.widen('0') == __olds[0] > && __oldlen > 1 > && (__ctype.widen('x') == __olds[1] > || __ctype.widen('X') == __olds[1])) > { > __news[0] = __olds[0]; > __news[1] = __olds[1]; > __mod = 2; > __news += 2; > } > > } > _Traits::assign(__news, __plen, __fill); > _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod); > } > > template<typename _CharT> > _CharT* > __add_grouping(_CharT* __s, _CharT __sep, > const char* __gbeg, size_t __gsize, > const _CharT* __first, const _CharT* __last) > { > size_t __idx = 0; > size_t __ctr = 0; > > while (__last - __first > __gbeg[__idx] > && static_cast<signed char>(__gbeg[__idx]) > 0 > && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max) > { > __last -= __gbeg[__idx]; > __idx < __gsize - 1 ? ++__idx : ++__ctr; > } > > while (__first != __last) > *__s++ = *__first++; > > while (__ctr--) > { > *__s++ = __sep; > for (char __i = __gbeg[__idx]; __i > 0; --__i) > *__s++ = *__first++; > } > > while (__idx--) > { > *__s++ = __sep; > for (char __i = __gbeg[__idx]; __i > 0; --__i) > *__s++ = *__first++; > } > > return __s; > } > > > > > extern template class numpunct<char>; > extern template class numpunct_byname<char>; > extern template class num_get<char>; > extern template class num_put<char>; > extern template class ctype_byname<char>; > > extern template > const ctype<char>& > use_facet<ctype<char> >(const locale&); > > extern template > const numpunct<char>& > use_facet<numpunct<char> >(const locale&); > > extern template > const num_put<char>& > use_facet<num_put<char> >(const locale&); > > extern template > const num_get<char>& > use_facet<num_get<char> >(const locale&); > > extern template > bool > has_facet<ctype<char> >(const locale&); > > extern template > bool > has_facet<numpunct<char> >(const locale&); > > extern template > bool > has_facet<num_put<char> >(const locale&); > > extern template > bool > has_facet<num_get<char> >(const locale&); > > > extern template class numpunct<wchar_t>; > extern template class numpunct_byname<wchar_t>; > extern template class num_get<wchar_t>; > extern template class num_put<wchar_t>; > extern template class ctype_byname<wchar_t>; > > extern template > const ctype<wchar_t>& > use_facet<ctype<wchar_t> >(const locale&); > > extern template > const numpunct<wchar_t>& > use_facet<numpunct<wchar_t> >(const locale&); > > extern template > const num_put<wchar_t>& > use_facet<num_put<wchar_t> >(const locale&); > > extern template > const num_get<wchar_t>& > use_facet<num_get<wchar_t> >(const locale&); > > extern template > bool > has_facet<ctype<wchar_t> >(const locale&); > > extern template > bool > has_facet<numpunct<wchar_t> >(const locale&); > > extern template > bool > has_facet<num_put<wchar_t> >(const locale&); > > extern template > bool > has_facet<num_get<wchar_t> >(const locale&); > > > > >} ># 2609 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 ># 41 "/usr/include/c++/4.8.2/locale" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 ># 38 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > ># 1 "/usr/include/c++/4.8.2/ctime" 1 3 ># 39 "/usr/include/c++/4.8.2/ctime" 3 ># 40 "/usr/include/c++/4.8.2/ctime" 3 ># 58 "/usr/include/c++/4.8.2/ctime" 3 >namespace std >{ > using ::clock_t; > using ::time_t; > using ::tm; > > using ::clock; > using ::difftime; > using ::mktime; > using ::time; > using ::asctime; > using ::ctime; > using ::gmtime; > using ::localtime; > using ::strftime; >} ># 40 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 52 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > class time_base > { > public: > enum dateorder { no_order, dmy, mdy, ymd, ydm }; > }; > > template<typename _CharT> > struct __timepunct_cache : public locale::facet > { > > static const _CharT* _S_timezones[14]; > > const _CharT* _M_date_format; > const _CharT* _M_date_era_format; > const _CharT* _M_time_format; > const _CharT* _M_time_era_format; > const _CharT* _M_date_time_format; > const _CharT* _M_date_time_era_format; > const _CharT* _M_am; > const _CharT* _M_pm; > const _CharT* _M_am_pm_format; > > > const _CharT* _M_day1; > const _CharT* _M_day2; > const _CharT* _M_day3; > const _CharT* _M_day4; > const _CharT* _M_day5; > const _CharT* _M_day6; > const _CharT* _M_day7; > > > const _CharT* _M_aday1; > const _CharT* _M_aday2; > const _CharT* _M_aday3; > const _CharT* _M_aday4; > const _CharT* _M_aday5; > const _CharT* _M_aday6; > const _CharT* _M_aday7; > > > const _CharT* _M_month01; > const _CharT* _M_month02; > const _CharT* _M_month03; > const _CharT* _M_month04; > const _CharT* _M_month05; > const _CharT* _M_month06; > const _CharT* _M_month07; > const _CharT* _M_month08; > const _CharT* _M_month09; > const _CharT* _M_month10; > const _CharT* _M_month11; > const _CharT* _M_month12; > > > const _CharT* _M_amonth01; > const _CharT* _M_amonth02; > const _CharT* _M_amonth03; > const _CharT* _M_amonth04; > const _CharT* _M_amonth05; > const _CharT* _M_amonth06; > const _CharT* _M_amonth07; > const _CharT* _M_amonth08; > const _CharT* _M_amonth09; > const _CharT* _M_amonth10; > const _CharT* _M_amonth11; > const _CharT* _M_amonth12; > > bool _M_allocated; > > __timepunct_cache(size_t __refs = 0) : facet(__refs), > _M_date_format(0), _M_date_era_format(0), _M_time_format(0), > _M_time_era_format(0), _M_date_time_format(0), > _M_date_time_era_format(0), _M_am(0), _M_pm(0), > _M_am_pm_format(0), _M_day1(0), _M_day2(0), _M_day3(0), > _M_day4(0), _M_day5(0), _M_day6(0), _M_day7(0), > _M_aday1(0), _M_aday2(0), _M_aday3(0), _M_aday4(0), > _M_aday5(0), _M_aday6(0), _M_aday7(0), _M_month01(0), > _M_month02(0), _M_month03(0), _M_month04(0), _M_month05(0), > _M_month06(0), _M_month07(0), _M_month08(0), _M_month09(0), > _M_month10(0), _M_month11(0), _M_month12(0), _M_amonth01(0), > _M_amonth02(0), _M_amonth03(0), _M_amonth04(0), > _M_amonth05(0), _M_amonth06(0), _M_amonth07(0), > _M_amonth08(0), _M_amonth09(0), _M_amonth10(0), > _M_amonth11(0), _M_amonth12(0), _M_allocated(false) > { } > > ~__timepunct_cache(); > > void > _M_cache(const locale& __loc); > > private: > __timepunct_cache& > operator=(const __timepunct_cache&); > > explicit > __timepunct_cache(const __timepunct_cache&); > }; > > template<typename _CharT> > __timepunct_cache<_CharT>::~__timepunct_cache() > { > if (_M_allocated) > { > > } > } > > > template<> > const char* > __timepunct_cache<char>::_S_timezones[14]; > > > template<> > const wchar_t* > __timepunct_cache<wchar_t>::_S_timezones[14]; > > > > template<typename _CharT> > const _CharT* __timepunct_cache<_CharT>::_S_timezones[14]; > > template<typename _CharT> > class __timepunct : public locale::facet > { > public: > > typedef _CharT __char_type; > typedef basic_string<_CharT> __string_type; > typedef __timepunct_cache<_CharT> __cache_type; > > protected: > __cache_type* _M_data; > __c_locale _M_c_locale_timepunct; > const char* _M_name_timepunct; > > public: > > static locale::id id; > > explicit > __timepunct(size_t __refs = 0); > > explicit > __timepunct(__cache_type* __cache, size_t __refs = 0); ># 210 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0); > > > > void > _M_put(_CharT* __s, size_t __maxlen, const _CharT* __format, > const tm* __tm) const throw (); > > void > _M_date_formats(const _CharT** __date) const > { > > __date[0] = _M_data->_M_date_format; > __date[1] = _M_data->_M_date_era_format; > } > > void > _M_time_formats(const _CharT** __time) const > { > > __time[0] = _M_data->_M_time_format; > __time[1] = _M_data->_M_time_era_format; > } > > void > _M_date_time_formats(const _CharT** __dt) const > { > > __dt[0] = _M_data->_M_date_time_format; > __dt[1] = _M_data->_M_date_time_era_format; > } > > void > _M_am_pm_format(const _CharT* __ampm) const > { __ampm = _M_data->_M_am_pm_format; } > > void > _M_am_pm(const _CharT** __ampm) const > { > __ampm[0] = _M_data->_M_am; > __ampm[1] = _M_data->_M_pm; > } > > void > _M_days(const _CharT** __days) const > { > __days[0] = _M_data->_M_day1; > __days[1] = _M_data->_M_day2; > __days[2] = _M_data->_M_day3; > __days[3] = _M_data->_M_day4; > __days[4] = _M_data->_M_day5; > __days[5] = _M_data->_M_day6; > __days[6] = _M_data->_M_day7; > } > > void > _M_days_abbreviated(const _CharT** __days) const > { > __days[0] = _M_data->_M_aday1; > __days[1] = _M_data->_M_aday2; > __days[2] = _M_data->_M_aday3; > __days[3] = _M_data->_M_aday4; > __days[4] = _M_data->_M_aday5; > __days[5] = _M_data->_M_aday6; > __days[6] = _M_data->_M_aday7; > } > > void > _M_months(const _CharT** __months) const > { > __months[0] = _M_data->_M_month01; > __months[1] = _M_data->_M_month02; > __months[2] = _M_data->_M_month03; > __months[3] = _M_data->_M_month04; > __months[4] = _M_data->_M_month05; > __months[5] = _M_data->_M_month06; > __months[6] = _M_data->_M_month07; > __months[7] = _M_data->_M_month08; > __months[8] = _M_data->_M_month09; > __months[9] = _M_data->_M_month10; > __months[10] = _M_data->_M_month11; > __months[11] = _M_data->_M_month12; > } > > void > _M_months_abbreviated(const _CharT** __months) const > { > __months[0] = _M_data->_M_amonth01; > __months[1] = _M_data->_M_amonth02; > __months[2] = _M_data->_M_amonth03; > __months[3] = _M_data->_M_amonth04; > __months[4] = _M_data->_M_amonth05; > __months[5] = _M_data->_M_amonth06; > __months[6] = _M_data->_M_amonth07; > __months[7] = _M_data->_M_amonth08; > __months[8] = _M_data->_M_amonth09; > __months[9] = _M_data->_M_amonth10; > __months[10] = _M_data->_M_amonth11; > __months[11] = _M_data->_M_amonth12; > } > > protected: > virtual > ~__timepunct(); > > > void > _M_initialize_timepunct(__c_locale __cloc = 0); > }; > > template<typename _CharT> > locale::id __timepunct<_CharT>::id; > > > template<> > void > __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc); > > template<> > void > __timepunct<char>::_M_put(char*, size_t, const char*, const tm*) const throw (); > > > template<> > void > __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc); > > template<> > void > __timepunct<wchar_t>::_M_put(wchar_t*, size_t, const wchar_t*, > const tm*) const throw (); > > > >} > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/time_members.h" 1 3 ># 37 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/time_members.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT> > __timepunct<_CharT>::__timepunct(size_t __refs) > : facet(__refs), _M_data(0), _M_c_locale_timepunct(0), > _M_name_timepunct(_S_get_c_name()) > { _M_initialize_timepunct(); } > > template<typename _CharT> > __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) > : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(0), > _M_name_timepunct(_S_get_c_name()) > { _M_initialize_timepunct(); } > > template<typename _CharT> > __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, > size_t __refs) > : facet(__refs), _M_data(0), _M_c_locale_timepunct(0), > _M_name_timepunct(0) > { > if (__builtin_strcmp(__s, _S_get_c_name()) != 0) > { > const size_t __len = __builtin_strlen(__s) + 1; > char* __tmp = new char[__len]; > __builtin_memcpy(__tmp, __s, __len); > _M_name_timepunct = __tmp; > } > else > _M_name_timepunct = _S_get_c_name(); > > try > { _M_initialize_timepunct(__cloc); } > catch(...) > { > if (_M_name_timepunct != _S_get_c_name()) > delete [] _M_name_timepunct; > throw; > } > } > > template<typename _CharT> > __timepunct<_CharT>::~__timepunct() > { > if (_M_name_timepunct != _S_get_c_name()) > delete [] _M_name_timepunct; > delete _M_data; > _S_destroy_c_locale(_M_c_locale_timepunct); > } > > >} ># 349 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 367 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, typename _InIter> > class time_get : public locale::facet, public time_base > { > public: > > > > typedef _CharT char_type; > typedef _InIter iter_type; > > typedef basic_string<_CharT> __string_type; > > > static locale::id id; ># 389 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > time_get(size_t __refs = 0) > : facet (__refs) { } ># 406 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > dateorder > date_order() const > { return this->do_date_order(); } ># 430 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_time(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_time(__beg, __end, __io, __err, __tm); } ># 455 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_date(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_date(__beg, __end, __io, __err, __tm); } ># 483 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_weekday(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_weekday(__beg, __end, __io, __err, __tm); } ># 512 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_monthname(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_monthname(__beg, __end, __io, __err, __tm); } ># 538 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_year(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_year(__beg, __end, __io, __err, __tm); } > > protected: > > virtual > ~time_get() { } ># 558 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual dateorder > do_date_order() const; ># 576 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_time(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const; ># 595 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_date(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const; ># 614 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_weekday(iter_type __beg, iter_type __end, ios_base&, > ios_base::iostate& __err, tm* __tm) const; ># 633 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_monthname(iter_type __beg, iter_type __end, ios_base&, > ios_base::iostate& __err, tm* __tm) const; ># 652 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_year(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const; > > > iter_type > _M_extract_num(iter_type __beg, iter_type __end, int& __member, > int __min, int __max, size_t __len, > ios_base& __io, ios_base::iostate& __err) const; > > > iter_type > _M_extract_name(iter_type __beg, iter_type __end, int& __member, > const _CharT** __names, size_t __indexlen, > ios_base& __io, ios_base::iostate& __err) const; > > > iter_type > _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member, > const _CharT** __names, size_t __indexlen, > ios_base& __io, ios_base::iostate& __err) const; > > > iter_type > _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm, > const _CharT* __format) const; > }; > > template<typename _CharT, typename _InIter> > locale::id time_get<_CharT, _InIter>::id; > > > template<typename _CharT, typename _InIter> > class time_get_byname : public time_get<_CharT, _InIter> > { > public: > > typedef _CharT char_type; > typedef _InIter iter_type; > > explicit > time_get_byname(const char*, size_t __refs = 0) > : time_get<_CharT, _InIter>(__refs) { } > > protected: > virtual > ~time_get_byname() { } > }; ># 714 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, typename _OutIter> > class time_put : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef _OutIter iter_type; > > > > static locale::id id; ># 735 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > time_put(size_t __refs = 0) > : facet(__refs) { } ># 754 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, > const _CharT* __beg, const _CharT* __end) const; ># 774 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > const tm* __tm, char __format, char __mod = 0) const > { return this->do_put(__s, __io, __fill, __tm, __format, __mod); } > > protected: > > virtual > ~time_put() > { } ># 801 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, > char __format, char __mod) const; > }; > > template<typename _CharT, typename _OutIter> > locale::id time_put<_CharT, _OutIter>::id; > > > template<typename _CharT, typename _OutIter> > class time_put_byname : public time_put<_CharT, _OutIter> > { > public: > > typedef _CharT char_type; > typedef _OutIter iter_type; > > explicit > time_put_byname(const char*, size_t __refs = 0) > : time_put<_CharT, _OutIter>(__refs) > { }; > > protected: > virtual > ~time_put_byname() { } > }; ># 840 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > class money_base > { > public: > enum part { none, space, symbol, sign, value }; > struct pattern { char field[4]; }; > > static const pattern _S_default_pattern; > > enum > { > _S_minus, > _S_zero, > _S_end = 11 > }; > > > > static const char* _S_atoms; > > > > __attribute__ ((__const__)) static pattern > _S_construct_pattern(char __precedes, char __space, char __posn) throw (); > }; > > template<typename _CharT, bool _Intl> > struct __moneypunct_cache : public locale::facet > { > const char* _M_grouping; > size_t _M_grouping_size; > bool _M_use_grouping; > _CharT _M_decimal_point; > _CharT _M_thousands_sep; > const _CharT* _M_curr_symbol; > size_t _M_curr_symbol_size; > const _CharT* _M_positive_sign; > size_t _M_positive_sign_size; > const _CharT* _M_negative_sign; > size_t _M_negative_sign_size; > int _M_frac_digits; > money_base::pattern _M_pos_format; > money_base::pattern _M_neg_format; > > > > > _CharT _M_atoms[money_base::_S_end]; > > bool _M_allocated; > > __moneypunct_cache(size_t __refs = 0) : facet(__refs), > _M_grouping(0), _M_grouping_size(0), _M_use_grouping(false), > _M_decimal_point(_CharT()), _M_thousands_sep(_CharT()), > _M_curr_symbol(0), _M_curr_symbol_size(0), > _M_positive_sign(0), _M_positive_sign_size(0), > _M_negative_sign(0), _M_negative_sign_size(0), > _M_frac_digits(0), > _M_pos_format(money_base::pattern()), > _M_neg_format(money_base::pattern()), _M_allocated(false) > { } > > ~__moneypunct_cache(); > > void > _M_cache(const locale& __loc); > > private: > __moneypunct_cache& > operator=(const __moneypunct_cache&); > > explicit > __moneypunct_cache(const __moneypunct_cache&); > }; > > template<typename _CharT, bool _Intl> > __moneypunct_cache<_CharT, _Intl>::~__moneypunct_cache() > { > if (_M_allocated) > { > delete [] _M_grouping; > delete [] _M_curr_symbol; > delete [] _M_positive_sign; > delete [] _M_negative_sign; > } > } ># 933 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, bool _Intl> > class moneypunct : public locale::facet, public money_base > { > public: > > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > typedef __moneypunct_cache<_CharT, _Intl> __cache_type; > > private: > __cache_type* _M_data; > > public: > > > static const bool intl = _Intl; > > static locale::id id; ># 962 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > moneypunct(size_t __refs = 0) > : facet(__refs), _M_data(0) > { _M_initialize_moneypunct(); } ># 975 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > moneypunct(__cache_type* __cache, size_t __refs = 0) > : facet(__refs), _M_data(__cache) > { _M_initialize_moneypunct(); } ># 990 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > moneypunct(__c_locale __cloc, const char* __s, size_t __refs = 0) > : facet(__refs), _M_data(0) > { _M_initialize_moneypunct(__cloc, __s); } ># 1004 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > char_type > decimal_point() const > { return this->do_decimal_point(); } ># 1017 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > char_type > thousands_sep() const > { return this->do_thousands_sep(); } ># 1047 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string > grouping() const > { return this->do_grouping(); } ># 1060 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string_type > curr_symbol() const > { return this->do_curr_symbol(); } ># 1077 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string_type > positive_sign() const > { return this->do_positive_sign(); } ># 1094 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string_type > negative_sign() const > { return this->do_negative_sign(); } ># 1110 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > int > frac_digits() const > { return this->do_frac_digits(); } ># 1146 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > pattern > pos_format() const > { return this->do_pos_format(); } > > pattern > neg_format() const > { return this->do_neg_format(); } > > > protected: > > virtual > ~moneypunct(); ># 1168 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual char_type > do_decimal_point() const > { return _M_data->_M_decimal_point; } ># 1180 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual char_type > do_thousands_sep() const > { return _M_data->_M_thousands_sep; } ># 1193 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string > do_grouping() const > { return _M_data->_M_grouping; } ># 1206 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string_type > do_curr_symbol() const > { return _M_data->_M_curr_symbol; } ># 1219 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string_type > do_positive_sign() const > { return _M_data->_M_positive_sign; } ># 1232 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string_type > do_negative_sign() const > { return _M_data->_M_negative_sign; } ># 1246 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual int > do_frac_digits() const > { return _M_data->_M_frac_digits; } ># 1260 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual pattern > do_pos_format() const > { return _M_data->_M_pos_format; } ># 1274 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual pattern > do_neg_format() const > { return _M_data->_M_neg_format; } > > > void > _M_initialize_moneypunct(__c_locale __cloc = 0, > const char* __name = 0); > }; > > template<typename _CharT, bool _Intl> > locale::id moneypunct<_CharT, _Intl>::id; > > template<typename _CharT, bool _Intl> > const bool moneypunct<_CharT, _Intl>::intl; > > template<> > moneypunct<char, true>::~moneypunct(); > > template<> > moneypunct<char, false>::~moneypunct(); > > template<> > void > moneypunct<char, true>::_M_initialize_moneypunct(__c_locale, const char*); > > template<> > void > moneypunct<char, false>::_M_initialize_moneypunct(__c_locale, const char*); > > > template<> > moneypunct<wchar_t, true>::~moneypunct(); > > template<> > moneypunct<wchar_t, false>::~moneypunct(); > > template<> > void > moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale, > const char*); > > template<> > void > moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale, > const char*); > > > > template<typename _CharT, bool _Intl> > class moneypunct_byname : public moneypunct<_CharT, _Intl> > { > public: > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > static const bool intl = _Intl; > > explicit > moneypunct_byname(const char* __s, size_t __refs = 0) > : moneypunct<_CharT, _Intl>(__refs) > { > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > __c_locale __tmp; > this->_S_create_c_locale(__tmp, __s); > this->_M_initialize_moneypunct(__tmp); > this->_S_destroy_c_locale(__tmp); > } > } > > protected: > virtual > ~moneypunct_byname() { } > }; > > template<typename _CharT, bool _Intl> > const bool moneypunct_byname<_CharT, _Intl>::intl; ># 1369 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, typename _InIter> > class money_get : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef _InIter iter_type; > typedef basic_string<_CharT> string_type; > > > > static locale::id id; ># 1391 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > money_get(size_t __refs = 0) : facet(__refs) { } ># 1421 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, long double& __units) const > { return this->do_get(__s, __end, __intl, __io, __err, __units); } ># 1452 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, string_type& __digits) const > { return this->do_get(__s, __end, __intl, __io, __err, __digits); } > > protected: > > virtual > ~money_get() { } ># 1475 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, long double& __units) const; ># 1487 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, string_type& __digits) const; ># 1498 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<bool _Intl> > iter_type > _M_extract(iter_type __s, iter_type __end, ios_base& __io, > ios_base::iostate& __err, string& __digits) const; > }; > > template<typename _CharT, typename _InIter> > locale::id money_get<_CharT, _InIter>::id; ># 1520 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, typename _OutIter> > class money_put : public locale::facet > { > public: > > > typedef _CharT char_type; > typedef _OutIter iter_type; > typedef basic_string<_CharT> string_type; > > > > static locale::id id; ># 1541 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > money_put(size_t __refs = 0) : facet(__refs) { } ># 1561 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > put(iter_type __s, bool __intl, ios_base& __io, > char_type __fill, long double __units) const > { return this->do_put(__s, __intl, __io, __fill, __units); } ># 1584 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > put(iter_type __s, bool __intl, ios_base& __io, > char_type __fill, const string_type& __digits) const > { return this->do_put(__s, __intl, __io, __fill, __digits); } > > protected: > > virtual > ~money_put() { } ># 1618 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, > long double __units) const; ># 1642 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, > const string_type& __digits) const; ># 1653 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<bool _Intl> > iter_type > _M_insert(iter_type __s, ios_base& __io, char_type __fill, > const string_type& __digits) const; > }; > > template<typename _CharT, typename _OutIter> > locale::id money_put<_CharT, _OutIter>::id; > > > > > > > > struct messages_base > { > typedef int catalog; > }; ># 1694 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT> > class messages : public locale::facet, public messages_base > { > public: > > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > > protected: > > > __c_locale _M_c_locale_messages; > const char* _M_name_messages; > > public: > > static locale::id id; ># 1722 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > messages(size_t __refs = 0); ># 1736 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > messages(__c_locale __cloc, const char* __s, size_t __refs = 0); ># 1749 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > catalog > open(const basic_string<char>& __s, const locale& __loc) const > { return this->do_open(__s, __loc); } ># 1767 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > catalog > open(const basic_string<char>&, const locale&, const char*) const; ># 1785 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string_type > get(catalog __c, int __set, int __msgid, const string_type& __s) const > { return this->do_get(__c, __set, __msgid, __s); } ># 1796 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > void > close(catalog __c) const > { return this->do_close(__c); } > > protected: > > virtual > ~messages(); ># 1816 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual catalog > do_open(const basic_string<char>&, const locale&) const; ># 1835 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string_type > do_get(catalog, int, int, const string_type& __dfault) const; > > > > > > > virtual void > do_close(catalog) const; > > > char* > _M_convert_to_char(const string_type& __msg) const > { > > return reinterpret_cast<char*>(const_cast<_CharT*>(__msg.c_str())); > } > > > string_type > _M_convert_from_char(char*) const > { > > return string_type(); > } > }; > > template<typename _CharT> > locale::id messages<_CharT>::id; > > > template<> > string > messages<char>::do_get(catalog, int, int, const string&) const; > > > template<> > wstring > messages<wchar_t>::do_get(catalog, int, int, const wstring&) const; > > > > template<typename _CharT> > class messages_byname : public messages<_CharT> > { > public: > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > explicit > messages_byname(const char* __s, size_t __refs = 0); > > protected: > virtual > ~messages_byname() > { } > }; > > >} > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/messages_members.h" 1 3 ># 36 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/messages_members.h" 3 ># 1 "/usr/include/libintl.h" 1 3 4 ># 34 "/usr/include/libintl.h" 3 4 >extern "C" { > > > > >extern char *gettext (const char *__msgid) > throw () __attribute__ ((__format_arg__ (1))); > > > >extern char *dgettext (const char *__domainname, const char *__msgid) > throw () __attribute__ ((__format_arg__ (2))); >extern char *__dgettext (const char *__domainname, const char *__msgid) > throw () __attribute__ ((__format_arg__ (2))); > > > >extern char *dcgettext (const char *__domainname, > const char *__msgid, int __category) > throw () __attribute__ ((__format_arg__ (2))); >extern char *__dcgettext (const char *__domainname, > const char *__msgid, int __category) > throw () __attribute__ ((__format_arg__ (2))); > > > > >extern char *ngettext (const char *__msgid1, const char *__msgid2, > unsigned long int __n) > throw () __attribute__ ((__format_arg__ (1))) __attribute__ ((__format_arg__ (2))); > > > >extern char *dngettext (const char *__domainname, const char *__msgid1, > const char *__msgid2, unsigned long int __n) > throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3))); > > > >extern char *dcngettext (const char *__domainname, const char *__msgid1, > const char *__msgid2, unsigned long int __n, > int __category) > throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3))); > > > > > >extern char *textdomain (const char *__domainname) throw (); > > > >extern char *bindtextdomain (const char *__domainname, > const char *__dirname) throw (); > > > >extern char *bind_textdomain_codeset (const char *__domainname, > const char *__codeset) throw (); ># 121 "/usr/include/libintl.h" 3 4 >} ># 37 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/messages_members.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > template<typename _CharT> > messages<_CharT>::messages(size_t __refs) > : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), > _M_name_messages(_S_get_c_name()) > { } > > template<typename _CharT> > messages<_CharT>::messages(__c_locale __cloc, const char* __s, > size_t __refs) > : facet(__refs), _M_c_locale_messages(0), _M_name_messages(0) > { > if (__builtin_strcmp(__s, _S_get_c_name()) != 0) > { > const size_t __len = __builtin_strlen(__s) + 1; > char* __tmp = new char[__len]; > __builtin_memcpy(__tmp, __s, __len); > _M_name_messages = __tmp; > } > else > _M_name_messages = _S_get_c_name(); > > > _M_c_locale_messages = _S_clone_c_locale(__cloc); > } > > template<typename _CharT> > typename messages<_CharT>::catalog > messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, > const char* __dir) const > { > bindtextdomain(__s.c_str(), __dir); > return this->do_open(__s, __loc); > } > > > template<typename _CharT> > messages<_CharT>::~messages() > { > if (_M_name_messages != _S_get_c_name()) > delete [] _M_name_messages; > _S_destroy_c_locale(_M_c_locale_messages); > } > > template<typename _CharT> > typename messages<_CharT>::catalog > messages<_CharT>::do_open(const basic_string<char>& __s, > const locale&) const > { > > > textdomain(__s.c_str()); > return 0; > } > > template<typename _CharT> > void > messages<_CharT>::do_close(catalog) const > { } > > > template<typename _CharT> > messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) > : messages<_CharT>(__refs) > { > if (this->_M_name_messages != locale::facet::_S_get_c_name()) > { > delete [] this->_M_name_messages; > if (__builtin_strcmp(__s, locale::facet::_S_get_c_name()) != 0) > { > const size_t __len = __builtin_strlen(__s) + 1; > char* __tmp = new char[__len]; > __builtin_memcpy(__tmp, __s, __len); > this->_M_name_messages = __tmp; > } > else > this->_M_name_messages = locale::facet::_S_get_c_name(); > } > > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > this->_S_destroy_c_locale(this->_M_c_locale_messages); > this->_S_create_c_locale(this->_M_c_locale_messages, __s); > } > } > > >} ># 1899 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 > > ># 1 "/usr/include/c++/4.8.2/bits/codecvt.h" 1 3 ># 39 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 ># 40 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > class codecvt_base > { > public: > enum result > { > ok, > partial, > error, > noconv > }; > }; ># 67 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > template<typename _InternT, typename _ExternT, typename _StateT> > class __codecvt_abstract_base > : public locale::facet, public codecvt_base > { > public: > > typedef codecvt_base::result result; > typedef _InternT intern_type; > typedef _ExternT extern_type; > typedef _StateT state_type; ># 115 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > result > out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const > { > return this->do_out(__state, __from, __from_end, __from_next, > __to, __to_end, __to_next); > } ># 154 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > result > unshift(state_type& __state, extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const > { return this->do_unshift(__state, __to,__to_end,__to_next); } ># 195 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > result > in(state_type& __state, const extern_type* __from, > const extern_type* __from_end, const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const > { > return this->do_in(__state, __from, __from_end, __from_next, > __to, __to_end, __to_next); > } > > int > encoding() const throw() > { return this->do_encoding(); } > > bool > always_noconv() const throw() > { return this->do_always_noconv(); } > > int > length(state_type& __state, const extern_type* __from, > const extern_type* __end, size_t __max) const > { return this->do_length(__state, __from, __end, __max); } > > int > max_length() const throw() > { return this->do_max_length(); } > > protected: > explicit > __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { } > > virtual > ~__codecvt_abstract_base() { } ># 236 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > virtual result > do_out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const = 0; > > virtual result > do_unshift(state_type& __state, extern_type* __to, > extern_type* __to_end, extern_type*& __to_next) const = 0; > > virtual result > do_in(state_type& __state, const extern_type* __from, > const extern_type* __from_end, const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const = 0; > > virtual int > do_encoding() const throw() = 0; > > virtual bool > do_always_noconv() const throw() = 0; > > virtual int > do_length(state_type&, const extern_type* __from, > const extern_type* __end, size_t __max) const = 0; > > virtual int > do_max_length() const throw() = 0; > }; ># 275 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > template<typename _InternT, typename _ExternT, typename _StateT> > class codecvt > : public __codecvt_abstract_base<_InternT, _ExternT, _StateT> > { > public: > > typedef codecvt_base::result result; > typedef _InternT intern_type; > typedef _ExternT extern_type; > typedef _StateT state_type; > > protected: > __c_locale _M_c_locale_codecvt; > > public: > static locale::id id; > > explicit > codecvt(size_t __refs = 0) > : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs), > _M_c_locale_codecvt(0) > { } > > explicit > codecvt(__c_locale __cloc, size_t __refs = 0); > > protected: > virtual > ~codecvt() { } > > virtual result > do_out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const; > > virtual result > do_unshift(state_type& __state, extern_type* __to, > extern_type* __to_end, extern_type*& __to_next) const; > > virtual result > do_in(state_type& __state, const extern_type* __from, > const extern_type* __from_end, const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const; > > virtual int > do_encoding() const throw(); > > virtual bool > do_always_noconv() const throw(); > > virtual int > do_length(state_type&, const extern_type* __from, > const extern_type* __end, size_t __max) const; > > virtual int > do_max_length() const throw(); > }; > > template<typename _InternT, typename _ExternT, typename _StateT> > locale::id codecvt<_InternT, _ExternT, _StateT>::id; > > > template<> > class codecvt<char, char, mbstate_t> > : public __codecvt_abstract_base<char, char, mbstate_t> > { > public: > > typedef char intern_type; > typedef char extern_type; > typedef mbstate_t state_type; > > protected: > __c_locale _M_c_locale_codecvt; > > public: > static locale::id id; > > explicit > codecvt(size_t __refs = 0); > > explicit > codecvt(__c_locale __cloc, size_t __refs = 0); > > protected: > virtual > ~codecvt(); > > virtual result > do_out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const; > > virtual result > do_unshift(state_type& __state, extern_type* __to, > extern_type* __to_end, extern_type*& __to_next) const; > > virtual result > do_in(state_type& __state, const extern_type* __from, > const extern_type* __from_end, const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const; > > virtual int > do_encoding() const throw(); > > virtual bool > do_always_noconv() const throw(); > > virtual int > do_length(state_type&, const extern_type* __from, > const extern_type* __end, size_t __max) const; > > virtual int > do_max_length() const throw(); > }; > > > > template<> > class codecvt<wchar_t, char, mbstate_t> > : public __codecvt_abstract_base<wchar_t, char, mbstate_t> > { > public: > > typedef wchar_t intern_type; > typedef char extern_type; > typedef mbstate_t state_type; > > protected: > __c_locale _M_c_locale_codecvt; > > public: > static locale::id id; > > explicit > codecvt(size_t __refs = 0); > > explicit > codecvt(__c_locale __cloc, size_t __refs = 0); > > protected: > virtual > ~codecvt(); > > virtual result > do_out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const; > > virtual result > do_unshift(state_type& __state, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const; > > virtual result > do_in(state_type& __state, > const extern_type* __from, const extern_type* __from_end, > const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const; > > virtual > int do_encoding() const throw(); > > virtual > bool do_always_noconv() const throw(); > > virtual > int do_length(state_type&, const extern_type* __from, > const extern_type* __end, size_t __max) const; > > virtual int > do_max_length() const throw(); > }; > > > > template<typename _InternT, typename _ExternT, typename _StateT> > class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> > { > public: > explicit > codecvt_byname(const char* __s, size_t __refs = 0) > : codecvt<_InternT, _ExternT, _StateT>(__refs) > { > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > this->_S_destroy_c_locale(this->_M_c_locale_codecvt); > this->_S_create_c_locale(this->_M_c_locale_codecvt, __s); > } > } > > protected: > virtual > ~codecvt_byname() { } > }; > > > > > extern template class codecvt_byname<char, char, mbstate_t>; > > extern template > const codecvt<char, char, mbstate_t>& > use_facet<codecvt<char, char, mbstate_t> >(const locale&); > > extern template > bool > has_facet<codecvt<char, char, mbstate_t> >(const locale&); > > > extern template class codecvt_byname<wchar_t, char, mbstate_t>; > > extern template > const codecvt<wchar_t, char, mbstate_t>& > use_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&); > > extern template > bool > has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&); > > > > >} ># 1902 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 > ># 1 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 ># 34 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, bool _Intl> > struct __use_cache<__moneypunct_cache<_CharT, _Intl> > > { > const __moneypunct_cache<_CharT, _Intl>* > operator() (const locale& __loc) const > { > const size_t __i = moneypunct<_CharT, _Intl>::id._M_id(); > const locale::facet** __caches = __loc._M_impl->_M_caches; > if (!__caches[__i]) > { > __moneypunct_cache<_CharT, _Intl>* __tmp = 0; > try > { > __tmp = new __moneypunct_cache<_CharT, _Intl>; > __tmp->_M_cache(__loc); > } > catch(...) > { > delete __tmp; > throw; > } > __loc._M_impl->_M_install_cache(__tmp, __i); > } > return static_cast< > const __moneypunct_cache<_CharT, _Intl>*>(__caches[__i]); > } > }; > > template<typename _CharT, bool _Intl> > void > __moneypunct_cache<_CharT, _Intl>::_M_cache(const locale& __loc) > { > _M_allocated = true; > > const moneypunct<_CharT, _Intl>& __mp = > use_facet<moneypunct<_CharT, _Intl> >(__loc); > > _M_decimal_point = __mp.decimal_point(); > _M_thousands_sep = __mp.thousands_sep(); > _M_frac_digits = __mp.frac_digits(); > > char* __grouping = 0; > _CharT* __curr_symbol = 0; > _CharT* __positive_sign = 0; > _CharT* __negative_sign = 0; > try > { > _M_grouping_size = __mp.grouping().size(); > __grouping = new char[_M_grouping_size]; > __mp.grouping().copy(__grouping, _M_grouping_size); > _M_grouping = __grouping; > _M_use_grouping = (_M_grouping_size > && static_cast<signed char>(_M_grouping[0]) > 0 > && (_M_grouping[0] > != __gnu_cxx::__numeric_traits<char>::__max)); > > _M_curr_symbol_size = __mp.curr_symbol().size(); > __curr_symbol = new _CharT[_M_curr_symbol_size]; > __mp.curr_symbol().copy(__curr_symbol, _M_curr_symbol_size); > _M_curr_symbol = __curr_symbol; > > _M_positive_sign_size = __mp.positive_sign().size(); > __positive_sign = new _CharT[_M_positive_sign_size]; > __mp.positive_sign().copy(__positive_sign, _M_positive_sign_size); > _M_positive_sign = __positive_sign; > > _M_negative_sign_size = __mp.negative_sign().size(); > __negative_sign = new _CharT[_M_negative_sign_size]; > __mp.negative_sign().copy(__negative_sign, _M_negative_sign_size); > _M_negative_sign = __negative_sign; > > _M_pos_format = __mp.pos_format(); > _M_neg_format = __mp.neg_format(); > > const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc); > __ct.widen(money_base::_S_atoms, > money_base::_S_atoms + money_base::_S_end, _M_atoms); > } > catch(...) > { > delete [] __grouping; > delete [] __curr_symbol; > delete [] __positive_sign; > delete [] __negative_sign; > throw; > } > } > > > > template<typename _CharT, typename _InIter> > template<bool _Intl> > _InIter > money_get<_CharT, _InIter>:: > _M_extract(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, string& __units) const > { > typedef char_traits<_CharT> __traits_type; > typedef typename string_type::size_type size_type; > typedef money_base::part part; > typedef __moneypunct_cache<_CharT, _Intl> __cache_type; > > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > __use_cache<__cache_type> __uc; > const __cache_type* __lc = __uc(__loc); > const char_type* __lit = __lc->_M_atoms; > > > bool __negative = false; > > size_type __sign_size = 0; > > const bool __mandatory_sign = (__lc->_M_positive_sign_size > && __lc->_M_negative_sign_size); > > string __grouping_tmp; > if (__lc->_M_use_grouping) > __grouping_tmp.reserve(32); > > int __last_pos = 0; > > int __n = 0; > > bool __testvalid = true; > > bool __testdecfound = false; > > > string __res; > __res.reserve(32); > > const char_type* __lit_zero = __lit + money_base::_S_zero; > const money_base::pattern __p = __lc->_M_neg_format; > for (int __i = 0; __i < 4 && __testvalid; ++__i) > { > const part __which = static_cast<part>(__p.field[__i]); > switch (__which) > { > case money_base::symbol: > > > > > if (__io.flags() & ios_base::showbase || __sign_size > 1 > || __i == 0 > || (__i == 1 && (__mandatory_sign > || (static_cast<part>(__p.field[0]) > == money_base::sign) > || (static_cast<part>(__p.field[2]) > == money_base::space))) > || (__i == 2 && ((static_cast<part>(__p.field[3]) > == money_base::value) > || (__mandatory_sign > && (static_cast<part>(__p.field[3]) > == money_base::sign))))) > { > const size_type __len = __lc->_M_curr_symbol_size; > size_type __j = 0; > for (; __beg != __end && __j < __len > && *__beg == __lc->_M_curr_symbol[__j]; > ++__beg, ++__j); > if (__j != __len > && (__j || __io.flags() & ios_base::showbase)) > __testvalid = false; > } > break; > case money_base::sign: > > if (__lc->_M_positive_sign_size && __beg != __end > && *__beg == __lc->_M_positive_sign[0]) > { > __sign_size = __lc->_M_positive_sign_size; > ++__beg; > } > else if (__lc->_M_negative_sign_size && __beg != __end > && *__beg == __lc->_M_negative_sign[0]) > { > __negative = true; > __sign_size = __lc->_M_negative_sign_size; > ++__beg; > } > else if (__lc->_M_positive_sign_size > && !__lc->_M_negative_sign_size) > > > __negative = true; > else if (__mandatory_sign) > __testvalid = false; > break; > case money_base::value: > > > for (; __beg != __end; ++__beg) > { > const char_type __c = *__beg; > const char_type* __q = __traits_type::find(__lit_zero, > 10, __c); > if (__q != 0) > { > __res += money_base::_S_atoms[__q - __lit]; > ++__n; > } > else if (__c == __lc->_M_decimal_point > && !__testdecfound) > { > if (__lc->_M_frac_digits <= 0) > break; > > __last_pos = __n; > __n = 0; > __testdecfound = true; > } > else if (__lc->_M_use_grouping > && __c == __lc->_M_thousands_sep > && !__testdecfound) > { > if (__n) > { > > __grouping_tmp += static_cast<char>(__n); > __n = 0; > } > else > { > __testvalid = false; > break; > } > } > else > break; > } > if (__res.empty()) > __testvalid = false; > break; > case money_base::space: > > if (__beg != __end && __ctype.is(ctype_base::space, *__beg)) > ++__beg; > else > __testvalid = false; > case money_base::none: > > if (__i != 3) > for (; __beg != __end > && __ctype.is(ctype_base::space, *__beg); ++__beg); > break; > } > } > > > if (__sign_size > 1 && __testvalid) > { > const char_type* __sign = __negative ? __lc->_M_negative_sign > : __lc->_M_positive_sign; > size_type __i = 1; > for (; __beg != __end && __i < __sign_size > && *__beg == __sign[__i]; ++__beg, ++__i); > > if (__i != __sign_size) > __testvalid = false; > } > > if (__testvalid) > { > > if (__res.size() > 1) > { > const size_type __first = __res.find_first_not_of('0'); > const bool __only_zeros = __first == string::npos; > if (__first) > __res.erase(0, __only_zeros ? __res.size() - 1 : __first); > } > > > if (__negative && __res[0] != '0') > __res.insert(__res.begin(), '-'); > > > if (__grouping_tmp.size()) > { > > __grouping_tmp += static_cast<char>(__testdecfound ? __last_pos > : __n); > if (!std::__verify_grouping(__lc->_M_grouping, > __lc->_M_grouping_size, > __grouping_tmp)) > __err |= ios_base::failbit; > } > > > if (__testdecfound && __n != __lc->_M_frac_digits) > __testvalid = false; > } > > > if (!__testvalid) > __err |= ios_base::failbit; > else > __units.swap(__res); > > > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } ># 362 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > template<typename _CharT, typename _InIter> > _InIter > money_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, long double& __units) const > { > string __str; > __beg = __intl ? _M_extract<true>(__beg, __end, __io, __err, __str) > : _M_extract<false>(__beg, __end, __io, __err, __str); > std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale()); > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > money_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, string_type& __digits) const > { > typedef typename string::size_type size_type; > > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > string __str; > __beg = __intl ? _M_extract<true>(__beg, __end, __io, __err, __str) > : _M_extract<false>(__beg, __end, __io, __err, __str); > const size_type __len = __str.size(); > if (__len) > { > __digits.resize(__len); > __ctype.widen(__str.data(), __str.data() + __len, &__digits[0]); > } > return __beg; > } > > template<typename _CharT, typename _OutIter> > template<bool _Intl> > _OutIter > money_put<_CharT, _OutIter>:: > _M_insert(iter_type __s, ios_base& __io, char_type __fill, > const string_type& __digits) const > { > typedef typename string_type::size_type size_type; > typedef money_base::part part; > typedef __moneypunct_cache<_CharT, _Intl> __cache_type; > > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > __use_cache<__cache_type> __uc; > const __cache_type* __lc = __uc(__loc); > const char_type* __lit = __lc->_M_atoms; > > > > const char_type* __beg = __digits.data(); > > money_base::pattern __p; > const char_type* __sign; > size_type __sign_size; > if (!(*__beg == __lit[money_base::_S_minus])) > { > __p = __lc->_M_pos_format; > __sign = __lc->_M_positive_sign; > __sign_size = __lc->_M_positive_sign_size; > } > else > { > __p = __lc->_M_neg_format; > __sign = __lc->_M_negative_sign; > __sign_size = __lc->_M_negative_sign_size; > if (__digits.size()) > ++__beg; > } > > > size_type __len = __ctype.scan_not(ctype_base::digit, __beg, > __beg + __digits.size()) - __beg; > if (__len) > { > > > > string_type __value; > __value.reserve(2 * __len); > > > > long __paddec = __len - __lc->_M_frac_digits; > if (__paddec > 0) > { > if (__lc->_M_frac_digits < 0) > __paddec = __len; > if (__lc->_M_grouping_size) > { > __value.assign(2 * __paddec, char_type()); > _CharT* __vend = > std::__add_grouping(&__value[0], __lc->_M_thousands_sep, > __lc->_M_grouping, > __lc->_M_grouping_size, > __beg, __beg + __paddec); > __value.erase(__vend - &__value[0]); > } > else > __value.assign(__beg, __paddec); > } > > > if (__lc->_M_frac_digits > 0) > { > __value += __lc->_M_decimal_point; > if (__paddec >= 0) > __value.append(__beg + __paddec, __lc->_M_frac_digits); > else > { > > __value.append(-__paddec, __lit[money_base::_S_zero]); > __value.append(__beg, __len); > } > } > > > const ios_base::fmtflags __f = __io.flags() > & ios_base::adjustfield; > __len = __value.size() + __sign_size; > __len += ((__io.flags() & ios_base::showbase) > ? __lc->_M_curr_symbol_size : 0); > > string_type __res; > __res.reserve(2 * __len); > > const size_type __width = static_cast<size_type>(__io.width()); > const bool __testipad = (__f == ios_base::internal > && __len < __width); > > for (int __i = 0; __i < 4; ++__i) > { > const part __which = static_cast<part>(__p.field[__i]); > switch (__which) > { > case money_base::symbol: > if (__io.flags() & ios_base::showbase) > __res.append(__lc->_M_curr_symbol, > __lc->_M_curr_symbol_size); > break; > case money_base::sign: > > > > if (__sign_size) > __res += __sign[0]; > break; > case money_base::value: > __res += __value; > break; > case money_base::space: > > > > if (__testipad) > __res.append(__width - __len, __fill); > else > __res += __fill; > break; > case money_base::none: > if (__testipad) > __res.append(__width - __len, __fill); > break; > } > } > > > if (__sign_size > 1) > __res.append(__sign + 1, __sign_size - 1); > > > __len = __res.size(); > if (__width > __len) > { > if (__f == ios_base::left) > > __res.append(__width - __len, __fill); > else > > __res.insert(0, __width - __len, __fill); > __len = __width; > } > > > __s = std::__write(__s, __res.data(), __len); > } > __io.width(0); > return __s; > } ># 567 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > template<typename _CharT, typename _OutIter> > _OutIter > money_put<_CharT, _OutIter>:: > do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, > long double __units) const > { > const locale __loc = __io.getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > > int __cs_size = 64; > char* __cs = static_cast<char*>(__builtin_alloca(__cs_size)); > > > int __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, > "%.*Lf", 0, __units); > > if (__len >= __cs_size) > { > __cs_size = __len + 1; > __cs = static_cast<char*>(__builtin_alloca(__cs_size)); > __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, > "%.*Lf", 0, __units); > } ># 599 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > string_type __digits(__len, char_type()); > __ctype.widen(__cs, __cs + __len, &__digits[0]); > return __intl ? _M_insert<true>(__s, __io, __fill, __digits) > : _M_insert<false>(__s, __io, __fill, __digits); > } > > template<typename _CharT, typename _OutIter> > _OutIter > money_put<_CharT, _OutIter>:: > do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, > const string_type& __digits) const > { return __intl ? _M_insert<true>(__s, __io, __fill, __digits) > : _M_insert<false>(__s, __io, __fill, __digits); } > > > > > > > template<typename _CharT, typename _InIter> > time_base::dateorder > time_get<_CharT, _InIter>::do_date_order() const > { return time_base::no_order; } > > > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm, > const _CharT* __format) const > { > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > const size_t __len = char_traits<_CharT>::length(__format); > > ios_base::iostate __tmperr = ios_base::goodbit; > size_t __i = 0; > for (; __beg != __end && __i < __len && !__tmperr; ++__i) > { > if (__ctype.narrow(__format[__i], 0) == '%') > { > > char __c = __ctype.narrow(__format[++__i], 0); > int __mem = 0; > if (__c == 'E' || __c == 'O') > __c = __ctype.narrow(__format[++__i], 0); > switch (__c) > { > const char* __cs; > _CharT __wcs[10]; > case 'a': > > const char_type* __days1[7]; > __tp._M_days_abbreviated(__days1); > __beg = _M_extract_name(__beg, __end, __tm->tm_wday, __days1, > 7, __io, __tmperr); > break; > case 'A': > > const char_type* __days2[7]; > __tp._M_days(__days2); > __beg = _M_extract_name(__beg, __end, __tm->tm_wday, __days2, > 7, __io, __tmperr); > break; > case 'h': > case 'b': > > const char_type* __months1[12]; > __tp._M_months_abbreviated(__months1); > __beg = _M_extract_name(__beg, __end, __tm->tm_mon, > __months1, 12, __io, __tmperr); > break; > case 'B': > > const char_type* __months2[12]; > __tp._M_months(__months2); > __beg = _M_extract_name(__beg, __end, __tm->tm_mon, > __months2, 12, __io, __tmperr); > break; > case 'c': > > const char_type* __dt[2]; > __tp._M_date_time_formats(__dt); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __dt[0]); > break; > case 'd': > > __beg = _M_extract_num(__beg, __end, __tm->tm_mday, 1, 31, 2, > __io, __tmperr); > break; > case 'e': > > > if (__ctype.is(ctype_base::space, *__beg)) > __beg = _M_extract_num(++__beg, __end, __tm->tm_mday, 1, 9, > 1, __io, __tmperr); > else > __beg = _M_extract_num(__beg, __end, __tm->tm_mday, 10, 31, > 2, __io, __tmperr); > break; > case 'D': > > __cs = "%m/%d/%y"; > __ctype.widen(__cs, __cs + 9, __wcs); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __wcs); > break; > case 'H': > > __beg = _M_extract_num(__beg, __end, __tm->tm_hour, 0, 23, 2, > __io, __tmperr); > break; > case 'I': > > __beg = _M_extract_num(__beg, __end, __tm->tm_hour, 1, 12, 2, > __io, __tmperr); > break; > case 'm': > > __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2, > __io, __tmperr); > if (!__tmperr) > __tm->tm_mon = __mem - 1; > break; > case 'M': > > __beg = _M_extract_num(__beg, __end, __tm->tm_min, 0, 59, 2, > __io, __tmperr); > break; > case 'n': > if (__ctype.narrow(*__beg, 0) == '\n') > ++__beg; > else > __tmperr |= ios_base::failbit; > break; > case 'R': > > __cs = "%H:%M"; > __ctype.widen(__cs, __cs + 6, __wcs); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __wcs); > break; > case 'S': > > > > __beg = _M_extract_num(__beg, __end, __tm->tm_sec, 0, 60, 2, > > > > __io, __tmperr); > break; > case 't': > if (__ctype.narrow(*__beg, 0) == '\t') > ++__beg; > else > __tmperr |= ios_base::failbit; > break; > case 'T': > > __cs = "%H:%M:%S"; > __ctype.widen(__cs, __cs + 9, __wcs); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __wcs); > break; > case 'x': > > const char_type* __dates[2]; > __tp._M_date_formats(__dates); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __dates[0]); > break; > case 'X': > > const char_type* __times[2]; > __tp._M_time_formats(__times); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __times[0]); > break; > case 'y': > case 'C': > > case 'Y': > > > > > __beg = _M_extract_num(__beg, __end, __mem, 0, 9999, 4, > __io, __tmperr); > if (!__tmperr) > __tm->tm_year = __mem < 0 ? __mem + 100 : __mem - 1900; > break; > case 'Z': > > if (__ctype.is(ctype_base::upper, *__beg)) > { > int __tmp; > __beg = _M_extract_name(__beg, __end, __tmp, > __timepunct_cache<_CharT>::_S_timezones, > 14, __io, __tmperr); > > > if (__beg != __end && !__tmperr && __tmp == 0 > && (*__beg == __ctype.widen('-') > || *__beg == __ctype.widen('+'))) > { > __beg = _M_extract_num(__beg, __end, __tmp, 0, 23, 2, > __io, __tmperr); > __beg = _M_extract_num(__beg, __end, __tmp, 0, 59, 2, > __io, __tmperr); > } > } > else > __tmperr |= ios_base::failbit; > break; > default: > > __tmperr |= ios_base::failbit; > } > } > else > { > > if (__format[__i] == *__beg) > ++__beg; > else > __tmperr |= ios_base::failbit; > } > } > > if (__tmperr || __i != __len) > __err |= ios_base::failbit; > > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > _M_extract_num(iter_type __beg, iter_type __end, int& __member, > int __min, int __max, size_t __len, > ios_base& __io, ios_base::iostate& __err) const > { > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > > int __mult = __len == 2 ? 10 : (__len == 4 ? 1000 : 1); > > ++__min; > size_t __i = 0; > int __value = 0; > for (; __beg != __end && __i < __len; ++__beg, ++__i) > { > const char __c = __ctype.narrow(*__beg, '*'); > if (__c >= '0' && __c <= '9') > { > __value = __value * 10 + (__c - '0'); > const int __valuec = __value * __mult; > if (__valuec > __max || __valuec + __mult < __min) > break; > __mult /= 10; > } > else > break; > } > if (__i == __len) > __member = __value; > > else if (__len == 4 && __i == 2) > __member = __value - 100; > else > __err |= ios_base::failbit; > > return __beg; > } > > > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > _M_extract_name(iter_type __beg, iter_type __end, int& __member, > const _CharT** __names, size_t __indexlen, > ios_base& __io, ios_base::iostate& __err) const > { > typedef char_traits<_CharT> __traits_type; > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > int* __matches = static_cast<int*>(__builtin_alloca(sizeof(int) > * __indexlen)); > size_t __nmatches = 0; > size_t __pos = 0; > bool __testvalid = true; > const char_type* __name; > > > > > > if (__beg != __end) > { > const char_type __c = *__beg; > for (size_t __i1 = 0; __i1 < __indexlen; ++__i1) > if (__c == __names[__i1][0] > || __c == __ctype.toupper(__names[__i1][0])) > __matches[__nmatches++] = __i1; > } > > while (__nmatches > 1) > { > > size_t __minlen = __traits_type::length(__names[__matches[0]]); > for (size_t __i2 = 1; __i2 < __nmatches; ++__i2) > __minlen = std::min(__minlen, > __traits_type::length(__names[__matches[__i2]])); > ++__beg, ++__pos; > if (__pos < __minlen && __beg != __end) > for (size_t __i3 = 0; __i3 < __nmatches;) > { > __name = __names[__matches[__i3]]; > if (!(__name[__pos] == *__beg)) > __matches[__i3] = __matches[--__nmatches]; > else > ++__i3; > } > else > break; > } > > if (__nmatches == 1) > { > > ++__beg, ++__pos; > __name = __names[__matches[0]]; > const size_t __len = __traits_type::length(__name); > while (__pos < __len && __beg != __end && __name[__pos] == *__beg) > ++__beg, ++__pos; > > if (__len == __pos) > __member = __matches[0]; > else > __testvalid = false; > } > else > __testvalid = false; > if (!__testvalid) > __err |= ios_base::failbit; > > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member, > const _CharT** __names, size_t __indexlen, > ios_base& __io, ios_base::iostate& __err) const > { > typedef char_traits<_CharT> __traits_type; > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > int* __matches = static_cast<int*>(__builtin_alloca(2 * sizeof(int) > * __indexlen)); > size_t __nmatches = 0; > size_t* __matches_lengths = 0; > size_t __pos = 0; > > if (__beg != __end) > { > const char_type __c = *__beg; > for (size_t __i = 0; __i < 2 * __indexlen; ++__i) > if (__c == __names[__i][0] > || __c == __ctype.toupper(__names[__i][0])) > __matches[__nmatches++] = __i; > } > > if (__nmatches) > { > ++__beg, ++__pos; > > __matches_lengths > = static_cast<size_t*>(__builtin_alloca(sizeof(size_t) > * __nmatches)); > for (size_t __i = 0; __i < __nmatches; ++__i) > __matches_lengths[__i] > = __traits_type::length(__names[__matches[__i]]); > } > > for (; __beg != __end; ++__beg, ++__pos) > { > size_t __nskipped = 0; > const char_type __c = *__beg; > for (size_t __i = 0; __i < __nmatches;) > { > const char_type* __name = __names[__matches[__i]]; > if (__pos >= __matches_lengths[__i]) > ++__nskipped, ++__i; > else if (!(__name[__pos] == __c)) > { > --__nmatches; > __matches[__i] = __matches[__nmatches]; > __matches_lengths[__i] = __matches_lengths[__nmatches]; > } > else > ++__i; > } > if (__nskipped == __nmatches) > break; > } > > if ((__nmatches == 1 && __matches_lengths[0] == __pos) > || (__nmatches == 2 && (__matches_lengths[0] == __pos > || __matches_lengths[1] == __pos))) > __member = (__matches[0] >= __indexlen > ? __matches[0] - __indexlen : __matches[0]); > else > __err |= ios_base::failbit; > > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_time(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const char_type* __times[2]; > __tp._M_time_formats(__times); > __beg = _M_extract_via_format(__beg, __end, __io, __err, > __tm, __times[0]); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_date(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const char_type* __dates[2]; > __tp._M_date_formats(__dates); > __beg = _M_extract_via_format(__beg, __end, __io, __err, > __tm, __dates[0]); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_weekday(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { > typedef char_traits<_CharT> __traits_type; > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > const char_type* __days[14]; > __tp._M_days_abbreviated(__days); > __tp._M_days(__days + 7); > int __tmpwday; > ios_base::iostate __tmperr = ios_base::goodbit; > > __beg = _M_extract_wday_or_month(__beg, __end, __tmpwday, __days, 7, > __io, __tmperr); > if (!__tmperr) > __tm->tm_wday = __tmpwday; > else > __err |= ios_base::failbit; > > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_monthname(iter_type __beg, iter_type __end, > ios_base& __io, ios_base::iostate& __err, tm* __tm) const > { > typedef char_traits<_CharT> __traits_type; > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > const char_type* __months[24]; > __tp._M_months_abbreviated(__months); > __tp._M_months(__months + 12); > int __tmpmon; > ios_base::iostate __tmperr = ios_base::goodbit; > > __beg = _M_extract_wday_or_month(__beg, __end, __tmpmon, __months, 12, > __io, __tmperr); > if (!__tmperr) > __tm->tm_mon = __tmpmon; > else > __err |= ios_base::failbit; > > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_year(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > int __tmpyear; > ios_base::iostate __tmperr = ios_base::goodbit; > > __beg = _M_extract_num(__beg, __end, __tmpyear, 0, 9999, 4, > __io, __tmperr); > if (!__tmperr) > __tm->tm_year = __tmpyear < 0 ? __tmpyear + 100 : __tmpyear - 1900; > else > __err |= ios_base::failbit; > > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _OutIter> > _OutIter > time_put<_CharT, _OutIter>:: > put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, > const _CharT* __beg, const _CharT* __end) const > { > const locale& __loc = __io._M_getloc(); > ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc); > for (; __beg != __end; ++__beg) > if (__ctype.narrow(*__beg, 0) != '%') > { > *__s = *__beg; > ++__s; > } > else if (++__beg != __end) > { > char __format; > char __mod = 0; > const char __c = __ctype.narrow(*__beg, 0); > if (__c != 'E' && __c != 'O') > __format = __c; > else if (++__beg != __end) > { > __mod = __c; > __format = __ctype.narrow(*__beg, 0); > } > else > break; > __s = this->do_put(__s, __io, __fill, __tm, __format, __mod); > } > else > break; > return __s; > } > > template<typename _CharT, typename _OutIter> > _OutIter > time_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type, const tm* __tm, > char __format, char __mod) const > { > const locale& __loc = __io._M_getloc(); > ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc); > __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc); > > > > const size_t __maxlen = 128; > char_type __res[__maxlen]; > > > > > > > char_type __fmt[4]; > __fmt[0] = __ctype.widen('%'); > if (!__mod) > { > __fmt[1] = __format; > __fmt[2] = char_type(); > } > else > { > __fmt[1] = __mod; > __fmt[2] = __format; > __fmt[3] = char_type(); > } > > __tp._M_put(__res, __maxlen, __fmt, __tm); > > > return std::__write(__s, __res, char_traits<char_type>::length(__res)); > } > > > > > > extern template class moneypunct<char, false>; > extern template class moneypunct<char, true>; > extern template class moneypunct_byname<char, false>; > extern template class moneypunct_byname<char, true>; > extern template class money_get<char>; > extern template class money_put<char>; > extern template class __timepunct<char>; > extern template class time_put<char>; > extern template class time_put_byname<char>; > extern template class time_get<char>; > extern template class time_get_byname<char>; > extern template class messages<char>; > extern template class messages_byname<char>; > > extern template > const moneypunct<char, true>& > use_facet<moneypunct<char, true> >(const locale&); > > extern template > const moneypunct<char, false>& > use_facet<moneypunct<char, false> >(const locale&); > > extern template > const money_put<char>& > use_facet<money_put<char> >(const locale&); > > extern template > const money_get<char>& > use_facet<money_get<char> >(const locale&); > > extern template > const __timepunct<char>& > use_facet<__timepunct<char> >(const locale&); > > extern template > const time_put<char>& > use_facet<time_put<char> >(const locale&); > > extern template > const time_get<char>& > use_facet<time_get<char> >(const locale&); > > extern template > const messages<char>& > use_facet<messages<char> >(const locale&); > > extern template > bool > has_facet<moneypunct<char> >(const locale&); > > extern template > bool > has_facet<money_put<char> >(const locale&); > > extern template > bool > has_facet<money_get<char> >(const locale&); > > extern template > bool > has_facet<__timepunct<char> >(const locale&); > > extern template > bool > has_facet<time_put<char> >(const locale&); > > extern template > bool > has_facet<time_get<char> >(const locale&); > > extern template > bool > has_facet<messages<char> >(const locale&); > > > extern template class moneypunct<wchar_t, false>; > extern template class moneypunct<wchar_t, true>; > extern template class moneypunct_byname<wchar_t, false>; > extern template class moneypunct_byname<wchar_t, true>; > extern template class money_get<wchar_t>; > extern template class money_put<wchar_t>; > extern template class __timepunct<wchar_t>; > extern template class time_put<wchar_t>; > extern template class time_put_byname<wchar_t>; > extern template class time_get<wchar_t>; > extern template class time_get_byname<wchar_t>; > extern template class messages<wchar_t>; > extern template class messages_byname<wchar_t>; > > extern template > const moneypunct<wchar_t, true>& > use_facet<moneypunct<wchar_t, true> >(const locale&); > > extern template > const moneypunct<wchar_t, false>& > use_facet<moneypunct<wchar_t, false> >(const locale&); > > extern template > const money_put<wchar_t>& > use_facet<money_put<wchar_t> >(const locale&); > > extern template > const money_get<wchar_t>& > use_facet<money_get<wchar_t> >(const locale&); > > extern template > const __timepunct<wchar_t>& > use_facet<__timepunct<wchar_t> >(const locale&); > > extern template > const time_put<wchar_t>& > use_facet<time_put<wchar_t> >(const locale&); > > extern template > const time_get<wchar_t>& > use_facet<time_get<wchar_t> >(const locale&); > > extern template > const messages<wchar_t>& > use_facet<messages<wchar_t> >(const locale&); > > extern template > bool > has_facet<moneypunct<wchar_t> >(const locale&); > > extern template > bool > has_facet<money_put<wchar_t> >(const locale&); > > extern template > bool > has_facet<money_get<wchar_t> >(const locale&); > > extern template > bool > has_facet<__timepunct<wchar_t> >(const locale&); > > extern template > bool > has_facet<time_put<wchar_t> >(const locale&); > > extern template > bool > has_facet<time_get<wchar_t> >(const locale&); > > extern template > bool > has_facet<messages<wchar_t> >(const locale&); > > > > >} ># 1904 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 ># 42 "/usr/include/c++/4.8.2/locale" 2 3 ># 48 "gmic.h" 2 ># 70 "gmic.h" ># 1 "./CImg.h" 1 ># 73 "./CImg.h" ># 1 "/usr/include/c++/4.8.2/cstdio" 1 3 ># 39 "/usr/include/c++/4.8.2/cstdio" 3 ># 40 "/usr/include/c++/4.8.2/cstdio" 3 > > ># 1 "/usr/include/stdio.h" 1 3 4 ># 29 "/usr/include/stdio.h" 3 4 >extern "C" { > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 34 "/usr/include/stdio.h" 2 3 4 ># 74 "/usr/include/stdio.h" 3 4 ># 1 "/usr/include/libio.h" 1 3 4 ># 31 "/usr/include/libio.h" 3 4 ># 1 "/usr/include/_G_config.h" 1 3 4 ># 15 "/usr/include/_G_config.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 16 "/usr/include/_G_config.h" 2 3 4 > > > > ># 1 "/usr/include/wchar.h" 1 3 4 ># 21 "/usr/include/_G_config.h" 2 3 4 >typedef struct >{ > __off_t __pos; > __mbstate_t __state; >} _G_fpos_t; >typedef struct >{ > __off64_t __pos; > __mbstate_t __state; >} _G_fpos64_t; ># 32 "/usr/include/libio.h" 2 3 4 ># 49 "/usr/include/libio.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stdarg.h" 1 3 4 ># 50 "/usr/include/libio.h" 2 3 4 ># 144 "/usr/include/libio.h" 3 4 >struct _IO_jump_t; struct _IO_FILE; ># 154 "/usr/include/libio.h" 3 4 >typedef void _IO_lock_t; > > > > > >struct _IO_marker { > struct _IO_marker *_next; > struct _IO_FILE *_sbuf; > > > > int _pos; ># 177 "/usr/include/libio.h" 3 4 >}; > > >enum __codecvt_result >{ > __codecvt_ok, > __codecvt_partial, > __codecvt_error, > __codecvt_noconv >}; ># 245 "/usr/include/libio.h" 3 4 >struct _IO_FILE { > int _flags; > > > > > char* _IO_read_ptr; > char* _IO_read_end; > char* _IO_read_base; > char* _IO_write_base; > char* _IO_write_ptr; > char* _IO_write_end; > char* _IO_buf_base; > char* _IO_buf_end; > > char *_IO_save_base; > char *_IO_backup_base; > char *_IO_save_end; > > struct _IO_marker *_markers; > > struct _IO_FILE *_chain; > > int _fileno; > > > > int _flags2; > > __off_t _old_offset; > > > > unsigned short _cur_column; > signed char _vtable_offset; > char _shortbuf[1]; > > > > _IO_lock_t *_lock; ># 293 "/usr/include/libio.h" 3 4 > __off64_t _offset; ># 302 "/usr/include/libio.h" 3 4 > void *__pad1; > void *__pad2; > void *__pad3; > void *__pad4; > size_t __pad5; > > int _mode; > > char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; > >}; > > > > > >struct _IO_FILE_plus; > >extern struct _IO_FILE_plus _IO_2_1_stdin_; >extern struct _IO_FILE_plus _IO_2_1_stdout_; >extern struct _IO_FILE_plus _IO_2_1_stderr_; ># 338 "/usr/include/libio.h" 3 4 >typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes); > > > > > > > >typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf, > size_t __n); > > > > > > > >typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w); > > >typedef int __io_close_fn (void *__cookie); > > > > >typedef __io_read_fn cookie_read_function_t; >typedef __io_write_fn cookie_write_function_t; >typedef __io_seek_fn cookie_seek_function_t; >typedef __io_close_fn cookie_close_function_t; > > >typedef struct >{ > __io_read_fn *read; > __io_write_fn *write; > __io_seek_fn *seek; > __io_close_fn *close; >} _IO_cookie_io_functions_t; >typedef _IO_cookie_io_functions_t cookie_io_functions_t; > >struct _IO_cookie_file; > > >extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write, > void *__cookie, _IO_cookie_io_functions_t __fns); > > > > >extern "C" { > > >extern int __underflow (_IO_FILE *); >extern int __uflow (_IO_FILE *); >extern int __overflow (_IO_FILE *, int); ># 434 "/usr/include/libio.h" 3 4 >extern int _IO_getc (_IO_FILE *__fp); >extern int _IO_putc (int __c, _IO_FILE *__fp); >extern int _IO_feof (_IO_FILE *__fp) throw (); >extern int _IO_ferror (_IO_FILE *__fp) throw (); > >extern int _IO_peekc_locked (_IO_FILE *__fp); > > > > > >extern void _IO_flockfile (_IO_FILE *) throw (); >extern void _IO_funlockfile (_IO_FILE *) throw (); >extern int _IO_ftrylockfile (_IO_FILE *) throw (); ># 464 "/usr/include/libio.h" 3 4 >extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict, > __gnuc_va_list, int *__restrict); >extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict, > __gnuc_va_list); >extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t); >extern size_t _IO_sgetn (_IO_FILE *, void *, size_t); > >extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int); >extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int); > >extern void _IO_free_backup_area (_IO_FILE *) throw (); ># 526 "/usr/include/libio.h" 3 4 >} ># 75 "/usr/include/stdio.h" 2 3 4 > > > > >typedef __gnuc_va_list va_list; ># 90 "/usr/include/stdio.h" 3 4 >typedef __off_t off_t; > > > > > > >typedef __off64_t off64_t; > > > > >typedef __ssize_t ssize_t; > > > > > > > >typedef _G_fpos_t fpos_t; > > > > > >typedef _G_fpos64_t fpos64_t; ># 164 "/usr/include/stdio.h" 3 4 ># 1 "/usr/include/bits/stdio_lim.h" 1 3 4 ># 165 "/usr/include/stdio.h" 2 3 4 > > > >extern struct _IO_FILE *stdin; >extern struct _IO_FILE *stdout; >extern struct _IO_FILE *stderr; > > > > > > > >extern int remove (const char *__filename) throw (); > >extern int rename (const char *__old, const char *__new) throw (); > > > > >extern int renameat (int __oldfd, const char *__old, int __newfd, > const char *__new) throw (); ># 195 "/usr/include/stdio.h" 3 4 >extern FILE *tmpfile (void) ; ># 205 "/usr/include/stdio.h" 3 4 >extern FILE *tmpfile64 (void) ; > > > >extern char *tmpnam (char *__s) throw () ; > > > > > >extern char *tmpnam_r (char *__s) throw () ; ># 227 "/usr/include/stdio.h" 3 4 >extern char *tempnam (const char *__dir, const char *__pfx) > throw () __attribute__ ((__malloc__)) ; ># 237 "/usr/include/stdio.h" 3 4 >extern int fclose (FILE *__stream); > > > > >extern int fflush (FILE *__stream); ># 252 "/usr/include/stdio.h" 3 4 >extern int fflush_unlocked (FILE *__stream); ># 262 "/usr/include/stdio.h" 3 4 >extern int fcloseall (void); ># 272 "/usr/include/stdio.h" 3 4 >extern FILE *fopen (const char *__restrict __filename, > const char *__restrict __modes) ; > > > > >extern FILE *freopen (const char *__restrict __filename, > const char *__restrict __modes, > FILE *__restrict __stream) ; ># 295 "/usr/include/stdio.h" 3 4 > > >extern FILE *fopen64 (const char *__restrict __filename, > const char *__restrict __modes) ; >extern FILE *freopen64 (const char *__restrict __filename, > const char *__restrict __modes, > FILE *__restrict __stream) ; > > > > >extern FILE *fdopen (int __fd, const char *__modes) throw () ; > > > > > >extern FILE *fopencookie (void *__restrict __magic_cookie, > const char *__restrict __modes, > _IO_cookie_io_functions_t __io_funcs) throw () ; > > > > >extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) > throw () ; > > > > >extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ; > > > > > > >extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw (); > > > >extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, > int __modes, size_t __n) throw (); > > > > > >extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, > size_t __size) throw (); > > >extern void setlinebuf (FILE *__stream) throw (); ># 356 "/usr/include/stdio.h" 3 4 >extern int fprintf (FILE *__restrict __stream, > const char *__restrict __format, ...); > > > > >extern int printf (const char *__restrict __format, ...); > >extern int sprintf (char *__restrict __s, > const char *__restrict __format, ...) throw (); > > > > > >extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, > __gnuc_va_list __arg); > > > > >extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); > >extern int vsprintf (char *__restrict __s, const char *__restrict __format, > __gnuc_va_list __arg) throw (); > > > > > >extern int snprintf (char *__restrict __s, size_t __maxlen, > const char *__restrict __format, ...) > throw () __attribute__ ((__format__ (__printf__, 3, 4))); > >extern int vsnprintf (char *__restrict __s, size_t __maxlen, > const char *__restrict __format, __gnuc_va_list __arg) > throw () __attribute__ ((__format__ (__printf__, 3, 0))); > > > > > > >extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, > __gnuc_va_list __arg) > throw () __attribute__ ((__format__ (__printf__, 2, 0))) ; >extern int __asprintf (char **__restrict __ptr, > const char *__restrict __fmt, ...) > throw () __attribute__ ((__format__ (__printf__, 2, 3))) ; >extern int asprintf (char **__restrict __ptr, > const char *__restrict __fmt, ...) > throw () __attribute__ ((__format__ (__printf__, 2, 3))) ; > > > > >extern int vdprintf (int __fd, const char *__restrict __fmt, > __gnuc_va_list __arg) > __attribute__ ((__format__ (__printf__, 2, 0))); >extern int dprintf (int __fd, const char *__restrict __fmt, ...) > __attribute__ ((__format__ (__printf__, 2, 3))); ># 425 "/usr/include/stdio.h" 3 4 >extern int fscanf (FILE *__restrict __stream, > const char *__restrict __format, ...) ; > > > > >extern int scanf (const char *__restrict __format, ...) ; > >extern int sscanf (const char *__restrict __s, > const char *__restrict __format, ...) throw (); ># 463 "/usr/include/stdio.h" 3 4 ># 471 "/usr/include/stdio.h" 3 4 >extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, > __gnuc_va_list __arg) > __attribute__ ((__format__ (__scanf__, 2, 0))) ; > > > > > >extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) > __attribute__ ((__format__ (__scanf__, 1, 0))) ; > > >extern int vsscanf (const char *__restrict __s, > const char *__restrict __format, __gnuc_va_list __arg) > throw () __attribute__ ((__format__ (__scanf__, 2, 0))); ># 522 "/usr/include/stdio.h" 3 4 ># 531 "/usr/include/stdio.h" 3 4 >extern int fgetc (FILE *__stream); >extern int getc (FILE *__stream); > > > > > >extern int getchar (void); ># 550 "/usr/include/stdio.h" 3 4 >extern int getc_unlocked (FILE *__stream); >extern int getchar_unlocked (void); ># 561 "/usr/include/stdio.h" 3 4 >extern int fgetc_unlocked (FILE *__stream); ># 573 "/usr/include/stdio.h" 3 4 >extern int fputc (int __c, FILE *__stream); >extern int putc (int __c, FILE *__stream); > > > > > >extern int putchar (int __c); ># 594 "/usr/include/stdio.h" 3 4 >extern int fputc_unlocked (int __c, FILE *__stream); > > > > > > > >extern int putc_unlocked (int __c, FILE *__stream); >extern int putchar_unlocked (int __c); > > > > > > >extern int getw (FILE *__stream); > > >extern int putw (int __w, FILE *__stream); ># 622 "/usr/include/stdio.h" 3 4 >extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) > ; ># 638 "/usr/include/stdio.h" 3 4 >extern char *gets (char *__s) __attribute__ ((__deprecated__)); ># 649 "/usr/include/stdio.h" 3 4 >extern char *fgets_unlocked (char *__restrict __s, int __n, > FILE *__restrict __stream) ; ># 665 "/usr/include/stdio.h" 3 4 >extern __ssize_t __getdelim (char **__restrict __lineptr, > size_t *__restrict __n, int __delimiter, > FILE *__restrict __stream) ; >extern __ssize_t getdelim (char **__restrict __lineptr, > size_t *__restrict __n, int __delimiter, > FILE *__restrict __stream) ; > > > > > > > >extern __ssize_t getline (char **__restrict __lineptr, > size_t *__restrict __n, > FILE *__restrict __stream) ; ># 689 "/usr/include/stdio.h" 3 4 >extern int fputs (const char *__restrict __s, FILE *__restrict __stream); > > > > > >extern int puts (const char *__s); > > > > > > >extern int ungetc (int __c, FILE *__stream); > > > > > > >extern size_t fread (void *__restrict __ptr, size_t __size, > size_t __n, FILE *__restrict __stream) ; > > > > >extern size_t fwrite (const void *__restrict __ptr, size_t __size, > size_t __n, FILE *__restrict __s); ># 726 "/usr/include/stdio.h" 3 4 >extern int fputs_unlocked (const char *__restrict __s, > FILE *__restrict __stream); ># 737 "/usr/include/stdio.h" 3 4 >extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, > size_t __n, FILE *__restrict __stream) ; >extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, > size_t __n, FILE *__restrict __stream); ># 749 "/usr/include/stdio.h" 3 4 >extern int fseek (FILE *__stream, long int __off, int __whence); > > > > >extern long int ftell (FILE *__stream) ; > > > > >extern void rewind (FILE *__stream); ># 773 "/usr/include/stdio.h" 3 4 >extern int fseeko (FILE *__stream, __off_t __off, int __whence); > > > > >extern __off_t ftello (FILE *__stream) ; ># 792 "/usr/include/stdio.h" 3 4 > > > > > > >extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos); > > > > >extern int fsetpos (FILE *__stream, const fpos_t *__pos); ># 815 "/usr/include/stdio.h" 3 4 > > > >extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence); >extern __off64_t ftello64 (FILE *__stream) ; >extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos); >extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos); > > > > >extern void clearerr (FILE *__stream) throw (); > >extern int feof (FILE *__stream) throw () ; > >extern int ferror (FILE *__stream) throw () ; > > > > >extern void clearerr_unlocked (FILE *__stream) throw (); >extern int feof_unlocked (FILE *__stream) throw () ; >extern int ferror_unlocked (FILE *__stream) throw () ; ># 846 "/usr/include/stdio.h" 3 4 >extern void perror (const char *__s); > > > > > > ># 1 "/usr/include/bits/sys_errlist.h" 1 3 4 ># 26 "/usr/include/bits/sys_errlist.h" 3 4 >extern int sys_nerr; >extern const char *const sys_errlist[]; > > >extern int _sys_nerr; >extern const char *const _sys_errlist[]; ># 854 "/usr/include/stdio.h" 2 3 4 > > > > >extern int fileno (FILE *__stream) throw () ; > > > > >extern int fileno_unlocked (FILE *__stream) throw () ; ># 873 "/usr/include/stdio.h" 3 4 >extern FILE *popen (const char *__command, const char *__modes) ; > > > > > >extern int pclose (FILE *__stream); > > > > > >extern char *ctermid (char *__s) throw (); > > > > > >extern char *cuserid (char *__s); > > > > >struct obstack; > > >extern int obstack_printf (struct obstack *__restrict __obstack, > const char *__restrict __format, ...) > throw () __attribute__ ((__format__ (__printf__, 2, 3))); >extern int obstack_vprintf (struct obstack *__restrict __obstack, > const char *__restrict __format, > __gnuc_va_list __args) > throw () __attribute__ ((__format__ (__printf__, 2, 0))); > > > > > > > >extern void flockfile (FILE *__stream) throw (); > > > >extern int ftrylockfile (FILE *__stream) throw () ; > > >extern void funlockfile (FILE *__stream) throw (); ># 934 "/usr/include/stdio.h" 3 4 ># 1 "/usr/include/bits/stdio.h" 1 3 4 ># 35 "/usr/include/bits/stdio.h" 3 4 >extern __inline __attribute__ ((__gnu_inline__)) int >vprintf (const char *__restrict __fmt, __gnuc_va_list __arg) >{ > return vfprintf (stdout, __fmt, __arg); >} > > > >extern __inline __attribute__ ((__gnu_inline__)) int >getchar (void) >{ > return _IO_getc (stdin); >} > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >fgetc_unlocked (FILE *__fp) >{ > return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); >} > > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >getc_unlocked (FILE *__fp) >{ > return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); >} > > >extern __inline __attribute__ ((__gnu_inline__)) int >getchar_unlocked (void) >{ > return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++); >} > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >putchar (int __c) >{ > return _IO_putc (__c, stdout); >} > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >fputc_unlocked (int __c, FILE *__stream) >{ > return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); >} > > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >putc_unlocked (int __c, FILE *__stream) >{ > return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); >} > > >extern __inline __attribute__ ((__gnu_inline__)) int >putchar_unlocked (int __c) >{ > return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c))); >} > > > > > >extern __inline __attribute__ ((__gnu_inline__)) __ssize_t >getline (char **__lineptr, size_t *__n, FILE *__stream) >{ > return __getdelim (__lineptr, __n, '\n', __stream); >} > > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) throw () >{ > return (((__stream)->_flags & 0x10) != 0); >} > > >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) throw () >{ > return (((__stream)->_flags & 0x20) != 0); >} ># 935 "/usr/include/stdio.h" 2 3 4 ># 943 "/usr/include/stdio.h" 3 4 >} ># 43 "/usr/include/c++/4.8.2/cstdio" 2 3 ># 94 "/usr/include/c++/4.8.2/cstdio" 3 >namespace std >{ > using ::FILE; > using ::fpos_t; > > using ::clearerr; > using ::fclose; > using ::feof; > using ::ferror; > using ::fflush; > using ::fgetc; > using ::fgetpos; > using ::fgets; > using ::fopen; > using ::fprintf; > using ::fputc; > using ::fputs; > using ::fread; > using ::freopen; > using ::fscanf; > using ::fseek; > using ::fsetpos; > using ::ftell; > using ::fwrite; > using ::getc; > using ::getchar; > using ::gets; > using ::perror; > using ::printf; > using ::putc; > using ::putchar; > using ::puts; > using ::remove; > using ::rename; > using ::rewind; > using ::scanf; > using ::setbuf; > using ::setvbuf; > using ::sprintf; > using ::sscanf; > using ::tmpfile; > using ::tmpnam; > using ::ungetc; > using ::vfprintf; > using ::vprintf; > using ::vsprintf; >} ># 150 "/usr/include/c++/4.8.2/cstdio" 3 >namespace __gnu_cxx >{ ># 168 "/usr/include/c++/4.8.2/cstdio" 3 > using ::snprintf; > using ::vfscanf; > using ::vscanf; > using ::vsnprintf; > using ::vsscanf; > >} > >namespace std >{ > using ::__gnu_cxx::snprintf; > using ::__gnu_cxx::vfscanf; > using ::__gnu_cxx::vscanf; > using ::__gnu_cxx::vsnprintf; > using ::__gnu_cxx::vsscanf; >} ># 74 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/cstdlib" 1 3 ># 39 "/usr/include/c++/4.8.2/cstdlib" 3 ># 40 "/usr/include/c++/4.8.2/cstdlib" 3 ># 72 "/usr/include/c++/4.8.2/cstdlib" 3 ># 1 "/usr/include/stdlib.h" 1 3 4 ># 32 "/usr/include/stdlib.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 33 "/usr/include/stdlib.h" 2 3 4 > >extern "C" { > > > > > > ># 1 "/usr/include/bits/waitflags.h" 1 3 4 ># 42 "/usr/include/stdlib.h" 2 3 4 ># 1 "/usr/include/bits/waitstatus.h" 1 3 4 ># 66 "/usr/include/bits/waitstatus.h" 3 4 >union wait > { > int w_status; > struct > { > > unsigned int __w_termsig:7; > unsigned int __w_coredump:1; > unsigned int __w_retcode:8; > unsigned int:16; > > > > > > > > } __wait_terminated; > struct > { > > unsigned int __w_stopval:8; > unsigned int __w_stopsig:8; > unsigned int:16; > > > > > > > } __wait_stopped; > }; ># 43 "/usr/include/stdlib.h" 2 3 4 ># 95 "/usr/include/stdlib.h" 3 4 > > >typedef struct > { > int quot; > int rem; > } div_t; > > > >typedef struct > { > long int quot; > long int rem; > } ldiv_t; > > > > > > > >__extension__ typedef struct > { > long long int quot; > long long int rem; > } lldiv_t; ># 139 "/usr/include/stdlib.h" 3 4 >extern size_t __ctype_get_mb_cur_max (void) throw () ; > > > > >extern double atof (const char *__nptr) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > >extern int atoi (const char *__nptr) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > >extern long int atol (const char *__nptr) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > > > > > >__extension__ extern long long int atoll (const char *__nptr) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > > > > > >extern double strtod (const char *__restrict __nptr, > char **__restrict __endptr) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern float strtof (const char *__restrict __nptr, > char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1))); > >extern long double strtold (const char *__restrict __nptr, > char **__restrict __endptr) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern long int strtol (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > >extern unsigned long int strtoul (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > > > > >__extension__ >extern long long int strtoq (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > >__extension__ >extern unsigned long long int strtouq (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >__extension__ >extern long long int strtoll (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > >__extension__ >extern unsigned long long int strtoull (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); ># 239 "/usr/include/stdlib.h" 3 4 >extern long int strtol_l (const char *__restrict __nptr, > char **__restrict __endptr, int __base, > __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4))); > >extern unsigned long int strtoul_l (const char *__restrict __nptr, > char **__restrict __endptr, > int __base, __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 4))); > >__extension__ >extern long long int strtoll_l (const char *__restrict __nptr, > char **__restrict __endptr, int __base, > __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 4))); > >__extension__ >extern unsigned long long int strtoull_l (const char *__restrict __nptr, > char **__restrict __endptr, > int __base, __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 4))); > >extern double strtod_l (const char *__restrict __nptr, > char **__restrict __endptr, __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 3))); > >extern float strtof_l (const char *__restrict __nptr, > char **__restrict __endptr, __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 3))); > >extern long double strtold_l (const char *__restrict __nptr, > char **__restrict __endptr, > __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 3))); > > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) atoi (const char *__nptr) throw () >{ > return (int) strtol (__nptr, (char **) __null, 10); >} >extern __inline __attribute__ ((__gnu_inline__)) long int >__attribute__ ((__leaf__)) atol (const char *__nptr) throw () >{ > return strtol (__nptr, (char **) __null, 10); >} > > > > >__extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int >__attribute__ ((__leaf__)) atoll (const char *__nptr) throw () >{ > return strtoll (__nptr, (char **) __null, 10); >} ># 305 "/usr/include/stdlib.h" 3 4 >extern char *l64a (long int __n) throw () ; > > >extern long int a64l (const char *__s) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > > > > ># 1 "/usr/include/sys/types.h" 1 3 4 ># 27 "/usr/include/sys/types.h" 3 4 >extern "C" { > > > > > >typedef __u_char u_char; >typedef __u_short u_short; >typedef __u_int u_int; >typedef __u_long u_long; >typedef __quad_t quad_t; >typedef __u_quad_t u_quad_t; >typedef __fsid_t fsid_t; > > > > >typedef __loff_t loff_t; > > > >typedef __ino_t ino_t; > > > > > > >typedef __ino64_t ino64_t; > > > > >typedef __dev_t dev_t; > > > > >typedef __gid_t gid_t; > > > > >typedef __mode_t mode_t; > > > > >typedef __nlink_t nlink_t; > > > > >typedef __uid_t uid_t; ># 104 "/usr/include/sys/types.h" 3 4 >typedef __id_t id_t; ># 115 "/usr/include/sys/types.h" 3 4 >typedef __daddr_t daddr_t; >typedef __caddr_t caddr_t; > > > > > >typedef __key_t key_t; ># 136 "/usr/include/sys/types.h" 3 4 >typedef __useconds_t useconds_t; > > > >typedef __suseconds_t suseconds_t; > > > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 147 "/usr/include/sys/types.h" 2 3 4 > > > >typedef unsigned long int ulong; >typedef unsigned short int ushort; >typedef unsigned int uint; ># 194 "/usr/include/sys/types.h" 3 4 >typedef int int8_t __attribute__ ((__mode__ (__QI__))); >typedef int int16_t __attribute__ ((__mode__ (__HI__))); >typedef int int32_t __attribute__ ((__mode__ (__SI__))); >typedef int int64_t __attribute__ ((__mode__ (__DI__))); > > >typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__))); >typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__))); >typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__))); >typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__))); > >typedef int register_t __attribute__ ((__mode__ (__word__))); ># 219 "/usr/include/sys/types.h" 3 4 ># 1 "/usr/include/sys/select.h" 1 3 4 ># 30 "/usr/include/sys/select.h" 3 4 ># 1 "/usr/include/bits/select.h" 1 3 4 ># 22 "/usr/include/bits/select.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 23 "/usr/include/bits/select.h" 2 3 4 ># 31 "/usr/include/sys/select.h" 2 3 4 > > ># 1 "/usr/include/bits/sigset.h" 1 3 4 ># 22 "/usr/include/bits/sigset.h" 3 4 >typedef int __sig_atomic_t; > > > > >typedef struct > { > unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; > } __sigset_t; ># 34 "/usr/include/sys/select.h" 2 3 4 > > > >typedef __sigset_t sigset_t; > > > > > > > ># 1 "/usr/include/bits/time.h" 1 3 4 ># 46 "/usr/include/sys/select.h" 2 3 4 ># 54 "/usr/include/sys/select.h" 3 4 >typedef long int __fd_mask; ># 64 "/usr/include/sys/select.h" 3 4 >typedef struct > { > > > > __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; > > > > > > } fd_set; > > > > > > >typedef __fd_mask fd_mask; ># 96 "/usr/include/sys/select.h" 3 4 >extern "C" { ># 106 "/usr/include/sys/select.h" 3 4 >extern int select (int __nfds, fd_set *__restrict __readfds, > fd_set *__restrict __writefds, > fd_set *__restrict __exceptfds, > struct timeval *__restrict __timeout); ># 118 "/usr/include/sys/select.h" 3 4 >extern int pselect (int __nfds, fd_set *__restrict __readfds, > fd_set *__restrict __writefds, > fd_set *__restrict __exceptfds, > const struct timespec *__restrict __timeout, > const __sigset_t *__restrict __sigmask); ># 131 "/usr/include/sys/select.h" 3 4 >} ># 220 "/usr/include/sys/types.h" 2 3 4 > > ># 1 "/usr/include/sys/sysmacros.h" 1 3 4 ># 24 "/usr/include/sys/sysmacros.h" 3 4 >extern "C" { > >__extension__ >extern unsigned int gnu_dev_major (unsigned long long int __dev) > throw () __attribute__ ((__const__)); >__extension__ >extern unsigned int gnu_dev_minor (unsigned long long int __dev) > throw () __attribute__ ((__const__)); >__extension__ >extern unsigned long long int gnu_dev_makedev (unsigned int __major, > unsigned int __minor) > throw () __attribute__ ((__const__)); > > >__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned int >__attribute__ ((__leaf__)) gnu_dev_major (unsigned long long int __dev) throw () >{ > return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff); >} > >__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned int >__attribute__ ((__leaf__)) gnu_dev_minor (unsigned long long int __dev) throw () >{ > return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff); >} > >__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned long long int >__attribute__ ((__leaf__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor) throw () >{ > return ((__minor & 0xff) | ((__major & 0xfff) << 8) > | (((unsigned long long int) (__minor & ~0xff)) << 12) > | (((unsigned long long int) (__major & ~0xfff)) << 32)); >} > >} ># 223 "/usr/include/sys/types.h" 2 3 4 > > > > > >typedef __blksize_t blksize_t; > > > > > > >typedef __blkcnt_t blkcnt_t; > > > >typedef __fsblkcnt_t fsblkcnt_t; > > > >typedef __fsfilcnt_t fsfilcnt_t; ># 262 "/usr/include/sys/types.h" 3 4 >typedef __blkcnt64_t blkcnt64_t; >typedef __fsblkcnt64_t fsblkcnt64_t; >typedef __fsfilcnt64_t fsfilcnt64_t; ># 273 "/usr/include/sys/types.h" 3 4 >} ># 315 "/usr/include/stdlib.h" 2 3 4 > > > > > > >extern long int random (void) throw (); > > >extern void srandom (unsigned int __seed) throw (); > > > > > >extern char *initstate (unsigned int __seed, char *__statebuf, > size_t __statelen) throw () __attribute__ ((__nonnull__ (2))); > > > >extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1))); > > > > > > > >struct random_data > { > int32_t *fptr; > int32_t *rptr; > int32_t *state; > int rand_type; > int rand_deg; > int rand_sep; > int32_t *end_ptr; > }; > >extern int random_r (struct random_data *__restrict __buf, > int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); > >extern int srandom_r (unsigned int __seed, struct random_data *__buf) > throw () __attribute__ ((__nonnull__ (2))); > >extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, > size_t __statelen, > struct random_data *__restrict __buf) > throw () __attribute__ ((__nonnull__ (2, 4))); > >extern int setstate_r (char *__restrict __statebuf, > struct random_data *__restrict __buf) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > > >extern int rand (void) throw (); > >extern void srand (unsigned int __seed) throw (); > > > > >extern int rand_r (unsigned int *__seed) throw (); > > > > > > > >extern double drand48 (void) throw (); >extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1))); > > >extern long int lrand48 (void) throw (); >extern long int nrand48 (unsigned short int __xsubi[3]) > throw () __attribute__ ((__nonnull__ (1))); > > >extern long int mrand48 (void) throw (); >extern long int jrand48 (unsigned short int __xsubi[3]) > throw () __attribute__ ((__nonnull__ (1))); > > >extern void srand48 (long int __seedval) throw (); >extern unsigned short int *seed48 (unsigned short int __seed16v[3]) > throw () __attribute__ ((__nonnull__ (1))); >extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1))); > > > > > >struct drand48_data > { > unsigned short int __x[3]; > unsigned short int __old_x[3]; > unsigned short int __c; > unsigned short int __init; > __extension__ unsigned long long int __a; > > }; > > >extern int drand48_r (struct drand48_data *__restrict __buffer, > double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); >extern int erand48_r (unsigned short int __xsubi[3], > struct drand48_data *__restrict __buffer, > double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int lrand48_r (struct drand48_data *__restrict __buffer, > long int *__restrict __result) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern int nrand48_r (unsigned short int __xsubi[3], > struct drand48_data *__restrict __buffer, > long int *__restrict __result) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int mrand48_r (struct drand48_data *__restrict __buffer, > long int *__restrict __result) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern int jrand48_r (unsigned short int __xsubi[3], > struct drand48_data *__restrict __buffer, > long int *__restrict __result) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int srand48_r (long int __seedval, struct drand48_data *__buffer) > throw () __attribute__ ((__nonnull__ (2))); > >extern int seed48_r (unsigned short int __seed16v[3], > struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2))); > >extern int lcong48_r (unsigned short int __param[7], > struct drand48_data *__buffer) > throw () __attribute__ ((__nonnull__ (1, 2))); ># 466 "/usr/include/stdlib.h" 3 4 >extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) ; > >extern void *calloc (size_t __nmemb, size_t __size) > throw () __attribute__ ((__malloc__)) ; ># 480 "/usr/include/stdlib.h" 3 4 >extern void *realloc (void *__ptr, size_t __size) > throw () __attribute__ ((__warn_unused_result__)); > >extern void free (void *__ptr) throw (); > > > > >extern void cfree (void *__ptr) throw (); > > > ># 1 "/usr/include/alloca.h" 1 3 4 ># 24 "/usr/include/alloca.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 25 "/usr/include/alloca.h" 2 3 4 > >extern "C" { > > > > > >extern void *alloca (size_t __size) throw (); > > > > > >} ># 493 "/usr/include/stdlib.h" 2 3 4 > > > > > >extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) ; > > > > >extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) > throw () __attribute__ ((__nonnull__ (1))) ; > > > > >extern void *aligned_alloc (size_t __alignment, size_t __size) > throw () __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) ; > > > > >extern void abort (void) throw () __attribute__ ((__noreturn__)); > > > >extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1))); > > > > >extern "C++" int at_quick_exit (void (*__func) (void)) > throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1))); ># 535 "/usr/include/stdlib.h" 3 4 >extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) > throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern void exit (int __status) throw () __attribute__ ((__noreturn__)); > > > > > >extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__)); > > > > > > > >extern void _Exit (int __status) throw () __attribute__ ((__noreturn__)); > > > > > > >extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) ; > > > > > >extern char *secure_getenv (const char *__name) > throw () __attribute__ ((__nonnull__ (1))) ; > > > > > > >extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern int setenv (const char *__name, const char *__value, int __replace) > throw () __attribute__ ((__nonnull__ (2))); > > >extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int clearenv (void) throw (); ># 606 "/usr/include/stdlib.h" 3 4 >extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1))); ># 620 "/usr/include/stdlib.h" 3 4 >extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ; ># 630 "/usr/include/stdlib.h" 3 4 >extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ; ># 642 "/usr/include/stdlib.h" 3 4 >extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ; ># 652 "/usr/include/stdlib.h" 3 4 >extern int mkstemps64 (char *__template, int __suffixlen) > __attribute__ ((__nonnull__ (1))) ; ># 663 "/usr/include/stdlib.h" 3 4 >extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ; ># 674 "/usr/include/stdlib.h" 3 4 >extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ; ># 684 "/usr/include/stdlib.h" 3 4 >extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ; ># 694 "/usr/include/stdlib.h" 3 4 >extern int mkostemps (char *__template, int __suffixlen, int __flags) > __attribute__ ((__nonnull__ (1))) ; ># 706 "/usr/include/stdlib.h" 3 4 >extern int mkostemps64 (char *__template, int __suffixlen, int __flags) > __attribute__ ((__nonnull__ (1))) ; ># 717 "/usr/include/stdlib.h" 3 4 >extern int system (const char *__command) ; > > > > > > >extern char *canonicalize_file_name (const char *__name) > throw () __attribute__ ((__nonnull__ (1))) ; ># 734 "/usr/include/stdlib.h" 3 4 >extern char *realpath (const char *__restrict __name, > char *__restrict __resolved) throw () ; > > > > > > >typedef int (*__compar_fn_t) (const void *, const void *); > > >typedef __compar_fn_t comparison_fn_t; > > > >typedef int (*__compar_d_fn_t) (const void *, const void *, void *); > > > > > >extern void *bsearch (const void *__key, const void *__base, > size_t __nmemb, size_t __size, __compar_fn_t __compar) > __attribute__ ((__nonnull__ (1, 2, 5))) ; > > ># 1 "/usr/include/bits/stdlib-bsearch.h" 1 3 4 ># 19 "/usr/include/bits/stdlib-bsearch.h" 3 4 >extern __inline __attribute__ ((__gnu_inline__)) void * >bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, > __compar_fn_t __compar) >{ > size_t __l, __u, __idx; > const void *__p; > int __comparison; > > __l = 0; > __u = __nmemb; > while (__l < __u) > { > __idx = (__l + __u) / 2; > __p = (void *) (((const char *) __base) + (__idx * __size)); > __comparison = (*__compar) (__key, __p); > if (__comparison < 0) > __u = __idx; > else if (__comparison > 0) > __l = __idx + 1; > else > return (void *) __p; > } > > return __null; >} ># 761 "/usr/include/stdlib.h" 2 3 4 > > > > >extern void qsort (void *__base, size_t __nmemb, size_t __size, > __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); > >extern void qsort_r (void *__base, size_t __nmemb, size_t __size, > __compar_d_fn_t __compar, void *__arg) > __attribute__ ((__nonnull__ (1, 4))); > > > > >extern int abs (int __x) throw () __attribute__ ((__const__)) ; >extern long int labs (long int __x) throw () __attribute__ ((__const__)) ; > > > >__extension__ extern long long int llabs (long long int __x) > throw () __attribute__ ((__const__)) ; > > > > > > > >extern div_t div (int __numer, int __denom) > throw () __attribute__ ((__const__)) ; >extern ldiv_t ldiv (long int __numer, long int __denom) > throw () __attribute__ ((__const__)) ; > > > > >__extension__ extern lldiv_t lldiv (long long int __numer, > long long int __denom) > throw () __attribute__ ((__const__)) ; ># 812 "/usr/include/stdlib.h" 3 4 >extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, > int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ; > > > > >extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, > int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ; > > > > >extern char *gcvt (double __value, int __ndigit, char *__buf) > throw () __attribute__ ((__nonnull__ (3))) ; > > > > >extern char *qecvt (long double __value, int __ndigit, > int *__restrict __decpt, int *__restrict __sign) > throw () __attribute__ ((__nonnull__ (3, 4))) ; >extern char *qfcvt (long double __value, int __ndigit, > int *__restrict __decpt, int *__restrict __sign) > throw () __attribute__ ((__nonnull__ (3, 4))) ; >extern char *qgcvt (long double __value, int __ndigit, char *__buf) > throw () __attribute__ ((__nonnull__ (3))) ; > > > > >extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, > int *__restrict __sign, char *__restrict __buf, > size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5))); >extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, > int *__restrict __sign, char *__restrict __buf, > size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5))); > >extern int qecvt_r (long double __value, int __ndigit, > int *__restrict __decpt, int *__restrict __sign, > char *__restrict __buf, size_t __len) > throw () __attribute__ ((__nonnull__ (3, 4, 5))); >extern int qfcvt_r (long double __value, int __ndigit, > int *__restrict __decpt, int *__restrict __sign, > char *__restrict __buf, size_t __len) > throw () __attribute__ ((__nonnull__ (3, 4, 5))); > > > > > > >extern int mblen (const char *__s, size_t __n) throw (); > > >extern int mbtowc (wchar_t *__restrict __pwc, > const char *__restrict __s, size_t __n) throw (); > > >extern int wctomb (char *__s, wchar_t __wchar) throw (); > > > >extern size_t mbstowcs (wchar_t *__restrict __pwcs, > const char *__restrict __s, size_t __n) throw (); > >extern size_t wcstombs (char *__restrict __s, > const wchar_t *__restrict __pwcs, size_t __n) > throw (); ># 888 "/usr/include/stdlib.h" 3 4 >extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) ; ># 899 "/usr/include/stdlib.h" 3 4 >extern int getsubopt (char **__restrict __optionp, > char *const *__restrict __tokens, > char **__restrict __valuep) > throw () __attribute__ ((__nonnull__ (1, 2, 3))) ; > > > > > >extern void setkey (const char *__key) throw () __attribute__ ((__nonnull__ (1))); > > > > > > > >extern int posix_openpt (int __oflag) ; > > > > > > > >extern int grantpt (int __fd) throw (); > > > >extern int unlockpt (int __fd) throw (); > > > > >extern char *ptsname (int __fd) throw () ; > > > > > > >extern int ptsname_r (int __fd, char *__buf, size_t __buflen) > throw () __attribute__ ((__nonnull__ (2))); > > >extern int getpt (void); > > > > > > >extern int getloadavg (double __loadavg[], int __nelem) > throw () __attribute__ ((__nonnull__ (1))); > > ># 1 "/usr/include/bits/stdlib-float.h" 1 3 4 ># 24 "/usr/include/bits/stdlib-float.h" 3 4 > >extern __inline __attribute__ ((__gnu_inline__)) double >__attribute__ ((__leaf__)) atof (const char *__nptr) throw () >{ > return strtod (__nptr, (char **) __null); >} ># 956 "/usr/include/stdlib.h" 2 3 4 ># 968 "/usr/include/stdlib.h" 3 4 >} ># 73 "/usr/include/c++/4.8.2/cstdlib" 2 3 ># 114 "/usr/include/c++/4.8.2/cstdlib" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > using ::div_t; > using ::ldiv_t; > > using ::abort; > using ::abs; > using ::atexit; > > > > > > using ::atof; > using ::atoi; > using ::atol; > using ::bsearch; > using ::calloc; > using ::div; > using ::exit; > using ::free; > using ::getenv; > using ::labs; > using ::ldiv; > using ::malloc; > > using ::mblen; > using ::mbstowcs; > using ::mbtowc; > > using ::qsort; > > > > > > using ::rand; > using ::realloc; > using ::srand; > using ::strtod; > using ::strtol; > using ::strtoul; > using ::system; > > using ::wcstombs; > using ::wctomb; > > > > inline long > abs(long __i) { return __builtin_labs(__i); } > > inline ldiv_t > div(long __i, long __j) { return ldiv(__i, __j); } > > > > inline long long > abs(long long __x) { return __builtin_llabs (__x); } > > > > inline __int128 > abs(__int128 __x) { return __x >= 0 ? __x : -__x; } > > > >} ># 196 "/usr/include/c++/4.8.2/cstdlib" 3 >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > > using ::lldiv_t; > > > > > > using ::_Exit; > > > > using ::llabs; > > inline lldiv_t > div(long long __n, long long __d) > { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } > > using ::lldiv; ># 228 "/usr/include/c++/4.8.2/cstdlib" 3 > using ::atoll; > using ::strtoll; > using ::strtoull; > > using ::strtof; > using ::strtold; > > >} > >namespace std >{ > > using ::__gnu_cxx::lldiv_t; > > using ::__gnu_cxx::_Exit; > > using ::__gnu_cxx::llabs; > using ::__gnu_cxx::div; > using ::__gnu_cxx::lldiv; > > using ::__gnu_cxx::atoll; > using ::__gnu_cxx::strtof; > using ::__gnu_cxx::strtoll; > using ::__gnu_cxx::strtoull; > using ::__gnu_cxx::strtold; >} ># 75 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/cstdarg" 1 3 ># 39 "/usr/include/c++/4.8.2/cstdarg" 3 ># 40 "/usr/include/c++/4.8.2/cstdarg" 3 > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stdarg.h" 1 3 4 ># 43 "/usr/include/c++/4.8.2/cstdarg" 2 3 ># 52 "/usr/include/c++/4.8.2/cstdarg" 3 >namespace std >{ > using ::va_list; >} ># 76 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/cstring" 1 3 ># 39 "/usr/include/c++/4.8.2/cstring" 3 ># 40 "/usr/include/c++/4.8.2/cstring" 3 > > ># 1 "/usr/include/string.h" 1 3 4 ># 27 "/usr/include/string.h" 3 4 >extern "C" { > > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 33 "/usr/include/string.h" 2 3 4 ># 42 "/usr/include/string.h" 3 4 >extern void *memcpy (void *__restrict __dest, const void *__restrict __src, > size_t __n) throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern void *memmove (void *__dest, const void *__src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > > >extern void *memccpy (void *__restrict __dest, const void *__restrict __src, > int __c, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > >extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1))); > > >extern int memcmp (const void *__s1, const void *__s2, size_t __n) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > > >extern "C++" >{ >extern void *memchr (void *__s, int __c, size_t __n) > throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const void *memchr (const void *__s, int __c, size_t __n) > throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void * >memchr (void *__s, int __c, size_t __n) throw () >{ > return __builtin_memchr (__s, __c, __n); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void * >memchr (const void *__s, int __c, size_t __n) throw () >{ > return __builtin_memchr (__s, __c, __n); >} > >} ># 101 "/usr/include/string.h" 3 4 >extern "C++" void *rawmemchr (void *__s, int __c) > throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern "C++" const void *rawmemchr (const void *__s, int __c) > throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > > > > > > >extern "C++" void *memrchr (void *__s, int __c, size_t __n) > throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern "C++" const void *memrchr (const void *__s, int __c, size_t __n) > throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); ># 125 "/usr/include/string.h" 3 4 >extern char *strcpy (char *__restrict __dest, const char *__restrict __src) > throw () __attribute__ ((__nonnull__ (1, 2))); > >extern char *strncpy (char *__restrict __dest, > const char *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern char *strcat (char *__restrict __dest, const char *__restrict __src) > throw () __attribute__ ((__nonnull__ (1, 2))); > >extern char *strncat (char *__restrict __dest, const char *__restrict __src, > size_t __n) throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int strcmp (const char *__s1, const char *__s2) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > >extern int strncmp (const char *__s1, const char *__s2, size_t __n) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern int strcoll (const char *__s1, const char *__s2) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > >extern size_t strxfrm (char *__restrict __dest, > const char *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (2))); ># 162 "/usr/include/string.h" 3 4 >extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); > >extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, > __locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4))); > > > > > >extern char *strdup (const char *__s) > throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); > > > > > > >extern char *strndup (const char *__string, size_t __n) > throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); ># 207 "/usr/include/string.h" 3 4 > > > >extern "C++" >{ >extern char *strchr (char *__s, int __c) > throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const char *strchr (const char *__s, int __c) > throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >strchr (char *__s, int __c) throw () >{ > return __builtin_strchr (__s, __c); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >strchr (const char *__s, int __c) throw () >{ > return __builtin_strchr (__s, __c); >} > >} > > > > > > >extern "C++" >{ >extern char *strrchr (char *__s, int __c) > throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const char *strrchr (const char *__s, int __c) > throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >strrchr (char *__s, int __c) throw () >{ > return __builtin_strrchr (__s, __c); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >strrchr (const char *__s, int __c) throw () >{ > return __builtin_strrchr (__s, __c); >} > >} ># 268 "/usr/include/string.h" 3 4 >extern "C++" char *strchrnul (char *__s, int __c) > throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern "C++" const char *strchrnul (const char *__s, int __c) > throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); ># 281 "/usr/include/string.h" 3 4 >extern size_t strcspn (const char *__s, const char *__reject) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern size_t strspn (const char *__s, const char *__accept) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern "C++" >{ >extern char *strpbrk (char *__s, const char *__accept) > throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); >extern const char *strpbrk (const char *__s, const char *__accept) > throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >strpbrk (char *__s, const char *__accept) throw () >{ > return __builtin_strpbrk (__s, __accept); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >strpbrk (const char *__s, const char *__accept) throw () >{ > return __builtin_strpbrk (__s, __accept); >} > >} > > > > > > >extern "C++" >{ >extern char *strstr (char *__haystack, const char *__needle) > throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); >extern const char *strstr (const char *__haystack, const char *__needle) > throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >strstr (char *__haystack, const char *__needle) throw () >{ > return __builtin_strstr (__haystack, __needle); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >strstr (const char *__haystack, const char *__needle) throw () >{ > return __builtin_strstr (__haystack, __needle); >} > >} > > > > > > > >extern char *strtok (char *__restrict __s, const char *__restrict __delim) > throw () __attribute__ ((__nonnull__ (2))); > > > > >extern char *__strtok_r (char *__restrict __s, > const char *__restrict __delim, > char **__restrict __save_ptr) > throw () __attribute__ ((__nonnull__ (2, 3))); > >extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, > char **__restrict __save_ptr) > throw () __attribute__ ((__nonnull__ (2, 3))); > > > > > >extern "C++" char *strcasestr (char *__haystack, const char *__needle) > throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); >extern "C++" const char *strcasestr (const char *__haystack, > const char *__needle) > throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); ># 378 "/usr/include/string.h" 3 4 >extern void *memmem (const void *__haystack, size_t __haystacklen, > const void *__needle, size_t __needlelen) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3))); > > > >extern void *__mempcpy (void *__restrict __dest, > const void *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern void *mempcpy (void *__restrict __dest, > const void *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > >extern size_t strlen (const char *__s) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > > > > >extern size_t strnlen (const char *__string, size_t __maxlen) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > > > > >extern char *strerror (int __errnum) throw (); ># 434 "/usr/include/string.h" 3 4 >extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) > throw () __attribute__ ((__nonnull__ (2))) ; > > > > > >extern char *strerror_l (int __errnum, __locale_t __l) throw (); > > > > > >extern void __bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); > > > >extern void bcopy (const void *__src, void *__dest, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); > > >extern int bcmp (const void *__s1, const void *__s2, size_t __n) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > > >extern "C++" >{ >extern char *index (char *__s, int __c) > throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const char *index (const char *__s, int __c) > throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >index (char *__s, int __c) throw () >{ > return __builtin_index (__s, __c); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >index (const char *__s, int __c) throw () >{ > return __builtin_index (__s, __c); >} > >} > > > > > > > >extern "C++" >{ >extern char *rindex (char *__s, int __c) > throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const char *rindex (const char *__s, int __c) > throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >rindex (char *__s, int __c) throw () >{ > return __builtin_rindex (__s, __c); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >rindex (const char *__s, int __c) throw () >{ > return __builtin_rindex (__s, __c); >} > >} > > > > > > > >extern int ffs (int __i) throw () __attribute__ ((__const__)); > > > > >extern int ffsl (long int __l) throw () __attribute__ ((__const__)); >__extension__ extern int ffsll (long long int __ll) > throw () __attribute__ ((__const__)); > > > >extern int strcasecmp (const char *__s1, const char *__s2) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > > > > >extern int strcasecmp_l (const char *__s1, const char *__s2, > __locale_t __loc) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); > >extern int strncasecmp_l (const char *__s1, const char *__s2, > size_t __n, __locale_t __loc) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4))); > > > > > >extern char *strsep (char **__restrict __stringp, > const char *__restrict __delim) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern char *strsignal (int __sig) throw (); > > >extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern char *__stpncpy (char *__restrict __dest, > const char *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern char *stpncpy (char *__restrict __dest, > const char *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int strverscmp (const char *__s1, const char *__s2) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1))); > > >extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); > > > > > > > >extern "C++" char *basename (char *__filename) > throw () __asm ("basename") __attribute__ ((__nonnull__ (1))); >extern "C++" const char *basename (const char *__filename) > throw () __asm ("basename") __attribute__ ((__nonnull__ (1))); ># 640 "/usr/include/string.h" 3 4 >} ># 43 "/usr/include/c++/4.8.2/cstring" 2 3 ># 71 "/usr/include/c++/4.8.2/cstring" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > using ::memchr; > using ::memcmp; > using ::memcpy; > using ::memmove; > using ::memset; > using ::strcat; > using ::strcmp; > using ::strcoll; > using ::strcpy; > using ::strcspn; > using ::strerror; > using ::strlen; > using ::strncat; > using ::strncmp; > using ::strncpy; > using ::strspn; > using ::strtok; > using ::strxfrm; > using ::strchr; > using ::strpbrk; > using ::strrchr; > using ::strstr; ># 120 "/usr/include/c++/4.8.2/cstring" 3 > >} ># 77 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/cmath" 1 3 ># 39 "/usr/include/c++/4.8.2/cmath" 3 ># 40 "/usr/include/c++/4.8.2/cmath" 3 > > > > ># 1 "/usr/include/math.h" 1 3 4 ># 28 "/usr/include/math.h" 3 4 >extern "C" { > > > ># 1 "/usr/include/bits/huge_val.h" 1 3 4 ># 33 "/usr/include/math.h" 2 3 4 > ># 1 "/usr/include/bits/huge_valf.h" 1 3 4 ># 35 "/usr/include/math.h" 2 3 4 ># 1 "/usr/include/bits/huge_vall.h" 1 3 4 ># 36 "/usr/include/math.h" 2 3 4 > > ># 1 "/usr/include/bits/inf.h" 1 3 4 ># 39 "/usr/include/math.h" 2 3 4 > > ># 1 "/usr/include/bits/nan.h" 1 3 4 ># 42 "/usr/include/math.h" 2 3 4 > > > ># 1 "/usr/include/bits/mathdef.h" 1 3 4 ># 28 "/usr/include/bits/mathdef.h" 3 4 >typedef float float_t; >typedef double double_t; ># 46 "/usr/include/math.h" 2 3 4 ># 69 "/usr/include/math.h" 3 4 ># 1 "/usr/include/bits/mathcalls.h" 1 3 4 ># 52 "/usr/include/bits/mathcalls.h" 3 4 > > >extern double acos (double __x) throw (); extern double __acos (double __x) throw (); > >extern double asin (double __x) throw (); extern double __asin (double __x) throw (); > >extern double atan (double __x) throw (); extern double __atan (double __x) throw (); > >extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw (); > > >extern double cos (double __x) throw (); extern double __cos (double __x) throw (); > >extern double sin (double __x) throw (); extern double __sin (double __x) throw (); > >extern double tan (double __x) throw (); extern double __tan (double __x) throw (); > > > > >extern double cosh (double __x) throw (); extern double __cosh (double __x) throw (); > >extern double sinh (double __x) throw (); extern double __sinh (double __x) throw (); > >extern double tanh (double __x) throw (); extern double __tanh (double __x) throw (); > > > > >extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw () > ; > > > > > >extern double acosh (double __x) throw (); extern double __acosh (double __x) throw (); > >extern double asinh (double __x) throw (); extern double __asinh (double __x) throw (); > >extern double atanh (double __x) throw (); extern double __atanh (double __x) throw (); > > > > > > > >extern double exp (double __x) throw (); extern double __exp (double __x) throw (); > > >extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw (); > > >extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw (); > > >extern double log (double __x) throw (); extern double __log (double __x) throw (); > > >extern double log10 (double __x) throw (); extern double __log10 (double __x) throw (); > > >extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw () __attribute__ ((__nonnull__ (2))); > > > > >extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw (); > >extern double pow10 (double __x) throw (); extern double __pow10 (double __x) throw (); > > > > > >extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw (); > > >extern double log1p (double __x) throw (); extern double __log1p (double __x) throw (); > > >extern double logb (double __x) throw (); extern double __logb (double __x) throw (); > > > > > > >extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw (); > > >extern double log2 (double __x) throw (); extern double __log2 (double __x) throw (); ># 153 "/usr/include/bits/mathcalls.h" 3 4 >extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw (); > > >extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw (); > > > > > >extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw (); > > > > > > >extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw (); ># 178 "/usr/include/bits/mathcalls.h" 3 4 >extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__)); > > >extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__)); > > >extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__)); > > >extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw (); > > > > >extern int __isinf (double __value) throw () __attribute__ ((__const__)); > > >extern int __finite (double __value) throw () __attribute__ ((__const__)); > > > > > >extern int isinf (double __value) throw () __attribute__ ((__const__)); > > >extern int finite (double __value) throw () __attribute__ ((__const__)); > > >extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw (); > > > >extern double significand (double __x) throw (); extern double __significand (double __x) throw (); > > > > > >extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__)); > > > > > > >extern double nan (const char *__tagb) throw () __attribute__ ((__const__)); extern double __nan (const char *__tagb) throw () __attribute__ ((__const__)); > > > > > >extern int __isnan (double __value) throw () __attribute__ ((__const__)); > > > >extern int isnan (double __value) throw () __attribute__ ((__const__)); > > >extern double j0 (double) throw (); extern double __j0 (double) throw (); >extern double j1 (double) throw (); extern double __j1 (double) throw (); >extern double jn (int, double) throw (); extern double __jn (int, double) throw (); >extern double y0 (double) throw (); extern double __y0 (double) throw (); >extern double y1 (double) throw (); extern double __y1 (double) throw (); >extern double yn (int, double) throw (); extern double __yn (int, double) throw (); > > > > > > >extern double erf (double) throw (); extern double __erf (double) throw (); >extern double erfc (double) throw (); extern double __erfc (double) throw (); >extern double lgamma (double) throw (); extern double __lgamma (double) throw (); > > > > > > >extern double tgamma (double) throw (); extern double __tgamma (double) throw (); > > > > > >extern double gamma (double) throw (); extern double __gamma (double) throw (); > > > > > > >extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw (); > > > > > > > >extern double rint (double __x) throw (); extern double __rint (double __x) throw (); > > >extern double nextafter (double __x, double __y) throw () __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) throw () __attribute__ ((__const__)); > >extern double nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); extern double __nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); > > > >extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw (); > > > >extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw (); > > > >extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw (); > > > > >extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw (); > > > >extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw (); > > > >extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__)); > > > >extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__)); > > > > >extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw (); > > > > > > >extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw (); >__extension__ >extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw (); > > > >extern long int lround (double __x) throw (); extern long int __lround (double __x) throw (); >__extension__ >extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw (); > > > >extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw (); > > >extern double fmax (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmax (double __x, double __y) throw () __attribute__ ((__const__)); > > >extern double fmin (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmin (double __x, double __y) throw () __attribute__ ((__const__)); > > > >extern int __fpclassify (double __value) throw () > __attribute__ ((__const__)); > > >extern int __signbit (double __value) throw () > __attribute__ ((__const__)); > > > >extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw (); ># 365 "/usr/include/bits/mathcalls.h" 3 4 >extern int __issignaling (double __value) throw () > __attribute__ ((__const__)); > > > > >extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw (); ># 70 "/usr/include/math.h" 2 3 4 ># 88 "/usr/include/math.h" 3 4 ># 1 "/usr/include/bits/mathcalls.h" 1 3 4 ># 52 "/usr/include/bits/mathcalls.h" 3 4 > > >extern float acosf (float __x) throw (); extern float __acosf (float __x) throw (); > >extern float asinf (float __x) throw (); extern float __asinf (float __x) throw (); > >extern float atanf (float __x) throw (); extern float __atanf (float __x) throw (); > >extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw (); > > >extern float cosf (float __x) throw (); extern float __cosf (float __x) throw (); > >extern float sinf (float __x) throw (); extern float __sinf (float __x) throw (); > >extern float tanf (float __x) throw (); extern float __tanf (float __x) throw (); > > > > >extern float coshf (float __x) throw (); extern float __coshf (float __x) throw (); > >extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw (); > >extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw (); > > > > >extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw () > ; > > > > > >extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw (); > >extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw (); > >extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw (); > > > > > > > >extern float expf (float __x) throw (); extern float __expf (float __x) throw (); > > >extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw (); > > >extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw (); > > >extern float logf (float __x) throw (); extern float __logf (float __x) throw (); > > >extern float log10f (float __x) throw (); extern float __log10f (float __x) throw (); > > >extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw () __attribute__ ((__nonnull__ (2))); > > > > >extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw (); > >extern float pow10f (float __x) throw (); extern float __pow10f (float __x) throw (); > > > > > >extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw (); > > >extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw (); > > >extern float logbf (float __x) throw (); extern float __logbf (float __x) throw (); > > > > > > >extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw (); > > >extern float log2f (float __x) throw (); extern float __log2f (float __x) throw (); ># 153 "/usr/include/bits/mathcalls.h" 3 4 >extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw (); > > >extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw (); > > > > > >extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw (); > > > > > > >extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw (); ># 178 "/usr/include/bits/mathcalls.h" 3 4 >extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__)); > > >extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__)); > > >extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__)); > > >extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw (); > > > > >extern int __isinff (float __value) throw () __attribute__ ((__const__)); > > >extern int __finitef (float __value) throw () __attribute__ ((__const__)); > > > > > >extern int isinff (float __value) throw () __attribute__ ((__const__)); > > >extern int finitef (float __value) throw () __attribute__ ((__const__)); > > >extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw (); > > > >extern float significandf (float __x) throw (); extern float __significandf (float __x) throw (); > > > > > >extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__)); > > > > > > >extern float nanf (const char *__tagb) throw () __attribute__ ((__const__)); extern float __nanf (const char *__tagb) throw () __attribute__ ((__const__)); > > > > > >extern int __isnanf (float __value) throw () __attribute__ ((__const__)); > > > >extern int isnanf (float __value) throw () __attribute__ ((__const__)); > > >extern float j0f (float) throw (); extern float __j0f (float) throw (); >extern float j1f (float) throw (); extern float __j1f (float) throw (); >extern float jnf (int, float) throw (); extern float __jnf (int, float) throw (); >extern float y0f (float) throw (); extern float __y0f (float) throw (); >extern float y1f (float) throw (); extern float __y1f (float) throw (); >extern float ynf (int, float) throw (); extern float __ynf (int, float) throw (); > > > > > > >extern float erff (float) throw (); extern float __erff (float) throw (); >extern float erfcf (float) throw (); extern float __erfcf (float) throw (); >extern float lgammaf (float) throw (); extern float __lgammaf (float) throw (); > > > > > > >extern float tgammaf (float) throw (); extern float __tgammaf (float) throw (); > > > > > >extern float gammaf (float) throw (); extern float __gammaf (float) throw (); > > > > > > >extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw (); > > > > > > > >extern float rintf (float __x) throw (); extern float __rintf (float __x) throw (); > > >extern float nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); > >extern float nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); extern float __nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); > > > >extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw (); > > > >extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw (); > > > >extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw (); > > > > >extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw (); > > > >extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw (); > > > >extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__)); > > > >extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__)); > > > > >extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw (); > > > > > > >extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw (); >__extension__ >extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw (); > > > >extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw (); >__extension__ >extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw (); > > > >extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw (); > > >extern float fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); > > >extern float fminf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminf (float __x, float __y) throw () __attribute__ ((__const__)); > > > >extern int __fpclassifyf (float __value) throw () > __attribute__ ((__const__)); > > >extern int __signbitf (float __value) throw () > __attribute__ ((__const__)); > > > >extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw (); ># 365 "/usr/include/bits/mathcalls.h" 3 4 >extern int __issignalingf (float __value) throw () > __attribute__ ((__const__)); > > > > >extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw (); ># 89 "/usr/include/math.h" 2 3 4 ># 132 "/usr/include/math.h" 3 4 ># 1 "/usr/include/bits/mathcalls.h" 1 3 4 ># 52 "/usr/include/bits/mathcalls.h" 3 4 > > >extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw (); > >extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw (); > >extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw (); > >extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw (); > > >extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw (); > >extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw (); > >extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw (); > > > > >extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw (); > >extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw (); > >extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw (); > > > > >extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw () > ; > > > > > >extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw (); > >extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw (); > >extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw (); > > > > > > > >extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw (); > > >extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw (); > > >extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw (); > > >extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw (); > > >extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw (); > > >extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw () __attribute__ ((__nonnull__ (2))); > > > > >extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw (); > >extern long double pow10l (long double __x) throw (); extern long double __pow10l (long double __x) throw (); > > > > > >extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw (); > > >extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw (); > > >extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw (); > > > > > > >extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw (); > > >extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw (); ># 153 "/usr/include/bits/mathcalls.h" 3 4 >extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw (); > > >extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw (); > > > > > >extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw (); > > > > > > >extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw (); ># 178 "/usr/include/bits/mathcalls.h" 3 4 >extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__)); > > >extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__)); > > >extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__)); > > >extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw (); > > > > >extern int __isinfl (long double __value) throw () __attribute__ ((__const__)); > > >extern int __finitel (long double __value) throw () __attribute__ ((__const__)); > > > > > >extern int isinfl (long double __value) throw () __attribute__ ((__const__)); > > >extern int finitel (long double __value) throw () __attribute__ ((__const__)); > > >extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw (); > > > >extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw (); > > > > > >extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); > > > > > > >extern long double nanl (const char *__tagb) throw () __attribute__ ((__const__)); extern long double __nanl (const char *__tagb) throw () __attribute__ ((__const__)); > > > > > >extern int __isnanl (long double __value) throw () __attribute__ ((__const__)); > > > >extern int isnanl (long double __value) throw () __attribute__ ((__const__)); > > >extern long double j0l (long double) throw (); extern long double __j0l (long double) throw (); >extern long double j1l (long double) throw (); extern long double __j1l (long double) throw (); >extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw (); >extern long double y0l (long double) throw (); extern long double __y0l (long double) throw (); >extern long double y1l (long double) throw (); extern long double __y1l (long double) throw (); >extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw (); > > > > > > >extern long double erfl (long double) throw (); extern long double __erfl (long double) throw (); >extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw (); >extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw (); > > > > > > >extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw (); > > > > > >extern long double gammal (long double) throw (); extern long double __gammal (long double) throw (); > > > > > > >extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw (); > > > > > > > >extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw (); > > >extern long double nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__)); > >extern long double nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__)); > > > >extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw (); > > > >extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw (); > > > >extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw (); > > > > >extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw (); > > > >extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw (); > > > >extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__)); > > > >extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__)); > > > > >extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw (); > > > > > > >extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw (); >__extension__ >extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw (); > > > >extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw (); >__extension__ >extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw (); > > > >extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw (); > > >extern long double fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); > > >extern long double fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); > > > >extern int __fpclassifyl (long double __value) throw () > __attribute__ ((__const__)); > > >extern int __signbitl (long double __value) throw () > __attribute__ ((__const__)); > > > >extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw (); ># 365 "/usr/include/bits/mathcalls.h" 3 4 >extern int __issignalingl (long double __value) throw () > __attribute__ ((__const__)); > > > > >extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw (); ># 133 "/usr/include/math.h" 2 3 4 ># 148 "/usr/include/math.h" 3 4 >extern int signgam; ># 189 "/usr/include/math.h" 3 4 >enum > { > FP_NAN = > > 0, > FP_INFINITE = > > 1, > FP_ZERO = > > 2, > FP_SUBNORMAL = > > 3, > FP_NORMAL = > > 4 > }; ># 301 "/usr/include/math.h" 3 4 >typedef enum >{ > _IEEE_ = -1, > _SVID_, > _XOPEN_, > _POSIX_, > _ISOC_ >} _LIB_VERSION_TYPE; > > > > >extern _LIB_VERSION_TYPE _LIB_VERSION; ># 324 "/usr/include/math.h" 3 4 >struct __exception > > > > { > int type; > char *name; > double arg1; > double arg2; > double retval; > }; > > >extern int matherr (struct __exception *__exc) throw (); ># 426 "/usr/include/math.h" 3 4 ># 1 "/usr/include/bits/mathinline.h" 1 3 4 ># 123 "/usr/include/bits/mathinline.h" 3 4 > > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) __signbitf (float __x) throw () >{ > > int __m; > __asm ("pmovmskb %1, %0" : "=r" (__m) : "x" (__x)); > return (__m & 0x8) != 0; > > > > >} >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) __signbit (double __x) throw () >{ > > int __m; > __asm ("pmovmskb %1, %0" : "=r" (__m) : "x" (__x)); > return (__m & 0x80) != 0; > > > > >} >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) __signbitl (long double __x) throw () >{ > __extension__ union { long double __l; int __i[3]; } __u = { __l: __x }; > return (__u.__i[2] & 0x8000) != 0; >} ># 427 "/usr/include/math.h" 2 3 4 ># 488 "/usr/include/math.h" 3 4 >} ># 45 "/usr/include/c++/4.8.2/cmath" 2 3 ># 75 "/usr/include/c++/4.8.2/cmath" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > inline double > abs(double __x) > { return __builtin_fabs(__x); } > > > > inline float > abs(float __x) > { return __builtin_fabsf(__x); } > > inline long double > abs(long double __x) > { return __builtin_fabsl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > abs(_Tp __x) > { return __builtin_fabs(__x); } > > using ::acos; > > > inline float > acos(float __x) > { return __builtin_acosf(__x); } > > inline long double > acos(long double __x) > { return __builtin_acosl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > acos(_Tp __x) > { return __builtin_acos(__x); } > > using ::asin; > > > inline float > asin(float __x) > { return __builtin_asinf(__x); } > > inline long double > asin(long double __x) > { return __builtin_asinl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > asin(_Tp __x) > { return __builtin_asin(__x); } > > using ::atan; > > > inline float > atan(float __x) > { return __builtin_atanf(__x); } > > inline long double > atan(long double __x) > { return __builtin_atanl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > atan(_Tp __x) > { return __builtin_atan(__x); } > > using ::atan2; > > > inline float > atan2(float __y, float __x) > { return __builtin_atan2f(__y, __x); } > > inline long double > atan2(long double __y, long double __x) > { return __builtin_atan2l(__y, __x); } > > > template<typename _Tp, typename _Up> > inline > typename __gnu_cxx::__promote_2<_Tp, _Up>::__type > atan2(_Tp __y, _Up __x) > { > typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; > return atan2(__type(__y), __type(__x)); > } > > using ::ceil; > > > inline float > ceil(float __x) > { return __builtin_ceilf(__x); } > > inline long double > ceil(long double __x) > { return __builtin_ceill(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > ceil(_Tp __x) > { return __builtin_ceil(__x); } > > using ::cos; > > > inline float > cos(float __x) > { return __builtin_cosf(__x); } > > inline long double > cos(long double __x) > { return __builtin_cosl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > cos(_Tp __x) > { return __builtin_cos(__x); } > > using ::cosh; > > > inline float > cosh(float __x) > { return __builtin_coshf(__x); } > > inline long double > cosh(long double __x) > { return __builtin_coshl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > cosh(_Tp __x) > { return __builtin_cosh(__x); } > > using ::exp; > > > inline float > exp(float __x) > { return __builtin_expf(__x); } > > inline long double > exp(long double __x) > { return __builtin_expl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > exp(_Tp __x) > { return __builtin_exp(__x); } > > using ::fabs; > > > inline float > fabs(float __x) > { return __builtin_fabsf(__x); } > > inline long double > fabs(long double __x) > { return __builtin_fabsl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > fabs(_Tp __x) > { return __builtin_fabs(__x); } > > using ::floor; > > > inline float > floor(float __x) > { return __builtin_floorf(__x); } > > inline long double > floor(long double __x) > { return __builtin_floorl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > floor(_Tp __x) > { return __builtin_floor(__x); } > > using ::fmod; > > > inline float > fmod(float __x, float __y) > { return __builtin_fmodf(__x, __y); } > > inline long double > fmod(long double __x, long double __y) > { return __builtin_fmodl(__x, __y); } > > > template<typename _Tp, typename _Up> > inline > typename __gnu_cxx::__promote_2<_Tp, _Up>::__type > fmod(_Tp __x, _Up __y) > { > typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; > return fmod(__type(__x), __type(__y)); > } > > using ::frexp; > > > inline float > frexp(float __x, int* __exp) > { return __builtin_frexpf(__x, __exp); } > > inline long double > frexp(long double __x, int* __exp) > { return __builtin_frexpl(__x, __exp); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > frexp(_Tp __x, int* __exp) > { return __builtin_frexp(__x, __exp); } > > using ::ldexp; > > > inline float > ldexp(float __x, int __exp) > { return __builtin_ldexpf(__x, __exp); } > > inline long double > ldexp(long double __x, int __exp) > { return __builtin_ldexpl(__x, __exp); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > ldexp(_Tp __x, int __exp) > { return __builtin_ldexp(__x, __exp); } > > using ::log; > > > inline float > log(float __x) > { return __builtin_logf(__x); } > > inline long double > log(long double __x) > { return __builtin_logl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > log(_Tp __x) > { return __builtin_log(__x); } > > using ::log10; > > > inline float > log10(float __x) > { return __builtin_log10f(__x); } > > inline long double > log10(long double __x) > { return __builtin_log10l(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > log10(_Tp __x) > { return __builtin_log10(__x); } > > using ::modf; > > > inline float > modf(float __x, float* __iptr) > { return __builtin_modff(__x, __iptr); } > > inline long double > modf(long double __x, long double* __iptr) > { return __builtin_modfl(__x, __iptr); } > > > using ::pow; > > > inline float > pow(float __x, float __y) > { return __builtin_powf(__x, __y); } > > inline long double > pow(long double __x, long double __y) > { return __builtin_powl(__x, __y); } > > > > > inline double > pow(double __x, int __i) > { return __builtin_powi(__x, __i); } > > inline float > pow(float __x, int __n) > { return __builtin_powif(__x, __n); } > > inline long double > pow(long double __x, int __n) > { return __builtin_powil(__x, __n); } > > > > template<typename _Tp, typename _Up> > inline > typename __gnu_cxx::__promote_2<_Tp, _Up>::__type > pow(_Tp __x, _Up __y) > { > typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; > return pow(__type(__x), __type(__y)); > } > > using ::sin; > > > inline float > sin(float __x) > { return __builtin_sinf(__x); } > > inline long double > sin(long double __x) > { return __builtin_sinl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > sin(_Tp __x) > { return __builtin_sin(__x); } > > using ::sinh; > > > inline float > sinh(float __x) > { return __builtin_sinhf(__x); } > > inline long double > sinh(long double __x) > { return __builtin_sinhl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > sinh(_Tp __x) > { return __builtin_sinh(__x); } > > using ::sqrt; > > > inline float > sqrt(float __x) > { return __builtin_sqrtf(__x); } > > inline long double > sqrt(long double __x) > { return __builtin_sqrtl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > sqrt(_Tp __x) > { return __builtin_sqrt(__x); } > > using ::tan; > > > inline float > tan(float __x) > { return __builtin_tanf(__x); } > > inline long double > tan(long double __x) > { return __builtin_tanl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > tan(_Tp __x) > { return __builtin_tan(__x); } > > using ::tanh; > > > inline float > tanh(float __x) > { return __builtin_tanhf(__x); } > > inline long double > tanh(long double __x) > { return __builtin_tanhl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > tanh(_Tp __x) > { return __builtin_tanh(__x); } > > >} ># 555 "/usr/include/c++/4.8.2/cmath" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ ># 805 "/usr/include/c++/4.8.2/cmath" 3 > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > fpclassify(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_fpclassify(0, 1, 4, > 3, 2, __type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isfinite(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isfinite(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isinf(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isinf(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isnan(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isnan(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isnormal(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isnormal(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > signbit(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_signbit(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isgreater(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isgreater(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isgreaterequal(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isgreaterequal(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isless(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isless(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > islessequal(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_islessequal(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > islessgreater(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_islessgreater(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isunordered(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isunordered(__type(__f1), __type(__f2)); > } > > > > >} ># 78 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/ctime" 1 3 ># 39 "/usr/include/c++/4.8.2/ctime" 3 ># 40 "/usr/include/c++/4.8.2/ctime" 3 ># 79 "./CImg.h" 2 ># 123 "./CImg.h" ># 1 "/usr/include/sys/time.h" 1 3 4 ># 27 "/usr/include/sys/time.h" 3 4 ># 1 "/usr/include/bits/time.h" 1 3 4 ># 28 "/usr/include/sys/time.h" 2 3 4 ># 37 "/usr/include/sys/time.h" 3 4 >extern "C" { ># 55 "/usr/include/sys/time.h" 3 4 >struct timezone > { > int tz_minuteswest; > int tz_dsttime; > }; > >typedef struct timezone *__restrict __timezone_ptr_t; ># 71 "/usr/include/sys/time.h" 3 4 >extern int gettimeofday (struct timeval *__restrict __tv, > __timezone_ptr_t __tz) throw () __attribute__ ((__nonnull__ (1))); > > > > >extern int settimeofday (const struct timeval *__tv, > const struct timezone *__tz) > throw (); > > > > > >extern int adjtime (const struct timeval *__delta, > struct timeval *__olddelta) throw (); > > > > >enum __itimer_which > { > > ITIMER_REAL = 0, > > > ITIMER_VIRTUAL = 1, > > > > ITIMER_PROF = 2 > > }; > > > >struct itimerval > { > > struct timeval it_interval; > > struct timeval it_value; > }; > > > > > > >typedef int __itimer_which_t; > > > > >extern int getitimer (__itimer_which_t __which, > struct itimerval *__value) throw (); > > > > >extern int setitimer (__itimer_which_t __which, > const struct itimerval *__restrict __new, > struct itimerval *__restrict __old) throw (); > > > > >extern int utimes (const char *__file, const struct timeval __tvp[2]) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int lutimes (const char *__file, const struct timeval __tvp[2]) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int futimes (int __fd, const struct timeval __tvp[2]) throw (); > > > > > > >extern int futimesat (int __fd, const char *__file, > const struct timeval __tvp[2]) throw (); ># 189 "/usr/include/sys/time.h" 3 4 >} ># 124 "./CImg.h" 2 ># 1 "/usr/include/unistd.h" 1 3 4 ># 27 "/usr/include/unistd.h" 3 4 >extern "C" { ># 202 "/usr/include/unistd.h" 3 4 ># 1 "/usr/include/bits/posix_opt.h" 1 3 4 ># 203 "/usr/include/unistd.h" 2 3 4 > > > ># 1 "/usr/include/bits/environments.h" 1 3 4 ># 22 "/usr/include/bits/environments.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 23 "/usr/include/bits/environments.h" 2 3 4 ># 207 "/usr/include/unistd.h" 2 3 4 ># 226 "/usr/include/unistd.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 227 "/usr/include/unistd.h" 2 3 4 ># 267 "/usr/include/unistd.h" 3 4 >typedef __intptr_t intptr_t; > > > > > > >typedef __socklen_t socklen_t; ># 287 "/usr/include/unistd.h" 3 4 >extern int access (const char *__name, int __type) throw () __attribute__ ((__nonnull__ (1))); > > > > >extern int euidaccess (const char *__name, int __type) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int eaccess (const char *__name, int __type) > throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int faccessat (int __fd, const char *__file, int __type, int __flag) > throw () __attribute__ ((__nonnull__ (2))) ; ># 334 "/usr/include/unistd.h" 3 4 >extern __off_t lseek (int __fd, __off_t __offset, int __whence) throw (); ># 345 "/usr/include/unistd.h" 3 4 >extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) > throw (); > > > > > > >extern int close (int __fd); > > > > > > >extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ; > > > > > >extern ssize_t write (int __fd, const void *__buf, size_t __n) ; ># 376 "/usr/include/unistd.h" 3 4 >extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, > __off_t __offset) ; > > > > > > >extern ssize_t pwrite (int __fd, const void *__buf, size_t __n, > __off_t __offset) ; ># 404 "/usr/include/unistd.h" 3 4 >extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, > __off64_t __offset) ; > > >extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n, > __off64_t __offset) ; > > > > > > > >extern int pipe (int __pipedes[2]) throw () ; > > > > >extern int pipe2 (int __pipedes[2], int __flags) throw () ; ># 432 "/usr/include/unistd.h" 3 4 >extern unsigned int alarm (unsigned int __seconds) throw (); ># 444 "/usr/include/unistd.h" 3 4 >extern unsigned int sleep (unsigned int __seconds); > > > > > > > >extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) > throw (); > > > > > > >extern int usleep (__useconds_t __useconds); ># 469 "/usr/include/unistd.h" 3 4 >extern int pause (void); > > > >extern int chown (const char *__file, __uid_t __owner, __gid_t __group) > throw () __attribute__ ((__nonnull__ (1))) ; > > > >extern int fchown (int __fd, __uid_t __owner, __gid_t __group) throw () ; > > > > >extern int lchown (const char *__file, __uid_t __owner, __gid_t __group) > throw () __attribute__ ((__nonnull__ (1))) ; > > > > > > >extern int fchownat (int __fd, const char *__file, __uid_t __owner, > __gid_t __group, int __flag) > throw () __attribute__ ((__nonnull__ (2))) ; > > > >extern int chdir (const char *__path) throw () __attribute__ ((__nonnull__ (1))) ; > > > >extern int fchdir (int __fd) throw () ; ># 511 "/usr/include/unistd.h" 3 4 >extern char *getcwd (char *__buf, size_t __size) throw () ; > > > > > >extern char *get_current_dir_name (void) throw (); > > > > > > > >extern char *getwd (char *__buf) > throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) ; > > > > >extern int dup (int __fd) throw () ; > > >extern int dup2 (int __fd, int __fd2) throw (); > > > > >extern int dup3 (int __fd, int __fd2, int __flags) throw (); > > > >extern char **__environ; > >extern char **environ; > > > > > >extern int execve (const char *__path, char *const __argv[], > char *const __envp[]) throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int fexecve (int __fd, char *const __argv[], char *const __envp[]) > throw () __attribute__ ((__nonnull__ (2))); > > > > >extern int execv (const char *__path, char *const __argv[]) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int execle (const char *__path, const char *__arg, ...) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int execl (const char *__path, const char *__arg, ...) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int execvp (const char *__file, char *const __argv[]) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int execlp (const char *__file, const char *__arg, ...) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int execvpe (const char *__file, char *const __argv[], > char *const __envp[]) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > >extern int nice (int __inc) throw () ; > > > > >extern void _exit (int __status) __attribute__ ((__noreturn__)); > > > > > ># 1 "/usr/include/bits/confname.h" 1 3 4 ># 24 "/usr/include/bits/confname.h" 3 4 >enum > { > _PC_LINK_MAX, > > _PC_MAX_CANON, > > _PC_MAX_INPUT, > > _PC_NAME_MAX, > > _PC_PATH_MAX, > > _PC_PIPE_BUF, > > _PC_CHOWN_RESTRICTED, > > _PC_NO_TRUNC, > > _PC_VDISABLE, > > _PC_SYNC_IO, > > _PC_ASYNC_IO, > > _PC_PRIO_IO, > > _PC_SOCK_MAXBUF, > > _PC_FILESIZEBITS, > > _PC_REC_INCR_XFER_SIZE, > > _PC_REC_MAX_XFER_SIZE, > > _PC_REC_MIN_XFER_SIZE, > > _PC_REC_XFER_ALIGN, > > _PC_ALLOC_SIZE_MIN, > > _PC_SYMLINK_MAX, > > _PC_2_SYMLINKS > > }; > > >enum > { > _SC_ARG_MAX, > > _SC_CHILD_MAX, > > _SC_CLK_TCK, > > _SC_NGROUPS_MAX, > > _SC_OPEN_MAX, > > _SC_STREAM_MAX, > > _SC_TZNAME_MAX, > > _SC_JOB_CONTROL, > > _SC_SAVED_IDS, > > _SC_REALTIME_SIGNALS, > > _SC_PRIORITY_SCHEDULING, > > _SC_TIMERS, > > _SC_ASYNCHRONOUS_IO, > > _SC_PRIORITIZED_IO, > > _SC_SYNCHRONIZED_IO, > > _SC_FSYNC, > > _SC_MAPPED_FILES, > > _SC_MEMLOCK, > > _SC_MEMLOCK_RANGE, > > _SC_MEMORY_PROTECTION, > > _SC_MESSAGE_PASSING, > > _SC_SEMAPHORES, > > _SC_SHARED_MEMORY_OBJECTS, > > _SC_AIO_LISTIO_MAX, > > _SC_AIO_MAX, > > _SC_AIO_PRIO_DELTA_MAX, > > _SC_DELAYTIMER_MAX, > > _SC_MQ_OPEN_MAX, > > _SC_MQ_PRIO_MAX, > > _SC_VERSION, > > _SC_PAGESIZE, > > > _SC_RTSIG_MAX, > > _SC_SEM_NSEMS_MAX, > > _SC_SEM_VALUE_MAX, > > _SC_SIGQUEUE_MAX, > > _SC_TIMER_MAX, > > > > > _SC_BC_BASE_MAX, > > _SC_BC_DIM_MAX, > > _SC_BC_SCALE_MAX, > > _SC_BC_STRING_MAX, > > _SC_COLL_WEIGHTS_MAX, > > _SC_EQUIV_CLASS_MAX, > > _SC_EXPR_NEST_MAX, > > _SC_LINE_MAX, > > _SC_RE_DUP_MAX, > > _SC_CHARCLASS_NAME_MAX, > > > _SC_2_VERSION, > > _SC_2_C_BIND, > > _SC_2_C_DEV, > > _SC_2_FORT_DEV, > > _SC_2_FORT_RUN, > > _SC_2_SW_DEV, > > _SC_2_LOCALEDEF, > > > _SC_PII, > > _SC_PII_XTI, > > _SC_PII_SOCKET, > > _SC_PII_INTERNET, > > _SC_PII_OSI, > > _SC_POLL, > > _SC_SELECT, > > _SC_UIO_MAXIOV, > > _SC_IOV_MAX = _SC_UIO_MAXIOV, > > _SC_PII_INTERNET_STREAM, > > _SC_PII_INTERNET_DGRAM, > > _SC_PII_OSI_COTS, > > _SC_PII_OSI_CLTS, > > _SC_PII_OSI_M, > > _SC_T_IOV_MAX, > > > > _SC_THREADS, > > _SC_THREAD_SAFE_FUNCTIONS, > > _SC_GETGR_R_SIZE_MAX, > > _SC_GETPW_R_SIZE_MAX, > > _SC_LOGIN_NAME_MAX, > > _SC_TTY_NAME_MAX, > > _SC_THREAD_DESTRUCTOR_ITERATIONS, > > _SC_THREAD_KEYS_MAX, > > _SC_THREAD_STACK_MIN, > > _SC_THREAD_THREADS_MAX, > > _SC_THREAD_ATTR_STACKADDR, > > _SC_THREAD_ATTR_STACKSIZE, > > _SC_THREAD_PRIORITY_SCHEDULING, > > _SC_THREAD_PRIO_INHERIT, > > _SC_THREAD_PRIO_PROTECT, > > _SC_THREAD_PROCESS_SHARED, > > > _SC_NPROCESSORS_CONF, > > _SC_NPROCESSORS_ONLN, > > _SC_PHYS_PAGES, > > _SC_AVPHYS_PAGES, > > _SC_ATEXIT_MAX, > > _SC_PASS_MAX, > > > _SC_XOPEN_VERSION, > > _SC_XOPEN_XCU_VERSION, > > _SC_XOPEN_UNIX, > > _SC_XOPEN_CRYPT, > > _SC_XOPEN_ENH_I18N, > > _SC_XOPEN_SHM, > > > _SC_2_CHAR_TERM, > > _SC_2_C_VERSION, > > _SC_2_UPE, > > > _SC_XOPEN_XPG2, > > _SC_XOPEN_XPG3, > > _SC_XOPEN_XPG4, > > > _SC_CHAR_BIT, > > _SC_CHAR_MAX, > > _SC_CHAR_MIN, > > _SC_INT_MAX, > > _SC_INT_MIN, > > _SC_LONG_BIT, > > _SC_WORD_BIT, > > _SC_MB_LEN_MAX, > > _SC_NZERO, > > _SC_SSIZE_MAX, > > _SC_SCHAR_MAX, > > _SC_SCHAR_MIN, > > _SC_SHRT_MAX, > > _SC_SHRT_MIN, > > _SC_UCHAR_MAX, > > _SC_UINT_MAX, > > _SC_ULONG_MAX, > > _SC_USHRT_MAX, > > > _SC_NL_ARGMAX, > > _SC_NL_LANGMAX, > > _SC_NL_MSGMAX, > > _SC_NL_NMAX, > > _SC_NL_SETMAX, > > _SC_NL_TEXTMAX, > > > _SC_XBS5_ILP32_OFF32, > > _SC_XBS5_ILP32_OFFBIG, > > _SC_XBS5_LP64_OFF64, > > _SC_XBS5_LPBIG_OFFBIG, > > > _SC_XOPEN_LEGACY, > > _SC_XOPEN_REALTIME, > > _SC_XOPEN_REALTIME_THREADS, > > > _SC_ADVISORY_INFO, > > _SC_BARRIERS, > > _SC_BASE, > > _SC_C_LANG_SUPPORT, > > _SC_C_LANG_SUPPORT_R, > > _SC_CLOCK_SELECTION, > > _SC_CPUTIME, > > _SC_THREAD_CPUTIME, > > _SC_DEVICE_IO, > > _SC_DEVICE_SPECIFIC, > > _SC_DEVICE_SPECIFIC_R, > > _SC_FD_MGMT, > > _SC_FIFO, > > _SC_PIPE, > > _SC_FILE_ATTRIBUTES, > > _SC_FILE_LOCKING, > > _SC_FILE_SYSTEM, > > _SC_MONOTONIC_CLOCK, > > _SC_MULTI_PROCESS, > > _SC_SINGLE_PROCESS, > > _SC_NETWORKING, > > _SC_READER_WRITER_LOCKS, > > _SC_SPIN_LOCKS, > > _SC_REGEXP, > > _SC_REGEX_VERSION, > > _SC_SHELL, > > _SC_SIGNALS, > > _SC_SPAWN, > > _SC_SPORADIC_SERVER, > > _SC_THREAD_SPORADIC_SERVER, > > _SC_SYSTEM_DATABASE, > > _SC_SYSTEM_DATABASE_R, > > _SC_TIMEOUTS, > > _SC_TYPED_MEMORY_OBJECTS, > > _SC_USER_GROUPS, > > _SC_USER_GROUPS_R, > > _SC_2_PBS, > > _SC_2_PBS_ACCOUNTING, > > _SC_2_PBS_LOCATE, > > _SC_2_PBS_MESSAGE, > > _SC_2_PBS_TRACK, > > _SC_SYMLOOP_MAX, > > _SC_STREAMS, > > _SC_2_PBS_CHECKPOINT, > > > _SC_V6_ILP32_OFF32, > > _SC_V6_ILP32_OFFBIG, > > _SC_V6_LP64_OFF64, > > _SC_V6_LPBIG_OFFBIG, > > > _SC_HOST_NAME_MAX, > > _SC_TRACE, > > _SC_TRACE_EVENT_FILTER, > > _SC_TRACE_INHERIT, > > _SC_TRACE_LOG, > > > _SC_LEVEL1_ICACHE_SIZE, > > _SC_LEVEL1_ICACHE_ASSOC, > > _SC_LEVEL1_ICACHE_LINESIZE, > > _SC_LEVEL1_DCACHE_SIZE, > > _SC_LEVEL1_DCACHE_ASSOC, > > _SC_LEVEL1_DCACHE_LINESIZE, > > _SC_LEVEL2_CACHE_SIZE, > > _SC_LEVEL2_CACHE_ASSOC, > > _SC_LEVEL2_CACHE_LINESIZE, > > _SC_LEVEL3_CACHE_SIZE, > > _SC_LEVEL3_CACHE_ASSOC, > > _SC_LEVEL3_CACHE_LINESIZE, > > _SC_LEVEL4_CACHE_SIZE, > > _SC_LEVEL4_CACHE_ASSOC, > > _SC_LEVEL4_CACHE_LINESIZE, > > > > _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50, > > _SC_RAW_SOCKETS, > > > _SC_V7_ILP32_OFF32, > > _SC_V7_ILP32_OFFBIG, > > _SC_V7_LP64_OFF64, > > _SC_V7_LPBIG_OFFBIG, > > > _SC_SS_REPL_MAX, > > > _SC_TRACE_EVENT_NAME_MAX, > > _SC_TRACE_NAME_MAX, > > _SC_TRACE_SYS_MAX, > > _SC_TRACE_USER_EVENT_MAX, > > > _SC_XOPEN_STREAMS, > > > _SC_THREAD_ROBUST_PRIO_INHERIT, > > _SC_THREAD_ROBUST_PRIO_PROTECT > > }; > > >enum > { > _CS_PATH, > > > _CS_V6_WIDTH_RESTRICTED_ENVS, > > > > _CS_GNU_LIBC_VERSION, > > _CS_GNU_LIBPTHREAD_VERSION, > > > _CS_V5_WIDTH_RESTRICTED_ENVS, > > > > _CS_V7_WIDTH_RESTRICTED_ENVS, > > > > _CS_LFS_CFLAGS = 1000, > > _CS_LFS_LDFLAGS, > > _CS_LFS_LIBS, > > _CS_LFS_LINTFLAGS, > > _CS_LFS64_CFLAGS, > > _CS_LFS64_LDFLAGS, > > _CS_LFS64_LIBS, > > _CS_LFS64_LINTFLAGS, > > > _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, > > _CS_XBS5_ILP32_OFF32_LDFLAGS, > > _CS_XBS5_ILP32_OFF32_LIBS, > > _CS_XBS5_ILP32_OFF32_LINTFLAGS, > > _CS_XBS5_ILP32_OFFBIG_CFLAGS, > > _CS_XBS5_ILP32_OFFBIG_LDFLAGS, > > _CS_XBS5_ILP32_OFFBIG_LIBS, > > _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, > > _CS_XBS5_LP64_OFF64_CFLAGS, > > _CS_XBS5_LP64_OFF64_LDFLAGS, > > _CS_XBS5_LP64_OFF64_LIBS, > > _CS_XBS5_LP64_OFF64_LINTFLAGS, > > _CS_XBS5_LPBIG_OFFBIG_CFLAGS, > > _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, > > _CS_XBS5_LPBIG_OFFBIG_LIBS, > > _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, > > > _CS_POSIX_V6_ILP32_OFF32_CFLAGS, > > _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, > > _CS_POSIX_V6_ILP32_OFF32_LIBS, > > _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, > > _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, > > _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, > > _CS_POSIX_V6_ILP32_OFFBIG_LIBS, > > _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, > > _CS_POSIX_V6_LP64_OFF64_CFLAGS, > > _CS_POSIX_V6_LP64_OFF64_LDFLAGS, > > _CS_POSIX_V6_LP64_OFF64_LIBS, > > _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, > > _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, > > _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, > > _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, > > _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, > > > _CS_POSIX_V7_ILP32_OFF32_CFLAGS, > > _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, > > _CS_POSIX_V7_ILP32_OFF32_LIBS, > > _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, > > _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, > > _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, > > _CS_POSIX_V7_ILP32_OFFBIG_LIBS, > > _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, > > _CS_POSIX_V7_LP64_OFF64_CFLAGS, > > _CS_POSIX_V7_LP64_OFF64_LDFLAGS, > > _CS_POSIX_V7_LP64_OFF64_LIBS, > > _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, > > _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, > > _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, > > _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, > > _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, > > > _CS_V6_ENV, > > _CS_V7_ENV > > }; ># 610 "/usr/include/unistd.h" 2 3 4 > > >extern long int pathconf (const char *__path, int __name) > throw () __attribute__ ((__nonnull__ (1))); > > >extern long int fpathconf (int __fd, int __name) throw (); > > >extern long int sysconf (int __name) throw (); > > > >extern size_t confstr (int __name, char *__buf, size_t __len) throw (); > > > > >extern __pid_t getpid (void) throw (); > > >extern __pid_t getppid (void) throw (); > > > > >extern __pid_t getpgrp (void) throw (); ># 646 "/usr/include/unistd.h" 3 4 >extern __pid_t __getpgid (__pid_t __pid) throw (); > >extern __pid_t getpgid (__pid_t __pid) throw (); > > > > > > >extern int setpgid (__pid_t __pid, __pid_t __pgid) throw (); ># 672 "/usr/include/unistd.h" 3 4 >extern int setpgrp (void) throw (); ># 689 "/usr/include/unistd.h" 3 4 >extern __pid_t setsid (void) throw (); > > > >extern __pid_t getsid (__pid_t __pid) throw (); > > > >extern __uid_t getuid (void) throw (); > > >extern __uid_t geteuid (void) throw (); > > >extern __gid_t getgid (void) throw (); > > >extern __gid_t getegid (void) throw (); > > > > >extern int getgroups (int __size, __gid_t __list[]) throw () ; > > > >extern int group_member (__gid_t __gid) throw (); > > > > > > >extern int setuid (__uid_t __uid) throw () ; > > > > >extern int setreuid (__uid_t __ruid, __uid_t __euid) throw () ; > > > > >extern int seteuid (__uid_t __uid) throw () ; > > > > > > >extern int setgid (__gid_t __gid) throw () ; > > > > >extern int setregid (__gid_t __rgid, __gid_t __egid) throw () ; > > > > >extern int setegid (__gid_t __gid) throw () ; > > > > > >extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid) > throw (); > > > >extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid) > throw (); > > > >extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid) > throw () ; > > > >extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid) > throw () ; > > > > > > >extern __pid_t fork (void) throw (); > > > > > > > >extern __pid_t vfork (void) throw (); > > > > > >extern char *ttyname (int __fd) throw (); > > > >extern int ttyname_r (int __fd, char *__buf, size_t __buflen) > throw () __attribute__ ((__nonnull__ (2))) ; > > > >extern int isatty (int __fd) throw (); > > > > > >extern int ttyslot (void) throw (); > > > > >extern int link (const char *__from, const char *__to) > throw () __attribute__ ((__nonnull__ (1, 2))) ; > > > > >extern int linkat (int __fromfd, const char *__from, int __tofd, > const char *__to, int __flags) > throw () __attribute__ ((__nonnull__ (2, 4))) ; > > > > >extern int symlink (const char *__from, const char *__to) > throw () __attribute__ ((__nonnull__ (1, 2))) ; > > > > >extern ssize_t readlink (const char *__restrict __path, > char *__restrict __buf, size_t __len) > throw () __attribute__ ((__nonnull__ (1, 2))) ; > > > > >extern int symlinkat (const char *__from, int __tofd, > const char *__to) throw () __attribute__ ((__nonnull__ (1, 3))) ; > > >extern ssize_t readlinkat (int __fd, const char *__restrict __path, > char *__restrict __buf, size_t __len) > throw () __attribute__ ((__nonnull__ (2, 3))) ; > > > >extern int unlink (const char *__name) throw () __attribute__ ((__nonnull__ (1))); > > > >extern int unlinkat (int __fd, const char *__name, int __flag) > throw () __attribute__ ((__nonnull__ (2))); > > > >extern int rmdir (const char *__path) throw () __attribute__ ((__nonnull__ (1))); > > > >extern __pid_t tcgetpgrp (int __fd) throw (); > > >extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) throw (); > > > > > > >extern char *getlogin (void); > > > > > > > >extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1))); > > > > >extern int setlogin (const char *__name) throw () __attribute__ ((__nonnull__ (1))); ># 893 "/usr/include/unistd.h" 3 4 ># 1 "/usr/include/getopt.h" 1 3 4 ># 48 "/usr/include/getopt.h" 3 4 >extern "C" { ># 57 "/usr/include/getopt.h" 3 4 >extern char *optarg; ># 71 "/usr/include/getopt.h" 3 4 >extern int optind; > > > > >extern int opterr; > > > >extern int optopt; ># 150 "/usr/include/getopt.h" 3 4 >extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) > throw (); ># 185 "/usr/include/getopt.h" 3 4 >} ># 894 "/usr/include/unistd.h" 2 3 4 > > > > > > > >extern int gethostname (char *__name, size_t __len) throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int sethostname (const char *__name, size_t __len) > throw () __attribute__ ((__nonnull__ (1))) ; > > > >extern int sethostid (long int __id) throw () ; > > > > > >extern int getdomainname (char *__name, size_t __len) > throw () __attribute__ ((__nonnull__ (1))) ; >extern int setdomainname (const char *__name, size_t __len) > throw () __attribute__ ((__nonnull__ (1))) ; > > > > > >extern int vhangup (void) throw (); > > >extern int revoke (const char *__file) throw () __attribute__ ((__nonnull__ (1))) ; > > > > > > > >extern int profil (unsigned short int *__sample_buffer, size_t __size, > size_t __offset, unsigned int __scale) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern int acct (const char *__name) throw (); > > > >extern char *getusershell (void) throw (); >extern void endusershell (void) throw (); >extern void setusershell (void) throw (); > > > > > >extern int daemon (int __nochdir, int __noclose) throw () ; > > > > > > >extern int chroot (const char *__path) throw () __attribute__ ((__nonnull__ (1))) ; > > > >extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1))); > > > > > > > >extern int fsync (int __fd); > > > > > >extern int syncfs (int __fd) throw (); > > > > > > >extern long int gethostid (void); > > >extern void sync (void) throw (); > > > > > >extern int getpagesize (void) throw () __attribute__ ((__const__)); > > > > >extern int getdtablesize (void) throw (); ># 1015 "/usr/include/unistd.h" 3 4 >extern int truncate (const char *__file, __off_t __length) > throw () __attribute__ ((__nonnull__ (1))) ; ># 1027 "/usr/include/unistd.h" 3 4 >extern int truncate64 (const char *__file, __off64_t __length) > throw () __attribute__ ((__nonnull__ (1))) ; ># 1038 "/usr/include/unistd.h" 3 4 >extern int ftruncate (int __fd, __off_t __length) throw () ; ># 1048 "/usr/include/unistd.h" 3 4 >extern int ftruncate64 (int __fd, __off64_t __length) throw () ; ># 1059 "/usr/include/unistd.h" 3 4 >extern int brk (void *__addr) throw () ; > > > > > >extern void *sbrk (intptr_t __delta) throw (); ># 1080 "/usr/include/unistd.h" 3 4 >extern long int syscall (long int __sysno, ...) throw (); ># 1103 "/usr/include/unistd.h" 3 4 >extern int lockf (int __fd, int __cmd, __off_t __len) ; ># 1113 "/usr/include/unistd.h" 3 4 >extern int lockf64 (int __fd, int __cmd, __off64_t __len) ; ># 1134 "/usr/include/unistd.h" 3 4 >extern int fdatasync (int __fildes); > > > > > > > >extern char *crypt (const char *__key, const char *__salt) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern void encrypt (char *__block, int __edflag) throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern void swab (const void *__restrict __from, void *__restrict __to, > ssize_t __n) throw () __attribute__ ((__nonnull__ (1, 2))); ># 1172 "/usr/include/unistd.h" 3 4 >} ># 125 "./CImg.h" 2 ># 223 "./CImg.h" ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/omp.h" 1 3 4 ># 34 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/omp.h" 3 4 >typedef struct >{ > unsigned char _x[4] > __attribute__((__aligned__(4))); >} omp_lock_t; > >typedef struct >{ > unsigned char _x[8 + sizeof (void *)] > __attribute__((__aligned__(sizeof (void *)))); >} omp_nest_lock_t; > > >typedef enum omp_sched_t >{ > omp_sched_static = 1, > omp_sched_dynamic = 2, > omp_sched_guided = 3, > omp_sched_auto = 4 >} omp_sched_t; > > >extern "C" { > > > > > >extern void omp_set_num_threads (int) throw (); >extern int omp_get_num_threads (void) throw (); >extern int omp_get_max_threads (void) throw (); >extern int omp_get_thread_num (void) throw (); >extern int omp_get_num_procs (void) throw (); > >extern int omp_in_parallel (void) throw (); > >extern void omp_set_dynamic (int) throw (); >extern int omp_get_dynamic (void) throw (); > >extern void omp_set_nested (int) throw (); >extern int omp_get_nested (void) throw (); > >extern void omp_init_lock (omp_lock_t *) throw (); >extern void omp_destroy_lock (omp_lock_t *) throw (); >extern void omp_set_lock (omp_lock_t *) throw (); >extern void omp_unset_lock (omp_lock_t *) throw (); >extern int omp_test_lock (omp_lock_t *) throw (); > >extern void omp_init_nest_lock (omp_nest_lock_t *) throw (); >extern void omp_destroy_nest_lock (omp_nest_lock_t *) throw (); >extern void omp_set_nest_lock (omp_nest_lock_t *) throw (); >extern void omp_unset_nest_lock (omp_nest_lock_t *) throw (); >extern int omp_test_nest_lock (omp_nest_lock_t *) throw (); > >extern double omp_get_wtime (void) throw (); >extern double omp_get_wtick (void) throw (); > >void omp_set_schedule (omp_sched_t, int) throw (); >void omp_get_schedule (omp_sched_t *, int *) throw (); >int omp_get_thread_limit (void) throw (); >void omp_set_max_active_levels (int) throw (); >int omp_get_max_active_levels (void) throw (); >int omp_get_level (void) throw (); >int omp_get_ancestor_thread_num (int) throw (); >int omp_get_team_size (int) throw (); >int omp_get_active_level (void) throw (); > >int omp_in_final (void) throw (); > > >} ># 224 "./CImg.h" 2 ># 359 "./CImg.h" >extern "C" { ># 1 "/usr/include/fftw3.h" 1 3 4 ># 53 "/usr/include/fftw3.h" 3 4 >extern "C" >{ ># 89 "/usr/include/fftw3.h" 3 4 >enum fftw_r2r_kind_do_not_use_me { > FFTW_R2HC=0, FFTW_HC2R=1, FFTW_DHT=2, > FFTW_REDFT00=3, FFTW_REDFT01=4, FFTW_REDFT10=5, FFTW_REDFT11=6, > FFTW_RODFT00=7, FFTW_RODFT01=8, FFTW_RODFT10=9, FFTW_RODFT11=10 >}; > >struct fftw_iodim_do_not_use_me { > int n; > int is; > int os; >}; > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 147 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 3 4 >typedef long int ptrdiff_t; ># 102 "/usr/include/fftw3.h" 2 3 4 >struct fftw_iodim64_do_not_use_me { > ptrdiff_t n; > ptrdiff_t is; > ptrdiff_t os; >}; > >typedef void (*fftw_write_char_func_do_not_use_me)(char c, void *); >typedef int (*fftw_read_char_func_do_not_use_me)(void *); ># 355 "/usr/include/fftw3.h" 3 4 >typedef double fftw_complex[2]; typedef struct fftw_plan_s *fftw_plan; typedef struct fftw_iodim_do_not_use_me fftw_iodim; typedef struct fftw_iodim64_do_not_use_me fftw_iodim64; typedef enum fftw_r2r_kind_do_not_use_me fftw_r2r_kind; typedef fftw_write_char_func_do_not_use_me fftw_write_char_func; typedef fftw_read_char_func_do_not_use_me fftw_read_char_func; extern void fftw_execute(const fftw_plan p); extern fftw_plan fftw_plan_dft(int rank, const int *n, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_dft_1d(int n, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_dft_2d(int n0, int n1, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_dft_3d(int n0, int n1, int n2, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_many_dft(int rank, const int *n, int howmany, fftw_complex *in, const int *inembed, int istride, int idist, fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); extern fftw_plan fftw_plan_guru_dft(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_guru_split_dft(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *ri, double *ii, double *ro, double *io, unsigned flags); extern fftw_plan fftw_plan_guru64_dft(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_guru64_split_dft(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *ri, double *ii, double *ro, double *io, unsigned flags); extern void fftw_execute_dft(const fftw_plan p, fftw_complex *in, fftw_complex *out); extern void fftw_execute_split_dft(const fftw_plan p, double *ri, double *ii, double *ro, double *io); extern fftw_plan fftw_plan_many_dft_r2c(int rank, const int *n, int howmany, double *in, const int *inembed, int istride, int idist, fftw_complex *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftw_plan fftw_plan_dft_r2c(int rank, const int *n, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_dft_r2c_1d(int n,double *in,fftw_complex *out,unsigned flags); extern fftw_plan fftw_plan_dft_r2c_2d(int n0, int n1, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_dft_r2c_3d(int n0, int n1, int n2, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_many_dft_c2r(int rank, const int *n, int howmany, fftw_complex *in, const int *inembed, int istride, int idist, double *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftw_plan fftw_plan_dft_c2r(int rank, const int *n, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_dft_c2r_1d(int n,fftw_complex *in,double *out,unsigned flags); extern fftw_plan fftw_plan_dft_c2r_2d(int n0, int n1, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_dft_c2r_3d(int n0, int n1, int n2, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_guru_dft_r2c(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_guru_dft_c2r(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_guru_split_dft_r2c( int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *in, double *ro, double *io, unsigned flags); extern fftw_plan fftw_plan_guru_split_dft_c2r( int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *ri, double *ii, double *out, unsigned flags); extern fftw_plan fftw_plan_guru64_dft_r2c(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_guru64_dft_c2r(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_guru64_split_dft_r2c( int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *in, double *ro, double *io, unsigned flags); extern fftw_plan fftw_plan_guru64_split_dft_c2r( int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *ri, double *ii, double *out, unsigned flags); extern void fftw_execute_dft_r2c(const fftw_plan p, double *in, fftw_complex *out); extern void fftw_execute_dft_c2r(const fftw_plan p, fftw_complex *in, double *out); extern void fftw_execute_split_dft_r2c(const fftw_plan p, double *in, double *ro, double *io); extern void fftw_execute_split_dft_c2r(const fftw_plan p, double *ri, double *ii, double *out); extern fftw_plan fftw_plan_many_r2r(int rank, const int *n, int howmany, double *in, const int *inembed, int istride, int idist, double *out, const int *onembed, int ostride, int odist, const fftw_r2r_kind *kind, unsigned flags); extern fftw_plan fftw_plan_r2r(int rank, const int *n, double *in, double *out, const fftw_r2r_kind *kind, unsigned flags); extern fftw_plan fftw_plan_r2r_1d(int n, double *in, double *out, fftw_r2r_kind kind, unsigned flags); extern fftw_plan fftw_plan_r2r_2d(int n0, int n1, double *in, double *out, fftw_r2r_kind kind0, fftw_r2r_kind kind1, unsigned flags); extern fftw_plan fftw_plan_r2r_3d(int n0, int n1, int n2, double *in, double *out, fftw_r2r_kind kind0, fftw_r2r_kind kind1, fftw_r2r_kind kind2, unsigned flags); extern fftw_plan fftw_plan_guru_r2r(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *in, double *out, const fftw_r2r_kind *kind, unsigned flags); extern fftw_plan fftw_plan_guru64_r2r(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *in, double *out, const fftw_r2r_kind *kind, unsigned flags); extern void fftw_execute_r2r(const fftw_plan p, double *in, double *out); extern void fftw_destroy_plan(fftw_plan p); extern void fftw_forget_wisdom(void); extern void fftw_cleanup(void); extern void fftw_set_timelimit(double t); extern void fftw_plan_with_nthreads(int nthreads); extern int fftw_init_threads(void); extern void fftw_cleanup_threads(void); extern int fftw_export_wisdom_to_filename(const char *filename); extern void fftw_export_wisdom_to_file(FILE *output_file); extern char *fftw_export_wisdom_to_string(void); extern void fftw_export_wisdom(fftw_write_char_func write_char, void *data); extern int fftw_import_system_wisdom(void); extern int fftw_import_wisdom_from_filename(const char *filename); extern int fftw_import_wisdom_from_file(FILE *input_file); extern int fftw_import_wisdom_from_string(const char *input_string); extern int fftw_import_wisdom(fftw_read_char_func read_char, void *data); extern void fftw_fprint_plan(const fftw_plan p, FILE *output_file); extern void fftw_print_plan(const fftw_plan p); extern char *fftw_sprint_plan(const fftw_plan p); extern void *fftw_malloc(size_t n); extern double *fftw_alloc_real(size_t n); extern fftw_complex *fftw_alloc_complex(size_t n); extern void fftw_free(void *p); extern void fftw_flops(const fftw_plan p, double *add, double *mul, double *fmas); extern double fftw_estimate_cost(const fftw_plan p); extern double fftw_cost(const fftw_plan p); extern int fftw_alignment_of(double *p); extern const char fftw_version[]; extern const char fftw_cc[]; extern const char fftw_codelet_optim[]; >typedef float fftwf_complex[2]; typedef struct fftwf_plan_s *fftwf_plan; typedef struct fftw_iodim_do_not_use_me fftwf_iodim; typedef struct fftw_iodim64_do_not_use_me fftwf_iodim64; typedef enum fftw_r2r_kind_do_not_use_me fftwf_r2r_kind; typedef fftw_write_char_func_do_not_use_me fftwf_write_char_func; typedef fftw_read_char_func_do_not_use_me fftwf_read_char_func; extern void fftwf_execute(const fftwf_plan p); extern fftwf_plan fftwf_plan_dft(int rank, const int *n, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_dft_1d(int n, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_dft_2d(int n0, int n1, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_dft_3d(int n0, int n1, int n2, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_many_dft(int rank, const int *n, int howmany, fftwf_complex *in, const int *inembed, int istride, int idist, fftwf_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); extern fftwf_plan fftwf_plan_guru_dft(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_guru_split_dft(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *ri, float *ii, float *ro, float *io, unsigned flags); extern fftwf_plan fftwf_plan_guru64_dft(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_guru64_split_dft(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *ri, float *ii, float *ro, float *io, unsigned flags); extern void fftwf_execute_dft(const fftwf_plan p, fftwf_complex *in, fftwf_complex *out); extern void fftwf_execute_split_dft(const fftwf_plan p, float *ri, float *ii, float *ro, float *io); extern fftwf_plan fftwf_plan_many_dft_r2c(int rank, const int *n, int howmany, float *in, const int *inembed, int istride, int idist, fftwf_complex *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwf_plan fftwf_plan_dft_r2c(int rank, const int *n, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_dft_r2c_1d(int n,float *in,fftwf_complex *out,unsigned flags); extern fftwf_plan fftwf_plan_dft_r2c_2d(int n0, int n1, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_dft_r2c_3d(int n0, int n1, int n2, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_many_dft_c2r(int rank, const int *n, int howmany, fftwf_complex *in, const int *inembed, int istride, int idist, float *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwf_plan fftwf_plan_dft_c2r(int rank, const int *n, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_dft_c2r_1d(int n,fftwf_complex *in,float *out,unsigned flags); extern fftwf_plan fftwf_plan_dft_c2r_2d(int n0, int n1, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_dft_c2r_3d(int n0, int n1, int n2, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_guru_dft_r2c(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_guru_dft_c2r(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_guru_split_dft_r2c( int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *in, float *ro, float *io, unsigned flags); extern fftwf_plan fftwf_plan_guru_split_dft_c2r( int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *ri, float *ii, float *out, unsigned flags); extern fftwf_plan fftwf_plan_guru64_dft_r2c(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_guru64_dft_c2r(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_guru64_split_dft_r2c( int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *in, float *ro, float *io, unsigned flags); extern fftwf_plan fftwf_plan_guru64_split_dft_c2r( int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *ri, float *ii, float *out, unsigned flags); extern void fftwf_execute_dft_r2c(const fftwf_plan p, float *in, fftwf_complex *out); extern void fftwf_execute_dft_c2r(const fftwf_plan p, fftwf_complex *in, float *out); extern void fftwf_execute_split_dft_r2c(const fftwf_plan p, float *in, float *ro, float *io); extern void fftwf_execute_split_dft_c2r(const fftwf_plan p, float *ri, float *ii, float *out); extern fftwf_plan fftwf_plan_many_r2r(int rank, const int *n, int howmany, float *in, const int *inembed, int istride, int idist, float *out, const int *onembed, int ostride, int odist, const fftwf_r2r_kind *kind, unsigned flags); extern fftwf_plan fftwf_plan_r2r(int rank, const int *n, float *in, float *out, const fftwf_r2r_kind *kind, unsigned flags); extern fftwf_plan fftwf_plan_r2r_1d(int n, float *in, float *out, fftwf_r2r_kind kind, unsigned flags); extern fftwf_plan fftwf_plan_r2r_2d(int n0, int n1, float *in, float *out, fftwf_r2r_kind kind0, fftwf_r2r_kind kind1, unsigned flags); extern fftwf_plan fftwf_plan_r2r_3d(int n0, int n1, int n2, float *in, float *out, fftwf_r2r_kind kind0, fftwf_r2r_kind kind1, fftwf_r2r_kind kind2, unsigned flags); extern fftwf_plan fftwf_plan_guru_r2r(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *in, float *out, const fftwf_r2r_kind *kind, unsigned flags); extern fftwf_plan fftwf_plan_guru64_r2r(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *in, float *out, const fftwf_r2r_kind *kind, unsigned flags); extern void fftwf_execute_r2r(const fftwf_plan p, float *in, float *out); extern void fftwf_destroy_plan(fftwf_plan p); extern void fftwf_forget_wisdom(void); extern void fftwf_cleanup(void); extern void fftwf_set_timelimit(double t); extern void fftwf_plan_with_nthreads(int nthreads); extern int fftwf_init_threads(void); extern void fftwf_cleanup_threads(void); extern int fftwf_export_wisdom_to_filename(const char *filename); extern void fftwf_export_wisdom_to_file(FILE *output_file); extern char *fftwf_export_wisdom_to_string(void); extern void fftwf_export_wisdom(fftwf_write_char_func write_char, void *data); extern int fftwf_import_system_wisdom(void); extern int fftwf_import_wisdom_from_filename(const char *filename); extern int fftwf_import_wisdom_from_file(FILE *input_file); extern int fftwf_import_wisdom_from_string(const char *input_string); extern int fftwf_import_wisdom(fftwf_read_char_func read_char, void *data); extern void fftwf_fprint_plan(const fftwf_plan p, FILE *output_file); extern void fftwf_print_plan(const fftwf_plan p); extern char *fftwf_sprint_plan(const fftwf_plan p); extern void *fftwf_malloc(size_t n); extern float *fftwf_alloc_real(size_t n); extern fftwf_complex *fftwf_alloc_complex(size_t n); extern void fftwf_free(void *p); extern void fftwf_flops(const fftwf_plan p, double *add, double *mul, double *fmas); extern double fftwf_estimate_cost(const fftwf_plan p); extern double fftwf_cost(const fftwf_plan p); extern int fftwf_alignment_of(float *p); extern const char fftwf_version[]; extern const char fftwf_cc[]; extern const char fftwf_codelet_optim[]; >typedef long double fftwl_complex[2]; typedef struct fftwl_plan_s *fftwl_plan; typedef struct fftw_iodim_do_not_use_me fftwl_iodim; typedef struct fftw_iodim64_do_not_use_me fftwl_iodim64; typedef enum fftw_r2r_kind_do_not_use_me fftwl_r2r_kind; typedef fftw_write_char_func_do_not_use_me fftwl_write_char_func; typedef fftw_read_char_func_do_not_use_me fftwl_read_char_func; extern void fftwl_execute(const fftwl_plan p); extern fftwl_plan fftwl_plan_dft(int rank, const int *n, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_dft_1d(int n, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_dft_2d(int n0, int n1, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_dft_3d(int n0, int n1, int n2, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_many_dft(int rank, const int *n, int howmany, fftwl_complex *in, const int *inembed, int istride, int idist, fftwl_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); extern fftwl_plan fftwl_plan_guru_dft(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_guru_split_dft(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *ri, long double *ii, long double *ro, long double *io, unsigned flags); extern fftwl_plan fftwl_plan_guru64_dft(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_guru64_split_dft(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *ri, long double *ii, long double *ro, long double *io, unsigned flags); extern void fftwl_execute_dft(const fftwl_plan p, fftwl_complex *in, fftwl_complex *out); extern void fftwl_execute_split_dft(const fftwl_plan p, long double *ri, long double *ii, long double *ro, long double *io); extern fftwl_plan fftwl_plan_many_dft_r2c(int rank, const int *n, int howmany, long double *in, const int *inembed, int istride, int idist, fftwl_complex *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwl_plan fftwl_plan_dft_r2c(int rank, const int *n, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_dft_r2c_1d(int n,long double *in,fftwl_complex *out,unsigned flags); extern fftwl_plan fftwl_plan_dft_r2c_2d(int n0, int n1, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_dft_r2c_3d(int n0, int n1, int n2, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_many_dft_c2r(int rank, const int *n, int howmany, fftwl_complex *in, const int *inembed, int istride, int idist, long double *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwl_plan fftwl_plan_dft_c2r(int rank, const int *n, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_dft_c2r_1d(int n,fftwl_complex *in,long double *out,unsigned flags); extern fftwl_plan fftwl_plan_dft_c2r_2d(int n0, int n1, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_dft_c2r_3d(int n0, int n1, int n2, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_guru_dft_r2c(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_guru_dft_c2r(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_guru_split_dft_r2c( int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *in, long double *ro, long double *io, unsigned flags); extern fftwl_plan fftwl_plan_guru_split_dft_c2r( int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *ri, long double *ii, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_guru64_dft_r2c(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_guru64_dft_c2r(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_guru64_split_dft_r2c( int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *in, long double *ro, long double *io, unsigned flags); extern fftwl_plan fftwl_plan_guru64_split_dft_c2r( int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *ri, long double *ii, long double *out, unsigned flags); extern void fftwl_execute_dft_r2c(const fftwl_plan p, long double *in, fftwl_complex *out); extern void fftwl_execute_dft_c2r(const fftwl_plan p, fftwl_complex *in, long double *out); extern void fftwl_execute_split_dft_r2c(const fftwl_plan p, long double *in, long double *ro, long double *io); extern void fftwl_execute_split_dft_c2r(const fftwl_plan p, long double *ri, long double *ii, long double *out); extern fftwl_plan fftwl_plan_many_r2r(int rank, const int *n, int howmany, long double *in, const int *inembed, int istride, int idist, long double *out, const int *onembed, int ostride, int odist, const fftwl_r2r_kind *kind, unsigned flags); extern fftwl_plan fftwl_plan_r2r(int rank, const int *n, long double *in, long double *out, const fftwl_r2r_kind *kind, unsigned flags); extern fftwl_plan fftwl_plan_r2r_1d(int n, long double *in, long double *out, fftwl_r2r_kind kind, unsigned flags); extern fftwl_plan fftwl_plan_r2r_2d(int n0, int n1, long double *in, long double *out, fftwl_r2r_kind kind0, fftwl_r2r_kind kind1, unsigned flags); extern fftwl_plan fftwl_plan_r2r_3d(int n0, int n1, int n2, long double *in, long double *out, fftwl_r2r_kind kind0, fftwl_r2r_kind kind1, fftwl_r2r_kind kind2, unsigned flags); extern fftwl_plan fftwl_plan_guru_r2r(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *in, long double *out, const fftwl_r2r_kind *kind, unsigned flags); extern fftwl_plan fftwl_plan_guru64_r2r(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *in, long double *out, const fftwl_r2r_kind *kind, unsigned flags); extern void fftwl_execute_r2r(const fftwl_plan p, long double *in, long double *out); extern void fftwl_destroy_plan(fftwl_plan p); extern void fftwl_forget_wisdom(void); extern void fftwl_cleanup(void); extern void fftwl_set_timelimit(double t); extern void fftwl_plan_with_nthreads(int nthreads); extern int fftwl_init_threads(void); extern void fftwl_cleanup_threads(void); extern int fftwl_export_wisdom_to_filename(const char *filename); extern void fftwl_export_wisdom_to_file(FILE *output_file); extern char *fftwl_export_wisdom_to_string(void); extern void fftwl_export_wisdom(fftwl_write_char_func write_char, void *data); extern int fftwl_import_system_wisdom(void); extern int fftwl_import_wisdom_from_filename(const char *filename); extern int fftwl_import_wisdom_from_file(FILE *input_file); extern int fftwl_import_wisdom_from_string(const char *input_string); extern int fftwl_import_wisdom(fftwl_read_char_func read_char, void *data); extern void fftwl_fprint_plan(const fftwl_plan p, FILE *output_file); extern void fftwl_print_plan(const fftwl_plan p); extern char *fftwl_sprint_plan(const fftwl_plan p); extern void *fftwl_malloc(size_t n); extern long double *fftwl_alloc_real(size_t n); extern fftwl_complex *fftwl_alloc_complex(size_t n); extern void fftwl_free(void *p); extern void fftwl_flops(const fftwl_plan p, double *add, double *mul, double *fmas); extern double fftwl_estimate_cost(const fftwl_plan p); extern double fftwl_cost(const fftwl_plan p); extern int fftwl_alignment_of(long double *p); extern const char fftwl_version[]; extern const char fftwl_cc[]; extern const char fftwl_codelet_optim[]; ># 373 "/usr/include/fftw3.h" 3 4 >typedef __float128 fftwq_complex[2]; typedef struct fftwq_plan_s *fftwq_plan; typedef struct fftw_iodim_do_not_use_me fftwq_iodim; typedef struct fftw_iodim64_do_not_use_me fftwq_iodim64; typedef enum fftw_r2r_kind_do_not_use_me fftwq_r2r_kind; typedef fftw_write_char_func_do_not_use_me fftwq_write_char_func; typedef fftw_read_char_func_do_not_use_me fftwq_read_char_func; extern void fftwq_execute(const fftwq_plan p); extern fftwq_plan fftwq_plan_dft(int rank, const int *n, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_dft_1d(int n, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_dft_2d(int n0, int n1, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_dft_3d(int n0, int n1, int n2, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_many_dft(int rank, const int *n, int howmany, fftwq_complex *in, const int *inembed, int istride, int idist, fftwq_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); extern fftwq_plan fftwq_plan_guru_dft(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_guru_split_dft(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *ri, __float128 *ii, __float128 *ro, __float128 *io, unsigned flags); extern fftwq_plan fftwq_plan_guru64_dft(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_guru64_split_dft(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *ri, __float128 *ii, __float128 *ro, __float128 *io, unsigned flags); extern void fftwq_execute_dft(const fftwq_plan p, fftwq_complex *in, fftwq_complex *out); extern void fftwq_execute_split_dft(const fftwq_plan p, __float128 *ri, __float128 *ii, __float128 *ro, __float128 *io); extern fftwq_plan fftwq_plan_many_dft_r2c(int rank, const int *n, int howmany, __float128 *in, const int *inembed, int istride, int idist, fftwq_complex *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwq_plan fftwq_plan_dft_r2c(int rank, const int *n, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_dft_r2c_1d(int n,__float128 *in,fftwq_complex *out,unsigned flags); extern fftwq_plan fftwq_plan_dft_r2c_2d(int n0, int n1, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_dft_r2c_3d(int n0, int n1, int n2, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_many_dft_c2r(int rank, const int *n, int howmany, fftwq_complex *in, const int *inembed, int istride, int idist, __float128 *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwq_plan fftwq_plan_dft_c2r(int rank, const int *n, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_dft_c2r_1d(int n,fftwq_complex *in,__float128 *out,unsigned flags); extern fftwq_plan fftwq_plan_dft_c2r_2d(int n0, int n1, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_dft_c2r_3d(int n0, int n1, int n2, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_guru_dft_r2c(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_guru_dft_c2r(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_guru_split_dft_r2c( int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *in, __float128 *ro, __float128 *io, unsigned flags); extern fftwq_plan fftwq_plan_guru_split_dft_c2r( int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *ri, __float128 *ii, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_guru64_dft_r2c(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_guru64_dft_c2r(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_guru64_split_dft_r2c( int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *in, __float128 *ro, __float128 *io, unsigned flags); extern fftwq_plan fftwq_plan_guru64_split_dft_c2r( int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *ri, __float128 *ii, __float128 *out, unsigned flags); extern void fftwq_execute_dft_r2c(const fftwq_plan p, __float128 *in, fftwq_complex *out); extern void fftwq_execute_dft_c2r(const fftwq_plan p, fftwq_complex *in, __float128 *out); extern void fftwq_execute_split_dft_r2c(const fftwq_plan p, __float128 *in, __float128 *ro, __float128 *io); extern void fftwq_execute_split_dft_c2r(const fftwq_plan p, __float128 *ri, __float128 *ii, __float128 *out); extern fftwq_plan fftwq_plan_many_r2r(int rank, const int *n, int howmany, __float128 *in, const int *inembed, int istride, int idist, __float128 *out, const int *onembed, int ostride, int odist, const fftwq_r2r_kind *kind, unsigned flags); extern fftwq_plan fftwq_plan_r2r(int rank, const int *n, __float128 *in, __float128 *out, const fftwq_r2r_kind *kind, unsigned flags); extern fftwq_plan fftwq_plan_r2r_1d(int n, __float128 *in, __float128 *out, fftwq_r2r_kind kind, unsigned flags); extern fftwq_plan fftwq_plan_r2r_2d(int n0, int n1, __float128 *in, __float128 *out, fftwq_r2r_kind kind0, fftwq_r2r_kind kind1, unsigned flags); extern fftwq_plan fftwq_plan_r2r_3d(int n0, int n1, int n2, __float128 *in, __float128 *out, fftwq_r2r_kind kind0, fftwq_r2r_kind kind1, fftwq_r2r_kind kind2, unsigned flags); extern fftwq_plan fftwq_plan_guru_r2r(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *in, __float128 *out, const fftwq_r2r_kind *kind, unsigned flags); extern fftwq_plan fftwq_plan_guru64_r2r(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *in, __float128 *out, const fftwq_r2r_kind *kind, unsigned flags); extern void fftwq_execute_r2r(const fftwq_plan p, __float128 *in, __float128 *out); extern void fftwq_destroy_plan(fftwq_plan p); extern void fftwq_forget_wisdom(void); extern void fftwq_cleanup(void); extern void fftwq_set_timelimit(double t); extern void fftwq_plan_with_nthreads(int nthreads); extern int fftwq_init_threads(void); extern void fftwq_cleanup_threads(void); extern int fftwq_export_wisdom_to_filename(const char *filename); extern void fftwq_export_wisdom_to_file(FILE *output_file); extern char *fftwq_export_wisdom_to_string(void); extern void fftwq_export_wisdom(fftwq_write_char_func write_char, void *data); extern int fftwq_import_system_wisdom(void); extern int fftwq_import_wisdom_from_filename(const char *filename); extern int fftwq_import_wisdom_from_file(FILE *input_file); extern int fftwq_import_wisdom_from_string(const char *input_string); extern int fftwq_import_wisdom(fftwq_read_char_func read_char, void *data); extern void fftwq_fprint_plan(const fftwq_plan p, FILE *output_file); extern void fftwq_print_plan(const fftwq_plan p); extern char *fftwq_sprint_plan(const fftwq_plan p); extern void *fftwq_malloc(size_t n); extern __float128 *fftwq_alloc_real(size_t n); extern fftwq_complex *fftwq_alloc_complex(size_t n); extern void fftwq_free(void *p); extern void fftwq_flops(const fftwq_plan p, double *add, double *mul, double *fmas); extern double fftwq_estimate_cost(const fftwq_plan p); extern double fftwq_cost(const fftwq_plan p); extern int fftwq_alignment_of(__float128 *p); extern const char fftwq_version[]; extern const char fftwq_cc[]; extern const char fftwq_codelet_optim[]; ># 409 "/usr/include/fftw3.h" 3 4 >} ># 361 "./CImg.h" 2 >} ># 1989 "./CImg.h" >namespace cimg_library { > > > template<typename T=float> struct CImg; > template<typename T=float> struct CImgList; > struct CImgDisplay; > struct CImgException; > > > > > > namespace cimg { > > > > const char t_normal[] = { 0x1b, '[', '0', ';', '0', ';', '0', 'm', 0 }; > const char t_black[] = { 0x1b, '[', '0', ';', '3', '0', ';', '5', '9', 'm', 0 }; > const char t_red[] = { 0x1b, '[', '0', ';', '3', '1', ';', '5', '9', 'm', 0 }; > const char t_green[] = { 0x1b, '[', '0', ';', '3', '2', ';', '5', '9', 'm', 0 }; > const char t_yellow[] = { 0x1b, '[', '0', ';', '3', '3', ';', '5', '9', 'm', 0 }; > const char t_blue[] = { 0x1b, '[', '0', ';', '3', '4', ';', '5', '9', 'm', 0 }; > const char t_magenta[] = { 0x1b, '[', '0', ';', '3', '5', ';', '5', '9', 'm', 0 }; > const char t_cyan[] = { 0x1b, '[', '0', ';', '3', '6', ';', '5', '9', 'm', 0 }; > const char t_white[] = { 0x1b, '[', '0', ';', '3', '7', ';', '5', '9', 'm', 0 }; > const char t_bold[] = { 0x1b, '[', '1', 'm', 0 }; > const char t_underscore[] = { 0x1b, '[', '4', 'm', 0 }; ># 2030 "./CImg.h" > inline std::FILE* output(std::FILE *file=0); > inline void info(); > > > template<typename T> > inline void unused(const T&, ...) {} > > > > > inline int mutex(const unsigned int n, const int lock_mode=1); > > inline unsigned int& _exception_mode(const unsigned int value, const bool is_set) { > static unsigned int mode = 1; > cimg::mutex(0); > if (is_set) mode = value; > cimg::mutex(0,0); > return mode; > } ># 2060 "./CImg.h" > inline unsigned int& exception_mode(const unsigned int mode) { > return _exception_mode(mode,true); > } > > > > > > inline unsigned int& exception_mode() { > return _exception_mode(0,false); > } > > inline int dialog(const char *const title, const char *const msg, const char *const button1_label="OK", > const char *const button2_label=0, const char *const button3_label=0, > const char *const button4_label=0, const char *const button5_label=0, > const char *const button6_label=0, const bool centering=false); > > inline double eval(const char *const expression, const double x=0, const double y=0, const double z=0, const double c=0); > } ># 2144 "./CImg.h" > struct CImgException : public std::exception { ># 2153 "./CImg.h" > char _message[16384]; > CImgException() { *_message = 0; } > CImgException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgException",cimg::t_normal,_message); if (0 && true && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > > const char *what() const throw() { return _message; } > }; > > > > struct CImgInstanceException : public CImgException { > CImgInstanceException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgInstanceException",cimg::t_normal,_message); if (0 && true && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgInstanceException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; > > > > struct CImgArgumentException : public CImgException { > CImgArgumentException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgArgumentException",cimg::t_normal,_message); if (0 && true && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgArgumentException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; > > > > struct CImgIOException : public CImgException { > CImgIOException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgIOException",cimg::t_normal,_message); if (0 && true && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgIOException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; > > > > struct CImgDisplayException : public CImgException { > CImgDisplayException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgDisplayException",cimg::t_normal,_message); if (0 && false && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgDisplayException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; > > > > struct CImgWarningException : public CImgException { > CImgWarningException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgWarningException",cimg::t_normal,_message); if (0 && false && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgWarningException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; ># 2202 "./CImg.h" > namespace cimg { > > > > template<typename T> struct type { > static const char* string() { > static const char* s[] = { "unknown", "unknown8", "unknown16", "unknown24", > "unknown32", "unknown40", "unknown48", "unknown56", > "unknown64", "unknown72", "unknown80", "unknown88", > "unknown96", "unknown104", "unknown112", "unknown120", > "unknown128" }; > return s[(sizeof(T)<17)?sizeof(T):0]; > } > static bool is_float() { return false; } > static bool is_inf(const T) { return false; } > static bool is_nan(const T) { return false; } > static T min() { return (T)-1>0?(T)0:(T)-1<<(8*sizeof(T)-1); } > static T max() { return (T)-1>0?(T)-1:~((T)-1<<(8*sizeof(T)-1)); } > static T inf() { return max(); } > static T cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(T)val; } > static const char* format() { return "%s"; } > static const char* format(const T val) { static const char *const s = "unknown"; cimg::unused(val); return s; } > }; > > template<> struct type<bool> { > static const char* string() { static const char *const s = "bool"; return s; } > static bool is_float() { return false; } > static bool is_inf(const bool) { return false; } > static bool is_nan(const bool) { return false; } > static bool min() { return false; } > static bool max() { return true; } > static bool inf() { return max(); } > static bool is_inf() { return false; } > static bool cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(bool)val; } > static const char* format() { return "%s"; } > static const char* format(const bool val) { static const char* s[] = { "false", "true" }; return s[val?1:0]; } > }; > > template<> struct type<unsigned char> { > static const char* string() { static const char *const s = "unsigned char"; return s; } > static bool is_float() { return false; } > static bool is_inf(const unsigned char) { return false; } > static bool is_nan(const unsigned char) { return false; } > static unsigned char min() { return 0; } > static unsigned char max() { return (unsigned char)~0U; } > static unsigned char inf() { return max(); } > static unsigned char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned char)val; } > static const char* format() { return "%u"; } > static unsigned int format(const unsigned char val) { return (unsigned int)val; } > }; > > template<> struct type<char> { > static const char* string() { static const char *const s = "char"; return s; } > static bool is_float() { return false; } > static bool is_inf(const char) { return false; } > static bool is_nan(const char) { return false; } > static char min() { return (char)(-1L<<(8*sizeof(char)-1)); } > static char max() { return (char)~((char)(-1L<<(8*sizeof(char)-1))); } > static char inf() { return max(); } > static char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(char)val; } > static const char* format() { return "%d"; } > static int format(const char val) { return (int)val; } > }; > > template<> struct type<signed char> { > static const char* string() { static const char *const s = "signed char"; return s; } > static bool is_float() { return false; } > static bool is_inf(const signed char) { return false; } > static bool is_nan(const signed char) { return false; } > static signed char min() { return (signed char)(-1L<<(8*sizeof(signed char)-1)); } > static signed char max() { return ~((signed char)(-1L<<(8*sizeof(signed char)-1))); } > static signed char inf() { return max(); } > static signed char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(signed char)val; } > static const char* format() { return "%d"; } > static unsigned int format(const signed char val) { return (int)val; } > }; > > template<> struct type<unsigned short> { > static const char* string() { static const char *const s = "unsigned short"; return s; } > static bool is_float() { return false; } > static bool is_inf(const unsigned short) { return false; } > static bool is_nan(const unsigned short) { return false; } > static unsigned short min() { return 0; } > static unsigned short max() { return (unsigned short)~0U; } > static unsigned short inf() { return max(); } > static unsigned short cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned short)val; } > static const char* format() { return "%u"; } > static unsigned int format(const unsigned short val) { return (unsigned int)val; } > }; > > template<> struct type<short> { > static const char* string() { static const char *const s = "short"; return s; } > static bool is_float() { return false; } > static bool is_inf(const short) { return false; } > static bool is_nan(const short) { return false; } > static short min() { return (short)(-1L<<(8*sizeof(short)-1)); } > static short max() { return ~((short)(-1L<<(8*sizeof(short)-1))); } > static short inf() { return max(); } > static short cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(short)val; } > static const char* format() { return "%d"; } > static int format(const short val) { return (int)val; } > }; > > template<> struct type<unsigned int> { > static const char* string() { static const char *const s = "unsigned int"; return s; } > static bool is_float() { return false; } > static bool is_inf(const unsigned int) { return false; } > static bool is_nan(const unsigned int) { return false; } > static unsigned int min() { return 0; } > static unsigned int max() { return (unsigned int)~0U; } > static unsigned int inf() { return max(); } > static unsigned int cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned int)val; } > static const char* format() { return "%u"; } > static unsigned int format(const unsigned int val) { return val; } > }; > > template<> struct type<int> { > static const char* string() { static const char *const s = "int"; return s; } > static bool is_float() { return false; } > static bool is_inf(const int) { return false; } > static bool is_nan(const int) { return false; } > static int min() { return (int)(-1L<<(8*sizeof(int)-1)); } > static int max() { return ~((int)(-1L<<(8*sizeof(int)-1))); } > static int inf() { return max(); } > static int cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(int)val; } > static const char* format() { return "%d"; } > static int format(const int val) { return val; } > }; > > template<> struct type<unsigned long> { > static const char* string() { static const char *const s = "unsigned long"; return s; } > static bool is_float() { return false; } > static bool is_inf(const unsigned long) { return false; } > static bool is_nan(const unsigned long) { return false; } > static unsigned long min() { return 0; } > static unsigned long max() { return (unsigned long)~0UL; } > static unsigned long inf() { return max(); } > static unsigned long cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned long)val; } > static const char* format() { return "%lu"; } > static unsigned long format(const unsigned long val) { return val; } > }; > > template<> struct type<long> { > static const char* string() { static const char *const s = "long"; return s; } > static bool is_float() { return false; } > static bool is_inf(const long) { return false; } > static bool is_nan(const long) { return false; } > static long min() { return (long)(-1L<<(8*sizeof(long)-1)); } > static long max() { return ~((long)(-1L<<(8*sizeof(long)-1))); } > static long inf() { return max(); } > static long cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(long)val; } > static const char* format() { return "%ld"; } > static long format(const long val) { return val; } > }; > > template<> struct type<double> { > static const char* string() { static const char *const s = "double"; return s; } > static bool is_float() { return true; } > static bool is_inf(const double val) { > > > > return !is_nan(val) && (val<cimg::type<double>::min() || val>cimg::type<double>::max()); > > } > static bool is_nan(const double val) { > > > > return !(val==val); > > } > static double min() { return -1.7E308; } > static double max() { return 1.7E308; } > static double inf() { return max()*max(); } > static double nan() { static const double val_nan = -std::sqrt(-1.0); return val_nan; } > static double cut(const double val) { return val<min()?min():val>max()?max():val; } > static const char* format() { return "%.16g"; } > static double format(const double val) { return val; } > }; > > template<> struct type<float> { > static const char* string() { static const char *const s = "float"; return s; } > static bool is_float() { return true; } > static bool is_inf(const float val) { > > > > return !is_nan(val) && (val<cimg::type<float>::min() || val>cimg::type<float>::max()); > > } > static bool is_nan(const float val) { > > > > return !(val==val); > > } > static float min() { return -3.4E38f; } > static float max() { return 3.4E38f; } > static float inf() { return (float)cimg::type<double>::inf(); } > static float nan() { return (float)cimg::type<double>::nan(); } > static float cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(float)val; } > static const char* format() { return "%.16g"; } > static double format(const float val) { return (double)val; } > }; > > template<typename T, typename t> struct superset { typedef T type; }; > template<> struct superset<bool,unsigned char> { typedef unsigned char type; }; > template<> struct superset<bool,char> { typedef char type; }; > template<> struct superset<bool,signed char> { typedef signed char type; }; > template<> struct superset<bool,unsigned short> { typedef unsigned short type; }; > template<> struct superset<bool,short> { typedef short type; }; > template<> struct superset<bool,unsigned int> { typedef unsigned int type; }; > template<> struct superset<bool,int> { typedef int type; }; > template<> struct superset<bool,unsigned long> { typedef unsigned long type; }; > template<> struct superset<bool,long> { typedef long type; }; > template<> struct superset<bool,float> { typedef float type; }; > template<> struct superset<bool,double> { typedef double type; }; > template<> struct superset<unsigned char,char> { typedef short type; }; > template<> struct superset<unsigned char,signed char> { typedef short type; }; > template<> struct superset<unsigned char,unsigned short> { typedef unsigned short type; }; > template<> struct superset<unsigned char,short> { typedef short type; }; > template<> struct superset<unsigned char,unsigned int> { typedef unsigned int type; }; > template<> struct superset<unsigned char,int> { typedef int type; }; > template<> struct superset<unsigned char,unsigned long> { typedef unsigned long type; }; > template<> struct superset<unsigned char,long> { typedef long type; }; > template<> struct superset<unsigned char,float> { typedef float type; }; > template<> struct superset<unsigned char,double> { typedef double type; }; > template<> struct superset<signed char,unsigned char> { typedef short type; }; > template<> struct superset<signed char,char> { typedef short type; }; > template<> struct superset<signed char,unsigned short> { typedef int type; }; > template<> struct superset<signed char,short> { typedef short type; }; > template<> struct superset<signed char,unsigned int> { typedef long type; }; > template<> struct superset<signed char,int> { typedef int type; }; > template<> struct superset<signed char,unsigned long> { typedef long type; }; > template<> struct superset<signed char,long> { typedef long type; }; > template<> struct superset<signed char,float> { typedef float type; }; > template<> struct superset<signed char,double> { typedef double type; }; > template<> struct superset<char,unsigned char> { typedef short type; }; > template<> struct superset<char,signed char> { typedef short type; }; > template<> struct superset<char,unsigned short> { typedef int type; }; > template<> struct superset<char,short> { typedef short type; }; > template<> struct superset<char,unsigned int> { typedef long type; }; > template<> struct superset<char,int> { typedef int type; }; > template<> struct superset<char,unsigned long> { typedef long type; }; > template<> struct superset<char,long> { typedef long type; }; > template<> struct superset<char,float> { typedef float type; }; > template<> struct superset<char,double> { typedef double type; }; > template<> struct superset<unsigned short,char> { typedef int type; }; > template<> struct superset<unsigned short,signed char> { typedef int type; }; > template<> struct superset<unsigned short,short> { typedef int type; }; > template<> struct superset<unsigned short,unsigned int> { typedef unsigned int type; }; > template<> struct superset<unsigned short,int> { typedef int type; }; > template<> struct superset<unsigned short,unsigned long> { typedef unsigned long type; }; > template<> struct superset<unsigned short,long> { typedef long type; }; > template<> struct superset<unsigned short,float> { typedef float type; }; > template<> struct superset<unsigned short,double> { typedef double type; }; > template<> struct superset<short,unsigned short> { typedef int type; }; > template<> struct superset<short,unsigned int> { typedef long type; }; > template<> struct superset<short,int> { typedef int type; }; > template<> struct superset<short,unsigned long> { typedef long type; }; > template<> struct superset<short,long> { typedef long type; }; > template<> struct superset<short,float> { typedef float type; }; > template<> struct superset<short,double> { typedef double type; }; > template<> struct superset<unsigned int,char> { typedef long type; }; > template<> struct superset<unsigned int,signed char> { typedef long type; }; > template<> struct superset<unsigned int,short> { typedef long type; }; > template<> struct superset<unsigned int,int> { typedef long type; }; > template<> struct superset<unsigned int,unsigned long> { typedef unsigned long type; }; > template<> struct superset<unsigned int,long> { typedef long type; }; > template<> struct superset<unsigned int,float> { typedef float type; }; > template<> struct superset<unsigned int,double> { typedef double type; }; > template<> struct superset<int,unsigned int> { typedef long type; }; > template<> struct superset<int,unsigned long> { typedef long type; }; > template<> struct superset<int,long> { typedef long type; }; > template<> struct superset<int,float> { typedef float type; }; > template<> struct superset<int,double> { typedef double type; }; > template<> struct superset<unsigned long,char> { typedef long type; }; > template<> struct superset<unsigned long,signed char> { typedef long type; }; > template<> struct superset<unsigned long,short> { typedef long type; }; > template<> struct superset<unsigned long,int> { typedef long type; }; > template<> struct superset<unsigned long,long> { typedef long type; }; > template<> struct superset<unsigned long,float> { typedef double type; }; > template<> struct superset<unsigned long,double> { typedef double type; }; > template<> struct superset<long,float> { typedef double type; }; > template<> struct superset<long,double> { typedef double type; }; > template<> struct superset<float,double> { typedef double type; }; > > template<typename t1, typename t2, typename t3> struct superset2 { > typedef typename superset<t1, typename superset<t2,t3>::type>::type type; > }; > > template<typename t1, typename t2, typename t3, typename t4> struct superset3 { > typedef typename superset<t1, typename superset2<t2,t3,t4>::type>::type type; > }; > > template<typename t1, typename t2> struct last { typedef t2 type; }; ># 2570 "./CImg.h" > struct Mutex_info { > > > > > > > > pthread_mutex_t mutex[32]; > Mutex_info() { for (unsigned int i = 0; i<32; ++i) pthread_mutex_init(&mutex[i],0); } > void lock(const unsigned int n) { pthread_mutex_lock(&mutex[n]); } > void unlock(const unsigned int n) { pthread_mutex_unlock(&mutex[n]); } > int trylock(const unsigned int n) { return pthread_mutex_trylock(&mutex[n]); } > > > > > > > }; > > > > > > inline Mutex_info& Mutex_attr() { static Mutex_info val; return val; } ># 2791 "./CImg.h" > const unsigned int keyESC = 1U; > const unsigned int keyF1 = 2U; > const unsigned int keyF2 = 3U; > const unsigned int keyF3 = 4U; > const unsigned int keyF4 = 5U; > const unsigned int keyF5 = 6U; > const unsigned int keyF6 = 7U; > const unsigned int keyF7 = 8U; > const unsigned int keyF8 = 9U; > const unsigned int keyF9 = 10U; > const unsigned int keyF10 = 11U; > const unsigned int keyF11 = 12U; > const unsigned int keyF12 = 13U; > const unsigned int keyPAUSE = 14U; > const unsigned int key1 = 15U; > const unsigned int key2 = 16U; > const unsigned int key3 = 17U; > const unsigned int key4 = 18U; > const unsigned int key5 = 19U; > const unsigned int key6 = 20U; > const unsigned int key7 = 21U; > const unsigned int key8 = 22U; > const unsigned int key9 = 23U; > const unsigned int key0 = 24U; > const unsigned int keyBACKSPACE = 25U; > const unsigned int keyINSERT = 26U; > const unsigned int keyHOME = 27U; > const unsigned int keyPAGEUP = 28U; > const unsigned int keyTAB = 29U; > const unsigned int keyQ = 30U; > const unsigned int keyW = 31U; > const unsigned int keyE = 32U; > const unsigned int keyR = 33U; > const unsigned int keyT = 34U; > const unsigned int keyY = 35U; > const unsigned int keyU = 36U; > const unsigned int keyI = 37U; > const unsigned int keyO = 38U; > const unsigned int keyP = 39U; > const unsigned int keyDELETE = 40U; > const unsigned int keyEND = 41U; > const unsigned int keyPAGEDOWN = 42U; > const unsigned int keyCAPSLOCK = 43U; > const unsigned int keyA = 44U; > const unsigned int keyS = 45U; > const unsigned int keyD = 46U; > const unsigned int keyF = 47U; > const unsigned int keyG = 48U; > const unsigned int keyH = 49U; > const unsigned int keyJ = 50U; > const unsigned int keyK = 51U; > const unsigned int keyL = 52U; > const unsigned int keyENTER = 53U; > const unsigned int keySHIFTLEFT = 54U; > const unsigned int keyZ = 55U; > const unsigned int keyX = 56U; > const unsigned int keyC = 57U; > const unsigned int keyV = 58U; > const unsigned int keyB = 59U; > const unsigned int keyN = 60U; > const unsigned int keyM = 61U; > const unsigned int keySHIFTRIGHT = 62U; > const unsigned int keyARROWUP = 63U; > const unsigned int keyCTRLLEFT = 64U; > const unsigned int keyAPPLEFT = 65U; > const unsigned int keyALT = 66U; > const unsigned int keySPACE = 67U; > const unsigned int keyALTGR = 68U; > const unsigned int keyAPPRIGHT = 69U; > const unsigned int keyMENU = 70U; > const unsigned int keyCTRLRIGHT = 71U; > const unsigned int keyARROWLEFT = 72U; > const unsigned int keyARROWDOWN = 73U; > const unsigned int keyARROWRIGHT = 74U; > const unsigned int keyPAD0 = 75U; > const unsigned int keyPAD1 = 76U; > const unsigned int keyPAD2 = 77U; > const unsigned int keyPAD3 = 78U; > const unsigned int keyPAD4 = 79U; > const unsigned int keyPAD5 = 80U; > const unsigned int keyPAD6 = 81U; > const unsigned int keyPAD7 = 82U; > const unsigned int keyPAD8 = 83U; > const unsigned int keyPAD9 = 84U; > const unsigned int keyPADADD = 85U; > const unsigned int keyPADSUB = 86U; > const unsigned int keyPADMUL = 87U; > const unsigned int keyPADDIV = 88U; > > > const double PI = 3.14159265358979323846; > > > const char *const data_font12x13 = >" .wjwlwmyuw>wjwkwbwjwkwRxuwmwjwkwmyuwJwjwlx`w Fw mwlwlwuwnwuynwuwmyTwlwkwuwmwuwnwlwkwuwmwuw_wuxl" >"wlwkwuwnwuynwuwTwlwlwtwnwtwnw my Qw +wlw b{ \\w Wx`xTw_w[wbxawSwkw nynwky<x1w `y ,w Xwuw CxlwiwlwmyuwbwuwUwiwlwbwiwrwqw^wuwmxuwnwiwlwmy" >"uwJwiwlw^wnwEymymymymy1w^wkxnxtxnw<| gybwkwuwjwtwowmxswnxnwkxlxkw:wlymxlymykwn{myo{nymy2ykwqwqwm{myozn{o{mzpwrwpwkwkwswowkwqwqxswnyozlyozmzp}pwrwqwqwq" >"wswswsxsxqwqwp}qwlwiwjybw`w[wcw_wkwkwkwkw mw\"wlwiw=wtw`xIw awuwlwm{o{mylwn|pwtwtwoy`w_w_wbwiwkxcwqwpwkznwuwjzpyGzqymyaxlylw_zWxkxaxrwqxrwqyswowkwkwkwk" >"wkwkwk}qyo{o{o{o{owkwkwkwkznxswnymymymymyayuwqwrwpwrwpwrwpwrwqwqwpwkwtwlwkwlwuwnwuynwuwmyTwkwlwuwmwuwnwkwlwuwmwuwkxlwuxmwkwlwuwnwuynwuwTwkwlwuwmwuwlwm" >"wkwtwUwuwuwowswowswowswowsw;wqwtw_ymzp~py>w bwswcwkwuwjwuwozpwtwuwnwtwowkwjwmwuwuwkwIxmxuxowuwmwswowswmxnwjwhwowswowsw0wmwowswuwnwrwowswpwswowkwjwrwqw" >"rwpwkwkwtwnwkxsxqxswowswpwswnwswpwswowrwnwmwrwqwqwqwswswrwswowswjwpwlxjwkxuxLw[wcw_wSwkw mw\"wlwiw=wtwmxlwFw cwswnwuwnwkwjwswo{pwrwpwtwtwpwswby`w`yUwlw" >"twpwqwpwswowlw\\wrwrxuwHwrwfwuwjwlwlwTyuwVwlwtwawswowswowswcwuwmwuwmwuwmwuwmwuwlwkwuwnwswpwkwkwkwkwkwkwkwkwswoxswowswowswowswowswowswowrwpwswpwrwpwrwpw" >"rwpwrwpwswoznwtw Ww (wGwtwtwqwqwqwuwuwuwqwswuwqwqw=wqxtw`{nzp~q{ozowrwnxmwtwow bzawkwuwl}rwuwnwtwuwnwtwowkwjwlyjwIwlwswmwiwkwnwuwnwkwhwnwswowswowkwew" >"ewixnwsytwswuwnwrwpwkwrwpwkwkwkwrwpwkwkwuwmwkxsxqwuwtwpwqwqwswowqwqwswowiwmwrwpwswowtwtwpwuwmwuwjwowkwjwlxsxXynzmymznyozlzoznwkwkwtwnwkzuyrzmynzmzowux" >"myozmwswpwrwowtwtwrwrwpwrwp{mwlwiwHyuwpwtwkwmxlynzoxswmwmwswnwswowtxq|owtwtwpym{p{owswnwuwmwlwkwqwqxuwuxqwrwpwtwtwqwqwowlwuwuwkwmwlwtwowuwuwdwjznwl{nw" >"uwnwkx_wtxtwswtwlwtwWwuytwgyjwmwjwawswoyuwVwlwtwnwtwmwtwnwtwmwuwmwlwuwmwuwmwuwmwuwmwuwmwuwmxuwowkwkwkwkwkwkwkwkwkwrwpwuwtwpwqwqwqwqwqwqwqwqwqwowtwpwsw" >"uwqwrwpwrwpwrwpwrwowuwnwswowuwlymymymymymymyuyqymymymymynwkwkwkwjynzmymymymymykwmzowswowswowswowswpwrwozowrwW}q}qwtwtwqwtwtwqwtwtwA}rwuw_{p~r~r}pwtwow" >"rwnxmwtwow aw_w]wtwpwuwmxuwmybwjwlyjwIwlwswmwiwnynwtwnznzkwmynwswTyp}pylwmwtwtwtwswuwn{owkwrwp{o{owk|pwkwkxlwkwuwuwuwqwuwtwpwqwqwswowqwqwswoykwmwrwpws" >"wowuwuwuwowkwjwnwkwjwDwowswowkwswowswowkwswowswowkwkwuwmwkwswswswswowswowswowswoxlwswowkwswpwrwowtwtwqwtwowrwlwoxkwhxVxuxpwtypwuwjwnwtwnwkwswowtxnxmws" >"wowqwqwtwuxqwtwnwtwtwqwswowswmwm{nwuwlxnwkwqwqwtwtwqwrwpwtwtwqwuyuwpwiwhwnwmwrwnwbwkwuwlwlwswoxuxowlwtw`wuwrwszmwtwo}dwuwtwuw[}qymx`wswoyuwow_ylxlwtwo" >"yuwoyuwoyuwmwlwuwmwuwmwuwmwuwmwuwmwuwmwt{swk{o{o{o{owkwkwkwlztwpwuwtwpwqwqwqwqwqwqwqwqwqwnxowtwtwqwrwpwrwpwrwpwrwnwmwswowuwiwkwkwkwkwkwkwswswkwswowswo" >"wswowswowkwkwkwkwswowswowswowswowswowswowswcwtxowswowswowswowswpwrwowswpwrwWwtwtwqwqwqwuwuwuwqwuwswqwqw>wowuw`}q~q|q}qwrwpwrwowtwnwtwo~ izaw]wtwoykwux" >"qwtwswfwjwmwuwuwn}eyaxlwswmwjwjwpwswjwowswmwmwswnzWy]ypwlwtwtwuwswswowrwpwkwrwpwkwkwsyqwrwpwkwkwuwmwkwuwuwuwqwtwuwpwqwqznwqwqzkynwmwrwowuwnwuwuwuwowkw" >"jwnwkxkwGzowswowkwswo{owkwswowswowkwkxlwkwswswswswowswowswowswowjxmwkwswowtwnwuwuwuwpxmwtwlwlwlwiwlytwewtwtwqwswowtxoznwswnxmwswnwuwmwuwnwswowtwtwqwtw" >"twqwtwnwtwtwqwswowswmwmwswowswmwmwkwqwqwtwtwqwrwowuwuwpwuyuwq~own~own~owbwkwuwmznwswmwbwswawuwrwgwtwhwdwuytwXwJwswnxuw=wtwmwswowtxowswqxmwswowswowswow" >"swowswowswnwtwowkwkwkwkwkwkwkwkwkwrwpwtwuwpwqwqwqwqwqwqwqwqwqwnxowtwtwqwrwpwrwpwrwpwrwnwmwswowtwmznznznznznzn~swk{o{o{o{owkwkwkwkwswowswowswowswowswow" >"swowswo}qwuwuwowswowswowswowswowtwnwswowtwUwuwuwowswowswowswowsw@}qx`}q~pzo{pwrwpwrwowtwnwtwow aw_w_}owuwmwuwtwrwswuwewjwkwiwJwkwswmwkwiwp|kwowswmwmws" >"wkwWym}mypwlwszr{owrwpwkwrwpwkwkwqwqwrwpwkwkwtwnwkwtwtwqwtwuwpwqwqwkwqwqwtwiwnwmwrwowuwnwuwuwuwpwuwlwkwmwjwkwHwswowswowkwswowkwkwswowswowkwkwuwmwkwsws" >"wswswowswowswowswowhwnwkwswowtwnwuwuwuwpxmwtwmwkwlwiwmwtydwtwtwqwswowswowtwnwswowkwswnwuwnwtwnwswowtwtwqwtwtwqwtwnwtwtwqwswowswmwmwswowswnwlwkwqwqxuwu" >"xqwrwnyowqwpwiwhwpwuwuwowrwpwuwuwdwkwuwlwlwswo{owkxuwawtxtwszmwtwiwdwuwtwuwXwJwswmwuwKzmwtwlwtxowrwpwtxrxl{o{o{o{o{o{o{owkwkwkwkwkwkwkwkwkwrwpwtwuwpwq" >"wqwqwqwqwqwqwqwqwowtwpwuwswqwrwpwrwpwrwpwrwnwmznwswowswowswowswowswowswowswowswowkwkwkwkwkwkwkwkwkwswowswowswowswowswowswowswcwuwuwowswowswowswowswowt" >"wnwswowtwTymymymymy=wmw^wuwuwmxlxmyowrwowtwnwtwmxmw bwswIwuwmwuwmwuwtwrxswdwjw]wJwkxuxmwlwlwswlwjwowswmwmwswlwSycyawlwswowrwowswpwswowkwjwrwqwrwpwkwkw" >"swowkwqwqwsxowswpwjwswpwswowrwnwmxtxnwlwswpwswmwlwlwjwkwHwswowswowkwswowswowkwswowswowkwkwtwnwkwswswswswowswowswowswowkwswowkwswnxlwswpwtwmxmwjwlwiwTx" >"uxpwtxowswowtwnwswowkwswnynwtwnwswowtwtwqxuwuxqwtwnwtwtwqwswowswmwlwuwnwswowkwjwswo{pwrwmwmwswnwjwiwnymwtwnycwkwuwlwl{mwmwiw_wrwdwtwVwrw*wswmwuw?wtwlw" >"tzqwrwpwtzswkwswowswowswowswowswowswowswnwswpwkwkwkwkwkwkwkwkwswowsxowswowswowswowswowswowrwpwswpxtxpxtxpxtxpxtxnwmwkwswowswowswowswowswowswowswowtxow" >"kwswowswowswowswowkwkwkwkwswowswowswowswowswowswowswlwnxtwowswowswowswowswnxmwswnx >wlw\\wkx`wnwrwoznwtwmxl| gybw^wtwozmwsxpzuxfxlx]wnw_wlxjyn{o{nykwnz" >"mymwkynymwkwewewjwjwrwswqwp{myozn{owizpwrwpwkwkwrwp{owqwqwsxnyowiyowrwozmwlzmwlwswqxsxnwm}qwjxlwGzozmymznynwjzowswowkwkwswowkwswswswswnynzmzowjymxlznx" >"lwswqwrwnwm{mwlwiwHxuxpzmxlymynwswmwnwrwozmxuxo{pwtxn{pzmykwmyo}p{owkyuynwnwrwmwly`w_w_wbwjzo{pwqwnwmwhw_z>zY}M|nwuw2wqwqwryrwqwqyowqwqwqwqwqwqwqwqwqw" >"qwqwqwr{qyo{o{o{o{owkwkwkwkznwsxnymymymymycwuynznznznzmwmwkwuynznznznznznznyuzrymymymymynwkwkwkwjynwswnymymymymybzmznznznznwlzmw hwHwlwSwTw <w8z ]" >"x tx Zxjwmx RwWw/wgw pw_ynwky=wCwmwaw\\w_wnw 1wIwlz 'wiwuwaw mw Pw swlwjw hw f| pyWx/wgw rxSw/wCwmwaw\\w_wnw 1w AwRx nw Pw txk" >"wlxm"; > > > const char *const data_font20x23 = >" 9q\\q^r_rnp`qnq`plp7q\\q^q_qmqbq\\q^q_qmqHqmp_q\\q^r_rnp`qnq7q\\q^q_qmq_q \"r " >" Mq^q^qnq`pnr`qnq`plp6q^q^pmp`qmqaq^q^pmp`qmqIpmq]q^q^qnq`pnr`qnq6q^q^pmp`qmq`q \"plp 'q 5qmq Vq " >" Xq [plp 3qYq_p^rnpLplp8qYq_qNqYq_q4rmpaqYq_q_rmp%qYq^pGq Irc|!pKp]raqjq`p HtNq_qmq\\plqbp_shpdscq[q^q[p [q]s_r`uau]rbv`tcxbua" >"t LsZucrav_udwcxdw`udqiqeq]q]qjreq]sksgrjqbtcv_tcvaud{eqiqgqfqgqjsjqlrjrhrirfzfs`q[sZqMqJqCqNsLq]q]q]q]q .scq]s \\sKt%r [s^raxdxat_qazgqlqlqctJqIqIq" >"LqHsOqiqOtaqmq\\uft nufu`sLs`t\\qKv<r\\rLrepirepitgpeq]r^r^r^r^r^r^{gudxdxdxdxdq]q]q]q]wcrjqbt`t`t`t`tLtlpgqiqeqiqeqiqeqiqgrireq[s_q[q_pnp_pnr`qnq`plp7q[" >"q_s`qmqcq[q_s`qmq]pkpbpmr`q[q_s`pmraqmq8q[q^pnp_qnq^qaq\\qnq !pnqd{!pJp^tdunucr _y dvOq_qmq\\plpap_pmpipdudq[p\\p_plplp _q^ubtawcw^rbvavdxcwcw Ou]yerawb" >"xeyexdwbxeqiqeq]q]qkrdq]sksgrjqdxewbxewcwe{eqiqfqhqfqjsjqkqjqfqiqezfs`q[s[sMpJqCqOtLq]q]q]q]q q 1tcq]t ^vaq_w&r \\u_raxdxcxcuczgqlqlqexMsJqJsMq[p^uPq" >"iqdq]uaqmq]qkqcq!qkqguaqmqNpkp\\p]pKtmp:p]plpKpfpfpfpcpipdq]r^r^r^r^r^r^{ixexdxdxdxdq]q]q]q]yerjqdxdxdxdxdxPwnpfqiqeqiqeqiqeqiqfqiqdq\\u_p[p^pnpKqnq_r5p" >"[p^pmp`qmqbp[p^pmp`qmq]tKp[p^pmpLqmq7p[p]pnp_qnq^p`q\\qnq5uauauauaucq`qhq4p]pKr_ueunucr `q \\rkpOq_qmq\\plpctbqmqkqerlpdq\\q\\q_qnpnq\\q%q^qkqcqnqapjrdpjr`" >"sbq]rkp^qcrkrerkq Oplr`sirgtbqkrdripeqjsfq]q]ripeqiqeq]q]qlrcq]sksgskqerjrfqkrdrjrfqkrerjp`q`qiqfqhqeqkskqiqlqdqkq\\qeq]qZq\\qmqNqKqCqOqIq5q]q q 1q`qZq" >" _rlqbtaqjp$q ^qkqatbr^q]rjrewdqhqgqlqlqfrjrOuKqKu8p_rlpOqkqcq]qFpgpcp\"pgpTpkp\\q^p\\p^qLump:p^pjpLpgpepgpbpjpPt`t`t`t`t`qnq_qnqcripeq]q]q]q]q]q]q]q]qj" >"sfskqerjrfrjrfrjrfrjrfrjrRrjrfqiqeqiqeqiqeqiqeqkqcvbrlq`q]q_plp Iq]q_qmqNq]q_qmqKtIq]q_qmq ^q]q^plpKq`q mqkqcqkqcqkqcqkqcqkqdq`qhq5q^qLt`ueunudtasbqip" >"`q`pipcq [qIq_qmq`{gvcqmqkpdq_q\\q\\q]rZq%q_rkraqZq]qaqnqbq]qXqcqiqeqiq1pSpXq`qfrhqnqbqjqdq]qhqfq]q]q]qiqeq]q]qmrbq]qnqmqnqgskqeqhqfqjqdqhqfqjqeqYq`qiq" >"frjreqkskqirnrdrmr]qdq]qZq]qkq)qCqOqIq5q]q q 1q`qZq _qkq_qaq mq ^qkqaqnqar_q]qhqfrnqnreqhqgqlqlqfqhqPwLqLw9p_q_phqdqkqcq]qGplslpiu#pmtlpUpkp\\q_q_r8u" >"mp:p^pjpLpgpepgperipcq^qnq`qnq`qnq`qnq`qnq`qnq`qmqcq]q]q]q]q]q]q]q]q]qhqfskqeqhqfqhqfqhqfqhqfqhqdphpfqirfqiqeqiqeqiqeqiqermrcwcqkq [q 3qZp Oq nqmqm" >"qeqiqeqiqeqiqeqiqeq_piq4q^pLvatd|evdvcqipasaqkqdq [qHq_qmq`{hrnpmpcqmqlpcq_q\\pZp]rZq%q_qiqaqZq]qapmqbq^qWqcqiqeqiqdq]qUsSs[qaqdqhqnqbqjqeq\\qgqgq]q^q\\" >"qiqeq]q]qnraq]qnqmqnqgqnqlqfqfqgqjqeqfqgqjqeqYq`qiqeqjqdqlqmqlqhqnqbqmq]rdq]qZq^pgp=taqns`s`snqatdv_snqcqnsbq]q]qkqcq]qnsmshqns`saqnsasnqcqnr`tbvaqjqe" >"qiqdqkqkqjrkreqiqdw`q`qZq#tnreqkq^qatauaqnsdqiq`raqjqdqiqdpmrcxdqmqmqatbxfyeqiqbqnq`r`q^qfqhrmqmrfqhqgqlqlqgqfqep[pnqnp[p`q`pipbpnqnpNq]taq^qnqnqbqmqb" >"q\\qIqmpkpmqkqkp$qmpkpmqVqmq\\q`q[pLqjqeump:p^pjpLphpdphpapkpbq^qnq`qnq`qnq`qnq`qnq`qnq`qmqdq\\q]q]q]q]q]q]q]q]qgqgqnqlqfqfqhqfqhqfqhqfqhqfqfrjrhqiqnqgqi" >"qeqiqeqiqeqiqdqmqbqkrdqmsbt`t`t`t`t`t`tlsfs_t`t`t`tbq]q]q]q[tbqns`s_s_s_s_s\\q`smpdqjqdqjqdqjqdqjqeqiqdqnscqiq;qlqlqgqgqgqnqmqnqgqjqnqgqgqfq_qjq<{fpjpL" >"vatd|fxeqkqdqipasaqkqdp \\yNqGplqeqmp`qmqmqcrLqZq`qnpnq\\q%q_qiqaqZq^rbqmqbubqms^qaqkqdqiqdq]qXuf{fu_q`qlrnqlqjqlqcqkreq\\qgqgq]q^q\\qiqeq]q]t`q]qnqmqnqg" >"qnqlqfqfqgqkreqfqgqkres[q`qiqeqjqdqlqmqlqhs`s]rcq]qZq#vbwcvbwcwev`wcwcq]q]qlqbq]vnthwcwcwcwcubwcvaqjqdqkqcqkqkqiqkqdqiqdw`q`qZq7smsfxdqlr^qavdvawdqkq_" >"raqjqdpgpeqntdxdqmqmqcwdyfyeqiqcqlq`raq^qfqhqlqlqfqhqgqlqlqgqfqfrZqZraqarkraqLq^vbq^wbqmqbq]tKpmpfpkpjp_plp9plpkplpUs[qaqZpLqjqeump:p^pjpaplp_piqdpiqa" >"plqbq_qlqbqlqbqlqbqlqbqlqbqlqbrmqdq\\q]q]q]q]q]q]q]q]qgqgqnqlqfqfqhqfqhqfqhqfqhqfqerlrgqjqmqgqiqeqiqeqiqeqiqcsaqjqdqnq`vbvbvbvbvbvbvnuivbwcwcwcwcq]q]q]" >"q]wcwcwcwcwcwcwOwcqjqdqjqdqjqdqjqeqiqdwdqiq;pkqkpgpepgpmumpgpjrmpgpepfq_qkq;{hrkpLxdxf|fxepipdqipas`pkpcp ZqHqGplpdt_pmplpmshsMqZqaplplp]q&q^qiqaq[qa" >"t`plqbvcx_q`ucrkr:uc{cucq`qlvlqjqlqcwdq\\qgqgxdvcqjtfyeq]q]s_q]qmsmqgqmqmqfqfqgwdqfqgwcv_q`qiqdqlqbqmqmqmqfr`s]qbq\\q[q#pjqcrlrdqkpcrlrcqkrdq^rlrcrlrdq]" >"q]qmqaq]rlrlqirlrdqkqcrlrerlrcr_qjpbq]qjqdqkqcqlslqhqmqbqkq^q_q`qZq_tjpSqmsmpgrlsdqnsaqmqbqkqdq\\rlrdqlq_raqjqeqgqgrnqnrdqlqcqmqmqcqkqerkq`qaycqlq_rbq^" >"qfqhqlqlqfqhqgqlqlqgqnvnqgrYqYrbqbrirbqLq_rnpmpdwaqmqcydq^qlqLpmpfpkpkq`plpa{RpltkpB{gpXpLqjqdtmpcqHp]plp_plp`pipjpipipmsfplpjphr_qlqbqlqbqlqbqlqbqlqb" >"qlqbqlxkq\\xdxdxdxdq]q]q]q_vjqgqmqmqfqfqhqfqhqfqhqfqhqfqdrnrfqkqlqgqiqeqiqeqiqeqiqcsaqjqdqnq`pjqcpjqcpjqcpjqcpjqcpjqcpjrlrjqkpbqkrdqkrdqkrdqkrdq]q]q]q]" >"qkrdrlrdqkqcqkqcqkqcqkqcqkqOqkqcqjqdqjqdqjqdqjqdqkqcrlrdqkq:pnwnpgpnwnpgplslpgpkrlpgpkqkpfq^qlq6qaqlpMzfzfzfzgqipdqipbqmp`qmqc| fqHqHqlpcuasmplpmpiul" >"qSqZq]p^{+q^qiqaq\\q`ubqlqbpkrdrkrarawcx<tEteq`qlqlqlqjqlqcwdq\\qgqgxdvcqjtfyeq]q]t`q]qmsmqgqmqmqfqfqgvcqfqgv_t`q`qiqdqlqbqmqmqmqgs_q]qaq\\q[q\"vcqjqeq]qj" >"qdqiqdq^qjqcqjqdq]q]qnq`q]qkqkqiqjqeqiqdqjqeqjqcq^s^q]qjqdqkqbqmsmqgqmqbqkq_qas_qYsc{Spkqkphqkrcqntcvcqiqeq\\qjqdqmr`tbqjqeqgqgqmqmqdqlqcqmqmqdqiqfqiqa" >"qaycqlq_qaq^qfqhqlqlqfqhqfqmqmqfqnvnqh}cqc}cqc}cqLq_qmpawbqkqasaq^qkqMpmpfpjsnpaplp`{RplpmqkpB{huatKqjqbrmpcqJt^r]plpctlpjqktlpmpkpltlpjqhq^qlqbqlqbql" >"qbqlqbqlqcrlrcqlxkq\\xdxdxdxdq]q]q]q_vjqgqmqmqfqfqhqfqhqfqhqfqhqfqcteqlqkqgqiqeqiqeqiqeqiqbq`qkrdqmravbvbvbvbvbvbvjqkq]qiqeqiqeqiqeqiqdq]q]q]q^qiqdqjqe" >"qiqeqiqeqiqeqiqeqiqd{hqkpnqdqjqdqjqdqjqdqjqdqkqcqjqdqkq:pnwnpgpnwnpgplslpgplrkpgpkqkpfq^qlq6qaqmqMzg|fxdxfqipdqipbqmqaqmqcp \\wLqK{dt]qmqmqkrmrnrSqZqK" >"{TtKq^qiqaq]r\\rdqkq\\qdqiqaqarkrcsmq<tEtfq_qlqlqlqkqjqdqjqeq\\qgqgq]q^qgqfqiqeq]q]qnraq]qmsmqgqlqnqfqfqgq^qfqgqkq]raq`qiqdqlqbqnqkqnqgt`q^raq\\q[q#wcqjqe" >"q]qjqdydq^qjqcqjqdq]q]s_q]qkqkqiqjqeqiqdqjqeqjqcq]uaq]qjqcqmqaqmpmpmqfs`qmq_ras_qYscpjtRpkqkphqkrcqkreqlrcqiqcr_qjqdqmq_qnqbqjqeqlqlqgqmqmqdqlqcqmqmqd" >"qiqfqiqaqaqiqdqjqaq`q^qfqhqlqlqfqhqfrnqnrfqfqh}cqc}cqc}cqLq_qmp_q^qkq`qMrlqMpmpfpWplpUqRplplqlp=q&qjq`pmp _plp]qkpnpdqhpeqkpnpiq^qjqdqjqdqjqdqjqdqjqdq" >"jqdqkqdq\\q]q]q]q]q]q]q]q]qgqgqlqnqfqfqhqfqhqfqhqfqhqfqbrdqmqjqgqiqeqiqeqiqeqiqbq`wcqlrcwcwcwcwcwcwc~kq]yeyeyeydq]q]q]q^qiqdqjqeqiqeqiqeqiqeqiqeqiqd{hq" >"lpmqdqjqdqjqdqjqdqjqcqmqbqjqcqmq9pkqkpgpepgpmumpgpmrjpgpepfq]pmq:{epmpLzg|evbveqipdqipbqmqaqmpbq [qHqK{cpmq^plqmqkqktRqZqFqOtKq^qiqaq^rZqdy^qdqiqaqaq" >"iq]q:uc{cudq_qlqlqmqjxdqiqfq\\qgqgq]q^qgqfqiqeq]q]qmrbq]qlqlqgqlqnqfqfqgq^qfqgqkr]qaq`qiqcqnqaqnqkqnqhrnq`q_r`q\\q[q$qjqcqjqeq]qjqdydq^qjqcqjqdq]q]s_q]q" >"kqkqiqjqeqiqdqjqeqjqcqZsbq]qjqcqmqaqnqmqnqfs`qmq`r^r`qZr9pkqkphqkrcqjqeqkqcqiqet_qjqcqnq`rnqbqjqeqlqlqgqmqmqdqlqcqmqmqdqiqfqiqaqaqiqdqjqbr`q]qhqgrmqmr" >"fqhqeweqfqgrYqYrdpnqnpdrirdpnqnpNq_qmp_q]qmqcyPrmqMqmpkpmqkvaplpVqRqmpkpmq=q&qjq`pmp(v_plp\\pkpmpdphqepkpmpjq]xdxdxdxdxdxdwdq\\q]q]q]q]q]q]q]q]qgqgqlqnq" >"fqfqhqfqhqfqhqfqhqfqcteqnqiqgqiqeqiqeqiqeqiqbq`vbqjqeqjqdqjqdqjqdqjqdqjqdqjqdqjxkq]yeyeyeydq]q]q]q^qiqdqjqeqiqeqiqeqiqeqiqeqiqQqmplqdqjqdqjqdqjqdqjqcq" >"mqbqjqcqmq9qlqlqgqgqgqnqmqnqgqnqjqgqgqfq]qnq:{eqnpLzg|dt`tdqipcpipbpkp`sbq Zq plq`pmq_pkqmqkqjrQqZqFq'q]rkraq_rYqdy^qdqiqbq`qiq^q6uf{fuaq_qlyjzeqiqeq" >"]qhqfq]q]qhqfqiqeq]q]qlrcq]qlqlqgqkseqhqfq]qhqfqjq]qaq`qiqcqnq`skshrmraq_q_q[q\\q$qjqcqjqeq]qjqdq\\q^qjqcqjqdq]q]qnq`q]qkqkqiqjqeqiqdqjqeqjqcqXqbq]qjqcq" >"mqaqnqmqnqgqmq`s_q\\q`qZq7pmpnqmpgqkrcqjqeqkpbqiqeq\\qjqcs_qlqcqjqeqlqlqgqmqmqdqlqcqmqmqdqiqfqiqaq`qkqdrjrdr_q]riqfrnqnreqhqducqhqerZqZrdwdrkrdwOq_qmp_q" >"^w`q`q[sKplslpTplpWqQpmpkqnp<q&qjq`pmp aplp\\pkplpephqepkplpjq^zfzfzfzfzfzfxcq]q]q]q]q]q]q]q]q]qhqfqkseqhqfqhqfqhqfqhqfqhqcrnreriqfqiqeqiqeqiqeqiqbq`q]" >"qjqeqjqdqjqdqjqdqjqdqjqdqjqdqjqdq]q]q]q]q\\q]q]q]q^qiqdqjqeqiqeqiqeqiqeqiqeqiqQqnpkqdqjqdqjqdqjqdqjqbsaqjqbs7qmqmqeqiqeqiqeqiqeqiqeq]qnp7q]rJrnpnresnpn" >"sct_rcqipcqkqcqkqasaq [rkp&plpcplpnr`qkqmqkrltRqZqFq'q\\qkq`q`r_pjr^qcpjrcqkrbq`rkrdpkr3sSsLrlrnrhqhqeqjreripeqjsfq]q]riqfqiqeq]q]qkrdq]qgqgqkserjrfq]" >"rjrfqjrfpiraq_qkqbt`skshqkqaq`q^q[q\\q$qkrcrlrdqkpcrlrcqipdq^rlrcqjqdq]q]qmqaq]qkqkqiqjqdqkqcrlrerlrcq^pjqbq]rlrbs_rkrfqmq`s`r\\q`qZq6qlrfrmscrlrepkqbrk" >"qdqkpaqjqcs`rlqcrlrernsnrgrnqnrdqlqcrnqnrdrkqdqkraq`qkqdqhqer^q\\rkqdwdqhqbqarjrdpYqYpbubpipbuNq_rnpmpbq^qnqnq`q`qZqIpgpRplp7pgp;q&rlr`pmp bplp[pkufpiq" >"dpkukrlpcqhqfqhqfqhqfqhqfqhqfqhqfqjqcripeq]q]q]q]q]q]q]q]qjsfqkserjrfrjrfrjrfrjrfrjrdrlrfrjreqkqcqkqcqkqcqkqaq`q]qnplqeqkrdqkrdqkrdqkrdqkrdqkrdqksjpjq" >"kpbqipdqipdqipdqipdq]q]q]q]qkqcqjqdqkqcqkqcqkqcqkqcqkq^qbqkqcrlrdrlrdrlrdrlrbsarlrbs6qkqcqkqcqkqcqkqcqkqdq\\r7q\\qFp\\p]r^rcqipcvbqkqas`r \\vOqIqlpcw_pip" >"mpivnrRpZpEqbqIq^q[ubwdxdw]qcwbwaq_wcvbq]qRpSp[q^q^qhqexcxeyexdq\\xeqiqeq]q]qjrexdqgqgqjrdxeq\\xeqiqfx`q_war_ririqiqbqazfq[q\\q$xcwcvbwcxdq]wcqjqdq]q]qlq" >"bq]qkqkqiqjqdwcwcwcq^wbu`wbs_rkrgqkq`q`w`q`qZq$yewdqmq`wdvaqjqbr`qkqcyeyewcqlsdwcxdw`sauczexdq^umteucqhqbq`xLqJsKsMq^vdxdpgpaq`qYqIqkq bqkq?{+yapmp Jp" >"fpfpipcpfpiucqhqfqhqfqhqfqhqfqhqfqhqfqjxixexdxdxdxdq]q]q]q]yeqjrdxdxdxdxdxdrjrgpnwdwcwcwcwaq`q]qnuexdxdxdxdxdxdvnwjvbxdxdxdxdq]q]q]q]wcqjqdwcwcwcwcw^q" >"bwbwcwcwcwaq`w`q4uauauauaucq\\r7p[qFp\\p\\p\\pbqipasapip`q^y ctNqIqmqbu_phsgslrSq\\qEqbqIq^qZsawdxcu\\qbt^taq]uataq]q q]qgpiqfqfw`udwcxdqZudqiqeq]q]qirfxdq" >"gqgqjrbtcqZtcqirfv_q]s_r_rirjrircqazfq[q\\q#tnqcqns`s`snqaucq\\snqcqjqdq]q]qkqcq]qkqkqiqjqbsaqnsasnqcq]t_t_snqaq^rkrhrkraq`w`q`qZq#smrevbs^t`s`qjqbq`qiq" >"dqnrmqdrmrcubqkrcubqntat^r`sc|fxdq^umtcqaqhqbq^tJqIqIqLq]tcxLq`qYqHu `u>{+qnrmqapmp Kpepgpiuhpephscqfqhqfqhqfqhqfqhqfqhqfqhqixgudxdxdxdxdq]q]q]q]wcqjr" >"bt`t`t`t`taphpgplt`s_s_s_s_q`q]qmsctnqctnqctnqctnqctnqctnqbsktgs_uauauaucq]q]q]q[saqjqbs_s_s_s_sNpms_snqbsnqbsnqbsnqaq`qns_q !p Zp jp#q\\q6q7q l" >"q [sjq Qq -q OqZq]q Cq;q HqWq $rIq`qZq _q iqbqKqFqIq`q hp$q]u JqYpmpLp .p jp ]p Xr`q[r !p Tp\"p\\p6q6q mq Yx Qr -r Ps\\q_s" >" Ipkq:q HqWq $qHq`qZq _q iqbqKqFqIq`q hp$q]t IqYpmpLq /q kq Fq_q[q #s Tp\"q^q6p 1p Vu Rs YsJsMy &v<s HqWq &sHtcq]t _q i" >"qbqKqFqIq`q hp$q 2q2q /q kq Hs_q]s \"q (r Xy %t;r GqWq &rFscq]s ^q iqbqKqFqIq`q ,q4r 0r lr G" >"r^q *q kr i"; > > > const char *const data_font47x53 = >" " >" 9])]2_2]T\\8^U^3] E])]2`4^U^>])]2_4^U^ 6^T\\5])]1_2]T\\8^U^ K])]2`4^V^3] " >" U]*\\2a4`V\\8^U^5a F]*\\1\\X\\4^U^=]*\\" >"2a5^U^ 7aV\\4]*\\1a4`V\\8^U^ J]*\\1\\X\\4^V^3\\ " >" S],\\1\\W\\5g8^U^6c F],\\1\\V\\5^U^<],\\2]W]6^U^ 8h3],\\0\\W\\5g8^U^ I],\\1\\V\\5^V" >"^4\\ ;] " >" :\\-]2\\U\\6\\V`7^U^7]U] F\\-]2\\T\\6^U^;\\-]3]U]7^U^ 8\\Va1\\-]1\\U\\6\\V`7^U^ H\\-]2\\T\\6^V^5] =a " >" J] " >" N\\/]2\\S\\7\\T]6^U^7\\S\\ E\\/]2\\R\\7^U^:\\/]3]S]8^U^ 8\\T^/\\/]1\\S\\7\\T]6^U^ G\\/]2\\R\\7^V^6] =c L^ " >" *^ U` O^ )\\S\\ " >" !^$^3\\ E]U\\ K^$^4^ G^$^4] J^$^3\\ #^$^3\\ 4^ B[ " >"&^ Xe S^ (\\S\\ )Z Q^&^3^2]S\\ A\\S\\ K^&^3^ F^&^4_ >]S" >"\\9^&^3^2]S\\ W^&^3^ 6^ Q] M[ ?` ![1^H]?` =]4](\\ %` >b4c Bb ?`2a .a Ib Pb Aa <a @b Fb =b F^ :] '] Da A" >"].].].].] <_:]._ Xh ?c W^ @` La Pa Sa Va5^U^ @` \"f4_ >`0`*^ $^.` <^F]F^F]G`G] F\\S\\ ;b %a2a2a2a2a <bR" >"\\ D`4^(^3`4`U\\8^V^6\\S\\ J^(^3`4^U^@^(^3_4^U^/^/`U\\8^(^3`4`U\\8^V^ K^(^3`4^V^1^9]+^V^ ?` O\\ D\\6]M] We D]1]T] 9[3bJ\\@e<])]2])\\ " >" T]0d3_7h9i/_;k5f?n:f7e 3g :_8i3h@h9n?l5iB]H]C].].]J^B].`I`H_J]<g?g1g?g4hAuB]H]G]C]F]K_K]S^J^F^G^CrBb7]*b'_ D] :] '] Fc A].].].].] >a:]" >".a !^T_ Bg ` Dd2_8n?m7g3]:rD]P]P]@g <] 8] 8] B] 3e J^K^ If7^U^+b@d Fb@f5a Ad4e-] :f Ra0d AaF\\HaF\\HeJ\\?]._0_0_0_0_2\\U\\0tHh@n?n?n?n?].].].]" >"-h:_J]<g8g8g8g8g BhV]G]H]C]H]C]H]C]H]G^G^B]*d5](]2\\X\\4aW]8^V^6\\S\\ I](]3]X]5^U^?](]3\\W\\5^U^.^R[9aW]7](]2\\X\\4aW]8^V^ J](]2\\X\\4^V^1]8]+^V^ ?a>w " >"P[ 9[/a:aQa7[ Wl \"h E]1]T]+\\R\\;[4dL]Ag=])]2])\\ U^1f8c8k;j1`;k7h?n;h9g 5i*b:_8k6kBl=n?l7mD]H]C].].]L_A].`I`H`K]>kAj6kAj9kBuB]H]F]E]E^L_L^" >"R^L^D^I^BrBb7^+b(a D] ;] '] Gd A].].].].] ;] (b:].b #^Q] Dj !a Ff3_8n?m8i4]:rD]P]P]Bk ?_ 9] 9_ C]&[0f I]K]=]0g7^U^-fC\\S] IfBf6c B[" >"S]5[S].] <i R\\W\\1]T] B\\W\\G]H\\W\\G]H[S]K]?]._0_0_0_0_2c1uIkBn?n?n?n?].].].]-l>`K]>k<k<k<k<k EoF]H]C]H]C]H]C]H]F^I^A],h6]*]2\\V\\6]Wa7^V^6\\S\\ H]*]2\\V]6^U" >"^>]*]3]W]6^U^._V_;]Wa5]*]2\\V\\6]Wa7^V^ I]*]2\\V\\5^V^2]7]+^V^ @]W\\=v P[ 9\\1c<cSd:] \"o #_S^ F]1]T],]S];[5^V^N]A_T]=]*]0]*\\ U]1^T^;e8`S_<" >"^R_2`;k8^R]?n<_T_;^S^ 6^S_.i>_8m:`R`Cn?n?l9`QaE]H]C].].]M_@].aKaH`K]?`S`Bk8`S`Bk;_R_BuB]H]F]E]D]MaM]P]L]B^K^ArB]1]&])c D] <] '] G] :].].].].] " >";] (^6]*^ #]P^ E^P\\ V^ H^T^4_8n?m:`S`6]:rD]P]P]C`S` Aa :] :a D]&[1^S\\ I^M^=]0^R[7^U^/^R^EZO\\ L^R^ N]U] :],\\0] <j M\\2]R] >\\H]B\\H]=\\M]>" >"]._0_0_0_0_0_/uK`R`Cn?n?n?n?].].].]-n@`K]?`S`>`S`>`S`>`S`>`S` H`ScE]H]C]H]C]H]C]H]E^K^@],^T^5],]1\\V\\6\\U`7^V^6]U\\ F],]2\\T\\6^U^=],]2\\U\\6^U^-e9\\U`4],]1\\" >"V\\6\\U`7^V^ H],]1\\V\\5^V^3]6]+^V^ B`1`1`1`1`6]W]>u P[ 9]2e>eUf;^ %q $^O\\ F]1]T],]S];[5]T]N\\@]P[=]*]0]2ZR\\RZ $]2]P]<_W]8]N]<ZL^4a;]+]MZ/]<^P" >"^=^Q^ 7\\O]1nAa9]N_<_M]C]NaA].]+_L^E]H]C].].]N_?].aKaHaL]@^M^C]P_:^M^C]P_=^M\\6]6]H]F^G^D]MaM]P^N^B^K^-^B]1]&]*e D] =] '] H] 9].].].].] ;] )" >"^5])^ %^O]8^3]LZ U] I^R^6a9_0]+^M^7]:]H]D]P]P]D^M^ Cc ;] ;c E]&[2^PZ H]M]<]1^-^U^1]L];[ N]L] Q]S] :\\,\\1] <dU\\ M\\2\\P\\ >\\H\\A\\H\\<\\M\\=]/a2a2a" >"2a2a1_/]V];_M]C].].].].].].].]-]ObBaL]@^M^@^M^@^M^@^M^@^M^ J^N`D]H]C]H]C]H]C]H]E^K^@]-^Q]5].]1\\T\\7\\S]6^V^5c E].]2]S\\7^U^<].]2\\S\\7^U^,a6\\S]2].]1\\T\\7\\S" >"]6^V^ G].]1\\T\\6^V^4]5]+^V^ De6e6e6e6e9\\U\\>u P[ :_3f@gVf<_ &r $]M[ F]1]T],\\R]>d<^T^P]A^OZ=]+].]4]T\\T] &^3^P^=[S]8[K].]4\\X];],]!]<]N]>^O^ " >" 8ZM^3`P`Ba9]M^=^J\\C]K_B].],^H\\E]H]C].].]O_>].aKaHaL]A^K^D]N^<^K^D]N^>]JZ6]6]H]E]G]C]MaM]O^P^@^M^-^A]1]&]+_W_ D] >] '] H] 9] B].] ;] )]4](]" >" %]N]:c6] G] J^P^7a8_1],^K^;c=]H]D]P]P]E^K^ Ee <] <e F]&[2] =^O^<]1] 0\\H\\<\\ P\\H\\ R\\Q\\+]3\\,\\2] <eU\\ M\\3]P\\ >\\I]A\\I]<\\N]=]/a2a2a2a2a2a1]U]<" >"^J\\C].].].].].].].]-]K_CaL]A^K^B^K^B^K^B^K^B^K^ K]K^D]H]C]H]C]H]C]H]D^M^?]-]P]4]0]1\\R\\ Ha C]0]2]R] E]0]2\\Q\\ 9c 9]0]1\\R\\ !]0]1\\R\\ ?]4] Di:i:i:i:i" >";\\6]G] P\\ :`5g@gWh>a (_ J]KZ F]1]T],\\R\\?h>]R]P\\@]1]+].]3^V\\V^.] T]2]N]5]8ZJ]-]6]X];]-]!^=]L]?]M] *]5_J_Ec:]L^>]H[C]I^C].],]F[E]H]C].].]" >"P_=].]X]M]X]HbM]A]I]D]M]<]I]D]M]?]%]6]H]E]G]C^NaN^N]Q^>^O^-^@]0]'],_U_ &] '] H] 9] B].] ;] )]4](] %]N]:d7] F] K]N]8c8^1],]I]>i@]H" >"]D]P]P]E]I] Fg =] =g G]&[2] <]O];]1] 1\\F\\=\\ Q\\F\\ S\\Q\\+]3\\.] IeU\\ M\\3\\N\\ ?\\I\\@\\I\\=]M\\<]0c4c4c4c4c3a1]U]<]H[C].].].].].].].]-]J_DbM]A]I]B]I]B]I]B]I]" >"B]I] L]J_E]H]C]H]C]H]C]H]C^O^>].]N] .] '`X_ I] FbWa=bWa=bWa=bWa=bWa<\\6^I^ ?Z2[ :a5gAiXh?c *^ H] 7]1]T]-]S]Aj>]R]Q]@]1]," >"],\\1^X\\X^,] T]3]L]6]'].]7]W];]-]!]<]L]?]M^ +]6^F^F]W]:]K]?]FZC]H^D].]-]DZE]H]C].].]Q_<].]X]M]X]H]X]M]B]G]E]M^>]G]E]M^@]%]6]H]E^I^B]O^X]O]M^R^=]O^" >"-^@]0]']-_S_ '] '] H] 9] B].] ;] )]4](] %]N]:e8_ H] L]M]8]W]7^2]-]G]AmB]H]D]P]P]F]G] Hi >] >i J[3] ;^Q^;]1] 2\\RbT\\Ge R\\VdR\\ T\\" >"Q\\+]4\\2a IfU\\ M\\3\\N\\ ?\\J\\?\\J\\AaM\\ G]W]4]W]4]W]4]W]4]W]4c3^U]=]FZC].].].].].].].]-]H]D]X]M]B]G]D]G]D]G]D]G]D]G]A[H[B]J`E]H]C]H]C]H]C]H]B]O^>g8]N] " >" 1]T_ 3[ 9] G_O^?_O^?_O^?_O^?_O^=\\5]I^ @\\3[ ;c6gAy?d7`8]L]7^7]L]>^ H] 6]1]T]-]S]B_W[U]>]R]R]?]1],],]0d*] T]3]L]6]'].]7\\V];]" >".] ]<]L]@]K] 7Z PZ X]7^D^G]W]:]K]?]/]G]D].]-]/]H]C].].]R_;].]X^O^X]H]X^N]B]G]E]L]>]G]E]L]@]%]6]H]D]I]A]O]W]O]L^T^<^Q^-^?]0]'].^O^ Sb7]U`2b4`U]8a8])`" >"7]T_ M].]%_O_@_2`0`3`/_3c9] )]4](] N_6]N]3^7a/c0_ <^ D[U^ Ga N]L]9]W]6^3]-]G]B`W]W`C]H]D]P]P]F]G] I_X]X_ ?] ?_X]X_ Nb7]2ZFZ=]Q]:]0] 3[SfU[I" >"g R[UfS[ T\\Q\\+]5]2a IfU\\ M\\3\\N\\ ?\\K]?\\K]AaN] G]W]4]W]4]W]4]W]4]W]4]W]3]T]=]/].].].].].].].]-]G]E]X^N]B]G]D]G]D]G]D]G]D]G]B]J]C]KbF]H]C]H]C]H]C]H]B" >"^Q^=j;]P_9b3b3b3b3b3b3bN`Bb3a2a2a2a V_2_2`1`1`1`1` ;aU] :]U` S^T]U^A^L^A^L^A^L^A^L^?]5]I] @^5\\ <e7gAy@f;e:]L]8`8^N^?^ G] 6]1]T]-\\R\\A]U[" >"RZ>]R]R\\>]1],],].`(] U^3]L]6]'].]8]V];].]!^<]L]@]K] :] P]#^8^A]I^W^;]K]@].]G^E].].].]H]C].].]S_:].]W]O]W]H]W]N]C]E]F]L]?]E]F]L]@]%]6]H]D]J^A]O]W]O]" >"L^U^:^S^-^>]0^(]/^M^ Wh:]Wd6f8dW]:e>h2dW]?]Vd<].].]O_>].]WdScK]Vd8f;]Wd7dW]?]Wa6h>h6]L]B]I]A]P`P]K^L^B^K^@l4]4](] PdU]A]N]2^8e5g;]Vd?^J^8]6]L] E]V`" >">pA]S]S]:e6kDo>]L]:^W^6^4].]E]D_U]U_D]H]D]P]P]G]E] K_W]W_ @] @_W]W_ Qf9]3\\H\\>^S^:]0_ 6[ThT[K]Q\\ S[T\\R]S[ U]S]+]6],] ?]L]@fU\\ M\\3\\N\\ ?\\K\\>\\K\\;]O\\ G" >"^W^6^W^6^W^6^W^6^W^5]W]4^T]>].].].].].].].].]-]G^F]W]N]C]E]F]E]F]E]F]E]F]E]D_L_E]K]W]F]H]C]H]C]H]C]H]A^S^<k<]Ra<h9h9h9h9h9h9hTeFf7e6e6e6e;].].].]\"^;]V" >"d8f7f7f7f7f/^6eX]@]L]?]L]?]L]?]L]B^K^?]Wd>^K^ O]S]S]B]I]B]I]B]I]B]I]@]5^K^ @]4[ ;f8gAyAg<h<]L]8`7]N]>] F] 6]1]T]-\\R\\B]T[6]R]S]>^2]-]*\\.`(] U" >"]2]L]6]'].]9]U];].]!];]L]@]K] =` P`'^7]?\\I]U];]K]@].]F]E].].].]H]C].].]T_9].]W]O]W]H]W^O]C]E]F]L]?]E]F]L]@]%]6]H]C]K]@^P]W]P^K^V^9]S]-^=]/](]0^K^ Xi" >";]Xf9h9fX]<h?h3fX]?]Xg=].].]P_=].]XfVfL]Xg:h<]Xf9fX]?]Xb7i>h6]L]A]K]@^Q`Q^J^N^@]K]?l4]4](] QfW^A]O^1]6f9h;]Xg@_K]7]6]L]=]G]C^Wc@pA]S]S]<h9mDo>]L]:]U" >"]5^5].]E]E^S]S^E]H]D]P]P]G]E]@Z+]V]V^-Z4]5ZKZ:]V]V^ Sh9]4^J^>]S]9]._ 8[U_Q[T[L]P\\ S[T\\Q]T[ T]U]*]7]*] @]L]@fU\\ M\\3\\N\\ ?\\L]>\\L]:]Q]:]1]U]6]U]6]U]6]" >"U]6]U]6^W^5]S]>].].].].].].].].]-]F]F]W^O]C]E]F]E]F]E]F]E]F]E]C_N_D]L^W]F]H]C]H]C]H]C]H]@]S];]P_=]S^8i:i:i:i:i:i:iVgIh9h9h9h9h<].].].]'d<]Xg:h9h9h9h9h" >"0^8k?]L]?]L]?]L]?]L]A]K]>]Xf>]K] O]R]R]D]G]D]VZOZV]D]KZV]D]G]A]4]K] @]3[ <g7fAyBi>j=]L]8`7]N]?] F^ 6]1]T]5uI]T[6]R]S\\<^3]-]*]1d*] U]3]J]7]']" >".]9\\T];].\\Ua-^;]L]@]K^?].] Uc Pc+_8]>]J]U];]K]@].]F]E].].].]H]C].].]U_8].]W^Q^W]H]V]O]C]E]F]L]?]E]F]L]@^&]6]H]C]K]?]Q^V]Q]I^X^8^U^.^<]/](]1^I^ ]R_<aT" >"_;_R\\:^Tb=_S^@h4_Ub?bT^=].].]Q_<].aT_X]T^LbT^;_T_=aT_;^Tb?aTZ8_R]>h6]L]A]K]?]Q`Q]H^P^?]K]?l4]4](] R^U^W]@]O]0^7g;_S];bT^@`L]8_7]L]>]E]E^W]V]@pA]S]S]" >"=_T_<oDo?]K^;]U]5_6].\\D]E]R]R]E]H]D]P]P]G]E]A\\+[U]U\\,\\6]6\\L\\;[U]U\\ S_W[V\\9]3^V`V^=^U^9]/a :[T]G[M\\O\\1ZQZ M[S\\P\\S[ Ud)]8](\\ @]L]@fU\\ M\\3\\N\\9ZQZ0\\L\\=" >"\\L\\8\\Q\\9]1]U]6]U]6]U]6]U]6]U]6]U]5]S]>].].].].].].].].]-]F]F]V]O]C]E]F]E]F]E]F]E]F]E]B_P_C]L]V^G]H]C]H]C]H]C]H]@^U^;]N^>]T]6]R_;]R_;]R_;]R_;]R_;]R_;]R" >"_X_T^K_R\\:_S^;_S^;_S^;_S^=].].].]*h=bT^;_T_;_T_;_T_;_T_;_T_1^9_T`>]L]?]L]?]L]?]L]A]K]>aT_?]K] P]Q]R]E]F]E]V\\Q\\W]E]K\\W]E]F]A]4^L] A^@ZN\\ =i8e@yCk?^R^" >"=]L]9b8]O^?] Im B]1]T]5uI]T[6]S^T]<^3]-]*]3^X\\X^,] V^3]J]7](^/]9]T];e7]We/]9]N]?]K^?].] Wd Nd._8]O`U\\T\\K]S]<]L^A]-]F^F].]/]-]H]C].].]V_7].]V]Q" >"]V]H]V^P]D]C]G]L]@]C]G]L]?^']6]H]C^M^?]Q]U]Q]Ic6^W^._<]/^)]2^G^ !ZM^=`Q^=^NZ;^Q`>^P^=].^Q`?`Q^>].].]R_;].`R^X\\R^M`Q^=^P^>`Q^=^Q`?`1]MZ;].]L]A^M^?]Q`Q]" >"G^R^>^M^1^4]4](] D]P^A]R^X]@]P^/]9^Vb=^NZ;`Q^AaN^8_7]L]>]E]F^V]U]>]P]>]S]S]>^P^>`T`7]6]J]<]S]5^6]/]C]G]Q]Q]F]H]D]P]P]H]C]C^&]TZ,^7]7^N^6]TZ H]/^U[TZ9" >"]2n;]U]8]0d <[U]F[M\\P]2[R[ M[S\\P\\S[ Tb(]9]'\\ @]L]@fU\\ M\\3]P]9[R[1\\M\\<\\M\\7\\R\\8]2]S]8]S]8]S]8]S]8]S]7]U]6]R]?]-].].].].].].].]-]F]F]V^P]D]C]H]C]H]C]H]" >"C]H]C]B_R_C]L]T]G]H]C]H]C]H]C]H]?^W^:]M]>]U^6ZM^<ZM^<ZM^<ZM^<ZM^<ZM^<ZMbP]M^NZ;^P^=^P^=^P^=^P^>].].].]+i=`Q^=^P^=^P^=^P^=^P^=^P^2^:^P^>]L]?]L]?]L]?]L]" >"A^M^>`Q^@^M^ P]Q]Q]F]E]F]W^S^W]F]L^W]F]E]B]3]M^ B^B^O[ =k8d?xClA^P^>]L]9]X]8^P]>\\ Hl A] 9uI]T[5]T]T]:^ =]*]5^V\\V^.] V]2]J]7](]/^:]S];h:]Xg0]" >"9^P^?]K^?].]!e Je2_7\\PdW\\S\\L]S]<]M^@]-]E]F].]/]-]H]C].].]X_5].]V]Q]V]H]U^Q]D]C]G]L]@]C]G]M^?`)]6]H]B]M]>]Q]U]Q]Hb5c-^;].])] B]=_O]=].]O_>]N^>].]O_?_" >"O]>].].]S_:]._P`P]M_O]=]N]>_O]=]O_?_1]-].]L]@]M]>]RbR]G^R^=]M]1^3]4](] FaSaD^Qa?]R_.]9]R`>]._O]>^N]8`7]L]>]E]G^U]U^?]P]>]S]S]>]N]>^P^7]6]J]<]S]4^7]/]" >"C]G]Q]Q]F]H]D]P]P]H]C]D_&]&_8]8_N_7] B]/]T[3]1l:^W^8]1]W` >\\U\\E\\N\\P]3\\S\\ N\\S\\P\\S\\ S_']:]&\\ @]L]@fU\\ M\\2\\P\\8\\S\\2\\N]<\\N]7\\S]8]2]S]8]S]8]S]8]S]8]S]8]S]" >"7]R]?]-].].].].].].].]-]E]G]U^Q]D]C]H]C]H]C]H]C]H]C]A_T_B]M]S]G]H]C]H]C]H]C]H]>c9]M^?]U]'].].].].].].`O^N].]N^>]N^>]N^>]N^?].].].],_R^>_O]=]N]=]N]=]N]" >"=]N]=]N]2^:]O_?]L]?]L]?]L]?]L]@]M]=_O]?]M] O\\P]Q]F\\D]F\\U^U^V]F\\L^V]F\\D]B]3]M] RuJ`O[ >m9c>wCmA]N]>]L]9]X]7]P]?] Im A] 2\\R\\A]T[5^V^T\\:` ?](\\6]T" >"\\T]/] V]2]J]7])^1_9]S];i;bS^2^8^S_>]K^?].]$e@u@e6_7]QfX\\S\\M^S^=]N^?]-]E]F].]/]-]H]C].].c4].]U]S]U]H]T]Q]D]C]G]M^@]C]G]M]=c-]6]H]B]M]>^R]U]R^G`4c.^:]" >".])] B]=^M]?^/]M^?]L]>]/]M^?^N^?].].]T_9].^O_O^N^N^?]M^?^M]?]M^?^0]-].]L]@]M]>^S]X]S^F^T^<^O^2_3]4](] GcUcE]Pa?]Vb-]:]O_?].^N^>]O^8a8]L]?]C]H]T]T]?" >"]P]>]S]S]?]L]@^N^8]6]J]=^S^4^8]/]C]H^Q]Q^G]H]D]P]P]H]C]E_%]%_9]9_L_8] B]0^T[3]0_T_>cWc=]1]U_ ?[U\\C[N]R^4]T] N[R\\Q]R[ 'uG]&] @]L]?eU\\ M\\2]R]8]T]3\\N\\;" >"\\N\\7]S\\7]3^S^:^S^:^S^:^S^:^S^9]S]8^R]?]-].].].].].].].]-]E]G]T]Q]D]C]H]C]H]C]H]C]H]C]@_V_A]N]R]G]H]C]H]C]H]C]H]>c9]L]?]U]'].].].].].]._M]O^/]L]?]L]?]L" >"]?]L]?].].].]-^O]>^N^?]M^?]M^?]M^?]M^?]M^ I]O`?]L]?]L]?]L]?]L]@^O^=^M]@^O^ P]P]P\\G]C\\G]T^W^T\\G]M^T\\G]C\\B]3^O^ RuJ[X]P[ >o=\\XaX]BwDoC]L\\>]L]:^X^8]P]?" >"] E] 5] 3]S]A^U[4dT];b @](]6ZR\\RZ.] V]2]J]7]*^7d8]R];]R_<aQ^3]5f<^M_?].]'e=u=e:_6\\Q^S`S]N]Q]=l>]-]E]Fm>k=]-rC].].b3].]U]S]U]H]T^R]D]C]G]M]?]C]" >"G]N^<f1]6]H]B^O^=]S^U^S]F_2a.^9].])] A]>^M]?].]M^?]L]>]/]M^?^M]?].].]U_8].^N^N]N^M]?]L]?^M]?]M^?^0]-].]L]@^O^=]S]X]S]D^V^:]O]2_2]4](] H\\U^W]U\\E]Pa?" >"]Vb-];]M^?].^M]>^P]7a8]L]?]C]H]T]T]?]P]>]S]S]?]L]@]L]8]6p=]Q]3^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV]F_$]$_:]:_J_9] B]0]S[3]0]P]>o=]2]S_ @[U\\C[M]T_5^U^;u O[R\\R]" >"Q[ 'uH]/ZQ] ?]L]?eU\\ M\\1]T]7^U^4\\O]O]I\\O]T`MZQ]S]O]E]3]Q]:]Q]:]Q]:]Q]:]Q]:^S^9]QmO]-m>m>m>m>].].].]1hL]G]T^R]D]C]H]C]H]C]H]C]H]C]?_X_@]O]Q]G]H]C]H]C]" >"H]C]H]=a8]L]?]U]&].].].].].].^M]O].]L]?]L]?]L]?]L]?].].].].^M]?^M]?]L]?]L]?]L]?]L]?]L] I]Pa?]L]?]L]?]L]?]L]?]O]<^M]?]O] O]P]P\\G]C\\G]ScS\\G]N^S\\G]P]P\\B" >"]2]O] QuF]Q[ >oAqDuDqD]L]?]L]:^X^8^R^?\\ D] 5] 3]S]@`X[3bS\\R^G]W^N] P](].\\&] W]1]J]7]*^7c8]Q];ZM^=`O^4]4d:]M_?].])d:u:d=_5\\R]O^R\\N]Q]=j<]-]E]F" >"m>k=]-rC].].a2].]U^U^U]H]S]R]D]C]G]N^?]C]G]P_:g3]6]H]A]O]<]S]S]S]E^1_.^8]-]*] A]>^M]?]/^M^?]K]?]0^M^?]L]?].].]V_7].]M]M]N]L]@^L]?^M]@^M^?]/]-].]L]?]" >"O]<]S]X]S]C^X^9]O]2^1]4](]0_IZ O[R\\X]S\\G^O_>]Vd9_U];]L]?].]L]=]P]8]X^9]L]?]C]I^T]S]@]P]>]S]S]?]L]@]L^9]6p=]Q]3^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV]G_#]#_;];_H" >"_:] B]0]S[3]0\\N\\>o=]2]Q^ A[U\\C[LcX\\6]T]9u O[RfP[ 'uIf7e >]L]>dU\\<] :f5d4]T]:fT\\O^NfT\\UdOeR\\O^F^3]Q]:]Q]:]Q]:]Q]:]Q]:]Q]:^QmO]-m>m>m>m>].].].]1hL]G]S]R" >"]D]C]H]C]H]C]H]C]H]C]>d?]P^Q]G]H]C]H]C]H]C]H]<_7]L]?]U^'].].].].].].^L]P].]K]@]K]@]K]@]K]@].].].].]L]?]L]@^L]@^L]@^L]@^L]@^L] I]Q]X^@]L]?]L]?]L]?]L]?]" >"O]<^M]?]O] O\\WmX]H\\WmX]H\\QaR]H\\N^R]H\\O]P]C]2]O] QuF]R\\ ?qCsDtDrE]L]?]L]:]V]7]R]>x '] 5] 3\\R\\?e3^R\\SbJ^V^O] P](].\\&] W]1]J]7]+^6e:]Q]-^>_M]5^6" >"h<^O` Qe8u8e@^5]R\\M]R\\O^Q^>m?]-]E]Fm>k=]KdFrC].].b3].]T]U]T]H]S^S]D]C]G]P_>]C]Gk6f5]6]H]A^Q^<]S]S]S]F_1_/_8]-]*] A]>]K]A].]K]@]J]?]0]K]?]L]?].].]W_" >"6].]M]M]N]L]@]J]@]K]A]K]?]/^.].]L]?]O]<]T^W]T]C^X^9^Q^3^1]3]']3dN\\ P\\R`Q[G]N_>]Q`;bW];\\K^?]/]L]=]Q^8]W]9]L]?]C]I]S]S]@]P]>]S]S]@]J]B^L^9]6p>^Q^4^9]/]C" >"]H]P]P]G]H]C]Q]Q]G]ViV]H_\"]\"_<]<_F_;] B]1]R[3]1]N]8a6]2]P^ B[U\\C[K`V\\7]T]8u O[RdN[ 'uIf5a <]L]=cU\\<] :f3`1]T];fU\\N^NfU\\T[S]NaQ\\N^G^3^Q^<^Q^<^Q^<^Q^<^Q" >"^;]Q]:]PmO]-m>m>m>m>].].].]1hL]G]S^S]D]C]H]C]H]C]H]C]H]C]=b>]P]P]G]H]C]H]C]H]C]H]<_7]L]?]U_(].].].].].].]K]Q].]J]A]J]A]J]A]J]@].].].].]L]?]L]@]J]A]J]A" >"]J]A]J]A]J] K]P\\V]@]L]?]L]?]L]?]L]?^Q^<]K]@^Q^ O\\WmX]H\\WmX]H\\P_Q]H\\O^Q]H\\O]P]C]2^Q^ D^<]R[ >qDuEsCqD]L]?]L]:]V]7]R]>x '] 5] 3\\R\\=f+]TdL^T^P] P]" >"(].\\2u *]1]J]7],^-_=]P],]>_M]5]7_R^<^Qa Sd .dC^4\\R]M]R\\O]O]>]N_@]-]E]F].]/]KdF]H]C].].]X^4].]T]U]T]H]R]S]D]C]Gk=]C]Gj1c6]6]H]@]Q];^T]S]T^Ga1].^7]-]*" >"] Lh>]K]A].]K]@]J]?]0]K]?]L]?].].]X_5].]M]M]N]L]@]J]@]K]A]K]?]._0].]L]>]Q];^U]V]U^Bb7]Q]3^1^3]'^6iS^ P[P^P[G]N_>]N^=dX]<]J]>^1]L]=^R]8^W]9]L]@]A]J]S" >"]S]@]P]>]S]S]@]J]B]J]9]6]J]>]O]5^8]/]C]H]P]P]G]H]B]R]R]F]C]Iz<]<z=]=z<] B]1]R[7j:\\L\\7_5]2]P^ B[U\\C[ V]T]7u O[R\\U^O[ T] ]L];aU\\<] I]T],]O[X\\>]K]@]" >"O[X\\I`3]O]<]O]<]O]<]O]<]O]<]O];]P]?]-].].].].].].].]-]E]G]R]S]D]C]H]C]H]C]H]C]H]C]<`=]Q]O]G]H]C]H]C]H]C]H];]6]L]?]T_4h9h9h9h9h9h9hK]Q].]J]A]J]A]J]A]J]" >"@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]Q\\U]@]L]?]L]?]L]?]L]>]Q];]K]?]Q] N\\WmX]H\\WmX]H\\P_Q]H\\P^P]H\\O]P]C]1]Q] C]:]S[ ?sEvEqAoC]L]?]L];^V^8^T^>x " >" '] 5] 4]S]<g-\\T^V^M]S_Q\\ O](].\\2u Se =^1]J]7]-^*^?]O],^?^K]7^7]N]<^Sb Sa (aC]3\\R\\K\\R\\P^O^?]L^A]-]E]F].]/]KdF]H]C].].]W^5].]T^W^T]H]R^T]D]C]Gj<]C]Gj-" >"`7]6]H]@]Q]:]U^S^U]Fb2]/^6]-^+] Nj>]K]A].]K]@p?]0]K]?]L]?].].b3].]M]M]N]L]@]J]@]K]A]K]?].c4].]L]>]Q]:]U]V]U]@`6^S^4^5b2]&b<u P[O]P\\H]N^=]M]>^Ua<]J]=" >"c7]L]<]S^8]V^:]L]@]A]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?^O^7^7]/]C]H]P]P]G]H]B]R]R]F]C]Iz<]<z=]=z<] B]1]R[7j:\\L\\7_ C^P] B[U\\C[ W]T] W] O[R\\T^P[ T] ]L]7" >"]U\\<] H]T]-\\O\\X\\>\\I\\@\\O\\X\\J`3^O^>^O^>^O^>^O^>^O^=]O]<^P]?]-].].].].].].].]-]E]G]R^T]D]C]H]C]H]C]H]C]H]C];^<]R]N]G]H]C]H]C]H]C]H];]6]L]?]S`8j;j;j;j;j" >";j;|Q].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]R]U]@]L]?]L]?]L]?]L]>^S^;]K]?^S^ N\\WmX]H\\WmX]H\\QaR]H\\Q^O]H\\O]P]C]1^S^ D]9]T\\ ?sFwDo?nC]L]?]L];" >"]T]7]T]=] Hj ?] 4]S]8d/]T]T]N^R_R\\ O](] =u Se =]0]J]7].^(]?]O]+]?^K]7]7]L]<gX] Sa (aC]3\\R\\K\\R\\P]M]?]K]A]-]E]F].]/]D]F]H]C].].]V^6].]S]W]S]H]Q]T" >"]D]C]Gg9]C]G]Q_,^7]6]H]@^S^:]U]Q]U]G^X]2]0^5],]+] Pl>]K]A].]K]@p?]0]K]?]L]?].].a2].]M]M]N]L]@]J]@]K]A]K]?]-f8].]L]>^S^:]U]V]U]?^4]S]4^4`0]$`<^Si O[O" >"\\O\\H]N^=]M^@^S`<]J]=c7]L]<]S]8^U]:]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?]M]7]6]/^E^H]P]P]G]H]A]S]S]E]C]Iz<]<z=]=z<] B]1]R[7j:\\L\\6] A^Q] B[U\\C[Ni:]T]" >" V] O[R\\S]P[ T] ]L]6\\U\\<] Dh2]T]/]P\\W\\?]I\\A]P\\W\\K`2]M]>]M]>]M]>]M]>]M]>^O^=]O]?]-].].].].].].].]-]E]G]Q]T]D]C]H]C]H]C]H]C]H]C]<`=]S]M]G]H]C]H]C]H]" >"C]H];]6]M^?]R`;l=l=l=l=l=l=~Q].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]S]T]@]L]?]L]?]L]?]L]=]S]:]K]>]S] M]P]P\\G]C\\G]ScS\\G]S^N\\G]P]P\\B]0]S] D]" >"7\\T[ >sFwCn?mB]L]?]L];]T]7]T]=] Hi >] 4]S]7[Xa1]T^T^O]P_T] O](] =u Se =]0]J]7]/^'^A]N]+]?^K]7]8^L^<eW] Sd .dC]3\\R\\K\\R\\P]M]?]K]A]-]E]F].]/]D]F]H" >"]C].].]U^7].]ScS]H]Q^U]D]C]G]/]C]G]O^,^8]6]H]?]S]9]U]Q]U]H^W^3]1^4],]+] Q`P]>]K]A].]K]@p?]0]K]?]L]?].].b3].]M]M]N]L]@]J]@]K]A]K]?]+e9].]L]=]S]9]V]T]" >"V]@_4]S]5_4b2]&b<\\Nd M[O]P\\H]N^=]L]@]Q_<]J]?e7]L];]T]8]T]:]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?]M]8^6].]E]G]P]Q^G]H]A^T]T^E]C]Iz<]<z=]=z<] B]1]R[3]" >"1\\L\\6] A_R] B\\U\\E\\Ni:]T] V] O\\S\\R]R\\ T] ]L]6\\U\\<] Dh2]T]/\\O[V\\?\\H\\A\\O[V\\L`1]M]>]M]>]M]>]M]>]M]>]M]>^O]?]-].].].].].].].]-]E]G]Q^U]D]C]H]C]H]C]H]C]" >"H]C]=b>]T]L]G]H]C]H]C]H]C]H];]6]M]>]Qa>`P]>`P]>`P]>`P]>`P]>`P]>`PoQ].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]T]S]@]L]?]L]?]L]?]L]=]S]:]K]>]S] " >"L\\P]P\\F\\C\\F\\T^W^T\\F\\T^M\\F\\C\\B]0]S] E^7]U[ >sFwBl=kA]L]?]L]<^T^8^V^=] Ij >] <u=[U^1\\S]R]O]O_U\\ N](] 1] Ge =]0]J]7]0_&]A]N]+]?^K]8^8]J]:aU\\ Pe 4" >"eA]3\\R\\K\\R\\Qo@]J]A].]F^F].].]E]F]H]C].].]T^8].]RaR]H]P]U]C]E]F].]E]F]N^,]8]6]H]?]S]9^V]Q]V^H^V^4]2_4],]+] Q]M]>]K]A].]K]@],]0]K]?]L]?].].c4].]M]M]N]" >"L]@]J]@]K]A]K]?](d;].]L]=]S]9^W]T]W^@`5^U^5^/_3]'_8ZJ` K[O]P\\H]N^=]L]@]P];]J]@_0]L];]U^9^T^;]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]@^M^:^5].]E]F]Q]Q]F" >"]H]@^U]U^C]E]G_\"]\"_BZT]TZB_F_;] B]1]R[3]1\\L\\?o I_S] A[U]F[ V]T] W] N[S\\R]R[ S] ]L]6\\U\\ ']T]/\\O\\V\\@\\H\\A\\O\\V\\M_0o@o@o@o@o?m>l>].].].].].].].].]-]F^" >"G]P]U]C]E]F]E]F]E]F]E]F]E]=d?^V]L]F]H]C]H]C]H]C]H];]6]N^>]O`?]M]>]M]>]M]>]M]>]M]>]M]>]M]?].].].].]-].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J] K]U]R]@]L]?]L]?" >"]L]?]L]=^U^:]K]>^U^ L\\P]Q]F\\D]F\\U^U^V]F\\U^M]F\\D]B\\/^U^ OuD]V[ =sFwBk;i@]L]?]L]<]R]7]V];] F^ Nu=[T^3]S]R]O]N_V\\ N](] 1] ].]L]6]1_%]Aq0]>]K]" >"8]7]J]/] Md:u:d>]3\\R\\K\\S\\Po@]J]A].]F]E].].]E]F]H]C].].]S^9].]RaR]H]P^V]C]E]F].]E]F]M],]8]6]H]>]U^8]W^Q^W]H^U^4]2^3]+],] R^M]>]K]A].]K]@],]0]K]?]L]?" >"].].]X_5].]M]M]N]L]@]J]@]K]A]K]?]$`;].]L]=^U^8]W]T]W]@b5]U]5^,]3]'] J\\Q_Q[G]N^=]L]A]O];]J]@].]L];]U]8]R];]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]5]L]?]K];" >"^4].^G^F]Q]Q]F]H]?_W]W_B]E]F_#]#_B\\U]U\\B_H_A\\U]U[ H]1]R[3]1]N]?o H`V] @[T]G[ U]T] X] N[S\\Q]S[ S] ]L]6\\U\\ (]T]/]P\\U\\A]I]B]P\\U\\M^/o@o@o@o@o@o@m>].]" >".].].].].].].]-]F]F]P^V]C]E]F]E]F]E]F]E]F]E]>_X_?]W^L]F]H]C]H]C]H]C]H];]6]P_=]M^@^M]?^M]?^M]?^M]?^M]?^M]?^M]?].].].].]-].].].]/]J]@]L]@]J]A]J]A]J]A]J]" >"A]J] K]U\\Q]@]L]?]L]?]L]?]L]<]U]9]K]=]U] K]Q]Q]F]E]F]W^S^W]F]W^L]F]E]B\\.]U] NuC\\V[ =eXZXdFgXhAi9h@]L]?]L]<]R]7]V];] E] Nu=[S]3\\R]R]O]M_X\\ M](" >"] 1] ].]L]6]2_$]Aq0]>]K]8]7]J]/] Ke=u=e<]3\\R\\K\\S\\Po@]J]A].]F]E].].]E]F]H]C].].]R^:].]RaR]H]O^W]C]E]F].]E]F]M^-]8]6]H]>]U]7]W]O]W]I^S^5]3^2]+],] R" >"]L]>]K]A].]K]@],]0]K]?]L]?].].]W_6].]M]M]N]L]@]J]@]K]A]K]?]\"_<].]L]<]U]7]W]T]W]Ac5^W^6^+^4](] H[R\\X]S\\G]N^=]L]A]O];]J]A^.]L]:]W^9^R];]L]@]O]O]J]S]S]@" >"]P]>]S]S]@]J]B]J]9]5]L]?]K];^4]-]G]D]R]R]E]H]>kA]E]E_$]$_B^V]V^B_J_A^V]V] I]1]R[3]0\\N\\>o G`X] ?\\U_Q[T\\ T]T] ] N\\T\\Q]T\\ S] ]L]6\\U\\ )]T].\\P\\T\\A\\I]A" >"\\P\\T\\N^.o@o@o@o@o@o@m>].].].].].].].].]-]F]F]O^W]C]E]F]E]F]E]F]E]F]E]?_V_@]W]K]F]H]C]H]C]H]C]H];]6k<]L^A]L]?]L]?]L]?]L]?]L]?]L]?]L]?].].].].]-].].].]/" >"]J]@]L]@]J]A]J]A]J]A]J]A]J] K]V\\P]@]L]?]L]?]L]?]L]<^W^9]K]=^W^ J]R]R]D]G]D]W\\Q\\W]D]W\\L]D]G]A\\.^V] NuC]W[ <cWZXdEfXh@g8g?]L]?]L]=^R^8^X^:] F] " >" G\\R\\5[S]4]R]R]O]Lb M](\\ 0] ].]L]6]3_#]Aq0]>]K]9]6]J]/] He@u@e H\\R]M]T]Q^J]A]J]@]/]G^E].]-]F]F]H]C].].]Q^;].]Q_Q]H]N]W]B]G]E]-]G^F]L]-]8]6]I^>^W^7]" >"W]O]W]I^R^6]4^1]+],] R]M^>^M^@]/^M^?]-]0^M^?]L]?].].]V_7].]M]M]N]L]@^L]?^M^A^M^?] ]<].]L]<]U]7]X]R]X]B^W^5]W]6^)]4](] H\\T]W]U\\F]O_=]L]A]P^;^L^A]-]L" >"]:]W]8]P]<]L]@]O]O]J^T]T]?]P]>]S]S]@^L]A^L]8]5]L]@^J]=^3]-^I^D^S]S^E]H]<g>]G]C_%]%_A_W]W_A_L_@_W]W_ J]0]S[3]0]P]5]4],b =[ThT[ R]T]!] M[T\\P]U[ R] ]L" >"]6\\U\\ *]T].]P[S\\B]J]A]P[S\\N].^J]B^J]B^J]B^J]B^J]B^K^A]M]=]/].].].].].].].]-]G^F]N]W]B]G]D]G]D]G]D]G]D]G]?_T_AbK]E]I^C]I^C]I^C]I^;]6j;]K]A]M^?]M^?]M^" >"?]M^?]M^?]M^?]M_?].].].].].].].].]/]J]@]L]@^L]@^L]@^L]@^L]@^L] J^X]Q]?]L]?]L]?]L]?]L];]W]8^M^<]W] I]R]S]C]H]C]VZOZW]C]VZL]C]H]@\\-]W] MuC]X[ ;cWZWbDe" >"WZXe>e6e>]L]?]L]=]P]8^X^:] F^ H\\R\\5[S]5]Q]R]O^L` K]*] 0] !^.]L]6]4_\"]2],^>^M]8]6]J]0] DeCuCe E]R\\M]T\\P]I]A]J]@]/]G]D].]-]F]F]H]C].].]P^<].]Q" >"_Q]H]N^X]B]G]E]-]G]E]L^.]8]5]J]<]W]6^X]O]X^J^Q^6]5^0]+^-] R]M^>^M]?].]M^?]-]/]M^?]L]?].].]U_8].]M]M]N]L]?]L]?^M]?]M^?] ]<].]M^<^W^6aRbB^V^6]W]7^(]4]" >"(] GcUcE]P_=]L]A]P]9]L]@]-]L]:^X]9^P]<]M^@]P^O]I]T]T]?]P]>]S]S]@^L]@]L]8]5]M]?]I]>^2],]I]B_U]U_D]H]:c<]G]B_&]&_?_X]X_?_N_>_X]X_ I]0]S[3]0_T_5]4]+` ;[" >"SfU[ P^U^#] L[U\\P]V[ Q] ]M^6\\U\\ ,^U^-\\P\\S\\B\\J]@\\P\\S\\N].]I]B]I]B]I]B]I]B]I]B]I]B^M]=]/].].].].].].].]-]G]E]N^X]B]G]D]G]D]G]D]G]D]G]@_R_A`J]D]J]A]J" >"]A]J]A]J]:]6g8]K]A]M^?]M^?]M^?]M^?]M^?]M^?]M_?].].].].].].].].].]L]?]L]?]L]?]L]?]L]?]L]?]L]3^;aP]?]M^?]M^?]M^?]M^;]W]8^M];]W] H]S]T^B]J^B]J^B]J^B]J^@" >"\\-]W] G^1_ :aW[V`BcW[Wc<d5c=]L]>]N]<]P]7]X]8] F]KZ X]S]5[S]5\\P]R]N]K_ K]*] 0] !],]N]5]5_\"]1],]<]M]9^6^L^0] Ad Nd A\\R]O^U\\P^I^B]K^?]H[C]H^D]" >".],]G]F]H]C].].]O^=].]P^Q]H]M]X]A]I]D],]I^E]K]AZH^8]5]J]<]W]5bObJ^O^7]6_0]*]-] R]M^>^M]?^/]M^?^.]/]M^?]L]?].].]T_9].]M]M]N]L]?]L]?^M]?]M^?] ]<].]M^;" >"]W]5aRaB^U^6c8_(]4](] FaSaD]P_=]M]@]P]9]L]@]-]L]9b9]O^=^N^?\\P_Q]H]T]T]?]P]=]T]T]?^L]@]L]8]4]N]@^I^?]1],^K^A`W]W`C]H]7]8]I]@^&]&^=i=^N^<i H]0^T[3]1l6]" >"4])_ <\\RbT\\ O]T]#] L\\V\\O]X\\ M^N^6\\U\\ ,]T]-\\OhF\\J]@\\OhQ]/^I^D^I^D^I^D^I^D^I^C]I]B]L]<]H[C].].].].].].].]-]H]D]M]X]A]I]B]I]B]I]B]I]B]I]@_P_B_J]C]J" >"]A]J]A]J]A]J]:]6].]K]A]M^?]M^?]M^?]M^?]M^?]M^?]M_?^/^/^/^/^/].].].].]L]?]L]?]L]?]L]?]L]?]L]?]L]3^;`O]?]M^?]M^?]M^?]M^;c8^M];c G^U]U^@^M^@^M^@^M^@^M^?" >"\\-c H^0_ 9^U[U^@aV[Va:b3a<]L]>^P^=^P]7]X]8_ H^M[ F] 6]S]>ZQ[T^6]P]S^N^K^ K]*] 0]:] 8]0],]O^5]6_2ZI]1]-^<^O^9]4]L]0]<].] Uc Pc1]2\\Q^S`W^P]G]B]K]" >">^J\\C]I^C].],^H]F]H]C].].]N^>].]C]H]MbA^K^D],^K^D]K^B[I]7]5^L^<c5aMaJ^N]7]6^/]*]-] R^O_>_O]=].]O_>].].]O_?]L]?].].]S_:].]M]M]N]L]>]N]>_O]=]O_?] ]<]-" >"]O_;]X^5aRaC^S^6a8_']4](] D]P^B^Ra>^N]@]Q]7]N]?^.]L]9a8]N]=^N^?]Q_Q]G]U]U]>]P]=]T]T]?_N]>]N]7]4^P^@]G]@^1]+^M^?mB]H]7]8^K^?\\%]%\\;g;\\L\\:g G]/]T[3]2n7]" >"4]'^ <\\F\\ M\\S\\ J\\F\\ L^N^6\\U\\ ,\\S\\-]OhG]K]@]OhQ]LZ=]G]D]G]D]G]D]G]D]G]D]G]D^L]<^J\\C].].].].].].].]-]J_D]MbA^K^B^K^B^K^B^K^B^K^A_N_B^K]B^L^A^L^A^" >"L^A^L^:]6].]K]A^O_?^O_?^O_?^O_?^O_?^O_?^Oa?].].].].]/].].].]-]N]>]L]>]N]=]N]=]N]=]N]=]N]2^;_O]=]O_>]O_>]O_>]O_:a7_O]9a E^P_>^P_>^P_>^P_>^P_>\\,a H^.]" >" /[5]T[S\\8a1`<]L]=^R^<]O^8b7_ H^O\\ F] 6\\R\\=[R[U^5\\N]T]L^M` L]*] 0]:] 8]1^+]P]4]7_1[L_1]<ZL^:^Q^8]4^N^>ZM];].] R` P`.]2]QfXaN]G]B]L^=^L]C]K_B].]+" >"_J]F]H]C].].]M^?].]C]H]La@^M^C]+^M^C]J]B]L^7]4^N^:a4aMaK^M^8]7^.]*^.] Q]P`>`Q^=^NZ;^Q`>_LZ>].^Q`?]L]?].].]Q^;].]M]M]N]L]>^P^>`Q^=^Q`?]/ZL];]-^Q`:a4`" >"P`D^Q^7a8^&]4](] S]Sb>_P^@]R^7^P^>^MZ<]L]9a9]M]=_P`XZB]Q_Q]G^V]V^>]P]=^U]U^?`P^>^P^6]4]Q^?]G]A^0]*^O^<i@]H]7]7^M^=Z$]%Z8e9ZKZ7e F]/^U[TZ9]3^V`V^8]4]" >"&^ <\\H\\ K[R[ I\\H\\ K_P`XZ9\\U\\ ,[R[,\\E\\D\\K]?\\E\\M]O\\=]G]D]G]D]G]D]G]D]G]D]G]D]K];^L]C].].].].].].].]-]K_C]La@^M^@^M^@^M^@^M^@^M^A_L_C`N^A^N^?^N^?^" >"N^?^N^9]6].]L]?]P`>]P`>]P`>]P`>]P`>]P`>]P]X^LZN^NZ;_LZ>_LZ>_LZ>_LZ?].].].]-^P^>]L]>^P^=^P^=^P^=^P^=^P^2^:^P^=^Q`>^Q`>^Q`>^Q`:a7`Q^9a Dk<k<k<k<k>],a " >"H]-] /[,[._0_;]L]=j<]N]7`5a J_S^ F] 6\\R\\=^U[W_5]N^V^K_Rd L],] /]:] 8]1])^T^3]8_0^Q`0]<]Q_8^S^8^3_R_=]R^:].] O] P]+]1\\PdW`N^G^C]N_;`R`C]NaA].]*`O" >"`F]H]C].].]L^@].]C]H]La?`S`B]*`S`B]J]B`Q_6]3_R_9a4aMaL^K^9]8^-])].] Q_Tb>aS^;_R\\:^Sa=`Q]>]-^Sa?]L]?].].]P^<].]M]M]N]L]=_T_=aS^;^Sa?]/^R_:]-^Sa:a3_P_" >"C^P^7_8^%]4](] S_V^X^?aS^>]T^5_T_=`R]<]L]8_8]M^>`SdA]SaS]E^W]W^=]P^=_W]W_>]X]T_<_T_5^4^T^?^G^C^/])^Q^8c=]H]7]6`S` ?] ;c >c E]._W[V\\9]4^J^9]4]%] ;]L]" >" IZQZ H]L] !u ,`Sd9\\U\\ ,ZQZ,]E\\E]L]?]E\\M_S^>^G^F^G^F^G^F^G^F^G^F^G^F^K]:`R`C].].].].].].].]-]ObB]La?`S`>`S`>`S`>`S`>`S`?]J]CcS`?_R_=_R_=_R_=_R_8]6" >"].]V[R^?_Tb>_Tb>_Tb>_Tb>_Tb>_Tb>_T^V_Q]M_R\\:`Q]=`Q]=`Q]=`Q]?].].].],_T_=]L]=_T_;_T_;_T_;_T_;_T_1^:`T_;^Sa=^Sa=^Sa=^Sa9_6aS^7_ Bi:i:i:i:i=]+` I],] /[" >",[-].]:]L]<h;]N]7`3q \"h E] 7]S]=k5]LdIjW^ M],] /]:] 8]1](f9k?n?l/]<j6g7]1j<h9].] LZ PZ(]1]O`U]K]E]Cm8kBn?n?](nE]H]C].].]K^Am>]C]H]K`>kA])kA]J^Cm5" >"]2j7_2`M`K^J]9]8tC])].] PgX]>]Xf9h9fX]<k>],fX]?]L]?].].]O^=].]M]M]N]L]<h<]Xf9fX]?]/j9d4gX]:a3_P_D^O^7_8m4]4](] RfXaBk=^V^3h;j<]L]8_9^L]>qA^U]W]U^D" >"i<]O`?k=]Xg:h3a7f>uCn?]/eSe;]:]H]7]5k >] :a <a D]-h>n?\\H\\8]4]%] 9^R^ *^R^ Xu ,q9\\U\\ /]D\\F]LfH]D\\Li>]E]F]E]F]E]F]E]F]E]F]E]F]JnIkBn?n?n?n?].].]." >"]-n@]K`>k<k<k<k<k=[H[Co<j;j;j;j7]6].]Vf=gX]=gX]=gX]=gX]=gX]=gX]=gTjLh9k<k<k<k?].].].]+h<]L]<h9h9h9h9h Fk:gX]=gX]=gX]=gX]9_6]Xf6_ @e6e6e6e6e;]+_ G\\+[" >" /].]-[,[9]L];e:^N^8`2p e D] 7]S]<i4\\JbGgT^ M\\,\\ .]:] 8]1]'d8k?n>i-]<i4e6]0h;g8].] I]0]3]E]Cl6h@l=n?]&jC]H]C].].]J^Bm>]C]H]K`<g?]'g?]I]Bj3]1h6" >"_2_K_L^I^:]8tC])].] OdV]>]Wd6f8dW]:i>]+dW]?]L]?].].]N^>].]M]M]N]L];f;]Wd7dW]?]/i7c3dV]9_2_P_E^M^8_8m4]4](] QdV`B]Xe;d1f8h<]L]8_9]K]>]XdW_@eWeBg;]O" >"`=g;]Vd8f1`6d=uCn?]/eSe;]:]H]7]3g <] 9_ :_ C]+f>n>ZFZ7]4]%] 7f &f Vu ,]XdW_9\\U\\ /\\C\\F\\KfH\\C\\Kg=]E]F]E]F]E]F]E]F]E]F]E]F]JnHh@n?n?n?n?].].].]-l>" >"]K`<g8g8g8g8g J]Vh:h9h9h9h6]6].]Ve;dV]<dV]<dV]<dV]<dV]<dV]<eRiJf7i:i:i:i?].].].]*f;]L];f7f7f7f7f F]Xe7dV]<dV]<dV]<dV]9_6]Wd5_ <\\-\\-\\-\\-\\6]+_ FZ*[ /]" >".],Z+Z9]L]8`8]L]7^.m W` A] 7\\R\\7b2]H^BaP_ O].] .]:\\ 7]2^%`6k?n:b*]9c/a5],b6b5].\\ H]/\\4]C]Di0b=h9n?]#c?]H]C].].]I_Dm>]C]H]J_9a<]$d?]I^?c0].b3_2" >"_K_M^G^;]8tC](]/] M`T]>]U`2b4`U]7c;])`U]?]L]?].].]M^?].]M]M]N]L]8`8]U`3`U]?],c2a0_T]9_2^N^F^K^8]7m4]4](] O`R^B]Va8b-`3d:]L]7]9^J]?]V`T]>cUc?c9]N_:" >"a8]T`3`-_4`<wDn?]/eSe;]:]H]7]0a 9] 8] 8] B])b<n @]4]&^ 5b \"b Tu ,]V`T]8\\U\\ 0].].]0b;]C]H]C]H]C]H]C]H]C]H^E^H^JnEb=n?n?n?n?].].].]-h:]J_9a2a2a2a" >"2a G\\Rb4b3b3b3b3]6].]Vc7`T]:`T]:`T]:`T]:`T]:`T]:aMcEb2c4c4c4c<].].].]'`8]L]8`1`1`1`1` D]Ua2_T]9_T]9_T]9_T]8]5]U`2] =] &[ " >"O].] E] E] '] S] R] ^ (](]/] C] S] '] V] F^ 7]4](] %])[ 4]7] @])_Q_:] 9]6] 6[ S]0[R" >"^ H]%\\U\\ A\\ @\\ /Z <\\ ,[ M^5](^ =] &[ N]0] D\\ D] '\\ " >" Q^DZ 1] _ )](]/] D^ S] '] V] F] 6]4](] %] ;]7] @] /] 9]6] 6[ S]0g H]%\\U\\ @\\ " >" @\\ J\\ X]4](] <] &[ N]0] D\\ E^ '\\ P^G] 2] X^ )]" >"(^0] D] R] '] V] G^ 6]4](] %] ;]7] @] /] 9]6] 6[ S]0e F]%\\U\\ ?[ ?[ " >"I[ ^4])^ @ZV] &[ M]2] D] E] '] O_K_ 3] V^ *b,]5b E^ R] '] V] " >" G^ 6^5])^ %] ;]7] @] /] 9]6] 6[ S].a D]%\\U\\ ?\\ @\\ J\\ !^4])^ " >" B\\V] &[ M]2] D\\ G\\ L`P` 2] U^ +b =b RZN^ R^ '] V] H^ 4^6]*^ $] ;]7] @] /]" >" 9]6] 6[ S] J] :\\ @\\ J\\ \"^3]*^ A\\V\\ %[ L" >"]4] Vm 2^ S^ ,b =b R\\Q_ R] &] V] I^ 3b:].b $] ;]7] @] /] 9]6] 6[ S] " >" J] @ZU] FZU] PZU] #^2]+^ @b %[ Si 4b " >" %i Ua &] V] Mb 2a:].a #] ;]7] @] /] 9]6] .] J] @b Fb " >"Pb 'b2] E` Qb 1a $g S` %] V] Ma /_:]._ !] " >" ;]7] @] /] 9]6] .] J] @a Ea Oa &a1] D^ " >" X^ Ip Fc Q^ #] V] M_ A] )] ;]7] @] /] 9]6] T] @` " >" D` N` %_/] BZ Ap " >" 6] " >" p 6] " >" " >" F]']2] +]']2^ D]']3_ E]']1] \"]']2^ 8] H"; > > > const char *const _data_font90x103[] = { > >" " >" " >" HX 4V >X IX *W FW " >" " >" " >" HX W 4Z 3VCT <Z >X W 4Z " >" HX W 4Z 'VCT ;X W 3Y 2UCT KX W 3Y 0W " >" " >" " >" @W !W 4\\ 5YET ?XHX 8] >W !W 4\\ 7XGX KW !W 4\\ 7XHX +YET :W !W 3[ 5ZFT ?XGX EW !W 3[ 7XGX 5W " >" " >" " >" >W \"V 3\\ 7]HU ?XHX 9` ?W \"" >"V 3\\ 7XGX JW \"V 3\\ 7XHX -]HU 9W \"V 3] 7]HT ?XGX DW \"V 3] 8XGX 5V " >" " >" " >" <W $V 3VNV 8_KV ?XHX 9` >W $V 3VNV 8XGX IW $V 3VNV 8XHX -_KV 8W $V 2] 7_KU ?XGX CW $V " >"2] 8XGX 6V " >" " >" :W &W " >"4VLV :j >XHX :VJV >W &W 4VLV 9XGX HW &W 4VLV 9XHX .j 6W &W 3VMV 9i >XGX BW &W 3VMV 9XGX 7W MW " >" " >" " >" CV 'W 4VJV ;j >XHX ;UGV >V 'W 4VJV :XGX GV 'W 4VJV :XHX .j" >" 5V 'W 3VKV :i >XGX AV 'W 3VKV :XGX 8W N[ " >" " >" " >" DV )W 4VHU <VK_ =XHX ;TEU =V )W 4VHU :XGX FV )W 4VHU :XHX /VK_ 3V )W 3VIV <UK_ =XGX @V )W 3VIV ;XGX 9W " >" N] " >" " >" DV *V 3UFU =UH\\ <XHX <UD" >"T <V *V 3UFU ;XGX EV *V 3UFU ;XHX /UH\\ 1V *V 2UGU <TH] =XGX ?V *V 2UGU ;XGX 9V a " >" " >" " >" EV ,V 3UDU >TEY ;XHX <TBT <V ,V 3UDU <XGX DV ,V 3UDU <XHX /TEY /V ,V 2U" >"EU =TFZ <XGX >V ,V 2UEU <XGX :V Na " >" " >" " >" DU -V 3VDV ?TCV :XHX <TBT ;U -V 3VDV =XGX CU -V 3VDV =XHX /TCV -U -V 2UCU >TCU :XGX =U -V 2UCU =XGX ;V NV" >"IV \"W " >" " >" JU /V 3VBV ETBT :U /" >"V 3VBV FU /V 3VBV (U /V 2UAU DU /V 2UAU @V NVGV " >" $X " >" *X " >" JX GTBT MX GX 7V :UEU DX GX 7V " >" JX GX 7W 4X GX 6V GX GX 5V (X &X " >" )X 8V " >" ;X FTBT " >" LX IX 7X <UCU DX IX 7X JX IX 6W 3X IX 6X GX IX 5X *X " >" &Y " >" (X 9V " >" <X ETBT KX KX 6X 1TBT BTAT CX KX 6" >"Y JX KX 6Y (TBT BX KX 5X 1TBT LX KX 4X +X %T #W 9W " >" 3a :a <W 2W >W E\\ AW ,W ,W ,W ,W " >" HY GV +Y 4Z NX @X %W " >" DUDU =Y 7W KW 6Z 4XDT BTAT BW KW 6Z IW KW 6[ ,Y )XDT AW KW 5Z 4XDT " >" KW KW 4Z ,W BW 8V (S <S 9V 7V " >" 3a :a ;W 3W >W H_ AW ,W ,W ,W ,W L] GV +] ;a " >" #[ F^ 8XGX +W BTEU " >" *R 9a :W MW 6\\ 6ZET ?XHX <TAT AW MW 6\\ 7XGX LW MW 5[ 7XGX .Y +ZET @W MW 5\\ 6ZET ?XHX DW MW 4\\ 7XHX 0W AW" >" &XHX MZ +T $Y BS 1W,V MY 8W 7W T 9X 5Z /[ 0Z 8Z /Y GY " >" .\\ <\\ [ 4[ :\\ -a :a :W 4W >W Ja AW ,W ,W ,W ,W N_ GV +_ " >"?e 8] J] Jb 8[ <[ $Y FY 7XGX =Z Di 5W 8Z .Y !W FW *Y 4W)V*W)V-Y(V " >" <UFU 3\\ +[ 0[ 0[ 0[ 0[ 4[=T <e ;W W 5\\ 7\\FT ?XHX <TAT @W W 6^ 8XGX KW W 5] 8XGX .Z@R ?\\FT ?W W 4\\ 7\\" >"FT ?XHX CW W 3\\ 7XHX 1W @W &XHX N\\ ,T :U :U5U ` EX 2VFV .S 4]0W\"b DV V 5V T 7W" >" .` 3[ 7c 8d )Z Dq 8b Hy Bb 7` Na /Z @k .d Kj ?x Mt 7f MX/X'X -X -X2Z&X -]0]0[3X Dc Ii -c Ij 4f N~W$X/X.X&X.X4Y4XDY/Y/Y,Y'~S%a >W $a MY " >" EW 5W >W Kb AW ,W ,W ,W ,W !a GV +a Ch =f ^ Mf 2Z @x Mx <c 3X C~Q)X?X?X Kc 2T " >" .V .T CX $a !W.W N` ;XGX ![ Lb &Z Mi 7[ >a 5a &W 0g #\\ -_ <\\*V.\\*V0a-V\"X )Z /Z /Z /Z /Z 4WJV 1~U+d Kx Mx Mx Mx MX -X -X -X ,j" >" @[3X Dc 8c 8c 8c 8c <cBV.X/X'X/X'X/X'X/X/Y,Y$X &h ;W \"W 5VNV 8]HU ?XHX <TAT ?W \"W 5VNV 8XGX JW \"W 5VMV 9XGX -ZDV @]HU >W \"W 4VNV 8]HU ?XHX " >"BW \"W 3VNV 8XHX 2W ?W &XHX ^ K~\\ >S 3Q +[ @[;[ ;Q ;e HX 2VFV #VBV FS 6`1V#g GV !V 3V !T 7W 0d" >" :` ;j ?k -[ Dq :g Ky Df ;d $f 1Z @o 5j Np Ex Mt :m\"X/X'X -X -X3Z%X -]0]0\\4X Gi Lm 4i Ln ;m#~W$X/X-X(X-X4Y4XCY1Y-Y.Y&~S%a >W $a N[ EV " >"5W >W Lc AW ,W ,W ,W ,W \"b GV +a Dk Aj \"_ h 3Z @x Mx ?i 6X C~Q)X?X?X Ni 6V /V /" >"V DX &f #W0W e >XGX %c#e +b\"i 9_ Be 9d 'V 3k %^ /c @^*V0^*V2d.V\"X )Z /Z /Z /Z /Z 3b 1~U.j Nx Mx Mx Mx MX -X -X -X ,p F\\4X Gi >i " >">i >i >i BiEV.X/X'X/X'X/X'X/X.Y.Y#X 'j ;V \"V 5VLV :_IT >XHX <TAT >V \"V 5VLV 9XGX IV \"V 4VMV 9XGX ,ZHY A_IT <V \"V 4VLV :_IT >XHX AV \"V 3VLV 9" >"XHX 2V >W &XHX !_ K~[ >T 4R -_ D_?_ >S =t Fh IX 2VFV #VBV FS 7c4V#i HV \"W 3V !T 7V 0f @e >o Co 0" >"\\ Dq <j Ly Fj ?h (i \\ ?Z @r :o\"s Hx Mt <q$X/X'X -X -X4Z$X -]0]0\\4X Im Np 9m Np ?q%~W$X/X-X(X,W5[6XAX1X+X.X%~S%a =V $a ] EV 6W >W M" >"d AW ,W ,W ,W ,W HW 1b GV +b Fm Dm #` \"j 4Z @x Mx Am 8X C~Q)X?X?X!m 9X 0V 0X EX 'h" >" $W0W \"h ?XGX 'g%g 0h%i :a Cf :f *V 4m %^ 0e A^+V/^+V1f1V!X )Z /Z /Z /Z /Z 2` 1~V0o\"x Mx Mx Mx MX -X -X -X ,t J\\4X Im Bm Bm Bm Bm F" >"mHV-X/X'X/X'X/X'X/X-X.X\"X (l ;V $V 4UJU :ULXLU >XHX <UCU =V $V 5VJV :XGX HV $V 4VKV :XGX +ZL\\ AULXLU ;V $V 3UJU :ULXLU >XHX @V $V 2UJU 9XHX 3V" >" =W &XHX !` K~Z >T 4S /a FaAa @T @w Hl KX 2VFV $WCV ES 8e5V$j HV \"V 1V \"T 7V 2j Eh ?q Dp 1\\ Dq >" >"l Ly Hn Bj +l %e E\\ At >s$v Kx Mt >u&X/X'X -X -X5Z#X -^2^0]5X Jo q ;o r Br%~W$X/X-X(X,X6[6XAY3Y+Y0Y%~S%W 3V IW !_ FW 7W >W Md AW " >",W ,W ,W ,W HW 2[ ?V #[ Hn En #` #l 6\\ Ax Mx Cp 9X C~Q)X?X?X\"o ;Z 1V 1Z FX KS 0i #W2" >"W LV ,i ?XGX *l'h 3l'i ;c Dg ;g ,W 6o %^ 1g B^,V.^,V0g3V X *\\ 1\\ 1\\ 1\\ 1\\ 2^ 0~V2s$x Mx Mx Mx MX -X -X -X ,v L]5X Jo Do Do Do Do HpKW" >"-X/X'X/X'X/X'X/X-Y0Y\"X )n <W &W 5VJV ;TI_ >XHX ;UEU <W &W 5VIV ;XGX HW &W 5VIV ;XGX *g ?TI_ ;W &W 4VJV ;TI_ >XHX @W &W 3VJV :XHX 4W =W &XHX " >" 1\\ 1\\ 1\\ 1\\ 1\\ =XMV K~Y =S 4U 1c IdCc AU Dz In LX 2VFV $VBV ES 9g7V$k HV #W 1W #T 8W 3l Fh ?r Eq 3] Dq ?m L" >"y Ip Em -n )k H\\ Au Av%x Mx Mt ?x(X/X'X -X -X6Z\"X -^2^0]5X Ls\"s ?s\"s Et%~W$X/X,X*X+X6[6X@Y5Y)Y2Y$~S%W 3W JW \"a FW 8W >W NZ 6W ,W " >",W ,W ,W HW 2X <V X H[G[ Go KZ %[H[ 7\\ Ax Mx Ds ;X C~Q)X?X?X$s >\\ 2V 2\\ GX KS 1j #" >"W2W LV -j ?XGX +ZEZ)VGY 5ZDZ)i <e EUFY <UFX -W 7q %VMU 2YIY CVMU,V.VMU,V0UFX3V X *\\ 1\\ 1\\ 1\\ 1\\ 1\\ 0~W4v%x Mx Mx Mx MX -X -X -X ,x N]5X" >" Ls Hs Hs Hs Hs LsMW,X/X'X/X'X/X'X/X,Y2Y!X *\\G[ <W (W 4UHU <UH] =XHX ;VGV ;W (W 5VHV ;XGX GW (W 4UGU ;XGX )c =UH] 9W (W 3UHU <UH] =XHX ?W (W" >" 2UHU :XHX 5W <W &XHX 5c 8c 8c 8c 8c @WKU J~X >T 5V 2e KfEe CW G| Jp MX 2VFV $VBV ES 9XIX8V$l HV #V /V #T " >" 8V 3n Gh ?s Fr 5^ Dq @n Lx Ir Go .o -q L^ Bv Cx&z x Mt A{)X/X'X -X -X7Z!X -^2^0^6X Mu#t Au#t Gu%~W$X/X,X*X+X6[6X?X5X'X2X#~S%W 2V JW #c FW" >" 9W >W NX 4W ,W ,W ,W ,W HW 2W ;V NW IZCY Hp JY &ZDZ 9^ Bx Mx Eu <X C~Q)X?X?X%u @" >"^ 3V 3^ HX KS 2k \"W4W KV -ZGW ?XGX -X=X+R@W 8X<X .XIX FQ@W <Q@W /W 7dGU %QHU 3XEX DQHU-V-QHU-V/Q@W5V NX +^ 3^ 3^ 3^ 3^ 2\\ 0~W5" >"x&x Mx Mx Mx MX -X -X -X ,z!^6X Mu Ju Ju Ju Ju N}+X/X'X/X'X/X'X/X+X2X X +ZBY ;W *W 4UFU =TF\\ =XHX :VIV 9W *W 5VFV <XGX FW *W 4VGV <XGX (_ :TF\\ 8" >"W *W 3UFU =TF\\ =XHX >W *W 2UFU ;XHX 6W ;W &XHX 7h =h =h =h =h DWJV K~X >T 5W 4g MgFg EY J~ K]FZ MX 2VFV $VBV " >"ES :XGX9V%\\GX HV $W /W 3PATAP GV 3[H[ Gh ?]F] GZE^ 6^ Dq A]FX Lx I\\F\\ G\\G[ /[H] 0u N^ Bw E_D^&{!x Mt B`C_)X/X'X -X -X8Z X -_4_0_7X N^" >"E^$u C^E^$u H^E\\%~W$X/X,Y,Y*W7]8X>Y7Y'Y4Y#~S%W 2V JW $e FV 9W >W NW 3W ,W ,W ,W ,W HW 2W ;V NW IY@X >X " >"4[AV IX &X@X 9^ Bx Mx F^E^ =X C~Q)X?X?X&^E^ B` 4V 4` IX KS 3\\GW \"W4W KV .YBT ?XGX .V7V,P=W :W8W /VEV 3V +V /V " >" 7eGU KU 3WCW ;U-V$U-V LV5V NX +^ 3^ 3^ 3^ 3^ 3^ 1~W6_D^&x Mx Mx Mx MX -X -X -X ,{\"_7X N^E^ L^E^ L^E^ L^E^ L^E^ !^Ed*X/X'X/X'X/X'X/X+Y4Y X +Y?" >"X ;V *V 4UDU >TEZ <XHX 9a 7V *V 4UDV =XGX EV *V 4VEV =XGX )] 7TEZ 6V *V 3UDU >TEZ <XHX =V *V 2UDU <XHX 6V :W &XHX 9k @k @k @k @k EWJV K~W " >" >T 5Y 5g MhHi G[ M~Q L\\AW MX 2VFV $VCV DS :WEW:V%ZAU HV $V -V 3RCTCR HW 4ZDZ H\\LX ?Y?[ HV>\\ 8_ DX )[?T -Y J[B" >"[ I[CZ 0WAZ 2x ^ BX>^ G]=Z&X=b#X -X '];[)X/X'X -X -X:[ NX -_4_0_7X \\?\\%X@^ E\\?\\%X?] J[=X =X <X/X+X,X)X8]8X=Y9Y%Y6Y )Y$W 2W KW %ZMZ FV :W" >" >W X 3W 4W ,W HW 3X ;V NX KY?X Ca 9Y:R HX (X>X :VNV BZ /X '\\?\\ A^ FX0X)X?X?X'\\?\\ " >" Db 5V 5b JX KS 3ZBT !W6W JV .X?R 4V4U HV ;V4V 1VCV 4V *U 0V 7fGU KU 4WAW <U.V#U.V JU6V MX +^ 3^ 3^ 3^ 3^ 3^ 2XIX F]=Z&X -X" >" -X -X -X -X -X -X ,X=b$_7X \\?\\ N\\?\\ N\\?\\ N\\?\\ N\\?\\ #\\?`)X/X'X/X'X/X'X/X*Y6Y NX ,Y=W :V ,V 3UDU >TDX ;a 6V ,V 4UBU GV ,V 3UCU 0` 6TDX 4V ,V" >" 2UDU >TDX >V ,V 1UDU :V 9W (o Do Do Do Do GWIU J~V >T 6Z 6i jIj I\\ N~R M[=U MX 2VFV %VBV H] AWCW;V%Y=R" >" HV %W -V 4UETEU IV 4ZBZ IWGX ?V;[ IS9Z 9VNX DX *Z;R -X JZ>Y JZ?Y 1U>Z 5`C_#` CX;[ H[7W&X9_$X -X (\\6X)X/X'X -X -X;[ MX -_4_0`8X![;[&X" >"=[ F[;[&X<[ LZ8U =X <X/X+X,X)X8]8X<X9X#X6X )Z$W 1V KW &ZKZ FV ;W >W W 2W 4W ,W HW 3W :V MW KX=W Cc " >";X7P HX (W<W ;WNW BY /X ([;[ Gg JX0X)X?X?X([;[ Fd 6V 6d KX KS 4Y>R !X8X JV /X<P 6V1U IV <U0U 2UAU 3U *U 1V " >" 6fGU KU 4V?V <U/V\"U/V IU7V LX ,` 5` 5` 5` 5` 5` 3XIX G[7W&X -X -X -X -X -X -X -X ,X9_%`8XX6X MX ,X;W" >" :V .V 3UBU ?TBT 7] 3V .V 4VAU GV .V 3UAU 4d 7TBT 1V .V 2UBU ?TBT ;V .V 1UBU <V 8W )r Gr Gr Gr Gr IVHR GX+W =S 5[ 7i!k" >"Jk I] !^ )Y:T MX 2VFV %VBV Le EVAV<V$X:P HV %W -W 6WFTFV IV 4X?Y IRBX ?T7Y IP5Z :VNX DX +Z8P .Y JY<Y KY=X 1S;" >"Y 6];\\$WNW CX9Z J[4U&X6]%X -X )[2V)X/X'X -X -X<[ LX -XNV6VNX0`8X\"Z7Z'X;Z HZ7Z'X;Z LY4R =X <X/X*X.X(X8]8X<Y;Y#Y8Y *Z#W 1V KW 'ZIZ FV <W >W W " >" 2W 4W ,W HW 3W :V MW KW<X Dd <W -W )W;X <WNW AY 0X )Z7Z Jl MX0X)X?X?X)Z7Z Hf 7V 7f" >" LX KS 4X;P W8W IV /W \"V.U JV >U.U 4VAV &V 5U *U 2V 6gGU KU 5W?W =U/V\"U/V IU7V LX ,WNW 5WNW 5WNW 5WNW 5WNW 5WNW 4XHX H[4U&X -X -" >"X -X -X -X -X -X ,X6]&`8X\"Z7Z#Z7Z#Z7Z#Z7Z#Z7Z 'Z8['X/X'X/X'X/X'X/X)Y8Y MX ,W:W 9V 0V 3U@U ?[ 1V 0V 3U@V GV 0V 3U?U 8h 1V 0V 2U@U " >" CV 0V 1U@U >V 7W *`L` I`L` I`L` I`L` I`L` JV =X,X >T 6] 9k\"lKl K_ #\\ 'Y8S MX 2VFV %VBV Nk IVAV=V$X 1V %V +V " >"6YHTHY -V EW 5Y>Y :X ?R5Z .Y ;VMX DX +Y DX IY<Y LY;X 2Q8Y 8[5[&WNW CX8Y KZ1T&X4\\&X -X *Z.T)X/X'X -X -X=[ KX -XNV6VNX0a9X#Z5Z(X:Y IZ5Z(" >"X:Z NY1P =X <X/X*X.X'W9WNV:X:Y=Y!Y:Y *Z\"W 1W LW (ZGZ -W >W W 2W 4W ,W HW 3W :V MW KW;W De =W " >" -X *W:W <VLV @Y 1X *Z5Z Mp X0X)X?X?X*Z5Z Jh 8V 8h MX KS 5Y :X:X IV /W #U+T JV ?U+T 5U?U &V 5U +V AgGU KU 5" >"V=V =U0V!U0V IV8V KX ,WNW 5WNW 5WNW 5WNW 5WNW 5WNW 4XHX IZ1T&X -X -X -X -X -X -X -X ,X4\\'a9X#Z5Z%Z5Z%Z5Z%Z5Z%Z5Z )Z5Z(X/X'X/X'X/X'X/X(Y:Y LX -X:W " >" !W 2\\LZ EW +[@[ K[@[ K[@[ K[@[ K[@[ KV <X-X /P 0T 7^ 9k\"lLm La %Z " >" %Z6Q MX 2VFV %VCV n KWAW>V$X 1V &W +W 5XITIX +V EV 4X<X :X ?P2Y -X <WMX DX ,Y CX JY:Y MX9W 2P7Y :Z0Z(WLW DX7X KY.R&X2Z&X -X *Y+R)X" >"/X'X -X -X>[ JX -XNW8WNX0a9X#Y3Y(X9Y JY3Y(X9Y NX LX <X/X*X.X'X:VMV:X9X=X NX:X *Z!W 0V LW )ZEZ .W >W W 2W 4W ,W HW " >" 3W :V MW LX;W Df >W ,W +W8W >WLW @Y 2X +Z3Z!t\"X0X)X?X?X*Y3Y Kj 9V 9j AS 5X 8W:W HV /W #T)T KV " >" @T(T 6U?U &V 5T +V AhGU KU 5V=V =U0V!U0V JV7V WLW 7WLW 7WLW 7WLW 7WLW 7XNX 6XGX IY.R&X -X -X -X -X -X -X -X ,X2Z'a9X#Y3Y%Y3Y%Y3Y%Y3Y%Y3" >"Y )Y3Z)X/X'X/X'X/X'X/X'X:X Ki >W8V *XHZ FW ,Z<Z MZ<Z MZ<Z MZ<Z MZ<Z LV <X.X .R 2S " >"7` :k#nMm Mb &Z $Y4P MX 2VFV &VBV!o KV?V?V#W 0V &V )V 3XKTKX )V EV 5X:X ;X X -Y =VLX DX -Y CY JY:Y NY9X HX ;" >"Z-Y)WLW DX7Y MY,Q&X1Z'X -X +Y)Q)X/X'X -X -X?[ IX -XMV8VMX0XNX:X$Y1Y)X9Y KY1Y)X8X NX LX <X/X)X0X&X:VMV:X9Y?Y NY<Y *Y W 0V LW *ZCZ /W >W W " >" 2W 4W ,W HW 3W :V MW LW:W Dg ?W ,X ,W8W >WLW ?Y 3X +Y1Y\"v#X0X)X?X?X+Y1Y MYNVNY :V :" >"YNVNY BS 5X 8X<X HV /W $T?ZBT*c AT&T 7U?U &V 6U -W @hGU KU 6V;V >U1V U1V KW7V NWLW 7WLW 7WLW 7WLW 7WLW 7WLW 6XGX JY,Q&X -X " >"-X -X -X -X -X -X ,X1Z(XNX:X$Y1Y'Y1Y'Y1Y'Y1Y'Y1Y P)P$Y3[)X/X'X/X'X/X'X/X'Y<Y Km BW8W +UDZ 7P 1W " >" -Y8Y Y8Y Y8Y Y8Y Y8Y MV ;W.X /T 4T 7a ;k#nMn Nc 6P :W4W ?Z ?X6X KY #Y 0X 2VFV &VBV\"p KV?V?V#W 0V 'W )W 2XMTMX 'V FW " >"5X:X ;X Y -X >VKX DX -X BX IX8X NX7W KP 1P =X <Y)X+XLX EX6X NY*P&X0Z(X -X ,Y'P)X/X'X -X -X@Z GX -XMV8VMX0XNX:X%Y/Y*X8X LY/Y*X8Y!X KX <X/X)X0" >"X&X:VMV:X8YAY LY>Y *Z W 0W MW +ZAZ 0W >W W 2W 4W ,W HW 3W :V MW LW:W DSF[ @X -X " >" -X8W ?WJW ?Y 4X ,Y/Y%z%X0X)X?X?X,Y/Y YMVMY ;V ;YMVMY CS 5X 5P*Q JW<W GV /W %TBbET/g BTGb?T 8U?U &V 7U 5_ ?hGU KU 6V;V " >">U2V NU2V$_7V NXLX 9XLX 9XLX 9XLX 9XLX 8WLW 6XGX KY*P&X -X -X -X -X -X -X -X ,X0Z)XNX:X%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y\"R+R&Y3]*X/X'X/X'X/X'X/X&Y>Y Jp EW:Y " >" +R@Y 7Q 2W .XEVFY\"X5Y\"X5Y\"X5Y\"X5Y NV ;X/X 0V 5T 8c <k#nNo e >^ AW4W ?Z >W6W KY " >" \"Y 0X 2VFV &VCW#[LSKZ KV?V@V\"W 0V 'W )W 1XNTNX &V FW 6Y:Y <X NX -X ?WKX DX .Y CY IX8X NX7W NS 1S @X =X&X,WJW EX6X NY /X/Y(X -X ," >"Y /X/X'X -X -XAZ FX -XMW:WMX0XMX;X%Y/Y*X8Y MY/Y*X8Y!X KX <X/X)Y1X%W;WMW;W6XAX JX>X *Z NW 0W MW ,Z?Z 1W >W W 2W 4W ,W H" >"W 3W :V MW LW:W DPAY ?Y .W -W6W @WJW >Y 5X ,X-X&_MXM_&X0X)X?X?X,Y/Y !YLVLY <V <YLVLY DS 6Y 6R,R JX>" >"W FV /X 'TCfFT2i CUGfBT 9U?U &V 7U 5] >iGU KU 6V;V >U2V NU2V$]5V NWJW 9WJW 9WJW 9WJW 9WJW 9WJW 8XFX KY /X -X -X -X -X -X -X -X ,X" >"/Y)XMX;X%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y#T-T'Y3]*X/X'X/X'X/X'X/X%X>X Ir GW=\\ GY 9S 3W /XDVDX$X2X$X2X$X" >"2X$X2X V ;X0X 0X 7T 8d <k#~`!g Bd DW4W ?[ ?X7W LY !X /X 2VFV &VCV#ZJSGV KV?VAV!W 0V 'V 'V /d $V FV 5X8X <X NX -X ?VJX DX" >" .X BX HX8X Y7X #V 1V CX >X$X-WJW EX6X Y .X.Y)X -X -Y .X/X'X -X -XBZ EX -XLV:VLX0XMX;X&Y-Y+X7X NY-Y+X7X!X KX <X/X(X2X$X<VKV<X6YCY JY@Y +Z MW /" >"V MW -Y;Y \"Z ;WDX 0Z 2XDW >Z <W !X :WDY IW ,W HX8X MY 3Z *X 3X &X 7] <W 3W :V MW ;X :W:W 4Y @[ )\\ (Y 6X 8QEV :[ " >" JW6W @VIW =Y 6X -Y-Y(]JXJ]'X0X)X?X?X-Y-Y #YKVKY =V =YKVKY IZ 9X 6T.T JW>W FV .X (TDgFT3j CTFhDT 9U?U &V 8U 4\\ =iGU KU 6V" >";V >U3V MU3V#\\5V MWJW 9WJW 9WJW 9WJW 9WJW 9WJW 8XFX LY .X -X -X -X -X -X -X -X ,X.Y*XMX;X&Y-Y+Y-Y+Y-Y+Y-Y+Y-Y%V/V)Y3_+X/X'X/X'X/X'X/X%Y@Y Is HW?^ " >"?Z /Z /Z /Z /Z /Z /Z6Y NZ 0Z /Z /Z /Z 8Y 1Y 3Z /Z /Z /Z /Z 3ZCV 5WDX DXCVCW%X0W%X0W%X0W%X0W V :X1X 0X 7T 9f =k#~`\"h Cf " >"EW4W @\\ ?X8X LX !Y /X 2VFV 'VBV#XHSET KV?VAV!W 0V (W 'W .` \"V GW 5X8X <X NX -X @VIX DX .X BX HX8X X5W &Y 1Y FX >W\"W.XJX" >" FX6X X -X.Y)X -X -X -X/X'X -X -XCZ DX -XLV:VLX0XLX<X&X+X+X7X NX+X+X7X!X KX <X/X(X2X$X<VKV<X5YEY HYBY +Z LW /W NW .Y9Y 'b ?WG^ 7b 9^GW A` Gl 2_GW" >" MWG_ DW ,W ,W8Y MW ,WG^>^4WG_ 9` @WG^ 9^GW MWG\\ ;f Gm <W6W#X2X#W;X;W5Y7Y#W1X\"u 6W :V MW >^BV\"W:W 3X ?^ 0e AWG_ KV.X ?X <W6W HTG[ K}!WCWCW Ca" >" 7p&{ NW6W AWHW >Z 7X -X+X)\\HXH\\(X0X)X?X?X-X+X $YJVJY >V >YJVJY Ma =X 7V0V JW@W EV .Y *TEiET5k DTEiDT :VAV &V 9U 3_ ;W6W NiGU " >"KU 6V;V >U3V MU3V#_8V NXJX ;XJX ;XJX ;XJX ;XJX ;XJX :XEX LX -X -X -X -X -X -X -X -X ,X.Y*XLX<X&X+X+X+X+X+X+X+X+X+X&X1X*X3`+X/X'X/X'X/X'X/X$YBY Ht " >"IW@_ Cb 7b 7b 7b 7b 7b 7b>a'b 7` 5` 5` 5` AW ,W ,W ,W DY EWG_ 9` 5` 5` 5` 5` (Z <`GV W6W MW6W MW6W MW6W#W1X NWG^ HW1X NWBVBW&W.W&WJP:PJW&W4PJW&W." >"W!V :X2X 0X 6S 8g >k#~`#j Fj GW4W @\\ >W8W LX X .X 2VFV 'VBV$XGSCR KV?VBV X 1V (W 'W ,\\ V GW 5X8X <X NX -X AWIX DX /X " >"BY HX8X X5W ([ 1[ HX ?W W/WHW FX6X!Y -X-Y*X -X .Y -X/X'X -X -XDZ CX -XLW<WLX0XKW<X'Y+X+X7X Y+X+X7X!X KX <X/X'X4X#X<VKV<X4XFY FXBX *Y KW /W NW " >"/Y7Y +g AWIb ;f =bIW De Il 3bIW MWIc FW ,W ,W9Y LW ,WIbBb6WIc >f CWIb =bIW MWI^ =j Im <W6W\"W2W\"W<Z<W4X7X!W2W!u 6W :V MW @bEW\"W:W 2X @c 8j CW" >"Ic MX0W =W <W6W IW/W\"VI^ L}!WCWCW Ee =t&{ W4W BWHW =Y 7X .X*Y*ZFXFZ(X0X)X?X?X.Y+X #WIVIW =V =WIVIW f ?X 8X2X KW@W EV .Z +SE[GVDS6ZDV " >"DSDVDXDS 9UAU %V :U 2` <W6W NiGU KU 6V;V >U4V LU4V\"`:V GX /WHW ;WHW ;WHW ;WHW ;WHW ;WHW :XEX MY -X -X -X -X -X -X -X -X ,X-Y+XKW<X'Y+X,Y+X,Y+" >"X,Y+X,Y+X'Z3Z,Y4WNY,X/X'X/X'X/X'X/X#XBX Gu JWB\\ Ag <g <g <g <g <g <gBe+f <e :e :e :e CW ,W ,W ,W Mc FWIc >f ;f ;f ;f ;f +Z >eJU NW6W MW6W MW6W MW6W\"W" >"2W MWIb IW2W NWAVAW(W,W(WJR<RJW(W4RJW(W,W\"V 9W2X 1X 6T 9i ?k#~`#k Hl HW4W @] ?X9W LW NX .X 2VFV 'VCW$WFSAP KV?VBV NW 1V (V" >" &W *X MV GV 5X6X =X NX -X AVHX DX /X BX GX8X X5X ,^ 1^ LX ?W MW0WHW FX6X!X ,X-Y*X -X .X ,X/X'X -X -XEZ BX -XKV<VKX0XKX=X'Y+Y,X7X Y+Y,X" >"7X!X KX <X/X'X4X\"W=WKV<W3YGY FYDY +Z KW .V NW 0Y5Y /l CWJe ?j AeJW Eh Kl 5eJW MWJe GW ,W ,W:Y KW ,WJdDd7WJe @h DWJe AeJW MWJ_ ?l Im <W6W\"W2W!W=Z=" >"W2X9X W2W!u 6W :V MW BeFV!W;X 1W ?f =k CWJe NY2X =X =W6W JW-W$WI` N}!WCWCW Gi Av&{ W4W BVGW <Y 8X .X)X+ZEXEZ)X0X)X?X?X.Y+Y #UHVHU <V <UHVH" >"U !j AX 9Z4Z KWBW DV -Z -TFY@RDT8XAV ETDVBWET :VCV %V ;V )X =W6W NiGU KU 6V;V >U5V KU5V GX<V FX /WHW ;WHW ;WHW ;WHW ;WHW ;WHW :WDX" >" MX ,X -X -X -X -X -X -X -X ,X-Y+XKX=X'Y+Y-Y+Y-Y+Y-Y+Y-Y+Y'Z5Z+Y5WMY,X/X'X/X'X/X'X/X#YDY GX@^ KWCZ Al Al Al Al Al Al AlFh.j ?h =h =h =h EW ,W ,W ,W !g" >" GWJe @h =h =h =h =h ,Z @hLV NW6W MW6W MW6W MW6W\"W2W MWJe KW2W W@VAW)W+W)WJT>TKW)W4TKW)W+W\"V 9X3X 2X 5T :k ?i\"~`$m Jn IW4W A^ ?X:X MW " >" NY .X 2VFV 7~X2XFS <V?VCV MX 2V )W %W +X MV GV 5X6X =X NX -X BVGX DX /X BX GX8X X5X LX -X 7a 1a X @W KW2XHX GX6X!X ,X,X*X -X ." >"X ,X/X'X -X -XFZ AX -XKV<VKX0XJW=X'X)X,X7X X)X,X7X!X KX <X/X'X4X\"X>VIV>X2YIY DYFY +Z JW .V NW 1Y3Y 1n DWLh Bm ChLW Gk Ll 6hLW MWKg HW ,W ,W;Y JW " >",WKfGg8WKg Cl FWLh ChLW MWK` @m Im <W6W\"X4X!W=Z=W1X;X NW3X!u 6W :V MW CgGV!W;W 0X ?g Am CWKg [4X >Y =W6W JW-W&YJb }!WCWCW Hk Dx&{ W4W CWFW <Y 9" >"X /Y)X,ZDXDZ*X0X)X?X?X.X)X P #SGVGS %P 7V 9P0P CSGVGS !l BX 8ZGWFZ JWCX DV ,Z .SEW<PCS8V?V .P>P JSCVAVDS :WEV $V <V &W >W6W NiGU KU 6V" >";V BP>P /U5V KU5V EW=V FX 0XHX =XHX =XHX =XHX =XHX =XHX <XDX MX ,X -X -X -X -X -X -X -X ,X,X+XJW=X'X)X-X)X-X)X-X)X-X)X&Z7Z*X5WKX,X/X'X/X'X/X'X/X\"YFY F" >"X=[ KWDY @n Cn Cn Cn Cn Cn CnHj1m Bk @k @k @k FW ,W ,W ,W $j GWKg Cl Al Al Al Al .Z Bs MW6W MW6W MW6W MW6W\"W3X MWLh LW3X V?V@W*V)W*VJV@VKW*V4VKW*V" >")W#V 9X4X 2X 4S :l ?i\"~`%o Lp JW4W A^ >W:X MW NX -X 2VFV 7~X2WES <V?VDV LX 2V )W %W -\\ V HW 5X6X =X NX .X BWGX DX 0X " >"BY FX:X NX5X LX -X :d 1d $Y @V IV2WFW GX6X\"Y ,X,Y+X -X /Y ,X/X'X -X -XH[ @X -XKW>WKX0XJX>X(Y)X,X7X!Y)X,X7X!Y LX <X/X&X6X!X>VIV>X1YKY BXFX +Z IW .W " >" W 2Y1Y 2o EWMj Dn DjMW Hn Nl 7jMW MWLi IW ,W ,W<Y IW ,WLhIi9WLi En GWMj EjMW MWLa An Im <W6W!W4W W=Z=W1Y=Y MW4W u 6W :V MW DiIV W;W /W =g C" >"m CWLi![4W =Y =W6W KW+W(ZKd!}!WCWCW Im Fy&{ W4W CWFW ;Y :X /X'X-YCXCY*X0X)X?X?X/Y)X!R #QFVFQ $R 9V :R1R DQFVFQ \"n BX 7ZJ\\JZ HWDW CV +[ 1TFW.T:W?V" >" /Q?Q KTCVAWET :XIX $V =V #U >W6W NiGU KU 6V;V BQ?Q 0U6V JU6V BU>V EX 0WFW =WFW =WFW =WFW =WFW =WFW <XDX NY ,X -X -X -X -X -X -X -X ,X,Y,XJ" >"X>X(Y)X.Y)X.Y)X.Y)X.Y)X%Z9Z*Y6WJX,X/X'X/X'X/X'X/X!XFX EX;Z LWDX ?o Do Do Do Do Do DoKn4n Cn Cn Cn Cn HW ,W ,W ,W %l HWLi En Cn Cn Cn Cn /Z Cs LW6W MW6" >"W MW6W MW6W!W4W LWMj LW4W W?V?V+W(V+WKXBXKV+W5XKV+W(V$W 8W4X 2X 5T ;n ?g!~_%p LZDZ JW4W A^ >W:W MW MX -X 2VFV 7~X2WES <WAW" >"DV KX 3V )W %W /` \"V HV 4X6X =X Y .X BVFX DX 0X BX EX:X NX5X LX -X <e /e 'Y @V GV4XFX HX7X!X +X+X+X -X /X +X/X'X -X -XI[ ?X -XJV>VJX0XIW>X(X" >"'X-X7X!X'X-X7X!Y LX <X/X&X6X!X>VIV>X1YKY AXHX +Z HW -V W 3Y/Y 3p FWMk Fo EkMW Io Nl 8kMW MWMk JW ,W ,W=Y HW ,WMjJj:WMk Gp HWMk GkMW MWMb Bo Im <W" >"6W!W4W W>\\>W0X=X LW5X u 6W :V MW EkJV W<X /W >j Fn CWMk\"\\6X =Z >W6W KW+W)[Ke\"}!WCWCW Jo Hz&{ W4W DWDW ;Y ;X /X'X.YBXBY+X0X)X?X?X/X'X#T HV IT " >":V ;T3T :V CV +o BX 6ZM`MZ GXFX CV *\\ 3SFW,S:V>V 0R@R KSBV@VDS 9e #V ?W \"V ?W6W NiGU KU 6V;V BR@R 1U6V JU6V BV?V EX 1XFX ?XFX ?XFX ?XFX" >" ?XFX ?XFW =XCX NX +X -X -X -X -X -X -X -X ,X+X,XIW>X(X'X/X'X/X'X/X'X/X'X%Z;Z)X5VHX-X/X'X/X'X/X'X/X XHX DX:Y LWEX >p Ep Ep Ep Ep Ep EpMp6o Do Do Do Do" >" HW ,W ,W ,W 'o IWMk Gp Ep Ep Ep Ep 0Z Ds KW6W MW6W MW6W MW6W!W5X LWMk MW5X V>V?W,V'W,VKZDYKW,V5YKW,V'W%W 8X5W 2X 4T ;o @g ~^%q NY@Y KW4W B`" >" ?X<X MV LX -X 2VFV 7~X2WES ;VAVDV JY 4V )V $W 1d $V HV 4X6X =X X .Y CWFX DXLY =XEX 'Y EY<X MX5X LX -X ?e )e +Y ?V:X6V4WDW " >"HX7X!X +X+X+X -X /X +X/X'X -X -XJ[ >X -XJW@WJX0XIX?X(X'X-X7X!X'X-X8Y Y MX <X/X%W6X W?WIV>W/YMY @YJY +Y GW -V W 4X+X 4YE\\ FWNXG\\ H]EX F\\GXNW J\\F[ " >"GW ,\\GXNW MWNXG[ JW ,W ,W?Z GW ,WNXH[KXH[:WNXG[ H]H] IWNXG\\ I\\GXNW MWNXFQ C\\CW CW ,W6W!X6X NW?\\?W.X?X JW6W 1X 6W :V MW 9X=X\"[IZKW W=Y /W @m H]DV " >"CWNXG[\"\\6W =[ >W6W LW)W*ZJWKY\"}!WCWCW K\\H] J{&{ V3W DWDW :Y <X /X'X.XAXAX+X0X)X?X?X/X'X$V IV JV ;V <V5V ;V CV ,^MSKW BX 5x EWFW BV ,_ 5TFW,S:V?W" >" 1SAS LTBV@VDS 9d \"V @W U ?W6W NiGU KU 5V=V ASAS 2U7V IU7V @U@V DX 1WDW ?WDW ?WDW ?WDW ?WDW ?XFX >XCX NX +X -X -X -X -X -X -X -X ,X+X,XIX?" >"X(X'X/X'X/X'X/X'X/X'X$Z=Z(X6WHX-X/X'X/X'X/X'X/X YJY DX9Y MWEW =YE\\ EYE\\ EYE\\ EYE\\ EYE\\ EYE\\ EYE]N\\G[7]EX E\\F[ F\\F[ F\\F[ F\\F[ IW ,W ,W ,W (p IWNXG[ H]H" >"] G]H] G]H] G]H] G]H] 1Z E]H^ JW6W MW6W MW6W MW6W W6W KWNXG\\ MW6W NV>V>V,V&V,VJZFYIV,V6YIV,V&V%W 7W6X 3X LR:T ;q @e N~^&s!Y>Y LW4W B` >W<X N" >"W $x FX 2VFV 7~X2WES ;VAVEW IY 5V *W #W 4XNTNX &V IW 5X5X =X X .X CWEX Di AXH_ +X CX<X MX5X LX -X Be #e /Z @V<^IUDV5WDW HX8Y" >"!X +X+X+X -X /X +X/X'X -X -XK[ =X -XIV@VIX0XHW?X(X'X-X7X!X'X-X8X NZ NX <X/X%X8X NX@VGV@X.c >XJX +Z GW -W !W 5X)X 5U>Z G_CZ I[>T FZC_ KZAZ HW -ZB_ " >"M^BZ KW ,W ,W@Z FW ,^CZMVCZ;^BZ IZBZ I_CZ IZC_ M^ 5Y<S CW ,W6W W6W MW?\\?W.YAY JW6W 2Y 6W :V MW ;\\A\\%YDYLV NW>Y .W AXJa IZ<Q C^BZ MX8X =\\ ?W6W LW)" >"W+YIXJY LW=W JWCWCW LZBZ K]F] ;W >W2W EWDW 9Y =X /X'X/YAXAY,X0X)X?X?X/X'X%X JV KX <V =X7X <V CV -\\JSHT BX 4v DXHX BV -b 7SEV*S;V?W 2TBT LSAV" >"@VCS 9b !V AV MU ?W6W MhGU KU 5V=V ATBT 3U8V HU8V ?UAV CX 1WDW ?WDW ?WDW ?WDW ?WDW ?WDW ?XBX NX +X -X -X -X -X -X -X -X ,X+X,XHW?X(X'X/X'X/X'X" >"/X'X/X'X#Z?Z'X7WGX-X/X'X/X'X/X'X/X NXJX CX9Y MWFW <U>Z FU>Z FU>Z FU>Z FU>Z FU>Z FU>eBZ9[>T FZAZ HZAZ HZAZ HZAZ JW ,W ,W ,W )r J^BZ IZBZ GZBZ GZBZ GZBZ" >" GZBZ 1Z EZB[ JW6W MW6W MW6W MW6W W6W K_CZ MW6W V=V>V-V%V-VHZHYHV-V6YHV-V%V%W 7X7X 4X NU:T <s Ae N~^'u\"X<X LW4W BWNW >W<W MW " >"$w EX 2~X2WES ;WCWEV GY 9W #W 5XMTMX 'V IV 4X4X >X !Y 0Y BVDX Dk CXJc -X BX>X LX5Y MX -X Ee Le 3Z ?U=bKUCU6XDX IX9Y X +X+X+X -X /X +X/X" >"'X -X -XL[ <X -XIV@VIX0XHX@X(X'X-X8Y!X'X-X8X N[ X <X/X%X8X NX@VGV@X.c =XLX +Z FW ,V !W AR9Y H]?Y KZ:R GY?] LY=Y IW -Y?] M]@Y KW ,W ,WAY DW ,]@X" >"NV@X;]@Y JY>Y J]?Y KY?] M] 4X8P CW ,W6W X8X MW?\\?W-XAX IW7X 3Y 5W :V MW =_C_(YBXLV NW?Z -W CXC\\ KY ,]@Y LW8X >] ?W6W LW)W,YHWHY MW=W JWCWCW MY>Y " >"L[B[ ;W >W2W FWBW 9Y >X 0X%X0X@X@X,X0X)X?X?X/X'X&Y JV KY =V >Y7Y =V CV .[HSFR BX 3t BWHW AV .WN\\ 9SFV)S;V?W 3UCU LSAV@VCS 7_ V BV LU ?W" >"6W MhGU KU 5W?W AUCU 4U8V HU8V ?UAV CX 2XDX AXDX AXDX AXDX AXDX AXDX @XBX NX +X -X -X -X -X -X -X -X ,X+X,XHX@X(X'X/X'X/X'X/X'X/X'X\"ZAZ&X8WFX-X/X'" >"X/X'X/X'X/X MXLX BX8X MWFW <R9Y GR9Y GR9Y GR9Y GR9Y GR9Y GR9a>Y;Z:R GY=Y JY=Y JY=Y JY=Y KW ,W ,W ,W *]E[ J]@Y JY>Y IY>Y IY>Y IY>Y IY>Y 2Z FY>Y JW6W MW" >"6W MW6W MW6W W7X K]?Y NW7X V=V=U-V$U-VGZJYFU-V7YFU-V$U%W 7X8X &~X/X:T =t @c L~\\'v\"W:W LW4W CXNX ?X>X MV $x EX 2~X2WES :VDW" >"EV FZ :W #W 7XKTKX )V IV 4X4X >X !X 0Y BWDX Dm FXKf /Y AYBY KX5Y MX -X Gd ~X d 5Y ?V>dLUCU6WBW IX;Z Y +X+Y,X -X 0Y +X/X'X -X -XM[ ;X -XIWBWIX" >"0XGW@X)Y'Y.X8X!Y'Y.X9Y M] #X <X/X$X:X MX@VGV@X-a <YNY ,Z EW ,V !W AP6X H\\=Y LY7P HY=\\ LX;X IW .Y=\\ M[=X KW ,W ,WBY CW ,[=]=W;[=X KY<Y K\\=Y MY=\\ " >"M\\ 4X *W ,W6W NW8X MW@VNV@W,XCX GW8W 3Y 4W :V MW >aEa)X@XNW NWA[ ,W DW?[ LX +[=X KW:X =] ?W6W MW'W-XGWGX MW=W JWCWCW MX<Y NZ>Z <W >W2W FWBW 9Z ?X" >" 0X%X0X@X@X,X0X(X@X@X/Y'Y(Y IV JY >V ?Y5Y >V CV .YFSDP BX 2q @XJX AV /WK[ :SFV)S;V@X 4VDV LSAV@VCS 6\\ MV CV KU ?W6W MhGU KU 4V?V @V" >"DV 5U9V GU9V >UBV BX 2WBW AWBW AWBW AWBW AWBW AXDX @XBX Y +X -X -X -X -X -X -X -X ,X+Y-XGW@X)Y'Y1Y'Y1Y'Y1Y'Y1Y'Y\"ZCZ&Y9WEY.X/X'X/X'X/X'X/X MYNY BX8Y N" >"WFW <P6X GP6X GP6X GP6X GP6X GP6X GP6_<X;Y7P GX;X JX;X JX;X JX;X KW ,W ,W ,W *Z?Y K[=X KY<Y KY<Y KY<Y KY<Y KY<Y 3Z GY<Y KW6W MW6W MW6W MW6W NW8W J\\=Y " >"NW8W NV=V=V.V$V.VFZLYEV.V8YEV.V$V&W 6W8X &~X2\\<T =v Ab K~\\(x$W8W MW4W CXNX ?X>X NW $w DX $VBV#XFS :WFXEV H] ;W #W 9XITIX" >" +V JW 4X4X >X \"Y 3[ BWCX Dn GXLi 1X ?ZFZ JY7Z MX -X Je M~X Me 9Y >U?gMUCV7WBW IX>\\ NX *X*X,X -X 0X *X/X'X -X -XNZ 9X -XHVBVHX0XGXAX)X%X.X9Y!X%" >"X.X:Y La 'X <X/X$X:X LWAWGV@W+_ :XNX ,Z DW ,W \"W &W H[;X MY .X;[ MX9X JW .X;[ M[<X LW ,W ,WCY BW ,Z<\\<X<[<X LX:X K[;X MX;[ M[ 3W )W ,W6W NW8W KW" >"AVNVAW*XEX FW9X 4Y 3W :V MW ?cGc+Y?WNV MWD] +W DV=Z LX +Z;X LW:X >_ @W6W MW'W.YGWFX NW=W JWCWCW NX:X NY<Y <W >W2W FWBW 8Z @X 0X%X0X@X@X,X0X(X@X@X" >"/X%X)Y HV IY ?V @Y3Y ?V CV /YES 6X 1\\H[ JcJc LV 0WI\\ =TFV)S;WAX 5WEW MTAVAWCS 3W 4~W.W KV ?W6W LgGU KU 4WAW @WEW 6U9V GU9V ?VBV BX 2" >"WBW AWBW AWBW AWBW AWBW AWBW AXAX X *X -X -X -X -X -X -X -X ,X*X-XGXAX)X%X1X%X1X%X1X%X1X%X!ZEZ%X9WCX.X/X'X/X'X/X'X/X LXNX AX7X NWFW !W ,W ,W ,W ,W ,W " >",]:X=Y .X9X LX9X LX9X LX9X LW ,W ,W ,W +Z=X K[<X LX:X KX:X KX:X KX:X KX:X 3Z GX<Z KW6W MW6W MW6W MW6W NW9X J[;X NW9X NU<V=V.U#V.UDZNYDV.U8YDV.U#V&" >"V 5X9W %~X3]<T >x A` J~\\(y%W8W MW4W CXMW >W>W MV $x DX $VCV\"XFS 9XIXEV H_ <W #W ;YHTHY -V JV 3X4X >X #Y ?g AVBX Do HXM" >"k 3Y >l HX7Z MX -X Me J~X Je =Y >V?hNUBU8XBX Ju MX *X*X,w Lq IX *~R'X -X -c 8X -XHVBVHX0XFWAX)X%X.X9Y!X%X.X;Z Ke ,X <X/X$X:X LXBVEVBX+_ 9` +Y CW +V \"" >"W %W IZ9X NX .X9Z MW7W JW /X9Z MZ;X LW ,W ,WDY AW ,Z;[;W<Z;X MY:Y LZ9X X9Z MZ 2W )W ,W6W NX:X KWAVNVAW*YGY EW:W 4Z 3W :V MW ?XMYIe,X>WNV MW" >"Ib +W EW;Y MW *Z;X KV:W =_ @W6W NW%W/XFWFX NW=W JWCWCW NW8X!Y:Y =W >| GW@W 8Y @X 0X%X1Y@X@Y-X0X(X@X@X/XImIX*Y GV HY @V AY1Y @V CV /XDS 6X 0YDY JdL" >"d LV 1WF[ >SFV'S<WBY 6XFX MS@VAVAS @~W/W JU >W6W LgGU KU 3WCW ?XFX 7U:V FU:V >UBV AX 3XBX CXBX CXBX CXBX CXBX CXBX BXAw?X *w Lw Lw Lw " >"LX -X -X -X ,X*X-XFWAX)X%X1X%X1X%X1X%X1X%X ZGZ$X:WBX.X/X'X/X'X/X'X/X K` @X7X NWFW W ,W ,W ,W ,W ,W ,[8W=X -W7W LW7W LW7W LW7W LW ,W ,W ,W ,Y:X LZ;X M" >"Y:Y MY:Y MY:Y MY:Y MY:Y \"Y=\\ LW6W MW6W MW6W MW6W MW:W IZ9X NW:W NV<V=V/V#V/VCcCV/V9YCV/V=X>V&V 4W:X %~X2TNV<S =y KWM^LW$~Z({&W7V MW4W CWLX ?" >"X?W MV KX ,X %VBV!XGS 9gFV Ha >W \"W ;WFTFW -V JV 3X4X >X #Y ?f AWBX Dp IXNm 4X <j GX7Z MX -X !e G~X Ge AY =U?ZH^BU8W@W Jt " >"LX *X*X,w Lq IX *~R'X -X -b 7X -XHWDWHX0XFXBX)X%X.X:Y X%X.X<Z Ih 0X <X/X#X<X KXBVEVBX*] 8` ,Z CW +V \"W %W IZ9X X -X9Z NX7X KW /X9Z MY9W LW ,W ,W" >"EY @W ,Y:Z:W<Y9W MX8X LZ9X X9Z MY 1W )W ,W6W MW:W JWAVNVAW)XGX DW:W 4Y 3X :V MW @VHXKWGV,W<^ MWIa *W FW9Y NW *Y9W KW<X >` @W6W NW%W/WEWEW NW=W JW" >"CWCW X8X!X8X =W >| GW@W 7Y AX 0X%X1X?X?X-X0X(X@X@X/XImIX+Y FV GY AV BY/Y AV DX 1XCS 6X 0W@X KdLd LV 1VCZ ?SFV'S;WE[ 7XFX G~X .S@VBWAS @~W0W " >".P>W >W6W KfGU KU 3XEX >XFX 8U;V:W3U;VCZ9P>WCV:W/Y 3W@W CW@W CW@W CW@W CW@W CXBX CX@w?X *w Lw Lw Lw LX -X -X -X 5p9X-XFXBX)X%X1X%X1X%X1X%X1X%X N" >"ZIZ#X:VAX.X/X'X/X'X/X'X/X K` @X7X NWFW W ,W ,W ,W ,W ,W ,[8X?X -X7X NX7X NX7X NX7X MW ,W ,W ,W ,X9X LY9W MX8X MX8X MX8X MX8X MX8X \"X=] LW6W MW6W MW6" >"W MW6W MW:W IZ9X NW:W NVLuKU/VLuKU/VBaAU/V:YAU/V=X=U&V 4X;X %~X2RLW>T >{!z'~Z)}(W6W NW4W DXLX ?X@X MV KX ,X %VBV!YHS 8eEV" >" Ic ?W !W ;UETEU ,V KW 3X4X >X $Y >c ?WAX DWD^ JbG] 5X 9d DY9[ MX -X #d D~X Dd DY <U@YD\\BU9X@X Kq IX *X*X,w Lq IX *~R'X -X -a 6X -XGVDVGX0XEWB" >"X)X%X.X;Z X%X.X?\\ Gk 4X <X/X#X<X KXBVEVBX)[ 6^ ,Z BW +W #W %W IY7W X -W7Y NW5W KW 0X7Y MY9W LW ,W ,WFY ?W ,Y:Z:W<Y9W MW6W LY7W W7Y MY 1W )W ,W6W" >" MW:W JWBVLVBW(XIX CW;X 5Y 2X :V MX BUDVKVDU.X<] LWI_ :WEW FV7X NW *Y9W JV<X >a AW6W NW%W0XEWEX W=W JWCWCW W6W!X8X =W >| HX@X 7Y BX 0X%X1X?X?X-X0" >"X(X@X@X/XImIX,Y EV FY BV CY-Y BV DX 1XCS 6X 1W>W KeNe LV 1VB[ ASFV'S;YI] 9YGY F~X .S@VDX@S @~W1V ,TEZ >W6W JeGU IX +U 2YIY <YGY :U;V:W3U" >";VGa<TEZCV:W/X 3X@X EX@X EX@X EX@X EX@X EX@X DX@w?X *w Lw Lw Lw LX -X -X -X 5p9X-XEWBX)X%X1X%X1X%X1X%X1X%X MZKZ\"X;WAX.X/X'X/X'X/X'X/X J^ ?X7X NWFX !W " >",W ,W ,W ,W ,W ,Z6W?X -W5W NW5W NW5W NW5W MW ,W ,W ,W -X7W LY9W MW6W MW6W MW6W MW6W MW6W \"W=^ LW6W MW6W MW6W MW6W MW;X IY7W NW;X NVLuKU/VLuKU/VA_" >"@U/V;Y@U/V=X=U&V 4X<X $~X,W>T ?|\"}(~X)~(W6W NW4W DXKW >W@X MV KX ,X %VBV!ZIS 7cEV IYNZ8W 0W !W :RCTCR +V KW 3X4X >X %Y" >" =b >V@X DS=\\ K`C[ 6Y 8b BX9[ Nd A~X Ad HY <VAX@ZBV:X?W Kq IX *X*X,w Lq IX *~R'X -X -a 6X -XGVDVGX0XEXCX)X%X.X=[ NX%X.u Fl 6X <X/X\"W<W IWCWEVBW([ " >"5\\ ,Z AW +W #W $V IY7X\"X -X7Y NW5W KW 0X7Y MX8X MW ,W ,WHZ >W ,X8X8W=X8X X6X MY7X\"X7Y MX 0W )W ,W6W MX<X IWCVLVCW&XKX AW<W 5Y 1W 9V LW 4P /TB" >"VMVBT.X;\\ LWI` =\\HW GW7X NW *X8X KV=X >XMW AW6W NW%W0XEWDW W=W JWCWCW!X6X#X6X >W >| HW>W 6Y CX 0X%X1X?X?X-X0X'XAXAX.XImIX-Y DV EY CV DY+Y CV DX 2X" >"BS 6X 1V<V KeNe LV 2V?Y ASFV'S:dNV :XFY E~X .S@i?S @~W2i >h =W6W JeGU IX 4g :g :YFX DgEV:X<gEVHe>hCV:X/X 3X?W EX?W EX?W EX?W EX?W EX@X EX?w?" >"X *w Lw Lw Lw LX -X -X -X 5p9X-XEXCX)X%X1X%X1X%X1X%X1X%X LZMZ!X<W@X.X/X'X/X'X/X'X/X I\\ >X7X NWFY !V +V +V +V +V +V +Y6W@X ,W5W NW5W NW5W NW5W MW ,W ,W" >" ,W -X7X MX8X X6X X6X X6X X6X X6X $X=_ MW6W MW6W MW6W MW6W LW<W HY7X NW<W MVLuKU/VLuKU/V@]?U/V<Y?U/V=X=U&V 3W<X $~X+V>S >}%~R)~V(~P)W6W NW4W" >" DWJX ?XAW L~^ $X ,X %VCV N\\LS 6aDVAW0XLZ9W 0W !W :PATAP +V KV 2X4X >X &Z =e BW@X DP8[ L^?Z 7X :h EY;\\ \"d >~X ?e LY ;U@W>Y" >"AU:W>W Ks KX *X*X,w Lq IX6f+~R'X -X -b 7X -XGWFWGX0XDWCX)X%X.X@^ NX%X.s Bl 8X <X/X\"X>X IXDVCVDX)[ 4\\ -Z @W *V #W $W JX5W\"X -W5X W4W KW 0W5X MX7W" >" MW ,W ,WIZ =W ,X8X8W=X7W W4W MX5W\"W5X MX 0X *W ,W6W LW<W HWCVLVCW&YMY AW=X 6Y 1X 9V LX 1X.Q /TA]AU/W:\\ LWIb A`JW GV5X NW +X7W KW>X >XMX BW6W W#W1WD" >"WDW W=W JWCWCW!W4W#X6X >W >| HW>W 7Y BX 0X%X1X?X?X-X0X'XAXAX.XImIX.Y CV DY DV EY)Y DV DX 2XBS 6X 2W<W =^ =V 2V>Y BSFV'S9bMV ;XFY D~X .S@h>S " >"@~W2i >g <W6W HcGU IX 4g 9e 8YFX EgEV;Y<gEVHf?gBV;Y0Y 3W>W EW>W EW>W EW>W EW>W EW>W EX?w?X *w Lw Lw Lw LX -X -X -X 5p9X-XDWCX)X%X1X%X1X%X1X%X1X%X " >"Ke X=W?X.X/X'X/X'X/X'X/X I\\ >X7X NWEY \"W ,W ,W ,W ,W ,W ,X5W@X -W4W W4W W4W W4W MW ,W ,W ,W -W6X MX7W W4W W4W W4W W4W W4W $W=VMW MW6W MW6W MW6W MW6W " >"LW=X HX5W NW=X MVLuKU/VLuKU/V?[>U/V=Y>U/V=X=U&V 3X=W 7X FW@T ?~&~T*~V)~R*W5V NW4W EXJX ?XBX L~^ $X ,X &VBV Mb 4]CVC]4XJZ:W" >" 0W !W +T KV KV 2X4X >X 'Z <g EW?X +Z L]=Z 9Y <l GZ=] %e e!Y :UAW<XAU;X>X Lu MX *X*X,w Lq IX6f+~R'X -X -c 8X -XFVFVFX0XDXDX)X%X.u MX%X.r" >" ?l :X <X/X\"X>X IXDVCVDX)\\ 4Z ,Y ?W *V #W $W JX5W\"W ,W5X W3W LW 0W5X MX7W MW ,W ,WJY ;W ,X8X8W=X7W W4W MX5W\"W5X MX 0X *W ,W6W LW<W HWCVKUCW%XMX " >"?W>W 6Y 0X 9V LX 5`3R 0T?[?T/W:[ KWId DbKW HW5X NW +X7W JV>W =WLX BW6W W#W1WDWDW W=W JWCWCW!W4W#W4W >W >| IX>X 9Y AX 0X%X1X?X?X-X0X'XAXAX.XImIX/Y B" >"V CY EV FY'Y EV DX 2WAS ?r CV:V =^ =V 2V=Y CSFV'S8`LV <XFX B~X .S@e;S @~W2i >e :W6W GbGU IX 4g 8c 5XFX FgFV:Y<gFVGg@eAV:Y1Y 3X>X GX>X GX>" >"X GX>X GX>X GX>X FX?w?X *w Lw Lw Lw LX -X -X -X 5p9X-XDXDX)X%X1X%X1X%X1X%X1X%X Jc NX>W>X.X/X'X/X'X/X'X/X HZ =X7X NWEZ #W ,W ,W ,W ,W ,W ,X4WAW ,W3W!W3" >"W!W3W!W3W NW ,W ,W ,W .X5W MX7W W4W W4W W4W W4W W4W $W>VLW MW6W MW6W MW6W MW6W KW>W GX5W MW>W LVLuKU/VLuKU/V>Z>U/V>Y=U/V=X=U&V 2W>X 8Y FW@T " >" ?~P(~V*~T(~Q)V4V NW4W EXJX >WBX L~^ $X ,X &VBV Ld 4WAVD`6XHZ;W 0W !W +T KV LW 2X4X >X 'Y ;i GV>X *Z M\\;Y 9X =p HZ?^ 'd " >" Id$Y 9UAW<XAU;W<W Lw X *X*X,w Lq IX6f+~R'X -X -d 9X -XFVFVFX0XCWDX)X%X.t LX%X.p ;k ;X <X/X!X@X HXDVCVDX*^ 4X ,Z ?W *W $W $W JX5W\"W ,W5X W3W LW" >" 0W5X MW6W MW ,W ,WKY :W ,W7W7W=W6W W4W MX5W\"W5X MX /Y ,W ,W6W LX>X GWEVJVEW#a >W>W 7Y 1Y 8V KY 9e8T 0T?Z>T0X:[ KWIf GdLW HW4W MW ,W6W JV?X >XKW BW6" >"W W#W2XDWDX!W=W JWCWCW!W4W#W4W >W >| IW<W :Y @X 0X%X1X?X?X-X0X&XBXBX-XImIX0Y AV BY FV GY%Y FV DX 2WAS ?r DW:W =\\ <V 2V;W CSFV'S7]JV =XFX A~X .S" >"@d:S (V Ii <a 8W6W FaGU IX 4g 6_ 2XFX GgGV:Z<gGVFUFY?a@V:Z2Y 2W<W GW<W GW<W GW<W GW<W GX>X GX>w?X *w Lw Lw Lw LX -X -X -X 5p9X-XCWDX)X%X1X%X1X%", > >"X1X%X1X%X Ia MX?W=X.X/X'X/X'X/X'X/X GX <X7X NWDZ $W ,W ,W ,W ,W ,W ,X4WAW ,W3W!W3W!W3W!W3W NW ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W $W?VKW MW6W MW6W" >" MW6W MW6W KW>W GX5W MW>W LVLuKU/VLuKU/V?\\?U/V?Y<U/V=X=U&V 2W>X 8X DWBT ?~Q)~W)~R&~(V4V NW4W EWHW >WBW K~^ $X ,X &VBV Kg \"" >"VEc8WFZ=W /W !W +T 4~W 5V 1X4X >X (Y -] IW>X )Y M[9X 9X >\\F\\ H[C` 'a Ca$Y 9UAV:WAU;W<W LX<\\!X *X*X,X -X 0X6f+X/X'X -X -XN[ :X -XEVHVEX0XCX" >"EX)X%X.s KX%X.o 6h <X <X/X!X@X GWDVCVDW*_ 4X -Z >W )V $W 6i JX5X$X -X5X V2W LW 1W3W MW6W MW ,W ,WLY 9W ,W7W7W=W6W!X4X NX5X$X5X MW .[ .W ,W6W KW>" >"W FWEVJVEW#a >W?X 8Z 4\\ 8V K[ =i<V 0S=Y=S0X:[ KW@^ IfMW HW4W MY .W6W JW@W =XKX CW6W W#W2WCWCW!W=W JWCWCW\"X4X%X4X ?W >W2W IW<W :Y @X 0X%X1X?X?X-X0X&X" >"BXBX-X%X1~` GV H~` GV H~` GV DX 3XAS ?r DV8V =\\ <V 2V;X DSFV'S4W /XFX @~X .S@VIX;S (V Ii 8Z 5W6W D_GU IX 4g 3Y .XFX HgGV;TNU<gGVFQ@W;Z=V;T" >"NU3Y 1W<W GW<W GW<W GW<W GW<W GW<W GX>X X *X -X -X -X -X -X -X -X ,X*X-XCXEX)X%X1X%X1X%X1X%X1X%X H_ LX@W<X.X/X'X/X'X/X'X/X GX <X7X NWD\\ 8i >i >i >i >i" >" >i >i3WBX ,V2W!V2W!V2W!V2W NW ,W ,W ,W .W4W MW6W!X4X\"X4X\"X4X\"X4X\"X4X M~Y2X@VIW NW6W MW6W MW6W MW6W KW?X GX5X NW?X LVLuKU/VLuKU/V@^@U/V@Y;U/V=X=U&" >"V 2X?W 8X CWBT ?~R*~X)~Q%}(V4W W4W FXHX ?XDX K~^ $X ,X 'WCV Ii &VEe:XEZ>W /W !W +T 4~W 5V 1X4X >X )Y )[ KW=X (Y N[9Y ;Y " >"?Z@Z I]Gb '^ =^$X 9U@V:WAU<X<X MX9Z\"X *X*X,X -X 0X6f+X/X'X -X -XM[ ;X -XEVHVEX0XBWEX)X%X.r JX%X.q 4e =X <X/X!X@X GXFVAVFX*` 5X .Z =W )V $W " >" :m JW3W$W ,W3W!W2W LW 1W3W MW6W MW ,W ,WMY 8W ,W7W7W=W6W!W2W NW3W$W3W MW -^ 2W ,W6W KX@X FWEVJVEW\"_ <W@W 7Y :b 7V Jb FmAX 0S<W<S0W8Y JW<[ KYHVMV GV" >"3X MZ 0W6W IVAX >XIW CW6W!W!W3WCWCW!W=W JWCWCW\"W2W%W3X ?W >W2W JW;X <Y ?X 0X&Y1X?X?X-X0X&YCXCY-X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V <Z ;V 2W;W " >"DSFV'S <XFX =V .S@VGW<S (V \"W6W A\\GU IX 2XFX *V;TMU LV2V V;TMU4Z 2X<X IX<X IX<X IX<X IX<X IX<X IX=X X *X -X -X -X -X -X -X -X ,X*X-XB" >"WEX)X%X1X%X1X%X1X%X1X%X G] KX@V;X.X/X'X/X'X/X'X/X GX <X8Y NWC\\ =m Bm Bm Bm Bm Bm Bm3WBW ,W2W\"W2W\"W2W\"W2W NW ,W ,W ,W /X4X NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y" >"2W@VHW NW6W MW6W MW6W MW6W JW@W FW3W MW@W KVLuKU/VLuKU/VA`AU/VAY:U/V=X=U&V 1W@X 9X BWBS >~R+~Z*~P#{'V4W W4W FXHX ?XDX K~^ $X " >" ,X 'VBV Gi (VFg;WCZ?W /W !W +T 4~W 6W 1X4X >X *Y &Z LW=X (Y NZ7X ;X ?Z>Z ImNX '[ 8\\%Y 9UAW:WAU<W:W MX7Y#X *X*X,X -X 0X6f+X/X'X -X -XL[ " >"<X -XEWJWEX0XBXFX)X%X.p HX%X.r 0a >X <X/X XBX FXFVAVFX+b 6X /Z <W )W %W =p JW3W$W ,W3W!| LW 1W3W MW6W MW ,W ,WNY 7W ,W7W7W=W6W!W2W NW3W$W3W MW -" >"b 6W ,W6W JW@W EWFVHVFW!] ;WAX 8Y 9` 5V H` HrG[ 0S<W<S0W8Y JW:Y KXF^ HW2W Kc ;W6W IVAX >XIW CW6W!W!W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W JW:W =Y >X 0Y'" >"X0X?X?X-X0X%XCXCX,X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V <Z FW;W DSFV'S =XFX <V .S@VFW=S (V \"W6W <WGU IX 1XFX +V;SLU LV2V V;SL" >"U5Z 1W:W IW:W IW:W IW:W IW:W IX<X IX=X X *X -X -X -X -X -X -X -X ,X*X-XBXFX)X%X1X%X1X%X1X%X1X%X F[ JXAW;X.X/X'X/X'X/X'X/X GX <X8X MWB] Bp Ep Ep Ep Ep " >"Ep E~eBW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WAWHW NW6W MW6W MW6W MW6W JWAX FW3W MWAX KV<V=V/V#V/VBbCV/VBY:V/V=X>V&V 1XAW 9" >"X @WDT ?~S+~Z)}!y'W4W W4W FWFW >WDW J~^ *r ?V &VBV Eh *VEXIX<XBZ@W /W !W +T 4~W 5f 8V 0X4X >X +Y $Z NW<X 'X NZ7X ;X ?X:X HkMX " >" '[ 7[%X 8UAV8VAU=X:X NX6X#X *X*X,X -X 0X6f+X/X'X -X -XK[ =X -XDVJVDX0XAWFX)X%X.m EX%X.XA\\ -^ ?X <X/X XBX FXFVAVFX,c 6X /Y ;W (V %W ?r JW3W" >"$W ,W3W!| LW 1W3W MW6W MW ,W ,a 6W ,W7W7W=W6W!W2W NW3W$W3W MW ,e :W ,W6W JW@W DWGVHVGW N[ 9WBW 8Y 8^ 3V F^ I~X 0S;U;T1W8Y JW8X MXC\\ HW2W Ia ;W6W IWB" >"W >XHX DW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W KX:X ?Y =X /X'X0Y@X@Y-X0X%YDXDY,X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V ;X DW;V DSFV'S >XFX " >" ;V .S@VFW=S (V \"W6W :UGU IX 0XFX -V;TLU MV0U!V;TLU6Y 0X:X KX:X KX:X KX:X KX:X KX:X JW<X X *X -X -X -X -X -X -X -X ,X*X-XAWFX)X%X1X%X1X" >"%X1X%X1X%X F[ JXBW:X.X/X'X/X'X/X'X/X GX <X9Y MWA] Er Gr Gr Gr Gr Gr G~gBW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WBWGW NW6W MW6W MW6W " >"MW6W IWBW EW3W LWBW IU<V=V.U#V.UCdDV.UCY9V.U=X>V&V 1XBX :X ?WDT ?~S,~[({ x&W4W W4W FWFX ?XFX JV \"q >V &VBV Af -VEXGX=W@ZB" >"W .W !W +T 4~W 5f 8V 0X4X >X ,Y \"Y W;X 'X NZ7X <Y @Y:Y HiLX '^ =^%X 8UAV8VAU=X:X NX5X$X *X*X,X -X 0X(X+X/X'X -X -XJ[ >X -XDVJVDX0XAXGX)X%X.i" >" AX%X.X>Z ,\\ ?X <X/X NWBW DWFVAVFW+XMY 7X 0Z ;W (V %W @s JW3W$W ,W3W!| LW 1W3W MW6W MW ,W ,` 5W ,W7W7W=W6W!W2W NW3W$W3W MW +g =W ,W6W JXBX DWGVH" >"VGW N[ 9WBW 9Y 7^ 3V F^ I[Gr /S;U;T1W8X IW7X NWA[ HW2W F^ ;W6W HVCX >XGW DW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W KW9X ?Y =X /X'X/X@X@X,X0X$YEXEY" >"+X%X2~a GV H~a HV I~b HV DX 3W@S 6X 3V8V ;X DX<V DTFV)T >WEW :V .TAVEW?T (V \"W6W :UGU IX /WEW .V;TKU NV/U\"V;TKU7Y /X:X KX:X KX:" >"X KX:X KX:X KX:X KX<X X *X -X -X -X -X -X -X -X ,X*X-XAXGX)X%X1X%X1X%X1X%X1X%X G] KXCW9X.X/X'X/X'X/X'X/X GX <X9Y MW?] Hs Hs Hs Hs Hs Hs H~hBW ,|\"|\"|\"|" >" NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WBVFW NW6W MW6W MW6W MW6W IWBW EW3W LWBW IU<V=V.U#V.UDYMZEV.UDY8V.U#V&V 0WBX ;X >WDS >~T-~\\(y" >" Mw&W4W W4W GXFX ?XFX JV #r >V 'WCV <c .VEWEW=W?ZCW .W !W :~W 5f 9W 0X4X >X -Y Y!W;X 'Y Y5X =X @Y8Y HgKX 'a Ca%X 8UAV8" >"VAU=W8W NX4X%X *X+Y,X -X 0X(X+X/X'X -X -XI[ ?X -XDWLWDX0X@WGX)X&Y.X 0X&Y.X=Y *[ @X <X/X NXDX DXHW@VHX,YMZ 8X 1Z :W (W &W At JW3W$W ,W3W!| LW 1W3" >"W MW6W MW ,W ,` 5W ,W7W7W=W6W!W2W NW3W$W3W MW )g ?W ,W6W IWBW CWGVHVGW MY 8WCX :Y 6` 5V H` IW@m -S;V<T1W8X IW7X W@[ HW2W Ia ;W6W HVCW >XFX EW6W!W<W<" >"W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W KW8W @Y <X /X'X/X@X@X,X0X#YFXFY*X&Y2~a GV H~a HV I~b HV DX 3W@S 6X 3V8V ;X CX=V CSFV)S =WEW :V -SAVDW@S " >" 'V \"W6W :UGU IX /WEW .V<TJU NV/U\"V<TJU8Z /W8W KW8W KW8W KW8W KW8W KX:X KX<X X *X -X -X -X -X -X -X -X ,X+Y-X@WGX)X&Y1X&Y1X&Y1X&Y1X&Y H_ LX" >"DW9Y.X/X'X/X'X/X'X/X GX <X:Y LW>] Jt It It It It It I~iBW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WCVEW NW6W MW6W MW6W MW6W IWCX EW3W L" >"WCX IV=V=V.V$V.VFYKZFV.VFY7V.V$V&V 0XCW ;Y =WFT >~T-~\\'w Ku%W4W W4W GXEW >WFW IV #q =V 6~X JSN^ /VEWCW?W=ZDW .W !W :~W" >" 5f 9V /X4X >X .Y MX\"W:X &X Y5X >Y @X6X FcJX &d Id%X 8UAV8VAU>X8X X4X$X +X+X+X -X /X)X+X/X'X -X -XH[ @X -XCVLVCX0X@XHX(X'X-X /X'X-X<Y *Z @X " >"<X/X NXDX DXHV?VHX-YKY 8X 2Z 9W 'V &W B]?W JW3W$W ,W3W!| LW 1W3W MW6W MW ,W ,a 6W ,W7W7W=W6W!W2W NW3W$W3W MW 'g AW ,W6W IWBW CWHVFVHW NZ 7WDW :Z" >" 6a 6V Jb IU;i ,S;V<S0W7W IW6W W?Z HW2W Kc ;W6W HWEX >XFX EW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W =V2V KX8X BY ;X /Y)Y/X@X@X,X0X#YFXGZ)X'X0~` GV H~` " >"GV H~` GV DX 3W@S 6X 3V8V M| &Z?V CSFV)S:m AXFX ;V -SAVDW@S 'V \"W6W :UGU *m 5XFX /V;SIU V.T\"V;SIU9Z /X8X MX8X MX8X MX8X MX8X MX8X " >"MX;X NX +X -X -X -X -X -X -X -X ,X+X,X@XHX(X'X/X'X/X'X/X'X/X'X Ha LXFW8X-X/X'X/X'X/X'X/X GX <X;Z LW<\\ L]?W J]?W J]?W J]?W J]?W J]?W J]?{BW ,|\"|\"|\"| NW" >" ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WDVDW NW6W MW6W MW6W MW6W HWDW DW3W KWDW HV=V>V-V%V-VGYIZHV-VGY7V-V%V%V /WDX ;X <WFT >~T-~\\'v Is" >"$W4W W4W GWDX ?XGW HV %r =V 6~X JSJ[ 0VEVAV?W<ZFW -W !W \"V Lf 9V /X5X =X /Z MX\"V9X &X NX5X >X ?X6X D`IX $d Ne#X 8UAV8" >"VBU=x X4X$X +X+X+X -X /X)X+X/X'X -X -XG[ AX -XCVLVCX0X?WHX(X'X-X /X'X-X;Y *Y @X <X/X MXFX CXHV?VHX-XIY 9X 3Z 8W 'V &W CZ;W JW3W$W ,W3W!| LW 1W3W" >" MW6W MW ,W ,b 7W ,W7W7W=W6W!W2W NW3W$W3W MW %f BW ,W6W IXDX BWIVFVIW N\\ 8WEX :Y .[ 7V K\\ BT8e *S<X=S0W7V HW6X\"W=X GW2W Me ;W6W GVEX >WDW EW6W!W<W<W" >"3WCWCW!W=W JWCWCW\"W2W%W2W ?W =W4W KW6W CY :X .X)X.YAXAY,X0X\"ZHXHZ(X'X/Y AV BY FV GY%Y FV DX 3W@S 6X 2V:V L| %ZAV BSEV*S:m @XFX <V -SAVCWAS " >" 'V \"W6W :UGU *m 6XFX .V<TIU V/U\"V<TIU9Y .x Mx Mx Mx Mx Mx Mu NX +X -X -X -X -X -X -X -X ,X+X,X?WHX(X'X/X'X/X'X/X'X/X'X Ic MXGW7X-X/X'X/X'X/" >"X'X/X GX <X=[ KW:[ NZ;W KZ;W KZ;W KZ;W KZ;W KZ;W KZ;{BW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W &WEVCW NW6W MW6W MW6W MW6W HWEX DW3W KWEX " >" GV>V>V,V&V,VIYGZIV,VIY6V,V&V&W /XEW N~X'VGT =~T-~\\&u Ir#W4W NV4W HXDX ?XHX HV KX ,V 6~X JSHZ 2VDVAV?W;ZGW -W !W \"V " >"Lf :W .X6X =X 0Z LY#~ /X NX5X >X @X5Y AYFX !d >~X >d X 8UAV8VBU>z!X3X%X +X+X+X -X /X)X+X/X'X -X -XF[ BX -XCWNWCX0X?XIX(X'X-X /X'X-X:X )Y AX <X/X" >" MXFX BWHV?VHW-YIY 9X 3Y 7W 'W 'W CX9W JW3W$W ,W3W!W 'W 1W3W MW6W MW ,W ,WNZ 8W ,W7W7W=W6W!W2W NW3W$W3W MW !c CW ,W6W HWDW AWIVFVIW N] 8WFW :Y *" >"Y 8V KY ?R3` (S<X=S0W7V HW5W\"W=X GW2W N[ 0W6W GWFW >XDX FW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W =W4W LX6X DY :X .X)X-XAXAX+X0X!ZIXIZ'X'X.Y BV CY EV" >" FY'Y EV DX 3W@S 6X 2V:V L| $[CV BTFW,T:m ?XFX =V -TBVBVBT 'V \"W6W :UGU *m 7XFX .V<THU!V/U\"V<THU:Y .z z z z z Nx Nv NX +X -X -X -X" >" -X -X -X -X ,X+X,X?XIX(X'X/X'X/X'X/X'X/X'X Je NXGV6X-X/X'X/X'X/X'X/X GX <X@^ KW9[ X9W KX9W KX9W KX9W KX9W KX9W KX9W MW ,W ,W ,W ,W )W ,W ,W ,W /W2W N" >"W6W!W2W\"W2W\"W2W\"W2W\"W2W &WFVBW NW6W MW6W MW6W MW6W GWFW CW3W JWFW FV>V?W,V'W,VJYEZKW,VJY6W,V'W&W /XFX N~X'WHT =~T-~\\%s Gp\"W4W NV4V GXCW >WH" >"X HW LX ,V 6~X JSGY 3VDWAW@W:ZIW ,W !W \"V Lf :W .X6X =X 1Z JX#~ /X NX5X ?Y @X4X .X Md A~X Ad LX 8UAV8VBU>z!X3X%X +X+X+" >"X -X /X)X+X/X'X -X -XE[ CX -XBVNVBX0X>WIX(X'X-X /X'X-X9X *Y AX <X/X MXFX BXJW?WJX.YGY :X 4Z 7W 'W 'W DX8W JW3W$W ,W3W!W 'W 1W3W MW6W MW ,W ,WLY " >"9W ,W7W7W=W6W!W2W NW3W$W3W MW K_ DW ,W6W HXFX AWIVFVIW ^ 8WFW ;Y (Y 9V LY >Q.X $T>Z?T0W8W HW5W\"W<W GW2W Y -W6W GWGX >WCX FW6W!W<W<W3WCWCW!W=W JWCWC" >"W\"W2W%W2W ?W =W4W LX6X EY 9X .Y+Y-YBXBY+X0X ZJXJZ&X'X-Y CV DY DV EY)Y DV DX 3W@S 6X 2W<W L| #\\FW ASFW,S9m >XFX >V ,SBVBWCS &V \"W6W :U" >"GU *m 8XFX .V<TGU\"V.U#V<TGU;Y -z z z z z z v NX +X -X -X -X -X -X -X -X ,X+X,X>WIX(X'X/X'X/X'X/X'X/X'X KZMZ XHW6X-X/X'X/X'X/X'X/X GX <u JW7Y!X8W " >"LX8W LX8W LX8W LX8W LX8W LX8W MW ,W ,W ,W ,W )W ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W &WGWBW NW6W MW6W MW6W MW6W GWFW CW3W JWFW FW?V?V+W(V+WKXCY" >"KV+WKX5V+W(V%W .WFX N~X'WHT =~T-~\\$q Eo\"W4W NV4V GWBW >XIW GW LX ;~X JSFX 3VDV?V@W9ZJW +V \"W !V V -X6X =X 2Z IX#" >"~ /X NX5X ?X ?X4X .X Jd D~X Dd IX 8UAV8VCV>z!X3X%Y ,X,Y+X -X /Y*X+X/X'X -X -XD[ DX -XBVNVBX0X>XJX(Y)X,X /Y)X,X9Y *X AX <X/X LXHX AXJV=VJX.XEY ;X 5" >"Z 6W &V 'W DW7W JW3W$W ,W3W!W 'W 1W3W MW6W MW ,W ,WKY :W ,W7W7W=W6W!W2W NW3W$W3W MW H\\ DW ,W6W GWFW @WJVDVJW!` 9WGX <Y &X 9V LX =P (T?\\@T0W8" >"X IW5W\"W<W GW2W X ,W6W FVGW >XBW FW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W =W4W LW4W FY 8X -X+X+YCXCY*X0X N\\MXM\\%Y)X+Y DV EY NQFVFQ Y+Y CV DX 3W@S 6X" >" 1V<V K| ![HW @TFW.T9m =XFX ?V ,TCVAVDT &V \"W6W :UGU *m 9XFX -V<SFU\"V/U\"V<SFU;X ,z z z z z z v NY ,X -X -X -X -X -X -X -X ,X,Y,X>XJX" >"(Y)X.Y)X.Y)X.Y)X.Y)X KZKZ!YJW6X,X/X'X/X'X/X'X/X GX <t IW6Y\"W7W LW7W LW7W LW7W LW7W LW7W LW7W MW ,W ,W ,W ,W )W ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W " >" &WHWAW NW6W MW6W MW6W MW6W GWGX CW3W JWGX EV?V@W*V)W*VJVAWKW*VJV5W*V)W%W .XGW M~X&WJT <~S,kNn#o Cm!W4W NV4V HXBX ?XJX FW MY" >" <~X JSEX 5VCV?V@W8ZLW *W #W !V V -X6X =X 3Z HX#~ /X NX5X @Y ?X4X /X Ge G~X Ge GX 8UAV9WCU>|\"X3X$X ,X,X*X -X .X*X+X/X'X -X -XC[ EX" >" -XA\\AX0X=WJX'X)X,X .X)X,X8X *X AX <X/X LXHX AXJV=VJX/YEY ;X 6Z 5W &V 'W DW7W JW3W$W ,W3W!W 'W 1W3W MW6W MW ,W ,WJY ;W ,W7W7W=W6W!W2W NW3W$W3W M" >"W EZ EW ,W6W GWFW ?WKVDVKW!b 9WHW <Y $W 9V LW BTAVNUAT/W8X IW5W#W;V FW2W!X +W6W FWIX >XBX GW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W =W4W MX4X HY 7X" >" -Y-Y+ZDXDZ*X0X Mt#X)X*Y EV FY NSGVGS Y-Y MQFVFQ X 3W@S 6X 1W>W 9X =\\KW >SEW<PCS 6XFX @V +SCVAWES %V \"W6W :UGU &XFX -V<TFU#V" >"/U\"V<TFU<X ,|\"|\"|\"|\"|\"|\"w MX ,X -X -X -X -X -X -X -X ,X,X+X=WJX'X)X-X)X-X)X-X)X-X)X LZIZ!XKW5X,X/X'X/X'X/X'X/X GX <s HW5X\"W7W LW7W LW7W LW7W LW7W LW7W" >" LW7W MW ,W ,W ,W ,W )W ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W &WIW@W NW6W MW6W MW6W MW6W FWHW BW3W IWHW DW@VAW)W+W)WJT?UKW)WJT5W)W+W$W -WHX " >"M~X&WJT ;eMQMe+jNQNj!m Bl W4W NW6W HXBX >WJX FW LX <~X JSEX 6WCV?V@W7ZMW *W #W !V !W -X6X =X 4Z GX#~ /X NX5X @X >X4X " >"/X De J~X Je DX 8U@V:WDV>|\"X3X$X ,X-Y*X -X .X*X+X/X'X -X -XB[ FX -XA\\AX0X=XKX'X*Y,X .X*Y,X8Y +X AX <Y1Y KWHW ?WJV=VJW/YCY <X 7Z 4W &W (W EW6" >"W JX5X$X -X5X!X (W 0W5X MW6W MW ,W ,WIY <W ,W7W7W=W6W!X4X NX5X$X5X MW CX EW ,W6W GXHX ?WKVDVKW!XNY :WIX =Y #X :V MX BUCVMVBT/W9Y IW5W#W<W FW3X!W" >" *W6W EVIX ?X@W GW6W!W=Y=W3XDWDX!W=W JWCWCW\"X4X%X4W >W <W6W LX4X HY 7X ,X-X)ZEXEZ)X0X Lr\"X)X)Y FV GY NUHVHU Y/Y MSGVGS !X 3XAS 6X 0W@W 8X ;\\NW " >"=TEX@RDT 5XFY BV +TDV@WGT %V \"W6W :UGU (YFX ,V=TEU#V0U!V=TEU<X ,|\"|\"|\"|\"|\"|\"w MX ,X -X -X -X -X -X -X -X ,X-Y+X=XKX'X*Y-X*Y-X*Y-X*Y-" >"X*Y MZGZ\"XLW5Y,Y1Y'Y1Y'Y1Y'Y1Y GX <r GW4X$W6W MW6W MW6W MW6W MW6W MW6W MW6X NX -X -X -X -X *W ,W ,W ,W /W2W NW6W!X4X\"X4X\"X4X\"X4X\"X4X &WIV@X NW6W MW6W" >" MW6W MW6W FWIX BX5X IWIX CWAVAW(W,W(WJR=SJW(WJR4W(W,W$W -XIX M~X&WJS :dLQLd+iMQNj!l @j NW4W NW6W HW@W >WJW DW MX .VCV" >" :SDW 6VBV?V@W6b )W #W !V !V +X8X <X 5Z FX#~ /X MW5X @X >X4X /X Ad L~X Ld AX 8VAV:WDU=|\"X3X$Y -X-Y*X -X .Y+X+X/X'X -X -XA[ GX -XA\\AX0X<WK" >"X'Y+X+X .Y+Y,X7X +X AX ;X1X JXJX ?XLW=WLX/XAY =X 7Y 3W %V (W EW7X JX5W\"W ,W5X W (W 0W5X MW6W MW ,W ,WHY =W ,W7W7W=W6W W4W MX5W\"W5X MW BX FW ,W6" >"W FWHW >WKVDVKW\"XLX 9WJW =Z #X :V MX AUEVKVDU/X:Y IW5W#W<W EW4W!X *W6W EVJX >X@W GW6W!W=Y=W2WDWDW W=W JWCWCW\"X4W#W4W >W <W6W LW2W IY 6X ,Y/Y(ZFXF" >"Z(X0X Kp!Y+X'Y GV HY NWIVIW Y1Y MUHVHU \"X 2WAS 6X 0YDY 8X :c <TE[FUDS 3XFY CV *SDV@WGS $V \"W6W :UGU )YFX ,V=TDU$V0V\"V=TDU=X +" >"|\"|\"|\"|\"|\"|#x MY -X -X -X -X -X -X -X -X ,X-Y+X<WKX'Y+X,Y+X,Y+X,Y+X,Y+X MZEZ#YNW4X*X1X%X1X%X1X%X1X FX <p EW4X$W7X MW7X MW7X MW7X MW7X MW7X MW7Y MW ,W " >",W ,W ,W *W ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W $WKV?W MW6W MW6W MW6W MW6W EWJW AX5W GWJW BXBVBW'X.W'XJP;QJW'XJP4W'X.W#V ,XIW L~X%WLT :d" >"LQLc*iMQMi k ?i NW4W NW6W IX@X ?XLX DW MY 0VBV :SDW 7VAV?V@X6a )W #W !V !V +X8X <X 6Z EX#~ 0Y MW5X AY >X4X 0X =d ~X" >" d LUAW<XEV>X2X#X3X#X -X.Y)X -X -X+X+X/X'X -X -X@[ HX -X@Z@X0X<XLX&X+X+X -X+X+X7Y ,X AX ;X1X JXJX ?XLV;VLX0YAY =X 8Z 3W %V (W EW7X JX5W\"W ,W5X" >" W (W 0W5X MW6W MW ,W ,WGY >W ,W7W7W=W6W W4W MX5W\"W5X MW BX FW ,W7X FWHW >WLVBVLW#YKX :WJW =Y !W :V MW @VHXJWHV-W:Y IW5W#W<W EW4W!W )W6W EWKX ?X" >"?X HW6W!X>Y>W1WDWDW W=W JWCWCW\"X4W#W4W >W <W6W MX2X KY 5X +Y1Y'[GXH\\(X0X Jn NX+X&Y HV IY NYJVJY Y3Y MWIVIW #X 2WAS 6X 0[H[ 8X :V %` :TEiET 2YGY " >" DV *TEV?WIT $V \"W6W :UGU *YGY ,V<SCU%V0V\"V<SCU=X ,X2X$X2X$X2X$X2X$X2X$X2X$X8X LX -X -X -X -X -X -X -X -X ,X.Y*X<XLX&X+X+X+X+X+X+X+X+X" >"+X NZCZ#`3X*X1X%X1X%X1X%X1X FX <m BW3W$W7X MW7X MW7X MW7X MW7X MW7X MW7Y MW ,W ,W ,W ,W *W ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W 5Z IWLV>W MW7X MW7X " >"MW7X MW7X EWJW AX5W GWJW AXCVCW%X0W%X0W%X0W%X0W\"V +WJX ?X 2WLT 9bKQKb)gLQMh Mi =g MW4W MV6W IX@X ?XLX CW MX 0VBV :SDW " >"7VAV?V@X5_ (W #W !V \"W +X8X <X 7Z DX 5X 'X LX7X @X =X4X 0X ;e Le JUAW<XFV=X1W#X3X#Y .X.Y)X -X -Y,X+X/X'X -X -X?[ IX -X@Z@X0X;XMX&Y-Y+" >"X -Y-Y+X6X ,X AX ;X1X IXLX >XLV;VLX1Y?Y >X 9Z 2W %W )W EW7X JX5W\"X -W5X X )W 0X7Y MW6W MW ,W ,WFY ?W ,W7W7W=W6W W4W MX5W\"W5X MW AW FW ,W7X FXJX" >" =WMVBVMW#YJY ;WKX >Y W :V MW ?dId,W;Z IW5W#W=W DW4W!W )W6W DVKW >X>W HW6W W>Y>W1WDWDW W=W JWCWDX\"X4W#W4W >W ;V7W LX2X LY 4X *X1X%]JXJ]'X0X Hj L" >"Y-Y%Y IV JY LYKVKY MY5Y MYJVJY $X 2XBS 6X 2q 9X :V #\\ 7TDgFT /XFX EV )TFV>VJT #V \"W6W :UGU +XFX *V=TCU%V1V!V=TCU=X ,X1W$X1W$X1W" >"$X1W$X1W$X2X%X7X LY .X -X -X -X -X -X -X -X ,X.Y*X;XMX&Y-Y+Y-Y+Y-Y+Y-Y+Y-Y ZAZ$_3Y*X1X%X1X%X1X%X1X FX <i >W3W$W7X MW7X MW7X MW7X MW7X MW7X MW7Z NX -X " >"-X -X -X +W ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W 5Z IWMV=W MW7X MW7X MW7X MW7X EWKX AX5W GWKX @XDVDX$X2X$X2X$X2X$X2X\"V +XKW ?X 1WMT 7`JQKa" >"'fLQLf Kg <f LW4W MW8W HW>W >WLW BX NY 1VBV :SDW 8V@V?V?W4] &V $W V \"V *Y:Y <X 8Z DY 5X 'X KW7X @X =X5Y 1Y 8e #e " >" GU@W>YGW>X0X$X4Y\"Y /X/Y(X -X ,Y-X+X/X'X -X -X>[ JX -X@Z@X0X;XMX%Y/Y*X ,Y/Y*X6Y -X AX ;Y3Y IXLX =WLV;VLW0X=Y ?X :Z 1W $V )W EW8Y JY7X\"X -X7Y X " >")W 0X7Y MW6W MW ,W ,WEY @W ,W7W7W=W6W X6X MY7X\"X7Y MW AW FW ,X8X EWJW <WMVBVMW#XHX :WLW >Y NW :V MW >bGc,W;[ JW6X#W=W DX6X!W )W6W DVLX >W=X IW7" >"X W>Y>W1XEWEX W=W IWDWDW!Y6X#X6X >W ;W8W MX0X MY 4X *Y3Y$^LXL^&X0X Ff IY/Y#Y JV KY JYLVLY KY7Y KYKVKY #X 2XBS 6X 3t ;X :V ![ 8TCfFT .XFX FV )U" >"GV>WKT MW7X :UGU ,XFX *V=TBU&V2W!V=TBU=X -X0X&X0X&X0X&X0X&X0X&X0W%X7X KY /X -X -X -X -X -X -X -X ,X/Y)X;XMX%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y Z?Z$" >"^4Y)Y3Y%Y3Y%Y3Y%Y3Y FX <X -W3W$W8Y MW8Y MW8Y MW8Y MW8Y MW8Y MW8[ NX -X -X -X -X +W ,W ,W ,W .X6X MW6W X6X X6X X6X X6X X6X 5Z I_=X MX8X MX8X MX8X MX8X " >"DWLW @Y7X FWLW >XEVFY\"X5Y\"X5Y\"X5Y\"X5Y!V *WLX @X /WNT 7`JQJ_&eKQKe Je :d KW4W MW8W HW>X ?XNX AX Y 1VCV 9SDW 9V?V?V?X4\\ " >" &W %W V \"V )X:X ;X 9Z CX 4X (Y KW7X AX <Y6Y 1X 4e )e DVAX@ZHW=X0X$X4Y\"Y*P&X0Z(X -X ,Y-X+X/X'X -X -X=[ KX -X?X?X0X:XNX%Y/Y*X ,Y/Y*X5X " >".Y AX :X3X HXLX =XNW;WNX1Y=Y ?X ;Z 0W $V )W EW8Y JY7W W ,W7Y NX *W /W8Z MW6W MW ,W ,WDY AW ,W7W7W=W6W NW6W LY7W W7Y MW AW FW ,X9Y EWJW <WMVBVMW" >"$XFX ;WMX ?Y MW :V MW =`Ea+X<[ JW6W\"W>W BW6W W )W6W DWMX ?X=X IX8X W?[?W0WEWEW NW=W IWDWDW!Y6W!W6W =W ;W8W MX0X NY 3X )Y5Y\"z%X0X C` FY/Y\"X JV " >"KX HYMVMY IX7X IYLVLY \"X 1XCS 6X 4v <X :V [ 8TBbET ,WEW FV (T$T LX8X :UGU ,WEW )V=m,V3W V=mCX -X0X&X0X&X0X&X0X&X0X&X0X&X7X KY" >"*P&X -X -X -X -X -X -X -X ,X0Z)X:XNX%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y!Z=Z%]3Y(X3X#X3X#X3X#X3X EX <X -W3W$W8Y MW8Y MW8Y MW8Y MW8Y MW8Y MW8[ MW ,X -X -X -X ,W ,W ,W " >",W -W6W LW6W NW6W MW6W MW6W MW6W MW6W 4Z H^=W LX9Y MX9Y MX9Y MX9Y DWMX @Y7W EWMX =Y8Y Y8Y Y8Y Y8Y Y8Y V *WLX AX .WNT 6^IQI]$cKRJc Id 8c KW4W" >" MX:X IX>X ?XNX AY Y4P VBV 9SDW 9V?V?V?Y4Z %W %W V #W )X:X ;X :Z CY 4X (Y KX9Y AX ;X6X 1Y 1e /e @U@XB[JX<X/W$X4" >"X Y,Q&X1Z'X -X +Y.X+X/X'X -X -X<[ LX -X?X?X0X:XNX$Y1Y)X +Y1Y)X5Y /X @X :X4Y GXNX <XNV9VNX2Y;Y @X ;Y /W $W *W EW9Z JZ9X X -X9Z NX *W /X9Z MW6W MW" >" ,W ,WCY BW ,W7W7W=W6W NX8X LZ9X X9Z MW AW FW +W9Y EXLX <WNV@VNW%YEX ;WNW ?Y LW :V MW <^C_)W=\\ JX7W\"W>W BX8X W )W6W CVNX >W;W IX8X X@[@X0XFWEW " >"NW=W IWDWEX!Z8X!X8X =W :W:W LX0X Y 2X (Y7Y Nv#X0X ?X AY1Y V IV JV FYNVNY GV5V GYMVMY !X 1XCS 6X 5x =X :V MZ 8T?ZBT *VDV FV 'T&T KX" >"8X :UGU ,VDV )V<m-V3V NV<mCX -X/W&X/W&X/W&X/W&X/W&X0X'X6X JY,Q&X -X -X -X -X -X -X -X ,X1Z(X:XNX$Y1Y'Y1Y'Y1Y'Y1Y'Y1Y!Z;Z%[3Y'X4Y#X4Y#X4Y#X4Y EX" >" <X -W3W$W9Z MW9Z MW9Z MW9Z MW9Z MW9Z MW9] NX -X -X -X -X ,W ,W ,W ,W -X8X LW6W NX8X MX8X MX8X MX8X MX8X 4Z H]=X KW9Y LW9Y LW9Y LW9Y CWNW ?Z9X DWNW " >" ;Y;Z MY;Z MY;Z MY;Z MY;Z NV *XMW AY -[ 3ZHRH[\"aJRI` Fb 6a JW4W LW:W HX=W >WNX @Y !Z6Q VBV KP>SEW 9V>WAW>X3Z &W %W V " >" #V 'X<X :X ;Z BY 4X )Y IW9X AY ;Y8Y 2Y .d 1d >U?ZH^MZ<X.X%X5Y NY.R&X2Z&X -X *Y/X+X/X'X -X -X;[ MX -X&X0X9a$Z3Y(X *Y3Y(X4X$P-Y @X :Y5Y GXNX" >" <XNV9VNX2X9Y AX <Z /W #V *W EX:Z JZ9X NX .X9Z MX +W .X;[ MW6W MW ,W ,WBY CW ,W7W7W=W6W NX9Y LZ9X X9Z MW AW FW +W:Z DWLW :^@^$XDY <WNW @Z LW :" >"V MW ;\\@['X>\\ JX8X\"W?W AX9Y X *W6W CVNX ?X;X JX9Y NW@[@W/XFWFX NW=W IXEWEX!Z8X!X8W ;W ;W;X MX.X\"Y 1X 'Y9Y Lt\"X0X ?X @Y3Y MT HV IT Dj ET3T EYNVN" >"Y X 0XDS 6X 6ZM`LY >X :V LY 7T)T (UCU ET(T JX9Y :UGU ,UCU )V;m.V3V NV;mCY7P HX.X(X.X(X.X(X.X(X.X(X.X(X6X IY.R&X -X -X -X -" >"X -X -X -X ,X2Z'X9a$Z3Y&Z3Y&Z3Y&Z3Y&Z3Y!Z9Z&Z3Y&Y5Y#Y5Y#Y5Y#Y5Y EX <X -W3W$X:Z MX:Z MX:Z MX:Z MX:Z MX:Z MX:^ NX -X -X -X -X -W ,W ,W ,W -X8X LW6W NX9Y" >" MX9Y MX9Y MX9Y MX9Y 4Z H\\=Y KW:Z LW:Z LW:Z LW:Z CWNW ?Z9X DWNW :[@[ K[@[ K[@[ K[@[ K[@[ MV )WNX AX ,[ 1WGRFW N_IRH^ Da 5_ IW4W LX<X HW<W >`" >" >Y !Y8S MX +VBV KQ?SFX 9V=VAV=Y6] &V &W NV BX 1X 1V 'Y>Y :X <Z BY 3X GP3Z IX;Y AX :Y9Z 2X GX -X 7a 1a .X 6V@iNa;X.X%X6Z N" >"Z1T&X4\\&X -X *Z0X+X/X'X -X -X:[ NX -X&X0X9a#Z5Z(X *Z5Z(X4Y%R/Y @X 9Y7Y EWNW :WNV9VNW2Y9Y AX =Z .W #V *W EX;[ J[;X MY .X;[ MY2P JW .Y=\\ MW6W MW ," >"W ,WAY DW ,W7W7W=W6W MX:X K[;X MX;[ MW /P4X FX ,X<[ DXNX :^@^%XBX <` @Y KW :V MW 8V;W%X?^ KY9X!V@X @X:X NX *W6W C_ >X:W JY;Z NXB]BX.XGWGX MW=W H" >"XFWFX [:X NX:X ;W :W<W LX.X\"Y 1X &Y;Y Ip X0X ?X @Z5Z LR GV HR Bh CR1R Cj NX 0YES 6X 7ZJ\\IY ?X :V KY 8U+U 'TBT DU+T IY;Z :UGU " >" ,TBT (V;m.V4V MV;mCY8Q HX.X(X.X(X.X(X.X(X.X(X.X)X5X IZ1T&X -X -X -X -X -X -X -X ,X4\\'X9a#Z5Z%Z5Z%Z5Z%Z5Z%Z5Z\"Z7Z&Z5Z%Y7Y!Y7Y!Y7Y!Y7Y DX <X -W4X$X" >";[ MX;[ MX;[ MX;[ MX;[ MX;[ MX;`3P=Y .Y2P LY2P LY2P LY2P LW ,W ,W ,W ,X:X KW6W MX:X KX:X KX:X KX:X KX:X 3Z GZ<X JX<[ LX<[ LX<[ LX<[ C` ?[;X C` 9_J" >"_ I_J_ I_J_ I_J_ I_J_ LV )` AX +Z S <[GRFZ A_ 4^ HW4W KX>X HX<X ?` =Z \"Y:T MX +VCV JSASFX :V<VAV<Y8_ 'W 'W NV BX 1X 2W" >" &X>X 9X =Z 1P2Z 3X GQ5Z GX=Y @X 9Y:Y KP8Z GX -X 4^ 1^ +X 5U?gM_9W,W%X7Z L[4U&X6]%X -X )[2X+X/X'X -X -X9[ X -X&X0X8`\"Z7Z'X )Z7Z'X3X%T2Y ?X 9Z9Z E` :" >"_9_3Y7Y BX >Z -W #W +W DX=\\ J\\=Y LY7P HY=\\ LY5R JW -Y?] MW6W MW ,W ,W@Y EW ,W7W7W=W6W MY<Y K\\=Y MY=\\ MW /R6W DW ,Y=[ CWNW 9^@^&X@X <^ @Y JW :V " >" MW HXA` LZ;X V@W ?Y<Y MX +W6W B^ ?X9W JZ<Z NXB]BX.YHWHY MW=W HYGWGY \\<Y NY<X :W :X>X LX.X#Y 0X %Y=Z Gl MX0X ?X ?Z7Z JP FV GP @f AP/P Ah MX " >"/YFSDP BX 8ZFVEY @X :V JX 7V.U %SAS CU.U HZ<Z :UGU ,SAS (V:m/V5W MV:mBY;S HW,W(W,W(W,W(W,W(W,W(X.X)X5X H[4U&X -X -X -X -X -X" >" -X -X ,X6]&X8`\"Z7Z#Z7Z#Z7Z#Z7Z#Z7Z\"Z5Z&[8Z$Z9Z!Z9Z!Z9Z!Z9Z DX <X -W4W\"X=\\ LX=\\ LX=\\ LX=\\ LX=\\ LX=\\ LX=b6R<Y7P GY5R KY5R KY5R KY5R LW ,W ,W ,W ,Y<Y KW" >"6W MY<Y KY<Y KY<Y KY<Y KY<Y 3Z GY<Y JY=[ LY=[ LY=[ LY=[ B^ >\\=Y B^ 7r Gr Gr Gr Gr KV (_ BX )Y S 8RBSCR <] 2\\ GW4W KZBZ HX;W >_ <[ " >" $[=U MX ,VBV JUCSHY :V;WCW<[<b (W 'W NV BX 1X 2W &Y@Y 9X >Z 0R5Z 2X GT9[ GY?Z AY 9[>[ KR;Z FX -X 1[ 1[ (X 5V>dL^9X,X&X9[ J[7W&X9_$X " >"-X (\\6Z+X/X'X -X -X8[!X -X&X0X8`![;[&X ([;[&X3Y&W7[ ?X 8Z;Z D` :^7^3X5Y CX ?Z ,W #W +W DY?] J]?Y KZ:R GY?] LZ8T JW -ZA^ MW6W MW ,W ,W?Y FW ,W7W7" >"W=W6W LY>Y J]?Y KY?] MW /T9X DX ,Y@] CWNW 9]>]'Y@Y =^ AY IW :V MW HYCXNW L\\>Y VAX >Y>Y LY ,W6W B] >X9X K[>[ MXDVMVDX,YIWIY LW=W GYHWHY N]>Y LY" >">Y :X :X@X LX,X%Y /X $ZAZ Ch KX0X ?X >[;[ ?V 6d >f LX /[HSFR BX 9Z3Y AX :V IX 7V1V #R@R BU0U G[>[ :UGU ,R@R 'V(U)V6W" >" LV(U<Z>U IX,X*X,X*X,X*X,X*X,X*X,X*W4X G[7W&X -X -X -X -X -X -X -X ,X9_%X8`![;[![;[![;[![;[![;[\"Z3Z(];[\"Z;Z NZ;Z NZ;Z NZ;Z CX <X -WJP;X\"Y?] LY?] LY?] " >"LY?] LY?] LY?] LY?XNZ9T<Z:R GZ8T KZ8T KZ8T KZ8T LW ,W ,W ,W +Y>Y JW6W LY>Y IY>Y IY>Y IY>Y IY>Y 2Z FY>Y HY@] KY@] KY@] KY@] B^ >]?Y A^ 6o Do Do Do " >"Do IV (_ CX (Y S (S ,[ 0[ GW4W J\\H\\ GW:W >^ :\\ %[@W MX ,VBV JXFSIZ :V:WEW:\\@e (V 'V MV BX 1X 2V $ZDZ 8X ?Z /U;] 2X GV=" >"\\ EZC[ @X 7[@[ JT?[ EX -X /Y 1Y &X 5V=bK\\7X,X&X<^ I]=Z&X=b#X -X ']:\\+X/X'X -X -X7[\"X -X&X0X7_ \\?\\%X '\\?\\%X2X&Z<\\ >X 7[?[ B^ 9^7^4Y5Y CX ?Y +W \"V +W " >" DZB_ J_CZ I[>T G[C_ K[=W JW ,\\GXNW MW6W MW ,W ,W>Y GW ,W7W7W=W6W KZBZ I_CZ J[C_ MW /W>Z DZ .ZB^ C` 8\\>\\&X>Y =\\ AY HW :V MW GZFYNY N]AZ N" >"WCX <ZBZ JZ:Q EW6W B] ?X7W K\\A^ NYFWMWFY,ZJWJY KW=X H[JWJ[ N_BZ JZBZ 8Y <ZDZ LX,X&Y .X #ZCZ >_ FX0X ?X =\\?\\ >V 5b <d KX .\\JSHT BX 8X2X @X :V " >"IX 5V4U Q?Q AV4V F\\A^ ;UGU ,Q?Q 'V'U*V6W LV'U<[AW IX,X*X,X*X,X*X,X*X,X*X,X+X4X F]=Z&X -X -X -X -X -X -X -X ,X=b$X7_ \\?\\ N\\?\\" >" N\\?\\ N\\?\\ N\\?\\ X1X(`?\\ [?[ L[?[ L[?[ L[?[ BX <X -WJS@Z\"ZB_ LZB_ LZB_ LZB_ LZB_ LZB_ LZBYM\\>W;[>T F[=W J[=W J[=W J[=W LW ,W ,W ,W *ZBZ IW6W KZBZ GZBZ " >"GZBZ GZBZ GZBZ 1Z F[BZ GZB^ KZB^ KZB^ KZB^ A\\ =_CZ ?\\ 3l Al Al Al Al HV (^ BX (X NS (S ,Z .Y FW4W In GX:X ?^ 9_ (]FZ MX " >",VBV J[ISL\\ :V9XGX9^Fi )W )W MV BX 1X 3W #[H[ Et Mx MZC_ 1X GZD^ C[G\\ @Y 7^F] IXF] DX -X ,V 1V #X 4V<^IY5X*X'y G_D^&{!y NX &`B`+X/X'X -X -X6[#" >"w LX&X0X7_ N^E^$X &^E^$X2Y'^C^ =X 7^E^ B^ 8]7]4Y3Y DX @~U&W \"W ,W C\\HYNW JWNXG\\ H]EX F\\GXNW J]D[ JW +kMW MW6W MW ,W ,W=Y HW ,W7W7W=W6W K]H] IWNX" >"G\\ I\\GXNW MW /[E\\ Be 9[GXNW B^ 7\\>\\'X<X =\\ AX GW :V MW G\\IYM^$`F\\ MWEX ;]H] J]BV EW6W A\\ ?X7X L_GaKP#ZJYMYJZ*[LWL[ KW=Y H\\LWL\\ MWNXG] J]H\\ 7a " >"C[H[ L~W'x MX 1iEi HX CX0X ?X <^E^ =V 4` :b JX -^MSLX Lz V0V ?X :V HW 4V7V MP>P @W8W 3~W :_GaKP @UGU ,P>P 'V&U+V6V KV&" >"U;]GZ JX*X,X*X,X*X,X*X,X*X,Y,Y,X4y7_D^&y Ny Ny Ny NX -X -X -X ,{\"X7_ N^E^ L^E^ L^E^ L^E^ L^E^ MV/V(dE^ N^E^ L^E^ L^E^ L^E^ BX <X -WJWF[ \\HYNW K\\HYNW K" >"\\HYNW K\\HYNW K\\HYNW K\\HYNW K\\H[K^E[:]EX E]D[ I]D[ I]D[ I]D[ LW ,W ,W ,W )[F[ HW6W K]H] G]H] G]H] G]H] G]H] 1Z F]G] F[GXNW J[GXNW J[GXNW J[GXNW A\\ =WNX" >"G\\ ?\\ 1h =h =h =h =h FV '] AV &W T )T +X -X EW4W Hl FX9W ?^ 8~R Jp MX ,VCV It 9V8XIX7sLZ *W )W MV BX 1X 3W #n Et M" >"x Mu 0X Gs Ao @X 5t In CX -X )S 1S X 4V9XFU1X*X'x Ex&z y NX %|*X/X'X -X -X5[$w LX&X0X6^ Mu#X %u#X1X'y =X 6u A^ 8]7]4X1X DX @~U&W \"W ,W ClMW J" >"WMk Fo EkMW Is JW *jMW MW6W MW ,W ,W<Y IW ,W7W7W=W6W Jp HWMk GkMW MW /q Ae 9kMW B^ 7\\=[(Y;X >\\ Av 6W :V MW FkL]$u LXGX 9p Hp EW6W A[ ?X6X LpN\\#" >"hKh)s JW<] Lu LWNm Hp 6` Bl K~W'x MX 1iEi HX CX0X ?X ;u <V 3^ 8` IX ,o Lz NT.T >X :V HW 3X=X )X<X 2~W :pN\\ @UGU V&" >"U+V7i.V&U:o JX*X,X*X,X*X,X*X,X*X,X*X-X3y6x&y Ny Ny Ny NX -X -X -X ,z!X6^ Mu Ju Ju Ju Ju KT-T(} Lu Ju Ju Ju AX <X -WJk NlMW KlMW KlMW KlMW KlMW KlMW Kn" >"Is9o Ds Hs Hs Hs LW ,W ,W ,W )p HW6W Jp Ep Ep Ep Ep Ls EkMW JkMW JkMW JkMW A\\ =WMk >\\ /c 8c 8c 8c 8c CV '\\ ?T %W U *T *W ,V DW4W Gj EW8W " >">\\ 5~P In LX -VBV Is 9V7g6qJZ *V )V LV BX 1X 3V !l Dt Mx Mt /X Gr ?m ?X 4r Hm BX -X &P 1P LX 3V 3X*X'w Cv%x My NX #x(X/X'X" >" -X -X4[%w LX&X0X5] Ls\"X $s\"X1Y(w ;X 5s ?\\ 7\\5\\5Y1Y EX @~U&W !V ,W BjLW JWMj Dn DjMW Hr JW )hLW MW6W MW ,W ,W;Y JW ,W7W7W=W6W In GWMj EjMW MW /p" >" ?d 8iLW B^ 6Z<[)Y:Y >Z @v 6W :V MW EiK]$t JYLZ 7n Fo EW6W A[ ?X5W LWNfM\\\"gKg'q IW<] Ks KWMk Fn 5` Aj J~W'x MX 1iEi HX CX0X ?X :s ;V 2\\ 6" >"^ HX +n Lz MR,R =X :V HW 1ZEZ %ZDZ 0~W :WNfM\\ @UGU !V%U,V6i/V%U9n JX*X,X*X,X*X,X*X,X*X,X*X-X3y5v%y Ny Ny Ny NX -X -X -X ," >"x NX5] Ls Hs Hs Hs Hs IR+R(WMs Js Hs Hs Hs @X <X -WJk MjLW JjLW JjLW JjLW JjLW JjLW JmHr8n Cr Gr Gr Gr LW ,W ,W ,W (n GW6W In Cn Cn Cn Cn Ls CiLW Ii" >"LW IiLW IiLW @Z <WMj <Z +] 2] 2] 2] 2] @V &[ >R $V NU *U *U *U DW4W Fh DW8X ?\\ 4~ Hl KX -VBV Hp 8V5e4nGZ +W +W LV BX" >" 1X 3V j Ct Mx Mr -X Gq =j >Y 3p Gl AX -X 2X 3W 5X(X(u ?s$v Ky NX \"v'X/X'X -X -X3[&w LX&X0X5] Kq!X #p X0X(v :X 4p =\\ 7\\5\\6Y/Y FX @~U&W !V ,W " >" AhKW JWLh Bm ChLW Gq JW (eJW MW6W MW ,W ,W:Y KW ,W7W7W=W6W Hl FWLh ChLW MW /o >d 7gKW A\\ 5Z<Z(X8X >Z @v 6W :V MW DgI\\$s He 5l Dn EW6W @Y " >">W4X MWMeM\\!eIe%o HW<] Jq JWLi Dk 2_ @h J~Y(x MX 1iEi HX CX0X ?X 9q :V 1Z 4\\ GX *m Lz LP*P <X :V HW 0m \"l .~W :WMeM\\ @UGU " >" !V%U,V6i/V%U8l JX(X.X(X.X(X.X(X.X(X.Y)X/X2y3s$y Ny Ny Ny NX -X -X -X ,v LX5] Kq Fq Fq Fq Fq GP)P'VKp Gp Ep Ep Ep >X <X -WJj KhKW IhKW IhKW IhKW" >" IhKW IhKW IjEq7m Bq Fq Fq Fq LW ,W ,W ,W &j EW6W Hl Al Al Al Al Ls AgKW HgKW HgKW HgKW @Z <WLh ;Z MV &[ =P \"U V +V )S (S CW4W " >"De DX8X ?\\ 2| Fh IX -VBV Ek 6V4c1kEZ +V +V KV BW 0X 4W Mf At Mx Mq ,X Go :h =X 0l Ej ?X -W 1X 2W 6X(X(s ;o\"s Hy NX r%" >"X/X'X -X -X2['w LX&X0X4\\ Im NX !m NX0Y(t 9X 2m ;Z 5[5[5X-X FX @~U&W !W -W @fJW JWJe ?j AeJW En IW 'cIW MW6W MW ,W ,W9Y LW ,W7W7W=W6W Fh DWJe AeJ" >"W MW .m ;b 6eJW A\\ 5Z<Z)X6X >X ?v 6W :V MW CeG[$r Fc 2h Am EW6W @Y ?X3W MWMdL\\ cGc#m GW;\\ Hm HWKg Ah /] ?f I~Y(x MX 1iEi HX CX0X ?X 7m 8V 0" >"X 2Z FX (j Kz AX :V HW -g Lh ,~W :WMdL\\ @UGU \"V$U-V5i0V$U7i HX(X.X(X.X(X.X(X.X(X.X(X/X2y1o\"y Ny Ny Ny NX -X -X -X ,t" >" JX4\\ Im Bm Bm Bm Bm %VHm Dm Bm Bm Bm =X <X -WJh HfJW HfJW HfJW HfJW HfJW HfJW HhBn4j ?n Cn Cn Cn KW ,W ,W ,W %h DW6W Fh =h =h =h =h KVMi >eJW GeJW" >" GeJW GeJW ?X ;WJe 9X MW &Z =U W ,W *R &Q BW4W B` AW6W >[ /y Dd GX -VCV Af 5V2a.gBZ ,W -W KV CX 0X 4V " >" Kd @t Mx Km *X Ek 6d ;X .h Bh >X .X 1X 1W 7X(X(q 7j Np Ey NX Mm\"X/X'X -X -X1[(w LX&X0X4\\ Gi LX Ni LX/X$n 7X 0i 9Z 5[5[6Y-Y GX @~U&W V -W " >" >cIW JWIb <g =bIW Ci FW %_GW MW6W MW ,W ,W8Y MW ,W7W7W=W6W Ef CWIb =bIW MW +h 8a 5cIW @Z 4Y:Y*Y5X ?X ?v 6W :V MW AbDY$WMf Ca 0f >k EW6W @Y ?" >"W2W MWK`I[ NaEa i EW;\\ Fi FWIc >e ,\\ =b G~Y(x MX 1iEi HX CX0X ?X 5i 6V /V 0X EX &f Iz AX :V /P;W *c Gb )~W :WK`I[ @UGU " >" #V#U.V4i1V#U6f FX(X.X(X.X(X.X(X.X(X.X(X/X2y/j Ny Ny Ny Ny NX -X -X -X ,p FX4\\ Gi >i >i >i >i $VEi @i >i >i >i ;X <X -WIf EcIW FcIW FcIW FcIW Fc" >"IW FcIW Fd>i0g ;i >i >i >i HW ,W ,W ,W #d BW6W Ef ;f ;f ;f ;f JUJe ;cIW FcIW FcIW FcIW ?X ;WIb 7X MW %Y =T X -X )P %P AW4W ?Z" >" >W6X ?Z ,w B` EX .VBV <] 1V0]*b?[ -W -W KV CW /X 4V I` >t Mx Hg 'X Bf 2` :X +d =b ;X .W 0X 1X 9X&X)m 0d Kj ?y NX Jg " >"NX/X'X -X -X0[)w LX&X0X3[ Dc IX Kf LX/Y!g 4X .e 7Z 5Z3Z7Y+Y HX @~U&W V -W =`GW JWG^ 7b 9^GW Ad CW \"YDW MW6W MW ,W ,W7Y NW ,W7W7W=W6W B` @WG^ 9" >"^GW MW (c 2] 3_GW @Z 3X:X*Y4Y @X ?v 6W :V MW ?_AW$WKb @^ +` 9g CW6W ?W ?X2X NWJ^GY K]B^ Ke CW:[ Dd CWG_ 9` 'Y ;^ F~[)x MX 1iEi HX CX0X ?X 2c " >"3V .T .V DX $b Gz AX :V /R>X &[ ?Z %~W :WJ^GY ?UGU #V +V +V 1b EX&X0X&X0X&X0X&X0X&X0Y'X1X1y,d Ky Ny Ny Ny NX -X -X " >"-X ,j @X3[ Dc 8c 8c 8c 8c !VBc ;e :e :e :e 9X <X -WFa B`GW E`GW E`GW E`GW E`GW E`GW D`:d*b 7d 9d 9d 9d EW ,W ,W ,W !` @W6W B` 5` 5` 5` 5` HVHa 7_GW" >" D_GW D_GW D_GW ?X ;WG^ 5X MW 7S @r >Y BS .V,W#Z ;V -V 7W ;W EX ;\\ 6] " >"+Z 5\\ 5Z <W 7X %\\ <] \"X ([ 4c E] /[ (W W .W :Y #X 0Z 2X *\\ $W &W .Z =WDX 3XDW I[" >" 0Y 8W -W :V MW <Z ;WH[ 9Y &Z 1] LW ?W >WGXBU FX=X E` \"W >] @WDY 3Z 2X C[ >T :[ KV /TAY " >" EWGXBU =UGU BT 6V +V +V ,Y ?\\ +[ 0[ 0[ 0[ 0[ KT=[ 2[ 0[ 0[ 0[ 7Z ;Y .Y .Y .Y .Y .Y -" >"Y2\\\"Z /\\ 1\\ 1\\ 1\\ CZ 3Z /Z /Z /Z /Z FVCZ 1Y .Y .Y .Y ,W :WDX 2W LW 7R #S" >" >W /W 8W :V \"W 5X )X &Z CW NV .W :W %W" >" @W :W -X -W :V MW LW FW ?W >W NW 0W =W 3S GV /XGZ " >" DW HUGU AT %T 'R JT " >" #T (X :W NX LW 7S =V /V 7W :V \"W" >" 4X'Q &Y %Z DW NV .W :W %W @W :W -W ,W :V MW " >" LW FW ?W >W NW 0W =W 3S GV /j CW HUGU @T " >" %T 'P HT \"Q 'W 9W NW KW " >" 7S =W 1W 7V :W \"V 2X)R &X #Z " >" EW NW /W :W %W @W :W -W ,X ;V NX LW FW ?W >W NW 0W =W " >" 3S GV /j CW HUGU @U &U " >" U \"P 'W 9W NW KV 6S " >" <V 1V 6V :V !V 1Y-U 'X \"Z FW MV /W ;X %W " >" @W :W .X +W ;V NW KW FW ?W >W NW 0W =W 3S GV /h " >" AW HUGU ?T %T NT " >" )X 9W X KV 6S <W 3V 6V 9V \"V " >" /Z1X (X !Z Ga (V 9a ;W $W @W :W .W *W ;V NW KW " >" FW ?W >W NW 0W =W 3S GV .f @W HUGU ?U &" >"U U *W 8W W JV " >" 6S ;V 3V 6V :W \"V .[5[ *Y Z " >" Ha (W :a <X $W @W :W /X *X <V X KW FW ?W >W NW 0W =W " >" 3S GV +a >W HUGU >T %T " >" NT +X 8W !X (VIV 6S :V 5V 5U" >" 9W \"U +\\;] )X MZ Ia (W :a =Y %W ?W :W " >" /W )[ ?V #[ KW FW ?W >W NW 0W =W 3S GV 'Z ;W " >" HUGU >U &U U ,W 7W !" >"W 'VIV 6S :V 6W 6V 4V *_C` " >" )Y LZ Ja :a (P7Y $W ?W :W 0X (b GV +b JW FW ?W >W " >" NW 0W =W 3S GV 7W HUGU >U &U " >" U -X 7W \"X 'VJW " >" 6S 9V 7V 5U 3U 'x (Z KZ Ka :a " >" (R:Z $W ?W :W 0X (b GV +b JW FW ?W >W NW 0W =W 3S " >" GV 7W #U &U U " >" -X 7W \"X &UJW 6S 9W 9W " >" Bu ([ IZ La :a (T>[ $X ?W :W 1X &a GV +a " >" IW FW ?W >W NW 0W =W 3S GV 7W $V " >" 'V !V .X 6W #X %VLW " >" 5S 2p -a " >" 8XE] %Y >W :W 3Z $_ GV +_ GW FW ?W >W NW 0W =W " >" 3S GV 7W /QGW 2QGW ,QG" >"W 0Z 6W %Z %a 5S " >" 0l +a 8p +_ >W :W ;a !] G" >"V +] EW FW ?W >W NW 0W =W 3S GV 7W /` " >" 1` +` 7a 5W -a #` " >" >e '` " >" 7o *^ =W :W ;` KY GV +Y AW FW ?W >W NW 0W =W " >" 3S GV 7W /` 1` +` " >" 7` 4W -` \"_ " >" 8\\ #_ \"} 3n )^ =W :W ;` 9V " >" BW FW ?W >W NW 0W =W 'V 7W /_ " >" 0_ *_ 6` 4W -` !] " >" -] " >" } 3l '] <W :W ;_ 8V BW FW ?W >W NW 0W =W " >" 'V 7W /^ /^ )^ " >" 5_ 3W -_ N[ " >" ,[ M} 2j &\\ ;W :W ;^ 7V BW " >" FW ?W >W NW 0W =W 7W -Y *Y " >" $Y 2^ 2W -^ LX " >" *X J} " >" /d #Z 9W :W ;\\ 5V BW FW ?W >W NW 0W =W " >" 7W " >" /\\ 0W HT " >" I} *[ NW 6W :W ;Z 3V BW FW ?W >W" >" NW 0W =W 7W " >" /Z .W " >" =} " >" " >" D" }; > > > const unsigned char logo40x38[4576] = { > 177,200,200,200,3,123,123,0,36,200,200,200,1,123,123,0,2,255,255,0,1,189,189,189,1,0,0,0,34,200,200,200, > 1,123,123,0,4,255,255,0,1,189,189,189,1,0,0,0,1,123,123,123,32,200,200,200,1,123,123,0,5,255,255,0,1,0,0, > 0,2,123,123,123,30,200,200,200,1,123,123,0,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,29,200,200,200, > 1,123,123,0,7,255,255,0,1,0,0,0,2,123,123,123,28,200,200,200,1,123,123,0,8,255,255,0,1,189,189,189,1,0,0,0, > 2,123,123,123,27,200,200,200,1,123,123,0,9,255,255,0,1,0,0,0,2,123,123,123,26,200,200,200,1,123,123,0,10,255, > 255,0,1,189,189,189,1,0,0,0,2,123,123,123,25,200,200,200,1,123,123,0,3,255,255,0,1,189,189,189,3,0,0,0,1,189, > 189,189,3,255,255,0,1,0,0,0,2,123,123,123,24,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,3,255,255,0,1,189, > 189,189,1,0,0,0,2,123,123,123,23,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,4,255,255,0,1,0,0,0,2,123,123,123, > 22,200,200,200,1,123,123,0,5,255,255,0,5,0,0,0,4,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,21,200,200,200, > 1,123,123,0,5,255,255,0,5,0,0,0,5,255,255,0,1,0,0,0,2,123,123,123,20,200,200,200,1,123,123,0,6,255,255,0,5,0,0, > 0,5,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,19,200,200,200,1,123,123,0,6,255,255,0,1,123,123,0,3,0,0,0,1, > 123,123,0,6,255,255,0,1,0,0,0,2,123,123,123,18,200,200,200,1,123,123,0,7,255,255,0,1,189,189,189,3,0,0,0,1,189, > 189,189,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,17,200,200,200,1,123,123,0,8,255,255,0,3,0,0,0,8,255,255, > 0,1,0,0,0,2,123,123,123,16,200,200,200,1,123,123,0,9,255,255,0,1,123,123,0,1,0,0,0,1,123,123,0,8,255,255,0,1,189, > 189,189,1,0,0,0,2,123,123,123,15,200,200,200,1,123,123,0,9,255,255,0,1,189,189,189,1,0,0,0,1,189,189,189,9,255,255, > 0,1,0,0,0,2,123,123,123,14,200,200,200,1,123,123,0,11,255,255,0,1,0,0,0,10,255,255,0,1,189,189,189,1,0,0,0,2,123, > 123,123,13,200,200,200,1,123,123,0,23,255,255,0,1,0,0,0,2,123,123,123,12,200,200,200,1,123,123,0,11,255,255,0,1,189, > 189,189,2,0,0,0,1,189,189,189,9,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,11,200,200,200,1,123,123,0,11,255,255, > 0,4,0,0,0,10,255,255,0,1,0,0,0,2,123,123,123,10,200,200,200,1,123,123,0,12,255,255,0,4,0,0,0,10,255,255,0,1,189,189, > 189,1,0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,12,255,255,0,1,189,189,189,2,0,0,0,1,189,189,189,11,255,255,0,1, > 0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,27,255,255,0,1,0,0,0,3,123,123,123,8,200,200,200,1,123,123,0,26,255, > 255,0,1,189,189,189,1,0,0,0,3,123,123,123,9,200,200,200,1,123,123,0,24,255,255,0,1,189,189,189,1,0,0,0,4,123,123, > 123,10,200,200,200,1,123,123,0,24,0,0,0,5,123,123,123,12,200,200,200,27,123,123,123,14,200,200,200,25,123,123,123,86, > 200,200,200,91,49,124,118,124,71,32,124,95,49,56,114,52,82,121,0}; > > > > > > > inline std::FILE* output(std::FILE *file) { > cimg::mutex(1); > static std::FILE *res = stderr; > if (file) res = file; > cimg::mutex(1,0); > return res; > } > > > inline unsigned int nb_cpus() { > unsigned int res = 1; > > > > > > res = (unsigned int)sysconf(_SC_NPROCESSORS_ONLN); > > return res?res:1U; > } > > > inline int mutex(const unsigned int n, const int lock_mode) { > switch (lock_mode) { > case 0 : cimg::Mutex_attr().unlock(n); return 0; > case 1 : cimg::Mutex_attr().lock(n); return 0; > default : return cimg::Mutex_attr().trylock(n); > } > } ># 3800 "./CImg.h" > inline void warn(const char *const format, ...) { > if (cimg::exception_mode()>=1) { > char message[16384] = { 0 }; > std::va_list ap; > __builtin_va_start(ap,format); > vsnprintf(message,sizeof(message),format,ap); > __builtin_va_end(ap); > > > > std::fprintf(cimg::output(),"\n%s[CImg] *** Warning ***%s%s",cimg::t_red,cimg::t_normal,message); > > } > } ># 3824 "./CImg.h" > inline int system(const char *const command, const char *const module_name=0) { ># 3845 "./CImg.h" > return std::system(command); > return module_name?0:1; > > } > > > template<typename T> > inline T& temporary(const T&) { > static T temp; > return temp; > } > > > template<typename T> > inline void swap(T& a, T& b) { T t = a; a = b; b = t; } > > > template<typename T1, typename T2> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2) { > cimg::swap(a1,b1); cimg::swap(a2,b2); > } > > > template<typename T1, typename T2, typename T3> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3) { > cimg::swap(a1,b1,a2,b2); cimg::swap(a3,b3); > } > > > template<typename T1, typename T2, typename T3, typename T4> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4) { > cimg::swap(a1,b1,a2,b2,a3,b3); cimg::swap(a4,b4); > } > > > template<typename T1, typename T2, typename T3, typename T4, typename T5> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5) { > cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4); cimg::swap(a5,b5); > } > > > template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6) { > cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5); cimg::swap(a6,b6); > } > > > template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6, > T7& a7, T7& b7) { > cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6); cimg::swap(a7,b7); > } > > > template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6, > T7& a7, T7& b7, T8& a8, T8& b8) { > cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6,a7,b7); cimg::swap(a8,b8); > } > > > > > > inline bool endianness() { > const int x = 1; > return ((unsigned char*)&x)[0]?false:true; > } > > > > > > > template<typename T> > inline void invert_endianness(T* const buffer, const unsigned long size) { > if (size) switch (sizeof(T)) { > case 1 : break; > case 2 : { for (unsigned short *ptr = (unsigned short*)buffer+size; ptr>(unsigned short*)buffer; ) { > const unsigned short val = *(--ptr); > *ptr = (unsigned short)((val>>8)|((val<<8))); > } > } break; > case 4 : { for (unsigned int *ptr = (unsigned int*)buffer+size; ptr>(unsigned int*)buffer; ) { > const unsigned int val = *(--ptr); > *ptr = (val>>24)|((val>>8)&0xff00)|((val<<8)&0xff0000)|(val<<24); > } > } break; > default : { for (T* ptr = buffer+size; ptr>buffer; ) { > unsigned char *pb = (unsigned char*)(--ptr), *pe = pb + sizeof(T); > for (int i = 0; i<(int)sizeof(T)/2; ++i) swap(*(pb++),*(--pe)); > } > } > } > } > > > > > > > template<typename T> > inline T& invert_endianness(T& a) { > invert_endianness(&a,1); > return a; > } > > > inline unsigned int float2uint(const float f) { > int tmp = 0; > std::memcpy(&tmp,&f,sizeof(float)); > if (tmp>=0) return (unsigned int)f; > unsigned int u; > std::memcpy(&u,&f,sizeof(float)); > return ((u)<<1)>>1; > } > > inline float uint2float(const unsigned int u) { > if (u<(1U<<19)) return (float)u; > float f; > const unsigned int v = u|(1U<<(8*sizeof(unsigned int)-1)); > std::memcpy(&f,&v,sizeof(float)); > return f; > } > > > > > > inline unsigned long time() { > > struct timeval st_time; > gettimeofday(&st_time,0); > return (unsigned long)(st_time.tv_usec/1000 + st_time.tv_sec*1000); > > > > > > > > } > > > inline unsigned long tictoc(const bool is_tic); > > > > > > inline unsigned long tic() { > return cimg::tictoc(true); > } > > > > > > inline unsigned long toc() { > return cimg::tictoc(false); > } > > > > > > > > inline void sleep(const unsigned int milliseconds) { > > struct timespec tv; > tv.tv_sec = milliseconds/1000; > tv.tv_nsec = (milliseconds%1000)*1000000; > nanosleep(&tv,0); > > > > } > > inline unsigned int _wait(const unsigned int milliseconds, unsigned long& timer) { > if (!timer) timer = cimg::time(); > const unsigned long current_time = cimg::time(); > if (current_time>=timer+milliseconds) { timer = current_time; return 0; } > const unsigned long time_diff = timer + milliseconds - current_time; > timer = current_time + time_diff; > cimg::sleep(time_diff); > return (unsigned int)time_diff; > } ># 4041 "./CImg.h" > inline unsigned int wait(const unsigned int milliseconds) { > cimg::mutex(3); > static unsigned long timer = 0; > if (!timer) timer = cimg::time(); > cimg::mutex(3,0); > return _wait(milliseconds,timer); > } ># 4089 "./CImg.h" > inline void srand() { > const unsigned int t = (unsigned int)cimg::time(); > > std::srand(t+(unsigned int)getpid()); > > > > > > } > > inline void srand(const unsigned int seed) { > std::srand(seed); > } > > > > > inline double rand() { > return (double)std::rand()/2147483647; > } > > > > > > inline double crand() { > return 1-2*cimg::rand(); > } > > > > > inline double grand() { > double x1, w; > do { > const double x2 = 2*cimg::rand() - 1.0; > x1 = 2*cimg::rand()-1.0; > w = x1*x1 + x2*x2; > } while (w<=0 || w>=1.0); > return x1*std::sqrt((-2*std::log(w))/w); > } > > > > > inline unsigned int prand(const double z) { > if (z<=1.0e-10) return 0; > if (z>100) return (unsigned int)((std::sqrt(z) * cimg::grand()) + z); > unsigned int k = 0; > const double y = std::exp(-z); > for (double s = 1.0; s>=y; ++k) s*=cimg::rand(); > return k-1; > } > > > template<typename T> > inline T rol(const T a, const unsigned int n=1) { > return n?(T)((a<<n)|(a>>((sizeof(T)<<3)-n))):a; > } > > inline float rol(const float a, const unsigned int n=1) { > return (float)rol((int)a,n); > } > > inline double rol(const double a, const unsigned int n=1) { > return (double)rol((long)a,n); > } > > > template<typename T> > inline T ror(const T a, const unsigned int n=1) { > return n?(T)((a>>n)|(a<<((sizeof(T)<<3)-n))):a; > } > > inline float ror(const float a, const unsigned int n=1) { > return (float)ror((int)a,n); > } > > inline double ror(const double a, const unsigned int n=1) { > return (double)ror((long)a,n); > } > > > template<typename T> > inline T abs(const T a) { > return a>=0?a:-a; > } > inline bool abs(const bool a) { > return a; > } > inline unsigned char abs(const unsigned char a) { > return a; > } > inline unsigned short abs(const unsigned short a) { > return a; > } > inline unsigned int abs(const unsigned int a) { > return a; > } > inline unsigned long abs(const unsigned long a) { > return a; > } > inline double abs(const double a) { > return std::fabs(a); > } > inline float abs(const float a) { > return (float)std::fabs((double)a); > } > inline int abs(const int a) { > return std::abs(a); > } > > > template<typename T> > inline T sqr(const T val) { > return val*val; > } > > > inline int xln(const int x) { > return x>0?(int)(1+std::log10((double)x)):1; > } > > > template<typename t1, typename t2> > inline typename cimg::superset<t1,t2>::type min(const t1& a, const t2& b) { > typedef typename cimg::superset<t1,t2>::type t1t2; > return (t1t2)(a<=b?a:b); > } > > > template<typename t1, typename t2, typename t3> > inline typename cimg::superset2<t1,t2,t3>::type min(const t1& a, const t2& b, const t3& c) { > typedef typename cimg::superset2<t1,t2,t3>::type t1t2t3; > return (t1t2t3)cimg::min(cimg::min(a,b),c); > } > > > template<typename t1, typename t2, typename t3, typename t4> > inline typename cimg::superset3<t1,t2,t3,t4>::type min(const t1& a, const t2& b, const t3& c, const t4& d) { > typedef typename cimg::superset3<t1,t2,t3,t4>::type t1t2t3t4; > return (t1t2t3t4)cimg::min(cimg::min(a,b,c),d); > } > > > template<typename t1, typename t2> > inline typename cimg::superset<t1,t2>::type max(const t1& a, const t2& b) { > typedef typename cimg::superset<t1,t2>::type t1t2; > return (t1t2)(a>=b?a:b); > } > > > template<typename t1, typename t2, typename t3> > inline typename cimg::superset2<t1,t2,t3>::type max(const t1& a, const t2& b, const t3& c) { > typedef typename cimg::superset2<t1,t2,t3>::type t1t2t3; > return (t1t2t3)cimg::max(cimg::max(a,b),c); > } > > > template<typename t1, typename t2, typename t3, typename t4> > inline typename cimg::superset3<t1,t2,t3,t4>::type max(const t1& a, const t2& b, const t3& c, const t4& d) { > typedef typename cimg::superset3<t1,t2,t3,t4>::type t1t2t3t4; > return (t1t2t3t4)cimg::max(cimg::max(a,b,c),d); > } > > > template<typename T> > inline T sign(const T x) { > return (x<0)?(T)(-1):(x==0?(T)0:(T)1); > } > > > template<typename T> > inline unsigned long nearest_pow2(const T x) { > unsigned long i = 1; > while (x>i) i<<=1; > return i; > } > > > inline double sinc(const double x) { > return x?std::sin(x)/x:1; > } > > > > > > > > template<typename T> > inline T mod(const T& x, const T& m) { > const double dx = (double)x, dm = (double)m; > return (T)(dx - dm * std::floor(dx / dm)); > } > inline int mod(const bool x, const bool m) { > return m?(x?1:0):0; > } > inline int mod(const char x, const char m) { > return x>=0?x%m:(x%m?m+x%m:0); > } > inline int mod(const short x, const short m) { > return x>=0?x%m:(x%m?m+x%m:0); > } > inline int mod(const int x, const int m) { > return x>=0?x%m:(x%m?m+x%m:0); > } > inline int mod(const long x, const long m) { > return x>=0?x%m:(x%m?m+x%m:0); > } > inline int mod(const unsigned char x, const unsigned char m) { > return x%m; > } > inline int mod(const unsigned short x, const unsigned short m) { > return x%m; > } > inline int mod(const unsigned int x, const unsigned int m) { > return x%m; > } > inline int mod(const unsigned long x, const unsigned long m) { > return x%m; > } > > > > > > > > template<typename T> > inline T minmod(const T a, const T b) { > return a*b<=0?0:(a>0?(a<b?a:b):(a<b?b:a)); > } > > > inline double log2(const double x) { > static const double base = std::log(2.0); > return std::log(x)/base; > } ># 4337 "./CImg.h" > template<typename T> > inline T round(const T x, const double y=1, const int rounding_type=0) { > if (y<=0) return x; > const double sx = (double)x/y, floor = std::floor(sx), delta = sx - floor; > return (T)(y*(rounding_type<0?floor:rounding_type>0?std::ceil(sx):delta<0.5?floor:std::ceil(sx))); > } > > inline double _pythagore(double a, double b) { > const double absa = cimg::abs(a), absb = cimg::abs(b); > if (absa>absb) { const double tmp = absb/absa; return absa*std::sqrt(1.0+tmp*tmp); } > else { const double tmp = absa/absb; return absb==0?0:absb*std::sqrt(1.0+tmp*tmp); } > } > > inline bool _is_self_expr(const char *expression) { > if (!expression || *expression=='>' || *expression=='<') return false; > for (const char *s = expression; *s; ++s) > if ((*s=='i' || *s=='j') && (s[1]=='(' || s[1]=='[')) return true; > return false; > } > > > inline char uncase(const char x) { > return (char)((x<'A'||x>'Z')?x:x-'A'+'a'); > } > > > inline void uncase(char *const str) { > if (str) for (char *ptr = str; *ptr; ++ptr) *ptr = uncase(*ptr); > } > > > > > > > > inline double atof(const char *const str) { > double x = 0, y = 1; > if (!str) return 0; else { std::sscanf(str,"%lf/%lf",&x,&y); return x/y; } > } ># 4386 "./CImg.h" > inline int strncasecmp(const char *const str1, const char *const str2, const int l) { > if (!l) return 0; > if (!str1) return str2?-1:0; > const char *nstr1 = str1, *nstr2 = str2; > int k, diff = 0; for (k = 0; k<l && !(diff = uncase(*nstr1)-uncase(*nstr2)); ++k) { ++nstr1; ++nstr2; } > return k!=l?diff:0; > } ># 4401 "./CImg.h" > inline int strcasecmp(const char *const str1, const char *const str2) { > if (!str1) return str2?-1:0; > const unsigned int > l1 = (unsigned int)std::strlen(str1), > l2 = (unsigned int)std::strlen(str2); > return cimg::strncasecmp(str1,str2,1+(l1<l2?l1:l2)); > } ># 4417 "./CImg.h" > inline bool strpare(char *const str, const char delimiter=' ', const bool is_symmetric=false, const bool is_iterative=false) { > if (!str) return false; > const int l = (int)std::strlen(str); > int p, q; > if (is_symmetric) for (p = 0, q = l-1; p<q && str[p]==delimiter && str[q]==delimiter; ) { --q; ++p; if (!is_iterative) break; } > else { > for (p = 0; p<l && str[p]==delimiter; ) { ++p; if (!is_iterative) break; } > for (q = l-1; q>p && str[q]==delimiter; ) { --q; if (!is_iterative) break; } > } > const int n = q - p + 1; > if (n!=l) { std::memmove(str,str+p,n); str[n] = 0; return true; } > return false; > } > > > > > > inline void strunescape(char *const str) { > > unsigned int val = 0; > for (char *ns = str, *nd = str; *ns || (bool)(*nd=0); ++nd) if (*ns=='\\') switch (*(++ns)) { > case 'n': *nd = '\n'; ++ns; break;; > case 't': *nd = '\t'; ++ns; break;; > case 'v': *nd = '\v'; ++ns; break;; > case 'b': *nd = '\b'; ++ns; break;; > case 'r': *nd = '\r'; ++ns; break;; > case 'f': *nd = '\f'; ++ns; break;; > case 'a': *nd = '\a'; ++ns; break;; > case '\\': *nd = '\\'; ++ns; break;; > case '\?': *nd = '\?'; ++ns; break;; > case '\'': *nd = '\''; ++ns; break;; > case '\"': *nd = '\"'; ++ns; break;; > case 0 : *nd = 0; break; > case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : > std::sscanf(ns,"%o",&val); while (*ns>='0' && *ns<='7') ++ns; > *nd = val; break; > case 'x': > std::sscanf(++ns,"%x",&val); while ((*ns>='0' && *ns<='7') || (*ns>='a' && *ns<='f') || (*ns>='A' && *ns<='F')) ++ns; > *nd = val; break; > default : *nd = *(ns++); > } else *nd = *(ns++); > } > > > inline const char *strbuffersize(const unsigned long size) { > static char res[256] = { 0 }; > cimg::mutex(5); > if (size<1024LU) snprintf(res,sizeof(res),"%lu byte%s",size,size>1?"s":""); > else if (size<1024*1024LU) { const float nsize = size/1024.0f; snprintf(res,sizeof(res),"%.1f Kio",nsize); } > else if (size<1024*1024*1024LU) { const float nsize = size/(1024*1024.0f); snprintf(res,sizeof(res),"%.1f Mio",nsize); } > else { const float nsize = size/(1024*1024*1024.0f); snprintf(res,sizeof(res),"%.1f Gio",nsize); } > cimg::mutex(5,0); > return res; > } > > > inline const char *stros() { > > const char *const str = "Linux"; ># 4495 "./CImg.h" > return str; > } > > > inline const char* basename(const char *const str) { > const char *p = 0; > for (const char *np = str; np>=str && (p=np); np = std::strchr(np,'/')+1) {} > return p; > } > > > inline const char* filenamerand() { > cimg::mutex(6); > static char randomid[9] = { 0 }; > cimg::srand(); > for (unsigned int k = 0; k<8; ++k) { > const int v = (int)std::rand()%3; > randomid[k] = (char)(v==0?('0'+(std::rand()%10)):(v==1?('a'+(std::rand()%26)):('A'+(std::rand()%26)))); > } > cimg::mutex(6,0); > return randomid; > } > > > inline void winformat_string(char *const str) { > if (str && *str) { > > > > > } > } ># 4536 "./CImg.h" > inline std::FILE *fopen(const char *const path, const char *const mode) { > if (!path) > throw CImgArgumentException("cimg::fopen(): Specified file path is (null)."); > if (!mode) > throw CImgArgumentException("cimg::fopen(): File '%s', specified mode is (null).", > path); > std::FILE *res = 0; > if (*path=='-' && (!path[1] || path[1]=='.')) { > res = (*mode=='r')?stdin:stdout; > > > > > > } else res = std::fopen(path,mode); > if (!res) throw CImgIOException("cimg::fopen(): Failed to open file '%s' with mode '%s'.", > path,mode); > return res; > } ># 4563 "./CImg.h" > inline int fclose(std::FILE *file) { > if (!file) warn("cimg::fclose(): Specified file is (null)."); > if (!file || file==stdin || file==stdout) return 0; > const int errn = std::fclose(file); > if (errn!=0) warn("cimg::fclose(): Error code %d returned during file closing.", > errn); > return errn; > } > > > > > > > > inline const char* temporary_path(const char *const user_path=0, const bool reinit_path=false) { > > > > > > > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > char tmp[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file = 0; > snprintf(filetmp,sizeof(filetmp),"%s.tmp",cimg::filenamerand()); > char *tmpPath = std::getenv("TMP"); > if (!tmpPath) { tmpPath = std::getenv("TEMP"); winformat_string(tmpPath); } > if (tmpPath) if (!path_found) { snprintf(s_path,1024,"%s",tmpPath); snprintf(tmp,sizeof(tmp),"%s%c%s",s_path,'/',filetmp); if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } }; ># 4612 "./CImg.h" > if (!path_found) { snprintf(s_path,1024,"%s","/tmp"); snprintf(tmp,sizeof(tmp),"%s%c%s",s_path,'/',filetmp); if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } }; > if (!path_found) { snprintf(s_path,1024,"%s","/var/tmp"); snprintf(tmp,sizeof(tmp),"%s%c%s",s_path,'/',filetmp); if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } }; > > if (!path_found) { > *s_path = 0; > std::strncpy(tmp,filetmp,sizeof(tmp)-1); > if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } > } > if (!path_found) { > cimg::mutex(7,0); > throw CImgIOException("cimg::temporary_path(): Failed to locate path for writing temporary files.\n"); > } > } > cimg::mutex(7,0); > return s_path; > } ># 4669 "./CImg.h" > inline const char* imagemagick_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; ># 4762 "./CImg.h" > if (!path_found) { > std::strcpy(s_path,"./convert"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"convert"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char* graphicsmagick_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; ># 4873 "./CImg.h" > if (!path_found) { > std::strcpy(s_path,"./gm"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"gm"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char* medcon_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; ># 4920 "./CImg.h" > if (!path_found) { > std::strcpy(s_path,"./medcon"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"medcon"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *ffmpeg_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./ffmpeg"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"ffmpeg"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *gzip_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./gzip"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"gzip"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *gunzip_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./gunzip"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"gunzip"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *dcraw_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./dcraw"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"dcraw"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *wget_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./wget"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"wget"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *curl_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./curl"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"curl"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > inline const char *split_filename(const char *const filename, char *const body=0) { > if (!filename) { if (body) *body = 0; return 0; } > const char *p = 0; for (const char *np = filename; np>=filename && (p=np); np = std::strchr(np,'.')+1) {} > if (p==filename) { > if (body) std::strcpy(body,filename); > return filename + std::strlen(filename); > } > const unsigned int l = (unsigned int)(p - filename - 1); > if (body) { std::memcpy(body,filename,l); body[l] = 0; } > return p; > } > > > inline char* number_filename(const char *const filename, const int number, const unsigned int digits, char *const str) { > if (!filename) { if (str) *str = 0; return 0; } > char format[1024] = { 0 }, body[1024] = { 0 }; > const char *const ext = cimg::split_filename(filename,body); > if (*ext) snprintf(format,sizeof(format),"%%s_%%.%ud.%%s",digits); > else snprintf(format,sizeof(format),"%%s_%%.%ud",digits); > std::sprintf(str,format,body,number,ext); > return str; > } > > > > > > > > inline const char *file_type(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("cimg::file_type(): Specified filename is (null)."); > static const char > *const _pnm = "pnm", > *const _pfm = "pfm", > *const _bmp = "bmp", > *const _gif = "gif", > *const _jpg = "jpg", > *const _off = "off", > *const _pan = "pan", > *const _png = "png", > *const _tif = "tif", > *const _inr = "inr", > *const _dcm = "dcm"; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > const char *f_type = 0, *head; > char header[2048] = { 0 }, item[1024] = { 0 }; > const unsigned char *const uheader = (unsigned char*)header; > int err; char cerr; > const unsigned int siz = (unsigned int)std::fread(header,2048,1,nfile); > if (!file) cimg::fclose(nfile); > > if (!std::strncmp(header,"OFF\n",4)) f_type = _off; > else if (!std::strncmp(header,"#INRIMAGE",9)) f_type = _inr; > else if (!std::strncmp(header,"PANDORE",7)) f_type = _pan; > else if (!std::strncmp(header+128,"DICM",4)) f_type = _dcm; > else if (uheader[0]==0xFF && uheader[1]==0xD8 && uheader[2]==0xFF) f_type = _jpg; > else if (header[0]=='B' && header[1]=='M') f_type = _bmp; > else if (header[0]=='G' && header[1]=='I' && header[2]=='F' && header[3]=='8' && header[5]=='a' && > (header[4]=='7' || header[4]=='9')) f_type = _gif; > else if (uheader[0]==0x89 && uheader[1]==0x50 && uheader[2]==0x4E && uheader[3]==0x47 && > uheader[4]==0x0D && uheader[5]==0x0A && uheader[6]==0x1A && uheader[7]==0x0A) f_type = _png; > else if ((uheader[0]==0x49 && uheader[1]==0x49) || (uheader[0]==0x4D && uheader[1]==0x4D)) f_type = _tif; > else { > head = header; > while (head<header+siz && (err=std::sscanf(head,"%1023[^\n]",item))!=(-1) && (*item=='#' || !err)) > head+=1+(err?std::strlen(item):0); > if (std::sscanf(item," P%d",&err)==1) f_type = _pnm; > else if (std::sscanf(item," P%c",&cerr)==1 && (cerr=='f' || cerr=='F')) f_type = _pfm; > } > return f_type; > } ># 5242 "./CImg.h" > template<typename T> > inline int fread(T *const ptr, const unsigned long nmemb, std::FILE *stream) { > if (!ptr || nmemb<=0 || !stream) > throw CImgArgumentException("cimg::fread(): Invalid reading request of %u %s%s from file %p to buffer %p.", > nmemb,cimg::type<T>::string(),nmemb>1?"s":"",stream,ptr); > > const unsigned long wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T); > unsigned long to_read = nmemb, al_read = 0, l_to_read = 0, l_al_read = 0; > do { > l_to_read = (to_read*sizeof(T))<wlimitT?to_read:wlimit; > l_al_read = (unsigned long)std::fread((void*)(ptr+al_read),sizeof(T),l_to_read,stream); > al_read+=l_al_read; > to_read-=l_al_read; > } while (l_to_read==l_al_read && to_read>0); > if (to_read>0) > warn("cimg::fread(): Only %u/%u elements could be read from file.", > al_read,nmemb); > return al_read; > } ># 5270 "./CImg.h" > template<typename T> > inline int fwrite(const T *ptr, const unsigned long nmemb, std::FILE *stream) { > if (!ptr || !stream) > throw CImgArgumentException("cimg::fwrite(): Invalid writing request of %u %s%s from buffer %p to file %p.", > nmemb,cimg::type<T>::string(),nmemb>1?"s":"",ptr,stream); > if (nmemb<=0) return 0; > const unsigned long wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T); > unsigned long to_write = nmemb, al_write = 0, l_to_write = 0, l_al_write = 0; > do { > l_to_write = (to_write*sizeof(T))<wlimitT?to_write:wlimit; > l_al_write = (unsigned long)std::fwrite((void*)(ptr+al_write),sizeof(T),l_to_write,stream); > al_write+=l_al_write; > to_write-=l_al_write; > } while (l_to_write==l_al_write && to_write>0); > if (to_write>0) > warn("cimg::fwrite(): Only %u/%u elements could be written in file.", > al_write,nmemb); > return al_write; > } > > > > > > > inline void fempty(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("cimg::file_type(): Specified filename is (null)."); > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > if (!file) cimg::fclose(nfile); > } ># 5310 "./CImg.h" > inline char *load_network_external(const char *const filename, char *const filename_local) { > if (!filename) > throw CImgArgumentException("cimg::load_network_external(): Specified filename is (null)."); > if (!filename_local) > throw CImgArgumentException("cimg::load_network_external(): Specified destination string is (null)."); > const char *const _ext = cimg::split_filename(filename), *const ext = (*_ext && _ext>filename)?_ext-1:_ext; > char command[1024] = { 0 }; > std::FILE *file = 0; > *filename_local = 0; > do { > snprintf(filename_local,512,"%s%c%s%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > if ((file=std::fopen(filename_local,"rb"))!=0) cimg::fclose(file); > } while (file); > > > snprintf(command,sizeof(command),"%s -f --silent --compressed -o \"%s\" \"%s\"", > cimg::curl_path(),filename_local,filename); > cimg::system(command); > if (!(file = std::fopen(filename_local,"rb"))) { > > > snprintf(command,sizeof(command),"%s -q -r -l 0 --no-cache -O \"%s\" \"%s\"", > cimg::wget_path(),filename_local,filename); > cimg::system(command); > if (!(file = std::fopen(filename_local,"rb"))) > throw CImgIOException("cimg::load_network_external(): Failed to load file '%s' with external tools 'wget' or 'curl'.",filename); > cimg::fclose(file); > > > snprintf(command,sizeof(command),"%s.gz",filename_local); > std::rename(filename_local,command); > snprintf(command,sizeof(command),"%s --quiet \"%s.gz\"", > gunzip_path(),filename_local); > cimg::system(command); > file = std::fopen(filename_local,"rb"); > if (!file) { > snprintf(command,sizeof(command),"%s.gz",filename_local); > std::rename(command,filename_local); > file = std::fopen(filename_local,"rb"); > } > } > std::fseek(file,0,2); > if (std::ftell(file)<=0) > throw CImgIOException("cimg::load_network_external(): Failed to load file '%s' with external commands 'wget' or 'curl'.",filename); > cimg::fclose(file); > return filename_local; > } > > > inline const char* option(const char *const name, const int argc, const char *const *const argv, > const char *const defaut, const char *const usage, const bool reset_static) { > static bool first = true, visu = false; > if (reset_static) { first = true; return 0; } > const char *res = 0; > if (first) { > first = false; > visu = cimg::option("-h",argc,argv,(char*)0,(char*)0,false)!=0; > visu |= cimg::option("-help",argc,argv,(char*)0,(char*)0,false)!=0; > visu |= cimg::option("--help",argc,argv,(char*)0,(char*)0,false)!=0; > } > if (!name && visu) { > if (usage) { > std::fprintf(cimg::output(),"\n %s%s%s",cimg::t_red,cimg::basename(argv[0]),cimg::t_normal); > std::fprintf(cimg::output(),": %s",usage); > std::fprintf(cimg::output()," (%s, %s)\n\n","Jun 20 2014","20:24:15"); > } > if (defaut) std::fprintf(cimg::output(),"%s\n",defaut); > } > if (name) { > if (argc>0) { > int k = 0; > while (k<argc && std::strcmp(argv[k],name)) ++k; > res = (k++==argc?defaut:(k==argc?argv[--k]:argv[k])); > } else res = defaut; > if (visu && usage) std::fprintf(cimg::output()," %s%-16s%s %-24s %s%s%s\n", > cimg::t_bold,name,cimg::t_normal,res?res:"0",cimg::t_green,usage,cimg::t_normal); > } > return res; > } > > inline const char* option(const char *const name, const int argc, const char *const *const argv, > const char *const defaut, const char *const usage=0) { > return option(name,argc,argv,defaut,usage,false); > } > > inline bool option(const char *const name, const int argc, const char *const *const argv, > const bool defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const bool res = s?(cimg::strcasecmp(s,"false") && cimg::strcasecmp(s,"off") && cimg::strcasecmp(s,"0")):defaut; > cimg::option(name,0,0,res?"true":"false",usage); > return res; > } > > inline int option(const char *const name, const int argc, const char *const *const argv, > const int defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const int res = s?std::atoi(s):defaut; > char tmp[256] = { 0 }; > snprintf(tmp,sizeof(tmp),"%d",res); > cimg::option(name,0,0,tmp,usage); > return res; > } > > inline char option(const char *const name, const int argc, const char *const *const argv, > const char defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const char res = s?*s:defaut; > char tmp[8] = { 0 }; > *tmp = res; > cimg::option(name,0,0,tmp,usage); > return res; > } > > inline float option(const char *const name, const int argc, const char *const *const argv, > const float defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const float res = s?(float)cimg::atof(s):defaut; > char tmp[256] = { 0 }; > snprintf(tmp,sizeof(tmp),"%g",res); > cimg::option(name,0,0,tmp,usage); > return res; > } > > inline double option(const char *const name, const int argc, const char *const *const argv, > const double defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const double res = s?cimg::atof(s):defaut; > char tmp[256] = { 0 }; > snprintf(tmp,sizeof(tmp),"%g",res); > cimg::option(name,0,0,tmp,usage); > return res; > } > > inline const char* argument(const unsigned int nb, const int argc, const char *const *const argv, const unsigned int nb_singles=0, ...) { > for (int k = 1, pos = 0; k<argc;) { > const char *const item = argv[k]; > bool option = (*item=='-'), single_option = false; > if (option) { > va_list ap; > __builtin_va_start(ap,nb_singles); > for (unsigned int i = 0; i<nb_singles; ++i) if (!cimg::strcasecmp(item,__builtin_va_arg(ap,char*))) { single_option = true; break; } > __builtin_va_end(ap); > } > if (option) { ++k; if (!single_option) ++k; } > else { if (pos++==(int)nb) return item; else ++k; } > } > return 0; > } > > > > > > inline void info() { > char tmp[1024] = { 0 }; > std::fprintf(cimg::output(),"\n %s%sCImg Library %u.%u.%u%s, compiled %s ( %s ) with the following flags:\n\n", > cimg::t_red,cimg::t_bold,159/100,(159/10)%10,159%10, > cimg::t_normal,"Jun 20 2014","20:24:15"); > > std::fprintf(cimg::output()," > Operating System: %s%-13s%s %s('cimg_OS'=%d)%s\n", > cimg::t_bold, > 1==1?"Unix":(1==2?"Windows":"Unknow"), > cimg::t_normal,cimg::t_green, > 1, > cimg::t_normal); > > std::fprintf(cimg::output()," > CPU endianness: %s%s Endian%s\n", > cimg::t_bold, > cimg::endianness()?"Big":"Little", > cimg::t_normal); > > std::fprintf(cimg::output()," > Verbosity mode: %s%-13s%s %s('cimg_verbosity'=%d)%s\n", > cimg::t_bold, > 1==0?"Quiet":(1==1?"Console":(1==2?"Dialog":(1==3?"Console+Warnings":"Dialog+Warnings"))), > cimg::t_normal,cimg::t_green, > 1, > cimg::t_normal); > > std::fprintf(cimg::output()," > Stricts warnings: %s%-13s%s %s('cimg_strict_warnings' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using VT100 messages: %s%-13s%s %s('cimg_use_vt100' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > > std::fprintf(cimg::output()," > Display type: %s%-13s%s %s('cimg_display'=%d)%s\n", > cimg::t_bold, > 0==0?"No display":0==1?"X11":0==2?"Windows GDI":"Unknown", > cimg::t_normal,cimg::t_green, > 0, > cimg::t_normal); ># 5532 "./CImg.h" > std::fprintf(cimg::output()," > Using OpenMP: %s%-13s%s %s('cimg_use_openmp' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > std::fprintf(cimg::output()," > Using PNG library: %s%-13s%s %s('cimg_use_png' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > std::fprintf(cimg::output()," > Using JPEG library: %s%-13s%s %s('cimg_use_jpeg' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using TIFF library: %s%-13s%s %s('cimg_use_tiff' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using Magick++ library: %s%-13s%s %s('cimg_use_magick' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using FFTW3 library: %s%-13s%s %s('cimg_use_fftw3' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using LAPACK library: %s%-13s%s %s('cimg_use_lapack' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::imagemagick_path()); > std::fprintf(cimg::output()," > Path of ImageMagick: %s%-13s%s\n", > cimg::t_bold, > tmp, > cimg::t_normal); > > snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::graphicsmagick_path()); > std::fprintf(cimg::output()," > Path of GraphicsMagick: %s%-13s%s\n", > cimg::t_bold, > tmp, > cimg::t_normal); > > snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::medcon_path()); > std::fprintf(cimg::output()," > Path of 'medcon': %s%-13s%s\n", > cimg::t_bold, > tmp, > cimg::t_normal); > > snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::temporary_path()); > std::fprintf(cimg::output()," > Temporary path: %s%-13s%s\n", > cimg::t_bold, > tmp, > cimg::t_normal); > > std::fprintf(cimg::output(),"\n"); > } ># 5685 "./CImg.h" > } ># 5735 "./CImg.h" > template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator+(const bool val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator-(const bool val, const CImg<T>& img) { typedef typename cimg::superset<T,bool>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator*(const bool val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator/(const bool val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator&(const bool val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator|(const bool val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator^(const bool val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const bool val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const bool val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator+(const unsigned char val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator-(const unsigned char val, const CImg<T>& img) { typedef typename cimg::superset<T,unsigned char>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator*(const unsigned char val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator/(const unsigned char val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator&(const unsigned char val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator|(const unsigned char val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator^(const unsigned char val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const unsigned char val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const unsigned char val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator+(const char val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator-(const char val, const CImg<T>& img) { typedef typename cimg::superset<T,char>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator*(const char val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator/(const char val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator&(const char val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator|(const char val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator^(const char val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const char val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const char val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator+(const signed char val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator-(const signed char val, const CImg<T>& img) { typedef typename cimg::superset<T,signed char>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator*(const signed char val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator/(const signed char val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator&(const signed char val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator|(const signed char val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator^(const signed char val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const signed char val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const signed char val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator+(const unsigned short val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator-(const unsigned short val, const CImg<T>& img) { typedef typename cimg::superset<T,unsigned short>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator*(const unsigned short val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator/(const unsigned short val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator&(const unsigned short val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator|(const unsigned short val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator^(const unsigned short val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const unsigned short val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const unsigned short val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator+(const short val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator-(const short val, const CImg<T>& img) { typedef typename cimg::superset<T,short>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator*(const short val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator/(const short val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator&(const short val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator|(const short val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator^(const short val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const short val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const short val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator+(const unsigned int val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator-(const unsigned int val, const CImg<T>& img) { typedef typename cimg::superset<T,unsigned int>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator*(const unsigned int val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator/(const unsigned int val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator&(const unsigned int val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator|(const unsigned int val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator^(const unsigned int val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const unsigned int val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const unsigned int val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator+(const int val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator-(const int val, const CImg<T>& img) { typedef typename cimg::superset<T,int>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator*(const int val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator/(const int val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator&(const int val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator|(const int val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator^(const int val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const int val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const int val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator+(const unsigned long val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator-(const unsigned long val, const CImg<T>& img) { typedef typename cimg::superset<T,unsigned long>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator*(const unsigned long val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator/(const unsigned long val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator&(const unsigned long val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator|(const unsigned long val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator^(const unsigned long val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const unsigned long val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const unsigned long val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator+(const long val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator-(const long val, const CImg<T>& img) { typedef typename cimg::superset<T,long>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator*(const long val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator/(const long val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator&(const long val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator|(const long val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator^(const long val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const long val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const long val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator+(const float val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator-(const float val, const CImg<T>& img) { typedef typename cimg::superset<T,float>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator*(const float val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator/(const float val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator&(const float val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator|(const float val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator^(const float val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const float val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const float val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator+(const double val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator-(const double val, const CImg<T>& img) { typedef typename cimg::superset<T,double>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator*(const double val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator/(const double val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator&(const double val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator|(const double val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator^(const double val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const double val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const double val, const CImg<T>& img) { return img != val; } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> operator+(const char *const expression, const CImg<T>& img) { > return img + expression; > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> operator-(const char *const expression, const CImg<T>& img) { > return CImg<typename cimg::superset<T,float>::type>(img._width,img._height,img._depth,img._spectrum,expression,true)-=img; > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> operator*(const char *const expression, const CImg<T>& img) { > return img*expression; > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> operator/(const char *const expression, const CImg<T>& img) { > return expression*img.get_invert(); > } > > template<typename T> > inline CImg<T> operator&(const char *const expression, const CImg<T>& img) { > return img & expression; > } > > template<typename T> > inline CImg<T> operator|(const char *const expression, const CImg<T>& img) { > return img | expression; > } > > template<typename T> > inline CImg<T> operator^(const char *const expression, const CImg<T>& img) { > return img ^ expression; > } > > template<typename T> > inline bool operator==(const char *const expression, const CImg<T>& img) { > return img == expression; > } > > template<typename T> > inline bool operator!=(const char *const expression, const CImg<T>& img) { > return img != expression; > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sqr(const CImg<T>& instance) { > return instance.get_sqr(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sqrt(const CImg<T>& instance) { > return instance.get_sqrt(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> exp(const CImg<T>& instance) { > return instance.get_exp(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> log(const CImg<T>& instance) { > return instance.get_log(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> log2(const CImg<T>& instance) { > return instance.get_log2(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> log10(const CImg<T>& instance) { > return instance.get_log10(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> abs(const CImg<T>& instance) { > return instance.get_abs(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sign(const CImg<T>& instance) { > return instance.get_sign(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> cos(const CImg<T>& instance) { > return instance.get_cos(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sin(const CImg<T>& instance) { > return instance.get_sin(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sinc(const CImg<T>& instance) { > return instance.get_sinc(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> tan(const CImg<T>& instance) { > return instance.get_tan(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> acos(const CImg<T>& instance) { > return instance.get_acos(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> asin(const CImg<T>& instance) { > return instance.get_asin(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> atan(const CImg<T>& instance) { > return instance.get_atan(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> cosh(const CImg<T>& instance) { > return instance.get_cosh(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sinh(const CImg<T>& instance) { > return instance.get_sinh(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> tanh(const CImg<T>& instance) { > return instance.get_tanh(); > } > > template<typename T> > inline CImg<T> transpose(const CImg<T>& instance) { > return instance.get_transpose(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> invert(const CImg<T>& instance) { > return instance.get_invert(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> pseudoinvert(const CImg<T>& instance) { > return instance.get_pseudoinvert(); > } ># 5919 "./CImg.h" > struct CImgDisplay { > unsigned long _timer, _fps_frames, _fps_timer; > unsigned int _width, _height, _normalization; > float _fps_fps, _min, _max; > bool _is_fullscreen; > char *_title; > volatile unsigned int _window_width, _window_height, _button, _keys[128], _released_keys[128]; > volatile int _window_x, _window_y, _mouse_x, _mouse_y, _wheel; > volatile bool _is_closed, _is_resized, _is_moved, _is_event, > _is_keyESC, _is_keyF1, _is_keyF2, _is_keyF3, _is_keyF4, _is_keyF5, _is_keyF6, _is_keyF7, > _is_keyF8, _is_keyF9, _is_keyF10, _is_keyF11, _is_keyF12, _is_keyPAUSE, _is_key1, _is_key2, > _is_key3, _is_key4, _is_key5, _is_key6, _is_key7, _is_key8, _is_key9, _is_key0, > _is_keyBACKSPACE, _is_keyINSERT, _is_keyHOME, _is_keyPAGEUP, _is_keyTAB, _is_keyQ, _is_keyW, _is_keyE, > _is_keyR, _is_keyT, _is_keyY, _is_keyU, _is_keyI, _is_keyO, _is_keyP, _is_keyDELETE, > _is_keyEND, _is_keyPAGEDOWN, _is_keyCAPSLOCK, _is_keyA, _is_keyS, _is_keyD, _is_keyF, _is_keyG, > _is_keyH, _is_keyJ, _is_keyK, _is_keyL, _is_keyENTER, _is_keySHIFTLEFT, _is_keyZ, _is_keyX, > _is_keyC, _is_keyV, _is_keyB, _is_keyN, _is_keyM, _is_keySHIFTRIGHT, _is_keyARROWUP, _is_keyCTRLLEFT, > _is_keyAPPLEFT, _is_keyALT, _is_keySPACE, _is_keyALTGR, _is_keyAPPRIGHT, _is_keyMENU, _is_keyCTRLRIGHT, _is_keyARROWLEFT, > _is_keyARROWDOWN, _is_keyARROWRIGHT, _is_keyPAD0, _is_keyPAD1, _is_keyPAD2, _is_keyPAD3, _is_keyPAD4, _is_keyPAD5, > _is_keyPAD6, _is_keyPAD7, _is_keyPAD8, _is_keyPAD9, _is_keyPADADD, _is_keyPADSUB, _is_keyPADMUL, _is_keyPADDIV; ># 5986 "./CImg.h" > ~CImgDisplay() { > assign(); > } ># 6001 "./CImg.h" > CImgDisplay(): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(); > } ># 6021 "./CImg.h" > CImgDisplay(const unsigned int width, const unsigned int height, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(width,height,title,normalization,is_fullscreen,is_closed); > } ># 6042 "./CImg.h" > template<typename T> > explicit CImgDisplay(const CImg<T>& img, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(img,title,normalization,is_fullscreen,is_closed); > } ># 6064 "./CImg.h" > template<typename T> > explicit CImgDisplay(const CImgList<T>& list, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(list,title,normalization,is_fullscreen,is_closed); > } > > > > > > > CImgDisplay(const CImgDisplay& disp): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(disp); > } > > > > static void _no_display_exception() { > throw CImgDisplayException("CImgDisplay(): No display available."); > } > > > > > > CImgDisplay& assign() { > return flush(); > } > > > > > CImgDisplay& assign(const unsigned int width, const unsigned int height, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false) { > cimg::unused(width,height,title,normalization,is_fullscreen,is_closed); > _no_display_exception(); > return assign(); > } > > > > > template<typename T> > CImgDisplay& assign(const CImg<T>& img, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false) { > _no_display_exception(); > return assign(img._width,img._height,title,normalization,is_fullscreen,is_closed); > } > > > > > template<typename T> > CImgDisplay& assign(const CImgList<T>& list, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false) { > _no_display_exception(); > return assign(list._width,list._width,title,normalization,is_fullscreen,is_closed); > } > > > > > CImgDisplay& assign(const CImgDisplay &disp) { > _no_display_exception(); > return assign(disp._width,disp._height); > } ># 6160 "./CImg.h" > static CImgDisplay& empty() { > static CImgDisplay _empty; > return _empty.assign(); > } > > > static unsigned int _fitscreen(const unsigned int dx, const unsigned int dy, const unsigned int dz, > const int dmin, const int dmax,const bool return_y) { > const unsigned int _nw = dx + (dz>1?dz:0), _nh = dy + (dz>1?dz:0); > unsigned int nw = _nw?_nw:1, nh = _nh?_nh:1; > const unsigned int > sw = CImgDisplay::screen_width(), sh = CImgDisplay::screen_height(), > mw = dmin<0?(unsigned int)(sw*-dmin/100):(unsigned int)dmin, > mh = dmin<0?(unsigned int)(sh*-dmin/100):(unsigned int)dmin, > Mw = dmax<0?(unsigned int)(sw*-dmax/100):(unsigned int)dmax, > Mh = dmax<0?(unsigned int)(sh*-dmax/100):(unsigned int)dmax; > if (nw<mw) { nh = nh*mw/nw; nh+=(nh==0?1:0); nw = mw; } > if (nh<mh) { nw = nw*mh/nh; nw+=(nw==0?1:0); nh = mh; } > if (nw>Mw) { nh = nh*Mw/nw; nh+=(nh==0?1:0); nw = Mw; } > if (nh>Mh) { nw = nw*Mh/nh; nw+=(nw==0?1:0); nh = Mh; } > if (nw<mw) nw = mw; > if (nh<mh) nh = mh; > return return_y?nh:nw; > } ># 6196 "./CImg.h" > template<typename t> > CImgDisplay& operator=(const CImg<t>& img) { > return display(img); > } > > > > > > template<typename t> > CImgDisplay& operator=(const CImgList<t>& list) { > return display(list); > } > > > > > > CImgDisplay& operator=(const CImgDisplay& disp) { > return assign(disp); > } > > > > > > operator bool() const { > return !is_empty(); > } ># 6236 "./CImg.h" > bool is_empty() const { > return !(_width && _height); > } > > > > > > > > bool is_closed() const { > return _is_closed; > } > > > > > bool is_resized() const { > return _is_resized; > } > > > > > bool is_moved() const { > return _is_moved; > } > > > > > bool is_event() const { > return _is_event; > } > > > > > bool is_fullscreen() const { > return _is_fullscreen; > } > > > > > > bool is_key() const { > return _is_keyESC || _is_keyF1 || _is_keyF2 || _is_keyF3 || > _is_keyF4 || _is_keyF5 || _is_keyF6 || _is_keyF7 || > _is_keyF8 || _is_keyF9 || _is_keyF10 || _is_keyF11 || > _is_keyF12 || _is_keyPAUSE || _is_key1 || _is_key2 || > _is_key3 || _is_key4 || _is_key5 || _is_key6 || > _is_key7 || _is_key8 || _is_key9 || _is_key0 || > _is_keyBACKSPACE || _is_keyINSERT || _is_keyHOME || > _is_keyPAGEUP || _is_keyTAB || _is_keyQ || _is_keyW || > _is_keyE || _is_keyR || _is_keyT || _is_keyY || > _is_keyU || _is_keyI || _is_keyO || _is_keyP || > _is_keyDELETE || _is_keyEND || _is_keyPAGEDOWN || > _is_keyCAPSLOCK || _is_keyA || _is_keyS || _is_keyD || > _is_keyF || _is_keyG || _is_keyH || _is_keyJ || > _is_keyK || _is_keyL || _is_keyENTER || > _is_keySHIFTLEFT || _is_keyZ || _is_keyX || _is_keyC || > _is_keyV || _is_keyB || _is_keyN || _is_keyM || > _is_keySHIFTRIGHT || _is_keyARROWUP || _is_keyCTRLLEFT || > _is_keyAPPLEFT || _is_keyALT || _is_keySPACE || _is_keyALTGR || > _is_keyAPPRIGHT || _is_keyMENU || _is_keyCTRLRIGHT || > _is_keyARROWLEFT || _is_keyARROWDOWN || _is_keyARROWRIGHT || > _is_keyPAD0 || _is_keyPAD1 || _is_keyPAD2 || > _is_keyPAD3 || _is_keyPAD4 || _is_keyPAD5 || > _is_keyPAD6 || _is_keyPAD7 || _is_keyPAD8 || > _is_keyPAD9 || _is_keyPADADD || _is_keyPADSUB || > _is_keyPADMUL || _is_keyPADDIV; > } ># 6324 "./CImg.h" > bool is_key(const unsigned int keycode) const { > > if (keycode==cimg::keyESC) return _is_keyESC;; if (keycode==cimg::keyF1) return _is_keyF1;; if (keycode==cimg::keyF2) return _is_keyF2;; if (keycode==cimg::keyF3) return _is_keyF3;; > if (keycode==cimg::keyF4) return _is_keyF4;; if (keycode==cimg::keyF5) return _is_keyF5;; if (keycode==cimg::keyF6) return _is_keyF6;; if (keycode==cimg::keyF7) return _is_keyF7;; > if (keycode==cimg::keyF8) return _is_keyF8;; if (keycode==cimg::keyF9) return _is_keyF9;; if (keycode==cimg::keyF10) return _is_keyF10;; if (keycode==cimg::keyF11) return _is_keyF11;; > if (keycode==cimg::keyF12) return _is_keyF12;; if (keycode==cimg::keyPAUSE) return _is_keyPAUSE;; if (keycode==cimg::key1) return _is_key1;; if (keycode==cimg::key2) return _is_key2;; > if (keycode==cimg::key3) return _is_key3;; if (keycode==cimg::key4) return _is_key4;; if (keycode==cimg::key5) return _is_key5;; if (keycode==cimg::key6) return _is_key6;; > if (keycode==cimg::key7) return _is_key7;; if (keycode==cimg::key8) return _is_key8;; if (keycode==cimg::key9) return _is_key9;; if (keycode==cimg::key0) return _is_key0;; > if (keycode==cimg::keyBACKSPACE) return _is_keyBACKSPACE;; if (keycode==cimg::keyINSERT) return _is_keyINSERT;; if (keycode==cimg::keyHOME) return _is_keyHOME;; > if (keycode==cimg::keyPAGEUP) return _is_keyPAGEUP;; if (keycode==cimg::keyTAB) return _is_keyTAB;; if (keycode==cimg::keyQ) return _is_keyQ;; if (keycode==cimg::keyW) return _is_keyW;; > if (keycode==cimg::keyE) return _is_keyE;; if (keycode==cimg::keyR) return _is_keyR;; if (keycode==cimg::keyT) return _is_keyT;; if (keycode==cimg::keyY) return _is_keyY;; > if (keycode==cimg::keyU) return _is_keyU;; if (keycode==cimg::keyI) return _is_keyI;; if (keycode==cimg::keyO) return _is_keyO;; if (keycode==cimg::keyP) return _is_keyP;; > if (keycode==cimg::keyDELETE) return _is_keyDELETE;; if (keycode==cimg::keyEND) return _is_keyEND;; if (keycode==cimg::keyPAGEDOWN) return _is_keyPAGEDOWN;; > if (keycode==cimg::keyCAPSLOCK) return _is_keyCAPSLOCK;; if (keycode==cimg::keyA) return _is_keyA;; if (keycode==cimg::keyS) return _is_keyS;; if (keycode==cimg::keyD) return _is_keyD;; > if (keycode==cimg::keyF) return _is_keyF;; if (keycode==cimg::keyG) return _is_keyG;; if (keycode==cimg::keyH) return _is_keyH;; if (keycode==cimg::keyJ) return _is_keyJ;; > if (keycode==cimg::keyK) return _is_keyK;; if (keycode==cimg::keyL) return _is_keyL;; if (keycode==cimg::keyENTER) return _is_keyENTER;; > if (keycode==cimg::keySHIFTLEFT) return _is_keySHIFTLEFT;; if (keycode==cimg::keyZ) return _is_keyZ;; if (keycode==cimg::keyX) return _is_keyX;; if (keycode==cimg::keyC) return _is_keyC;; > if (keycode==cimg::keyV) return _is_keyV;; if (keycode==cimg::keyB) return _is_keyB;; if (keycode==cimg::keyN) return _is_keyN;; if (keycode==cimg::keyM) return _is_keyM;; > if (keycode==cimg::keySHIFTRIGHT) return _is_keySHIFTRIGHT;; if (keycode==cimg::keyARROWUP) return _is_keyARROWUP;; if (keycode==cimg::keyCTRLLEFT) return _is_keyCTRLLEFT;; > if (keycode==cimg::keyAPPLEFT) return _is_keyAPPLEFT;; if (keycode==cimg::keyALT) return _is_keyALT;; if (keycode==cimg::keySPACE) return _is_keySPACE;; if (keycode==cimg::keyALTGR) return _is_keyALTGR;; > if (keycode==cimg::keyAPPRIGHT) return _is_keyAPPRIGHT;; if (keycode==cimg::keyMENU) return _is_keyMENU;; if (keycode==cimg::keyCTRLRIGHT) return _is_keyCTRLRIGHT;; > if (keycode==cimg::keyARROWLEFT) return _is_keyARROWLEFT;; if (keycode==cimg::keyARROWDOWN) return _is_keyARROWDOWN;; if (keycode==cimg::keyARROWRIGHT) return _is_keyARROWRIGHT;; > if (keycode==cimg::keyPAD0) return _is_keyPAD0;; if (keycode==cimg::keyPAD1) return _is_keyPAD1;; if (keycode==cimg::keyPAD2) return _is_keyPAD2;; > if (keycode==cimg::keyPAD3) return _is_keyPAD3;; if (keycode==cimg::keyPAD4) return _is_keyPAD4;; if (keycode==cimg::keyPAD5) return _is_keyPAD5;; > if (keycode==cimg::keyPAD6) return _is_keyPAD6;; if (keycode==cimg::keyPAD7) return _is_keyPAD7;; if (keycode==cimg::keyPAD8) return _is_keyPAD8;; > if (keycode==cimg::keyPAD9) return _is_keyPAD9;; if (keycode==cimg::keyPADADD) return _is_keyPADADD;; if (keycode==cimg::keyPADSUB) return _is_keyPADSUB;; > if (keycode==cimg::keyPADMUL) return _is_keyPADMUL;; if (keycode==cimg::keyPADDIV) return _is_keyPADDIV;; > return false; > } ># 6368 "./CImg.h" > bool is_key(const char *const keycode) const { > > if (!cimg::strcasecmp(keycode,"ESC")) return _is_keyESC;; if (!cimg::strcasecmp(keycode,"F1")) return _is_keyF1;; if (!cimg::strcasecmp(keycode,"F2")) return _is_keyF2;; if (!cimg::strcasecmp(keycode,"F3")) return _is_keyF3;; > if (!cimg::strcasecmp(keycode,"F4")) return _is_keyF4;; if (!cimg::strcasecmp(keycode,"F5")) return _is_keyF5;; if (!cimg::strcasecmp(keycode,"F6")) return _is_keyF6;; if (!cimg::strcasecmp(keycode,"F7")) return _is_keyF7;; > if (!cimg::strcasecmp(keycode,"F8")) return _is_keyF8;; if (!cimg::strcasecmp(keycode,"F9")) return _is_keyF9;; if (!cimg::strcasecmp(keycode,"F10")) return _is_keyF10;; if (!cimg::strcasecmp(keycode,"F11")) return _is_keyF11;; > if (!cimg::strcasecmp(keycode,"F12")) return _is_keyF12;; if (!cimg::strcasecmp(keycode,"PAUSE")) return _is_keyPAUSE;; if (!cimg::strcasecmp(keycode,"1")) return _is_key1;; if (!cimg::strcasecmp(keycode,"2")) return _is_key2;; > if (!cimg::strcasecmp(keycode,"3")) return _is_key3;; if (!cimg::strcasecmp(keycode,"4")) return _is_key4;; if (!cimg::strcasecmp(keycode,"5")) return _is_key5;; if (!cimg::strcasecmp(keycode,"6")) return _is_key6;; > if (!cimg::strcasecmp(keycode,"7")) return _is_key7;; if (!cimg::strcasecmp(keycode,"8")) return _is_key8;; if (!cimg::strcasecmp(keycode,"9")) return _is_key9;; if (!cimg::strcasecmp(keycode,"0")) return _is_key0;; > if (!cimg::strcasecmp(keycode,"BACKSPACE")) return _is_keyBACKSPACE;; if (!cimg::strcasecmp(keycode,"INSERT")) return _is_keyINSERT;; if (!cimg::strcasecmp(keycode,"HOME")) return _is_keyHOME;; > if (!cimg::strcasecmp(keycode,"PAGEUP")) return _is_keyPAGEUP;; if (!cimg::strcasecmp(keycode,"TAB")) return _is_keyTAB;; if (!cimg::strcasecmp(keycode,"Q")) return _is_keyQ;; if (!cimg::strcasecmp(keycode,"W")) return _is_keyW;; > if (!cimg::strcasecmp(keycode,"E")) return _is_keyE;; if (!cimg::strcasecmp(keycode,"R")) return _is_keyR;; if (!cimg::strcasecmp(keycode,"T")) return _is_keyT;; if (!cimg::strcasecmp(keycode,"Y")) return _is_keyY;; > if (!cimg::strcasecmp(keycode,"U")) return _is_keyU;; if (!cimg::strcasecmp(keycode,"I")) return _is_keyI;; if (!cimg::strcasecmp(keycode,"O")) return _is_keyO;; if (!cimg::strcasecmp(keycode,"P")) return _is_keyP;; > if (!cimg::strcasecmp(keycode,"DELETE")) return _is_keyDELETE;; if (!cimg::strcasecmp(keycode,"END")) return _is_keyEND;; if (!cimg::strcasecmp(keycode,"PAGEDOWN")) return _is_keyPAGEDOWN;; > if (!cimg::strcasecmp(keycode,"CAPSLOCK")) return _is_keyCAPSLOCK;; if (!cimg::strcasecmp(keycode,"A")) return _is_keyA;; if (!cimg::strcasecmp(keycode,"S")) return _is_keyS;; if (!cimg::strcasecmp(keycode,"D")) return _is_keyD;; > if (!cimg::strcasecmp(keycode,"F")) return _is_keyF;; if (!cimg::strcasecmp(keycode,"G")) return _is_keyG;; if (!cimg::strcasecmp(keycode,"H")) return _is_keyH;; if (!cimg::strcasecmp(keycode,"J")) return _is_keyJ;; > if (!cimg::strcasecmp(keycode,"K")) return _is_keyK;; if (!cimg::strcasecmp(keycode,"L")) return _is_keyL;; if (!cimg::strcasecmp(keycode,"ENTER")) return _is_keyENTER;; > if (!cimg::strcasecmp(keycode,"SHIFTLEFT")) return _is_keySHIFTLEFT;; if (!cimg::strcasecmp(keycode,"Z")) return _is_keyZ;; if (!cimg::strcasecmp(keycode,"X")) return _is_keyX;; if (!cimg::strcasecmp(keycode,"C")) return _is_keyC;; > if (!cimg::strcasecmp(keycode,"V")) return _is_keyV;; if (!cimg::strcasecmp(keycode,"B")) return _is_keyB;; if (!cimg::strcasecmp(keycode,"N")) return _is_keyN;; if (!cimg::strcasecmp(keycode,"M")) return _is_keyM;; > if (!cimg::strcasecmp(keycode,"SHIFTRIGHT")) return _is_keySHIFTRIGHT;; if (!cimg::strcasecmp(keycode,"ARROWUP")) return _is_keyARROWUP;; if (!cimg::strcasecmp(keycode,"CTRLLEFT")) return _is_keyCTRLLEFT;; > if (!cimg::strcasecmp(keycode,"APPLEFT")) return _is_keyAPPLEFT;; if (!cimg::strcasecmp(keycode,"ALT")) return _is_keyALT;; if (!cimg::strcasecmp(keycode,"SPACE")) return _is_keySPACE;; if (!cimg::strcasecmp(keycode,"ALTGR")) return _is_keyALTGR;; > if (!cimg::strcasecmp(keycode,"APPRIGHT")) return _is_keyAPPRIGHT;; if (!cimg::strcasecmp(keycode,"MENU")) return _is_keyMENU;; if (!cimg::strcasecmp(keycode,"CTRLRIGHT")) return _is_keyCTRLRIGHT;; > if (!cimg::strcasecmp(keycode,"ARROWLEFT")) return _is_keyARROWLEFT;; if (!cimg::strcasecmp(keycode,"ARROWDOWN")) return _is_keyARROWDOWN;; if (!cimg::strcasecmp(keycode,"ARROWRIGHT")) return _is_keyARROWRIGHT;; > if (!cimg::strcasecmp(keycode,"PAD0")) return _is_keyPAD0;; if (!cimg::strcasecmp(keycode,"PAD1")) return _is_keyPAD1;; if (!cimg::strcasecmp(keycode,"PAD2")) return _is_keyPAD2;; > if (!cimg::strcasecmp(keycode,"PAD3")) return _is_keyPAD3;; if (!cimg::strcasecmp(keycode,"PAD4")) return _is_keyPAD4;; if (!cimg::strcasecmp(keycode,"PAD5")) return _is_keyPAD5;; > if (!cimg::strcasecmp(keycode,"PAD6")) return _is_keyPAD6;; if (!cimg::strcasecmp(keycode,"PAD7")) return _is_keyPAD7;; if (!cimg::strcasecmp(keycode,"PAD8")) return _is_keyPAD8;; > if (!cimg::strcasecmp(keycode,"PAD9")) return _is_keyPAD9;; if (!cimg::strcasecmp(keycode,"PADADD")) return _is_keyPADADD;; if (!cimg::strcasecmp(keycode,"PADSUB")) return _is_keyPADSUB;; > if (!cimg::strcasecmp(keycode,"PADMUL")) return _is_keyPADMUL;; if (!cimg::strcasecmp(keycode,"PADDIV")) return _is_keyPADDIV;; > return false; > } ># 6415 "./CImg.h" > bool is_key_sequence(const unsigned int *const keycodes_sequence, const unsigned int length, const bool remove_sequence=false) { > if (keycodes_sequence && length) { > const unsigned int > *const ps_end = keycodes_sequence + length - 1, > *const pk_end = (unsigned int*)_keys + 1 + sizeof(_keys)/sizeof(unsigned int) - length, > k = *ps_end; > for (unsigned int *pk = (unsigned int*)_keys; pk<pk_end; ) { > if (*(pk++)==k) { > bool res = true; > const unsigned int *ps = ps_end, *pk2 = pk; > for (unsigned int i = 1; i<length; ++i) res = (*(--ps)==*(pk2++)); > if (res) { > if (remove_sequence) std::memset((void*)(pk-1),0,sizeof(unsigned int)*length); > return true; > } > } > } > } > return false; > } ># 6445 "./CImg.h" > bool is_keyESC() const { return _is_keyESC; }; bool is_keyF1() const { return _is_keyF1; }; bool is_keyF2() const { return _is_keyF2; }; bool is_keyF3() const { return _is_keyF3; }; > bool is_keyF4() const { return _is_keyF4; }; bool is_keyF5() const { return _is_keyF5; }; bool is_keyF6() const { return _is_keyF6; }; bool is_keyF7() const { return _is_keyF7; }; > bool is_keyF8() const { return _is_keyF8; }; bool is_keyF9() const { return _is_keyF9; }; bool is_keyF10() const { return _is_keyF10; }; bool is_keyF11() const { return _is_keyF11; }; > bool is_keyF12() const { return _is_keyF12; }; bool is_keyPAUSE() const { return _is_keyPAUSE; }; bool is_key1() const { return _is_key1; }; bool is_key2() const { return _is_key2; }; > bool is_key3() const { return _is_key3; }; bool is_key4() const { return _is_key4; }; bool is_key5() const { return _is_key5; }; bool is_key6() const { return _is_key6; }; > bool is_key7() const { return _is_key7; }; bool is_key8() const { return _is_key8; }; bool is_key9() const { return _is_key9; }; bool is_key0() const { return _is_key0; }; > bool is_keyBACKSPACE() const { return _is_keyBACKSPACE; }; bool is_keyINSERT() const { return _is_keyINSERT; }; bool is_keyHOME() const { return _is_keyHOME; }; > bool is_keyPAGEUP() const { return _is_keyPAGEUP; }; bool is_keyTAB() const { return _is_keyTAB; }; bool is_keyQ() const { return _is_keyQ; }; bool is_keyW() const { return _is_keyW; }; > bool is_keyE() const { return _is_keyE; }; bool is_keyR() const { return _is_keyR; }; bool is_keyT() const { return _is_keyT; }; bool is_keyY() const { return _is_keyY; }; > bool is_keyU() const { return _is_keyU; }; bool is_keyI() const { return _is_keyI; }; bool is_keyO() const { return _is_keyO; }; bool is_keyP() const { return _is_keyP; }; > bool is_keyDELETE() const { return _is_keyDELETE; }; bool is_keyEND() const { return _is_keyEND; }; bool is_keyPAGEDOWN() const { return _is_keyPAGEDOWN; }; > bool is_keyCAPSLOCK() const { return _is_keyCAPSLOCK; }; bool is_keyA() const { return _is_keyA; }; bool is_keyS() const { return _is_keyS; }; bool is_keyD() const { return _is_keyD; }; > bool is_keyF() const { return _is_keyF; }; bool is_keyG() const { return _is_keyG; }; bool is_keyH() const { return _is_keyH; }; bool is_keyJ() const { return _is_keyJ; }; > bool is_keyK() const { return _is_keyK; }; bool is_keyL() const { return _is_keyL; }; bool is_keyENTER() const { return _is_keyENTER; }; > bool is_keySHIFTLEFT() const { return _is_keySHIFTLEFT; }; bool is_keyZ() const { return _is_keyZ; }; bool is_keyX() const { return _is_keyX; }; bool is_keyC() const { return _is_keyC; }; > bool is_keyV() const { return _is_keyV; }; bool is_keyB() const { return _is_keyB; }; bool is_keyN() const { return _is_keyN; }; bool is_keyM() const { return _is_keyM; }; > bool is_keySHIFTRIGHT() const { return _is_keySHIFTRIGHT; }; bool is_keyARROWUP() const { return _is_keyARROWUP; }; bool is_keyCTRLLEFT() const { return _is_keyCTRLLEFT; }; > bool is_keyAPPLEFT() const { return _is_keyAPPLEFT; }; bool is_keyALT() const { return _is_keyALT; }; bool is_keySPACE() const { return _is_keySPACE; }; bool is_keyALTGR() const { return _is_keyALTGR; }; > bool is_keyAPPRIGHT() const { return _is_keyAPPRIGHT; }; bool is_keyMENU() const { return _is_keyMENU; }; bool is_keyCTRLRIGHT() const { return _is_keyCTRLRIGHT; }; > bool is_keyARROWLEFT() const { return _is_keyARROWLEFT; }; bool is_keyARROWDOWN() const { return _is_keyARROWDOWN; }; bool is_keyARROWRIGHT() const { return _is_keyARROWRIGHT; }; > bool is_keyPAD0() const { return _is_keyPAD0; }; bool is_keyPAD1() const { return _is_keyPAD1; }; bool is_keyPAD2() const { return _is_keyPAD2; }; > bool is_keyPAD3() const { return _is_keyPAD3; }; bool is_keyPAD4() const { return _is_keyPAD4; }; bool is_keyPAD5() const { return _is_keyPAD5; }; > bool is_keyPAD6() const { return _is_keyPAD6; }; bool is_keyPAD7() const { return _is_keyPAD7; }; bool is_keyPAD8() const { return _is_keyPAD8; }; > bool is_keyPAD9() const { return _is_keyPAD9; }; bool is_keyPADADD() const { return _is_keyPADADD; }; bool is_keyPADSUB() const { return _is_keyPADSUB; }; > bool is_keyPADMUL() const { return _is_keyPADMUL; }; bool is_keyPADDIV() const { return _is_keyPADDIV; }; ># 6483 "./CImg.h" > static int screen_width() { > _no_display_exception(); > return 0; > } > > > > > static int screen_height() { > _no_display_exception(); > return 0; > } ># 6503 "./CImg.h" > int width() const { > return (int)_width; > } > > > > > > > int height() const { > return (int)_height; > } ># 6536 "./CImg.h" > unsigned int normalization() const { > return _normalization; > } > > > > > > const char *title() const { > return _title; > } > > > > > > > int window_width() const { > return (int)_window_width; > } > > > > > > > int window_height() const { > return (int)_window_height; > } > > > > > > int window_x() const { > return _window_x; > } > > > > > > int window_y() const { > return _window_y; > } > > > > > > > > int mouse_x() const { > return _mouse_x; > } > > > > > > > > int mouse_y() const { > return _mouse_y; > } ># 6627 "./CImg.h" > unsigned int button() const { > return _button; > } ># 6654 "./CImg.h" > int wheel() const { > return _wheel; > } ># 6671 "./CImg.h" > unsigned int key(const unsigned int pos=0) const { > return pos<(sizeof(_keys)/sizeof(unsigned int))?_keys[pos]:0; > } ># 6688 "./CImg.h" > unsigned int released_key(const unsigned int pos=0) const { > return pos<(sizeof(_released_keys)/sizeof(unsigned int))?_released_keys[pos]:0; > } ># 6701 "./CImg.h" > static unsigned int keycode(const char *const keycode) { > > if (!cimg::strcasecmp(keycode,"ESC")) return cimg::keyESC;; if (!cimg::strcasecmp(keycode,"F1")) return cimg::keyF1;; if (!cimg::strcasecmp(keycode,"F2")) return cimg::keyF2;; if (!cimg::strcasecmp(keycode,"F3")) return cimg::keyF3;; > if (!cimg::strcasecmp(keycode,"F4")) return cimg::keyF4;; if (!cimg::strcasecmp(keycode,"F5")) return cimg::keyF5;; if (!cimg::strcasecmp(keycode,"F6")) return cimg::keyF6;; if (!cimg::strcasecmp(keycode,"F7")) return cimg::keyF7;; > if (!cimg::strcasecmp(keycode,"F8")) return cimg::keyF8;; if (!cimg::strcasecmp(keycode,"F9")) return cimg::keyF9;; if (!cimg::strcasecmp(keycode,"F10")) return cimg::keyF10;; if (!cimg::strcasecmp(keycode,"F11")) return cimg::keyF11;; > if (!cimg::strcasecmp(keycode,"F12")) return cimg::keyF12;; if (!cimg::strcasecmp(keycode,"PAUSE")) return cimg::keyPAUSE;; if (!cimg::strcasecmp(keycode,"1")) return cimg::key1;; if (!cimg::strcasecmp(keycode,"2")) return cimg::key2;; > if (!cimg::strcasecmp(keycode,"3")) return cimg::key3;; if (!cimg::strcasecmp(keycode,"4")) return cimg::key4;; if (!cimg::strcasecmp(keycode,"5")) return cimg::key5;; if (!cimg::strcasecmp(keycode,"6")) return cimg::key6;; > if (!cimg::strcasecmp(keycode,"7")) return cimg::key7;; if (!cimg::strcasecmp(keycode,"8")) return cimg::key8;; if (!cimg::strcasecmp(keycode,"9")) return cimg::key9;; if (!cimg::strcasecmp(keycode,"0")) return cimg::key0;; > if (!cimg::strcasecmp(keycode,"BACKSPACE")) return cimg::keyBACKSPACE;; if (!cimg::strcasecmp(keycode,"INSERT")) return cimg::keyINSERT;; if (!cimg::strcasecmp(keycode,"HOME")) return cimg::keyHOME;; > if (!cimg::strcasecmp(keycode,"PAGEUP")) return cimg::keyPAGEUP;; if (!cimg::strcasecmp(keycode,"TAB")) return cimg::keyTAB;; if (!cimg::strcasecmp(keycode,"Q")) return cimg::keyQ;; if (!cimg::strcasecmp(keycode,"W")) return cimg::keyW;; > if (!cimg::strcasecmp(keycode,"E")) return cimg::keyE;; if (!cimg::strcasecmp(keycode,"R")) return cimg::keyR;; if (!cimg::strcasecmp(keycode,"T")) return cimg::keyT;; if (!cimg::strcasecmp(keycode,"Y")) return cimg::keyY;; > if (!cimg::strcasecmp(keycode,"U")) return cimg::keyU;; if (!cimg::strcasecmp(keycode,"I")) return cimg::keyI;; if (!cimg::strcasecmp(keycode,"O")) return cimg::keyO;; if (!cimg::strcasecmp(keycode,"P")) return cimg::keyP;; > if (!cimg::strcasecmp(keycode,"DELETE")) return cimg::keyDELETE;; if (!cimg::strcasecmp(keycode,"END")) return cimg::keyEND;; if (!cimg::strcasecmp(keycode,"PAGEDOWN")) return cimg::keyPAGEDOWN;; > if (!cimg::strcasecmp(keycode,"CAPSLOCK")) return cimg::keyCAPSLOCK;; if (!cimg::strcasecmp(keycode,"A")) return cimg::keyA;; if (!cimg::strcasecmp(keycode,"S")) return cimg::keyS;; if (!cimg::strcasecmp(keycode,"D")) return cimg::keyD;; > if (!cimg::strcasecmp(keycode,"F")) return cimg::keyF;; if (!cimg::strcasecmp(keycode,"G")) return cimg::keyG;; if (!cimg::strcasecmp(keycode,"H")) return cimg::keyH;; if (!cimg::strcasecmp(keycode,"J")) return cimg::keyJ;; > if (!cimg::strcasecmp(keycode,"K")) return cimg::keyK;; if (!cimg::strcasecmp(keycode,"L")) return cimg::keyL;; if (!cimg::strcasecmp(keycode,"ENTER")) return cimg::keyENTER;; > if (!cimg::strcasecmp(keycode,"SHIFTLEFT")) return cimg::keySHIFTLEFT;; if (!cimg::strcasecmp(keycode,"Z")) return cimg::keyZ;; if (!cimg::strcasecmp(keycode,"X")) return cimg::keyX;; if (!cimg::strcasecmp(keycode,"C")) return cimg::keyC;; > if (!cimg::strcasecmp(keycode,"V")) return cimg::keyV;; if (!cimg::strcasecmp(keycode,"B")) return cimg::keyB;; if (!cimg::strcasecmp(keycode,"N")) return cimg::keyN;; if (!cimg::strcasecmp(keycode,"M")) return cimg::keyM;; > if (!cimg::strcasecmp(keycode,"SHIFTRIGHT")) return cimg::keySHIFTRIGHT;; if (!cimg::strcasecmp(keycode,"ARROWUP")) return cimg::keyARROWUP;; if (!cimg::strcasecmp(keycode,"CTRLLEFT")) return cimg::keyCTRLLEFT;; > if (!cimg::strcasecmp(keycode,"APPLEFT")) return cimg::keyAPPLEFT;; if (!cimg::strcasecmp(keycode,"ALT")) return cimg::keyALT;; if (!cimg::strcasecmp(keycode,"SPACE")) return cimg::keySPACE;; if (!cimg::strcasecmp(keycode,"ALTGR")) return cimg::keyALTGR;; > if (!cimg::strcasecmp(keycode,"APPRIGHT")) return cimg::keyAPPRIGHT;; if (!cimg::strcasecmp(keycode,"MENU")) return cimg::keyMENU;; if (!cimg::strcasecmp(keycode,"CTRLRIGHT")) return cimg::keyCTRLRIGHT;; > if (!cimg::strcasecmp(keycode,"ARROWLEFT")) return cimg::keyARROWLEFT;; if (!cimg::strcasecmp(keycode,"ARROWDOWN")) return cimg::keyARROWDOWN;; if (!cimg::strcasecmp(keycode,"ARROWRIGHT")) return cimg::keyARROWRIGHT;; > if (!cimg::strcasecmp(keycode,"PAD0")) return cimg::keyPAD0;; if (!cimg::strcasecmp(keycode,"PAD1")) return cimg::keyPAD1;; if (!cimg::strcasecmp(keycode,"PAD2")) return cimg::keyPAD2;; > if (!cimg::strcasecmp(keycode,"PAD3")) return cimg::keyPAD3;; if (!cimg::strcasecmp(keycode,"PAD4")) return cimg::keyPAD4;; if (!cimg::strcasecmp(keycode,"PAD5")) return cimg::keyPAD5;; > if (!cimg::strcasecmp(keycode,"PAD6")) return cimg::keyPAD6;; if (!cimg::strcasecmp(keycode,"PAD7")) return cimg::keyPAD7;; if (!cimg::strcasecmp(keycode,"PAD8")) return cimg::keyPAD8;; > if (!cimg::strcasecmp(keycode,"PAD9")) return cimg::keyPAD9;; if (!cimg::strcasecmp(keycode,"PADADD")) return cimg::keyPADADD;; if (!cimg::strcasecmp(keycode,"PADSUB")) return cimg::keyPADSUB;; > if (!cimg::strcasecmp(keycode,"PADMUL")) return cimg::keyPADMUL;; if (!cimg::strcasecmp(keycode,"PADDIV")) return cimg::keyPADDIV;; > return 0; > } > > > > > > > float frames_per_second() { > if (!_fps_timer) _fps_timer = cimg::time(); > const float delta = (cimg::time()-_fps_timer)/1000.0f; > ++_fps_frames; > if (delta>=1) { > _fps_fps = _fps_frames/delta; > _fps_frames = 0; > _fps_timer = cimg::time(); > } > return _fps_fps; > } ># 6762 "./CImg.h" > template<typename T> > CImgDisplay& display(const CImg<T>& img) { > return assign(img); > } ># 6777 "./CImg.h" > template<typename T> > CImgDisplay& display(const CImgList<T>& list, const char axis='x', const float align=0) { > CImgList<typename CImg<T>::ucharT> visu(list._width); > for (int l = 0; l<(int)(list)._width; ++l) { > const CImg<T>& img = list._data[l]; > img.__get_select(*this,_normalization,(img._width-1)/2,(img._height-1)/2,(img._depth-1)/2).move_to(visu[l]); > } > visu.get_append(axis,align).display(*this); > return *this; > } ># 6796 "./CImg.h" > CImgDisplay& show() { > return assign(); > } ># 6807 "./CImg.h" > CImgDisplay& close() { > return assign(); > } > > > > > > > > CImgDisplay& move(const int pos_x, const int pos_y) { > return assign(pos_x,pos_y); > } ># 6830 "./CImg.h" > CImgDisplay& resize(const bool force_redraw=true) { > resize(_window_width,_window_height,force_redraw); > return *this; > } ># 6844 "./CImg.h" > CImgDisplay& resize(const int width, const int height, const bool force_redraw=true) { > return assign(width,height,0,3,force_redraw); > } ># 6858 "./CImg.h" > template<typename T> > CImgDisplay& resize(const CImg<T>& img, const bool force_redraw=true) { > return resize(img._width,img._height,force_redraw); > } ># 6871 "./CImg.h" > CImgDisplay& resize(const CImgDisplay& disp, const bool force_redraw=true) { > return resize(disp._width,disp._height,force_redraw); > } > > > template<typename t, typename T> > static void _render_resize(const T *ptrs, const unsigned int ws, const unsigned int hs, > t *ptrd, const unsigned int wd, const unsigned int hd) { > unsigned int *const offx = new unsigned int[wd], *const offy = new unsigned int[hd+1], *poffx, *poffy; > float s, curr, old; > s = (float)ws/wd; > poffx = offx; curr = 0; for (unsigned int x = 0; x<wd; ++x) { old = curr; curr+=s; *(poffx++) = (unsigned int)curr - (unsigned int)old; } > s = (float)hs/hd; > poffy = offy; curr = 0; for (unsigned int y = 0; y<hd; ++y) { old = curr; curr+=s; *(poffy++) = ws*((unsigned int)curr - (unsigned int)old); } > *poffy = 0; > poffy = offy; > for (unsigned int y = 0; y<hd; ) { > const T *ptr = ptrs; > poffx = offx; > for (unsigned int x = 0; x<wd; ++x) { *(ptrd++) = *ptr; ptr+=*(poffx++); } > ++y; > unsigned int dy = *(poffy++); > for ( ; !dy && y<hd; std::memcpy(ptrd,ptrd - wd,sizeof(t)*wd), ++y, ptrd+=wd, dy = *(poffy++)) {} > ptrs+=dy; > } > delete[] offx; delete[] offy; > } > > > > > > CImgDisplay& set_normalization(const unsigned int normalization) { > _normalization = normalization; > _min = _max = 0; > return *this; > } ># 6924 "./CImg.h" > CImgDisplay& set_title(const char *const format, ...) { > return assign(0,0,format); > } ># 6941 "./CImg.h" > CImgDisplay& set_fullscreen(const bool is_fullscreen, const bool force_redraw=true) { > if (is_empty() || _is_fullscreen==is_fullscreen) return *this; > return toggle_fullscreen(force_redraw); > } ># 6953 "./CImg.h" > CImgDisplay& toggle_fullscreen(const bool force_redraw=true) { > return assign(_width,_height,0,3,force_redraw); > } > > > > > > CImgDisplay& show_mouse() { > return assign(); > } > > > > > > CImgDisplay& hide_mouse() { > return assign(); > } > > > > > > CImgDisplay& set_mouse(const int pos_x, const int pos_y) { > return assign(pos_x,pos_y); > } > > > > > > > > CImgDisplay& set_button() { > _button = 0; > _is_event = true; > > > > > > return *this; > } > > > > > > > CImgDisplay& set_button(const unsigned int button, const bool is_pressed=true) { > const unsigned int buttoncode = button==1?1:button==2?2:button==3?4:0; > if (is_pressed) _button |= buttoncode; else _button &= ~buttoncode; > _is_event = buttoncode?true:false; > if (buttoncode) { > > > > > > } > return *this; > } > > > > > > CImgDisplay& set_wheel() { > _wheel = 0; > _is_event = true; > > > > > > return *this; > } > > > > > > > CImgDisplay& set_wheel(const int amplitude) { > _wheel+=amplitude; > _is_event = amplitude?true:false; > if (amplitude) { > > > > > > } > return *this; > } > > > > > > CImgDisplay& set_key() { > std::memset((void*)_keys,0,sizeof(_keys)); > std::memset((void*)_released_keys,0,sizeof(_released_keys)); > _is_keyESC = _is_keyF1 = _is_keyF2 = _is_keyF3 = _is_keyF4 = _is_keyF5 = _is_keyF6 = _is_keyF7 = _is_keyF8 = _is_keyF9 = > _is_keyF10 = _is_keyF11 = _is_keyF12 = _is_keyPAUSE = _is_key1 = _is_key2 = _is_key3 = _is_key4 = _is_key5 = _is_key6 = > _is_key7 = _is_key8 = _is_key9 = _is_key0 = _is_keyBACKSPACE = _is_keyINSERT = _is_keyHOME = _is_keyPAGEUP = _is_keyTAB = > _is_keyQ = _is_keyW = _is_keyE = _is_keyR = _is_keyT = _is_keyY = _is_keyU = _is_keyI = _is_keyO = _is_keyP = _is_keyDELETE = > _is_keyEND = _is_keyPAGEDOWN = _is_keyCAPSLOCK = _is_keyA = _is_keyS = _is_keyD = _is_keyF = _is_keyG = _is_keyH = _is_keyJ = > _is_keyK = _is_keyL = _is_keyENTER = _is_keySHIFTLEFT = _is_keyZ = _is_keyX = _is_keyC = _is_keyV = _is_keyB = _is_keyN = > _is_keyM = _is_keySHIFTRIGHT = _is_keyARROWUP = _is_keyCTRLLEFT = _is_keyAPPLEFT = _is_keyALT = _is_keySPACE = _is_keyALTGR = _is_keyAPPRIGHT = > _is_keyMENU = _is_keyCTRLRIGHT = _is_keyARROWLEFT = _is_keyARROWDOWN = _is_keyARROWRIGHT = _is_keyPAD0 = _is_keyPAD1 = _is_keyPAD2 = > _is_keyPAD3 = _is_keyPAD4 = _is_keyPAD5 = _is_keyPAD6 = _is_keyPAD7 = _is_keyPAD8 = _is_keyPAD9 = _is_keyPADADD = _is_keyPADSUB = > _is_keyPADMUL = _is_keyPADDIV = false; > _is_event = true; > > > > > > return *this; > } ># 7083 "./CImg.h" > CImgDisplay& set_key(const unsigned int keycode, const bool is_pressed=true) { > > if (keycode==cimg::keyESC) _is_keyESC = is_pressed;; if (keycode==cimg::keyF1) _is_keyF1 = is_pressed;; if (keycode==cimg::keyF2) _is_keyF2 = is_pressed;; if (keycode==cimg::keyF3) _is_keyF3 = is_pressed;; > if (keycode==cimg::keyF4) _is_keyF4 = is_pressed;; if (keycode==cimg::keyF5) _is_keyF5 = is_pressed;; if (keycode==cimg::keyF6) _is_keyF6 = is_pressed;; if (keycode==cimg::keyF7) _is_keyF7 = is_pressed;; > if (keycode==cimg::keyF8) _is_keyF8 = is_pressed;; if (keycode==cimg::keyF9) _is_keyF9 = is_pressed;; if (keycode==cimg::keyF10) _is_keyF10 = is_pressed;; if (keycode==cimg::keyF11) _is_keyF11 = is_pressed;; > if (keycode==cimg::keyF12) _is_keyF12 = is_pressed;; if (keycode==cimg::keyPAUSE) _is_keyPAUSE = is_pressed;; if (keycode==cimg::key1) _is_key1 = is_pressed;; if (keycode==cimg::key2) _is_key2 = is_pressed;; > if (keycode==cimg::key3) _is_key3 = is_pressed;; if (keycode==cimg::key4) _is_key4 = is_pressed;; if (keycode==cimg::key5) _is_key5 = is_pressed;; if (keycode==cimg::key6) _is_key6 = is_pressed;; > if (keycode==cimg::key7) _is_key7 = is_pressed;; if (keycode==cimg::key8) _is_key8 = is_pressed;; if (keycode==cimg::key9) _is_key9 = is_pressed;; if (keycode==cimg::key0) _is_key0 = is_pressed;; > if (keycode==cimg::keyBACKSPACE) _is_keyBACKSPACE = is_pressed;; if (keycode==cimg::keyINSERT) _is_keyINSERT = is_pressed;; if (keycode==cimg::keyHOME) _is_keyHOME = is_pressed;; > if (keycode==cimg::keyPAGEUP) _is_keyPAGEUP = is_pressed;; if (keycode==cimg::keyTAB) _is_keyTAB = is_pressed;; if (keycode==cimg::keyQ) _is_keyQ = is_pressed;; if (keycode==cimg::keyW) _is_keyW = is_pressed;; > if (keycode==cimg::keyE) _is_keyE = is_pressed;; if (keycode==cimg::keyR) _is_keyR = is_pressed;; if (keycode==cimg::keyT) _is_keyT = is_pressed;; if (keycode==cimg::keyY) _is_keyY = is_pressed;; > if (keycode==cimg::keyU) _is_keyU = is_pressed;; if (keycode==cimg::keyI) _is_keyI = is_pressed;; if (keycode==cimg::keyO) _is_keyO = is_pressed;; if (keycode==cimg::keyP) _is_keyP = is_pressed;; > if (keycode==cimg::keyDELETE) _is_keyDELETE = is_pressed;; if (keycode==cimg::keyEND) _is_keyEND = is_pressed;; if (keycode==cimg::keyPAGEDOWN) _is_keyPAGEDOWN = is_pressed;; > if (keycode==cimg::keyCAPSLOCK) _is_keyCAPSLOCK = is_pressed;; if (keycode==cimg::keyA) _is_keyA = is_pressed;; if (keycode==cimg::keyS) _is_keyS = is_pressed;; if (keycode==cimg::keyD) _is_keyD = is_pressed;; > if (keycode==cimg::keyF) _is_keyF = is_pressed;; if (keycode==cimg::keyG) _is_keyG = is_pressed;; if (keycode==cimg::keyH) _is_keyH = is_pressed;; if (keycode==cimg::keyJ) _is_keyJ = is_pressed;; > if (keycode==cimg::keyK) _is_keyK = is_pressed;; if (keycode==cimg::keyL) _is_keyL = is_pressed;; if (keycode==cimg::keyENTER) _is_keyENTER = is_pressed;; > if (keycode==cimg::keySHIFTLEFT) _is_keySHIFTLEFT = is_pressed;; if (keycode==cimg::keyZ) _is_keyZ = is_pressed;; if (keycode==cimg::keyX) _is_keyX = is_pressed;; if (keycode==cimg::keyC) _is_keyC = is_pressed;; > if (keycode==cimg::keyV) _is_keyV = is_pressed;; if (keycode==cimg::keyB) _is_keyB = is_pressed;; if (keycode==cimg::keyN) _is_keyN = is_pressed;; if (keycode==cimg::keyM) _is_keyM = is_pressed;; > if (keycode==cimg::keySHIFTRIGHT) _is_keySHIFTRIGHT = is_pressed;; if (keycode==cimg::keyARROWUP) _is_keyARROWUP = is_pressed;; if (keycode==cimg::keyCTRLLEFT) _is_keyCTRLLEFT = is_pressed;; > if (keycode==cimg::keyAPPLEFT) _is_keyAPPLEFT = is_pressed;; if (keycode==cimg::keyALT) _is_keyALT = is_pressed;; if (keycode==cimg::keySPACE) _is_keySPACE = is_pressed;; if (keycode==cimg::keyALTGR) _is_keyALTGR = is_pressed;; > if (keycode==cimg::keyAPPRIGHT) _is_keyAPPRIGHT = is_pressed;; if (keycode==cimg::keyMENU) _is_keyMENU = is_pressed;; if (keycode==cimg::keyCTRLRIGHT) _is_keyCTRLRIGHT = is_pressed;; > if (keycode==cimg::keyARROWLEFT) _is_keyARROWLEFT = is_pressed;; if (keycode==cimg::keyARROWDOWN) _is_keyARROWDOWN = is_pressed;; if (keycode==cimg::keyARROWRIGHT) _is_keyARROWRIGHT = is_pressed;; > if (keycode==cimg::keyPAD0) _is_keyPAD0 = is_pressed;; if (keycode==cimg::keyPAD1) _is_keyPAD1 = is_pressed;; if (keycode==cimg::keyPAD2) _is_keyPAD2 = is_pressed;; > if (keycode==cimg::keyPAD3) _is_keyPAD3 = is_pressed;; if (keycode==cimg::keyPAD4) _is_keyPAD4 = is_pressed;; if (keycode==cimg::keyPAD5) _is_keyPAD5 = is_pressed;; > if (keycode==cimg::keyPAD6) _is_keyPAD6 = is_pressed;; if (keycode==cimg::keyPAD7) _is_keyPAD7 = is_pressed;; if (keycode==cimg::keyPAD8) _is_keyPAD8 = is_pressed;; > if (keycode==cimg::keyPAD9) _is_keyPAD9 = is_pressed;; if (keycode==cimg::keyPADADD) _is_keyPADADD = is_pressed;; if (keycode==cimg::keyPADSUB) _is_keyPADSUB = is_pressed;; > if (keycode==cimg::keyPADMUL) _is_keyPADMUL = is_pressed;; if (keycode==cimg::keyPADDIV) _is_keyPADDIV = is_pressed;; > if (is_pressed) { > if (*_keys) > std::memmove((void*)(_keys+1),(void*)_keys,sizeof(_keys) - sizeof(unsigned int)); > *_keys = keycode; > if (*_released_keys) { > std::memmove((void*)(_released_keys+1),(void*)_released_keys,sizeof(_released_keys) - sizeof(unsigned int)); > *_released_keys = 0; > } > } else { > if (*_keys) { > std::memmove((void*)(_keys+1),(void*)_keys,sizeof(_keys) - sizeof(unsigned int)); > *_keys = 0; > } > if (*_released_keys) > std::memmove((void*)(_released_keys+1),(void*)_released_keys,sizeof(_released_keys) - sizeof(unsigned int)); > *_released_keys = keycode; > } > _is_event = keycode?true:false; > if (keycode) { > > > > > > } > return *this; > } > > > > > > CImgDisplay& flush() { > set_key().set_button().set_wheel(); > _is_resized = _is_moved = _is_event = false; > _fps_timer = _fps_frames = _timer = 0; > _fps_fps = 0; > return *this; > } > > > CImgDisplay& wait() { > wait(*this); > return *this; > } > > > > > > > CImgDisplay& wait(const unsigned int milliseconds) { > cimg::_wait(milliseconds,_timer); > return *this; > } > > > static void wait(CImgDisplay& disp1) { > disp1._is_event = false; > while (!disp1._is_closed && !disp1._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2) { > disp1._is_event = disp2._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed) && > !disp1._is_event && !disp2._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3) { > disp1._is_event = disp2._is_event = disp3._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6, CImgDisplay& disp7) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = disp7._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed || !disp7._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event && !disp7._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = disp7._is_event = disp8._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed || !disp7._is_closed || !disp8._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event && !disp7._is_event && !disp8._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8, CImgDisplay& disp9) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = disp7._is_event = disp8._is_event = disp9._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed || !disp7._is_closed || !disp8._is_closed || !disp9._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event && !disp7._is_event && !disp8._is_event && !disp9._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8, CImgDisplay& disp9, CImgDisplay& disp10) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = disp7._is_event = disp8._is_event = disp9._is_event = disp10._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed || !disp7._is_closed || !disp8._is_closed || !disp9._is_closed || !disp10._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event && !disp7._is_event && !disp8._is_event && !disp9._is_event && !disp10._is_event) wait_all(); > } > > > > > static void wait_all() { > return _no_display_exception(); > } ># 7270 "./CImg.h" > template<typename T> > CImgDisplay& render(const CImg<T>& img) { > return assign(img); > } > > > > > > > > CImgDisplay& paint() { > return assign(); > } > > > > > > template<typename T> > const CImgDisplay& snapshot(CImg<T>& img) const { > cimg::unused(img); > _no_display_exception(); > return *this; > } ># 9039 "./CImg.h" > }; ># 9144 "./CImg.h" > template<typename T> > struct CImg { > > unsigned int _width, _height, _depth, _spectrum; > bool _is_shared; > T *_data; ># 9164 "./CImg.h" > typedef T* iterator; ># 9180 "./CImg.h" > typedef const T* const_iterator; ># 9190 "./CImg.h" > typedef T value_type; > > > typedef typename cimg::superset<T,bool>::type Tbool; > typedef typename cimg::superset<T,unsigned char>::type Tuchar; > typedef typename cimg::superset<T,char>::type Tchar; > typedef typename cimg::superset<T,unsigned short>::type Tushort; > typedef typename cimg::superset<T,short>::type Tshort; > typedef typename cimg::superset<T,unsigned int>::type Tuint; > typedef typename cimg::superset<T,int>::type Tint; > typedef typename cimg::superset<T,unsigned long>::type Tulong; > typedef typename cimg::superset<T,long>::type Tlong; > typedef typename cimg::superset<T,float>::type Tfloat; > typedef typename cimg::superset<T,double>::type Tdouble; > typedef typename cimg::last<T,bool>::type boolT; > typedef typename cimg::last<T,unsigned char>::type ucharT; > typedef typename cimg::last<T,char>::type charT; > typedef typename cimg::last<T,unsigned short>::type ushortT; > typedef typename cimg::last<T,short>::type shortT; > typedef typename cimg::last<T,unsigned int>::type uintT; > typedef typename cimg::last<T,int>::type intT; > typedef typename cimg::last<T,unsigned long>::type ulongT; > typedef typename cimg::last<T,long>::type longT; > typedef typename cimg::last<T,float>::type floatT; > typedef typename cimg::last<T,double>::type doubleT; ># 9223 "./CImg.h" ># 1 "./gmic.cpp" 1 ># 50 "./gmic.cpp" >CImg<T>& gmic_invert_endianness(const char *const stype) { > > > > > > > if (!std::strcmp(stype,"bool")) if (cimg::type<T>::string()==cimg::type<bool>::string()) invert_endianness(); else CImg<bool>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"uchar")) if (cimg::type<T>::string()==cimg::type<unsigned char>::string()) invert_endianness(); else CImg<unsigned char>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"unsigned char")) if (cimg::type<T>::string()==cimg::type<unsigned char>::string()) invert_endianness(); else CImg<unsigned char>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"char")) if (cimg::type<T>::string()==cimg::type<char>::string()) invert_endianness(); else CImg<char>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"ushort")) if (cimg::type<T>::string()==cimg::type<unsigned short>::string()) invert_endianness(); else CImg<unsigned short>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"unsigned short")) if (cimg::type<T>::string()==cimg::type<unsigned short>::string()) invert_endianness(); else CImg<unsigned short>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"short")) if (cimg::type<T>::string()==cimg::type<short>::string()) invert_endianness(); else CImg<short>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"uint")) if (cimg::type<T>::string()==cimg::type<unsigned int>::string()) invert_endianness(); else CImg<unsigned int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"unsigned int")) if (cimg::type<T>::string()==cimg::type<unsigned int>::string()) invert_endianness(); else CImg<unsigned int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"int")) if (cimg::type<T>::string()==cimg::type<int>::string()) invert_endianness(); else CImg<int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"ulong")) if (cimg::type<T>::string()==cimg::type<unsigned int>::string()) invert_endianness(); else CImg<unsigned int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"unsigned long")) if (cimg::type<T>::string()==cimg::type<unsigned int>::string()) invert_endianness(); else CImg<unsigned int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"long")) if (cimg::type<T>::string()==cimg::type<int>::string()) invert_endianness(); else CImg<int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"float")) if (cimg::type<T>::string()==cimg::type<float>::string()) invert_endianness(); else CImg<float>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"double")) if (cimg::type<T>::string()==cimg::type<double>::string()) invert_endianness(); else CImg<double>(*this).invert_endianness().move_to(*this); > else invert_endianness(); > return *this; >} > >CImg<T> get_gmic_invert_endianness(const char *const stype) const { > return (+*this).gmic_invert_endianness(stype); >} > >template<typename t> >CImg<T>& operator_eq(const t val) { ># 83 "./gmic.cpp" > ># 83 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 83 "./gmic.cpp" ># 83 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd == (T)val); > return *this; >} > >CImg<T>& operator_eq(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_eq"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd == (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd == (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 102 "./gmic.cpp" > ># 102 "./gmic.cpp" >#pragma omp parallel ># 102 "./gmic.cpp" ># 102 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 105 "./gmic.cpp" > ># 105 "./gmic.cpp" >#pragma omp for collapse(3) ># 105 "./gmic.cpp" ># 105 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd == (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd == (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_eq(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_eq(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_eq(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd == (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd == (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_neq(const t val) { ># 143 "./gmic.cpp" > ># 143 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 143 "./gmic.cpp" ># 143 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd != (T)val); > return *this; >} > >CImg<T>& operator_neq(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_neq"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd != (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd != (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 162 "./gmic.cpp" > ># 162 "./gmic.cpp" >#pragma omp parallel ># 162 "./gmic.cpp" ># 162 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 165 "./gmic.cpp" > ># 165 "./gmic.cpp" >#pragma omp for collapse(3) ># 165 "./gmic.cpp" ># 165 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd != (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd != (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_neq(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_neq(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_neq(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd != (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd != (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_gt(const t val) { ># 203 "./gmic.cpp" > ># 203 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 203 "./gmic.cpp" ># 203 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd > (T)val); > return *this; >} > >CImg<T>& operator_gt(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_gt"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd > (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd > (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 222 "./gmic.cpp" > ># 222 "./gmic.cpp" >#pragma omp parallel ># 222 "./gmic.cpp" ># 222 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 225 "./gmic.cpp" > ># 225 "./gmic.cpp" >#pragma omp for collapse(3) ># 225 "./gmic.cpp" ># 225 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd > (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd > (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_gt(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_gt(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_gt(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd > (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd > (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_ge(const t val) { ># 263 "./gmic.cpp" > ># 263 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 263 "./gmic.cpp" ># 263 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd >= (T)val); > return *this; >} > >CImg<T>& operator_ge(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_ge"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd >= (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd >= (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 282 "./gmic.cpp" > ># 282 "./gmic.cpp" >#pragma omp parallel ># 282 "./gmic.cpp" ># 282 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 285 "./gmic.cpp" > ># 285 "./gmic.cpp" >#pragma omp for collapse(3) ># 285 "./gmic.cpp" ># 285 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd >= (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd >= (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_ge(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_ge(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_ge(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd >= (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd >= (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_lt(const t val) { ># 323 "./gmic.cpp" > ># 323 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 323 "./gmic.cpp" ># 323 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd < (T)val); > return *this; >} > >CImg<T>& operator_lt(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_lt"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd < (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd < (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 342 "./gmic.cpp" > ># 342 "./gmic.cpp" >#pragma omp parallel ># 342 "./gmic.cpp" ># 342 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 345 "./gmic.cpp" > ># 345 "./gmic.cpp" >#pragma omp for collapse(3) ># 345 "./gmic.cpp" ># 345 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd < (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd < (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_lt(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_lt(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_lt(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd < (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd < (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_le(const t val) { ># 383 "./gmic.cpp" > ># 383 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 383 "./gmic.cpp" ># 383 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd <= (T)val); > return *this; >} > >CImg<T>& operator_le(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_le"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd <= (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd <= (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 402 "./gmic.cpp" > ># 402 "./gmic.cpp" >#pragma omp parallel ># 402 "./gmic.cpp" ># 402 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 405 "./gmic.cpp" > ># 405 "./gmic.cpp" >#pragma omp for collapse(3) ># 405 "./gmic.cpp" ># 405 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd <= (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd <= (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_le(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_le(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_le(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd <= (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd <= (T)*(ptrs++)); > } > return *this; >} > >CImg<T>& mul(const char *const expression) { > return operator*=(expression); >} > >CImg<T> get_mul(const char *const expression) const { > return (+*this).mul(expression); >} > >CImg<T>& div(const char *const expression) { > return operator/=(expression); >} > >CImg<T> get_div(const char *const expression) const { > return (+*this).div(expression); >} > >template<typename t> >const CImg<T>& gmic_symmetric_eigen(CImg<t>& val, CImg<t>& vec) const { > if (spectrum()!=3 && spectrum()!=6) return symmetric_eigen(val,vec); > val.assign(width(),height(),depth(),spectrum()==3?2:3); > vec.assign(width(),height(),depth(),spectrum()==3?2:6); > CImg<t> _val, _vec; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > get_tensor_at(x,y,z).symmetric_eigen(_val,_vec); > val.set_vector_at(_val,x,y,z); > if (spectrum()==3) { > vec(x,y,z,0) = _vec(0,0); > vec(x,y,z,1) = _vec(0,1); > } else { > vec(x,y,z,0) = _vec(0,0); > vec(x,y,z,1) = _vec(0,1); > vec(x,y,z,2) = _vec(0,2); > > vec(x,y,z,3) = _vec(1,0); > vec(x,y,z,4) = _vec(1,1); > vec(x,y,z,5) = _vec(1,2); > } > } > return *this; >} > > > >template<typename t> >CImg<T>& replace(CImg<t>& img) { > return img.move_to(*this); >} > >template<typename t> >CImg<T> get_replace(const CImg<t>& img) const { > return +img; >} > >CImg<T>& gmic_autocrop(const CImg<T>& color=CImg<T>::empty()) { > if (color.width()==1) autocrop(*color); > else autocrop(color); > return *this; >} > >CImg<T> get_gmic_autocrop(const CImg<T>& color=CImg<T>::empty()) { > return (+*this).gmic_autocrop(color); >} > >CImg<T> get_gmic_set(const double value, > const int x, const int y, const int z, const int v) const { > return (+*this).gmic_set(value,x,y,z,v); >} > >CImg<T>& gmic_set(const double value, > const int x, const int y, const int z, const int v) { > (*this).atXYZC(x,y,z,v,0) = (T)value; > return *this; >} > >CImg<T> get_draw_point(const int x, const int y, const int z, const T *const col, > const float opacity) const { > return (+*this).draw_point(x,y,z,col,opacity); >} > >CImg<T> get_draw_line(const int x0, const int y0, const int x1, const int y1, const T *const col, > const float opacity, const unsigned int pattern) const { > return (+*this).draw_line(x0,y0,x1,y1,col,opacity,pattern); >} > >template<typename t> >CImg<T> get_draw_polygon(const CImg<t>& pts, const T *const col, const float opacity) const { > return (+*this).draw_polygon(pts,col,opacity); >} > >template<typename t> >CImg<T> get_draw_polygon(const CImg<t>& pts, const T *const col, const float opacity, > const unsigned int pattern) const { > return (+*this).draw_polygon(pts,col,opacity,pattern); >} > >CImg<T> get_draw_circle(const int x, const int y, const int r, const T *const col, > const float opacity) const { > return (+*this).draw_circle(x,y,r,col,opacity); >} > >CImg<T> get_draw_circle(const int x, const int y, const int r, const T *const col, > const float opacity, > const unsigned int pattern) const { > return (+*this).draw_circle(x,y,r,col,opacity,pattern); >} > >CImg<T> get_draw_ellipse(const int x, const int y, const float r0, const float r1, > const float angle, const T *const col, const float opacity) const { > return (+*this).draw_ellipse(x,y,r0,r1,angle,col,opacity); >} > >CImg<T> get_draw_ellipse(const int x, const int y, const float r0, const float r1, > const float angle, const T *const col, const float opacity, > const unsigned int pattern) const { > return (+*this).draw_ellipse(x,y,r0,r1,angle,col,opacity,pattern); >} > >CImg<T>& gmic_draw_text(const int x, const int y, > const char *const text, const T *const col, > const int bg, const float opacity, const unsigned int siz, > const unsigned int nb_cols) { > if (is_empty()) { > const T one[] = { 1 }; > assign().draw_text(x,y,"%s",one,0,opacity,siz,text).resize(-100,-100,1,nb_cols); > for (int c = 0; c<(int)((*this)._spectrum); ++c) get_shared_channel(c)*=col[c]; > } else draw_text(x,y,"%s",col,bg,opacity,siz,text); > return *this; >} > >CImg<T> get_gmic_draw_text(const int x, const int y, > const char *const text, const T *const col, > const int bg, const float opacity, const unsigned int siz, > const unsigned int nb_cols) const { > return (+*this).gmic_draw_text(x,y,text,col,bg,opacity,siz,nb_cols); >} > >CImg<T> get_draw_image(const int x, const int y, const int z, const int c, > const CImg<T>& sprite, const CImg<T>& mask, const float opacity, > const float max_opacity_mask) const { > return (+*this).draw_image(x,y,z,c,sprite,mask,opacity,max_opacity_mask); >} > >CImg<T> get_draw_image(const int x, const int y, const int z, const int c, > const CImg<T>& sprite, const float opacity) const { > return (+*this).draw_image(x,y,z,c,sprite,opacity); >} > >CImg<T> get_draw_plasma(const float alpha, const float beta, const unsigned int scale) const { > return (+*this).draw_plasma(alpha,beta,scale); >} > >CImg<T> get_draw_mandelbrot(const CImg<T>& color_palette, const float opacity, > const double z0r, const double z0i, const double z1r, const double z1i, > const unsigned int itermax, const bool normalized_iteration, > const bool julia_set, const double paramr, const double parami) const { > return (+*this).draw_mandelbrot(color_palette,opacity,z0r,z0i,z1r,z1i,itermax, > normalized_iteration,julia_set,paramr,parami); >} > >template<typename t, typename tc> >CImg<T> get_draw_graph(const CImg<t>& data, > const tc *const color, const float opacity=1, > const unsigned int plot_type=1, const int vertex_type=1, > const double ymin=0, const double ymax=0, > const unsigned int pattern=~0U) const { > return (+*this).draw_graph(data,color,opacity,plot_type,vertex_type,ymin,ymax,pattern); >} > >template<typename tc> >CImg<T> get_draw_axes(const float x0, const float x1, const float y0, const float y1, > const tc *const color, const float opacity=1, > const int subdivisionx=-60, const int subdivisiony=-60, > const float precisionx=0, const float precisiony=0, > const unsigned int patternx=~0U, const unsigned int patterny=~0U, > const unsigned int font_height=13) const { > return (+*this).draw_axes(x0,x1,y0,y1,color,opacity,subdivisionx,subdivisiony, > precisionx,precisiony,patternx,patterny,font_height); >} > >template<typename tc> >CImg<T> get_draw_grid(const float sizex, const float sizey, > const float offsetx, const float offsety, > const bool invertx, const bool inverty, > const tc *const color, const float opacity=1, > const unsigned int patternx=~0U, const unsigned int patterny=~0U) { > return (+*this).draw_grid(sizex,sizey,offsetx,offsety,invertx,inverty,color,opacity, > patternx,patterny); >} > >template<typename t1, typename t2> >CImg<T> get_draw_quiver(const CImg<t1>& flow, > const t2 *const color, const float opacity=1, > const unsigned int sampling=25, const float factor=-20, > const bool arrows=true, const unsigned int pattern=~0U) const { > return (+*this).draw_quiver(flow,color,opacity,sampling,factor,arrows,pattern); >} > >CImg<T> get_draw_fill(const int x, const int y, const int z, > const T *const col, const float opacity, > const float tolerance, const bool is_high_connectivity) const { > return (+*this).draw_fill(x,y,z,col,opacity,tolerance,is_high_connectivity); >} > >static bool is_almost(const T x, const T c) { > return x>=c && x<c+1; >} > >template<typename tp, typename tf, typename tc, typename to> >CImg<T> get_draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImgList<to>& opacities, > const unsigned int render_mode, const bool double_sided, > const float focale, > const float light_x, const float light_y,const float light_z, > const float specular_light, const float specular_shine, > CImg<floatT>& zbuffer) const { > return (+*this).draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_mode, > double_sided,focale,light_x,light_y,light_z,specular_light, > specular_shine,zbuffer); >} > > > >CImgList<T> get_split_CImg3d() const { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_split_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > CImgList<T> res; > const T *ptr0 = _data, *ptr = ptr0 + 6; > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; > const unsigned int nbv = (unsigned int)*(ptr++), nbp = (unsigned int)*(ptr++); > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; ptr+=3*nbv; > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; > for (unsigned int i = 0; i<nbp; ++i) ptr+=(unsigned int)(*ptr) + 1; > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; > for (unsigned int i = 0; i<nbp; ++i) { > const T val = *(ptr++); > if (val!=-128) ptr+=2; > else { > const unsigned int > w = (unsigned int)*(ptr++), > h = (unsigned int)*(ptr++), > s = (unsigned int)*(ptr++); > if (w*h*s!=0) ptr+=w*h*s; > } > } > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; > for (unsigned int i = 0; i<nbp; ++i) { > const T val = *(ptr++); > if (val==-128) { > const unsigned int > w = (unsigned int)*(ptr++), > h = (unsigned int)*(ptr++), > s = (unsigned int)*(ptr++); > if (w*h*s!=0) ptr+=w*h*s; > } > } > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > return res; >} > >static CImg<T> append_CImg3d(const CImgList<T>& images) { > if (!images) return CImg<T>(); > if (images.size()==1) return +images[0]; > char error_message[1024] = { 0 }; > unsigned int nbv = 0, nbp = 0; > unsigned long siz = 0; > for (int l = 0; l<(int)(images)._width; ++l) { > const CImg<T>& img = images[l]; > if (!img.is_CImg3d(false,error_message)) > throw CImgArgumentException("append_CImg3d(): image [%d] (%u,%u,%u,%u,%p) " > "is not a CImg3d (%s).", > l,img._width,img._height,img._depth,img._spectrum,img._data, > error_message); > siz+=img.size() - 8; > nbv+=cimg::float2uint((float)img[6]); > nbp+=cimg::float2uint((float)img[7]); > } > > CImg<T> res(1,siz + 8); > const T **const ptrs = new const T*[images.size()]; > T *ptrd = res._data; > *(ptrd++) = (T)('C' + 0.5f); *(ptrd++) = (T)('I' + 0.5f); > *(ptrd++) = (T)('m' + 0.5f); *(ptrd++) = (T)('g' + 0.5f); > *(ptrd++) = (T)('3' + 0.5f); *(ptrd++) = (T)('d' + 0.5f); > *(ptrd++) = (T)nbv; > *(ptrd++) = (T)nbp; > for (int l = 0; l<(int)(images)._width; ++l) { > const CImg<T>& img = images[l]; > const unsigned int nbv = cimg::float2uint((float)img[6]); > std::memcpy(ptrd,img._data + 8,3*nbv*sizeof(T)); > ptrd+=3*nbv; > ptrs[l] = img._data + 8 + 3*nbv; > } > unsigned long poff = 0; > for (int l = 0; l<(int)(images)._width; ++l) { > const unsigned int > nbv = cimg::float2uint((float)images[l][6]), > nbp = cimg::float2uint((float)images[l][7]); > for (unsigned int p = 0; p<nbp; ++p) { > const unsigned int > nbi = cimg::float2uint((float)*(ptrs[l]++)), > _nbi = nbi<5?nbi:nbi==5?2:nbi/3; > *(ptrd++) = (T)cimg::uint2float(nbi); > for (unsigned int i = 0; i<_nbi; ++i) *(ptrd++) = (T)(*(ptrs[l]++) + poff); > for (unsigned int i = nbi-_nbi; i; --i) *(ptrd++) = *(ptrs[l]++); > } > poff+=nbv; > } > unsigned long voff = 0; > for (int l = 0; l<(int)(images)._width; ++l) { > const unsigned int nbc = cimg::float2uint((float)images[l][7]); > for (unsigned int c = 0; c<nbc; ++c) > if (*(ptrs[l])==(T)-128) { > *(ptrd++) = *(ptrs[l]++); > const unsigned int > w = (unsigned int)*(ptrs[l]++), > h = (unsigned int)*(ptrs[l]++), > s = (unsigned int)*(ptrs[l]++); > if (!h && !s) { *(ptrd++) = (T)(w + voff); *(ptrd++) = 0; *(ptrd++) = 0; } > else { > *(ptrd++) = (T)w; *(ptrd++) = (T)h; *(ptrd++) = (T)s; > const unsigned long whs = (unsigned long)w*h*s; > std::memcpy(ptrd,ptrs[l],whs*sizeof(T)); > ptrs[l]+=whs; ptrd+=whs; > } > } else { *(ptrd++) = *(ptrs[l]++); *(ptrd++) = *(ptrs[l]++); *(ptrd++) = *(ptrs[l]++); } > voff+=nbc; > } > voff = 0; > for (int l = 0; l<(int)(images)._width; ++l) { > const unsigned int nbo = cimg::float2uint((float)images[l][7]); > for (unsigned int o = 0; o<nbo; ++o) > if (*(ptrs[l])==(T)-128) { > *(ptrd++) = *(ptrs[l]++); > const unsigned int > w = (unsigned int)*(ptrs[l]++), > h = (unsigned int)*(ptrs[l]++), > s = (unsigned int)*(ptrs[l]++); > if (!h && !s) { *(ptrd++) = (T)(w + voff); *(ptrd++) = 0; *(ptrd++) = 0; } > else { > *(ptrd++) = (T)w; *(ptrd++) = (T)h; *(ptrd++) = (T)s; > const unsigned long whs = (unsigned long)w*h*s; > std::memcpy(ptrd,ptrs[l],whs*sizeof(T)); > ptrs[l]+=whs; ptrd+=whs; > } > } else *(ptrd++) = *(ptrs[l]++); > voff+=nbo; > } > delete[] ptrs; > return res; >} > >template<typename t> >CImg<T>& rotate_CImg3d(const CImg<t>& rot) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "rotate_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > const unsigned int nbv = cimg::float2uint((float)(*this)[6]); > const T *ptrs = data() + 8; > const float > a = (float)rot(0,0), b = (float)rot(1,0), c = (float)rot(2,0), > d = (float)rot(0,1), e = (float)rot(1,1), f = (float)rot(2,1), > g = (float)rot(0,2), h = (float)rot(1,2), i = (float)rot(2,2); > T *ptrd = data() + 8; > for (unsigned int j = 0; j<nbv; ++j) { > const float x = (float)*(ptrs++), y = (float)*(ptrs++), z = (float)*(ptrs++); > *(ptrd++) = (T)(a*x + b*y + c*z); > *(ptrd++) = (T)(d*x + e*y + f*z); > *(ptrd++) = (T)(g*x + h*y + i*z); > } > return *this; >} > >template<typename t> >CImg<T> get_rotate_CImg3d(const CImg<t>& rot) const { > return (+*this).rotate_CImg3d(rot); >} > >CImg<T>& shift_CImg3d(const float tx, const float ty, const float tz) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "shift_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > const unsigned int nbv = cimg::float2uint((float)(*this)[6]); > T *ptrd = data() + 8; > for (unsigned int j = 0; j<nbv; ++j) { *(ptrd++)+=(T)tx; *(ptrd++)+=(T)ty; *(ptrd++)+=(T)tz; } > return *this; >} > >CImg<T> get_shift_CImg3d(const float tx, const float ty, const float tz) const { > return (+*this).shift_CImg3d(tx,ty,tz); >} > >CImg<T>& scale_CImg3d(const float sx, const float sy, const float sz) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "scale_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > const unsigned int nbv = cimg::float2uint((float)(*this)[6]); > T *ptrd = data() + 8; > for (unsigned int j = 0; j<nbv; ++j) { *(ptrd++)*=(T)sx; *(ptrd++)*=(T)sy; *(ptrd++)*=(T)sz; } > return *this; >} > >CImg<T> get_scale_CImg3d(const float sx, const float sy, const float sz) const { > return (+*this).scale_CImg3d(sx,sy,sz); >} > >CImg<T>& reverse_CImg3d() { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "reverse_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > T *p = _data + 6; > const unsigned int nbv = (unsigned int)*(p++), nbp = (unsigned int)*(p++); > p+=3*nbv; > for (unsigned int i = 0; i<nbp; ++i) { > const unsigned int nb = (unsigned int)*(p++); > switch(nb) { > case 2: case 3: cimg::swap(p[0],p[1]); break; > case 6: cimg::swap(p[0],p[1],p[2],p[4],p[3],p[5]); break; > case 9: cimg::swap(p[0],p[1],p[3],p[5],p[4],p[6]); break; > case 4: cimg::swap(p[0],p[1],p[2],p[3]); break; > case 12: cimg::swap(p[0],p[1],p[2],p[3],p[4],p[6],p[5],p[7],p[8],p[10],p[9],p[11]); break; > } > p+=nb; > } > return *this; >} > >CImg<T> get_reverse_CImg3d() const { > return (+*this).reverse_CImg3d(); >} > >CImg<T>& color_CImg3d(const float R, const float G, const float B, const float opacity, > const bool set_RGB, const bool set_opacity) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "color_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > T *ptrd = data() + 6; > const unsigned int > nbv = cimg::float2uint((float)*(ptrd++)), > nbp = cimg::float2uint((float)*(ptrd++)); > ptrd+=3*nbv; > for (unsigned int i = 0; i<nbp; ++i) { const unsigned int N = (unsigned int)*(ptrd++); ptrd+=N; } > for (unsigned int c = 0; c<nbp; ++c) > if (*ptrd==(T)-128) { > ++ptrd; > const unsigned int > w = (unsigned int)*(ptrd++), > h = (unsigned int)*(ptrd++), > s = (unsigned int)*(ptrd++); > ptrd+=w*h*s; > } else if (set_RGB) { *(ptrd++) = (T)R; *(ptrd++) = (T)G; *(ptrd++) = (T)B; } else ptrd+=3; > if (set_opacity) > for (unsigned int o = 0; o<nbp; ++o) { > if (*ptrd==(T)-128) { > ++ptrd; > const unsigned int > w = (unsigned int)*(ptrd++), > h = (unsigned int)*(ptrd++), > s = (unsigned int)*(ptrd++); > ptrd+=w*h*s; > } else *(ptrd++) = (T)opacity; > } > return *this; >} > >CImg<T> get_color_CImg3d(const float R, const float G, const float B, > const float opacity, const bool set_RGB, const bool set_opacity) const { > return (+*this).color_CImg3d(R,G,B,opacity,set_RGB,set_opacity); >} > >CImg<T>& texturize_CImg3d(const CImg<T>& texture, const CImg<T>& coords) { > return get_texturize_CImg3d(texture,coords).move_to(*this); >} > >CImg<T> get_texturize_CImg3d(const CImg<T>& texture, const CImg<T>& coords) const { > CImgList<uintT> primitives; > CImgList<T> colors; > CImgList<floatT> opacities; > const CImg<floatT> points = get_CImg3dtoobject3d(primitives,colors,opacities,false); > points.texturize_object3d(primitives,colors,texture,coords); > return points.get_object3dtoCImg3d(primitives,colors,opacities,false); >} > >CImg<T>& convert_primitives_CImg3d(const unsigned int mode) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "convert_primitives_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > CImgList<uintT> primitives; > CImgList<floatT> colors, opacities; > CImg3dtoobject3d(primitives,colors,opacities,false); > const unsigned int psiz = primitives.size(); > CImg<uintT> P; > CImg<floatT> C, O; > for (unsigned int p = 0; p<psiz; ++p) { > primitives[p].move_to(P); > colors[p].move_to(C); > opacities[p].move_to(O); > switch (P.size()) { > case 1 : > P.move_to(primitives); > if (mode==2) { > if (C.size()==3) C.move_to(colors); > else C.get_vector_at(C.width()/2,C.height()/2).move_to(colors); > if (O.size()==1) O.move_to(opacities); > else O.get_vector_at(O.width()/2,O.height()/2).move_to(opacities); > } else { C.move_to(colors); O.move_to(opacities); } > break; > case 2 : > if (mode) { P.move_to(primitives); C.move_to(colors); O.move_to(opacities); } > else { > CImg<uintT>::vector(P[0]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } > break; > case 3 : > if (mode==2) { > P.move_to(primitives); C.move_to(colors); O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1],P[2]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[2],P[0]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[2]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } > break; > case 4 : > if (mode==2) { > P.move_to(primitives); C.move_to(colors); O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1],P[2]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[2],P[3]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[3],P[0]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[2]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[3]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } > break; > case 5 : > if (mode==2) { > P.move_to(primitives); C.move_to(colors); O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1],1,P[3],P[4]).move_to(primitives); > colors.insert(C); opacities.insert(O); > } else { > const float > x0 = (float)(*this)(P[0],0), > y0 = (float)(*this)(P[0],1), > z0 = (float)(*this)(P[0],2), > x1 = (float)(*this)(P[1],0), > y1 = (float)(*this)(P[1],1), > z1 = (float)(*this)(P[1],2); > (*this)(P[0],0) = (T)((x0+x1)/2); > (*this)(P[0],1) = (T)((y0+y1)/2); > (*this)(P[0],2) = (T)((z0+z1)/2); > CImg<uintT>::vector(P[0]).move_to(primitives); > colors.insert(C); opacities.insert(O); > } > break; > case 6 : > if (mode==2) { > CImg<uintT>::vector(P[0],P[1]).move_to(primitives); > C.get_vector_at(P[2],P[3]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[2],P[3])).move_to(opacities); > else O.move_to(opacities); > } else if (mode==1) { > P.move_to(primitives); C.move_to(colors); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > C.get_vector_at(P[2],P[3]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[2],P[3])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > C.get_vector_at(P[4],P[5]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[4],P[5])).move_to(opacities); > else O.move_to(opacities); > } > break; > case 9 : > if (mode==2) { > CImg<uintT>::vector(P[0],P[1],P[2]).move_to(primitives); > C.get_vector_at(P[3],P[4]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[3],P[4])).move_to(opacities); > else O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1],P[3],P[4],P[5],P[6]). > move_to(primitives); > C.move_to(colors); opacities.insert(O); > CImg<uintT>::vector(P[1],P[2],P[3],P[4],P[7],P[8]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); opacities.insert(O); > CImg<uintT>::vector(P[2],P[0],P[7],P[8],P[1],P[3]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > C.get_vector_at(P[3],P[4]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[3],P[4])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > C.get_vector_at(P[5],P[6]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[5],P[6])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[2]).move_to(primitives); > C.get_vector_at(P[7],P[8]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[7],P[8])).move_to(opacities); > else O.move_to(opacities); > } > break; > case 12 : > if (mode==2) { > CImg<uintT>::vector(P[0],P[1],P[2],P[3]).move_to(primitives); > C.get_vector_at(P[4],P[5]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[4],P[5])).move_to(opacities); > else O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1],P[4],P[5],P[6],P[7]). > move_to(primitives); > C.move_to(colors); opacities.insert(O); > CImg<uintT>::vector(P[1],P[2],P[6],P[7],P[8],P[9]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); opacities.insert(O); > CImg<uintT>::vector(P[2],P[3],P[8],P[9],P[10],P[11]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); opacities.insert(O); > CImg<uintT>::vector(P[3],P[0],P[10],P[11],P[4],P[5]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > C.get_vector_at(P[4],P[5]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[4],P[5])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > C.get_vector_at(P[6],P[7]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[6],P[7])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[2]).move_to(primitives); > C.get_vector_at(P[8],P[9]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[8],P[9])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[3]).move_to(primitives); > C.get_vector_at(P[10],P[11]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[10],P[11])).move_to(opacities); > else O.move_to(opacities); > } > break; > default : > P.move_to(primitives); > C.move_to(colors); > O.move_to(opacities); > } > } > if (psiz) { > primitives.remove(0,psiz-1); > colors.remove(0,psiz-1); > opacities.remove(0,psiz-1); > } > object3dtoCImg3d(primitives,colors,opacities,false); > return *this; >} > >CImg<T> get_convert_primitives_CImg3d(const unsigned int mode) const { > return (+*this).convert_primitives_CImg3d(mode); >} > > > >template<typename t> >CImg<T>& inpaint(const CImg<t>& mask, const unsigned int method=1) { > if (!is_sameXYZ(mask)) > throw CImgArgumentException("CImg<%s>::inpaint(): Invalid mask (%u,%u,%u,%u,%p) for " > "instance image (%u,%u,%u,%u,%p).", > pixel_type(),mask._width,mask._height,mask._depth, > mask._spectrum,mask._data, > _width,_height,_depth,_spectrum,_data); > CImg<t> _mask(mask,false), _nmask(mask,false); > bool is_pixel = false; > > do { > is_pixel = false; > > if (depth()==1) { > t M[9]; t& Mpp = M[0]; t& Mcp = M[1]; t& Mnp = M[2]; t& Mpc = M[3]; t& Mcc = M[4]; t& Mnc = M[5]; t& Mpn = M[6]; t& Mcn = M[7]; t& Mnn = M[8]; Mpp = Mcp = Mnp = Mpc = Mcc = Mnc = Mpn = Mcn = Mnn = 0; > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > > switch (method) { > case 0: > for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,0,0)), (M[3] = M[4] = (t)(_mask)(0,y,0,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,0,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,0,0)), (M[5] = (t)(_mask)(_n1x,y,0,0)), (M[8] = (t)(_mask)(_n1x,_n1y,0,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], _p1x = x++, ++_n1x) if (Mcc && (!Mcp || !Mpc || !Mnc || !Mcn)) { > is_pixel = true; > const unsigned int wcp = Mcp?0:1, wpc = Mpc?0:1, wnc = Mnc?0:1, wcn = Mcn?0:1, > sumw = wcp + wpc + wnc + wcn; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,0,k), I[1] = (T)(*this)(x,_p1y,0,k), I[2] = (T)(*this)(_n1x,_p1y,0,k), I[3] = (T)(*this)(_p1x,y,0,k), I[4] = (T)(*this)(x,y,0,k), I[5] = (T)(*this)(_n1x,y,0,k), I[6] = (T)(*this)(_p1x,_n1y,0,k), I[7] = (T)(*this)(x,_n1y,0,k), I[8] = (T)(*this)(_n1x,_n1y,0,k); > (*this)(x,y,k) = (T)((wcp*Icp + wpc*Ipc + wnc*Inc + wcn*Icn)/(float)sumw); > } > _nmask(x,y) = 0; > } > break; > > case 1: > for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,0,0)), (M[3] = M[4] = (t)(_mask)(0,y,0,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,0,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,0,0)), (M[5] = (t)(_mask)(_n1x,y,0,0)), (M[8] = (t)(_mask)(_n1x,_n1y,0,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], _p1x = x++, ++_n1x) if (Mcc && (!Mpp || !Mcp || !Mnp || !Mpc || !Mnc || !Mpn || !Mcn || !Mnn)) { > is_pixel = true; > const unsigned int > wpp = Mpp?0:1, wcp = Mcp?0:2, wnp = Mnp?0:1, > wpc = Mpc?0:2, wnc = Mnc?0:2, > wpn = Mpn?0:1, wcn = Mcn?0:2, wnn = Mnn?0:1, > sumw = wpp + wcp + wnp + wpc + wnc + wpn + wcn + wnn; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,0,k), I[1] = (T)(*this)(x,_p1y,0,k), I[2] = (T)(*this)(_n1x,_p1y,0,k), I[3] = (T)(*this)(_p1x,y,0,k), I[4] = (T)(*this)(x,y,0,k), I[5] = (T)(*this)(_n1x,y,0,k), I[6] = (T)(*this)(_p1x,_n1y,0,k), I[7] = (T)(*this)(x,_n1y,0,k), I[8] = (T)(*this)(_n1x,_n1y,0,k); > (*this)(x,y,k) = (T)((wpp*Ipp + wcp*Icp + wnp*Inp + wpc*Ipc + > wnc*Inc + wpn*Ipn + wcn*Icn + wnn*Inn)/(float)sumw); > } > _nmask(x,y) = 0; > } > break; > > case 2: { > T J[4]; > for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,0,0)), (M[3] = M[4] = (t)(_mask)(0,y,0,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,0,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,0,0)), (M[5] = (t)(_mask)(_n1x,y,0,0)), (M[8] = (t)(_mask)(_n1x,_n1y,0,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], _p1x = x++, ++_n1x) > if (Mcc && (!Mcp || !Mpc || !Mnc || !Mcn)) { > is_pixel = true; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,0,k), I[1] = (T)(*this)(x,_p1y,0,k), I[2] = (T)(*this)(_n1x,_p1y,0,k), I[3] = (T)(*this)(_p1x,y,0,k), I[4] = (T)(*this)(x,y,0,k), I[5] = (T)(*this)(_n1x,y,0,k), I[6] = (T)(*this)(_p1x,_n1y,0,k), I[7] = (T)(*this)(x,_n1y,0,k), I[8] = (T)(*this)(_n1x,_n1y,0,k); > unsigned int ind = 0; > if (!Mcp) J[ind++] = Icp; > if (!Mpc) J[ind++] = Ipc; > if (!Mnc) J[ind++] = Inc; > if (!Mcn) J[ind++] = Icn; > (*this)(x,y,k) = CImg<T>(J,ind,1,1,1,true).kth_smallest(ind>>1); > } > _nmask(x,y) = 0; > } > } break; > > default: > T J[8]; > for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,0,0)), (M[3] = M[4] = (t)(_mask)(0,y,0,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,0,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,0,0)), (M[5] = (t)(_mask)(_n1x,y,0,0)), (M[8] = (t)(_mask)(_n1x,_n1y,0,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], _p1x = x++, ++_n1x) > if (Mcc && (!Mpp || !Mcp || !Mnp || !Mpc || !Mnc || !Mpn || !Mcn || !Mnn)) { > is_pixel = true; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,0,k), I[1] = (T)(*this)(x,_p1y,0,k), I[2] = (T)(*this)(_n1x,_p1y,0,k), I[3] = (T)(*this)(_p1x,y,0,k), I[4] = (T)(*this)(x,y,0,k), I[5] = (T)(*this)(_n1x,y,0,k), I[6] = (T)(*this)(_p1x,_n1y,0,k), I[7] = (T)(*this)(x,_n1y,0,k), I[8] = (T)(*this)(_n1x,_n1y,0,k); > unsigned int ind = 0; > if (!Mpp) J[ind++] = Ipp; if (!Mcp) J[ind++] = Icp; if (!Mnp) J[ind++] = Inp; > if (!Mpc) J[ind++] = Ipc; if (!Mnc) J[ind++] = Inc; > if (!Mpn) J[ind++] = Ipn; if (!Mcn) J[ind++] = Icn; if (!Mnn) J[ind++] = Inn; > (*this)(x,y,k) = CImg<T>(J,ind,1,1,1,true).kth_smallest(ind>>1); > } > _nmask(x,y) = 0; > } > } > > } else { > t M[27]; t& Mppp = M[0]; t& Mcpp = M[1]; t& Mnpp = M[2]; t& Mpcp = M[3]; t& Mccp = M[4]; t& Mncp = M[5]; t& Mpnp = M[6]; t& Mcnp = M[7]; t& Mnnp = M[8]; t& Mppc = M[9]; t& Mcpc = M[10]; t& Mnpc = M[11]; t& Mpcc = M[12]; t& Mccc = M[13]; t& Mncc = M[14]; t& Mpnc = M[15]; t& Mcnc = M[16]; t& Mnnc = M[17]; t& Mppn = M[18]; t& Mcpn = M[19]; t& Mnpn = M[20]; t& Mpcn = M[21]; t& Mccn = M[22]; t& Mncn = M[23]; t& Mpnn = M[24]; t& Mcnn = M[25]; t& Mnnn = M[26]; Mppp = Mcpp = Mnpp = Mpcp = Mccp = Mncp = Mpnp = Mcnp = Mnnp = Mppc = Mcpc = Mnpc = Mpcc = Mccc = Mncc = Mpnc = Mcnc = Mnnc = Mppn = Mcpn = Mnpn = Mpcn = Mccn = Mncn = Mpnn = Mcnn = Mnnn = 0; > T I[27]; T& Ippp = I[0]; T& Icpp = I[1]; T& Inpp = I[2]; T& Ipcp = I[3]; T& Iccp = I[4]; T& Incp = I[5]; T& Ipnp = I[6]; T& Icnp = I[7]; T& Innp = I[8]; T& Ippc = I[9]; T& Icpc = I[10]; T& Inpc = I[11]; T& Ipcc = I[12]; T& Iccc = I[13]; T& Incc = I[14]; T& Ipnc = I[15]; T& Icnc = I[16]; T& Innc = I[17]; T& Ippn = I[18]; T& Icpn = I[19]; T& Inpn = I[20]; T& Ipcn = I[21]; T& Iccn = I[22]; T& Incn = I[23]; T& Ipnn = I[24]; T& Icnn = I[25]; T& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > > switch (method) { > case 0: > for (int z = 0, _p1z = 0, _n1z = 1>=((_mask)._depth)?(int)((_mask)._depth)-1:1; _n1z<(int)((_mask)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,_p1z,0)), (M[3] = M[4] = (t)(_mask)(0,y,_p1z,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,_p1z,0)), (M[9] = M[10] = (t)(_mask)(0,_p1y,z,0)), (M[12] = M[13] = (t)(_mask)(0,y,z,0)), (M[15] = M[16] = (t)(_mask)(0,_n1y,z,0)), (M[18] = M[19] = (t)(_mask)(0,_p1y,_n1z,0)), (M[21] = M[22] = (t)(_mask)(0,y,_n1z,0)), (M[24] = M[25] = (t)(_mask)(0,_n1y,_n1z,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,_p1z,0)), (M[5] = (t)(_mask)(_n1x,y,_p1z,0)), (M[8] = (t)(_mask)(_n1x,_n1y,_p1z,0)), (M[11] = (t)(_mask)(_n1x,_p1y,z,0)), (M[14] = (t)(_mask)(_n1x,y,z,0)), (M[17] = (t)(_mask)(_n1x,_n1y,z,0)), (M[20] = (t)(_mask)(_n1x,_p1y,_n1z,0)), (M[23] = (t)(_mask)(_n1x,y,_n1z,0)), (M[26] = (t)(_mask)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], M[9] = M[10], M[10] = M[11], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[18] = M[19], M[19] = M[20], M[21] = M[22], M[22] = M[23], M[24] = M[25], M[25] = M[26], _p1x = x++, ++_n1x) > if (Mccc && (!Mccp || !Mcpc || !Mpcc || !Mncc || !Mcnc || !Mccn)) { > is_pixel = true; > const unsigned int > wccp = Mccp?0:1, wcpc = Mcpc?0:1, wpcc = Mpcc?0:1, > wncc = Mncc?0:1, wcnc = Mcnc?0:1, wccn = Mccn?0:1, > sumw = wcpc + wpcc + wccp + wncc + wcnc + wccn; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,_p1z,k), I[1] = (T)(*this)(x,_p1y,_p1z,k), I[2] = (T)(*this)(_n1x,_p1y,_p1z,k), I[3] = (T)(*this)(_p1x,y,_p1z,k), I[4] = (T)(*this)(x,y,_p1z,k), I[5] = (T)(*this)(_n1x,y,_p1z,k), I[6] = (T)(*this)(_p1x,_n1y,_p1z,k), I[7] = (T)(*this)(x,_n1y,_p1z,k), I[8] = (T)(*this)(_n1x,_n1y,_p1z,k), I[9] = (T)(*this)(_p1x,_p1y,z,k), I[10] = (T)(*this)(x,_p1y,z,k), I[11] = (T)(*this)(_n1x,_p1y,z,k), I[12] = (T)(*this)(_p1x,y,z,k), I[13] = (T)(*this)(x,y,z,k), I[14] = (T)(*this)(_n1x,y,z,k), I[15] = (T)(*this)(_p1x,_n1y,z,k), I[16] = (T)(*this)(x,_n1y,z,k), I[17] = (T)(*this)(_n1x,_n1y,z,k), I[18] = (T)(*this)(_p1x,_p1y,_n1z,k), I[19] = (T)(*this)(x,_p1y,_n1z,k), I[20] = (T)(*this)(_n1x,_p1y,_n1z,k), I[21] = (T)(*this)(_p1x,y,_n1z,k), I[22] = (T)(*this)(x,y,_n1z,k), I[23] = (T)(*this)(_n1x,y,_n1z,k), I[24] = (T)(*this)(_p1x,_n1y,_n1z,k), I[25] = (T)(*this)(x,_n1y,_n1z,k), I[26] = (T)(*this)(_n1x,_n1y,_n1z,k); > (*this)(x,y,z,k) = (T)((wccp*Iccp + wcpc*Icpc + wpcc*Ipcc + > wncc*Incc + wcnc*Icnc + wccn*Iccn)/(float)sumw); > } > _nmask(x,y,z) = 0; > } > break; > > case 1: > for (int z = 0, _p1z = 0, _n1z = 1>=((_mask)._depth)?(int)((_mask)._depth)-1:1; _n1z<(int)((_mask)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,_p1z,0)), (M[3] = M[4] = (t)(_mask)(0,y,_p1z,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,_p1z,0)), (M[9] = M[10] = (t)(_mask)(0,_p1y,z,0)), (M[12] = M[13] = (t)(_mask)(0,y,z,0)), (M[15] = M[16] = (t)(_mask)(0,_n1y,z,0)), (M[18] = M[19] = (t)(_mask)(0,_p1y,_n1z,0)), (M[21] = M[22] = (t)(_mask)(0,y,_n1z,0)), (M[24] = M[25] = (t)(_mask)(0,_n1y,_n1z,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,_p1z,0)), (M[5] = (t)(_mask)(_n1x,y,_p1z,0)), (M[8] = (t)(_mask)(_n1x,_n1y,_p1z,0)), (M[11] = (t)(_mask)(_n1x,_p1y,z,0)), (M[14] = (t)(_mask)(_n1x,y,z,0)), (M[17] = (t)(_mask)(_n1x,_n1y,z,0)), (M[20] = (t)(_mask)(_n1x,_p1y,_n1z,0)), (M[23] = (t)(_mask)(_n1x,y,_n1z,0)), (M[26] = (t)(_mask)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], M[9] = M[10], M[10] = M[11], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[18] = M[19], M[19] = M[20], M[21] = M[22], M[22] = M[23], M[24] = M[25], M[25] = M[26], _p1x = x++, ++_n1x) > if (Mccc && (!Mppp || !Mcpp || !Mnpp || !Mpcp || !Mccp || !Mncp || !Mpnp || !Mcnp || > !Mnnp || !Mppc || !Mcpc || !Mnpc || !Mpcc || !Mncc || !Mpnc || !Mcnc || > !Mnnc || !Mppn || !Mcpn || !Mnpn || !Mpcn || !Mccn || !Mncn || !Mpnn || > !Mcnn || !Mnnn)) { > is_pixel = true; > const unsigned int > wppp = Mppp?0:1, wcpp = Mcpp?0:2, wnpp = Mnpp?0:1, > wpcp = Mpcp?0:2, wccp = Mccp?0:4, wncp = Mncp?0:2, > wpnp = Mpnp?0:1, wcnp = Mcnp?0:2, wnnp = Mnnp?0:1, > wppc = Mppc?0:2, wcpc = Mcpc?0:4, wnpc = Mnpc?0:2, > wpcc = Mpcc?0:4, wncc = Mncc?0:4, > wpnc = Mpnc?0:2, wcnc = Mcnc?0:4, wnnc = Mnnc?0:2, > wppn = Mppn?0:1, wcpn = Mcpn?0:2, wnpn = Mnpn?0:1, > wpcn = Mpcn?0:2, wccn = Mccn?0:4, wncn = Mncn?0:2, > wpnn = Mpnn?0:1, wcnn = Mcnn?0:2, wnnn = Mnnn?0:1, > sumw = wppp + wcpp + wnpp + wpcp + wccp + wncp + wpnp + wcnp + wnnp + > wppc + wcpc + wnpc + wpcc + wncc + wpnc + wcnc + wnnc + > wppn + wcpn + wnpn + wpcn + wccn + wncn + wpnn + wcnn + wnnn; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,_p1z,k), I[1] = (T)(*this)(x,_p1y,_p1z,k), I[2] = (T)(*this)(_n1x,_p1y,_p1z,k), I[3] = (T)(*this)(_p1x,y,_p1z,k), I[4] = (T)(*this)(x,y,_p1z,k), I[5] = (T)(*this)(_n1x,y,_p1z,k), I[6] = (T)(*this)(_p1x,_n1y,_p1z,k), I[7] = (T)(*this)(x,_n1y,_p1z,k), I[8] = (T)(*this)(_n1x,_n1y,_p1z,k), I[9] = (T)(*this)(_p1x,_p1y,z,k), I[10] = (T)(*this)(x,_p1y,z,k), I[11] = (T)(*this)(_n1x,_p1y,z,k), I[12] = (T)(*this)(_p1x,y,z,k), I[13] = (T)(*this)(x,y,z,k), I[14] = (T)(*this)(_n1x,y,z,k), I[15] = (T)(*this)(_p1x,_n1y,z,k), I[16] = (T)(*this)(x,_n1y,z,k), I[17] = (T)(*this)(_n1x,_n1y,z,k), I[18] = (T)(*this)(_p1x,_p1y,_n1z,k), I[19] = (T)(*this)(x,_p1y,_n1z,k), I[20] = (T)(*this)(_n1x,_p1y,_n1z,k), I[21] = (T)(*this)(_p1x,y,_n1z,k), I[22] = (T)(*this)(x,y,_n1z,k), I[23] = (T)(*this)(_n1x,y,_n1z,k), I[24] = (T)(*this)(_p1x,_n1y,_n1z,k), I[25] = (T)(*this)(x,_n1y,_n1z,k), I[26] = (T)(*this)(_n1x,_n1y,_n1z,k); > (*this)(x,y,z,k) = (T)((wppp*Ippp + wcpp*Icpp + wnpp*Inpp + > wpcp*Ipcp + wccp*Iccp + wncp*Incp + > wpnp*Ipnp + wcnp*Icnp + wnnp*Innp + > wppc*Ippc + wcpc*Icpc + wnpc*Inpc + > wpcc*Ipcc + wncc*Incc + > wpnc*Ipnc + wcnc*Icnc + wnnc*Innc + > wppn*Ippn + wcpn*Icpn + wnpn*Inpn + > wpcn*Ipcn + wccn*Iccn + wncn*Incn + > wpnn*Ipnn + wcnn*Icnn + wnnn*Innn)/(float)sumw); > } > _nmask(x,y,z) = 0; > } > break; > > case 2: { > T J[6]; > for (int z = 0, _p1z = 0, _n1z = 1>=((_mask)._depth)?(int)((_mask)._depth)-1:1; _n1z<(int)((_mask)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,_p1z,0)), (M[3] = M[4] = (t)(_mask)(0,y,_p1z,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,_p1z,0)), (M[9] = M[10] = (t)(_mask)(0,_p1y,z,0)), (M[12] = M[13] = (t)(_mask)(0,y,z,0)), (M[15] = M[16] = (t)(_mask)(0,_n1y,z,0)), (M[18] = M[19] = (t)(_mask)(0,_p1y,_n1z,0)), (M[21] = M[22] = (t)(_mask)(0,y,_n1z,0)), (M[24] = M[25] = (t)(_mask)(0,_n1y,_n1z,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,_p1z,0)), (M[5] = (t)(_mask)(_n1x,y,_p1z,0)), (M[8] = (t)(_mask)(_n1x,_n1y,_p1z,0)), (M[11] = (t)(_mask)(_n1x,_p1y,z,0)), (M[14] = (t)(_mask)(_n1x,y,z,0)), (M[17] = (t)(_mask)(_n1x,_n1y,z,0)), (M[20] = (t)(_mask)(_n1x,_p1y,_n1z,0)), (M[23] = (t)(_mask)(_n1x,y,_n1z,0)), (M[26] = (t)(_mask)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], M[9] = M[10], M[10] = M[11], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[18] = M[19], M[19] = M[20], M[21] = M[22], M[22] = M[23], M[24] = M[25], M[25] = M[26], _p1x = x++, ++_n1x) > if (Mccc && (!Mccp || !Mcpc || !Mpcc || !Mncc || !Mcnc || !Mccn)) { > is_pixel = true; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,_p1z,k), I[1] = (T)(*this)(x,_p1y,_p1z,k), I[2] = (T)(*this)(_n1x,_p1y,_p1z,k), I[3] = (T)(*this)(_p1x,y,_p1z,k), I[4] = (T)(*this)(x,y,_p1z,k), I[5] = (T)(*this)(_n1x,y,_p1z,k), I[6] = (T)(*this)(_p1x,_n1y,_p1z,k), I[7] = (T)(*this)(x,_n1y,_p1z,k), I[8] = (T)(*this)(_n1x,_n1y,_p1z,k), I[9] = (T)(*this)(_p1x,_p1y,z,k), I[10] = (T)(*this)(x,_p1y,z,k), I[11] = (T)(*this)(_n1x,_p1y,z,k), I[12] = (T)(*this)(_p1x,y,z,k), I[13] = (T)(*this)(x,y,z,k), I[14] = (T)(*this)(_n1x,y,z,k), I[15] = (T)(*this)(_p1x,_n1y,z,k), I[16] = (T)(*this)(x,_n1y,z,k), I[17] = (T)(*this)(_n1x,_n1y,z,k), I[18] = (T)(*this)(_p1x,_p1y,_n1z,k), I[19] = (T)(*this)(x,_p1y,_n1z,k), I[20] = (T)(*this)(_n1x,_p1y,_n1z,k), I[21] = (T)(*this)(_p1x,y,_n1z,k), I[22] = (T)(*this)(x,y,_n1z,k), I[23] = (T)(*this)(_n1x,y,_n1z,k), I[24] = (T)(*this)(_p1x,_n1y,_n1z,k), I[25] = (T)(*this)(x,_n1y,_n1z,k), I[26] = (T)(*this)(_n1x,_n1y,_n1z,k); > unsigned int ind = 0; > if (!Mccp) J[ind++] = Iccp; if (!Mcpc) J[ind++] = Icpc; if (!Mpcc) J[ind++] = Ipcc; > if (!Mncc) J[ind++] = Incc; if (!Mcnc) J[ind++] = Icnc; if (!Mccn) J[ind++] = Iccn; > (*this)(x,y,z,k) = CImg<T>(J,ind,1,1,1,true).kth_smallest(ind>>1); > } > _nmask(x,y,z) = 0; > } > } break; > > default: { > T J[26]; > for (int z = 0, _p1z = 0, _n1z = 1>=((_mask)._depth)?(int)((_mask)._depth)-1:1; _n1z<(int)((_mask)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,_p1z,0)), (M[3] = M[4] = (t)(_mask)(0,y,_p1z,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,_p1z,0)), (M[9] = M[10] = (t)(_mask)(0,_p1y,z,0)), (M[12] = M[13] = (t)(_mask)(0,y,z,0)), (M[15] = M[16] = (t)(_mask)(0,_n1y,z,0)), (M[18] = M[19] = (t)(_mask)(0,_p1y,_n1z,0)), (M[21] = M[22] = (t)(_mask)(0,y,_n1z,0)), (M[24] = M[25] = (t)(_mask)(0,_n1y,_n1z,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,_p1z,0)), (M[5] = (t)(_mask)(_n1x,y,_p1z,0)), (M[8] = (t)(_mask)(_n1x,_n1y,_p1z,0)), (M[11] = (t)(_mask)(_n1x,_p1y,z,0)), (M[14] = (t)(_mask)(_n1x,y,z,0)), (M[17] = (t)(_mask)(_n1x,_n1y,z,0)), (M[20] = (t)(_mask)(_n1x,_p1y,_n1z,0)), (M[23] = (t)(_mask)(_n1x,y,_n1z,0)), (M[26] = (t)(_mask)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], M[9] = M[10], M[10] = M[11], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[18] = M[19], M[19] = M[20], M[21] = M[22], M[22] = M[23], M[24] = M[25], M[25] = M[26], _p1x = x++, ++_n1x) > if (Mccc && (!Mppp || !Mcpp || !Mnpp || !Mpcp || !Mccp || !Mncp || !Mpnp || !Mcnp || > !Mnnp || !Mppc || !Mcpc || !Mnpc || !Mpcc || !Mncc || !Mpnc || !Mcnc || > !Mnnc || !Mppn || !Mcpn || !Mnpn || !Mpcn || !Mccn || !Mncn || !Mpnn || > !Mcnn || !Mnnn)) { > is_pixel = true; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,_p1z,k), I[1] = (T)(*this)(x,_p1y,_p1z,k), I[2] = (T)(*this)(_n1x,_p1y,_p1z,k), I[3] = (T)(*this)(_p1x,y,_p1z,k), I[4] = (T)(*this)(x,y,_p1z,k), I[5] = (T)(*this)(_n1x,y,_p1z,k), I[6] = (T)(*this)(_p1x,_n1y,_p1z,k), I[7] = (T)(*this)(x,_n1y,_p1z,k), I[8] = (T)(*this)(_n1x,_n1y,_p1z,k), I[9] = (T)(*this)(_p1x,_p1y,z,k), I[10] = (T)(*this)(x,_p1y,z,k), I[11] = (T)(*this)(_n1x,_p1y,z,k), I[12] = (T)(*this)(_p1x,y,z,k), I[13] = (T)(*this)(x,y,z,k), I[14] = (T)(*this)(_n1x,y,z,k), I[15] = (T)(*this)(_p1x,_n1y,z,k), I[16] = (T)(*this)(x,_n1y,z,k), I[17] = (T)(*this)(_n1x,_n1y,z,k), I[18] = (T)(*this)(_p1x,_p1y,_n1z,k), I[19] = (T)(*this)(x,_p1y,_n1z,k), I[20] = (T)(*this)(_n1x,_p1y,_n1z,k), I[21] = (T)(*this)(_p1x,y,_n1z,k), I[22] = (T)(*this)(x,y,_n1z,k), I[23] = (T)(*this)(_n1x,y,_n1z,k), I[24] = (T)(*this)(_p1x,_n1y,_n1z,k), I[25] = (T)(*this)(x,_n1y,_n1z,k), I[26] = (T)(*this)(_n1x,_n1y,_n1z,k); > unsigned int ind = 0; > if (!Mppp) J[ind++] = Ippp; if (!Mcpp) J[ind++] = Icpp; if (!Mnpp) J[ind++] = Inpp; > if (!Mpcp) J[ind++] = Ipcp; if (!Mccp) J[ind++] = Iccp; if (!Mncp) J[ind++] = Incp; > if (!Mpnp) J[ind++] = Ipnp; if (!Mcnp) J[ind++] = Icnp; if (!Mnnp) J[ind++] = Innp; > if (!Mppc) J[ind++] = Ippc; if (!Mcpc) J[ind++] = Icpc; if (!Mnpc) J[ind++] = Inpc; > if (!Mpcc) J[ind++] = Ipcc; if (!Mncc) J[ind++] = Incc; > if (!Mpnc) J[ind++] = Ipnc; if (!Mcnc) J[ind++] = Icnc; if (!Mnnc) J[ind++] = Innc; > if (!Mppn) J[ind++] = Ippn; if (!Mcpn) J[ind++] = Icpn; if (!Mnpn) J[ind++] = Inpn; > if (!Mpcn) J[ind++] = Ipcn; if (!Mccn) J[ind++] = Iccn; if (!Mncn) J[ind++] = Incn; > if (!Mpnn) J[ind++] = Ipnn; if (!Mcnn) J[ind++] = Icnn; if (!Mnnn) J[ind++] = Innn; > (*this)(x,y,z,k) = CImg<T>(J,ind,1,1,1,true).kth_smallest(ind>>1); > } > _nmask(x,y,z) = 0; > } > } break; > } > } > > _mask = _nmask; > } while (is_pixel); > return *this; >} > >template<typename t> >CImg<T> get_inpaint(const CImg<t>& mask, const unsigned int method=1) const { > return (+*this).inpaint(mask,method); >} > >template<typename t> >CImg<T>& inpaint_patch(const CImg<t>& mask, const unsigned int patch_size=11, > const unsigned int lookup_size=22, const float lookup_factor=1, > const int lookup_increment=1, > const unsigned int blend_size=0, const float blend_threshold=0.5f, > const float blend_decay=0.02, const unsigned int blend_scales=10, > const bool is_blend_outer=false) { > if (depth()>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch(): Instance image is volumetric (should be 2d).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!is_sameXYZ(mask)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Sizes of instance image and specified mask " > "(%u,%u,%u,%u) do not match.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > mask._width,mask._height,mask._depth,mask._spectrum); > if (!patch_size) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified patch size is 0, must be strictly " > "positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!lookup_size) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified lookup size is 0, must be strictly " > "positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (lookup_factor<0) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified lookup factor %g is negative, must be " > "positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > lookup_factor); > if (!lookup_increment) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified lookup increment is 0, must be " > "strictly positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (blend_decay<0) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified blend decay %g is negative, must be " > "positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > blend_decay); > > > unsigned int xm0 = _width, ym0 = _height, xm1 = 0, ym1 = 0; > bool is_mask_found = false; > for (int y = 0; y<(int)((mask)._height); ++y) for (int x = 0; x<(int)((mask)._width); ++x) if (mask(x,y)) { > is_mask_found = true; > if (x<(int)xm0) xm0 = (unsigned int)x; > if (x>(int)xm1) xm1 = (unsigned int)x; > if (y<(int)ym0) ym0 = (unsigned int)y; > if (y>(int)ym1) ym1 = (unsigned int)y; > } > if (!is_mask_found) return *this; > xm0 = xm0>2?xm0-2:0; > ym0 = ym0>2?ym0-2:0; > xm1 = xm1<_width-3?xm1+2:_width-1; > ym1 = ym1<_height-3?ym1+2:_height-1; > int ox = xm0, oy = ym0; > unsigned int dx = xm1 - xm0 + 1U, dy = ym1 - ym0 + 1U; > > > CImg<ucharT> nmask(dx,dy); > unsigned char *ptrM = nmask.data(); > for (int y = (int)(ym0)<0?0:(int)(ym0), _maxy = (int)(ym1)<(int)((mask)._height)?(int)(ym1):(int)((mask)._height)-1; y<=_maxy; ++y) for (int x = (int)(xm0)<0?0:(int)(xm0), _maxx = (int)(xm1)<(int)((mask)._width)?(int)(xm1):(int)((mask)._width)-1; x<=_maxx; ++x) *(ptrM++) = mask(x,y)?0:1; > xm0 = ym0 = 0; xm1 = dx - 1; ym1 = dy - 1; > > > const int p2 = (int)patch_size/2, p1 = (int)patch_size - p2 - 1; > const unsigned int patch_size2 = patch_size*patch_size; > unsigned int _lookup_size = lookup_size, nb_lookups = 0, nb_fails = 0, nb_saved_patches = 0; > bool is_strict_search = true; > const float one = 1; > > CImg<floatT> confidences(nmask), priorities(dx,dy,1,2,-1), pC; > CImg<unsigned int> saved_patches(4,256), is_visited(width(),height(),1,1,0); > CImg<ucharT> pM, pN; > CImg<T> pP, pbest; > CImg<floatT> weights(patch_size,patch_size,1,1,0); > weights.draw_gaussian((float)p1,(float)p1,patch_size/15.0f,&one)/=patch_size2; > unsigned int target_index = 0; > > while (true) { > > > unsigned int nb_border_points = 0; > float target_confidence = -1, target_priority = -1; > int target_x = -1, target_y = -1; > unsigned char M[25]; unsigned char& Mbb = M[0]; unsigned char& Mpb = M[1]; unsigned char& Mcb = M[2]; unsigned char& Mnb = M[3]; unsigned char& Mab = M[4]; unsigned char& Mbp = M[5]; unsigned char& Mpp = M[6]; unsigned char& Mcp = M[7]; unsigned char& Mnp = M[8]; unsigned char& Map = M[9]; unsigned char& Mbc = M[10]; unsigned char& Mpc = M[11]; unsigned char& Mcc = M[12]; unsigned char& Mnc = M[13]; unsigned char& Mac = M[14]; unsigned char& Mbn = M[15]; unsigned char& Mpn = M[16]; unsigned char& Mcn = M[17]; unsigned char& Mnn = M[18]; unsigned char& Man = M[19]; unsigned char& Mba = M[20]; unsigned char& Mpa = M[21]; unsigned char& Mca = M[22]; unsigned char& Mna = M[23]; unsigned char& Maa = M[24]; Mbb = Mpb = Mcb = Mnb = Mab = Mbp = Mpp = Mcp = Mnp = Map = Mbc = Mpc = Mcc = Mnc = Mac = Mbn = Mpn = Mcn = Mnn = Man = Mba = Mpa = Mca = Mna = Maa = 0; > > for (int y = (int)(ym0)<0?0:(int)(ym0), _p2y = y-2<0?0:y-2, _p1y = y-1<0?0:y-1, _n1y = y+1>=(int)((nmask)._height)?(int)((nmask)._height)-1:y+1, _n2y = y+2>=(int)((nmask)._height)?(int)((nmask)._height)-1:y+2; y<=(int)(ym1) && (_n2y<(int)((nmask)._height) || _n1y==--_n2y || y==(_n2y = --_n1y)); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = (int)(xm0)<0?0:(int)(xm0), _p2x = x-2<0?0:x-2, _p1x = x-1<0?0:x-1, _n1x = x+1>=(int)(nmask)._width?(nmask).width()-1:x+1, _n2x = (int)( (M[0] = (unsigned char)(nmask)(_p2x,_p2y,0,0)), (M[5] = (unsigned char)(nmask)(_p2x,_p1y,0,0)), (M[10] = (unsigned char)(nmask)(_p2x,y,0,0)), (M[15] = (unsigned char)(nmask)(_p2x,_n1y,0,0)), (M[20] = (unsigned char)(nmask)(_p2x,_n2y,0,0)), (M[1] = (unsigned char)(nmask)(_p1x,_p2y,0,0)), (M[6] = (unsigned char)(nmask)(_p1x,_p1y,0,0)), (M[11] = (unsigned char)(nmask)(_p1x,y,0,0)), (M[16] = (unsigned char)(nmask)(_p1x,_n1y,0,0)), (M[21] = (unsigned char)(nmask)(_p1x,_n2y,0,0)), (M[2] = (unsigned char)(nmask)(x,_p2y,0,0)), (M[7] = (unsigned char)(nmask)(x,_p1y,0,0)), (M[12] = (unsigned char)(nmask)(x,y,0,0)), (M[17] = (unsigned char)(nmask)(x,_n1y,0,0)), (M[22] = (unsigned char)(nmask)(x,_n2y,0,0)), (M[3] = (unsigned char)(nmask)(_n1x,_p2y,0,0)), (M[8] = (unsigned char)(nmask)(_n1x,_p1y,0,0)), (M[13] = (unsigned char)(nmask)(_n1x,y,0,0)), (M[18] = (unsigned char)(nmask)(_n1x,_n1y,0,0)), (M[23] = (unsigned char)(nmask)(_n1x,_n2y,0,0)), x+2>=(int)(nmask)._width?(nmask).width()-1:x+2); x<=(int)(xm1) && ((_n2x<(nmask).width() && ( (M[4] = (unsigned char)(nmask)(_n2x,_p2y,0,0)), (M[9] = (unsigned char)(nmask)(_n2x,_p1y,0,0)), (M[14] = (unsigned char)(nmask)(_n2x,y,0,0)), (M[19] = (unsigned char)(nmask)(_n2x,_n1y,0,0)), (M[24] = (unsigned char)(nmask)(_n2x,_n2y,0,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x)); M[0] = M[1], M[1] = M[2], M[2] = M[3], M[3] = M[4], M[5] = M[6], M[6] = M[7], M[7] = M[8], M[8] = M[9], M[10] = M[11], M[11] = M[12], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[17] = M[18], M[18] = M[19], M[20] = M[21], M[21] = M[22], M[22] = M[23], M[23] = M[24], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) > if (!Mcc && (Mcp || Mcn || Mpc || Mnc)) { > > float confidence_term = -1, data_term = -1; > if (priorities(x,y)>=0) { > confidence_term = priorities(x,y,0); > data_term = priorities(x,y,1); > } else { > > > const float > > Npc = (4.0f*Mpc + 2.0f*Mbc + 2.0f*Mcc + 2.0f*Mpp + 2.0f*Mpn + Mbp + Mbn + Mcp + Mcn)/16, > Nnc = (4.0f*Mnc + 2.0f*Mac + 2.0f*Mcc + 2.0f*Mnp + 2.0f*Mnn + Map + Man + Mcp + Mcn)/16, > Ncp = (4.0f*Mcp + 2.0f*Mcb + 2.0f*Mcc + 2.0f*Mpp + 2.0f*Mnp + Mpb + Mnb + Mpc + Mnc)/16, > Ncn = (4.0f*Mcn + 2.0f*Mca + 2.0f*Mcc + 2.0f*Mpn + 2.0f*Mnn + Mpa + Mna + Mpc + Mnc)/16, > _nx = 0.5f*(Nnc - Npc), > _ny = 0.5f*(Ncn - Ncp), > nn = std::sqrt(1e-8f + _nx*_nx + _ny*_ny), > nx = _nx/nn, > ny = _ny/nn; > > > nmask._inpaint_patch_crop(x-p1,y-p1,x+p2,y+p2,1).move_to(pM); > confidences._inpaint_patch_crop(x-p1,y-p1,x+p2,y+p2,1).move_to(pC); > confidence_term = 0; > const unsigned char *ptrM = pM.data(); > for (float *ptrC = (pC)._data, *_maxptrC = (pC)._data + (pC).size(); ptrC<_maxptrC; ++ptrC) confidence_term+=*ptrC**(ptrM++); > confidence_term/=patch_size2; > priorities(x,y,0) = confidence_term; > > > _inpaint_patch_crop(ox+x-p1,oy+y-p1,ox+x+p2,oy+y+p2,2).move_to(pP); > float mean_ix2 = 0, mean_ixiy = 0, mean_iy2 = 0; > > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > unsigned char _M[9]; unsigned char& _Mpp = _M[0]; unsigned char& _Mcp = _M[1]; unsigned char& _Mnp = _M[2]; unsigned char& _Mpc = _M[3]; unsigned char& _Mcc = _M[4]; unsigned char& _Mnc = _M[5]; unsigned char& _Mpn = _M[6]; unsigned char& _Mcn = _M[7]; unsigned char& _Mnn = _M[8]; _Mpp = _Mcp = _Mnp = _Mpc = _Mcc = _Mnc = _Mpn = _Mcn = _Mnn = 0; > for (int c = 0; c<(int)((pP)._spectrum); ++c) for (int q = 0, _p1q = 0, _n1q = 1>=((pP)._height)?(int)((pP)._height)-1:1; _n1q<(int)((pP)._height) || q==--_n1q; _p1q = q++, ++_n1q) for (int p = 0, _p1p = 0, _n1p = (int)( (I[0] = I[1] = (T)(pP)(_p1p,_p1q,0,c)), (I[3] = I[4] = (T)(pP)(0,q,0,c)), (I[6] = I[7] = (T)(pP)(0,_n1q,0,c)), 1>=(pP)._width?(pP).width()-1:1); (_n1p<(pP).width() && ( (I[2] = (T)(pP)(_n1p,_p1q,0,c)), (I[5] = (T)(pP)(_n1p,q,0,c)), (I[8] = (T)(pP)(_n1p,_n1q,0,c)),1)) || p==--_n1p; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1p = p++, ++_n1p) { > > _M[0] = (unsigned char)(pM)(_p1p,_p1q,0,0), _M[1] = (unsigned char)(pM)(p,_p1q,0,0), _M[2] = (unsigned char)(pM)(_n1p,_p1q,0,0), _M[3] = (unsigned char)(pM)(_p1p,q,0,0), _M[4] = (unsigned char)(pM)(p,q,0,0), _M[5] = (unsigned char)(pM)(_n1p,q,0,0), _M[6] = (unsigned char)(pM)(_p1p,_n1q,0,0), _M[7] = (unsigned char)(pM)(p,_n1q,0,0), _M[8] = (unsigned char)(pM)(_n1p,_n1q,0,0); > const float > ixf = (float)(_Mnc*_Mcc*(Inc-Icc)), > iyf = (float)(_Mcn*_Mcc*(Icn-Icc)), > ixb = (float)(_Mcc*_Mpc*(Icc-Ipc)), > iyb = (float)(_Mcc*_Mcp*(Icc-Icp)), > ix = cimg::abs(ixf)>cimg::abs(ixb)?ixf:ixb, > iy = cimg::abs(iyf)>cimg::abs(iyb)?iyf:iyb, > w = weights(p,q); > mean_ix2 += w*ix*ix; > mean_ixiy += w*ix*iy; > mean_iy2 += w*iy*iy; > } > const float > ux = mean_ix2*(-ny) + mean_ixiy*nx, > uy = mean_ixiy*(-ny) + mean_iy2*nx; > data_term = std::sqrt(ux*ux + uy*uy); > priorities(x,y,1) = data_term; > } > const float priority = confidence_term*data_term; > if (priority>target_priority) { > target_priority = priority; target_confidence = confidence_term; > target_x = ox + x; target_y = oy + y; > } > ++nb_border_points; > } > if (!nb_border_points) break; > > > CImg<unsigned int> lookup_candidates(2,256); > unsigned int nb_lookup_candidates = 0, *ptr_lookup_candidates = lookup_candidates.data(); > const unsigned int *ptr_saved_patches = saved_patches.data(); > const int > x0 = target_x - (int)patch_size, y0 = target_y - (int)patch_size, > x1 = target_x + (int)patch_size, y1 = target_y + (int)patch_size; > for (unsigned int k = 0; k<nb_saved_patches; ++k) { > const unsigned int > src_x = *(ptr_saved_patches++), src_y = *(ptr_saved_patches++), > dest_x = *(ptr_saved_patches++), dest_y = *(ptr_saved_patches++); > if ((int)dest_x>=x0 && (int)dest_y>=y0 && (int)dest_x<=x1 && (int)dest_y<=y1) { > const int off_x = target_x - dest_x, off_y = target_y - dest_y; > *(ptr_lookup_candidates++) = src_x + off_x; > *(ptr_lookup_candidates++) = src_y + off_y; > if (++nb_lookup_candidates>=lookup_candidates._height) > lookup_candidates.resize(2,-200,1,1,0); > } > } > > *(ptr_lookup_candidates++) = target_x; > *(ptr_lookup_candidates++) = target_y; > ++nb_lookup_candidates; > > > unsigned int final_lookup_size = _lookup_size; > if (nb_lookup_candidates>1) { > const unsigned int > _final_lookup_size = (unsigned int)cimg::round(_lookup_size*lookup_factor/ > std::sqrt((float)nb_lookup_candidates),1,1); > final_lookup_size = _final_lookup_size + 1 - (_final_lookup_size%2); > } > const int l2 = (int)final_lookup_size/2, l1 = (int)final_lookup_size - l2 - 1; ># 1557 "./gmic.cpp" > _inpaint_patch_crop(target_x-p1,target_y-p1,target_x+p2,target_y+p2,0).move_to(pP); > nmask._inpaint_patch_crop(target_x-ox-p1,target_y-oy-p1,target_x-ox+p2,target_y-oy+p2,0). > move_to(pM); > ++target_index; > const unsigned int > _lookup_increment = (unsigned int)(lookup_increment>0?lookup_increment: > nb_lookup_candidates>1?1:-lookup_increment); > float best_ssd = cimg::type<float>::max(); > int best_x = -1, best_y = -1; > for (unsigned int C = 0; C<nb_lookup_candidates; ++C) { > const int > xl = (int)lookup_candidates(0,C), > yl = (int)lookup_candidates(1,C), > x0 = cimg::max(p1,xl-l1), y0 = cimg::max(p1,yl-l1), > x1 = cimg::min(width()-1-p2,xl+l2), y1 = cimg::min(height()-1-p2,yl+l2); > for (int y = y0; y<=y1; y+=_lookup_increment) > for (int x = x0; x<=x1; x+=_lookup_increment) if (is_visited(x,y)!=target_index) { > if (is_strict_search) mask._inpaint_patch_crop(x-p1,y-p1,x+p2,y+p2,1).move_to(pN); > else nmask._inpaint_patch_crop(x-ox-p1,y-oy-p1,x-ox+p2,y-oy+p2,0).move_to(pN); > if ((is_strict_search && pN.sum()==0) || (!is_strict_search && pN.sum()==patch_size2)) { > _inpaint_patch_crop(x-p1,y-p1,x+p2,y+p2,0).move_to(pC); > float ssd = 0; > const T *_pP = pP._data; > const float *_pC = pC._data; > for (unsigned char *_pM = (pM)._data, *_max_pM = (pM)._data + (pM).size(); _pM<_max_pM; ++_pM) { if (*_pM) { > for (int c = 0; c<(int)((pC)._spectrum); ++c) { > ssd+=cimg::sqr((Tfloat)*_pC-(Tfloat)*_pP); _pC+=patch_size2; _pP+=patch_size2; > } > if (ssd>=best_ssd) break; > _pC-=pC._spectrum*patch_size2; > _pP-=pC._spectrum*patch_size2; > } > ++_pC; ++_pP; > } > if (ssd<best_ssd) { best_ssd = ssd; best_x = x; best_y = y; } > } > is_visited(x,y) = target_index; > } > } > > if (best_x<0) { > priorities(target_x-ox,target_y-oy,0)/=10; > if (++nb_fails>=4) { > nb_fails = 0; > _lookup_size+=_lookup_size/2; > if (++nb_lookups>=3) { > if (is_strict_search) { > is_strict_search = false; > _lookup_size = lookup_size; > nb_lookups = 0; > } > else return *this; > } > } > } else { > _lookup_size = lookup_size; > nb_lookups = nb_fails = 0; > _inpaint_patch_crop(best_x-p1,best_y-p1,best_x+p2,best_y+p2,0).move_to(pbest); > nmask._inpaint_patch_crop(target_x-ox-p1,target_y-oy-p1,target_x-ox+p2,target_y-oy+p2,1). > move_to(pM); > for (unsigned char *ptr = (pM)._data, *_maxptr = (pM)._data + (pM).size(); ptr<_maxptr; ++ptr) *ptr=1-*ptr; > draw_image(target_x-p1,target_y-p1,pbest,pM,1,1); > confidences.draw_image(target_x-ox-p1,target_y-oy-p1,pC.fill(target_confidence),pM,1,1); > nmask.draw_rectangle(target_x-ox-p1,target_y-oy-p1,0,0,target_x-ox+p2,target_y-oy+p2,0,0,1); > priorities.draw_rectangle(target_x-ox-(int)patch_size, > target_y-oy-(int)patch_size,0,0, > target_x-ox+3*p2/2, > target_y-oy+3*p2/2,0,0,-1); > > unsigned int *ptr_saved_patches = saved_patches.data(0,nb_saved_patches); > *(ptr_saved_patches++) = best_x; > *(ptr_saved_patches++) = best_y; > *(ptr_saved_patches++) = target_x; > *ptr_saved_patches = target_y; > if (++nb_saved_patches>=saved_patches._height) saved_patches.resize(4,-200,1,1,0); > } > } > nmask.assign(); > priorities.assign(); > confidences.assign(); > is_visited.assign(); > > > if (blend_size && blend_scales) { > const float _blend_threshold = cimg::max(0.0f,cimg::min(1.0f,blend_threshold)); > saved_patches._height = nb_saved_patches; > > > if (is_blend_outer) { > const int > b2 = (int)blend_size/2, b1 = (int)blend_size - b2 - 1, > xb0 = cimg::max(0,ox-b1), > yb0 = cimg::max(0,oy-b1), > xb1 = cimg::min(_width-1,xb0 + dx + b1 + b2), > yb1 = cimg::min(_height-1,yb0 + dy + b1 + b2); > ox = xb0; oy = yb0; dx = xb1 - xb0 + 1U, dy = yb1 - yb0 + 1U; > } > > > CImg<unsigned int> offsets(dx,dy,1,2); > unsigned int *ptr = saved_patches.end(); > for (int i = 0; i<(int)((saved_patches)._height); ++i) { > const unsigned int yd = *(--ptr), xd = *(--ptr), ys = *(--ptr), xs = *(--ptr); > for (int l=-p1; l<=p2; ++l) > for (int k=-p1; k<=p2; ++k) { > const int xdk = xd+k, ydl = yd+l; > if (xdk>=0 && xdk<=width()-1 && ydl>=0 && ydl<=height()-1 && mask(xd+k,yd+l)) { > offsets(xd-ox+k,yd-oy+l,0) = xs+k; > offsets(xd-ox+k,yd-oy+l,1) = ys+l; > } > } > } > unsigned int *ptrx = offsets.data(0,0,0,0), *ptry = offsets.data(0,0,0,1); > for (int y = 0; y<(int)((offsets)._height); ++y) for (int x = 0; x<(int)((offsets)._width); ++x) { > if (!mask(x+ox,y+oy)) { *ptrx = x+ox; *ptry = y+oy; } > ++ptrx; ++ptry; > } > > > CImg<floatT> blend_map(dx,dy,1,1,0); > float I[9]; float& Ipp = I[0]; float& Icp = I[1]; float& Inp = I[2]; float& Ipc = I[3]; float& Icc = I[4]; float& Inc = I[5]; float& Ipn = I[6]; float& Icn = I[7]; float& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((offsets)._height)?(int)((offsets)._height)-1:1; _n1y<(int)((offsets)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((offsets)._width)?(int)((offsets)._width)-1:1; _n1x<(int)((offsets)._width) || x==--_n1x; _p1x = x++, ++_n1x) if (mask(x+ox,y+oy)) { > const float > iox = cimg::max((float)offsets(_n1x,y,0)-offsets(x,y,0), > (float)offsets(x,y,0)-offsets(_p1x,y,0)), > ioy = cimg::max((float)offsets(x,_n1y,1)-offsets(x,y,1), > (float)offsets(x,y,1)-offsets(x,_p1y,1)), > ion = std::sqrt(iox*iox+ioy*ioy); > float iin = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > I[0] = (float)(*this)(_p1x,_p1y,0,c), I[1] = (float)(*this)(x,_p1y,0,c), I[2] = (float)(*this)(_n1x,_p1y,0,c), I[3] = (float)(*this)(_p1x,y,0,c), I[4] = (float)(*this)(x,y,0,c), I[5] = (float)(*this)(_n1x,y,0,c), I[6] = (float)(*this)(_p1x,_n1y,0,c), I[7] = (float)(*this)(x,_n1y,0,c), I[8] = (float)(*this)(_n1x,_n1y,0,c); > const float > iix = (float)cimg::max(Inc-Icc,Icc-Ipc), > iiy = (float)cimg::max(Icn-Icc,Icc-Icp); > iin+=std::log(1+iix*iix+iiy*iiy); > } > iin/=_spectrum; > blend_map(x,y) = ion*iin; > } > blend_map.threshold(blend_map.max()*_blend_threshold).distance(1); > for (int y = 0; y<(int)((blend_map)._height); ++y) for (int x = 0; x<(int)((blend_map)._width); ++x) blend_map(x,y) = 1/(1+blend_decay*blend_map(x,y)); > blend_map.quantize(blend_scales+1,false); > float bm, bM = blend_map.max_min(bm); > if (bm==bM) blend_map.fill((float)blend_scales); > > > CImg<T> result = _inpaint_patch_crop(ox,oy,ox+dx-1,oy+dy-1,0); > for (unsigned int blend_iter = 1; blend_iter<=blend_scales; ++blend_iter) { > const unsigned int > _blend_width = blend_iter*blend_size/blend_scales, > blend_width = _blend_width?_blend_width+1-(_blend_width%2):0; > if (!blend_width) continue; > const int b2 = (int)blend_width/2, b1 = (int)blend_width - b2 - 1; > CImg<floatT> > blended = _inpaint_patch_crop(ox,oy,ox+dx-1,oy+dy-1,0), > cumul(dx,dy,1,1); > weights.assign(blend_width,blend_width,1,1,0). > draw_gaussian((float)b1,(float)b1,blend_width/4.0f,&one); > for (int y = 0; y<(int)((cumul)._height); ++y) for (int x = 0; x<(int)((cumul)._width); ++x) cumul(x,y) = mask(x+ox,y+oy)?0.0f:1.0f; > blended.mul(cumul); > > for (int l = 0; l<(int)((saved_patches)._height); ++l) { > const unsigned int *ptr = saved_patches.data(0,l); > const int > xs = (int)*(ptr++), > ys = (int)*(ptr++), > xd = (int)*(ptr++), > yd = (int)*(ptr++); > if (xs-b1<0 || ys-b1<0 || xs+b2>=width() || ys+b2>=height()) { > const int > xs0 = cimg::max(0,xs - b1), > ys0 = cimg::max(0,ys - b1), > xs1 = cimg::min(width()-1,xs + b2), > ys1 = cimg::min(height()-1,ys + b2); > _inpaint_patch_crop(xs0,ys0,xs1,ys1,0).move_to(pP); > weights._inpaint_patch_crop(xs0-xs+b1,ys0-ys+b1,xs1-xs+b1,ys1-ys+b1,0).move_to(pC); > blended.draw_image(xd+xs0-xs-ox,yd+ys0-ys-oy,pP,pC,-1); > cumul.draw_image(xd+xs0-xs-ox,yd+ys0-ys-oy,pC,-1); > } else { > _inpaint_patch_crop(xs-b1,ys-b1,xs+b2,ys+b2,0).move_to(pP); > blended.draw_image(xd-b1-ox,yd-b1-oy,pP,weights,-1); > cumul.draw_image(xd-b1-ox,yd-b1-oy,weights,-1); > } > } > > if (is_blend_outer) { > for (int y = 0; y<(int)((blended)._height); ++y) for (int x = 0; x<(int)((blended)._width); ++x) if (blend_map(x,y)==blend_iter) { > const float cum = cumul(x,y); > if (cum>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) result(x,y,c) = (T)(blended(x,y,c)/cum); > } > } else { for (int y = 0; y<(int)((blended)._height); ++y) for (int x = 0; x<(int)((blended)._width); ++x) if (mask(x+ox,y+oy) && blend_map(x,y)==blend_iter) { > const float cum = cumul(x,y); > if (cum>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) result(x,y,c) = (T)(blended(x,y,c)/cum); > } > } > } > if (is_blend_outer) draw_image(ox,oy,result); > else for (int y = 0; y<(int)((result)._height); ++y) for (int x = 0; x<(int)((result)._width); ++x) if (mask(x+ox,y+oy)) > for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x+ox,y+oy,c) = (T)result(x,y,c); > } > return *this; >} > > > >CImg<T> _inpaint_patch_crop(const int x0, const int y0, const int x1, const int y1, > const unsigned int boundary=0) const { > const int > nx0 = x0<x1?x0:x1, nx1 = x0^x1^nx0, > ny0 = y0<y1?y0:y1, ny1 = y0^y1^ny0; > CImg<T> res(1U + nx1 - nx0,1U + ny1 - ny0,1,_spectrum); > if (nx0<0 || nx1>=width() || ny0<0 || ny1>=height()) { > if (boundary>=2) for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) res(x,y,z,c) = _atXY(nx0+x,ny0+y,z,c); > else res.fill((T)boundary).draw_image(-nx0,-ny0,*this); > } else res.draw_image(-nx0,-ny0,*this); > return res; >} > >template<typename t> >CImg<T> get_inpaint_patch(const CImg<t>& mask, const unsigned int patch_size=11, > const unsigned int lookup_size=22, const float lookup_factor=1, > const int lookup_increment=1, > const unsigned int blend_size=0, const float blend_threshold=0.5, > const float blend_decay=0.02f, const unsigned int blend_scales=10, > const bool is_blend_outer=false) const { > return (+*this).inpaint_patch(mask,patch_size,lookup_size,lookup_factor,lookup_increment, > blend_size,blend_threshold,blend_decay,blend_scales,is_blend_outer); >} > > > >CImg<T>& mark() { > unsigned int siz = _width; > if (siz<2) assign(siz=2,1,1,1,0); else if (_data[siz-2]) resize(++siz,1,1,1,0); > T &last = _data[siz-1]; > if (last<cimg::type<T>::max()) ++last; > return *this; >} > >CImg<T> get_mark() const { > return (+*this).mark(); >} > >CImg<T>& copymark() { > return get_copymark().move_to(*this); >} > >CImg<T> get_copymark() const { > if (is_empty()) return CImg<T>::string("~"); > CImg<T> res = get_resize(_width+1,1,1,1,0); > const char *const ext = cimg::split_filename(_data); > if (*ext) { > const int l = (int)(ext - _data - 1); > if (l>0) { > if (_data[l-1]=='~') return +*this; > std::memcpy(res._data,_data,l); > } > res[l] = '~'; res[l+1] = '.'; > std::memcpy(res._data+l+2,ext,_data+_width-ext); > } else { > const unsigned int l = (int)(ext - _data); > if (_data[l-1]=='~' || (l>1 && _data[l-1]==']' && _data[l-2]=='~')) return +*this; > std::memcpy(res._data,_data,l); > res[l] = '~'; > if (ext>_data && *(ext-1)==']') cimg::swap(res[l],res[l-1]); > std::memcpy(res._data+l+1,ext,_data+_width-ext); > } > return res; >} > >const CImg<T>& gmic_print(const char *const title, const bool is_debug, > const bool is_valid) const { > CImg<doubleT> st; > if (is_valid && !is_empty()) st = get_stats(); > const unsigned long siz = size(), msiz = _is_shared?0:siz*sizeof(T), siz1 = siz-1, > mdisp = msiz<8*1024?0:(msiz<8*1024*1024?1:2), > wh = _width*_height, whd = _width*_height*_depth, > w1 = _width-1, wh1 = _width*_height-1, whd1 = _width*_height*_depth-1; > > std::fprintf(cimg::output(),"%s%s%s%s:\n %ssize%s = (%u,%u,%u,%u) [%lu %s].\n %sdata%s = %s", > cimg::t_magenta,cimg::t_bold,title,cimg::t_normal, > cimg::t_bold,cimg::t_normal,_width,_height,_depth,_spectrum, > mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), > mdisp==0?"b":(mdisp==1?"Kio":"Mio"), > cimg::t_bold,cimg::t_normal, > is_debug?"":"("); > if (is_debug) std::fprintf(cimg::output(),"%p = (",_data); > > if (is_valid) { > if (is_empty()) std::fprintf(cimg::output(),") [%s].\n", > pixel_type()); > else { > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) { > std::fprintf(cimg::output(),cimg::type<T>::format(),cimg::type<T>::format(_data[off])); > if (off!=siz1) std::fprintf(cimg::output(),"%s", > off%whd==whd1?"^": > off%wh==wh1?"\\": > off%_width==w1?";":","); > if (off==11 && siz>24) { off = siz1-12; std::fprintf(cimg::output(),"... "); } > } > std::fprintf(cimg::output(),") [%s%s].\n %smin%s = %g, %smax%s = %g, %smean%s = %g, " > "%sstd%s = %g, %scoords_min%s = (%u,%u,%u,%u), " > "%scoords_max%s = (%u,%u,%u,%u).\n", > _is_shared?"shared ":"",pixel_type(), > cimg::t_bold,cimg::t_normal,st[0], > cimg::t_bold,cimg::t_normal,st[1], > cimg::t_bold,cimg::t_normal,st[2], > cimg::t_bold,cimg::t_normal,std::sqrt(st[3]), > cimg::t_bold,cimg::t_normal,(int)st[4],(int)st[5],(int)st[6],(int)st[7], > cimg::t_bold,cimg::t_normal,(int)st[8],(int)st[9],(int)st[10],(int)st[11]); > } > } else std::fprintf(cimg::output(),"%s%sinvalid pointer%s) [shared %s].\n", > cimg::t_red,cimg::t_bold,cimg::t_normal, > pixel_type()); > std::fflush(cimg::output()); > return *this; >} ># 9224 "./CImg.h" 2 ># 9266 "./CImg.h" > ~CImg() { > if (!_is_shared) delete[] _data; > } ># 9286 "./CImg.h" > CImg():_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) {} ># 9308 "./CImg.h" > explicit CImg(const unsigned int size_x, const unsigned int size_y=1, const unsigned int size_z=1, const unsigned int size_c=1): > _is_shared(false) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } ># 9337 "./CImg.h" > CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, const T value): > _is_shared(false) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > fill(value); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } ># 9380 "./CImg.h" > CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const int value0, const int value1, ...):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { ># 9396 "./CImg.h" > assign(size_x,size_y,size_z,size_c); > { unsigned long _siz = (unsigned long)(unsigned long)size_x*size_y*size_z*size_c; if (_siz--) { va_list ap; __builtin_va_start(ap,value1); T *ptrd = (*this)._data; *(ptrd++) = (T)value0; if (_siz--) { *(ptrd++) = (T)value1; for (; _siz; --_siz) *(ptrd++) = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); } }; > } ># 9422 "./CImg.h" > CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const double value0, const double value1, ...):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > assign(size_x,size_y,size_z,size_c); > { unsigned long _siz = (unsigned long)(unsigned long)size_x*size_y*size_z*size_c; if (_siz--) { va_list ap; __builtin_va_start(ap,value1); T *ptrd = (*this)._data; *(ptrd++) = (T)value0; if (_siz--) { *(ptrd++) = (T)value1; for (; _siz; --_siz) *(ptrd++) = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); } }; > } ># 9456 "./CImg.h" > CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const char *const values, const bool repeat_values):_is_shared(false) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > fill(values,repeat_values); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } ># 9499 "./CImg.h" > template<typename t> > CImg(const t *const values, const unsigned int size_x, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, const bool is_shared=false):_is_shared(false) { > if (is_shared) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Invalid construction request of a (%u,%u,%u,%u) shared instance from a (%s*) buffer " > "(pixel types are different).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > size_x,size_y,size_z,size_c,CImg<t>::pixel_type()); > } > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (values && siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > > } > const t *ptrs = values; for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)*(ptrs++); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } > > > CImg(const T *const values, const unsigned int size_x, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, const bool is_shared=false) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (values && siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; _is_shared = is_shared; > if (_is_shared) _data = const_cast<T*>(values); > else { > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > std::memcpy(_data,values,siz*sizeof(T)); } > } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } > } ># 9563 "./CImg.h" > explicit CImg(const char *const filename):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > assign(filename); > } ># 9582 "./CImg.h" > template<typename t> > CImg(const CImg<t>& img):_is_shared(false) { > const unsigned long siz = img.size(); > if (img._data && siz) { > _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), > img._width,img._height,img._depth,img._spectrum); > } > const t *ptrs = img._data; for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)*(ptrs++); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } > > > CImg(const CImg<T>& img) { > const unsigned long siz = img.size(); > if (img._data && siz) { > _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; _is_shared = img._is_shared; > if (_is_shared) _data = const_cast<T*>(img._data); > else { > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), > img._width,img._height,img._depth,img._spectrum); > > } > std::memcpy(_data,img._data,siz*sizeof(T)); > } > } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } > } ># 9635 "./CImg.h" > template<typename t> > CImg(const CImg<t>& img, const bool is_shared):_is_shared(false) { > if (is_shared) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Invalid construction request of a shared instance from a " > "CImg<%s> image (%u,%u,%u,%u,%p) (pixel types are different).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > CImg<t>::pixel_type(),img._width,img._height,img._depth,img._spectrum,img._data); > } > const unsigned long siz = img.size(); > if (img._data && siz) { > _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), > img._width,img._height,img._depth,img._spectrum); > } > const t *ptrs = img._data; for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)*(ptrs++); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } > > > CImg(const CImg<T>& img, const bool is_shared) { > const unsigned long siz = img.size(); > if (img._data && siz) { > _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; _is_shared = is_shared; > if (_is_shared) _data = const_cast<T*>(img._data); > else { > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), > img._width,img._height,img._depth,img._spectrum); > } > std::memcpy(_data,img._data,siz*sizeof(T)); > } > } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } > } ># 9698 "./CImg.h" > template<typename t> > CImg(const CImg<t>& img, const char *const dimensions):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > assign(img,dimensions); > } ># 9713 "./CImg.h" > template<typename t> > CImg(const CImg<t>& img, const char *const dimensions, const T value): > _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > assign(img,dimensions).fill(value); > } ># 9728 "./CImg.h" > explicit CImg(const CImgDisplay &disp):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > disp.snapshot(*this); > } > > > > > > CImg<T>& assign() { > if (!_is_shared) delete[] _data; > _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; > return *this; > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y=1, const unsigned int size_z=1, const unsigned int size_c=1) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (!siz) return assign(); > const unsigned long curr_siz = size(); > if (siz!=curr_siz) { > if (_is_shared) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Invalid assignement request of shared instance from specified image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > size_x,size_y,size_z,size_c); > else { > delete[] _data; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > } > } > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > return *this; > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, const T value) { > return assign(size_x,size_y,size_z,size_c).fill(value); > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const int value0, const int value1, ...) { > assign(size_x,size_y,size_z,size_c); > { unsigned long _siz = (unsigned long)(unsigned long)size_x*size_y*size_z*size_c; if (_siz--) { va_list ap; __builtin_va_start(ap,value1); T *ptrd = (*this)._data; *(ptrd++) = (T)value0; if (_siz--) { *(ptrd++) = (T)value1; for (; _siz; --_siz) *(ptrd++) = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); } }; > return *this; > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const double value0, const double value1, ...) { > assign(size_x,size_y,size_z,size_c); > { unsigned long _siz = (unsigned long)(unsigned long)size_x*size_y*size_z*size_c; if (_siz--) { va_list ap; __builtin_va_start(ap,value1); T *ptrd = (*this)._data; *(ptrd++) = (T)value0; if (_siz--) { *(ptrd++) = (T)value1; for (; _siz; --_siz) *(ptrd++) = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); } }; > return *this; > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const char *const values, const bool repeat_values) { > return assign(size_x,size_y,size_z,size_c).fill(values,repeat_values); > } > > > > > > template<typename t> > CImg<T>& assign(const t *const values, const unsigned int size_x, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (!values || !siz) return assign(); > assign(size_x,size_y,size_z,size_c); > const t *ptrs = values; for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)*(ptrs++); > return *this; > } > > > CImg<T>& assign(const T *const values, const unsigned int size_x, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (!values || !siz) return assign(); > const unsigned long curr_siz = size(); > if (values==_data && siz==curr_siz) return assign(size_x,size_y,size_z,size_c); > if (_is_shared || values+siz<_data || values>=_data+size()) { > assign(size_x,size_y,size_z,size_c); > if (_is_shared) std::memmove(_data,values,siz*sizeof(T)); > else std::memcpy(_data,values,siz*sizeof(T)); > } else { > T *new_data = 0; > try { new_data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > std::memcpy(new_data,values,siz*sizeof(T)); > delete[] _data; _data = new_data; _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > } > return *this; > } > > > template<typename t> > CImg<T>& assign(const t *const values, const unsigned int size_x, const unsigned int size_y, > const unsigned int size_z, const unsigned int size_c, const bool is_shared) { > if (is_shared) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Invalid assignment request of shared instance from (%s*) buffer" > "(pixel types are different).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > CImg<t>::pixel_type()); > return assign(values,size_x,size_y,size_z,size_c); > } > > > CImg<T>& assign(const T *const values, const unsigned int size_x, const unsigned int size_y, > const unsigned int size_z, const unsigned int size_c, const bool is_shared) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (!values || !siz) { > if (is_shared) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Invalid assignment request of shared instance from (null) or empty buffer.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > else return assign(); > } > if (!is_shared) { if (_is_shared) assign(); assign(values,size_x,size_y,size_z,size_c); } > else { > if (!_is_shared) { > if (values+siz<_data || values>=_data+size()) assign(); > else cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Shared image instance has overlapping memory.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > } > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; _is_shared = true; > _data = const_cast<T*>(values); > } > return *this; > } > > > > > > CImg<T>& assign(const char *const filename) { > return load(filename); > } > > > > > > template<typename t> > CImg<T>& assign(const CImg<t>& img) { > return assign(img._data,img._width,img._height,img._depth,img._spectrum); > } > > > > > > template<typename t> > CImg<T>& assign(const CImg<t>& img, const bool is_shared) { > return assign(img._data,img._width,img._height,img._depth,img._spectrum,is_shared); > } > > > > > > template<typename t> > CImg<T>& assign(const CImg<t>& img, const char *const dimensions) { > if (!dimensions || !*dimensions) return assign(img._width,img._height,img._depth,img._spectrum); > unsigned int siz[4] = { 0,1,1,1 }, k = 0; > for (const char *s = dimensions; *s && k<4; ++k) { > char item[256] = { 0 }; > if (std::sscanf(s,"%255[^0-9%xyzvwhdcXYZVWHDC]",item)>0) s+=std::strlen(item); > if (*s) { > unsigned int val = 0; char sep = 0; > if (std::sscanf(s,"%u%c",&val,&sep)>0) { > if (sep=='%') siz[k] = val*(k==0?_width:k==1?_height:k==2?_depth:_spectrum)/100; > else siz[k] = val; > while (*s>='0' && *s<='9') ++s; if (sep=='%') ++s; > } else switch (cimg::uncase(*s)) { > case 'x' : case 'w' : siz[k] = img._width; ++s; break; > case 'y' : case 'h' : siz[k] = img._height; ++s; break; > case 'z' : case 'd' : siz[k] = img._depth; ++s; break; > case 'c' : case 's' : siz[k] = img._spectrum; ++s; break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Invalid character '%c' detected in specified dimension string '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > *s,dimensions); > } > } > } > return assign(siz[0],siz[1],siz[2],siz[3]); > } > > > > > > template<typename t> > CImg<T>& assign(const CImg<t>& img, const char *const dimensions, const T value) { > return assign(img,dimensions).fill(value); > } > > > > > > CImg<T>& assign(const CImgDisplay &disp) { > disp.snapshot(*this); > return *this; > } > > > > > > > > CImg<T>& clear() { > return assign(); > } ># 9991 "./CImg.h" > template<typename t> > CImg<t>& move_to(CImg<t>& img) { > img.assign(*this); > assign(); > return img; > } > > > CImg<T>& move_to(CImg<T>& img) { > if (_is_shared || img._is_shared) img.assign(*this); > else swap(img); > assign(); > return img; > } ># 10024 "./CImg.h" > template<typename t> > CImgList<t>& move_to(CImgList<t>& list, const unsigned int pos=~0U) { > const unsigned int npos = pos>list._width?list._width:pos; > move_to(list.insert(1,npos)[npos]); > return list; > } ># 10044 "./CImg.h" > CImg<T>& swap(CImg<T>& img) { > cimg::swap(_width,img._width); > cimg::swap(_height,img._height); > cimg::swap(_depth,img._depth); > cimg::swap(_spectrum,img._spectrum); > cimg::swap(_data,img._data); > cimg::swap(_is_shared,img._is_shared); > return img; > } ># 10062 "./CImg.h" > static CImg<T>& empty() { > static CImg<T> _empty; > return _empty.assign(); > } ># 10148 "./CImg.h" > T& operator()(const unsigned int x) { > return _data[x]; > } > > const T& operator()(const unsigned int x) const { > return _data[x]; > } > > T& operator()(const unsigned int x, const unsigned int y) { > return _data[x + y*_width]; > } > > const T& operator()(const unsigned int x, const unsigned int y) const { > return _data[x + y*_width]; > } > > T& operator()(const unsigned int x, const unsigned int y, const unsigned int z) { > return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height]; > } > > const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z) const { > return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height]; > } > > T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c) { > return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth]; > } > > const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c) const { > return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth]; > } > > T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int, > const unsigned long wh) { > return _data[x + y*_width + z*wh]; > } > > const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int, > const unsigned long wh) const { > return _data[x + y*_width + z*wh]; > } > > T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, > const unsigned long wh, const unsigned long whd) { > return _data[x + y*_width + z*wh + c*whd]; > } > > const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, > const unsigned long wh, const unsigned long whd) const { > return _data[x + y*_width + z*wh + c*whd]; > } ># 10223 "./CImg.h" > operator T*() { > return _data; > } > > > operator const T*() const { > return _data; > } ># 10246 "./CImg.h" > CImg<T>& operator=(const T value) { > return fill(value); > } ># 10270 "./CImg.h" > CImg<T>& operator=(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > load(expression); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator=(const CImg<t>& img) { > return assign(img); > } > > > CImg<T>& operator=(const CImg<T>& img) { > return assign(img); > } > > > > > > CImg<T>& operator=(const CImgDisplay& disp) { > disp.snapshot(*this); > return *this; > } ># 10331 "./CImg.h" > template<typename t> > CImg<T>& operator+=(const t value) { > if (is_empty()) return *this; ># 10335 "./CImg.h" > ># 10335 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 10335 "./CImg.h" ># 10335 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd + value); > return *this; > } ># 10349 "./CImg.h" > CImg<T>& operator+=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator+="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 10362 "./CImg.h" > ># 10362 "./CImg.h" >#pragma omp parallel ># 10362 "./CImg.h" ># 10362 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 10365 "./CImg.h" > ># 10365 "./CImg.h" >#pragma omp for collapse(3) ># 10365 "./CImg.h" ># 10365 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd + lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this+=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } ># 10403 "./CImg.h" > template<typename t> > CImg<T>& operator+=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this+=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)(*ptrd + *(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd + *(ptrs++)); > } > return *this; > } > > > > > > > > CImg<T>& operator++() { > if (is_empty()) return *this; ># 10425 "./CImg.h" > ># 10425 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 10425 "./CImg.h" ># 10425 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) ++*ptrd; > return *this; > } ># 10438 "./CImg.h" > CImg<T> operator++(int) { > const CImg<T> copy(*this,false); > ++*this; > return copy; > } ># 10453 "./CImg.h" > CImg<T> operator+() const { > return CImg<T>(*this,false); > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator+(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)+=value; > } > > > > > > > CImg<Tfloat> operator+(const char *const expression) const { > return CImg<Tfloat>(*this,false)+=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator+(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)+=img; > } > > > > > > template<typename t> > CImg<T>& operator-=(const t value) { > if (is_empty()) return *this; ># 10494 "./CImg.h" > ># 10494 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 10494 "./CImg.h" ># 10494 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd - value); > return *this; > } > > > > > > CImg<T>& operator-=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator-="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd - mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd - mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 10517 "./CImg.h" > ># 10517 "./CImg.h" >#pragma omp parallel ># 10517 "./CImg.h" ># 10517 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 10520 "./CImg.h" > ># 10520 "./CImg.h" >#pragma omp for collapse(3) ># 10520 "./CImg.h" ># 10520 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd - lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this-=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator-=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this-=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)(*ptrd - *(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd - *(ptrs++)); > } > return *this; > } > > > > > > CImg<T>& operator--() { > if (is_empty()) return *this; ># 10562 "./CImg.h" > ># 10562 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 10562 "./CImg.h" ># 10562 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = *ptrd-(T)1; > return *this; > } > > > > > > CImg<T> operator--(int) { > const CImg<T> copy(*this,false); > --*this; > return copy; > } ># 10592 "./CImg.h" > CImg<T> operator-() const { > return CImg<T>(_width,_height,_depth,_spectrum,(T)0)-=*this; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator-(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)-=value; > } > > > > > > > CImg<Tfloat> operator-(const char *const expression) const { > return CImg<Tfloat>(*this,false)-=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator-(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)-=img; > } > > > > > > template<typename t> > CImg<T>& operator*=(const t value) { > if (is_empty()) return *this; ># 10633 "./CImg.h" > ># 10633 "./CImg.h" >#pragma omp parallel for if (size()>=262144) ># 10633 "./CImg.h" ># 10633 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd * value); > return *this; > } > > > > > > CImg<T>& operator*=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator*="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 10656 "./CImg.h" > ># 10656 "./CImg.h" >#pragma omp parallel ># 10656 "./CImg.h" ># 10656 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 10659 "./CImg.h" > ># 10659 "./CImg.h" >#pragma omp for collapse(3) ># 10659 "./CImg.h" ># 10659 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd * lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > mul(CImg<T>(_width,_height,_depth,_spectrum,expression,true)); > } > cimg::exception_mode() = omode; > return *this; > } ># 10692 "./CImg.h" > template<typename t> > CImg<T>& operator*=(const CImg<t>& img) { > return ((*this)*img).move_to(*this); > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator*(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)*=value; > } > > > > > > > CImg<Tfloat> operator*(const char *const expression) const { > return CImg<Tfloat>(*this,false)*=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator*(const CImg<t>& img) const { > if (_width!=img._height || _depth!=1 || _spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "operator*(): Invalid multiplication of instance by specified matrix (%u,%u,%u,%u,%p)", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data); > CImg<typename cimg::superset<T,t>::type> res(img._width,_height); ># 10730 "./CImg.h" > ># 10730 "./CImg.h" >#pragma omp parallel for if (size()>1024 && img.size()>1024) collapse(2) ># 10730 "./CImg.h" ># 10730 "./CImg.h" > > for (int j = 0; j<(int)((res)._height); ++j) for (int i = 0; i<(int)((res)._width); ++i) { typename cimg::superset2<T,t,double>::type value = 0; for (int k = 0; k<(int)((*this)._width); ++k) value+=(*this)(k,j)*img(i,k); res(i,j) = (typename cimg::superset<T,t>::type)value; } > > > > > return res; > } > > > > > > template<typename t> > CImg<T>& operator/=(const t value) { > if (is_empty()) return *this; ># 10747 "./CImg.h" > ># 10747 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 10747 "./CImg.h" ># 10747 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd / value); > return *this; > } > > > > > > CImg<T>& operator/=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator/="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 10770 "./CImg.h" > ># 10770 "./CImg.h" >#pragma omp parallel ># 10770 "./CImg.h" ># 10770 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 10773 "./CImg.h" > ># 10773 "./CImg.h" >#pragma omp for collapse(3) ># 10773 "./CImg.h" ># 10773 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd / lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > div(CImg<T>(_width,_height,_depth,_spectrum,expression,true)); > } > cimg::exception_mode() = omode; > return *this; > } ># 10800 "./CImg.h" > template<typename t> > CImg<T>& operator/=(const CImg<t>& img) { > return (*this*img.get_invert()).move_to(*this); > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator/(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)/=value; > } > > > > > > > CImg<Tfloat> operator/(const char *const expression) const { > return CImg<Tfloat>(*this,false)/=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator/(const CImg<t>& img) const { > return (*this)*img.get_invert(); > } > > > > > > template<typename t> > CImg<T>& operator%=(const t value) { > if (is_empty()) return *this; ># 10842 "./CImg.h" > ># 10842 "./CImg.h" >#pragma omp parallel for if (size()>=16384) ># 10842 "./CImg.h" ># 10842 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::mod(*ptrd,(T)value); > return *this; > } > > > > > > CImg<T>& operator%=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator%="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 10865 "./CImg.h" > ># 10865 "./CImg.h" >#pragma omp parallel ># 10865 "./CImg.h" ># 10865 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 10868 "./CImg.h" > ># 10868 "./CImg.h" >#pragma omp for collapse(3) ># 10868 "./CImg.h" ># 10868 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::mod(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this%=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator%=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this%=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = cimg::mod(*ptrd,(T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = cimg::mod(*ptrd,(T)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator%(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)%=value; > } > > > > > > > CImg<Tfloat> operator%(const char *const expression) const { > return CImg<Tfloat>(*this,false)%=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator%(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)%=img; > } > > > > > > template<typename t> > CImg<T>& operator&=(const t value) { > if (is_empty()) return *this; ># 10940 "./CImg.h" > ># 10940 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 10940 "./CImg.h" ># 10940 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)((unsigned long)*ptrd & (unsigned long)value); > return *this; > } > > > > > > CImg<T>& operator&=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator&="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 10963 "./CImg.h" > ># 10963 "./CImg.h" >#pragma omp parallel ># 10963 "./CImg.h" ># 10963 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 10966 "./CImg.h" > ># 10966 "./CImg.h" >#pragma omp for collapse(3) ># 10966 "./CImg.h" ># 10966 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this&=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator&=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this&=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((unsigned long)*ptrd & (unsigned long)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((unsigned long)*ptrd & (unsigned long)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator&(const t value) const { > return (+*this)&=value; > } > > > > > > > CImg<T> operator&(const char *const expression) const { > return (+*this)&=expression; > } > > > > > > > template<typename t> > CImg<T> operator&(const CImg<t>& img) const { > return (+*this)&=img; > } > > > > > > template<typename t> > CImg<T>& operator|=(const t value) { > if (is_empty()) return *this; ># 11038 "./CImg.h" > ># 11038 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 11038 "./CImg.h" ># 11038 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)((unsigned long)*ptrd | (unsigned long)value); > return *this; > } > > > > > > CImg<T>& operator|=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator|="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 11061 "./CImg.h" > ># 11061 "./CImg.h" >#pragma omp parallel ># 11061 "./CImg.h" ># 11061 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 11064 "./CImg.h" > ># 11064 "./CImg.h" >#pragma omp for collapse(3) ># 11064 "./CImg.h" ># 11064 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this|=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator|=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this|=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((unsigned long)*ptrd | (unsigned long)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((unsigned long)*ptrd | (unsigned long)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator|(const t value) const { > return (+*this)|=value; > } > > > > > > > CImg<T> operator|(const char *const expression) const { > return (+*this)|=expression; > } > > > > > > > template<typename t> > CImg<T> operator|(const CImg<t>& img) const { > return (+*this)|=img; > } > > > > > > > > template<typename t> > CImg<T>& operator^=(const t value) { > if (is_empty()) return *this; ># 11138 "./CImg.h" > ># 11138 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 11138 "./CImg.h" ># 11138 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)value); > return *this; > } > > > > > > > > CImg<T>& operator^=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator^="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 11163 "./CImg.h" > ># 11163 "./CImg.h" >#pragma omp parallel ># 11163 "./CImg.h" ># 11163 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 11166 "./CImg.h" > ># 11166 "./CImg.h" >#pragma omp for collapse(3) ># 11166 "./CImg.h" ># 11166 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this^=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > > > template<typename t> > CImg<T>& operator^=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this^=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator^(const t value) const { > return (+*this)^=value; > } > > > > > > > CImg<T> operator^(const char *const expression) const { > return (+*this)^=expression; > } > > > > > > > template<typename t> > CImg<T> operator^(const CImg<t>& img) const { > return (+*this)^=img; > } > > > > > > template<typename t> > CImg<T>& operator<<=(const t value) { > if (is_empty()) return *this; ># 11240 "./CImg.h" > ># 11240 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 11240 "./CImg.h" ># 11240 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(((long)*ptrd) << (int)value); > return *this; > } > > > > > > CImg<T>& operator<<=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 11263 "./CImg.h" > ># 11263 "./CImg.h" >#pragma omp parallel ># 11263 "./CImg.h" ># 11263 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 11266 "./CImg.h" > ># 11266 "./CImg.h" >#pragma omp for collapse(3) ># 11266 "./CImg.h" ># 11266 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd << (int)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this<<=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator<<=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this^=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((long)*ptrd << (int)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((long)*ptrd << (int)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator<<(const t value) const { > return (+*this)<<=value; > } > > > > > > > CImg<T> operator<<(const char *const expression) const { > return (+*this)<<=expression; > } > > > > > > > template<typename t> > CImg<T> operator<<(const CImg<t>& img) const { > return (+*this)<<=img; > } > > > > > > template<typename t> > CImg<T>& operator>>=(const t value) { > if (is_empty()) return *this; ># 11338 "./CImg.h" > ># 11338 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 11338 "./CImg.h" ># 11338 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(((long)*ptrd) >> (int)value); > return *this; > } > > > > > > CImg<T>& operator>>=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 11361 "./CImg.h" > ># 11361 "./CImg.h" >#pragma omp parallel ># 11361 "./CImg.h" ># 11361 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 11364 "./CImg.h" > ># 11364 "./CImg.h" >#pragma omp for collapse(3) ># 11364 "./CImg.h" ># 11364 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd >> (int)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this>>=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator>>=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this^=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((long)*ptrd >> (int)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((long)*ptrd >> (int)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator>>(const t value) const { > return (+*this)>>=value; > } > > > > > > > CImg<T> operator>>(const char *const expression) const { > return (+*this)>>=expression; > } > > > > > > > template<typename t> > CImg<T> operator>>(const CImg<t>& img) const { > return (+*this)>>=img; > } > > > > > > CImg<T> operator~() const { > CImg<T> res(_width,_height,_depth,_spectrum); > const T *ptrs = _data; > for (T *ptrd = (res)._data, *_maxptrd = (res)._data + (res).size(); ptrd<_maxptrd; ++ptrd) { const unsigned long value = (unsigned long)*(ptrs++); *ptrd = (T)~value; } > return res; > } > > > > > > > template<typename t> > bool operator==(const t value) const { > if (is_empty()) return false; > typedef typename cimg::superset<T,t>::type Tt; > bool is_equal = true; > for (T *ptrd = _data + size(); is_equal && ptrd>_data; is_equal = ((Tt)*(--ptrd)==(Tt)value)) {} > return is_equal; > } > > > > > > > bool operator==(const char *const expression) const { > if (is_empty()) return !*expression; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > bool is_equal = true; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); > const T *ptrs = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { if (!is_equal) break; is_equal = ((double)*(ptrs--)==mp(x,y,z,c)); } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { if (!is_equal) break; is_equal = ((double)*(ptrs++)==mp(x,y,z,c)); } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { if (!is_equal) break; is_equal = ((double)*(ptrs++)==mp(x,y,z,c)); } > } catch (CImgException&) { > cimg::exception_mode() = omode; > is_equal = (*this==CImg<T>(_width,_height,_depth,_spectrum,expression,true)); > } > cimg::exception_mode() = omode; > return is_equal; > } ># 11494 "./CImg.h" > template<typename t> > bool operator==(const CImg<t>& img) const { > typedef typename cimg::superset<T,t>::type Tt; > const unsigned long siz = size(); > bool is_equal = true; > if (siz!=img.size()) return false; > t *ptrs = img._data + siz; > for (T *ptrd = _data + siz; is_equal && ptrd>_data; is_equal = ((Tt)*(--ptrd)==(Tt)*(--ptrs))) {} > return is_equal; > } > > > > > > > template<typename t> > bool operator!=(const t value) const { > return !((*this)==value); > } > > > > > > > bool operator!=(const char *const expression) const { > return !((*this)==expression); > } ># 11531 "./CImg.h" > template<typename t> > bool operator!=(const CImg<t>& img) const { > return !((*this)==img); > } ># 11565 "./CImg.h" > template<typename t> > CImgList<typename cimg::superset<T,t>::type> operator,(const CImg<t>& img) const { > return CImgList<typename cimg::superset<T,t>::type>(*this,img); > } ># 11580 "./CImg.h" > template<typename t> > CImgList<typename cimg::superset<T,t>::type> operator,(const CImgList<t>& list) const { > return CImgList<typename cimg::superset<T,t>::type>(list,false).insert(*this,0); > } ># 11600 "./CImg.h" > CImgList<T> operator<(const char axis) const { > return get_split(axis); > } ># 11619 "./CImg.h" > static const char* pixel_type() { > return cimg::type<T>::string(); > } ># 11634 "./CImg.h" > int width() const { > return (int)_width; > } ># 11648 "./CImg.h" > int height() const { > return (int)_height; > } ># 11664 "./CImg.h" > int depth() const { > return (int)_depth; > } ># 11682 "./CImg.h" > int spectrum() const { > return (int)_spectrum; > } ># 11701 "./CImg.h" > unsigned long size() const { > return (unsigned long)_width*_height*_depth*_spectrum; > } ># 11715 "./CImg.h" > T* data() { > return _data; > } > > > const T* data() const { > return _data; > } ># 11752 "./CImg.h" > T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) { > return _data + x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth; > } > > const T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) const { > return _data + x + y*_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth; > } ># 11777 "./CImg.h" > long offset(const int x, const int y=0, const int z=0, const int c=0) const { > return x + y*(long)_width + z*(long)_width*_height + c*(long)_width*_height*_depth; > } > > > > > > > > iterator begin() { > return _data; > } > > > const_iterator begin() const { > return _data; > } ># 11812 "./CImg.h" > iterator end() { > return _data + size(); > } > > > const_iterator end() const { > return _data + size(); > } > > > > > > > > T& front() { > return *_data; > } > > > const T& front() const { > return *_data; > } ># 11843 "./CImg.h" > T& back() { > return *(_data + size() - 1); > } > > > const T& back() const { > return *(_data + size() - 1); > } ># 11865 "./CImg.h" > T& at(const int offset, const T out_value) { > return (offset<0 || offset>=(int)size())?(cimg::temporary(out_value)=out_value):(*this)[offset]; > } > > > T at(const int offset, const T out_value) const { > return (offset<0 || offset>=(int)size())?out_value:(*this)[offset]; > } ># 11888 "./CImg.h" > T& at(const int offset) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "at(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _at(offset); > } > > T& _at(const int offset) { > const unsigned int siz = (unsigned int)size(); > return (*this)[offset<0?0:(unsigned int)offset>=siz?siz-1:offset]; > } > > > T at(const int offset) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "at(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _at(offset); > } > > T _at(const int offset) const { > const unsigned int siz = (unsigned int)size(); > return (*this)[offset<0?0:(unsigned int)offset>=siz?siz-1:offset]; > } ># 11931 "./CImg.h" > T& atX(const int x, const int y, const int z, const int c, const T out_value) { > return (x<0 || x>=width())?(cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); > } > > > T atX(const int x, const int y, const int z, const int c, const T out_value) const { > return (x<0 || x>=width())?out_value:(*this)(x,y,z,c); > } ># 11957 "./CImg.h" > T& atX(const int x, const int y=0, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atX(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atX(x,y,z,c); > } > > T& _atX(const int x, const int y=0, const int z=0, const int c=0) { > return (*this)(x<0?0:(x>=width()?width()-1:x),y,z,c); > } > > > T atX(const int x, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atX(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atX(x,y,z,c); > } > > T _atX(const int x, const int y=0, const int z=0, const int c=0) const { > return (*this)(x<0?0:(x>=width()?width()-1:x),y,z,c); > } > > > > > > T& atXY(const int x, const int y, const int z, const int c, const T out_value) { > return (x<0 || y<0 || x>=width() || y>=height())?(cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); > } > > > T atXY(const int x, const int y, const int z, const int c, const T out_value) const { > return (x<0 || y<0 || x>=width() || y>=height())?out_value:(*this)(x,y,z,c); > } > > > > > > > > T& atXY(const int x, const int y, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXY(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXY(x,y,z,c); > } > > T& _atXY(const int x, const int y, const int z=0, const int c=0) { > return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y),z,c); > } > > > T atXY(const int x, const int y, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXY(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXY(x,y,z,c); > } > > T _atXY(const int x, const int y, const int z=0, const int c=0) const { > return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y),z,c); > } > > > > > > T& atXYZ(const int x, const int y, const int z, const int c, const T out_value) { > return (x<0 || y<0 || z<0 || x>=width() || y>=height() || z>=depth())? > (cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); > } > > > T atXYZ(const int x, const int y, const int z, const int c, const T out_value) const { > return (x<0 || y<0 || z<0 || x>=width() || y>=height() || z>=depth())?out_value:(*this)(x,y,z,c); > } > > > > > > > > T& atXYZ(const int x, const int y, const int z, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXYZ(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXYZ(x,y,z,c); > } > > T& _atXYZ(const int x, const int y, const int z, const int c=0) { > return (*this)(x<0?0:(x>=width()?width()-1:x),y<0?0:(y>=height()?height()-1:y), > z<0?0:(z>=depth()?depth()-1:z),c); > } > > > T atXYZ(const int x, const int y, const int z, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXYZ(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXYZ(x,y,z,c); > } > > T _atXYZ(const int x, const int y, const int z, const int c=0) const { > return (*this)(x<0?0:(x>=width()?width()-1:x),y<0?0:(y>=height()?height()-1:y), > z<0?0:(z>=depth()?depth()-1:z),c); > } > > > > > > T& atXYZC(const int x, const int y, const int z, const int c, const T out_value) { > return (x<0 || y<0 || z<0 || c<0 || x>=width() || y>=height() || z>=depth() || c>=spectrum())? > (cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); > } > > > T atXYZC(const int x, const int y, const int z, const int c, const T out_value) const { > return (x<0 || y<0 || z<0 || c<0 || x>=width() || y>=height() || z>=depth() || c>=spectrum())?out_value:(*this)(x,y,z,c); > } > > > > > > > > T& atXYZC(const int x, const int y, const int z, const int c) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXYZC(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXYZC(x,y,z,c); > } > > T& _atXYZC(const int x, const int y, const int z, const int c) { > return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y), > z<0?0:(z>=depth()?depth()-1:z), c<0?0:(c>=spectrum()?spectrum()-1:c)); > } > > > T atXYZC(const int x, const int y, const int z, const int c) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXYZC(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXYZC(x,y,z,c); > } > > T _atXYZC(const int x, const int y, const int z, const int c) const { > return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y), > z<0?0:(z>=depth()?depth()-1:z), c<0?0:(c>=spectrum()?spectrum()-1:c)); > } ># 12136 "./CImg.h" > Tfloat linear_atX(const float fx, const int y, const int z, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1; > const float > dx = fx - x; > const Tfloat > Ic = (Tfloat)atX(x,y,z,c,out_value), In = (Tfloat)atXY(nx,y,z,c,out_value); > return Ic + dx*(In-Ic); > } ># 12161 "./CImg.h" > Tfloat linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "linear_atX(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return _linear_atX(fx,y,z,c); > } > > Tfloat _linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx); > const unsigned int > x = (unsigned int)nfx; > const float > dx = nfx - x; > const unsigned int > nx = dx>0?x+1:x; > const Tfloat > Ic = (Tfloat)(*this)(x,y,z,c), In = (Tfloat)(*this)(nx,y,z,c); > return Ic + dx*(In-Ic); > } > > > > > > > Tfloat linear_atXY(const float fx, const float fy, const int z, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1; > const float > dx = fx - x, > dy = fy - y; > const Tfloat > Icc = (Tfloat)atXY(x,y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), > Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value); > return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc); > } ># 12209 "./CImg.h" > Tfloat linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "linear_atXY(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return _linear_atXY(fx,fy,z,c); > } > > Tfloat _linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy); > const unsigned int > x = (unsigned int)nfx, > y = (unsigned int)nfy; > const float > dx = nfx - x, > dy = nfy - y; > const unsigned int > nx = dx>0?x+1:x, > ny = dy>0?y+1:y; > const Tfloat > Icc = (Tfloat)(*this)(x,y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), > Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c); > return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc); > } > > > > > > > Tfloat linear_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1, > z = (int)fz - (fz>=0?0:1), nz = z + 1; > const float > dx = fx - x, > dy = fy - y, > dz = fz - z; > const Tfloat > Iccc = (Tfloat)atXYZ(x,y,z,c,out_value), Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), > Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), > Iccn = (Tfloat)atXYZ(x,y,nz,c,out_value), Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), > Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value); > return Iccc + > dx*(Incc-Iccc + > dy*(Iccc+Innc-Icnc-Incc + > dz*(Iccn+Innn+Icnc+Incc-Icnn-Incn-Iccc-Innc)) + > dz*(Iccc+Incn-Iccn-Incc)) + > dy*(Icnc-Iccc + > dz*(Iccc+Icnn-Iccn-Icnc)) + > dz*(Iccn-Iccc); > } ># 12273 "./CImg.h" > Tfloat linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "linear_atXYZ(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return _linear_atXYZ(fx,fy,fz,c); > } > > Tfloat _linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy), > nfz = fz<0?0:(fz>_depth-1?_depth-1:fz); > const unsigned int > x = (unsigned int)nfx, > y = (unsigned int)nfy, > z = (unsigned int)nfz; > const float > dx = nfx - x, > dy = nfy - y, > dz = nfz - z; > const unsigned int > nx = dx>0?x+1:x, > ny = dy>0?y+1:y, > nz = dz>0?z+1:z; > const Tfloat > Iccc = (Tfloat)(*this)(x,y,z,c), Incc = (Tfloat)(*this)(nx,y,z,c), > Icnc = (Tfloat)(*this)(x,ny,z,c), Innc = (Tfloat)(*this)(nx,ny,z,c), > Iccn = (Tfloat)(*this)(x,y,nz,c), Incn = (Tfloat)(*this)(nx,y,nz,c), > Icnn = (Tfloat)(*this)(x,ny,nz,c), Innn = (Tfloat)(*this)(nx,ny,nz,c); > return Iccc + > dx*(Incc-Iccc + > dy*(Iccc+Innc-Icnc-Incc + > dz*(Iccn+Innn+Icnc+Incc-Icnn-Incn-Iccc-Innc)) + > dz*(Iccc+Incn-Iccn-Incc)) + > dy*(Icnc-Iccc + > dz*(Iccc+Icnn-Iccn-Icnc)) + > dz*(Iccn-Iccc); > } > > > > > > > Tfloat linear_atXYZC(const float fx, const float fy, const float fz, const float fc, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1, > z = (int)fz - (fz>=0?0:1), nz = z + 1, > c = (int)fc - (fc>=0?0:1), nc = c + 1; > const float > dx = fx - x, > dy = fy - y, > dz = fz - z, > dc = fc - c; > const Tfloat > Icccc = (Tfloat)atXYZC(x,y,z,c,out_value), Inccc = (Tfloat)atXYZC(nx,y,z,c,out_value), > Icncc = (Tfloat)atXYZC(x,ny,z,c,out_value), Inncc = (Tfloat)atXYZC(nx,ny,z,c,out_value), > Iccnc = (Tfloat)atXYZC(x,y,nz,c,out_value), Incnc = (Tfloat)atXYZC(nx,y,nz,c,out_value), > Icnnc = (Tfloat)atXYZC(x,ny,nz,c,out_value), Innnc = (Tfloat)atXYZC(nx,ny,nz,c,out_value), > Icccn = (Tfloat)atXYZC(x,y,z,nc,out_value), Inccn = (Tfloat)atXYZC(nx,y,z,nc,out_value), > Icncn = (Tfloat)atXYZC(x,ny,z,nc,out_value), Inncn = (Tfloat)atXYZC(nx,ny,z,nc,out_value), > Iccnn = (Tfloat)atXYZC(x,y,nz,nc,out_value), Incnn = (Tfloat)atXYZC(nx,y,nz,nc,out_value), > Icnnn = (Tfloat)atXYZC(x,ny,nz,nc,out_value), Innnn = (Tfloat)atXYZC(nx,ny,nz,nc,out_value); > return Icccc + > dx*(Inccc-Icccc + > dy*(Icccc+Inncc-Icncc-Inccc + > dz*(Iccnc+Innnc+Icncc+Inccc-Icnnc-Incnc-Icccc-Inncc + > dc*(Iccnn+Innnn+Icncn+Inccn+Icnnc+Incnc+Icccc+Inncc-Icnnn-Incnn-Icccn-Inncn-Iccnc-Innnc-Icncc-Inccc)) + > dc*(Icccn+Inncn+Icncc+Inccc-Icncn-Inccn-Icccc-Inncc)) + > dz*(Icccc+Incnc-Iccnc-Inccc + > dc*(Icccn+Incnn+Iccnc+Inccc-Iccnn-Inccn-Icccc-Incnc)) + > dc*(Icccc+Inccn-Inccc-Icccn)) + > dy*(Icncc-Icccc + > dz*(Icccc+Icnnc-Iccnc-Icncc + > dc*(Icccn+Icnnn+Iccnc+Icncc-Iccnn-Icncn-Icccc-Icnnc)) + > dc*(Icccc+Icncn-Icncc-Icccn)) + > dz*(Iccnc-Icccc + > dc*(Icccc+Iccnn-Iccnc-Icccn)) + > dc*(Icccn-Icccc); > } ># 12364 "./CImg.h" > Tfloat linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "linear_atXYZC(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return _linear_atXYZC(fx,fy,fz,fc); > } > > Tfloat _linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy), > nfz = fz<0?0:(fz>_depth-1?_depth-1:fz), > nfc = fc<0?0:(fc>_spectrum-1?_spectrum-1:fc); > const unsigned int > x = (unsigned int)nfx, > y = (unsigned int)nfy, > z = (unsigned int)nfz, > c = (unsigned int)nfc; > const float > dx = nfx - x, > dy = nfy - y, > dz = nfz - z, > dc = nfc - c; > const unsigned int > nx = dx>0?x+1:x, > ny = dy>0?y+1:y, > nz = dz>0?z+1:z, > nc = dc>0?c+1:c; > const Tfloat > Icccc = (Tfloat)(*this)(x,y,z,c), Inccc = (Tfloat)(*this)(nx,y,z,c), > Icncc = (Tfloat)(*this)(x,ny,z,c), Inncc = (Tfloat)(*this)(nx,ny,z,c), > Iccnc = (Tfloat)(*this)(x,y,nz,c), Incnc = (Tfloat)(*this)(nx,y,nz,c), > Icnnc = (Tfloat)(*this)(x,ny,nz,c), Innnc = (Tfloat)(*this)(nx,ny,nz,c), > Icccn = (Tfloat)(*this)(x,y,z,nc), Inccn = (Tfloat)(*this)(nx,y,z,nc), > Icncn = (Tfloat)(*this)(x,ny,z,nc), Inncn = (Tfloat)(*this)(nx,ny,z,nc), > Iccnn = (Tfloat)(*this)(x,y,nz,nc), Incnn = (Tfloat)(*this)(nx,y,nz,nc), > Icnnn = (Tfloat)(*this)(x,ny,nz,nc), Innnn = (Tfloat)(*this)(nx,ny,nz,nc); > return Icccc + > dx*(Inccc-Icccc + > dy*(Icccc+Inncc-Icncc-Inccc + > dz*(Iccnc+Innnc+Icncc+Inccc-Icnnc-Incnc-Icccc-Inncc + > dc*(Iccnn+Innnn+Icncn+Inccn+Icnnc+Incnc+Icccc+Inncc-Icnnn-Incnn-Icccn-Inncn-Iccnc-Innnc-Icncc-Inccc)) + > dc*(Icccn+Inncn+Icncc+Inccc-Icncn-Inccn-Icccc-Inncc)) + > dz*(Icccc+Incnc-Iccnc-Inccc + > dc*(Icccn+Incnn+Iccnc+Inccc-Iccnn-Inccn-Icccc-Incnc)) + > dc*(Icccc+Inccn-Inccc-Icccn)) + > dy*(Icncc-Icccc + > dz*(Icccc+Icnnc-Iccnc-Icncc + > dc*(Icccn+Icnnn+Iccnc+Icncc-Iccnn-Icncn-Icccc-Icnnc)) + > dc*(Icccc+Icncn-Icncc-Icccn)) + > dz*(Iccnc-Icccc + > dc*(Icccc+Iccnn-Iccnc-Icccn)) + > dc*(Icccn-Icccc); > } ># 12438 "./CImg.h" > Tfloat cubic_atX(const float fx, const int y, const int z, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2; > const float > dx = fx - x; > const Tfloat > Ip = (Tfloat)atX(px,y,z,c,out_value), Ic = (Tfloat)atX(x,y,z,c,out_value), > In = (Tfloat)atX(nx,y,z,c,out_value), Ia = (Tfloat)atX(ax,y,z,c,out_value); > return Ic + 0.5f*(dx*(-Ip+In) + dx*dx*(2*Ip-5*Ic+4*In-Ia) + dx*dx*dx*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atX(const float fx, const int y, const int z, const int c, const T out_value, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atX(fx,y,z,c,out_value); > return val<min_value?min_value:val>max_value?max_value:val; > } ># 12474 "./CImg.h" > Tfloat cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "cubic_atX(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _cubic_atX(fx,y,z,c); > } > > Tfloat _cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx); > const int > x = (int)nfx; > const float > dx = nfx - x; > const int > px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2; > const Tfloat > Ip = (Tfloat)(*this)(px,y,z,c), Ic = (Tfloat)(*this)(x,y,z,c), > In = (Tfloat)(*this)(nx,y,z,c), Ia = (Tfloat)(*this)(ax,y,z,c); > return Ic + 0.5f*(dx*(-Ip+In) + dx*dx*(2*Ip-5*Ic+4*In-Ia) + dx*dx*dx*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atX(const float fx, const int y, const int z, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atX(fx,y,z,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > Tfloat _cubic_atX(const float fx, const int y, const int z, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = _cubic_atX(fx,y,z,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > > > > > > Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2, > y = (int)fy - (fy>=0?0:1), py = y - 1, ny = y + 1, ay = y + 2; > const float dx = fx - x, dy = fy - y; > const Tfloat > Ipp = (Tfloat)atXY(px,py,z,c,out_value), Icp = (Tfloat)atXY(x,py,z,c,out_value), Inp = (Tfloat)atXY(nx,py,z,c,out_value), Iap = (Tfloat)atXY(ax,py,z,c,out_value), > Ip = Icp + 0.5f*(dx*(-Ipp+Inp) + dx*dx*(2*Ipp-5*Icp+4*Inp-Iap) + dx*dx*dx*(-Ipp+3*Icp-3*Inp+Iap)), > Ipc = (Tfloat)atXY(px,y,z,c,out_value), Icc = (Tfloat)atXY(x, y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), Iac = (Tfloat)atXY(ax,y,z,c,out_value), > Ic = Icc + 0.5f*(dx*(-Ipc+Inc) + dx*dx*(2*Ipc-5*Icc+4*Inc-Iac) + dx*dx*dx*(-Ipc+3*Icc-3*Inc+Iac)), > Ipn = (Tfloat)atXY(px,ny,z,c,out_value), Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value), Ian = (Tfloat)atXY(ax,ny,z,c,out_value), > In = Icn + 0.5f*(dx*(-Ipn+Inn) + dx*dx*(2*Ipn-5*Icn+4*Inn-Ian) + dx*dx*dx*(-Ipn+3*Icn-3*Inn+Ian)), > Ipa = (Tfloat)atXY(px,ay,z,c,out_value), Ica = (Tfloat)atXY(x,ay,z,c,out_value), Ina = (Tfloat)atXY(nx,ay,z,c,out_value), Iaa = (Tfloat)atXY(ax,ay,z,c,out_value), > Ia = Ica + 0.5f*(dx*(-Ipa+Ina) + dx*dx*(2*Ipa-5*Ica+4*Ina-Iaa) + dx*dx*dx*(-Ipa+3*Ica-3*Ina+Iaa)); > return Ic + 0.5f*(dy*(-Ip+In) + dy*dy*(2*Ip-5*Ic+4*In-Ia) + dy*dy*dy*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, const T out_value, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atXY(fx,fy,z,c,out_value); > return val<min_value?min_value:val>max_value?max_value:val; > } ># 12552 "./CImg.h" > Tfloat cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "cubic_atXY(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _cubic_atXY(fx,fy,z,c); > } > > Tfloat _cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy); > const int x = (int)nfx, y = (int)nfy; > const float dx = nfx - x, dy = nfy - y; > const int > px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2, > py = y-1<0?0:y-1, ny = dy>0?y+1:y, ay = y+2>=height()?height()-1:y+2; > const Tfloat > Ipp = (Tfloat)(*this)(px,py,z,c), Icp = (Tfloat)(*this)(x,py,z,c), Inp = (Tfloat)(*this)(nx,py,z,c), Iap = (Tfloat)(*this)(ax,py,z,c), > Ip = Icp + 0.5f*(dx*(-Ipp+Inp) + dx*dx*(2*Ipp-5*Icp+4*Inp-Iap) + dx*dx*dx*(-Ipp+3*Icp-3*Inp+Iap)), > Ipc = (Tfloat)(*this)(px,y,z,c), Icc = (Tfloat)(*this)(x, y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), Iac = (Tfloat)(*this)(ax,y,z,c), > Ic = Icc + 0.5f*(dx*(-Ipc+Inc) + dx*dx*(2*Ipc-5*Icc+4*Inc-Iac) + dx*dx*dx*(-Ipc+3*Icc-3*Inc+Iac)), > Ipn = (Tfloat)(*this)(px,ny,z,c), Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c), Ian = (Tfloat)(*this)(ax,ny,z,c), > In = Icn + 0.5f*(dx*(-Ipn+Inn) + dx*dx*(2*Ipn-5*Icn+4*Inn-Ian) + dx*dx*dx*(-Ipn+3*Icn-3*Inn+Ian)), > Ipa = (Tfloat)(*this)(px,ay,z,c), Ica = (Tfloat)(*this)(x,ay,z,c), Ina = (Tfloat)(*this)(nx,ay,z,c), Iaa = (Tfloat)(*this)(ax,ay,z,c), > Ia = Ica + 0.5f*(dx*(-Ipa+Ina) + dx*dx*(2*Ipa-5*Ica+4*Ina-Iaa) + dx*dx*dx*(-Ipa+3*Ica-3*Ina+Iaa)); > return Ic + 0.5f*(dy*(-Ip+In) + dy*dy*(2*Ip-5*Ic+4*In-Ia) + dy*dy*dy*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atXY(fx,fy,z,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > Tfloat _cubic_atXY(const float fx, const float fy, const int z, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = _cubic_atXY(fx,fy,z,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > > > > > > Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2, > y = (int)fy - (fy>=0?0:1), py = y - 1, ny = y + 1, ay = y + 2, > z = (int)fz - (fz>=0?0:1), pz = z - 1, nz = z + 1, az = z + 2; > const float dx = fx - x, dy = fy - y, dz = fz - z; > const Tfloat > Ippp = (Tfloat)atXYZ(px,py,pz,c,out_value), Icpp = (Tfloat)atXYZ(x,py,pz,c,out_value), > Inpp = (Tfloat)atXYZ(nx,py,pz,c,out_value), Iapp = (Tfloat)atXYZ(ax,py,pz,c,out_value), > Ipp = Icpp + 0.5f*(dx*(-Ippp+Inpp) + dx*dx*(2*Ippp-5*Icpp+4*Inpp-Iapp) + dx*dx*dx*(-Ippp+3*Icpp-3*Inpp+Iapp)), > Ipcp = (Tfloat)atXYZ(px,y,pz,c,out_value), Iccp = (Tfloat)atXYZ(x, y,pz,c,out_value), > Incp = (Tfloat)atXYZ(nx,y,pz,c,out_value), Iacp = (Tfloat)atXYZ(ax,y,pz,c,out_value), > Icp = Iccp + 0.5f*(dx*(-Ipcp+Incp) + dx*dx*(2*Ipcp-5*Iccp+4*Incp-Iacp) + dx*dx*dx*(-Ipcp+3*Iccp-3*Incp+Iacp)), > Ipnp = (Tfloat)atXYZ(px,ny,pz,c,out_value), Icnp = (Tfloat)atXYZ(x,ny,pz,c,out_value), > Innp = (Tfloat)atXYZ(nx,ny,pz,c,out_value), Ianp = (Tfloat)atXYZ(ax,ny,pz,c,out_value), > Inp = Icnp + 0.5f*(dx*(-Ipnp+Innp) + dx*dx*(2*Ipnp-5*Icnp+4*Innp-Ianp) + dx*dx*dx*(-Ipnp+3*Icnp-3*Innp+Ianp)), > Ipap = (Tfloat)atXYZ(px,ay,pz,c,out_value), Icap = (Tfloat)atXYZ(x,ay,pz,c,out_value), > Inap = (Tfloat)atXYZ(nx,ay,pz,c,out_value), Iaap = (Tfloat)atXYZ(ax,ay,pz,c,out_value), > Iap = Icap + 0.5f*(dx*(-Ipap+Inap) + dx*dx*(2*Ipap-5*Icap+4*Inap-Iaap) + dx*dx*dx*(-Ipap+3*Icap-3*Inap+Iaap)), > Ip = Icp + 0.5f*(dy*(-Ipp+Inp) + dy*dy*(2*Ipp-5*Icp+4*Inp-Iap) + dy*dy*dy*(-Ipp+3*Icp-3*Inp+Iap)), > Ippc = (Tfloat)atXYZ(px,py,z,c,out_value), Icpc = (Tfloat)atXYZ(x,py,z,c,out_value), > Inpc = (Tfloat)atXYZ(nx,py,z,c,out_value), Iapc = (Tfloat)atXYZ(ax,py,z,c,out_value), > Ipc = Icpc + 0.5f*(dx*(-Ippc+Inpc) + dx*dx*(2*Ippc-5*Icpc+4*Inpc-Iapc) + dx*dx*dx*(-Ippc+3*Icpc-3*Inpc+Iapc)), > Ipcc = (Tfloat)atXYZ(px,y,z,c,out_value), Iccc = (Tfloat)atXYZ(x, y,z,c,out_value), > Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), Iacc = (Tfloat)atXYZ(ax,y,z,c,out_value), > Icc = Iccc + 0.5f*(dx*(-Ipcc+Incc) + dx*dx*(2*Ipcc-5*Iccc+4*Incc-Iacc) + dx*dx*dx*(-Ipcc+3*Iccc-3*Incc+Iacc)), > Ipnc = (Tfloat)atXYZ(px,ny,z,c,out_value), Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), > Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), Ianc = (Tfloat)atXYZ(ax,ny,z,c,out_value), > Inc = Icnc + 0.5f*(dx*(-Ipnc+Innc) + dx*dx*(2*Ipnc-5*Icnc+4*Innc-Ianc) + dx*dx*dx*(-Ipnc+3*Icnc-3*Innc+Ianc)), > Ipac = (Tfloat)atXYZ(px,ay,z,c,out_value), Icac = (Tfloat)atXYZ(x,ay,z,c,out_value), > Inac = (Tfloat)atXYZ(nx,ay,z,c,out_value), Iaac = (Tfloat)atXYZ(ax,ay,z,c,out_value), > Iac = Icac + 0.5f*(dx*(-Ipac+Inac) + dx*dx*(2*Ipac-5*Icac+4*Inac-Iaac) + dx*dx*dx*(-Ipac+3*Icac-3*Inac+Iaac)), > Ic = Icc + 0.5f*(dy*(-Ipc+Inc) + dy*dy*(2*Ipc-5*Icc+4*Inc-Iac) + dy*dy*dy*(-Ipc+3*Icc-3*Inc+Iac)), > Ippn = (Tfloat)atXYZ(px,py,nz,c,out_value), Icpn = (Tfloat)atXYZ(x,py,nz,c,out_value), > Inpn = (Tfloat)atXYZ(nx,py,nz,c,out_value), Iapn = (Tfloat)atXYZ(ax,py,nz,c,out_value), > Ipn = Icpn + 0.5f*(dx*(-Ippn+Inpn) + dx*dx*(2*Ippn-5*Icpn+4*Inpn-Iapn) + dx*dx*dx*(-Ippn+3*Icpn-3*Inpn+Iapn)), > Ipcn = (Tfloat)atXYZ(px,y,nz,c,out_value), Iccn = (Tfloat)atXYZ(x, y,nz,c,out_value), > Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), Iacn = (Tfloat)atXYZ(ax,y,nz,c,out_value), > Icn = Iccn + 0.5f*(dx*(-Ipcn+Incn) + dx*dx*(2*Ipcn-5*Iccn+4*Incn-Iacn) + dx*dx*dx*(-Ipcn+3*Iccn-3*Incn+Iacn)), > Ipnn = (Tfloat)atXYZ(px,ny,nz,c,out_value), Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), > Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value), Iann = (Tfloat)atXYZ(ax,ny,nz,c,out_value), > Inn = Icnn + 0.5f*(dx*(-Ipnn+Innn) + dx*dx*(2*Ipnn-5*Icnn+4*Innn-Iann) + dx*dx*dx*(-Ipnn+3*Icnn-3*Innn+Iann)), > Ipan = (Tfloat)atXYZ(px,ay,nz,c,out_value), Ican = (Tfloat)atXYZ(x,ay,nz,c,out_value), > Inan = (Tfloat)atXYZ(nx,ay,nz,c,out_value), Iaan = (Tfloat)atXYZ(ax,ay,nz,c,out_value), > Ian = Ican + 0.5f*(dx*(-Ipan+Inan) + dx*dx*(2*Ipan-5*Ican+4*Inan-Iaan) + dx*dx*dx*(-Ipan+3*Ican-3*Inan+Iaan)), > In = Icn + 0.5f*(dy*(-Ipn+Inn) + dy*dy*(2*Ipn-5*Icn+4*Inn-Ian) + dy*dy*dy*(-Ipn+3*Icn-3*Inn+Ian)), > Ippa = (Tfloat)atXYZ(px,py,az,c,out_value), Icpa = (Tfloat)atXYZ(x,py,az,c,out_value), > Inpa = (Tfloat)atXYZ(nx,py,az,c,out_value), Iapa = (Tfloat)atXYZ(ax,py,az,c,out_value), > Ipa = Icpa + 0.5f*(dx*(-Ippa+Inpa) + dx*dx*(2*Ippa-5*Icpa+4*Inpa-Iapa) + dx*dx*dx*(-Ippa+3*Icpa-3*Inpa+Iapa)), > Ipca = (Tfloat)atXYZ(px,y,az,c,out_value), Icca = (Tfloat)atXYZ(x, y,az,c,out_value), > Inca = (Tfloat)atXYZ(nx,y,az,c,out_value), Iaca = (Tfloat)atXYZ(ax,y,az,c,out_value), > Ica = Icca + 0.5f*(dx*(-Ipca+Inca) + dx*dx*(2*Ipca-5*Icca+4*Inca-Iaca) + dx*dx*dx*(-Ipca+3*Icca-3*Inca+Iaca)), > Ipna = (Tfloat)atXYZ(px,ny,az,c,out_value), Icna = (Tfloat)atXYZ(x,ny,az,c,out_value), > Inna = (Tfloat)atXYZ(nx,ny,az,c,out_value), Iana = (Tfloat)atXYZ(ax,ny,az,c,out_value), > Ina = Icna + 0.5f*(dx*(-Ipna+Inna) + dx*dx*(2*Ipna-5*Icna+4*Inna-Iana) + dx*dx*dx*(-Ipna+3*Icna-3*Inna+Iana)), > Ipaa = (Tfloat)atXYZ(px,ay,az,c,out_value), Icaa = (Tfloat)atXYZ(x,ay,az,c,out_value), > Inaa = (Tfloat)atXYZ(nx,ay,az,c,out_value), Iaaa = (Tfloat)atXYZ(ax,ay,az,c,out_value), > Iaa = Icaa + 0.5f*(dx*(-Ipaa+Inaa) + dx*dx*(2*Ipaa-5*Icaa+4*Inaa-Iaaa) + dx*dx*dx*(-Ipaa+3*Icaa-3*Inaa+Iaaa)), > Ia = Ica + 0.5f*(dy*(-Ipa+Ina) + dy*dy*(2*Ipa-5*Ica+4*Ina-Iaa) + dy*dy*dy*(-Ipa+3*Ica-3*Ina+Iaa)); > return Ic + 0.5f*(dz*(-Ip+In) + dz*dz*(2*Ip-5*Ic+4*In-Ia) + dz*dz*dz*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atXYZ(fx,fy,fz,c,out_value); > return val<min_value?min_value:val>max_value?max_value:val; > } ># 12681 "./CImg.h" > Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "cubic_atXYZ(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _cubic_atXYZ(fx,fy,fz,c); > } > > Tfloat _cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy), > nfz = fz<0?0:(fz>_depth-1?_depth-1:fz); > const int x = (int)nfx, y = (int)nfy, z = (int)nfz; > const float dx = nfx - x, dy = nfy - y, dz = nfz - z; > const int > px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2, > py = y-1<0?0:y-1, ny = dy>0?y+1:y, ay = y+2>=height()?height()-1:y+2, > pz = z-1<0?0:z-1, nz = dz>0?z+1:z, az = z+2>=depth()?depth()-1:z+2; > const Tfloat > Ippp = (Tfloat)(*this)(px,py,pz,c), Icpp = (Tfloat)(*this)(x,py,pz,c), > Inpp = (Tfloat)(*this)(nx,py,pz,c), Iapp = (Tfloat)(*this)(ax,py,pz,c), > Ipp = Icpp + 0.5f*(dx*(-Ippp+Inpp) + dx*dx*(2*Ippp-5*Icpp+4*Inpp-Iapp) + dx*dx*dx*(-Ippp+3*Icpp-3*Inpp+Iapp)), > Ipcp = (Tfloat)(*this)(px,y,pz,c), Iccp = (Tfloat)(*this)(x, y,pz,c), > Incp = (Tfloat)(*this)(nx,y,pz,c), Iacp = (Tfloat)(*this)(ax,y,pz,c), > Icp = Iccp + 0.5f*(dx*(-Ipcp+Incp) + dx*dx*(2*Ipcp-5*Iccp+4*Incp-Iacp) + dx*dx*dx*(-Ipcp+3*Iccp-3*Incp+Iacp)), > Ipnp = (Tfloat)(*this)(px,ny,pz,c), Icnp = (Tfloat)(*this)(x,ny,pz,c), > Innp = (Tfloat)(*this)(nx,ny,pz,c), Ianp = (Tfloat)(*this)(ax,ny,pz,c), > Inp = Icnp + 0.5f*(dx*(-Ipnp+Innp) + dx*dx*(2*Ipnp-5*Icnp+4*Innp-Ianp) + dx*dx*dx*(-Ipnp+3*Icnp-3*Innp+Ianp)), > Ipap = (Tfloat)(*this)(px,ay,pz,c), Icap = (Tfloat)(*this)(x,ay,pz,c), > Inap = (Tfloat)(*this)(nx,ay,pz,c), Iaap = (Tfloat)(*this)(ax,ay,pz,c), > Iap = Icap + 0.5f*(dx*(-Ipap+Inap) + dx*dx*(2*Ipap-5*Icap+4*Inap-Iaap) + dx*dx*dx*(-Ipap+3*Icap-3*Inap+Iaap)), > Ip = Icp + 0.5f*(dy*(-Ipp+Inp) + dy*dy*(2*Ipp-5*Icp+4*Inp-Iap) + dy*dy*dy*(-Ipp+3*Icp-3*Inp+Iap)), > Ippc = (Tfloat)(*this)(px,py,z,c), Icpc = (Tfloat)(*this)(x,py,z,c), > Inpc = (Tfloat)(*this)(nx,py,z,c), Iapc = (Tfloat)(*this)(ax,py,z,c), > Ipc = Icpc + 0.5f*(dx*(-Ippc+Inpc) + dx*dx*(2*Ippc-5*Icpc+4*Inpc-Iapc) + dx*dx*dx*(-Ippc+3*Icpc-3*Inpc+Iapc)), > Ipcc = (Tfloat)(*this)(px,y,z,c), Iccc = (Tfloat)(*this)(x, y,z,c), > Incc = (Tfloat)(*this)(nx,y,z,c), Iacc = (Tfloat)(*this)(ax,y,z,c), > Icc = Iccc + 0.5f*(dx*(-Ipcc+Incc) + dx*dx*(2*Ipcc-5*Iccc+4*Incc-Iacc) + dx*dx*dx*(-Ipcc+3*Iccc-3*Incc+Iacc)), > Ipnc = (Tfloat)(*this)(px,ny,z,c), Icnc = (Tfloat)(*this)(x,ny,z,c), > Innc = (Tfloat)(*this)(nx,ny,z,c), Ianc = (Tfloat)(*this)(ax,ny,z,c), > Inc = Icnc + 0.5f*(dx*(-Ipnc+Innc) + dx*dx*(2*Ipnc-5*Icnc+4*Innc-Ianc) + dx*dx*dx*(-Ipnc+3*Icnc-3*Innc+Ianc)), > Ipac = (Tfloat)(*this)(px,ay,z,c), Icac = (Tfloat)(*this)(x,ay,z,c), > Inac = (Tfloat)(*this)(nx,ay,z,c), Iaac = (Tfloat)(*this)(ax,ay,z,c), > Iac = Icac + 0.5f*(dx*(-Ipac+Inac) + dx*dx*(2*Ipac-5*Icac+4*Inac-Iaac) + dx*dx*dx*(-Ipac+3*Icac-3*Inac+Iaac)), > Ic = Icc + 0.5f*(dy*(-Ipc+Inc) + dy*dy*(2*Ipc-5*Icc+4*Inc-Iac) + dy*dy*dy*(-Ipc+3*Icc-3*Inc+Iac)), > Ippn = (Tfloat)(*this)(px,py,nz,c), Icpn = (Tfloat)(*this)(x,py,nz,c), > Inpn = (Tfloat)(*this)(nx,py,nz,c), Iapn = (Tfloat)(*this)(ax,py,nz,c), > Ipn = Icpn + 0.5f*(dx*(-Ippn+Inpn) + dx*dx*(2*Ippn-5*Icpn+4*Inpn-Iapn) + dx*dx*dx*(-Ippn+3*Icpn-3*Inpn+Iapn)), > Ipcn = (Tfloat)(*this)(px,y,nz,c), Iccn = (Tfloat)(*this)(x, y,nz,c), > Incn = (Tfloat)(*this)(nx,y,nz,c), Iacn = (Tfloat)(*this)(ax,y,nz,c), > Icn = Iccn + 0.5f*(dx*(-Ipcn+Incn) + dx*dx*(2*Ipcn-5*Iccn+4*Incn-Iacn) + dx*dx*dx*(-Ipcn+3*Iccn-3*Incn+Iacn)), > Ipnn = (Tfloat)(*this)(px,ny,nz,c), Icnn = (Tfloat)(*this)(x,ny,nz,c), > Innn = (Tfloat)(*this)(nx,ny,nz,c), Iann = (Tfloat)(*this)(ax,ny,nz,c), > Inn = Icnn + 0.5f*(dx*(-Ipnn+Innn) + dx*dx*(2*Ipnn-5*Icnn+4*Innn-Iann) + dx*dx*dx*(-Ipnn+3*Icnn-3*Innn+Iann)), > Ipan = (Tfloat)(*this)(px,ay,nz,c), Ican = (Tfloat)(*this)(x,ay,nz,c), > Inan = (Tfloat)(*this)(nx,ay,nz,c), Iaan = (Tfloat)(*this)(ax,ay,nz,c), > Ian = Ican + 0.5f*(dx*(-Ipan+Inan) + dx*dx*(2*Ipan-5*Ican+4*Inan-Iaan) + dx*dx*dx*(-Ipan+3*Ican-3*Inan+Iaan)), > In = Icn + 0.5f*(dy*(-Ipn+Inn) + dy*dy*(2*Ipn-5*Icn+4*Inn-Ian) + dy*dy*dy*(-Ipn+3*Icn-3*Inn+Ian)), > Ippa = (Tfloat)(*this)(px,py,az,c), Icpa = (Tfloat)(*this)(x,py,az,c), > Inpa = (Tfloat)(*this)(nx,py,az,c), Iapa = (Tfloat)(*this)(ax,py,az,c), > Ipa = Icpa + 0.5f*(dx*(-Ippa+Inpa) + dx*dx*(2*Ippa-5*Icpa+4*Inpa-Iapa) + dx*dx*dx*(-Ippa+3*Icpa-3*Inpa+Iapa)), > Ipca = (Tfloat)(*this)(px,y,az,c), Icca = (Tfloat)(*this)(x, y,az,c), > Inca = (Tfloat)(*this)(nx,y,az,c), Iaca = (Tfloat)(*this)(ax,y,az,c), > Ica = Icca + 0.5f*(dx*(-Ipca+Inca) + dx*dx*(2*Ipca-5*Icca+4*Inca-Iaca) + dx*dx*dx*(-Ipca+3*Icca-3*Inca+Iaca)), > Ipna = (Tfloat)(*this)(px,ny,az,c), Icna = (Tfloat)(*this)(x,ny,az,c), > Inna = (Tfloat)(*this)(nx,ny,az,c), Iana = (Tfloat)(*this)(ax,ny,az,c), > Ina = Icna + 0.5f*(dx*(-Ipna+Inna) + dx*dx*(2*Ipna-5*Icna+4*Inna-Iana) + dx*dx*dx*(-Ipna+3*Icna-3*Inna+Iana)), > Ipaa = (Tfloat)(*this)(px,ay,az,c), Icaa = (Tfloat)(*this)(x,ay,az,c), > Inaa = (Tfloat)(*this)(nx,ay,az,c), Iaaa = (Tfloat)(*this)(ax,ay,az,c), > Iaa = Icaa + 0.5f*(dx*(-Ipaa+Inaa) + dx*dx*(2*Ipaa-5*Icaa+4*Inaa-Iaaa) + dx*dx*dx*(-Ipaa+3*Icaa-3*Inaa+Iaaa)), > Ia = Ica + 0.5f*(dy*(-Ipa+Ina) + dy*dy*(2*Ipa-5*Ica+4*Ina-Iaa) + dy*dy*dy*(-Ipa+3*Ica-3*Ina+Iaa)); > return Ic + 0.5f*(dz*(-Ip+In) + dz*dz*(2*Ip-5*Ic+4*In-Ia) + dz*dz*dz*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atXYZ(fx,fy,fz,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > Tfloat _cubic_atXYZ(const float fx, const float fy, const float fz, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = _cubic_atXYZ(fx,fy,fz,c); > return val<min_value?min_value:val>max_value?max_value:val; > } ># 12786 "./CImg.h" > CImg<T>& set_linear_atXY(const T& value, const float fx, const float fy=0, const int z=0, const int c=0, > const bool is_added=false) { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1; > const float > dx = fx - x, > dy = fy - y; > if (z>=0 && z<depth() && c>=0 && c<spectrum()) { > if (y>=0 && y<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*(1-dy), w2 = is_added?1:(1-w1); > (*this)(x,y,z,c) = (T)(w1*value + w2*(*this)(x,y,z,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*(1-dy), w2 = is_added?1:(1-w1); > (*this)(nx,y,z,c) = (T)(w1*value + w2*(*this)(nx,y,z,c)); > } > } > if (ny>=0 && ny<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*dy, w2 = is_added?1:(1-w1); > (*this)(x,ny,z,c) = (T)(w1*value + w2*(*this)(x,ny,z,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*dy, w2 = is_added?1:(1-w1); > (*this)(nx,ny,z,c) = (T)(w1*value + w2*(*this)(nx,ny,z,c)); > } > } > } > return *this; > } > > > > > > > CImg<T>& set_linear_atXYZ(const T& value, const float fx, const float fy=0, const float fz=0, const int c=0, > const bool is_added=false) { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1, > z = (int)fz - (fz>=0?0:1), nz = z + 1; > const float > dx = fx - x, > dy = fy - y, > dz = fz - z; > if (c>=0 && c<spectrum()) { > if (z>=0 && z<depth()) { > if (y>=0 && y<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*(1-dy)*(1-dz), w2 = is_added?1:(1-w1); > (*this)(x,y,z,c) = (T)(w1*value + w2*(*this)(x,y,z,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*(1-dy)*(1-dz), w2 = is_added?1:(1-w1); > (*this)(nx,y,z,c) = (T)(w1*value + w2*(*this)(nx,y,z,c)); > } > } > if (ny>=0 && ny<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*dy*(1-dz), w2 = is_added?1:(1-w1); > (*this)(x,ny,z,c) = (T)(w1*value + w2*(*this)(x,ny,z,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*dy*(1-dz), w2 = is_added?1:(1-w1); > (*this)(nx,ny,z,c) = (T)(w1*value + w2*(*this)(nx,ny,z,c)); > } > } > } > if (nz>=0 && nz<depth()) { > if (y>=0 && y<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*(1-dy)*dz, w2 = is_added?1:(1-w1); > (*this)(x,y,nz,c) = (T)(w1*value + w2*(*this)(x,y,nz,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*(1-dy)*dz, w2 = is_added?1:(1-w1); > (*this)(nx,y,nz,c) = (T)(w1*value + w2*(*this)(nx,y,nz,c)); > } > } > if (ny>=0 && ny<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*dy*dz, w2 = is_added?1:(1-w1); > (*this)(x,ny,nz,c) = (T)(w1*value + w2*(*this)(x,ny,nz,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*dy*dz, w2 = is_added?1:(1-w1); > (*this)(nx,ny,nz,c) = (T)(w1*value + w2*(*this)(nx,ny,nz,c)); > } > } > } > } > return *this; > } ># 12896 "./CImg.h" > CImg<charT> value_string(const char separator=',', const unsigned int max_size=0) const { > if (is_empty()) return CImg<charT>::string(""); > CImgList<charT> items; > char s_item[256] = { 0 }; > const T *ptrs = _data; > unsigned int string_size = 0; > for (unsigned long off = 0, siz = (unsigned int)size(); off<siz && string_size<=max_size; ++off) { > const unsigned int printed_size = 1U + snprintf(s_item,sizeof(s_item),cimg::type<T>::format(),cimg::type<T>::format(*(ptrs++))); > CImg<charT> item(s_item,printed_size); > item[printed_size-1] = separator; > item.move_to(items); > if (max_size) string_size+=printed_size; > } > CImg<charT> res; > (items>'x').move_to(res); > if (max_size && res._width>max_size) res.crop(0,max_size); > res.back() = 0; > return res; > } ># 12931 "./CImg.h" > bool is_shared() const { > return _is_shared; > } > > > > > > > bool is_empty() const { > return !(_data && _width && _height && _depth && _spectrum); > } > > > > > > bool is_inf() const { > if (cimg::type<T>::is_float()) for (T *p = (*this)._data, *_maxp = (*this)._data + (*this).size(); p<_maxp; ++p) if (cimg::type<T>::is_inf((float)*p)) return true; > return false; > } > > > > > > bool is_nan() const { > if (cimg::type<T>::is_float()) for (T *p = (*this)._data, *_maxp = (*this)._data + (*this).size(); p<_maxp; ++p) if (cimg::type<T>::is_nan((float)*p)) return true; > return false; > } > > > bool is_sameX(const unsigned int size_x) const { > return _width==size_x; > } > > > template<typename t> > bool is_sameX(const CImg<t>& img) const { > return is_sameX(img._width); > } > > > bool is_sameX(const CImgDisplay& disp) const { > return is_sameX(disp._width); > } > > > bool is_sameY(const unsigned int size_y) const { > return _height==size_y; > } > > > template<typename t> > bool is_sameY(const CImg<t>& img) const { > return is_sameY(img._height); > } > > > bool is_sameY(const CImgDisplay& disp) const { > return is_sameY(disp._height); > } > > > bool is_sameZ(const unsigned int size_z) const { > return _depth==size_z; > } > > > template<typename t> > bool is_sameZ(const CImg<t>& img) const { > return is_sameZ(img._depth); > } > > > bool is_sameC(const unsigned int size_c) const { > return _spectrum==size_c; > } > > > template<typename t> > bool is_sameC(const CImg<t>& img) const { > return is_sameC(img._spectrum); > } > > > > > > bool is_sameXY(const unsigned int size_x, const unsigned int size_y) const { > return _width==size_x && _height==size_y; > } > > > > > > template<typename t> > bool is_sameXY(const CImg<t>& img) const { > return is_sameXY(img._width,img._height); > } > > > > > > bool is_sameXY(const CImgDisplay& disp) const { > return is_sameXY(disp._width,disp._height); > } > > > > > > bool is_sameXZ(const unsigned int size_x, const unsigned int size_z) const { > return _width==size_x && _depth==size_z; > } > > > > > > template<typename t> > bool is_sameXZ(const CImg<t>& img) const { > return is_sameXZ(img._width,img._depth); > } > > > > > > bool is_sameXC(const unsigned int size_x, const unsigned int size_c) const { > return _width==size_x && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameXC(const CImg<t>& img) const { > return is_sameXC(img._width,img._spectrum); > } > > > > > > bool is_sameYZ(const unsigned int size_y, const unsigned int size_z) const { > return _height==size_y && _depth==size_z; > } > > > > > > template<typename t> > bool is_sameYZ(const CImg<t>& img) const { > return is_sameYZ(img._height,img._depth); > } > > > > > > bool is_sameYC(const unsigned int size_y, const unsigned int size_c) const { > return _height==size_y && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameYC(const CImg<t>& img) const { > return is_sameYC(img._height,img._spectrum); > } > > > > > > bool is_sameZC(const unsigned int size_z, const unsigned int size_c) const { > return _depth==size_z && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameZC(const CImg<t>& img) const { > return is_sameZC(img._depth,img._spectrum); > } > > > > > > bool is_sameXYZ(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z) const { > return is_sameXY(size_x,size_y) && _depth==size_z; > } > > > > > > template<typename t> > bool is_sameXYZ(const CImg<t>& img) const { > return is_sameXYZ(img._width,img._height,img._depth); > } > > > > > > bool is_sameXYC(const unsigned int size_x, const unsigned int size_y, const unsigned int size_c) const { > return is_sameXY(size_x,size_y) && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameXYC(const CImg<t>& img) const { > return is_sameXYC(img._width,img._height,img._spectrum); > } > > > > > > bool is_sameXZC(const unsigned int size_x, const unsigned int size_z, const unsigned int size_c) const { > return is_sameXZ(size_x,size_z) && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameXZC(const CImg<t>& img) const { > return is_sameXZC(img._width,img._depth,img._spectrum); > } > > > > > > bool is_sameYZC(const unsigned int size_y, const unsigned int size_z, const unsigned int size_c) const { > return is_sameYZ(size_y,size_z) && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameYZC(const CImg<t>& img) const { > return is_sameYZC(img._height,img._depth,img._spectrum); > } > > > > > > bool is_sameXYZC(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c) const { > return is_sameXYZ(size_x,size_y,size_z) && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameXYZC(const CImg<t>& img) const { > return is_sameXYZC(img._width,img._height,img._depth,img._spectrum); > } ># 13226 "./CImg.h" > bool containsXYZC(const int x, const int y=0, const int z=0, const int c=0) const { > return !is_empty() && x>=0 && x<width() && y>=0 && y<height() && z>=0 && z<depth() && c>=0 && c<spectrum(); > } ># 13250 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& x, t& y, t& z, t& c) const { > const unsigned long wh = (unsigned long)_width*_height, whd = wh*_depth, siz = whd*_spectrum; > const T *const ppixel = &pixel; > if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; > unsigned long off = (unsigned long)(ppixel - _data); > const unsigned long nc = off/whd; > off%=whd; > const unsigned long nz = off/wh; > off%=wh; > const unsigned long ny = off/_width, nx = off%_width; > x = (t)nx; y = (t)ny; z = (t)nz; c = (t)nc; > return true; > } > > > > > > template<typename t> > bool contains(const T& pixel, t& x, t& y, t& z) const { > const unsigned long wh = (unsigned long)_width*_height, whd = wh*_depth, siz = whd*_spectrum; > const T *const ppixel = &pixel; > if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; > unsigned long off = ((unsigned long)(ppixel - _data))%whd; > const unsigned long nz = off/wh; > off%=wh; > const unsigned long ny = off/_width, nx = off%_width; > x = (t)nx; y = (t)ny; z = (t)nz; > return true; > } > > > > > > template<typename t> > bool contains(const T& pixel, t& x, t& y) const { > const unsigned long wh = (unsigned long)_width*_height, siz = wh*_depth*_spectrum; > const T *const ppixel = &pixel; > if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; > unsigned long off = ((unsigned int)(ppixel - _data))%wh; > const unsigned long ny = off/_width, nx = off%_width; > x = (t)nx; y = (t)ny; > return true; > } > > > > > > template<typename t> > bool contains(const T& pixel, t& x) const { > const T *const ppixel = &pixel; > if (is_empty() || ppixel<_data || ppixel>=_data+size()) return false; > x = (t)(((unsigned long)(ppixel - _data))%_width); > return true; > } > > > > > > bool contains(const T& pixel) const { > const T *const ppixel = &pixel; > return !is_empty() && ppixel>=_data && ppixel<_data + size(); > } ># 13336 "./CImg.h" > template<typename t> > bool is_overlapped(const CImg<t>& img) const { > const unsigned long csiz = size(), isiz = img.size(); > return !((void*)(_data + csiz)<=(void*)img._data || (void*)_data>=(void*)(img._data + isiz)); > } ># 13356 "./CImg.h" > template<typename tp, typename tc, typename to> > bool is_object3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool full_check=true, > char *const error_message=0) const { > if (error_message) *error_message = 0; > > > if (is_empty()) { > if (primitives || colors || opacities) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines no vertices but %u primitives, %u colors and %lu opacities", > _width,primitives._width,primitives._width,colors._width,(unsigned long)opacities.size()); > return false; > } > return true; > } > > > if (_height!=3 || _depth>1 || _spectrum>1) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) has invalid vertex dimensions (%u,%u,%u,%u)", > _width,primitives._width,_width,_height,_depth,_spectrum); > return false; > } > if (colors._width>primitives._width+1) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines %u colors", > _width,primitives._width,colors._width); > return false; > } > if (opacities.size()>primitives._width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines %lu opacities", > _width,primitives._width,(unsigned long)opacities.size()); > return false; > } > if (!full_check) return true; > > > for (int l = 0; l<(int)(primitives)._width; ++l) { > const CImg<tp>& primitive = primitives[l]; > const unsigned long psiz = primitive.size(); > switch (psiz) { > case 1 : { > const unsigned int i0 = (unsigned int)primitive(0); > if (i0>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indice %u in point primitive [%u]", > _width,primitives._width,i0,l); > return false; > } > } break; > case 5 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1); > if (i0>=_width || i1>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in sphere primitive [%u]", > _width,primitives._width,i0,i1,l); > return false; > } > } break; > case 2 : > case 6 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1); > if (i0>=_width || i1>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in segment primitive [%u]", > _width,primitives._width,i0,i1,l); > return false; > } > } break; > case 3 : > case 9 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2); > if (i0>=_width || i1>=_width || i2>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u) in triangle primitive [%u]", > _width,primitives._width,i0,i1,i2,l); > return false; > } > } break; > case 4 : > case 12 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2), > i3 = (unsigned int)primitive(3); > if (i0>=_width || i1>=_width || i2>=_width || i3>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in quadrangle primitive [%u]", > _width,primitives._width,i0,i1,i2,i3,l); > return false; > } > } break; > default : > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines an invalid primitive [%u] of size %u", > _width,primitives._width,l,(unsigned int)psiz); > return false; > } > } > > > for (int c = 0; c<(int)(colors)._width; ++c) { > const CImg<tc>& color = colors[c]; > if (!color) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines no color for primitive [%u]", > _width,primitives._width,c); > return false; > } > } > > > if (colors._width>primitives._width) { > const CImg<tc> &light = colors.back(); > if (!light || light._depth>1) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines an invalid light texture (%u,%u,%u,%u)", > _width,primitives._width,light._width,light._height,light._depth,light._spectrum); > return false; > } > } > > return true; > } ># 13503 "./CImg.h" > bool is_CImg3d(const bool full_check=true, char *const error_message=0) const { > if (error_message) *error_message = 0; > > > if (_width!=1 || _height<8 || _depth!=1 || _spectrum!=1) { > if (error_message) std::sprintf(error_message, > "CImg3d has invalid dimensions (%u,%u,%u,%u)", > _width,_height,_depth,_spectrum); > return false; > } > const T *ptrs = _data, *const ptre = end(); > if (!_is_CImg3d(*(ptrs++),'C') || !_is_CImg3d(*(ptrs++),'I') || !_is_CImg3d(*(ptrs++),'m') || > !_is_CImg3d(*(ptrs++),'g') || !_is_CImg3d(*(ptrs++),'3') || !_is_CImg3d(*(ptrs++),'d')) { > if (error_message) std::sprintf(error_message, > "CImg3d header not found"); > return false; > } > const unsigned int > nb_points = cimg::float2uint((float)*(ptrs++)), > nb_primitives = cimg::float2uint((float)*(ptrs++)); > > > if (!full_check) { > const unsigned long minimal_size = 8UL + 3*nb_points + 6*nb_primitives; > if (_data + minimal_size>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) has only %lu values, while at least %lu values were expected", > nb_points,nb_primitives,size(),minimal_size); > return false; > } > } > > > if (!nb_points) { > if (nb_primitives) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines no vertices but %u primitives", > nb_points,nb_primitives,nb_primitives); > return false; > } > if (ptrs!=ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) is an empty object but contains %u value%s more than expected", > nb_points,nb_primitives,(unsigned int)(ptre-ptrs),(ptre-ptrs)>1?"s":""); > return false; > } > return true; > } > if (ptrs+3*nb_points>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines only %u vertices data", > nb_points,nb_primitives,(unsigned int)(ptre-ptrs)/3); > return false; > } > ptrs+=3*nb_points; > > > if (ptrs==ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines %u vertices but no primitive", > nb_points,nb_primitives,nb_points); > return false; > } > > if (!full_check) return true; > > for (unsigned int p = 0; p<nb_primitives; ++p) { > const unsigned int nb_inds = (unsigned int)*(ptrs++); > switch (nb_inds) { > case 1 : { > const unsigned int i0 = cimg::float2uint((float)*(ptrs++)); > if (i0>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indice %u in point primitive [%u]", > nb_points,nb_primitives,i0,p); > return false; > } > } break; > case 5 : { > const unsigned int > i0 = cimg::float2uint((float)*(ptrs++)), > i1 = cimg::float2uint((float)*(ptrs++)); > ptrs+=3; > if (i0>=nb_points || i1>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in sphere primitive [%u]", > nb_points,nb_primitives,i0,i1,p); > return false; > } > } break; > case 2 : case 6 : { > const unsigned int > i0 = cimg::float2uint((float)*(ptrs++)), > i1 = cimg::float2uint((float)*(ptrs++)); > if (nb_inds==6) ptrs+=4; > if (i0>=nb_points || i1>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in segment primitive [%u]", > nb_points,nb_primitives,i0,i1,p); > return false; > } > } break; > case 3 : case 9 : { > const unsigned int > i0 = cimg::float2uint((float)*(ptrs++)), > i1 = cimg::float2uint((float)*(ptrs++)), > i2 = cimg::float2uint((float)*(ptrs++)); > if (nb_inds==9) ptrs+=6; > if (i0>=nb_points || i1>=nb_points || i2>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u) in triangle primitive [%u]", > nb_points,nb_primitives,i0,i1,i2,p); > return false; > } > } break; > case 4 : case 12 : { > const unsigned int > i0 = cimg::float2uint((float)*(ptrs++)), > i1 = cimg::float2uint((float)*(ptrs++)), > i2 = cimg::float2uint((float)*(ptrs++)), > i3 = cimg::float2uint((float)*(ptrs++)); > if (nb_inds==12) ptrs+=8; > if (i0>=nb_points || i1>=nb_points || i2>=nb_points || i3>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in quadrangle primitive [%u]", > nb_points,nb_primitives,i0,i1,i2,i3,p); > return false; > } > } break; > default : > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines an invalid primitive [%u] of size %u", > nb_points,nb_primitives,p,nb_inds); > return false; > } > if (ptrs>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) has incomplete primitive data for primitive [%u], %u values missing", > nb_points,nb_primitives,p,(unsigned int)(ptrs-ptre)); > return false; > } > } > > > if (ptrs==ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines no color/texture data", > nb_points,nb_primitives); > return false; > } > for (unsigned int c = 0; c<nb_primitives; ++c) { > if (*(ptrs++)!=(T)-128) ptrs+=2; > else if ((ptrs+=3)<ptre) { > const unsigned int w = (unsigned int)*(ptrs-3), h = (unsigned int)*(ptrs-2), s = (unsigned int)*(ptrs-1); > if (!h && !s) { > if (w>=c) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid shared sprite/texture indice %u for primitive [%u]", > nb_points,nb_primitives,w,c); > return false; > } > } else ptrs+=w*h*s; > } > if (ptrs>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) has incomplete color/texture data for primitive [%u], %u values missing", > nb_points,nb_primitives,c,(unsigned int)(ptrs-ptre)); > return false; > } > } > > > if (ptrs==ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines no opacity data", > nb_points,nb_primitives); > return false; > } > for (unsigned int o = 0; o<nb_primitives; ++o) { > if (*(ptrs++)==(T)-128 && (ptrs+=3)<ptre) { > const unsigned int w = (unsigned int)*(ptrs-3), h = (unsigned int)*(ptrs-2), s = (unsigned int)*(ptrs-1); > if (!h && !s) { > if (w>=o) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid shared opacity indice %u for primitive [%u]", > nb_points,nb_primitives,w,o); > return false; > } > } else ptrs+=w*h*s; > } > if (ptrs>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) has incomplete opacity data for primitive [%u]", > nb_points,nb_primitives,o); > return false; > } > } > > > if (ptrs<ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) contains %u value%s more than expected", > nb_points,nb_primitives,(unsigned int)(ptre-ptrs),(ptre-ptrs)>1?"s":""); > return false; > } > return true; > } > > static bool _is_CImg3d(const T val, const char c) { > return val>=(T)c && val<(T)(c+1); > } ># 13723 "./CImg.h" > struct _cimg_math_parser { > CImgList<longT> code; > CImg<longT> opcode; > const CImg<longT>* p_code; > CImgList<charT> labelM; > CImg<uintT> level, labelMpos, label1pos; > CImg<doubleT> mem; > CImg<charT> expr; > const CImg<T>& reference; > CImg<Tdouble> reference_stats; > unsigned int mempos, result; > const char *const calling_function; > typedef double (*mp_func)(_cimg_math_parser&); ># 13755 "./CImg.h" > _cimg_math_parser():reference(CImg<T>::empty()),calling_function(0) {} > > _cimg_math_parser(const CImg<T>& img, const char *const expression, const char *const funcname=0): > reference(img),calling_function(funcname?funcname:"cimg_math_parser") { > unsigned int l = 0; > if (expression) { > l = (unsigned int)std::strlen(expression); > expr.assign(expression,l+1); > if (*expr._data) { > char *d = expr._data; > for (const char *s = expr._data; *s || (bool)(*d=0); ++s) if (*s!=' ') *(d++) = *s; > l = (unsigned int)(d - expr._data); > } > } > if (!l) throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Empty specified expression.", > pixel_type(),calling_function); > > int lv = 0; > level.assign(l); > unsigned int *pd = level._data; > for (const char *ps = expr._data; *ps && lv>=0; ++ps) *(pd++) = (unsigned int)(*ps=='('||*ps=='['?lv++:*ps==')'||*ps==']'?--lv:lv); > if (lv!=0) { > throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Unbalanced parentheses/brackets in specified expression '%s'.", > pixel_type(),calling_function, > expr._data); > } > > mem.assign(512); > mem[0] = 0; > mem[1] = 1; > mem[2] = 2; > mem[3] = (double)reference._width; > mem[4] = (double)reference._height; > mem[5] = (double)reference._depth; > mem[6] = (double)reference._spectrum; > mem[7] = cimg::PI; > mem[8] = std::exp(1.0); > mempos = 13; > labelMpos.assign(8); > label1pos.assign(128,1,1,1,~0U); > label1pos['w'] = 3; > label1pos['h'] = 4; > label1pos['d'] = 5; > label1pos['s'] = 6; > label1pos[0] = 7; > label1pos['e'] = 8; > label1pos['x'] = 9; > label1pos['y'] = 10; > label1pos['z'] = 11; > label1pos['c'] = 12; > result = compile(expr._data,expr._data+l); > } > > > unsigned int opcode0(const mp_func op) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos).move_to(code); > return pos; > } > > unsigned int opcode1(const mp_func op, const unsigned int arg1) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos,arg1).move_to(code); > return pos; > } > > unsigned int opcode2(const mp_func op, const unsigned int arg1, const unsigned int arg2) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos,arg1,arg2).move_to(code); > return pos; > } > > unsigned int opcode3(const mp_func op, const unsigned int arg1, const unsigned int arg2, const unsigned int arg3) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos,arg1,arg2,arg3).move_to(code); > return pos; > } > > unsigned int opcode6(const mp_func op, const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, > const unsigned int arg4, const unsigned int arg5, const unsigned int arg6) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos,arg1,arg2,arg3,arg4,arg5,arg6).move_to(code); > return pos; > } > > > unsigned int compile(char *const ss, char *const se) { > if (!ss || se<=ss || !*ss) { > throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Missing item in specified expression '%s'.", > pixel_type(),calling_function, > expr._data); > } > char > *const se1 = se-1, *const se2 = se-2, *const se3 = se-3, *const se4 = se-4, > *const ss1 = ss+1, *const ss2 = ss+2, *const ss3 = ss+3, *const ss4 = ss+4, > *const ss5 = ss+5, *const ss6 = ss+6, *const ss7 = ss+7; > const char saved_char = *se; *se = 0; > const unsigned int clevel = level[ss-expr._data], clevel1 = clevel+1; > if (*se1==';') return compile(ss,se1); > > > char end = 0, sep = 0; double val = 0; > const int nb = std::sscanf(ss,"%lf%c%c",&val,&sep,&end); > if (nb==1) { > if (val==0 || val==1 || val==2) { *se = saved_char; return (int)val; }; > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > mem[pos] = val; > { *se = saved_char; return pos; }; > } > if (nb==2 && sep=='%') { > if (val==0 || val==100 || val==200) { *se = saved_char; return (int)(val/100); }; > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > mem[pos] = val/100; > { *se = saved_char; return pos; }; > } > if (ss1==se) switch (*ss) { > case 'w' : case 'h' : case 'd' : case 's' : > case 'x' : case 'y' : case 'z' : case 'c' : case 'e' : { *se = saved_char; return label1pos[*ss]; }; > case 'u' : if (label1pos['u']!=~0U) { *se = saved_char; return label1pos['u']; }; { const unsigned int _i1 = 0, _i2 = 1; { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > case 'g' : if (label1pos['g']!=~0U) { *se = saved_char; return label1pos['g']; }; { *se = saved_char; return opcode0(mp_g); };; > case 'i' : if (label1pos['i']!=~0U) { *se = saved_char; return label1pos['i']; }; { *se = saved_char; return opcode0(mp_i); };; > case '?' : { const unsigned int _i1 = 0, _i2 = 1; { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > } > if (ss1==se1) { > if (*ss=='p' && *ss1=='i') { *se = saved_char; return label1pos[0]; }; > if (*ss=='i') { > if (*ss1=='m') { if (label1pos[1]!=~0U) { *se = saved_char; return label1pos[1]; }; { *se = saved_char; return opcode0(mp_im); };; } > if (*ss1=='M') { if (label1pos[2]!=~0U) { *se = saved_char; return label1pos[2]; }; { *se = saved_char; return opcode0(mp_iM); };; } > if (*ss1=='a') { if (label1pos[3]!=~0U) { *se = saved_char; return label1pos[3]; }; { *se = saved_char; return opcode0(mp_ia); };; } > if (*ss1=='v') { if (label1pos[4]!=~0U) { *se = saved_char; return label1pos[4]; }; { *se = saved_char; return opcode0(mp_iv); };; } > } > if (*ss1=='m') { > if (*ss=='x') { if (label1pos[5]!=~0U) { *se = saved_char; return label1pos[5]; }; { *se = saved_char; return opcode0(mp_xm); };; } > if (*ss=='y') { if (label1pos[6]!=~0U) { *se = saved_char; return label1pos[6]; }; { *se = saved_char; return opcode0(mp_ym); };; } > if (*ss=='z') { if (label1pos[7]!=~0U) { *se = saved_char; return label1pos[7]; }; { *se = saved_char; return opcode0(mp_zm); };; } > if (*ss=='c') { if (label1pos[8]!=~0U) { *se = saved_char; return label1pos[8]; }; { *se = saved_char; return opcode0(mp_cm); };; } > } > if (*ss1=='M') { > if (*ss=='x') { if (label1pos[9]!=~0U) { *se = saved_char; return label1pos[9]; }; { *se = saved_char; return opcode0(mp_xM); };; } > if (*ss=='y') { if (label1pos[10]!=~0U) { *se = saved_char; return label1pos[10]; }; { *se = saved_char; return opcode0(mp_yM); };; } > if (*ss=='z') { if (label1pos[11]!=~0U) { *se = saved_char; return label1pos[11]; }; { *se = saved_char; return opcode0(mp_zM); };; } > if (*ss=='c') { if (label1pos[12]!=~0U) { *se = saved_char; return label1pos[12]; }; { *se = saved_char; return opcode0(mp_cM); };; } > } > } > > > for (char *s = se2; s>ss; --s) if (*s==';' && level[s-expr._data]==clevel) { compile(ss,s); { *se = saved_char; return compile(s+1,se); }; } > for (char *s = ss1, *ps = ss, *ns = ss2; s<se1; ++s, ++ps, ++ns) > if (*s=='=' && *ns!='=' && *ps!='=' && *ps!='>' && *ps!='<' && *ps!='!' && level[s-expr._data]==clevel) { > CImg<charT> variable_name(ss,(unsigned int)(s-ss+1)); > variable_name.back() = 0; > bool is_valid_name = true; > if (*ss>='0' && *ss<='9') is_valid_name = false; > else for (const char *ns = ss+1; ns<s; ++ns) > if ((*ns<'a' || *ns>'z') && (*ns<'A' || *ns>'Z') && (*ns<'0' || *ns>'9') && *ns!='_') { > is_valid_name = false; break; > } > if (!is_valid_name) { > *se = saved_char; > throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Invalid variable name '%s' in specified expression '%s%s%s'.", > pixel_type(),calling_function, > variable_name._data, > (ss-8)>expr._data?"...":"", > (ss-8)>expr._data?ss-8:expr._data, > se<&expr.back()?"...":""); > } > const unsigned int pos = compile(s+1,se); > if (variable_name[0] && variable_name[1] && !variable_name[2]) { > const char c1 = variable_name[0], c2 = variable_name[1]; > if (c1=='p' && c2=='i') variable_name.fill((char)0,(char)0); > else if (c1=='i') { > if (c2=='m') variable_name.fill(1,0); > else if (c2=='M') variable_name.fill(2,0); > else if (c2=='a') variable_name.fill(3,0); > else if (c2=='v') variable_name.fill(4,0); > } else if (c2=='m') { > if (c1=='x') variable_name.fill(5,0); > else if (c1=='y') variable_name.fill(6,0); > else if (c1=='z') variable_name.fill(7,0); > else if (c1=='c') variable_name.fill(8,0); > } else if (c2=='M') { > if (c1=='x') variable_name.fill(9,0); > else if (c1=='y') variable_name.fill(10,0); > else if (c1=='z') variable_name.fill(11,0); > else if (c1=='c') variable_name.fill(12,0); > } > } > if (variable_name[1]) { > int label_pos = -1; > for (int i = 0; i<(int)(labelM)._width; ++i) if (!std::strcmp(variable_name,labelM[i])) { label_pos = i; break; } > if (label_pos<0) { > if (labelM._width>=labelMpos._width) labelMpos.resize(-200,1,1,1,0); > label_pos = labelM._width; > variable_name.move_to(labelM); > } > labelMpos[label_pos] = pos; > } else label1pos[*variable_name] = pos; > { *se = saved_char; return pos; }; > } > > > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='|' && *ns=='|' && level[s-expr._data]==clevel) { > const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+2,se); > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_logical_or),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); > { *se = saved_char; return pos; }; > } > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='&' && *ns=='&' && level[s-expr._data]==clevel) { > const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+2,se); > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_logical_and),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); > { *se = saved_char; return pos; }; > } > for (char *s = se2; s>ss; --s) if (*s=='|' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_bitwise_or,_i1,_i2); }; }; > for (char *s = se2; s>ss; --s) if (*s=='&' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_bitwise_and,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='!' && *ns=='=' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_noteq,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='=' && *ns=='=' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_eqeq,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='<' && *ns=='=' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_infeq,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='>' && *ns=='=' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_supeq,_i1,_i2); }; }; > for (char *s = se2, *ns = se1, *ps = se3; s>ss; --s, --ns, --ps) > if (*s=='<' && *ns!='<' && *ps!='<' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_inf,_i1,_i2); }; }; > for (char *s = se2, *ns = se1, *ps = se3; s>ss; --s, --ns, --ps) > if (*s=='>' && *ns!='>' && *ps!='>' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_sup,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='<' && *ns=='<' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_lsl,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='>' && *ns=='>' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_lsr,_i1,_i2); }; }; > for (char *s = se2, *ps = se3; s>ss; --s, --ps) > if (*s=='+' && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && > (*ps!='e' || !(ps>ss && (*(ps-1)=='.' || (*(ps-1)>='0' && *(ps-1)<='9')))) && level[s-expr._data]==clevel) > { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_add,_i1,_i2); }; }; > for (char *s = se2, *ps = se3; s>ss; --s, --ps) > if (*s=='-' && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && > (*ps!='e' || !(ps>ss && (*(ps-1)=='.' || (*(ps-1)>='0' && *(ps-1)<='9')))) && level[s-expr._data]==clevel) > { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_sub,_i1,_i2); }; }; > for (char *s = se2; s>ss; --s) if (*s=='*' && level[s-expr._data]==clevel) { > const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+1,se); > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_mul),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); > { *se = saved_char; return pos; }; > } > for (char *s = se2; s>ss; --s) if (*s=='/' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_div,_i1,_i2); }; }; > for (char *s = se2, *ns = se1; s>ss; --s, --ns) > if (*s=='%' && *ns!='^' && level[s-expr._data]==clevel) > { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_modulo,_i1,_i2); }; }; > if (ss<se1) { > if (*ss=='+') { *se = saved_char; return compile(ss1,se); }; > if (*ss=='-') { *se = saved_char; return opcode1(mp_minus,compile(ss1,se)); };; > if (*ss=='!') { *se = saved_char; return opcode1(mp_logical_not,compile(ss1,se)); };; > if (*ss=='~') { *se = saved_char; return opcode1(mp_bitwise_not,compile(ss1,se)); };; > } > for (char *s = se2; s>ss; --s) if (*s=='^' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_pow,_i1,_i2); }; }; > > > if (*se1==']') { > const bool is_relative = *ss=='j'; > if ((*ss=='i' || is_relative) && *ss1=='[') { > if (*ss2==']') { *se = saved_char; return opcode0(mp_i); };; > { *se = saved_char; return opcode1(is_relative?mp_joff:mp_ioff,compile(ss2,se1)); };; > } > } > if (*se1==')') { > if (*ss=='(') { *se = saved_char; return compile(ss1,se1); }; > if (!std::strncmp(ss,"sin(",4)) { *se = saved_char; return opcode1(mp_sin,compile(ss4,se1)); };; > if (!std::strncmp(ss,"cos(",4)) { *se = saved_char; return opcode1(mp_cos,compile(ss4,se1)); };; > if (!std::strncmp(ss,"tan(",4)) { *se = saved_char; return opcode1(mp_tan,compile(ss4,se1)); };; > if (!std::strncmp(ss,"asin(",5)) { *se = saved_char; return opcode1(mp_asin,compile(ss5,se1)); };; > if (!std::strncmp(ss,"acos(",5)) { *se = saved_char; return opcode1(mp_acos,compile(ss5,se1)); };; > if (!std::strncmp(ss,"atan(",5)) { *se = saved_char; return opcode1(mp_atan,compile(ss5,se1)); };; > if (!std::strncmp(ss,"sinh(",5)) { *se = saved_char; return opcode1(mp_sinh,compile(ss5,se1)); };; > if (!std::strncmp(ss,"cosh(",5)) { *se = saved_char; return opcode1(mp_cosh,compile(ss5,se1)); };; > if (!std::strncmp(ss,"tanh(",5)) { *se = saved_char; return opcode1(mp_tanh,compile(ss5,se1)); };; > if (!std::strncmp(ss,"log10(",6)) { *se = saved_char; return opcode1(mp_log10,compile(ss6,se1)); };; > if (!std::strncmp(ss,"log2(",5)) { *se = saved_char; return opcode1(mp_log2,compile(ss5,se1)); };; > if (!std::strncmp(ss,"log(",4)) { *se = saved_char; return opcode1(mp_log,compile(ss4,se1)); };; > if (!std::strncmp(ss,"exp(",4)) { *se = saved_char; return opcode1(mp_exp,compile(ss4,se1)); };; > if (!std::strncmp(ss,"sqrt(",5)) { *se = saved_char; return opcode1(mp_sqrt,compile(ss5,se1)); };; > if (!std::strncmp(ss,"sign(",5)) { *se = saved_char; return opcode1(mp_sign,compile(ss5,se1)); };; > if (!std::strncmp(ss,"abs(",4)) { *se = saved_char; return opcode1(mp_abs,compile(ss4,se1)); };; > if (!std::strncmp(ss,"atan2(",6)) { > char *s1 = ss6; while (s1<se2 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > { const unsigned int _i1 = compile(ss6,s1), _i2 = compile(s1+1,se1); { *se = saved_char; return opcode2(mp_atan2,_i1,_i2); }; }; > } > if (*ss=='i' && *ss1=='f' && *ss2=='(') { > char *s1 = ss3; while (s1<se4 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > char *s2 = s1+1; while (s2<se2 && (*s2!=',' || level[s2-expr._data]!=clevel1)) ++s2; > const unsigned int mem_cond = compile(ss3,s1), bp1 = code._width, mem_A = compile(s1+1,s2), > bp2 = code._width, mem_B = compile(s2+1,se1); > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_if),pos,mem_cond,mem_A,mem_B,bp2-bp1,code._width-bp2).move_to(code,bp1); > { *se = saved_char; return pos; }; > } > if (!std::strncmp(ss,"round(",6)) { > unsigned int value = 0, round = 1, direction = 0; > char *s1 = ss6; while (s1<se2 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > value = compile(ss6,s1==se2?++s1:s1); > if (s1<se1) { > char *s2 = s1+1; while (s2<se2 && (*s2!=',' || level[s2-expr._data]!=clevel1)) ++s2; > round = compile(s1+1,s2==se2?++s2:s2); > if (s2<se1) direction = compile(s2+1,se1); > } > { const unsigned int _i1 = value, _i2 = round, _i3 = direction; { *se = saved_char; return opcode3(mp_round,_i1,_i2,_i3); }; }; > } > if ((*ss=='?' || *ss=='u') && *ss1=='(') { > if (*ss2==')') { const unsigned int _i1 = 0, _i2 = 1; { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > char *s1 = ss2; while (s1<se1 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > if (s1<se1) { const unsigned int _i1 = compile(ss2,s1), _i2 = compile(s1+1,se1); { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > { const unsigned int _i1 = 0, _i2 = compile(ss2,s1); { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > } > const bool is_relative = *ss=='j'; > if ((*ss=='i' || is_relative) && *ss1=='(') { > if (*ss2==')') { *se = saved_char; return opcode0(mp_i); };; > unsigned int > indx = is_relative?0:9, indy = is_relative?0:10, > indz = is_relative?0:11, indc = is_relative?0:12, > borders = 0, interpolation = 0; > if (ss2!=se1) { > char *s1 = ss2; while (s1<se2 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > indx = compile(ss2,s1==se2?++s1:s1); > if (s1<se1) { > char *s2 = s1+1; while (s2<se2 && (*s2!=',' || level[s2-expr._data]!=clevel1)) ++s2; > indy = compile(s1+1,s2==se2?++s2:s2); > if (s2<se1) { > char *s3 = s2+1; while (s3<se2 && (*s3!=',' || level[s3-expr._data]!=clevel1)) ++s3; > indz = compile(s2+1,s3==se2?++s3:s3); > if (s3<se1) { > char *s4 = s3+1; while (s4<se2 && (*s4!=',' || level[s4-expr._data]!=clevel1)) ++s4; > indc = compile(s3+1,s4==se2?++s4:s4); > if (s4<se1) { > char *s5 = s4+1; while (s5<se2 && (*s5!=',' || level[s5-expr._data]!=clevel1)) ++s5; > interpolation = compile(s4+1,s5==se2?++s5:s5); > if (s5<se1) borders = compile(s5+1,se1); > } > } > } > } > } > { const unsigned int _i1 = indx, _i2 = indy, _i3 = indz, _i4 = indc, _i5 = interpolation, _i6 = borders; { *se = saved_char; return opcode6(is_relative?mp_jxyzc:mp_ixyzc,_i1,_i2,_i3,_i4,_i5,_i6); }; }; > } > if (!std::strncmp(ss,"min(",4) || !std::strncmp(ss,"max(",4) || !std::strncmp(ss,"med(",4) || !std::strncmp(ss,"kth(",4)) { > CImgList<longT> opcode; > if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(*ss=='k'?mp_kth:ss[1]=='i'?mp_min:ss[1]=='a'?mp_max:mp_med),pos).move_to(opcode); > for (char *s = ss4; s<se; ++s) { > char *ns = s; while (ns<se && (*ns!=',' || level[ns-expr._data]!=clevel1) && (*ns!=')' || level[ns-expr._data]!=clevel)) ++ns; > CImg<longT>::vector(compile(s,ns)).move_to(opcode); > s = ns; > } > (opcode>'y').move_to(code); > { *se = saved_char; return pos; }; > } > if (!std::strncmp(ss,"arg(",4)) { > CImgList<longT> opcode; > if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_arg),pos).move_to(opcode); > for (char *s = ss4; s<se; ++s) { > char *ns = s; while (ns<se && (*ns!=',' || level[ns-expr._data]!=clevel1) && (*ns!=')' || level[ns-expr._data]!=clevel)) ++ns; > CImg<longT>::vector(compile(s,ns)).move_to(opcode); > s = ns; > } > (opcode>'y').move_to(code); > { *se = saved_char; return pos; }; > } > if (!std::strncmp(ss,"narg(",5)) { > if (*ss5==')') { *se = saved_char; return 0; }; > unsigned int nb_args = 0; > for (char *s = ss5; s<se; ++s) { > char *ns = s; while (ns<se && (*ns!=',' || level[ns-expr._data]!=clevel1) && (*ns!=')' || level[ns-expr._data]!=clevel)) ++ns; > ++nb_args; s = ns; > } > if (nb_args==0 || nb_args==1) { *se = saved_char; return nb_args; }; > if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > mem[pos] = nb_args; > { *se = saved_char; return pos; }; > } > if (!std::strncmp(ss,"isval(",6)) { > char sep = 0, end = 0; double val = 0; > if (std::sscanf(ss6,"%lf%c%c",&val,&sep,&end)==2 && sep==')') { *se = saved_char; return 1; }; > { *se = saved_char; return 0; }; > } > if (!std::strncmp(ss,"isnan(",6)) { *se = saved_char; return opcode1(mp_isnan,compile(ss6,se1)); };; > if (!std::strncmp(ss,"isinf(",6)) { *se = saved_char; return opcode1(mp_isinf,compile(ss6,se1)); };; > if (!std::strncmp(ss,"isint(",6)) { *se = saved_char; return opcode1(mp_isint,compile(ss6,se1)); };; > if (!std::strncmp(ss,"isbool(",7)) { *se = saved_char; return opcode1(mp_isbool,compile(ss7,se1)); };; > if (!std::strncmp(ss,"rol(",4) || !std::strncmp(ss,"ror(",4)) { > unsigned int value = 0, nb = 1; > char *s1 = ss4; while (s1<se2 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > value = compile(ss4,s1==se2?++s1:s1); > if (s1<se1) { > char *s2 = s1+1; while (s2<se2 && (*s2!=',' || level[s2-expr._data]!=clevel1)) ++s2; > nb = compile(s1+1,se1); > } > { const unsigned int _i1 = value, _i2 = nb; { *se = saved_char; return opcode2(*ss2=='l'?mp_rol:mp_ror,_i1,_i2); }; }; > } > > if (!std::strncmp(ss,"sinc(",5)) { *se = saved_char; return opcode1(mp_sinc,compile(ss5,se1)); };; > if (!std::strncmp(ss,"int(",4)) { *se = saved_char; return opcode1(mp_int,compile(ss4,se1)); };; > } > > > CImg<charT> variable_name(ss,(unsigned int)(se-ss+1)); > variable_name.back() = 0; > if (variable_name[1]) { for (int i = 0; i<(int)(labelM)._width; ++i) if (!std::strcmp(variable_name,labelM[i])) { *se = saved_char; return labelMpos[i]; }; } > else if (label1pos[*variable_name]!=~0U) { *se = saved_char; return label1pos[*variable_name]; }; > *se = saved_char; > throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Invalid item '%s' in specified expression '%s%s%s'.\n", > pixel_type(),calling_function, > variable_name._data, > (ss-8)>expr._data?"...":"", > (ss-8)>expr._data?ss-8:expr._data, > se<&expr.back()?"...":""); > return 0; > } > > > > > static double mp_u(_cimg_math_parser& mp) { > return mp.mem[mp.opcode(2)] + cimg::rand()*(mp.mem[mp.opcode(3)]-mp.mem[mp.opcode(2)]); > } > static double mp_g(_cimg_math_parser& mp) { > cimg::unused(mp); > return cimg::grand(); > } > static double mp_i(_cimg_math_parser& mp) { > return (double)mp.reference.atXYZC((int)mp.mem[9],(int)mp.mem[10],(int)mp.mem[11],(int)mp.mem[12],0); > } > static double mp_logical_and(_cimg_math_parser& mp) { > const bool is_A = (bool)mp.mem[mp.opcode(2)]; > const CImg<longT> *const pE = ++mp.p_code + mp.opcode(4); > if (!is_A) { mp.p_code = pE - 1; return 0; } > const unsigned int mem_B = (unsigned int)mp.opcode(3); > for ( ; mp.p_code<pE; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > --mp.p_code; > return (double)(bool)mp.mem[mem_B]; > } > static double mp_logical_or(_cimg_math_parser& mp) { > const bool is_A = (bool)mp.mem[mp.opcode(2)]; > const CImg<longT> *const pE = ++mp.p_code + mp.opcode(4); > if (is_A) { mp.p_code = pE - 1; return 1; } > const unsigned int mem_B = (unsigned int)mp.opcode(3); > for ( ; mp.p_code<pE; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > --mp.p_code; > return (double)(bool)mp.mem[mem_B]; > } > static double mp_infeq(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]<=mp.mem[mp.opcode(3)]); > } > static double mp_supeq(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]>=mp.mem[mp.opcode(3)]); > } > static double mp_noteq(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]!=mp.mem[mp.opcode(3)]); > } > static double mp_eqeq(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]==mp.mem[mp.opcode(3)]); > } > static double mp_inf(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]<mp.mem[mp.opcode(3)]); > } > static double mp_sup(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]>mp.mem[mp.opcode(3)]); > } > static double mp_add(_cimg_math_parser& mp) { > return mp.mem[mp.opcode(2)] + mp.mem[mp.opcode(3)]; > } > static double mp_sub(_cimg_math_parser& mp) { > return mp.mem[mp.opcode(2)] - mp.mem[mp.opcode(3)]; > } > static double mp_mul(_cimg_math_parser& mp) { > const double A = mp.mem[mp.opcode(2)]; > const CImg<longT> *const pE = ++mp.p_code + mp.opcode(4); > if (!A) { mp.p_code = pE - 1; return 0; } > const unsigned int mem_B = (unsigned int)mp.opcode(3); > for ( ; mp.p_code<pE; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > --mp.p_code; > return A*(double)mp.mem[mem_B]; > } > static double mp_div(_cimg_math_parser& mp) { > return mp.mem[mp.opcode(2)] / mp.mem[mp.opcode(3)]; > } > static double mp_minus(_cimg_math_parser& mp) { > return -mp.mem[mp.opcode(2)]; > } > static double mp_not(_cimg_math_parser& mp) { > return !mp.mem[mp.opcode(2)]; > } > static double mp_logical_not(_cimg_math_parser& mp) { > return !mp.mem[mp.opcode(2)]; > } > static double mp_bitwise_not(_cimg_math_parser& mp) { > return ~(unsigned long)mp.mem[mp.opcode(2)]; > } > static double mp_modulo(_cimg_math_parser& mp) { > return cimg::mod(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)]); > } > static double mp_bitwise_and(_cimg_math_parser& mp) { > return ((unsigned long)mp.mem[mp.opcode(2)] & (unsigned long)mp.mem[mp.opcode(3)]); > } > static double mp_bitwise_or(_cimg_math_parser& mp) { > return ((unsigned long)mp.mem[mp.opcode(2)] | (unsigned long)mp.mem[mp.opcode(3)]); > } > static double mp_pow(_cimg_math_parser& mp) { > const double v = mp.mem[mp.opcode(2)], p = mp.mem[mp.opcode(3)]; > if (p==0) return 1; > if (p==0.5) return std::sqrt(v); > if (p==1) return v; > if (p==2) return v*v; > if (p==3) return v*v*v; > if (p==4) return v*v*v*v; > return std::pow(v,p); > } > static double mp_sin(_cimg_math_parser& mp) { > return std::sin(mp.mem[mp.opcode(2)]); > } > static double mp_cos(_cimg_math_parser& mp) { > return std::cos(mp.mem[mp.opcode(2)]); > } > static double mp_tan(_cimg_math_parser& mp) { > return std::tan(mp.mem[mp.opcode(2)]); > } > static double mp_asin(_cimg_math_parser& mp) { > return std::asin(mp.mem[mp.opcode(2)]); > } > static double mp_acos(_cimg_math_parser& mp) { > return std::acos(mp.mem[mp.opcode(2)]); > } > static double mp_atan(_cimg_math_parser& mp) { > return std::atan(mp.mem[mp.opcode(2)]); > } > static double mp_sinh(_cimg_math_parser& mp) { > return std::sinh(mp.mem[mp.opcode(2)]); > } > static double mp_cosh(_cimg_math_parser& mp) { > return std::cosh(mp.mem[mp.opcode(2)]); > } > static double mp_tanh(_cimg_math_parser& mp) { > return std::tanh(mp.mem[mp.opcode(2)]); > } > static double mp_log10(_cimg_math_parser& mp) { > return std::log10(mp.mem[mp.opcode(2)]); > } > static double mp_log2(_cimg_math_parser& mp) { > return cimg::log2(mp.mem[mp.opcode(2)]); > } > static double mp_log(_cimg_math_parser& mp) { > return std::log(mp.mem[mp.opcode(2)]); > } > static double mp_exp(_cimg_math_parser& mp) { > return std::exp(mp.mem[mp.opcode(2)]); > } > static double mp_sqrt(_cimg_math_parser& mp) { > return std::sqrt(mp.mem[mp.opcode(2)]); > } > static double mp_sign(_cimg_math_parser& mp) { > return cimg::sign(mp.mem[mp.opcode(2)]); > } > static double mp_abs(_cimg_math_parser& mp) { > return cimg::abs(mp.mem[mp.opcode(2)]); > } > static double mp_atan2(_cimg_math_parser& mp) { > return std::atan2(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)]); > } > static double mp_if(_cimg_math_parser& mp) { > const bool is_cond = (bool)mp.mem[mp.opcode(2)]; > const unsigned int mem_A = (unsigned int)mp.opcode(3), mem_B = (unsigned int)mp.opcode(4); > const CImg<longT> > *const pB = ++mp.p_code + mp.opcode(5), > *const pE = pB + mp.opcode(6); > if (is_cond) { > for ( ; mp.p_code<pB; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > mp.p_code = pE - 1; > return mp.mem[mem_A]; > } > for (mp.p_code = pB; mp.p_code<pE; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > --mp.p_code; > return mp.mem[mem_B]; > } > static double mp_round(_cimg_math_parser& mp) { > return cimg::round(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)],(int)mp.mem[mp.opcode(4)]); > } > static double mp_ixyzc(_cimg_math_parser& mp) { > const int i = (int)mp.mem[mp.opcode(6)], b = (int)mp.mem[mp.opcode(7)]; > if (i==0) { > if (b==2) return (double)mp.reference.atXYZC(cimg::mod((int)mp.mem[mp.opcode(2)],mp.reference.width()), > cimg::mod((int)mp.mem[mp.opcode(3)],mp.reference.height()), > cimg::mod((int)mp.mem[mp.opcode(4)],mp.reference.depth()), > cimg::mod((int)mp.mem[mp.opcode(5)],mp.reference.spectrum())); > if (b==1) return (double)mp.reference.atXYZC((int)mp.mem[mp.opcode(2)], > (int)mp.mem[mp.opcode(3)], > (int)mp.mem[mp.opcode(4)], > (int)mp.mem[mp.opcode(5)]); > return (double)mp.reference.atXYZC((int)mp.mem[mp.opcode(2)], > (int)mp.mem[mp.opcode(3)], > (int)mp.mem[mp.opcode(4)], > (int)mp.mem[mp.opcode(5)],0); > } else { > if (b==2) return (double)mp.reference.linear_atXYZC(cimg::mod((float)mp.mem[mp.opcode(2)],(float)mp.reference.width()), > cimg::mod((float)mp.mem[mp.opcode(3)],(float)mp.reference.height()), > cimg::mod((float)mp.mem[mp.opcode(4)],(float)mp.reference.depth()), > cimg::mod((float)mp.mem[mp.opcode(5)],(float)mp.reference.spectrum())); > if (b==1) return (double)mp.reference.linear_atXYZC((float)mp.mem[mp.opcode(2)], > (float)mp.mem[mp.opcode(3)], > (float)mp.mem[mp.opcode(4)], > (float)mp.mem[mp.opcode(5)]); > return (double)mp.reference.linear_atXYZC((float)mp.mem[mp.opcode(2)], > (float)mp.mem[mp.opcode(3)], > (float)mp.mem[mp.opcode(4)], > (float)mp.mem[mp.opcode(5)],0); > } > } > static double mp_jxyzc(_cimg_math_parser& mp) { > const double x = mp.mem[9], y = mp.mem[10], z = mp.mem[11], c = mp.mem[12]; > const int i = (int)mp.mem[mp.opcode(6)], b = (int)mp.mem[mp.opcode(7)]; > if (i==0) { > if (b==2) return (double)mp.reference.atXYZC(cimg::mod((int)(x+mp.mem[mp.opcode(2)]),mp.reference.width()), > cimg::mod((int)(y+mp.mem[mp.opcode(3)]),mp.reference.height()), > cimg::mod((int)(z+mp.mem[mp.opcode(4)]),mp.reference.depth()), > cimg::mod((int)(c+mp.mem[mp.opcode(5)]),mp.reference.spectrum())); > if (b==1) return (double)mp.reference.atXYZC((int)(x+mp.mem[mp.opcode(2)]), > (int)(y+mp.mem[mp.opcode(3)]), > (int)(z+mp.mem[mp.opcode(4)]), > (int)(c+mp.mem[mp.opcode(5)])); > return (double)mp.reference.atXYZC((int)(x+mp.mem[mp.opcode(2)]), > (int)(y+mp.mem[mp.opcode(3)]), > (int)(z+mp.mem[mp.opcode(4)]), > (int)(c+mp.mem[mp.opcode(5)]),0); > } else { > if (b==2) return (double)mp.reference.linear_atXYZC(cimg::mod((float)(x+mp.mem[mp.opcode(2)]),(float)mp.reference.width()), > cimg::mod((float)(y+mp.mem[mp.opcode(3)]),(float)mp.reference.height()), > cimg::mod((float)(z+mp.mem[mp.opcode(4)]),(float)mp.reference.depth()), > cimg::mod((float)(c+mp.mem[mp.opcode(5)]),(float)mp.reference.spectrum())); > if (b==1) return (double)mp.reference.linear_atXYZC((float)(x+mp.mem[mp.opcode(2)]), > (float)(y+mp.mem[mp.opcode(3)]), > (float)(z+mp.mem[mp.opcode(4)]), > (float)(c+mp.mem[mp.opcode(5)])); > return (double)mp.reference.linear_atXYZC((float)(x+mp.mem[mp.opcode(2)]), > (float)(y+mp.mem[mp.opcode(3)]), > (float)(z+mp.mem[mp.opcode(4)]), > (float)(c+mp.mem[mp.opcode(5)]),0); > } > } > static double mp_min(_cimg_math_parser& mp) { > double val = mp.mem[mp.opcode(2)]; > for (unsigned int i = 3; i<mp.opcode._height; ++i) val = cimg::min(val,mp.mem[mp.opcode(i)]); > return val; > } > static double mp_max(_cimg_math_parser& mp) { > double val = mp.mem[mp.opcode(2)]; > for (unsigned int i = 3; i<mp.opcode._height; ++i) val = cimg::max(val,mp.mem[mp.opcode(i)]); > return val; > } > static double mp_med(_cimg_math_parser& mp) { > CImg<doubleT> values(mp.opcode._height-2); > double *p = values.data(); > for (unsigned int i = 2; i<mp.opcode._height; ++i) *(p++) = mp.mem[mp.opcode(i)]; > return values.median(); > } > static double mp_kth(_cimg_math_parser& mp) { > CImg<doubleT> values(mp.opcode._height-3); > double *p = values.data(); > for (unsigned int i = 3; i<mp.opcode._height; ++i) *(p++) = mp.mem[mp.opcode(i)]; > int ind = (int)cimg::round(mp.mem[mp.opcode(2)]); > if (ind<0) ind+=1+values.width(); > ind = cimg::max(1,cimg::min(values.width(),ind)); > return values.kth_smallest(ind-1); > } > static double mp_isnan(_cimg_math_parser& mp) { > const double val = mp.mem[mp.opcode(2)]; > return cimg::type<double>::is_nan(val); > } > static double mp_isinf(_cimg_math_parser& mp) { > const double val = mp.mem[mp.opcode(2)]; > return cimg::type<double>::is_inf(val); > } > static double mp_isint(_cimg_math_parser& mp) { > const double val = mp.mem[mp.opcode(2)]; > return (double)(cimg::mod(val,1.0)==0); > } > static double mp_isbool(_cimg_math_parser& mp) { > const double val = mp.mem[mp.opcode(2)]; > return (val==0.0 || val==1.0); > } > static double mp_rol(_cimg_math_parser& mp) { > return cimg::rol(mp.mem[mp.opcode(2)],(unsigned int)mp.mem[mp.opcode(3)]); > } > static double mp_ror(_cimg_math_parser& mp) { > return cimg::ror(mp.mem[mp.opcode(2)],(unsigned int)mp.mem[mp.opcode(3)]); > } > static double mp_lsl(_cimg_math_parser& mp) { > return (long)mp.mem[mp.opcode(2)]<<(unsigned int)mp.mem[mp.opcode(3)]; > } > static double mp_lsr(_cimg_math_parser& mp) { > return (long)mp.mem[mp.opcode(2)]>>(unsigned int)mp.mem[mp.opcode(3)]; > } > static double mp_sinc(_cimg_math_parser& mp) { > return cimg::sinc(mp.mem[mp.opcode(2)]); > } > static double mp_im(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[0]:0; > } > static double mp_iM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[1]:0; > } > static double mp_ia(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[2]:0; > } > static double mp_iv(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[3]:0; > } > static double mp_xm(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[4]:0; > } > static double mp_ym(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[5]:0; > } > static double mp_zm(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[6]:0; > } > static double mp_cm(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[7]:0; > } > static double mp_xM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[8]:0; > } > static double mp_yM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[9]:0; > } > static double mp_zM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[10]:0; > } > static double mp_cM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[11]:0; > } > static double mp_arg(_cimg_math_parser& mp) { > const int _ind = (int)mp.mem[mp.opcode(2)]; > const unsigned int nb_args = mp.opcode._height-2, ind = _ind<0?_ind+nb_args:(unsigned int)_ind; > if (ind>=nb_args) return 0; > return mp.mem[mp.opcode(ind+2)]; > } > static double mp_int(_cimg_math_parser& mp) { > return (double)(long)mp.mem[mp.opcode(2)]; > } > static double mp_ioff(_cimg_math_parser& mp) { > const unsigned long off = (unsigned long)mp.mem[mp.opcode(2)]; > if (off>=mp.reference.size()) return 0; > return (double)mp.reference[off]; > } > static double mp_joff(_cimg_math_parser& mp) { > const int x = (int)mp.mem[9], y = (int)mp.mem[10], z = (int)mp.mem[11], c = (int)mp.mem[12]; > const unsigned long off = mp.reference.offset(x,y,z,c) + (unsigned long)(mp.mem[mp.opcode(2)]); > if (off>=mp.reference.size()) return 0; > return (double)mp.reference[off]; > } > > > double operator()(const double x, const double y, const double z, const double c) { > if (!mem) return 0; > mem[9] = x; mem[10] = y; mem[11] = z; mem[12] = c; > opcode._is_shared = true; opcode._width = opcode._depth = opcode._spectrum = 1; > > for (p_code = code._data; p_code<code.end(); ++p_code) { > const CImg<longT> &op = *p_code; > opcode._data = op._data; opcode._height = op._height; > const unsigned int target = (unsigned int)opcode[1]; > mem[target] = (*(mp_func)((*this).opcode[0]))(*this); > } > return mem[result]; > } > }; ># 14593 "./CImg.h" > CImg<T>& sqr() { > if (is_empty()) return *this; ># 14596 "./CImg.h" > ># 14596 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 14596 "./CImg.h" ># 14596 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(val*val); }; > return *this; > } > > > CImg<Tfloat> get_sqr() const { > return CImg<Tfloat>(*this,false).sqr(); > } ># 14620 "./CImg.h" > CImg<T>& sqrt() { > if (is_empty()) return *this; ># 14623 "./CImg.h" > ># 14623 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14623 "./CImg.h" ># 14623 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::sqrt((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_sqrt() const { > return CImg<Tfloat>(*this,false).sqrt(); > } ># 14641 "./CImg.h" > CImg<T>& exp() { > if (is_empty()) return *this; ># 14644 "./CImg.h" > ># 14644 "./CImg.h" >#pragma omp parallel for if (size()>=4096) ># 14644 "./CImg.h" ># 14644 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::exp((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_exp() const { > return CImg<Tfloat>(*this,false).exp(); > } ># 14662 "./CImg.h" > CImg<T>& log() { > if (is_empty()) return *this; ># 14665 "./CImg.h" > ># 14665 "./CImg.h" >#pragma omp parallel for if (size()>=262144) ># 14665 "./CImg.h" ># 14665 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::log((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_log() const { > return CImg<Tfloat>(*this,false).log(); > } ># 14683 "./CImg.h" > CImg<T>& log2() { > if (is_empty()) return *this; ># 14686 "./CImg.h" > ># 14686 "./CImg.h" >#pragma omp parallel for if (size()>=4096) ># 14686 "./CImg.h" ># 14686 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::log2((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_log2() const { > return CImg<Tfloat>(*this,false).log2(); > } ># 14704 "./CImg.h" > CImg<T>& log10() { > if (is_empty()) return *this; ># 14707 "./CImg.h" > ># 14707 "./CImg.h" >#pragma omp parallel for if (size()>=4096) ># 14707 "./CImg.h" ># 14707 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::log10((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_log10() const { > return CImg<Tfloat>(*this,false).log10(); > } ># 14725 "./CImg.h" > CImg<T>& abs() { > if (is_empty()) return *this; ># 14728 "./CImg.h" > ># 14728 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 14728 "./CImg.h" ># 14728 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::abs(*ptrd); > return *this; > } > > > CImg<Tfloat> get_abs() const { > return CImg<Tfloat>(*this,false).abs(); > } ># 14750 "./CImg.h" > CImg<T>& sign() { > if (is_empty()) return *this; ># 14753 "./CImg.h" > ># 14753 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 14753 "./CImg.h" ># 14753 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::sign(*ptrd); > return *this; > } > > > CImg<Tfloat> get_sign() const { > return CImg<Tfloat>(*this,false).sign(); > } ># 14772 "./CImg.h" > CImg<T>& cos() { > if (is_empty()) return *this; ># 14775 "./CImg.h" > ># 14775 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14775 "./CImg.h" ># 14775 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::cos((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_cos() const { > return CImg<Tfloat>(*this,false).cos(); > } ># 14794 "./CImg.h" > CImg<T>& sin() { > if (is_empty()) return *this; ># 14797 "./CImg.h" > ># 14797 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14797 "./CImg.h" ># 14797 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::sin((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_sin() const { > return CImg<Tfloat>(*this,false).sin(); > } ># 14816 "./CImg.h" > CImg<T>& sinc() { > if (is_empty()) return *this; ># 14819 "./CImg.h" > ># 14819 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14819 "./CImg.h" ># 14819 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::sinc((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_sinc() const { > return CImg<Tfloat>(*this,false).sinc(); > } ># 14838 "./CImg.h" > CImg<T>& tan() { > if (is_empty()) return *this; ># 14841 "./CImg.h" > ># 14841 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14841 "./CImg.h" ># 14841 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::tan((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_tan() const { > return CImg<Tfloat>(*this,false).tan(); > } ># 14859 "./CImg.h" > CImg<T>& cosh() { > if (is_empty()) return *this; ># 14862 "./CImg.h" > ># 14862 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14862 "./CImg.h" ># 14862 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::cosh((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_cosh() const { > return CImg<Tfloat>(*this,false).cosh(); > } ># 14880 "./CImg.h" > CImg<T>& sinh() { > if (is_empty()) return *this; ># 14883 "./CImg.h" > ># 14883 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14883 "./CImg.h" ># 14883 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::sinh((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_sinh() const { > return CImg<Tfloat>(*this,false).sinh(); > } ># 14901 "./CImg.h" > CImg<T>& tanh() { > if (is_empty()) return *this; ># 14904 "./CImg.h" > ># 14904 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14904 "./CImg.h" ># 14904 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::tanh((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_tanh() const { > return CImg<Tfloat>(*this,false).tanh(); > } ># 14922 "./CImg.h" > CImg<T>& acos() { > if (is_empty()) return *this; ># 14925 "./CImg.h" > ># 14925 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14925 "./CImg.h" ># 14925 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::acos((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_acos() const { > return CImg<Tfloat>(*this,false).acos(); > } ># 14943 "./CImg.h" > CImg<T>& asin() { > if (is_empty()) return *this; ># 14946 "./CImg.h" > ># 14946 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14946 "./CImg.h" ># 14946 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::asin((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_asin() const { > return CImg<Tfloat>(*this,false).asin(); > } ># 14964 "./CImg.h" > CImg<T>& atan() { > if (is_empty()) return *this; ># 14967 "./CImg.h" > ># 14967 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14967 "./CImg.h" ># 14967 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::atan((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_atan() const { > return CImg<Tfloat>(*this,false).atan(); > } ># 14994 "./CImg.h" > template<typename t> > CImg<T>& atan2(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return atan2(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)std::atan2((double)*ptrd,(double)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)std::atan2((double)*ptrd,(double)*(ptrs++)); > } > return *this; > } > > > template<typename t> > CImg<Tfloat> get_atan2(const CImg<t>& img) const { > return CImg<Tfloat>(*this,false).atan2(img); > } ># 15029 "./CImg.h" > template<typename t> > CImg<T>& mul(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return mul(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)(*ptrd * *(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd * *(ptrs++)); > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_mul(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false).mul(img); > } > > > > > > template<typename t> > CImg<T>& div(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return div(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)(*ptrd / *(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd / *(ptrs++)); > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_div(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false).div(img); > } ># 15087 "./CImg.h" > CImg<T>& pow(const double p) { > if (is_empty()) return *this; > if (p==-4) { ># 15091 "./CImg.h" > ># 15091 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15091 "./CImg.h" ># 15091 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val*val)); } > return *this; > } > if (p==-3) { ># 15098 "./CImg.h" > ># 15098 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15098 "./CImg.h" ># 15098 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val)); } > return *this; > } > if (p==-2) { ># 15105 "./CImg.h" > ># 15105 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15105 "./CImg.h" ># 15105 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val)); } > return *this; > } > if (p==-1) { ># 15112 "./CImg.h" > ># 15112 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15112 "./CImg.h" ># 15112 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1.0/val); } > return *this; > } > if (p==-0.5) { ># 15119 "./CImg.h" > ># 15119 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 15119 "./CImg.h" ># 15119 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1/std::sqrt((double)val)); } > return *this; > } > if (p==0) return fill(1); > if (p==0.5) return sqrt(); > if (p==1) return *this; > if (p==2) return sqr(); > if (p==3) { ># 15130 "./CImg.h" > ># 15130 "./CImg.h" >#pragma omp parallel for if (size()>=262144) ># 15130 "./CImg.h" ># 15130 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = val*val*val; } > return *this; > } > if (p==4) { ># 15137 "./CImg.h" > ># 15137 "./CImg.h" >#pragma omp parallel for if (size()>=131072) ># 15137 "./CImg.h" ># 15137 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = val*val*val*val; } > return *this; > } ># 15143 "./CImg.h" > ># 15143 "./CImg.h" >#pragma omp parallel for if (size()>=1024) ># 15143 "./CImg.h" ># 15143 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::pow((double)*ptrd,p); > return *this; > } > > > CImg<Tfloat> get_pow(const double p) const { > return CImg<Tfloat>(*this,false).pow(p); > } > > > > > > CImg<T>& pow(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"pow"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 15171 "./CImg.h" > ># 15171 "./CImg.h" >#pragma omp parallel ># 15171 "./CImg.h" ># 15171 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 15174 "./CImg.h" > ># 15174 "./CImg.h" >#pragma omp for collapse(3) ># 15174 "./CImg.h" ># 15174 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)std::pow((double)*ptrd,lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<Tfloat> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > pow(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<Tfloat> get_pow(const char *const expression) const { > return CImg<Tfloat>(*this,false).pow(expression); > } > > > > > > template<typename t> > CImg<T>& pow(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return pow(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)std::pow((double)*ptrd,(double)(*(ptrs++))); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)std::pow((double)*ptrd,(double)(*(ptrs++))); > } > return *this; > } > > > template<typename t> > CImg<Tfloat> get_pow(const CImg<t>& img) const { > return CImg<Tfloat>(*this,false).pow(img); > } > > > > > > CImg<T>& rol(const unsigned int n=1) { > if (is_empty()) return *this; ># 15233 "./CImg.h" > ># 15233 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15233 "./CImg.h" ># 15233 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::rol(*ptrd,n); > return *this; > } > > > CImg<T> get_rol(const unsigned int n=1) const { > return (+*this).rol(n); > } > > > > > > CImg<T>& rol(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"rol"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 15261 "./CImg.h" > ># 15261 "./CImg.h" >#pragma omp parallel ># 15261 "./CImg.h" ># 15261 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 15264 "./CImg.h" > ># 15264 "./CImg.h" >#pragma omp for collapse(3) ># 15264 "./CImg.h" ># 15264 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<Tfloat> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > rol(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<T> get_rol(const char *const expression) const { > return (+*this).rol(expression); > } > > > > > > template<typename t> > CImg<T>& rol(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return rol(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)cimg::rol(*ptrd,(unsigned int)(*(ptrs++))); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)cimg::rol(*ptrd,(unsigned int)(*(ptrs++))); > } > return *this; > } > > > template<typename t> > CImg<T> get_rol(const CImg<t>& img) const { > return (+*this).rol(img); > } > > > > > > CImg<T>& ror(const unsigned int n=1) { > if (is_empty()) return *this; ># 15323 "./CImg.h" > ># 15323 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15323 "./CImg.h" ># 15323 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::ror(*ptrd,n); > return *this; > } > > > CImg<T> get_ror(const unsigned int n=1) const { > return (+*this).ror(n); > } > > > > > > CImg<T>& ror(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"ror"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 15351 "./CImg.h" > ># 15351 "./CImg.h" >#pragma omp parallel ># 15351 "./CImg.h" ># 15351 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 15354 "./CImg.h" > ># 15354 "./CImg.h" >#pragma omp for collapse(3) ># 15354 "./CImg.h" ># 15354 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<Tfloat> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > ror(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<T> get_ror(const char *const expression) const { > return (+*this).ror(expression); > } > > > > > > template<typename t> > CImg<T>& ror(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return ror(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)cimg::ror(*ptrd,(unsigned int)(*(ptrs++))); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)cimg::ror(*ptrd,(unsigned int)(*(ptrs++))); > } > return *this; > } > > > template<typename t> > CImg<T> get_ror(const CImg<t>& img) const { > return (+*this).ror(img); > } > > > > > > > CImg<T>& min(const T val) { > if (is_empty()) return *this; ># 15414 "./CImg.h" > ># 15414 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 15414 "./CImg.h" ># 15414 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::min(*ptrd,val); > return *this; > } > > > CImg<T> get_min(const T val) const { > return (+*this).min(val); > } > > > > > > > template<typename t> > CImg<T>& min(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return min(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = cimg::min((T)*(ptrs++),*ptrd); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = cimg::min((T)*(ptrs++),*ptrd); > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_min(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false).min(img); > } > > > > > > > CImg<T>& min(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"min"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 15467 "./CImg.h" > ># 15467 "./CImg.h" >#pragma omp parallel ># 15467 "./CImg.h" ># 15467 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 15470 "./CImg.h" > ># 15470 "./CImg.h" >#pragma omp for collapse(3) ># 15470 "./CImg.h" ># 15470 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::min(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<T> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > min(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<Tfloat> get_min(const char *const expression) const { > return CImg<Tfloat>(*this,false).min(expression); > } > > > > > > > CImg<T>& max(const T val) { > if (is_empty()) return *this; ># 15507 "./CImg.h" > ># 15507 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 15507 "./CImg.h" ># 15507 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::max(*ptrd,val); > return *this; > } > > > CImg<T> get_max(const T val) const { > return (+*this).max(val); > } > > > > > > > template<typename t> > CImg<T>& max(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return max(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = cimg::max((T)*(ptrs++),*ptrd); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = cimg::max((T)*(ptrs++),*ptrd); > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_max(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false).max(img); > } > > > > > > > CImg<T>& max(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"max"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 15560 "./CImg.h" > ># 15560 "./CImg.h" >#pragma omp parallel ># 15560 "./CImg.h" ># 15560 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 15563 "./CImg.h" > ># 15563 "./CImg.h" >#pragma omp for collapse(3) ># 15563 "./CImg.h" ># 15563 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::max(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<T> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > max(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<Tfloat> get_max(const char *const expression) const { > return CImg<Tfloat>(*this,false).max(expression); > } > > > > > T& min() { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "min(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > T *ptr_min = _data; > T min_value = *ptr_min; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs<min_value) min_value = *(ptr_min=ptrs); > return *ptr_min; > } > > > const T& min() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "min(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const T *ptr_min = _data; > T min_value = *ptr_min; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs<min_value) min_value = *(ptr_min=ptrs); > return *ptr_min; > } > > > > > T& max() { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "max(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > T *ptr_max = _data; > T max_value = *ptr_max; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); > return *ptr_max; > } > > > const T& max() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "max(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const T *ptr_max = _data; > T max_value = *ptr_max; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); > return *ptr_max; > } > > > > > > template<typename t> > T& min_max(t& max_val) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "min_max(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > T *ptr_min = _data; > T min_value = *ptr_min, max_value = min_value; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val<min_value) { min_value = val; ptr_min = ptrs; } > if (val>max_value) max_value = val; > } > max_val = (t)max_value; > return *ptr_min; > } > > > template<typename t> > const T& min_max(t& max_val) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "min_max(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const T *ptr_min = _data; > T min_value = *ptr_min, max_value = min_value; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val<min_value) { min_value = val; ptr_min = ptrs; } > if (val>max_value) max_value = val; > } > max_val = (t)max_value; > return *ptr_min; > } > > > > > > template<typename t> > T& max_min(t& min_val) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "max_min(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > T *ptr_max = _data; > T max_value = *ptr_max, min_value = max_value; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val>max_value) { max_value = val; ptr_max = ptrs; } > if (val<min_value) min_value = val; > } > min_val = (t)min_value; > return *ptr_max; > } > > > template<typename t> > const T& max_min(t& min_val) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "max_min(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const T *ptr_max = _data; > T max_value = *ptr_max, min_value = max_value; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val>max_value) { max_value = val; ptr_max = ptrs; } > if (val<min_value) min_value = val; > } > min_val = (t)min_value; > return *ptr_max; > } > > > > > > T kth_smallest(const unsigned int k) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "kth_smallest(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > CImg<T> arr(*this); > unsigned int l = 0, ir = size() - 1; > for (;;) { > if (ir<=l+1) { > if (ir==l+1 && arr[ir]<arr[l]) cimg::swap(arr[l],arr[ir]); > return arr[k]; > } else { > const unsigned int mid = (l + ir)>>1; > cimg::swap(arr[mid],arr[l+1]); > if (arr[l]>arr[ir]) cimg::swap(arr[l],arr[ir]); > if (arr[l+1]>arr[ir]) cimg::swap(arr[l+1],arr[ir]); > if (arr[l]>arr[l+1]) cimg::swap(arr[l],arr[l+1]); > unsigned int i = l + 1, j = ir; > const T pivot = arr[l+1]; > for (;;) { > do ++i; while (arr[i]<pivot); > do --j; while (arr[j]>pivot); > if (j<i) break; > cimg::swap(arr[i],arr[j]); > } > arr[l+1] = arr[j]; > arr[j] = pivot; > if (j>=k) ir = j - 1; > if (j<=k) l = i; > } > } > return 0; > } > > > > > T median() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "median(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const unsigned int s = size(); > const T res = kth_smallest(s>>1); > return (s%2)?res:((res+kth_smallest((s>>1)-1))/2); > } > > > > > Tdouble sum() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "sum(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > Tdouble res = 0; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) res+=(Tdouble)*ptrs; > return res; > } > > > > > Tdouble mean() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "mean(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > Tdouble res = 0; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) res+=(Tdouble)*ptrs; > return res/size(); > } ># 15809 "./CImg.h" > Tdouble variance(const unsigned int variance_method=1) const { > Tdouble foo; > return variance_mean(variance_method,foo); > } > > > > > > > template<typename t> > Tdouble variance_mean(const unsigned int variance_method, t& mean) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "variance_mean(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > Tdouble variance = 0, average = 0; > const unsigned long siz = size(); > switch (variance_method) { > case 0 :{ > Tdouble S = 0, S2 = 0; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)*ptrs; S+=val; S2+=val*val; } > variance = (S2 - S*S/siz)/siz; > average = S; > } break; > case 1 : { > Tdouble S = 0, S2 = 0; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)*ptrs; S+=val; S2+=val*val; } > variance = siz>1?(S2 - S*S/siz)/(siz - 1):0; > average = S; > } break; > case 2 : { > CImg<Tfloat> buf(*this,false); > buf.sort(); > const unsigned long siz2 = siz>>1; > const Tdouble med_i = (double)buf[siz2]; > for (Tfloat *ptrs = (buf)._data, *_maxptrs = (buf)._data + (buf).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)*ptrs; *ptrs = (Tfloat)cimg::abs(val - med_i); average+=val; } > buf.sort(); > const Tdouble sig = (Tdouble)(1.4828*buf[siz2]); > variance = sig*sig; > } break; > default : { > CImg<Tfloat> buf(*this,false); > const unsigned long siz2 = siz>>1; > for (Tfloat *ptrs = (buf)._data, *_maxptrs = (buf)._data + (buf).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)*ptrs; (*ptrs)=(Tfloat)((*ptrs)*val); average+=val; } > buf.sort(); > Tdouble a = 0; > const Tfloat *ptrs = buf._data; > for (unsigned long j = 0; j<siz2; ++j) a+=(Tdouble)*(ptrs++); > const Tdouble sig = (Tdouble)(2.6477*std::sqrt(a/siz2)); > variance = sig*sig; > } > } > mean = (t)(average/siz); > return variance>0?variance:0; > } ># 15876 "./CImg.h" > Tdouble variance_noise(const unsigned int variance_method=2) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "variance_noise(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned long siz = size(); > if (!siz || !_data) return 0; > if (variance_method>1) { > CImg<Tdouble> tmp(*this); > if (_depth==1) { > const Tdouble cste = 1.0/std::sqrt(20.0); ># 15889 "./CImg.h" > ># 15889 "./CImg.h" >#pragma omp parallel for if (_width*_height>=262144 && _spectrum>=2) ># 15889 "./CImg.h" ># 15889 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (T)(*this)(0,y,0,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,0,c)), (I[5] = (T)(*this)(_n1x,y,0,c)), (I[8] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > tmp(x,y,c) = cste*((Tdouble)Inc + (Tdouble)Ipc + (Tdouble)Icn + > (Tdouble)Icp - 4*(Tdouble)Icc); > } > } > } else { > const Tdouble cste = 1.0/std::sqrt(42.0); ># 15901 "./CImg.h" > ># 15901 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=262144 && _spectrum>=2) ># 15901 "./CImg.h" ># 15901 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[27]; T& Ippp = I[0]; T& Icpp = I[1]; T& Inpp = I[2]; T& Ipcp = I[3]; T& Iccp = I[4]; T& Incp = I[5]; T& Ipnp = I[6]; T& Icnp = I[7]; T& Innp = I[8]; T& Ippc = I[9]; T& Icpc = I[10]; T& Inpc = I[11]; T& Ipcc = I[12]; T& Iccc = I[13]; T& Incc = I[14]; T& Ipnc = I[15]; T& Icnc = I[16]; T& Innc = I[17]; T& Ippn = I[18]; T& Icpn = I[19]; T& Inpn = I[20]; T& Ipcn = I[21]; T& Iccn = I[22]; T& Incn = I[23]; T& Ipnn = I[24]; T& Icnn = I[25]; T& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (T)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (T)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (T)(*this)(0,y,z,c)), (I[15] = I[16] = (T)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (T)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (T)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (T)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (T)(*this)(_n1x,y,_p1z,c)), (I[8] = (T)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (T)(*this)(_n1x,_p1y,z,c)), (I[14] = (T)(*this)(_n1x,y,z,c)), (I[17] = (T)(*this)(_n1x,_n1y,z,c)), (I[20] = (T)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (T)(*this)(_n1x,y,_n1z,c)), (I[26] = (T)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > tmp(x,y,z,c) = cste*( > (Tdouble)Incc + (Tdouble)Ipcc + (Tdouble)Icnc + (Tdouble)Icpc + > (Tdouble)Iccn + (Tdouble)Iccp - 6*(Tdouble)Iccc); > } > } > } > return tmp.variance(variance_method); > } > > > Tdouble variance = 0, S = 0, S2 = 0; > if (_depth==1) { > const Tdouble cste = 1.0/std::sqrt(20.0); > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (T)(*this)(0,y,0,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,0,c)), (I[5] = (T)(*this)(_n1x,y,0,c)), (I[8] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tdouble val = cste*((Tdouble)Inc + (Tdouble)Ipc + > (Tdouble)Icn + (Tdouble)Icp - 4*(Tdouble)Icc); > S+=val; S2+=val*val; > } > } else { > const Tdouble cste = 1.0/std::sqrt(42.0); > T I[27]; T& Ippp = I[0]; T& Icpp = I[1]; T& Inpp = I[2]; T& Ipcp = I[3]; T& Iccp = I[4]; T& Incp = I[5]; T& Ipnp = I[6]; T& Icnp = I[7]; T& Innp = I[8]; T& Ippc = I[9]; T& Icpc = I[10]; T& Inpc = I[11]; T& Ipcc = I[12]; T& Iccc = I[13]; T& Incc = I[14]; T& Ipnc = I[15]; T& Icnc = I[16]; T& Innc = I[17]; T& Ippn = I[18]; T& Icpn = I[19]; T& Inpn = I[20]; T& Ipcn = I[21]; T& Iccn = I[22]; T& Incn = I[23]; T& Ipnn = I[24]; T& Icnn = I[25]; T& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (T)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (T)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (T)(*this)(0,y,z,c)), (I[15] = I[16] = (T)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (T)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (T)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (T)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (T)(*this)(_n1x,y,_p1z,c)), (I[8] = (T)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (T)(*this)(_n1x,_p1y,z,c)), (I[14] = (T)(*this)(_n1x,y,z,c)), (I[17] = (T)(*this)(_n1x,_n1y,z,c)), (I[20] = (T)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (T)(*this)(_n1x,y,_n1z,c)), (I[26] = (T)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tdouble val = cste * > ((Tdouble)Incc + (Tdouble)Ipcc + (Tdouble)Icnc + > (Tdouble)Icpc + > (Tdouble)Iccn + (Tdouble)Iccp - 6*(Tdouble)Iccc); > S+=val; S2+=val*val; > } > } > if (variance_method) variance = siz>1?(S2 - S*S/siz)/(siz - 1):0; > else variance = (S2 - S*S/siz)/siz; > return variance>0?variance:0; > } > > > > > > template<typename t> > Tdouble MSE(const CImg<t>& img) const { > if (img.size()!=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "MSE(): Instance and specified image (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data); > Tdouble vMSE = 0; > const t* ptr2 = img._data; > for (T *ptr1 = (*this)._data, *_maxptr1 = (*this)._data + (*this).size(); ptr1<_maxptr1; ++ptr1) { > const Tdouble diff = (Tdouble)*ptr1 - (Tdouble)*(ptr2++); > vMSE+=diff*diff; > } > const unsigned long siz = img.size(); > if (siz) vMSE/=siz; > return vMSE; > } > > > > > > > template<typename t> > Tdouble PSNR(const CImg<t>& img, const Tdouble max_value=255) const { > const Tdouble vMSE = (Tdouble)std::sqrt(MSE(img)); > return (vMSE!=0)?(Tdouble)(20*std::log10(max_value/vMSE)):(Tdouble)(cimg::type<Tdouble>::max()); > } ># 15982 "./CImg.h" > double eval(const char *const expression, const double x=0, const double y=0, const double z=0, const double c=0) const { > if (!expression) return 0; > return _cimg_math_parser(*this,expression,"eval")(x,y,z,c); > } > > > > > > > template<typename t> > CImg<doubleT> eval(const char *const expression, const CImg<t>& xyzc) const { > CImg<doubleT> res(1,xyzc.size()/4); > if (!expression) return res.fill(0); > _cimg_math_parser mp(*this,expression,"eval"); ># 15998 "./CImg.h" > ># 15998 "./CImg.h" >#pragma omp parallel if (res._height>=512 && std::strlen(expression)>=6) ># 15998 "./CImg.h" ># 15998 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 16001 "./CImg.h" > ># 16001 "./CImg.h" >#pragma omp for ># 16001 "./CImg.h" ># 16001 "./CImg.h" > > for (unsigned int i = 0; i<res._height; ++i) { > const unsigned int i4 = 4*i; > const double x = (double)xyzc[i4], y = (double)xyzc[i4+1], z = (double)xyzc[i4+2], c = (double)xyzc[i4+3]; > res[i] = lmp(x,y,z,c); > } > } > > > > > > > > return res; > } > > > > > > > CImg<Tdouble> get_stats(const unsigned int variance_method=1) const { > if (is_empty()) return CImg<doubleT>(); > const unsigned long siz = size(); > const T *const odata = _data; > const T *pm = odata, *pM = odata; > Tdouble S = 0, S2 = 0; > T m = *pm, M = m; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > const Tdouble _val = (Tdouble)val; > if (val<m) { m = val; pm = ptrs; } > if (val>M) { M = val; pM = ptrs; } > S+=_val; > S2+=_val*_val; > } > const Tdouble > mean_value = S/siz, > _variance_value = variance_method==0?(S2 - S*S/siz)/siz: > (variance_method==1?(siz>1?(S2 - S*S/siz)/(siz - 1):0): > variance(variance_method)), > variance_value = _variance_value>0?_variance_value:0; > int > xm = 0, ym = 0, zm = 0, cm = 0, > xM = 0, yM = 0, zM = 0, cM = 0; > contains(*pm,xm,ym,zm,cm); > contains(*pM,xM,yM,zM,cM); > return CImg<Tdouble>(1,12).fill((Tdouble)m,(Tdouble)M,mean_value,variance_value, > (Tdouble)xm,(Tdouble)ym,(Tdouble)zm,(Tdouble)cm, > (Tdouble)xM,(Tdouble)yM,(Tdouble)zM,(Tdouble)cM); > } > > > CImg<T>& stats(const unsigned int variance_method=1) { > return get_stats(variance_method).move_to(*this); > } ># 16073 "./CImg.h" > Tdouble magnitude(const int magnitude_type=2) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "magnitude(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > Tdouble res = 0; > switch (magnitude_type) { > case -1 : { > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)cimg::abs(*ptrs); if (val>res) res = val; } > } break; > case 1 : { > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) res+=(Tdouble)cimg::abs(*ptrs); > } break; > default : { > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) res+=(Tdouble)cimg::sqr(*ptrs); > res = (Tdouble)std::sqrt(res); > } > } > return res; > } > > > > > Tdouble trace() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "trace(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > Tdouble res = 0; > for (int k = 0; k<(int)((*this)._width); ++k) res+=(Tdouble)(*this)(k,k); > return res; > } > > > > > Tdouble det() const { > if (is_empty() || _width!=_height || _depth!=1 || _spectrum!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "det(): Instance is not a square matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > switch (_width) { > case 1 : return (Tdouble)((*this)(0,0)); > case 2 : return (Tdouble)((*this)(0,0))*(Tdouble)((*this)(1,1)) - (Tdouble)((*this)(0,1))*(Tdouble)((*this)(1,0)); > case 3 : { > const Tdouble > a = (Tdouble)_data[0], d = (Tdouble)_data[1], g = (Tdouble)_data[2], > b = (Tdouble)_data[3], e = (Tdouble)_data[4], h = (Tdouble)_data[5], > c = (Tdouble)_data[6], f = (Tdouble)_data[7], i = (Tdouble)_data[8]; > return i*a*e - a*h*f - i*b*d + b*g*f + c*d*h - c*g*e; > } > default : { > CImg<Tfloat> lu(*this); > CImg<uintT> indx; > bool d; > lu._LU(indx,d); > Tdouble res = d?(Tdouble)1:(Tdouble)-1; > for (int i = 0; i<(int)((lu)._width); ++i) res*=lu(i,i); > return res; > } > } > return 0; > } > > > > > > template<typename t> > Tdouble dot(const CImg<t>& img) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "dot(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!img) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "dot(): Empty specified image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int nb = cimg::min(size(),img.size()); > Tdouble res = 0; > for (unsigned int off = 0; off<nb; ++off) res+=(Tdouble)_data[off]*(Tdouble)img[off]; > return res; > } > > > > > > > > CImg<T> get_vector_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { > CImg<T> res; > if (res._height!=_spectrum) res.assign(1,_spectrum); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const T *ptrs = data(x,y,z); > T *ptrd = res._data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *(ptrd++) = *ptrs; ptrs+=whd; } > return res; > } ># 16183 "./CImg.h" > CImg<T> get_matrix_at(const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) const { > const int n = (int)std::sqrt((double)_spectrum); > const T *ptrs = data(x,y,z,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > CImg<T> res(n,n); > T *ptrd = res._data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *(ptrd++) = *ptrs; ptrs+=whd; } > return res; > } > > > > > > > > CImg<T> get_tensor_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { > const T *ptrs = data(x,y,z,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > if (_spectrum==6) return tensor(*ptrs,*(ptrs+whd),*(ptrs+2*whd),*(ptrs+3*whd),*(ptrs+4*whd),*(ptrs+5*whd)); > if (_spectrum==3) return tensor(*ptrs,*(ptrs+whd),*(ptrs+2*whd)); > return tensor(*ptrs); > } ># 16214 "./CImg.h" > template<typename t> > CImg<T>& set_vector_at(const CImg<t>& vec, const unsigned int x, const unsigned int y=0, const unsigned int z=0) { > if (x<_width && y<_height && z<_depth) { > const t *ptrs = vec._data; > const unsigned long whd = (unsigned long)_width*_height*_depth; > T *ptrd = data(x,y,z); > for (unsigned int k = cimg::min((unsigned int)vec.size(),_spectrum); k; --k) { *ptrd = (T)*(ptrs++); ptrd+=whd; } > } > return *this; > } ># 16232 "./CImg.h" > template<typename t> > CImg<T>& set_matrix_at(const CImg<t>& mat, const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) { > return set_vector_at(mat,x,y,z); > } ># 16244 "./CImg.h" > template<typename t> > CImg<T>& set_tensor_at(const CImg<t>& ten, const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) { > T *ptrd = data(x,y,z,0); > const unsigned long siz = (unsigned long)_width*_height*_depth; > if (ten._height==2) { > *ptrd = (T)ten[0]; ptrd+=siz; > *ptrd = (T)ten[1]; ptrd+=siz; > *ptrd = (T)ten[3]; > } > else { > *ptrd = (T)ten[0]; ptrd+=siz; > *ptrd = (T)ten[1]; ptrd+=siz; > *ptrd = (T)ten[2]; ptrd+=siz; > *ptrd = (T)ten[4]; ptrd+=siz; > *ptrd = (T)ten[5]; ptrd+=siz; > *ptrd = (T)ten[8]; > } > return *this; > } > > > > > > CImg<T>& vector() { > return unroll('y'); > } > > > CImg<T> get_vector() const { > return get_unroll('y'); > } > > > > > CImg<T>& matrix() { > const unsigned long siz = size(); > switch (siz) { > case 1 : break; > case 4 : _width = _height = 2; break; > case 9 : _width = _height = 3; break; > case 16 : _width = _height = 4; break; > case 25 : _width = _height = 5; break; > case 36 : _width = _height = 6; break; > case 49 : _width = _height = 7; break; > case 64 : _width = _height = 8; break; > case 81 : _width = _height = 9; break; > case 100 : _width = _height = 10; break; > default : { > unsigned long i = 11, i2 = i*i; > while (i2<siz) { i2+=2*i + 1; ++i; } > if (i2==siz) _width = _height = i; > else throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "matrix(): Invalid instance size %u (should be a square integer).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > siz); > } > } > return *this; > } > > > CImg<T> get_matrix() const { > return (+*this).matrix(); > } > > > > > CImg<T>& tensor() { > return get_tensor().move_to(*this); > } > > > CImg<T> get_tensor() const { > CImg<T> res; > const unsigned long siz = size(); > switch (siz) { > case 1 : break; > case 3 : > res.assign(2,2); > res(0,0) = (*this)(0); > res(1,0) = res(0,1) = (*this)(1); > res(1,1) = (*this)(2); > break; > case 6 : > res.assign(3,3); > res(0,0) = (*this)(0); > res(1,0) = res(0,1) = (*this)(1); > res(2,0) = res(0,2) = (*this)(2); > res(1,1) = (*this)(3); > res(2,1) = res(1,2) = (*this)(4); > res(2,2) = (*this)(5); > break; > default : > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "tensor(): Invalid instance size (does not define a 1x1, 2x2 or 3x3 tensor).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > } > return res; > } > > > > > > CImg<T>& diagonal() { > return get_diagonal().move_to(*this); > } > > > CImg<T> get_diagonal() const { > if (is_empty()) return *this; > CImg<T> res(size(),size(),1,1,0); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) res(off,off) = (*this)(off); > return res; > } > > > > > > CImg<T>& identity_matrix() { > return identity_matrix(cimg::max(_width,_height)).move_to(*this); > } > > > CImg<T> get_identity_matrix() const { > return identity_matrix(cimg::max(_width,_height)); > } > > > > > > > CImg<T>& sequence(const T a0, const T a1) { > if (is_empty()) return *this; > const unsigned int siz = size() - 1; > T* ptr = _data; > if (siz) { > const Tdouble delta = (Tdouble)a1 - (Tdouble)a0; > for (unsigned long l = 0, _maxl = (*this).size(); l<_maxl; ++l) *(ptr++) = (T)(a0 + delta*l/siz); > } else *ptr = a0; > return *this; > } > > > CImg<T> get_sequence(const T a0, const T a1) const { > return (+*this).sequence(a0,a1); > } > > > > > > CImg<T>& transpose() { > if (_width==1) { _width = _height; _height = 1; return *this; } > if (_height==1) { _height = _width; _width = 1; return *this; } > if (_width==_height) { > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = y; x<width(); ++x) cimg::swap((*this)(x,y,z,c),(*this)(y,x,z,c)); > return *this; > } > return get_transpose().move_to(*this); > } > > > CImg<T> get_transpose() const { > return get_permute_axes("yxzc"); > } > > > > > > > template<typename t> > CImg<T>& cross(const CImg<t>& img) { > if (_width!=1 || _height<3 || img._width!=1 || img._height<3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "cross(): Instance and/or specified image (%u,%u,%u,%u,%p) are not 3d vectors.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data); > > const T x = (*this)[0], y = (*this)[1], z = (*this)[2]; > (*this)[0] = (T)(y*img[2] - z*img[1]); > (*this)[1] = (T)(z*img[0] - x*img[2]); > (*this)[2] = (T)(x*img[1] - y*img[0]); > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_cross(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this).cross(img); > } > > > > > > > > CImg<T>& invert(const bool use_LU=true) { > if (_width!=_height || _depth!=1 || _spectrum!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "invert(): Instance is not a square matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); ># 16476 "./CImg.h" > const double dete = _width>3?-1.0:det(); > if (dete!=0.0 && _width==2) { > const double > a = _data[0], c = _data[1], > b = _data[2], d = _data[3]; > _data[0] = (T)(d/dete); _data[1] = (T)(-c/dete); > _data[2] = (T)(-b/dete); _data[3] = (T)(a/dete); > } else if (dete!=0.0 && _width==3) { > const double > a = _data[0], d = _data[1], g = _data[2], > b = _data[3], e = _data[4], h = _data[5], > c = _data[6], f = _data[7], i = _data[8]; > _data[0] = (T)((i*e-f*h)/dete), _data[1] = (T)((g*f-i*d)/dete), _data[2] = (T)((d*h-g*e)/dete); > _data[3] = (T)((h*c-i*b)/dete), _data[4] = (T)((i*a-c*g)/dete), _data[5] = (T)((g*b-a*h)/dete); > _data[6] = (T)((b*f-e*c)/dete), _data[7] = (T)((d*c-a*f)/dete), _data[8] = (T)((a*e-d*b)/dete); > } else { > if (use_LU) { > CImg<Tfloat> A(*this), indx, col(1,_width); > bool d; > A._LU(indx,d); > for (int j = 0; j<(int)((*this)._width); ++j) { > col.fill(0); > col(j) = 1; > col._solve(A,indx); > for (int i = 0; i<(int)((*this)._width); ++i) (*this)(j,i) = (T)col(i); > } > } else { > CImg<Tfloat> U(_width,_width), S(1,_width), V(_width,_width); > SVD(U,S,V,false); > U.transpose(); > for (int k = 0; k<(int)((S)._height); ++k) if (S[k]!=0) S[k]=1/S[k]; > S.diagonal(); > *this = V*S*U; > } > } > > return *this; > } > > > CImg<Tfloat> get_invert(const bool use_LU=true) const { > return CImg<Tfloat>(*this,false).invert(use_LU); > } > > > > > CImg<T>& pseudoinvert() { > return get_pseudoinvert().move_to(*this); > } > > > CImg<Tfloat> get_pseudoinvert() const { > CImg<Tfloat> U, S, V; > SVD(U,S,V); > const Tfloat tolerance = (sizeof(Tfloat)<=4?5.96e-8f:1.11e-16f)*cimg::max(_width,_height)*S.max(); > for (int x = 0; x<(int)((V)._width); ++x) { > const Tfloat s = S(x), invs = s>tolerance?1/s:(Tfloat)0; > for (int y = 0; y<(int)((V)._height); ++y) V(x,y)*=invs; > } > return V*U.transpose(); > } > > > > > > > template<typename t> > CImg<T>& solve(const CImg<t>& A) { > if (_width!=1 || _depth!=1 || _spectrum!=1 || _height!=A._height || A._depth!=1 || A._spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "solve(): Instance and specified matrix (%u,%u,%u,%u,%p) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > A._width,A._height,A._depth,A._spectrum,A._data); > typedef typename cimg::superset2<T,t,float>::type Ttfloat; > if (A._width==A._height) { ># 16580 "./CImg.h" > CImg<Ttfloat> lu(A,false); > CImg<Ttfloat> indx; > bool d; > lu._LU(indx,d); > _solve(lu,indx); > > } else { ># 16612 "./CImg.h" > assign(A.get_pseudoinvert()*(*this)); > > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset2<T,t,float>::type> get_solve(const CImg<t>& A) const { > return CImg<typename cimg::superset2<T,t,float>::type>(*this,false).solve(A); > } > > template<typename t, typename ti> > CImg<T>& _solve(const CImg<t>& A, const CImg<ti>& indx) { > typedef typename cimg::superset2<T,t,float>::type Ttfloat; > const int N = size(); > int ii = -1; > Ttfloat sum; > for (int i = 0; i<N; ++i) { > const int ip = (int)indx[i]; > Ttfloat sum = (*this)(ip); > (*this)(ip) = (*this)(i); > if (ii>=0) for (int j = ii; j<=i-1; ++j) sum-=A(j,i)*(*this)(j); > else if (sum!=0) ii = i; > (*this)(i) = (T)sum; > } > for (int i = N - 1; i>=0; --i) { > sum = (*this)(i); > for (int j = i + 1; j<N; ++j) sum-=A(j,i)*(*this)(j); > (*this)(i) = (T)(sum/A(i,i)); > } > return *this; > } ># 16653 "./CImg.h" > template<typename t> > CImg<T>& solve_tridiagonal(const CImg<t>& A) { > const unsigned int siz = (int)size(); > if (A._width!=3 || A._height!=siz) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "solve_tridiagonal(): Instance and tridiagonal matrix " > "(%u,%u,%u,%u,%p) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > A._width,A._height,A._depth,A._spectrum,A._data); > typedef typename cimg::superset2<T,t,float>::type Ttfloat; > const Ttfloat epsilon = 1e-4f; > CImg<Ttfloat> B = A.get_column(1), V(*this,false); > for (int i = 1; i<(int)siz; ++i) { > const Ttfloat m = A(0,i)/(B[i-1]?B[i-1]:epsilon); > B[i] -= m*A(2,i-1); > V[i] -= m*V[i-1]; > } > (*this)[siz-1] = (T)(V[siz-1]/(B[siz-1]?B[siz-1]:epsilon)); > for (int i = (int)siz - 2; i>=0; --i) (*this)[i] = (T)((V[i] - A(2,i)*(*this)[i+1])/(B[i]?B[i]:epsilon)); > return *this; > } > > > template<typename t> > CImg<typename cimg::superset2<T,t,float>::type> get_solve_tridiagonal(const CImg<t>& A) const { > return CImg<typename cimg::superset2<T,t,float>::type>(*this,false).solve_tridiagonal(A); > } > > > > > > > template<typename t> > const CImg<T>& eigen(CImg<t>& val, CImg<t> &vec) const { > if (is_empty()) { val.assign(); vec.assign(); } > else { > if (_width!=_height || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "eigen(): Instance is not a square matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (val.size()<(unsigned long)_width) val.assign(1,_width); > if (vec.size()<(unsigned long)_width*_width) vec.assign(_width,_width); > switch (_width) { > case 1 : { val[0] = (t)(*this)[0]; vec[0] = (t)1; } break; > case 2 : { > const double a = (*this)[0], b = (*this)[1], c = (*this)[2], d = (*this)[3], e = a + d; > double f = e*e - 4*(a*d - b*c); > if (f<0) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "eigen(): Complex eigenvalues found.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > f = std::sqrt(f); > const double l1 = 0.5*(e-f), l2 = 0.5*(e+f); > const double theta1 = std::atan2(l2-a,b), theta2 = std::atan2(l1-a,b); > val[0] = (t)l2; > val[1] = (t)l1; > vec(0,0) = (t)std::cos(theta1); > vec(0,1) = (t)std::sin(theta1); > vec(1,0) = (t)std::cos(theta2); > vec(1,1) = (t)std::sin(theta2); > } break; > default : > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "eigen(): Eigenvalues computation of general matrices is limited to 2x2 matrices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > } > } > return *this; > } > > > > > > CImgList<Tfloat> get_eigen() const { > CImgList<Tfloat> res(2); > eigen(res[0],res[1]); > return res; > } > > > > > > > template<typename t> > const CImg<T>& symmetric_eigen(CImg<t>& val, CImg<t>& vec) const { > if (is_empty()) { val.assign(); vec.assign(); } > else { ># 16768 "./CImg.h" > if (_width!=_height || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "eigen(): Instance is not a square matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > val.assign(1,_width); > if (vec._data) vec.assign(_width,_width); > if (_width<3) { > eigen(val,vec); > if (_width==2) { vec[1] = -vec[2]; vec[3] = vec[0]; } > return *this; > } > CImg<t> V(_width,_width); > SVD(vec,val,V,false); > bool is_ambiguous = false; > float eig = 0; > for (int p = 0; p<(int)((val)._height); ++p) { > if (val[p]>eig) eig = (float)val[p]; > t scal = 0; > for (int y = 0; y<(int)((vec)._height); ++y) scal+=vec(p,y)*V(p,y); > if (cimg::abs(scal)<0.9f) is_ambiguous = true; > if (scal<0) val[p] = -val[p]; > } > if (is_ambiguous) { > ++(eig*=2); > SVD(vec,val,V,false,40,eig); > val-=eig; > } > CImg<intT> permutations; > CImg<t> tmp(_width); > val.sort(permutations,false); > for (int k = 0; k<(int)((vec)._height); ++k) { > for (int y = 0; y<(int)((permutations)._height); ++y) tmp(y) = vec(permutations(y),k); > std::memcpy(vec.data(0,k),tmp._data,sizeof(t)*_width); > } > > } > return *this; > } > > > > > > CImgList<Tfloat> get_symmetric_eigen() const { > CImgList<Tfloat> res(2); > symmetric_eigen(res[0],res[1]); > return res; > } > > > > > > > template<typename t> > CImg<T>& sort(CImg<t>& permutations, const bool is_increasing=true) { > permutations.assign(_width,_height,_depth,_spectrum); > if (is_empty()) return *this; > for (unsigned long off = 0, _maxoff = (permutations).size(); off<_maxoff; ++off) permutations[off] = (t)off; > return _quicksort(0,size()-1,permutations,is_increasing,true); > } > > > template<typename t> > CImg<T> get_sort(CImg<t>& permutations, const bool is_increasing=true) const { > return (+*this).sort(permutations,is_increasing); > } ># 16847 "./CImg.h" > CImg<T>& sort(const bool is_increasing=true, const char axis=0) { > if (is_empty()) return *this; > CImg<uintT> perm; > switch (cimg::uncase(axis)) { > case 0 : > _quicksort(0,size()-1,perm,is_increasing,false); > break; > case 'x' : { > perm.assign(_width); > get_crop(0,0,0,0,_width-1,0,0,0).sort(perm,is_increasing); > CImg<T> img(*this,false); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y,z,c) = img(perm[x],y,z,c); > } break; > case 'y' : { > perm.assign(_height); > get_crop(0,0,0,0,0,_height-1,0,0).sort(perm,is_increasing); > CImg<T> img(*this,false); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y,z,c) = img(x,perm[y],z,c); > } break; > case 'z' : { > perm.assign(_depth); > get_crop(0,0,0,0,0,0,_depth-1,0).sort(perm,is_increasing); > CImg<T> img(*this,false); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y,z,c) = img(x,y,perm[z],c); > } break; > case 'c' : { > perm.assign(_spectrum); > get_crop(0,0,0,0,0,0,0,_spectrum-1).sort(perm,is_increasing); > CImg<T> img(*this,false); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y,z,c) = img(x,y,z,perm[c]); > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "sort(): Invalid specified axis '%c' " > "(should be { x | y | z | c }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),axis); > } > return *this; > } > > > CImg<T> get_sort(const bool is_increasing=true, const char axis=0) const { > return (+*this).sort(is_increasing,axis); > } > > template<typename t> > CImg<T>& _quicksort(const int indm, const int indM, CImg<t>& permutations, const bool is_increasing, const bool is_permutations) { > if (indm<indM) { > const int mid = (indm + indM)/2; > if (is_increasing) { > if ((*this)[indm]>(*this)[mid]) { > cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); > } > if ((*this)[mid]>(*this)[indM]) { > cimg::swap((*this)[indM],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indM],permutations[mid]); > } > if ((*this)[indm]>(*this)[mid]) { > cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); > } > } else { > if ((*this)[indm]<(*this)[mid]) { > cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); > } > if ((*this)[mid]<(*this)[indM]) { > cimg::swap((*this)[indM],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indM],permutations[mid]); > } > if ((*this)[indm]<(*this)[mid]) { > cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); > } > } > if (indM - indm>=3) { > const T pivot = (*this)[mid]; > int i = indm, j = indM; > if (is_increasing) { > do { > while ((*this)[i]<pivot) ++i; > while ((*this)[j]>pivot) --j; > if (i<=j) { > if (is_permutations) cimg::swap(permutations[i],permutations[j]); > cimg::swap((*this)[i++],(*this)[j--]); > } > } while (i<=j); > } else { > do { > while ((*this)[i]>pivot) ++i; > while ((*this)[j]<pivot) --j; > if (i<=j) { > if (is_permutations) cimg::swap(permutations[i],permutations[j]); > cimg::swap((*this)[i++],(*this)[j--]); > } > } while (i<=j); > } > if (indm<j) _quicksort(indm,j,permutations,is_increasing,is_permutations); > if (i<indM) _quicksort(i,indM,permutations,is_increasing,is_permutations); > } > } > return *this; > } ># 16963 "./CImg.h" > template<typename t> > const CImg<T>& SVD(CImg<t>& U, CImg<t>& S, CImg<t>& V, const bool sorting=true, > const unsigned int max_iteration=40, const float lambda=0) const { > if (is_empty()) { U.assign(); S.assign(); V.assign(); } > else { > U = *this; > if (lambda!=0) { > const unsigned int delta = cimg::min(U._width,U._height); > for (unsigned int i = 0; i<delta; ++i) U(i,i) = (t)(U(i,i) + lambda); > } > if (S.size()<_width) S.assign(1,_width); > if (V._width<_width || V._height<_height) V.assign(_width,_width); > CImg<t> rv1(_width); > t anorm = 0, c, f, g = 0, h, s, scale = 0; > int l = 0, nm = 0; > > for (int i = 0; i<(int)((U)._width); ++i) { > l = i+1; rv1[i] = scale*g; g = s = scale = 0; > if (i<height()) { > for (int k = i; k<height(); ++k) scale+= cimg::abs(U(i,k)); > if (scale) { > for (int k = i; k<height(); ++k) { U(i,k)/=scale; s+= U(i,k)*U(i,k); } > f = U(i,i); g = (t)((f>=0?-1:1)*std::sqrt(s)); h=f*g-s; U(i,i) = f-g; > for (int j = l; j<width(); ++j) { > s = 0; > for (int k=i; k<height(); ++k) s+= U(i,k)*U(j,k); > f = s/h; > for (int k = i; k<height(); ++k) U(j,k)+= f*U(i,k); > } > for (int k = i; k<height(); ++k) U(i,k)*= scale; > } > } > S[i]=scale*g; > > g = s = scale = 0; > if (i<height() && i!=width()-1) { > for (int k = l; k<width(); ++k) scale+=cimg::abs(U(k,i)); > if (scale) { > for (int k = l; k<width(); ++k) { U(k,i)/= scale; s+= U(k,i)*U(k,i); } > f = U(l,i); g = (t)((f>=0?-1:1)*std::sqrt(s)); h = f*g-s; U(l,i) = f-g; > for (int k = l; k<width(); ++k) rv1[k]=U(k,i)/h; > for (int j = l; j<height(); ++j) { > s = 0; > for (int k = l; k<width(); ++k) s+= U(k,j)*U(k,i); > for (int k = l; k<width(); ++k) U(k,j)+= s*rv1[k]; > } > for (int k = l; k<width(); ++k) U(k,i)*= scale; > } > } > anorm = (t)cimg::max((float)anorm,(float)(cimg::abs(S[i])+cimg::abs(rv1[i]))); > } > > for (int i = width()-1; i>=0; --i) { > if (i<width()-1) { > if (g) { > for (int j = l; j<width(); ++j) V(i,j) =(U(j,i)/U(l,i))/g; > for (int j = l; j<width(); ++j) { > s = 0; > for (int k = l; k<width(); ++k) s+= U(k,i)*V(j,k); > for (int k = l; k<width(); ++k) V(j,k)+= s*V(i,k); > } > } > for (int j = l; j<width(); ++j) V(j,i) = V(i,j) = (t)0.0; > } > V(i,i) = (t)1.0; g = rv1[i]; l = i; > } > > for (int i = cimg::min(width(),height())-1; i>=0; --i) { > l = i+1; g = S[i]; > for (int j = l; j<width(); ++j) U(j,i) = 0; > if (g) { > g = 1/g; > for (int j = l; j<width(); ++j) { > s = 0; for (int k = l; k<height(); ++k) s+= U(i,k)*U(j,k); > f = (s/U(i,i))*g; > for (int k = i; k<height(); ++k) U(j,k)+= f*U(i,k); > } > for (int j = i; j<height(); ++j) U(i,j)*= g; > } else for (int j = i; j<height(); ++j) U(i,j) = 0; > ++U(i,i); > } > > for (int k = width()-1; k>=0; --k) { > for (unsigned int its = 0; its<max_iteration; ++its) { > bool flag = true; > for (l = k; l>=1; --l) { > nm = l-1; > if ((cimg::abs(rv1[l])+anorm)==anorm) { flag = false; break; } > if ((cimg::abs(S[nm])+anorm)==anorm) break; > } > if (flag) { > c = 0; s = 1; > for (int i = l; i<=k; ++i) { > f = s*rv1[i]; rv1[i] = c*rv1[i]; > if ((cimg::abs(f)+anorm)==anorm) break; > g = S[i]; h = (t)cimg::_pythagore(f,g); S[i] = h; h = 1/h; c = g*h; s = -f*h; > for (int j = 0; j<(int)((U)._height); ++j) { const t y = U(nm,j), z = U(i,j); U(nm,j) = y*c + z*s; U(i,j) = z*c - y*s; } > } > } > const t z = S[k]; > if (l==k) { if (z<0) { S[k] = -z; for (int j = 0; j<(int)((U)._width); ++j) V(k,j) = -V(k,j); } break; } > nm = k-1; > t x = S[l], y = S[nm]; > g = rv1[nm]; h = rv1[k]; > f = ((y-z)*(y+z)+(g-h)*(g+h))/(2*h*y); > g = (t)cimg::_pythagore(f,1.0); > f = ((x-z)*(x+z)+h*((y/(f+ (f>=0?g:-g)))-h))/x; > c = s = 1; > for (int j = l; j<=nm; ++j) { > const int i = j+1; > g = rv1[i]; h = s*g; g = c*g; > t y = S[i]; > t z = (t)cimg::_pythagore(f,h); > rv1[j] = z; c = f/z; s = h/z; > f = x*c+g*s; g = g*c-x*s; h = y*s; y*=c; > for (int jj = 0; jj<(int)((U)._width); ++jj) { const t x = V(j,jj), z = V(i,jj); V(j,jj) = x*c + z*s; V(i,jj) = z*c - x*s; } > z = (t)cimg::_pythagore(f,h); S[j] = z; > if (z) { z = 1/z; c = f*z; s = h*z; } > f = c*g+s*y; x = c*y-s*g; > for (int jj = 0; jj<(int)((U)._height); ++jj) { const t y = U(j,jj); z = U(i,jj); U(j,jj) = y*c + z*s; U(i,jj) = z*c - y*s; } > } > rv1[l] = 0; rv1[k]=f; S[k]=x; > } > } > > if (sorting) { > CImg<intT> permutations; > CImg<t> tmp(_width); > S.sort(permutations,false); > for (int k = 0; k<(int)((U)._height); ++k) { > for (int y = 0; y<(int)((permutations)._height); ++y) tmp(y) = U(permutations(y),k); > std::memcpy(U.data(0,k),tmp._data,sizeof(t)*_width); > } > for (int k = 0; k<(int)((V)._height); ++k) { > for (int y = 0; y<(int)((permutations)._height); ++y) tmp(y) = V(permutations(y),k); > std::memcpy(V.data(0,k),tmp._data,sizeof(t)*_width); > } > } > } > return *this; > } > > > > > > CImgList<Tfloat> get_SVD(const bool sorting=true, > const unsigned int max_iteration=40, const float lambda=0) const { > CImgList<Tfloat> res(3); > SVD(res[0],res[1],res[2],sorting,max_iteration,lambda); > return res; > } > > > template<typename t> > CImg<T>& _LU(CImg<t>& indx, bool& d) { > const int N = width(); > int imax = 0; > CImg<Tfloat> vv(N); > indx.assign(N); > d = true; > for (int i = 0; i<(int)((*this)._width); ++i) { > Tfloat vmax = 0; > for (int j = 0; j<(int)((*this)._width); ++j) { > const Tfloat tmp = cimg::abs((*this)(j,i)); > if (tmp>vmax) vmax = tmp; > } > if (vmax==0) { indx.fill(0); return fill(0); } > vv[i] = 1/vmax; > } > for (int j = 0; j<(int)((*this)._width); ++j) { > for (int i = 0; i<j; ++i) { > Tfloat sum=(*this)(j,i); > for (int k = 0; k<i; ++k) sum-=(*this)(k,i)*(*this)(j,k); > (*this)(j,i) = (T)sum; > } > Tfloat vmax = 0; > for (int i = j; i<width(); ++i) { > Tfloat sum=(*this)(j,i); > for (int k = 0; k<j; ++k) sum-=(*this)(k,i)*(*this)(j,k); > (*this)(j,i) = (T)sum; > const Tfloat tmp = vv[i]*cimg::abs(sum); > if (tmp>=vmax) { vmax=tmp; imax=i; } > } > if (j!=imax) { > for (int k = 0; k<(int)((*this)._width); ++k) cimg::swap((*this)(k,imax),(*this)(k,j)); > d =!d; > vv[imax] = vv[j]; > } > indx[j] = (t)imax; > if ((*this)(j,j)==0) (*this)(j,j) = (T)1e-20; > if (j<N) { > const Tfloat tmp = 1/(Tfloat)(*this)(j,j); > for (int i=j+1; i<N; ++i) (*this)(j,i) = (T)((*this)(j,i)*tmp); > } > } > return *this; > } ># 17171 "./CImg.h" > template<typename tf, typename t> > static CImg<T> dijkstra(const tf& distance, const unsigned int nb_nodes, > const unsigned int starting_node, const unsigned int ending_node, > CImg<t>& previous_node) { > if (starting_node>=nb_nodes) > throw CImgArgumentException("CImg<%s>::dijkstra(): Specified indice of starting node %u is higher than number of nodes %u.", > pixel_type(),starting_node,nb_nodes); > CImg<T> dist(1,nb_nodes,1,1,cimg::type<T>::max()); > dist(starting_node) = 0; > previous_node.assign(1,nb_nodes,1,1,(t)-1); > previous_node(starting_node) = (t)starting_node; > CImg<uintT> Q(nb_nodes); > for (int u = 0; u<(int)((Q)._width); ++u) Q(u) = u; > cimg::swap(Q(starting_node),Q(0)); > unsigned int sizeQ = nb_nodes; > while (sizeQ) { > > const unsigned int umin = Q(0); > if (umin==ending_node) sizeQ = 0; > else { > const T dmin = dist(umin); > const T infty = cimg::type<T>::max(); > for (unsigned int q = 1; q<sizeQ; ++q) { > const unsigned int v = Q(q); > const T d = (T)distance(v,umin); > if (d<infty) { > const T alt = dmin + d; > if (alt<dist(v)) { > dist(v) = alt; > previous_node(v) = (t)umin; > const T distpos = dist(Q(q)); > for (unsigned int pos = q, par = 0; pos && distpos<dist(Q(par=(pos+1)/2-1)); pos=par) cimg::swap(Q(pos),Q(par)); > } > } > } > > Q(0) = Q(--sizeQ); > const T distpos = dist(Q(0)); > for (unsigned int pos = 0, left = 0, right = 0; > ((right=2*(pos+1),(left=right-1))<sizeQ && distpos>dist(Q(left))) || (right<sizeQ && distpos>dist(Q(right)));) { > if (right<sizeQ) { > if (dist(Q(left))<dist(Q(right))) { cimg::swap(Q(pos),Q(left)); pos = left; } > else { cimg::swap(Q(pos),Q(right)); pos = right; } > } else { cimg::swap(Q(pos),Q(left)); pos = left; } > } > } > } > return dist; > } > > > template<typename tf, typename t> > static CImg<T> dijkstra(const tf& distance, const unsigned int nb_nodes, > const unsigned int starting_node, const unsigned int ending_node=~0U) { > CImg<uintT> foo; > return dijkstra(distance,nb_nodes,starting_node,ending_node,foo); > } ># 17237 "./CImg.h" > template<typename t> > CImg<T>& dijkstra(const unsigned int starting_node, const unsigned int ending_node, CImg<t>& previous_node) { > return get_dijkstra(starting_node,ending_node,previous_node).move_to(*this); > } > > > template<typename t> > CImg<T> get_dijkstra(const unsigned int starting_node, const unsigned int ending_node, CImg<t>& previous_node) const { > if (_width!=_height || _depth!=1 || _spectrum!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "dijkstra(): Instance is not a graph adjacency matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return dijkstra(*this,_width,starting_node,ending_node,previous_node); > } > > > CImg<T>& dijkstra(const unsigned int starting_node, const unsigned int ending_node=~0U) { > return get_dijkstra(starting_node,ending_node).move_to(*this); > } > > > CImg<Tfloat> get_dijkstra(const unsigned int starting_node, const unsigned int ending_node=~0U) const { > CImg<uintT> foo; > return get_dijkstra(starting_node,ending_node,foo); > } > > > > > > > static CImg<T> string(const char *const str, const bool is_last_zero=true) { > if (!str) return CImg<T>(); > return CImg<T>(str,(unsigned int)std::strlen(str)+(is_last_zero?1:0)); > } > > > > > > static CImg<T> vector(const T& a0) { > CImg<T> r(1,1); > r[0] = a0; > return r; > } > > > > > > > static CImg<T> vector(const T& a0, const T& a1) { > CImg<T> r(1,2); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; > return r; > } > > > > > > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2) { > CImg<T> r(1,3); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; > return r; > } ># 17314 "./CImg.h" > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3) { > CImg<T> r(1,4); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4) { > CImg<T> r(1,5); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, const T& a5) { > CImg<T> r(1,6); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; *(ptr++) = a5; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6) { > CImg<T> r(1,7); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7) { > CImg<T> r(1,8); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8) { > CImg<T> r(1,9); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9) { > CImg<T> r(1,10); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10) { > CImg<T> r(1,11); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11) { > CImg<T> r(1,12); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12) { > CImg<T> r(1,13); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12, const T& a13) { > CImg<T> r(1,14); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; *(ptr++) = a13; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12, const T& a13, const T& a14) { > CImg<T> r(1,15); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12, const T& a13, const T& a14, const T& a15) { > CImg<T> r(1,16); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; *(ptr++) = a15; > return r; > } > > > > > > > static CImg<T> matrix(const T& a0) { > return vector(a0); > } ># 17464 "./CImg.h" > static CImg<T> matrix(const T& a0, const T& a1, > const T& a2, const T& a3) { > CImg<T> r(2,2); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; > *(ptr++) = a2; *(ptr++) = a3; > return r; > } ># 17484 "./CImg.h" > static CImg<T> matrix(const T& a0, const T& a1, const T& a2, > const T& a3, const T& a4, const T& a5, > const T& a6, const T& a7, const T& a8) { > CImg<T> r(3,3); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; > *(ptr++) = a3; *(ptr++) = a4; *(ptr++) = a5; > *(ptr++) = a6; *(ptr++) = a7; *(ptr++) = a8; > return r; > } > > > static CImg<T> matrix(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12, const T& a13, const T& a14, const T& a15) { > CImg<T> r(4,4); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; *(ptr++) = a15; > return r; > } > > > static CImg<T> matrix(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, > const T& a5, const T& a6, const T& a7, const T& a8, const T& a9, > const T& a10, const T& a11, const T& a12, const T& a13, const T& a14, > const T& a15, const T& a16, const T& a17, const T& a18, const T& a19, > const T& a20, const T& a21, const T& a22, const T& a23, const T& a24) { > CImg<T> r(5,5); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; > *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; *(ptr++) = a8; *(ptr++) = a9; > *(ptr++) = a10; *(ptr++) = a11; *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; > *(ptr++) = a15; *(ptr++) = a16; *(ptr++) = a17; *(ptr++) = a18; *(ptr++) = a19; > *(ptr++) = a20; *(ptr++) = a21; *(ptr++) = a22; *(ptr++) = a23; *(ptr++) = a24; > return r; > } > > > > > > > static CImg<T> tensor(const T& a0) { > return matrix(a0); > } > > > static CImg<T> tensor(const T& a0, const T& a1, const T& a2) { > return matrix(a0,a1,a1,a2); > } > > > static CImg<T> tensor(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, const T& a5) { > return matrix(a0,a1,a2,a1,a3,a4,a2,a4,a5); > } > > > static CImg<T> diagonal(const T& a0) { > return matrix(a0); > } > > > static CImg<T> diagonal(const T& a0, const T& a1) { > return matrix(a0,0,0,a1); > } > > > static CImg<T> diagonal(const T& a0, const T& a1, const T& a2) { > return matrix(a0,0,0,0,a1,0,0,0,a2); > } > > > static CImg<T> diagonal(const T& a0, const T& a1, const T& a2, const T& a3) { > return matrix(a0,0,0,0,0,a1,0,0,0,0,a2,0,0,0,0,a3); > } > > > static CImg<T> diagonal(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4) { > return matrix(a0,0,0,0,0,0,a1,0,0,0,0,0,a2,0,0,0,0,0,a3,0,0,0,0,0,a4); > } > > > > > > static CImg<T> identity_matrix(const unsigned int N) { > CImg<T> res(N,N,1,1,0); > for (int x = 0; x<(int)((res)._width); ++x) res(x,x) = 1; > return res; > } > > > > > > > > static CImg<T> sequence(const unsigned int N, const T a0, const T a1) { > if (N) return CImg<T>(1,N).sequence(a0,a1); > return CImg<T>(); > } ># 17595 "./CImg.h" > static CImg<T> rotation_matrix(const float x, const float y, const float z, const float w, const bool is_quaternion=false) { > float X,Y,Z,W; > if (!is_quaternion) { > const float norm = (float)std::sqrt(x*x + y*y + z*z), > nx = norm>0?x/norm:0, > ny = norm>0?y/norm:0, > nz = norm>0?z/norm:1, > nw = norm>0?w:0, > sina = (float)std::sin(nw/2), > cosa = (float)std::cos(nw/2); > X = nx*sina; > Y = ny*sina; > Z = nz*sina; > W = cosa; > } else { > const float norm = (float)std::sqrt(x*x + y*y + z*z + w*w); > if (norm>0) { X = x/norm; Y = y/norm; Z = z/norm; W = w/norm; } > else { X = Y = Z = 0; W = 1; } > } > const float xx = X*X, xy = X*Y, xz = X*Z, xw = X*W, yy = Y*Y, yz = Y*Z, yw = Y*W, zz = Z*Z, zw = Z*W; > return CImg<T>::matrix((T)(1-2*(yy+zz)), (T)(2*(xy+zw)), (T)(2*(xz-yw)), > (T)(2*(xy-zw)), (T)(1-2*(xx+zz)), (T)(2*(yz+xw)), > (T)(2*(xz+yw)), (T)(2*(yz-xw)), (T)(1-2*(xx+yy))); > } ># 17631 "./CImg.h" > CImg<T>& fill(const T val) { > if (is_empty()) return *this; > if (val && sizeof(T)!=1) for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = val; > else std::memset(_data,(int)val,sizeof(T)*size()); > return *this; > } > > > CImg<T> get_fill(const T val) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val); > } > > > > > > > CImg<T>& fill(const T val0, const T val1) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-1; > for (ptrd = _data; ptrd<ptre; ) { *(ptrd++) = val0; *(ptrd++) = val1; } > if (ptrd!=ptre+1) *(ptrd++) = val0; > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-2; > for (ptrd = _data; ptrd<ptre; ) { *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; } > ptre+=2; > switch (ptre - ptrd) { > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-3; > for (ptrd = _data; ptrd<ptre; ) { *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; } > ptre+=3; > switch (ptre - ptrd) { > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-4; > for (ptrd = _data; ptrd<ptre; ) { *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; } > ptre+=4; > switch (ptre - ptrd) { > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-5; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > } > ptre+=5; > switch (ptre - ptrd) { > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-6; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; *(ptrd++) = val6; > } > ptre+=6; > switch (ptre - ptrd) { > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-7; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; > *(ptrd++) = val4; *(ptrd++) = val5; *(ptrd++) = val6; *(ptrd++) = val7; > } > ptre+=7; > switch (ptre - ptrd) { > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-8; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; > *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; > } > ptre+=8; > switch (ptre - ptrd) { > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-9; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; > *(ptrd++) = val5; *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; > } > ptre+=9; > switch (ptre - ptrd) { > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-10; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; > *(ptrd++) = val5; *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; > *(ptrd++) = val10; > } > ptre+=10; > switch (ptre - ptrd) { > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-11; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > } > ptre+=11; > switch (ptre - ptrd) { > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-12; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > *(ptrd++) = val12; > } > ptre+=12; > switch (ptre - ptrd) { > case 12 : *(--ptre) = val11; > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-13; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > *(ptrd++) = val12; *(ptrd++) = val13; > } > ptre+=13; > switch (ptre - ptrd) { > case 13 : *(--ptre) = val12; > case 12 : *(--ptre) = val11; > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, > val13); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13, const T val14) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-14; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > *(ptrd++) = val12; *(ptrd++) = val13; *(ptrd++) = val14; > } > ptre+=14; > switch (ptre - ptrd) { > case 14 : *(--ptre) = val13; > case 13 : *(--ptre) = val12; > case 12 : *(--ptre) = val11; > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13, const T val14) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, > val13,val14); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13, const T val14, const T val15) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-15; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > *(ptrd++) = val12; *(ptrd++) = val13; *(ptrd++) = val14; *(ptrd++) = val15; > } > ptre+=15; > switch (ptre - ptrd) { > case 15 : *(--ptre) = val14; > case 14 : *(--ptre) = val13; > case 13 : *(--ptre) = val12; > case 12 : *(--ptre) = val11; > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13, const T val14, const T val15) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, > val13,val14,val15); > } > > > > > > > CImg<T>& fill(const char *const expression, const bool repeat_flag) { > if (is_empty() || !expression || !*expression) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"fill"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) *(ptrd--) = (T)mp(x,y,z,c); > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) *(ptrd++) = (T)mp(x,y,z,c); > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) ># 18086 "./CImg.h" > ># 18086 "./CImg.h" >#pragma omp parallel ># 18086 "./CImg.h" ># 18086 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; ># 18089 "./CImg.h" > ># 18089 "./CImg.h" >#pragma omp for collapse(3) ># 18089 "./CImg.h" ># 18089 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) *ptrd++ = (T)lmp(x,y,z,c); > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) *(ptrd++) = (T)mp(x,y,z,c); > } > } catch (CImgException& e) { > char item[16384] = { 0 }, sep = 0; > const char *nexpression = expression; > unsigned long nb = 0; > const unsigned long siz = size(); > T *ptrd = _data; > for (double val = 0; *nexpression && nb<siz; ++nb) { > sep = 0; > const int err = std::sscanf(nexpression,"%4095[ \n\t0-9.e+-]%c",item,&sep); > if (err>0 && std::sscanf(item,"%lf",&val)==1) { > nexpression+=std::strlen(item) + (err>1?1:0); > *(ptrd++) = (T)val; > } else break; > } > cimg::exception_mode() = omode; > if (nb<siz && (sep || *nexpression)) > throw CImgArgumentException(e.what(),pixel_type(),expression); > if (repeat_flag && nb && nb<siz) for (T *ptrs = _data, *const ptre = _data + siz; ptrd<ptre; ++ptrs) *(ptrd++) = *ptrs; > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<T> get_fill(const char *const values, const bool repeat_values) const { > return (+*this).fill(values,repeat_values); > } > > > > > > > template<typename t> > CImg<T>& fill(const CImg<t>& values, const bool repeat_values=true) { > if (is_empty() || !values) return *this; > T *ptrd = _data, *ptre = ptrd + size(); > for (t *ptrs = values._data, *ptrs_end = ptrs + values.size(); ptrs<ptrs_end && ptrd<ptre; ++ptrs) *(ptrd++) = (T)*ptrs; > if (repeat_values && ptrd<ptre) for (T *ptrs = _data; ptrd<ptre; ++ptrs) *(ptrd++) = *ptrs; > return *this; > } > > > template<typename t> > CImg<T> get_fill(const CImg<t>& values, const bool repeat_values=true) const { > return repeat_values?CImg<T>(_width,_height,_depth,_spectrum).fill(values,repeat_values):(+*this).fill(values,repeat_values); > } ># 18154 "./CImg.h" > CImg<T>& fillX(const unsigned int y, const unsigned int z, const unsigned int c, const int a0, ...) { > > > > > if (y<_height && z<_depth && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(0,y,z,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_width; ++k) { ptrd+=1; *ptrd = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); }; > return *this; > } > > > CImg<T>& fillX(const unsigned int y, const unsigned int z, const unsigned int c, const double a0, ...) { > if (y<_height && z<_depth && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(0,y,z,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_width; ++k) { ptrd+=1; *ptrd = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); }; > return *this; > } ># 18176 "./CImg.h" > CImg<T>& fillY(const unsigned int x, const unsigned int z, const unsigned int c, const int a0, ...) { > if (x<_width && z<_depth && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,0,z,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_height; ++k) { ptrd+=_width; *ptrd = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); }; > return *this; > } > > > CImg<T>& fillY(const unsigned int x, const unsigned int z, const unsigned int c, const double a0, ...) { > if (x<_width && z<_depth && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,0,z,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_height; ++k) { ptrd+=_width; *ptrd = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); }; > return *this; > } ># 18194 "./CImg.h" > CImg<T>& fillZ(const unsigned int x, const unsigned int y, const unsigned int c, const int a0, ...) { > const unsigned long wh = (unsigned long)_width*_height; > if (x<_width && y<_height && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,y,0,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_depth; ++k) { ptrd+=wh; *ptrd = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); }; > return *this; > } > > > CImg<T>& fillZ(const unsigned int x, const unsigned int y, const unsigned int c, const double a0, ...) { > const unsigned long wh = (unsigned long)_width*_height; > if (x<_width && y<_height && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,y,0,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_depth; ++k) { ptrd+=wh; *ptrd = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); }; > return *this; > } ># 18214 "./CImg.h" > CImg<T>& fillC(const unsigned int x, const unsigned int y, const unsigned int z, const int a0, ...) { > const unsigned long whd = (unsigned long)_width*_height*_depth; > if (x<_width && y<_height && z<_depth) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,y,z,0); *ptrd = (T)a0; for (unsigned long k = 1; k<_spectrum; ++k) { ptrd+=whd; *ptrd = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); }; > return *this; > } > > > CImg<T>& fillC(const unsigned int x, const unsigned int y, const unsigned int z, const double a0, ...) { > const unsigned long whd = (unsigned long)_width*_height*_depth; > if (x<_width && y<_height && z<_depth) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,y,z,0); *ptrd = (T)a0; for (unsigned long k = 1; k<_spectrum; ++k) { ptrd+=whd; *ptrd = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); }; > return *this; > } > > > > > > > > CImg<T>& discard(const T value) { > return get_discard(value).move_to(*this); > } > > > CImg<T> get_discard(const T value) const { > CImg<T> res(1,size()); > T *pd = res._data; > for (const T *ps = _data, *const pse = end(); ps<pse; ++ps) > if (*ps!=value) *(pd++) = *ps; > if (pd==res._data) return CImg<T>(); > return res.resize(1,pd-res._data,1,1,-1); > } > > > > > > > > template<typename t> > CImg<T>& discard(const CImg<t>& values) { > return get_discard(values).move_to(*this); > } > > > template<typename t> > CImg<T> get_discard(const CImg<t>& values) const { > if (!values) return *this; > if (values.size()==1) return get_discard(*values); > CImg<T> res(1,size()); > T *pd = res._data; > const t *const pve = values.end(); > for (const T *ps = _data, *const pse = end(); ps<pse; ) { > const T *_ps = ps; > const t *pv = values._data; > while (_ps<pse && pv<pve) { if (*(_ps++)!=(T)*pv) break; ++pv; } > if (pv!=pve) { > const unsigned int l = _ps - ps; > if (l==1) *(pd++) = *ps; else { std::memcpy(pd,ps,sizeof(T)*l); pd+=l; } > } > ps = _ps; > } > if (pd==res._data) return CImg<T>(); > return res.resize(1,pd-res._data,1,1,-1); > } > > > > > CImg<T>& invert_endianness() { > cimg::invert_endianness(_data,size()); > return *this; > } > > > CImg<T> get_invert_endianness() const { > return (+*this).invert_endianness(); > } > > > > > > > > CImg<T>& rand(const T val_min, const T val_max) { > const float delta = (float)val_max - (float)val_min; > for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)(val_min + cimg::rand()*delta); > return *this; > } > > > CImg<T> get_rand(const T val_min, const T val_max) const { > return (+*this).rand(val_min,val_max); > } ># 18318 "./CImg.h" > CImg<T>& round(const double y=1, const int rounding_type=0) { > if (y>0) ># 18321 "./CImg.h" > ># 18321 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 18321 "./CImg.h" ># 18321 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::round(*ptrd,y,rounding_type); > return *this; > } > > > CImg<T> get_round(const double y=1, const unsigned int rounding_type=0) const { > return (+*this).round(y,rounding_type); > } ># 18347 "./CImg.h" > CImg<T>& noise(const double sigma, const unsigned int noise_type=0) { > if (!is_empty()) { > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > Tfloat nsigma = (Tfloat)sigma, m = 0, M = 0; > if (nsigma==0 && noise_type!=3) return *this; > if (nsigma<0 || noise_type==2) m = (Tfloat)min_max(M); > if (nsigma<0) nsigma = (Tfloat)(-nsigma*(M-m)/100.0); > switch (noise_type) { > case 0 : { > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > Tfloat val = (Tfloat)(*ptrd + nsigma*cimg::grand()); > if (val>vmax) val = vmax; > if (val<vmin) val = vmin; > *ptrd = (T)val; > } > } break; > case 1 : { > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > Tfloat val = (Tfloat)(*ptrd + nsigma*cimg::crand()); > if (val>vmax) val = vmax; > if (val<vmin) val = vmin; > *ptrd = (T)val; > } > } break; > case 2 : { > if (nsigma<0) nsigma = -nsigma; > if (M==m) { m = 0; M = (Tfloat)(cimg::type<T>::is_float()?1:cimg::type<T>::max()); } > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) if (cimg::rand()*100<nsigma) *ptrd = (T)(cimg::rand()<0.5?M:m); > } break; > > case 3 : { > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::prand(*ptrd); > } break; > > case 4 : { > const Tfloat sqrt2 = (Tfloat)std::sqrt(2.0); > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > const Tfloat > val0 = (Tfloat)*ptrd/sqrt2, > re = (Tfloat)(val0 + nsigma*cimg::grand()), > im = (Tfloat)(val0 + nsigma*cimg::grand()); > Tfloat val = (Tfloat)std::sqrt(re*re + im*im); > if (val>vmax) val = vmax; > if (val<vmin) val = vmin; > *ptrd = (T)val; > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "noise(): Invalid specified noise type %d " > "(should be { 0=gaussian | 1=uniform | 2=salt&Pepper | 3=poisson }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > noise_type); > } > } > return *this; > } > > > CImg<T> get_noise(const double sigma, const unsigned int noise_type=0) const { > return (+*this).noise(sigma,noise_type); > } ># 18421 "./CImg.h" > CImg<T>& normalize(const T min_value, const T max_value) { > if (is_empty()) return *this; > const T a = min_value<max_value?min_value:max_value, b = min_value<max_value?max_value:min_value; > T m, M = max_min(m); > const Tfloat fm = (Tfloat)m, fM = (Tfloat)M; > if (m==M) return fill(min_value); > if (m!=a || M!=b) ># 18429 "./CImg.h" > ># 18429 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 18429 "./CImg.h" ># 18429 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)((*ptrd-fm)/(fM-fm)*(b-a)+a); > return *this; > } > > > CImg<Tfloat> get_normalize(const T min_value, const T max_value) const { > return CImg<Tfloat>(*this,false).normalize((Tfloat)min_value,(Tfloat)max_value); > } ># 18449 "./CImg.h" > CImg<T>& normalize() { > const unsigned long whd = (unsigned long)_width*_height*_depth; ># 18452 "./CImg.h" > ># 18452 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) ># 18452 "./CImg.h" ># 18452 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,0); > for (int x = 0; x<(int)((*this)._width); ++x) { > const T *ptrs = ptrd; > float n = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { n+=cimg::sqr((float)*ptrs); ptrs+=whd; } > n = (float)std::sqrt(n); > T *_ptrd = ptrd++; > if (n>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *_ptrd = (T)(*_ptrd/n); _ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *_ptrd = (T)0; _ptrd+=whd; } > } > } > return *this; > } > > > CImg<Tfloat> get_normalize() const { > return CImg<Tfloat>(*this,false).normalize(); > } ># 18484 "./CImg.h" > CImg<T>& norm(const int norm_type=2) { > if (_spectrum==1) return abs(); > return get_norm(norm_type).move_to(*this); > } > > > CImg<Tfloat> get_norm(const int norm_type=2) const { > if (is_empty()) return *this; > if (_spectrum==1) return get_abs(); > const unsigned long whd = (unsigned long)_width*_height*_depth; > CImg<Tfloat> res(_width,_height,_depth); > switch (norm_type) { > case -1 : { ># 18498 "./CImg.h" > ># 18498 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) ># 18498 "./CImg.h" ># 18498 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > const unsigned long off = offset(0,y,z); > const T *ptrs = _data + off; > Tfloat *ptrd = res._data + off; > for (int x = 0; x<(int)((*this)._width); ++x) { > Tfloat n = 0; > const T *_ptrs = ptrs++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { const Tfloat val = (Tfloat)cimg::abs(*_ptrs); if (val>n) n = val; _ptrs+=whd; } > *(ptrd++) = n; > } > } > } break; > case 1 : { ># 18514 "./CImg.h" > ># 18514 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) ># 18514 "./CImg.h" ># 18514 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > const unsigned long off = offset(0,y,z); > const T *ptrs = _data + off; > Tfloat *ptrd = res._data + off; > for (int x = 0; x<(int)((*this)._width); ++x) { > Tfloat n = 0; > const T *_ptrs = ptrs++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { n+=cimg::abs(*_ptrs); _ptrs+=whd; } > *(ptrd++) = n; > } > } > } break; > default : { ># 18530 "./CImg.h" > ># 18530 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) ># 18530 "./CImg.h" ># 18530 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > const unsigned long off = offset(0,y,z); > const T *ptrs = _data + off; > Tfloat *ptrd = res._data + off; > for (int x = 0; x<(int)((*this)._width); ++x) { > Tfloat n = 0; > const T *_ptrs = ptrs++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { n+=cimg::sqr((Tfloat)*_ptrs); _ptrs+=whd; } > *(ptrd++) = (Tfloat)std::sqrt((Tfloat)n); > } > } > } > } > return res; > } ># 18559 "./CImg.h" > CImg<T>& cut(const T min_value, const T max_value) { > if (is_empty()) return *this; > const T a = min_value<max_value?min_value:max_value, b = min_value<max_value?max_value:min_value; ># 18563 "./CImg.h" > ># 18563 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18563 "./CImg.h" ># 18563 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (*ptrd<a)?a:((*ptrd>b)?b:*ptrd); > return *this; > } > > > CImg<T> get_cut(const T min_value, const T max_value) const { > return (+*this).cut(min_value,max_value); > } ># 18585 "./CImg.h" > CImg<T>& quantize(const unsigned int nb_levels, const bool keep_range=true) { > if (!nb_levels) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "quantize(): Invalid quantization request with 0 values.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (is_empty()) return *this; > Tfloat m, M = (Tfloat)max_min(m), range = M - m; > if (range>0) { > if (keep_range) ># 18596 "./CImg.h" > ># 18596 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18596 "./CImg.h" ># 18596 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); > *ptrd = (T)(m + cimg::min(val,nb_levels-1)*range/nb_levels); > } else ># 18603 "./CImg.h" > ># 18603 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18603 "./CImg.h" ># 18603 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); > *ptrd = (T)cimg::min(val,nb_levels-1); > } > } > return *this; > } > > > CImg<T> get_quantize(const unsigned int n, const bool keep_range=true) const { > return (+*this).quantize(n,keep_range); > } ># 18630 "./CImg.h" > CImg<T>& threshold(const T value, const bool soft_threshold=false, const bool strict_threshold=false) { > if (is_empty()) return *this; > if (strict_threshold) { > if (soft_threshold) ># 18635 "./CImg.h" > ># 18635 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18635 "./CImg.h" ># 18635 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T v = *ptrd; *ptrd = v>value?(T)(v-value):v<-(float)value?(T)(v+value):(T)0; } > else ># 18640 "./CImg.h" > ># 18640 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 18640 "./CImg.h" ># 18640 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = *ptrd>value?(T)1:(T)0; > } else { > if (soft_threshold) ># 18646 "./CImg.h" > ># 18646 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18646 "./CImg.h" ># 18646 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T v = *ptrd; *ptrd = v>=value?(T)(v-value):v<=-(float)value?(T)(v+value):(T)0; } > else ># 18651 "./CImg.h" > ># 18651 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 18651 "./CImg.h" ># 18651 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = *ptrd>=value?(T)1:(T)0; > } > return *this; > } > > > CImg<T> get_threshold(const T value, const bool soft_threshold=false, const bool strict_threshold=false) const { > return (+*this).threshold(value,soft_threshold,strict_threshold); > } ># 18678 "./CImg.h" > CImg<T>& histogram(const unsigned int nb_levels, const T min_value, const T max_value) { > return get_histogram(nb_levels,min_value,max_value).move_to(*this); > } > > > CImg<T>& histogram(const unsigned int nb_levels) { > return get_histogram(nb_levels).move_to(*this); > } > > > CImg<ulongT> get_histogram(const unsigned int nb_levels, const T min_value, const T max_value) const { > if (!nb_levels || is_empty()) return CImg<ulongT>(); > T vmin = min_value<max_value?min_value:max_value, vmax = min_value<max_value?max_value:min_value; > CImg<ulongT> res(nb_levels,1,1,1,0); > for (T *ptrs = (*this)._data + (*this).size() - 1; ptrs>=(*this)._data; --ptrs) { > const T val = *ptrs; > if (val>=vmin && val<=vmax) ++res[val==vmax?nb_levels-1:(unsigned int)((val-vmin)*nb_levels/(vmax-vmin))]; > } > return res; > } > > > CImg<ulongT> get_histogram(const unsigned int nb_levels) const { > if (!nb_levels || is_empty()) return CImg<ulongT>(); > T vmax = 0, vmin = min_max(vmax); > return get_histogram(nb_levels,vmin,vmax); > } ># 18718 "./CImg.h" > CImg<T>& equalize(const unsigned int nb_levels, const T min_value, const T max_value) { > if (!nb_levels || is_empty()) return *this; > T vmin = min_value<max_value?min_value:max_value, vmax = min_value<max_value?max_value:min_value; > CImg<ulongT> hist = get_histogram(nb_levels,vmin,vmax); > unsigned long cumul = 0; > for (int pos = 0; pos<(int)((hist)._width); ++pos) { cumul+=hist[pos]; hist[pos] = cumul; } ># 18725 "./CImg.h" > ># 18725 "./CImg.h" >#pragma omp parallel for if (size()>=1048576) ># 18725 "./CImg.h" ># 18725 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > const int pos = (int)((*ptrd-vmin)*(nb_levels-1)/(vmax-vmin)); > if (pos>=0 && pos<(int)nb_levels) *ptrd = (T)(vmin + (vmax-vmin)*hist[pos]/size()); > } > return *this; > } > > > CImg<T>& equalize(const unsigned int nb_levels) { > if (!nb_levels || is_empty()) return *this; > T vmax = 0, vmin = min_max(vmax); > return equalize(nb_levels,vmin,vmax); > } > > > CImg<T> get_equalize(const unsigned int nblevels, const T val_min, const T val_max) const { > return (+*this).equalize(nblevels,val_min,val_max); > } > > > CImg<T> get_equalize(const unsigned int nblevels) const { > return (+*this).equalize(nblevels); > } ># 18766 "./CImg.h" > template<typename t> > CImg<T>& index(const CImg<t>& colormap, const float dithering=1, const bool map_indexes=false) { > return get_index(colormap,dithering,map_indexes).move_to(*this); > } > > > template<typename t> > CImg<typename CImg<t>::Tuint> > get_index(const CImg<t>& colormap, const float dithering=1, const bool map_indexes=true) const { > if (colormap._spectrum!=_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "index(): Instance and specified colormap (%u,%u,%u,%u,%p) " > "have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); > > typedef typename CImg<t>::Tuint tuint; > if (is_empty()) return CImg<tuint>(); > const unsigned long whd = (unsigned long)_width*_height*_depth, pwhd = (unsigned long)colormap._width*colormap._height*colormap._depth; > CImg<tuint> res(_width,_height,_depth,map_indexes?_spectrum:1); > tuint *ptrd = res._data; > if (dithering>0) { > const float ndithering = (dithering<0?0:dithering>1?1:dithering)/16; > Tfloat valm = 0, valM = (Tfloat)max_min(valm); > if (valm==valM && valm>=0 && valM<=255) { valm = 0; valM = 255; } > CImg<Tfloat> cache = get_crop(-1,0,0,0,_width,1,0,_spectrum-1); > Tfloat *cache_current = cache.data(1,0,0,0), *cache_next = cache.data(1,1,0,0); > const unsigned long cwhd = (unsigned long)cache._width*cache._height*cache._depth; > switch (_spectrum) { > case 1 : { > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > if (y<height()-2) { > Tfloat *ptrc0 = cache_next; const T *ptrs0 = data(0,y+1,z,0); > for (int x = 0; x<(int)((*this)._width); ++x) *(ptrc0++) = (Tfloat)*(ptrs0++); > } > Tfloat *ptrs0 = cache_current, *ptrsn0 = cache_next; > for (int x = 0; x<(int)((*this)._width); ++x) { > const Tfloat _val0 = (Tfloat)*ptrs0, val0 = _val0<valm?valm:_val0>valM?valM:_val0; > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp_end = ptrp0 + pwhd; ptrp0<ptrp_end; ) { > const Tfloat pval0 = (Tfloat)*(ptrp0++) - val0, dist = pval0*pval0; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > const Tfloat err0 = ((*(ptrs0++)=val0) - (Tfloat)*ptrmin0)*ndithering; > *ptrs0+=7*err0; *(ptrsn0-1)+=3*err0; *(ptrsn0++)+=5*err0; *ptrsn0+=err0; > if (map_indexes) *(ptrd++) = (tuint)*ptrmin0; else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > cimg::swap(cache_current,cache_next); > } > } break; > case 2 : { > tuint *ptrd1 = ptrd + whd; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > if (y<height()-2) { > Tfloat *ptrc0 = cache_next, *ptrc1 = ptrc0 + cwhd; > const T *ptrs0 = data(0,y+1,z,0), *ptrs1 = ptrs0 + whd; > for (int x = 0; x<(int)((*this)._width); ++x) { *(ptrc0++) = (Tfloat)*(ptrs0++); *(ptrc1++) = (Tfloat)*(ptrs1++); } > } > Tfloat > *ptrs0 = cache_current, *ptrs1 = ptrs0 + cwhd, > *ptrsn0 = cache_next, *ptrsn1 = ptrsn0 + cwhd; > for (int x = 0; x<(int)((*this)._width); ++x) { > const Tfloat > _val0 = (Tfloat)*ptrs0, val0 = _val0<valm?valm:_val0>valM?valM:_val0, > _val1 = (Tfloat)*ptrs1, val1 = _val1<valm?valm:_val1>valM?valM:_val1; > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp_end = ptrp1; ptrp0<ptrp_end; ) { > const Tfloat > pval0 = (Tfloat)*(ptrp0++) - val0, pval1 = (Tfloat)*(ptrp1++) - val1, > dist = pval0*pval0 + pval1*pval1; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > const t *const ptrmin1 = ptrmin0 + pwhd; > const Tfloat > err0 = ((*(ptrs0++)=val0) - (Tfloat)*ptrmin0)*ndithering, > err1 = ((*(ptrs1++)=val1) - (Tfloat)*ptrmin1)*ndithering; > *ptrs0+=7*err0; *ptrs1+=7*err1; > *(ptrsn0-1)+=3*err0; *(ptrsn1-1)+=3*err1; > *(ptrsn0++)+=5*err0; *(ptrsn1++)+=5*err1; > *ptrsn0+=err0; *ptrsn1+=err1; > if (map_indexes) { *(ptrd++) = (tuint)*ptrmin0; *(ptrd1++) = (tuint)*ptrmin1; } > else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > cimg::swap(cache_current,cache_next); > } > } break; > case 3 : { > tuint *ptrd1 = ptrd + whd, *ptrd2 = ptrd1 + whd; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > if (y<height()-2) { > Tfloat *ptrc0 = cache_next, *ptrc1 = ptrc0 + cwhd, *ptrc2 = ptrc1 + cwhd; > const T *ptrs0 = data(0,y+1,z,0), *ptrs1 = ptrs0 + whd, *ptrs2 = ptrs1 + whd; > for (int x = 0; x<(int)((*this)._width); ++x) { *(ptrc0++) = (Tfloat)*(ptrs0++); *(ptrc1++) = (Tfloat)*(ptrs1++); *(ptrc2++) = (Tfloat)*(ptrs2++); } > } > Tfloat > *ptrs0 = cache_current, *ptrs1 = ptrs0 + cwhd, *ptrs2 = ptrs1 + cwhd, > *ptrsn0 = cache_next, *ptrsn1 = ptrsn0 + cwhd, *ptrsn2 = ptrsn1 + cwhd; > for (int x = 0; x<(int)((*this)._width); ++x) { > const Tfloat > _val0 = (Tfloat)*ptrs0, val0 = _val0<valm?valm:_val0>valM?valM:_val0, > _val1 = (Tfloat)*ptrs1, val1 = _val1<valm?valm:_val1>valM?valM:_val1, > _val2 = (Tfloat)*ptrs2, val2 = _val2<valm?valm:_val2>valM?valM:_val2; > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd, *ptrp_end = ptrp1; ptrp0<ptrp_end; ) { > const Tfloat > pval0 = (Tfloat)*(ptrp0++) - val0, pval1 = (Tfloat)*(ptrp1++) - val1, pval2 = (Tfloat)*(ptrp2++) - val2, > dist = pval0*pval0 + pval1*pval1 + pval2*pval2; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > const t *const ptrmin1 = ptrmin0 + pwhd, *const ptrmin2 = ptrmin1 + pwhd; > const Tfloat > err0 = ((*(ptrs0++)=val0) - (Tfloat)*ptrmin0)*ndithering, > err1 = ((*(ptrs1++)=val1) - (Tfloat)*ptrmin1)*ndithering, > err2 = ((*(ptrs2++)=val2) - (Tfloat)*ptrmin2)*ndithering; > > *ptrs0+=7*err0; *ptrs1+=7*err1; *ptrs2+=7*err2; > *(ptrsn0-1)+=3*err0; *(ptrsn1-1)+=3*err1; *(ptrsn2-1)+=3*err2; > *(ptrsn0++)+=5*err0; *(ptrsn1++)+=5*err1; *(ptrsn2++)+=5*err2; > *ptrsn0+=err0; *ptrsn1+=err1; *ptrsn2+=err2; > > if (map_indexes) { *(ptrd++) = (tuint)*ptrmin0; *(ptrd1++) = (tuint)*ptrmin1; *(ptrd2++) = (tuint)*ptrmin2; } > else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > cimg::swap(cache_current,cache_next); > } > } break; > default : > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > if (y<height()-2) { > Tfloat *ptrc = cache_next; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *_ptrc = ptrc; const T *_ptrs = data(0,y+1,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) *(_ptrc++) = (Tfloat)*(_ptrs++); > ptrc+=cwhd; > } > } > Tfloat *ptrs = cache_current, *ptrsn = cache_next; > for (int x = 0; x<(int)((*this)._width); ++x) { > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin = colormap._data; > for (const t *ptrp = colormap._data, *ptrp_end = ptrp + pwhd; ptrp<ptrp_end; ++ptrp) { > Tfloat dist = 0; Tfloat *_ptrs = ptrs; const t *_ptrp = ptrp; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const Tfloat _val = *_ptrs, val = _val<valm?valm:_val>valM?valM:_val; > dist+=cimg::sqr((*_ptrs=val) - (Tfloat)*_ptrp); _ptrs+=cwhd; _ptrp+=pwhd; > } > if (dist<distmin) { ptrmin = ptrp; distmin = dist; } > } > const t *_ptrmin = ptrmin; Tfloat *_ptrs = ptrs++, *_ptrsn = (ptrsn++)-1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const Tfloat err = (*(_ptrs++) - (Tfloat)*_ptrmin)*ndithering; > *_ptrs+=7*err; *(_ptrsn++)+=3*err; *(_ptrsn++)+=5*err; *_ptrsn+=err; > _ptrmin+=pwhd; _ptrs+=cwhd-1; _ptrsn+=cwhd-2; > } > if (map_indexes) { > tuint *_ptrd = ptrd++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *_ptrd = (tuint)*ptrmin; _ptrd+=whd; ptrmin+=pwhd; } > } > else *(ptrd++) = (tuint)(ptrmin - colormap._data); > } > cimg::swap(cache_current,cache_next); > } > } > } else { > switch (_spectrum) { > case 1 : { ># 18932 "./CImg.h" > ># 18932 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=64 && _height*_depth>=16 && pwhd>=16) ># 18932 "./CImg.h" ># 18932 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > tuint *ptrd = res.data(0,y,z); > for (const T *ptrs0 = data(0,y,z), *ptrs_end = ptrs0 + _width; ptrs0<ptrs_end; ) { > const Tfloat val0 = (Tfloat)*(ptrs0++); > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp_end = ptrp0 + pwhd; ptrp0<ptrp_end; ) { > const Tfloat pval0 = (Tfloat)*(ptrp0++) - val0, dist = pval0*pval0; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > if (map_indexes) *(ptrd++) = (tuint)*ptrmin0; else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > } > } break; > case 2 : { ># 18949 "./CImg.h" > ># 18949 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=64 && _height*_depth>=16 && pwhd>=16) ># 18949 "./CImg.h" ># 18949 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > tuint *ptrd = res.data(0,y,z), *ptrd1 = ptrd + whd; > for (const T *ptrs0 = data(0,y,z), *ptrs1 = ptrs0 + whd, *ptrs_end = ptrs0 + _width; ptrs0<ptrs_end; ) { > const Tfloat val0 = (Tfloat)*(ptrs0++), val1 = (Tfloat)*(ptrs1++); > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp_end = ptrp1; ptrp0<ptrp_end; ) { > const Tfloat > pval0 = (Tfloat)*(ptrp0++) - val0, pval1 = (Tfloat)*(ptrp1++) - val1, > dist = pval0*pval0 + pval1*pval1; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > if (map_indexes) { *(ptrd++) = (tuint)*ptrmin0; *(ptrd1++) = (tuint)*(ptrmin0 + pwhd); } > else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > } > } break; > case 3 : { ># 18969 "./CImg.h" > ># 18969 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=64 && _height*_depth>=16 && pwhd>=16) ># 18969 "./CImg.h" ># 18969 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > tuint *ptrd = res.data(0,y,z), *ptrd1 = ptrd + whd, *ptrd2 = ptrd1 + whd; > for (const T *ptrs0 = data(0,y,z), *ptrs1 = ptrs0 + whd, *ptrs2 = ptrs1 + whd, *ptrs_end = ptrs0 + _width; ptrs0<ptrs_end; ) { > const Tfloat val0 = (Tfloat)*(ptrs0++), val1 = (Tfloat)*(ptrs1++), val2 = (Tfloat)*(ptrs2++); > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd, *ptrp_end = ptrp1; ptrp0<ptrp_end; ) { > const Tfloat > pval0 = (Tfloat)*(ptrp0++) - val0, pval1 = (Tfloat)*(ptrp1++) - val1, pval2 = (Tfloat)*(ptrp2++) - val2, > dist = pval0*pval0 + pval1*pval1 + pval2*pval2; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > if (map_indexes) { *(ptrd++) = (tuint)*ptrmin0; *(ptrd1++) = (tuint)*(ptrmin0 + pwhd); *(ptrd2++) = (tuint)*(ptrmin0 + 2*pwhd); } > else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > } > } break; > default : ># 18989 "./CImg.h" > ># 18989 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=64 && _height*_depth>=16 && pwhd>=16) ># 18989 "./CImg.h" ># 18989 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > tuint *ptrd = res.data(0,y,z); > for (const T *ptrs = data(0,y,z), *ptrs_end = ptrs + _width; ptrs<ptrs_end; ++ptrs) { > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin = colormap._data; > for (const t *ptrp = colormap._data, *ptrp_end = ptrp + pwhd; ptrp<ptrp_end; ++ptrp) { > Tfloat dist = 0; const T *_ptrs = ptrs; const t *_ptrp = ptrp; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { dist+=cimg::sqr((Tfloat)*_ptrs - (Tfloat)*_ptrp); _ptrs+=whd; _ptrp+=pwhd; } > if (dist<distmin) { ptrmin = ptrp; distmin = dist; } > } > if (map_indexes) { > tuint *_ptrd = ptrd++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *_ptrd = (tuint)*ptrmin; _ptrd+=whd; ptrmin+=pwhd; } > } > else *(ptrd++) = (tuint)(ptrmin - colormap._data); > } > } > } > } > return res; > } ># 19025 "./CImg.h" > template<typename t> > CImg<T>& map(const CImg<t>& colormap) { > return get_map(colormap).move_to(*this); > } > > > template<typename t> > CImg<t> get_map(const CImg<t>& colormap) const { > if (_spectrum!=1 && colormap._spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "map(): Instance and specified colormap (%u,%u,%u,%u,%p) " > "have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); > > const unsigned long whd = (unsigned long)_width*_height*_depth, pwhd = (unsigned long)colormap._width*colormap._height*colormap._depth; > CImg<t> res(_width,_height,_depth,colormap._spectrum==1?_spectrum:colormap._spectrum); > switch (colormap._spectrum) { > case 1 : { > const T *ptrs = _data; > for (t *ptrd = (res)._data, *_maxptrd = (res)._data + (res).size(); ptrd<_maxptrd; ++ptrd) { > const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind<pwhd?_ind:0; > *ptrd = colormap[ind]; > } > } break; > case 2 : { > const t *const ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd; > t *ptrd0 = res._data, *ptrd1 = ptrd0 + whd; > for (const T *ptrs = _data, *ptrs_end = ptrs + whd; ptrs<ptrs_end; ) { > const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind<pwhd?_ind:0; > *(ptrd0++) = ptrp0[ind]; *(ptrd1++) = ptrp1[ind]; > } > } break; > case 3 : { > const t *const ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd; > t *ptrd0 = res._data, *ptrd1 = ptrd0 + whd, *ptrd2 = ptrd1 + whd; > for (const T *ptrs = _data, *ptrs_end = ptrs + whd; ptrs<ptrs_end; ) { > const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind<pwhd?_ind:0; > *(ptrd0++) = ptrp0[ind]; *(ptrd1++) = ptrp1[ind]; *(ptrd2++) = ptrp2[ind]; > } > } break; > default : { > t *ptrd = res._data; > for (const T *ptrs = _data, *ptrs_end = ptrs + whd; ptrs<ptrs_end; ) { > const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind<pwhd?_ind:0; > const t *ptrp = colormap._data + ind; > t *_ptrd = ptrd++; for (int c = 0; c<(int)((res)._spectrum); ++c) { *_ptrd = *ptrp; _ptrd+=whd; ptrp+=pwhd; } > } > } > } > return res; > } ># 19089 "./CImg.h" > CImg<T>& label(const bool is_high_connectivity=false, const Tfloat tolerance=0) { > return get_label(is_high_connectivity,tolerance).move_to(*this); > } > > > CImg<unsigned long> get_label(const bool is_high_connectivity=false, > const Tfloat tolerance=0) const { > if (is_empty()) return CImg<unsigned long>(); > > > int dx[13], dy[13], dz[13], nb = 0; > dx[nb]=1; dy[nb] = 0; dz[nb++]=0; > dx[nb]=0; dy[nb] = 1; dz[nb++]=0; > if (is_high_connectivity) { > dx[nb]=1; dy[nb] = 1; dz[nb++]=0; > dx[nb]=1; dy[nb] = -1; dz[nb++]=0; > } > if (_depth>1) { > dx[nb]=0; dy[nb] = 0; dz[nb++]=1; > if (is_high_connectivity) { > dx[nb]=1; dy[nb] = 1; dz[nb++]=-1; > dx[nb]=1; dy[nb] = 0; dz[nb++]=-1; > dx[nb]=1; dy[nb] = -1; dz[nb++]=-1; > dx[nb]=0; dy[nb] = 1; dz[nb++]=-1; > > dx[nb]=0; dy[nb] = 1; dz[nb++]=1; > dx[nb]=1; dy[nb] = -1; dz[nb++]=1; > dx[nb]=1; dy[nb] = 0; dz[nb++]=1; > dx[nb]=1; dy[nb] = 1; dz[nb++]=1; > } > } > return _get_label(nb,dx,dy,dz,tolerance); > } > > > > > > > template<typename t> > CImg<T>& label(const CImg<t>& connectivity_mask, const Tfloat tolerance=0) { > return get_label(connectivity_mask,tolerance).move_to(*this); > } > > > template<typename t> > CImg<unsigned long> get_label(const CImg<t>& connectivity_mask, > const Tfloat tolerance=0) const { > int nb = 0; > for (t *ptr = (connectivity_mask)._data, *_maxptr = (connectivity_mask)._data + (connectivity_mask).size(); ptr<_maxptr; ++ptr) if (*ptr) ++nb; > CImg<intT> dx(nb,1,1,1,0), dy(nb,1,1,1,0), dz(nb,1,1,1,0); > nb = 0; > for (int z = 0; z<(int)((connectivity_mask)._depth); ++z) for (int y = 0; y<(int)((connectivity_mask)._height); ++y) for (int x = 0; x<(int)((connectivity_mask)._width); ++x) if ((x || y || z) && > connectivity_mask(x,y,z)) { > dx[nb] = x; dy[nb] = y; dz[nb++] = z; > } > return _get_label(nb,dx,dy,dz,tolerance); > } > > CImg<unsigned long> _get_label(const unsigned int nb, const int > *const dx, const int *const dy, const int *const dz, > const Tfloat tolerance) const { > CImg<unsigned long> res(_width,_height,_depth,_spectrum); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > CImg<unsigned long> _res = res.get_shared_channel(c); > > > unsigned long *ptr = _res.data(); > for (unsigned long p = 0, _maxp = (_res).size(); p<_maxp; ++p) *(ptr++) = p; > > > for (unsigned int n = 0; n<nb; ++n) { > const int _dx = dx[n], _dy = dy[n], _dz = dz[n]; > if (_dx || _dy || _dz) { > const int > x0 = _dx<0?-_dx:0, > x1 = _dx<0?_width:_width - _dx, > y0 = _dy<0?-_dy:0, > y1 = _dy<0?_height:_height - _dy, > z0 = _dz<0?-_dz:0, > z1 = _dz<0?_depth:_depth - _dz; > const long wh = (long)_width*_height, offset = (long)_dz*wh + (long)_dy*_width + _dx; > for (long z = z0, nz = z0 + _dz, pz = z0*wh; z<z1; ++z, ++nz, pz+=wh) { > for (long y = y0, ny = y0 + _dy, py = y0*_width + pz; y<y1; ++y, ++ny, py+=_width) { > for (long x = x0, nx = x0 + _dx, p = x0 + py; x<x1; ++x, ++nx, ++p) { > if ((Tfloat)cimg::abs((*this)(x,y,z,c,wh)-(*this)(nx,ny,nz,c,wh))<=tolerance) { > const long q = p + offset; > unsigned long x, y; > for (x = p<q?q:p, y = p<q?p:q; x!=y && _res[x]!=x; ) { x = _res[x]; if (x<y) cimg::swap(x,y); } > if (x!=y) _res[x] = y; > for (unsigned long _p = p; _p!=y; ) { const unsigned long h = _res[_p]; _res[_p] = y; _p = h; } > for (unsigned long _q = q; _q!=y; ) { const unsigned long h = _res[_q]; _res[_q] = y; _q = h; } > } > } > } > } > } > } > > > unsigned long counter = 0; > ptr = _res.data(); > for (unsigned long p = 0, _maxp = (_res).size(); p<_maxp; ++p) { *ptr = *ptr==p?counter++:_res[*ptr]; ++ptr; } > } > return res; > } > > > CImg<T>& _system_strescape() { > > > CImgList<T> list; > const T *ptrs = _data; > for (T *p = (*this)._data, *_maxp = (*this)._data + (*this).size(); p<_maxp; ++p) switch ((int)*p) { > case '\\' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\\\\",(unsigned int)std::strlen("\\\\"),1,1,1,false).move_to(list); ptrs = p+1; break; > case '\"' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\\\"",(unsigned int)std::strlen("\\\""),1,1,1,false).move_to(list); ptrs = p+1; break; > case '!' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\"\\!\"",(unsigned int)std::strlen("\"\\!\""),1,1,1,false).move_to(list); ptrs = p+1; break; > case '`' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\\`",(unsigned int)std::strlen("\\`"),1,1,1,false).move_to(list); ptrs = p+1; break; > case '$' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\\$",(unsigned int)std::strlen("\\$"),1,1,1,false).move_to(list); ptrs = p+1; break; > } > if (ptrs<end()) CImg<T>(ptrs,(unsigned int)(end()-ptrs),1,1,1,false).move_to(list); > return (list>'x').move_to(*this); > } ># 19225 "./CImg.h" > static const CImg<Tuchar>& default_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,256,1,3); > for (unsigned int index = 0, r = 16; r<256; r+=32) > for (unsigned int g = 16; g<256; g+=32) > for (unsigned int b = 32; b<256; b+=64) { > colormap(0,index,0) = (Tuchar)r; > colormap(0,index,1) = (Tuchar)g; > colormap(0,index++,2) = (Tuchar)b; > } > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& HSV_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > CImg<Tint> tmp(1,256,1,3,1); > tmp.get_shared_channel(0).sequence(0,359); > colormap = tmp.HSVtoRGB(); > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& lines_LUT256() { > static const unsigned char pal[] = { > 217,62,88,75,1,237,240,12,56,160,165,116,1,1,204,2,15,248,148,185,133,141,46,246,222,116,16,5,207,226, > 17,114,247,1,214,53,238,0,95,55,233,235,109,0,17,54,33,0,90,30,3,0,94,27,19,0,68,212,166,130,0,15,7,119, > 238,2,246,198,0,3,16,10,13,2,25,28,12,6,2,99,18,141,30,4,3,140,12,4,30,233,7,10,0,136,35,160,168,184,20, > 233,0,1,242,83,90,56,180,44,41,0,6,19,207,5,31,214,4,35,153,180,75,21,76,16,202,218,22,17,2,136,71,74, > 81,251,244,148,222,17,0,234,24,0,200,16,239,15,225,102,230,186,58,230,110,12,0,7,129,249,22,241,37,219, > 1,3,254,210,3,212,113,131,197,162,123,252,90,96,209,60,0,17,0,180,249,12,112,165,43,27,229,77,40,195,12, > 87,1,210,148,47,80,5,9,1,137,2,40,57,205,244,40,8,252,98,0,40,43,206,31,187,0,180,1,69,70,227,131,108,0, > 223,94,228,35,248,243,4,16,0,34,24,2,9,35,73,91,12,199,51,1,249,12,103,131,20,224,2,70,32, > 233,1,165,3,8,154,246,233,196,5,0,6,183,227,247,195,208,36,0,0,226,160,210,198,69,153,210,1,23,8,192,2,4, > 137,1,0,52,2,249,241,129,0,0,234,7,238,71,7,32,15,157,157,252,158,2,250,6,13,30,11,162,0,199,21,11,27,224, > 4,157,20,181,111,187,218,3,0,11,158,230,196,34,223,22,248,135,254,210,157,219,0,117,239,3,255,4,227,5,247, > 11,4,3,188,111,11,105,195,2,0,14,1,21,219,192,0,183,191,113,241,1,12,17,248,0,48,7,19,1,254,212,0,239,246, > 0,23,0,250,165,194,194,17,3,253,0,24,6,0,141,167,221,24,212,2,235,243,0,0,205,1,251,133,204,28,4,6,1,10, > 141,21,74,12,236,254,228,19,1,0,214,1,186,13,13,6,13,16,27,209,6,216,11,207,251,59,32,9,155,23,19,235,143, > 116,6,213,6,75,159,23,6,0,228,4,10,245,249,1,7,44,234,4,102,174,0,19,239,103,16,15,18,8,214,22,4,47,244, > 255,8,0,251,173,1,212,252,250,251,252,6,0,29,29,222,233,246,5,149,0,182,180,13,151,0,203,183,0,35,149,0, > 235,246,254,78,9,17,203,73,11,195,0,3,5,44,0,0,237,5,106,6,130,16,214,20,168,247,168,4,207,11,5,1,232,251, > 129,210,116,231,217,223,214,27,45,38,4,177,186,249,7,215,172,16,214,27,249,230,236,2,34,216,217,0,175,30, > 243,225,244,182,20,212,2,226,21,255,20,0,2,13,62,13,191,14,76,64,20,121,4,118,0,216,1,147,0,2,210,1,215, > 95,210,236,225,184,46,0,248,24,11,1,9,141,250,243,9,221,233,160,11,147,2,55,8,23,12,253,9,0,54,0,231,6,3, > 141,8,2,246,9,180,5,11,8,227,8,43,110,242,1,130,5,97,36,10,6,219,86,133,11,108,6,1,5,244,67,19,28,0,174, > 154,16,127,149,252,188,196,196,228,244,9,249,0,0,0,37,170,32,250,0,73,255,23,3,224,234,38,195,198,0,255,87, > 33,221,174,31,3,0,189,228,6,153,14,144,14,108,197,0,9,206,245,254,3,16,253,178,248,0,95,125,8,0,3,168,21, > 23,168,19,50,240,244,185,0,1,144,10,168,31,82,1,13 }; > static const CImg<Tuchar> colormap(pal,1,256,1,3,false); > return colormap; > } > > > > > > > static const CImg<Tuchar>& hot_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,4,1,3,0); > colormap[1] = colormap[2] = colormap[3] = colormap[6] = colormap[7] = colormap[11] = 255; > colormap.resize(1,256,1,3,3); > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& cool_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) colormap.assign(1,2,1,3).fill(0,255,255,0,255,255).resize(1,256,1,3,3); > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& jet_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,4,1,3,0); > colormap[2] = colormap[3] = colormap[5] = colormap[6] = colormap[8] = colormap[9] = 255; > colormap.resize(1,256,1,3,3); > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& flag_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,4,1,3,0); > colormap[0] = colormap[1] = colormap[5] = colormap[9] = colormap[10] = 255; > colormap.resize(1,256,1,3,0,2); > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& cube_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,8,1,3,0); > colormap[1] = colormap[3] = colormap[5] = colormap[7] = > colormap[10] = colormap[11] = colormap[12] = colormap[13] = > colormap[20] = colormap[21] = colormap[22] = colormap[23] = 255; > colormap.resize(1,256,1,3,3); > } > cimg::mutex(8,0); > return colormap; > } > > > CImg<T>& sRGBtoRGB() { > for (T *ptr = (*this)._data, *_maxptr = (*this)._data + (*this).size(); ptr<_maxptr; ++ptr) { > const Tfloat > sval = (Tfloat)*ptr, > nsval = (sval<0?0:sval>255?255:sval)/255, > val = (Tfloat)(nsval<=0.04045f?nsval/12.92f:std::pow((nsval+0.055f)/(1.055f),2.4f)); > *ptr = (T)(val*255); > } > return *this; > } > > > CImg<Tfloat> get_sRGBtoRGB() const { > return CImg<Tfloat>(*this,false).sRGBtoRGB(); > } > > > CImg<T>& RGBtosRGB() { > for (T *ptr = (*this)._data, *_maxptr = (*this)._data + (*this).size(); ptr<_maxptr; ++ptr) { > const Tfloat > val = (Tfloat)*ptr, > nval = (val<0?0:val>255?255:val)/255, > sval = (Tfloat)(nval<=0.0031308f?nval*12.92f:1.055f*std::pow(nval,0.416667f)-0.055f); > *ptr = (T)(sval*255); > } > return *this; > } > > > CImg<Tfloat> get_RGBtosRGB() const { > return CImg<Tfloat>(*this,false).RGBtosRGB(); > } > > > CImg<T>& RGBtoHSV() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoHSV(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > nR = (R<0?0:(R>255?255:R))/255, > nG = (G<0?0:(G>255?255:G))/255, > nB = (B<0?0:(B>255?255:B))/255, > m = cimg::min(nR,nG,nB), > M = cimg::max(nR,nG,nB); > Tfloat H = 0, S = 0; > if (M!=m) { > const Tfloat > f = (nR==m)?(nG-nB):((nG==m)?(nB-nR):(nR-nG)), > i = (Tfloat)((nR==m)?3:((nG==m)?5:1)); > H = (i-f/(M-m)); > if (H>=6) H-=6; > H*=60; > S = (M-m)/M; > } > *(p1++) = (T)H; > *(p2++) = (T)S; > *(p3++) = (T)M; > } > return *this; > } > > > CImg<Tfloat> get_RGBtoHSV() const { > return CImg<Tfloat>(*this,false).RGBtoHSV(); > } > > > CImg<T>& HSVtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "HSVtoRGB(): Instance is not a HSV image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > Tfloat > H = (Tfloat)*p1, > S = (Tfloat)*p2, > V = (Tfloat)*p3, > R = 0, G = 0, B = 0; > if (H==0 && S==0) R = G = B = V; > else { > H/=60; > const int i = (int)std::floor(H); > const Tfloat > f = (i&1)?(H - i):(1 - H + i), > m = V*(1 - S), > n = V*(1 - S*f); > switch (i) { > case 6 : > case 0 : R = V; G = n; B = m; break; > case 1 : R = n; G = V; B = m; break; > case 2 : R = m; G = V; B = n; break; > case 3 : R = m; G = n; B = V; break; > case 4 : R = n; G = m; B = V; break; > case 5 : R = V; G = m; B = n; break; > } > } > R*=255; G*=255; B*=255; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_HSVtoRGB() const { > return CImg<Tuchar>(*this,false).HSVtoRGB(); > } > > > CImg<T>& RGBtoHSL() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoHSL(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > nR = (R<0?0:(R>255?255:R))/255, > nG = (G<0?0:(G>255?255:G))/255, > nB = (B<0?0:(B>255?255:B))/255, > m = cimg::min(nR,nG,nB), > M = cimg::max(nR,nG,nB), > L = (m + M)/2; > Tfloat H = 0, S = 0; > if (M==m) H = S = 0; > else { > const Tfloat > f = (nR==m)?(nG-nB):((nG==m)?(nB-nR):(nR-nG)), > i = (nR==m)?3.0f:((nG==m)?5.0f:1.0f); > H = (i-f/(M-m)); > if (H>=6) H-=6; > H*=60; > S = (2*L<=1)?((M-m)/(M+m)):((M-m)/(2-M-m)); > } > *(p1++) = (T)H; > *(p2++) = (T)S; > *(p3++) = (T)L; > } > return *this; > } > > > CImg<Tfloat> get_RGBtoHSL() const { > return CImg< Tfloat>(*this,false).RGBtoHSL(); > } > > > CImg<T>& HSLtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "HSLtoRGB(): Instance is not a HSL image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > H = (Tfloat)*p1, > S = (Tfloat)*p2, > L = (Tfloat)*p3, > q = 2*L<1?L*(1+S):(L+S-L*S), > p = 2*L-q, > h = H/360, > tr = h + 1.0f/3, > tg = h, > tb = h - 1.0f/3, > ntr = tr<0?tr+1:(tr>1?tr-1:tr), > ntg = tg<0?tg+1:(tg>1?tg-1:tg), > ntb = tb<0?tb+1:(tb>1?tb-1:tb), > R = 255*(6*ntr<1?p+(q-p)*6*ntr:(2*ntr<1?q:(3*ntr<2?p+(q-p)*6*(2.0f/3-ntr):p))), > G = 255*(6*ntg<1?p+(q-p)*6*ntg:(2*ntg<1?q:(3*ntg<2?p+(q-p)*6*(2.0f/3-ntg):p))), > B = 255*(6*ntb<1?p+(q-p)*6*ntb:(2*ntb<1?q:(3*ntb<2?p+(q-p)*6*(2.0f/3-ntb):p))); > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_HSLtoRGB() const { > return CImg<Tuchar>(*this,false).HSLtoRGB(); > } > > > CImg<T>& RGBtoHSI() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoHSI(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > nR = (R<0?0:(R>255?255:R))/255, > nG = (G<0?0:(G>255?255:G))/255, > nB = (B<0?0:(B>255?255:B))/255, > m = cimg::min(nR,nG,nB), > theta = (Tfloat)(std::acos(0.5f*((nR-nG)+(nR-nB))/std::sqrt(std::pow(nR-nG,2)+(nR-nB)*(nG-nB)))*180/cimg::PI), > sum = nR + nG + nB; > Tfloat H = 0, S = 0, I = 0; > if (theta>0) H = (nB<=nG)?theta:360-theta; > if (sum>0) S = 1 - 3/sum*m; > I = sum/3; > *(p1++) = (T)H; > *(p2++) = (T)S; > *(p3++) = (T)I; > } > return *this; > } > > > CImg<Tfloat> get_RGBtoHSI() const { > return CImg<Tfloat>(*this,false).RGBtoHSI(); > } > > > CImg<T>& HSItoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "HSItoRGB(): Instance is not a HSI image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > Tfloat > H = (Tfloat)*p1, > S = (Tfloat)*p2, > I = (Tfloat)*p3, > a = I*(1-S), > R = 0, G = 0, B = 0; > if (H<120) { > B = a; > R = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); > G = 3*I-(R+B); > } else if (H<240) { > H-=120; > R = a; > G = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); > B = 3*I-(R+G); > } else { > H-=240; > G = a; > B = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); > R = 3*I-(G+B); > } > R*=255; G*=255; B*=255; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tfloat> get_HSItoRGB() const { > return CImg< Tuchar>(*this,false).HSItoRGB(); > } > > > CImg<T>& RGBtoYCbCr() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoYCbCr(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > Y = (66*R + 129*G + 25*B + 128)/256 + 16, > Cb = (-38*R - 74*G + 112*B + 128)/256 + 128, > Cr = (112*R - 94*G - 18*B + 128)/256 + 128; > *(p1++) = (T)(Y<0?0:(Y>255?255:Y)); > *(p2++) = (T)(Cb<0?0:(Cb>255?255:Cb)); > *(p3++) = (T)(Cr<0?0:(Cr>255?255:Cr)); > } > return *this; > } > > > CImg<Tuchar> get_RGBtoYCbCr() const { > return CImg<Tuchar>(*this,false).RGBtoYCbCr(); > } > > > CImg<T>& YCbCrtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "YCbCrtoRGB(): Instance is not a YCbCr image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > Y = (Tfloat)*p1 - 16, > Cb = (Tfloat)*p2 - 128, > Cr = (Tfloat)*p3 - 128, > R = (298*Y + 409*Cr + 128)/256, > G = (298*Y - 100*Cb - 208*Cr + 128)/256, > B = (298*Y + 516*Cb + 128)/256; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_YCbCrtoRGB() const { > return CImg<Tuchar>(*this,false).YCbCrtoRGB(); > } > > > CImg<T>& RGBtoYUV() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoYUV(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1/255, > G = (Tfloat)*p2/255, > B = (Tfloat)*p3/255, > Y = 0.299f*R + 0.587f*G + 0.114f*B; > *(p1++) = (T)Y; > *(p2++) = (T)(0.492f*(B-Y)); > *(p3++) = (T)(0.877*(R-Y)); > } > return *this; > } > > > CImg<Tfloat> get_RGBtoYUV() const { > return CImg<Tfloat>(*this,false).RGBtoYUV(); > } > > > CImg<T>& YUVtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "YUVtoRGB(): Instance is not a YUV image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > Y = (Tfloat)*p1, > U = (Tfloat)*p2, > V = (Tfloat)*p3, > R = (Y + 1.140f*V)*255, > G = (Y - 0.395f*U - 0.581f*V)*255, > B = (Y + 2.032f*U)*255; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_YUVtoRGB() const { > return CImg< Tuchar>(*this,false).YUVtoRGB(); > } > > > CImg<T>& RGBtoCMY() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoCMY(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > C = 255 - R, > M = 255 - G, > Y = 255 - B; > *(p1++) = (T)(C<0?0:(C>255?255:C)); > *(p2++) = (T)(M<0?0:(M>255?255:M)); > *(p3++) = (T)(Y<0?0:(Y>255?255:Y)); > } > return *this; > } > > > CImg<Tuchar> get_RGBtoCMY() const { > return CImg<Tfloat>(*this,false).RGBtoCMY(); > } > > > CImg<T>& CMYtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CMYtoRGB(): Instance is not a CMY image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > C = (Tfloat)*p1, > M = (Tfloat)*p2, > Y = (Tfloat)*p3, > R = 255 - C, > G = 255 - M, > B = 255 - Y; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_CMYtoRGB() const { > return CImg<Tuchar>(*this,false).CMYtoRGB(); > } > > > CImg<T>& CMYtoCMYK() { > return get_CMYtoCMYK().move_to(*this); > } > > > CImg<Tuchar> get_CMYtoCMYK() const { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CMYtoCMYK(): Instance is not a CMY image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<Tfloat> res(_width,_height,_depth,4); > const T *ps1 = data(0,0,0,0), *ps2 = data(0,0,0,1), *ps3 = data(0,0,0,2); > Tfloat *pd1 = res.data(0,0,0,0), *pd2 = res.data(0,0,0,1), *pd3 = res.data(0,0,0,2), *pd4 = res.data(0,0,0,3); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > Tfloat > C = (Tfloat)*(ps1++), > M = (Tfloat)*(ps2++), > Y = (Tfloat)*(ps3++), > K = cimg::min(C,M,Y); > if (K>=255) C = M = Y = 0; > else { const Tfloat K1 = 255 - K; C = 255*(C - K)/K1; M = 255*(M - K)/K1; Y = 255*(Y - K)/K1; } > *(pd1++) = (Tfloat)(C<0?0:(C>255?255:C)); > *(pd2++) = (Tfloat)(M<0?0:(M>255?255:M)); > *(pd3++) = (Tfloat)(Y<0?0:(Y>255?255:Y)); > *(pd4++) = (Tfloat)(K<0?0:(K>255?255:K)); > } > return res; > } > > > CImg<T>& CMYKtoCMY() { > return get_CMYKtoCMY().move_to(*this); > } > > > CImg<Tfloat> get_CMYKtoCMY() const { > if (_spectrum!=4) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CMYKtoCMY(): Instance is not a CMYK image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<Tfloat> res(_width,_height,_depth,3); > const T *ps1 = data(0,0,0,0), *ps2 = data(0,0,0,1), *ps3 = data(0,0,0,2), *ps4 = data(0,0,0,3); > Tfloat *pd1 = res.data(0,0,0,0), *pd2 = res.data(0,0,0,1), *pd3 = res.data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > C = (Tfloat)*(ps1++), > M = (Tfloat)*(ps2++), > Y = (Tfloat)*(ps3++), > K = (Tfloat)*(ps4++), > K1 = 1 - K/255, > nC = C*K1 + K, > nM = M*K1 + K, > nY = Y*K1 + K; > *(pd1++) = (Tfloat)(nC<0?0:(nC>255?255:nC)); > *(pd2++) = (Tfloat)(nM<0?0:(nM>255?255:nM)); > *(pd3++) = (Tfloat)(nY<0?0:(nY>255?255:nY)); > } > return res; > } > > > > > > CImg<T>& RGBtoXYZ() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoXYZ(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1/255, > G = (Tfloat)*p2/255, > B = (Tfloat)*p3/255; > *(p1++) = (T)(0.412453f*R + 0.357580f*G + 0.180423f*B); > *(p2++) = (T)(0.212671f*R + 0.715160f*G + 0.072169f*B); > *(p3++) = (T)(0.019334f*R + 0.119193f*G + 0.950227f*B); > } > return *this; > } > > > CImg<Tfloat> get_RGBtoXYZ() const { > return CImg<Tfloat>(*this,false).RGBtoXYZ(); > } > > > CImg<T>& XYZtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "XYZtoRGB(): Instance is not a XYZ image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > X = (Tfloat)*p1*255, > Y = (Tfloat)*p2*255, > Z = (Tfloat)*p3*255, > R = 3.240479f*X - 1.537150f*Y - 0.498535f*Z, > G = -0.969256f*X + 1.875992f*Y + 0.041556f*Z, > B = 0.055648f*X - 0.204043f*Y + 1.057311f*Z; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_XYZtoRGB() const { > return CImg<Tuchar>(*this,false).XYZtoRGB(); > } > > > CImg<T>& XYZtoLab() { > > > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "XYZtoLab(): Instance is not a XYZ image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const Tfloat > Xn = (Tfloat)(0.412453f + 0.357580f + 0.180423f), > Yn = (Tfloat)(0.212671f + 0.715160f + 0.072169f), > Zn = (Tfloat)(0.019334f + 0.119193f + 0.950227f); > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > X = (Tfloat)*p1, > Y = (Tfloat)*p2, > Z = (Tfloat)*p3, > XXn = X/Xn, YYn = Y/Yn, ZZn = Z/Zn, > fX = (Tfloat)((XXn)>=0.008856f?(std::pow(XXn,(Tfloat)1/3)):(7.787f*(XXn)+16.0f/116)), > fY = (Tfloat)((YYn)>=0.008856f?(std::pow(YYn,(Tfloat)1/3)):(7.787f*(YYn)+16.0f/116)), > fZ = (Tfloat)((ZZn)>=0.008856f?(std::pow(ZZn,(Tfloat)1/3)):(7.787f*(ZZn)+16.0f/116)); > *(p1++) = (T)cimg::max(0.0f,116*fY - 16); > *(p2++) = (T)(500*(fX - fY)); > *(p3++) = (T)(200*(fY - fZ)); > } > return *this; > } > > > CImg<Tfloat> get_XYZtoLab() const { > return CImg<Tfloat>(*this,false).XYZtoLab(); > } > > > CImg<T>& LabtoXYZ() { > > > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "LabtoXYZ(): Instance is not a Lab image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const Tfloat > Xn = (Tfloat)(0.412453f + 0.357580f + 0.180423f), > Yn = (Tfloat)(0.212671f + 0.715160f + 0.072169f), > Zn = (Tfloat)(0.019334f + 0.119193f + 0.950227f); > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > L = (Tfloat)*p1, > a = (Tfloat)*p2, > b = (Tfloat)*p3, > cY = (L + 16)/116, > Y = (Tfloat)(Yn*((cY)>=0.206893f?((cY)*(cY)*(cY)):(((cY)-16.0f/116)/7.787f))), > pY = (Tfloat)std::pow(Y/Yn,(Tfloat)1/3), > cX = a/500 + pY, > X = Xn*cX*cX*cX, > cZ = pY - b/200, > Z = Zn*cZ*cZ*cZ; > *(p1++) = (T)(X); > *(p2++) = (T)(Y); > *(p3++) = (T)(Z); > } > return *this; > } > > > CImg<Tfloat> get_LabtoXYZ() const { > return CImg<Tfloat>(*this,false).LabtoXYZ(); > } > > > CImg<T>& XYZtoxyY() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "XYZtoxyY(): Instance is not a XYZ image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > X = (Tfloat)*p1, > Y = (Tfloat)*p2, > Z = (Tfloat)*p3, > sum = (X+Y+Z), > nsum = sum>0?sum:1; > *(p1++) = (T)(X/nsum); > *(p2++) = (T)(Y/nsum); > *(p3++) = (T)Y; > } > return *this; > } > > > CImg<Tfloat> get_XYZtoxyY() const { > return CImg<Tfloat>(*this,false).XYZtoxyY(); > } > > > CImg<T>& xyYtoXYZ() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "xyYtoXYZ(): Instance is not a xyY image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > px = (Tfloat)*p1, > py = (Tfloat)*p2, > Y = (Tfloat)*p3, > ny = py>0?py:1; > *(p1++) = (T)(px*Y/ny); > *(p2++) = (T)Y; > *(p3++) = (T)((1-px-py)*Y/ny); > } > return *this; > } > > > CImg<Tfloat> get_xyYtoXYZ() const { > return CImg<Tfloat>(*this,false).xyYtoXYZ(); > } > > > CImg<T>& RGBtoLab() { > return RGBtoXYZ().XYZtoLab(); > } > > > CImg<Tfloat> get_RGBtoLab() const { > return CImg<Tfloat>(*this,false).RGBtoLab(); > } > > > CImg<T>& LabtoRGB() { > return LabtoXYZ().XYZtoRGB(); > } > > > CImg<Tuchar> get_LabtoRGB() const { > return CImg<Tuchar>(*this,false).LabtoRGB(); > } > > > CImg<T>& RGBtoxyY() { > return RGBtoXYZ().XYZtoxyY(); > } > > > CImg<Tfloat> get_RGBtoxyY() const { > return CImg<Tfloat>(*this,false).RGBtoxyY(); > } > > > CImg<T>& xyYtoRGB() { > return xyYtoXYZ().XYZtoRGB(); > } > > > CImg<Tuchar> get_xyYtoRGB() const { > return CImg<Tuchar>(*this,false).xyYtoRGB(); > } > > > CImg<T>& RGBtoCMYK() { > return RGBtoCMY().CMYtoCMYK(); > } > > > CImg<Tfloat> get_RGBtoCMYK() const { > return CImg<Tfloat>(*this,false).RGBtoCMYK(); > } > > > CImg<T>& CMYKtoRGB() { > return CMYKtoCMY().CMYtoRGB(); > } > > > CImg<Tuchar> get_CMYKtoRGB() const { > return CImg<Tuchar>(*this,false).CMYKtoRGB(); > } > > > > > > CImg<T>& RGBtoBayer() { > return get_RGBtoBayer().move_to(*this); > } > > > CImg<T> get_RGBtoBayer() const { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoBayer(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<T> res(_width,_height,_depth,1); > const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); > T *ptrd = res._data; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > if (y%2) { > if (x%2) *(ptrd++) = *ptr_b; > else *(ptrd++) = *ptr_g; > } else { > if (x%2) *(ptrd++) = *ptr_g; > else *(ptrd++) = *ptr_r; > } > ++ptr_r; ++ptr_g; ++ptr_b; > } > return res; > } > > > CImg<T>& BayertoRGB(const unsigned int interpolation_type=3) { > return get_BayertoRGB(interpolation_type).move_to(*this); > } > > > CImg<Tuchar> get_BayertoRGB(const unsigned int interpolation_type=3) const { > if (_spectrum!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "BayertoRGB(): Instance is not a Bayer image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<Tuchar> res(_width,_height,_depth,3); > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > Tuchar *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2); > switch (interpolation_type) { > case 3 : { > T R[9]; T& Rpp = R[0]; T& Rcp = R[1]; T& Rnp = R[2]; T& Rpc = R[3]; T& Rcc = R[4]; T& Rnc = R[5]; T& Rpn = R[6]; T& Rcn = R[7]; T& Rnn = R[8]; Rpp = Rcp = Rnp = Rpc = Rcc = Rnc = Rpn = Rcn = Rnn = 0; > T G[9]; T& Gpp = G[0]; T& Gcp = G[1]; T& Gnp = G[2]; T& Gpc = G[3]; T& Gcc = G[4]; T& Gnc = G[5]; T& Gpn = G[6]; T& Gcn = G[7]; T& Gnn = G[8]; Gpp = Gcp = Gnp = Gpc = Gcc = Gnc = Gpn = Gcn = Gnn = 0; > T B[9]; T& Bpp = B[0]; T& Bcp = B[1]; T& Bnp = B[2]; T& Bpc = B[3]; T& Bcc = B[4]; T& Bnc = B[5]; T& Bpn = B[6]; T& Bcn = B[7]; T& Bnn = B[8]; Bpp = Bcp = Bnp = Bpc = Bcc = Bnc = Bpn = Bcn = Bnn = 0; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > I[0] = (T)(*this)(_p1x,_p1y,z,0), I[1] = (T)(*this)(x,_p1y,z,0), I[2] = (T)(*this)(_n1x,_p1y,z,0), I[3] = (T)(*this)(_p1x,y,z,0), I[4] = (T)(*this)(x,y,z,0), I[5] = (T)(*this)(_n1x,y,z,0), I[6] = (T)(*this)(_p1x,_n1y,z,0), I[7] = (T)(*this)(x,_n1y,z,0), I[8] = (T)(*this)(_n1x,_n1y,z,0); > if (y%2) { > if (x%2) { > const Tfloat alpha = cimg::sqr((Tfloat)Inc - Ipc), beta = cimg::sqr((Tfloat)Icn - Icp), cx = 1/(1+alpha), cy = 1/(1+beta); > *ptr_g = (Tuchar)((cx*(Inc+Ipc) + cy*(Icn+Icp))/(2*(cx+cy))); > } else *ptr_g = (Tuchar)Icc; > } else { > if (x%2) *ptr_g = (Tuchar)Icc; > else { > const Tfloat alpha = cimg::sqr((Tfloat)Inc - Ipc), beta = cimg::sqr((Tfloat)Icn - Icp), cx = 1/(1+alpha), cy = 1/(1+beta); > *ptr_g = (Tuchar)((cx*(Inc+Ipc) + cy*(Icn+Icp))/(2*(cx+cy))); > } > } > ++ptr_g; > } > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > I[0] = (T)(*this)(_p1x,_p1y,z,0), I[1] = (T)(*this)(x,_p1y,z,0), I[2] = (T)(*this)(_n1x,_p1y,z,0), I[3] = (T)(*this)(_p1x,y,z,0), I[4] = (T)(*this)(x,y,z,0), I[5] = (T)(*this)(_n1x,y,z,0), I[6] = (T)(*this)(_p1x,_n1y,z,0), I[7] = (T)(*this)(x,_n1y,z,0), I[8] = (T)(*this)(_n1x,_n1y,z,0); > G[0] = (T)(res)(_p1x,_p1y,z,1), G[1] = (T)(res)(x,_p1y,z,1), G[2] = (T)(res)(_n1x,_p1y,z,1), G[3] = (T)(res)(_p1x,y,z,1), G[4] = (T)(res)(x,y,z,1), G[5] = (T)(res)(_n1x,y,z,1), G[6] = (T)(res)(_p1x,_n1y,z,1), G[7] = (T)(res)(x,_n1y,z,1), G[8] = (T)(res)(_n1x,_n1y,z,1); > if (y%2) { > if (x%2) *ptr_b = (Tuchar)Icc; > else { *ptr_r = (Tuchar)((Icn+Icp)/2); *ptr_b = (Tuchar)((Inc+Ipc)/2); } > } else { > if (x%2) { *ptr_r = (Tuchar)((Inc+Ipc)/2); *ptr_b = (Tuchar)((Icn+Icp)/2); } > else *ptr_r = (Tuchar)Icc; > } > ++ptr_r; ++ptr_b; > } > ptr_r = res.data(0,0,0,0); > ptr_g = res.data(0,0,0,1); > ptr_b = res.data(0,0,0,2); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > R[0] = (T)(res)(_p1x,_p1y,z,0), R[1] = (T)(res)(x,_p1y,z,0), R[2] = (T)(res)(_n1x,_p1y,z,0), R[3] = (T)(res)(_p1x,y,z,0), R[4] = (T)(res)(x,y,z,0), R[5] = (T)(res)(_n1x,y,z,0), R[6] = (T)(res)(_p1x,_n1y,z,0), R[7] = (T)(res)(x,_n1y,z,0), R[8] = (T)(res)(_n1x,_n1y,z,0); > G[0] = (T)(res)(_p1x,_p1y,z,1), G[1] = (T)(res)(x,_p1y,z,1), G[2] = (T)(res)(_n1x,_p1y,z,1), G[3] = (T)(res)(_p1x,y,z,1), G[4] = (T)(res)(x,y,z,1), G[5] = (T)(res)(_n1x,y,z,1), G[6] = (T)(res)(_p1x,_n1y,z,1), G[7] = (T)(res)(x,_n1y,z,1), G[8] = (T)(res)(_n1x,_n1y,z,1); > B[0] = (T)(res)(_p1x,_p1y,z,2), B[1] = (T)(res)(x,_p1y,z,2), B[2] = (T)(res)(_n1x,_p1y,z,2), B[3] = (T)(res)(_p1x,y,z,2), B[4] = (T)(res)(x,y,z,2), B[5] = (T)(res)(_n1x,y,z,2), B[6] = (T)(res)(_p1x,_n1y,z,2), B[7] = (T)(res)(x,_n1y,z,2), B[8] = (T)(res)(_n1x,_n1y,z,2); > if (y%2) { > if (x%2) { > const float alpha = (float)cimg::sqr(Rnc-Rpc), beta = (float)cimg::sqr(Rcn-Rcp), cx = 1/(1+alpha), cy = 1/(1+beta); > *ptr_r = (Tuchar)((cx*(Rnc+Rpc) + cy*(Rcn+Rcp))/(2*(cx+cy))); > } > } else { > if (!(x%2)) { > const float alpha = (float)cimg::sqr(Bnc-Bpc), beta = (float)cimg::sqr(Bcn-Bcp), cx = 1/(1+alpha), cy = 1/(1+beta); > *ptr_b = (Tuchar)((cx*(Bnc+Bpc) + cy*(Bcn+Bcp))/(2*(cx+cy))); > } > } > ++ptr_r; ++ptr_g; ++ptr_b; > } > } break; > case 2 : { > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > I[0] = (T)(*this)(_p1x,_p1y,z,0), I[1] = (T)(*this)(x,_p1y,z,0), I[2] = (T)(*this)(_n1x,_p1y,z,0), I[3] = (T)(*this)(_p1x,y,z,0), I[4] = (T)(*this)(x,y,z,0), I[5] = (T)(*this)(_n1x,y,z,0), I[6] = (T)(*this)(_p1x,_n1y,z,0), I[7] = (T)(*this)(x,_n1y,z,0), I[8] = (T)(*this)(_n1x,_n1y,z,0); > if (y%2) { > if (x%2) { *ptr_r = (Tuchar)((Ipp+Inn+Ipn+Inp)/4); *ptr_g = (Tuchar)((Inc+Ipc+Icn+Icp)/4); *ptr_b = (Tuchar)Icc; } > else { *ptr_r = (Tuchar)((Icp+Icn)/2); *ptr_g = (Tuchar)Icc; *ptr_b = (Tuchar)((Inc+Ipc)/2); } > } else { > if (x%2) { *ptr_r = (Tuchar)((Ipc+Inc)/2); *ptr_g = (Tuchar)Icc; *ptr_b = (Tuchar)((Icn+Icp)/2); } > else { *ptr_r = (Tuchar)Icc; *ptr_g = (Tuchar)((Inc+Ipc+Icn+Icp)/4); *ptr_b = (Tuchar)((Ipp+Inn+Ipn+Inp)/4); } > } > ++ptr_r; ++ptr_g; ++ptr_b; > } > } break; > case 1 : { > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > I[0] = (T)(*this)(_p1x,_p1y,z,0), I[1] = (T)(*this)(x,_p1y,z,0), I[2] = (T)(*this)(_n1x,_p1y,z,0), I[3] = (T)(*this)(_p1x,y,z,0), I[4] = (T)(*this)(x,y,z,0), I[5] = (T)(*this)(_n1x,y,z,0), I[6] = (T)(*this)(_p1x,_n1y,z,0), I[7] = (T)(*this)(x,_n1y,z,0), I[8] = (T)(*this)(_n1x,_n1y,z,0); > if (y%2) { > if (x%2) { *ptr_r = (Tuchar)cimg::min(Ipp,Inn,Ipn,Inp); *ptr_g = (Tuchar)cimg::min(Inc,Ipc,Icn,Icp); *ptr_b = (Tuchar)Icc; } > else { *ptr_r = (Tuchar)cimg::min(Icn,Icp); *ptr_g = (Tuchar)Icc; *ptr_b = (Tuchar)cimg::min(Inc,Ipc); } > } else { > if (x%2) { *ptr_r = (Tuchar)cimg::min(Inc,Ipc); *ptr_g = (Tuchar)Icc; *ptr_b = (Tuchar)cimg::min(Icn,Icp); } > else { *ptr_r = (Tuchar)Icc; *ptr_g = (Tuchar)cimg::min(Inc,Ipc,Icn,Icp); *ptr_b = (Tuchar)cimg::min(Ipp,Inn,Ipn,Inp); } > } > ++ptr_r; ++ptr_g; ++ptr_b; > } > } break; > default : { > const T *ptrs = _data; > res.fill(0); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const T val = *(ptrs++); > if (y%2) { if (x%2) *ptr_b = val; else *ptr_g = val; } else { if (x%2) *ptr_g = val; else *ptr_r = val; } > ++ptr_r; ++ptr_g; ++ptr_b; > } > } > } > return res; > } ># 20275 "./CImg.h" > static float _cimg_lanczos(const float x) { > if (x<=-2 || x>=2) return 0; > const float a = (float)cimg::PI*x, b = 0.5f*a; > return (float)(x?std::sin(a)*std::sin(b)/(a*b):1); > } ># 20303 "./CImg.h" > CImg<T>& resize(const int size_x, const int size_y=-100, > const int size_z=-100, const int size_c=-100, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) { > if (!size_x || !size_y || !size_z || !size_c) return assign(); > const unsigned int > _sx = (unsigned int)(size_x<0?-size_x*width()/100:size_x), > _sy = (unsigned int)(size_y<0?-size_y*height()/100:size_y), > _sz = (unsigned int)(size_z<0?-size_z*depth()/100:size_z), > _sc = (unsigned int)(size_c<0?-size_c*spectrum()/100:size_c), > sx = _sx?_sx:1, sy = _sy?_sy:1, sz = _sz?_sz:1, sc = _sc?_sc:1; > if (sx==_width && sy==_height && sz==_depth && sc==_spectrum) return *this; > if (is_empty()) return assign(sx,sy,sz,sc,(T)0); > if (interpolation_type==-1 && sx*sy*sz*sc==size()) { > _width = sx; _height = sy; _depth = sz; _spectrum = sc; > return *this; > } > return get_resize(sx,sy,sz,sc,interpolation_type,boundary_conditions,centering_x,centering_y,centering_z,centering_c).move_to(*this); > } > > > CImg<T> get_resize(const int size_x, const int size_y = -100, > const int size_z = -100, const int size_c = -100, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) const { > if (centering_x<0 || centering_x>1 || centering_y<0 || centering_y>1 || > centering_z<0 || centering_z>1 || centering_c<0 || centering_c>1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "resize(): Specified centering arguments (%g,%g,%g,%g) are outside range [0,1].", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > centering_x,centering_y,centering_z,centering_c); > > if (!size_x || !size_y || !size_z || !size_c) return CImg<T>(); > const unsigned int > _sx = (unsigned int)(size_x<0?-size_x*width()/100:size_x), > _sy = (unsigned int)(size_y<0?-size_y*height()/100:size_y), > _sz = (unsigned int)(size_z<0?-size_z*depth()/100:size_z), > _sc = (unsigned int)(size_c<0?-size_c*spectrum()/100:size_c), > sx = _sx?_sx:1, sy = _sy?_sy:1, sz = _sz?_sz:1, sc = _sc?_sc:1; > if (sx==_width && sy==_height && sz==_depth && sc==_spectrum) return +*this; > if (is_empty()) return CImg<T>(sx,sy,sz,sc,0); > > CImg<T> res; > switch (interpolation_type) { > > > > case -1 : > std::memcpy(res.assign(sx,sy,sz,sc,0)._data,_data,sizeof(T)*cimg::min(size(),sx*sy*sz*sc)); > break; > > > > case 0 : { > const int > xc = (int)(centering_x*((int)sx - width())), > yc = (int)(centering_y*((int)sy - height())), > zc = (int)(centering_z*((int)sz - depth())), > cc = (int)(centering_c*((int)sc - spectrum())); > > switch (boundary_conditions) { > case 2 : { > res.assign(sx,sy,sz,sc); > const int > x0 = ((int)xc%width()) - width(), > y0 = ((int)yc%height()) - height(), > z0 = ((int)zc%depth()) - depth(), > c0 = ((int)cc%spectrum()) - spectrum(); ># 20374 "./CImg.h" > ># 20374 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=65536) ># 20374 "./CImg.h" ># 20374 "./CImg.h" > > > for (int c = c0; c<(int)sc; c+=spectrum()) > for (int z = z0; z<(int)sz; z+=depth()) > for (int y = y0; y<(int)sy; y+=height()) > for (int x = x0; x<(int)sx; x+=width()) > res.draw_image(x,y,z,c,*this); > } break; > case 1 : { > res.assign(sx,sy,sz,sc).draw_image(xc,yc,zc,cc,*this); > CImg<T> sprite; > if (xc>0) { > res.get_crop(xc,yc,zc,cc,xc,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int x = xc-1; x>=0; --x) res.draw_image(x,yc,zc,cc,sprite); > } > if (xc+width()<(int)sx) { > res.get_crop(xc+width()-1,yc,zc,cc,xc+width()-1,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int x = xc+width(); x<(int)sx; ++x) res.draw_image(x,yc,zc,cc,sprite); > } > if (yc>0) { > res.get_crop(0,yc,zc,cc,sx-1,yc,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int y = yc-1; y>=0; --y) res.draw_image(0,y,zc,cc,sprite); > } > if (yc+height()<(int)sy) { > res.get_crop(0,yc+height()-1,zc,cc,sx-1,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int y = yc+height(); y<(int)sy; ++y) res.draw_image(0,y,zc,cc,sprite); > } > if (zc>0) { > res.get_crop(0,0,zc,cc,sx-1,sy-1,zc,cc+spectrum()-1).move_to(sprite); > for (int z = zc-1; z>=0; --z) res.draw_image(0,0,z,cc,sprite); > } > if (zc+depth()<(int)sz) { > res.get_crop(0,0,zc+depth()-1,cc,sx-1,sy-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int z = zc+depth(); z<(int)sz; ++z) res.draw_image(0,0,z,cc,sprite); > } > if (cc>0) { > res.get_crop(0,0,0,cc,sx-1,sy-1,sz-1,cc).move_to(sprite); > for (int c = cc-1; c>=0; --c) res.draw_image(0,0,0,c,sprite); > } > if (cc+spectrum()<(int)sc) { > res.get_crop(0,0,0,cc+spectrum()-1,sx-1,sy-1,sz-1,cc+spectrum()-1).move_to(sprite); > for (int c = cc+spectrum(); c<(int)sc; ++c) res.draw_image(0,0,0,c,sprite); > } > } break; > default : > res.assign(sx,sy,sz,sc,0).draw_image(xc,yc,zc,cc,*this); > } > break; > } break; > > > > case 1 : { > res.assign(sx,sy,sz,sc); > CImg<ulongT> off_x(sx), off_y(sy+1), off_z(sz+1), off_c(sc+1); > const unsigned long > wh = (unsigned long)_width*_height, > whd = (unsigned long)_width*_height*_depth, > sxy = (unsigned long)sx*sy, > sxyz = (unsigned long)sx*sy*sz; > if (sx==_width) off_x.fill(1); > else { > unsigned long *poff_x = off_x._data, curr = 0; > for (int x = 0; x<(int)((res)._width); ++x) { const unsigned long old = curr; curr = ((x+1LU)*_width/sx); *(poff_x++) = curr - old; } > } > if (sy==_height) off_y.fill(_width); > else { > unsigned long *poff_y = off_y._data, curr = 0; > for (int y = 0; y<(int)((res)._height); ++y) { const unsigned long old = curr; curr = ((y+1LU)*_height/sy); *(poff_y++) = _width*(curr - old); } *poff_y = 0; > } > if (sz==_depth) off_z.fill(wh); > else { > unsigned long *poff_z = off_z._data, curr = 0; > for (int z = 0; z<(int)((res)._depth); ++z) { const unsigned long old = curr; curr = ((z+1LU)*_depth/sz); *(poff_z++) = wh*(curr - old); } *poff_z = 0; > } > if (sc==_spectrum) off_c.fill(whd); > else { > unsigned long *poff_c = off_c._data, curr = 0; > for (int c = 0; c<(int)((res)._spectrum); ++c) { const unsigned long old = curr; curr = ((c+1LU)*_spectrum/sc); *(poff_c++) = whd*(curr - old); } *poff_c = 0; > } > > T *ptrd = res._data; > const T* ptrc = _data; > const unsigned long *poff_c = off_c._data; > for (unsigned int c = 0; c<sc; ) { > const T *ptrz = ptrc; > const unsigned long *poff_z = off_z._data; > for (unsigned int z = 0; z<sz; ) { > const T *ptry = ptrz; > const unsigned long *poff_y = off_y._data; > for (unsigned int y = 0; y<sy; ) { > const T *ptrx = ptry; > const unsigned long *poff_x = off_x._data; > for (int x = 0; x<(int)((res)._width); ++x) { *(ptrd++) = *ptrx; ptrx+=*(poff_x++); } > ++y; > unsigned long dy = *(poff_y++); > for (;!dy && y<dy; std::memcpy(ptrd,ptrd - sx,sizeof(T)*sx), ++y, ptrd+=sx, dy = *(poff_y++)) {} > ptry+=dy; > } > ++z; > unsigned long dz = *(poff_z++); > for (;!dz && z<dz; std::memcpy(ptrd,ptrd-sxy,sizeof(T)*sxy), ++z, ptrd+=sxy, dz = *(poff_z++)) {} > ptrz+=dz; > } > ++c; > unsigned long dc = *(poff_c++); > for (;!dc && c<dc; std::memcpy(ptrd,ptrd-sxyz,sizeof(T)*sxyz), ++c, ptrd+=sxyz, dc = *(poff_c++)) {} > ptrc+=dc; > } > } break; > > > > case 2 : { > bool instance_first = true; > if (sx!=_width) { > CImg<Tfloat> tmp(sx,_height,_depth,_spectrum,0); > for (unsigned int a = _width*sx, b = _width, c = sx, s = 0, t = 0; a; ) { > const unsigned int d = cimg::min(b,c); > a-=d; b-=d; c-=d; > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) tmp(t,y,z,v)+=(Tfloat)(*this)(s,y,z,v)*d; > if (!b) { > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) tmp(t,y,z,v)/=_width; > ++t; > b = _width; > } > if (!c) { ++s; c = sx; } > } > tmp.move_to(res); > instance_first = false; > } > if (sy!=_height) { > CImg<Tfloat> tmp(sx,sy,_depth,_spectrum,0); > for (unsigned int a = _height*sy, b = _height, c = sy, s = 0, t = 0; a; ) { > const unsigned int d = cimg::min(b,c); > a-=d; b-=d; c-=d; > if (instance_first) > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,t,z,v)+=(Tfloat)(*this)(x,s,z,v)*d; > else > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,t,z,v)+=(Tfloat)res(x,s,z,v)*d; > if (!b) { > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,t,z,v)/=_height; > ++t; > b = _height; > } > if (!c) { ++s; c = sy; } > } > tmp.move_to(res); > instance_first = false; > } > if (sz!=_depth) { > CImg<Tfloat> tmp(sx,sy,sz,_spectrum,0); > for (unsigned int a = _depth*sz, b = _depth, c = sz, s = 0, t = 0; a; ) { > const unsigned int d = cimg::min(b,c); > a-=d; b-=d; c-=d; > if (instance_first) > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,t,v)+=(Tfloat)(*this)(x,y,s,v)*d; > else > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,t,v)+=(Tfloat)res(x,y,s,v)*d; > if (!b) { > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,t,v)/=_depth; > ++t; > b = _depth; > } > if (!c) { ++s; c = sz; } > } > tmp.move_to(res); > instance_first = false; > } > if (sc!=_spectrum) { > CImg<Tfloat> tmp(sx,sy,sz,sc,0); > for (unsigned int a = _spectrum*sc, b = _spectrum, c = sc, s = 0, t = 0; a; ) { > const unsigned int d = cimg::min(b,c); > a-=d; b-=d; c-=d; > if (instance_first) > for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,z,t)+=(Tfloat)(*this)(x,y,z,s)*d; > else > for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,z,t)+=(Tfloat)res(x,y,z,s)*d; > if (!b) { > for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,z,t)/=_spectrum; > ++t; > b = _spectrum; > } > if (!c) { ++s; c = sc; } > } > tmp.move_to(res); > instance_first = false; > } > } break; > > > > case 3 : { > CImg<uintT> off(cimg::max(sx,sy,sz,sc)); > CImg<floatT> foff(off._width); > CImg<T> resx, resy, resz, resc; > > if (sx!=_width) { > if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); > else { > if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); > else { > const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; > resx.assign(sx,_height,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } ># 20583 "./CImg.h" > ># 20583 "./CImg.h" >#pragma omp parallel for collapse(3) if (resx.size()>=65536) ># 20583 "./CImg.h" ># 20583 "./CImg.h" > > > for (int c = 0; c<(int)((resx)._spectrum); ++c) for (int z = 0; z<(int)((resx)._depth); ++z) for (int y = 0; y<(int)((resx)._height); ++y) { > const T *ptrs = data(0,y,z,c), *const ptrsmax = ptrs + (_width-1); > T *ptrd = resx.data(0,y,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { > const float alpha = *(pfoff++); > const T val1 = *ptrs, val2 = ptrs<ptrsmax?*(ptrs+1):val1; > *(ptrd++) = (T)((1-alpha)*val1 + alpha*val2); > ptrs+=*(poff++); > } > } > } > } > } else resx.assign(*this,true); > > if (sy!=_height) { > if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); > else { > if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); > else { > const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; > resy.assign(sx,sy,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } ># 20613 "./CImg.h" > ># 20613 "./CImg.h" >#pragma omp parallel for collapse(3) if (resy.size()>=65536) ># 20613 "./CImg.h" ># 20613 "./CImg.h" > > > for (int c = 0; c<(int)((resy)._spectrum); ++c) for (int z = 0; z<(int)((resy)._depth); ++z) for (int x = 0; x<(int)((resy)._width); ++x) { > const T *ptrs = resx.data(x,0,z,c), *const ptrsmax = ptrs + (_height-1)*sx; > T *ptrd = resy.data(x,0,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { > const float alpha = *(pfoff++); > const T val1 = *ptrs, val2 = ptrs<ptrsmax?*(ptrs+sx):val1; > *ptrd = (T)((1-alpha)*val1 + alpha*val2); > ptrd+=sx; > ptrs+=*(poff++); > } > } > } > } > resx.assign(); > } else resy.assign(resx,true); > > if (sz!=_depth) { > if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); > else { > if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); > else { > const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; > const unsigned int sxy = sx*sy; > resz.assign(sx,sy,sz,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } ># 20646 "./CImg.h" > ># 20646 "./CImg.h" >#pragma omp parallel for collapse(3) if (resz.size()>=65536) ># 20646 "./CImg.h" ># 20646 "./CImg.h" > > > for (int c = 0; c<(int)((resz)._spectrum); ++c) for (int y = 0; y<(int)((resz)._height); ++y) for (int x = 0; x<(int)((resz)._width); ++x) { > const T *ptrs = resy.data(x,y,0,c), *const ptrsmax = ptrs + (_depth-1)*sxy; > T *ptrd = resz.data(x,y,0,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { > const float alpha = *(pfoff++); > const T val1 = *ptrs, val2 = ptrs<ptrsmax?*(ptrs+sxy):val1; > *ptrd = (T)((1-alpha)*val1 + alpha*val2); > ptrd+=sxy; > ptrs+=*(poff++); > } > } > } > } > resy.assign(); > } else resz.assign(resy,true); > > if (sc!=_spectrum) { > if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); > else { > if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); > else { > const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; > const unsigned int sxyz = sx*sy*sz; > resc.assign(sx,sy,sz,sc); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } ># 20679 "./CImg.h" > ># 20679 "./CImg.h" >#pragma omp parallel for collapse(3) if (resc.size()>=65536) ># 20679 "./CImg.h" ># 20679 "./CImg.h" > > > for (int z = 0; z<(int)((resc)._depth); ++z) for (int y = 0; y<(int)((resc)._height); ++y) for (int x = 0; x<(int)((resc)._width); ++x) { > const T *ptrs = resz.data(x,y,z,0), *const ptrsmax = ptrs + (_spectrum-1)*sxyz; > T *ptrd = resc.data(x,y,z,0); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { > const float alpha = *(pfoff++); > const T val1 = *ptrs, val2 = ptrs<ptrsmax?*(ptrs+sxyz):val1; > *ptrd = (T)((1-alpha)*val1 + alpha*val2); > ptrd+=sxyz; > ptrs+=*(poff++); > } > } > } > } > resz.assign(); > } else resc.assign(resz,true); > return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; > } break; > > > > case 4 : { > CImg<T> resx, resy, resz, resc; > if (sx!=_width) { > if (sx<_width) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); > else { > resx.assign(sx,_height,_depth,_spectrum,0); > const int dx = sx*2, dy = width()*2; > int err = (int)(dy + centering_x*(sx*dy/width() - dy)), xs = 0; > for (int x = 0; x<(int)((resx)._width); ++x) if ((err-=dy)<=0) { > for (int c = 0; c<(int)((resx)._spectrum); ++c) for (int z = 0; z<(int)((resx)._depth); ++z) for (int y = 0; y<(int)((resx)._height); ++y) resx(x,y,z,c) = (*this)(xs,y,z,c); > ++xs; > err+=dx; > } > } > } else resx.assign(*this,true); > > if (sy!=_height) { > if (sy<_height) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); > else { > resy.assign(sx,sy,_depth,_spectrum,0); > const int dx = sy*2, dy = height()*2; > int err = (int)(dy + centering_y*(sy*dy/height() - dy)), ys = 0; > for (int y = 0; y<(int)((resy)._height); ++y) if ((err-=dy)<=0) { > for (int c = 0; c<(int)((resy)._spectrum); ++c) for (int z = 0; z<(int)((resy)._depth); ++z) for (int x = 0; x<(int)((resy)._width); ++x) resy(x,y,z,c) = resx(x,ys,z,c); > ++ys; > err+=dx; > } > } > resx.assign(); > } else resy.assign(resx,true); > > if (sz!=_depth) { > if (sz<_depth) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); > else { > resz.assign(sx,sy,sz,_spectrum,0); > const int dx = sz*2, dy = depth()*2; > int err = (int)(dy + centering_z*(sz*dy/depth() - dy)), zs = 0; > for (int z = 0; z<(int)((resz)._depth); ++z) if ((err-=dy)<=0) { > for (int c = 0; c<(int)((resz)._spectrum); ++c) for (int y = 0; y<(int)((resz)._height); ++y) for (int x = 0; x<(int)((resz)._width); ++x) resz(x,y,z,c) = resy(x,y,zs,c); > ++zs; > err+=dx; > } > } > resy.assign(); > } else resz.assign(resy,true); > > if (sc!=_spectrum) { > if (sc<_spectrum) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); > else { > resc.assign(sx,sy,sz,sc,0); > const int dx = sc*2, dy = spectrum()*2; > int err = (int)(dy + centering_c*(sc*dy/spectrum() - dy)), cs = 0; > for (int c = 0; c<(int)((resc)._spectrum); ++c) if ((err-=dy)<=0) { > for (int z = 0; z<(int)((resc)._depth); ++z) for (int y = 0; y<(int)((resc)._height); ++y) for (int x = 0; x<(int)((resc)._width); ++x) resc(x,y,z,c) = resz(x,y,z,cs); > ++cs; > err+=dx; > } > } > resz.assign(); > } else resc.assign(resz,true); > > return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; > } break; > > > > case 5 : { > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > CImg<uintT> off(cimg::max(sx,sy,sz,sc)); > CImg<floatT> foff(off._width); > CImg<T> resx, resy, resz, resc; > > if (sx!=_width) { > if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); > else { > if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); > else { > const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; > resx.assign(sx,_height,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } ># 20787 "./CImg.h" > ># 20787 "./CImg.h" >#pragma omp parallel for collapse(3) if (resx.size()>=65536) ># 20787 "./CImg.h" ># 20787 "./CImg.h" > > > for (int c = 0; c<(int)((resx)._spectrum); ++c) for (int z = 0; z<(int)((resx)._depth); ++z) for (int y = 0; y<(int)((resx)._height); ++y) { > const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_width-2); > T *ptrd = resx.data(0,y,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { > const float t = *(pfoff++); > const Tfloat > val1 = (Tfloat)*ptrs, > val0 = ptrs>ptrs0?(Tfloat)*(ptrs-1):val1, > val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+1):val1, > val3 = ptrs<ptrsmax?(Tfloat)*(ptrs+2):val2, > val = val1 + 0.5f*(t*(-val0+val2) + t*t*(2*val0-5*val1+4*val2-val3) + t*t*t*(-val0+3*val1-3*val2+val3)); > *(ptrd++) = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrs+=*(poff++); > } > } > } > } > } else resx.assign(*this,true); > > if (sy!=_height) { > if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); > else { > if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); > else { > const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; > resy.assign(sx,sy,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } ># 20822 "./CImg.h" > ># 20822 "./CImg.h" >#pragma omp parallel for collapse(3) if (resy.size()>=65536) ># 20822 "./CImg.h" ># 20822 "./CImg.h" > > > for (int c = 0; c<(int)((resy)._spectrum); ++c) for (int z = 0; z<(int)((resy)._depth); ++z) for (int x = 0; x<(int)((resy)._width); ++x) { > const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_height-2)*sx; > T *ptrd = resy.data(x,0,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { > const float t = *(pfoff++); > const Tfloat > val1 = (Tfloat)*ptrs, > val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sx):val1, > val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sx):val1, > val3 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sx):val2, > val = val1 + 0.5f*(t*(-val0+val2) + t*t*(2*val0-5*val1+4*val2-val3) + t*t*t*(-val0+3*val1-3*val2+val3)); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sx; > ptrs+=*(poff++); > } > } > } > } > resx.assign(); > } else resy.assign(resx,true); > > if (sz!=_depth) { > if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); > else { > if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); > else { > const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; > const unsigned int sxy = sx*sy; > resz.assign(sx,sy,sz,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } ># 20860 "./CImg.h" > ># 20860 "./CImg.h" >#pragma omp parallel for collapse(3) if (resz.size()>=65536) ># 20860 "./CImg.h" ># 20860 "./CImg.h" > > > for (int c = 0; c<(int)((resz)._spectrum); ++c) for (int y = 0; y<(int)((resz)._height); ++y) for (int x = 0; x<(int)((resz)._width); ++x) { > const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_depth-2)*sxy; > T *ptrd = resz.data(x,y,0,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { > const float t = *(pfoff++); > const Tfloat > val1 = (Tfloat)*ptrs, > val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sxy):val1, > val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxy):val1, > val3 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sxy):val2, > val = val1 + 0.5f*(t*(-val0+val2) + t*t*(2*val0-5*val1+4*val2-val3) + t*t*t*(-val0+3*val1-3*val2+val3)); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sxy; > ptrs+=*(poff++); > } > } > } > } > resy.assign(); > } else resz.assign(resy,true); > > if (sc!=_spectrum) { > if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); > else { > if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); > else { > const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; > const unsigned int sxyz = sx*sy*sz; > resc.assign(sx,sy,sz,sc); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } ># 20898 "./CImg.h" > ># 20898 "./CImg.h" >#pragma omp parallel for collapse(3) if (resc.size()>=65536) ># 20898 "./CImg.h" ># 20898 "./CImg.h" > > > for (int z = 0; z<(int)((resc)._depth); ++z) for (int y = 0; y<(int)((resc)._height); ++y) for (int x = 0; x<(int)((resc)._width); ++x) { > const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmax = ptrs + (_spectrum-2)*sxyz; > T *ptrd = resc.data(x,y,z,0); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { > const float t = *(pfoff++); > const Tfloat > val1 = (Tfloat)*ptrs, > val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sxyz):val1, > val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxyz):val1, > val3 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sxyz):val2, > val = val1 + 0.5f*(t*(-val0+val2) + t*t*(2*val0-5*val1+4*val2-val3) + t*t*t*(-val0+3*val1-3*val2+val3)); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sxyz; > ptrs+=*(poff++); > } > } > } > } > resz.assign(); > } else resc.assign(resz,true); > > return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; > } break; > > > > case 6 : { > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > CImg<uintT> off(cimg::max(sx,sy,sz,sc)); > CImg<floatT> foff(off._width); > CImg<T> resx, resy, resz, resc; > > if (sx!=_width) { > if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); > else { > if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); > else { > const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; > resx.assign(sx,_height,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } ># 20946 "./CImg.h" > ># 20946 "./CImg.h" >#pragma omp parallel for collapse(3) if (resx.size()>=65536) ># 20946 "./CImg.h" ># 20946 "./CImg.h" > > > for (int c = 0; c<(int)((resx)._spectrum); ++c) for (int z = 0; z<(int)((resx)._depth); ++z) for (int y = 0; y<(int)((resx)._height); ++y) { > const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + 1, *const ptrsmax = ptrs0 + (_width-2); > T *ptrd = resx.data(0,y,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { > const float > t = *(pfoff++), > w0 = _cimg_lanczos(t+2), > w1 = _cimg_lanczos(t+1), > w2 = _cimg_lanczos(t), > w3 = _cimg_lanczos(t-1), > w4 = _cimg_lanczos(t-2); > const Tfloat > val2 = (Tfloat)*ptrs, > val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-1):val2, > val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2):val1, > val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+1):val2, > val4 = ptrs<ptrsmax?(Tfloat)*(ptrs+2):val3, > val = (val0*w0 + val1*w1 + val2*w2 + val3*w3 + val4*w4)/(w1 + w2 + w3 + w4); > *(ptrd++) = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrs+=*(poff++); > } > } > } > } > } else resx.assign(*this,true); > > if (sy!=_height) { > if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); > else { > if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); > else { > const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; > resy.assign(sx,sy,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } ># 20988 "./CImg.h" > ># 20988 "./CImg.h" >#pragma omp parallel for collapse(3) if (resy.size()>=65536) ># 20988 "./CImg.h" ># 20988 "./CImg.h" > > > for (int c = 0; c<(int)((resy)._spectrum); ++c) for (int z = 0; z<(int)((resy)._depth); ++z) for (int x = 0; x<(int)((resy)._width); ++x) { > const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sx, *const ptrsmax = ptrs0 + (_height-2)*sx; > T *ptrd = resy.data(x,0,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { > const float > t = *(pfoff++), > w0 = _cimg_lanczos(t+2), > w1 = _cimg_lanczos(t+1), > w2 = _cimg_lanczos(t), > w3 = _cimg_lanczos(t-1), > w4 = _cimg_lanczos(t-2); > const Tfloat > val2 = (Tfloat)*ptrs, > val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sx):val2, > val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sx):val1, > val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sx):val2, > val4 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sx):val3, > val = (val0*w0 + val1*w1 + val2*w2 + val3*w3 + val4*w4)/(w1 + w2 + w3 + w4); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sx; > ptrs+=*(poff++); > } > } > } > } > resx.assign(); > } else resy.assign(resx,true); > > if (sz!=_depth) { > if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); > else { > if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); > else { > const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; > const unsigned int sxy = sx*sy; > resz.assign(sx,sy,sz,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } ># 21033 "./CImg.h" > ># 21033 "./CImg.h" >#pragma omp parallel for collapse(3) if (resz.size()>=65536) ># 21033 "./CImg.h" ># 21033 "./CImg.h" > > > for (int c = 0; c<(int)((resz)._spectrum); ++c) for (int y = 0; y<(int)((resz)._height); ++y) for (int x = 0; x<(int)((resz)._width); ++x) { > const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxy, *const ptrsmax = ptrs0 + (_depth-2)*sxy; > T *ptrd = resz.data(x,y,0,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { > const float > t = *(pfoff++), > w0 = _cimg_lanczos(t+2), > w1 = _cimg_lanczos(t+1), > w2 = _cimg_lanczos(t), > w3 = _cimg_lanczos(t-1), > w4 = _cimg_lanczos(t-2); > const Tfloat > val2 = (Tfloat)*ptrs, > val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sxy):val2, > val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sxy):val1, > val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxy):val2, > val4 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sxy):val3, > val = (val0*w0 + val1*w1 + val2*w2 + val3*w3 + val4*w4)/(w1 + w2 + w3 + w4); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sxy; > ptrs+=*(poff++); > } > } > } > } > resy.assign(); > } else resz.assign(resy,true); > > if (sc!=_spectrum) { > if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); > else { > if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); > else { > const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; > const unsigned int sxyz = sx*sy*sz; > resc.assign(sx,sy,sz,sc); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } ># 21078 "./CImg.h" > ># 21078 "./CImg.h" >#pragma omp parallel for collapse(3) if (resc.size()>=65536) ># 21078 "./CImg.h" ># 21078 "./CImg.h" > > > for (int z = 0; z<(int)((resc)._depth); ++z) for (int y = 0; y<(int)((resc)._height); ++y) for (int x = 0; x<(int)((resc)._width); ++x) { > const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxyz, *const ptrsmax = ptrs + (_spectrum-2)*sxyz; > T *ptrd = resc.data(x,y,z,0); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { > const float > t = *(pfoff++), > w0 = _cimg_lanczos(t+2), > w1 = _cimg_lanczos(t+1), > w2 = _cimg_lanczos(t), > w3 = _cimg_lanczos(t-1), > w4 = _cimg_lanczos(t-2); > const Tfloat > val2 = (Tfloat)*ptrs, > val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sxyz):val2, > val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sxyz):val1, > val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxyz):val2, > val4 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sxyz):val3, > val = (val0*w0 + val1*w1 + val2*w2 + val3*w3 + val4*w4)/(w1 + w2 + w3 + w4); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sxyz; > ptrs+=*(poff++); > } > } > } > } > resz.assign(); > } else resc.assign(resz,true); > > return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; > } break; > > > > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "resize(): Invalid specified interpolation %d " > "(should be { -1=raw | 0=none | 1=nearest | 2=average | 3=linear | 4=grid | 5=cubic | 6=lanczos }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > interpolation_type); > } > return res; > } ># 21135 "./CImg.h" > template<typename t> > CImg<T>& resize(const CImg<t>& src, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) { > return resize(src._width,src._height,src._depth,src._spectrum,interpolation_type,boundary_conditions, > centering_x,centering_y,centering_z,centering_c); > } > > > template<typename t> > CImg<T> get_resize(const CImg<t>& src, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) const { > return get_resize(src._width,src._height,src._depth,src._spectrum,interpolation_type,boundary_conditions, > centering_x,centering_y,centering_z,centering_c); > } ># 21164 "./CImg.h" > CImg<T>& resize(const CImgDisplay& disp, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) { > return resize(disp.width(),disp.height(),_depth,_spectrum,interpolation_type,boundary_conditions, > centering_x,centering_y,centering_z,centering_c); > } > > > CImg<T> get_resize(const CImgDisplay& disp, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) const { > return get_resize(disp.width(),disp.height(),_depth,_spectrum,interpolation_type,boundary_conditions, > centering_x,centering_y,centering_z,centering_c); > } > > > CImg<T>& resize_halfXY() { > return get_resize_halfXY().move_to(*this); > } > > > CImg<T> get_resize_halfXY() const { > if (is_empty()) return *this; > const Tfloat mask[9] = { 0.07842776544f, 0.1231940459f, 0.07842776544f, > 0.1231940459f, 0.1935127547f, 0.1231940459f, > 0.07842776544f, 0.1231940459f, 0.07842776544f }; > T I[9] = { 0 }; > CImg<T> res(_width/2,_height/2,_depth,_spectrum); > T *ptrd = res._data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (T)(*this)(0,y,z,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,z,c)), (I[5] = (T)(*this)(_n1x,y,z,c)), (I[8] = (T)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) > if (x%2 && y%2) *(ptrd++) = (T) > (I[0]*mask[0] + I[1]*mask[1] + I[2]*mask[2] + > I[3]*mask[3] + I[4]*mask[4] + I[5]*mask[5] + > I[6]*mask[6] + I[7]*mask[7] + I[8]*mask[8]); > return res; > } > > > > > > CImg<T>& resize_doubleXY() { > return get_resize_doubleXY().move_to(*this); > } > > > CImg<T> get_resize_doubleXY() const { ># 21237 "./CImg.h" > if (is_empty()) return *this; > CImg<T> res(_width<<1,_height<<1,_depth,_spectrum); > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > T > *ptrd1 = res.data(0,0,z,c), > *ptrd2 = ptrd1 + res._width; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y, ptrd1+=(res)._width, ptrd2+=(res)._width) for (int x = 0, _p1x = 0, _n1x = (int)( (I[1] = (T)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (T)(*this)(0,y,z,c)), (I[7] = (T)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,z,c)), (I[5] = (T)(*this)(_n1x,y,z,c)), (I[8] = (T)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[1] = I[2], I[3] = I[4], I[4] = I[5], I[7] = I[8], _p1x = x++, ++_n1x) { > if (Icp!=Icn && Ipc!=Inc) { > *(ptrd1++) = Ipc==Icp?Ipc:Icc; > *(ptrd1++) = Icp==Inc?Inc:Icc; > *(ptrd2++) = Ipc==Icn?Ipc:Icc; > *(ptrd2++) = Icn==Inc?Inc:Icc; > } else { *(ptrd1++) = Icc; *(ptrd1++) = Icc; *(ptrd2++) = Icc; *(ptrd2++) = Icc; } > } > } > return res; > } > > > > > > CImg<T>& resize_tripleXY() { > return get_resize_tripleXY().move_to(*this); > } > > > CImg<T> get_resize_tripleXY() const { ># 21290 "./CImg.h" > if (is_empty()) return *this; > CImg<T> res(3*_width,3*_height,_depth,_spectrum); > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > T > *ptrd1 = res.data(0,0,z,c), > *ptrd2 = ptrd1 + res._width, > *ptrd3 = ptrd2 + res._width; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y, ptrd1+=2*(res)._width, ptrd2+=2*(res)._width, ptrd3+=2*(res)._width) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (T)(*this)(0,y,z,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,z,c)), (I[5] = (T)(*this)(_n1x,y,z,c)), (I[8] = (T)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > if (Icp != Icn && Ipc != Inc) { > *(ptrd1++) = Ipc==Icp?Ipc:Icc; > *(ptrd1++) = (Ipc==Icp && Icc!=Inp) || (Icp==Inc && Icc!=Ipp)?Icp:Icc; > *(ptrd1++) = Icp==Inc?Inc:Icc; > *(ptrd2++) = (Ipc==Icp && Icc!=Ipn) || (Ipc==Icn && Icc!=Ipp)?Ipc:Icc; > *(ptrd2++) = Icc; > *(ptrd2++) = (Icp==Inc && Icc!=Inn) || (Icn==Inc && Icc!=Inp)?Inc:Icc; > *(ptrd3++) = Ipc==Icn?Ipc:Icc; > *(ptrd3++) = (Ipc==Icn && Icc!=Inn) || (Icn==Inc && Icc!=Ipn)?Icn:Icc; > *(ptrd3++) = Icn==Inc?Inc:Icc; > } else { > *(ptrd1++) = Icc; *(ptrd1++) = Icc; *(ptrd1++) = Icc; > *(ptrd2++) = Icc; *(ptrd2++) = Icc; *(ptrd2++) = Icc; > *(ptrd3++) = Icc; *(ptrd3++) = Icc; *(ptrd3++) = Icc; > } > } > } > return res; > } > > > > > > CImg<T>& mirror(const char axis) { > if (is_empty()) return *this; > T *pf, *pb, *buf = 0; > switch (cimg::uncase(axis)) { > case 'x' : { > pf = _data; pb = data(_width-1); > const unsigned int width2 = _width/2; > for (unsigned int yzv = 0; yzv<_height*_depth*_spectrum; ++yzv) { > for (unsigned int x = 0; x<width2; ++x) { const T val = *pf; *(pf++) = *pb; *(pb--) = val; } > pf+=_width - width2; > pb+=_width + width2; > } > } break; > case 'y' : { > buf = new T[_width]; > pf = _data; pb = data(0,_height-1); > const unsigned int height2 = _height/2; > for (unsigned int zv = 0; zv<_depth*_spectrum; ++zv) { > for (unsigned int y = 0; y<height2; ++y) { > std::memcpy(buf,pf,_width*sizeof(T)); > std::memcpy(pf,pb,_width*sizeof(T)); > std::memcpy(pb,buf,_width*sizeof(T)); > pf+=_width; > pb-=_width; > } > pf+=(unsigned long)_width*(_height - height2); > pb+=(unsigned long)_width*(_height + height2); > } > } break; > case 'z' : { > buf = new T[(unsigned long)_width*_height]; > pf = _data; pb = data(0,0,_depth-1); > const unsigned int depth2 = _depth/2; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > for (unsigned int z = 0; z<depth2; ++z) { > std::memcpy(buf,pf,_width*_height*sizeof(T)); > std::memcpy(pf,pb,_width*_height*sizeof(T)); > std::memcpy(pb,buf,_width*_height*sizeof(T)); > pf+=(unsigned long)_width*_height; > pb-=(unsigned long)_width*_height; > } > pf+=(unsigned long)_width*_height*(_depth - depth2); > pb+=(unsigned long)_width*_height*(_depth + depth2); > } > } break; > case 'c' : { > buf = new T[(unsigned long)_width*_height*_depth]; > pf = _data; pb = data(0,0,0,_spectrum-1); > const unsigned int _spectrum2 = _spectrum/2; > for (unsigned int v = 0; v<_spectrum2; ++v) { > std::memcpy(buf,pf,_width*_height*_depth*sizeof(T)); > std::memcpy(pf,pb,_width*_height*_depth*sizeof(T)); > std::memcpy(pb,buf,_width*_height*_depth*sizeof(T)); > pf+=(unsigned long)_width*_height*_depth; > pb-=(unsigned long)_width*_height*_depth; > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "mirror(): Invalid specified axis '%c'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > delete[] buf; > return *this; > } > > > CImg<T> get_mirror(const char axis) const { > return (+*this).mirror(axis); > } > > > > > > > CImg<T>& mirror(const char *const axes) { > for (const char *s = axes; *s; s++) mirror(*s); > return *this; > } > > > CImg<T> get_mirror(const char *const axes) const { > return (+*this).mirror(axes); > } ># 21423 "./CImg.h" > CImg<T>& shift(const int delta_x, const int delta_y=0, const int delta_z=0, const int delta_c=0, > const int boundary_conditions=0) { > if (is_empty()) return *this; > if (delta_x) > switch (boundary_conditions) { > case 0 : > if (cimg::abs(delta_x)>=width()) return fill(0); > if (delta_x<0) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memmove(data(0,y,z,c),data(-delta_x,y,z,c),(_width+delta_x)*sizeof(T)); > std::memset(data(_width+delta_x,y,z,c),0,-delta_x*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memmove(data(delta_x,y,z,c),data(0,y,z,c),(_width-delta_x)*sizeof(T)); > std::memset(data(0,y,z,c),0,delta_x*sizeof(T)); > } > break; > case 1 : > if (delta_x<0) { > const int ndelta_x = (-delta_x>=width())?width()-1:-delta_x; > if (!ndelta_x) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); > T *ptrd = data(_width-1,y,z,c); > const T val = *ptrd; > for (int l = 0; l<ndelta_x-1; ++l) *(--ptrd) = val; > } > } else { > const int ndelta_x = (delta_x>=width())?width()-1:delta_x; > if (!ndelta_x) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memmove(data(ndelta_x,y,z,c),data(0,y,z,c),(_width-ndelta_x)*sizeof(T)); > T *ptrd = data(0,y,z,c); > const T val = *ptrd; > for (int l = 0; l<ndelta_x-1; ++l) *(++ptrd) = val; > } > } > break; > default : { > const int ml = cimg::mod(-delta_x,width()), ndelta_x = (ml<=width()/2)?ml:(ml-width()); > if (!ndelta_x) return *this; > T *const buf = new T[cimg::abs(ndelta_x)]; > if (ndelta_x>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memcpy(buf,data(0,y,z,c),ndelta_x*sizeof(T)); > std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); > std::memcpy(data(_width-ndelta_x,y,z,c),buf,ndelta_x*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memcpy(buf,data(_width+ndelta_x,y,z,c),-ndelta_x*sizeof(T)); > std::memmove(data(-ndelta_x,y,z,c),data(0,y,z,c),(_width+ndelta_x)*sizeof(T)); > std::memcpy(data(0,y,z,c),buf,-ndelta_x*sizeof(T)); > } > delete[] buf; > } > } > > if (delta_y) > switch (boundary_conditions) { > case 0 : > if (cimg::abs(delta_y)>=height()) return fill(0); > if (delta_y<0) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memmove(data(0,0,z,c),data(0,-delta_y,z,c),_width*(_height+delta_y)*sizeof(T)); > std::memset(data(0,_height+delta_y,z,c),0,-delta_y*_width*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memmove(data(0,delta_y,z,c),data(0,0,z,c),_width*(_height-delta_y)*sizeof(T)); > std::memset(data(0,0,z,c),0,delta_y*_width*sizeof(T)); > } > break; > case 1 : > if (delta_y<0) { > const int ndelta_y = (-delta_y>=height())?height()-1:-delta_y; > if (!ndelta_y) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); > T *ptrd = data(0,_height-ndelta_y,z,c), *ptrs = data(0,_height-1,z,c); > for (int l = 0; l<ndelta_y-1; ++l) { std::memcpy(ptrd,ptrs,_width*sizeof(T)); ptrd+=_width; } > } > } else { > const int ndelta_y = (delta_y>=height())?height()-1:delta_y; > if (!ndelta_y) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memmove(data(0,ndelta_y,z,c),data(0,0,z,c),_width*(_height-ndelta_y)*sizeof(T)); > T *ptrd = data(0,1,z,c), *ptrs = data(0,0,z,c); > for (int l = 0; l<ndelta_y-1; ++l) { std::memcpy(ptrd,ptrs,_width*sizeof(T)); ptrd+=_width; } > } > } > break; > default : { > const int ml = cimg::mod(-delta_y,height()), ndelta_y = (ml<=height()/2)?ml:(ml-height()); > if (!ndelta_y) return *this; > T *const buf = new T[(unsigned long)_width*cimg::abs(ndelta_y)]; > if (ndelta_y>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memcpy(buf,data(0,0,z,c),_width*ndelta_y*sizeof(T)); > std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); > std::memcpy(data(0,_height-ndelta_y,z,c),buf,_width*ndelta_y*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memcpy(buf,data(0,_height+ndelta_y,z,c),-ndelta_y*_width*sizeof(T)); > std::memmove(data(0,-ndelta_y,z,c),data(0,0,z,c),_width*(_height+ndelta_y)*sizeof(T)); > std::memcpy(data(0,0,z,c),buf,-ndelta_y*_width*sizeof(T)); > } > delete[] buf; > } > } > > if (delta_z) > switch (boundary_conditions) { > case 0 : > if (cimg::abs(delta_z)>=depth()) return fill(0); > if (delta_z<0) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memmove(data(0,0,0,c),data(0,0,-delta_z,c),_width*_height*(_depth+delta_z)*sizeof(T)); > std::memset(data(0,0,_depth+delta_z,c),0,_width*_height*(-delta_z)*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memmove(data(0,0,delta_z,c),data(0,0,0,c),_width*_height*(_depth-delta_z)*sizeof(T)); > std::memset(data(0,0,0,c),0,delta_z*_width*_height*sizeof(T)); > } > break; > case 1 : > if (delta_z<0) { > const int ndelta_z = (-delta_z>=depth())?depth()-1:-delta_z; > if (!ndelta_z) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); > T *ptrd = data(0,0,_depth-ndelta_z,c), *ptrs = data(0,0,_depth-1,c); > for (int l = 0; l<ndelta_z-1; ++l) { std::memcpy(ptrd,ptrs,_width*_height*sizeof(T)); ptrd+=(unsigned long)_width*_height; } > } > } else { > const int ndelta_z = (delta_z>=depth())?depth()-1:delta_z; > if (!ndelta_z) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memmove(data(0,0,ndelta_z,c),data(0,0,0,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); > T *ptrd = data(0,0,1,c), *ptrs = data(0,0,0,c); > for (int l = 0; l<ndelta_z-1; ++l) { std::memcpy(ptrd,ptrs,_width*_height*sizeof(T)); ptrd+=(unsigned long)_width*_height; } > } > } > break; > default : { > const int ml = cimg::mod(-delta_z,depth()), ndelta_z = (ml<=depth()/2)?ml:(ml-depth()); > if (!ndelta_z) return *this; > T *const buf = new T[(unsigned long)_width*_height*cimg::abs(ndelta_z)]; > if (ndelta_z>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memcpy(buf,data(0,0,0,c),_width*_height*ndelta_z*sizeof(T)); > std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); > std::memcpy(data(0,0,_depth-ndelta_z,c),buf,_width*_height*ndelta_z*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memcpy(buf,data(0,0,_depth+ndelta_z,c),-ndelta_z*_width*_height*sizeof(T)); > std::memmove(data(0,0,-ndelta_z,c),data(0,0,0,c),_width*_height*(_depth+ndelta_z)*sizeof(T)); > std::memcpy(data(0,0,0,c),buf,-ndelta_z*_width*_height*sizeof(T)); > } > delete[] buf; > } > } > > if (delta_c) > switch (boundary_conditions) { > case 0 : > if (cimg::abs(delta_c)>=spectrum()) return fill(0); > if (delta_c<0) { > std::memmove(_data,data(0,0,0,-delta_c),_width*_height*_depth*(_spectrum+delta_c)*sizeof(T)); > std::memset(data(0,0,0,_spectrum+delta_c),0,_width*_height*_depth*(-delta_c)*sizeof(T)); > } else { > std::memmove(data(0,0,0,delta_c),_data,_width*_height*_depth*(_spectrum-delta_c)*sizeof(T)); > std::memset(_data,0,delta_c*_width*_height*_depth*sizeof(T)); > } > break; > case 1 : > if (delta_c<0) { > const int ndelta_c = (-delta_c>=spectrum())?spectrum()-1:-delta_c; > if (!ndelta_c) return *this; > std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); > T *ptrd = data(0,0,0,_spectrum-ndelta_c), *ptrs = data(0,0,0,_spectrum-1); > for (int l = 0; l<ndelta_c-1; ++l) { std::memcpy(ptrd,ptrs,_width*_height*_depth*sizeof(T)); ptrd+=(unsigned long)_width*_height*_depth; } > } else { > const int ndelta_c = (delta_c>=spectrum())?spectrum()-1:delta_c; > if (!ndelta_c) return *this; > std::memmove(data(0,0,0,ndelta_c),_data,_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); > T *ptrd = data(0,0,0,1); > for (int l = 0; l<ndelta_c-1; ++l) { std::memcpy(ptrd,_data,_width*_height*_depth*sizeof(T)); ptrd+=(unsigned long)_width*_height*_depth; } > } > break; > default : { > const int ml = cimg::mod(-delta_c,spectrum()), ndelta_c = (ml<=spectrum()/2)?ml:(ml-spectrum()); > if (!ndelta_c) return *this; > T *const buf = new T[(unsigned long)_width*_height*_depth*cimg::abs(ndelta_c)]; > if (ndelta_c>0) { > std::memcpy(buf,_data,_width*_height*_depth*ndelta_c*sizeof(T)); > std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); > std::memcpy(data(0,0,0,_spectrum-ndelta_c),buf,_width*_height*_depth*ndelta_c*sizeof(T)); > } else { > std::memcpy(buf,data(0,0,0,_spectrum+ndelta_c),-ndelta_c*_width*_height*_depth*sizeof(T)); > std::memmove(data(0,0,0,-ndelta_c),_data,_width*_height*_depth*(_spectrum+ndelta_c)*sizeof(T)); > std::memcpy(_data,buf,-ndelta_c*_width*_height*_depth*sizeof(T)); > } > delete[] buf; > } > } > return *this; > } > > > CImg<T> get_shift(const int delta_x, const int delta_y=0, const int delta_z=0, const int delta_c=0, > const int boundary_conditions=0) const { > return (+*this).shift(delta_x,delta_y,delta_z,delta_c,boundary_conditions); > } > > > > > > > CImg<T>& permute_axes(const char *const order) { > return get_permute_axes(order).move_to(*this); > } > > > CImg<T> get_permute_axes(const char *const order) const { > const T foo = (T)0; > return _get_permute_axes(order,foo); > } > > template<typename t> > CImg<t> _get_permute_axes(const char *const permut, const t&) const { > if (is_empty() || !permut) return CImg<t>(*this,false); > CImg<t> res; > const T* ptrs = _data; > if (!cimg::strncasecmp(permut,"xyzc",4)) return +*this; > if (!cimg::strncasecmp(permut,"xycz",4)) { > res.assign(_width,_height,_spectrum,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,y,c,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"xzyc",4)) { > res.assign(_width,_depth,_height,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,z,y,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"xzcy",4)) { > res.assign(_width,_depth,_spectrum,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,z,c,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"xcyz",4)) { > res.assign(_width,_spectrum,_height,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,c,y,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"xczy",4)) { > res.assign(_width,_spectrum,_depth,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,c,z,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yxzc",4)) { > res.assign(_height,_width,_depth,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,x,z,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yxcz",4)) { > res.assign(_height,_width,_spectrum,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,x,c,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yzxc",4)) { > res.assign(_height,_depth,_width,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,z,x,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yzcx",4)) { > res.assign(_height,_depth,_spectrum,_width); > switch (_width) { > case 1 : { > t *ptr_r = res.data(0,0,0,0); > for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { > *(ptr_r++) = (t)*(ptrs++); > } > } break; > case 2 : { > t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1); > for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { > *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); > } > } break; > case 3 : { > t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2); > for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { > *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); *(ptr_b++) = (t)*(ptrs++); > } > } break; > case 4 : { > t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2), *ptr_a = res.data(0,0,0,3); > for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { > *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); *(ptr_b++) = (t)*(ptrs++); *(ptr_a++) = (t)*(ptrs++); > } > } break; > default : { > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,z,c,x,wh,whd) = *(ptrs++); > return res; > } > } > } > if (!cimg::strncasecmp(permut,"ycxz",4)) { > res.assign(_height,_spectrum,_width,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,c,x,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yczx",4)) { > res.assign(_height,_spectrum,_depth,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,c,z,x,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zxyc",4)) { > res.assign(_depth,_width,_height,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,x,y,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zxcy",4)) { > res.assign(_depth,_width,_spectrum,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,x,c,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zyxc",4)) { > res.assign(_depth,_height,_width,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,y,x,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zycx",4)) { > res.assign(_depth,_height,_spectrum,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,y,c,x,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zcxy",4)) { > res.assign(_depth,_spectrum,_width,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,c,x,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zcyx",4)) { > res.assign(_depth,_spectrum,_height,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,c,y,x,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"cxyz",4)) { > res.assign(_spectrum,_width,_height,_depth); > switch (_spectrum) { > case 1 : { > const T *ptr_r = data(0,0,0,0); > t *ptrd = res._data; > for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) *(ptrd++) = (t)*(ptr_r++); > } break; > case 2 : { > const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1); > t *ptrd = res._data; > for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { > *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); > } > } break; > case 3 : { > const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); > t *ptrd = res._data; > for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { > *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); *(ptrd++) = (t)*(ptr_b++); > } > } break; > case 4 : { > const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); > t *ptrd = res._data; > for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { > *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); *(ptrd++) = (t)*(ptr_b++); *(ptrd++) = (t)*(ptr_a++); > } > } break; > default : { > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,x,y,z,wh,whd) = (t)*(ptrs++); > } > } > } > if (!cimg::strncasecmp(permut,"cxzy",4)) { > res.assign(_spectrum,_width,_depth,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,x,z,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"cyxz",4)) { > res.assign(_spectrum,_height,_width,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,y,x,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"cyzx",4)) { > res.assign(_spectrum,_height,_depth,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,y,z,x,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"czxy",4)) { > res.assign(_spectrum,_depth,_width,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,z,x,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"czyx",4)) { > res.assign(_spectrum,_depth,_height,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,z,y,x,wh,whd) = (t)*(ptrs++); > } > if (!res) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "permute_axes(): Invalid specified permutation '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > permut); > return res; > } > > > > > > CImg<T>& unroll(const char axis) { > const unsigned int siz = size(); > if (siz) switch (axis) { > case 'x' : _width = siz; _height = _depth = _spectrum = 1; break; > case 'y' : _height = siz; _width = _depth = _spectrum = 1; break; > case 'z' : _depth = siz; _width = _height = _spectrum = 1; break; > default : _spectrum = siz; _width = _height = _depth = 1; > } > return *this; > } > > > CImg<T> get_unroll(const char axis) const { > return (+*this).unroll(axis); > } ># 21854 "./CImg.h" > CImg<T>& rotate(const float angle, const unsigned int interpolation=1, const unsigned int boundary=0) { > const float nangle = cimg::mod(angle,360.0f); > if (nangle==0.0f) return *this; > return get_rotate(angle,interpolation,boundary).move_to(*this); > } > > > CImg<T> get_rotate(const float angle, const unsigned int interpolation=1, const unsigned int boundary=0) const { > if (is_empty()) return *this; > CImg<T> res; > const float nangle = cimg::mod(angle,360.0f); > if (boundary!=1 && cimg::mod(nangle,90.0f)==0) { > const int wm1 = width() - 1, hm1 = height() - 1; > const int iangle = (int)nangle/90; > switch (iangle) { > case 1 : { > res.assign(_height,_width,_depth,_spectrum); > T *ptrd = res._data; > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(y,hm1-x,z,c); > } break; > case 2 : { > res.assign(_width,_height,_depth,_spectrum); > T *ptrd = res._data; > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(wm1-x,hm1-y,z,c); > } break; > case 3 : { > res.assign(_height,_width,_depth,_spectrum); > T *ptrd = res._data; > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(wm1-y,x,z,c); > } break; > default : > return *this; > } > } else { > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > const float > rad = (float)(nangle*cimg::PI/180.0), > ca = (float)std::cos(rad), > sa = (float)std::sin(rad), > ux = cimg::abs(_width*ca), uy = cimg::abs(_width*sa), > vx = cimg::abs(_height*sa), vy = cimg::abs(_height*ca), > w2 = 0.5f*_width, h2 = 0.5f*_height, > dw2 = 0.5f*(ux+vx), dh2 = 0.5f*(uy+vy); > res.assign((int)(ux+vx),(int)(uy+vy),_depth,_spectrum); > switch (boundary) { > case 0 : { > switch (interpolation) { > case 2 : { ># 21903 "./CImg.h" > ># 21903 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21903 "./CImg.h" ># 21903 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = cubic_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c,0); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { ># 21912 "./CImg.h" > ># 21912 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21912 "./CImg.h" ># 21912 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)linear_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c,0); > } break; > default : { ># 21919 "./CImg.h" > ># 21919 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21919 "./CImg.h" ># 21919 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = atXY((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),(int)(h2 - (x-dw2)*sa + (y-dh2)*ca),z,c,0); > } > } > } break; > case 1 : { > switch (interpolation) { > case 2 : { ># 21930 "./CImg.h" > ># 21930 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21930 "./CImg.h" ># 21930 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = _cubic_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { ># 21939 "./CImg.h" > ># 21939 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21939 "./CImg.h" ># 21939 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)_linear_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c); > } break; > default : { ># 21946 "./CImg.h" > ># 21946 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21946 "./CImg.h" ># 21946 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = _atXY((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),(int)(h2 - (x-dw2)*sa + (y-dh2)*ca),z,c); > } > } > } break; > case 2 : { > switch (interpolation) { > case 2 : { ># 21957 "./CImg.h" > ># 21957 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21957 "./CImg.h" ># 21957 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = _cubic_atXY(cimg::mod(w2 + (x-dw2)*ca + (y-dh2)*sa,(float)width()), > cimg::mod(h2 - (x-dw2)*sa + (y-dh2)*ca,(float)height()),z,c); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { ># 21967 "./CImg.h" > ># 21967 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21967 "./CImg.h" ># 21967 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)_linear_atXY(cimg::mod(w2 + (x-dw2)*ca + (y-dh2)*sa,(float)width()), > cimg::mod(h2 - (x-dw2)*sa + (y-dh2)*ca,(float)height()),z,c); > } break; > default : { ># 21975 "./CImg.h" > ># 21975 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21975 "./CImg.h" ># 21975 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (*this)(cimg::mod((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),width()), > cimg::mod((int)(h2 - (x-dw2)*sa + (y-dh2)*ca),height()),z,c); > } > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "rotate(): Invalid specified border conditions %d " > "(should be { 0=dirichlet | 1=neumann | 2=periodic }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > boundary); > } > } > return res; > } ># 22003 "./CImg.h" > CImg<T>& rotate(const float angle, const float cx, const float cy, const float zoom, > const unsigned int interpolation=1, const unsigned int boundary=3) { > return get_rotate(angle,cx,cy,zoom,interpolation,boundary).move_to(*this); > } > > > CImg<T> get_rotate(const float angle, const float cx, const float cy, const float zoom, > const unsigned int interpolation=1, const unsigned int boundary=3) const { > if (interpolation>2) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "rotate(): Invalid specified interpolation type %d " > "(should be { 0=none | 1=linear | 2=cubic }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > interpolation); > if (is_empty()) return *this; > CImg<T> res(_width,_height,_depth,_spectrum); > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > const float > rad = (float)((angle*cimg::PI)/180.0), > ca = (float)std::cos(rad)/zoom, > sa = (float)std::sin(rad)/zoom; > switch (boundary) { > case 0 : { > switch (interpolation) { > case 2 : { ># 22029 "./CImg.h" > ># 22029 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22029 "./CImg.h" ># 22029 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = cubic_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c,0); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { ># 22038 "./CImg.h" > ># 22038 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22038 "./CImg.h" ># 22038 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)linear_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c,0); > } break; > default : { ># 22045 "./CImg.h" > ># 22045 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22045 "./CImg.h" ># 22045 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = atXY((int)(cx + (x-cx)*ca + (y-cy)*sa),(int)(cy - (x-cx)*sa + (y-cy)*ca),z,c,0); > } > } > } break; > case 1 : { > switch (interpolation) { > case 2 : { ># 22056 "./CImg.h" > ># 22056 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22056 "./CImg.h" ># 22056 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = _cubic_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { ># 22065 "./CImg.h" > ># 22065 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22065 "./CImg.h" ># 22065 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)_linear_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c); > } break; > default : { ># 22072 "./CImg.h" > ># 22072 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22072 "./CImg.h" ># 22072 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = _atXY((int)(cx + (x-cx)*ca + (y-cy)*sa),(int)(cy - (x-cx)*sa + (y-cy)*ca),z,c); > } > } > } break; > case 2 : { > switch (interpolation) { > case 2 : { ># 22083 "./CImg.h" > ># 22083 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22083 "./CImg.h" ># 22083 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = _cubic_atXY(cimg::mod(cx + (x-cx)*ca + (y-cy)*sa,(float)width()), > cimg::mod(cy - (x-cx)*sa + (y-cy)*ca,(float)height()),z,c); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { ># 22093 "./CImg.h" > ># 22093 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22093 "./CImg.h" ># 22093 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)_linear_atXY(cimg::mod(cx + (x-cx)*ca + (y-cy)*sa,(float)width()), > cimg::mod(cy - (x-cx)*sa + (y-cy)*ca,(float)height()),z,c); > } break; > default : { ># 22101 "./CImg.h" > ># 22101 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22101 "./CImg.h" ># 22101 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (*this)(cimg::mod((int)(cx + (x-cx)*ca + (y-cy)*sa),width()), > cimg::mod((int)(cy - (x-cx)*sa + (y-cy)*ca),height()),z,c); > } > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "rotate(): Invalid specified border conditions %d " > "(should be { 0=dirichlet | 1=neumann | 2=periodic }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > boundary); > } > return res; > } ># 22126 "./CImg.h" > template<typename t> > CImg<T>& warp(const CImg<t>& warp, const bool is_relative=false, > const unsigned int interpolation=1, const unsigned int boundary_conditions=0) { > return get_warp(warp,is_relative,interpolation,boundary_conditions).move_to(*this); > } > > > template<typename t> > CImg<T> get_warp(const CImg<t>& warp, const bool is_relative=false, > const unsigned int interpolation=1, const unsigned int boundary_conditions=0) const { > if (is_empty() || !warp) return *this; > if (is_relative && !is_sameXYZ(warp)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "warp(): Instance and specified relative warping field (%u,%u,%u,%u,%p) " > "have different XYZ dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > warp._width,warp._height,warp._depth,warp._spectrum,warp._data); > > CImg<T> res(warp._width,warp._height,warp._depth,_spectrum); > > if (warp._spectrum==1) { > if (is_relative) { > if (interpolation==2) { > if (boundary_conditions==2) ># 22151 "./CImg.h" > ># 22151 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22151 "./CImg.h" ># 22151 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atX(cimg::mod(x - (float)*(ptrs0++),(float)_width),y,z,c); > } > else if (boundary_conditions==1) ># 22159 "./CImg.h" > ># 22159 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22159 "./CImg.h" ># 22159 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atX(x - (float)*(ptrs0++),y,z,c); > } > else ># 22167 "./CImg.h" > ># 22167 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22167 "./CImg.h" ># 22167 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atX(x - (float)*(ptrs0++),y,z,c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) ># 22176 "./CImg.h" > ># 22176 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22176 "./CImg.h" ># 22176 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atX(cimg::mod(x - (float)*(ptrs0++),(float)_width),y,z,c); > } > else if (boundary_conditions==1) ># 22184 "./CImg.h" > ># 22184 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22184 "./CImg.h" ># 22184 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atX(x - (float)*(ptrs0++),y,z,c); > } > else ># 22192 "./CImg.h" > ># 22192 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22192 "./CImg.h" ># 22192 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atX(x - (float)*(ptrs0++),y,z,c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width),y,z,c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atX(x - (int)*(ptrs0++),y,z,c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atX(x - (int)*(ptrs0++),y,z,c,0); > } > } > } else { > if (interpolation==2) { > if (boundary_conditions==2) ># 22219 "./CImg.h" > ># 22219 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22219 "./CImg.h" ># 22219 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atX(cimg::mod((float)*(ptrs0++),(float)_width),0,0,c); > } > else if (boundary_conditions==1) ># 22227 "./CImg.h" > ># 22227 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22227 "./CImg.h" ># 22227 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atX((float)*(ptrs0++),0,0,c); > } > else ># 22235 "./CImg.h" > ># 22235 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22235 "./CImg.h" ># 22235 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atX((float)*(ptrs0++),0,0,c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) ># 22244 "./CImg.h" > ># 22244 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22244 "./CImg.h" ># 22244 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atX(cimg::mod((float)*(ptrs0++),(float)_width),0,0,c); > } > else if (boundary_conditions==1) ># 22252 "./CImg.h" > ># 22252 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22252 "./CImg.h" ># 22252 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atX((float)*(ptrs0++),0,0,c); > } > else ># 22260 "./CImg.h" > ># 22260 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22260 "./CImg.h" ># 22260 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atX((float)*(ptrs0++),0,0,c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width),0,0,c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atX((int)*(ptrs0++),0,0,c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atX((int)*(ptrs0++),0,0,c,0); > } > } > } > > } else if (warp._spectrum==2) { > if (is_relative) { > if (interpolation==2) { > if (boundary_conditions==2) ># 22290 "./CImg.h" > ># 22290 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22290 "./CImg.h" ># 22290 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXY(cimg::mod(x - (float)*(ptrs0++),(float)_width), > cimg::mod(y - (float)*(ptrs1++),(float)_height),z,c); > } > else if (boundary_conditions==1) ># 22299 "./CImg.h" > ># 22299 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22299 "./CImg.h" ># 22299 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c); > } > else ># 22307 "./CImg.h" > ># 22307 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22307 "./CImg.h" ># 22307 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) ># 22316 "./CImg.h" > ># 22316 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22316 "./CImg.h" ># 22316 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXY(cimg::mod(x - (float)*(ptrs0++),(float)_width), > cimg::mod(y - (float)*(ptrs1++),(float)_height),z,c); > } > else if (boundary_conditions==1) ># 22325 "./CImg.h" > ># 22325 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22325 "./CImg.h" ># 22325 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c); > } > else ># 22333 "./CImg.h" > ># 22333 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22333 "./CImg.h" ># 22333 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width), > cimg::mod(y - (int)*(ptrs1++),(int)_height),z,c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atXY(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z,c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atXY(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z,c,0); > } > } > } else { > if (interpolation==2) { > if (boundary_conditions==2) ># 22361 "./CImg.h" > ># 22361 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22361 "./CImg.h" ># 22361 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXY(cimg::mod((float)*(ptrs0++),(float)_width), > cimg::mod((float)*(ptrs1++),(float)_height),0,c); > } > else if (boundary_conditions==1) ># 22370 "./CImg.h" > ># 22370 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22370 "./CImg.h" ># 22370 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c); > } > else ># 22378 "./CImg.h" > ># 22378 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22378 "./CImg.h" ># 22378 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) ># 22387 "./CImg.h" > ># 22387 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22387 "./CImg.h" ># 22387 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXY(cimg::mod((float)*(ptrs0++),(float)_width), > cimg::mod((float)*(ptrs1++),(float)_height),0,c); > } > else if (boundary_conditions==1) ># 22396 "./CImg.h" > ># 22396 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22396 "./CImg.h" ># 22396 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c); > } > else ># 22404 "./CImg.h" > ># 22404 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22404 "./CImg.h" ># 22404 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width), > cimg::mod((int)*(ptrs1++),(int)_height),0,c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atXY((int)*(ptrs0++),(int)*(ptrs1++),0,c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atXY((int)*(ptrs0++),(int)*(ptrs1++),0,c,0); > } > } > } > > } else if (warp._spectrum==3) { > if (is_relative) { > if (interpolation==2) { > if (boundary_conditions==2) ># 22435 "./CImg.h" > ># 22435 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22435 "./CImg.h" ># 22435 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXYZ(cimg::mod(x - (float)*(ptrs0++),(float)_width), > cimg::mod(y - (float)*(ptrs1++),(float)_height), > cimg::mod(z - (float)*(ptrs2++),(float)_depth),c); > } > else if (boundary_conditions==1) ># 22445 "./CImg.h" > ># 22445 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22445 "./CImg.h" ># 22445 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c); > } > else ># 22453 "./CImg.h" > ># 22453 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22453 "./CImg.h" ># 22453 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) ># 22462 "./CImg.h" > ># 22462 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22462 "./CImg.h" ># 22462 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXYZ(cimg::mod(x - (float)*(ptrs0++),(float)_width), > cimg::mod(y - (float)*(ptrs1++),(float)_height), > cimg::mod(z - (float)*(ptrs2++),(float)_depth),c); > } > else if (boundary_conditions==1) ># 22472 "./CImg.h" > ># 22472 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22472 "./CImg.h" ># 22472 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c); > } > else ># 22480 "./CImg.h" > ># 22480 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22480 "./CImg.h" ># 22480 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width), > cimg::mod(y - (int)*(ptrs1++),(int)_height), > cimg::mod(z - (int)*(ptrs2++),(int)_depth),c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atXYZ(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z - (int)*(ptrs2++),c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atXYZ(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z - (int)*(ptrs2++),c,0); > } > } > } else { > if (interpolation==2) { > if (boundary_conditions==2) ># 22509 "./CImg.h" > ># 22509 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22509 "./CImg.h" ># 22509 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXYZ(cimg::mod((float)*(ptrs0++),(float)_width), > cimg::mod((float)*(ptrs1++),(float)_height), > cimg::mod((float)*(ptrs2++),(float)_depth),c); > } > else if (boundary_conditions==1) ># 22519 "./CImg.h" > ># 22519 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22519 "./CImg.h" ># 22519 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); > } > else ># 22527 "./CImg.h" > ># 22527 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22527 "./CImg.h" ># 22527 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) ># 22536 "./CImg.h" > ># 22536 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22536 "./CImg.h" ># 22536 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXYZ(cimg::mod((float)*(ptrs0++),(float)_width), > cimg::mod((float)*(ptrs1++),(float)_height), > cimg::mod((float)*(ptrs2++),(float)_depth),c); > } > else if (boundary_conditions==1) ># 22546 "./CImg.h" > ># 22546 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22546 "./CImg.h" ># 22546 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); > } > else ># 22554 "./CImg.h" > ># 22554 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22554 "./CImg.h" ># 22554 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width), > cimg::mod((int)*(ptrs1++),(int)_height), > cimg::mod((int)*(ptrs2++),(int)_depth),c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atXYZ((int)*(ptrs0++),(int)*(ptrs1++),(int)*(ptrs2++),c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atXYZ((int)*(ptrs0++),(int)*(ptrs1++),(int)*(ptrs2++),c,0); > } > } > } > } > return res; > } > > > > > > > > CImg<T> get_projections2d(const unsigned int x0, const unsigned int y0, const unsigned int z0) const { > if (is_empty() || _depth<2) return +*this; > const unsigned int > _x0 = (x0>=_width)?_width - 1:x0, > _y0 = (y0>=_height)?_height - 1:y0, > _z0 = (z0>=_depth)?_depth - 1:z0; > const CImg<T> > img_xy = get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1), > img_zy = get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1).permute_axes("xzyc").resize(_depth,_height,1,-100,-1), > img_xz = get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1).resize(_width,_depth,1,-100,-1); > return CImg<T>(_width + _depth,_height + _depth,1,_spectrum,cimg::min(img_xy.min(),img_zy.min(),img_xz.min())). > draw_image(0,0,img_xy).draw_image(img_xy._width,0,img_zy). > draw_image(0,img_xy._height,img_xz); > } > > > CImg<T>& projections2d(const unsigned int x0, const unsigned int y0, const unsigned int z0) { > if (_depth<2) return *this; > return get_projections2d(x0,y0,z0).move_to(*this); > } ># 22623 "./CImg.h" > CImg<T>& crop(const int x0, const int y0, const int z0, const int c0, > const int x1, const int y1, const int z1, const int c1, > const bool boundary_conditions=false) { > return get_crop(x0,y0,z0,c0,x1,y1,z1,c1,boundary_conditions).move_to(*this); > } > > > CImg<T> get_crop(const int x0, const int y0, const int z0, const int c0, > const int x1, const int y1, const int z1, const int c1, > const bool boundary_conditions=false) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "crop(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const int > nx0 = x0<x1?x0:x1, nx1 = x0^x1^nx0, > ny0 = y0<y1?y0:y1, ny1 = y0^y1^ny0, > nz0 = z0<z1?z0:z1, nz1 = z0^z1^nz0, > nc0 = c0<c1?c0:c1, nc1 = c0^c1^nc0; > CImg<T> res(1U + nx1 - nx0,1U + ny1 - ny0,1U + nz1 - nz0,1U + nc1 - nc0); > if (nx0<0 || nx1>=width() || ny0<0 || ny1>=height() || nz0<0 || nz1>=depth() || nc0<0 || nc1>=spectrum()) { > if (boundary_conditions) for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) res(x,y,z,c) = _atXYZC(nx0+x,ny0+y,nz0+z,nc0+c); > else res.fill(0).draw_image(-nx0,-ny0,-nz0,-nc0,*this); > } else res.draw_image(-nx0,-ny0,-nz0,-nc0,*this); > return res; > } > > > CImg<T>& crop(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const bool boundary_conditions=false) { > return crop(x0,y0,z0,0,x1,y1,z1,_spectrum-1,boundary_conditions); > } > > > CImg<T> get_crop(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const bool boundary_conditions=false) const { > return get_crop(x0,y0,z0,0,x1,y1,z1,_spectrum-1,boundary_conditions); > } > > > CImg<T>& crop(const int x0, const int y0, > const int x1, const int y1, > const bool boundary_conditions=false) { > return crop(x0,y0,0,0,x1,y1,_depth - 1,_spectrum - 1,boundary_conditions); > } > > > CImg<T> get_crop(const int x0, const int y0, > const int x1, const int y1, > const bool boundary_conditions=false) const { > return get_crop(x0,y0,0,0,x1,y1,_depth - 1,_spectrum - 1,boundary_conditions); > } > > > CImg<T>& crop(const int x0, const int x1, const bool boundary_conditions=false) { > return crop(x0,0,0,0,x1,_height-1,_depth-1,_spectrum-1,boundary_conditions); > } > > > CImg<T> get_crop(const int x0, const int x1, const bool boundary_conditions=false) const { > return get_crop(x0,0,0,0,x1,_height-1,_depth-1,_spectrum-1,boundary_conditions); > } > > > CImg<T>& autocrop(const T value, const char *const axes="czyx") { > if (is_empty()) return *this; > for (const char *s = axes; *s; ++s) { > const char axis = cimg::uncase(*s); > const CImg<intT> coords = _autocrop(value,axis); > if (coords[0]==-1 && coords[1]==-1) return assign(); > else switch (axis) { > case 'x' : { > const int x0 = coords[0], x1 = coords[1]; > if (x0>=0 && x1>=0) crop(x0,x1); > } break; > case 'y' : { > const int y0 = coords[0], y1 = coords[1]; > if (y0>=0 && y1>=0) crop(0,y0,_width-1,y1); > } break; > case 'z' : { > const int z0 = coords[0], z1 = coords[1]; > if (z0>=0 && z1>=0) crop(0,0,z0,_width-1,_height-1,z1); > } break; > default : { > const int c0 = coords[0], c1 = coords[1]; > if (c0>=0 && c1>=0) crop(0,0,0,c0,_width-1,_height-1,_depth-1,c1); > } > } > } > return *this; > } > > > CImg<T> get_autocrop(const T value, const char *const axes="czyx") const { > return (+*this).autocrop(value,axes); > } > > > > > > > CImg<T>& autocrop(const T *const color=0, const char *const axes="zyx") { > if (is_empty()) return *this; > if (!color) { > const CImg<T> col1 = get_vector_at(0,0,0); > const unsigned int w = _width, h = _height, d = _depth, s = _spectrum; > autocrop(col1,axes); > if (_width==w && _height==h && _depth==d && _spectrum==s) { > const CImg<T> col2 = get_vector_at(w-1,h-1,d-1); > autocrop(col2,axes); > } > return *this; > } > for (const char *s = axes; *s; ++s) { > const char axis = cimg::uncase(*s); > switch (axis) { > case 'x' : { > int x0 = width(), x1 = -1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<intT> coords = get_shared_channel(c)._autocrop(color[c],'x'); > const int nx0 = coords[0], nx1 = coords[1]; > if (nx0>=0 && nx1>=0) { x0 = cimg::min(x0,nx0); x1 = cimg::max(x1,nx1); } > } > if (x0==width() && x1==-1) return assign(); else crop(x0,x1); > } break; > case 'y' : { > int y0 = height(), y1 = -1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<intT> coords = get_shared_channel(c)._autocrop(color[c],'y'); > const int ny0 = coords[0], ny1 = coords[1]; > if (ny0>=0 && ny1>=0) { y0 = cimg::min(y0,ny0); y1 = cimg::max(y1,ny1); } > } > if (y0==height() && y1==-1) return assign(); else crop(0,y0,_width-1,y1); > } break; > default : { > int z0 = depth(), z1 = -1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<intT> coords = get_shared_channel(c)._autocrop(color[c],'z'); > const int nz0 = coords[0], nz1 = coords[1]; > if (nz0>=0 && nz1>=0) { z0 = cimg::min(z0,nz0); z1 = cimg::max(z1,nz1); } > } > if (z0==depth() && z1==-1) return assign(); else crop(0,0,z0,_width-1,_height-1,z1); > } > } > } > return *this; > } > > > CImg<T> get_autocrop(const T *const color=0, const char *const axes="zyx") const { > return (+*this).autocrop(color,axes); > } > > > template<typename t> CImg<T>& autocrop(const CImg<t>& color, const char *const axes="zyx") { > return get_autocrop(color,axes).move_to(*this); > } > > > template<typename t> CImg<T> get_autocrop(const CImg<t>& color, const char *const axes="zyx") const { > return get_autocrop(color._data,axes); > } > > CImg<intT> _autocrop(const T value, const char axis) const { > CImg<intT> res; > switch (cimg::uncase(axis)) { > case 'x' : { > int x0 = -1, x1 = -1; > for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) > if ((*this)(x,y,z,c)!=value) { x0 = x; x = width(); y = height(); z = depth(); c = spectrum(); } > if (x0>=0) { > for (int x = width()-1; x>=0; --x) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) > if ((*this)(x,y,z,c)!=value) { x1 = x; x = 0; y = height(); z = depth(); c = spectrum(); } > } > res = CImg<intT>::vector(x0,x1); > } break; > case 'y' : { > int y0 = -1, y1 = -1; > for (int y = 0; y<(int)((*this)._height); ++y) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { y0 = y; x = width(); y = height(); z = depth(); c = spectrum(); } > if (y0>=0) { > for (int y = height()-1; y>=0; --y) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { y1 = y; x = width(); y = 0; z = depth(); c = spectrum(); } > } > res = CImg<intT>::vector(y0,y1); > } break; > case 'z' : { > int z0 = -1, z1 = -1; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { z0 = z; x = width(); y = height(); z = depth(); c = spectrum(); } > if (z0>=0) { > for (int z = depth()-1; z>=0; --z) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { z1 = z; x = width(); y = height(); z = 0; c = spectrum(); } > } > res = CImg<intT>::vector(z0,z1); > } break; > default : { > int c0 = -1, c1 = -1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { c0 = c; x = width(); y = height(); z = depth(); c = spectrum(); } > if (c0>=0) { > for (int c = spectrum()-1; c>=0; --c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { c1 = c; x = width(); y = height(); z = depth(); c = 0; } > } > res = CImg<intT>::vector(c0,c1); > } > } > return res; > } > > > > > > CImg<T> get_column(const int x0) const { > return get_columns(x0,x0); > } > > > CImg<T>& column(const int x0) { > return columns(x0,x0); > } > > > > > > > CImg<T>& columns(const int x0, const int x1) { > return get_columns(x0,x1).move_to(*this); > } > > > CImg<T> get_columns(const int x0, const int x1) const { > return get_crop(x0,0,0,0,x1,height()-1,depth()-1,spectrum()-1); > } > > > CImg<T> get_row(const int y0) const { > return get_rows(y0,y0); > } > > > > > > CImg<T>& row(const int y0) { > return rows(y0,y0); > } > > > > > > > CImg<T> get_rows(const int y0, const int y1) const { > return get_crop(0,y0,0,0,width()-1,y1,depth()-1,spectrum()-1); > } > > > CImg<T>& rows(const int y0, const int y1) { > return get_rows(y0,y1).move_to(*this); > } > > > > > > CImg<T> get_slice(const int z0) const { > return get_slices(z0,z0); > } > > > CImg<T>& slice(const int z0) { > return slices(z0,z0); > } > > > > > > > CImg<T> get_slices(const int z0, const int z1) const { > return get_crop(0,0,z0,0,width()-1,height()-1,z1,spectrum()-1); > } > > > CImg<T>& slices(const int z0, const int z1) { > return get_slices(z0,z1).move_to(*this); > } > > > > > > CImg<T> get_channel(const int c0) const { > return get_channels(c0,c0); > } > > > CImg<T>& channel(const int c0) { > return channels(c0,c0); > } > > > > > > > CImg<T> get_channels(const int c0, const int c1) const { > return get_crop(0,0,0,c0,width()-1,height()-1,depth()-1,c1); > } > > > CImg<T>& channels(const int c0, const int c1) { > return get_channels(c0,c1).move_to(*this); > } > > > CImg<floatT> get_streamline(const float x, const float y, const float z, > const float L=256, const float dl=0.1f, > const unsigned int interpolation_type=2, const bool is_backward_tracking=false, > const bool is_oriented_only=false) const { > if (_spectrum!=2 && _spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "streamline(): Instance is not a 2d or 3d vector field.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (_spectrum==2) { > if (is_oriented_only) { > typename CImg<T>::_functor4d_streamline2d_oriented func(*this); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true,0,0,0,_width-1.0f,_height-1.0f,0.0f); > } else { > typename CImg<T>::_functor4d_streamline2d_directed func(*this); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false,0,0,0,_width-1.0f,_height-1.0f,0.0f); > } > } > if (is_oriented_only) { > typename CImg<T>::_functor4d_streamline3d_oriented func(*this); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true,0,0,0,_width-1.0f,_height-1.0f,_depth-1.0f); > } > typename CImg<T>::_functor4d_streamline3d_directed func(*this); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false,0,0,0,_width-1.0f,_height-1.0f,_depth-1.0f); > } ># 22988 "./CImg.h" > template<typename tfunc> > static CImg<floatT> streamline(const tfunc& func, > const float x, const float y, const float z, > const float L=256, const float dl=0.1f, > const unsigned int interpolation_type=2, const bool is_backward_tracking=false, > const bool is_oriented_only=false, > const float x0=0, const float y0=0, const float z0=0, > const float x1=0, const float y1=0, const float z1=0) { > if (dl<=0) > throw CImgArgumentException("CImg<%s>::streamline(): Invalid specified integration length %g " > "(should be >0).", > pixel_type(), > dl); > > const bool is_bounded = (x0!=x1 || y0!=y1 || z0!=z1); > if (L<=0 || (is_bounded && (x<x0 || x>x1 || y<y0 || y>y1 || z<z0 || z>z1))) return CImg<floatT>(); > const unsigned int size_L = (unsigned int)cimg::round(L/dl+1); > CImg<floatT> coordinates(size_L,3); > const float dl2 = dl/2; > float > *ptr_x = coordinates.data(0,0), > *ptr_y = coordinates.data(0,1), > *ptr_z = coordinates.data(0,2), > pu = (float)(dl*func(x,y,z,0)), > pv = (float)(dl*func(x,y,z,1)), > pw = (float)(dl*func(x,y,z,2)), > X = x, Y = y, Z = z; > > switch (interpolation_type) { > case 0 : { > for (int l = 0; l<(int)((coordinates)._width); ++l) { > *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; > const int > xi = (int)(X>0?X+0.5f:X-0.5f), > yi = (int)(Y>0?Y+0.5f:Y-0.5f), > zi = (int)(Z>0?Z+0.5f:Z-0.5f); > float > u = (float)(dl*func((float)xi,(float)yi,(float)zi,0)), > v = (float)(dl*func((float)xi,(float)yi,(float)zi,1)), > w = (float)(dl*func((float)xi,(float)yi,(float)zi,2)); > if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } > if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } > if (is_bounded && (X<x0 || X>x1 || Y<y0 || Y>y1 || Z<z0 || Z>z1)) break; > } > } break; > case 1 : { > for (int l = 0; l<(int)((coordinates)._width); ++l) { > *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; > float > u = (float)(dl*func(X,Y,Z,0)), > v = (float)(dl*func(X,Y,Z,1)), > w = (float)(dl*func(X,Y,Z,2)); > if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } > if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } > if (is_bounded && (X<x0 || X>x1 || Y<y0 || Y>y1 || Z<z0 || Z>z1)) break; > } > } break; > case 2 : { > for (int l = 0; l<(int)((coordinates)._width); ++l) { > *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; > float > u0 = (float)(dl2*func(X,Y,Z,0)), > v0 = (float)(dl2*func(X,Y,Z,1)), > w0 = (float)(dl2*func(X,Y,Z,2)); > if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } > float > u = (float)(dl*func(X+u0,Y+v0,Z+w0,0)), > v = (float)(dl*func(X+u0,Y+v0,Z+w0,1)), > w = (float)(dl*func(X+u0,Y+v0,Z+w0,2)); > if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } > if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } > if (is_bounded && (X<x0 || X>x1 || Y<y0 || Y>y1 || Z<z0 || Z>z1)) break; > } > } break; > default : { > for (int x = 0; x<(int)((coordinates)._width); ++x) { > *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; > float > u0 = (float)(dl2*func(X,Y,Z,0)), > v0 = (float)(dl2*func(X,Y,Z,1)), > w0 = (float)(dl2*func(X,Y,Z,2)); > if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } > float > u1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,0)), > v1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,1)), > w1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,2)); > if (is_oriented_only && u1*pu + v1*pv + w1*pw<0) { u1 = -u1; v1 = -v1; w1 = -w1; } > float > u2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,0)), > v2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,1)), > w2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,2)); > if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u2 = -u2; v2 = -v2; w2 = -w2; } > float > u3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,0)), > v3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,1)), > w3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,2)); > if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u3 = -u3; v3 = -v3; w3 = -w3; } > const float > u = (u0 + u3)/3 + (u1 + u2)/1.5f, > v = (v0 + v3)/3 + (v1 + v2)/1.5f, > w = (w0 + w3)/3 + (w1 + w2)/1.5f; > if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } > if (is_bounded && (X<x0 || X>x1 || Y<y0 || Y>y1 || Z<z0 || Z>z1)) break; > } > } > } > if (ptr_x!=coordinates.data(0,1)) coordinates.resize((int)(ptr_x-coordinates.data()),3,1,1,0); > return coordinates; > } > > > static CImg<floatT> streamline(const char *const expression, > const float x, const float y, const float z, > const float L=256, const float dl=0.1f, > const unsigned int interpolation_type=2, const bool is_backward_tracking=true, > const bool is_oriented_only=false, > const float x0=0, const float y0=0, const float z0=0, > const float x1=0, const float y1=0, const float z1=0) { > _functor4d_streamline_expr func(expression); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,is_oriented_only,x0,y0,z0,x1,y1,z1); > } > > struct _functor4d_streamline2d_directed { > const CImg<T>& ref; > _functor4d_streamline2d_directed(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z, const unsigned int c) const { > return c<2?(float)ref._linear_atXY(x,y,(int)z,c):0; > } > }; > > struct _functor4d_streamline3d_directed { > const CImg<T>& ref; > _functor4d_streamline3d_directed(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z, const unsigned int c) const { > return (float)ref._linear_atXYZ(x,y,z,c); > } > }; > > struct _functor4d_streamline2d_oriented { > const CImg<T>& ref; > CImg<floatT> *pI; > _functor4d_streamline2d_oriented(const CImg<T>& pref):ref(pref),pI(0) { pI = new CImg<floatT>(2,2,1,2); } > ~_functor4d_streamline2d_oriented() { delete pI; } > float operator()(const float x, const float y, const float z, const unsigned int c) const { > > int > xi = (int)x - (x>=0?0:1), nxi = xi + 1, > yi = (int)y - (y>=0?0:1), nyi = yi + 1, > zi = (int)z; > const float > dx = x - xi, > dy = y - yi; > if (c==0) { > CImg<floatT>& I = *pI; > if (xi<0) xi = 0; if (nxi<0) nxi = 0; > if (xi>=ref.width()) xi = ref.width()-1; if (nxi>=ref.width()) nxi = ref.width()-1; > if (yi<0) yi = 0; if (nyi<0) nyi = 0; > if (yi>=ref.height()) yi = ref.height()-1; if (nyi>=ref.height()) nyi = ref.height()-1; > I(0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,1) = (float)ref(xi,yi,zi,1); > I(1,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,1) = (float)ref(nxi,yi,zi,1); > I(1,1,0) = (float)ref(nxi,nyi,zi,0); I(1,1,1) = (float)ref(nxi,nyi,zi,1); > I(0,1,0) = (float)ref(xi,nyi,zi,0); I(0,1,1) = (float)ref(xi,nyi,zi,1); > if (I(1,0,0)*I(0,0,0)+I(1,0,1)*I(0,0,1)<0) { I(1,0,0) = -I(1,0,0); I(1,0,1) = -I(1,0,1); }; if (I(1,1,0)*I(0,0,0)+I(1,1,1)*I(0,0,1)<0) { I(1,1,0) = -I(1,1,0); I(1,1,1) = -I(1,1,1); }; if (I(0,1,0)*I(0,0,0)+I(0,1,1)*I(0,0,1)<0) { I(0,1,0) = -I(0,1,0); I(0,1,1) = -I(0,1,1); }; > } > return c<2?(float)pI->_linear_atXY(dx,dy,0,c):0; > } > }; > > struct _functor4d_streamline3d_oriented { > const CImg<T>& ref; > CImg<floatT> *pI; > _functor4d_streamline3d_oriented(const CImg<T>& pref):ref(pref),pI(0) { pI = new CImg<floatT>(2,2,2,3); } > ~_functor4d_streamline3d_oriented() { delete pI; } > float operator()(const float x, const float y, const float z, const unsigned int c) const { > > > int > xi = (int)x - (x>=0?0:1), nxi = xi + 1, > yi = (int)y - (y>=0?0:1), nyi = yi + 1, > zi = (int)z - (z>=0?0:1), nzi = zi + 1; > const float > dx = x - xi, > dy = y - yi, > dz = z - zi; > if (c==0) { > CImg<floatT>& I = *pI; > if (xi<0) xi = 0; if (nxi<0) nxi = 0; > if (xi>=ref.width()) xi = ref.width()-1; if (nxi>=ref.width()) nxi = ref.width()-1; > if (yi<0) yi = 0; if (nyi<0) nyi = 0; > if (yi>=ref.height()) yi = ref.height()-1; if (nyi>=ref.height()) nyi = ref.height()-1; > if (zi<0) zi = 0; if (nzi<0) nzi = 0; > if (zi>=ref.depth()) zi = ref.depth()-1; if (nzi>=ref.depth()) nzi = ref.depth()-1; > I(0,0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,0,1) = (float)ref(xi,yi,zi,1); I(0,0,0,2) = (float)ref(xi,yi,zi,2); > I(1,0,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,0,1) = (float)ref(nxi,yi,zi,1); I(1,0,0,2) = (float)ref(nxi,yi,zi,2); > I(1,1,0,0) = (float)ref(nxi,nyi,zi,0); I(1,1,0,1) = (float)ref(nxi,nyi,zi,1); I(1,1,0,2) = (float)ref(nxi,nyi,zi,2); > I(0,1,0,0) = (float)ref(xi,nyi,zi,0); I(0,1,0,1) = (float)ref(xi,nyi,zi,1); I(0,1,0,2) = (float)ref(xi,nyi,zi,2); > I(0,0,1,0) = (float)ref(xi,yi,nzi,0); I(0,0,1,1) = (float)ref(xi,yi,nzi,1); I(0,0,1,2) = (float)ref(xi,yi,nzi,2); > I(1,0,1,0) = (float)ref(nxi,yi,nzi,0); I(1,0,1,1) = (float)ref(nxi,yi,nzi,1); I(1,0,1,2) = (float)ref(nxi,yi,nzi,2); > I(1,1,1,0) = (float)ref(nxi,nyi,nzi,0); I(1,1,1,1) = (float)ref(nxi,nyi,nzi,1); I(1,1,1,2) = (float)ref(nxi,nyi,nzi,2); > I(0,1,1,0) = (float)ref(xi,nyi,nzi,0); I(0,1,1,1) = (float)ref(xi,nyi,nzi,1); I(0,1,1,2) = (float)ref(xi,nyi,nzi,2); > if (I(1,0,0,0)*I(0,0,0,0)+I(1,0,0,1)*I(0,0,0,1)+I(1,0,0,2)*I(0,0,0,2)<0) { I(1,0,0,0) = -I(1,0,0,0); I(1,0,0,1) = -I(1,0,0,1); I(1,0,0,2) = -I(1,0,0,2); }; if (I(1,1,0,0)*I(0,0,0,0)+I(1,1,0,1)*I(0,0,0,1)+I(1,1,0,2)*I(0,0,0,2)<0) { I(1,1,0,0) = -I(1,1,0,0); I(1,1,0,1) = -I(1,1,0,1); I(1,1,0,2) = -I(1,1,0,2); }; if (I(0,1,0,0)*I(0,0,0,0)+I(0,1,0,1)*I(0,0,0,1)+I(0,1,0,2)*I(0,0,0,2)<0) { I(0,1,0,0) = -I(0,1,0,0); I(0,1,0,1) = -I(0,1,0,1); I(0,1,0,2) = -I(0,1,0,2); }; > if (I(0,0,1,0)*I(0,0,0,0)+I(0,0,1,1)*I(0,0,0,1)+I(0,0,1,2)*I(0,0,0,2)<0) { I(0,0,1,0) = -I(0,0,1,0); I(0,0,1,1) = -I(0,0,1,1); I(0,0,1,2) = -I(0,0,1,2); }; if (I(1,0,1,0)*I(0,0,0,0)+I(1,0,1,1)*I(0,0,0,1)+I(1,0,1,2)*I(0,0,0,2)<0) { I(1,0,1,0) = -I(1,0,1,0); I(1,0,1,1) = -I(1,0,1,1); I(1,0,1,2) = -I(1,0,1,2); }; if (I(1,1,1,0)*I(0,0,0,0)+I(1,1,1,1)*I(0,0,0,1)+I(1,1,1,2)*I(0,0,0,2)<0) { I(1,1,1,0) = -I(1,1,1,0); I(1,1,1,1) = -I(1,1,1,1); I(1,1,1,2) = -I(1,1,1,2); }; if (I(0,1,1,0)*I(0,0,0,0)+I(0,1,1,1)*I(0,0,0,1)+I(0,1,1,2)*I(0,0,0,2)<0) { I(0,1,1,0) = -I(0,1,1,0); I(0,1,1,1) = -I(0,1,1,1); I(0,1,1,2) = -I(0,1,1,2); }; > } > return (float)pI->_linear_atXYZ(dx,dy,dz,c); > } > }; > > struct _functor4d_streamline_expr { > _cimg_math_parser *mp; > ~_functor4d_streamline_expr() { delete mp; } > _functor4d_streamline_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg<T>::empty(),expr,"streamline"); } > float operator()(const float x, const float y, const float z, const unsigned int c) const { > return (float)(*mp)(x,y,z,c); > } > }; ># 23212 "./CImg.h" > CImg<T> get_shared_points(const unsigned int x0, const unsigned int x1, > const unsigned int y0=0, const unsigned int z0=0, const unsigned int c0=0) { > const unsigned int beg = (unsigned int)offset(x0,y0,z0,c0), end = offset(x1,y0,z0,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_points(): Invalid request of a shared-memory subset (%u->%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > x0,x1,y0,z0,c0); > > return CImg<T>(_data+beg,x1-x0+1,1,1,1,true); > } > > > const CImg<T> get_shared_points(const unsigned int x0, const unsigned int x1, > const unsigned int y0=0, const unsigned int z0=0, const unsigned int c0=0) const { > const unsigned int beg = (unsigned int)offset(x0,y0,z0,c0), end = offset(x1,y0,z0,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_points(): Invalid request of a shared-memory subset (%u->%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > x0,x1,y0,z0,c0); > > return CImg<T>(_data+beg,x1-x0+1,1,1,1,true); > } ># 23244 "./CImg.h" > CImg<T> get_shared_rows(const unsigned int y0, const unsigned int y1, > const unsigned int z0=0, const unsigned int c0=0) { > const unsigned int beg = offset(0,y0,z0,c0), end = offset(0,y1,z0,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_rows(): Invalid request of a shared-memory subset (0->%u,%u->%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,y0,y1,z0,c0); > > return CImg<T>(_data+beg,_width,y1-y0+1,1,1,true); > } > > > const CImg<T> get_shared_rows(const unsigned int y0, const unsigned int y1, > const unsigned int z0=0, const unsigned int c0=0) const { > const unsigned int beg = offset(0,y0,z0,c0), end = offset(0,y1,z0,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_rows(): Invalid request of a shared-memory subset (0->%u,%u->%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,y0,y1,z0,c0); > > return CImg<T>(_data+beg,_width,y1-y0+1,1,1,true); > } > > > > > > > > CImg<T> get_shared_row(const unsigned int y0, const unsigned int z0=0, const unsigned int c0=0) { > return get_shared_rows(y0,y0,z0,c0); > } > > > const CImg<T> get_shared_row(const unsigned int y0, const unsigned int z0=0, const unsigned int c0=0) const { > return get_shared_rows(y0,y0,z0,c0); > } > > > > > > > > CImg<T> get_shared_slices(const unsigned int z0, const unsigned int z1, const unsigned int c0=0) { > const unsigned int beg = offset(0,0,z0,c0), end = offset(0,0,z1,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_slices(): Invalid request of a shared-memory subset (0->%u,0->%u,%u->%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,_height-1,z0,z1,c0); > > return CImg<T>(_data+beg,_width,_height,z1-z0+1,1,true); > } > > > const CImg<T> get_shared_slices(const unsigned int z0, const unsigned int z1, const unsigned int c0=0) const { > const unsigned int beg = offset(0,0,z0,c0), end = offset(0,0,z1,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_slices(): Invalid request of a shared-memory subset (0->%u,0->%u,%u->%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,_height-1,z0,z1,c0); > > return CImg<T>(_data+beg,_width,_height,z1-z0+1,1,true); > } > > > > > > > CImg<T> get_shared_slice(const unsigned int z0, const unsigned int c0=0) { > return get_shared_slices(z0,z0,c0); > } > > > const CImg<T> get_shared_slice(const unsigned int z0, const unsigned int c0=0) const { > return get_shared_slices(z0,z0,c0); > } > > > > > > > CImg<T> get_shared_channels(const unsigned int c0, const unsigned int c1) { > const unsigned int beg = offset(0,0,0,c0), end = offset(0,0,0,c1); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_channels(): Invalid request of a shared-memory subset (0->%u,0->%u,0->%u,%u->%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,_height-1,_depth-1,c0,c1); > > return CImg<T>(_data+beg,_width,_height,_depth,c1-c0+1,true); > } > > > const CImg<T> get_shared_channels(const unsigned int c0, const unsigned int c1) const { > const unsigned int beg = offset(0,0,0,c0), end = offset(0,0,0,c1); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_channels(): Invalid request of a shared-memory subset (0->%u,0->%u,0->%u,%u->%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,_height-1,_depth-1,c0,c1); > > return CImg<T>(_data+beg,_width,_height,_depth,c1-c0+1,true); > } > > > > > > CImg<T> get_shared_channel(const unsigned int c0) { > return get_shared_channels(c0,c0); > } > > > const CImg<T> get_shared_channel(const unsigned int c0) const { > return get_shared_channels(c0,c0); > } > > > CImg<T> get_shared() { > return CImg<T>(_data,_width,_height,_depth,_spectrum,true); > } > > > const CImg<T> get_shared() const { > return CImg<T>(_data,_width,_height,_depth,_spectrum,true); > } ># 23387 "./CImg.h" > CImgList<T> get_split(const char axis, const int nb=0) const { > CImgList<T> res; > if (is_empty()) return res; > const char _axis = cimg::uncase(axis); > > if (nb<=0) { > const unsigned int dp = (unsigned int)(nb?-nb:1); > switch (_axis) { > case 'x': { > res.assign(_width/dp+(_width%dp?1:0),1,1); > const unsigned int pe = _width - dp; ># 23399 "./CImg.h" > ># 23399 "./CImg.h" >#pragma omp parallel for if (res._width>=128 && _height*_depth*_spectrum>=128) ># 23399 "./CImg.h" ># 23399 "./CImg.h" > > > for (unsigned int p = 0; p<pe; p+=dp) get_crop(p,0,0,0,p+dp-1,_height-1,_depth-1,_spectrum-1).move_to(res[p/dp]); > get_crop((res._width-1)*dp,0,0,0,_width-1,_height-1,_depth-1,_spectrum-1).move_to(res.back()); > } break; > case 'y': { > res.assign(_height/dp+(_height%dp?1:0),1,1); > const unsigned int pe = _height - dp; ># 23408 "./CImg.h" > ># 23408 "./CImg.h" >#pragma omp parallel for if (res._width>=128 && _width*_depth*_spectrum>=128) ># 23408 "./CImg.h" ># 23408 "./CImg.h" > > > for (unsigned int p = 0; p<pe; p+=dp) get_crop(0,p,0,0,_width-1,p+dp-1,_depth-1,_spectrum-1).move_to(res[p/dp]); > get_crop(0,(res._width-1)*dp,0,0,_width-1,_height-1,_depth-1,_spectrum-1).move_to(res.back()); > } break; > case 'z': { > res.assign(_depth/dp+(_depth%dp?1:0),1,1); > const unsigned int pe = _depth - dp; ># 23417 "./CImg.h" > ># 23417 "./CImg.h" >#pragma omp parallel for if (res._width>=128 && _width*_height*_spectrum>=128) ># 23417 "./CImg.h" ># 23417 "./CImg.h" > > > for (unsigned int p = 0; p<pe; p+=dp) get_crop(0,0,p,0,_width-1,_height-1,p+dp-1,_spectrum-1).move_to(res[p/dp]); > get_crop(0,0,(res._width-1)*dp,0,_width-1,_height-1,_depth-1,_spectrum-1).move_to(res.back()); > } break; > default : { > res.assign(_spectrum/dp+(_spectrum%dp?1:0),1,1); > const unsigned int pe = _spectrum - dp; ># 23426 "./CImg.h" > ># 23426 "./CImg.h" >#pragma omp parallel for if (res._width>=128 && _width*_height*_depth>=128) ># 23426 "./CImg.h" ># 23426 "./CImg.h" > > > for (unsigned int p = 0; p<pe; p+=dp) get_crop(0,0,0,p,_width-1,_height-1,_depth-1,p+dp-1).move_to(res[p/dp]); > get_crop(0,0,0,(res._width-1)*dp,_width-1,_height-1,_depth-1,_spectrum-1).move_to(res.back()); > } > } > } else { > const unsigned int siz = _axis=='x'?_width:_axis=='y'?_height:_axis=='z'?_depth:_axis=='c'?_spectrum:0; > if ((unsigned int)nb>siz) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_split(): Instance cannot be split along %c-axis into %u blocs.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis,nb); > int err = (int)siz; > unsigned int _p = 0; > switch (_axis) { > case 'x' : { > for (int p = 0; p<(int)((*this)._width); ++p) if ((err-=nb)<=0) { > get_crop(_p,0,0,0,p,_height-1,_depth-1,_spectrum-1).move_to(res); > err+=(int)siz; > _p=p+1; > } > } break; > case 'y' : { > for (int p = 0; p<(int)((*this)._height); ++p) if ((err-=nb)<=0) { > get_crop(0,_p,0,0,_width-1,p,_depth-1,_spectrum-1).move_to(res); > err+=(int)siz; > _p=p+1; > } > } break; > case 'z' : { > for (int p = 0; p<(int)((*this)._depth); ++p) if ((err-=nb)<=0) { > get_crop(0,0,_p,0,_width-1,_height-1,p,_spectrum-1).move_to(res); > err+=(int)siz; > _p=p+1; > } > } break; > default : { > for (int p = 0; p<(int)((*this)._spectrum); ++p) if ((err-=nb)<=0) { > get_crop(0,0,0,_p,_width-1,_height-1,_depth-1,p).move_to(res); > err+=(int)siz; > _p=p+1; > } > } > } > } > return res; > } > > > > > > > > CImgList<T> get_split(const T value, const bool keep_values, const bool is_shared) const { > CImgList<T> res; > if (is_empty()) return res; > for (const T *ps = _data, *_ps = ps, *const pe = end(); ps<pe; ) { > while (_ps<pe && *_ps==value) ++_ps; > unsigned int siz = _ps - ps; > if (siz && keep_values) res.insert(CImg<T>(ps,1,siz,1,1,is_shared),~0U,is_shared); > ps = _ps; > while (_ps<pe && *_ps!=value) ++_ps; > siz = _ps - ps; > if (siz) res.insert(CImg<T>(ps,1,siz,1,1,is_shared),~0U,is_shared); > ps = _ps; > } > return res; > } > > > > > > > > template<typename t> > CImgList<T> get_split(const CImg<t>& values, const bool keep_values, const bool is_shared) const { > CImgList<T> res; > if (is_empty()) return res; > if (!values) return CImgList<T>(*this); > if (values.size()==1) return get_split(*values,keep_values,is_shared); > const t *pve = values.end(); > for (const T *ps = _data, *_ps = ps, *const pe = end(); ps<pe; ) { > > > const t *pv = 0; > do { > pv = values._data; > const T *__ps = _ps; > while (__ps<pe && pv<pve && *__ps==(T)*pv) { ++__ps; ++pv; } > if (pv==pve) _ps = __ps; > } while (pv==pve); > unsigned int siz = _ps - ps; > if (siz && keep_values) res.insert(CImg<T>(ps,1,siz,1,1,is_shared),~0U,is_shared); > ps = _ps; > > > do { > pv = values._data; > while (_ps<pe && *_ps!=(T)*pv) ++_ps; > if (_ps<pe) { > const T *__ps = _ps + 1; > ++pv; > while (__ps<pe && pv<pve && *__ps==(T)*pv) { ++__ps; ++pv; } > if (pv!=pve) _ps = __ps; > } > } while (_ps<pe && pv!=pve); > > > siz = _ps - ps; > if (siz) res.insert(CImg<T>(ps,1,siz,1,1,is_shared),~0U,is_shared); > ps = _ps; > } > return res; > } > > > CImgList<T> get_split(const bool is_shared) const { > CImgList<T> res; > if (is_empty()) return res; > T *p0 = _data, current = *p0; > for (T *p = (*this)._data, *_maxp = (*this)._data + (*this).size(); p<_maxp; ++p) if (*p!=current) { res.insert(CImg<T>(p0,1,p-p0,1,1,is_shared),~0U,is_shared); p0 = p; current = *p; } > res.insert(CImg<T>(p0,1,end()-p0,1,1,is_shared),~0U,is_shared); > return res; > } > > > > > > > > template<typename t> > CImg<T>& append(const CImg<t>& img, const char axis='x', const float align=0) { > if (is_empty()) return assign(img,false); > if (!img) return *this; > return CImgList<T>(*this,true).insert(img).get_append(axis,align).move_to(*this); > } > > > CImg<T>& append(const CImg<T>& img, const char axis='x', const float align=0) { > if (is_empty()) return assign(img,false); > if (!img) return *this; > return CImgList<T>(*this,img,true).get_append(axis,align).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_append(const CImg<T>& img, const char axis='x', const float align=0) const { > if (is_empty()) return +img; > if (!img) return +*this; > return CImgList<typename cimg::superset<T,t>::type>(*this,true).insert(img).get_append(axis,align); > } > > > CImg<T> get_append(const CImg<T>& img, const char axis='x', const float align=0) const { > if (is_empty()) return +img; > if (!img) return +*this; > return CImgList<T>(*this,img,true).get_append(axis,align); > } ># 23605 "./CImg.h" > template<typename t> > CImg<T>& correlate(const CImg<t>& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { > if (is_empty() || !mask) return *this; > return get_correlate(mask,boundary_conditions,is_normalized).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset2<T,t,float>::type> get_correlate(const CImg<t>& mask, const unsigned int boundary_conditions=1, > const bool is_normalized=false) const { > if (is_empty() || !mask) return *this; > typedef typename cimg::superset2<T,t,float>::type Ttfloat; > CImg<Ttfloat> res(_width,_height,_depth,cimg::max(_spectrum,mask._spectrum)); > if (boundary_conditions && mask._width==mask._height && ((mask._depth==1 && mask._width<=5) || (mask._depth==mask._width && mask._width<=3))) { > > Ttfloat *ptrd = res._data; > switch (mask._depth) { > case 3 : { > T I[27] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0, _p1z = 0, _n1z = 1>=((_img)._depth)?(int)((_img)._depth)-1:1; _n1z<(int)((_img)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,_p1z,0)), (I[3] = I[4] = (T)(_img)(0,y,_p1z,0)), (I[6] = I[7] = (T)(_img)(0,_n1y,_p1z,0)), (I[9] = I[10] = (T)(_img)(0,_p1y,z,0)), (I[12] = I[13] = (T)(_img)(0,y,z,0)), (I[15] = I[16] = (T)(_img)(0,_n1y,z,0)), (I[18] = I[19] = (T)(_img)(0,_p1y,_n1z,0)), (I[21] = I[22] = (T)(_img)(0,y,_n1z,0)), (I[24] = I[25] = (T)(_img)(0,_n1y,_n1z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[2] = (T)(_img)(_n1x,_p1y,_p1z,0)), (I[5] = (T)(_img)(_n1x,y,_p1z,0)), (I[8] = (T)(_img)(_n1x,_n1y,_p1z,0)), (I[11] = (T)(_img)(_n1x,_p1y,z,0)), (I[14] = (T)(_img)(_n1x,y,z,0)), (I[17] = (T)(_img)(_n1x,_n1y,z,0)), (I[20] = (T)(_img)(_n1x,_p1y,_n1z,0)), (I[23] = (T)(_img)(_n1x,y,_n1z,0)), (I[26] = (T)(_img)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + > I[ 3]*I[ 3] + I[ 4]*I[ 4] + I[ 5]*I[ 5] + > I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + > I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + > I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + > I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + > I[18]*I[18] + I[19]*I[19] + I[20]*I[20] + > I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + > I[24]*I[24] + I[25]*I[25] + I[26]*I[26]); > *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + > I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + > I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + > I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + > I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + > I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + > I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + > I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26])/std::sqrt(N):0); > } > } else for (int z = 0, _p1z = 0, _n1z = 1>=((_img)._depth)?(int)((_img)._depth)-1:1; _n1z<(int)((_img)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,_p1z,0)), (I[3] = I[4] = (T)(_img)(0,y,_p1z,0)), (I[6] = I[7] = (T)(_img)(0,_n1y,_p1z,0)), (I[9] = I[10] = (T)(_img)(0,_p1y,z,0)), (I[12] = I[13] = (T)(_img)(0,y,z,0)), (I[15] = I[16] = (T)(_img)(0,_n1y,z,0)), (I[18] = I[19] = (T)(_img)(0,_p1y,_n1z,0)), (I[21] = I[22] = (T)(_img)(0,y,_n1z,0)), (I[24] = I[25] = (T)(_img)(0,_n1y,_n1z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[2] = (T)(_img)(_n1x,_p1y,_p1z,0)), (I[5] = (T)(_img)(_n1x,y,_p1z,0)), (I[8] = (T)(_img)(_n1x,_n1y,_p1z,0)), (I[11] = (T)(_img)(_n1x,_p1y,z,0)), (I[14] = (T)(_img)(_n1x,y,z,0)), (I[17] = (T)(_img)(_n1x,_n1y,z,0)), (I[20] = (T)(_img)(_n1x,_p1y,_n1z,0)), (I[23] = (T)(_img)(_n1x,y,_n1z,0)), (I[26] = (T)(_img)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) > *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + > I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + > I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + > I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + > I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + > I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + > I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + > I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26]); > } > } break; > case 2 : { > T I[8] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0, _n1z = 1>=((_img)._depth)?(int)((_img)._depth)-1:1; _n1z<(int)((_img)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(_img)(0,y,z,0)), (I[2] = (T)(_img)(0,_n1y,z,0)), (I[4] = (T)(_img)(0,y,_n1z,0)), (I[6] = (T)(_img)(0,_n1y,_n1z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[1] = (T)(_img)(_n1x,y,z,0)), (I[3] = (T)(_img)(_n1x,_n1y,z,0)), (I[5] = (T)(_img)(_n1x,y,_n1z,0)), (I[7] = (T)(_img)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], ++x, ++_n1x) { > const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + > I[2]*I[2] + I[3]*I[3] + > I[4]*I[4] + I[5]*I[5] + > I[6]*I[6] + I[7]*I[7]); > *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + > I[2]*_mask[2] + I[3]*_mask[3] + > I[4]*_mask[4] + I[5]*_mask[5] + > I[6]*_mask[6] + I[7]*_mask[7])/std::sqrt(N):0); > } > } else for (int z = 0, _n1z = 1>=((_img)._depth)?(int)((_img)._depth)-1:1; _n1z<(int)((_img)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(_img)(0,y,z,0)), (I[2] = (T)(_img)(0,_n1y,z,0)), (I[4] = (T)(_img)(0,y,_n1z,0)), (I[6] = (T)(_img)(0,_n1y,_n1z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[1] = (T)(_img)(_n1x,y,z,0)), (I[3] = (T)(_img)(_n1x,_n1y,z,0)), (I[5] = (T)(_img)(_n1x,y,_n1z,0)), (I[7] = (T)(_img)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], ++x, ++_n1x) > *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + > I[2]*_mask[2] + I[3]*_mask[3] + > I[4]*_mask[4] + I[5]*_mask[5] + > I[6]*_mask[6] + I[7]*_mask[7]); > } > } break; > default : > case 1 : > switch (mask._width) { > case 6 : { > T I[36] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2, _n3y = 3>=((_img)._height)?(int)((_img)._height)-1:3; _n3y<(int)((_img)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = 2>=(_img)._width?(_img).width()-1:2, _n3x = (int)( (I[0] = I[1] = I[2] = (T)(_img)(_p2x,_p2y,z,0)), (I[6] = I[7] = I[8] = (T)(_img)(0,_p1y,z,0)), (I[12] = I[13] = I[14] = (T)(_img)(0,y,z,0)), (I[18] = I[19] = I[20] = (T)(_img)(0,_n1y,z,0)), (I[24] = I[25] = I[26] = (T)(_img)(0,_n2y,z,0)), (I[30] = I[31] = I[32] = (T)(_img)(0,_n3y,z,0)), (I[3] = (T)(_img)(_n1x,_p2y,z,0)), (I[9] = (T)(_img)(_n1x,_p1y,z,0)), (I[15] = (T)(_img)(_n1x,y,z,0)), (I[21] = (T)(_img)(_n1x,_n1y,z,0)), (I[27] = (T)(_img)(_n1x,_n2y,z,0)), (I[33] = (T)(_img)(_n1x,_n3y,z,0)), (I[4] = (T)(_img)(_n2x,_p2y,z,0)), (I[10] = (T)(_img)(_n2x,_p1y,z,0)), (I[16] = (T)(_img)(_n2x,y,z,0)), (I[22] = (T)(_img)(_n2x,_n1y,z,0)), (I[28] = (T)(_img)(_n2x,_n2y,z,0)), (I[34] = (T)(_img)(_n2x,_n3y,z,0)), 3>=(_img)._width?(_img).width()-1:3); (_n3x<(_img).width() && ( (I[5] = (T)(_img)(_n3x,_p2y,z,0)), (I[11] = (T)(_img)(_n3x,_p1y,z,0)), (I[17] = (T)(_img)(_n3x,y,z,0)), (I[23] = (T)(_img)(_n3x,_n1y,z,0)), (I[29] = (T)(_img)(_n3x,_n2y,z,0)), (I[35] = (T)(_img)(_n3x,_n3y,z,0)),1)) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { > const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + I[ 4]*I[ 4] + I[ 5]*I[ 5] + > I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + > I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + > I[18]*I[18] + I[19]*I[19] + I[20]*I[20] + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + > I[24]*I[24] + I[25]*I[25] + I[26]*I[26] + I[27]*I[27] + I[28]*I[28] + I[29]*I[29] + > I[30]*I[30] + I[31]*I[31] + I[32]*I[32] + I[33]*I[33] + I[34]*I[34] + I[35]*I[35]); > *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + > I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + > I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + > I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26] + I[27]*_mask[27] + I[28]*_mask[28] + I[29]*_mask[29] + > I[30]*_mask[30] + I[31]*_mask[31] + I[32]*_mask[32] + I[33]*_mask[33] + I[34]*_mask[34] + I[35]*_mask[35])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2, _n3y = 3>=((_img)._height)?(int)((_img)._height)-1:3; _n3y<(int)((_img)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = 2>=(_img)._width?(_img).width()-1:2, _n3x = (int)( (I[0] = I[1] = I[2] = (T)(_img)(_p2x,_p2y,z,0)), (I[6] = I[7] = I[8] = (T)(_img)(0,_p1y,z,0)), (I[12] = I[13] = I[14] = (T)(_img)(0,y,z,0)), (I[18] = I[19] = I[20] = (T)(_img)(0,_n1y,z,0)), (I[24] = I[25] = I[26] = (T)(_img)(0,_n2y,z,0)), (I[30] = I[31] = I[32] = (T)(_img)(0,_n3y,z,0)), (I[3] = (T)(_img)(_n1x,_p2y,z,0)), (I[9] = (T)(_img)(_n1x,_p1y,z,0)), (I[15] = (T)(_img)(_n1x,y,z,0)), (I[21] = (T)(_img)(_n1x,_n1y,z,0)), (I[27] = (T)(_img)(_n1x,_n2y,z,0)), (I[33] = (T)(_img)(_n1x,_n3y,z,0)), (I[4] = (T)(_img)(_n2x,_p2y,z,0)), (I[10] = (T)(_img)(_n2x,_p1y,z,0)), (I[16] = (T)(_img)(_n2x,y,z,0)), (I[22] = (T)(_img)(_n2x,_n1y,z,0)), (I[28] = (T)(_img)(_n2x,_n2y,z,0)), (I[34] = (T)(_img)(_n2x,_n3y,z,0)), 3>=(_img)._width?(_img).width()-1:3); (_n3x<(_img).width() && ( (I[5] = (T)(_img)(_n3x,_p2y,z,0)), (I[11] = (T)(_img)(_n3x,_p1y,z,0)), (I[17] = (T)(_img)(_n3x,y,z,0)), (I[23] = (T)(_img)(_n3x,_n1y,z,0)), (I[29] = (T)(_img)(_n3x,_n2y,z,0)), (I[35] = (T)(_img)(_n3x,_n3y,z,0)),1)) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) > *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + > I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + > I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + > I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26] + I[27]*_mask[27] + I[28]*_mask[28] + I[29]*_mask[29] + > I[30]*_mask[30] + I[31]*_mask[31] + I[32]*_mask[32] + I[33]*_mask[33] + I[34]*_mask[34] + I[35]*_mask[35]); > } > } break; > case 5 : { > T I[25] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2; _n2y<(int)((_img)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = (int)( (I[0] = I[1] = I[2] = (T)(_img)(_p2x,_p2y,z,0)), (I[5] = I[6] = I[7] = (T)(_img)(0,_p1y,z,0)), (I[10] = I[11] = I[12] = (T)(_img)(0,y,z,0)), (I[15] = I[16] = I[17] = (T)(_img)(0,_n1y,z,0)), (I[20] = I[21] = I[22] = (T)(_img)(0,_n2y,z,0)), (I[3] = (T)(_img)(_n1x,_p2y,z,0)), (I[8] = (T)(_img)(_n1x,_p1y,z,0)), (I[13] = (T)(_img)(_n1x,y,z,0)), (I[18] = (T)(_img)(_n1x,_n1y,z,0)), (I[23] = (T)(_img)(_n1x,_n2y,z,0)), 2>=(_img)._width?(_img).width()-1:2); (_n2x<(_img).width() && ( (I[4] = (T)(_img)(_n2x,_p2y,z,0)), (I[9] = (T)(_img)(_n2x,_p1y,z,0)), (I[14] = (T)(_img)(_n2x,y,z,0)), (I[19] = (T)(_img)(_n2x,_n1y,z,0)), (I[24] = (T)(_img)(_n2x,_n2y,z,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) { > const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + I[ 4]*I[ 4] + > I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + I[ 9]*I[ 9] + > I[10]*I[10] + I[11]*I[11] + I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + > I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + I[18]*I[18] + I[19]*I[19] + > I[20]*I[20] + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + I[24]*I[24]); > *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + > I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + > I[10]*_mask[10] + I[11]*_mask[11] + I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + > I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + I[18]*_mask[18] + I[19]*_mask[19] + > I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + I[24]*_mask[24])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2; _n2y<(int)((_img)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = (int)( (I[0] = I[1] = I[2] = (T)(_img)(_p2x,_p2y,z,0)), (I[5] = I[6] = I[7] = (T)(_img)(0,_p1y,z,0)), (I[10] = I[11] = I[12] = (T)(_img)(0,y,z,0)), (I[15] = I[16] = I[17] = (T)(_img)(0,_n1y,z,0)), (I[20] = I[21] = I[22] = (T)(_img)(0,_n2y,z,0)), (I[3] = (T)(_img)(_n1x,_p2y,z,0)), (I[8] = (T)(_img)(_n1x,_p1y,z,0)), (I[13] = (T)(_img)(_n1x,y,z,0)), (I[18] = (T)(_img)(_n1x,_n1y,z,0)), (I[23] = (T)(_img)(_n1x,_n2y,z,0)), 2>=(_img)._width?(_img).width()-1:2); (_n2x<(_img).width() && ( (I[4] = (T)(_img)(_n2x,_p2y,z,0)), (I[9] = (T)(_img)(_n2x,_p1y,z,0)), (I[14] = (T)(_img)(_n2x,y,z,0)), (I[19] = (T)(_img)(_n2x,_n1y,z,0)), (I[24] = (T)(_img)(_n2x,_n2y,z,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) > *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + > I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + > I[10]*_mask[10] + I[11]*_mask[11] + I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + > I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + I[18]*_mask[18] + I[19]*_mask[19] + > I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + I[24]*_mask[24]); > } > } break; > case 4 : { > T I[16] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2; _n2y<(int)((_img)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,z,0)), (I[4] = I[5] = (T)(_img)(0,y,z,0)), (I[8] = I[9] = (T)(_img)(0,_n1y,z,0)), (I[12] = I[13] = (T)(_img)(0,_n2y,z,0)), (I[2] = (T)(_img)(_n1x,_p1y,z,0)), (I[6] = (T)(_img)(_n1x,y,z,0)), (I[10] = (T)(_img)(_n1x,_n1y,z,0)), (I[14] = (T)(_img)(_n1x,_n2y,z,0)), 2>=(_img)._width?(_img).width()-1:2); (_n2x<(_img).width() && ( (I[3] = (T)(_img)(_n2x,_p1y,z,0)), (I[7] = (T)(_img)(_n2x,y,z,0)), (I[11] = (T)(_img)(_n2x,_n1y,z,0)), (I[15] = (T)(_img)(_n2x,_n2y,z,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[14] = I[15], _p1x = x++, ++_n1x, ++_n2x) { > const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + > I[ 4]*I[ 4] + I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + > I[ 8]*I[ 8] + I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + > I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + I[15]*I[15]); > *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + > I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + > I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2; _n2y<(int)((_img)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,z,0)), (I[4] = I[5] = (T)(_img)(0,y,z,0)), (I[8] = I[9] = (T)(_img)(0,_n1y,z,0)), (I[12] = I[13] = (T)(_img)(0,_n2y,z,0)), (I[2] = (T)(_img)(_n1x,_p1y,z,0)), (I[6] = (T)(_img)(_n1x,y,z,0)), (I[10] = (T)(_img)(_n1x,_n1y,z,0)), (I[14] = (T)(_img)(_n1x,_n2y,z,0)), 2>=(_img)._width?(_img).width()-1:2); (_n2x<(_img).width() && ( (I[3] = (T)(_img)(_n2x,_p1y,z,0)), (I[7] = (T)(_img)(_n2x,y,z,0)), (I[11] = (T)(_img)(_n2x,_n1y,z,0)), (I[15] = (T)(_img)(_n2x,_n2y,z,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[14] = I[15], _p1x = x++, ++_n1x, ++_n2x) > *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + > I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + > I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15]); > } > } break; > case 3 : { > T I[9] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,z,0)), (I[3] = I[4] = (T)(_img)(0,y,z,0)), (I[6] = I[7] = (T)(_img)(0,_n1y,z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[2] = (T)(_img)(_n1x,_p1y,z,0)), (I[5] = (T)(_img)(_n1x,y,z,0)), (I[8] = (T)(_img)(_n1x,_n1y,z,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + I[2]*I[2] + > I[3]*I[3] + I[4]*I[4] + I[5]*I[5] + > I[6]*I[6] + I[7]*I[7] + I[8]*I[8]); > *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + I[2]*_mask[2] + > I[3]*_mask[3] + I[4]*_mask[4] + I[5]*_mask[5] + > I[6]*_mask[6] + I[7]*_mask[7] + I[8]*_mask[8])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,z,0)), (I[3] = I[4] = (T)(_img)(0,y,z,0)), (I[6] = I[7] = (T)(_img)(0,_n1y,z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[2] = (T)(_img)(_n1x,_p1y,z,0)), (I[5] = (T)(_img)(_n1x,y,z,0)), (I[8] = (T)(_img)(_n1x,_n1y,z,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) > *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + I[2]*_mask[2] + > I[3]*_mask[3] + I[4]*_mask[4] + I[5]*_mask[5] + > I[6]*_mask[6] + I[7]*_mask[7] + I[8]*_mask[8]); > } > } break; > case 2 : { > T I[4] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(_img)(0,y,z,0)), (I[2] = (T)(_img)(0,_n1y,z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[1] = (T)(_img)(_n1x,y,z,0)), (I[3] = (T)(_img)(_n1x,_n1y,z,0)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], ++x, ++_n1x) { > const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + > I[2]*I[2] + I[3]*I[3]); > *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + > I[2]*_mask[2] + I[3]*_mask[3])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(_img)(0,y,z,0)), (I[2] = (T)(_img)(0,_n1y,z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[1] = (T)(_img)(_n1x,y,z,0)), (I[3] = (T)(_img)(_n1x,_n1y,z,0)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], ++x, ++_n1x) > *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + > I[2]*_mask[2] + I[3]*_mask[3]); > } > } break; > case 1 : > if (is_normalized) res.fill(1); > else for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > res.get_shared_channel(c).assign(_img)*=_mask[0]; > } > break; > } > } > } else { > const int > mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, > mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), > mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; ># 23824 "./CImg.h" > ># 23824 "./CImg.h" >#pragma omp parallel for if (res._spectrum>=2) ># 23824 "./CImg.h" ># 23824 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; ># 23832 "./CImg.h" > ># 23832 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 23832 "./CImg.h" ># 23832 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Ttfloat val = 0, N = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Ttfloat _val = (Ttfloat)_img(x+xm,y+ym,z+zm); > val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); > N+=_val*_val; > } > N*=M; > res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); > } > if (boundary_conditions) ># 23850 "./CImg.h" > ># 23850 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23850 "./CImg.h" ># 23850 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Ttfloat val = 0, N = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Ttfloat _val = (Ttfloat)_img._atXYZ(x+xm,y+ym,z+zm); > val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); > N+=_val*_val; > } > N*=M; > res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); > } > else ># 23867 "./CImg.h" > ># 23867 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23867 "./CImg.h" ># 23867 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Ttfloat val = 0, N = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Ttfloat _val = (Ttfloat)_img.atXYZ(x+xm,y+ym,z+zm,0,0); > val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); > N+=_val*_val; > } > N*=M; > res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); > } > } else { ># 23884 "./CImg.h" > ># 23884 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 23884 "./CImg.h" ># 23884 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Ttfloat val = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) > val+=_img(x+xm,y+ym,z+zm)*_mask(mx1+xm,my1+ym,mz1+zm); > res(x,y,z,c) = (Ttfloat)val; > } > if (boundary_conditions) ># 23898 "./CImg.h" > ># 23898 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23898 "./CImg.h" ># 23898 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Ttfloat val = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) > val+=_img._atXYZ(x+xm,y+ym,z+zm)*_mask(mx1+xm,my1+ym,mz1+zm); > res(x,y,z,c) = (Ttfloat)val; > } > else ># 23911 "./CImg.h" > ># 23911 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23911 "./CImg.h" ># 23911 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Ttfloat val = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) > val+=_img.atXYZ(x+xm,y+ym,z+zm,0,0)*_mask(mx1+xm,my1+ym,mz1+zm); > res(x,y,z,c) = (Ttfloat)val; > } > } > } > } > return res; > } ># 23937 "./CImg.h" > template<typename t> > CImg<T>& convolve(const CImg<t>& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { > if (is_empty() || !mask) return *this; > return get_convolve(mask,boundary_conditions,is_normalized).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset2<T,t,float>::type> get_convolve(const CImg<t>& mask, const unsigned int boundary_conditions=1, > const bool is_normalized=false) const { > if (is_empty() || !mask) return *this; > return get_correlate(CImg<t>(mask._data,mask.size(),1,1,1,true).get_mirror('x').resize(mask,-1),boundary_conditions,is_normalized); > } > > > > > > > > template<typename t> > CImg<T>& erode(const CImg<t>& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { > if (is_empty() || !mask) return *this; > return get_erode(mask,boundary_conditions,is_normalized).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_erode(const CImg<t>& mask, const unsigned int boundary_conditions=1, > const bool is_normalized=false) const { > if (is_empty() || !mask) return *this; > typedef typename cimg::superset<T,t>::type Tt; > CImg<Tt> res(_width,_height,_depth,cimg::max(_spectrum,mask._spectrum)); > const int > mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, > mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), > mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; ># 23975 "./CImg.h" > ># 23975 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 23975 "./CImg.h" ># 23975 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { ># 23982 "./CImg.h" > ># 23982 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 23982 "./CImg.h" ># 23982 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img(x+xm,y+ym,z+zm) + mval); > if (mval && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > if (boundary_conditions) ># 23999 "./CImg.h" > ># 23999 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23999 "./CImg.h" ># 23999 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img._atXYZ(x+xm,y+ym,z+zm) + mval); > if (mval && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > else ># 24015 "./CImg.h" > ># 24015 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24015 "./CImg.h" ># 24015 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img.atXYZ(x+xm,y+ym,z+zm,0,0) + mval); > if (mval && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > } else { ># 24031 "./CImg.h" > ># 24031 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 24031 "./CImg.h" ># 24031 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Tt cval = (Tt)_img(x+xm,y+ym,z+zm); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > if (boundary_conditions) ># 24047 "./CImg.h" > ># 24047 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24047 "./CImg.h" ># 24047 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const T cval = (Tt)_img._atXYZ(x+xm,y+ym,z+zm); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > else ># 24062 "./CImg.h" > ># 24062 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24062 "./CImg.h" ># 24062 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const T cval = (Tt)_img.atXYZ(x+xm,y+ym,z+zm,0,0); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > } > } > return res; > } > > > > > > > > CImg<T>& erode(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) { > if (is_empty() || (sx==1 && sy==1 && sz==1)) return *this; > if (sx>1 && _width>1) { > const int L = width(), off = 1, s = (int)sx, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *const ptrdb = buf._data, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(0,y,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > T *ptrd = buf._data, cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val<=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval<cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval<cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val<=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val<cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val<cur) cur = val; *(ptrd--) = cur; } > T *pd = data(0,y,z,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > > if (sy>1 && _height>1) { > const int L = height(), off = width(), s = (int)sy, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(x,0,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val<=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval<cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval<cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val<=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val<cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val<cur) cur = val; *(ptrd--) = cur; } > T *pd = data(x,0,z,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > > if (sz>1 && _depth>1) { > const int L = depth(), off = width()*height(), s = (int)sz, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(x,y,0,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val<=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval<cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval<cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val<=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val<cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val<cur) cur = val; *(ptrd--) = cur; } > T *pd = data(x,y,0,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > return *this; > } > > > CImg<T> get_erode(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) const { > return (+*this).erode(sx,sy,sz); > } > > > > > > CImg<T>& erode(const unsigned int s) { > return erode(s,s,s); > } > > > CImg<T> get_erode(const unsigned int s) const { > return (+*this).erode(s); > } > > > > > > > > template<typename t> > CImg<T>& dilate(const CImg<t>& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { > if (is_empty() || !mask) return *this; > return get_dilate(mask,boundary_conditions,is_normalized).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_dilate(const CImg<t>& mask, const unsigned int boundary_conditions=1, > const bool is_normalized=false) const { > if (is_empty() || !mask) return *this; > typedef typename cimg::superset<T,t>::type Tt; > CImg<Tt> res(_width,_height,_depth,_spectrum); > const int > mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, > mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), > mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; ># 24216 "./CImg.h" > ># 24216 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 24216 "./CImg.h" ># 24216 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { ># 24223 "./CImg.h" > ># 24223 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 24223 "./CImg.h" ># 24223 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img(x+xm,y+ym,z+zm) - mval); > if (mval && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > if (boundary_conditions) ># 24240 "./CImg.h" > ># 24240 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24240 "./CImg.h" ># 24240 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img._atXYZ(x+xm,y+ym,z+zm) - mval); > if (mval && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > else ># 24256 "./CImg.h" > ># 24256 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24256 "./CImg.h" ># 24256 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img.atXYZ(x+xm,y+ym,z+zm,0,0) - mval); > if (mval && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > } else { ># 24272 "./CImg.h" > ># 24272 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth>=128) ># 24272 "./CImg.h" ># 24272 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Tt cval = (Tt)_img(x+xm,y+ym,z+zm); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > if (boundary_conditions) ># 24288 "./CImg.h" > ># 24288 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24288 "./CImg.h" ># 24288 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const T cval = (Tt)_img._atXYZ(x+xm,y+ym,z+zm); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > else ># 24303 "./CImg.h" > ># 24303 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24303 "./CImg.h" ># 24303 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const T cval = (Tt)_img.atXYZ(x+xm,y+ym,z+zm,0,0); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > } > } > return res; > } > > > > > > > > CImg<T>& dilate(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) { > if (is_empty() || (sx==1 && sy==1 && sz==1)) return *this; > if (sx>1 && _width>1) { > const int L = width(), off = 1, s = (int)sx, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(0,y,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val>=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } > T *pd = data(0,y,z,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > > if (sy>1 && _height>1) { > const int L = height(), off = width(), s = (int)sy, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(x,0,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val>=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } > T *pd = data(x,0,z,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > > if (sz>1 && _depth>1) { > const int L = depth(), off = width()*height(), s = (int)sz, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(x,y,0,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val>=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } > T *pd = data(x,y,0,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > return *this; > } > > > CImg<T> get_dilate(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) const { > return (+*this).dilate(sx,sy,sz); > } > > > > > > CImg<T>& dilate(const unsigned int s) { > return dilate(s,s,s); > } > > > CImg<T> get_dilate(const unsigned int s) const { > return (+*this).dilate(s); > } > > > > > > > > template<typename t> > CImg<T>& watershed(const CImg<t>& priority, const bool fill_lines=true) { > if (is_empty()) return *this; > if (!is_sameXYZ(priority)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "watershed(): image instance and specified priority (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),priority._width,priority._height,priority._depth,priority._spectrum,priority._data); > if (_spectrum!=1) { for (int c = 0; c<(int)((*this)._spectrum); ++c) get_shared_channel(c).watershed(priority.get_shared_channel(c%priority._spectrum),fill_lines); return *this; } > > CImg<boolT> is_queued(_width,_height,_depth,1,0); > CImg<typename cimg::superset2<T,t,int>::type> Q; > unsigned int sizeQ = 0; > > > const T *ptrs = _data; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) if (*(ptrs++)) { > if (x-1>=0 && !(*this)(x-1,y,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); > if (x+1<width() && !(*this)(x+1,y,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x+1,y,z),x+1,y,z); > if (y-1>=0 && !(*this)(x,y-1,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); > if (y+1<height() && !(*this)(x,y+1,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y+1,z),x,y+1,z); > if (z-1>=0 && !(*this)(x,y,z-1)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); > if (z+1<depth() && !(*this)(x,y,z+1)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z+1),x,y,z+1); > } > > > while (sizeQ) { > > > const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); > Q._priority_queue_remove(sizeQ); > > > bool is_same_label = true; > unsigned int label = 0; > if (x-1>=0) { > if ((*this)(x-1,y,z)) { if (!label) label = (unsigned int)(*this)(x-1,y,z); else if (label!=(*this)(x-1,y,z)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); > } > if (x+1<width()) { > if ((*this)(x+1,y,z)) { if (!label) label = (unsigned int)(*this)(x+1,y,z); else if (label!=(*this)(x+1,y,z)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x+1,y,z),x+1,y,z); > } > if (y-1>=0) { > if ((*this)(x,y-1,z)) { if (!label) label = (unsigned int)(*this)(x,y-1,z); else if (label!=(*this)(x,y-1,z)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); > } > if (y+1<height()) { > if ((*this)(x,y+1,z)) { if (!label) label = (unsigned int)(*this)(x,y+1,z); else if (label!=(*this)(x,y+1,z)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y+1,z),x,y+1,z); > } > if (z-1>=0) { > if ((*this)(x,y,z-1)) { if (!label) label = (unsigned int)(*this)(x,y,z-1); else if (label!=(*this)(x,y,z-1)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); > } > if (z+1<depth()) { > if ((*this)(x,y,z+1)) { if (!label) label = (unsigned int)(*this)(x,y,z+1); else if (label!=(*this)(x,y,z+1)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z+1),x,y,z+1); > } > if (is_same_label) (*this)(x,y,z) = (T)label; > } > > > if (fill_lines) { > > > is_queued = false; > const T *ptrs = _data; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) if (!*(ptrs++) && > ((x-1>=0 && (*this)(x-1,y,z)) || (x+1<width() && (*this)(x+1,y,z)) || > (y-1>=0 && (*this)(x,y-1,z)) || (y+1<height() && (*this)(x,y+1,z)) || > (z-1>=0 && (*this)(x,y,z-1)) || (z+1>depth() && (*this)(x,y,z+1)))) > Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z),x,y,z); > > > while (sizeQ) { > const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); > Q._priority_queue_remove(sizeQ); > t pmax = cimg::type<t>::min(); > int xmax = 0, ymax = 0, zmax = 0; > if (x-1>=0) { > if ((*this)(x-1,y,z)) { if (priority(x-1,y,z)>pmax) { pmax = priority(x-1,y,z); xmax = x-1; ymax = y; zmax = z; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); > } > if (x+1<width()) { > if ((*this)(x+1,y,z)) { if (priority(x+1,y,z)>pmax) { pmax = priority(x+1,y,z); xmax = x+1; ymax = y; zmax = z; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x+1,y,z),x+1,y,z); > } > if (y-1>=0) { > if ((*this)(x,y-1,z)) { if (priority(x,y-1,z)>pmax) { pmax = priority(x,y-1,z); xmax = x; ymax = y-1; zmax = z; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); > } > if (y+1<height()) { > if ((*this)(x,y+1,z)) { if (priority(x,y+1,z)>pmax) { pmax = priority(x,y+1,z); xmax = x; ymax = y+1; zmax = z; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y+1,z),x,y+1,z); > } > if (z-1>=0) { > if ((*this)(x,y,z-1)) { if (priority(x,y,z-1)>pmax) { pmax = priority(x,y,z-1); xmax = x; ymax = y; zmax = z-1; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); > } > if (z+1<depth()) { > if ((*this)(x,y,z+1)) { if (priority(x,y,z+1)>pmax) { pmax = priority(x,y,z+1); xmax = x; ymax = y; zmax = z+1; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z+1),x,y,z+1); > } > (*this)(x,y,z) = (*this)(xmax,ymax,zmax); > } > } > return *this; > } > > > template<typename t> > CImg<T> get_watershed(const CImg<t>& priority, const bool fill_lines=true) const { > return (+*this).watershed(priority,fill_lines); > } > > > template<typename t> > bool _priority_queue_insert(CImg<boolT>& is_queued, unsigned int& siz, const t value, const unsigned int x, const unsigned int y, const unsigned int z) { > if (is_queued(x,y,z)) return false; > is_queued(x,y,z) = true; > if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } > (*this)(siz-1,0) = (T)value; (*this)(siz-1,1) = (T)x; (*this)(siz-1,2) = (T)y; (*this)(siz-1,3) = (T)z; > for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos+1)/2-1,0); pos = par) { > cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); > cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); > } > return true; > } > > CImg<T>& _priority_queue_remove(unsigned int& siz) { > (*this)(0,0) = (*this)(--siz,0); (*this)(0,1) = (*this)(siz,1); (*this)(0,2) = (*this)(siz,2); (*this)(0,3) = (*this)(siz,3); > const float value = (*this)(0,0); > for (unsigned int pos = 0, left = 0, right = 0; > ((right=2*(pos+1),(left=right-1))<siz && value<(*this)(left,0)) || (right<siz && value<(*this)(right,0));) { > if (right<siz) { > if ((*this)(left,0)>(*this)(right,0)) { > cimg::swap((*this)(pos,0),(*this)(left,0)); cimg::swap((*this)(pos,1),(*this)(left,1)); > cimg::swap((*this)(pos,2),(*this)(left,2)); cimg::swap((*this)(pos,3),(*this)(left,3)); > pos = left; > } else { > cimg::swap((*this)(pos,0),(*this)(right,0)); cimg::swap((*this)(pos,1),(*this)(right,1)); > cimg::swap((*this)(pos,2),(*this)(right,2)); cimg::swap((*this)(pos,3),(*this)(right,3)); > pos = right; > } > } else { > cimg::swap((*this)(pos,0),(*this)(left,0)); cimg::swap((*this)(pos,1),(*this)(left,1)); > cimg::swap((*this)(pos,2),(*this)(left,2)); cimg::swap((*this)(pos,3),(*this)(left,3)); > pos = left; > } > } > return *this; > } ># 24599 "./CImg.h" > CImg<T>& deriche(const float sigma, const int order=0, const char axis='x', const bool boundary_conditions=true) { ># 24619 "./CImg.h" > const char naxis = cimg::uncase(axis); > const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; > if (is_empty() || (nsigma<0.1f && !order)) return *this; > const float > nnsigma = nsigma<0.1f?0.1f:nsigma, > alpha = 1.695f/nnsigma, > ema = (float)std::exp(-alpha), > ema2 = (float)std::exp(-2*alpha), > b1 = -2*ema, > b2 = ema2; > float a0 = 0, a1 = 0, a2 = 0, a3 = 0, coefp = 0, coefn = 0; > switch (order) { > case 0 : { > const float k = (1-ema)*(1-ema)/(1+2*alpha*ema-ema2); > a0 = k; > a1 = k*(alpha-1)*ema; > a2 = k*(alpha+1)*ema; > a3 = -k*ema2; > } break; > case 1 : { > const float k = -(1-ema)*(1-ema)*(1-ema)/(2*(ema+1)*ema); > a0 = a3 = 0; > a1 = k*ema; > a2 = -a1; > } break; > case 2 : { > const float > ea = (float)std::exp(-alpha), > k = -(ema2-1)/(2*alpha*ema), > kn = (-2*(-1+3*ea-3*ea*ea+ea*ea*ea)/(3*ea+1+3*ea*ea+ea*ea*ea)); > a0 = kn; > a1 = -kn*(1+k*alpha)*ema; > a2 = kn*(1-k*alpha)*ema; > a3 = -kn*ema2; > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "deriche(): Invalid specified filter order %u " > "(should be { 0=smoothing | 1=1st-derivative | 2=2nd-derivative }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > order); > } > coefp = (a0+a1)/(1+b1+b2); > coefn = (a2+a3)/(1+b1+b2); > switch (naxis) { > case 'x' : { > const int N = _width; > const unsigned long off = 1U; ># 24668 "./CImg.h" > ># 24668 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24668 "./CImg.h" ># 24668 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { T *ptrX = data(0,y,z,c); CImg<Tfloat> Y(N); Tfloat *ptrY = Y._data, yb = 0, yp = 0; T xp = (T)0; if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } for (int m = 0; m<N; ++m) { const T xc = *ptrX; ptrX+=off; const Tfloat yc = *(ptrY++) = (Tfloat)(a0*xc + a1*xp - b1*yp - b2*yb); xp = xc; yb = yp; yp = yc; } T xn = (T)0, xa = (T)0; Tfloat yn = 0, ya = 0; if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } for (int n = N-1; n>=0; --n) { const T xc = *(ptrX-=off); const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); xa = xn; xn = xc; ya = yn; yn = yc; *ptrX = (T)(*(--ptrY)+yc); }; } > } break; > case 'y' : { > const int N = _height; > const unsigned long off = (unsigned long)_width; ># 24676 "./CImg.h" > ># 24676 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24676 "./CImg.h" ># 24676 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { T *ptrX = data(x,0,z,c); CImg<Tfloat> Y(N); Tfloat *ptrY = Y._data, yb = 0, yp = 0; T xp = (T)0; if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } for (int m = 0; m<N; ++m) { const T xc = *ptrX; ptrX+=off; const Tfloat yc = *(ptrY++) = (Tfloat)(a0*xc + a1*xp - b1*yp - b2*yb); xp = xc; yb = yp; yp = yc; } T xn = (T)0, xa = (T)0; Tfloat yn = 0, ya = 0; if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } for (int n = N-1; n>=0; --n) { const T xc = *(ptrX-=off); const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); xa = xn; xn = xc; ya = yn; yn = yc; *ptrX = (T)(*(--ptrY)+yc); }; } > } break; > case 'z' : { > const int N = _depth; > const unsigned long off = (unsigned long)_width*_height; ># 24684 "./CImg.h" > ># 24684 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24684 "./CImg.h" ># 24684 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { T *ptrX = data(x,y,0,c); CImg<Tfloat> Y(N); Tfloat *ptrY = Y._data, yb = 0, yp = 0; T xp = (T)0; if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } for (int m = 0; m<N; ++m) { const T xc = *ptrX; ptrX+=off; const Tfloat yc = *(ptrY++) = (Tfloat)(a0*xc + a1*xp - b1*yp - b2*yb); xp = xc; yb = yp; yp = yc; } T xn = (T)0, xa = (T)0; Tfloat yn = 0, ya = 0; if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } for (int n = N-1; n>=0; --n) { const T xc = *(ptrX-=off); const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); xa = xn; xn = xc; ya = yn; yn = yc; *ptrX = (T)(*(--ptrY)+yc); }; } > } break; > default : { > const int N = _spectrum; > const unsigned long off = (unsigned long)_width*_height*_depth; ># 24692 "./CImg.h" > ># 24692 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24692 "./CImg.h" ># 24692 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { T *ptrX = data(x,y,z,0); CImg<Tfloat> Y(N); Tfloat *ptrY = Y._data, yb = 0, yp = 0; T xp = (T)0; if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } for (int m = 0; m<N; ++m) { const T xc = *ptrX; ptrX+=off; const Tfloat yc = *(ptrY++) = (Tfloat)(a0*xc + a1*xp - b1*yp - b2*yb); xp = xc; yb = yp; yp = yc; } T xn = (T)0, xa = (T)0; Tfloat yn = 0, ya = 0; if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } for (int n = N-1; n>=0; --n) { const T xc = *(ptrX-=off); const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); xa = xn; xn = xc; ya = yn; yn = yc; *ptrX = (T)(*(--ptrY)+yc); }; } > } > } > return *this; > } > > > CImg<Tfloat> get_deriche(const float sigma, const int order=0, const char axis='x', const bool boundary_conditions=true) const { > return CImg<Tfloat>(*this,false).deriche(sigma,order,axis,boundary_conditions); > } ># 24716 "./CImg.h" > template <int K> > static void _cimg_recursive_apply(T *data, const Tfloat filter[], const int N, const unsigned long off, const int order, const bool boundary_conditions) { > Tfloat val[K]; > switch (order) { > case 0 : { > for (int pass = 0; pass<2; ++pass) { > for (int k = 1; k<K; ++k) val[k] = (Tfloat)(boundary_conditions?*data:0); > for (int n = 0; n<N; ++n) { > val[0] = (Tfloat)(*data)*filter[0]; > for (int k = 1; k<K; ++k) val[0]+=val[k]*filter[k]; > *data = (T)val[0]; > if (!pass) data+=off; else data-=off; > for (int k = K-1; k>0; --k) val[k] = val[k-1]; > } > if (!pass) data-=off; > } > } break; > case 1 : { > Tfloat x[3]; > for (int pass = 0; pass<2; ++pass) { > for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); > for (int k = 0; k<K; ++k) val[k] = 0; > for (int n = 0; n<N-1; ++n) { > if (!pass) { > x[0] = (Tfloat)*(data+off); > val[0] = 0.5f * (x[0] - x[2])*filter[0]; > } else val[0] = (Tfloat)(*data)*filter[0]; > for (int k = 1; k<K; ++k) val[0]+=val[k]*filter[k]; > *data = (T)val[0]; > if (!pass) { > data+=off; > for (int k = 2; k>0; --k) x[k] = x[k-1]; > } else data-=off; > for (int k = K-1; k>0; --k) val[k] = val[k-1]; > } > *data = (T)0; > } > } break; > case 2: { > Tfloat x[3]; > for (int pass = 0; pass<2; ++pass) { > for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); > for (int k = 0; k<K; ++k) val[k] = 0; > for (int n = 0; n<N-1; ++n) { > if (!pass) { x[0] = (Tfloat)*(data+off); val[0] = (x[1] - x[2])*filter[0]; } > else { x[0] = (Tfloat)*(data-off); val[0] = (x[2] - x[1])*filter[0]; } > for (int k = 1; k<K; ++k) val[0]+=val[k]*filter[k]; > *data = (T)val[0]; > if (!pass) data+=off; else data-=off; > for (int k = 2; k>0; --k) x[k] = x[k-1]; > for (int k = K-1; k>0; --k) val[k] = val[k-1]; > } > *data = (T)0; > } > } break; > case 3: { > Tfloat x[3]; > for (int pass = 0; pass<2; ++pass) { > for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); > for (int k = 0; k<K; ++k) val[k] = 0; > for (int n = 0; n<N-1; ++n) { > if (!pass) { x[0] = (Tfloat)*(data+off); val[0] = (x[0] - 2*x[1] + x[2])*filter[0]; } > else { x[0] = (Tfloat)*(data-off); val[0] = 0.5f*(x[2] - x[0])*filter[0]; } > for (int k = 1; k<K; ++k) val[0]+=val[k]*filter[k]; > *data = (T)val[0]; > if (!pass) data+=off; else data-=off; > for (int k = 2; k>0; --k) x[k] = x[k-1]; > for (int k = K-1; k>0; --k) val[k] = val[k-1]; > } > *data = (T)0; > } > } break; > } > } ># 24803 "./CImg.h" > CImg<T>& vanvliet(const float sigma, const int order, const char axis='x', const bool boundary_conditions=true) { > if (is_empty()) return *this; > const char naxis = cimg::uncase(axis); > const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; > if (is_empty() || (nsigma<0.1f && !order)) return *this; > const Tfloat > nnsigma = nsigma<0.1f?0.1f:nsigma, > q = (Tfloat)(nnsigma<2.5?3.97156-4.14554*std::sqrt(1-0.2689*nnsigma):0.98711*nnsigma-0.96330), > b0 = 1.57825f + 2.44413f*q + 1.4281f*q*q + 0.422205f*q*q*q, > b1 = (2.44413f*q + 2.85619f*q*q + 1.26661f*q*q*q), > b2 = -(1.4281f*q*q + 1.26661f*q*q*q), > b3 = 0.422205f*q*q*q, > B = 1.f - (b1 + b2 + b3)/b0; > Tfloat filter[4]; > filter[0] = B; filter[1] = b1/b0; filter[2] = b2/b0; filter[3] = b3/b0; > > switch (naxis) { > case 'x' : { ># 24822 "./CImg.h" > ># 24822 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24822 "./CImg.h" ># 24822 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) _cimg_recursive_apply<4>(data(0,y,z,c),filter,_width,1U,order,boundary_conditions); > } break; > case 'y' : { ># 24828 "./CImg.h" > ># 24828 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24828 "./CImg.h" ># 24828 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) _cimg_recursive_apply<4>(data(x,0,z,c),filter,_height,(unsigned long)_width,order,boundary_conditions); > } break; > case 'z' : { ># 24834 "./CImg.h" > ># 24834 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24834 "./CImg.h" ># 24834 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) _cimg_recursive_apply<4>(data(x,y,0,c),filter,_depth,(unsigned long)(_width*_height),order,boundary_conditions); > } break; > default : { ># 24840 "./CImg.h" > ># 24840 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24840 "./CImg.h" ># 24840 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) _cimg_recursive_apply<4>(data(x,y,z,0),filter,_spectrum,(unsigned long)(_width*_height*_depth),order,boundary_conditions); > } > } > return *this; > } > > > CImg<Tfloat> get_vanvliet(const float sigma, const int order, const char axis='x', const bool boundary_conditions=true) const { > return CImg<Tfloat>(*this,false).vanvliet(sigma,order,axis,boundary_conditions); > } ># 24865 "./CImg.h" > CImg<T>& blur(const float sigma_x, const float sigma_y, const float sigma_z, > const bool boundary_conditions=true, const bool is_gaussian=false) { > if (!is_empty()) { > if (is_gaussian) { > if (_width>1) vanvliet(sigma_x,0,'x',boundary_conditions); > if (_height>1) vanvliet(sigma_y,0,'y',boundary_conditions); > if (_depth>1) vanvliet(sigma_z,0,'z',boundary_conditions); > } else { > if (_width>1) deriche(sigma_x,0,'x',boundary_conditions); > if (_height>1) deriche(sigma_y,0,'y',boundary_conditions); > if (_depth>1) deriche(sigma_z,0,'z',boundary_conditions); > } > } > return *this; > } > > > CImg<Tfloat> get_blur(const float sigma_x, const float sigma_y, const float sigma_z, > const bool boundary_conditions=true, const bool is_gaussian=false) const { > return CImg<Tfloat>(*this,false).blur(sigma_x,sigma_y,sigma_z,boundary_conditions,is_gaussian); > } > > > > > > > > CImg<T>& blur(const float sigma, const bool boundary_conditions=true, const bool is_gaussian=false) { > const float nsigma = sigma>=0?sigma:-sigma*cimg::max(_width,_height,_depth)/100; > return blur(nsigma,nsigma,nsigma,boundary_conditions,is_gaussian); > } > > > CImg<Tfloat> get_blur(const float sigma, const bool boundary_conditions=true, const bool is_gaussian=false) const { > return CImg<Tfloat>(*this,false).blur(sigma,boundary_conditions,is_gaussian); > } ># 24913 "./CImg.h" > template<typename t> > CImg<T>& blur_anisotropic(const CImg<t>& G, > const float amplitude=60, const float dl=0.8f, const float da=30, > const float gauss_prec=2, const unsigned int interpolation_type=0, > const bool is_fast_approx=1) { > > > if (!is_sameXYZ(G) || (G._spectrum!=3 && G._spectrum!=6)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "blur_anisotropic(): Invalid specified diffusion tensor field (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > G._width,G._height,G._depth,G._spectrum,G._data); > > if (is_empty() || amplitude<=0 || dl<0) return *this; > const bool is_3d = (G._spectrum==6); > T val_min, val_max = max_min(val_min); > > if (da<=0) { > CImg<Tfloat> velocity(_width,_height,_depth,_spectrum); > for (unsigned int iteration = 0; iteration<(unsigned int)amplitude; ++iteration) { > Tfloat *ptrd = velocity._data, veloc_max = 0; > if (is_3d) > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > ixx = Incc + Ipcc - 2*Iccc, > ixy = (Innc + Ippc - Inpc - Ipnc)/4, > ixz = (Incn + Ipcp - Incp - Ipcn)/4, > iyy = Icnc + Icpc - 2*Iccc, > iyz = (Icnn + Icpp - Icnp - Icpn)/4, > izz = Iccn + Iccp - 2*Iccc, > veloc = (Tfloat)(G(x,y,z,0)*ixx + 2*G(x,y,z,1)*ixy + 2*G(x,y,z,2)*ixz + G(x,y,z,3)*iyy + 2*G(x,y,z,4)*iyz + G(x,y,z,5)*izz); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > } > else > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > ixx = Inc + Ipc - 2*Icc, > ixy = (Inn + Ipp - Inp - Ipn)/4, > iyy = Icn + Icp - 2*Icc, > veloc = (Tfloat)(G(x,y,0,0)*ixx + 2*G(x,y,0,1)*ixy + G(x,y,0,2)*iyy); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > } > if (veloc_max>0) *this+=(velocity*=dl/veloc_max); > } > } else { > const unsigned long whd = (unsigned long)_width*_height*_depth; > const float sqrt2amplitude = (float)std::sqrt(2*amplitude); > const int dx1 = width() - 1, dy1 = height() - 1, dz1 = depth() - 1; > CImg<Tfloat> res(_width,_height,_depth,_spectrum,0), W(_width,_height,_depth,is_3d?4:3), val(_spectrum,1,1,1,0); > int N = 0; > if (is_3d) { > for (float phi = (180%(int)da)/2.0f; phi<=180; phi+=da) { > const float phir = (float)(phi*cimg::PI/180), datmp = (float)(da/std::cos(phir)), da2 = datmp<1?360.0f:datmp; > for (float theta = 0; theta<360; (theta+=da2),++N) { > const float > thetar = (float)(theta*cimg::PI/180), > vx = (float)(std::cos(thetar)*std::cos(phir)), > vy = (float)(std::sin(thetar)*std::cos(phir)), > vz = (float)std::sin(phir); > const t > *pa = G.data(0,0,0,0), *pb = G.data(0,0,0,1), *pc = G.data(0,0,0,2), > *pd = G.data(0,0,0,3), *pe = G.data(0,0,0,4), *pf = G.data(0,0,0,5); > Tfloat *pd0 = W.data(0,0,0,0), *pd1 = W.data(0,0,0,1), *pd2 = W.data(0,0,0,2), *pd3 = W.data(0,0,0,3); > for (int zg = 0; zg<(int)((G)._depth); ++zg) for (int yg = 0; yg<(int)((G)._height); ++yg) for (int xg = 0; xg<(int)((G)._width); ++xg) { > const t a = *(pa++), b = *(pb++), c = *(pc++), d = *(pd++), e = *(pe++), f = *(pf++); > const float > u = (float)(a*vx + b*vy + c*vz), > v = (float)(b*vx + d*vy + e*vz), > w = (float)(c*vx + e*vy + f*vz), > n = (float)std::sqrt(1e-5+u*u+v*v+w*w), > dln = dl/n; > *(pd0++) = (Tfloat)(u*dln); > *(pd1++) = (Tfloat)(v*dln); > *(pd2++) = (Tfloat)(w*dln); > *(pd3++) = (Tfloat)n; > } ># 24999 "./CImg.h" > ># 24999 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=2) firstprivate(val) ># 24999 "./CImg.h" ># 24999 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > val.fill(0); > const float > n = (float)W(x,y,z,3), > fsigma = (float)(n*sqrt2amplitude), > fsigma2 = 2*fsigma*fsigma, > length = gauss_prec*fsigma; > float > S = 0, > X = (float)x, > Y = (float)y, > Z = (float)z; > switch (interpolation_type) { > case 0 : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { > const int > cx = (int)(X+0.5f), > cy = (int)(Y+0.5f), > cz = (int)(Z+0.5f); > const float > u = (float)W(cx,cy,cz,0), > v = (float)W(cx,cy,cz,1), > w = (float)W(cx,cy,cz,2); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(*this)(cx,cy,cz,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*(*this)(cx,cy,cz,c)); > S+=coef; > } > X+=u; Y+=v; Z+=w; > } > } break; > case 1 : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { > const float > u = (float)(W._linear_atXYZ(X,Y,Z,0)), > v = (float)(W._linear_atXYZ(X,Y,Z,1)), > w = (float)(W._linear_atXYZ(X,Y,Z,2)); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*_linear_atXYZ(X,Y,Z,c)); > S+=coef; > } > X+=u; Y+=v; Z+=w; > } > } break; > default : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { > const float > u0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,0)), > v0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,1)), > w0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,2)), > u = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,0)), > v = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,1)), > w = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,2)); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*_linear_atXYZ(X,Y,Z,c)); > S+=coef; > } > X+=u; Y+=v; Z+=w; > } > } break; > } > Tfloat *ptrd = res.data(x,y,z); > if (S>0) for (int c = 0; c<(int)((res)._spectrum); ++c) { *ptrd+=val[c]/S; ptrd+=whd; } > else for (int c = 0; c<(int)((res)._spectrum); ++c) { *ptrd+=(Tfloat)((*this)(x,y,z,c)); ptrd+=whd; } > } > } > } > } else { > for (float theta = (360%(int)da)/2.0f; theta<360; (theta+=da),++N) { > const float thetar = (float)(theta*cimg::PI/180), vx = (float)(std::cos(thetar)), vy = (float)(std::sin(thetar)); > const t *pa = G.data(0,0,0,0), *pb = G.data(0,0,0,1), *pc = G.data(0,0,0,2); > Tfloat *pd0 = W.data(0,0,0,0), *pd1 = W.data(0,0,0,1), *pd2 = W.data(0,0,0,2); > for (int yg = 0; yg<(int)((G)._height); ++yg) for (int xg = 0; xg<(int)((G)._width); ++xg) { > const t a = *(pa++), b = *(pb++), c = *(pc++); > const float > u = (float)(a*vx + b*vy), > v = (float)(b*vx + c*vy), > n = (float)std::sqrt(1e-5+u*u+v*v), > dln = dl/n; > *(pd0++) = (Tfloat)(u*dln); > *(pd1++) = (Tfloat)(v*dln); > *(pd2++) = (Tfloat)n; > } ># 25091 "./CImg.h" > ># 25091 "./CImg.h" >#pragma omp parallel for if (_width>=256 && _height>=2) firstprivate(val) ># 25091 "./CImg.h" ># 25091 "./CImg.h" > > > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > val.fill(0); > const float > n = (float)W(x,y,0,2), > fsigma = (float)(n*sqrt2amplitude), > fsigma2 = 2*fsigma*fsigma, > length = gauss_prec*fsigma; > float > S = 0, > X = (float)x, > Y = (float)y; > switch (interpolation_type) { > case 0 : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { > const int > cx = (int)(X+0.5f), > cy = (int)(Y+0.5f); > const float > u = (float)W(cx,cy,0,0), > v = (float)W(cx,cy,0,1); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(*this)(cx,cy,0,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*(*this)(cx,cy,0,c)); > S+=coef; > } > X+=u; Y+=v; > } > } break; > case 1 : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { > const float > u = (float)(W._linear_atXY(X,Y,0,0)), > v = (float)(W._linear_atXY(X,Y,0,1)); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*_linear_atXY(X,Y,0,c)); > S+=coef; > } > X+=u; Y+=v; > } > } break; > default : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { > const float > u0 = (float)(0.5f*W._linear_atXY(X,Y,0,0)), > v0 = (float)(0.5f*W._linear_atXY(X,Y,0,1)), > u = (float)(W._linear_atXY(X+u0,Y+v0,0,0)), > v = (float)(W._linear_atXY(X+u0,Y+v0,0,1)); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*_linear_atXY(X,Y,0,c)); > S+=coef; > } > X+=u; Y+=v; > } > } > } > Tfloat *ptrd = res.data(x,y); > if (S>0) for (int c = 0; c<(int)((res)._spectrum); ++c) { *ptrd+=val[c]/S; ptrd+=whd; } > else for (int c = 0; c<(int)((res)._spectrum); ++c) { *ptrd+=(Tfloat)((*this)(x,y,0,c)); ptrd+=whd; } > } > } > } > const Tfloat *ptrs = res._data; > for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) { const Tfloat val = *(ptrs++)/N; *ptrd = val<val_min?val_min:(val>val_max?val_max:(T)val); } > } > return *this; > } > > > template<typename t> > CImg<T> get_blur_anisotropic(const CImg<t>& G, > const float amplitude=60, const float dl=0.8f, const float da=30, > const float gauss_prec=2, const unsigned int interpolation_type=0, > const bool is_fast_approx=true) const { > return (+*this).blur_anisotropic(G,amplitude,dl,da,gauss_prec,interpolation_type,is_fast_approx); > } ># 25187 "./CImg.h" > CImg<T>& blur_anisotropic(const float amplitude, const float sharpness=0.7f, const float anisotropy=0.6f, > const float alpha=0.6f, const float sigma=1.1f, const float dl=0.8f, const float da=30, > const float gauss_prec=2, const unsigned int interpolation_type=0, > const bool is_fast_approx=true) { > return blur_anisotropic(get_diffusion_tensors(sharpness,anisotropy,alpha,sigma,interpolation_type!=3), > amplitude,dl,da,gauss_prec,interpolation_type,is_fast_approx); > } > > > CImg<T> get_blur_anisotropic(const float amplitude, const float sharpness=0.7f, const float anisotropy=0.6f, > const float alpha=0.6f, const float sigma=1.1f, const float dl=0.8f, > const float da=30, const float gauss_prec=2, const unsigned int interpolation_type=0, > const bool is_fast_approx=true) const { > return (+*this).blur_anisotropic(amplitude,sharpness,anisotropy,alpha,sigma,dl,da,gauss_prec,interpolation_type,is_fast_approx); > } ># 25218 "./CImg.h" > template<typename t> > CImg<T>& blur_bilateral(const CImg<t>& guide, const float sigma_x, const float sigma_y, const float sigma_z, const float sigma_r, > const int bgrid_x, const int bgrid_y, const int bgrid_z, const int bgrid_r, > const bool interpolation_type=true) { > if (!is_sameXYZ(guide)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "blur_bilateral(): Invalid size for specified guide image (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > guide._width,guide._height,guide._depth,guide._spectrum,guide._data); > if (is_empty()) return *this; > T m, M = guide.max_min(m); > if (m==M) return *this; > const float range = (float)(M - m); > const unsigned int > bx0 = bgrid_x>=0?bgrid_x:_width*-bgrid_x/100, > by0 = bgrid_y>=0?bgrid_y:_height*-bgrid_y/100, > bz0 = bgrid_z>=0?bgrid_z:_depth*-bgrid_z/100, > br0 = bgrid_r>=0?bgrid_r:(int)(-range*bgrid_r/100), > bx = bx0>0?bx0:1, > by = by0>0?by0:1, > bz = bz0>0?bz0:1, > br = br0>0?br0:1; > const float > _sigma_x = sigma_x>=0?sigma_x:-sigma_x*_width/100, > _sigma_y = sigma_y>=0?sigma_y:-sigma_y*_height/100, > _sigma_z = sigma_z>=0?sigma_z:-sigma_z*_depth/100, > _sigma_r = sigma_r>=0?sigma_r:-sigma_r*range/100, > nsigma_x = _sigma_x*bx/_width, > nsigma_y = _sigma_y*by/_height, > nsigma_z = _sigma_z*bz/_depth, > nsigma_r = _sigma_r*br/range; > if (nsigma_x>0 || nsigma_y>0 || nsigma_z>0 || nsigma_r>0) { > const bool is_3d = (_depth>1); > if (is_3d) { > CImg<floatT> bgrid(bx,by,bz,br), bgridw(bx,by,bz,br); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<t> _guide = guide.get_shared_channel(c%guide._spectrum); > bgrid.fill(0); bgridw.fill(0); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const T val = (*this)(x,y,z,c); > const float gval = (float)_guide(x,y,z); > const int X = x*bx/_width, Y = y*by/_height, Z = z*bz/_depth, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); > bgrid(X,Y,Z,R) += (float)val; > bgridw(X,Y,Z,R) += 1; > } > bgrid.blur(nsigma_x,nsigma_y,nsigma_z,true).deriche(nsigma_r,0,'c',false); > bgridw.blur(nsigma_x,nsigma_y,nsigma_z,true).deriche(nsigma_r,0,'c',false); > if (interpolation_type) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float gval = (float)_guide(x,y,z), > X = (float)x*bx/_width, Y = (float)y*by/_height, Z = (float)z*bz/_depth, R = (float)cimg::min(br-1.0f,(gval-m)*br/range), > bval0 = bgrid._linear_atXYZC(X,Y,Z,R), bval1 = bgridw._linear_atXYZC(X,Y,Z,R); > (*this)(x,y,z,c) = (T)(bval0/bval1); > } else for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float gval = (float)_guide(x,y,z); > const int X = x*bx/_width, Y = y*by/_height, Z = z*bz/_depth, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); > const float bval0 = bgrid(X,Y,Z,R), bval1 = bgridw(X,Y,Z,R); > (*this)(x,y,z,c) = (T)(bval0/bval1); > } > } > } else { > CImg<floatT> bgrid(bx,by,br,2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<t> _guide = guide.get_shared_channel(c%guide._spectrum); > bgrid.fill(0); > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const T val = (*this)(x,y,c); > const float gval = (float)_guide(x,y); > const int X = x*bx/_width, Y = y*by/_height, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); > bgrid(X,Y,R,0) += (float)val; > bgrid(X,Y,R,1) += 1; > } > bgrid.blur(nsigma_x,nsigma_y,0,true).blur(0,0,nsigma_r,false); > if (interpolation_type) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float gval = (float)_guide(x,y), > X = (float)x*bx/_width, Y = (float)y*by/_height, R = (float)cimg::min(br-1.0f,(gval-m)*br/range), > bval0 = bgrid._linear_atXYZ(X,Y,R,0), bval1 = bgrid._linear_atXYZ(X,Y,R,1); > (*this)(x,y,c) = (T)(bval0/bval1); > } else for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float gval = (float)_guide(x,y); > const int X = x*bx/_width, Y = y*by/_height, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); > const float bval0 = bgrid(X,Y,R,0), bval1 = bgrid(X,Y,R,1); > (*this)(x,y,c) = (T)(bval0/bval1); > } > } > } > } > return *this; > } > > > template<typename t> > CImg<T> get_blur_bilateral(const CImg<t>& guide, const float sigma_x, const float sigma_y, const float sigma_z, const float sigma_r, > const int bgrid_x, const int bgrid_y, const int bgrid_z, const int bgrid_r, > const bool interpolation_type=true) const { > return (+*this).blur_bilateral(guide,sigma_x,sigma_y,sigma_z,sigma_r,bgrid_x,bgrid_y,bgrid_z,bgrid_r,interpolation_type); > } ># 25324 "./CImg.h" > template<typename t> > CImg<T>& blur_bilateral(const CImg<t>& guide, const float sigma_s, const float sigma_r, const int bgrid_s=-33, const int bgrid_r=32, > const bool interpolation_type=true) { > const float nsigma_s = sigma_s>=0?sigma_s:-sigma_s*cimg::max(_width,_height,_depth)/100; > return blur_bilateral(guide,nsigma_s,nsigma_s,nsigma_s,sigma_r,bgrid_s,bgrid_s,bgrid_s,bgrid_r,interpolation_type); > } > > > template<typename t> > CImg<T> get_blur_bilateral(const CImg<t>& guide, const float sigma_s, const float sigma_r, const int bgrid_s=-33, const int bgrid_r=32, > const bool interpolation_type=true) const { > return (+*this).blur_bilateral(guide,sigma_s,sigma_s,sigma_s,sigma_r,bgrid_s,bgrid_s,bgrid_s,bgrid_r,interpolation_type); > } ># 25347 "./CImg.h" > CImg<T>& blur_patch(const float sigma_s, const float sigma_p, const unsigned int patch_size=3, > const unsigned int lookup_size=4, const float smoothness=0, const bool is_fast_approx=true) { > if (is_empty() || !patch_size || !lookup_size) return *this; > return get_blur_patch(sigma_s,sigma_p,patch_size,lookup_size,smoothness,is_fast_approx).move_to(*this); > } > > > CImg<T> get_blur_patch(const float sigma_s, const float sigma_p, const unsigned int patch_size=3, > const unsigned int lookup_size=4, const float smoothness=0, const bool is_fast_approx=true) const { ># 25437 "./CImg.h" > if (is_empty() || !patch_size || !lookup_size) return +*this; > CImg<Tfloat> res(_width,_height,_depth,_spectrum,0); > const CImg<T> _img = smoothness>0?get_blur(smoothness):CImg<Tfloat>(),&img = smoothness>0?_img:*this; > CImg<T> P(patch_size*patch_size*_spectrum), Q(P); > const float > nsigma_s = sigma_s>=0?sigma_s:-sigma_s*cimg::max(_width,_height,_depth)/100, > sigma_s2 = nsigma_s*nsigma_s, sigma_p2 = sigma_p*sigma_p, sigma_p3 = 3*sigma_p, > Pnorm = P.size()*sigma_p2; > const int rsize2 = (int)lookup_size/2, rsize1 = (int)lookup_size - rsize2 - 1; > const unsigned int N2 = patch_size*patch_size, N3 = N2*patch_size; > cimg::unused(N2,N3); > if (_depth>1) switch (patch_size) { > case 2 : if (is_fast_approx) for (int z = 0, _n1z = 1>=((res)._depth)?(int)((res)._depth)-1:1; _n1z<(int)((res)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; ++x, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(x,y,z,c), pP[1] = (T)(img)(_n1x,y,z,c), pP[2] = (T)(img)(x,_n1y,z,c), pP[3] = (T)(img)(_n1x,_n1y,z,c), pP[4] = (T)(img)(x,y,_n1z,c), pP[5] = (T)(img)(_n1x,y,_n1z,c), pP[6] = (T)(img)(x,_n1y,_n1z,c), pP[7] = (T)(img)(_n1x,_n1y,_n1z,c); pP+=N3; } const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; float sum_weights = 0; for (int r = (int)(z0)<0?0:(int)(z0), _n1r = r+1>=(int)((res)._depth)?(int)((res)._depth)-1:r+1; r<=(int)(z1) && (_n1r<(int)((res)._depth) || r==--_n1r); ++r, ++_n1r) for (int q = (int)(y0)<0?0:(int)(y0), _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); ++q, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); ++p, ++_n1p) if (cimg::abs(img(x,y,z,0) - img(p,q,r,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(p,q,r,c), pQ[1] = (T)(img)(_n1p,q,r,c), pQ[2] = (T)(img)(p,_n1q,r,c), pQ[3] = (T)(img)(_n1p,_n1q,r,c), pQ[4] = (T)(img)(p,q,_n1r,c), pQ[5] = (T)(img)(_n1p,q,_n1r,c), pQ[6] = (T)(img)(p,_n1q,_n1r,c), pQ[7] = (T)(img)(_n1p,_n1q,_n1r,c); pQ+=N3; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); } else for (int z = 0, _n1z = 1>=((res)._depth)?(int)((res)._depth)-1:1; _n1z<(int)((res)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; ++x, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(x,y,z,c), pP[1] = (T)(img)(_n1x,y,z,c), pP[2] = (T)(img)(x,_n1y,z,c), pP[3] = (T)(img)(_n1x,_n1y,z,c), pP[4] = (T)(img)(x,y,_n1z,c), pP[5] = (T)(img)(_n1x,y,_n1z,c), pP[6] = (T)(img)(x,_n1y,_n1z,c), pP[7] = (T)(img)(_n1x,_n1y,_n1z,c); pP+=N3; } const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; float sum_weights = 0, weight_max = 0; for (int r = (int)(z0)<0?0:(int)(z0), _n1r = r+1>=(int)((res)._depth)?(int)((res)._depth)-1:r+1; r<=(int)(z1) && (_n1r<(int)((res)._depth) || r==--_n1r); ++r, ++_n1r) for (int q = (int)(y0)<0?0:(int)(y0), _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); ++q, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); ++p, ++_n1p) if (p!=x || q!=y || r!=z) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(p,q,r,c), pQ[1] = (T)(img)(_n1p,q,r,c), pQ[2] = (T)(img)(p,_n1q,r,c), pQ[3] = (T)(img)(_n1p,_n1q,r,c), pQ[4] = (T)(img)(p,q,_n1r,c), pQ[5] = (T)(img)(_n1p,q,_n1r,c), pQ[6] = (T)(img)(p,_n1q,_n1r,c), pQ[7] = (T)(img)(_n1p,_n1q,_n1r,c); pQ+=N3; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); } break; > case 3 : if (is_fast_approx) for (int z = 0, _p1z = 0, _n1z = 1>=((res)._depth)?(int)((res)._depth)-1:1; _n1z<(int)((res)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; _p1x = x++, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,_p1z,c), pP[1] = (T)(img)(x,_p1y,_p1z,c), pP[2] = (T)(img)(_n1x,_p1y,_p1z,c), pP[3] = (T)(img)(_p1x,y,_p1z,c), pP[4] = (T)(img)(x,y,_p1z,c), pP[5] = (T)(img)(_n1x,y,_p1z,c), pP[6] = (T)(img)(_p1x,_n1y,_p1z,c), pP[7] = (T)(img)(x,_n1y,_p1z,c), pP[8] = (T)(img)(_n1x,_n1y,_p1z,c), pP[9] = (T)(img)(_p1x,_p1y,z,c), pP[10] = (T)(img)(x,_p1y,z,c), pP[11] = (T)(img)(_n1x,_p1y,z,c), pP[12] = (T)(img)(_p1x,y,z,c), pP[13] = (T)(img)(x,y,z,c), pP[14] = (T)(img)(_n1x,y,z,c), pP[15] = (T)(img)(_p1x,_n1y,z,c), pP[16] = (T)(img)(x,_n1y,z,c), pP[17] = (T)(img)(_n1x,_n1y,z,c), pP[18] = (T)(img)(_p1x,_p1y,_n1z,c), pP[19] = (T)(img)(x,_p1y,_n1z,c), pP[20] = (T)(img)(_n1x,_p1y,_n1z,c), pP[21] = (T)(img)(_p1x,y,_n1z,c), pP[22] = (T)(img)(x,y,_n1z,c), pP[23] = (T)(img)(_n1x,y,_n1z,c), pP[24] = (T)(img)(_p1x,_n1y,_n1z,c), pP[25] = (T)(img)(x,_n1y,_n1z,c), pP[26] = (T)(img)(_n1x,_n1y,_n1z,c); pP+=N3; } const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; float sum_weights = 0; for (int r = (int)(z0)<0?0:(int)(z0), _p1r = r-1<0?0:r-1, _n1r = r+1>=(int)((res)._depth)?(int)((res)._depth)-1:r+1; r<=(int)(z1) && (_n1r<(int)((res)._depth) || r==--_n1r); _p1r = r++, ++_n1r) for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); _p1q = q++, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); _p1p = p++, ++_n1p) if (cimg::abs(img(x,y,z,0) - img(p,q,r,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,_p1r,c), pQ[1] = (T)(img)(p,_p1q,_p1r,c), pQ[2] = (T)(img)(_n1p,_p1q,_p1r,c), pQ[3] = (T)(img)(_p1p,q,_p1r,c), pQ[4] = (T)(img)(p,q,_p1r,c), pQ[5] = (T)(img)(_n1p,q,_p1r,c), pQ[6] = (T)(img)(_p1p,_n1q,_p1r,c), pQ[7] = (T)(img)(p,_n1q,_p1r,c), pQ[8] = (T)(img)(_n1p,_n1q,_p1r,c), pQ[9] = (T)(img)(_p1p,_p1q,r,c), pQ[10] = (T)(img)(p,_p1q,r,c), pQ[11] = (T)(img)(_n1p,_p1q,r,c), pQ[12] = (T)(img)(_p1p,q,r,c), pQ[13] = (T)(img)(p,q,r,c), pQ[14] = (T)(img)(_n1p,q,r,c), pQ[15] = (T)(img)(_p1p,_n1q,r,c), pQ[16] = (T)(img)(p,_n1q,r,c), pQ[17] = (T)(img)(_n1p,_n1q,r,c), pQ[18] = (T)(img)(_p1p,_p1q,_n1r,c), pQ[19] = (T)(img)(p,_p1q,_n1r,c), pQ[20] = (T)(img)(_n1p,_p1q,_n1r,c), pQ[21] = (T)(img)(_p1p,q,_n1r,c), pQ[22] = (T)(img)(p,q,_n1r,c), pQ[23] = (T)(img)(_n1p,q,_n1r,c), pQ[24] = (T)(img)(_p1p,_n1q,_n1r,c), pQ[25] = (T)(img)(p,_n1q,_n1r,c), pQ[26] = (T)(img)(_n1p,_n1q,_n1r,c); pQ+=N3; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); } else for (int z = 0, _p1z = 0, _n1z = 1>=((res)._depth)?(int)((res)._depth)-1:1; _n1z<(int)((res)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; _p1x = x++, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,_p1z,c), pP[1] = (T)(img)(x,_p1y,_p1z,c), pP[2] = (T)(img)(_n1x,_p1y,_p1z,c), pP[3] = (T)(img)(_p1x,y,_p1z,c), pP[4] = (T)(img)(x,y,_p1z,c), pP[5] = (T)(img)(_n1x,y,_p1z,c), pP[6] = (T)(img)(_p1x,_n1y,_p1z,c), pP[7] = (T)(img)(x,_n1y,_p1z,c), pP[8] = (T)(img)(_n1x,_n1y,_p1z,c), pP[9] = (T)(img)(_p1x,_p1y,z,c), pP[10] = (T)(img)(x,_p1y,z,c), pP[11] = (T)(img)(_n1x,_p1y,z,c), pP[12] = (T)(img)(_p1x,y,z,c), pP[13] = (T)(img)(x,y,z,c), pP[14] = (T)(img)(_n1x,y,z,c), pP[15] = (T)(img)(_p1x,_n1y,z,c), pP[16] = (T)(img)(x,_n1y,z,c), pP[17] = (T)(img)(_n1x,_n1y,z,c), pP[18] = (T)(img)(_p1x,_p1y,_n1z,c), pP[19] = (T)(img)(x,_p1y,_n1z,c), pP[20] = (T)(img)(_n1x,_p1y,_n1z,c), pP[21] = (T)(img)(_p1x,y,_n1z,c), pP[22] = (T)(img)(x,y,_n1z,c), pP[23] = (T)(img)(_n1x,y,_n1z,c), pP[24] = (T)(img)(_p1x,_n1y,_n1z,c), pP[25] = (T)(img)(x,_n1y,_n1z,c), pP[26] = (T)(img)(_n1x,_n1y,_n1z,c); pP+=N3; } const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; float sum_weights = 0, weight_max = 0; for (int r = (int)(z0)<0?0:(int)(z0), _p1r = r-1<0?0:r-1, _n1r = r+1>=(int)((res)._depth)?(int)((res)._depth)-1:r+1; r<=(int)(z1) && (_n1r<(int)((res)._depth) || r==--_n1r); _p1r = r++, ++_n1r) for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); _p1q = q++, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); _p1p = p++, ++_n1p) if (p!=x || q!=y || r!=z) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,_p1r,c), pQ[1] = (T)(img)(p,_p1q,_p1r,c), pQ[2] = (T)(img)(_n1p,_p1q,_p1r,c), pQ[3] = (T)(img)(_p1p,q,_p1r,c), pQ[4] = (T)(img)(p,q,_p1r,c), pQ[5] = (T)(img)(_n1p,q,_p1r,c), pQ[6] = (T)(img)(_p1p,_n1q,_p1r,c), pQ[7] = (T)(img)(p,_n1q,_p1r,c), pQ[8] = (T)(img)(_n1p,_n1q,_p1r,c), pQ[9] = (T)(img)(_p1p,_p1q,r,c), pQ[10] = (T)(img)(p,_p1q,r,c), pQ[11] = (T)(img)(_n1p,_p1q,r,c), pQ[12] = (T)(img)(_p1p,q,r,c), pQ[13] = (T)(img)(p,q,r,c), pQ[14] = (T)(img)(_n1p,q,r,c), pQ[15] = (T)(img)(_p1p,_n1q,r,c), pQ[16] = (T)(img)(p,_n1q,r,c), pQ[17] = (T)(img)(_n1p,_n1q,r,c), pQ[18] = (T)(img)(_p1p,_p1q,_n1r,c), pQ[19] = (T)(img)(p,_p1q,_n1r,c), pQ[20] = (T)(img)(_n1p,_p1q,_n1r,c), pQ[21] = (T)(img)(_p1p,q,_n1r,c), pQ[22] = (T)(img)(p,q,_n1r,c), pQ[23] = (T)(img)(_n1p,q,_n1r,c), pQ[24] = (T)(img)(_p1p,_n1q,_n1r,c), pQ[25] = (T)(img)(p,_n1q,_n1r,c), pQ[26] = (T)(img)(_n1p,_n1q,_n1r,c); pQ+=N3; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); } break; > default : { > const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; > if (is_fast_approx) ># 25455 "./CImg.h" > ># 25455 "./CImg.h" >#pragma omp parallel for collapse(2) if (res._width>=32 && res._height*res._depth>=4) private(P,Q) ># 25455 "./CImg.h" ># 25455 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > P = img.get_crop(x - psize1,y - psize1,z - psize1,x + psize2,y + psize2,z + psize2,true); > const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; > float sum_weights = 0; > for (int r = (int)(z0)<0?0:(int)(z0), _maxr = (int)(z1)<(int)((res)._depth)?(int)(z1):(int)((res)._depth)-1; r<=_maxr; ++r) for (int q = (int)(y0)<0?0:(int)(y0), _maxq = (int)(y1)<(int)((res)._height)?(int)(y1):(int)((res)._height)-1; q<=_maxq; ++q) for (int p = (int)(x0)<0?0:(int)(x0), _maxp = (int)(x1)<(int)((res)._width)?(int)(x1):(int)((res)._width)-1; p<=_maxp; ++p) if (cimg::abs(img(x,y,z,0)-img(p,q,r,0))<sigma_p3) { > (Q = img.get_crop(p - psize1,q - psize1,r - psize1,p + psize2,q + psize2,r + psize2,true))-=P; > const float > dx = (float)x - p, dy = (float)y - q, dz = (float)z - r, > distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy + dz*dz)/sigma_s2), > weight = distance2>3?0.0f:1.0f; > sum_weights+=weight; > for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); > } > if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; > else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); > } else ># 25474 "./CImg.h" > ># 25474 "./CImg.h" >#pragma omp parallel for collapse(2) if (res._width>=32 && res._height*res._depth>=4) firstprivate(P,Q) ># 25474 "./CImg.h" ># 25474 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > P = img.get_crop(x - psize1,y - psize1,z - psize1,x + psize2,y + psize2,z + psize2,true); > const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; > float sum_weights = 0, weight_max = 0; > for (int r = (int)(z0)<0?0:(int)(z0), _maxr = (int)(z1)<(int)((res)._depth)?(int)(z1):(int)((res)._depth)-1; r<=_maxr; ++r) for (int q = (int)(y0)<0?0:(int)(y0), _maxq = (int)(y1)<(int)((res)._height)?(int)(y1):(int)((res)._height)-1; q<=_maxq; ++q) for (int p = (int)(x0)<0?0:(int)(x0), _maxp = (int)(x1)<(int)((res)._width)?(int)(x1):(int)((res)._width)-1; p<=_maxp; ++p) if (p!=x || q!=y || r!=z) { > (Q = img.get_crop(p - psize1,q - psize1,r - psize1,p + psize2,q + psize2,r + psize2,true))-=P; > const float > dx = (float)x - p, dy = (float)y - q, dz = (float)z - r, > distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy + dz*dz)/sigma_s2), > weight = (float)std::exp(-distance2); > if (weight>weight_max) weight_max = weight; > sum_weights+=weight; > for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); > } > sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); > if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; > else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); > } > } > } else switch (patch_size) { > case 2 : if (is_fast_approx) for (int y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; ++x, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(x,y,0,c), pP[1] = (T)(img)(_n1x,y,0,c), pP[2] = (T)(img)(x,_n1y,0,c), pP[3] = (T)(img)(_n1x,_n1y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); ++q, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); ++p, ++_n1p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(p,q,0,c), pQ[1] = (T)(img)(_n1p,q,0,c), pQ[2] = (T)(img)(p,_n1q,0,c), pQ[3] = (T)(img)(_n1p,_n1q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; ++x, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(x,y,0,c), pP[1] = (T)(img)(_n1x,y,0,c), pP[2] = (T)(img)(x,_n1y,0,c), pP[3] = (T)(img)(_n1x,_n1y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); ++q, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); ++p, ++_n1p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(p,q,0,c), pQ[1] = (T)(img)(_n1p,q,0,c), pQ[2] = (T)(img)(p,_n1q,0,c), pQ[3] = (T)(img)(_n1p,_n1q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 3 : if (is_fast_approx) for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; _p1x = x++, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,0,c), pP[1] = (T)(img)(x,_p1y,0,c), pP[2] = (T)(img)(_n1x,_p1y,0,c), pP[3] = (T)(img)(_p1x,y,0,c), pP[4] = (T)(img)(x,y,0,c), pP[5] = (T)(img)(_n1x,y,0,c), pP[6] = (T)(img)(_p1x,_n1y,0,c), pP[7] = (T)(img)(x,_n1y,0,c), pP[8] = (T)(img)(_n1x,_n1y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); _p1q = q++, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); _p1p = p++, ++_n1p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,0,c), pQ[1] = (T)(img)(p,_p1q,0,c), pQ[2] = (T)(img)(_n1p,_p1q,0,c), pQ[3] = (T)(img)(_p1p,q,0,c), pQ[4] = (T)(img)(p,q,0,c), pQ[5] = (T)(img)(_n1p,q,0,c), pQ[6] = (T)(img)(_p1p,_n1q,0,c), pQ[7] = (T)(img)(p,_n1q,0,c), pQ[8] = (T)(img)(_n1p,_n1q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; _p1x = x++, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,0,c), pP[1] = (T)(img)(x,_p1y,0,c), pP[2] = (T)(img)(_n1x,_p1y,0,c), pP[3] = (T)(img)(_p1x,y,0,c), pP[4] = (T)(img)(x,y,0,c), pP[5] = (T)(img)(_n1x,y,0,c), pP[6] = (T)(img)(_p1x,_n1y,0,c), pP[7] = (T)(img)(x,_n1y,0,c), pP[8] = (T)(img)(_n1x,_n1y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); _p1q = q++, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); _p1p = p++, ++_n1p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,0,c), pQ[1] = (T)(img)(p,_p1q,0,c), pQ[2] = (T)(img)(_n1p,_p1q,0,c), pQ[3] = (T)(img)(_p1p,q,0,c), pQ[4] = (T)(img)(p,q,0,c), pQ[5] = (T)(img)(_n1p,q,0,c), pQ[6] = (T)(img)(_p1p,_n1q,0,c), pQ[7] = (T)(img)(p,_n1q,0,c), pQ[8] = (T)(img)(_n1p,_n1q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 4 : if (is_fast_approx) for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2; _n2y<(int)((res)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2; _n2x<(int)((res)._width) || _n1x==--_n2x || x==(_n2x = --_n1x); _p1x = x++, ++_n1x, ++_n2x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,0,c), pP[1] = (T)(img)(x,_p1y,0,c), pP[2] = (T)(img)(_n1x,_p1y,0,c), pP[3] = (T)(img)(_n2x,_p1y,0,c), pP[4] = (T)(img)(_p1x,y,0,c), pP[5] = (T)(img)(x,y,0,c), pP[6] = (T)(img)(_n1x,y,0,c), pP[7] = (T)(img)(_n2x,y,0,c), pP[8] = (T)(img)(_p1x,_n1y,0,c), pP[9] = (T)(img)(x,_n1y,0,c), pP[10] = (T)(img)(_n1x,_n1y,0,c), pP[11] = (T)(img)(_n2x,_n1y,0,c), pP[12] = (T)(img)(_p1x,_n2y,0,c), pP[13] = (T)(img)(x,_n2y,0,c), pP[14] = (T)(img)(_n1x,_n2y,0,c), pP[15] = (T)(img)(_n2x,_n2y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2; q<=(int)(y1) && (_n2q<(int)((res)._height) || _n1q==--_n2q || q==(_n2q = --_n1q)); _p1q = q++, ++_n1q, ++_n2q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2; p<=(int)(x1) && (_n2p<(int)((res)._width) || _n1p==--_n2p || p==(_n2p = --_n1p)); _p1p = p++, ++_n1p, ++_n2p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,0,c), pQ[1] = (T)(img)(p,_p1q,0,c), pQ[2] = (T)(img)(_n1p,_p1q,0,c), pQ[3] = (T)(img)(_n2p,_p1q,0,c), pQ[4] = (T)(img)(_p1p,q,0,c), pQ[5] = (T)(img)(p,q,0,c), pQ[6] = (T)(img)(_n1p,q,0,c), pQ[7] = (T)(img)(_n2p,q,0,c), pQ[8] = (T)(img)(_p1p,_n1q,0,c), pQ[9] = (T)(img)(p,_n1q,0,c), pQ[10] = (T)(img)(_n1p,_n1q,0,c), pQ[11] = (T)(img)(_n2p,_n1q,0,c), pQ[12] = (T)(img)(_p1p,_n2q,0,c), pQ[13] = (T)(img)(p,_n2q,0,c), pQ[14] = (T)(img)(_n1p,_n2q,0,c), pQ[15] = (T)(img)(_n2p,_n2q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2; _n2y<(int)((res)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2; _n2x<(int)((res)._width) || _n1x==--_n2x || x==(_n2x = --_n1x); _p1x = x++, ++_n1x, ++_n2x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,0,c), pP[1] = (T)(img)(x,_p1y,0,c), pP[2] = (T)(img)(_n1x,_p1y,0,c), pP[3] = (T)(img)(_n2x,_p1y,0,c), pP[4] = (T)(img)(_p1x,y,0,c), pP[5] = (T)(img)(x,y,0,c), pP[6] = (T)(img)(_n1x,y,0,c), pP[7] = (T)(img)(_n2x,y,0,c), pP[8] = (T)(img)(_p1x,_n1y,0,c), pP[9] = (T)(img)(x,_n1y,0,c), pP[10] = (T)(img)(_n1x,_n1y,0,c), pP[11] = (T)(img)(_n2x,_n1y,0,c), pP[12] = (T)(img)(_p1x,_n2y,0,c), pP[13] = (T)(img)(x,_n2y,0,c), pP[14] = (T)(img)(_n1x,_n2y,0,c), pP[15] = (T)(img)(_n2x,_n2y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2; q<=(int)(y1) && (_n2q<(int)((res)._height) || _n1q==--_n2q || q==(_n2q = --_n1q)); _p1q = q++, ++_n1q, ++_n2q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2; p<=(int)(x1) && (_n2p<(int)((res)._width) || _n1p==--_n2p || p==(_n2p = --_n1p)); _p1p = p++, ++_n1p, ++_n2p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,0,c), pQ[1] = (T)(img)(p,_p1q,0,c), pQ[2] = (T)(img)(_n1p,_p1q,0,c), pQ[3] = (T)(img)(_n2p,_p1q,0,c), pQ[4] = (T)(img)(_p1p,q,0,c), pQ[5] = (T)(img)(p,q,0,c), pQ[6] = (T)(img)(_n1p,q,0,c), pQ[7] = (T)(img)(_n2p,q,0,c), pQ[8] = (T)(img)(_p1p,_n1q,0,c), pQ[9] = (T)(img)(p,_n1q,0,c), pQ[10] = (T)(img)(_n1p,_n1q,0,c), pQ[11] = (T)(img)(_n2p,_n1q,0,c), pQ[12] = (T)(img)(_p1p,_n2q,0,c), pQ[13] = (T)(img)(p,_n2q,0,c), pQ[14] = (T)(img)(_n1p,_n2q,0,c), pQ[15] = (T)(img)(_n2p,_n2q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 5 : if (is_fast_approx) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2; _n2y<(int)((res)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2; _n2x<(int)((res)._width) || _n1x==--_n2x || x==(_n2x = --_n1x); _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p2x,_p2y,0,c), pP[1] = (T)(img)(_p1x,_p2y,0,c), pP[2] = (T)(img)(x,_p2y,0,c), pP[3] = (T)(img)(_n1x,_p2y,0,c), pP[4] = (T)(img)(_n2x,_p2y,0,c), pP[5] = (T)(img)(_p2x,_p1y,0,c), pP[6] = (T)(img)(_p1x,_p1y,0,c), pP[7] = (T)(img)(x,_p1y,0,c), pP[8] = (T)(img)(_n1x,_p1y,0,c), pP[9] = (T)(img)(_n2x,_p1y,0,c), pP[10] = (T)(img)(_p2x,y,0,c), pP[11] = (T)(img)(_p1x,y,0,c), pP[12] = (T)(img)(x,y,0,c), pP[13] = (T)(img)(_n1x,y,0,c), pP[14] = (T)(img)(_n2x,y,0,c), pP[15] = (T)(img)(_p2x,_n1y,0,c), pP[16] = (T)(img)(_p1x,_n1y,0,c), pP[17] = (T)(img)(x,_n1y,0,c), pP[18] = (T)(img)(_n1x,_n1y,0,c), pP[19] = (T)(img)(_n2x,_n1y,0,c), pP[20] = (T)(img)(_p2x,_n2y,0,c), pP[21] = (T)(img)(_p1x,_n2y,0,c), pP[22] = (T)(img)(x,_n2y,0,c), pP[23] = (T)(img)(_n1x,_n2y,0,c), pP[24] = (T)(img)(_n2x,_n2y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2; q<=(int)(y1) && (_n2q<(int)((res)._height) || _n1q==--_n2q || q==(_n2q = --_n1q)); _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q) for (int p = (int)(x0)<0?0:(int)(x0), _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2; p<=(int)(x1) && (_n2p<(int)((res)._width) || _n1p==--_n2p || p==(_n2p = --_n1p)); _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p2p,_p2q,0,c), pQ[1] = (T)(img)(_p1p,_p2q,0,c), pQ[2] = (T)(img)(p,_p2q,0,c), pQ[3] = (T)(img)(_n1p,_p2q,0,c), pQ[4] = (T)(img)(_n2p,_p2q,0,c), pQ[5] = (T)(img)(_p2p,_p1q,0,c), pQ[6] = (T)(img)(_p1p,_p1q,0,c), pQ[7] = (T)(img)(p,_p1q,0,c), pQ[8] = (T)(img)(_n1p,_p1q,0,c), pQ[9] = (T)(img)(_n2p,_p1q,0,c), pQ[10] = (T)(img)(_p2p,q,0,c), pQ[11] = (T)(img)(_p1p,q,0,c), pQ[12] = (T)(img)(p,q,0,c), pQ[13] = (T)(img)(_n1p,q,0,c), pQ[14] = (T)(img)(_n2p,q,0,c), pQ[15] = (T)(img)(_p2p,_n1q,0,c), pQ[16] = (T)(img)(_p1p,_n1q,0,c), pQ[17] = (T)(img)(p,_n1q,0,c), pQ[18] = (T)(img)(_n1p,_n1q,0,c), pQ[19] = (T)(img)(_n2p,_n1q,0,c), pQ[20] = (T)(img)(_p2p,_n2q,0,c), pQ[21] = (T)(img)(_p1p,_n2q,0,c), pQ[22] = (T)(img)(p,_n2q,0,c), pQ[23] = (T)(img)(_n1p,_n2q,0,c), pQ[24] = (T)(img)(_n2p,_n2q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2; _n2y<(int)((res)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2; _n2x<(int)((res)._width) || _n1x==--_n2x || x==(_n2x = --_n1x); _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p2x,_p2y,0,c), pP[1] = (T)(img)(_p1x,_p2y,0,c), pP[2] = (T)(img)(x,_p2y,0,c), pP[3] = (T)(img)(_n1x,_p2y,0,c), pP[4] = (T)(img)(_n2x,_p2y,0,c), pP[5] = (T)(img)(_p2x,_p1y,0,c), pP[6] = (T)(img)(_p1x,_p1y,0,c), pP[7] = (T)(img)(x,_p1y,0,c), pP[8] = (T)(img)(_n1x,_p1y,0,c), pP[9] = (T)(img)(_n2x,_p1y,0,c), pP[10] = (T)(img)(_p2x,y,0,c), pP[11] = (T)(img)(_p1x,y,0,c), pP[12] = (T)(img)(x,y,0,c), pP[13] = (T)(img)(_n1x,y,0,c), pP[14] = (T)(img)(_n2x,y,0,c), pP[15] = (T)(img)(_p2x,_n1y,0,c), pP[16] = (T)(img)(_p1x,_n1y,0,c), pP[17] = (T)(img)(x,_n1y,0,c), pP[18] = (T)(img)(_n1x,_n1y,0,c), pP[19] = (T)(img)(_n2x,_n1y,0,c), pP[20] = (T)(img)(_p2x,_n2y,0,c), pP[21] = (T)(img)(_p1x,_n2y,0,c), pP[22] = (T)(img)(x,_n2y,0,c), pP[23] = (T)(img)(_n1x,_n2y,0,c), pP[24] = (T)(img)(_n2x,_n2y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2; q<=(int)(y1) && (_n2q<(int)((res)._height) || _n1q==--_n2q || q==(_n2q = --_n1q)); _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q) for (int p = (int)(x0)<0?0:(int)(x0), _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2; p<=(int)(x1) && (_n2p<(int)((res)._width) || _n1p==--_n2p || p==(_n2p = --_n1p)); _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p2p,_p2q,0,c), pQ[1] = (T)(img)(_p1p,_p2q,0,c), pQ[2] = (T)(img)(p,_p2q,0,c), pQ[3] = (T)(img)(_n1p,_p2q,0,c), pQ[4] = (T)(img)(_n2p,_p2q,0,c), pQ[5] = (T)(img)(_p2p,_p1q,0,c), pQ[6] = (T)(img)(_p1p,_p1q,0,c), pQ[7] = (T)(img)(p,_p1q,0,c), pQ[8] = (T)(img)(_n1p,_p1q,0,c), pQ[9] = (T)(img)(_n2p,_p1q,0,c), pQ[10] = (T)(img)(_p2p,q,0,c), pQ[11] = (T)(img)(_p1p,q,0,c), pQ[12] = (T)(img)(p,q,0,c), pQ[13] = (T)(img)(_n1p,q,0,c), pQ[14] = (T)(img)(_n2p,q,0,c), pQ[15] = (T)(img)(_p2p,_n1q,0,c), pQ[16] = (T)(img)(_p1p,_n1q,0,c), pQ[17] = (T)(img)(p,_n1q,0,c), pQ[18] = (T)(img)(_n1p,_n1q,0,c), pQ[19] = (T)(img)(_n2p,_n1q,0,c), pQ[20] = (T)(img)(_p2p,_n2q,0,c), pQ[21] = (T)(img)(_p1p,_n2q,0,c), pQ[22] = (T)(img)(p,_n2q,0,c), pQ[23] = (T)(img)(_n1p,_n2q,0,c), pQ[24] = (T)(img)(_n2p,_n2q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 6 : if (is_fast_approx) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3; _n3y<(int)((res)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3; _n3x<(int)((res)._width) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p2x,_p2y,0,c), pP[1] = (T)(img)(_p1x,_p2y,0,c), pP[2] = (T)(img)(x,_p2y,0,c), pP[3] = (T)(img)(_n1x,_p2y,0,c), pP[4] = (T)(img)(_n2x,_p2y,0,c), pP[5] = (T)(img)(_n3x,_p2y,0,c), pP[6] = (T)(img)(_p2x,_p1y,0,c), pP[7] = (T)(img)(_p1x,_p1y,0,c), pP[8] = (T)(img)(x,_p1y,0,c), pP[9] = (T)(img)(_n1x,_p1y,0,c), pP[10] = (T)(img)(_n2x,_p1y,0,c), pP[11] = (T)(img)(_n3x,_p1y,0,c), pP[12] = (T)(img)(_p2x,y,0,c), pP[13] = (T)(img)(_p1x,y,0,c), pP[14] = (T)(img)(x,y,0,c), pP[15] = (T)(img)(_n1x,y,0,c), pP[16] = (T)(img)(_n2x,y,0,c), pP[17] = (T)(img)(_n3x,y,0,c), pP[18] = (T)(img)(_p2x,_n1y,0,c), pP[19] = (T)(img)(_p1x,_n1y,0,c), pP[20] = (T)(img)(x,_n1y,0,c), pP[21] = (T)(img)(_n1x,_n1y,0,c), pP[22] = (T)(img)(_n2x,_n1y,0,c), pP[23] = (T)(img)(_n3x,_n1y,0,c), pP[24] = (T)(img)(_p2x,_n2y,0,c), pP[25] = (T)(img)(_p1x,_n2y,0,c), pP[26] = (T)(img)(x,_n2y,0,c), pP[27] = (T)(img)(_n1x,_n2y,0,c), pP[28] = (T)(img)(_n2x,_n2y,0,c), pP[29] = (T)(img)(_n3x,_n2y,0,c), pP[30] = (T)(img)(_p2x,_n3y,0,c), pP[31] = (T)(img)(_p1x,_n3y,0,c), pP[32] = (T)(img)(x,_n3y,0,c), pP[33] = (T)(img)(_n1x,_n3y,0,c), pP[34] = (T)(img)(_n2x,_n3y,0,c), pP[35] = (T)(img)(_n3x,_n3y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3; q<=(int)(y1) && (_n3q<(int)((res)._height) || _n2q==--_n3q || _n1q==--_n2q || q==(_n3q = _n2q = --_n1q)); _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q) for (int p = (int)(x0)<0?0:(int)(x0), _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3; p<=(int)(x1) && (_n3p<(int)((res)._width) || _n2p==--_n3p || _n1p==--_n2p || p==(_n3p = _n2p = --_n1p)); _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p2p,_p2q,0,c), pQ[1] = (T)(img)(_p1p,_p2q,0,c), pQ[2] = (T)(img)(p,_p2q,0,c), pQ[3] = (T)(img)(_n1p,_p2q,0,c), pQ[4] = (T)(img)(_n2p,_p2q,0,c), pQ[5] = (T)(img)(_n3p,_p2q,0,c), pQ[6] = (T)(img)(_p2p,_p1q,0,c), pQ[7] = (T)(img)(_p1p,_p1q,0,c), pQ[8] = (T)(img)(p,_p1q,0,c), pQ[9] = (T)(img)(_n1p,_p1q,0,c), pQ[10] = (T)(img)(_n2p,_p1q,0,c), pQ[11] = (T)(img)(_n3p,_p1q,0,c), pQ[12] = (T)(img)(_p2p,q,0,c), pQ[13] = (T)(img)(_p1p,q,0,c), pQ[14] = (T)(img)(p,q,0,c), pQ[15] = (T)(img)(_n1p,q,0,c), pQ[16] = (T)(img)(_n2p,q,0,c), pQ[17] = (T)(img)(_n3p,q,0,c), pQ[18] = (T)(img)(_p2p,_n1q,0,c), pQ[19] = (T)(img)(_p1p,_n1q,0,c), pQ[20] = (T)(img)(p,_n1q,0,c), pQ[21] = (T)(img)(_n1p,_n1q,0,c), pQ[22] = (T)(img)(_n2p,_n1q,0,c), pQ[23] = (T)(img)(_n3p,_n1q,0,c), pQ[24] = (T)(img)(_p2p,_n2q,0,c), pQ[25] = (T)(img)(_p1p,_n2q,0,c), pQ[26] = (T)(img)(p,_n2q,0,c), pQ[27] = (T)(img)(_n1p,_n2q,0,c), pQ[28] = (T)(img)(_n2p,_n2q,0,c), pQ[29] = (T)(img)(_n3p,_n2q,0,c), pQ[30] = (T)(img)(_p2p,_n3q,0,c), pQ[31] = (T)(img)(_p1p,_n3q,0,c), pQ[32] = (T)(img)(p,_n3q,0,c), pQ[33] = (T)(img)(_n1p,_n3q,0,c), pQ[34] = (T)(img)(_n2p,_n3q,0,c), pQ[35] = (T)(img)(_n3p,_n3q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3; _n3y<(int)((res)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3; _n3x<(int)((res)._width) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p2x,_p2y,0,c), pP[1] = (T)(img)(_p1x,_p2y,0,c), pP[2] = (T)(img)(x,_p2y,0,c), pP[3] = (T)(img)(_n1x,_p2y,0,c), pP[4] = (T)(img)(_n2x,_p2y,0,c), pP[5] = (T)(img)(_n3x,_p2y,0,c), pP[6] = (T)(img)(_p2x,_p1y,0,c), pP[7] = (T)(img)(_p1x,_p1y,0,c), pP[8] = (T)(img)(x,_p1y,0,c), pP[9] = (T)(img)(_n1x,_p1y,0,c), pP[10] = (T)(img)(_n2x,_p1y,0,c), pP[11] = (T)(img)(_n3x,_p1y,0,c), pP[12] = (T)(img)(_p2x,y,0,c), pP[13] = (T)(img)(_p1x,y,0,c), pP[14] = (T)(img)(x,y,0,c), pP[15] = (T)(img)(_n1x,y,0,c), pP[16] = (T)(img)(_n2x,y,0,c), pP[17] = (T)(img)(_n3x,y,0,c), pP[18] = (T)(img)(_p2x,_n1y,0,c), pP[19] = (T)(img)(_p1x,_n1y,0,c), pP[20] = (T)(img)(x,_n1y,0,c), pP[21] = (T)(img)(_n1x,_n1y,0,c), pP[22] = (T)(img)(_n2x,_n1y,0,c), pP[23] = (T)(img)(_n3x,_n1y,0,c), pP[24] = (T)(img)(_p2x,_n2y,0,c), pP[25] = (T)(img)(_p1x,_n2y,0,c), pP[26] = (T)(img)(x,_n2y,0,c), pP[27] = (T)(img)(_n1x,_n2y,0,c), pP[28] = (T)(img)(_n2x,_n2y,0,c), pP[29] = (T)(img)(_n3x,_n2y,0,c), pP[30] = (T)(img)(_p2x,_n3y,0,c), pP[31] = (T)(img)(_p1x,_n3y,0,c), pP[32] = (T)(img)(x,_n3y,0,c), pP[33] = (T)(img)(_n1x,_n3y,0,c), pP[34] = (T)(img)(_n2x,_n3y,0,c), pP[35] = (T)(img)(_n3x,_n3y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3; q<=(int)(y1) && (_n3q<(int)((res)._height) || _n2q==--_n3q || _n1q==--_n2q || q==(_n3q = _n2q = --_n1q)); _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q) for (int p = (int)(x0)<0?0:(int)(x0), _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3; p<=(int)(x1) && (_n3p<(int)((res)._width) || _n2p==--_n3p || _n1p==--_n2p || p==(_n3p = _n2p = --_n1p)); _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p2p,_p2q,0,c), pQ[1] = (T)(img)(_p1p,_p2q,0,c), pQ[2] = (T)(img)(p,_p2q,0,c), pQ[3] = (T)(img)(_n1p,_p2q,0,c), pQ[4] = (T)(img)(_n2p,_p2q,0,c), pQ[5] = (T)(img)(_n3p,_p2q,0,c), pQ[6] = (T)(img)(_p2p,_p1q,0,c), pQ[7] = (T)(img)(_p1p,_p1q,0,c), pQ[8] = (T)(img)(p,_p1q,0,c), pQ[9] = (T)(img)(_n1p,_p1q,0,c), pQ[10] = (T)(img)(_n2p,_p1q,0,c), pQ[11] = (T)(img)(_n3p,_p1q,0,c), pQ[12] = (T)(img)(_p2p,q,0,c), pQ[13] = (T)(img)(_p1p,q,0,c), pQ[14] = (T)(img)(p,q,0,c), pQ[15] = (T)(img)(_n1p,q,0,c), pQ[16] = (T)(img)(_n2p,q,0,c), pQ[17] = (T)(img)(_n3p,q,0,c), pQ[18] = (T)(img)(_p2p,_n1q,0,c), pQ[19] = (T)(img)(_p1p,_n1q,0,c), pQ[20] = (T)(img)(p,_n1q,0,c), pQ[21] = (T)(img)(_n1p,_n1q,0,c), pQ[22] = (T)(img)(_n2p,_n1q,0,c), pQ[23] = (T)(img)(_n3p,_n1q,0,c), pQ[24] = (T)(img)(_p2p,_n2q,0,c), pQ[25] = (T)(img)(_p1p,_n2q,0,c), pQ[26] = (T)(img)(p,_n2q,0,c), pQ[27] = (T)(img)(_n1p,_n2q,0,c), pQ[28] = (T)(img)(_n2p,_n2q,0,c), pQ[29] = (T)(img)(_n3p,_n2q,0,c), pQ[30] = (T)(img)(_p2p,_n3q,0,c), pQ[31] = (T)(img)(_p1p,_n3q,0,c), pQ[32] = (T)(img)(p,_n3q,0,c), pQ[33] = (T)(img)(_n1p,_n3q,0,c), pQ[34] = (T)(img)(_n2p,_n3q,0,c), pQ[35] = (T)(img)(_n3p,_n3q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 7 : if (is_fast_approx) for (int y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3; _n3y<(int)((res)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3; _n3x<(int)((res)._width) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p3x,_p3y,0,c), pP[1] = (T)(img)(_p2x,_p3y,0,c), pP[2] = (T)(img)(_p1x,_p3y,0,c), pP[3] = (T)(img)(x,_p3y,0,c), pP[4] = (T)(img)(_n1x,_p3y,0,c), pP[5] = (T)(img)(_n2x,_p3y,0,c), pP[6] = (T)(img)(_n3x,_p3y,0,c), pP[7] = (T)(img)(_p3x,_p2y,0,c), pP[8] = (T)(img)(_p2x,_p2y,0,c), pP[9] = (T)(img)(_p1x,_p2y,0,c), pP[10] = (T)(img)(x,_p2y,0,c), pP[11] = (T)(img)(_n1x,_p2y,0,c), pP[12] = (T)(img)(_n2x,_p2y,0,c), pP[13] = (T)(img)(_n3x,_p2y,0,c), pP[14] = (T)(img)(_p3x,_p1y,0,c), pP[15] = (T)(img)(_p2x,_p1y,0,c), pP[16] = (T)(img)(_p1x,_p1y,0,c), pP[17] = (T)(img)(x,_p1y,0,c), pP[18] = (T)(img)(_n1x,_p1y,0,c), pP[19] = (T)(img)(_n2x,_p1y,0,c), pP[20] = (T)(img)(_n3x,_p1y,0,c), pP[21] = (T)(img)(_p3x,y,0,c), pP[22] = (T)(img)(_p2x,y,0,c), pP[23] = (T)(img)(_p1x,y,0,c), pP[24] = (T)(img)(x,y,0,c), pP[25] = (T)(img)(_n1x,y,0,c), pP[26] = (T)(img)(_n2x,y,0,c), pP[27] = (T)(img)(_n3x,y,0,c), pP[28] = (T)(img)(_p3x,_n1y,0,c), pP[29] = (T)(img)(_p2x,_n1y,0,c), pP[30] = (T)(img)(_p1x,_n1y,0,c), pP[31] = (T)(img)(x,_n1y,0,c), pP[32] = (T)(img)(_n1x,_n1y,0,c), pP[33] = (T)(img)(_n2x,_n1y,0,c), pP[34] = (T)(img)(_n3x,_n1y,0,c), pP[35] = (T)(img)(_p3x,_n2y,0,c), pP[36] = (T)(img)(_p2x,_n2y,0,c), pP[37] = (T)(img)(_p1x,_n2y,0,c), pP[38] = (T)(img)(x,_n2y,0,c), pP[39] = (T)(img)(_n1x,_n2y,0,c), pP[40] = (T)(img)(_n2x,_n2y,0,c), pP[41] = (T)(img)(_n3x,_n2y,0,c), pP[42] = (T)(img)(_p3x,_n3y,0,c), pP[43] = (T)(img)(_p2x,_n3y,0,c), pP[44] = (T)(img)(_p1x,_n3y,0,c), pP[45] = (T)(img)(x,_n3y,0,c), pP[46] = (T)(img)(_n1x,_n3y,0,c), pP[47] = (T)(img)(_n2x,_n3y,0,c), pP[48] = (T)(img)(_n3x,_n3y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3; q<=(int)(y1) && (_n3q<(int)((res)._height) || _n2q==--_n3q || _n1q==--_n2q || q==(_n3q = _n2q = --_n1q)); _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q) for (int p = (int)(x0)<0?0:(int)(x0), _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3; p<=(int)(x1) && (_n3p<(int)((res)._width) || _n2p==--_n3p || _n1p==--_n2p || p==(_n3p = _n2p = --_n1p)); _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p3p,_p3q,0,c), pQ[1] = (T)(img)(_p2p,_p3q,0,c), pQ[2] = (T)(img)(_p1p,_p3q,0,c), pQ[3] = (T)(img)(p,_p3q,0,c), pQ[4] = (T)(img)(_n1p,_p3q,0,c), pQ[5] = (T)(img)(_n2p,_p3q,0,c), pQ[6] = (T)(img)(_n3p,_p3q,0,c), pQ[7] = (T)(img)(_p3p,_p2q,0,c), pQ[8] = (T)(img)(_p2p,_p2q,0,c), pQ[9] = (T)(img)(_p1p,_p2q,0,c), pQ[10] = (T)(img)(p,_p2q,0,c), pQ[11] = (T)(img)(_n1p,_p2q,0,c), pQ[12] = (T)(img)(_n2p,_p2q,0,c), pQ[13] = (T)(img)(_n3p,_p2q,0,c), pQ[14] = (T)(img)(_p3p,_p1q,0,c), pQ[15] = (T)(img)(_p2p,_p1q,0,c), pQ[16] = (T)(img)(_p1p,_p1q,0,c), pQ[17] = (T)(img)(p,_p1q,0,c), pQ[18] = (T)(img)(_n1p,_p1q,0,c), pQ[19] = (T)(img)(_n2p,_p1q,0,c), pQ[20] = (T)(img)(_n3p,_p1q,0,c), pQ[21] = (T)(img)(_p3p,q,0,c), pQ[22] = (T)(img)(_p2p,q,0,c), pQ[23] = (T)(img)(_p1p,q,0,c), pQ[24] = (T)(img)(p,q,0,c), pQ[25] = (T)(img)(_n1p,q,0,c), pQ[26] = (T)(img)(_n2p,q,0,c), pQ[27] = (T)(img)(_n3p,q,0,c), pQ[28] = (T)(img)(_p3p,_n1q,0,c), pQ[29] = (T)(img)(_p2p,_n1q,0,c), pQ[30] = (T)(img)(_p1p,_n1q,0,c), pQ[31] = (T)(img)(p,_n1q,0,c), pQ[32] = (T)(img)(_n1p,_n1q,0,c), pQ[33] = (T)(img)(_n2p,_n1q,0,c), pQ[34] = (T)(img)(_n3p,_n1q,0,c), pQ[35] = (T)(img)(_p3p,_n2q,0,c), pQ[36] = (T)(img)(_p2p,_n2q,0,c), pQ[37] = (T)(img)(_p1p,_n2q,0,c), pQ[38] = (T)(img)(p,_n2q,0,c), pQ[39] = (T)(img)(_n1p,_n2q,0,c), pQ[40] = (T)(img)(_n2p,_n2q,0,c), pQ[41] = (T)(img)(_n3p,_n2q,0,c), pQ[42] = (T)(img)(_p3p,_n3q,0,c), pQ[43] = (T)(img)(_p2p,_n3q,0,c), pQ[44] = (T)(img)(_p1p,_n3q,0,c), pQ[45] = (T)(img)(p,_n3q,0,c), pQ[46] = (T)(img)(_n1p,_n3q,0,c), pQ[47] = (T)(img)(_n2p,_n3q,0,c), pQ[48] = (T)(img)(_n3p,_n3q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3; _n3y<(int)((res)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3; _n3x<(int)((res)._width) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p3x,_p3y,0,c), pP[1] = (T)(img)(_p2x,_p3y,0,c), pP[2] = (T)(img)(_p1x,_p3y,0,c), pP[3] = (T)(img)(x,_p3y,0,c), pP[4] = (T)(img)(_n1x,_p3y,0,c), pP[5] = (T)(img)(_n2x,_p3y,0,c), pP[6] = (T)(img)(_n3x,_p3y,0,c), pP[7] = (T)(img)(_p3x,_p2y,0,c), pP[8] = (T)(img)(_p2x,_p2y,0,c), pP[9] = (T)(img)(_p1x,_p2y,0,c), pP[10] = (T)(img)(x,_p2y,0,c), pP[11] = (T)(img)(_n1x,_p2y,0,c), pP[12] = (T)(img)(_n2x,_p2y,0,c), pP[13] = (T)(img)(_n3x,_p2y,0,c), pP[14] = (T)(img)(_p3x,_p1y,0,c), pP[15] = (T)(img)(_p2x,_p1y,0,c), pP[16] = (T)(img)(_p1x,_p1y,0,c), pP[17] = (T)(img)(x,_p1y,0,c), pP[18] = (T)(img)(_n1x,_p1y,0,c), pP[19] = (T)(img)(_n2x,_p1y,0,c), pP[20] = (T)(img)(_n3x,_p1y,0,c), pP[21] = (T)(img)(_p3x,y,0,c), pP[22] = (T)(img)(_p2x,y,0,c), pP[23] = (T)(img)(_p1x,y,0,c), pP[24] = (T)(img)(x,y,0,c), pP[25] = (T)(img)(_n1x,y,0,c), pP[26] = (T)(img)(_n2x,y,0,c), pP[27] = (T)(img)(_n3x,y,0,c), pP[28] = (T)(img)(_p3x,_n1y,0,c), pP[29] = (T)(img)(_p2x,_n1y,0,c), pP[30] = (T)(img)(_p1x,_n1y,0,c), pP[31] = (T)(img)(x,_n1y,0,c), pP[32] = (T)(img)(_n1x,_n1y,0,c), pP[33] = (T)(img)(_n2x,_n1y,0,c), pP[34] = (T)(img)(_n3x,_n1y,0,c), pP[35] = (T)(img)(_p3x,_n2y,0,c), pP[36] = (T)(img)(_p2x,_n2y,0,c), pP[37] = (T)(img)(_p1x,_n2y,0,c), pP[38] = (T)(img)(x,_n2y,0,c), pP[39] = (T)(img)(_n1x,_n2y,0,c), pP[40] = (T)(img)(_n2x,_n2y,0,c), pP[41] = (T)(img)(_n3x,_n2y,0,c), pP[42] = (T)(img)(_p3x,_n3y,0,c), pP[43] = (T)(img)(_p2x,_n3y,0,c), pP[44] = (T)(img)(_p1x,_n3y,0,c), pP[45] = (T)(img)(x,_n3y,0,c), pP[46] = (T)(img)(_n1x,_n3y,0,c), pP[47] = (T)(img)(_n2x,_n3y,0,c), pP[48] = (T)(img)(_n3x,_n3y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3; q<=(int)(y1) && (_n3q<(int)((res)._height) || _n2q==--_n3q || _n1q==--_n2q || q==(_n3q = _n2q = --_n1q)); _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q) for (int p = (int)(x0)<0?0:(int)(x0), _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3; p<=(int)(x1) && (_n3p<(int)((res)._width) || _n2p==--_n3p || _n1p==--_n2p || p==(_n3p = _n2p = --_n1p)); _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p3p,_p3q,0,c), pQ[1] = (T)(img)(_p2p,_p3q,0,c), pQ[2] = (T)(img)(_p1p,_p3q,0,c), pQ[3] = (T)(img)(p,_p3q,0,c), pQ[4] = (T)(img)(_n1p,_p3q,0,c), pQ[5] = (T)(img)(_n2p,_p3q,0,c), pQ[6] = (T)(img)(_n3p,_p3q,0,c), pQ[7] = (T)(img)(_p3p,_p2q,0,c), pQ[8] = (T)(img)(_p2p,_p2q,0,c), pQ[9] = (T)(img)(_p1p,_p2q,0,c), pQ[10] = (T)(img)(p,_p2q,0,c), pQ[11] = (T)(img)(_n1p,_p2q,0,c), pQ[12] = (T)(img)(_n2p,_p2q,0,c), pQ[13] = (T)(img)(_n3p,_p2q,0,c), pQ[14] = (T)(img)(_p3p,_p1q,0,c), pQ[15] = (T)(img)(_p2p,_p1q,0,c), pQ[16] = (T)(img)(_p1p,_p1q,0,c), pQ[17] = (T)(img)(p,_p1q,0,c), pQ[18] = (T)(img)(_n1p,_p1q,0,c), pQ[19] = (T)(img)(_n2p,_p1q,0,c), pQ[20] = (T)(img)(_n3p,_p1q,0,c), pQ[21] = (T)(img)(_p3p,q,0,c), pQ[22] = (T)(img)(_p2p,q,0,c), pQ[23] = (T)(img)(_p1p,q,0,c), pQ[24] = (T)(img)(p,q,0,c), pQ[25] = (T)(img)(_n1p,q,0,c), pQ[26] = (T)(img)(_n2p,q,0,c), pQ[27] = (T)(img)(_n3p,q,0,c), pQ[28] = (T)(img)(_p3p,_n1q,0,c), pQ[29] = (T)(img)(_p2p,_n1q,0,c), pQ[30] = (T)(img)(_p1p,_n1q,0,c), pQ[31] = (T)(img)(p,_n1q,0,c), pQ[32] = (T)(img)(_n1p,_n1q,0,c), pQ[33] = (T)(img)(_n2p,_n1q,0,c), pQ[34] = (T)(img)(_n3p,_n1q,0,c), pQ[35] = (T)(img)(_p3p,_n2q,0,c), pQ[36] = (T)(img)(_p2p,_n2q,0,c), pQ[37] = (T)(img)(_p1p,_n2q,0,c), pQ[38] = (T)(img)(p,_n2q,0,c), pQ[39] = (T)(img)(_n1p,_n2q,0,c), pQ[40] = (T)(img)(_n2p,_n2q,0,c), pQ[41] = (T)(img)(_n3p,_n2q,0,c), pQ[42] = (T)(img)(_p3p,_n3q,0,c), pQ[43] = (T)(img)(_p2p,_n3q,0,c), pQ[44] = (T)(img)(_p1p,_n3q,0,c), pQ[45] = (T)(img)(p,_n3q,0,c), pQ[46] = (T)(img)(_n1p,_n3q,0,c), pQ[47] = (T)(img)(_n2p,_n3q,0,c), pQ[48] = (T)(img)(_n3p,_n3q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 8 : if (is_fast_approx) for (int y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3, _n4y = 4>=((res)._height)?(int)((res)._height)-1:4; _n4y<(int)((res)._height) || _n3y==--_n4y || _n2y==--_n3y || _n1y==--_n2y || y==(_n4y = _n3y = _n2y = --_n1y); _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y, ++_n4y) for (int x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3, _n4x = 4>=((res)._width)?(int)((res)._width)-1:4; _n4x<(int)((res)._width) || _n3x==--_n4x || _n2x==--_n3x || _n1x==--_n2x || x==(_n4x = _n3x = _n2x = --_n1x); _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x, ++_n4x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p3x,_p3y,0,c), pP[1] = (T)(img)(_p2x,_p3y,0,c), pP[2] = (T)(img)(_p1x,_p3y,0,c), pP[3] = (T)(img)(x,_p3y,0,c), pP[4] = (T)(img)(_n1x,_p3y,0,c), pP[5] = (T)(img)(_n2x,_p3y,0,c), pP[6] = (T)(img)(_n3x,_p3y,0,c), pP[7] = (T)(img)(_n4x,_p3y,0,c), pP[8] = (T)(img)(_p3x,_p2y,0,c), pP[9] = (T)(img)(_p2x,_p2y,0,c), pP[10] = (T)(img)(_p1x,_p2y,0,c), pP[11] = (T)(img)(x,_p2y,0,c), pP[12] = (T)(img)(_n1x,_p2y,0,c), pP[13] = (T)(img)(_n2x,_p2y,0,c), pP[14] = (T)(img)(_n3x,_p2y,0,c), pP[15] = (T)(img)(_n4x,_p2y,0,c), pP[16] = (T)(img)(_p3x,_p1y,0,c), pP[17] = (T)(img)(_p2x,_p1y,0,c), pP[18] = (T)(img)(_p1x,_p1y,0,c), pP[19] = (T)(img)(x,_p1y,0,c), pP[20] = (T)(img)(_n1x,_p1y,0,c), pP[21] = (T)(img)(_n2x,_p1y,0,c), pP[22] = (T)(img)(_n3x,_p1y,0,c), pP[23] = (T)(img)(_n4x,_p1y,0,c), pP[24] = (T)(img)(_p3x,y,0,c), pP[25] = (T)(img)(_p2x,y,0,c), pP[26] = (T)(img)(_p1x,y,0,c), pP[27] = (T)(img)(x,y,0,c), pP[28] = (T)(img)(_n1x,y,0,c), pP[29] = (T)(img)(_n2x,y,0,c), pP[30] = (T)(img)(_n3x,y,0,c), pP[31] = (T)(img)(_n4x,y,0,c), pP[32] = (T)(img)(_p3x,_n1y,0,c), pP[33] = (T)(img)(_p2x,_n1y,0,c), pP[34] = (T)(img)(_p1x,_n1y,0,c), pP[35] = (T)(img)(x,_n1y,0,c), pP[36] = (T)(img)(_n1x,_n1y,0,c), pP[37] = (T)(img)(_n2x,_n1y,0,c), pP[38] = (T)(img)(_n3x,_n1y,0,c), pP[39] = (T)(img)(_n4x,_n1y,0,c), pP[40] = (T)(img)(_p3x,_n2y,0,c), pP[41] = (T)(img)(_p2x,_n2y,0,c), pP[42] = (T)(img)(_p1x,_n2y,0,c), pP[43] = (T)(img)(x,_n2y,0,c), pP[44] = (T)(img)(_n1x,_n2y,0,c), pP[45] = (T)(img)(_n2x,_n2y,0,c), pP[46] = (T)(img)(_n3x,_n2y,0,c), pP[47] = (T)(img)(_n4x,_n2y,0,c), pP[48] = (T)(img)(_p3x,_n3y,0,c), pP[49] = (T)(img)(_p2x,_n3y,0,c), pP[50] = (T)(img)(_p1x,_n3y,0,c), pP[51] = (T)(img)(x,_n3y,0,c), pP[52] = (T)(img)(_n1x,_n3y,0,c), pP[53] = (T)(img)(_n2x,_n3y,0,c), pP[54] = (T)(img)(_n3x,_n3y,0,c), pP[55] = (T)(img)(_n4x,_n3y,0,c), pP[56] = (T)(img)(_p3x,_n4y,0,c), pP[57] = (T)(img)(_p2x,_n4y,0,c), pP[58] = (T)(img)(_p1x,_n4y,0,c), pP[59] = (T)(img)(x,_n4y,0,c), pP[60] = (T)(img)(_n1x,_n4y,0,c), pP[61] = (T)(img)(_n2x,_n4y,0,c), pP[62] = (T)(img)(_n3x,_n4y,0,c), pP[63] = (T)(img)(_n4x,_n4y,0,c);; pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3, _n4q = q+4>=(int)((res)._height)?(int)((res)._height)-1:q+4; q<=(int)(y1) && (_n4q<(int)((res)._height) || _n3q==--_n4q || _n2q==--_n3q || _n1q==--_n2q || q==(_n4q = _n3q = _n2q = --_n1q)); _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q, ++_n4q) for (int p = (int)(x0)<0?0:(int)(x0), _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3, _n4p = p+4>=(int)((res)._width)?(int)((res)._width)-1:p+4; p<=(int)(x1) && (_n4p<(int)((res)._width) || _n3p==--_n4p || _n2p==--_n3p || _n1p==--_n2p || p==(_n4p = _n3p = _n2p = --_n1p)); _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p, ++_n4p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p3p,_p3q,0,c), pQ[1] = (T)(img)(_p2p,_p3q,0,c), pQ[2] = (T)(img)(_p1p,_p3q,0,c), pQ[3] = (T)(img)(p,_p3q,0,c), pQ[4] = (T)(img)(_n1p,_p3q,0,c), pQ[5] = (T)(img)(_n2p,_p3q,0,c), pQ[6] = (T)(img)(_n3p,_p3q,0,c), pQ[7] = (T)(img)(_n4p,_p3q,0,c), pQ[8] = (T)(img)(_p3p,_p2q,0,c), pQ[9] = (T)(img)(_p2p,_p2q,0,c), pQ[10] = (T)(img)(_p1p,_p2q,0,c), pQ[11] = (T)(img)(p,_p2q,0,c), pQ[12] = (T)(img)(_n1p,_p2q,0,c), pQ[13] = (T)(img)(_n2p,_p2q,0,c), pQ[14] = (T)(img)(_n3p,_p2q,0,c), pQ[15] = (T)(img)(_n4p,_p2q,0,c), pQ[16] = (T)(img)(_p3p,_p1q,0,c), pQ[17] = (T)(img)(_p2p,_p1q,0,c), pQ[18] = (T)(img)(_p1p,_p1q,0,c), pQ[19] = (T)(img)(p,_p1q,0,c), pQ[20] = (T)(img)(_n1p,_p1q,0,c), pQ[21] = (T)(img)(_n2p,_p1q,0,c), pQ[22] = (T)(img)(_n3p,_p1q,0,c), pQ[23] = (T)(img)(_n4p,_p1q,0,c), pQ[24] = (T)(img)(_p3p,q,0,c), pQ[25] = (T)(img)(_p2p,q,0,c), pQ[26] = (T)(img)(_p1p,q,0,c), pQ[27] = (T)(img)(p,q,0,c), pQ[28] = (T)(img)(_n1p,q,0,c), pQ[29] = (T)(img)(_n2p,q,0,c), pQ[30] = (T)(img)(_n3p,q,0,c), pQ[31] = (T)(img)(_n4p,q,0,c), pQ[32] = (T)(img)(_p3p,_n1q,0,c), pQ[33] = (T)(img)(_p2p,_n1q,0,c), pQ[34] = (T)(img)(_p1p,_n1q,0,c), pQ[35] = (T)(img)(p,_n1q,0,c), pQ[36] = (T)(img)(_n1p,_n1q,0,c), pQ[37] = (T)(img)(_n2p,_n1q,0,c), pQ[38] = (T)(img)(_n3p,_n1q,0,c), pQ[39] = (T)(img)(_n4p,_n1q,0,c), pQ[40] = (T)(img)(_p3p,_n2q,0,c), pQ[41] = (T)(img)(_p2p,_n2q,0,c), pQ[42] = (T)(img)(_p1p,_n2q,0,c), pQ[43] = (T)(img)(p,_n2q,0,c), pQ[44] = (T)(img)(_n1p,_n2q,0,c), pQ[45] = (T)(img)(_n2p,_n2q,0,c), pQ[46] = (T)(img)(_n3p,_n2q,0,c), pQ[47] = (T)(img)(_n4p,_n2q,0,c), pQ[48] = (T)(img)(_p3p,_n3q,0,c), pQ[49] = (T)(img)(_p2p,_n3q,0,c), pQ[50] = (T)(img)(_p1p,_n3q,0,c), pQ[51] = (T)(img)(p,_n3q,0,c), pQ[52] = (T)(img)(_n1p,_n3q,0,c), pQ[53] = (T)(img)(_n2p,_n3q,0,c), pQ[54] = (T)(img)(_n3p,_n3q,0,c), pQ[55] = (T)(img)(_n4p,_n3q,0,c), pQ[56] = (T)(img)(_p3p,_n4q,0,c), pQ[57] = (T)(img)(_p2p,_n4q,0,c), pQ[58] = (T)(img)(_p1p,_n4q,0,c), pQ[59] = (T)(img)(p,_n4q,0,c), pQ[60] = (T)(img)(_n1p,_n4q,0,c), pQ[61] = (T)(img)(_n2p,_n4q,0,c), pQ[62] = (T)(img)(_n3p,_n4q,0,c), pQ[63] = (T)(img)(_n4p,_n4q,0,c);; pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3, _n4y = 4>=((res)._height)?(int)((res)._height)-1:4; _n4y<(int)((res)._height) || _n3y==--_n4y || _n2y==--_n3y || _n1y==--_n2y || y==(_n4y = _n3y = _n2y = --_n1y); _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y, ++_n4y) for (int x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3, _n4x = 4>=((res)._width)?(int)((res)._width)-1:4; _n4x<(int)((res)._width) || _n3x==--_n4x || _n2x==--_n3x || _n1x==--_n2x || x==(_n4x = _n3x = _n2x = --_n1x); _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x, ++_n4x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p3x,_p3y,0,c), pP[1] = (T)(img)(_p2x,_p3y,0,c), pP[2] = (T)(img)(_p1x,_p3y,0,c), pP[3] = (T)(img)(x,_p3y,0,c), pP[4] = (T)(img)(_n1x,_p3y,0,c), pP[5] = (T)(img)(_n2x,_p3y,0,c), pP[6] = (T)(img)(_n3x,_p3y,0,c), pP[7] = (T)(img)(_n4x,_p3y,0,c), pP[8] = (T)(img)(_p3x,_p2y,0,c), pP[9] = (T)(img)(_p2x,_p2y,0,c), pP[10] = (T)(img)(_p1x,_p2y,0,c), pP[11] = (T)(img)(x,_p2y,0,c), pP[12] = (T)(img)(_n1x,_p2y,0,c), pP[13] = (T)(img)(_n2x,_p2y,0,c), pP[14] = (T)(img)(_n3x,_p2y,0,c), pP[15] = (T)(img)(_n4x,_p2y,0,c), pP[16] = (T)(img)(_p3x,_p1y,0,c), pP[17] = (T)(img)(_p2x,_p1y,0,c), pP[18] = (T)(img)(_p1x,_p1y,0,c), pP[19] = (T)(img)(x,_p1y,0,c), pP[20] = (T)(img)(_n1x,_p1y,0,c), pP[21] = (T)(img)(_n2x,_p1y,0,c), pP[22] = (T)(img)(_n3x,_p1y,0,c), pP[23] = (T)(img)(_n4x,_p1y,0,c), pP[24] = (T)(img)(_p3x,y,0,c), pP[25] = (T)(img)(_p2x,y,0,c), pP[26] = (T)(img)(_p1x,y,0,c), pP[27] = (T)(img)(x,y,0,c), pP[28] = (T)(img)(_n1x,y,0,c), pP[29] = (T)(img)(_n2x,y,0,c), pP[30] = (T)(img)(_n3x,y,0,c), pP[31] = (T)(img)(_n4x,y,0,c), pP[32] = (T)(img)(_p3x,_n1y,0,c), pP[33] = (T)(img)(_p2x,_n1y,0,c), pP[34] = (T)(img)(_p1x,_n1y,0,c), pP[35] = (T)(img)(x,_n1y,0,c), pP[36] = (T)(img)(_n1x,_n1y,0,c), pP[37] = (T)(img)(_n2x,_n1y,0,c), pP[38] = (T)(img)(_n3x,_n1y,0,c), pP[39] = (T)(img)(_n4x,_n1y,0,c), pP[40] = (T)(img)(_p3x,_n2y,0,c), pP[41] = (T)(img)(_p2x,_n2y,0,c), pP[42] = (T)(img)(_p1x,_n2y,0,c), pP[43] = (T)(img)(x,_n2y,0,c), pP[44] = (T)(img)(_n1x,_n2y,0,c), pP[45] = (T)(img)(_n2x,_n2y,0,c), pP[46] = (T)(img)(_n3x,_n2y,0,c), pP[47] = (T)(img)(_n4x,_n2y,0,c), pP[48] = (T)(img)(_p3x,_n3y,0,c), pP[49] = (T)(img)(_p2x,_n3y,0,c), pP[50] = (T)(img)(_p1x,_n3y,0,c), pP[51] = (T)(img)(x,_n3y,0,c), pP[52] = (T)(img)(_n1x,_n3y,0,c), pP[53] = (T)(img)(_n2x,_n3y,0,c), pP[54] = (T)(img)(_n3x,_n3y,0,c), pP[55] = (T)(img)(_n4x,_n3y,0,c), pP[56] = (T)(img)(_p3x,_n4y,0,c), pP[57] = (T)(img)(_p2x,_n4y,0,c), pP[58] = (T)(img)(_p1x,_n4y,0,c), pP[59] = (T)(img)(x,_n4y,0,c), pP[60] = (T)(img)(_n1x,_n4y,0,c), pP[61] = (T)(img)(_n2x,_n4y,0,c), pP[62] = (T)(img)(_n3x,_n4y,0,c), pP[63] = (T)(img)(_n4x,_n4y,0,c);; pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3, _n4q = q+4>=(int)((res)._height)?(int)((res)._height)-1:q+4; q<=(int)(y1) && (_n4q<(int)((res)._height) || _n3q==--_n4q || _n2q==--_n3q || _n1q==--_n2q || q==(_n4q = _n3q = _n2q = --_n1q)); _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q, ++_n4q) for (int p = (int)(x0)<0?0:(int)(x0), _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3, _n4p = p+4>=(int)((res)._width)?(int)((res)._width)-1:p+4; p<=(int)(x1) && (_n4p<(int)((res)._width) || _n3p==--_n4p || _n2p==--_n3p || _n1p==--_n2p || p==(_n4p = _n3p = _n2p = --_n1p)); _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p, ++_n4p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p3p,_p3q,0,c), pQ[1] = (T)(img)(_p2p,_p3q,0,c), pQ[2] = (T)(img)(_p1p,_p3q,0,c), pQ[3] = (T)(img)(p,_p3q,0,c), pQ[4] = (T)(img)(_n1p,_p3q,0,c), pQ[5] = (T)(img)(_n2p,_p3q,0,c), pQ[6] = (T)(img)(_n3p,_p3q,0,c), pQ[7] = (T)(img)(_n4p,_p3q,0,c), pQ[8] = (T)(img)(_p3p,_p2q,0,c), pQ[9] = (T)(img)(_p2p,_p2q,0,c), pQ[10] = (T)(img)(_p1p,_p2q,0,c), pQ[11] = (T)(img)(p,_p2q,0,c), pQ[12] = (T)(img)(_n1p,_p2q,0,c), pQ[13] = (T)(img)(_n2p,_p2q,0,c), pQ[14] = (T)(img)(_n3p,_p2q,0,c), pQ[15] = (T)(img)(_n4p,_p2q,0,c), pQ[16] = (T)(img)(_p3p,_p1q,0,c), pQ[17] = (T)(img)(_p2p,_p1q,0,c), pQ[18] = (T)(img)(_p1p,_p1q,0,c), pQ[19] = (T)(img)(p,_p1q,0,c), pQ[20] = (T)(img)(_n1p,_p1q,0,c), pQ[21] = (T)(img)(_n2p,_p1q,0,c), pQ[22] = (T)(img)(_n3p,_p1q,0,c), pQ[23] = (T)(img)(_n4p,_p1q,0,c), pQ[24] = (T)(img)(_p3p,q,0,c), pQ[25] = (T)(img)(_p2p,q,0,c), pQ[26] = (T)(img)(_p1p,q,0,c), pQ[27] = (T)(img)(p,q,0,c), pQ[28] = (T)(img)(_n1p,q,0,c), pQ[29] = (T)(img)(_n2p,q,0,c), pQ[30] = (T)(img)(_n3p,q,0,c), pQ[31] = (T)(img)(_n4p,q,0,c), pQ[32] = (T)(img)(_p3p,_n1q,0,c), pQ[33] = (T)(img)(_p2p,_n1q,0,c), pQ[34] = (T)(img)(_p1p,_n1q,0,c), pQ[35] = (T)(img)(p,_n1q,0,c), pQ[36] = (T)(img)(_n1p,_n1q,0,c), pQ[37] = (T)(img)(_n2p,_n1q,0,c), pQ[38] = (T)(img)(_n3p,_n1q,0,c), pQ[39] = (T)(img)(_n4p,_n1q,0,c), pQ[40] = (T)(img)(_p3p,_n2q,0,c), pQ[41] = (T)(img)(_p2p,_n2q,0,c), pQ[42] = (T)(img)(_p1p,_n2q,0,c), pQ[43] = (T)(img)(p,_n2q,0,c), pQ[44] = (T)(img)(_n1p,_n2q,0,c), pQ[45] = (T)(img)(_n2p,_n2q,0,c), pQ[46] = (T)(img)(_n3p,_n2q,0,c), pQ[47] = (T)(img)(_n4p,_n2q,0,c), pQ[48] = (T)(img)(_p3p,_n3q,0,c), pQ[49] = (T)(img)(_p2p,_n3q,0,c), pQ[50] = (T)(img)(_p1p,_n3q,0,c), pQ[51] = (T)(img)(p,_n3q,0,c), pQ[52] = (T)(img)(_n1p,_n3q,0,c), pQ[53] = (T)(img)(_n2p,_n3q,0,c), pQ[54] = (T)(img)(_n3p,_n3q,0,c), pQ[55] = (T)(img)(_n4p,_n3q,0,c), pQ[56] = (T)(img)(_p3p,_n4q,0,c), pQ[57] = (T)(img)(_p2p,_n4q,0,c), pQ[58] = (T)(img)(_p1p,_n4q,0,c), pQ[59] = (T)(img)(p,_n4q,0,c), pQ[60] = (T)(img)(_n1p,_n4q,0,c), pQ[61] = (T)(img)(_n2p,_n4q,0,c), pQ[62] = (T)(img)(_n3p,_n4q,0,c), pQ[63] = (T)(img)(_n4p,_n4q,0,c);; pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 9 : if (is_fast_approx) for (int y = 0, _p4y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=(int)((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=(int)((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=(int)((res)._height)?(int)((res)._height)-1:3, _n4y = 4>=(int)((res)._height)?(int)((res)._height)-1:4; _n4y<(int)((res)._height) || _n3y==--_n4y || _n2y==--_n3y || _n1y==--_n2y || y==(_n4y = _n3y = _n2y = --_n1y); _p4y = _p3y, _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y, ++_n4y) for (int x = 0, _p4x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(int)((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=(int)((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=(int)((res)._width)?(int)((res)._width)-1:3, _n4x = 4>=(int)((res)._width)?(int)((res)._width)-1:4; _n4x<(int)((res)._width) || _n3x==--_n4x || _n2x==--_n3x || _n1x==--_n2x || x==(_n4x = _n3x = _n2x = --_n1x); _p4x = _p3x, _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x, ++_n4x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p4x,_p4y,0,c), pP[1] = (T)(img)(_p3x,_p4y,0,c), pP[2] = (T)(img)(_p2x,_p4y,0,c), pP[3] = (T)(img)(_p1x,_p4y,0,c), pP[4] = (T)(img)(x,_p4y,0,c), pP[5] = (T)(img)(_n1x,_p4y,0,c), pP[6] = (T)(img)(_n2x,_p4y,0,c), pP[7] = (T)(img)(_n3x,_p4y,0,c), pP[8] = (T)(img)(_n4x,_p4y,0,c), pP[9] = (T)(img)(_p4x,_p3y,0,c), pP[10] = (T)(img)(_p3x,_p3y,0,c), pP[11] = (T)(img)(_p2x,_p3y,0,c), pP[12] = (T)(img)(_p1x,_p3y,0,c), pP[13] = (T)(img)(x,_p3y,0,c), pP[14] = (T)(img)(_n1x,_p3y,0,c), pP[15] = (T)(img)(_n2x,_p3y,0,c), pP[16] = (T)(img)(_n3x,_p3y,0,c), pP[17] = (T)(img)(_n4x,_p3y,0,c), pP[18] = (T)(img)(_p4x,_p2y,0,c), pP[19] = (T)(img)(_p3x,_p2y,0,c), pP[20] = (T)(img)(_p2x,_p2y,0,c), pP[21] = (T)(img)(_p1x,_p2y,0,c), pP[22] = (T)(img)(x,_p2y,0,c), pP[23] = (T)(img)(_n1x,_p2y,0,c), pP[24] = (T)(img)(_n2x,_p2y,0,c), pP[25] = (T)(img)(_n3x,_p2y,0,c), pP[26] = (T)(img)(_n4x,_p2y,0,c), pP[27] = (T)(img)(_p4x,_p1y,0,c), pP[28] = (T)(img)(_p3x,_p1y,0,c), pP[29] = (T)(img)(_p2x,_p1y,0,c), pP[30] = (T)(img)(_p1x,_p1y,0,c), pP[31] = (T)(img)(x,_p1y,0,c), pP[32] = (T)(img)(_n1x,_p1y,0,c), pP[33] = (T)(img)(_n2x,_p1y,0,c), pP[34] = (T)(img)(_n3x,_p1y,0,c), pP[35] = (T)(img)(_n4x,_p1y,0,c), pP[36] = (T)(img)(_p4x,y,0,c), pP[37] = (T)(img)(_p3x,y,0,c), pP[38] = (T)(img)(_p2x,y,0,c), pP[39] = (T)(img)(_p1x,y,0,c), pP[40] = (T)(img)(x,y,0,c), pP[41] = (T)(img)(_n1x,y,0,c), pP[42] = (T)(img)(_n2x,y,0,c), pP[43] = (T)(img)(_n3x,y,0,c), pP[44] = (T)(img)(_n4x,y,0,c), pP[45] = (T)(img)(_p4x,_n1y,0,c), pP[46] = (T)(img)(_p3x,_n1y,0,c), pP[47] = (T)(img)(_p2x,_n1y,0,c), pP[48] = (T)(img)(_p1x,_n1y,0,c), pP[49] = (T)(img)(x,_n1y,0,c), pP[50] = (T)(img)(_n1x,_n1y,0,c), pP[51] = (T)(img)(_n2x,_n1y,0,c), pP[52] = (T)(img)(_n3x,_n1y,0,c), pP[53] = (T)(img)(_n4x,_n1y,0,c), pP[54] = (T)(img)(_p4x,_n2y,0,c), pP[55] = (T)(img)(_p3x,_n2y,0,c), pP[56] = (T)(img)(_p2x,_n2y,0,c), pP[57] = (T)(img)(_p1x,_n2y,0,c), pP[58] = (T)(img)(x,_n2y,0,c), pP[59] = (T)(img)(_n1x,_n2y,0,c), pP[60] = (T)(img)(_n2x,_n2y,0,c), pP[61] = (T)(img)(_n3x,_n2y,0,c), pP[62] = (T)(img)(_n4x,_n2y,0,c), pP[63] = (T)(img)(_p4x,_n3y,0,c), pP[64] = (T)(img)(_p3x,_n3y,0,c), pP[65] = (T)(img)(_p2x,_n3y,0,c), pP[66] = (T)(img)(_p1x,_n3y,0,c), pP[67] = (T)(img)(x,_n3y,0,c), pP[68] = (T)(img)(_n1x,_n3y,0,c), pP[69] = (T)(img)(_n2x,_n3y,0,c), pP[70] = (T)(img)(_n3x,_n3y,0,c), pP[71] = (T)(img)(_n4x,_n3y,0,c), pP[72] = (T)(img)(_p4x,_n4y,0,c), pP[73] = (T)(img)(_p3x,_n4y,0,c), pP[74] = (T)(img)(_p2x,_n4y,0,c), pP[75] = (T)(img)(_p1x,_n4y,0,c), pP[76] = (T)(img)(x,_n4y,0,c), pP[77] = (T)(img)(_n1x,_n4y,0,c), pP[78] = (T)(img)(_n2x,_n4y,0,c), pP[79] = (T)(img)(_n3x,_n4y,0,c), pP[80] = (T)(img)(_n4x,_n4y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p4q = q-4<0?0:q-4, _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3, _n4q = q+4>=(int)((res)._height)?(int)((res)._height)-1:q+4; q<=(int)(y1) && (_n4q<(int)((res)._height) || _n3q==--_n4q || _n2q==--_n3q || _n1q==--_n2q || q==(_n4q = _n3q = _n2q = --_n1q)); _p4q = _p3q, _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q, ++_n4q) for (int p = (int)(x0)<0?0:(int)(x0), _p4p = p-4<0?0:p-4, _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3, _n4p = p+4>=(int)((res)._width)?(int)((res)._width)-1:p+4; p<=(int)(x1) && (_n4p<(int)((res)._width) || _n3p==--_n4p || _n2p==--_n3p || _n1p==--_n2p || p==(_n4p = _n3p = _n2p = --_n1p)); _p4p = _p3p, _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p, ++_n4p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p4p,_p4q,0,c), pQ[1] = (T)(img)(_p3p,_p4q,0,c), pQ[2] = (T)(img)(_p2p,_p4q,0,c), pQ[3] = (T)(img)(_p1p,_p4q,0,c), pQ[4] = (T)(img)(p,_p4q,0,c), pQ[5] = (T)(img)(_n1p,_p4q,0,c), pQ[6] = (T)(img)(_n2p,_p4q,0,c), pQ[7] = (T)(img)(_n3p,_p4q,0,c), pQ[8] = (T)(img)(_n4p,_p4q,0,c), pQ[9] = (T)(img)(_p4p,_p3q,0,c), pQ[10] = (T)(img)(_p3p,_p3q,0,c), pQ[11] = (T)(img)(_p2p,_p3q,0,c), pQ[12] = (T)(img)(_p1p,_p3q,0,c), pQ[13] = (T)(img)(p,_p3q,0,c), pQ[14] = (T)(img)(_n1p,_p3q,0,c), pQ[15] = (T)(img)(_n2p,_p3q,0,c), pQ[16] = (T)(img)(_n3p,_p3q,0,c), pQ[17] = (T)(img)(_n4p,_p3q,0,c), pQ[18] = (T)(img)(_p4p,_p2q,0,c), pQ[19] = (T)(img)(_p3p,_p2q,0,c), pQ[20] = (T)(img)(_p2p,_p2q,0,c), pQ[21] = (T)(img)(_p1p,_p2q,0,c), pQ[22] = (T)(img)(p,_p2q,0,c), pQ[23] = (T)(img)(_n1p,_p2q,0,c), pQ[24] = (T)(img)(_n2p,_p2q,0,c), pQ[25] = (T)(img)(_n3p,_p2q,0,c), pQ[26] = (T)(img)(_n4p,_p2q,0,c), pQ[27] = (T)(img)(_p4p,_p1q,0,c), pQ[28] = (T)(img)(_p3p,_p1q,0,c), pQ[29] = (T)(img)(_p2p,_p1q,0,c), pQ[30] = (T)(img)(_p1p,_p1q,0,c), pQ[31] = (T)(img)(p,_p1q,0,c), pQ[32] = (T)(img)(_n1p,_p1q,0,c), pQ[33] = (T)(img)(_n2p,_p1q,0,c), pQ[34] = (T)(img)(_n3p,_p1q,0,c), pQ[35] = (T)(img)(_n4p,_p1q,0,c), pQ[36] = (T)(img)(_p4p,q,0,c), pQ[37] = (T)(img)(_p3p,q,0,c), pQ[38] = (T)(img)(_p2p,q,0,c), pQ[39] = (T)(img)(_p1p,q,0,c), pQ[40] = (T)(img)(p,q,0,c), pQ[41] = (T)(img)(_n1p,q,0,c), pQ[42] = (T)(img)(_n2p,q,0,c), pQ[43] = (T)(img)(_n3p,q,0,c), pQ[44] = (T)(img)(_n4p,q,0,c), pQ[45] = (T)(img)(_p4p,_n1q,0,c), pQ[46] = (T)(img)(_p3p,_n1q,0,c), pQ[47] = (T)(img)(_p2p,_n1q,0,c), pQ[48] = (T)(img)(_p1p,_n1q,0,c), pQ[49] = (T)(img)(p,_n1q,0,c), pQ[50] = (T)(img)(_n1p,_n1q,0,c), pQ[51] = (T)(img)(_n2p,_n1q,0,c), pQ[52] = (T)(img)(_n3p,_n1q,0,c), pQ[53] = (T)(img)(_n4p,_n1q,0,c), pQ[54] = (T)(img)(_p4p,_n2q,0,c), pQ[55] = (T)(img)(_p3p,_n2q,0,c), pQ[56] = (T)(img)(_p2p,_n2q,0,c), pQ[57] = (T)(img)(_p1p,_n2q,0,c), pQ[58] = (T)(img)(p,_n2q,0,c), pQ[59] = (T)(img)(_n1p,_n2q,0,c), pQ[60] = (T)(img)(_n2p,_n2q,0,c), pQ[61] = (T)(img)(_n3p,_n2q,0,c), pQ[62] = (T)(img)(_n4p,_n2q,0,c), pQ[63] = (T)(img)(_p4p,_n3q,0,c), pQ[64] = (T)(img)(_p3p,_n3q,0,c), pQ[65] = (T)(img)(_p2p,_n3q,0,c), pQ[66] = (T)(img)(_p1p,_n3q,0,c), pQ[67] = (T)(img)(p,_n3q,0,c), pQ[68] = (T)(img)(_n1p,_n3q,0,c), pQ[69] = (T)(img)(_n2p,_n3q,0,c), pQ[70] = (T)(img)(_n3p,_n3q,0,c), pQ[71] = (T)(img)(_n4p,_n3q,0,c), pQ[72] = (T)(img)(_p4p,_n4q,0,c), pQ[73] = (T)(img)(_p3p,_n4q,0,c), pQ[74] = (T)(img)(_p2p,_n4q,0,c), pQ[75] = (T)(img)(_p1p,_n4q,0,c), pQ[76] = (T)(img)(p,_n4q,0,c), pQ[77] = (T)(img)(_n1p,_n4q,0,c), pQ[78] = (T)(img)(_n2p,_n4q,0,c), pQ[79] = (T)(img)(_n3p,_n4q,0,c), pQ[80] = (T)(img)(_n4p,_n4q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p4y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=(int)((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=(int)((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=(int)((res)._height)?(int)((res)._height)-1:3, _n4y = 4>=(int)((res)._height)?(int)((res)._height)-1:4; _n4y<(int)((res)._height) || _n3y==--_n4y || _n2y==--_n3y || _n1y==--_n2y || y==(_n4y = _n3y = _n2y = --_n1y); _p4y = _p3y, _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y, ++_n4y) for (int x = 0, _p4x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(int)((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=(int)((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=(int)((res)._width)?(int)((res)._width)-1:3, _n4x = 4>=(int)((res)._width)?(int)((res)._width)-1:4; _n4x<(int)((res)._width) || _n3x==--_n4x || _n2x==--_n3x || _n1x==--_n2x || x==(_n4x = _n3x = _n2x = --_n1x); _p4x = _p3x, _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x, ++_n4x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p4x,_p4y,0,c), pP[1] = (T)(img)(_p3x,_p4y,0,c), pP[2] = (T)(img)(_p2x,_p4y,0,c), pP[3] = (T)(img)(_p1x,_p4y,0,c), pP[4] = (T)(img)(x,_p4y,0,c), pP[5] = (T)(img)(_n1x,_p4y,0,c), pP[6] = (T)(img)(_n2x,_p4y,0,c), pP[7] = (T)(img)(_n3x,_p4y,0,c), pP[8] = (T)(img)(_n4x,_p4y,0,c), pP[9] = (T)(img)(_p4x,_p3y,0,c), pP[10] = (T)(img)(_p3x,_p3y,0,c), pP[11] = (T)(img)(_p2x,_p3y,0,c), pP[12] = (T)(img)(_p1x,_p3y,0,c), pP[13] = (T)(img)(x,_p3y,0,c), pP[14] = (T)(img)(_n1x,_p3y,0,c), pP[15] = (T)(img)(_n2x,_p3y,0,c), pP[16] = (T)(img)(_n3x,_p3y,0,c), pP[17] = (T)(img)(_n4x,_p3y,0,c), pP[18] = (T)(img)(_p4x,_p2y,0,c), pP[19] = (T)(img)(_p3x,_p2y,0,c), pP[20] = (T)(img)(_p2x,_p2y,0,c), pP[21] = (T)(img)(_p1x,_p2y,0,c), pP[22] = (T)(img)(x,_p2y,0,c), pP[23] = (T)(img)(_n1x,_p2y,0,c), pP[24] = (T)(img)(_n2x,_p2y,0,c), pP[25] = (T)(img)(_n3x,_p2y,0,c), pP[26] = (T)(img)(_n4x,_p2y,0,c), pP[27] = (T)(img)(_p4x,_p1y,0,c), pP[28] = (T)(img)(_p3x,_p1y,0,c), pP[29] = (T)(img)(_p2x,_p1y,0,c), pP[30] = (T)(img)(_p1x,_p1y,0,c), pP[31] = (T)(img)(x,_p1y,0,c), pP[32] = (T)(img)(_n1x,_p1y,0,c), pP[33] = (T)(img)(_n2x,_p1y,0,c), pP[34] = (T)(img)(_n3x,_p1y,0,c), pP[35] = (T)(img)(_n4x,_p1y,0,c), pP[36] = (T)(img)(_p4x,y,0,c), pP[37] = (T)(img)(_p3x,y,0,c), pP[38] = (T)(img)(_p2x,y,0,c), pP[39] = (T)(img)(_p1x,y,0,c), pP[40] = (T)(img)(x,y,0,c), pP[41] = (T)(img)(_n1x,y,0,c), pP[42] = (T)(img)(_n2x,y,0,c), pP[43] = (T)(img)(_n3x,y,0,c), pP[44] = (T)(img)(_n4x,y,0,c), pP[45] = (T)(img)(_p4x,_n1y,0,c), pP[46] = (T)(img)(_p3x,_n1y,0,c), pP[47] = (T)(img)(_p2x,_n1y,0,c), pP[48] = (T)(img)(_p1x,_n1y,0,c), pP[49] = (T)(img)(x,_n1y,0,c), pP[50] = (T)(img)(_n1x,_n1y,0,c), pP[51] = (T)(img)(_n2x,_n1y,0,c), pP[52] = (T)(img)(_n3x,_n1y,0,c), pP[53] = (T)(img)(_n4x,_n1y,0,c), pP[54] = (T)(img)(_p4x,_n2y,0,c), pP[55] = (T)(img)(_p3x,_n2y,0,c), pP[56] = (T)(img)(_p2x,_n2y,0,c), pP[57] = (T)(img)(_p1x,_n2y,0,c), pP[58] = (T)(img)(x,_n2y,0,c), pP[59] = (T)(img)(_n1x,_n2y,0,c), pP[60] = (T)(img)(_n2x,_n2y,0,c), pP[61] = (T)(img)(_n3x,_n2y,0,c), pP[62] = (T)(img)(_n4x,_n2y,0,c), pP[63] = (T)(img)(_p4x,_n3y,0,c), pP[64] = (T)(img)(_p3x,_n3y,0,c), pP[65] = (T)(img)(_p2x,_n3y,0,c), pP[66] = (T)(img)(_p1x,_n3y,0,c), pP[67] = (T)(img)(x,_n3y,0,c), pP[68] = (T)(img)(_n1x,_n3y,0,c), pP[69] = (T)(img)(_n2x,_n3y,0,c), pP[70] = (T)(img)(_n3x,_n3y,0,c), pP[71] = (T)(img)(_n4x,_n3y,0,c), pP[72] = (T)(img)(_p4x,_n4y,0,c), pP[73] = (T)(img)(_p3x,_n4y,0,c), pP[74] = (T)(img)(_p2x,_n4y,0,c), pP[75] = (T)(img)(_p1x,_n4y,0,c), pP[76] = (T)(img)(x,_n4y,0,c), pP[77] = (T)(img)(_n1x,_n4y,0,c), pP[78] = (T)(img)(_n2x,_n4y,0,c), pP[79] = (T)(img)(_n3x,_n4y,0,c), pP[80] = (T)(img)(_n4x,_n4y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p4q = q-4<0?0:q-4, _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3, _n4q = q+4>=(int)((res)._height)?(int)((res)._height)-1:q+4; q<=(int)(y1) && (_n4q<(int)((res)._height) || _n3q==--_n4q || _n2q==--_n3q || _n1q==--_n2q || q==(_n4q = _n3q = _n2q = --_n1q)); _p4q = _p3q, _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q, ++_n4q) for (int p = (int)(x0)<0?0:(int)(x0), _p4p = p-4<0?0:p-4, _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3, _n4p = p+4>=(int)((res)._width)?(int)((res)._width)-1:p+4; p<=(int)(x1) && (_n4p<(int)((res)._width) || _n3p==--_n4p || _n2p==--_n3p || _n1p==--_n2p || p==(_n4p = _n3p = _n2p = --_n1p)); _p4p = _p3p, _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p, ++_n4p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p4p,_p4q,0,c), pQ[1] = (T)(img)(_p3p,_p4q,0,c), pQ[2] = (T)(img)(_p2p,_p4q,0,c), pQ[3] = (T)(img)(_p1p,_p4q,0,c), pQ[4] = (T)(img)(p,_p4q,0,c), pQ[5] = (T)(img)(_n1p,_p4q,0,c), pQ[6] = (T)(img)(_n2p,_p4q,0,c), pQ[7] = (T)(img)(_n3p,_p4q,0,c), pQ[8] = (T)(img)(_n4p,_p4q,0,c), pQ[9] = (T)(img)(_p4p,_p3q,0,c), pQ[10] = (T)(img)(_p3p,_p3q,0,c), pQ[11] = (T)(img)(_p2p,_p3q,0,c), pQ[12] = (T)(img)(_p1p,_p3q,0,c), pQ[13] = (T)(img)(p,_p3q,0,c), pQ[14] = (T)(img)(_n1p,_p3q,0,c), pQ[15] = (T)(img)(_n2p,_p3q,0,c), pQ[16] = (T)(img)(_n3p,_p3q,0,c), pQ[17] = (T)(img)(_n4p,_p3q,0,c), pQ[18] = (T)(img)(_p4p,_p2q,0,c), pQ[19] = (T)(img)(_p3p,_p2q,0,c), pQ[20] = (T)(img)(_p2p,_p2q,0,c), pQ[21] = (T)(img)(_p1p,_p2q,0,c), pQ[22] = (T)(img)(p,_p2q,0,c), pQ[23] = (T)(img)(_n1p,_p2q,0,c), pQ[24] = (T)(img)(_n2p,_p2q,0,c), pQ[25] = (T)(img)(_n3p,_p2q,0,c), pQ[26] = (T)(img)(_n4p,_p2q,0,c), pQ[27] = (T)(img)(_p4p,_p1q,0,c), pQ[28] = (T)(img)(_p3p,_p1q,0,c), pQ[29] = (T)(img)(_p2p,_p1q,0,c), pQ[30] = (T)(img)(_p1p,_p1q,0,c), pQ[31] = (T)(img)(p,_p1q,0,c), pQ[32] = (T)(img)(_n1p,_p1q,0,c), pQ[33] = (T)(img)(_n2p,_p1q,0,c), pQ[34] = (T)(img)(_n3p,_p1q,0,c), pQ[35] = (T)(img)(_n4p,_p1q,0,c), pQ[36] = (T)(img)(_p4p,q,0,c), pQ[37] = (T)(img)(_p3p,q,0,c), pQ[38] = (T)(img)(_p2p,q,0,c), pQ[39] = (T)(img)(_p1p,q,0,c), pQ[40] = (T)(img)(p,q,0,c), pQ[41] = (T)(img)(_n1p,q,0,c), pQ[42] = (T)(img)(_n2p,q,0,c), pQ[43] = (T)(img)(_n3p,q,0,c), pQ[44] = (T)(img)(_n4p,q,0,c), pQ[45] = (T)(img)(_p4p,_n1q,0,c), pQ[46] = (T)(img)(_p3p,_n1q,0,c), pQ[47] = (T)(img)(_p2p,_n1q,0,c), pQ[48] = (T)(img)(_p1p,_n1q,0,c), pQ[49] = (T)(img)(p,_n1q,0,c), pQ[50] = (T)(img)(_n1p,_n1q,0,c), pQ[51] = (T)(img)(_n2p,_n1q,0,c), pQ[52] = (T)(img)(_n3p,_n1q,0,c), pQ[53] = (T)(img)(_n4p,_n1q,0,c), pQ[54] = (T)(img)(_p4p,_n2q,0,c), pQ[55] = (T)(img)(_p3p,_n2q,0,c), pQ[56] = (T)(img)(_p2p,_n2q,0,c), pQ[57] = (T)(img)(_p1p,_n2q,0,c), pQ[58] = (T)(img)(p,_n2q,0,c), pQ[59] = (T)(img)(_n1p,_n2q,0,c), pQ[60] = (T)(img)(_n2p,_n2q,0,c), pQ[61] = (T)(img)(_n3p,_n2q,0,c), pQ[62] = (T)(img)(_n4p,_n2q,0,c), pQ[63] = (T)(img)(_p4p,_n3q,0,c), pQ[64] = (T)(img)(_p3p,_n3q,0,c), pQ[65] = (T)(img)(_p2p,_n3q,0,c), pQ[66] = (T)(img)(_p1p,_n3q,0,c), pQ[67] = (T)(img)(p,_n3q,0,c), pQ[68] = (T)(img)(_n1p,_n3q,0,c), pQ[69] = (T)(img)(_n2p,_n3q,0,c), pQ[70] = (T)(img)(_n3p,_n3q,0,c), pQ[71] = (T)(img)(_n4p,_n3q,0,c), pQ[72] = (T)(img)(_p4p,_n4q,0,c), pQ[73] = (T)(img)(_p3p,_n4q,0,c), pQ[74] = (T)(img)(_p2p,_n4q,0,c), pQ[75] = (T)(img)(_p1p,_n4q,0,c), pQ[76] = (T)(img)(p,_n4q,0,c), pQ[77] = (T)(img)(_n1p,_n4q,0,c), pQ[78] = (T)(img)(_n2p,_n4q,0,c), pQ[79] = (T)(img)(_n3p,_n4q,0,c), pQ[80] = (T)(img)(_n4p,_n4q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > default : { > const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; > if (is_fast_approx) ># 25508 "./CImg.h" > ># 25508 "./CImg.h" >#pragma omp parallel for if (res._width>=32 && res._height>=4) firstprivate(P,Q) ># 25508 "./CImg.h" ># 25508 "./CImg.h" > > > for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); > const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; > float sum_weights = 0; > for (int q = (int)(y0)<0?0:(int)(y0), _maxq = (int)(y1)<(int)((res)._height)?(int)(y1):(int)((res)._height)-1; q<=_maxq; ++q) for (int p = (int)(x0)<0?0:(int)(x0), _maxp = (int)(x1)<(int)((res)._width)?(int)(x1):(int)((res)._width)-1; p<=_maxp; ++p) if (cimg::abs(img(x,y,0)-img(p,q,0))<sigma_p3) { > (Q = img.get_crop(p - psize1,q - psize1,p + psize2,q + psize2,true))-=P; > const float > dx = (float)x - p, dy = (float)y - q, > distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy)/sigma_s2), > weight = distance2>3?0.0f:1.0f; > sum_weights+=weight; > for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); > } > if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; > else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); > } else ># 25527 "./CImg.h" > ># 25527 "./CImg.h" >#pragma omp parallel for if (res._width>=32 && res._height>=4) firstprivate(P,Q) ># 25527 "./CImg.h" ># 25527 "./CImg.h" > > > for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); > const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; > float sum_weights = 0, weight_max = 0; > for (int q = (int)(y0)<0?0:(int)(y0), _maxq = (int)(y1)<(int)((res)._height)?(int)(y1):(int)((res)._height)-1; q<=_maxq; ++q) for (int p = (int)(x0)<0?0:(int)(x0), _maxp = (int)(x1)<(int)((res)._width)?(int)(x1):(int)((res)._width)-1; p<=_maxp; ++p) if (p!=x || q!=y) { > (Q = img.get_crop(p - psize1,q - psize1,p + psize2,q + psize2,true))-=P; > const float > dx = (float)x - p, dy = (float)y - q, > distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy)/sigma_s2), > weight = (float)std::exp(-distance2); > if (weight>weight_max) weight_max = weight; > sum_weights+=weight; > for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); > } > sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); > if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; > else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,0,c) = (Tfloat)((*this)(x,y,c)); > } > } > } > return res; > } > > > > > > CImg<T>& blur_median(const unsigned int n) { > if (!n) return *this; > return get_blur_median(n).move_to(*this); > } > > > CImg<T> get_blur_median(const unsigned int n) const { > if (is_empty() || n<=1) return +*this; > CImg<T> res(_width,_height,_depth,_spectrum); > T *ptrd = res._data; > cimg::unused(ptrd); > const int hl = n/2, hr = hl - 1 + n%2; > if (res._depth!=1) ># 25570 "./CImg.h" > ># 25570 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=16 && _height*_depth*_spectrum>=4) ># 25570 "./CImg.h" ># 25570 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int > x0 = x - hl, y0 = y - hl, z0 = z-hl, x1 = x + hr, y1 = y + hr, z1 = z+hr, > nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, nz0 = z0<0?0:z0, > nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1, nz1 = z1>=depth()?depth()-1:z1; > res(x,y,z,c) = get_crop(nx0,ny0,nz0,c,nx1,ny1,nz1,c).median(); > } else { > > if (res._height!=1) switch (n) { > case 3 : { ># 25583 "./CImg.h" > ># 25583 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 25583 "./CImg.h" ># 25583 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[9] = { 0 }; > T J[9]; T& Jpp = J[0]; T& Jcp = J[1]; T& Jnp = J[2]; T& Jpc = J[3]; T& Jcc = J[4]; T& Jnc = J[5]; T& Jpn = J[6]; T& Jcn = J[7]; T& Jnn = J[8]; Jpp = Jcp = Jnp = Jpc = Jcc = Jnc = Jpn = Jcn = Jnn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (T)(*this)(0,y,0,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,0,c)), (I[5] = (T)(*this)(_n1x,y,0,c)), (I[8] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > std::memcpy(J,I,9*sizeof(T)); > if ((Jcp)>(Jnp)) cimg::swap(Jcp,Jnp); if ((Jcc)>(Jnc)) cimg::swap(Jcc,Jnc); if ((Jcn)>(Jnn)) cimg::swap(Jcn,Jnn); > if ((Jpp)>(Jcp)) cimg::swap(Jpp,Jcp); if ((Jpc)>(Jcc)) cimg::swap(Jpc,Jcc); if ((Jpn)>(Jcn)) cimg::swap(Jpn,Jcn); > if ((Jcp)>(Jnp)) cimg::swap(Jcp,Jnp); if ((Jcc)>(Jnc)) cimg::swap(Jcc,Jnc); if ((Jcn)>(Jnn)) cimg::swap(Jcn,Jnn); > if ((Jpp)>(Jpc)) cimg::swap(Jpp,Jpc); if ((Jnc)>(Jnn)) cimg::swap(Jnc,Jnn); if ((Jcc)>(Jcn)) cimg::swap(Jcc,Jcn); > if ((Jpc)>(Jpn)) cimg::swap(Jpc,Jpn); if ((Jcp)>(Jcc)) cimg::swap(Jcp,Jcc); if ((Jnp)>(Jnc)) cimg::swap(Jnp,Jnc); > if ((Jcc)>(Jcn)) cimg::swap(Jcc,Jcn); if ((Jcc)>(Jnp)) cimg::swap(Jcc,Jnp); if ((Jpn)>(Jcc)) cimg::swap(Jpn,Jcc); > if ((Jcc)>(Jnp)) cimg::swap(Jcc,Jnp); > res(x,y,c) = Jcc; > } > } > } break; > case 5 : { ># 25603 "./CImg.h" > ># 25603 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 25603 "./CImg.h" ># 25603 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[25] = { 0 }; > T J[25]; T& Jbb = J[0]; T& Jpb = J[1]; T& Jcb = J[2]; T& Jnb = J[3]; T& Jab = J[4]; T& Jbp = J[5]; T& Jpp = J[6]; T& Jcp = J[7]; T& Jnp = J[8]; T& Jap = J[9]; T& Jbc = J[10]; T& Jpc = J[11]; T& Jcc = J[12]; T& Jnc = J[13]; T& Jac = J[14]; T& Jbn = J[15]; T& Jpn = J[16]; T& Jcn = J[17]; T& Jnn = J[18]; T& Jan = J[19]; T& Jba = J[20]; T& Jpa = J[21]; T& Jca = J[22]; T& Jna = J[23]; T& Jaa = J[24]; Jbb = Jpb = Jcb = Jnb = Jab = Jbp = Jpp = Jcp = Jnp = Jap = Jbc = Jpc = Jcc = Jnc = Jac = Jbn = Jpn = Jcn = Jnn = Jan = Jba = Jpa = Jca = Jna = Jaa = 0; > for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1, _n2y = 2>=((*this)._height)?(int)((*this)._height)-1:2; _n2y<(int)((*this)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(*this)._width?(*this).width()-1:1, _n2x = (int)( (I[0] = I[1] = I[2] = (T)(*this)(_p2x,_p2y,0,c)), (I[5] = I[6] = I[7] = (T)(*this)(0,_p1y,0,c)), (I[10] = I[11] = I[12] = (T)(*this)(0,y,0,c)), (I[15] = I[16] = I[17] = (T)(*this)(0,_n1y,0,c)), (I[20] = I[21] = I[22] = (T)(*this)(0,_n2y,0,c)), (I[3] = (T)(*this)(_n1x,_p2y,0,c)), (I[8] = (T)(*this)(_n1x,_p1y,0,c)), (I[13] = (T)(*this)(_n1x,y,0,c)), (I[18] = (T)(*this)(_n1x,_n1y,0,c)), (I[23] = (T)(*this)(_n1x,_n2y,0,c)), 2>=(*this)._width?(*this).width()-1:2); (_n2x<(*this).width() && ( (I[4] = (T)(*this)(_n2x,_p2y,0,c)), (I[9] = (T)(*this)(_n2x,_p1y,0,c)), (I[14] = (T)(*this)(_n2x,y,0,c)), (I[19] = (T)(*this)(_n2x,_n1y,0,c)), (I[24] = (T)(*this)(_n2x,_n2y,0,c)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) { > std::memcpy(J,I,25*sizeof(T)); > if ((Jbb)>(Jpb)) cimg::swap(Jbb,Jpb); if ((Jnb)>(Jab)) cimg::swap(Jnb,Jab); if ((Jcb)>(Jab)) cimg::swap(Jcb,Jab); if ((Jcb)>(Jnb)) cimg::swap(Jcb,Jnb); > if ((Jpp)>(Jcp)) cimg::swap(Jpp,Jcp); if ((Jbp)>(Jcp)) cimg::swap(Jbp,Jcp); if ((Jbp)>(Jpp)) cimg::swap(Jbp,Jpp); if ((Jap)>(Jbc)) cimg::swap(Jap,Jbc); > if ((Jnp)>(Jbc)) cimg::swap(Jnp,Jbc); if ((Jnp)>(Jap)) cimg::swap(Jnp,Jap); if ((Jcc)>(Jnc)) cimg::swap(Jcc,Jnc); if ((Jpc)>(Jnc)) cimg::swap(Jpc,Jnc); > if ((Jpc)>(Jcc)) cimg::swap(Jpc,Jcc); if ((Jbn)>(Jpn)) cimg::swap(Jbn,Jpn); if ((Jac)>(Jpn)) cimg::swap(Jac,Jpn); if ((Jac)>(Jbn)) cimg::swap(Jac,Jbn); > if ((Jnn)>(Jan)) cimg::swap(Jnn,Jan); if ((Jcn)>(Jan)) cimg::swap(Jcn,Jan); if ((Jcn)>(Jnn)) cimg::swap(Jcn,Jnn); if ((Jpa)>(Jca)) cimg::swap(Jpa,Jca); > if ((Jba)>(Jca)) cimg::swap(Jba,Jca); if ((Jba)>(Jpa)) cimg::swap(Jba,Jpa); if ((Jna)>(Jaa)) cimg::swap(Jna,Jaa); if ((Jcb)>(Jbp)) cimg::swap(Jcb,Jbp); > if ((Jnb)>(Jpp)) cimg::swap(Jnb,Jpp); if ((Jbb)>(Jpp)) cimg::swap(Jbb,Jpp); if ((Jbb)>(Jnb)) cimg::swap(Jbb,Jnb); if ((Jab)>(Jcp)) cimg::swap(Jab,Jcp); > if ((Jpb)>(Jcp)) cimg::swap(Jpb,Jcp); if ((Jpb)>(Jab)) cimg::swap(Jpb,Jab); if ((Jpc)>(Jac)) cimg::swap(Jpc,Jac); if ((Jnp)>(Jac)) cimg::swap(Jnp,Jac); > if ((Jnp)>(Jpc)) cimg::swap(Jnp,Jpc); if ((Jcc)>(Jbn)) cimg::swap(Jcc,Jbn); if ((Jap)>(Jbn)) cimg::swap(Jap,Jbn); if ((Jap)>(Jcc)) cimg::swap(Jap,Jcc); > if ((Jnc)>(Jpn)) cimg::swap(Jnc,Jpn); if ((Jbc)>(Jpn)) cimg::swap(Jbc,Jpn); if ((Jbc)>(Jnc)) cimg::swap(Jbc,Jnc); if ((Jba)>(Jna)) cimg::swap(Jba,Jna); > if ((Jcn)>(Jna)) cimg::swap(Jcn,Jna); if ((Jcn)>(Jba)) cimg::swap(Jcn,Jba); if ((Jpa)>(Jaa)) cimg::swap(Jpa,Jaa); if ((Jnn)>(Jaa)) cimg::swap(Jnn,Jaa); > if ((Jnn)>(Jpa)) cimg::swap(Jnn,Jpa); if ((Jan)>(Jca)) cimg::swap(Jan,Jca); if ((Jnp)>(Jcn)) cimg::swap(Jnp,Jcn); if ((Jap)>(Jnn)) cimg::swap(Jap,Jnn); > if ((Jbb)>(Jnn)) cimg::swap(Jbb,Jnn); if ((Jbb)>(Jap)) cimg::swap(Jbb,Jap); if ((Jbc)>(Jan)) cimg::swap(Jbc,Jan); if ((Jpb)>(Jan)) cimg::swap(Jpb,Jan); > if ((Jpb)>(Jbc)) cimg::swap(Jpb,Jbc); if ((Jpc)>(Jba)) cimg::swap(Jpc,Jba); if ((Jcb)>(Jba)) cimg::swap(Jcb,Jba); if ((Jcb)>(Jpc)) cimg::swap(Jcb,Jpc); > if ((Jcc)>(Jpa)) cimg::swap(Jcc,Jpa); if ((Jnb)>(Jpa)) cimg::swap(Jnb,Jpa); if ((Jnb)>(Jcc)) cimg::swap(Jnb,Jcc); if ((Jnc)>(Jca)) cimg::swap(Jnc,Jca); > if ((Jab)>(Jca)) cimg::swap(Jab,Jca); if ((Jab)>(Jnc)) cimg::swap(Jab,Jnc); if ((Jac)>(Jna)) cimg::swap(Jac,Jna); if ((Jbp)>(Jna)) cimg::swap(Jbp,Jna); > if ((Jbp)>(Jac)) cimg::swap(Jbp,Jac); if ((Jbn)>(Jaa)) cimg::swap(Jbn,Jaa); if ((Jpp)>(Jaa)) cimg::swap(Jpp,Jaa); if ((Jpp)>(Jbn)) cimg::swap(Jpp,Jbn); > if ((Jcp)>(Jpn)) cimg::swap(Jcp,Jpn); if ((Jcp)>(Jan)) cimg::swap(Jcp,Jan); if ((Jnc)>(Jpa)) cimg::swap(Jnc,Jpa); if ((Jbn)>(Jna)) cimg::swap(Jbn,Jna); > if ((Jcp)>(Jnc)) cimg::swap(Jcp,Jnc); if ((Jcp)>(Jbn)) cimg::swap(Jcp,Jbn); if ((Jpb)>(Jap)) cimg::swap(Jpb,Jap); if ((Jnb)>(Jpc)) cimg::swap(Jnb,Jpc); > if ((Jbp)>(Jcn)) cimg::swap(Jbp,Jcn); if ((Jpc)>(Jcn)) cimg::swap(Jpc,Jcn); if ((Jap)>(Jcn)) cimg::swap(Jap,Jcn); if ((Jab)>(Jbc)) cimg::swap(Jab,Jbc); > if ((Jpp)>(Jcc)) cimg::swap(Jpp,Jcc); if ((Jcp)>(Jac)) cimg::swap(Jcp,Jac); if ((Jab)>(Jpp)) cimg::swap(Jab,Jpp); if ((Jab)>(Jcp)) cimg::swap(Jab,Jcp); > if ((Jcc)>(Jac)) cimg::swap(Jcc,Jac); if ((Jbc)>(Jac)) cimg::swap(Jbc,Jac); if ((Jpp)>(Jcp)) cimg::swap(Jpp,Jcp); if ((Jbc)>(Jcc)) cimg::swap(Jbc,Jcc); > if ((Jpp)>(Jbc)) cimg::swap(Jpp,Jbc); if ((Jpp)>(Jcn)) cimg::swap(Jpp,Jcn); if ((Jcc)>(Jcn)) cimg::swap(Jcc,Jcn); if ((Jcp)>(Jcn)) cimg::swap(Jcp,Jcn); > if ((Jcp)>(Jbc)) cimg::swap(Jcp,Jbc); if ((Jcc)>(Jnn)) cimg::swap(Jcc,Jnn); if ((Jcp)>(Jcc)) cimg::swap(Jcp,Jcc); if ((Jbc)>(Jnn)) cimg::swap(Jbc,Jnn); > if ((Jcc)>(Jba)) cimg::swap(Jcc,Jba); if ((Jbc)>(Jba)) cimg::swap(Jbc,Jba); if ((Jbc)>(Jcc)) cimg::swap(Jbc,Jcc); > res(x,y,c) = Jcc; > } > } > } break; > default : { ># 25641 "./CImg.h" > ># 25641 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=16 && _height*_spectrum>=4) ># 25641 "./CImg.h" ># 25641 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int > x0 = x - hl, y0 = y - hl, x1 = x + hr, y1 = y + hr, > nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, > nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1; > res(x,y,c) = get_crop(nx0,ny0,0,c,nx1,ny1,0,c).median(); > } > } > } else switch (n) { > case 2 : { ># 25654 "./CImg.h" > ># 25654 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 25654 "./CImg.h" ># 25654 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[4] = { 0 }; > for (int y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(*this)(0,y,0,c)), (I[2] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[1] = (T)(*this)(_n1x,y,0,c)), (I[3] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], ++x, ++_n1x) res(x,c) = (T)(0.5f*(I[0]+I[1])); > } > } break; > case 3 : { ># 25663 "./CImg.h" > ># 25663 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 25663 "./CImg.h" ># 25663 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[9] = { 0 }; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (T)(*this)(0,y,0,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,0,c)), (I[5] = (T)(*this)(_n1x,y,0,c)), (I[8] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) > res(x,c) = I[3]<I[4]?(I[4]<I[5]?I[4]:(I[3]<I[5]?I[5]:I[3])):(I[3]<I[5]?I[3]:(I[4]<I[5]?I[5]:I[4])); > } > } break; > default : { ># 25673 "./CImg.h" > ># 25673 "./CImg.h" >#pragma omp parallel for if (_width>=16 && _spectrum>=2) ># 25673 "./CImg.h" ># 25673 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int x = 0; x<(int)((*this)._width); ++x) { > const int > x0 = x - hl, x1 = x + hr, > nx0 = x0<0?0:x0, nx1 = x1>=width()?width()-1:x1; > res(x,c) = get_crop(nx0,0,0,c,nx1,0,0,c).median(); > } > } > } > } > return res; > } ># 25695 "./CImg.h" > CImg<T>& sharpen(const float amplitude, const bool sharpen_type=false, const float edge=1, const float alpha=0, const float sigma=0) { > if (is_empty()) return *this; > T val_min, val_max = max_min(val_min); > const float nedge = edge/2; > CImg<Tfloat> velocity(_width,_height,_depth,_spectrum), _veloc_max(_spectrum); > > if (_depth>1) { > if (sharpen_type) { > CImg<Tfloat> G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); > if (sigma>0) G.blur(sigma); ># 25706 "./CImg.h" > ># 25706 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=32 && _height*_depth>=16) ># 25706 "./CImg.h" ># 25706 "./CImg.h" > > > for (int z = 0; z<(int)((G)._depth); ++z) for (int y = 0; y<(int)((G)._height); ++y) { > Tfloat *ptrG0 = G.data(0,y,z,0), *ptrG1 = G.data(0,y,z,1), *ptrG2 = G.data(0,y,z,2), *ptrG3 = G.data(0,y,z,3); > CImg<Tfloat> val, vec; > for (int x = 0; x<(int)((G)._width); ++x) { > G.get_tensor_at(x,y,z).symmetric_eigen(val,vec); > if (val[0]<0) val[0] = 0; > if (val[1]<0) val[1] = 0; > if (val[2]<0) val[2] = 0; > *(ptrG0++) = vec(0,0); > *(ptrG1++) = vec(0,1); > *(ptrG2++) = vec(0,2); > *(ptrG3++) = 1 - (Tfloat)std::pow(1+val[0]+val[1]+val[2],-(Tfloat)nedge); > } > } ># 25723 "./CImg.h" > ># 25723 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=512 && _spectrum>=2) ># 25723 "./CImg.h" ># 25723 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > u = G(x,y,z,0), > v = G(x,y,z,1), > w = G(x,y,z,2), > amp = G(x,y,z,3), > ixx = Incc + Ipcc - 2*Iccc, > ixy = (Innc + Ippc - Inpc - Ipnc)/4, > ixz = (Incn + Ipcp - Incp - Ipcn)/4, > iyy = Icnc + Icpc - 2*Iccc, > iyz = (Icnn + Icpp - Icnp - Icpn)/4, > izz = Iccn + Iccp - 2*Iccc, > ixf = Incc - Iccc, > ixb = Iccc - Ipcc, > iyf = Icnc - Iccc, > iyb = Iccc - Icpc, > izf = Iccn - Iccc, > izb = Iccc - Iccp, > itt = u*u*ixx + v*v*iyy + w*w*izz + 2*u*v*ixy + 2*u*w*ixz + 2*v*w*iyz, > it = u*cimg::minmod(ixf,ixb) + v*cimg::minmod(iyf,iyb) + w*cimg::minmod(izf,izb), > veloc = -amp*cimg::sign(itt)*cimg::abs(it); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > _veloc_max[c] = veloc_max; > } > } else > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat veloc = -Ipcc - Incc - Icpc - Icnc - Iccp - Iccn + 6*Iccc; > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > _veloc_max[c] = veloc_max; > } > } else { > if (sharpen_type) { > CImg<Tfloat> G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); > if (sigma>0) G.blur(sigma); ># 25770 "./CImg.h" > ># 25770 "./CImg.h" >#pragma omp parallel for if (_width>=32 && _height>=16) ># 25770 "./CImg.h" ># 25770 "./CImg.h" > > > for (int y = 0; y<(int)((G)._height); ++y) { > CImg<Tfloat> val, vec; > Tfloat *ptrG0 = G.data(0,y,0,0), *ptrG1 = G.data(0,y,0,1), *ptrG2 = G.data(0,y,0,2); > for (int x = 0; x<(int)((G)._width); ++x) { > G.get_tensor_at(x,y).symmetric_eigen(val,vec); > if (val[0]<0) val[0] = 0; > if (val[1]<0) val[1] = 0; > *(ptrG0++) = vec(0,0); > *(ptrG1++) = vec(0,1); > *(ptrG2++) = 1 - (Tfloat)std::pow(1 + val[0] + val[1],-(Tfloat)nedge); > } > } ># 25785 "./CImg.h" > ># 25785 "./CImg.h" >#pragma omp parallel for if (_width*_height>=512 && _spectrum>=2) ># 25785 "./CImg.h" ># 25785 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > u = G(x,y,0), > v = G(x,y,1), > amp = G(x,y,2), > ixx = Inc + Ipc - 2*Icc, > ixy = (Inn + Ipp - Inp - Ipn)/4, > iyy = Icn + Icp - 2*Icc, > ixf = Inc - Icc, > ixb = Icc - Ipc, > iyf = Icn - Icc, > iyb = Icc - Icp, > itt = u*u*ixx + v*v*iyy + 2*u*v*ixy, > it = u*cimg::minmod(ixf,ixb) + v*cimg::minmod(iyf,iyb), > veloc = -amp*cimg::sign(itt)*cimg::abs(it); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > _veloc_max[c] = veloc_max; > } > } else > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat veloc = -Ipc - Inc - Icp - Icn + 4*Icc; > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > _veloc_max[c] = veloc_max; > } > } > const Tfloat veloc_max = _veloc_max.max(); > if (veloc_max<=0) return *this; > return ((velocity*=amplitude/veloc_max)+=*this).cut(val_min,val_max).move_to(*this); > } > > > CImg<T> get_sharpen(const float amplitude, const bool sharpen_type=false, const float edge=1, const float alpha=0, const float sigma=0) const { > return (+*this).sharpen(amplitude,sharpen_type,edge,alpha,sigma); > } ># 25844 "./CImg.h" > CImgList<Tfloat> get_gradient(const char *const axes=0, const int scheme=3) const { > CImgList<Tfloat> grad(2,_width,_height,_depth,_spectrum); > bool is_3d = false; > if (axes) { > for (unsigned int a = 0; axes[a]; ++a) { > const char axis = cimg::uncase(axes[a]); > switch (axis) { > case 'x' : case 'y' : break; > case 'z' : is_3d = true; break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_gradient(): Invalid specified axis '%c'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > } > } else is_3d = (_depth>1); > if (is_3d) { > CImg<Tfloat>(_width,_height,_depth,_spectrum).move_to(grad); > switch (scheme) { > case -1 : { ># 25866 "./CImg.h" > ># 25866 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 25866 "./CImg.h" ># 25866 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const unsigned long off = c*_width*_height*_depth; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > *(ptrd0++) = Iccc - Ipcc; > *(ptrd1++) = Iccc - Icpc; > *(ptrd2++) = Iccc - Iccp; > } > } > } break; > case 1 : { ># 25881 "./CImg.h" > ># 25881 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 25881 "./CImg.h" ># 25881 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const unsigned long off = c*_width*_height*_depth; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; > Tfloat I[8]; Tfloat& Iccc = I[0]; Tfloat& Incc = I[1]; Tfloat& Icnc = I[2]; Tfloat& Innc = I[3]; Tfloat& Iccn = I[4]; Tfloat& Incn = I[5]; Tfloat& Icnn = I[6]; Tfloat& Innn = I[7]; Iccc = Incc = Icnc = Innc = Iccn = Incn = Icnn = Innn = 0; > for (int z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (Tfloat)(*this)(0,y,z,c)), (I[2] = (Tfloat)(*this)(0,_n1y,z,c)), (I[4] = (Tfloat)(*this)(0,y,_n1z,c)), (I[6] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[1] = (Tfloat)(*this)(_n1x,y,z,c)), (I[3] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[7] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], ++x, ++_n1x) { > *(ptrd0++) = Incc - Iccc; > *(ptrd1++) = Icnc - Iccc; > *(ptrd2++) = Iccn - Iccc; > } > } > } break; > case 4 : { > grad[0] = get_deriche(0,1,'x'); > grad[1] = get_deriche(0,1,'y'); > grad[2] = get_deriche(0,1,'z'); > } break; > case 5 : { > grad[0] = get_vanvliet(0,1,'x'); > grad[1] = get_vanvliet(0,1,'y'); > grad[2] = get_vanvliet(0,1,'z'); > } break; > default : { ># 25906 "./CImg.h" > ># 25906 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 25906 "./CImg.h" ># 25906 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const unsigned long off = c*_width*_height*_depth; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > *(ptrd0++) = (Incc - Ipcc)/2; > *(ptrd1++) = (Icnc - Icpc)/2; > *(ptrd2++) = (Iccn - Iccp)/2; > } > } > } > } > } else switch (scheme) { > case -1 : { ># 25923 "./CImg.h" > ># 25923 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25923 "./CImg.h" ># 25923 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = Icc - Ipc; > *(ptrd1++) = Icc - Icp; > } > } > } break; > case 1 : { ># 25937 "./CImg.h" > ># 25937 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25937 "./CImg.h" ># 25937 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[4]; Tfloat& Icc = I[0]; Tfloat& Inc = I[1]; Tfloat& Icn = I[2]; Tfloat& Inn = I[3]; Icc = Inc = Icn = Inn = 0; > for (int y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (Tfloat)(*this)(0,y,z,c)), (I[2] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[1] = (Tfloat)(*this)(_n1x,y,z,c)), (I[3] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], ++x, ++_n1x) { > *(ptrd0++) = Inc - Icc; > *(ptrd1++) = Icn - Icc; > } > } > } break; > case 2 : { ># 25951 "./CImg.h" > ># 25951 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25951 "./CImg.h" ># 25951 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = -Ipp - 2*Ipc - Ipn + Inp + 2*Inc + Inn; > *(ptrd1++) = -Ipp - 2*Icp - Inp + Ipn + 2*Icn + Inn; > } > } > } break; > case 3 : { ># 25965 "./CImg.h" > ># 25965 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25965 "./CImg.h" ># 25965 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > const Tfloat a = (Tfloat)(0.25f*(2-std::sqrt(2.0f))), b = (Tfloat)(0.5f*(std::sqrt(2.0f)-1)); > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = -a*Ipp - b*Ipc - a*Ipn + a*Inp + b*Inc + a*Inn; > *(ptrd1++) = -a*Ipp - b*Icp - a*Inp + a*Ipn + b*Icn + a*Inn; > } > } > } break; > case 4 : { > grad[0] = get_deriche(0,1,'x'); > grad[1] = get_deriche(0,1,'y'); > } break; > case 5 : { > grad[0] = get_vanvliet(0,1,'x'); > grad[1] = get_vanvliet(0,1,'y'); > } break; > default : { ># 25988 "./CImg.h" > ># 25988 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25988 "./CImg.h" ># 25988 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = (Inc - Ipc)/2; > *(ptrd1++) = (Icn - Icp)/2; > } > } > } > } > if (!axes) return grad; > CImgList<Tfloat> res; > for (unsigned int l = 0; axes[l]; ++l) { > const char axis = cimg::uncase(axes[l]); > switch (axis) { > case 'x' : res.insert(grad[0]); break; > case 'y' : res.insert(grad[1]); break; > case 'z' : res.insert(grad[2]); break; > } > } > grad.assign(); > return res; > } > > > > > > CImgList<Tfloat> get_hessian(const char *const axes=0) const { > CImgList<Tfloat> res; > const char *naxes = axes, *const def_axes2d = "xxxyyy", *const def_axes3d = "xxxyxzyyyzzz"; > if (!axes) naxes = _depth>1?def_axes3d:def_axes2d; > const unsigned int lmax = std::strlen(naxes); > if (lmax%2) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_hessian(): Invalid specified axes '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > naxes); > > res.assign(lmax/2,_width,_height,_depth,_spectrum); > if (!cimg::strcasecmp(naxes,def_axes3d)) { ># 26034 "./CImg.h" > ># 26034 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26034 "./CImg.h" ># 26034 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const unsigned long off = c*_width*_height*_depth; > Tfloat > *ptrd0 = res[0]._data + off, *ptrd1 = res[1]._data + off, *ptrd2 = res[2]._data + off, > *ptrd3 = res[3]._data + off, *ptrd4 = res[4]._data + off, *ptrd5 = res[5]._data + off; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > *(ptrd0++) = Ipcc + Incc - 2*Iccc; > *(ptrd1++) = (Ippc + Innc - Ipnc - Inpc)/4; > *(ptrd2++) = (Ipcp + Incn - Ipcn - Incp)/4; > *(ptrd3++) = Icpc + Icnc - 2*Iccc; > *(ptrd4++) = (Icpp + Icnn - Icpn - Icnp)/4; > *(ptrd5++) = Iccn + Iccp - 2*Iccc; > } > } > } else if (!cimg::strcasecmp(naxes,def_axes2d)) { ># 26053 "./CImg.h" > ># 26053 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26053 "./CImg.h" ># 26053 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = res[0]._data + off, *ptrd1 = res[1]._data + off, *ptrd2 = res[2]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = Ipc + Inc - 2*Icc; > *(ptrd1++) = (Ipp + Inn - Ipn - Inp)/4; > *(ptrd2++) = Icp + Icn - 2*Icc; > } > } > } else for (unsigned int l = 0; l<lmax; ) { > const unsigned int l2 = l/2; > char axis1 = naxes[l++], axis2 = naxes[l++]; > if (axis1>axis2) cimg::swap(axis1,axis2); > bool valid_axis = false; > if (axis1=='x' && axis2=='x') { > valid_axis = true; ># 26073 "./CImg.h" > ># 26073 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26073 "./CImg.h" ># 26073 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > Tfloat *ptrd = res[l2].data(0,0,z,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = Ipc + Inc - 2*Icc; > } > } > else if (axis1=='x' && axis2=='y') { > valid_axis = true; ># 26084 "./CImg.h" > ># 26084 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26084 "./CImg.h" ># 26084 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > Tfloat *ptrd = res[l2].data(0,0,z,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = (Ipp + Inn - Ipn - Inp)/4; > } > } > else if (axis1=='x' && axis2=='z') { > valid_axis = true; ># 26095 "./CImg.h" > ># 26095 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26095 "./CImg.h" ># 26095 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res[l2].data(0,0,0,c); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) *(ptrd++) = (Ipcp + Incn - Ipcn - Incp)/4; > } > } > else if (axis1=='y' && axis2=='y') { > valid_axis = true; ># 26106 "./CImg.h" > ># 26106 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26106 "./CImg.h" ># 26106 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > Tfloat *ptrd = res[l2].data(0,0,z,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = Icp + Icn - 2*Icc; > } > } > else if (axis1=='y' && axis2=='z') { > valid_axis = true; ># 26117 "./CImg.h" > ># 26117 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26117 "./CImg.h" ># 26117 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res[l2].data(0,0,0,c); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) *(ptrd++) = (Icpp + Icnn - Icpn - Icnp)/4; > } > } > else if (axis1=='z' && axis2=='z') { > valid_axis = true; ># 26128 "./CImg.h" > ># 26128 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26128 "./CImg.h" ># 26128 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res[l2].data(0,0,0,c); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) *(ptrd++) = Iccn + Iccp - 2*Iccc; > } > } > else if (!valid_axis) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_hessian(): Invalid specified axes '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > naxes); > } > return res; > } > > > CImg<T>& laplacian() { > return get_laplacian().move_to(*this); > } > > > CImg<Tfloat> get_laplacian() const { > if (is_empty()) return CImg<Tfloat>(); > CImg<Tfloat> res(_width,_height,_depth,_spectrum); > if (_depth>1) { ># 26156 "./CImg.h" > ># 26156 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26156 "./CImg.h" ># 26156 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res.data(0,0,0,c); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) *(ptrd++) = Incc + Ipcc + Icnc + Icpc + Iccn + Iccp - 6*Iccc; > } > } else if (_height>1) { ># 26165 "./CImg.h" > ># 26165 "./CImg.h" >#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26165 "./CImg.h" ># 26165 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res.data(0,0,0,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = Inc + Ipc + Icn + Icp - 4*Icc; > } > } else { ># 26174 "./CImg.h" > ># 26174 "./CImg.h" >#pragma omp parallel for if (_width>=1048576 && _height*_depth*_spectrum>=2) ># 26174 "./CImg.h" ># 26174 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res.data(0,0,0,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = Inc + Ipc - 2*Icc; > } > } > return res; > } > > > > > > CImg<T>& structure_tensors(const unsigned int scheme=2) { > return get_structure_tensors(scheme).move_to(*this); > } > > > CImg<Tfloat> get_structure_tensors(const unsigned int scheme=2) const { > if (is_empty()) return *this; > CImg<Tfloat> res; > if (_depth>1) { > res.assign(_width,_height,_depth,6,0); > switch (scheme) { > case 0 : { ># 26202 "./CImg.h" > ># 26202 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26202 "./CImg.h" ># 26202 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat > *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), > *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > ix = (Incc - Ipcc)/2, > iy = (Icnc - Icpc)/2, > iz = (Iccn - Iccp)/2; > *(ptrd0++)+=ix*ix; > *(ptrd1++)+=ix*iy; > *(ptrd2++)+=ix*iz; > *(ptrd3++)+=iy*iy; > *(ptrd4++)+=iy*iz; > *(ptrd5++)+=iz*iz; > } > } > } break; > case 1 : { ># 26225 "./CImg.h" > ># 26225 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26225 "./CImg.h" ># 26225 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat > *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), > *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > ixf = Incc - Iccc, ixb = Iccc - Ipcc, > iyf = Icnc - Iccc, iyb = Iccc - Icpc, > izf = Iccn - Iccc, izb = Iccc - Iccp; > *(ptrd0++)+=(ixf*ixf + 2*ixf*ixb + ixb*ixb)/4; > *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; > *(ptrd2++)+=(ixf*izf + ixf*izb + ixb*izf + ixb*izb)/4; > *(ptrd3++)+=(iyf*iyf + 2*iyf*iyb + iyb*iyb)/4; > *(ptrd4++)+=(iyf*izf + iyf*izb + iyb*izf + iyb*izb)/4; > *(ptrd5++)+=(izf*izf + 2*izf*izb + izb*izb)/4; > } > } > } break; > default : { ># 26248 "./CImg.h" > ># 26248 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26248 "./CImg.h" ># 26248 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat > *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), > *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > ixf = Incc - Iccc, ixb = Iccc - Ipcc, > iyf = Icnc - Iccc, iyb = Iccc - Icpc, > izf = Iccn - Iccc, izb = Iccc - Iccp; > *(ptrd0++)+=(ixf*ixf + ixb*ixb)/2; > *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; > *(ptrd2++)+=(ixf*izf + ixf*izb + ixb*izf + ixb*izb)/4; > *(ptrd3++)+=(iyf*iyf + iyb*iyb)/2; > *(ptrd4++)+=(iyf*izf + iyf*izb + iyb*izf + iyb*izb)/4; > *(ptrd5++)+=(izf*izf + izb*izb)/2; > } > } > } break; > } > } else { > res.assign(_width,_height,_depth,3,0); > switch (scheme) { > case 0 : { ># 26275 "./CImg.h" > ># 26275 "./CImg.h" >#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26275 "./CImg.h" ># 26275 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > ix = (Inc - Ipc)/2, > iy = (Icn - Icp)/2; > *(ptrd0++)+=ix*ix; > *(ptrd1++)+=ix*iy; > *(ptrd2++)+=iy*iy; > } > } > } break; > case 1 : { ># 26292 "./CImg.h" > ># 26292 "./CImg.h" >#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26292 "./CImg.h" ># 26292 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > ixf = Inc - Icc, ixb = Icc - Ipc, > iyf = Icn - Icc, iyb = Icc - Icp; > *(ptrd0++)+=(ixf*ixf + 2*ixf*ixb + ixb*ixb)/4; > *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; > *(ptrd2++)+=(iyf*iyf + 2*iyf*iyb + iyb*iyb)/4; > } > } > } break; > default : { ># 26309 "./CImg.h" > ># 26309 "./CImg.h" >#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26309 "./CImg.h" ># 26309 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > ixf = Inc - Icc, ixb = Icc - Ipc, > iyf = Icn - Icc, iyb = Icc - Icp; > *(ptrd0++)+=(ixf*ixf + ixb*ixb)/2; > *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; > *(ptrd2++)+=(iyf*iyf + iyb*iyb)/2; > } > } > } break; > } > } > return res; > } ># 26337 "./CImg.h" > CImg<T>& diffusion_tensors(const float sharpness=0.7f, const float anisotropy=0.6f, > const float alpha=0.6f, const float sigma=1.1f, const bool is_sqrt=false) { > CImg<Tfloat> res; > const float nsharpness = cimg::max(sharpness,1e-5f), power1 = (is_sqrt?0.5f:1)*nsharpness, power2 = power1/(1e-7f+1-anisotropy); > blur(alpha).normalize(0,(T)255); > > if (_depth>1) { > get_structure_tensors().move_to(res).blur(sigma); ># 26346 "./CImg.h" > ># 26346 "./CImg.h" >#pragma omp parallel for collapse(2) if(_width>=256 && _height*_depth>=256) ># 26346 "./CImg.h" ># 26346 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > Tfloat > *ptrd0 = res.data(0,y,z,0), *ptrd1 = res.data(0,y,z,1), *ptrd2 = res.data(0,y,z,2), > *ptrd3 = res.data(0,y,z,3), *ptrd4 = res.data(0,y,z,4), *ptrd5 = res.data(0,y,z,5); > CImg<floatT> val(3), vec(3,3); > for (int x = 0; x<(int)((*this)._width); ++x) { > res.get_tensor_at(x,y,z).symmetric_eigen(val,vec); > const float > _l1 = val[2], _l2 = val[1], _l3 = val[0], > l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, l3 = _l3>0?_l3:0, > ux = vec(0,0), uy = vec(0,1), uz = vec(0,2), > vx = vec(1,0), vy = vec(1,1), vz = vec(1,2), > wx = vec(2,0), wy = vec(2,1), wz = vec(2,2), > n1 = (float)std::pow(1+l1+l2+l3,-power1), > n2 = (float)std::pow(1+l1+l2+l3,-power2); > *(ptrd0++) = n1*(ux*ux + vx*vx) + n2*wx*wx; > *(ptrd1++) = n1*(ux*uy + vx*vy) + n2*wx*wy; > *(ptrd2++) = n1*(ux*uz + vx*vz) + n2*wx*wz; > *(ptrd3++) = n1*(uy*uy + vy*vy) + n2*wy*wy; > *(ptrd4++) = n1*(uy*uz + vy*vz) + n2*wy*wz; > *(ptrd5++) = n1*(uz*uz + vz*vz) + n2*wz*wz; > } > } > } else { > get_structure_tensors().move_to(res).blur(sigma); ># 26374 "./CImg.h" > ># 26374 "./CImg.h" >#pragma omp parallel for if(_width>=256 && _height>=256) ># 26374 "./CImg.h" ># 26374 "./CImg.h" > > > for (int y = 0; y<(int)((*this)._height); ++y) { > Tfloat *ptrd0 = res.data(0,y,0,0), *ptrd1 = res.data(0,y,0,1), *ptrd2 = res.data(0,y,0,2); > CImg<floatT> val(2), vec(2,2); > for (int x = 0; x<(int)((*this)._width); ++x) { > res.get_tensor_at(x,y).symmetric_eigen(val,vec); > const float > _l1 = val[1], _l2 = val[0], > l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, > ux = vec(1,0), uy = vec(1,1), > vx = vec(0,0), vy = vec(0,1), > n1 = (float)std::pow(1+l1+l2,-power1), > n2 = (float)std::pow(1+l1+l2,-power2); > *(ptrd0++) = n1*ux*ux + n2*vx*vx; > *(ptrd1++) = n1*ux*uy + n2*vx*vy; > *(ptrd2++) = n1*uy*uy + n2*vy*vy; > } > } > } > return res.move_to(*this); > } > > > CImg<Tfloat> get_diffusion_tensors(const float sharpness=0.7f, const float anisotropy=0.6f, > const float alpha=0.6f, const float sigma=1.1f, const bool is_sqrt=false) const { > return CImg<Tfloat>(*this,false).diffusion_tensors(sharpness,anisotropy,alpha,sigma,is_sqrt); > } ># 26412 "./CImg.h" > CImg<T>& displacement(const CImg<T>& source, const float smoothness=0.1f, const float precision=5.0f, > const unsigned int nb_scales=0, const unsigned int iteration_max=10000, > const bool is_backward=false) { > return get_displacement(source,smoothness,precision,nb_scales,iteration_max,is_backward).move_to(*this); > } > > > CImg<Tfloat> get_displacement(const CImg<T>& source, > const float smoothness=0.1f, const float precision=5.0f, > const unsigned int nb_scales=0, const unsigned int iteration_max=10000, > const bool is_backward=false) const { > if (is_empty() || !source) return +*this; > if (!is_sameXYZC(source)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "displacement(): Instance and source image (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > source._width,source._height,source._depth,source._spectrum,source._data); > if (precision<0) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "displacement(): Invalid specified precision %g " > "(should be >=0)", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > precision); > const unsigned int _nb_scales = nb_scales>0?nb_scales:(unsigned int)(2*std::log((double)(cimg::max(_width,_height)))); > const float _precision = (float)std::pow(10.0,-(double)precision); > float sm, sM = source.max_min(sm), tm, tM = max_min(tm); > const float sdelta = sm==sM?1:(sM - sm), tdelta = tm==tM?1:(tM - tm); > const bool is_3d = source._depth>1; > CImg<floatT> U; > > for (int scale = _nb_scales-1; scale>=0; --scale) { > const float factor = (float)std::pow(1.5,(double)scale); > const unsigned int > _sw = (unsigned int)(_width/factor), sw = _sw?_sw:1, > _sh = (unsigned int)(_height/factor), sh = _sh?_sh:1, > _sd = (unsigned int)(_depth/factor), sd = _sd?_sd:1; > if (sw<5 && sh<5 && (!is_3d || sd<5)) continue; > const CImg<Tfloat> > I1 = (source.get_resize(sw,sh,sd,-100,2)-=sm)/=sdelta, > I2 = (get_resize(I1,2)-=tm)/=tdelta; > if (U) (U*=1.5f).resize(I2._width,I2._height,I2._depth,-100,3); > else U.assign(I2._width,I2._height,I2._depth,is_3d?3:2,0); > float dt = 2, energy = cimg::type<float>::max(); > const CImgList<Tfloat> dI = is_backward?I1.get_gradient():I2.get_gradient(); > > for (unsigned int iteration = 0; iteration<iteration_max; ++iteration) { > float _energy = 0; > if (is_3d) { > if (smoothness>=0) for (int z = 0, _p1z = 0, _n1z = 1>=((U)._depth)?(int)((U)._depth)-1:1; _n1z<(int)((U)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((U)._height)?(int)((U)._height)-1:1; _n1y<(int)((U)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((U)._width)?(int)((U)._width)-1:1; _n1x<(int)((U)._width) || x==--_n1x; _p1x = x++, ++_n1x) { > const float > X = is_backward?x - U(x,y,z,0):x + U(x,y,z,0), > Y = is_backward?y - U(x,y,z,1):y + U(x,y,z,1), > Z = is_backward?z - U(x,y,z,2):z + U(x,y,z,2); > float delta_I = 0, _energy_regul = 0; > if (is_backward) for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1.linear_atXYZ(X,Y,Z,c) - I2(x,y,z,c)); > else for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1(x,y,z,c) - I2.linear_atXYZ(X,Y,Z,c)); > for (int c = 0; c<(int)((U)._spectrum); ++c) { > const float > Ux = 0.5f*(U(_n1x,y,z,c) - U(_p1x,y,z,c)), > Uy = 0.5f*(U(x,_n1y,z,c) - U(x,_p1y,z,c)), > Uz = 0.5f*(U(x,y,_n1z,c) - U(x,y,_p1z,c)), > Uxx = U(_n1x,y,z,c) + U(_p1x,y,z,c), > Uyy = U(x,_n1y,z,c) + U(x,_p1y,z,c), > Uzz = U(x,y,_n1z,c) + U(x,y,_p1z,c); > U(x,y,z,c) = (float)(U(x,y,z,c) + dt*(delta_I*dI[c].linear_atXYZ(X,Y,Z) + smoothness* ( Uxx + Uyy + Uzz)))/(1+6*smoothness*dt); > _energy_regul+=Ux*Ux + Uy*Uy + Uz*Uz; > } > _energy+=delta_I*delta_I + smoothness*_energy_regul; > } else { > const float nsmoothness = -smoothness; > for (int z = 0, _p1z = 0, _n1z = 1>=((U)._depth)?(int)((U)._depth)-1:1; _n1z<(int)((U)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((U)._height)?(int)((U)._height)-1:1; _n1y<(int)((U)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((U)._width)?(int)((U)._width)-1:1; _n1x<(int)((U)._width) || x==--_n1x; _p1x = x++, ++_n1x) { > const float > X = is_backward?x - U(x,y,z,0):x + U(x,y,z,0), > Y = is_backward?y - U(x,y,z,1):y + U(x,y,z,1), > Z = is_backward?z - U(x,y,z,2):z + U(x,y,z,2); > float delta_I = 0, _energy_regul = 0; > if (is_backward) for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1.linear_atXYZ(X,Y,Z,c) - I2(x,y,z,c)); > else for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1(x,y,z,c) - I2.linear_atXYZ(X,Y,Z,c)); > for (int c = 0; c<(int)((U)._spectrum); ++c) { > const float > Ux = 0.5f*(U(_n1x,y,z,c) - U(_p1x,y,z,c)), > Uy = 0.5f*(U(x,_n1y,z,c) - U(x,_p1y,z,c)), > Uz = 0.5f*(U(x,y,_n1z,c) - U(x,y,_p1z,c)), > N2 = Ux*Ux + Uy*Uy + Uz*Uz, > N = std::sqrt(N2), > N3 = 1e-5f + N2*N, > coef_a = (1 - Ux*Ux/N2)/N, > coef_b = -2*Ux*Uy/N3, > coef_c = -2*Ux*Uz/N3, > coef_d = (1 - Uy*Uy/N2)/N, > coef_e = -2*Uy*Uz/N3, > coef_f = (1 - Uz*Uz/N2)/N, > Uxx = U(_n1x,y,z,c) + U(_p1x,y,z,c), > Uyy = U(x,_n1y,z,c) + U(x,_p1y,z,c), > Uzz = U(x,y,_n1z,c) + U(x,y,_p1z,c), > Uxy = 0.25f*(U(_n1x,_n1y,z,c) + U(_p1x,_p1y,z,c) - U(_n1x,_p1y,z,c) - U(_n1x,_p1y,z,c)), > Uxz = 0.25f*(U(_n1x,y,_n1z,c) + U(_p1x,y,_p1z,c) - U(_n1x,y,_p1z,c) - U(_n1x,y,_p1z,c)), > Uyz = 0.25f*(U(x,_n1y,_n1z,c) + U(x,_p1y,_p1z,c) - U(x,_n1y,_p1z,c) - U(x,_n1y,_p1z,c)); > U(x,y,z,c) = (float)(U(x,y,z,c) + dt*(delta_I*dI[c].linear_atXYZ(X,Y,Z) + > nsmoothness* ( coef_a*Uxx + coef_b*Uxy + coef_c*Uxz + coef_d*Uyy + coef_e*Uyz + coef_f*Uzz )) > )/(1+2*(coef_a+coef_d+coef_f)*nsmoothness*dt); > _energy_regul+=N; > } > _energy+=delta_I*delta_I + nsmoothness*_energy_regul; > } > } > } else { > if (smoothness>=0) for (int y = 0, _p1y = 0, _n1y = 1>=((U)._height)?(int)((U)._height)-1:1; _n1y<(int)((U)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((U)._width)?(int)((U)._width)-1:1; _n1x<(int)((U)._width) || x==--_n1x; _p1x = x++, ++_n1x) { > const float > X = is_backward?x - U(x,y,0):x + U(x,y,0), > Y = is_backward?y - U(x,y,1):y + U(x,y,1); > float delta_I = 0, _energy_regul = 0; > if (is_backward) for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1.linear_atXY(X,Y,c) - I2(x,y,c)); > else for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1(x,y,c) - I2.linear_atXY(X,Y,c)); > for (int c = 0; c<(int)((U)._spectrum); ++c) { > const float > Ux = 0.5f*(U(_n1x,y,c) - U(_p1x,y,c)), > Uy = 0.5f*(U(x,_n1y,c) - U(x,_p1y,c)), > Uxx = U(_n1x,y,c) + U(_p1x,y,c), > Uyy = U(x,_n1y,c) + U(x,_p1y,c); > U(x,y,c) = (float)(U(x,y,c) + dt*(delta_I*dI[c].linear_atXY(X,Y) + smoothness*( Uxx + Uyy )))/(1+4*smoothness*dt); > _energy_regul+=Ux*Ux + Uy*Uy; > } > _energy+=delta_I*delta_I + smoothness*_energy_regul; > } else { > const float nsmoothness = -smoothness; > for (int y = 0, _p1y = 0, _n1y = 1>=((U)._height)?(int)((U)._height)-1:1; _n1y<(int)((U)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((U)._width)?(int)((U)._width)-1:1; _n1x<(int)((U)._width) || x==--_n1x; _p1x = x++, ++_n1x) { > const float > X = is_backward?x - U(x,y,0):x + U(x,y,0), > Y = is_backward?y - U(x,y,1):y + U(x,y,1); > float delta_I = 0, _energy_regul = 0; > if (is_backward) for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1.linear_atXY(X,Y,c) - I2(x,y,c)); > else for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1(x,y,c) - I2.linear_atXY(X,Y,c)); > for (int c = 0; c<(int)((U)._spectrum); ++c) { > const float > Ux = 0.5f*(U(_n1x,y,c) - U(_p1x,y,c)), > Uy = 0.5f*(U(x,_n1y,c) - U(x,_p1y,c)), > N2 = Ux*Ux + Uy*Uy, > N = std::sqrt(N2), > N3 = 1e-5f + N2*N, > coef_a = Uy*Uy/N3, > coef_b = -2*Ux*Uy/N3, > coef_c = Ux*Ux/N3, > Uxx = U(_n1x,y,c) + U(_p1x,y,c), > Uyy = U(x,_n1y,c) + U(x,_p1y,c), > Uxy = 0.25f*(U(_n1x,_n1y,c) + U(_p1x,_p1y,c) - U(_n1x,_p1y,c) - U(_n1x,_p1y,c)); > U(x,y,c) = (float)(U(x,y,c) + dt*(delta_I*dI[c].linear_atXY(X,Y) + nsmoothness*( coef_a*Uxx + coef_b*Uxy + coef_c*Uyy )))/(1+2*(coef_a+coef_c)*nsmoothness*dt); > _energy_regul+=N; > } > _energy+=delta_I*delta_I + nsmoothness*_energy_regul; > } > } > } > const float d_energy = (_energy - energy)/(sw*sh*sd); > if (d_energy<=0 && -d_energy<_precision) break; > if (d_energy>0) dt*=0.5f; > energy = _energy; > } > } > return U; > } ># 26586 "./CImg.h" > CImg<T>& distance(const T value, const unsigned int metric=2) { > if (is_empty()) return *this; > bool is_value = false; > for (T *ptr = (*this)._data, *_maxptr = (*this)._data + (*this).size(); ptr<_maxptr; ++ptr) *ptr = *ptr==value?is_value=true,0:(T)999999999; > if (!is_value) return fill(cimg::type<T>::max()); > switch (metric) { > case 0 : return _distance_core(_distance_sep_cdt,_distance_dist_cdt); > case 1 : return _distance_core(_distance_sep_mdt,_distance_dist_mdt); > case 3 : return _distance_core(_distance_sep_edt,_distance_dist_edt); > default : return _distance_core(_distance_sep_edt,_distance_dist_edt).sqrt(); > } > return *this; > } > > > CImg<Tfloat> get_distance(const T value, const unsigned int metric=2) const { > return CImg<Tfloat>(*this,false).distance((Tfloat)value,metric); > } > > static long _distance_sep_edt(const long i, const long u, const long *const g) { > return (u*u-i*i+g[u]-g[i])/(2*(u-i)); > } > > static long _distance_dist_edt(const long x, const long i, const long *const g) { > return (x-i)*(x-i) + g[i]; > } > > static long _distance_sep_mdt(const long i, const long u, const long *const g) { > return (u-i<=g[u]-g[i]?999999999:(g[u]-g[i]+u+i)/2); > } > > static long _distance_dist_mdt(const long x, const long i, const long *const g) { > return (x<i?i-x:x-i) + g[i]; > } > > static long _distance_sep_cdt(const long i, const long u, const long *const g) { > const long h = (i+u)/2; > if (g[i]<=g[u]) { return h<i+g[u]?i+g[u]:h; } > return h<u-g[i]?h:u-g[i]; > } > > static long _distance_dist_cdt(const long x, const long i, const long *const g) { > const long d = x<i?i-x:x-i; > return d<g[i]?g[i]:d; > } > > static void _distance_scan(const unsigned int len, > const long *const g, > long (*const sep)(const long, const long, const long *const), > long (*const f)(const long, const long, const long *const), > long *const s, > long *const t, > long *const dt) { > long q = s[0] = t[0] = 0; > for (int u = 1; u<(int)len; ++u) { > while ((q>=0) && f(t[q],s[q],g)>f(t[q],u,g)) { --q; } > if (q<0) { q = 0; s[0] = u; } > else { const long w = 1 + sep(s[q], u, g); if (w<(long)len) { ++q; s[q] = u; t[q] = w; }} > } > for (int u = (int)len-1; u>=0; --u) { dt[u] = f(u,s[q],g); if (u==t[q]) --q; } > } > > CImg<T>& _distance_core(long (*const sep)(const long, const long, const long *const), > long (*const f)(const long, const long, const long *const)) { > const unsigned long wh = (unsigned long)_width*_height; ># 26652 "./CImg.h" > ># 26652 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 26652 "./CImg.h" ># 26652 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > CImg<longT> g(_width), dt(_width), s(_width), t(_width); > CImg<T> img = get_shared_channel(c); ># 26658 "./CImg.h" > ># 26658 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) firstprivate(g,dt,s,t) ># 26658 "./CImg.h" ># 26658 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) g[x] = (long)img(x,y,z,0,wh); > _distance_scan(_width,g,sep,f,s,t,dt); > for (int x = 0; x<(int)((*this)._width); ++x) img(x,y,z,0,wh) = (T)dt[x]; > } > if (_height>1) { > g.assign(_height); dt.assign(_height); s.assign(_height); t.assign(_height); ># 26668 "./CImg.h" > ># 26668 "./CImg.h" >#pragma omp parallel for collapse(2) if (_height>=512 && _width*_depth>=16) firstprivate(g,dt,s,t) ># 26668 "./CImg.h" ># 26668 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > for (int y = 0; y<(int)((*this)._height); ++y) g[y] = (long)img(x,y,z,0,wh); > _distance_scan(_height,g,sep,f,s,t,dt); > for (int y = 0; y<(int)((*this)._height); ++y) img(x,y,z,0,wh) = (T)dt[y]; > } > } > if (_depth>1) { > g.assign(_depth); dt.assign(_depth); s.assign(_depth); t.assign(_depth); ># 26679 "./CImg.h" > ># 26679 "./CImg.h" >#pragma omp parallel for collapse(2) if (_depth>=512 && _width*_height>=16) firstprivate(g,dt,s,t) ># 26679 "./CImg.h" ># 26679 "./CImg.h" > > > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > for (int z = 0; z<(int)((*this)._depth); ++z) g[z] = (long)img(x,y,z,0,wh); > _distance_scan(_depth,g,sep,f,s,t,dt); > for (int z = 0; z<(int)((*this)._depth); ++z) img(x,y,z,0,wh) = (T)dt[z]; > } > } > } > return *this; > } > > > > > > > > template<typename t> > CImg<T>& distance(const T value, const CImg<t>& metric_mask) { > if (is_empty()) return *this; > bool is_value = false; > for (T *ptr = (*this)._data, *_maxptr = (*this)._data + (*this).size(); ptr<_maxptr; ++ptr) *ptr = *ptr==value?is_value=true,0:(T)999999999; > if (!is_value) return fill(cimg::type<T>::max()); > const unsigned long wh = (unsigned long)_width*_height; ># 26705 "./CImg.h" > ># 26705 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 26705 "./CImg.h" ># 26705 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > CImg<T> img = get_shared_channel(c); ># 26710 "./CImg.h" > ># 26710 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=1024) ># 26710 "./CImg.h" ># 26710 "./CImg.h" > > > for (int dz = 0; dz<(int)((metric_mask)._depth); ++dz) for (int dy = 0; dy<(int)((metric_mask)._height); ++dy) for (int dx = 0; dx<(int)((metric_mask)._width); ++dx) { > const t weight = metric_mask(dx,dy,dz); > if (weight) { > for (int z = dz, nz = 0; z<depth(); ++z,++nz) { > for (int y = dy , ny = 0; y<height(); ++y,++ny) { > for (int x = dx, nx = 0; x<width(); ++x,++nx) { > const T dd = img(nx,ny,nz,0,wh) + weight; > if (dd<img(x,y,z,0,wh)) img(x,y,z,0,wh) = dd; > } > } > } > for (int z = depth() - 1 - dz, nz = depth() - 1; z>=0; --z,--nz) { > for (int y = height() - 1 - dy, ny = height() - 1; y>=0; --y,--ny) { > for (int x = width() - 1 - dx, nx = width() - 1; x>=0; --x,--nx) { > const T dd = img(nx,ny,nz,0,wh) + weight; > if (dd<img(x,y,z,0,wh)) img(x,y,z,0,wh) = dd; > } > } > } > } > } > } > return *this; > } > > > template<typename t> > CImg<Tfloat> get_distance(const T value, const CImg<t>& metric_mask) const { > return CImg<Tfloat>(*this,false).distance(value,metric_mask); > } > > > > > > > > template<typename t, typename to> > CImg<T>& distance_dijkstra(const T value, const CImg<t>& metric, const bool is_high_connectivity, CImg<to>& return_path) { > return get_distance_dijkstra(value,metric,is_high_connectivity,return_path).move_to(*this); > } > > > template<typename t, typename to> > CImg<typename cimg::superset<t,long>::type> get_distance_dijkstra(const T value, const CImg<t>& metric, const bool is_high_connectivity, CImg<to>& return_path) const { > if (is_empty()) return return_path.assign(); > if (!is_sameXYZ(metric)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "distance_dijkstra(): image instance and metric map (%u,%u,%u,%u) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > metric._width,metric._height,metric._depth,metric._spectrum); > typedef typename cimg::superset<t,long>::type td; > CImg<td> result(_width,_height,_depth,_spectrum), Q; > CImg<boolT> is_queued(_width,_height,_depth,1); > if (return_path) return_path.assign(_width,_height,_depth,_spectrum); > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<T> img = get_shared_channel(c); > const CImg<t> met = metric.get_shared_channel(c%metric._spectrum); > CImg<td> res = result.get_shared_channel(c); > CImg<to> path = return_path?return_path.get_shared_channel(c):CImg<to>(); > unsigned int sizeQ = 0; > > > is_queued.fill(0); > for (int z = 0; z<(int)((img)._depth); ++z) for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) if (img(x,y,z)==value) { > Q._priority_queue_insert(is_queued,sizeQ,0,x,y,z); > res(x,y,z) = 0; > if (path) path(x,y,z) = (to)0; > } > > > while (sizeQ) { > > > const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); > const td P = (td)-Q(0,0); > Q._priority_queue_remove(sizeQ); > > > td npot = 0; > if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x-1,y,z)+P),x-1,y,z)) { > res(x-1,y,z) = npot; if (path) path(x-1,y,z) = (to)2; > } > if (x+1<width() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x+1,y,z)+P),x+1,y,z)) { > res(x+1,y,z) = npot; if (path) path(x+1,y,z) = (to)1; > } > if (y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y-1,z)+P),x,y-1,z)) { > res(x,y-1,z) = npot; if (path) path(x,y-1,z) = (to)8; > } > if (y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y+1,z)+P),x,y+1,z)) { > res(x,y+1,z) = npot; if (path) path(x,y+1,z) = (to)4; > } > if (z-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y,z-1)+P),x,y,z-1)) { > res(x,y,z-1) = npot; if (path) path(x,y,z-1) = (to)32; > } > if (z+1<depth() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y,z+1)+P),x,y,z+1)) { > res(x,y,z+1) = npot; if (path) path(x,y,z+1) = (to)16; > } > > if (is_high_connectivity) { > const float sqrt2 = std::sqrt(2.0f), sqrt3 = std::sqrt(3.0f); > > > if (x-1>=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y-1,z)+P)),x-1,y-1,z)) { > res(x-1,y-1,z) = npot; if (path) path(x-1,y-1,z) = (to)10; > } > if (x+1<width() && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y-1,z)+P)),x+1,y-1,z)) { > res(x+1,y-1,z) = npot; if (path) path(x+1,y-1,z) = (to)9; > } > if (x-1>=0 && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y+1,z)+P)),x-1,y+1,z)) { > res(x-1,y+1,z) = npot; if (path) path(x-1,y+1,z) = (to)6; > } > if (x+1<width() && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y+1,z)+P)),x+1,y+1,z)) { > res(x+1,y+1,z) = npot; if (path) path(x+1,y+1,z) = (to)5; > } > > if (z-1>=0) { > if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y,z-1)+P)),x-1,y,z-1)) { > res(x-1,y,z-1) = npot; if (path) path(x-1,y,z-1) = (to)34; > } > if (x+1<width() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y,z-1)+P)),x+1,y,z-1)) { > res(x+1,y,z-1) = npot; if (path) path(x+1,y,z-1) = (to)33; > } > if (y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y-1,z-1)+P)),x,y-1,z-1)) { > res(x,y-1,z-1) = npot; if (path) path(x,y-1,z-1) = (to)40; > } > if (y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y+1,z-1)+P)),x,y+1,z-1)) { > res(x,y+1,z-1) = npot; if (path) path(x,y+1,z-1) = (to)36; > } > if (x-1>=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y-1,z-1)+P)),x-1,y-1,z-1)) { > res(x-1,y-1,z-1) = npot; if (path) path(x-1,y-1,z-1) = (to)42; > } > if (x+1<width() && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y-1,z-1)+P)),x+1,y-1,z-1)) { > res(x+1,y-1,z-1) = npot; if (path) path(x+1,y-1,z-1) = (to)41; > } > if (x-1>=0 && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y+1,z-1)+P)),x-1,y+1,z-1)) { > res(x-1,y+1,z-1) = npot; if (path) path(x-1,y+1,z-1) = (to)38; > } > if (x+1<width() && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y+1,z-1)+P)),x+1,y+1,z-1)) { > res(x+1,y+1,z-1) = npot; if (path) path(x+1,y+1,z-1) = (to)37; > } > } > > if (z+1<depth()) { > if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y,z+1)+P)),x-1,y,z+1)) { > res(x-1,y,z+1) = npot; if (path) path(x-1,y,z+1) = (to)18; > } > if (x+1<width() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y,z+1)+P)),x+1,y,z+1)) { > res(x+1,y,z+1) = npot; if (path) path(x+1,y,z+1) = (to)17; > } > if (y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y-1,z+1)+P)),x,y-1,z+1)) { > res(x,y-1,z+1) = npot; if (path) path(x,y-1,z+1) = (to)24; > } > if (y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y+1,z+1)+P)),x,y+1,z+1)) { > res(x,y+1,z+1) = npot; if (path) path(x,y+1,z+1) = (to)20; > } > if (x-1>=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y-1,z+1)+P)),x-1,y-1,z+1)) { > res(x-1,y-1,z+1) = npot; if (path) path(x-1,y-1,z+1) = (to)26; > } > if (x+1<width() && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y-1,z+1)+P)),x+1,y-1,z+1)) { > res(x+1,y-1,z+1) = npot; if (path) path(x+1,y-1,z+1) = (to)25; > } > if (x-1>=0 && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y+1,z+1)+P)),x-1,y+1,z+1)) { > res(x-1,y+1,z+1) = npot; if (path) path(x-1,y+1,z+1) = (to)22; > } > if (x+1<width() && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y+1,z+1)+P)),x+1,y+1,z+1)) { > res(x+1,y+1,z+1) = npot; if (path) path(x+1,y+1,z+1) = (to)21; > } > } > } > } > } > return result; > } > > > template<typename t> > CImg<T>& distance_dijkstra(const T value, const CImg<t>& metric, const bool is_high_connectivity=false) { > return get_distance_dijkstra(value,metric,is_high_connectivity).move_to(*this); > } > > > template<typename t> > CImg<Tfloat> get_distance_dijkstra(const T value, const CImg<t>& metric, const bool is_high_connectivity=false) const { > CImg<T> return_path; > return get_distance_dijkstra(value,metric,is_high_connectivity,return_path); > } > > > > > > > template<typename t> > CImg<T>& distance_eikonal(const T value, const CImg<t>& metric) { > return get_distance_eikonal(value,metric).move_to(*this); > } > > > template<typename t> > CImg<Tfloat> get_distance_eikonal(const T value, const CImg<t>& metric) const { > if (is_empty()) return *this; > if (!is_sameXYZ(metric)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "distance_eikonal(): image instance and metric map (%u,%u,%u,%u) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > metric._width,metric._height,metric._depth,metric._spectrum); > CImg<Tfloat> result(_width,_height,_depth,_spectrum,cimg::type<Tfloat>::max()), Q; > CImg<charT> state(_width,_height,_depth); ># 26924 "./CImg.h" > ># 26924 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) firstprivate(Q,state) ># 26924 "./CImg.h" ># 26924 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<T> img = get_shared_channel(c); > const CImg<t> met = metric.get_shared_channel(c%metric._spectrum); > CImg<Tfloat> res = result.get_shared_channel(c); > unsigned int sizeQ = 0; > state.fill(-1); > > > Tfloat *ptr1 = res._data; char *ptr2 = state._data; > for (T *ptr0 = (img)._data, *_maxptr0 = (img)._data + (img).size(); ptr0<_maxptr0; ++ptr0) { if (*ptr0==value) { *ptr1 = 0; *ptr2 = 1; } ++ptr1; ++ptr2; } > > > ptr2 = state._data; > for (int z = 0; z<(int)((img)._depth); ++z) for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) if (*(ptr2++)==1) { > if (x-1>=0 && state(x-1,y,z)==-1) { > const Tfloat dist = res(x-1,y,z) = __distance_eikonal(res,met(x-1,y,z),x-1,y,z); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x-1,y,z); > } > if (x+1<width() && state(x+1,y,z)==-1) { > const Tfloat dist = res(x+1,y,z) = __distance_eikonal(res,met(x+1,y,z),x+1,y,z); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x+1,y,z); > } > if (y-1>=0 && state(x,y-1,z)==-1) { > const Tfloat dist = res(x,y-1,z) = __distance_eikonal(res,met(x,y-1,z),x,y-1,z); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y-1,z); > } > if (y+1<height() && state(x,y+1,z)==-1) { > const Tfloat dist = res(x,y+1,z) = __distance_eikonal(res,met(x,y+1,z),x,y+1,z); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y+1,z); > } > if (z-1>=0 && state(x,y,z-1)==-1) { > const Tfloat dist = res(x,y,z-1) = __distance_eikonal(res,met(x,y,z-1),x,y,z-1); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z-1); > } > if (z+1<depth() && state(x,y,z+1)==-1) { > const Tfloat dist = res(x,y,z+1) = __distance_eikonal(res,met(x,y,z+1),x,y,z+1); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z+1); > } > } > > > while (sizeQ) { > int x = -1, y = -1, z = -1; > while (sizeQ && x<0) { > x = (int)Q(0,1); y = (int)Q(0,2); z = (int)Q(0,3); > Q._priority_queue_remove(sizeQ); > if (state(x,y,z)==1) x = -1; else state(x,y,z) = 1; > } > if (x>=0) { > if (x-1>=0 && state(x-1,y,z)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x-1,y,z),x-1,y,z); > if (dist<res(x-1,y,z)) { res(x-1,y,z) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x-1,y,z); } > } > if (x+1<width() && state(x+1,y,z)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x+1,y,z),x+1,y,z); > if (dist<res(x+1,y,z)) { res(x+1,y,z) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x+1,y,z); } > } > if (y-1>=0 && state(x,y-1,z)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x,y-1,z),x,y-1,z); > if (dist<res(x,y-1,z)) { res(x,y-1,z) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y-1,z); } > } > if (y+1<height() && state(x,y+1,z)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x,y+1,z),x,y+1,z); > if (dist<res(x,y+1,z)) { res(x,y+1,z) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y+1,z); } > } > if (z-1>=0 && state(x,y,z-1)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x,y,z-1),x,y,z-1); > if (dist<res(x,y,z-1)) { res(x,y,z-1) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z-1); } > } > if (z+1<depth() && state(x,y,z+1)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x,y,z+1),x,y,z+1); > if (dist<res(x,y,z+1)) { res(x,y,z+1) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z+1); } > } > } > } > } > return result; > } > > > Tfloat __distance_eikonal(const CImg<Tfloat>& res, const Tfloat P, const int x=0, const int y=0, const int z=0) const { > const T M = cimg::type<T>::max(); > T T1 = cimg::min(x-1>=0?res(x-1,y,z):M,x+1<width()?res(x+1,y,z):M); > Tfloat root = 0; > if (_depth>1) { > T > T2 = cimg::min(y-1>=0?res(x,y-1,z):M,y+1<height()?res(x,y+1,z):M), > T3 = cimg::min(z-1>=0?res(x,y,z-1):M,z+1<depth()?res(x,y,z+1):M); > if (T1>T2) cimg::swap(T1,T2); > if (T2>T3) cimg::swap(T2,T3); > if (T1>T2) cimg::swap(T1,T2); > if (P<=0) return (Tfloat)T1; > if (T3<M && ___distance_eikonal(3,-2*(T1+T2+T3),T1*T1+T2*T2+T3*T3-P*P,root)) return cimg::max((Tfloat)T3,root); > if (T2<M && ___distance_eikonal(2,-2*(T1+T2),T1*T1+T2*T2-P*P,root)) return cimg::max((Tfloat)T2,root); > return P + T1; > } else if (_height>1) { > T T2 = cimg::min(y-1>=0?res(x,y-1,z):M,y+1<height()?res(x,y+1,z):M); > if (T1>T2) cimg::swap(T1,T2); > if (P<=0) return (Tfloat)T1; > if (T2<M && ___distance_eikonal(2,-2*(T1+T2),T1*T1+T2*T2-P*P,root)) return cimg::max((Tfloat)T2,root); > return P + T1; > } else { > if (P<=0) return (Tfloat)T1; > return P + T1; > } > return 0; > } > > > static bool ___distance_eikonal(const Tfloat a, const Tfloat b, const Tfloat c, Tfloat &root) { > const Tfloat delta = b*b - 4*a*c; > if (delta<0) return false; > root = 0.5f*(-b + std::sqrt(delta))/a; > return true; > } > > > template<typename t> > void _eik_priority_queue_insert(CImg<charT>& state, unsigned int& siz, const t value, const unsigned int x, const unsigned int y, const unsigned int z) { > if (state(x,y,z)>0) return; > state(x,y,z) = 0; > if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } > (*this)(siz-1,0) = (T)value; (*this)(siz-1,1) = (T)x; (*this)(siz-1,2) = (T)y; (*this)(siz-1,3) = (T)z; > for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos+1)/2-1,0); pos = par) { > cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); > cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); > } > } > > > > > > > > CImg<T>& distance_eikonal(const unsigned int nb_iterations, const float band_size=0, const float time_step=0.5f) { > if (is_empty()) return *this; > CImg<Tfloat> velocity(*this); > for (unsigned int iteration = 0; iteration<nb_iterations; ++iteration) { > Tfloat *ptrd = velocity._data, veloc_max = 0; > if (_depth>1) { > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) if (band_size<=0 || cimg::abs(Iccc)<band_size) { > const Tfloat > gx = (Incc - Ipcc)/2, > gy = (Icnc - Icpc)/2, > gz = (Iccn - Iccp)/2, > sgn = -cimg::sign(Iccc), > ix = gx*sgn>0?(Incc - Iccc):(Iccc - Ipcc), > iy = gy*sgn>0?(Icnc - Iccc):(Iccc - Icpc), > iz = gz*sgn>0?(Iccn - Iccc):(Iccc - Iccp), > ng = (Tfloat)(1e-5f + std::sqrt(gx*gx + gy*gy + gz*gz)), > ngx = gx/ng, > ngy = gy/ng, > ngz = gz/ng, > veloc = sgn*(ngx*ix + ngy*iy + ngz*iz - 1); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } else *(ptrd++) = 0; > } else { > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) if (band_size<=0 || cimg::abs(Icc)<band_size) { > const Tfloat > gx = (Inc - Ipc)/2, > gy = (Icn - Icp)/2, > sgn = -cimg::sign(Icc), > ix = gx*sgn>0?(Inc - Icc):(Icc - Ipc), > iy = gy*sgn>0?(Icn - Icc):(Icc - Icp), > ng = (Tfloat)(1e-5f + std::sqrt(gx*gx + gy*gy)), > ngx = gx/ng, > ngy = gy/ng, > veloc = sgn*(ngx*ix + ngy*iy - 1); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } else *(ptrd++) = 0; > } > if (veloc_max>0) *this+=(velocity*=time_step/veloc_max); > } > return *this; > } > > > CImg<Tfloat> get_distance_eikonal(const unsigned int nb_iterations, const float band_size=0, const float time_step=0.5f) const { > return CImg<Tfloat>(*this,false).distance_eikonal(nb_iterations,band_size,time_step); > } > > > > > > > > CImg<T>& haar(const char axis, const bool invert=false, const unsigned int nb_scales=1) { > return get_haar(axis,invert,nb_scales).move_to(*this); > } > > > CImg<Tfloat> get_haar(const char axis, const bool invert=false, const unsigned int nb_scales=1) const { > if (is_empty() || !nb_scales) return +*this; > CImg<Tfloat> res; > const Tfloat sqrt2 = std::sqrt(2); > if (nb_scales==1) { > switch (cimg::uncase(axis)) { > case 'x' : { > const unsigned int w = _width/2; > if (w) { > if ((w%2) && w!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Sub-image width %u is not even.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > w); > > res.assign(_width,_height,_depth,_spectrum); > if (invert) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (unsigned int x = 0, xw = w, x2 = 0; x<w; ++x, ++xw) { > const Tfloat val0 = (Tfloat)(*this)(x,y,z,c), val1 = (Tfloat)(*this)(xw,y,z,c); > res(x2++,y,z,c) = (val0 - val1)/sqrt2; > res(x2++,y,z,c) = (val0 + val1)/sqrt2; > } > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (unsigned int x = 0, xw = w, x2 = 0; x<w; ++x, ++xw) { > const Tfloat val0 = (Tfloat)(*this)(x2++,y,z,c), val1 = (Tfloat)(*this)(x2++,y,z,c); > res(x,y,z,c) = (val0 + val1)/sqrt2; > res(xw,y,z,c) = (val1 - val0)/sqrt2; > } > } > } else return *this; > } break; > case 'y' : { > const unsigned int h = _height/2; > if (h) { > if ((h%2) && h!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Sub-image height %u is not even.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > h); > > res.assign(_width,_height,_depth,_spectrum); > if (invert) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > for (unsigned int y = 0, yh = h, y2 = 0; y<h; ++y, ++yh) { > const Tfloat val0 = (Tfloat)(*this)(x,y,z,c), val1 = (Tfloat)(*this)(x,yh,z,c); > res(x,y2++,z,c) = (val0 - val1)/sqrt2; > res(x,y2++,z,c) = (val0 + val1)/sqrt2; > } > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > for (unsigned int y = 0, yh = h, y2 = 0; y<h; ++y, ++yh) { > const Tfloat val0 = (Tfloat)(*this)(x,y2++,z,c), val1 = (Tfloat)(*this)(x,y2++,z,c); > res(x,y,z,c) = (val0 + val1)/sqrt2; > res(x,yh,z,c) = (val1 - val0)/sqrt2; > } > } > } else return *this; > } break; > case 'z' : { > const unsigned int d = _depth/2; > if (d) { > if ((d%2) && d!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Sub-image depth %u is not even.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > d); > > res.assign(_width,_height,_depth,_spectrum); > if (invert) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > for (unsigned int z = 0, zd = d, z2 = 0; z<d; ++z, ++zd) { > const Tfloat val0 = (Tfloat)(*this)(x,y,z,c), val1 = (Tfloat)(*this)(x,y,zd,c); > res(x,y,z2++,c) = (val0 - val1)/sqrt2; > res(x,y,z2++,c) = (val0 + val1)/sqrt2; > } > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > for (unsigned int z = 0, zd = d, z2 = 0; z<d; ++z, ++zd) { > const Tfloat val0 = (Tfloat)(*this)(x,y,z2++,c), val1 = (Tfloat)(*this)(x,y,z2++,c); > res(x,y,z,c) = (val0 + val1)/sqrt2; > res(x,y,zd,c) = (val1 - val0)/sqrt2; > } > } > } else return *this; > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Invalid specified axis '%c' " > "(should be { x | y | z }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > } else { > if (invert) { > res.assign(*this); > switch (cimg::uncase(axis)) { > case 'x' : { > unsigned int w = _width; > for (unsigned int s = 1; w && s<nb_scales; ++s) w/=2; > for (w = w?w:1; w<=_width; w*=2) res.draw_image(res.get_crop(0,w-1).get_haar('x',true,1)); > } break; > case 'y' : { > unsigned int h = _width; > for (unsigned int s = 1; h && s<nb_scales; ++s) h/=2; > for (h = h?h:1; h<=_height; h*=2) res.draw_image(res.get_crop(0,0,_width-1,h-1).get_haar('y',true,1)); > } break; > case 'z' : { > unsigned int d = _depth; > for (unsigned int s = 1; d && s<nb_scales; ++s) d/=2; > for (d = d?d:1; d<=_depth; d*=2) res.draw_image(res.get_crop(0,0,0,_width-1,_height-1,d-1).get_haar('z',true,1)); > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Invalid specified axis '%c' " > "(should be { x | y | z }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > } else { > res = get_haar(axis,false,1); > switch (cimg::uncase(axis)) { > case 'x' : { > for (unsigned int s = 1, w = _width/2; w && s<nb_scales; ++s, w/=2) res.draw_image(res.get_crop(0,w-1).get_haar('x',false,1)); > } break; > case 'y' : { > for (unsigned int s = 1, h = _height/2; h && s<nb_scales; ++s, h/=2) res.draw_image(res.get_crop(0,0,_width-1,h-1).get_haar('y',false,1)); > } break; > case 'z' : { > for (unsigned int s = 1, d = _depth/2; d && s<nb_scales; ++s, d/=2) res.draw_image(res.get_crop(0,0,0,_width-1,_height-1,d-1).get_haar('z',false,1)); > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Invalid specified axis '%c' " > "(should be { x | y | z }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > } > } > return res; > } > > > > > > > CImg<T>& haar(const bool invert=false, const unsigned int nb_scales=1) { > return get_haar(invert,nb_scales).move_to(*this); > } > > > CImg<Tfloat> get_haar(const bool invert=false, const unsigned int nb_scales=1) const { > CImg<Tfloat> res; > if (nb_scales==1) { > if (_width>1) get_haar('x',invert,1).move_to(res); > if (_height>1) { if (res) res.haar('y',invert,1); else get_haar('y',invert,1).move_to(res); } > if (_depth>1) { if (res) res.haar('z',invert,1); else get_haar('z',invert,1).move_to(res); } > if (res) return res; > } else { > if (invert) { > res.assign(*this); > if (_width>1) { > if (_height>1) { > if (_depth>1) { > unsigned int w = _width, h = _height, d = _depth; for (unsigned int s = 1; w && h && d && s<nb_scales; ++s) { w/=2; h/=2; d/=2; } > for (w = w?w:1, h = h?h:1, d = d?d:1; w<=_width && h<=_height && d<=_depth; w*=2, h*=2, d*=2) > res.draw_image(res.get_crop(0,0,0,w-1,h-1,d-1).get_haar(true,1)); > } else { > unsigned int w = _width, h = _height; for (unsigned int s = 1; w && h && s<nb_scales; ++s) { w/=2; h/=2; } > for (w = w?w:1, h = h?h:1; w<=_width && h<=_height; w*=2, h*=2) > res.draw_image(res.get_crop(0,0,0,w-1,h-1,0).get_haar(true,1)); > } > } else { > if (_depth>1) { > unsigned int w = _width, d = _depth; for (unsigned int s = 1; w && d && s<nb_scales; ++s) { w/=2; d/=2; } > for (w = w?w:1, d = d?d:1; w<=_width && d<=_depth; w*=2, d*=2) > res.draw_image(res.get_crop(0,0,0,w-1,0,d-1).get_haar(true,1)); > } else { > unsigned int w = _width; for (unsigned int s = 1; w && s<nb_scales; ++s) w/=2; > for (w = w?w:1; w<=_width; w*=2) > res.draw_image(res.get_crop(0,0,0,w-1,0,0).get_haar(true,1)); > } > } > } else { > if (_height>1) { > if (_depth>1) { > unsigned int h = _height, d = _depth; for (unsigned int s = 1; h && d && s<nb_scales; ++s) { h/=2; d/=2; } > for (h = h?h:1, d = d?d:1; h<=_height && d<=_depth; h*=2, d*=2) > res.draw_image(res.get_crop(0,0,0,0,h-1,d-1).get_haar(true,1)); > } else { > unsigned int h = _height; for (unsigned int s = 1; h && s<nb_scales; ++s) h/=2; > for (h = h?h:1; h<=_height; h*=2) > res.draw_image(res.get_crop(0,0,0,0,h-1,0).get_haar(true,1)); > } > } else { > if (_depth>1) { > unsigned int d = _depth; for (unsigned int s = 1; d && s<nb_scales; ++s) d/=2; > for (d = d?d:1; d<=_depth; d*=2) > res.draw_image(res.get_crop(0,0,0,0,0,d-1).get_haar(true,1)); > } else return *this; > } > } > } else { > res = get_haar(false,1); > if (_width>1) { > if (_height>1) { > if (_depth>1) for (unsigned int s = 1, w = _width/2, h = _height/2, d = _depth/2; w && h && d && s<nb_scales; ++s, w/=2, h/=2, d/=2) > res.draw_image(res.get_crop(0,0,0,w-1,h-1,d-1).haar(false,1)); > else for (unsigned int s = 1, w = _width/2, h = _height/2; w && h && s<nb_scales; ++s, w/=2, h/=2) > res.draw_image(res.get_crop(0,0,0,w-1,h-1,0).haar(false,1)); > } else { > if (_depth>1) for (unsigned int s = 1, w = _width/2, d = _depth/2; w && d && s<nb_scales; ++s, w/=2, d/=2) > res.draw_image(res.get_crop(0,0,0,w-1,0,d-1).haar(false,1)); > else for (unsigned int s = 1, w = _width/2; w && s<nb_scales; ++s, w/=2) > res.draw_image(res.get_crop(0,0,0,w-1,0,0).haar(false,1)); > } > } else { > if (_height>1) { > if (_depth>1) for (unsigned int s = 1, h = _height/2, d = _depth/2; h && d && s<nb_scales; ++s, h/=2, d/=2) > res.draw_image(res.get_crop(0,0,0,0,h-1,d-1).haar(false,1)); > else for (unsigned int s = 1, h = _height/2; h && s<nb_scales; ++s, h/=2) > res.draw_image(res.get_crop(0,0,0,0,h-1,0).haar(false,1)); > } else { > if (_depth>1) for (unsigned int s = 1, d = _depth/2; d && s<nb_scales; ++s, d/=2) > res.draw_image(res.get_crop(0,0,0,0,0,d-1).haar(false,1)); > else return *this; > } > } > } > return res; > } > return *this; > } > > > > > > > CImgList<Tfloat> get_FFT(const char axis, const bool is_invert=false) const { > CImgList<Tfloat> res(*this,CImg<Tfloat>()); > CImg<Tfloat>::FFT(res[0],res[1],axis,is_invert); > return res; > } > > > > > > CImgList<Tfloat> get_FFT(const bool is_invert=false) const { > CImgList<Tfloat> res(*this,CImg<Tfloat>()); > CImg<Tfloat>::FFT(res[0],res[1],is_invert); > return res; > } ># 27382 "./CImg.h" > static void FFT(CImg<T>& real, CImg<T>& imag, const char axis, const bool is_invert=false) { > if (!real) > throw CImgInstanceException("CImg<%s>::FFT(): Specified real part is empty.", > pixel_type()); > > if (!imag) imag.assign(real._width,real._height,real._depth,real._spectrum,0); > if (!real.is_sameXYZC(imag)) > throw CImgInstanceException("CImg<%s>::FFT(): Specified real part (%u,%u,%u,%u,%p) and imaginary part (%u,%u,%u,%u,%p) have different dimensions.", > pixel_type(), > real._width,real._height,real._depth,real._spectrum,real._data, > imag._width,imag._height,imag._depth,imag._spectrum,imag._data); > > cimg::mutex(12); > fftw_complex *data_in; > fftw_plan data_plan; > > switch (cimg::uncase(axis)) { > case 'x' : { > data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*real._width); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the X-axis.", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._width), > real._width,real._height,real._depth,real._spectrum); > > data_plan = fftw_plan_dft_1d(real._width,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > for (int c = 0; c<(int)((real)._spectrum); ++c) for (int z = 0; z<(int)((real)._depth); ++z) for (int y = 0; y<(int)((real)._height); ++y) { > T *ptrr = real.data(0,y,z,c), *ptri = imag.data(0,y,z,c); > double *ptrd = (double*)data_in; > for (int x = 0; x<(int)((real)._width); ++x) { *(ptrd++) = (double)*(ptrr++); *(ptrd++) = (double)*(ptri++); } > fftw_execute(data_plan); > const unsigned int fact = real._width; > if (is_invert) for (int x = 0; x<(int)((real)._width); ++x) { *(--ptri) = (T)(*(--ptrd)/fact); *(--ptrr) = (T)(*(--ptrd)/fact); } > else for (int x = 0; x<(int)((real)._width); ++x) { *(--ptri) = (T)*(--ptrd); *(--ptrr) = (T)*(--ptrd); } > } > } break; > case 'y' : { > data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._height); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the Y-axis.", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._height), > real._width,real._height,real._depth,real._spectrum); > > data_plan = fftw_plan_dft_1d(real._height,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > const unsigned int off = real._width; > for (int c = 0; c<(int)((real)._spectrum); ++c) for (int z = 0; z<(int)((real)._depth); ++z) for (int x = 0; x<(int)((real)._width); ++x) { > T *ptrr = real.data(x,0,z,c), *ptri = imag.data(x,0,z,c); > double *ptrd = (double*)data_in; > for (int y = 0; y<(int)((real)._height); ++y) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } > fftw_execute(data_plan); > const unsigned int fact = real._height; > if (is_invert) for (int y = 0; y<(int)((real)._height); ++y) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } > else for (int y = 0; y<(int)((real)._height); ++y) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } > } > } break; > case 'z' : { > data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._depth); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the Z-axis.", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._depth), > real._width,real._height,real._depth,real._spectrum); > > data_plan = fftw_plan_dft_1d(real._depth,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > const unsigned long off = (unsigned long)real._width*real._height; > for (int c = 0; c<(int)((real)._spectrum); ++c) for (int y = 0; y<(int)((real)._height); ++y) for (int x = 0; x<(int)((real)._width); ++x) { > T *ptrr = real.data(x,y,0,c), *ptri = imag.data(x,y,0,c); > double *ptrd = (double*)data_in; > for (int z = 0; z<(int)((real)._depth); ++z) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } > fftw_execute(data_plan); > const unsigned int fact = real._depth; > if (is_invert) for (int z = 0; z<(int)((real)._depth); ++z) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } > else for (int z = 0; z<(int)((real)._depth); ++z) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } > } > } break; > default : { > data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._spectrum); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the C-axis.", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._spectrum), > real._width,real._height,real._depth,real._spectrum); > > data_plan = fftw_plan_dft_1d(real._spectrum,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > const unsigned long off = (unsigned long)real._width*real._height*real._depth; > for (int z = 0; z<(int)((real)._depth); ++z) for (int y = 0; y<(int)((real)._height); ++y) for (int x = 0; x<(int)((real)._width); ++x) { > T *ptrr = real.data(x,y,z,0), *ptri = imag.data(x,y,z,0); > double *ptrd = (double*)data_in; > for (int c = 0; c<(int)((real)._spectrum); ++c) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } > fftw_execute(data_plan); > const unsigned int fact = real._spectrum; > if (is_invert) for (int c = 0; c<(int)((real)._spectrum); ++c) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } > else for (int c = 0; c<(int)((real)._spectrum); ++c) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } > } > } > } > fftw_destroy_plan(data_plan); > fftw_free(data_in); > cimg::mutex(12,0); ># 27611 "./CImg.h" > } ># 27620 "./CImg.h" > static void FFT(CImg<T>& real, CImg<T>& imag, const bool is_invert=false, const unsigned int nb_threads=0) { > if (!real) > throw CImgInstanceException("CImgList<%s>::FFT(): Empty specified real part.", > pixel_type()); > > if (!imag) imag.assign(real._width,real._height,real._depth,real._spectrum,0); > if (!real.is_sameXYZC(imag)) > throw CImgInstanceException("CImgList<%s>::FFT(): Specified real part (%u,%u,%u,%u,%p) and imaginary part (%u,%u,%u,%u,%p) have different dimensions.", > pixel_type(), > real._width,real._height,real._depth,real._spectrum,real._data, > imag._width,imag._height,imag._depth,imag._spectrum,imag._data); > > > cimg::mutex(12); > > const unsigned int _nb_threads = nb_threads?nb_threads:cimg::nb_cpus(); > static int fftw_st = fftw_init_threads(); > cimg::unused(fftw_st); > fftw_plan_with_nthreads(_nb_threads); > > > > fftw_complex *data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*real._width*real._height*real._depth); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u).", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._width*real._height*real._depth*real._spectrum), > real._width,real._height,real._depth,real._spectrum); > > fftw_plan data_plan; > const unsigned long w = (unsigned long)real._width, wh = w*real._height, whd = wh*real._depth; > data_plan = fftw_plan_dft_3d(real._width,real._height,real._depth,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > for (int c = 0; c<(int)((real)._spectrum); ++c) { > T *ptrr = real.data(0,0,0,c), *ptri = imag.data(0,0,0,c); > double *ptrd = (double*)data_in; > for (unsigned int x = 0; x<real._width; ++x, ptrr-=wh-1, ptri-=wh-1) > for (unsigned int y = 0; y<real._height; ++y, ptrr-=whd-w, ptri-=whd-w) > for (unsigned int z = 0; z<real._depth; ++z, ptrr+=wh, ptri+=wh) { > *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; > } > fftw_execute(data_plan); > ptrd = (double*)data_in; > ptrr = real.data(0,0,0,c); > ptri = imag.data(0,0,0,c); > if (!is_invert) for (unsigned int x = 0; x<real._width; ++x, ptrr-=wh-1, ptri-=wh-1) > for (unsigned int y = 0; y<real._height; ++y, ptrr-=whd-w, ptri-=whd-w) > for (unsigned int z = 0; z<real._depth; ++z, ptrr+=wh, ptri+=wh) { > *ptrr = (T)*(ptrd++); *ptri = (T)*(ptrd++); > } > else for (unsigned int x = 0; x<real._width; ++x, ptrr-=wh-1, ptri-=wh-1) > for (unsigned int y = 0; y<real._height; ++y, ptrr-=whd-w, ptri-=whd-w) > for (unsigned int z = 0; z<real._depth; ++z, ptrr+=wh, ptri+=wh) { > *ptrr = (T)(*(ptrd++)/whd); *ptri = (T)(*(ptrd++)/whd); > } > } > fftw_destroy_plan(data_plan); > fftw_free(data_in); > > fftw_cleanup_threads(); > > cimg::mutex(12,0); > > > > > > > } ># 27701 "./CImg.h" > CImg<T>& shift_object3d(const float tx, const float ty=0, const float tz=0) { > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "shift_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > get_shared_row(0)+=tx; get_shared_row(1)+=ty; get_shared_row(2)+=tz; > return *this; > } > > > CImg<Tfloat> get_shift_object3d(const float tx, const float ty=0, const float tz=0) const { > return CImg<Tfloat>(*this,false).shift_object3d(tx,ty,tz); > } > > > > > > CImg<T>& shift_object3d() { > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "shift_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<T> xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); > float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); > xcoords-=(xm + xM)/2; ycoords-=(ym + yM)/2; zcoords-=(zm + zM)/2; > return *this; > } > > > CImg<Tfloat> get_shift_object3d() const { > return CImg<Tfloat>(*this,false).shift_object3d(); > } > > > > > > > > CImg<T>& resize_object3d(const float sx, const float sy=-100, const float sz=-100) { > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "resize_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<T> xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); > float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); > if (xm<xM) { if (sx>0) xcoords*=sx/(xM-xm); else xcoords*=-sx/100; } > if (ym<yM) { if (sy>0) ycoords*=sy/(yM-ym); else ycoords*=-sy/100; } > if (zm<zM) { if (sz>0) zcoords*=sz/(zM-zm); else zcoords*=-sz/100; } > return *this; > } > > > CImg<Tfloat> get_resize_object3d(const float sx, const float sy=-100, const float sz=-100) const { > return CImg<Tfloat>(*this,false).resize_object3d(sx,sy,sz); > } > > > CImg<T> resize_object3d() { > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "resize_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<T> xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); > float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); > const float dx = xM - xm, dy = yM - ym, dz = zM - zm, dmax = cimg::max(dx,dy,dz); > if (dmax>0) { xcoords/=dmax; ycoords/=dmax; zcoords/=dmax; } > return *this; > } > > > CImg<Tfloat> get_resize_object3d() const { > return CImg<Tfloat>(*this,false).resize_object3d(); > } > > > > > > > > template<typename tf, typename tp, typename tff> > CImg<T>& append_object3d(CImgList<tf>& primitives, const CImg<tp>& obj_vertices, const CImgList<tff>& obj_primitives) { > if (!obj_vertices || !obj_primitives) return *this; > if (obj_vertices._height!=3 || obj_vertices._depth>1 || obj_vertices._spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "append_object3d(): Specified vertice image (%u,%u,%u,%u,%p) is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > obj_vertices._width,obj_vertices._height,obj_vertices._depth,obj_vertices._spectrum,obj_vertices._data); > > if (is_empty()) { primitives.assign(obj_primitives); return assign(obj_vertices); } > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "append_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int P = _width; > append(obj_vertices,'x'); > const unsigned int N = primitives._width; > primitives.insert(obj_primitives); > for (unsigned int i = N; i<primitives._width; ++i) { > CImg<tf> &p = primitives[i]; > switch (p.size()) { > case 1 : p[0]+=P; break; > case 5 : p[0]+=P; p[1]+=P; break; > case 2 : case 6 : p[0]+=P; p[1]+=P; break; > case 3 : case 9 : p[0]+=P; p[1]+=P; p[2]+=P; break; > case 4 : case 12 : p[0]+=P; p[1]+=P; p[2]+=P; p[3]+=P; break; > } > } > return *this; > } ># 27826 "./CImg.h" > template<typename tp, typename tc, typename tt, typename tx> > const CImg<T>& texturize_object3d(CImgList<tp>& primitives, CImgList<tc>& colors, > const CImg<tt>& texture, const CImg<tx>& coords=CImg<tx>::empty()) const { > if (is_empty()) return *this; > if (_height!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "texturize_object3d(): image instance is not a set of 3d points.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (coords && (coords._width!=_width || coords._height!=2)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "texturize_object3d(): Invalid specified texture coordinates (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > coords._width,coords._height,coords._depth,coords._spectrum,coords._data); > CImg<unsigned int> _coords; > if (!coords) { > _coords.assign(_width,2); > float > xmin, xmax = (float)get_shared_row(0).max_min(xmin), > ymin, ymax = (float)get_shared_row(1).max_min(ymin), > dx = xmax>xmin?xmax-xmin:1, > dy = ymax>ymin?ymax-ymin:1; > for (int p = 0; p<(int)((*this)._width); ++p) { > _coords(p,0) = (unsigned int)(((*this)(p,0)-xmin)*(texture._width-1)/dx); > _coords(p,1) = (unsigned int)(((*this)(p,1)-ymin)*(texture._height-1)/dy); > } > } else _coords = coords; > > int texture_ind = -1; > for (int l = 0; l<(int)(primitives)._width; ++l) { > CImg<tp> &p = primitives[l]; > const unsigned int siz = p.size(); > switch (siz) { > case 1 : { > const unsigned int > i0 = (unsigned int)p[0], > x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1); > texture.get_vector_at(x0,y0).move_to(colors[l]); > } break; > case 2 : case 6 : { > const unsigned int > i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], > x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), > x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1); > if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); > CImg<tp>::vector(i0,i1,x0,y0,x1,y1).move_to(p); > } break; > case 3 : case 9 : { > const unsigned int > i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], i2 = (unsigned int)p[2], > x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), > x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1), > x2 = (unsigned int)_coords(i2,0), y2 = (unsigned int)_coords(i2,1); > if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); > CImg<tp>::vector(i0,i1,i2,x0,y0,x1,y1,x2,y2).move_to(p); > } break; > case 4 : case 12 : { > const unsigned int > i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], i2 = (unsigned int)p[2], i3 = (unsigned int)p[3], > x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), > x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1), > x2 = (unsigned int)_coords(i2,0), y2 = (unsigned int)_coords(i2,1), > x3 = (unsigned int)_coords(i3,0), y3 = (unsigned int)_coords(i3,1); > if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); > CImg<tp>::vector(i0,i1,i2,i3,x0,y0,x1,y1,x2,y2,x3,y3).move_to(p); > } break; > } > } > return *this; > } ># 27913 "./CImg.h" > template<typename tf, typename tc, typename te> > CImg<floatT> get_elevation3d(CImgList<tf>& primitives, CImgList<tc>& colors, const CImg<te>& elevation) const { > if (!is_sameXY(elevation) || elevation._depth>1 || elevation._spectrum>1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_elevation3d(): Instance and specified elevation (%u,%u,%u,%u,%p) " > "have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > elevation._width,elevation._height,elevation._depth,elevation._spectrum,elevation._data); > if (is_empty()) return *this; > float m, M = (float)max_min(m); > if (M==m) ++M; > colors.assign(); > const unsigned int size_x1 = _width - 1, size_y1 = _height - 1; > for (unsigned int y = 0; y<size_y1; ++y) > for (unsigned int x = 0; x<size_x1; ++x) { > const unsigned char > r = (unsigned char)(((*this)(x,y,0) - m)*255/(M-m)), > g = _spectrum>1?(unsigned char)(((*this)(x,y,1) - m)*255/(M-m)):r, > b = _spectrum>2?(unsigned char)(((*this)(x,y,2) - m)*255/(M-m)):(_spectrum>1?0:r); > CImg<tc>::vector((tc)r,(tc)g,(tc)b).move_to(colors); > } > const typename CImg<te>::_functor2d_int func(elevation); > return elevation3d(primitives,func,0,0,_width-1.0f,_height-1.0f,_width,_height); > } ># 27947 "./CImg.h" > template<typename tf, typename tc> > CImg<floatT> get_projections3d(CImgList<tf>& primitives, CImgList<tc>& colors, > const unsigned int x0, const unsigned int y0, const unsigned int z0, > const bool normalize_colors=false) const { > float m = 0, M = 0, delta = 1; > if (normalize_colors) { m = (float)min_max(M); delta = 255/(m==M?1:M-m); } > const unsigned int > _x0 = (x0>=_width)?_width - 1:x0, > _y0 = (y0>=_height)?_height - 1:y0, > _z0 = (z0>=_depth)?_depth - 1:z0; > CImg<tc> img_xy, img_xz, img_yz; > if (normalize_colors) { > ((get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1)-=m)*=delta).move_to(img_xy); > ((get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1)-=m)*=delta).resize(_width,_depth,1,-100,-1).move_to(img_xz); > ((get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1)-=m)*=delta).resize(_height,_depth,1,-100,-1).move_to(img_yz); > } else { > get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1).move_to(img_xy); > get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1).resize(_width,_depth,1,-100,-1).move_to(img_xz); > get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1).resize(_height,_depth,1,-100,-1).move_to(img_yz); > } > CImg<floatT> points(12,3,1,1, > 0,_width-1,_width-1,0, 0,_width-1,_width-1,0, _x0,_x0,_x0,_x0, > 0,0,_height-1,_height-1, _y0,_y0,_y0,_y0, 0,_height-1,_height-1,0, > _z0,_z0,_z0,_z0, 0,0,_depth-1,_depth-1, 0,0,_depth-1,_depth-1); > primitives.assign(); > CImg<tf>::vector(0,1,2,3,0,0,img_xy._width-1,0,img_xy._width-1,img_xy._height-1,0,img_xy._height-1).move_to(primitives); > CImg<tf>::vector(4,5,6,7,0,0,img_xz._width-1,0,img_xz._width-1,img_xz._height-1,0,img_xz._height-1).move_to(primitives); > CImg<tf>::vector(8,9,10,11,0,0,img_yz._width-1,0,img_yz._width-1,img_yz._height-1,0,img_yz._height-1).move_to(primitives); > colors.assign(); > img_xy.move_to(colors); > img_xz.move_to(colors); > img_yz.move_to(colors); > return points; > } ># 27999 "./CImg.h" > template<typename tf> > CImg<floatT> get_isoline3d(CImgList<tf>& primitives, const float isovalue, > const int size_x=-100, const int size_y=-100) const { > if (_spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_isoline3d(): Instance is not a scalar image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (_depth>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_isoline3d(): Instance is not a 2d image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > primitives.assign(); > if (is_empty()) return *this; > CImg<floatT> vertices; > if ((size_x==-100 && size_y==-100) || (size_x==width() && size_y==height())) { > const _functor2d_int func(*this); > vertices = isoline3d(primitives,func,isovalue,0,0,width()-1.0f,height()-1.0f,width(),height()); > } else { > const _functor2d_float func(*this); > vertices = isoline3d(primitives,func,isovalue,0,0,width()-1.0f,height()-1.0f,size_x,size_y); > } > return vertices; > } ># 28041 "./CImg.h" > template<typename tf> > CImg<floatT> get_isosurface3d(CImgList<tf>& primitives, const float isovalue, > const int size_x=-100, const int size_y=-100, const int size_z=-100) const { > if (_spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_isosurface3d(): Instance is not a scalar image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > primitives.assign(); > if (is_empty()) return *this; > CImg<floatT> vertices; > if ((size_x==-100 && size_y==-100 && size_z==-100) || (size_x==width() && size_y==height() && size_z==depth())) { > const _functor3d_int func(*this); > vertices = isosurface3d(primitives,func,isovalue,0,0,0,width()-1.0f,height()-1.0f,depth()-1.0f,width(),height(),depth()); > } else { > const _functor3d_float func(*this); > vertices = isosurface3d(primitives,func,isovalue,0,0,0,width()-1.0f,height()-1.0f,depth()-1.0f,size_x,size_y,size_z); > } > return vertices; > } ># 28072 "./CImg.h" > template<typename tf, typename tfunc> > static CImg<floatT> elevation3d(CImgList<tf>& primitives, const tfunc& func, > const float x0, const float y0, const float x1, const float y1, > const int size_x=256, const int size_y=256) { > const float > nx0 = x0<x1?x0:x1, ny0 = y0<y1?y0:y1, > nx1 = x0<x1?x1:x0, ny1 = y0<y1?y1:y0; > const unsigned int > _nsize_x = (unsigned int)(size_x>=0?size_x:(nx1-nx0)*-size_x/100), nsize_x = _nsize_x?_nsize_x:1, nsize_x1 = nsize_x - 1, > _nsize_y = (unsigned int)(size_y>=0?size_y:(ny1-ny0)*-size_y/100), nsize_y = _nsize_y?_nsize_y:1, nsize_y1 = nsize_y - 1; > if (nsize_x<2 || nsize_y<2) > throw CImgArgumentException("CImg<%s>::elevation3d(): Invalid specified size (%d,%d).", > pixel_type(), > nsize_x,nsize_y); > > CImg<floatT> vertices(nsize_x*nsize_y,3); > floatT *ptr_x = vertices.data(0,0), *ptr_y = vertices.data(0,1), *ptr_z = vertices.data(0,2); > for (unsigned int y = 0; y<nsize_y; ++y) { > const float Y = ny0 + y*(ny1-ny0)/nsize_y1; > for (unsigned int x = 0; x<nsize_x; ++x) { > const float X = nx0 + x*(nx1-nx0)/nsize_x1; > *(ptr_x++) = (float)x; > *(ptr_y++) = (float)y; > *(ptr_z++) = (float)func(X,Y); > } > } > primitives.assign(nsize_x1*nsize_y1,1,4); > for (unsigned int p = 0, y = 0; y<nsize_y1; ++y) { > const unsigned int yw = y*nsize_x; > for (unsigned int x = 0; x<nsize_x1; ++x) { > const unsigned int xpyw = x + yw, xpyww = xpyw + nsize_x; > primitives[p++].fill(xpyw,xpyww,xpyww+1,xpyw+1); > } > } > return vertices; > } > > > template<typename tf> > static CImg<floatT> elevation3d(CImgList<tf>& primitives, const char *const expression, > const float x0, const float y0, const float x1, const float y1, > const int size_x=256, const int size_y=256) { > const _functor2d_expr func(expression); > return elevation3d(primitives,func,x0,y0,x1,y1,size_x,size_y); > } ># 28131 "./CImg.h" > template<typename tf, typename tfunc> > static CImg<floatT> isoline3d(CImgList<tf>& primitives, const tfunc& func, const float isovalue, > const float x0, const float y0, const float x1, const float y1, > const int size_x=256, const int size_y=256) { > static const unsigned int edges[16] = { 0x0, 0x9, 0x3, 0xa, 0x6, 0xf, 0x5, 0xc, 0xc, 0x5, 0xf, 0x6, 0xa, 0x3, 0x9, 0x0 }; > static const int segments[16][4] = { { -1,-1,-1,-1 }, { 0,3,-1,-1 }, { 0,1,-1,-1 }, { 1,3,-1,-1 }, > { 1,2,-1,-1 }, { 0,1,2,3 }, { 0,2,-1,-1 }, { 2,3,-1,-1 }, > { 2,3,-1,-1 }, { 0,2,-1,-1}, { 0,3,1,2 }, { 1,2,-1,-1 }, > { 1,3,-1,-1 }, { 0,1,-1,-1}, { 0,3,-1,-1}, { -1,-1,-1,-1 } }; > const unsigned int > _nx = (unsigned int)(size_x>=0?size_x:cimg::round((x1-x0)*-size_x/100 + 1)), > _ny = (unsigned int)(size_y>=0?size_y:cimg::round((y1-y0)*-size_y/100 + 1)), > nx = _nx?_nx:1, > ny = _ny?_ny:1, > nxm1 = nx - 1, > nym1 = ny - 1; > primitives.assign(); > if (!nxm1 || !nym1) return CImg<floatT>(); > const float dx = (x1 - x0)/nxm1, dy = (y1 - y0)/nym1; > CImgList<floatT> vertices; > CImg<intT> indices1(nx,1,1,2,-1), indices2(nx,1,1,2); > CImg<floatT> values1(nx), values2(nx); > float X = x0, Y = y0, nX = X + dx, nY = Y + dy; > > > for (int x = 0; x<(int)((values1)._width); ++x) { values1(x) = (float)func(X,Y); X+=dx; } > > > for (unsigned int yi = 0, nyi = 1; yi<nym1; ++yi, ++nyi, Y=nY, nY+=dy) { > X = x0; nX = X + dx; > indices2.fill(-1); > for (unsigned int xi = 0, nxi = 1; xi<nxm1; ++xi, ++nxi, X=nX, nX+=dx) { > > > const float > val0 = values1(xi), > val1 = values1(nxi), > val2 = values2(nxi) = (float)func(nX,nY), > val3 = values2(xi) = (float)func(X,nY); > const unsigned int > configuration = (val0<isovalue?1:0) | (val1<isovalue?2:0) | (val2<isovalue?4:0) | (val3<isovalue?8:0), > edge = edges[configuration]; > > > if (edge) { > if ((edge&1) && indices1(xi,0)<0) { > const float Xi = X + (isovalue-val0)*dx/(val1-val0); > indices1(xi,0) = vertices._width; > CImg<floatT>::vector(Xi,Y,0).move_to(vertices); > } > if ((edge&2) && indices1(nxi,1)<0) { > const float Yi = Y + (isovalue-val1)*dy/(val2-val1); > indices1(nxi,1) = vertices._width; > CImg<floatT>::vector(nX,Yi,0).move_to(vertices); > } > if ((edge&4) && indices2(xi,0)<0) { > const float Xi = X + (isovalue-val3)*dx/(val2-val3); > indices2(xi,0) = vertices._width; > CImg<floatT>::vector(Xi,nY,0).move_to(vertices); > } > if ((edge&8) && indices1(xi,1)<0) { > const float Yi = Y + (isovalue-val0)*dy/(val3-val0); > indices1(xi,1) = vertices._width; > CImg<floatT>::vector(X,Yi,0).move_to(vertices); > } > > > for (const int *segment = segments[configuration]; *segment!=-1; ) { > const unsigned int p0 = *(segment++), p1 = *(segment++); > const tf > i0 = (tf)(_isoline3d_indice(p0,indices1,indices2,xi,nxi)), > i1 = (tf)(_isoline3d_indice(p1,indices1,indices2,xi,nxi)); > CImg<tf>::vector(i0,i1).move_to(primitives); > } > } > } > values1.swap(values2); > indices1.swap(indices2); > } > return vertices>'x'; > } > > > template<typename tf> > static CImg<floatT> isoline3d(CImgList<tf>& primitives, const char *const expression, const float isovalue, > const float x0, const float y0, const float x1, const float y1, > const int size_x=256, const int size_y=256) { > const _functor2d_expr func(expression); > return isoline3d(primitives,func,isovalue,x0,y0,x1,y1,size_x,size_y); > } > > template<typename t> > static int _isoline3d_indice(const unsigned int edge, const CImg<t>& indices1, const CImg<t>& indices2, > const unsigned int x, const unsigned int nx) { > switch (edge) { > case 0 : return (int)indices1(x,0); > case 1 : return (int)indices1(nx,1); > case 2 : return (int)indices2(x,0); > case 3 : return (int)indices1(x,1); > } > return 0; > } ># 28250 "./CImg.h" > template<typename tf, typename tfunc> > static CImg<floatT> isosurface3d(CImgList<tf>& primitives, const tfunc& func, const float isovalue, > const float x0, const float y0, const float z0, > const float x1, const float y1, const float z1, > const int size_x=32, const int size_y=32, const int size_z=32) { > static const unsigned int edges[256] = { > 0x000, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, > 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, > 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, > 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, > 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, > 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, > 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c, 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, > 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc , 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, > 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, > 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, > 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, > 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460, > 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0, > 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230, > 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190, > 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x000 }; > > static const int triangles[256][16] = { > { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, > { 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, > { 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, { 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, > { 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, { 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1 }, > { 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1 }, { 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1 }, > { 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, { 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, { 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1 }, > { 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, { 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1 }, > { 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1 }, { 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1 }, > { 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, { 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, { 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1 }, { 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1 }, > { 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1 }, { 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, > { 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, > { 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1 }, { 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1 }, { 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1 }, > { 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1 }, { 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, { 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1 }, > { 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, { 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1 }, > { 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, > { 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1 }, { 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, { 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, > { 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1 }, > { 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1 }, { 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1 }, > { 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, { 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, > { 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1 }, { 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1 }, > { 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, { 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1 }, > { 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1 }, { 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1 }, > { 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1 }, > { 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, { 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, > { 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1 }, > { 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1 }, > { 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, { 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1 }, > { 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1 }, { 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1 }, > { 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, { 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, { 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1 }, > { 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1 }, { 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, { 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1 }, > { 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, { 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, { 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1 }, > { 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1 }, { 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1 }, > { 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1 }, { 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1 }, { 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, { 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1 }, > { 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1 }, { 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1 }, > { 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, { 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1 }, > { 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1 }, { 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, > { 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1 }, > { 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1 }, > { 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1 }, { 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1 }, > { 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, { 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1 }, { 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1 }, { 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1 }, { 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, { 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1 }, > { 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, { 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1 }, > { 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1 }, { 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1 }, > { 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1 }, > { 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1 }, { 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1 }, > { 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1 }, { 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1 }, > { 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1 }, { 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1 }, > { 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, { 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1 }, > { 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1 }, { 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1 }, { 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1 }, > { 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1 }, { 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1 }, > { 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1 }, { 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1 }, { 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1 }, { 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1 }, > { 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1 }, { 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1 }, > { 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1 }, > { 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1 }, { 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1 }, > { 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, { 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1 }, > { 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1 }, { 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1 }, > { 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, { 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, { 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1 }, > { 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1 }, { 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1 }, > { 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1 }, { 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1 }, > { 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1 }, { 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1 }, { 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, > { 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1 }, { 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1 }, > { 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1 }, { 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1 }, > { 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1 }, { 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1 }, > { 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1 }, { 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1 }, > { 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, { 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1 }, > { 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1 }, { 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1 }, > { 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1 }, { 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, { 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1 }, > { 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, { 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1 }, > { 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1 }, { 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } > }; > > const unsigned int > _nx = (unsigned int)(size_x>=0?size_x:cimg::round((x1-x0)*-size_x/100 + 1)), > _ny = (unsigned int)(size_y>=0?size_y:cimg::round((y1-y0)*-size_y/100 + 1)), > _nz = (unsigned int)(size_z>=0?size_z:cimg::round((z1-z0)*-size_z/100 + 1)), > nx = _nx?_nx:1, > ny = _ny?_ny:1, > nz = _nz?_nz:1, > nxm1 = nx - 1, > nym1 = ny - 1, > nzm1 = nz - 1; > primitives.assign(); > if (!nxm1 || !nym1 || !nzm1) return CImg<floatT>(); > const float dx = (x1 - x0)/nxm1, dy = (y1 - y0)/nym1, dz = (z1 - z0)/nzm1; > CImgList<floatT> vertices; > CImg<intT> indices1(nx,ny,1,3,-1), indices2(indices1); > CImg<floatT> values1(nx,ny), values2(nx,ny); > float X = 0, Y = 0, Z = 0, nX = 0, nY = 0, nZ = 0; > > > Y = y0; > for (int y = 0; y<(int)((values1)._height); ++y) { > X = x0; > for (int x = 0; x<(int)((values1)._width); ++x) { values1(x,y) = (float)func(X,Y,z0); X+=dx; } > Y+=dy; > } > > > Z = z0; nZ = Z + dz; > for (unsigned int zi = 0; zi<nzm1; ++zi, Z = nZ, nZ+=dz) { > Y = y0; nY = Y + dy; > indices2.fill(-1); > for (unsigned int yi = 0, nyi = 1; yi<nym1; ++yi, ++nyi, Y = nY, nY+=dy) { > X = x0; nX = X + dx; > for (unsigned int xi = 0, nxi = 1; xi<nxm1; ++xi, ++nxi, X = nX, nX+=dx) { > > > const float > val0 = values1(xi,yi), > val1 = values1(nxi,yi), > val2 = values1(nxi,nyi), > val3 = values1(xi,nyi), > val4 = values2(xi,yi) = (float)func(X,Y,nZ), > val5 = values2(nxi,yi) = (float)func(nX,Y,nZ), > val6 = values2(nxi,nyi) = (float)func(nX,nY,nZ), > val7 = values2(xi,nyi) = (float)func(X,nY,nZ); > > const unsigned int configuration = > (val0<isovalue?1:0) | (val1<isovalue?2:0) | (val2<isovalue?4:0) | (val3<isovalue?8:0) | > (val4<isovalue?16:0) | (val5<isovalue?32:0) | (val6<isovalue?64:0) | (val7<isovalue?128:0), > edge = edges[configuration]; > > > if (edge) { > if ((edge&1) && indices1(xi,yi,0)<0) { > const float Xi = X + (isovalue-val0)*dx/(val1-val0); > indices1(xi,yi,0) = vertices._width; > CImg<floatT>::vector(Xi,Y,Z).move_to(vertices); > } > if ((edge&2) && indices1(nxi,yi,1)<0) { > const float Yi = Y + (isovalue-val1)*dy/(val2-val1); > indices1(nxi,yi,1) = vertices._width; > CImg<floatT>::vector(nX,Yi,Z).move_to(vertices); > } > if ((edge&4) && indices1(xi,nyi,0)<0) { > const float Xi = X + (isovalue-val3)*dx/(val2-val3); > indices1(xi,nyi,0) = vertices._width; > CImg<floatT>::vector(Xi,nY,Z).move_to(vertices); > } > if ((edge&8) && indices1(xi,yi,1)<0) { > const float Yi = Y + (isovalue-val0)*dy/(val3-val0); > indices1(xi,yi,1) = vertices._width; > CImg<floatT>::vector(X,Yi,Z).move_to(vertices); > } > if ((edge&16) && indices2(xi,yi,0)<0) { > const float Xi = X + (isovalue-val4)*dx/(val5-val4); > indices2(xi,yi,0) = vertices._width; > CImg<floatT>::vector(Xi,Y,nZ).move_to(vertices); > } > if ((edge&32) && indices2(nxi,yi,1)<0) { > const float Yi = Y + (isovalue-val5)*dy/(val6-val5); > indices2(nxi,yi,1) = vertices._width; > CImg<floatT>::vector(nX,Yi,nZ).move_to(vertices); > } > if ((edge&64) && indices2(xi,nyi,0)<0) { > const float Xi = X + (isovalue-val7)*dx/(val6-val7); > indices2(xi,nyi,0) = vertices._width; > CImg<floatT>::vector(Xi,nY,nZ).move_to(vertices); > } > if ((edge&128) && indices2(xi,yi,1)<0) { > const float Yi = Y + (isovalue-val4)*dy/(val7-val4); > indices2(xi,yi,1) = vertices._width; > CImg<floatT>::vector(X,Yi,nZ).move_to(vertices); > } > if ((edge&256) && indices1(xi,yi,2)<0) { > const float Zi = Z+ (isovalue-val0)*dz/(val4-val0); > indices1(xi,yi,2) = vertices._width; > CImg<floatT>::vector(X,Y,Zi).move_to(vertices); > } > if ((edge&512) && indices1(nxi,yi,2)<0) { > const float Zi = Z + (isovalue-val1)*dz/(val5-val1); > indices1(nxi,yi,2) = vertices._width; > CImg<floatT>::vector(nX,Y,Zi).move_to(vertices); > } > if ((edge&1024) && indices1(nxi,nyi,2)<0) { > const float Zi = Z + (isovalue-val2)*dz/(val6-val2); > indices1(nxi,nyi,2) = vertices._width; > CImg<floatT>::vector(nX,nY,Zi).move_to(vertices); > } > if ((edge&2048) && indices1(xi,nyi,2)<0) { > const float Zi = Z + (isovalue-val3)*dz/(val7-val3); > indices1(xi,nyi,2) = vertices._width; > CImg<floatT>::vector(X,nY,Zi).move_to(vertices); > } > > > for (const int *triangle = triangles[configuration]; *triangle!=-1; ) { > const unsigned int p0 = *(triangle++), p1 = *(triangle++), p2 = *(triangle++); > const tf > i0 = (tf)(_isosurface3d_indice(p0,indices1,indices2,xi,yi,nxi,nyi)), > i1 = (tf)(_isosurface3d_indice(p1,indices1,indices2,xi,yi,nxi,nyi)), > i2 = (tf)(_isosurface3d_indice(p2,indices1,indices2,xi,yi,nxi,nyi)); > CImg<tf>::vector(i0,i2,i1).move_to(primitives); > } > } > } > } > cimg::swap(values1,values2); > cimg::swap(indices1,indices2); > } > return vertices>'x'; > } > > > template<typename tf> > static CImg<floatT> isosurface3d(CImgList<tf>& primitives, const char *const expression, const float isovalue, > const float x0, const float y0, const float z0, > const float x1, const float y1, const float z1, > const int dx=32, const int dy=32, const int dz=32) { > const _functor3d_expr func(expression); > return isosurface3d(primitives,func,isovalue,x0,y0,z0,x1,y1,z1,dx,dy,dz); > } > > template<typename t> > static int _isosurface3d_indice(const unsigned int edge, const CImg<t>& indices1, const CImg<t>& indices2, > const unsigned int x, const unsigned int y, const unsigned int nx, const unsigned int ny) { > switch (edge) { > case 0 : return indices1(x,y,0); > case 1 : return indices1(nx,y,1); > case 2 : return indices1(x,ny,0); > case 3 : return indices1(x,y,1); > case 4 : return indices2(x,y,0); > case 5 : return indices2(nx,y,1); > case 6 : return indices2(x,ny,0); > case 7 : return indices2(x,y,1); > case 8 : return indices1(x,y,2); > case 9 : return indices1(nx,y,2); > case 10 : return indices1(nx,ny,2); > case 11 : return indices1(x,ny,2); > } > return 0; > } > > > struct _functor2d_int { > const CImg<T>& ref; > _functor2d_int(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y) const { > return (float)ref((int)x,(int)y); > } > }; > > struct _functor2d_float { > const CImg<T>& ref; > _functor2d_float(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y) const { > return (float)ref._linear_atXY(x,y); > } > }; > > struct _functor2d_expr { > _cimg_math_parser *mp; > _functor2d_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg<T>::empty(),expr,0); } > ~_functor2d_expr() { delete mp; } > float operator()(const float x, const float y) const { > return (float)(*mp)(x,y,0,0); > } > }; > > struct _functor3d_int { > const CImg<T>& ref; > _functor3d_int(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z) const { > return (float)ref((int)x,(int)y,(int)z); > } > }; > > struct _functor3d_float { > const CImg<T>& ref; > _functor3d_float(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z) const { > return (float)ref._linear_atXYZ(x,y,z); > } > }; > > struct _functor3d_expr { > _cimg_math_parser *mp; > ~_functor3d_expr() { delete mp; } > _functor3d_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg<T>::empty(),expr,0); } > float operator()(const float x, const float y, const float z) const { > return (float)(*mp)(x,y,z,0); > } > }; > > struct _functor4d_int { > const CImg<T>& ref; > _functor4d_int(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z, const unsigned int c) const { > return (float)ref((int)x,(int)y,(int)z,c); > } > }; ># 28641 "./CImg.h" > template<typename tf> > static CImg<floatT> box3d(CImgList<tf>& primitives, > const float size_x=200, const float size_y=100, const float size_z=100) { > primitives.assign(6,1,4,1,1, 0,3,2,1, 4,5,6,7, 0,1,5,4, 3,7,6,2, 0,4,7,3, 1,2,6,5); > return CImg<floatT>(8,3,1,1, > 0.,size_x,size_x, 0., 0.,size_x,size_x, 0., > 0., 0.,size_y,size_y, 0., 0.,size_y,size_y, > 0., 0., 0., 0.,size_z,size_z,size_z,size_z); > } ># 28667 "./CImg.h" > template<typename tf> > static CImg<floatT> cone3d(CImgList<tf>& primitives, > const float radius=50, const float size_z=100, const unsigned int subdivisions=24) { > primitives.assign(); > if (!subdivisions) return CImg<floatT>(); > CImgList<floatT> vertices(2,1,3,1,1, > 0.,0.,size_z, > 0.,0.,0.); > for (float delta = 360.0f/subdivisions, angle = 0; angle<360; angle+=delta) { > const float a = (float)(angle*cimg::PI/180); > CImg<floatT>::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),0).move_to(vertices); > } > const unsigned int nbr = vertices._width - 2; > for (unsigned int p = 0; p<nbr; ++p) { > const unsigned int curr = 2 + p, next = 2 + ((p+1)%nbr); > CImg<tf>::vector(1,next,curr).move_to(primitives); > CImg<tf>::vector(0,curr,next).move_to(primitives); > } > return vertices>'x'; > } ># 28704 "./CImg.h" > template<typename tf> > static CImg<floatT> cylinder3d(CImgList<tf>& primitives, > const float radius=50, const float size_z=100, const unsigned int subdivisions=24) { > primitives.assign(); > if (!subdivisions) return CImg<floatT>(); > CImgList<floatT> vertices(2,1,3,1,1, > 0.,0.,0., > 0.,0.,size_z); > for (float delta = 360.0f/subdivisions, angle = 0; angle<360; angle+=delta) { > const float a = (float)(angle*cimg::PI/180); > CImg<floatT>::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),0.0f).move_to(vertices); > CImg<floatT>::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),size_z).move_to(vertices); > } > const unsigned int nbr = (vertices._width - 2)/2; > for (unsigned int p = 0; p<nbr; ++p) { > const unsigned int curr = 2+2*p, next = 2+(2*((p+1)%nbr)); > CImg<tf>::vector(0,next,curr).move_to(primitives); > CImg<tf>::vector(1,curr+1,next+1).move_to(primitives); > CImg<tf>::vector(curr,next,next+1,curr+1).move_to(primitives); > } > return vertices>'x'; > } ># 28744 "./CImg.h" > template<typename tf> > static CImg<floatT> torus3d(CImgList<tf>& primitives, > const float radius1=100, const float radius2=30, > const unsigned int subdivisions1=24, const unsigned int subdivisions2=12) { > primitives.assign(); > if (!subdivisions1 || !subdivisions2) return CImg<floatT>(); > CImgList<floatT> vertices; > for (unsigned int v = 0; v<subdivisions1; ++v) { > const float > beta = (float)(v*2*cimg::PI/subdivisions1), > xc = radius1*(float)std::cos(beta), > yc = radius1*(float)std::sin(beta); > for (unsigned int u = 0; u<subdivisions2; ++u) { > const float > alpha = (float)(u*2*cimg::PI/subdivisions2), > x = xc + radius2*(float)(std::cos(alpha)*std::cos(beta)), > y = yc + radius2*(float)(std::cos(alpha)*std::sin(beta)), > z = radius2*(float)std::sin(alpha); > CImg<floatT>::vector(x,y,z).move_to(vertices); > } > } > for (unsigned int vv = 0; vv<subdivisions1; ++vv) { > const unsigned int nv = (vv+1)%subdivisions1; > for (unsigned int uu = 0; uu<subdivisions2; ++uu) { > const unsigned int nu = (uu+1)%subdivisions2, svv = subdivisions2*vv, snv = subdivisions2*nv; > CImg<tf>::vector(svv+nu,svv+uu,snv+uu,snv+nu).move_to(primitives); > } > } > return vertices>'x'; > } ># 28792 "./CImg.h" > template<typename tf> > static CImg<floatT> plane3d(CImgList<tf>& primitives, > const float size_x=100, const float size_y=100, > const unsigned int subdivisions_x=10, const unsigned int subdivisions_y=10) { > primitives.assign(); > if (!subdivisions_x || !subdivisions_y) return CImg<floatT>(); > CImgList<floatT> vertices; > const unsigned int w = subdivisions_x + 1, h = subdivisions_y + 1; > const float fx = (float)size_x/w, fy = (float)size_y/h; > for (unsigned int y = 0; y<h; ++y) for (unsigned int x = 0; x<w; ++x) > CImg<floatT>::vector(fx*x,fy*y,0).move_to(vertices); > for (unsigned int y = 0; y<subdivisions_y; ++y) for (unsigned int x = 0; x<subdivisions_x; ++x) { > const int off1 = x+y*w, off2 = x+1+y*w, off3 = x+1+(y+1)*w, off4 = x+(y+1)*w; > CImg<tf>::vector(off1,off4,off3,off2).move_to(primitives); > } > return vertices>'x'; > } ># 28825 "./CImg.h" > template<typename tf> > static CImg<floatT> sphere3d(CImgList<tf>& primitives, > const float radius=50, const unsigned int subdivisions=3) { > > > primitives.assign(); > const double tmp = (1+std::sqrt(5.0f))/2, a = 1.0/std::sqrt(1+tmp*tmp), b = tmp*a; > CImgList<floatT> vertices(12,1,3,1,1, b,a,0.0, -b,a,0.0, -b,-a,0.0, b,-a,0.0, a,0.0,b, a,0.0,-b, > -a,0.0,-b, -a,0.0,b, 0.0,b,a, 0.0,-b,a, 0.0,-b,-a, 0.0,b,-a); > primitives.assign(20,1,3,1,1, 4,8,7, 4,7,9, 5,6,11, 5,10,6, 0,4,3, 0,3,5, 2,7,1, 2,1,6, > 8,0,11, 8,11,1, 9,10,3, 9,2,10, 8,4,0, 11,0,5, 4,9,3, > 5,3,10, 7,8,1, 6,1,11, 7,2,9, 6,10,2); > > float he = (float)a; > > > for (unsigned int i = 0; i<subdivisions; ++i) { > const unsigned int L = primitives._width; > he/=2; > const float he2 = he*he; > for (unsigned int l = 0; l<L; ++l) { > const unsigned int > p0 = (unsigned int)primitives(0,0), p1 = (unsigned int)primitives(0,1), p2 = (unsigned int)primitives(0,2); > const float > x0 = vertices(p0,0), y0 = vertices(p0,1), z0 = vertices(p0,2), > x1 = vertices(p1,0), y1 = vertices(p1,1), z1 = vertices(p1,2), > x2 = vertices(p2,0), y2 = vertices(p2,1), z2 = vertices(p2,2), > tnx0 = (x0+x1)/2, tny0 = (y0+y1)/2, tnz0 = (z0+z1)/2, nn0 = (float)std::sqrt(tnx0*tnx0+tny0*tny0+tnz0*tnz0), > tnx1 = (x0+x2)/2, tny1 = (y0+y2)/2, tnz1 = (z0+z2)/2, nn1 = (float)std::sqrt(tnx1*tnx1+tny1*tny1+tnz1*tnz1), > tnx2 = (x1+x2)/2, tny2 = (y1+y2)/2, tnz2 = (z1+z2)/2, nn2 = (float)std::sqrt(tnx2*tnx2+tny2*tny2+tnz2*tnz2), > nx0 = tnx0/nn0, ny0 = tny0/nn0, nz0 = tnz0/nn0, > nx1 = tnx1/nn1, ny1 = tny1/nn1, nz1 = tnz1/nn1, > nx2 = tnx2/nn2, ny2 = tny2/nn2, nz2 = tnz2/nn2; > int i0 = -1, i1 = -1, i2 = -1; > for (int p = 0; p<(int)(vertices)._width; ++p) { > const float x = (float)vertices(p,0), y = (float)vertices(p,1), z = (float)vertices(p,2); > if (cimg::sqr(x-nx0) + cimg::sqr(y-ny0) + cimg::sqr(z-nz0)<he2) i0 = p; > if (cimg::sqr(x-nx1) + cimg::sqr(y-ny1) + cimg::sqr(z-nz1)<he2) i1 = p; > if (cimg::sqr(x-nx2) + cimg::sqr(y-ny2) + cimg::sqr(z-nz2)<he2) i2 = p; > } > if (i0<0) { CImg<floatT>::vector(nx0,ny0,nz0).move_to(vertices); i0 = vertices._width - 1; } > if (i1<0) { CImg<floatT>::vector(nx1,ny1,nz1).move_to(vertices); i1 = vertices._width - 1; } > if (i2<0) { CImg<floatT>::vector(nx2,ny2,nz2).move_to(vertices); i2 = vertices._width - 1; } > primitives.remove(0); > CImg<tf>::vector(p0,i0,i1).move_to(primitives); > CImg<tf>::vector((tf)i0,(tf)p1,(tf)i2).move_to(primitives); > CImg<tf>::vector((tf)i1,(tf)i2,(tf)p2).move_to(primitives); > CImg<tf>::vector((tf)i1,(tf)i0,(tf)i2).move_to(primitives); > } > } > return (vertices>'x')*=radius; > } ># 28894 "./CImg.h" > template<typename tf, typename t> > static CImg<floatT> ellipsoid3d(CImgList<tf>& primitives, > const CImg<t>& tensor, const unsigned int subdivisions=3) { > primitives.assign(); > if (!subdivisions) return CImg<floatT>(); > CImg<floatT> S, V; > tensor.symmetric_eigen(S,V); > const float orient = > (V(0,1)*V(1,2) - V(0,2)*V(1,1))*V(2,0) + > (V(0,2)*V(1,0) - V(0,0)*V(1,2))*V(2,1) + > (V(0,0)*V(1,1) - V(0,1)*V(1,0))*V(2,2); > if (orient<0) { V(2,0) = -V(2,0); V(2,1) = -V(2,1); V(2,2) = -V(2,2); } > const float l0 = S[0], l1 = S[1], l2 = S[2]; > CImg<floatT> vertices = sphere3d(primitives,1.0,subdivisions); > vertices.get_shared_row(0)*=l0; > vertices.get_shared_row(1)*=l1; > vertices.get_shared_row(2)*=l2; > return V*vertices; > } ># 28921 "./CImg.h" > template<typename tp, typename tc, typename to> > CImg<T>& object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool full_check=true) { > return get_object3dtoCImg3d(primitives,colors,opacities,full_check).move_to(*this); > } > > > template<typename tp, typename tc> > CImg<T>& object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const bool full_check=true) { > return get_object3dtoCImg3d(primitives,colors,full_check).move_to(*this); > } > > > template<typename tp> > CImg<T>& object3dtoCImg3d(const CImgList<tp>& primitives, > const bool full_check=true) { > return get_object3dtoCImg3d(primitives,full_check).move_to(*this); > } > > > CImg<T>& object3dtoCImg3d(const bool full_check=true) { > return get_object3dtoCImg3d(full_check).move_to(*this); > } > > > template<typename tp, typename tc, typename to> > CImg<floatT> get_object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool full_check=true) const { > char error_message[1024] = { 0 }; > if (!is_object3d(primitives,colors,opacities,full_check,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "object3dtoCImg3d(): Invalid specified 3d object (%u,%u) (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),_width,primitives._width,error_message); > CImg<floatT> res(1,_size_object3dtoCImg3d(primitives,colors,opacities)); > float *ptrd = res._data; > > > *(ptrd++) = 'C' + 0.5f; *(ptrd++) = 'I' + 0.5f; *(ptrd++) = 'm' + 0.5f; > *(ptrd++) = 'g' + 0.5f; *(ptrd++) = '3' + 0.5f; *(ptrd++) = 'd' + 0.5f; > > > *(ptrd++) = cimg::uint2float(_width); > *(ptrd++) = cimg::uint2float(primitives._width); > > > if (is_empty() || !primitives) return res; > const T *ptrx = data(0,0), *ptry = data(0,1), *ptrz = data(0,2); > for (int p = 0; p<(int)((*this)._width); ++p) { > *(ptrd++) = (float)*(ptrx++); > *(ptrd++) = (float)*(ptry++); > *(ptrd++) = (float)*(ptrz++); > } > > > for (int p = 0; p<(int)(primitives)._width; ++p) { > *(ptrd++) = (float)primitives[p].size(); > const tp *ptrp = primitives[p]._data; > for (unsigned long i = 0, _maxi = (primitives[p]).size(); i<_maxi; ++i) *(ptrd++) = cimg::uint2float((unsigned int)*(ptrp++)); > } > > > const unsigned int csiz = cimg::min(colors._width,primitives._width); > for (int c = 0; c<(int)csiz; ++c) { > const CImg<tc>& color = colors[c]; > const tc *ptrc = color._data; > if (color.size()==3) { *(ptrd++) = (float)*(ptrc++); *(ptrd++) = (float)*(ptrc++); *(ptrd++) = (float)*ptrc; } > else { > *(ptrd++) = -128.0f; > int shared_ind = -1; > if (color.is_shared()) for (int i = 0; i<c; ++i) if (ptrc==colors[i]._data) { shared_ind = i; break; } > if (shared_ind<0) { > *(ptrd++) = (float)color._width; > *(ptrd++) = (float)color._height; > *(ptrd++) = (float)color._spectrum; > for (unsigned long l = 0, _maxl = (color).size(); l<_maxl; ++l) *(ptrd++) = (float)*(ptrc++); > } else { > *(ptrd++) = (float)shared_ind; > *(ptrd++) = 0; > *(ptrd++) = 0; > } > } > } > const int csiz2 = primitives._width - colors._width; > for (int c = 0; c<csiz2; ++c) { *(ptrd++) = 200.0f; *(ptrd++) = 200.0f; *(ptrd++) = 200.0f; } > > > ptrd = _object3dtoCImg3d(opacities,ptrd); > const float *ptre = res.end(); > while (ptrd<ptre) *(ptrd++) = 1.0f; > return res; > } > > template<typename to> > float* _object3dtoCImg3d(const CImgList<to>& opacities, float *ptrd) const { > for (int o = 0; o<(int)(opacities)._width; ++o) { > const CImg<to>& opacity = opacities[o]; > const to *ptro = opacity._data; > if (opacity.size()==1) *(ptrd++) = (float)*ptro; > else { > *(ptrd++) = -128.0f; > int shared_ind = -1; > if (opacity.is_shared()) for (int i = 0; i<o; ++i) if (ptro==opacities[i]._data) { shared_ind = i; break; } > if (shared_ind<0) { > *(ptrd++) = (float)opacity._width; > *(ptrd++) = (float)opacity._height; > *(ptrd++) = (float)opacity._spectrum; > for (unsigned long l = 0, _maxl = (opacity).size(); l<_maxl; ++l) *(ptrd++) = (float)*(ptro++); > } else { > *(ptrd++) = (float)shared_ind; > *(ptrd++) = 0; > *(ptrd++) = 0; > } > } > } > return ptrd; > } > > template<typename to> > float* _object3dtoCImg3d(const CImg<to>& opacities, float *ptrd) const { > const to *ptro = opacities._data; > for (unsigned long o = 0, _maxo = (opacities).size(); o<_maxo; ++o) *(ptrd++) = (float)*(ptro++); > return ptrd; > } > > template<typename tp, typename tc, typename to> > unsigned int _size_object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const CImgList<to>& opacities) const { > unsigned int siz = 8 + 3*width(); > for (int p = 0; p<(int)(primitives)._width; ++p) siz+=primitives[p].size() + 1; > for (int c = cimg::min(primitives._width,colors._width)-1; c>=0; --c) { > if (colors[c].is_shared()) siz+=4; > else { const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4+csiz:3; } > } > if (colors._width<primitives._width) siz+=3*(primitives._width - colors._width); > for (int o = 0; o<(int)(opacities)._width; ++o) { > if (opacities[o].is_shared()) siz+=4; > else { const unsigned int osiz = opacities[o].size(); siz+=(osiz!=1)?4+osiz:1; } > } > siz+=primitives._width - opacities._width; > return siz; > } > > template<typename tp, typename tc, typename to> > unsigned int _size_object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const CImg<to>& opacities) const { > unsigned int siz = 8 + 3*width(); > for (int p = 0; p<(int)(primitives)._width; ++p) siz+=primitives[p].size() + 1; > for (int c = cimg::min(primitives._width,colors._width)-1; c>=0; --c) { > const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4+csiz:3; > } > if (colors._width<primitives._width) siz+=3*(primitives._width - colors._width); > siz+=primitives.size(); > cimg::unused(opacities); > return siz; > } > > > template<typename tp, typename tc> > CImg<floatT> get_object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const bool full_check=true) const { > CImgList<T> opacities; > return get_object3dtoCImg3d(primitives,colors,opacities,full_check); > } > > > template<typename tp> > CImg<floatT> get_object3dtoCImg3d(const CImgList<tp>& primitives, > const bool full_check=true) const { > CImgList<T> colors, opacities; > return get_object3dtoCImg3d(primitives,colors,opacities,full_check); > } > > > CImg<floatT> get_object3dtoCImg3d(const bool full_check=true) const { > CImgList<T> opacities, colors; > CImgList<uintT> primitives(width(),1,1,1,1); > for (int p = 0; p<(int)(primitives)._width; ++p) primitives(p,0) = p; > return get_object3dtoCImg3d(primitives,colors,opacities,full_check); > } ># 29117 "./CImg.h" > template<typename tp, typename tc, typename to> > CImg<T>& CImg3dtoobject3d(CImgList<tp>& primitives, > CImgList<tc>& colors, > CImgList<to>& opacities, > const bool full_check=true) { > return get_CImg3dtoobject3d(primitives,colors,opacities,full_check).move_to(*this); > } > > > template<typename tp, typename tc, typename to> > CImg<T> get_CImg3dtoobject3d(CImgList<tp>& primitives, > CImgList<tc>& colors, > CImgList<to>& opacities, > const bool full_check=true) const { > char error_message[1024] = { 0 }; > if (!is_CImg3d(full_check,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg3dtoobject3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > const T *ptrs = _data + 6; > const unsigned int > nb_points = cimg::float2uint((float)*(ptrs++)), > nb_primitives = cimg::float2uint((float)*(ptrs++)); > const CImg<T> points = CImg<T>(ptrs,3,nb_points,1,1,true).get_transpose(); > ptrs+=3*nb_points; > primitives.assign(nb_primitives); > for (int p = 0; p<(int)(primitives)._width; ++p) { > const unsigned int nb_inds = (unsigned int)*(ptrs++); > primitives[p].assign(1,nb_inds); > tp *ptrp = primitives[p]._data; > for (unsigned int i = 0; i<nb_inds; ++i) *(ptrp++) = (tp)cimg::float2uint((float)*(ptrs++)); > } > colors.assign(nb_primitives); > for (int c = 0; c<(int)(colors)._width; ++c) { > if (*ptrs==(T)-128) { > ++ptrs; > const unsigned int w = (unsigned int)*(ptrs++), h = (unsigned int)*(ptrs++), s = (unsigned int)*(ptrs++); > if (!h && !s) colors[c].assign(colors[w],true); > else { colors[c].assign(ptrs,w,h,1,s,false); ptrs+=w*h*s; } > } else { colors[c].assign(ptrs,1,1,1,3,false); ptrs+=3; } > } > opacities.assign(nb_primitives); > for (int o = 0; o<(int)(opacities)._width; ++o) { > if (*ptrs==(T)-128) { > ++ptrs; > const unsigned int w = (unsigned int)*(ptrs++), h = (unsigned int)*(ptrs++), s = (unsigned int)*(ptrs++); > if (!h && !s) opacities[o].assign(opacities[w],true); > else { opacities[o].assign(ptrs,w,h,1,s,false); ptrs+=w*h*s; } > } else opacities[o].assign(1,1,1,1,*(ptrs++)); > } > return points; > } ># 29185 "./CImg.h" > template<typename tc> > CImg<T>& _draw_scanline(const int x0, const int x1, const int y, > const tc *const color, const float opacity, > const float brightness, > const float nopacity, const float copacity, const unsigned long whd) { > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const int nx0 = x0>0?x0:0, nx1 = x1<width()?x1:width()-1, dx = nx1 - nx0; > if (dx>=0) { > const tc *col = color; > const unsigned long off = whd - dx - 1; > T *ptrd = data(nx0,y); > if (opacity>=1) { > if (brightness==1) { > if (sizeof(T)!=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)*(col++); > for (int x = dx; x>=0; --x) *(ptrd++) = val; > ptrd+=off; > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)*(col++); > std::memset(ptrd,(int)val,dx+1); > ptrd+=whd; > } > } else if (brightness<1) { > if (sizeof(T)!=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(*(col++)*brightness); > for (int x = dx; x>=0; --x) *(ptrd++) = val; > ptrd+=off; > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(*(col++)*brightness); > std::memset(ptrd,(int)val,dx+1); > ptrd+=whd; > } > } else { > if (sizeof(T)!=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); > for (int x = dx; x>=0; --x) *(ptrd++) = val; > ptrd+=off; > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); > std::memset(ptrd,(int)val,dx+1); > ptrd+=whd; > } > } > } else { > if (brightness==1) { > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)*(col++); > for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } > ptrd+=off; > } > } else if (brightness<=1) { > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(*(col++)*brightness); > for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } > ptrd+=off; > } > } else { > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); > for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } > ptrd+=off; > } > } > } > } > return *this; > } ># 29269 "./CImg.h" > template<typename tc> > CImg<T>& draw_point(const int x0, const int y0, const int z0, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_point(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (x0>=0 && y0>=0 && z0>=0 && x0<width() && y0<height() && z0<depth()) { > const unsigned long whd = (unsigned long)_width*_height*_depth; > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > T *ptrd = data(x0,y0,z0,0); > const tc *col = color; > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_point(const int x0, const int y0, > const tc *const color, const float opacity=1) { > return draw_point(x0,y0,0,color,opacity); > } > > > > > > > > template<typename t, typename tc> > CImg<T>& draw_point(const CImg<t>& points, > const tc *const color, const float opacity=1) { > if (is_empty() || !points) return *this; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_point(): Invalid specified point set (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > points._width,points._height,points._depth,points._spectrum,points._data); > case 2 : { > for (int i = 0; i<(int)((points)._width); ++i) draw_point((int)points(i,0),(int)points(i,1),color,opacity); > } break; > default : { > for (int i = 0; i<(int)((points)._width); ++i) draw_point((int)points(i,0),(int)points(i,1),(int)points(i,2),color,opacity); > } > } > return *this; > } ># 29341 "./CImg.h" > template<typename tc> > CImg<T>& draw_line(const int x0, const int y0, > const int x1, const int y1, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, > &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, > &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { yleft-=(int)((float)xleft*((float)yright - yleft)/((float)xright - xleft)); xleft = 0; } > if (xright>=width()) { yright-=(int)(((float)xright - width())*((float)yright - yleft)/((float)xright - xleft)); xright = width() - 1; } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { xup-=(int)((float)yup*((float)xdown - xup)/((float)ydown - yup)); yup = 0; } > if (ydown>=height()) { xdown-=(int)(((float)ydown - height())*((float)xdown - xup)/((float)ydown - yup)); ydown = height() - 1; } > T *ptrd0 = data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()); > const unsigned long wh = (unsigned long)_width*_height; > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > T *ptrd = ptrd0; const tc* col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; const tc* col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > T *ptrd = ptrd0; const tc* col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; const tc* col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } > return *this; > } ># 29421 "./CImg.h" > template<typename tz,typename tc> > CImg<T>& draw_line(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, > &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, > &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0; > tzfloat > Z0 = 1/(tzfloat)z0, Z1 = 1/(tzfloat)z1, nz0 = Z0, nz1 = Z1, dz = Z1 - Z0, > &zleft = xdir?nz0:nz1, > &zright = xdir?nz1:nz0, > &zup = ydir?nz0:nz1, > &zdown = ydir?nz1:nz0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { > const float D = (float)xright - xleft; > yleft-=(int)((float)xleft*((float)yright - yleft)/D); > zleft-=(tzfloat)xleft*(zright - zleft)/D; > xleft = 0; > } > if (xright>=width()) { > const float d = (float)xright - width(), D = (float)xright - xleft; > yright-=(int)(d*((float)yright - yleft)/D); > zright-=(tzfloat)d*(zright - zleft)/D; > xright = width() - 1; > } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { > const float D = (float)ydown - yup; > xup-=(int)((float)yup*((float)xdown - xup)/D); > zup-=(tzfloat)yup*(zdown - zup)/D; > yup = 0; > } > if (ydown>=height()) { > const float d = (float)ydown - height(), D = (float)ydown - yup; > xdown-=(int)(d*((float)xdown - xup)/D); > zdown-=(tzfloat)d*(zdown - zup)/D; > ydown = height() - 1; > } > T *ptrd0 = data(nx0,ny0); > tz *ptrz = zbuffer.data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()); > const unsigned long wh = (unsigned long)_width*_height, > ndx = dx>0?dx:1; > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz && pattern&hatch) { > *ptrz = (tz)z; > T *ptrd = ptrd0; const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > T *ptrd = ptrd0; const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=wh; } > } > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz && pattern&hatch) { > *ptrz = (tz)z; > T *ptrd = ptrd0; const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > T *ptrd = ptrd0; const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } > } > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } > } > return *this; > } ># 29549 "./CImg.h" > template<typename tc> > CImg<T>& draw_line(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > int nx0 = x0, ny0 = y0, nz0 = z0, nx1 = x1, ny1 = y1, nz1 = z1; > if (nx0>nx1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); > if (nx1<0 || nx0>=width()) return *this; > if (nx0<0) { const float D = 1.0f + nx1 - nx0; ny0-=(int)((float)nx0*(1.0f + ny1 - ny0)/D); nz0-=(int)((float)nx0*(1.0f + nz1 - nz0)/D); nx0 = 0; } > if (nx1>=width()) { const float d = (float)nx1 - width(), D = 1.0f + nx1 - nx0; ny1+=(int)(d*(1.0f + ny0 - ny1)/D); nz1+=(int)(d*(1.0f + nz0 - nz1)/D); nx1 = width() - 1; } > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); > if (ny1<0 || ny0>=height()) return *this; > if (ny0<0) { const float D = 1.0f + ny1 - ny0; nx0-=(int)((float)ny0*(1.0f + nx1 - nx0)/D); nz0-=(int)((float)ny0*(1.0f + nz1 - nz0)/D); ny0 = 0; } > if (ny1>=height()) { const float d = (float)ny1 - height(), D = 1.0f + ny1 - ny0; nx1+=(int)(d*(1.0f + nx0 - nx1)/D); nz1+=(int)(d*(1.0f + nz0 - nz1)/D); ny1 = height() - 1; } > if (nz0>nz1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); > if (nz1<0 || nz0>=depth()) return *this; > if (nz0<0) { const float D = 1.0f + nz1 - nz0; nx0-=(int)((float)nz0*(1.0f + nx1 - nx0)/D); ny0-=(int)((float)nz0*(1.0f + ny1 - ny0)/D); nz0 = 0; } > if (nz1>=depth()) { const float d = (float)nz1 - depth(), D = 1.0f + nz1 - nz0; nx1+=(int)(d*(1.0f + nx0 - nx1)/D); ny1+=(int)(d*(1.0f + ny0 - ny1)/D); nz1 = depth() - 1; } > const unsigned int dmax = cimg::max(cimg::abs(nx1 - nx0),cimg::abs(ny1 - ny0),nz1 - nz0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const float px = (nx1 - nx0)/(float)dmax, py = (ny1 - ny0)/(float)dmax, pz = (nz1 - nz0)/(float)dmax; > float x = (float)nx0, y = (float)ny0, z = (float)nz0; > if (opacity>=1) for (unsigned int t = 0; t<=dmax; ++t) { > if (!(~pattern) || (~pattern && pattern&hatch)) { > T* ptrd = data((unsigned int)x,(unsigned int)y,(unsigned int)z); > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } > } > x+=px; y+=py; z+=pz; if (pattern) { hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > for (unsigned int t = 0; t<=dmax; ++t) { > if (!(~pattern) || (~pattern && pattern&hatch)) { > T* ptrd = data((unsigned int)x,(unsigned int)y,(unsigned int)z); > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } > } > x+=px; y+=py; z+=pz; if (pattern) { hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); } > } > } > return *this; > } ># 29620 "./CImg.h" > template<typename tc> > CImg<T>& draw_line(const int x0, const int y0, > const int x1, const int y1, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty()) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_line(x0,y0,x1,y1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > dtx = tx1-tx0, dty = ty1-ty0, > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > tnx0 = tx0, tnx1 = tx1, tny0 = ty0, tny1 = ty1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &txleft = xdir?tnx0:tnx1, &tyleft = xdir?tny0:tny1, &txright = xdir?tnx1:tnx0, &tyright = xdir?tny1:tny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0, > &txup = ydir?tnx0:tnx1, &tyup = ydir?tny0:tny1, &txdown = ydir?tnx1:tnx0, &tydown = ydir?tny1:tny0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { > const float D = (float)xright - xleft; > yleft-=(int)((float)xleft*((float)yright - yleft)/D); > txleft-=(int)((float)xleft*((float)txright - txleft)/D); > tyleft-=(int)((float)xleft*((float)tyright - tyleft)/D); > xleft = 0; > } > if (xright>=width()) { > const float d = (float)xright - width(), D = (float)xright - xleft; > yright-=(int)(d*((float)yright - yleft)/D); > txright-=(int)(d*((float)txright - txleft)/D); > tyright-=(int)(d*((float)tyright - tyleft)/D); > xright = width() - 1; > } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { > const float D = (float)ydown - yup; > xup-=(int)((float)yup*((float)xdown - xup)/D); > txup-=(int)((float)yup*((float)txdown - txup)/D); > tyup-=(int)((float)yup*((float)tydown - tyup)/D); > yup = 0; > } > if (ydown>=height()) { > const float d = (float)ydown - height(), D = (float)ydown - yup; > xdown-=(int)(d*((float)xdown - xup)/D); > txdown-=(int)(d*((float)txdown - txup)/D); > tydown-=(int)(d*((float)tydown - tyup)/D); > ydown = height() - 1; > } > T *ptrd0 = data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()), > ndx = dx>0?dx:1; > const unsigned long wh = (unsigned long)_width*_height; > > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > T *ptrd = ptrd0; > const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture(tx,ty,0,c); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; > const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture(tx,ty,0,c); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; > if (pattern&hatch) { > const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture(tx,ty,0,c) + *ptrd*copacity); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; > const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture(tx,ty,0,c) + *ptrd*copacity); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } > return *this; > } ># 29742 "./CImg.h" > template<typename tc> > CImg<T>& draw_line(const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty() && z0<=0 && z1<=0) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_line(x0,y0,z0,x1,y1,z1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, > &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, > &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0; > float > Tx0 = tx0/z0, Tx1 = tx1/z1, > Ty0 = ty0/z0, Ty1 = ty1/z1, > Z0 = 1/z0, Z1 = 1/z1, > dz = Z1 - Z0, dtx = Tx1 - Tx0, dty = Ty1 - Ty0, > tnx0 = Tx0, tnx1 = Tx1, tny0 = Ty0, tny1 = Ty1, nz0 = Z0, nz1 = Z1, > &zleft = xdir?nz0:nz1, &txleft = xdir?tnx0:tnx1, &tyleft = xdir?tny0:tny1, > &zright = xdir?nz1:nz0, &txright = xdir?tnx1:tnx0, &tyright = xdir?tny1:tny0, > &zup = ydir?nz0:nz1, &txup = ydir?tnx0:tnx1, &tyup = ydir?tny0:tny1, > &zdown = ydir?nz1:nz0, &txdown = ydir?tnx1:tnx0, &tydown = ydir?tny1:tny0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { > const float D = (float)xright - xleft; > yleft-=(int)((float)xleft*((float)yright - yleft)/D); > zleft-=(float)xleft*(zright - zleft)/D; > txleft-=(float)xleft*(txright - txleft)/D; > tyleft-=(float)xleft*(tyright - tyleft)/D; > xleft = 0; > } > if (xright>=width()) { > const float d = (float)xright - width(), D = (float)xright - xleft; > yright-=(int)(d*((float)yright - yleft)/D); > zright-=d*(zright - zleft)/D; > txright-=d*(txright - txleft)/D; > tyright-=d*(tyright - tyleft)/D; > xright = width() - 1; > } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { > const float D = (float)ydown - yup; > xup-=(int)((float)yup*((float)xdown - xup)/D); > zup-=(float)yup*(zdown - zup)/D; > txup-=(float)yup*(txdown - txup)/D; > tyup-=(float)yup*(tydown - tyup)/D; > yup = 0; > } > if (ydown>=height()) { > const float d = (float)ydown - height(), D = (float)ydown - yup; > xdown-=(int)(d*((float)xdown - xup)/D); > zdown-=d*(zdown - zup)/D; > txdown-=d*(txdown - txup)/D; > tydown-=d*(tydown - tyup)/D; > ydown = height() - 1; > } > T *ptrd0 = data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()), > ndx = dx>0?dx:1; > const unsigned long wh = (unsigned long)_width*_height; > > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } > return *this; > } ># 29874 "./CImg.h" > template<typename tz, typename tc> > CImg<T>& draw_line(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0) return *this; > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_line(zbuffer,x0,y0,z0,x1,y1,z1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, > &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, > &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0; > float > Tx0 = tx0/z0, Tx1 = tx1/z1, > Ty0 = ty0/z0, Ty1 = ty1/z1, > dtx = Tx1 - Tx0, dty = Ty1 - Ty0, > tnx0 = Tx0, tnx1 = Tx1, tny0 = Ty0, tny1 = Ty1, > &txleft = xdir?tnx0:tnx1, &tyleft = xdir?tny0:tny1, > &txright = xdir?tnx1:tnx0, &tyright = xdir?tny1:tny0, > &txup = ydir?tnx0:tnx1, &tyup = ydir?tny0:tny1, > &txdown = ydir?tnx1:tnx0, &tydown = ydir?tny1:tny0; > tzfloat > Z0 = 1/(tzfloat)z0, Z1 = 1/(tzfloat)z1, > dz = Z1 - Z0, nz0 = Z0, nz1 = Z1, > &zleft = xdir?nz0:nz1, > &zright = xdir?nz1:nz0, > &zup = ydir?nz0:nz1, > &zdown = ydir?nz1:nz0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { > const float D = (float)xright - xleft; > yleft-=(int)((float)xleft*((float)yright - yleft)/D); > zleft-=(float)xleft*(zright - zleft)/D; > txleft-=(float)xleft*(txright - txleft)/D; > tyleft-=(float)xleft*(tyright - tyleft)/D; > xleft = 0; > } > if (xright>=width()) { > const float d = (float)xright - width(), D = (float)xright - xleft; > yright-=(int)(d*((float)yright - yleft)/D); > zright-=d*(zright - zleft)/D; > txright-=d*(txright - txleft)/D; > tyright-=d*(tyright - tyleft)/D; > xright = width()-1; > } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { > const float D = (float)ydown - yup; > xup-=(int)((float)yup*((float)xdown - xup)/D); > zup-=yup*(zdown - zup)/D; > txup-=yup*(txdown - txup)/D; > tyup-=yup*(tydown - tyup)/D; > yup = 0; > } > if (ydown>=height()) { > const float d = (float)ydown - height(), D = (float)ydown - yup; > xdown-=(int)(d*((float)xdown - xup)/D); > zdown-=d*(zdown - zup)/D; > txdown-=d*(txdown - txup)/D; > tydown-=d*(tydown - tyup)/D; > ydown = height()-1; > } > T *ptrd0 = data(nx0,ny0); > tz *ptrz = zbuffer.data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()), > ndx = dx>0?dx:1; > const unsigned long wh = (unsigned long)_width*_height; > > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } > } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } > } > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } > } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } > } > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } > } > return *this; > } ># 30028 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_line(const CImg<t>& points, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty() || !points || points._width<2) return *this; > bool ninit_hatch = init_hatch; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Invalid specified point set (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > points._width,points._height,points._depth,points._spectrum,points._data); > > case 2 : { > const int x0 = (int)points(0,0), y0 = (int)points(0,1); > int ox = x0, oy = y0; > for (unsigned int i = 1; i<points._width; ++i) { > const int x = (int)points(i,0), y = (int)points(i,1); > draw_line(ox,oy,x,y,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; > } > } break; > default : { > const int x0 = (int)points(0,0), y0 = (int)points(0,1), z0 = (int)points(0,2); > int ox = x0, oy = y0, oz = z0; > for (unsigned int i = 1; i<points._width; ++i) { > const int x = (int)points(i,0), y = (int)points(i,1), z = (int)points(i,2); > draw_line(ox,oy,oz,x,y,z,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; oz = z; > } > } > } > return *this; > } ># 30077 "./CImg.h" > template<typename tc> > CImg<T>& draw_arrow(const int x0, const int y0, > const int x1, const int y1, > const tc *const color, const float opacity=1, > const float angle=30, const float length=-10, > const unsigned int pattern=~0U) { > if (is_empty()) return *this; > const float u = (float)(x0 - x1), v = (float)(y0 - y1), sq = u*u + v*v, > deg = (float)(angle*cimg::PI/180), ang = (sq>0)?(float)std::atan2(v,u):0.0f, > l = (length>=0)?length:-length*(float)std::sqrt(sq)/100; > if (sq>0) { > const float > cl = (float)std::cos(ang - deg), sl = (float)std::sin(ang - deg), > cr = (float)std::cos(ang + deg), sr = (float)std::sin(ang + deg); > const int > xl = x1 + (int)(l*cl), yl = y1 + (int)(l*sl), > xr = x1 + (int)(l*cr), yr = y1 + (int)(l*sr), > xc = x1 + (int)((l+1)*(cl+cr))/2, yc = y1 + (int)((l+1)*(sl+sr))/2; > draw_line(x0,y0,xc,yc,color,opacity,pattern).draw_triangle(x1,y1,xl,yl,xr,yr,color,opacity); > } else draw_point(x0,y0,color,opacity); > return *this; > } ># 30132 "./CImg.h" > template<typename tc> > CImg<T>& draw_spline(const int x0, const int y0, const float u0, const float v0, > const int x1, const int y1, const float u1, const float v1, > const tc *const color, const float opacity=1, > const float precision=0.25, const unsigned int pattern=~0U, > const bool init_hatch=true) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (x0==x1 && y0==y1) return draw_point(x0,y0,color,opacity); > bool ninit_hatch = init_hatch; > const float > ax = u0 + u1 + 2*(x0 - x1), > bx = 3*(x1 - x0) - 2*u0 - u1, > ay = v0 + v1 + 2*(y0 - y1), > by = 3*(y1 - y0) - 2*v0 - v1, > _precision = 1/(std::sqrt(cimg::sqr((float)x0-x1)+cimg::sqr((float)y0-y1))*(precision>0?precision:1)); > int ox = x0, oy = y0; > for (float t = 0; t<1; t+=_precision) { > const float t2 = t*t, t3 = t2*t; > const int > nx = (int)(ax*t3 + bx*t2 + u0*t + x0), > ny = (int)(ay*t3 + by*t2 + v0*t + y0); > draw_line(ox,oy,nx,ny,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = nx; oy = ny; > } > return draw_line(ox,oy,x1,y1,color,opacity,pattern,false); > } > > > > > > > template<typename tc> > CImg<T>& draw_spline(const int x0, const int y0, const int z0, const float u0, const float v0, const float w0, > const int x1, const int y1, const int z1, const float u1, const float v1, const float w1, > const tc *const color, const float opacity=1, > const float precision=4, const unsigned int pattern=~0U, > const bool init_hatch=true) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (x0==x1 && y0==y1 && z0==z1) return draw_point(x0,y0,z0,color,opacity); > bool ninit_hatch = init_hatch; > const float > ax = u0 + u1 + 2*(x0 - x1), > bx = 3*(x1 - x0) - 2*u0 - u1, > ay = v0 + v1 + 2*(y0 - y1), > by = 3*(y1 - y0) - 2*v0 - v1, > az = w0 + w1 + 2*(z0 - z1), > bz = 3*(z1 - z0) - 2*w0 - w1, > _precision = 1/(std::sqrt(cimg::sqr(x0-x1)+cimg::sqr(y0-y1))*(precision>0?precision:1)); > int ox = x0, oy = y0, oz = z0; > for (float t = 0; t<1; t+=_precision) { > const float t2 = t*t, t3 = t2*t; > const int > nx = (int)(ax*t3 + bx*t2 + u0*t + x0), > ny = (int)(ay*t3 + by*t2 + v0*t + y0), > nz = (int)(az*t3 + bz*t2 + w0*t + z0); > draw_line(ox,oy,oz,nx,ny,nz,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = nx; oy = ny; oz = nz; > } > return draw_line(ox,oy,oz,x1,y1,z1,color,opacity,pattern,false); > } ># 30224 "./CImg.h" > template<typename t> > CImg<T>& draw_spline(const int x0, const int y0, const float u0, const float v0, > const int x1, const int y1, const float u1, const float v1, > const CImg<t>& texture, > const int tx0, const int ty0, const int tx1, const int ty1, > const float opacity=1, > const float precision=4, const unsigned int pattern=~0U, > const bool init_hatch=true) { > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_empty()) return *this; > if (is_overlapped(texture)) return draw_spline(x0,y0,u0,v0,x1,y1,u1,v1,+texture,tx0,ty0,tx1,ty1,precision,opacity,pattern,init_hatch); > if (x0==x1 && y0==y1) return draw_point(x0,y0,texture.get_vector_at(x0,y0),opacity); > bool ninit_hatch = init_hatch; > const float > ax = u0 + u1 + 2*(x0 - x1), > bx = 3*(x1 - x0) - 2*u0 - u1, > ay = v0 + v1 + 2*(y0 - y1), > by = 3*(y1 - y0) - 2*v0 - v1, > _precision = 1/(std::sqrt(cimg::sqr(x0-x1)+cimg::sqr(y0-y1))*(precision>0?precision:1)); > int ox = x0, oy = y0, otx = tx0, oty = ty0; > for (float t1 = 0; t1<1; t1+=_precision) { > const float t2 = t1*t1, t3 = t2*t1; > const int > nx = (int)(ax*t3 + bx*t2 + u0*t1 + x0), > ny = (int)(ay*t3 + by*t2 + v0*t1 + y0), > ntx = tx0 + (int)((tx1-tx0)*t1), > nty = ty0 + (int)((ty1-ty0)*t1); > draw_line(ox,oy,nx,ny,texture,otx,oty,ntx,nty,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = nx; oy = ny; otx = ntx; oty = nty; > } > return draw_line(ox,oy,x1,y1,texture,otx,oty,tx1,ty1,opacity,pattern,false); > } ># 30273 "./CImg.h" > template<typename tp, typename tt, typename tc> > CImg<T>& draw_spline(const CImg<tp>& points, const CImg<tt>& tangents, > const tc *const color, const float opacity=1, > const bool is_closed_set=false, const float precision=4, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty() || !points || !tangents || points._width<2 || tangents._width<2) return *this; > bool ninit_hatch = init_hatch; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Invalid specified point set (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > points._width,points._height,points._depth,points._spectrum,points._data); > > case 2 : { > const int x0 = (int)points(0,0), y0 = (int)points(0,1); > const float u0 = (float)tangents(0,0), v0 = (float)tangents(0,1); > int ox = x0, oy = y0; > float ou = u0, ov = v0; > for (unsigned int i = 1; i<points._width; ++i) { > const int x = (int)points(i,0), y = (int)points(i,1); > const float u = (float)tangents(i,0), v = (float)tangents(i,1); > draw_spline(ox,oy,ou,ov,x,y,u,v,color,precision,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; ou = u; ov = v; > } > if (is_closed_set) draw_spline(ox,oy,ou,ov,x0,y0,u0,v0,color,precision,opacity,pattern,false); > } break; > default : { > const int x0 = (int)points(0,0), y0 = (int)points(0,1), z0 = (int)points(0,2); > const float u0 = (float)tangents(0,0), v0 = (float)tangents(0,1), w0 = (float)tangents(0,2); > int ox = x0, oy = y0, oz = z0; > float ou = u0, ov = v0, ow = w0; > for (unsigned int i = 1; i<points._width; ++i) { > const int x = (int)points(i,0), y = (int)points(i,1), z = (int)points(i,2); > const float u = (float)tangents(i,0), v = (float)tangents(i,1), w = (float)tangents(i,2); > draw_spline(ox,oy,oz,ou,ov,ow,x,y,z,u,v,w,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; oz = z; ou = u; ov = v; ow = w; > } > if (is_closed_set) draw_spline(ox,oy,oz,ou,ov,ow,x0,y0,z0,u0,v0,w0,color,precision,opacity,pattern,false); > } > } > return *this; > } > > > > > > template<typename tp, typename tc> > CImg<T>& draw_spline(const CImg<tp>& points, > const tc *const color, const float opacity=1, > const bool is_closed_set=false, const float precision=4, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty() || !points || points._width<2) return *this; > CImg<Tfloat> tangents; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Invalid specified point set (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > points._width,points._height,points._depth,points._spectrum,points._data); > case 2 : { > tangents.assign(points._width,points._height); > for (int p = 0; p<(int)((points)._width); ++p) { > const unsigned int > p0 = is_closed_set?(p+points._width-1)%points._width:(p?p-1:0), > p1 = is_closed_set?(p+1)%points._width:(p+1<points._width?p+1:p); > const float > x = (float)points(p,0), > y = (float)points(p,1), > x0 = (float)points(p0,0), > y0 = (float)points(p0,1), > x1 = (float)points(p1,0), > y1 = (float)points(p1,1), > u0 = x - x0, > v0 = y - y0, > n0 = 1e-8f + (float)std::sqrt(u0*u0 + v0*v0), > u1 = x1 - x, > v1 = y1 - y, > n1 = 1e-8f + (float)std::sqrt(u1*u1 + v1*v1), > u = u0/n0 + u1/n1, > v = v0/n0 + v1/n1, > n = 1e-8f + (float)std::sqrt(u*u + v*v), > fact = 0.5f*(n0 + n1); > tangents(p,0) = (Tfloat)(fact*u/n); > tangents(p,1) = (Tfloat)(fact*v/n); > } > } break; > default : { > tangents.assign(points._width,points._height); > for (int p = 0; p<(int)((points)._width); ++p) { > const unsigned int > p0 = is_closed_set?(p+points._width-1)%points._width:(p?p-1:0), > p1 = is_closed_set?(p+1)%points._width:(p+1<points._width?p+1:p); > const float > x = (float)points(p,0), > y = (float)points(p,1), > z = (float)points(p,2), > x0 = (float)points(p0,0), > y0 = (float)points(p0,1), > z0 = (float)points(p0,2), > x1 = (float)points(p1,0), > y1 = (float)points(p1,1), > z1 = (float)points(p1,2), > u0 = x - x0, > v0 = y - y0, > w0 = z - z0, > n0 = 1e-8f + (float)std::sqrt(u0*u0 + v0*v0 + w0*w0), > u1 = x1 - x, > v1 = y1 - y, > w1 = z1 - z, > n1 = 1e-8f + (float)std::sqrt(u1*u1 + v1*v1 + w1*w1), > u = u0/n0 + u1/n1, > v = v0/n0 + v1/n1, > w = w0/n0 + w1/n1, > n = 1e-8f + (float)std::sqrt(u*u + v*v + w*w), > fact = 0.5f*(n0 + n1); > tangents(p,0) = (Tfloat)(fact*u/n); > tangents(p,1) = (Tfloat)(fact*v/n); > tangents(p,2) = (Tfloat)(fact*w/n); > } > } > } > return draw_spline(points,tangents,color,opacity,is_closed_set,precision,pattern,init_hatch); > } ># 30695 "./CImg.h" > template<typename tc> > CImg<T>& _draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, const float opacity, > const float brightness) { > const float _sc_nopacity = cimg::abs((float)opacity), _sc_copacity = 1 - cimg::max((float)opacity,0); const unsigned long _sc_whd = (unsigned long)_width*_height*_depth; > const float nbrightness = brightness<0?0:(brightness>2?2:brightness); > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2); > if (ny0<height() && ny2>=0) { > if ((nx1 - nx0)*(ny2 - ny0) - (nx2 - nx0)*(ny1 - ny0)<0) > for (int y = ny0<0?0:ny0, xr = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xl = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xl+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xl)) _draw_scanline(xl,xr,y,color,opacity,nbrightness,_sc_nopacity,_sc_copacity,_sc_whd); > else > for (int y = ny0<0?0:ny0, xr = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xl = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xl+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xl)) _draw_scanline(xr,xl,y,color,opacity,nbrightness,_sc_nopacity,_sc_copacity,_sc_whd); > } > return *this; > } ># 30727 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > _draw_triangle(x0,y0,x1,y1,x2,y2,color,opacity,1); > return *this; > } ># 30753 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, const float opacity, > const unsigned int pattern) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > draw_line(x0,y0,x1,y1,color,opacity,pattern,true). > draw_line(x1,y1,x2,y2,color,opacity,pattern,false). > draw_line(x2,y2,x0,y0,color,opacity,pattern,false); > return *this; > } ># 30786 "./CImg.h" > template<typename tz, typename tc> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const tc *const color, const float opacity=1, > const float brightness=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float > nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), > nbrightness = brightness<0?0:(brightness>2?2:brightness); > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xleft0+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; pzl = pzn; } > int xleft = xleft0, xright = xright0; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright); > const int dx = xright - xleft; > const tzfloat pentez = (zright - zleft)/dx; > if (xleft<0 && dx) zleft-=xleft*(zright - zleft)/dx; > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width() - 1; > T* ptrd = data(xleft,y,0,0); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nbrightness*(*col++)); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } > } else { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*nbrightness**(col++) + *ptrd*copacity); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > } > } > zr+=pzr; zl+=pzl; > } > return *this; > } ># 30904 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), _sxn=1, _scn=1, _sxr=1, _scr=1, _sxl=1, _scl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errr = _dyr/2, _errcr = _errr, _errl = _dyl/2, _errcl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; > if (xright<xleft) cimg::swap(xleft,xright,cleft,cright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > rc = dx?(cright - cleft)/dx:0, > sc = cright>cleft?1:-1, > ndc = dc-(dx?dx*(dc/dx):0); > int errc = dx>>1; > if (xleft<0 && dx) cleft-=xleft*(cright - cleft)/dx; > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width() - 1; > T* ptrd = data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); > ptrd+=whd; > } > ptrd-=offx; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } > } > return *this; > } > > > template<typename tz, typename tc> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const tc *const color, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nz0,nz2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nz1,nz2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), _sxn=1, _scn=1, _sxr=1, _scr=1, _sxl=1, _scl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errr = _dyr/2, _errcr = _errr, _errl = _dyl/2, _errcl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; pzl = pzn; } > int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,cleft,cright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > rc = dx?(cright-cleft)/dx:0, > sc = cright>cleft?1:-1, > ndc = dc-(dx?dx*(dc/dx):0); > const tzfloat pentez = (zright - zleft)/dx; > int errc = dx>>1; > if (xleft<0 && dx) { > cleft-=xleft*(cright - cleft)/dx; > zleft-=xleft*(zright - zleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T *ptrd = data(xleft,y); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } else for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } > zr+=pzr; zl+=pzl; > } > return *this; > } ># 31070 "./CImg.h" > template<typename tc1, typename tc2, typename tc3> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc1 *const color1, > const tc2 *const color2, > const tc3 *const color3, > const float opacity=1) { > const unsigned char one = 1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) get_shared_channel(c).draw_triangle(x0,y0,x1,y1,x2,y2,&one,color1[c],color2[c],color3[c],opacity); > return *this; > } ># 31101 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float opacity=1, > const float brightness=1) { > if (is_empty()) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float > nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), > nbrightness = brightness<0?0:(brightness>2?2:brightness); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), txright0 = ny0>=0?ntx0:(ntx0-ny0*(ntx2-ntx0)/(ny2-ny0)), tyright0 = ny0>=0?nty0:(nty0-ny0*(nty2-nty0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), txleft0 = ny1>=0?(ny0>=0?(ny0==ny1?ntx1:ntx0):(ntx0-ny0*(ntx1-ntx0)/(ny1-ny0))):(ntx1-ny1*(ntx2-ntx1)/(ny2-ny1)), tyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nty1:nty0):(nty0-ny0*(nty1-nty0)/(ny1-ny0))):(nty1-ny1*(nty2-nty1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = ntx2>ntx1?ntx2-ntx1:(_stxn=-1,ntx1-ntx2), _dtxr = ntx2>ntx0?ntx2-ntx0:(_stxr=-1,ntx0-ntx2), _dtxl = ntx1>ntx0?ntx1-ntx0:(_stxl=-1,ntx0-ntx1), _dtyn = nty2>nty1?nty2-nty1:(_styn=-1,nty1-nty2), _dtyr = nty2>nty0?nty2-nty0:(_styr=-1,nty0-nty2), _dtyl = nty1>nty0?nty1-nty0:(_styl=-1,nty0-nty1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(ntx2-ntx1)/_dyn:0, _rtyn = _dyn?(nty2-nty1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(ntx2-ntx0)/_dyr:0, _rtyr = _dyr?(nty2-nty0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(ntx1-ntx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nty1-nty0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), txright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), tyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(txleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), tyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txleft0=ntx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyleft0=nty1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > int > xleft = xleft0, xright = xright0, > txleft = txleft0, txright = txright0, > tyleft = tyleft0, tyright = tyright0; > if (xright<xleft) cimg::swap(xleft,xright,txleft,txright,tyleft,tyright); > const int > dx = xright - xleft, > dtx = txright>txleft?txright - txleft:txleft - txright, > dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, > rtx = dx?(txright - txleft)/dx:0, > rty = dx?(tyright - tyleft)/dx:0, > stx = txright>txleft?1:-1, > sty = tyright>tyleft?1:-1, > ndtx = dtx - (dx?dx*(dtx/dx):0), > ndty = dty - (dx?dx*(dty/dx):0); > int errtx = dx>>1, errty = errtx; > if (xleft<0 && dx) { > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)*col; > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nbrightness**col); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } > } else { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } > } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float opacity=1, > const float brightness=1) { > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float > nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), > nbrightness = brightness<0?0:(brightness>2?2:brightness); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2, > nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xleft0+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int xleft = xleft0, xright = xright0; > float > zleft = zl, zright = zr, > txleft = txl, txright = txr, > tyleft = tyl, tyright = tyr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright); > const int dx = xright - xleft; > const float > pentez = (zright - zleft)/dx, > pentetx = (txright - txleft)/dx, > pentety = (tyright - tyleft)/dx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)*col; > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else if (nbrightness<1) for (int x=xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nbrightness**col); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } > } else { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } > > > template<typename tz, typename tc> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float opacity=1, > const float brightness=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float > nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), > nbrightness = brightness<0?0:(brightness>2?2:brightness); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xleft0+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int xleft = xleft0, xright = xright0; > float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright); > const int dx = xright - xleft; > const float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; > const tzfloat pentez = (zright - zleft)/dx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T *ptrd = data(xleft,y,0,0); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)*col; > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nbrightness**col); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } > } else { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } ># 31524 "./CImg.h" > template<typename tc, typename tl> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (is_overlapped(light)) return draw_triangle(x0,y0,x1,y1,x2,y2,color,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd-1; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0; > if (xright<xleft) cimg::swap(xleft,xright,lxleft,lxright,lyleft,lyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0); > int errlx = dx>>1, errly = errlx; > if (xleft<0 && dx) { > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > *ptrd = (T)(l<1?l**(col++):((2-l)**(col++)+(l-1)*maxval)); > ptrd+=whd; > } > ptrd-=offx; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const T val = (T)(l<1?l**(col++):((2-l)**(col++)+(l-1)*maxval)); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } > } > return *this; > } > > > template<typename tz, typename tc, typename tl> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const tc *const color, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > if (is_overlapped(light)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color, > +light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > if (y==ny1) { zl = nz1; pzl = pzn; } > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,lxleft,lxright,lyleft,lyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0); > const tzfloat pentez = (zright - zleft)/dx; > int errlx = dx>>1, errly = errlx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T *ptrd = data(xleft,y,0,0); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const tc cval = *(col++); > *ptrd = (T)(l<1?l*cval:(2-l)*cval+(l-1)*maxval); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const tc cval = *(col++); > const T val = (T)(l<1?l*cval:(2-l)*cval+(l-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } > zr+=pzr; zl+=pzl; > } > return *this; > } ># 31736 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > if (is_empty()) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) > return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,brightness0,brightness1,brightness2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), txright0 = ny0>=0?ntx0:(ntx0-ny0*(ntx2-ntx0)/(ny2-ny0)), tyright0 = ny0>=0?nty0:(nty0-ny0*(nty2-nty0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), txleft0 = ny1>=0?(ny0>=0?(ny0==ny1?ntx1:ntx0):(ntx0-ny0*(ntx1-ntx0)/(ny1-ny0))):(ntx1-ny1*(ntx2-ntx1)/(ny2-ny1)), tyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nty1:nty0):(nty0-ny0*(nty1-nty0)/(ny1-ny0))):(nty1-ny1*(nty2-nty1)/(ny2-ny1)), _sxn=1, _scn=1, _stxn=1, _styn=1, _sxr=1, _scr=1, _stxr=1, _styr=1, _sxl=1, _scl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dtxn = ntx2>ntx1?ntx2-ntx1:(_stxn=-1,ntx1-ntx2), _dtxr = ntx2>ntx0?ntx2-ntx0:(_stxr=-1,ntx0-ntx2), _dtxl = ntx1>ntx0?ntx1-ntx0:(_stxl=-1,ntx0-ntx1), _dtyn = nty2>nty1?nty2-nty1:(_styn=-1,nty1-nty2), _dtyr = nty2>nty0?nty2-nty0:(_styr=-1,nty0-nty2), _dtyl = nty1>nty0?nty1-nty0:(_styl=-1,nty0-nty1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errcr = _errr, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errcl = _errl, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rtxn = _dyn?(ntx2-ntx1)/_dyn:0, _rtyn = _dyn?(nty2-nty1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rtxr = _dyr?(ntx2-ntx0)/_dyr:0, _rtyr = _dyr?(nty2-nty0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(ntx1-ntx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nty1-nty0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), txright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), tyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), txleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), tyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txleft0=ntx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyleft0=nty1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > int > xleft = xleft0, xright = xright0, > cleft = cleft0, cright = cright0, > txleft = txleft0, txright = txright0, > tyleft = tyleft0, tyright = tyright0; > if (xright<xleft) cimg::swap(xleft,xright,cleft,cright,txleft,txright,tyleft,tyright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > dtx = txright>txleft?txright - txleft:txleft - txright, > dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, > rc = dx?(cright - cleft)/dx:0, > rtx = dx?(txright - txleft)/dx:0, > rty = dx?(tyright - tyleft)/dx:0, > sc = cright>cleft?1:-1, > stx = txright>txleft?1:-1, > sty = tyright>tyleft?1:-1, > ndc = dc - (dx?dx*(dc/dx):0), > ndtx = dtx - (dx?dx*(dtx/dx):0), > ndty = dty - (dx?dx*(dty/dx):0); > int errc = dx>>1, errtx = errc, errty = errc; > if (xleft<0 && dx) { > cleft-=xleft*(cright - cleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, > brightness0,brightness1,brightness2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2, > nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), _sxn=1, _scn=1, _sxr=1, _scr=1, _sxl=1, _scl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errr = _dyr/2, _errcr = _errr, _errl = _dyl/2, _errcl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int > xleft = xleft0, xright = xright0, > cleft = cleft0, cright = cright0; > float > zleft = zl, zright = zr, > txleft = txl, txright = txr, > tyleft = tyl, tyright = tyr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright,cleft,cright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > rc = dx?(cright - cleft)/dx:0, > sc = cright>cleft?1:-1, > ndc = dc - (dx?dx*(dc/dx):0); > const float > pentez = (zright - zleft)/dx, > pentetx = (txright - txleft)/dx, > pentety = (tyright - tyleft)/dx; > int errc = dx>>1; > if (xleft<0 && dx) { > cleft-=xleft*(cright - cleft)/dx; > zleft-=xleft*(zright - zleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } else for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } > > > template<typename tz, typename tc> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, > brightness0,brightness1,brightness2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), _sxn=1, _scn=1, _sxr=1, _scr=1, _sxl=1, _scl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errr = _dyr/2, _errcr = _errr, _errl = _dyl/2, _errcl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; > float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright,cleft,cright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > rc = dx?(cright - cleft)/dx:0, > sc = cright>cleft?1:-1, > ndc = dc - (dx?dx*(dc/dx):0); > float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; > const tzfloat pentez = (zright - zleft)/dx; > int errc = dx>>1; > if (xleft<0 && dx) { > cleft-=xleft*(cright - cleft)/dx; > zleft-=xleft*(zright - zleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } else for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } ># 32076 "./CImg.h" > template<typename tc, typename tl> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > if (is_empty()) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > if (is_overlapped(light)) return draw_triangle(x0,y0,x1,y1,x2,y2,texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), txright0 = ny0>=0?ntx0:(ntx0-ny0*(ntx2-ntx0)/(ny2-ny0)), tyright0 = ny0>=0?nty0:(nty0-ny0*(nty2-nty0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), txleft0 = ny1>=0?(ny0>=0?(ny0==ny1?ntx1:ntx0):(ntx0-ny0*(ntx1-ntx0)/(ny1-ny0))):(ntx1-ny1*(ntx2-ntx1)/(ny2-ny1)), tyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nty1:nty0):(nty0-ny0*(nty1-nty0)/(ny1-ny0))):(nty1-ny1*(nty2-nty1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _slxn=1, _slyn=1, _sxr=1, _stxr=1, _styr=1, _slxr=1, _slyr=1, _sxl=1, _stxl=1, _styl=1, _slxl=1, _slyl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dyn = ny2-ny1, _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dyr = ny2-ny0, _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyl = ny1-ny0, _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dlxn = ntx2>ntx1?ntx2-ntx1:(_slxn=-1,ntx1-ntx2), _dlxr = ntx2>ntx0?ntx2-ntx0:(_slxr=-1,ntx0-ntx2), _dlxl = ntx1>ntx0?ntx1-ntx0:(_slxl=-1,ntx0-ntx1), _dlyn = nty2>nty1?nty2-nty1:(_slyn=-1,nty1-nty2), _dlyr = nty2>nty0?nty2-nty0:(_slyr=-1,nty0-nty2), _dlyl = nty1>nty0?nty1-nty0:(_slyl=-1,nty0-nty1), _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, _dlxn-=_dyn?_dyn*(_dlxn/_dyn):0, _dlxr-=_dyr?_dyr*(_dlxr/_dyr):0, _dlxl-=_dyl?_dyl*(_dlxl/_dyl):0, _dlyn-=_dyn?_dyn*(_dlyn/_dyn):0, _dlyr-=_dyr?_dyr*(_dlyr/_dyr):0, _dlyl-=_dyl?_dyl*(_dlyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errlxn = _errn, _errlyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errlxr = _errr, _errlyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _errlxl = _errl, _errlyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rlxn = _dyn?(ntx2-ntx1)/_dyn:0, _rlyn = _dyn?(nty2-nty1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rlxr = _dyr?(ntx2-ntx0)/_dyr:0, _rlyr = _dyr?(nty2-nty0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ), _rlxl = (ny0!=ny1 && ny1>0)?(_dyl?(ntx1-ntx0)/_dyl:0): (_errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxn ), _rlyl = (ny0!=ny1 && ny1>0)?(_dyl?(nty1-nty0)/_dyl:0): (_errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), txright0+=_rlxr+((_errlxr-=_dlxr)<0?_errlxr+=_dyr,_slxr:0), tyright0+=_rlyr+((_errlyr-=_dlyr)<0?_errlyr+=_dyr,_slyr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), txleft0+=_rlxl+((_errlxl-=_dlxl)<0?(_errlxl+=_dyl,_slxl):0), tyleft0+=_rlyl+((_errlyl-=_dlyl)<0?(_errlyl+=_dyl,_slyl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxl=_rlxn, txleft0=ntx1, _errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyl=_rlyn, tyleft0=nty1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0, > txleft = txleft0, txright = txright0, > tyleft = tyleft0, tyright = tyright0; > if (xright<xleft) cimg::swap(xleft,xright,lxleft,lxright,lyleft,lyright,txleft,txright,tyleft,tyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > dtx = txright>txleft?txright - txleft:txleft - txright, > dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > rtx = dx?(txright - txleft)/dx:0, > rty = dx?(tyright - tyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > stx = txright>txleft?1:-1, > sty = tyright>tyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0), > ndtx = dtx - (dx?dx*(dtx/dx):0), > ndty = dty - (dx?dx*(dty/dx):0); > int errlx = dx>>1, errly = errlx, errtx = errlx, errty = errlx; > if (xleft<0 && dx) { > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } > } > return *this; > } > > > template<typename tc, typename tl> > CImg<T>& draw_triangle(const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > if (is_overlapped(light)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2, > nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0; > float > zleft = zl, zright = zr, > txleft = txl, txright = txr, > tyleft = tyl, tyright = tyr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright,lxleft,lxright,lyleft,lyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0); > const float > pentez = (zright - zleft)/dx, > pentetx = (txright - txleft)/dx, > pentety = (tyright - tyleft)/dx; > int errlx = dx>>1, errly = errlx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } else for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } > > > template<typename tz, typename tc, typename tl> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2, > +texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > if (is_overlapped(light)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2, > texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0; > float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright,lxleft,lxright,lyleft,lyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0); > float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; > const tzfloat pentez = (zright - zleft)/dx; > int errlx = dx>>1, errly = errlx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } ># 32450 "./CImg.h" > CImg<T>& draw_rectangle(const int x0, const int y0, const int z0, const int c0, > const int x1, const int y1, const int z1, const int c1, > const T val, const float opacity=1) { > if (is_empty()) return *this; > const bool bx = (x0<x1), by = (y0<y1), bz = (z0<z1), bc = (c0<c1); > const int > nx0 = bx?x0:x1, nx1 = bx?x1:x0, > ny0 = by?y0:y1, ny1 = by?y1:y0, > nz0 = bz?z0:z1, nz1 = bz?z1:z0, > nc0 = bc?c0:c1, nc1 = bc?c1:c0; > const int > lX = (1 + nx1 - nx0) + (nx1>=width()?width() - 1 - nx1:0) + (nx0<0?nx0:0), > lY = (1 + ny1 - ny0) + (ny1>=height()?height() - 1 - ny1:0) + (ny0<0?ny0:0), > lZ = (1 + nz1 - nz0) + (nz1>=depth()?depth() - 1 - nz1:0) + (nz0<0?nz0:0), > lC = (1 + nc1 - nc0) + (nc1>=spectrum()?spectrum() - 1 - nc1:0) + (nc0<0?nc0:0); > const unsigned long > offX = (unsigned long)_width - lX, > offY = (unsigned long)_width*(_height - lY), > offZ = (unsigned long)_width*_height*(_depth - lZ); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > T *ptrd = data(nx0<0?0:nx0,ny0<0?0:ny0,nz0<0?0:nz0,nc0<0?0:nc0); > if (lX>0 && lY>0 && lZ>0 && lC>0) > for (int v = 0; v<lC; ++v) { > for (int z = 0; z<lZ; ++z) { > for (int y = 0; y<lY; ++y) { > if (opacity>=1) { > if (sizeof(T)!=1) { for (int x = 0; x<lX; ++x) *(ptrd++) = val; ptrd+=offX; } > else { std::memset(ptrd,(int)val,lX); ptrd+=_width; } > } else { for (int x = 0; x<lX; ++x) { *ptrd = (T)(nopacity*val + *ptrd*copacity); ++ptrd; } ptrd+=offX; } > } > ptrd+=offY; > } > ptrd+=offZ; > } > return *this; > } ># 32498 "./CImg.h" > template<typename tc> > CImg<T>& draw_rectangle(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_rectangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > for (int c = 0; c<(int)((*this)._spectrum); ++c) draw_rectangle(x0,y0,z0,c,x1,y1,z1,c,(T)color[c],opacity); > return *this; > } > > > template<typename tc> > CImg<T>& draw_rectangle(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const tc *const color, const float opacity, > const unsigned int pattern) { > return draw_line(x0,y0,z0,x1,y0,z0,color,opacity,pattern,true). > draw_line(x1,y0,z0,x1,y1,z0,color,opacity,pattern,false). > draw_line(x1,y1,z0,x0,y1,z0,color,opacity,pattern,false). > draw_line(x0,y1,z0,x0,y0,z0,color,opacity,pattern,false). > draw_line(x0,y0,z1,x1,y0,z1,color,opacity,pattern,true). > draw_line(x1,y0,z1,x1,y1,z1,color,opacity,pattern,false). > draw_line(x1,y1,z1,x0,y1,z1,color,opacity,pattern,false). > draw_line(x0,y1,z1,x0,y0,z1,color,opacity,pattern,false). > draw_line(x0,y0,z0,x0,y0,z1,color,opacity,pattern,true). > draw_line(x1,y0,z0,x1,y0,z1,color,opacity,pattern,true). > draw_line(x1,y1,z0,x1,y1,z1,color,opacity,pattern,true). > draw_line(x0,y1,z0,x0,y1,z1,color,opacity,pattern,true); > } ># 32540 "./CImg.h" > template<typename tc> > CImg<T>& draw_rectangle(const int x0, const int y0, > const int x1, const int y1, > const tc *const color, const float opacity=1) { > return draw_rectangle(x0,y0,0,x1,y1,_depth-1,color,opacity); > } > > > template<typename tc> > CImg<T>& draw_rectangle(const int x0, const int y0, > const int x1, const int y1, > const tc *const color, const float opacity, > const unsigned int pattern) { > if (is_empty()) return *this; > if (y0==y1) return draw_line(x0,y0,x1,y0,color,opacity,pattern,true); > if (x0==x1) return draw_line(x0,y0,x0,y1,color,opacity,pattern,true); > const bool bx = (x0<x1), by = (y0<y1); > const int > nx0 = bx?x0:x1, nx1 = bx?x1:x0, > ny0 = by?y0:y1, ny1 = by?y1:y0; > if (ny1==ny0+1) return draw_line(nx0,ny0,nx1,ny0,color,opacity,pattern,true). > draw_line(nx1,ny1,nx0,ny1,color,opacity,pattern,false); > return draw_line(nx0,ny0,nx1,ny0,color,opacity,pattern,true). > draw_line(nx1,ny0+1,nx1,ny1-1,color,opacity,pattern,false). > draw_line(nx1,ny1,nx0,ny1,color,opacity,pattern,false). > draw_line(nx0,ny1-1,nx0,ny0+1,color,opacity,pattern,false); > } > > > > > > > > template<typename t, typename tc> > CImg<T>& draw_polygon(const CImg<t>& points, > const tc *const color, const float opacity=1) { > if (is_empty() || !points) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_polygon(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > > CImg<intT> npoints(points._width,2); > unsigned int nb_points = 1, p = 0; > int cx = npoints(0,0) = (int)points(0,0), cy = npoints(0,1) = (int)points(0,1); > const int cx0 = cx, cy0 = cy; > for (p = 1; p<points._width; ++p) { > const int nx = (int)points(p,0), ny = (int)points(p,1); > if (nx!=cx || ny!=cy) { npoints(nb_points,0) = nx; npoints(nb_points++,1) = ny; cx = nx; cy = ny; } > } > --p; > if ((int)points(p,0)==cx0 && (int)points(p,1)==cy0) --nb_points; > > if (nb_points<=1) return draw_point((int)npoints(0,0),(int)npoints(0,1),color,opacity); > if (nb_points==2) return draw_line((int)npoints(0,0),(int)npoints(0,1), > (int)npoints(1,0),(int)npoints(1,1),color,opacity); > if (nb_points==3) return draw_triangle((int)npoints(0,0),(int)npoints(0,1), > (int)npoints(1,0),(int)npoints(1,1), > (int)npoints(2,0),(int)npoints(2,1),color,opacity); > const float _sc_nopacity = cimg::abs((float)1), _sc_copacity = 1 - cimg::max((float)1,0); const unsigned long _sc_whd = (unsigned long)_width*_height*_depth; > > if (opacity!=1) { > npoints.resize(nb_points,2,1,1,0); > CImg<intT> npoints_x = npoints.get_shared_row(0), npoints_y = npoints.get_shared_row(1); > int xmax = 0, xmin = (int)npoints_x.min_max(xmax), ymax = 0, ymin = (int)npoints_y.min_max(ymax); > if (xmax<0 || xmin>=width() || ymax<0 || ymin>=height()) return *this; > if (ymin==ymax) return _draw_scanline(xmin,xmax,ymin,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > const unsigned int > nxmin = xmin<0?0:(unsigned int)xmin, nxmax = xmax>=width()?_width-1:(unsigned int)xmax, > nymin = ymin<0?0:(unsigned int)ymin, nymax = ymax>=height()?_height-1:(unsigned int)ymax, > dx = 1 + nxmax - nxmin, > dy = 1 + nymax - nymin; > npoints_x-=nxmin; npoints_y-=nymin; > unsigned char one = 1; > const CImg<unsigned char> mask = CImg<unsigned char>(dx,dy,1,1,0).draw_polygon(npoints,&one,1); > CImg<T> _color(dx,dy,1,spectrum()); > for (int c = 0; c<(int)((_color)._spectrum); ++c) _color.get_shared_channel(c).fill(color[c]); > return draw_image(nxmin,nymin,0,0,_color,mask,opacity,1); > } > > > int > xmax = 0, xmin = (int)npoints.get_shared_points(0,nb_points-1,0).min_max(xmax), > ymax = 0, ymin = (int)npoints.get_shared_points(0,nb_points-1,1).min_max(ymax); > if (xmax<0 || xmin>=width() || ymax<0 || ymin>=height()) return *this; > if (ymin==ymax) return _draw_scanline(xmin,xmax,ymin,color,1,1,_sc_nopacity,_sc_copacity,_sc_whd); > const unsigned int > nymin = ymin<0?0:(unsigned int)ymin, > nymax = ymax>=height()?_height-1:(unsigned int)ymax, > dy = 1 + nymax - nymin; > CImg<intT> X(1+2*nb_points,dy,1,1,0), tmp; > cx = (int)npoints(0,0), cy = (int)npoints(0,1); > unsigned int cp = 0; > for (unsigned int p = 0; p<nb_points; ++p) { > const unsigned int np = (p!=nb_points-1)?p+1:0, ap = (np!=nb_points-1)?np+1:0; > const int > nx = (int)npoints(np,0), ny = (int)npoints(np,1), ay = (int)npoints(ap,1), > y0 = cy - nymin, y1 = ny - nymin; > if (y0!=y1) { > const int countermin = ((ny<ay && cy<ny) || (ny>ay && cy>ny))?1:0; > for (int x = cx, y = y0, _sx = 1, _sy = 1, > _dx = nx>cx?nx-cx:((_sx=-1),cx-nx), > _dy = y1>y0?y1-y0:((_sy=-1),y0-y1), > _counter = ((_dx-=_dy?_dy*(_dx/_dy):0),_dy), > _err = _dx>>1, > _rx = _dy?(nx-cx)/_dy:0; > _counter>=countermin; > --_counter, y+=_sy, x+=_rx + ((_err-=_dx)<0?_err+=_dy,_sx:0)) > if (y>=0 && y<(int)dy) X(++X(0,y),y) = x; > cp = np; cx = nx; cy = ny; > } else { > const int pp = (cp?cp-1:nb_points-1), py = (int)npoints(pp,1); > if (y0>=0 && y0<(int)dy) { > _draw_scanline(cx<nx?cx:nx,cx<nx?nx:cx,y0+nymin,color,1,1,_sc_nopacity,_sc_copacity,_sc_whd); > if ((cy>py && ay>cy) || (cy<py && ay<cy)) X(++X(0,y0),y0) = cx; > } > if (cy!=ay) { cp = np; cx = nx; cy = ny; } > } > } > > > for (int y = 0; y<(int)dy; ++y) { > tmp.assign(X.data(1,y),X(0,y),1,1,1,true).sort(); > for (int i = 1; i<=X(0,y); ) { > const int xb = X(i++,y), xe = X(i++,y); > _draw_scanline(xb,xe,nymin+y,color,1,1,_sc_nopacity,_sc_copacity,_sc_whd); > } > } > return *this; > } > > > template<typename t, typename tc> > CImg<T>& draw_polygon(const CImg<t>& points, > const tc *const color, const float opacity, const unsigned int pattern) { > if (is_empty() || !points || points._width<3) return *this; > bool ninit_hatch = true; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_polygon(): Invalid specified point set.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > case 2 : { > CImg<intT> npoints(points._width,2); > int x = npoints(0,0) = (int)points(0,0), y = npoints(0,1) = (int)points(0,1); > unsigned int nb_points = 1; > for (unsigned int p = 1; p<points._width; ++p) { > const int nx = (int)points(p,0), ny = (int)points(p,1); > if (nx!=x || ny!=y) { npoints(nb_points,0) = nx; npoints(nb_points++,1) = ny; x = nx; y = ny; } > } > const int x0 = (int)npoints(0,0), y0 = (int)npoints(0,1); > int ox = x0, oy = y0; > for (unsigned int i = 1; i<nb_points; ++i) { > const int x = (int)npoints(i,0), y = (int)npoints(i,1); > draw_line(ox,oy,x,y,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; > } > draw_line(ox,oy,x0,y0,color,opacity,pattern,false); > } break; > default : { > CImg<intT> npoints(points._width,3); > int x = npoints(0,0) = (int)points(0,0), y = npoints(0,1) = (int)points(0,1), z = npoints(0,2) = (int)points(0,2); > unsigned int nb_points = 1; > for (unsigned int p = 1; p<points._width; ++p) { > const int nx = (int)points(p,0), ny = (int)points(p,1), nz = (int)points(p,2); > if (nx!=x || ny!=y || nz!=z) { npoints(nb_points,0) = nx; npoints(nb_points,1) = ny; npoints(nb_points++,2) = nz; x = nx; y = ny; z = nz; } > } > const int x0 = (int)npoints(0,0), y0 = (int)npoints(0,1), z0 = (int)npoints(0,2); > int ox = x0, oy = y0, oz = z0; > for (unsigned int i = 1; i<nb_points; ++i) { > const int x = (int)npoints(i,0), y = (int)npoints(i,1), z = (int)npoints(i,2); > draw_line(ox,oy,oz,x,y,z,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; oz = z; > } > draw_line(ox,oy,oz,x0,y0,z0,color,opacity,pattern,false); > } > } > return *this; > } ># 32734 "./CImg.h" > template<typename tc> > CImg<T>& draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, > const tc *const color, const float opacity=1) { > return _draw_ellipse(x0,y0,r1,r2,angle,color,opacity,0U); > } ># 32748 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_ellipse(const int x0, const int y0, const CImg<t> &tensor, > const tc *const color, const float opacity=1) { > CImgList<t> eig = tensor.get_symmetric_eigen(); > const CImg<t> &val = eig[0], &vec = eig[1]; > return draw_ellipse(x0,y0,std::sqrt(val(0)),std::sqrt(val(1)), > std::atan2(vec(0,1),vec(0,0))*180/cimg::PI, > color,opacity); > } ># 32769 "./CImg.h" > template<typename tc> > CImg<T>& draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, > const tc *const color, const float opacity, const unsigned int pattern) { > if (pattern) _draw_ellipse(x0,y0,r1,r2,angle,color,opacity,pattern); > return *this; > } ># 32785 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_ellipse(const int x0, const int y0, const CImg<t> &tensor, > const tc *const color, const float opacity, > const unsigned int pattern) { > CImgList<t> eig = tensor.get_symmetric_eigen(); > const CImg<t> &val = eig[0], &vec = eig[1]; > return draw_ellipse(x0,y0,std::sqrt(val(0)),std::sqrt(val(1)), > std::atan2(vec(0,1),vec(0,0))*180/cimg::PI, > color,opacity,pattern); > } > > template<typename tc> > CImg<T>& _draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, > const tc *const color, const float opacity, > const unsigned int pattern) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_ellipse(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (r1<=0 || r2<=0) return draw_point(x0,y0,color,opacity); > const float _sc_nopacity = cimg::abs((float)opacity), _sc_copacity = 1 - cimg::max((float)opacity,0); const unsigned long _sc_whd = (unsigned long)_width*_height*_depth; > const float > nr1 = cimg::abs(r1), nr2 = cimg::abs(r2), > nangle = (float)(angle*cimg::PI/180), > u = (float)std::cos(nangle), > v = (float)std::sin(nangle), > rmax = cimg::max(nr1,nr2), > l1 = (float)std::pow(rmax/(nr1>0?nr1:1e-6),2), > l2 = (float)std::pow(rmax/(nr2>0?nr2:1e-6),2), > a = l1*u*u + l2*v*v, > b = u*v*(l1-l2), > c = l1*v*v + l2*u*u; > const int > yb = (int)std::sqrt(a*rmax*rmax/(a*c - b*b)), > tymin = y0 - yb - 1, > tymax = y0 + yb + 1, > ymin = tymin<0?0:tymin, > ymax = tymax>=height()?height()-1:tymax; > int oxmin = 0, oxmax = 0; > bool first_line = true; > for (int y = ymin; y<=ymax; ++y) { > const float > Y = y - y0 + (y<y0?0.5f:-0.5f), > delta = b*b*Y*Y - a*(c*Y*Y - rmax*rmax), > sdelta = delta>0?(float)std::sqrt(delta)/a:0.0f, > bY = b*Y/a, > fxmin = x0 - 0.5f - bY - sdelta, > fxmax = x0 + 0.5f - bY + sdelta; > const int xmin = (int)fxmin, xmax = (int)fxmax; > if (!pattern) _draw_scanline(xmin,xmax,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > else { > if (first_line) { > if (y0-yb>=0) _draw_scanline(xmin,xmax,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > else draw_point(xmin,y,color,opacity).draw_point(xmax,y,color,opacity); > first_line = false; > } else { > if (xmin<oxmin) _draw_scanline(xmin,oxmin-1,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > else _draw_scanline(oxmin+(oxmin==xmin?0:1),xmin,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > if (xmax<oxmax) _draw_scanline(xmax,oxmax-1,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > else _draw_scanline(oxmax+(oxmax==xmax?0:1),xmax,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > if (y==tymax) _draw_scanline(xmin+1,xmax-1,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > } > } > oxmin = xmin; oxmax = xmax; > } > return *this; > } ># 32864 "./CImg.h" > template<typename tc> > CImg<T>& draw_circle(const int x0, const int y0, int radius, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_circle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const float _sc_nopacity = cimg::abs((float)opacity), _sc_copacity = 1 - cimg::max((float)opacity,0); const unsigned long _sc_whd = (unsigned long)_width*_height*_depth; > if (radius<0 || x0-radius>=width() || y0+radius<0 || y0-radius>=height()) return *this; > if (y0>=0 && y0<height()) _draw_scanline(x0-radius,x0+radius,y0,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > for (int f = 1-radius, ddFx = 0, ddFy = -(radius<<1), x = 0, y = radius; x<y; ) { > if (f>=0) { > const int x1 = x0-x, x2 = x0+x, y1 = y0-y, y2 = y0+y; > if (y1>=0 && y1<height()) _draw_scanline(x1,x2,y1,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > if (y2>=0 && y2<height()) _draw_scanline(x1,x2,y2,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > f+=(ddFy+=2); --y; > } > const bool no_diag = y!=(x++); > ++(f+=(ddFx+=2)); > const int x1 = x0-y, x2 = x0+y, y1 = y0-x, y2 = y0+x; > if (no_diag) { > if (y1>=0 && y1<height()) _draw_scanline(x1,x2,y1,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > if (y2>=0 && y2<height()) _draw_scanline(x1,x2,y2,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > } > } > return *this; > } ># 32902 "./CImg.h" > template<typename tc> > CImg<T>& draw_circle(const int x0, const int y0, int radius, > const tc *const color, const float opacity, > const unsigned int pattern) { > cimg::unused(pattern); > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_circle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (radius<0 || x0-radius>=width() || y0+radius<0 || y0-radius>=height()) return *this; > if (!radius) return draw_point(x0,y0,color,opacity); > draw_point(x0-radius,y0,color,opacity).draw_point(x0+radius,y0,color,opacity). > draw_point(x0,y0-radius,color,opacity).draw_point(x0,y0+radius,color,opacity); > if (radius==1) return *this; > for (int f = 1-radius, ddFx = 0, ddFy = -(radius<<1), x = 0, y = radius; x<y; ) { > if (f>=0) { f+=(ddFy+=2); --y; } > ++x; ++(f+=(ddFx+=2)); > if (x!=y+1) { > const int x1 = x0-y, x2 = x0+y, y1 = y0-x, y2 = y0+x, x3 = x0-x, x4 = x0+x, y3 = y0-y, y4 = y0+y; > draw_point(x1,y1,color,opacity).draw_point(x1,y2,color,opacity). > draw_point(x2,y1,color,opacity).draw_point(x2,y2,color,opacity); > if (x!=y) > draw_point(x3,y3,color,opacity).draw_point(x4,y4,color,opacity). > draw_point(x4,y3,color,opacity).draw_point(x3,y4,color,opacity); > } > } > return *this; > } ># 32941 "./CImg.h" > template<typename t> > CImg<T>& draw_image(const int x0, const int y0, const int z0, const int c0, > const CImg<t>& sprite, const float opacity=1) { > if (is_empty() || !sprite) return *this; > if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,opacity); > if (x0==0 && y0==0 && z0==0 && c0==0 && is_sameXYZC(sprite) && opacity>=1 && !is_shared()) return assign(sprite,false); > const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); > const int > lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), > lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), > lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), > lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); > const t > *ptrs = sprite._data - > (bx?x0:0) - > (by?y0*sprite.width():0) - > (bz?z0*sprite.width()*sprite.height():0) - > (bc?c0*sprite.width()*sprite.height()*sprite.depth():0); > const unsigned long > offX = (unsigned long)_width - lX, > soffX = (unsigned long)sprite._width - lX, > offY = (unsigned long)_width*(_height - lY), > soffY = (unsigned long)sprite._width*(sprite._height - lY), > offZ = (unsigned long)_width*_height*(_depth - lZ), > soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (lX>0 && lY>0 && lZ>0 && lC>0) { > T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); > for (int v = 0; v<lC; ++v) { > for (int z = 0; z<lZ; ++z) { > for (int y = 0; y<lY; ++y) { > if (opacity>=1) for (int x = 0; x<lX; ++x) *(ptrd++) = (T)*(ptrs++); > else for (int x = 0; x<lX; ++x) { *ptrd = (T)(nopacity*(*(ptrs++)) + *ptrd*copacity); ++ptrd; } > ptrd+=offX; ptrs+=soffX; > } > ptrd+=offY; ptrs+=soffY; > } > ptrd+=offZ; ptrs+=soffZ; > } > } > return *this; > } > > > CImg<T>& draw_image(const int x0, const int y0, const int z0, const int c0, > const CImg<T>& sprite, const float opacity=1) { > if (is_empty() || !sprite) return *this; > if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,opacity); > if (x0==0 && y0==0 && z0==0 && c0==0 && is_sameXYZC(sprite) && opacity>=1 && !is_shared()) return assign(sprite,false); > const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); > const int > lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), > lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), > lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), > lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); > const T > *ptrs = sprite._data - > (bx?x0:0) - > (by?y0*sprite.width():0) - > (bz?z0*sprite.width()*sprite.height():0) - > (bc?c0*sprite.width()*sprite.height()*sprite.depth():0); > const unsigned long > offX = (unsigned long)_width - lX, > soffX = (unsigned long)sprite._width - lX, > offY = (unsigned long)_width*(_height - lY), > soffY = (unsigned long)sprite._width*(sprite._height - lY), > offZ = (unsigned long)_width*_height*(_depth - lZ), > soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ), > slX = lX*sizeof(T); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (lX>0 && lY>0 && lZ>0 && lC>0) { > T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); > for (int v = 0; v<lC; ++v) { > for (int z = 0; z<lZ; ++z) { > if (opacity>=1) for (int y = 0; y<lY; ++y) { std::memcpy(ptrd,ptrs,slX); ptrd+=_width; ptrs+=sprite._width; } > else for (int y = 0; y<lY; ++y) { > for (int x = 0; x<lX; ++x) { *ptrd = (T)(nopacity*(*(ptrs++)) + *ptrd*copacity); ++ptrd; } > ptrd+=offX; ptrs+=soffX; > } > ptrd+=offY; ptrs+=soffY; > } > ptrd+=offZ; ptrs+=soffZ; > } > } > return *this; > } > > > template<typename t> > CImg<T>& draw_image(const int x0, const int y0, const int z0, > const CImg<t>& sprite, const float opacity=1) { > return draw_image(x0,y0,z0,0,sprite,opacity); > } > > > template<typename t> > CImg<T>& draw_image(const int x0, const int y0, > const CImg<t>& sprite, const float opacity=1) { > return draw_image(x0,y0,0,sprite,opacity); > } > > > template<typename t> > CImg<T>& draw_image(const int x0, > const CImg<t>& sprite, const float opacity=1) { > return draw_image(x0,0,sprite,opacity); > } > > > template<typename t> > CImg<T>& draw_image(const CImg<t>& sprite, const float opacity=1) { > return draw_image(0,sprite,opacity); > } ># 33069 "./CImg.h" > template<typename ti, typename tm> > CImg<T>& draw_image(const int x0, const int y0, const int z0, const int c0, > const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > if (is_empty() || !sprite || !mask) return *this; > if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,mask,opacity,mask_max_value); > if (is_overlapped(mask)) return draw_image(x0,y0,z0,c0,sprite,+mask,opacity,mask_max_value); > if (mask._width!=sprite._width || mask._height!=sprite._height || mask._depth!=sprite._depth) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_image(): Sprite (%u,%u,%u,%u,%p) and mask (%u,%u,%u,%u,%p) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > sprite._width,sprite._height,sprite._depth,sprite._spectrum,sprite._data, > mask._width,mask._height,mask._depth,mask._spectrum,mask._data); > > const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); > const int > lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), > lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), > lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), > lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); > const int > coff = -(bx?x0:0)-(by?y0*mask.width():0)-(bz?z0*mask.width()*mask.height():0)-(bc?c0*mask.width()*mask.height()*mask.depth():0), > ssize = mask.width()*mask.height()*mask.depth()*mask.spectrum(); > const ti *ptrs = sprite._data + coff; > const tm *ptrm = mask._data + coff; > const unsigned long > offX = (unsigned long)_width - lX, > soffX = (unsigned long)sprite._width - lX, > offY = (unsigned long)_width*(_height - lY), > soffY = (unsigned long)sprite._width*(sprite._height - lY), > offZ = (unsigned long)_width*_height*(_depth - lZ), > soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ); > if (lX>0 && lY>0 && lZ>0 && lC>0) { > T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); > for (int c = 0; c<lC; ++c) { > ptrm = mask._data + (ptrm - mask._data)%ssize; > for (int z = 0; z<lZ; ++z) { > for (int y = 0; y<lY; ++y) { > for (int x = 0; x<lX; ++x) { > const float mopacity = (float)(*(ptrm++)*opacity), > nopacity = cimg::abs(mopacity), copacity = mask_max_value - cimg::max(mopacity,0); > *ptrd = (T)((nopacity*(*(ptrs++)) + *ptrd*copacity)/mask_max_value); > ++ptrd; > } > ptrd+=offX; ptrs+=soffX; ptrm+=soffX; > } > ptrd+=offY; ptrs+=soffY; ptrm+=soffY; > } > ptrd+=offZ; ptrs+=soffZ; ptrm+=soffZ; > } > } > return *this; > } > > > template<typename ti, typename tm> > CImg<T>& draw_image(const int x0, const int y0, const int z0, > const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > return draw_image(x0,y0,z0,0,sprite,mask,opacity,mask_max_value); > } > > > template<typename ti, typename tm> > CImg<T>& draw_image(const int x0, const int y0, > const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > return draw_image(x0,y0,0,sprite,mask,opacity,mask_max_value); > } > > > template<typename ti, typename tm> > CImg<T>& draw_image(const int x0, > const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > return draw_image(x0,0,sprite,mask,opacity,mask_max_value); > } > > > template<typename ti, typename tm> > CImg<T>& draw_image(const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > return draw_image(0,sprite,mask,opacity,mask_max_value); > } ># 33164 "./CImg.h" > template<typename tc1, typename tc2, typename t> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const tc1 *const foreground_color, const tc2 *const background_color, > const float opacity, const CImgList<t>& font, ...) { > if (!font) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font); > vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,false); > } > > > > > > template<typename tc, typename t> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const tc *const foreground_color, const int, > const float opacity, const CImgList<t>& font, ...) { > if (!font) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font); > vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return _draw_text(x0,y0,tmp,foreground_color,(tc*)0,opacity,font,false); > } > > > > > > template<typename tc, typename t> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const int, const tc *const background_color, > const float opacity, const CImgList<t>& font, ...) { > if (!font) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font); > vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return _draw_text(x0,y0,tmp,(tc*)0,background_color,opacity,font,false); > } ># 33215 "./CImg.h" > template<typename tc1, typename tc2> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const tc1 *const foreground_color, const tc2 *const background_color, > const float opacity=1, const unsigned int font_height=13, ...) { > if (!font_height) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font_height); vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > const CImgList<ucharT>& font = CImgList<ucharT>::font(font_height,true); > _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,true); > return *this; > } > > > template<typename tc> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const tc *const foreground_color, const int background_color=0, > const float opacity=1, const unsigned int font_height=13, ...) { > if (!font_height) return *this; > cimg::unused(background_color); > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font_height); vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return draw_text(x0,y0,"%s",foreground_color,(const tc*)0,opacity,font_height,tmp); > } > > > template<typename tc> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const int, const tc *const background_color, > const float opacity=1, const unsigned int font_height=13, ...) { > if (!font_height) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font_height); vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return draw_text(x0,y0,"%s",(tc*)0,background_color,opacity,font_height,tmp); > } > > template<typename tc1, typename tc2, typename t> > CImg<T>& _draw_text(const int x0, const int y0, > const char *const text, > const tc1 *const foreground_color, const tc2 *const background_color, > const float opacity, const CImgList<t>& font, > const bool is_native_font) { > if (!text) return *this; > if (!font) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_text(): Empty specified font.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int text_length = (unsigned int)std::strlen(text); > const bool _is_empty = is_empty(); > if (_is_empty) { > > int x = 0, y = 0, w = 0; > unsigned char c = 0; > for (unsigned int i = 0; i<text_length; ++i) { > c = text[i]; > switch (c) { > case '\n' : y+=font[0]._height; if (x>w) w = x; x = 0; break; > case '\t' : x+=4*font[' ']._width; break; > default : if (c<font._width) x+=font[c]._width; > } > } > if (x!=0 || c=='\n') { > if (x>w) w=x; > y+=font[0]._height; > } > assign(x0+w,y0+y,1,is_native_font?1:font[0]._spectrum,0); > } > > int x = x0, y = y0; > for (unsigned int i = 0; i<text_length; ++i) { > const unsigned char c = text[i]; > switch (c) { > case '\n' : y+=font[0]._height; x = x0; break; > case '\t' : x+=4*font[' ']._width; break; > default : if (c<font._width) { > CImg<T> letter = font[c]; > if (letter) { > if (is_native_font && _spectrum>letter._spectrum) letter.resize(-100,-100,1,_spectrum,0,2); > const unsigned int cmin = cimg::min(_spectrum,letter._spectrum); > if (foreground_color) for (unsigned int c = 0; c<cmin; ++c) if (foreground_color[c]!=1) letter.get_shared_channel(c)*=foreground_color[c]; > if (c+256<font.width()) { > if (background_color) for (unsigned int c = 0; c<cmin; ++c) draw_rectangle(x,y,0,c,x+letter._width-1,y+letter._height-1,0,c,background_color[c],opacity); > draw_image(x,y,letter,font[c+256],opacity,(T)255); > } else draw_image(x,y,letter,opacity); > x+=letter._width; > } > } > } > } > return *this; > } ># 33318 "./CImg.h" > template<typename t1, typename t2> > CImg<T>& draw_quiver(const CImg<t1>& flow, > const t2 *const color, const float opacity=1, > const unsigned int sampling=25, const float factor=-20, > const bool is_arrow=true, const unsigned int pattern=~0U) { > return draw_quiver(flow,CImg<t2>(color,_spectrum,1,1,1,true),opacity,sampling,factor,is_arrow,pattern); > } ># 33337 "./CImg.h" > template<typename t1, typename t2> > CImg<T>& draw_quiver(const CImg<t1>& flow, > const CImg<t2>& color, const float opacity=1, > const unsigned int sampling=25, const float factor=-20, > const bool is_arrow=true, const unsigned int pattern=~0U) { > if (is_empty()) return *this; > if (!flow || flow._spectrum!=2) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_quiver(): Invalid dimensions of specified flow (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > flow._width,flow._height,flow._depth,flow._spectrum,flow._data); > if (sampling<=0) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_quiver(): Invalid sampling value %g " > "(should be >0)", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > sampling); > const bool colorfield = (color._width==flow._width && color._height==flow._height && color._depth==1 && color._spectrum==_spectrum); > if (is_overlapped(flow)) return draw_quiver(+flow,color,opacity,sampling,factor,is_arrow,pattern); > float vmax,fact; > if (factor<=0) { > float m, M = (float)flow.get_norm(2).max_min(m); > vmax = (float)cimg::max(cimg::abs(m),cimg::abs(M)); > if (!vmax) vmax = 1; > fact = -factor; > } else { fact = factor; vmax = 1; } > > for (unsigned int y = sampling/2; y<_height; y+=sampling) > for (unsigned int x = sampling/2; x<_width; x+=sampling) { > const unsigned int X = x*flow._width/_width, Y = y*flow._height/_height; > float u = (float)flow(X,Y,0,0)*fact/vmax, v = (float)flow(X,Y,0,1)*fact/vmax; > if (is_arrow) { > const int xx = x+(int)u, yy = y+(int)v; > if (colorfield) draw_arrow(x,y,xx,yy,color.get_vector_at(X,Y)._data,opacity,45,sampling/5.0f,pattern); > else draw_arrow(x,y,xx,yy,color._data,opacity,45,sampling/5.0f,pattern); > } else { > if (colorfield) draw_line((int)(x-0.5*u),(int)(y-0.5*v),(int)(x+0.5*u),(int)(y+0.5*v),color.get_vector_at(X,Y)._data,opacity,pattern); > else draw_line((int)(x-0.5*u),(int)(y-0.5*v),(int)(x+0.5*u),(int)(y+0.5*v),color._data,opacity,pattern); > } > } > > return *this; > } ># 33391 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_axis(const CImg<t>& values_x, const int y, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const unsigned int font_height=13, > const bool allow_zero=true) { > if (is_empty()) return *this; > const int yt = (y+3+font_height)<_height?(y+3):(y-2-font_height); > const int siz = (int)values_x.size()-1; > char txt[32] = { 0 }; > CImg<T> label; > if (siz<=0) { > draw_line(0,y,_width-1,y,color,opacity,pattern); > if (!siz) { > snprintf(txt,sizeof(txt),"%g",(double)*values_x); > label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); > const int > _xt = (width() - label.width())/2, > xt = _xt<3?3:_xt+label.width()>=width()-2?width()-3-label.width():_xt; > draw_point(width()/2,y-1,color,opacity).draw_point(width()/2,y+1,color,opacity); > if (allow_zero || txt[0]!='0' || txt[1]!=0) > draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); > } > } else { > if (values_x[0]<values_x[siz]) draw_arrow(0,y,_width-1,y,color,opacity,30,5,pattern); > else draw_arrow(_width-1,y,0,y,color,opacity,30,5,pattern); > for (unsigned long x = 0, _maxx = (values_x).size(); x<_maxx; ++x) { > snprintf(txt,sizeof(txt),"%g",(double)values_x(x)); > label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); > const int > xi = (int)(x*(_width-1)/siz), > _xt = xi - label.width()/2, > xt = _xt<3?3:_xt+label.width()>=width()-2?width()-3-label.width():_xt; > draw_point(xi,y-1,color,opacity).draw_point(xi,y+1,color,opacity); > if (allow_zero || txt[0]!='0' || txt[1]!=0) > draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); > } > } > return *this; > } ># 33441 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_axis(const int x, const CImg<t>& values_y, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const unsigned int font_height=13, > const bool allow_zero=true) { > if (is_empty()) return *this; > int siz = (int)values_y.size()-1; > char txt[32] = { 0 }; > CImg<T> label; > if (siz<=0) { > draw_line(x,0,x,_height-1,color,opacity,pattern); > if (!siz) { > snprintf(txt,sizeof(txt),"%g",(double)*values_y); > label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); > const int > _yt = (height() - label.height())/2, > yt = _yt<0?0:_yt+label.height()>=height()?height()-1-label.height():_yt, > _xt = x - 2 - label.width(), > xt = _xt>=0?_xt:x+3; > draw_point(x-1,height()/2,color,opacity).draw_point(x+1,height()/2,color,opacity); > if (allow_zero || txt[0]!='0' || txt[1]!=0) > draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); > } > } else { > if (values_y[0]<values_y[siz]) draw_arrow(x,0,x,_height-1,color,opacity,30,5,pattern); > else draw_arrow(x,_height-1,x,0,color,opacity,30,5,pattern); > for (unsigned long y = 0, _maxy = (values_y).size(); y<_maxy; ++y) { > snprintf(txt,sizeof(txt),"%g",(double)values_y(y)); > label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); > const int > yi = (int)(y*(_height-1)/siz), > _yt = yi - label.height()/2, > yt = _yt<0?0:_yt+label.height()>=height()?height()-1-label.height():_yt, > _xt = x - 2 - label.width(), > xt = _xt>=0?_xt:x+3; > draw_point(x-1,yi,color,opacity).draw_point(x+1,yi,color,opacity); > if (allow_zero || txt[0]!='0' || txt[1]!=0) > draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); > } > } > return *this; > } ># 33495 "./CImg.h" > template<typename tx, typename ty, typename tc> > CImg<T>& draw_axes(const CImg<tx>& values_x, const CImg<ty>& values_y, > const tc *const color, const float opacity=1, > const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U, > const unsigned int font_height=13, const bool allow_zero=true) { > if (is_empty()) return *this; > const CImg<tx> nvalues_x(values_x._data,values_x.size(),1,1,1,true); > const int sizx = (int)values_x.size()-1, wm1 = width()-1; > if (sizx>=0) { > float ox = (float)*nvalues_x; > for (unsigned int x = sizx?1:0; x<_width; ++x) { > const float nx = (float)nvalues_x._linear_atX((float)x*sizx/wm1); > if (nx*ox<=0) { draw_axis(nx==0?x:x-1,values_y,color,opacity,pattern_y,font_height,allow_zero); break; } > ox = nx; > } > } > const CImg<ty> nvalues_y(values_y._data,values_y.size(),1,1,1,true); > const int sizy = (int)values_y.size()-1, hm1 = height()-1; > if (sizy>0) { > float oy = (float)nvalues_y[0]; > for (unsigned int y = sizy?1:0; y<_height; ++y) { > const float ny = (float)nvalues_y._linear_atX((float)y*sizy/hm1); > if (ny*oy<=0) { draw_axis(values_x,ny==0?y:y-1,color,opacity,pattern_x,font_height,allow_zero); break; } > oy = ny; > } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_axes(const float x0, const float x1, const float y0, const float y1, > const tc *const color, const float opacity=1, > const int subdivisionx=-60, const int subdivisiony=-60, > const float precisionx=0, const float precisiony=0, > const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U, > const unsigned int font_height=13) { > if (is_empty()) return *this; > const bool allow_zero = (x0*x1>0) || (y0*y1>0); > const float > dx = cimg::abs(x1-x0), dy = cimg::abs(y1-y0), > px = dx<=0?1:precisionx==0?(float)std::pow(10.0,(int)std::log10(dx)-2.0):precisionx, > py = dy<=0?1:precisiony==0?(float)std::pow(10.0,(int)std::log10(dy)-2.0):precisiony; > if (x0!=x1 && y0!=y1) > draw_axes(CImg<floatT>::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px), > CImg<floatT>::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), > color,opacity,pattern_x,pattern_y,font_height,allow_zero); > else if (x0==x1 && y0!=y1) > draw_axis((int)x0,CImg<floatT>::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), > color,opacity,pattern_y,font_height); > else if (x0!=x1 && y0==y1) > draw_axis(CImg<floatT>::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px),(int)y0, > color,opacity,pattern_x,font_height); > return *this; > } ># 33560 "./CImg.h" > template<typename tx, typename ty, typename tc> > CImg<T>& draw_grid(const CImg<tx>& values_x, const CImg<ty>& values_y, > const tc *const color, const float opacity=1, > const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U) { > if (is_empty()) return *this; > if (values_x) for (unsigned long x = 0, _maxx = (values_x).size(); x<_maxx; ++x) { > const int xi = (int)values_x[x]; > if (xi>=0 && xi<width()) draw_line(xi,0,xi,_height-1,color,opacity,pattern_x); > } > if (values_y) for (unsigned long y = 0, _maxy = (values_y).size(); y<_maxy; ++y) { > const int yi = (int)values_y[y]; > if (yi>=0 && yi<height()) draw_line(0,yi,_width-1,yi,color,opacity,pattern_y); > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_grid(const float delta_x, const float delta_y, > const float offsetx, const float offsety, > const bool invertx, const bool inverty, > const tc *const color, const float opacity=1, > const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U) { > if (is_empty()) return *this; > CImg<uintT> seqx, seqy; > if (delta_x!=0) { > const float dx = delta_x>0?delta_x:_width*-delta_x/100; > const unsigned int nx = (unsigned int)(_width/dx); > seqx = CImg<uintT>::sequence(1+nx,0,(unsigned int)(dx*nx)); > if (offsetx) for (unsigned long x = 0, _maxx = (seqx).size(); x<_maxx; ++x) seqx(x) = (unsigned int)cimg::mod(seqx(x)+offsetx,(float)_width); > if (invertx) for (unsigned long x = 0, _maxx = (seqx).size(); x<_maxx; ++x) seqx(x) = _width - 1 - seqx(x); > } > if (delta_y!=0) { > const float dy = delta_y>0?delta_y:_height*-delta_y/100; > const unsigned int ny = (unsigned int)(_height/dy); > seqy = CImg<uintT>::sequence(1+ny,0,(unsigned int)(dy*ny)); > if (offsety) for (unsigned long y = 0, _maxy = (seqy).size(); y<_maxy; ++y) seqy(y) = (unsigned int)cimg::mod(seqy(y)+offsety,(float)_height); > if (inverty) for (unsigned long y = 0, _maxy = (seqy).size(); y<_maxy; ++y) seqy(y) = _height - 1 - seqy(y); > } > return draw_grid(seqx,seqy,color,opacity,pattern_x,pattern_y); > } ># 33628 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_graph(const CImg<t>& data, > const tc *const color, const float opacity=1, > const unsigned int plot_type=1, const int vertex_type=1, > const double ymin=0, const double ymax=0, const unsigned int pattern=~0U) { > if (is_empty() || _height<=1) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_graph(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > > CImg<tc> color1, color2; > if (plot_type==3) { > color1.assign(_spectrum); color2.assign(_spectrum); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { color1[c] = (tc)cimg::min((float)cimg::type<tc>::max(),color[c]*1.2f); color2[c] = (tc)(color[c]*0.4f); } > } > > > const unsigned long > siz = data.size(), > _siz1 = siz - (plot_type!=3?1:0), > siz1 = _siz1?_siz1:1; > const unsigned int > _width1 = _width - (plot_type!=3?1:0), > width1 = _width1?_width1:1; > double m = ymin, M = ymax; > if (ymin==ymax) m = (double)data.max_min(M); > if (m==M) { --m; ++M; } > const float ca = (float)(M-m)/(_height-1); > bool init_hatch = true; > > > switch (plot_type%4) { > case 1 : { > int oX = 0, oY = (int)((data[0]-m)/ca); > const float fx = (float)_width1/siz1; > if (siz==1) { > const int Y = (int)((*data-m)/ca); > draw_line(0,Y,width()-1,Y,color,opacity,pattern); > } else for (unsigned long off = 1; off<siz; ++off) { > const int > X = (int)(off*fx), > Y = (int)((data[off]-m)/ca); > draw_line(oX,oY,X,Y,color,opacity,pattern,init_hatch); > oX = X; oY = Y; > init_hatch = false; > } > } break; > case 2 : { > const CImg<t> ndata(data._data,siz,1,1,1,true); > int oY = (int)((data[0]-m)/ca); > for (int x = 0; x<(int)((*this)._width); ++x) { > const int Y = (int)((ndata._cubic_atX((float)x*siz1/width1)-m)/ca); > if (x>0) draw_line(x,oY,x+1,Y,color,opacity,pattern,init_hatch); > init_hatch = false; > oY = Y; > } > } break; > case 3 : { > const int Y0 = (int)(-m/ca); > const float fx = (float)_width/(siz-1); > int oX = 0; > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)((off+1)*fx), > Y = (int)((data[off]-m)/ca); > draw_rectangle(oX,Y0,X,Y,color,opacity). > draw_line(oX,Y,oX,Y0,color2.data(),opacity). > draw_line(oX,Y0,X,Y0,Y<=Y0?color2.data():color1.data(),opacity). > draw_line(X,Y,X,Y0,color1.data(),opacity). > draw_line(oX,Y,X,Y,Y<=Y0?color1.data():color2.data(),opacity); > oX = X+1; > } > } break; > default : break; > } > > > const unsigned int wb2 = plot_type==3?_width1/(2*siz):0; > const float fx = (float)_width1/siz1; > switch (vertex_type%8) { > case 1 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_point(X,Y,color,opacity); > } > } break; > case 2 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_line(X-3,Y,X+3,Y,color,opacity).draw_line(X,Y-3,X,Y+3,color,opacity); > } > } break; > case 3 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_line(X-3,Y-3,X+3,Y+3,color,opacity).draw_line(X-3,Y+3,X+3,Y-3,color,opacity); > } > } break; > case 4 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_circle(X,Y,3,color,opacity); > } > } break; > case 5 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_circle(X,Y,3,color,opacity,0U); > } > } break; > case 6 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_rectangle(X-3,Y-3,X+3,Y+3,color,opacity,~0U); > } > } break; > case 7 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_line(X,Y-4,X+4,Y,color,opacity). > draw_line(X+4,Y,X,Y+4,color,opacity). > draw_line(X,Y+4,X-4,Y,color,opacity). > draw_line(X-4,Y,X,Y-4,color,opacity); > } > } break; > default : break; > } > return *this; > } ># 33786 "./CImg.h" > template<typename tc, typename t> > CImg<T>& draw_fill(const int x, const int y, const int z, > const tc *const color, const float opacity, > CImg<t>& region, const float sigma=0, > const bool is_high_connexity=false) { ># 33817 "./CImg.h" > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_fill(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > region.assign(_width,_height,_depth,1,(t)0); > if (x>=0 && x<width() && y>=0 && y<height() && z>=0 && z<depth()) { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const unsigned long whd = (unsigned long)_width*_height*_depth, siz = (unsigned long)_spectrum*whd; > const unsigned int W1 = _width-1, H1 = _height-1, D1 = _depth-1; > const bool is_3d = (_depth>1); > const CImg<T> reference_color = get_vector_at(x,y,z); > CImg<uintT> remaining(3,512,1,1,0); > remaining(0,0) = x; remaining(1,0) = y; remaining(2,0) = z; > unsigned int posr0 = 0, posr1 = 1; > region(x,y,z) = (t)1; > const t noregion = ((t)1==(t)2)?(t)0:(t)(-1); > if (is_3d) do { > const unsigned int *pcurr = remaining.data(0,posr0++), xc = *(pcurr++), yc = *(pcurr++), zc = *(pcurr++); > if (posr0>=512) { remaining.shift(0,-(int)posr0); posr1-=posr0; posr0 = 0; } > bool cont, res; > unsigned int nxc = xc; > do { > { const tc *col = color; T *ptrd = data(nxc,yc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (yc!=0) { const unsigned int tx = nxc, ty = yc-1, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = nxc, ty = yc+1, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc!=0) { const unsigned int tx = nxc, ty = yc, tz = zc-1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc<D1) { const unsigned int tx = nxc, ty = yc, tz = zc+1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (nxc) { --nxc; if (region(nxc,yc,zc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(nxc,yc,zc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(nxc,yc,zc) = (t)(cont?1:noregion); }; } else cont = false; > } while (cont); > nxc = xc; > do { > if ((++nxc)<=W1) { if (region(nxc,yc,zc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(nxc,yc,zc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(nxc,yc,zc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(nxc,yc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (yc!=0) { const unsigned int tx = nxc, ty = yc-1, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = nxc, ty = yc+1, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc!=0) { const unsigned int tx = nxc, ty = yc, tz = zc-1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc<D1) { const unsigned int tx = nxc, ty = yc, tz = zc+1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > unsigned int nyc = yc; > do { > if (nyc) { --nyc; if (region(xc,nyc,zc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,nyc,zc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,nyc,zc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = nyc, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = nyc, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc!=0) { const unsigned int tx = xc, ty = nyc, tz = zc-1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc<D1) { const unsigned int tx = xc, ty = nyc, tz = zc+1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > nyc = yc; > do { > if ((++nyc)<=H1) { if (region(xc,nyc,zc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,nyc,zc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,nyc,zc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = nyc, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = nyc, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc!=0) { const unsigned int tx = xc, ty = nyc, tz = zc-1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc<D1) { const unsigned int tx = xc, ty = nyc, tz = zc+1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > unsigned int nzc = zc; > do { > if (nzc) { --nzc; if (region(xc,yc,nzc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,yc,nzc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,yc,nzc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,yc,nzc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = yc, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = yc, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc!=0) { const unsigned int tx = xc, ty = yc-1, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = xc, ty = yc+1, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > nzc = zc; > do { > if ((++nzc)<=D1) { if (region(xc,yc,nzc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,yc,nzc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,yc,nzc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = yc, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = yc, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc!=0) { const unsigned int tx = xc, ty = yc-1, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = xc, ty = yc+1, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > } while (posr1>posr0); > else do { > const unsigned int *pcurr = remaining.data(0,posr0++), xc = *(pcurr++), yc = *(pcurr++); > if (posr0>=512) { remaining.shift(0,-(int)posr0); posr1-=posr0; posr0 = 0; } > bool cont, res; > unsigned int nxc = xc; > do { > { const tc *col = color; T *ptrd = data(nxc,yc,0); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (yc!=0) { const unsigned int tx = nxc, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = nxc, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (is_high_connexity) { > if ((nxc!=0 && yc!=0)) { const unsigned int tx = nxc-1, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc<W1 && yc!=0)) { const unsigned int tx = nxc+1, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc!=0 && yc<H1)) { const unsigned int tx = nxc-1, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc<W1 && yc<H1)) { const unsigned int tx = nxc+1, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > if (nxc) { --nxc; if (region(nxc,yc,0)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(nxc,yc,0) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(nxc,yc,0) = (t)(cont?1:noregion); }; } else cont = false; > } while (cont); > nxc = xc; > do { > if ((++nxc)<=W1) { if (region(nxc,yc,0)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(nxc,yc,0) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(nxc,yc,0) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(nxc,yc,0); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (yc!=0) { const unsigned int tx = nxc, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = nxc, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (is_high_connexity) { > if ((nxc!=0 && yc!=0)) { const unsigned int tx = nxc-1, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc<W1 && yc!=0)) { const unsigned int tx = nxc+1, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc!=0 && yc<H1)) { const unsigned int tx = nxc-1, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc<W1 && yc<H1)) { const unsigned int tx = nxc+1, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } > } while (cont); > unsigned int nyc = yc; > do { > if (nyc) { --nyc; if (region(xc,nyc,0)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,nyc,0) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,nyc,0) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,0); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = nyc, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = nyc, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (is_high_connexity) { > if ((xc!=0 && nyc!=0)) { const unsigned int tx = xc-1, ty = nyc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc<W1 && nyc!=0)) { const unsigned int tx = xc+1, ty = nyc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc!=0 && nyc<H1)) { const unsigned int tx = xc-1, ty = nyc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc<W1 && nyc<H1)) { const unsigned int tx = xc+1, ty = nyc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } > } while (cont); > nyc = yc; > do { > if ((++nyc)<=H1) { if (region(xc,nyc,0)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,nyc,0) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,nyc,0) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,0); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = nyc, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = nyc, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (is_high_connexity) { > if ((xc!=0 && nyc!=0)) { const unsigned int tx = xc-1, ty = nyc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc<W1 && nyc!=0)) { const unsigned int tx = xc+1, ty = nyc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc!=0 && nyc<H1)) { const unsigned int tx = xc-1, ty = nyc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc<W1 && nyc<H1)) { const unsigned int tx = xc+1, ty = nyc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } > } while (cont); > } while (posr1>posr0); > if (noregion) for (t *ptrd = (region)._data, *_maxptrd = (region)._data + (region).size(); ptrd<_maxptrd; ++ptrd) if (*ptrd==noregion) *ptrd = (t)0; > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_fill(const int x, const int y, const int z, > const tc *const color, const float opacity=1, > const float sigma=0, const bool is_high_connexity=false) { > CImg<boolT> tmp; > return draw_fill(x,y,z,color,opacity,tmp,sigma,is_high_connexity); > } > > > template<typename tc> > CImg<T>& draw_fill(const int x, const int y, > const tc *const color, const float opacity=1, > const float sigma=0, const bool is_high_connexity=false) { > CImg<boolT> tmp; > return draw_fill(x,y,0,color,opacity,tmp,sigma,is_high_connexity); > } ># 33996 "./CImg.h" > CImg<T>& draw_plasma(const float alpha=1, const float beta=0, const unsigned int scale=8) { > if (is_empty()) return *this; > const int w = width(), h = height(); > const Tfloat m = (Tfloat)cimg::type<T>::min(), M = (Tfloat)cimg::type<T>::max(); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > CImg<T> ref = get_shared_slice(z,c); > for (int delta = 1<<cimg::min(scale,31U); delta>1; delta>>=1) { > const int delta2 = delta>>1; > const float r = alpha*delta + beta; > > > for (int y0 = 0; y0<h; y0+=delta) > for (int x0 = 0; x0<w; x0+=delta) { > const int x1 = (x0 + delta)%w, y1 = (y0 + delta)%h, xc = (x0 + delta2)%w, yc = (y0 + delta2)%h; > const Tfloat val = (Tfloat)(0.25f*(ref(x0,y0) + ref(x0,y1) + ref(x0,y1) + ref(x1,y1)) + r*cimg::crand()); > ref(xc,yc) = (T)(val<m?m:val>M?M:val); > } > > > for (int y = -delta2; y<h; y+=delta) > for (int x0=0; x0<w; x0+=delta) { > const int y0 = cimg::mod(y,h), x1 = (x0 + delta)%w, y1 = (y + delta)%h, xc = (x0 + delta2)%w, yc = (y + delta2)%h; > const Tfloat val = (Tfloat)(0.25f*(ref(xc,y0) + ref(x0,yc) + ref(xc,y1) + ref(x1,yc)) + r*cimg::crand()); > ref(xc,yc) = (T)(val<m?m:val>M?M:val); > } > for (int y0 = 0; y0<h; y0+=delta) > for (int x = -delta2; x<w; x+=delta) { > const int x0 = cimg::mod(x,w), x1 = (x + delta)%w, y1 = (y0 + delta)%h, xc = (x + delta2)%w, yc = (y0 + delta2)%h; > const Tfloat val = (Tfloat)(0.25f*(ref(xc,y0) + ref(x0,yc) + ref(xc,y1) + ref(x1,yc)) + r*cimg::crand()); > ref(xc,yc) = (T)(val<m?m:val>M?M:val); > } > for (int y = -delta2; y<h; y+=delta) > for (int x = -delta2; x<w; x+=delta) { > const int x0 = cimg::mod(x,w), y0 = cimg::mod(y,h), x1 = (x + delta)%w, y1 = (y + delta)%h, xc = (x + delta2)%w, yc = (y + delta2)%h; > const Tfloat val = (Tfloat)(0.25f*(ref(xc,y0) + ref(x0,yc) + ref(xc,y1) + ref(x1,yc)) + r*cimg::crand()); > ref(xc,yc) = (T)(val<m?m:val>M?M:val); > } > } > } > return *this; > } ># 34057 "./CImg.h" > template<typename tc> > CImg<T>& draw_mandelbrot(const int x0, const int y0, const int x1, const int y1, > const CImg<tc>& colormap, const float opacity=1, > const double z0r=-2, const double z0i=-2, const double z1r=2, const double z1i=2, > const unsigned int iteration_max=255, > const bool is_normalized_iteration=false, > const bool is_julia_set=false, > const double param_r=0, const double param_i=0) { > if (is_empty()) return *this; > CImg<tc> palette; > if (colormap) palette.assign(colormap._data,colormap.size()/colormap._spectrum,1,1,colormap._spectrum,true); > if (palette && palette._spectrum!=_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_mandelbrot(): Instance and specified colormap (%u,%u,%u,%u,%p) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); > > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), ln2 = (float)std::log(2.0); > const int > _x0 = x0<0?0:x0>=width()?width()-1:x0, > _y0 = y0<0?0:y0>=height()?height()-1:y0, > _x1 = x1<0?1:x1>=width()?width()-1:x1, > _y1 = y1<0?1:y1>=height()?height()-1:y1; ># 34081 "./CImg.h" > ># 34081 "./CImg.h" >#pragma omp parallel for collapse(2) if ((1+_x1-_x0)*(1+_y1-_y0)>=2048) ># 34081 "./CImg.h" ># 34081 "./CImg.h" > > > for (int q = _y0; q<=_y1; ++q) > for (int p = _x0; p<=_x1; ++p) { > unsigned int iteration = 0; > const double x = z0r + p*(z1r-z0r)/_width, y = z0i + q*(z1i-z0i)/_height; > double zr, zi, cr, ci; > if (is_julia_set) { zr = x; zi = y; cr = param_r; ci = param_i; } > else { zr = param_r; zi = param_i; cr = x; ci = y; } > for (iteration=1; zr*zr + zi*zi<=4 && iteration<=iteration_max; ++iteration) { > const double temp = zr*zr - zi*zi + cr; > zi = 2*zr*zi + ci; > zr = temp; > } > if (iteration>iteration_max) { > if (palette) { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)palette(0,c); > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(palette(0,c)*nopacity + (*this)(p,q,0,c)*copacity); > } else { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)0; > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)((*this)(p,q,0,c)*copacity); > } > } else if (is_normalized_iteration) { > const float > normz = (float)cimg::abs(zr*zr+zi*zi), > niteration = (float)(iteration + 1 - std::log(std::log(normz))/ln2); > if (palette) { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)palette._linear_atX(niteration,c); > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(palette._linear_atX(niteration,c)*nopacity + (*this)(p,q,0,c)*copacity); > } else { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)niteration; > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(niteration*nopacity + (*this)(p,q,0,c)*copacity); > } > } else { > if (palette) { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)palette._atX(iteration,c); > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(palette(iteration,c)*nopacity + (*this)(p,q,0,c)*copacity); > } else { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)iteration; > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(iteration*nopacity + (*this)(p,q,0,c)*copacity); > } > } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_mandelbrot(const CImg<tc>& colormap, const float opacity=1, > const double z0r=-2, const double z0i=-2, const double z1r=2, const double z1i=2, > const unsigned int iteration_max=255, > const bool is_normalized_iteration=false, > const bool is_julia_set=false, > const double param_r=0, const double param_i=0) { > return draw_mandelbrot(0,0,_width-1,_height-1,colormap,opacity, > z0r,z0i,z1r,z1i,iteration_max,is_normalized_iteration,is_julia_set,param_r,param_i); > } ># 34146 "./CImg.h" > template<typename tc> > CImg<T>& draw_gaussian(const float xc, const float sigma, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_gaussian(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const float sigma2 = 2*sigma*sigma, nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const tc *col = color; > for (int x = 0; x<(int)((*this)._width); ++x) { > const float dx = (x - xc), val = (float)std::exp(-dx*dx/sigma2); > T *ptrd = data(x,0,0,0); > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } > col-=_spectrum; > } > return *this; > } ># 34175 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_gaussian(const float xc, const float yc, const CImg<t>& tensor, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (tensor._width!=2 || tensor._height!=2 || tensor._depth!=1 || tensor._spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_gaussian(): Specified tensor (%u,%u,%u,%u,%p) is not a 2x2 matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > tensor._width,tensor._height,tensor._depth,tensor._spectrum,tensor._data); > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_gaussian(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > typedef typename CImg<t>::Tfloat tfloat; > const CImg<tfloat> invT = tensor.get_invert(), invT2 = (invT*invT)/(-2.0); > const tfloat a = invT2(0,0), b = 2*invT2(1,0), c = invT2(1,1); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const tc *col = color; > float dy = -yc; > for (int y = 0; y<(int)((*this)._height); ++y) { > float dx = -xc; > for (int x = 0; x<(int)((*this)._width); ++x) { > const float val = (float)std::exp(a*dx*dx + b*dx*dy + c*dy*dy); > T *ptrd = data(x,y,0,0); > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } > col-=_spectrum; > ++dx; > } > ++dy; > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_gaussian(const int xc, const int yc, const float r1, const float r2, const float ru, const float rv, > const tc *const color, const float opacity=1) { > const double > a = r1*ru*ru + r2*rv*rv, > b = (r1-r2)*ru*rv, > c = r1*rv*rv + r2*ru*ru; > const CImg<Tfloat> tensor(2,2,1,1, a,b,b,c); > return draw_gaussian(xc,yc,tensor,color,opacity); > } > > > template<typename tc> > CImg<T>& draw_gaussian(const float xc, const float yc, const float sigma, > const tc *const color, const float opacity=1) { > return draw_gaussian(xc,yc,CImg<floatT>::diagonal(sigma,sigma),color,opacity); > } > > > template<typename t, typename tc> > CImg<T>& draw_gaussian(const float xc, const float yc, const float zc, const CImg<t>& tensor, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > typedef typename CImg<t>::Tfloat tfloat; > if (tensor._width!=3 || tensor._height!=3 || tensor._depth!=1 || tensor._spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_gaussian(): Specified tensor (%u,%u,%u,%u,%p) is not a 3x3 matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > tensor._width,tensor._height,tensor._depth,tensor._spectrum,tensor._data); > > const CImg<tfloat> invT = tensor.get_invert(), invT2 = (invT*invT)/(-2.0); > const tfloat a = invT2(0,0), b = 2*invT2(1,0), c = 2*invT2(2,0), d = invT2(1,1), e = 2*invT2(2,1), f = invT2(2,2); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const tc *col = color; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float > dx = (x - xc), dy = (y - yc), dz = (z - zc), > val = (float)std::exp(a*dx*dx + b*dx*dy + c*dx*dz + d*dy*dy + e*dy*dz + f*dz*dz); > T *ptrd = data(x,y,z,0); > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } > col-=_spectrum; > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_gaussian(const float xc, const float yc, const float zc, const float sigma, > const tc *const color, const float opacity=1) { > return draw_gaussian(xc,yc,zc,CImg<floatT>::diagonal(sigma,sigma,sigma),color,opacity); > } ># 34283 "./CImg.h" > template<typename tp, typename tf, typename tc, typename to> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImg<to>& opacities, > const unsigned int render_type=4, > const bool is_double_sided=false, const float focale=700, > const float lightx=0, const float lighty=0, const float lightz=-5e8, > const float specular_lightness=0.2f, const float specular_shininess=0.1f) { > return draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_type,is_double_sided,focale,lightx,lighty,lightz, > specular_lightness,specular_shininess,CImg<floatT>::empty()); > } > > > template<typename tp, typename tf, typename tc, typename to, typename tz> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImg<to>& opacities, > const unsigned int render_type, > const bool is_double_sided, const float focale, > const float lightx, const float lighty, const float lightz, > const float specular_lightness, const float specular_shininess, > CImg<tz>& zbuffer) { > return _draw_object3d(0,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, > render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,1); > } ># 34339 "./CImg.h" > template<typename tp, typename tf, typename tc, typename to> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImgList<to>& opacities, > const unsigned int render_type=4, > const bool is_double_sided=false, const float focale=700, > const float lightx=0, const float lighty=0, const float lightz=-5e8, > const float specular_lightness=0.2f, const float specular_shininess=0.1f) { > return draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_type,is_double_sided,focale,lightx,lighty,lightz, > specular_lightness,specular_shininess,CImg<floatT>::empty()); > } > > > template<typename tp, typename tf, typename tc, typename to, typename tz> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImgList<to>& opacities, > const unsigned int render_type, > const bool is_double_sided, const float focale, > const float lightx, const float lighty, const float lightz, > const float specular_lightness, const float specular_shininess, > CImg<tz>& zbuffer) { > return _draw_object3d(0,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, > render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,1); > } ># 34395 "./CImg.h" > template<typename tp, typename tf, typename tc> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const unsigned int render_type=4, > const bool is_double_sided=false, const float focale=700, > const float lightx=0, const float lighty=0, const float lightz=-5e8, > const float specular_lightness=0.2f, const float specular_shininess=0.1f) { > return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg<floatT>::empty(), > render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,CImg<floatT>::empty()); > } > > > template<typename tp, typename tf, typename tc, typename tz> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const unsigned int render_type, > const bool is_double_sided, const float focale, > const float lightx, const float lighty, const float lightz, > const float specular_lightness, const float specular_shininess, > CImg<tz>& zbuffer) { > return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg<floatT>::empty(), > render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,zbuffer); > } ># 34450 "./CImg.h" > template<typename t, typename to> > static float __draw_object3d(const CImgList<t>& opacities, const unsigned int n_primitive, CImg<to>& opacity) { > if (n_primitive>=opacities._width || opacities[n_primitive].is_empty()) { opacity.assign(); return 1; } > if (opacities[n_primitive].size()==1) { opacity.assign(); return opacities(n_primitive,0); } > opacity.assign(opacities[n_primitive],true); > return 1.0f; > } > > template<typename t, typename to> > static float __draw_object3d(const CImg<t>& opacities, const unsigned int n_primitive, CImg<to>& opacity) { > opacity.assign(); > return n_primitive>=opacities._width?1.0f:(float)opacities[n_primitive]; > } > > template<typename tz, typename tp, typename tf, typename tc, typename to> > CImg<T>& _draw_object3d(void *const pboard, CImg<tz>& zbuffer, > const float X, const float Y, const float Z, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const unsigned int render_type, > const bool is_double_sided, const float focale, > const float lightx, const float lighty, const float lightz, > const float specular_lightness, const float specular_shininess, > const float sprite_scale) { > typedef typename cimg::superset2<tp,tz,float>::type tpfloat; > if (is_empty() || !vertices || !primitives) return *this; > char error_message[1024] = { 0 }; > if (!vertices.is_object3d(primitives,colors,opacities,false,error_message)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Invalid specified 3d object (%u,%u) (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),vertices._width,primitives._width,error_message); > if (render_type==5) cimg::mutex(10); > > > if (pboard) return *this; > > const float > nspec = 1 - (specular_lightness<0.0f?0.0f:(specular_lightness>1.0f?1.0f:specular_lightness)), > nspec2 = 1 + (specular_shininess<0.0f?0.0f:specular_shininess), > nsl1 = (nspec2 - 1)/cimg::sqr(nspec - 1), > nsl2 = 1 - 2*nsl1*nspec, > nsl3 = nspec2 - nsl1 - nsl2; > > > CImg<floatT> light_texture; > if (render_type==5) { > if (colors._width>primitives._width) { > static CImg<floatT> default_light_texture; > static const tc *lptr = 0; > static tc ref_values[64] = { 0 }; > const CImg<tc>& img = colors.back(); > bool is_same_texture = (lptr==img._data); > if (is_same_texture) > for (unsigned int r = 0, j = 0; j<8; ++j) > for (unsigned int i = 0; i<8; ++i) > if (ref_values[r++]!=img(i*img._width/9,j*img._height/9,0,(i+j)%img._spectrum)) { is_same_texture = false; break; } > if (!is_same_texture || default_light_texture._spectrum<_spectrum) { > (default_light_texture.assign(img,false)/=255).resize(-100,-100,1,_spectrum); > lptr = colors.back().data(); > for (unsigned int r = 0, j = 0; j<8; ++j) > for (unsigned int i = 0; i<8; ++i) > ref_values[r++] = img(i*img._width/9,j*img._height/9,0,(i+j)%img._spectrum); > } > light_texture.assign(default_light_texture,true); > } else { > static CImg<floatT> default_light_texture; > static float olightx = 0, olighty = 0, olightz = 0, ospecular_shininess = 0; > if (!default_light_texture || > lightx!=olightx || lighty!=olighty || lightz!=olightz || > specular_shininess!=ospecular_shininess || default_light_texture._spectrum<_spectrum) { > default_light_texture.assign(512,512); > const float > dlx = lightx - X, > dly = lighty - Y, > dlz = lightz - Z, > nl = (float)std::sqrt(dlx*dlx + dly*dly + dlz*dlz), > nlx = (default_light_texture._width - 1)/2*(1 + dlx/nl), > nly = (default_light_texture._height - 1)/2*(1 + dly/nl), > white[] = { 1 }; > default_light_texture.draw_gaussian(nlx,nly,default_light_texture._width/3.0f,white); > for (int y = 0; y<(int)((default_light_texture)._height); ++y) for (int x = 0; x<(int)((default_light_texture)._width); ++x) { > const float factor = default_light_texture(x,y); > if (factor>nspec) default_light_texture(x,y) = cimg::min(2,nsl1*factor*factor + nsl2*factor + nsl3); > } > default_light_texture.resize(-100,-100,1,_spectrum); > olightx = lightx; olighty = lighty; olightz = lightz; ospecular_shininess = specular_shininess; > } > light_texture.assign(default_light_texture,true); > } > } > > > CImg<tpfloat> projections(vertices._width,2); > tpfloat parallzmin = cimg::type<tpfloat>::max(); > const float absfocale = focale?cimg::abs(focale):0; > if (absfocale) { ># 34549 "./CImg.h" > ># 34549 "./CImg.h" >#pragma omp parallel for if (projections.size()>4096) ># 34549 "./CImg.h" ># 34549 "./CImg.h" > > > for (int l = 0; l<(int)((projections)._width); ++l) { > const tpfloat > x = (tpfloat)vertices(l,0), > y = (tpfloat)vertices(l,1), > z = (tpfloat)vertices(l,2); > const tpfloat projectedz = z + Z + absfocale; > projections(l,1) = Y + absfocale*y/projectedz; > projections(l,0) = X + absfocale*x/projectedz; > } > > } else { ># 34563 "./CImg.h" > ># 34563 "./CImg.h" >#pragma omp parallel for if (projections.size()>4096) ># 34563 "./CImg.h" ># 34563 "./CImg.h" > > > for (int l = 0; l<(int)((projections)._width); ++l) { > const tpfloat > x = (tpfloat)vertices(l,0), > y = (tpfloat)vertices(l,1), > z = (tpfloat)vertices(l,2); > if (z<parallzmin) parallzmin = z; > projections(l,1) = Y + y; > projections(l,0) = X + x; > } > } > const float _focale = absfocale?absfocale:(1e5f-parallzmin); > > > CImg<uintT> visibles(primitives._width,1,1,1,~0U); > CImg<tpfloat> zrange(primitives._width); > const tpfloat zmin = absfocale?(tpfloat)(1.5f - absfocale):cimg::type<tpfloat>::min(); ># 34583 "./CImg.h" > ># 34583 "./CImg.h" >#pragma omp parallel for if (primitives.size()>4096) ># 34583 "./CImg.h" ># 34583 "./CImg.h" > > > for (int l = 0; l<(int)(primitives)._width; ++l) { > const CImg<tf>& primitive = primitives[l]; > switch (primitive.size()) { > case 1 : { > const unsigned int i0 = (unsigned int)primitive(0); > const tpfloat z0 = Z + vertices(i0,2); > if (z0>zmin) { > visibles(l) = (unsigned int)l; > zrange(l) = z0; > } > } break; > case 5 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1); > const tpfloat > Xc = 0.5f*((float)vertices(i0,0) + (float)vertices(i1,0)), > Yc = 0.5f*((float)vertices(i0,1) + (float)vertices(i1,1)), > Zc = 0.5f*((float)vertices(i0,2) + (float)vertices(i1,2)), > _zc = Z + Zc, > zc = _zc + _focale, > xc = X + Xc*(absfocale?absfocale/zc:1), > yc = Y + Yc*(absfocale?absfocale/zc:1), > radius = 0.5f*std::sqrt(cimg::sqr(vertices(i1,0) - vertices(i0,0)) + > cimg::sqr(vertices(i1,1) - vertices(i0,1)) + > cimg::sqr(vertices(i1,2) - vertices(i0,2)))*(absfocale?absfocale/zc:1), > xm = xc - radius, > ym = yc - radius, > xM = xc + radius, > yM = yc + radius; > if (xM>=0 && xm<_width && yM>=0 && ym<_height && _zc>zmin) { > visibles(l) = (unsigned int)l; > zrange(l) = _zc; > } > } break; > case 2 : > case 6 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1); > const tpfloat > x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), > x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2); > tpfloat xm, xM, ym, yM; > if (x0<x1) { xm = x0; xM = x1; } else { xm = x1; xM = x0; } > if (y0<y1) { ym = y0; yM = y1; } else { ym = y1; yM = y0; } > if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin) { > visibles(l) = (unsigned int)l; > zrange(l) = (z0 + z1)/2; > } > } break; > case 3 : > case 9 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2); > const tpfloat > x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), > x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2), > x2 = projections(i2,0), y2 = projections(i2,1), z2 = Z + vertices(i2,2); > tpfloat xm, xM, ym, yM; > if (x0<x1) { xm = x0; xM = x1; } else { xm = x1; xM = x0; } > if (x2<xm) xm = x2; > if (x2>xM) xM = x2; > if (y0<y1) { ym = y0; yM = y1; } else { ym = y1; yM = y0; } > if (y2<ym) ym = y2; > if (y2>yM) yM = y2; > if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin && z2>zmin) { > const tpfloat d = (x1-x0)*(y2-y0) - (x2-x0)*(y1-y0); > if (is_double_sided || d<0) { > visibles(l) = (unsigned int)l; > zrange(l) = (z0 + z1 + z2)/3; > } > } > } break; > case 4 : > case 12 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2), > i3 = (unsigned int)primitive(3); > const tpfloat > x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), > x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2), > x2 = projections(i2,0), y2 = projections(i2,1), z2 = Z + vertices(i2,2), > x3 = projections(i3,0), y3 = projections(i3,1), z3 = Z + vertices(i3,2); > tpfloat xm, xM, ym, yM; > if (x0<x1) { xm = x0; xM = x1; } else { xm = x1; xM = x0; } > if (x2<xm) xm = x2; > if (x2>xM) xM = x2; > if (x3<xm) xm = x3; > if (x3>xM) xM = x3; > if (y0<y1) { ym = y0; yM = y1; } else { ym = y1; yM = y0; } > if (y2<ym) ym = y2; > if (y2>yM) yM = y2; > if (y3<ym) ym = y3; > if (y3>yM) yM = y3; > if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin && z2>zmin) { > const float d = (x1 - x0)*(y2 - y0) - (x2 - x0)*(y1 - y0); > if (is_double_sided || d<0) { > visibles(l) = (unsigned int)l; > zrange(l) = (z0 + z1 + z2 + z3)/4; > } > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Invalid primitive[%u] with size %u " > "(should have size 1,2,3,4,5,6,9 or 12).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > l,primitive.size()); > } > } > > > unsigned int *p_visibles = visibles._data; > float *p_zrange = zrange._data; > const float *ptrz = p_zrange; > for (unsigned int *ptr = (visibles)._data, *_maxptr = (visibles)._data + (visibles).size(); ptr<_maxptr; ++ptr) { > if (*ptr!=~0U) { *(p_visibles++) = *ptr; *(p_zrange++) = *ptrz; } > ++ptrz; > } > const unsigned int nb_visibles = p_zrange - zrange._data; > if (!nb_visibles) return *this; > CImg<uintT> permutations; > CImg<tpfloat>(zrange._data,nb_visibles,1,1,1,true).sort(permutations,false); > > > CImg<floatT> lightprops; > switch (render_type) { > case 3 : { > lightprops.assign(nb_visibles); ># 34720 "./CImg.h" > ># 34720 "./CImg.h" >#pragma omp parallel for if (nb_visibles>4096) ># 34720 "./CImg.h" ># 34720 "./CImg.h" > > > for (int l = 0; l<(int)((lightprops)._width); ++l) { > const CImg<tf>& primitive = primitives(visibles(permutations(l))); > const unsigned int psize = primitive.size(); > if (psize==3 || psize==4 || psize==9 || psize==12) { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2); > const tpfloat > x0 = (tpfloat)vertices(i0,0), y0 = (tpfloat)vertices(i0,1), z0 = (tpfloat)vertices(i0,2), > x1 = (tpfloat)vertices(i1,0), y1 = (tpfloat)vertices(i1,1), z1 = (tpfloat)vertices(i1,2), > x2 = (tpfloat)vertices(i2,0), y2 = (tpfloat)vertices(i2,1), z2 = (tpfloat)vertices(i2,2), > dx1 = x1 - x0, dy1 = y1 - y0, dz1 = z1 - z0, > dx2 = x2 - x0, dy2 = y2 - y0, dz2 = z2 - z0, > nx = dy1*dz2 - dz1*dy2, > ny = dz1*dx2 - dx1*dz2, > nz = dx1*dy2 - dy1*dx2, > norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), > lx = X + (x0 + x1 + x2)/3 - lightx, > ly = Y + (y0 + y1 + y2)/3 - lighty, > lz = Z + (z0 + z1 + z2)/3 - lightz, > nl = (tpfloat)std::sqrt(1e-5f + lx*lx + ly*ly + lz*lz), > factor = cimg::max(cimg::abs(-lx*nx-ly*ny-lz*nz)/(norm*nl),0); > lightprops[l] = factor<=nspec?factor:(nsl1*factor*factor + nsl2*factor + nsl3); > } else lightprops[l] = 1; > } > } break; > > case 4 : > case 5 : { > CImg<tpfloat> vertices_normals(vertices._width,3,1,1,0); ># 34754 "./CImg.h" > ># 34754 "./CImg.h" >#pragma omp parallel for if (nb_visibles>4096) ># 34754 "./CImg.h" ># 34754 "./CImg.h" > > > for (unsigned int l = 0; l<nb_visibles; ++l) { > const CImg<tf>& primitive = primitives[visibles(l)]; > const unsigned int psize = primitive.size(); > const bool > triangle_flag = (psize==3) || (psize==9), > rectangle_flag = (psize==4) || (psize==12); > if (triangle_flag || rectangle_flag) { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2), > i3 = rectangle_flag?(unsigned int)primitive(3):0; > const tpfloat > x0 = (tpfloat)vertices(i0,0), y0 = (tpfloat)vertices(i0,1), z0 = (tpfloat)vertices(i0,2), > x1 = (tpfloat)vertices(i1,0), y1 = (tpfloat)vertices(i1,1), z1 = (tpfloat)vertices(i1,2), > x2 = (tpfloat)vertices(i2,0), y2 = (tpfloat)vertices(i2,1), z2 = (tpfloat)vertices(i2,2), > dx1 = x1 - x0, dy1 = y1 - y0, dz1 = z1 - z0, > dx2 = x2 - x0, dy2 = y2 - y0, dz2 = z2 - z0, > nnx = dy1*dz2 - dz1*dy2, > nny = dz1*dx2 - dx1*dz2, > nnz = dx1*dy2 - dy1*dx2, > norm = (tpfloat)(1e-5f + std::sqrt(nnx*nnx + nny*nny + nnz*nnz)), > nx = nnx/norm, > ny = nny/norm, > nz = nnz/norm; > vertices_normals(i0,0)+=nx; vertices_normals(i0,1)+=ny; vertices_normals(i0,2)+=nz; > vertices_normals(i1,0)+=nx; vertices_normals(i1,1)+=ny; vertices_normals(i1,2)+=nz; > vertices_normals(i2,0)+=nx; vertices_normals(i2,1)+=ny; vertices_normals(i2,2)+=nz; > if (rectangle_flag) { vertices_normals(i3,0)+=nx; vertices_normals(i3,1)+=ny; vertices_normals(i3,2)+=nz; } > } > } > > if (is_double_sided) for (int p = 0; p<(int)((vertices_normals)._width); ++p) if (vertices_normals(p,2)>0) { > vertices_normals(p,0) = -vertices_normals(p,0); > vertices_normals(p,1) = -vertices_normals(p,1); > vertices_normals(p,2) = -vertices_normals(p,2); > } > > if (render_type==4) { > lightprops.assign(vertices._width); ># 34797 "./CImg.h" > ># 34797 "./CImg.h" >#pragma omp parallel for if (nb_visibles>4096) ># 34797 "./CImg.h" ># 34797 "./CImg.h" > > > for (int l = 0; l<(int)((lightprops)._width); ++l) { > const tpfloat > nx = vertices_normals(l,0), > ny = vertices_normals(l,1), > nz = vertices_normals(l,2), > norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), > lx = X + vertices(l,0) - lightx, > ly = Y + vertices(l,1) - lighty, > lz = Z + vertices(l,2) - lightz, > nl = (tpfloat)std::sqrt(1e-5f + lx*lx + ly*ly + lz*lz), > factor = cimg::max((-lx*nx-ly*ny-lz*nz)/(norm*nl),0); > lightprops[l] = factor<=nspec?factor:(nsl1*factor*factor + nsl2*factor + nsl3); > } > } else { > const unsigned int > lw2 = light_texture._width/2 - 1, > lh2 = light_texture._height/2 - 1; > lightprops.assign(vertices._width,2); ># 34818 "./CImg.h" > ># 34818 "./CImg.h" >#pragma omp parallel for if (nb_visibles>4096) ># 34818 "./CImg.h" ># 34818 "./CImg.h" > > > for (int l = 0; l<(int)((lightprops)._width); ++l) { > const tpfloat > nx = vertices_normals(l,0), > ny = vertices_normals(l,1), > nz = vertices_normals(l,2), > norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), > nnx = nx/norm, > nny = ny/norm; > lightprops(l,0) = lw2*(1 + nnx); > lightprops(l,1) = lh2*(1 + nny); > } > } > } break; > } > > > const CImg<tc> default_color(1,_spectrum,1,1,(tc)200); > typedef typename to::value_type _to; > CImg<_to> _opacity; > > for (unsigned int l = 0; l<nb_visibles; ++l) { > const unsigned int n_primitive = visibles(permutations(l)); > const CImg<tf>& primitive = primitives[n_primitive]; > const CImg<tc> > &__color = n_primitive<colors._width?colors[n_primitive]:CImg<tc>(), > _color = (__color && __color.size()!=_spectrum && __color._spectrum<_spectrum)?__color.get_resize(-100,-100,-100,_spectrum,0):CImg<tc>(), > &color = _color?_color:(__color?__color:default_color); > const tc *const pcolor = color._data; > const float opacity = __draw_object3d(opacities,n_primitive,_opacity); > > > > > > switch (primitive.size()) { > case 1 : { > const unsigned int n0 = (unsigned int)primitive[0]; > const int x0 = (int)projections(n0,0), y0 = (int)projections(n0,1); > > if (_opacity.is_empty()) { > > if (color.size()==_spectrum) { > draw_point(x0,y0,pcolor,opacity); > > > > > > > } else { > const tpfloat z = Z + vertices(n0,2); > const float factor = focale<0?1:sprite_scale*(absfocale?absfocale/(z + absfocale):1); > const unsigned int > _sw = (unsigned int)(color._width*factor), > _sh = (unsigned int)(color._height*factor), > sw = _sw?_sw:1, sh = _sh?_sh:1; > const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; > if (sw<=3*_width/2 && sh<=3*_height/2 && (nx0+(int)sw/2>=0 || nx0-(int)sw/2<width() || ny0+(int)sh/2>=0 || ny0-(int)sh/2<height())) { > const CImg<tc> > _sprite = (sw!=color._width || sh!=color._height)?color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg<tc>(), > &sprite = _sprite?_sprite:color; > draw_image(nx0,ny0,sprite,opacity); > > > > > > > > } > } > } else { > const tpfloat z = Z + vertices(n0,2); > const float factor = focale<0?1:sprite_scale*(absfocale?absfocale/(z + absfocale):1); > const unsigned int > _sw = (unsigned int)(cimg::max(color._width,_opacity._width)*factor), > _sh = (unsigned int)(cimg::max(color._height,_opacity._height)*factor), > sw = _sw?_sw:1, sh = _sh?_sh:1; > const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; > if (sw<=3*_width/2 && sh<=3*_height/2 && (nx0+(int)sw/2>=0 || nx0-(int)sw/2<width() || ny0+(int)sh/2>=0 || ny0-(int)sh/2<height())) { > const CImg<tc> > _sprite = (sw!=color._width || sh!=color._height)?color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg<tc>(), > &sprite = _sprite?_sprite:color; > const CImg<_to> > _nopacity = (sw!=_opacity._width || sh!=_opacity._height)?_opacity.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg<_to>(), > &nopacity = _nopacity?_nopacity:_opacity; > draw_image(nx0,ny0,sprite,nopacity); > > > > > > > > } > } > } break; > case 2 : { > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale; > if (render_type) { > if (zbuffer) draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity); > else draw_line(x0,y0,x1,y1,pcolor,opacity); > > > > > > > } else { > draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity); > > > > > > > > } > } break; > case 5 : { > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > is_wireframe = (unsigned int)primitive[2]; > const float > Xc = 0.5f*((float)vertices(n0,0) + (float)vertices(n1,0)), > Yc = 0.5f*((float)vertices(n0,1) + (float)vertices(n1,1)), > Zc = 0.5f*((float)vertices(n0,2) + (float)vertices(n1,2)), > zc = Z + Zc + _focale, > xc = X + Xc*(absfocale?absfocale/zc:1), > yc = Y + Yc*(absfocale?absfocale/zc:1), > radius = 0.5f*std::sqrt(cimg::sqr(vertices(n1,0) - vertices(n0,0)) + > cimg::sqr(vertices(n1,1) - vertices(n0,1)) + > cimg::sqr(vertices(n1,2) - vertices(n0,2)))*(absfocale?absfocale/zc:1); > switch (render_type) { > case 0 : > draw_point((int)xc,(int)yc,pcolor,opacity); > > > > > > > break; > case 1 : > draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity,~0U); > > > > > > > > break; > default : > if (is_wireframe) draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity,~0U); > else draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity); ># 34995 "./CImg.h" > break; > } > } break; > case 6 : { > if (!__color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Undefined texture for line primitive [%u].", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),n_primitive); > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > tx0 = (unsigned int)primitive[2], > ty0 = (unsigned int)primitive[3], > tx1 = (unsigned int)primitive[4], > ty1 = (unsigned int)primitive[5]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale; > if (render_type) { > if (zbuffer) draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity); > else draw_line(x0,y0,x1,y1,color,tx0,ty0,tx1,ty1,opacity); > > > > > > > } else { > draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). > draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity); > > > > > > > > } > } break; > case 3 : { > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > n2 = (unsigned int)primitive[2]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), > x2 = (int)projections(n2,0), y2 = (int)projections(n2,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale, > z2 = vertices(n2,2) + Z + _focale; > switch (render_type) { > case 0 : > draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity).draw_point(x2,y2,pcolor,opacity); ># 35061 "./CImg.h" > break; > case 1 : > if (zbuffer) > draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity).draw_line(zbuffer,x0,y0,z0,x2,y2,z2,pcolor,opacity). > draw_line(zbuffer,x1,y1,z1,x2,y2,z2,pcolor,opacity); > else > draw_line(x0,y0,x1,y1,pcolor,opacity).draw_line(x0,y0,x2,y2,pcolor,opacity). > draw_line(x1,y1,x2,y2,pcolor,opacity); ># 35077 "./CImg.h" > break; > case 2 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity); > else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity); > > > > > > > break; > case 3 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity,lightprops(l)); > else _draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity,lightprops(l)); ># 35101 "./CImg.h" > break; > case 4 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,lightprops(n0),lightprops(n1),lightprops(n2),opacity); > else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,lightprops(n0),lightprops(n1),lightprops(n2),opacity); ># 35116 "./CImg.h" > break; > case 5 : { > const unsigned int > lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), > lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), > lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1); > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity); ># 35139 "./CImg.h" > } break; > } > } break; > case 4 : { > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > n2 = (unsigned int)primitive[2], > n3 = (unsigned int)primitive[3]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), > x2 = (int)projections(n2,0), y2 = (int)projections(n2,1), > x3 = (int)projections(n3,0), y3 = (int)projections(n3,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale, > z2 = vertices(n2,2) + Z + _focale, > z3 = vertices(n3,2) + Z + _focale; > > switch (render_type) { > case 0 : > draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity). > draw_point(x2,y2,pcolor,opacity).draw_point(x3,y3,pcolor,opacity); ># 35172 "./CImg.h" > break; > case 1 : > if (zbuffer) > draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity).draw_line(zbuffer,x1,y1,z1,x2,y2,z2,pcolor,opacity). > draw_line(zbuffer,x2,y2,z2,x3,y3,z3,pcolor,opacity).draw_line(zbuffer,x3,y3,z3,x0,y0,z0,pcolor,opacity); > else > draw_line(x0,y0,x1,y1,pcolor,opacity).draw_line(x1,y1,x2,y2,pcolor,opacity). > draw_line(x2,y2,x3,y3,pcolor,opacity).draw_line(x3,y3,x0,y0,pcolor,opacity); ># 35189 "./CImg.h" > break; > case 2 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity).draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,opacity); > else > draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity).draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,opacity); > > > > > > > > break; > case 3 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity,lightprops(l)). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,opacity,lightprops(l)); > else > _draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity,lightprops(l)). > _draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,opacity,lightprops(l)); ># 35220 "./CImg.h" > break; > case 4 : { > const float > lightprop0 = lightprops(n0), lightprop1 = lightprops(n1), > lightprop2 = lightprops(n2), lightprop3 = lightprops(n3); > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,lightprop0,lightprop1,lightprop2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,lightprop0,lightprop2,lightprop3,opacity); > else > draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,lightprop0,lightprop1,lightprop2,opacity). > draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,lightprop0,lightprop2,lightprop3,opacity); ># 35245 "./CImg.h" > } break; > case 5 : { > const unsigned int > lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), > lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), > lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1), > lx3 = (unsigned int)lightprops(n3,0), ly3 = (unsigned int)lightprops(n3,1); > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); > else > draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). > draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); ># 35277 "./CImg.h" > } break; > } > } break; > case 9 : { > if (!__color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Undefined texture for triangle primitive [%u].", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),n_primitive); > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > n2 = (unsigned int)primitive[2], > tx0 = (unsigned int)primitive[3], > ty0 = (unsigned int)primitive[4], > tx1 = (unsigned int)primitive[5], > ty1 = (unsigned int)primitive[6], > tx2 = (unsigned int)primitive[7], > ty2 = (unsigned int)primitive[8]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), > x2 = (int)projections(n2,0), y2 = (int)projections(n2,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale, > z2 = vertices(n2,2) + Z + _focale; > switch (render_type) { > case 0 : > draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). > draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity). > draw_point(x2,y2,color.get_vector_at(tx2,ty2)._data,opacity); ># 35316 "./CImg.h" > break; > case 1 : > if (zbuffer) > draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). > draw_line(zbuffer,x0,y0,z0,x2,y2,z2,color,tx0,ty0,tx2,ty2,opacity). > draw_line(zbuffer,x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity); > else > draw_line(x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). > draw_line(x0,y0,z0,x2,y2,z2,color,tx0,ty0,tx2,ty2,opacity). > draw_line(x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity); ># 35334 "./CImg.h" > break; > case 2 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity); > else draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity); > > > > > > > break; > case 3 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)); > else draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)); ># 35358 "./CImg.h" > break; > case 4 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprops(n0),lightprops(n1),lightprops(n2),opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprops(n0),lightprops(n1),lightprops(n2),opacity); ># 35372 "./CImg.h" > break; > case 5 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture, > (unsigned int)lightprops(n0,0),(unsigned int)lightprops(n0,1), > (unsigned int)lightprops(n1,0),(unsigned int)lightprops(n1,1), > (unsigned int)lightprops(n2,0),(unsigned int)lightprops(n2,1), > opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture, > (unsigned int)lightprops(n0,0),(unsigned int)lightprops(n0,1), > (unsigned int)lightprops(n1,0),(unsigned int)lightprops(n1,1), > (unsigned int)lightprops(n2,0),(unsigned int)lightprops(n2,1), > opacity); ># 35396 "./CImg.h" > break; > } > } break; > case 12 : { > if (!__color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Undefined texture for quadrangle primitive [%u].", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),n_primitive); > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > n2 = (unsigned int)primitive[2], > n3 = (unsigned int)primitive[3], > tx0 = (unsigned int)primitive[4], > ty0 = (unsigned int)primitive[5], > tx1 = (unsigned int)primitive[6], > ty1 = (unsigned int)primitive[7], > tx2 = (unsigned int)primitive[8], > ty2 = (unsigned int)primitive[9], > tx3 = (unsigned int)primitive[10], > ty3 = (unsigned int)primitive[11]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), > x2 = (int)projections(n2,0), y2 = (int)projections(n2,1), > x3 = (int)projections(n3,0), y3 = (int)projections(n3,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale, > z2 = vertices(n2,2) + Z + _focale, > z3 = vertices(n3,2) + Z + _focale; > > switch (render_type) { > case 0 : > draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). > draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity). > draw_point(x2,y2,color.get_vector_at(tx2,ty2)._data,opacity). > draw_point(x3,y3,color.get_vector_at(tx3,ty3)._data,opacity); ># 35443 "./CImg.h" > break; > case 1 : > if (zbuffer) > draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). > draw_line(zbuffer,x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity). > draw_line(zbuffer,x2,y2,z2,x3,y3,z3,color,tx2,ty2,tx3,ty3,opacity). > draw_line(zbuffer,x3,y3,z3,x0,y0,z0,color,tx3,ty3,tx0,ty0,opacity); > else > draw_line(x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). > draw_line(x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity). > draw_line(x2,y2,z2,x3,y3,z3,color,tx2,ty2,tx3,ty3,opacity). > draw_line(x3,y3,z3,x0,y0,z0,color,tx3,ty3,tx0,ty0,opacity); ># 35464 "./CImg.h" > break; > case 2 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity). > draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity); > > > > > > > > break; > case 3 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity,lightprops(l)); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)). > draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity,lightprops(l)); ># 35498 "./CImg.h" > break; > case 4 : { > const float > lightprop0 = lightprops(n0), lightprop1 = lightprops(n1), > lightprop2 = lightprops(n2), lightprop3 = lightprops(n3); > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprop0,lightprop1,lightprop2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,lightprop0,lightprop2,lightprop3,opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprop0,lightprop1,lightprop2,opacity). > draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,lightprop0,lightprop2,lightprop3,opacity); ># 35520 "./CImg.h" > } break; > case 5 : { > const unsigned int > lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), > lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), > lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1), > lx3 = (unsigned int)lightprops(n3,0), ly3 = (unsigned int)lightprops(n3,1); > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). > draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); ># 35549 "./CImg.h" > } break; > } > } break; > } > } > > if (render_type==5) cimg::mutex(10,0); > return *this; > } ># 35572 "./CImg.h" > CImg<T>& select(CImgDisplay &disp, > const unsigned int feature_type=2, unsigned int *const XYZ=0) { > return get_select(disp,feature_type,XYZ).move_to(*this); > } > > > CImg<T>& select(const char *const title, > const unsigned int feature_type=2, unsigned int *const XYZ=0) { > return get_select(title,feature_type,XYZ).move_to(*this); > } > > > CImg<intT> get_select(CImgDisplay &disp, > const unsigned int feature_type=2, unsigned int *const XYZ=0) const { > return _get_select(disp,0,feature_type,XYZ,0,0,0,true,false); > } > > > CImg<intT> get_select(const char *const title, > const unsigned int feature_type=2, unsigned int *const XYZ=0) const { > CImgDisplay disp; > return _get_select(disp,title,feature_type,XYZ,0,0,0,true,false); > } > > CImg<intT> _get_select(CImgDisplay &disp, const char *const title, > const unsigned int feature_type, unsigned int *const XYZ, > const int origX, const int origY, const int origZ, > const bool reset_view3d, > const bool force_display_z_coord) const { > if (is_empty()) return CImg<intT>(1,feature_type==0?3:6,1,1,-1); > if (!disp) { > disp.assign(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),title?title:0,1); > if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); > } else if (title) disp.set_title("%s",title); > > const unsigned int old_normalization = disp.normalization(); > bool old_is_resized = disp.is_resized(); > disp._normalization = 0; > disp.show().set_key(0).set_wheel().show_mouse(); > > unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; > > int area = 0, starting_area = 0, clicked_area = 0, phase = 0, > X0 = (int)((XYZ?XYZ[0]:(_width-1)/2)%_width), > Y0 = (int)((XYZ?XYZ[1]:(_height-1)/2)%_height), > Z0 = (int)((XYZ?XYZ[2]:(_depth-1)/2)%_depth), > X1 =-1, Y1 = -1, Z1 = -1, > X3d = -1, Y3d = -1, > oX3d = X3d, oY3d = -1, > omx = -1, omy = -1; > float X = -1, Y = -1, Z = -1; > unsigned int old_button = 0, key = 0; > > bool shape_selected = false, text_down = false, visible_cursor = true; > static CImg<floatT> pose3d; > static bool is_view3d = false, is_axes = true; > if (reset_view3d) { pose3d.assign(); is_view3d = false; } > CImg<floatT> points3d, opacities3d, sel_opacities3d; > CImgList<uintT> primitives3d, sel_primitives3d; > CImgList<ucharT> colors3d, sel_colors3d; > CImg<ucharT> visu, visu0, view3d; > char text[1024] = { 0 }; > > while (!key && !disp.is_closed() && !shape_selected) { > > > int > mx = disp.mouse_x(), > my = disp.mouse_y(); > > const float > mX = mx<0?-1.0f:(float)mx*(width()+(depth()>1?depth():0))/disp.width(), > mY = my<0?-1.0f:(float)my*(height()+(depth()>1?depth():0))/disp.height(); > > area = 0; > if (mX>=0 && mY>=0 && mX<width() && mY<height()) { area = 1; X = mX; Y = mY; Z = (float)(phase?Z1:Z0); } > if (mX>=0 && mX<width() && mY>=height()) { area = 2; X = mX; Z = mY - _height; Y = (float)(phase?Y1:Y0); } > if (mY>=0 && mX>=width() && mY<height()) { area = 3; Y = mY; Z = mX - _width; X = (float)(phase?X1:X0); } > if (mX>=width() && mY>=height()) area = 4; > if (disp.button()) { if (!clicked_area) clicked_area = area; } else clicked_area = 0; > > switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : > > case 0 : case cimg::keyCTRLLEFT : key = 0; break; > case cimg::keyPAGEUP : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_wheel(1); key = 0; } break; > case cimg::keyPAGEDOWN : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_wheel(-1); key = 0; } break; > case cimg::keyA : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > is_axes = !is_axes; disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). > _is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyV : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > is_view3d = !is_view3d; disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"CImg" "_%.4u.bmp",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > if (visu0) { > (+visu0).draw_text(0,0," Saving snapshot... ",foreground_color,background_color,0.7f,13).display(disp); > visu0.save(filename); > (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); > } > disp.set_key(key,false); key = 0; > } break; > case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > > > > snprintf(filename,sizeof(filename),"CImg" "_%.4u.cimg",snap_number++); > > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu0).draw_text(0,0," Saving instance... ",foreground_color,background_color,0.7f,13).display(disp); > save(filename); > (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); > disp.set_key(key,false); key = 0; > } break; > } > > switch (area) { > > case 0 : > mx = my = -1; X = Y = Z = -1; > break; > > case 1 : case 2 : case 3 : > if (disp.button()&1 && phase<2 && clicked_area==area) { > if (_depth>1 && (X1!=(int)X || Y1!=(int)Y || Z1!=(int)Z)) visu0.assign(); > X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; > } > if (!(disp.button()&1) && phase>=2 && clicked_area!=area) { > switch (starting_area) { > case 1 : if (Z1!=(int)Z) visu0.assign(); Z1 = (int)Z; break; > case 2 : if (Y1!=(int)Y) visu0.assign(); Y1 = (int)Y; break; > case 3 : if (X1!=(int)X) visu0.assign(); X1 = (int)X; break; > } > } > if (disp.button()&2 && clicked_area==area) { > if (phase) { > if (_depth>1 && (X1!=(int)X || Y1!=(int)Y || Z1!=(int)Z)) visu0.assign(); > X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; > } else { > if (_depth>1 && (X0!=(int)X || Y0!=(int)Y || Z0!=(int)Z)) visu0.assign(); > X0 = (int)X; Y0 = (int)Y; Z0 = (int)Z; > } > } > if (disp.button()&4) { > X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = area = clicked_area = starting_area = 0; visu0.assign(); > } > if (disp.wheel()) { > if (_depth>1 && !disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT() && !disp.is_keySHIFTLEFT() && !disp.is_keySHIFTRIGHT() && > !disp.is_keyALT() && !disp.is_keyALTGR()) { > switch (area) { > case 1 : > if (phase) Z = (float)(Z1+=disp.wheel()); else Z = (float)(Z0+=disp.wheel()); > visu0.assign(); break; > case 2 : > if (phase) Y = (float)(Y1+=disp.wheel()); else Y = (float)(Y0+=disp.wheel()); > visu0.assign(); break; > case 3 : > if (phase) X = (float)(X1+=disp.wheel()); else X = (float)(X0+=disp.wheel()); > visu0.assign(); break; > } > disp.set_wheel(); > } else key = ~0U; > } > if ((disp.button()&1)!=old_button) { > switch (phase) { > case 0 : > if (area==clicked_area) { > X0 = X1 = (int)X; Y0 = Y1 = (int)Y; Z0 = Z1 = (int)Z; starting_area = area; ++phase; > } break; > case 1 : > if (area==starting_area) { > X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; ++phase; > } else if (!(disp.button()&1)) { X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = 0; visu0.assign(); } > break; > case 2 : ++phase; break; > } > old_button = disp.button()&1; > } > break; > > case 4 : > if (is_view3d && points3d) { > X3d = mx - _width*disp.width()/(_width+(_depth>1?_depth:0)); > Y3d = my - _height*disp.height()/(_height+(_depth>1?_depth:0)); > if (oX3d<0) { oX3d = X3d; oY3d = Y3d; } > if ((disp.button()&3)==3) { pose3d.assign(); view3d.assign(); oX3d = oY3d = X3d = Y3d = -1; } > else if (disp.button()&1 && pose3d && (oX3d!=X3d || oY3d!=Y3d)) { > const float > R = 0.45f*cimg::min(view3d._width,view3d._height), > R2 = R*R, > u0 = (float)(oX3d-view3d.width()/2), > v0 = (float)(oY3d-view3d.height()/2), > u1 = (float)(X3d-view3d.width()/2), > v1 = (float)(Y3d-view3d.height()/2), > n0 = (float)std::sqrt(u0*u0+v0*v0), > n1 = (float)std::sqrt(u1*u1+v1*v1), > nu0 = n0>R?(u0*R/n0):u0, > nv0 = n0>R?(v0*R/n0):v0, > nw0 = (float)std::sqrt(cimg::max(0,R2-nu0*nu0-nv0*nv0)), > nu1 = n1>R?(u1*R/n1):u1, > nv1 = n1>R?(v1*R/n1):v1, > nw1 = (float)std::sqrt(cimg::max(0,R2-nu1*nu1-nv1*nv1)), > u = nv0*nw1 - nw0*nv1, > v = nw0*nu1 - nu0*nw1, > w = nv0*nu1 - nu0*nv1, > n = (float)std::sqrt(u*u+v*v+w*w), > alpha = (float)std::asin(n/R2); > pose3d.draw_image(CImg<floatT>::rotation_matrix(u,v,w,alpha)*pose3d.get_crop(0,0,2,2)); > view3d.assign(); > } else if (disp.button()&2 && pose3d && oY3d!=Y3d) { > pose3d(3,2)-=(oY3d - Y3d)*1.5f; view3d.assign(); > } > if (disp.wheel()) { > pose3d(3,2)-=disp.wheel()*15; view3d.assign(); disp.set_wheel(); > } > if (disp.button()&4 && pose3d && (oX3d!=X3d || oY3d!=Y3d)) { > pose3d(3,0)-=oX3d - X3d; pose3d(3,1)-=oY3d - Y3d; view3d.assign(); > } > oX3d = X3d; oY3d = Y3d; > } > mx = my = -1; X = Y = Z = -1; > break; > } > > if (phase) { > if (!feature_type) shape_selected = phase?true:false; > else { > if (_depth>1) shape_selected = (phase==3)?true:false; > else shape_selected = (phase==2)?true:false; > } > } > > if (X0<0) X0 = 0; if (X0>=width()) X0 = width() - 1; > if (Y0<0) Y0 = 0; if (Y0>=height()) Y0 = height() - 1; > if (Z0<0) Z0 = 0; if (Z0>=depth()) Z0 = depth() - 1; > if (X1<1) X1 = 0; if (X1>=width()) X1 = width() - 1; > if (Y1<0) Y1 = 0; if (Y1>=height()) Y1 = height() - 1; > if (Z1<0) Z1 = 0; if (Z1>=depth()) Z1 = depth() - 1; > > > if (mx!=omx || my!=omy || !visu0 || (_depth>1 && !view3d)) { > > if (!visu0) { > __get_select(disp,old_normalization,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0).move_to(visu0).resize(disp); > view3d.assign(); > points3d.assign(); > } > > if (is_view3d && _depth>1 && !view3d) { > const unsigned int > _x3d = (unsigned int)cimg::round((float)_width*visu0._width/(_width+_depth),1,1), > _y3d = (unsigned int)cimg::round((float)_height*visu0._height/(_height+_depth),1,1), > x3d = _x3d>=visu0._width?visu0._width-1:_x3d, > y3d = _y3d>=visu0._height?visu0._height-1:_y3d; > CImg<ucharT>(1,2,1,1,64,128).resize(visu0._width-x3d,visu0._height-y3d,1,visu0._spectrum,3).move_to(view3d); > if (!points3d) { > get_projections3d(primitives3d,colors3d,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0,true).move_to(points3d); > points3d.append(CImg<floatT>(8,3,1,1, > 0,_width-1,_width-1,0,0,_width-1,_width-1,0, > 0,0,_height-1,_height-1,0,0,_height-1,_height-1, > 0,0,0,0,_depth-1,_depth-1,_depth-1,_depth-1),'x'); > CImg<uintT>::vector(12,13).move_to(primitives3d); CImg<uintT>::vector(13,14).move_to(primitives3d); > CImg<uintT>::vector(14,15).move_to(primitives3d); CImg<uintT>::vector(15,12).move_to(primitives3d); > CImg<uintT>::vector(16,17).move_to(primitives3d); CImg<uintT>::vector(17,18).move_to(primitives3d); > CImg<uintT>::vector(18,19).move_to(primitives3d); CImg<uintT>::vector(19,16).move_to(primitives3d); > CImg<uintT>::vector(12,16).move_to(primitives3d); CImg<uintT>::vector(13,17).move_to(primitives3d); > CImg<uintT>::vector(14,18).move_to(primitives3d); CImg<uintT>::vector(15,19).move_to(primitives3d); > colors3d.insert(12,CImg<ucharT>::vector(255,255,255)); > opacities3d.assign(primitives3d.width(),1,1,1,0.5f); > if (!phase) { > opacities3d[0] = opacities3d[1] = opacities3d[2] = 0.8f; > sel_primitives3d.assign(); > sel_colors3d.assign(); > sel_opacities3d.assign(); > } else { > if (feature_type==2) { > points3d.append(CImg<floatT>(8,3,1,1, > X0,X1,X1,X0,X0,X1,X1,X0, > Y0,Y0,Y1,Y1,Y0,Y0,Y1,Y1, > Z0,Z0,Z0,Z0,Z1,Z1,Z1,Z1),'x'); > sel_primitives3d.assign(); > CImg<uintT>::vector(20,21).move_to(sel_primitives3d); CImg<uintT>::vector(21,22).move_to(sel_primitives3d); > CImg<uintT>::vector(22,23).move_to(sel_primitives3d); CImg<uintT>::vector(23,20).move_to(sel_primitives3d); > CImg<uintT>::vector(24,25).move_to(sel_primitives3d); CImg<uintT>::vector(25,26).move_to(sel_primitives3d); > CImg<uintT>::vector(26,27).move_to(sel_primitives3d); CImg<uintT>::vector(27,24).move_to(sel_primitives3d); > CImg<uintT>::vector(20,24).move_to(sel_primitives3d); CImg<uintT>::vector(21,25).move_to(sel_primitives3d); > CImg<uintT>::vector(22,26).move_to(sel_primitives3d); CImg<uintT>::vector(23,27).move_to(sel_primitives3d); > } else { > points3d.append(CImg<floatT>(2,3,1,1, > X0,X1, > Y0,Y1, > Z0,Z1),'x'); > sel_primitives3d.assign(CImg<uintT>::vector(20,21)); > } > sel_colors3d.assign(sel_primitives3d._width,CImg<ucharT>::vector(255,255,255)); > sel_opacities3d.assign(sel_primitives3d._width,1,1,1,0.8f); > } > points3d.shift_object3d(-0.5f*(_width-1),-0.5f*(_height-1),-0.5f*(_depth-1)).resize_object3d(); > points3d*=0.75f*cimg::min(view3d._width,view3d._height); > } > > if (!pose3d) CImg<floatT>(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0).move_to(pose3d); > CImg<floatT> zbuffer3d(view3d._width,view3d._height,1,1,0); > const CImg<floatT> rotated_points3d = pose3d.get_crop(0,0,2,2)*points3d; > if (sel_primitives3d) > view3d.draw_object3d(pose3d(3,0) + 0.5f*view3d._width, > pose3d(3,1) + 0.5f*view3d._height, > pose3d(3,2), > rotated_points3d,sel_primitives3d,sel_colors3d,sel_opacities3d, > 2,true,500,0,0,0,0,0,zbuffer3d); > view3d.draw_object3d(pose3d(3,0) + 0.5f*view3d._width, > pose3d(3,1) + 0.5f*view3d._height, > pose3d(3,2), > rotated_points3d,primitives3d,colors3d,opacities3d, > 2,true,500,0,0,0,0,0,zbuffer3d); > visu0.draw_image(x3d,y3d,view3d); > } > visu = visu0; > > if (X<0 || Y<0 || Z<0) { if (!visible_cursor) { disp.show_mouse(); visible_cursor = true; }} > else { > if (is_axes) { if (visible_cursor) { disp.hide_mouse(); visible_cursor = false; }} > else { if (!visible_cursor) { disp.show_mouse(); visible_cursor = true; }} > const int d = (_depth>1)?_depth:0; > int > w = disp.width(), W = width() + d, > h = disp.height(), H = height() + d, > _xp = (int)X*w/W, xp = _xp + (_xp*W/w!=(int)X?1:0), > _yp = (int)Y*h/H, yp = _yp + (_yp*H/h!=(int)Y?1:0), > _xn = (int)(X+1)*w/W-1, xn = _xn + ((_xn+1)*W/w!=(int)X+1?1:0), > _yn = (int)(Y+1)*h/H-1, yn = _yn + ((_yn+1)*H/h!=(int)Y+1?1:0), > _zxp = ((int)Z+width())*w/W, zxp = _zxp + (_zxp*W/w!=(int)Z+width()?1:0), > _zyp = ((int)Z+height())*h/H, zyp = _zyp + (_zyp*H/h!=(int)Z+height()?1:0), > _zxn = ((int)Z+width()+1)*w/W-1, zxn = _zxn + ((_zxn+1)*W/w!=(int)Z+width()+1?1:0), > _zyn = ((int)Z+height()+1)*h/H-1, zyn = _zyn + ((_zyn+1)*H/h!=(int)Z+height()+1?1:0), > _xM = width()*w/W-1, xM = _xM + ((_xM+1)*W/w!=width()?1:0), > _yM = height()*h/H-1, yM = _yM + ((_yM+1)*H/h!=height()?1:0), > xc = (xp + xn)/2, > yc = (yp + yn)/2, > zxc = (zxp + zxn)/2, > zyc = (zyp + zyn)/2, > xf = (int)(X*w/W), > yf = (int)(Y*h/H), > zxf = (int)((Z+width())*w/W), > zyf = (int)((Z+height())*h/H); > > if (is_axes) { > visu.draw_line(0,yf,visu.width()-1,yf,foreground_color,0.7f,0xFF00FF00). > draw_line(0,yf,visu.width()-1,yf,background_color,0.7f,0x00FF00FF). > draw_line(xf,0,xf,visu.height()-1,foreground_color,0.7f,0xFF00FF00). > draw_line(xf,0,xf,visu.height()-1,background_color,0.7f,0x00FF00FF); > if (_depth>1) > visu.draw_line(zxf,0,zxf,yM,foreground_color,0.7f,0xFF00FF00). > draw_line(zxf,0,zxf,yM,background_color,0.7f,0x00FF00FF). > draw_line(0,zyf,xM,zyf,foreground_color,0.7f,0xFF00FF00). > draw_line(0,zyf,xM,zyf,background_color,0.7f,0x00FF00FF); > } > > > if (xn-xp>=4 && yn-yp>=4) visu.draw_rectangle(xp,yp,xn,yn,foreground_color,0.2f). > draw_rectangle(xp,yp,xn,yn,foreground_color,1,0xAAAAAAAA). > draw_rectangle(xp,yp,xn,yn,background_color,1,0x55555555); > if (_depth>1) { > if (yn-yp>=4 && zxn-zxp>=4) visu.draw_rectangle(zxp,yp,zxn,yn,background_color,0.2f). > draw_rectangle(zxp,yp,zxn,yn,foreground_color,1,0xAAAAAAAA). > draw_rectangle(zxp,yp,zxn,yn,background_color,1,0x55555555); > if (xn-xp>=4 && zyn-zyp>=4) visu.draw_rectangle(xp,zyp,xn,zyn,background_color,0.2f). > draw_rectangle(xp,zyp,xn,zyn,foreground_color,1,0xAAAAAAAA). > draw_rectangle(xp,zyp,xn,zyn,background_color,1,0x55555555); > } > > > if (phase) { > const int > _xp0 = X0*w/W, xp0 = _xp0 + (_xp0*W/w!=X0?1:0), > _yp0 = Y0*h/H, yp0 = _yp0 + (_yp0*H/h!=Y0?1:0), > _xn0 = (X0+1)*w/W-1, xn0 = _xn0 + ((_xn0+1)*W/w!=X0+1?1:0), > _yn0 = (Y0+1)*h/H-1, yn0 = _yn0 + ((_yn0+1)*H/h!=Y0+1?1:0), > _zxp0 = (Z0+width())*w/W, zxp0 = _zxp0 + (_zxp0*W/w!=Z0+width()?1:0), > _zyp0 = (Z0+height())*h/H, zyp0 = _zyp0 + (_zyp0*H/h!=Z0+height()?1:0), > _zxn0 = (Z0+width()+1)*w/W-1, zxn0 = _zxn0 + ((_zxn0+1)*W/w!=Z0+width()+1?1:0), > _zyn0 = (Z0+height()+1)*h/H-1, zyn0 = _zyn0 + ((_zyn0+1)*H/h!=Z0+height()+1?1:0), > xc0 = (xp0 + xn0)/2, > yc0 = (yp0 + yn0)/2, > zxc0 = (zxp0 + zxn0)/2, > zyc0 = (zyp0 + zyn0)/2; > > switch (feature_type) { > case 1 : { > visu.draw_arrow(xc0,yc0,xc,yc,background_color,0.9f,30,5,0x55555555). > draw_arrow(xc0,yc0,xc,yc,foreground_color,0.9f,30,5,0xAAAAAAAA); > if (d) { > visu.draw_arrow(zxc0,yc0,zxc,yc,background_color,0.9f,30,5,0x55555555). > draw_arrow(zxc0,yc0,zxc,yc,foreground_color,0.9f,30,5,0xAAAAAAAA). > draw_arrow(xc0,zyc0,xc,zyc,background_color,0.9f,30,5,0x55555555). > draw_arrow(xc0,zyc0,xc,zyc,foreground_color,0.9f,30,5,0xAAAAAAAA); > } > } break; > case 2 : { > visu.draw_rectangle(X0<X1?xp0:xp,Y0<Y1?yp0:yp,X0<X1?xn:xn0,Y0<Y1?yn:yn0,background_color,0.2f). > draw_rectangle(X0<X1?xp0:xp,Y0<Y1?yp0:yp,X0<X1?xn:xn0,Y0<Y1?yn:yn0,foreground_color,0.9f,0xAAAAAAAA). > draw_rectangle(X0<X1?xp0:xp,Y0<Y1?yp0:yp,X0<X1?xn:xn0,Y0<Y1?yn:yn0,background_color,0.9f,0x55555555); > if (d) { > visu.draw_rectangle(Z0<Z1?zxp0:zxp,Y0<Y1?yp0:yp,Z0<Z1?zxn:zxn0,Y0<Y1?yn:yn0,background_color,0.2f). > draw_rectangle(Z0<Z1?zxp0:zxp,Y0<Y1?yp0:yp,Z0<Z1?zxn:zxn0,Y0<Y1?yn:yn0,foreground_color,0.9f,0xAAAAAAAA). > draw_rectangle(Z0<Z1?zxp0:zxp,Y0<Y1?yp0:yp,Z0<Z1?zxn:zxn0,Y0<Y1?yn:yn0,background_color,0.9f,0x55555555). > draw_rectangle(X0<X1?xp0:xp,Z0<Z1?zyp0:zyp,X0<X1?xn:xn0,Z0<Z1?zyn:zyn0,background_color,0.2f). > draw_rectangle(X0<X1?xp0:xp,Z0<Z1?zyp0:zyp,X0<X1?xn:xn0,Z0<Z1?zyn:zyn0,foreground_color,0.9f,0xAAAAAAAA). > draw_rectangle(X0<X1?xp0:xp,Z0<Z1?zyp0:zyp,X0<X1?xn:xn0,Z0<Z1?zyn:zyn0,background_color,0.9f,0x55555555); > } > } break; > case 3 : { > visu.draw_ellipse(xc0,yc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(yc-yc0),0,background_color,0.2f). > draw_ellipse(xc0,yc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(yc-yc0),0,foreground_color,0.9f,~0U). > draw_point(xc0,yc0,foreground_color,0.9f); > if (d) { > visu.draw_ellipse(zxc0,yc0,(float)cimg::abs(zxc-zxc0),(float)cimg::abs(yc-yc0),0,background_color,0.2f). > draw_ellipse(zxc0,yc0,(float)cimg::abs(zxc-zxc0),(float)cimg::abs(yc-yc0),0,foreground_color,0.9f,~0U). > draw_point(zxc0,yc0,foreground_color,0.9f). > draw_ellipse(xc0,zyc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(zyc-zyc0),0,background_color,0.2f). > draw_ellipse(xc0,zyc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(zyc-zyc0),0,foreground_color,0.9f,~0U). > draw_point(xc0,zyc0,foreground_color,0.9f); > } > } break; > } > } > > > if (my>=0 && my<13) text_down = true; else if (my>=visu.height()-13) text_down = false; > if (!feature_type || !phase) { > if (X>=0 && Y>=0 && Z>=0 && X<width() && Y<height() && Z<depth()) { > if (_depth>1 || force_display_z_coord) snprintf(text,sizeof(text)," Point (%d,%d,%d) = [ ",origX+(int)X,origY+(int)Y,origZ+(int)Z); > else snprintf(text,sizeof(text)," Point (%d,%d) = [ ",origX+(int)X,origY+(int)Y); > char *ctext = text + std::strlen(text), *const ltext = text + 512; > for (unsigned int c = 0; c<_spectrum && ctext<ltext; ++c) { > snprintf(ctext,sizeof(text)/2,cimg::type<T>::format(),cimg::type<T>::format((*this)((int)X,(int)Y,(int)Z,c))); > ctext = text + std::strlen(text); > *(ctext++) = ' '; *ctext = 0; > } > std::strcpy(text + std::strlen(text),"] "); > } > } else switch (feature_type) { > case 1 : { > const double dX = (double)(X0 - X1), dY = (double)(Y0 - Y1), dZ = (double)(Z0 - Z1), norm = std::sqrt(dX*dX+dY*dY+dZ*dZ); > if (_depth>1 || force_display_z_coord) snprintf(text,sizeof(text)," Vect (%d,%d,%d)-(%d,%d,%d), Norm = %g ", > origX+X0,origY+Y0,origZ+Z0,origX+X1,origY+Y1,origZ+Z1,norm); > else snprintf(text,sizeof(text)," Vect (%d,%d)-(%d,%d), Norm = %g ", > origX+X0,origY+Y0,origX+X1,origY+Y1,norm); > } break; > case 2 : > if (_depth>1 || force_display_z_coord) snprintf(text,sizeof(text)," Box (%d,%d,%d)-(%d,%d,%d), Size = (%d,%d,%d) ", > origX+(X0<X1?X0:X1),origY+(Y0<Y1?Y0:Y1),origZ+(Z0<Z1?Z0:Z1), > origX+(X0<X1?X1:X0),origY+(Y0<Y1?Y1:Y0),origZ+(Z0<Z1?Z1:Z0), > 1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1),1+cimg::abs(Z0-Z1)); > else snprintf(text,sizeof(text)," Box (%d,%d)-(%d,%d), Size = (%d,%d) ", > origX+(X0<X1?X0:X1),origY+(Y0<Y1?Y0:Y1),origX+(X0<X1?X1:X0),origY+(Y0<Y1?Y1:Y0), > 1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1)); > break; > default : > if (_depth>1 || force_display_z_coord) snprintf(text,sizeof(text)," Ellipse (%d,%d,%d)-(%d,%d,%d), Radii = (%d,%d,%d) ", > origX+X0,origY+Y0,origZ+Z0,origX+X1,origY+Y1,origZ+Z1, > 1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1),1+cimg::abs(Z0-Z1)); > else snprintf(text,sizeof(text)," Ellipse (%d,%d)-(%d,%d), Radii = (%d,%d) ", > origX+X0,origY+Y0,origX+X1,origY+Y1,1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1)); > } > if (phase || (mx>=0 && my>=0)) visu.draw_text(0,text_down?visu.height()-13:0,text,foreground_color,background_color,0.7f,13); > } > > disp.display(visu).wait(); > } else if (!shape_selected) disp.wait(); > if (disp.is_resized()) { disp.resize(false)._is_resized = false; old_is_resized = true; visu0.assign(); } > omx = mx; omy = my; > } > > > CImg<intT> res(1,feature_type==0?3:6,1,1,-1); > if (XYZ) { XYZ[0] = (unsigned int)X0; XYZ[1] = (unsigned int)Y0; XYZ[2] = (unsigned int)Z0; } > if (shape_selected) { > if (feature_type==2) { > if (X0>X1) cimg::swap(X0,X1); > if (Y0>Y1) cimg::swap(Y0,Y1); > if (Z0>Z1) cimg::swap(Z0,Z1); > } > if (X1<0 || Y1<0 || Z1<0) X0 = Y0 = Z0 = X1 = Y1 = Z1 = -1; > switch (feature_type) { > case 1 : case 2 : res[0] = X0; res[1] = Y0; res[2] = Z0; res[3] = X1; res[4] = Y1; res[5] = Z1; break; > case 3 : res[3] = cimg::abs(X1-X0); res[4] = cimg::abs(Y1-Y0); res[5] = cimg::abs(Z1-Z0); > default : res[0] = X0; res[1] = Y0; res[2] = Z0; > } > } > disp.set_button(); > if (!visible_cursor) disp.show_mouse(); > disp._normalization = old_normalization; > disp._is_resized = old_is_resized; > if (key!=~0U) disp.set_key(key); > return res; > } > > > CImg<ucharT> __get_select(const CImgDisplay& disp, const int normalization, const int x, const int y, const int z) const { > if (is_empty()) return CImg<ucharT>(1,1,1,1,0); > const CImg<T> crop = get_shared_channels(0,cimg::min(2,spectrum()-1)); > CImg<Tuchar> img2d; > if (_depth>1) crop.get_projections2d(x,y,z).move_to(img2d); > else CImg<Tuchar>(crop,false).move_to(img2d); > > if (cimg::type<T>::is_float()) { > bool is_inf = false, is_nan = false; > for (Tuchar *ptr = (img2d)._data, *_maxptr = (img2d)._data + (img2d).size(); ptr<_maxptr; ++ptr) > if (cimg::type<T>::is_inf(*ptr)) { is_inf = true; break; } > else if (cimg::type<T>::is_nan(*ptr)) { is_nan = true; break; } > if (is_inf || is_nan) { > T m0 = cimg::type<T>::max(), M0 = cimg::type<T>::min(); > if (!normalization) { m0 = 0; M0 = 255; } > else if (normalization==2) { m0 = (T)disp._min; M0 = (T)disp._max; } > else for (Tuchar *ptr = (img2d)._data, *_maxptr = (img2d)._data + (img2d).size(); ptr<_maxptr; ++ptr) if (!cimg::type<T>::is_inf(*ptr) && !cimg::type<T>::is_nan(*ptr)) { if (*ptr<m0) m0 = *ptr; if (*ptr>M0) M0 = *ptr; } > const T > val_minf = (normalization==1 || normalization==3)?m0-(M0-m0)*20-1:m0, > val_pinf = (normalization==1 || normalization==3)?M0+(M0-m0)*20+1:M0; > if (is_nan) for (Tuchar *ptr = (img2d)._data, *_maxptr = (img2d)._data + (img2d).size(); ptr<_maxptr; ++ptr) if (cimg::type<T>::is_nan(*ptr)) *ptr = val_minf; > if (is_inf) for (Tuchar *ptr = (img2d)._data, *_maxptr = (img2d)._data + (img2d).size(); ptr<_maxptr; ++ptr) if (cimg::type<T>::is_inf(*ptr)) *ptr = (float)*ptr<0?val_minf:val_pinf; > } > } > > switch (normalization) { > case 1 : img2d.normalize(0,255); break; > case 2 : { > const float m = disp._min, M = disp._max; > (img2d-=m)*=255.0f/(M-m>0?M-m:1); > } break; > case 3 : > if (cimg::type<T>::is_float()) img2d.normalize(0,255); > else { > const float m = (float)cimg::type<T>::min(), M = (float)cimg::type<T>::max(); > (img2d-=m)*=255.0f/(M-m>0?M-m:1); > } break; > } > > if (img2d.spectrum()==2) img2d.channels(0,2); > return img2d; > } > > > CImg<intT> get_select_graph(CImgDisplay &disp, > const unsigned int plot_type=1, const unsigned int vertex_type=1, > const char *const labelx=0, const double xmin=0, const double xmax=0, > const char *const labely=0, const double ymin=0, const double ymax=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "select_graph(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!disp) disp.assign(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true),0,0). > set_title("CImg<%s>",pixel_type()); > const unsigned long siz = (unsigned long)_width*_height*_depth; > const unsigned int old_normalization = disp.normalization(); > disp.show().set_button().set_wheel()._normalization = 0; > > double nymin = ymin, nymax = ymax, nxmin = xmin, nxmax = xmax; > if (nymin==nymax) { nymin = (Tfloat)min_max(nymax); const double dy = nymax - nymin; nymin-=dy/20; nymax+=dy/20; } > if (nymin==nymax) { --nymin; ++nymax; } > if (nxmin==nxmax && nxmin==0) { nxmin = 0; nxmax = siz - 1.0; } > > const unsigned char black[] = { 0, 0, 0 }, white[] = { 255, 255, 255 }, gray[] = { 220, 220, 220 }; > const unsigned char gray2[] = { 110, 110, 110 }, ngray[] = { 35, 35, 35 }; > static unsigned int odimv = 0; > static CImg<ucharT> colormap; > if (odimv!=_spectrum) { > odimv = _spectrum; > colormap = CImg<ucharT>(3,_spectrum,1,1,120).noise(70,1); > if (_spectrum==1) { colormap[0] = colormap[1] = 120; colormap[2] = 200; } > else { > colormap(0,0) = 220; colormap(1,0) = 10; colormap(2,0) = 10; > if (_spectrum>1) { colormap(0,1) = 10; colormap(1,1) = 220; colormap(2,1) = 10; } > if (_spectrum>2) { colormap(0,2) = 10; colormap(1,2) = 10; colormap(2,2) = 220; } > } > } > > CImg<ucharT> visu0, visu, graph, text, axes; > int x0 = -1, x1 = -1, y0 = -1, y1 = -1, omouse_x = -2, omouse_y = -2; > const unsigned int one = plot_type==3?0:1; > unsigned int okey = 0, obutton = 0; > char message[1024] = { 0 }; > unsigned char I[9]; unsigned char& Ipp = I[0]; unsigned char& Icp = I[1]; unsigned char& Inp = I[2]; unsigned char& Ipc = I[3]; unsigned char& Icc = I[4]; unsigned char& Inc = I[5]; unsigned char& Ipn = I[6]; unsigned char& Icn = I[7]; unsigned char& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > > for (bool selected = false; !selected && !disp.is_closed() && !okey && !disp.wheel(); ) { > const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); > const unsigned int key = disp.key(), button = disp.button(); > > > if (!visu0) { > visu0.assign(disp.width(),disp.height(),1,3,220); > const int gdimx = disp.width() - 32, gdimy = disp.height() - 32; > if (gdimx>0 && gdimy>0) { > graph.assign(gdimx,gdimy,1,3,255); > if (siz<32) { if (siz>1) graph.draw_grid(gdimx/(float)(siz - one),gdimy/(float)(siz - one),0,0,false,true,black,0.2f,0x33333333,0x33333333); } > else graph.draw_grid(-10,-10,0,0,false,true,black,0.2f,0x33333333,0x33333333); > for (int c = 0; c<(int)((*this)._spectrum); ++c) graph.draw_graph(get_shared_channel(c),&colormap(0,c),(plot_type!=3 || _spectrum==1)?1:0.6f, > plot_type,vertex_type,nymax,nymin); > > axes.assign(gdimx,gdimy,1,1,0); > const float > dx = (float)cimg::abs(nxmax-nxmin), dy = (float)cimg::abs(nymax-nymin), > px = (float)std::pow(10.0,(int)std::log10(dx?dx:1)-2.0), > py = (float)std::pow(10.0,(int)std::log10(dy?dy:1)-2.0); > const CImg<Tdouble> > seqx = dx<=0?CImg<Tdouble>::vector(nxmin):CImg<Tdouble>::sequence(1 + gdimx/60,nxmin,one?nxmax:nxmin+(nxmax-nxmin)*(siz+1)/siz).round(px), > seqy = CImg<Tdouble>::sequence(1 + gdimy/60,nymax,nymin).round(py); > > const bool allow_zero = (nxmin*nxmax>0) || (nymin*nymax>0); > axes.draw_axes(seqx,seqy,white,1,~0U,~0U,13,allow_zero); > if (nymin>0) axes.draw_axis(seqx,gdimy-1,gray,1,~0U,13,allow_zero); > if (nymax<0) axes.draw_axis(seqx,0,gray,1,~0U,13,allow_zero); > if (nxmin>0) axes.draw_axis(0,seqy,gray,1,~0U,13,allow_zero); > if (nxmax<0) axes.draw_axis(gdimx-1,seqy,gray,1,~0U,13,allow_zero); > > for (int y = 0, _p1y = 0, _n1y = 1>=((axes)._height)?(int)((axes)._height)-1:1; _n1y<(int)((axes)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (unsigned char)(axes)(_p1x,_p1y,0,0)), (I[3] = I[4] = (unsigned char)(axes)(0,y,0,0)), (I[6] = I[7] = (unsigned char)(axes)(0,_n1y,0,0)), 1>=(axes)._width?(axes).width()-1:1); (_n1x<(axes).width() && ( (I[2] = (unsigned char)(axes)(_n1x,_p1y,0,0)), (I[5] = (unsigned char)(axes)(_n1x,y,0,0)), (I[8] = (unsigned char)(axes)(_n1x,_n1y,0,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) > if (Icc) { > if (Icc==255) for (int c = 0; c<(int)((graph)._spectrum); ++c) graph(x,y,c) = 0; > else for (int c = 0; c<(int)((graph)._spectrum); ++c) graph(x,y,c) = (unsigned char)(2*graph(x,y,c)/3); > } > else if (Ipc || Inc || Icp || Icn || Ipp || Inn || Ipn || Inp) for (int c = 0; c<(int)((graph)._spectrum); ++c) graph(x,y,c) = (graph(x,y,c)+511)/3; > > visu0.draw_image(16,16,graph); > visu0.draw_line(15,15,16+gdimx,15,gray2).draw_line(16+gdimx,15,16+gdimx,16+gdimy,gray2). > draw_line(16+gdimx,16+gdimy,15,16+gdimy,white).draw_line(15,16+gdimy,15,15,white); > } else graph.assign(); > text.assign().draw_text(0,0,labelx?labelx:"X-axis",white,ngray,1,13).resize(-100,-100,1,3); > visu0.draw_image((visu0.width()-text.width())/2,visu0.height()-14,~text); > text.assign().draw_text(0,0,labely?labely:"Y-axis",white,ngray,1,13).rotate(-90).resize(-100,-100,1,3); > visu0.draw_image(1,(visu0.height()-text.height())/2,~text); > visu.assign(); > } > > > if (!visu) { > visu.assign(visu0); > if (graph && x0>=0 && x1>=0) { > const int > nx0 = x0<=x1?x0:x1, > nx1 = x0<=x1?x1:x0, > ny0 = y0<=y1?y0:y1, > ny1 = y0<=y1?y1:y0, > sx0 = 16 + nx0*(visu.width()-32)/cimg::max(1U,siz-one), > sx1 = 15 + (nx1+1)*(visu.width()-32)/cimg::max(1U,siz-one), > sy0 = 16 + ny0, > sy1 = 16 + ny1; > if (y0>=0 && y1>=0) > visu.draw_rectangle(sx0,sy0,sx1,sy1,gray,0.5f).draw_rectangle(sx0,sy0,sx1,sy1,black,0.5f,0xCCCCCCCCU); > else visu.draw_rectangle(sx0,0,sx1,visu.height()-17,gray,0.5f). > draw_line(sx0,16,sx0,visu.height()-17,black,0.5f,0xCCCCCCCCU). > draw_line(sx1,16,sx1,visu.height()-17,black,0.5f,0xCCCCCCCCU); > } > if (mouse_x>=16 && mouse_y>=16 && mouse_x<visu.width()-16 && mouse_y<visu.height()-16) { > if (graph) visu.draw_line(mouse_x,16,mouse_x,visu.height()-17,black,0.5f,0x55555555U); > const unsigned int x = (unsigned int)cimg::round((mouse_x-16.0f)*(siz-one)/(disp.width()-32),1,one?0:-1); > const double cx = nxmin + x*(nxmax-nxmin)/cimg::max(1U,siz-1); > if (_spectrum>=7) > snprintf(message,sizeof(message),"Value[%u:%g] = ( %g %g %g ... %g %g %g )",x,cx, > (double)(*this)(x,0,0,0),(double)(*this)(x,0,0,1),(double)(*this)(x,0,0,2), > (double)(*this)(x,0,0,_spectrum-4),(double)(*this)(x,0,0,_spectrum-3),(double)(*this)(x,0,0,_spectrum-1)); > else { > snprintf(message,sizeof(message),"Value[%u:%g] = ( ",x,cx); > for (int c = 0; c<(int)((*this)._spectrum); ++c) std::sprintf(message + std::strlen(message),"%g ",(double)(*this)(x,0,0,c)); > std::sprintf(message + std::strlen(message),")"); > } > if (x0>=0 && x1>=0) { > const unsigned int > nx0 = x0<=x1?x0:x1, > nx1 = x0<=x1?x1:x0, > ny0 = y0<=y1?y0:y1, > ny1 = y0<=y1?y1:y0; > const double > cx0 = nxmin + nx0*(nxmax-nxmin)/cimg::max(1U,siz-1), > cx1 = nxmin + (nx1+one)*(nxmax-nxmin)/cimg::max(1U,siz-1), > cy0 = nymax - ny0*(nymax-nymin)/(visu._height-32), > cy1 = nymax - ny1*(nymax-nymin)/(visu._height-32); > if (y0>=0 && y1>=0) > std::sprintf(message + std::strlen(message)," - Range ( %u:%g, %g ) - ( %u:%g, %g )",x0,cx0,cy0,x1+one,cx1,cy1); > else > std::sprintf(message + std::strlen(message)," - Range [ %u:%g - %u:%g ]",x0,cx0,x1+one,cx1); > } > text.assign().draw_text(0,0,message,white,ngray,1,13).resize(-100,-100,1,3); > visu.draw_image((visu.width()-text.width())/2,1,~text); > } > visu.display(disp); > } > > > switch (okey = key) { > > case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : > > case cimg::keyCTRLLEFT : case cimg::keySHIFTLEFT : okey = 0; break; > case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). > _is_resized = true; > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > if (visu || visu0) { > CImg<ucharT> &screen = visu?visu:visu0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"CImg" "_%.4u.bmp",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+screen).draw_text(0,0," Saving snapshot... ",black,gray,1,13).display(disp); > screen.save(filename); > (+screen).draw_text(0,0," Snapshot '%s' saved. ",black,gray,1,13,filename).display(disp); > } > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > if (visu || visu0) { > CImg<ucharT> &screen = visu?visu:visu0; > char filename[32] = { 0 }; > std::FILE *file; > do { > > > > snprintf(filename,sizeof(filename),"CImg" "_%.4u.cimg",snap_number++); > > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+screen).draw_text(0,0," Saving instance... ",black,gray,1,13).display(disp); > save(filename); > (+screen).draw_text(0,0," Instance '%s' saved. ",black,gray,1,13,filename).display(disp); > } > disp.set_key(key,false); okey = 0; > } break; > } > > > if (obutton!=button || omouse_x!=mouse_x || omouse_y!=mouse_y) { > visu.assign(); > if (disp.mouse_x()>=0 && disp.mouse_y()>=0) { > const int > mx = (mouse_x -16)*(int)(siz-one)/(disp.width()-32), > cx = mx<0?0:(mx>=(int)(siz-one)?(int)(siz-1-one):mx), > my = mouse_y - 16, > cy = my<=0?0:(my>=(disp.height()-32)?(disp.height()-32):my); > if (button&1) { > if (!obutton) { x0 = cx; y0 = -1; } else { x1 = cx; y1 = -1; } > } > else if (button&2) { > if (!obutton) { x0 = cx; y0 = cy; } else { x1 = cx; y1 = cy; } > } > else if (obutton) { x1 = x1>=0?cx:-1; y1 = y1>=0?cy:-1; selected = true; } > } else if (!button && obutton) selected = true; > obutton = button; omouse_x = mouse_x; omouse_y = mouse_y; > } > if (disp.is_resized()) { disp.resize(false); visu0.assign(); } > if (visu && visu0) disp.wait(); > } > > disp._normalization = old_normalization; > if (x1>=0 && x1<x0) cimg::swap(x0,x1); > if (y1<y0) cimg::swap(y0,y1); > disp.set_key(okey); > return CImg<intT>(4,1,1,1,x0,y0,x1>=0?x1+(int)one:-1,y1); > } > > > > > > > > CImg<T>& load(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { > char filename_local[1024] = { 0 }; > load(cimg::load_network_external(filename,filename_local)); > std::remove(filename_local); > return *this; > } > > const char *const ext = cimg::split_filename(filename); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { ># 36432 "./CImg.h" > if (!cimg::strcasecmp(ext,"asc")) load_ascii(filename); > else if (!cimg::strcasecmp(ext,"dlm") || > !cimg::strcasecmp(ext,"txt")) load_dlm(filename); > > > else if (!cimg::strcasecmp(ext,"bmp")) load_bmp(filename); > else if (!cimg::strcasecmp(ext,"jpg") || > !cimg::strcasecmp(ext,"jpeg") || > !cimg::strcasecmp(ext,"jpe") || > !cimg::strcasecmp(ext,"jfif") || > !cimg::strcasecmp(ext,"jif")) load_jpeg(filename); > else if (!cimg::strcasecmp(ext,"png")) load_png(filename); > else if (!cimg::strcasecmp(ext,"ppm") || > !cimg::strcasecmp(ext,"pgm") || > !cimg::strcasecmp(ext,"pnm") || > !cimg::strcasecmp(ext,"pbm") || > !cimg::strcasecmp(ext,"pnk")) load_pnm(filename); > else if (!cimg::strcasecmp(ext,"pfm")) load_pfm(filename); > else if (!cimg::strcasecmp(ext,"tif") || > !cimg::strcasecmp(ext,"tiff")) load_tiff(filename); > else if (!cimg::strcasecmp(ext,"exr")) load_exr(filename); > else if (!cimg::strcasecmp(ext,"cr2") || > !cimg::strcasecmp(ext,"crw") || > !cimg::strcasecmp(ext,"dcr") || > !cimg::strcasecmp(ext,"mrw") || > !cimg::strcasecmp(ext,"nef") || > !cimg::strcasecmp(ext,"orf") || > !cimg::strcasecmp(ext,"pix") || > !cimg::strcasecmp(ext,"ptx") || > !cimg::strcasecmp(ext,"raf") || > !cimg::strcasecmp(ext,"srf")) load_dcraw_external(filename); > else if (!cimg::strcasecmp(ext,"gif")) load_gif_external(filename); > > > else if (!cimg::strcasecmp(ext,"dcm") || > !cimg::strcasecmp(ext,"dicom")) load_medcon_external(filename); > else if (!cimg::strcasecmp(ext,"hdr") || > !cimg::strcasecmp(ext,"nii")) load_analyze(filename); > else if (!cimg::strcasecmp(ext,"par") || > !cimg::strcasecmp(ext,"rec")) load_parrec(filename); > else if (!cimg::strcasecmp(ext,"mnc")) load_minc2(filename); > else if (!cimg::strcasecmp(ext,"inr")) load_inr(filename); > else if (!cimg::strcasecmp(ext,"pan")) load_pandore(filename); > else if (!cimg::strcasecmp(ext,"cimg") || > !cimg::strcasecmp(ext,"cimgz") || > !*ext) return load_cimg(filename); > > > else if (!cimg::strcasecmp(ext,"gz")) load_gzip_external(filename); > > > else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) load_ffmpeg(filename); > else throw CImgIOException("CImg<%s>::load()", > pixel_type()); > } catch (CImgIOException&) { > std::FILE *file = 0; > try { > file = cimg::fopen(filename,"rb"); > } catch (CImgIOException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load(): Failed to open file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > > try { > const char *const f_type = cimg::file_type(file,filename); > std::fclose(file); > if (!cimg::strcasecmp(f_type,"pnm")) load_pnm(filename); > else if (!cimg::strcasecmp(f_type,"pfm")) load_pfm(filename); > else if (!cimg::strcasecmp(f_type,"bmp")) load_bmp(filename); > else if (!cimg::strcasecmp(f_type,"jpg")) load_jpeg(filename); > else if (!cimg::strcasecmp(f_type,"pan")) load_pandore(filename); > else if (!cimg::strcasecmp(f_type,"png")) load_png(filename); > else if (!cimg::strcasecmp(f_type,"tif")) load_tiff(filename); > else if (!cimg::strcasecmp(f_type,"inr")) load_inr(filename); > else if (!cimg::strcasecmp(f_type,"dcm")) load_medcon_external(filename); > else throw CImgIOException("CImg<%s>::load()", > pixel_type()); > } catch (CImgIOException&) { > try { > load_other(filename); > } catch (CImgIOException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load(): Failed to recognize format of file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > } > } > cimg::exception_mode() = omode; > return *this; > } > > > static CImg<T> get_load(const char *const filename) { > return CImg<T>().load(filename); > } > > > > > > CImg<T>& load_ascii(const char *const filename) { > return _load_ascii(0,filename); > } > > > static CImg<T> get_load_ascii(const char *const filename) { > return CImg<T>().load_ascii(filename); > } > > > CImg<T>& load_ascii(std::FILE *const file) { > return _load_ascii(file,0); > } > > > static CImg<T> get_load_ascii(std::FILE *const file) { > return CImg<T>().load_ascii(file); > } > > CImg<T>& _load_ascii(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_ascii(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > char line[256] = { 0 }; > int err = std::fscanf(nfile,"%255[^\n]",line); > unsigned int dx = 0, dy = 1, dz = 1, dc = 1; > std::sscanf(line,"%u%*c%u%*c%u%*c%u",&dx,&dy,&dz,&dc); > err = std::fscanf(nfile,"%*[^0-9.eE+-]"); > if (!dx || !dy || !dz || !dc) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_ascii(): Invalid ascii header in file '%s', image dimensions are set to (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)",dx,dy,dz,dc); > } > assign(dx,dy,dz,dc); > const unsigned long siz = size(); > unsigned long off = 0; > double val; > T *ptr = _data; > for (err = 1, off = 0; off<siz && err==1; ++off) { > err = std::fscanf(nfile,"%lf%*[^0-9.eE+-]",&val); > *(ptr++) = (T)val; > } > if (err!=1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_ascii(): Only %lu/%lu values read from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > off-1,siz,filename?filename:"(FILE*)"); > > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_dlm(const char *const filename) { > return _load_dlm(0,filename); > } > > > static CImg<T> get_load_dlm(const char *const filename) { > return CImg<T>().load_dlm(filename); > } > > > CImg<T>& load_dlm(std::FILE *const file) { > return _load_dlm(file,0); > } > > > static CImg<T> get_load_dlm(std::FILE *const file) { > return CImg<T>().load_dlm(file); > } > > CImg<T>& _load_dlm(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dlm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); > char delimiter[256] = { 0 }, tmp[256] = { 0 }; > unsigned int cdx = 0, dx = 0, dy = 0; > int err = 0; > double val; > assign(256,256); > while ((err = std::fscanf(nfile,"%lf%255[^0-9.+-]",&val,delimiter))>0) { > if (err>0) (*this)(cdx++,dy) = (T)val; > if (cdx>=_width) resize(3*_width/2,_height,1,1,0); > char c = 0; > if (!std::sscanf(delimiter,"%255[^\n]%c",tmp,&c) || c=='\n') { > dx = cimg::max(cdx,dx); > if (++dy>=_height) resize(_width,3*_height/2,1,1,0); > cdx = 0; > } > } > if (cdx && err==1) { dx = cdx; ++dy; } > if (!dx || !dy) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dlm(): Invalid DLM file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > resize(dx,dy,1,1,0); > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_bmp(const char *const filename) { > return _load_bmp(0,filename); > } > > > static CImg<T> get_load_bmp(const char *const filename) { > return CImg<T>().load_bmp(filename); > } > > > CImg<T>& load_bmp(std::FILE *const file) { > return _load_bmp(file,0); > } > > > static CImg<T> get_load_bmp(std::FILE *const file) { > return CImg<T>().load_bmp(file); > } > > CImg<T>& _load_bmp(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_bmp(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > unsigned char header[64] = { 0 }; > cimg::fread(header,54,nfile); > if (*header!='B' || header[1]!='M') { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_bmp(): Invalid BMP file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > > > int > file_size = header[0x02] + (header[0x03]<<8) + (header[0x04]<<16) + (header[0x05]<<24), > offset = header[0x0A] + (header[0x0B]<<8) + (header[0x0C]<<16) + (header[0x0D]<<24), > header_size = header[0x0E] + (header[0x0F]<<8) + (header[0x10]<<16) + (header[0x11]<<24), > dx = header[0x12] + (header[0x13]<<8) + (header[0x14]<<16) + (header[0x15]<<24), > dy = header[0x16] + (header[0x17]<<8) + (header[0x18]<<16) + (header[0x19]<<24), > compression = header[0x1E] + (header[0x1F]<<8) + (header[0x20]<<16) + (header[0x21]<<24), > nb_colors = header[0x2E] + (header[0x2F]<<8) + (header[0x30]<<16) + (header[0x31]<<24), > bpp = header[0x1C] + (header[0x1D]<<8); > > if (!file_size || file_size==offset) { > std::fseek(nfile,0,2); > file_size = (int)std::ftell(nfile); > std::fseek(nfile,54,0); > } > if (header_size>40) std::fseek(nfile, header_size - 40, 1); > > const int > cimg_iobuffer = 12*1024*1024, > dx_bytes = (bpp==1)?(dx/8+(dx%8?1:0)):((bpp==4)?(dx/2+(dx%2?1:0)):(dx*bpp/8)), > align_bytes = (4-dx_bytes%4)%4, > buf_size = cimg::min(cimg::abs(dy)*(dx_bytes + align_bytes),file_size - offset); > > CImg<intT> colormap; > if (bpp<16) { if (!nb_colors) nb_colors = 1<<bpp; } else nb_colors = 0; > if (nb_colors) { colormap.assign(nb_colors); cimg::fread(colormap._data,nb_colors,nfile); } > const int xoffset = offset - 14 - header_size - 4*nb_colors; > if (xoffset>0) std::fseek(nfile,xoffset,1); > > CImg<ucharT> buffer; > if (buf_size<cimg_iobuffer) { buffer.assign(buf_size); cimg::fread(buffer._data,buf_size,nfile); } > else buffer.assign(dx_bytes + align_bytes); > unsigned char *ptrs = buffer; > > > if (compression) { > if (file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_bmp(): Unable to load compressed data from '(*FILE)' inputs.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > else { > if (!file) cimg::fclose(nfile); > return load_other(filename); > } > } > > > assign(dx,cimg::abs(dy),1,3); > switch (bpp) { > case 1 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > unsigned char mask = 0x80, val = 0; > for (int x = 0; x<(int)((*this)._width); ++x) { > if (mask==0x80) val = *(ptrs++); > const unsigned char *col = (unsigned char*)(colormap._data + (val&mask?1:0)); > (*this)(x,y,2) = (T)*(col++); > (*this)(x,y,1) = (T)*(col++); > (*this)(x,y,0) = (T)*(col++); > mask = cimg::ror(mask); > } > ptrs+=align_bytes; > } > } break; > case 4 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > unsigned char mask = 0xF0, val = 0; > for (int x = 0; x<(int)((*this)._width); ++x) { > if (mask==0xF0) val = *(ptrs++); > const unsigned char color = (unsigned char)((mask<16)?(val&mask):((val&mask)>>4)); > const unsigned char *col = (unsigned char*)(colormap._data + color); > (*this)(x,y,2) = (T)*(col++); > (*this)(x,y,1) = (T)*(col++); > (*this)(x,y,0) = (T)*(col++); > mask = cimg::ror(mask,4); > } > ptrs+=align_bytes; > } > } break; > case 8 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > for (int x = 0; x<(int)((*this)._width); ++x) { > const unsigned char *col = (unsigned char*)(colormap._data + *(ptrs++)); > (*this)(x,y,2) = (T)*(col++); > (*this)(x,y,1) = (T)*(col++); > (*this)(x,y,0) = (T)*(col++); > } > ptrs+=align_bytes; > } > } break; > case 16 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > for (int x = 0; x<(int)((*this)._width); ++x) { > const unsigned char c1 = *(ptrs++), c2 = *(ptrs++); > const unsigned short col = (unsigned short)(c1|(c2<<8)); > (*this)(x,y,2) = (T)(col&0x1F); > (*this)(x,y,1) = (T)((col>>5)&0x1F); > (*this)(x,y,0) = (T)((col>>10)&0x1F); > } > ptrs+=align_bytes; > } > } break; > case 24 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > for (int x = 0; x<(int)((*this)._width); ++x) { > (*this)(x,y,2) = (T)*(ptrs++); > (*this)(x,y,1) = (T)*(ptrs++); > (*this)(x,y,0) = (T)*(ptrs++); > } > ptrs+=align_bytes; > } > } break; > case 32 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > for (int x = 0; x<(int)((*this)._width); ++x) { > (*this)(x,y,2) = (T)*(ptrs++); > (*this)(x,y,1) = (T)*(ptrs++); > (*this)(x,y,0) = (T)*(ptrs++); > ++ptrs; > } > ptrs+=align_bytes; > } > } break; > } > if (dy<0) mirror('y'); > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_jpeg(const char *const filename) { > return _load_jpeg(0,filename); > } > > > static CImg<T> get_load_jpeg(const char *const filename) { > return CImg<T>().load_jpeg(filename); > } > > > CImg<T>& load_jpeg(std::FILE *const file) { > return _load_jpeg(file,0); > } > > > static CImg<T> get_load_jpeg(std::FILE *const file) { > return CImg<T>().load_jpeg(file); > } ># 36890 "./CImg.h" > CImg<T>& _load_jpeg(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_jpeg(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > > if (file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_jpeg(): Unable to load data from '(FILE*)' unless libjpeg is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > else return load_other(filename); ># 36969 "./CImg.h" > } > > > > > > > > CImg<T>& load_magick(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_magick(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); ># 37034 "./CImg.h" > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_magick(): Unable to load file '%s' unless libMagick++ is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > return *this; > } > > > static CImg<T> get_load_magick(const char *const filename) { > return CImg<T>().load_magick(filename); > } > > > > > > CImg<T>& load_png(const char *const filename) { > return _load_png(0,filename); > } > > > static CImg<T> get_load_png(const char *const filename) { > return CImg<T>().load_png(filename); > } > > > CImg<T>& load_png(std::FILE *const file) { > return _load_png(file,0); > } > > > static CImg<T> get_load_png(std::FILE *const file) { > return CImg<T>().load_png(file); > } > > > CImg<T>& _load_png(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > > if (file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Unable to load data from '(FILE*)' unless libpng is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > else return load_other(filename); ># 37237 "./CImg.h" > } > > > > > > CImg<T>& load_pnm(const char *const filename) { > return _load_pnm(0,filename); > } > > > static CImg<T> get_load_pnm(const char *const filename) { > return CImg<T>().load_pnm(filename); > } > > > CImg<T>& load_pnm(std::FILE *const file) { > return _load_pnm(file,0); > } > > > static CImg<T> get_load_pnm(std::FILE *const file) { > return CImg<T>().load_pnm(file); > } > > CImg<T>& _load_pnm(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > unsigned int ppm_type, W, H, D = 1, colormax = 255; > CImg<charT> item(16384,1,1,1,0); > int err, rval, gval, bval; > const long cimg_iobuffer = 12*1024*1024; > while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if (std::sscanf(item," P%u",&ppm_type)!=1) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): PNM header not found in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if ((err=std::sscanf(item," %u %u %u %u",&W,&H,&D,&colormax))<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): WIDTH and HEIGHT fields undefined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > if (ppm_type!=1 && ppm_type!=4) { > if (err==2 || (err==3 && (ppm_type==5 || ppm_type==7 || ppm_type==8 || ppm_type==9))) { > while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if (std::sscanf(item,"%u",&colormax)!=1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): COLORMAX field is undefined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } else { colormax = D; D = 1; } > } > std::fgetc(nfile); > > switch (ppm_type) { > case 1 : { > assign(W,H,1,1); > T* ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) { if (std::fscanf(nfile,"%d",&rval)>0) *(ptrd++) = (T)(rval?0:255); else break; } > } break; > case 2 : { > assign(W,H,1,1); > T* ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) { if (std::fscanf(nfile,"%d",&rval)>0) *(ptrd++) = (T)rval; else break; } > } break; > case 3 : { > assign(W,H,1,3); > T *ptrd = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > if (std::fscanf(nfile,"%d %d %d",&rval,&gval,&bval)==3) { *(ptrd++) = (T)rval; *(ptr_g++) = (T)gval; *(ptr_b++) = (T)bval; } > else break; > } > } break; > case 4 : { > CImg<ucharT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > unsigned int w = 0, h = 0, d = 0; > for (long to_read = (long)((W/8 + (W%8?1:0))*H*D); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > unsigned char mask = 0, val = 0; > for (unsigned long off = (unsigned long)raw._width; off || mask; mask>>=1) { > if (!mask) { if (off--) val = *(ptrs++); mask = 128; } > *(ptrd++) = (T)((val&mask)?0:255); > if (++w==W) { w = 0; mask = 0; if (++h==H) { h = 0; if (++d==D) break; }} > } > } > } break; > case 5 : case 7 : { > if (colormax<256) { > CImg<ucharT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); > } > } else { > CImg<ushortT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer/2)); > cimg::fread(raw._data,raw._width,nfile); > if (!cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); > to_read-=raw._width; > const unsigned short *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); > } > } > } break; > case 6 : { > if (colormax<256) { > CImg<ucharT> raw; > assign(W,H,1,3); > T > *ptr_r = data(0,0,0,0), > *ptr_g = data(0,0,0,1), > *ptr_b = data(0,0,0,2); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width/3; off; --off) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } > } else { > CImg<ushortT> raw; > assign(W,H,1,3); > T > *ptr_r = data(0,0,0,0), > *ptr_g = data(0,0,0,1), > *ptr_b = data(0,0,0,2); > for (long to_read = (int)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer/2)); > cimg::fread(raw._data,raw._width,nfile); > if (!cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); > to_read-=raw._width; > const unsigned short *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width/3; off; --off) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } > } > } break; > case 8 : { > CImg<intT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const int *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); > } > } break; > case 9 : { > CImg<floatT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const float *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); > } > } break; > default : > assign(); > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): PNM type 'P%d' found, but type is not supported.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)",ppm_type); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_pfm(const char *const filename) { > return _load_pfm(0,filename); > } > > > static CImg<T> get_load_pfm(const char *const filename) { > return CImg<T>().load_pfm(filename); > } > > > CImg<T>& load_pfm(std::FILE *const file) { > return _load_pfm(file,0); > } > > > static CImg<T> get_load_pfm(std::FILE *const file) { > return CImg<T>().load_pfm(file); > } > > CImg<T>& _load_pfm(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pfm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > char pfm_type; > CImg<charT> item(16384,1,1,1,0); > int W = 0, H = 0, err = 0; > double scale = 0; > while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if (std::sscanf(item," P%c",&pfm_type)!=1) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pfm(): PFM header not found in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if ((err=std::sscanf(item," %d %d",&W,&H))<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pfm(): WIDTH and HEIGHT fields are undefined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > if (err==2) { > while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if (std::sscanf(item,"%lf",&scale)!=1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pfm(): SCALE field is undefined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > std::fgetc(nfile); > const bool is_color = (pfm_type=='F'), is_inverted = (scale>0)!=cimg::endianness(); > if (is_color) { > assign(W,H,1,3,0); > CImg<floatT> buf(3*W); > T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); > for (int y = 0; y<(int)((*this)._height); ++y) { > cimg::fread(buf._data,3*W,nfile); > if (is_inverted) cimg::invert_endianness(buf._data,3*W); > const float *ptrs = buf._data; > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } > } else { > assign(W,H,1,1,0); > CImg<floatT> buf(W); > T *ptrd = data(0,0,0,0); > for (int y = 0; y<(int)((*this)._height); ++y) { > cimg::fread(buf._data,W,nfile); > if (is_inverted) cimg::invert_endianness(buf._data,W); > const float *ptrs = buf._data; > for (int x = 0; x<(int)((*this)._width); ++x) *(ptrd++) = (T)*(ptrs++); > } > } > if (!file) cimg::fclose(nfile); > return mirror('y'); > } > > > > > > > > CImg<T>& load_rgb(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { > return _load_rgb(0,filename,dimw,dimh); > } > > > static CImg<T> get_load_rgb(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { > return CImg<T>().load_rgb(filename,dimw,dimh); > } > > > CImg<T>& load_rgb(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { > return _load_rgb(file,0,dimw,dimh); > } > > > static CImg<T> get_load_rgb(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { > return CImg<T>().load_rgb(file,dimw,dimh); > } > > CImg<T>& _load_rgb(std::FILE *const file, const char *const filename, const unsigned int dimw, const unsigned int dimh) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_rgb(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (!dimw || !dimh) return assign(); > const long cimg_iobuffer = 12*1024*1024; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > CImg<ucharT> raw; > assign(dimw,dimh,1,3); > T > *ptr_r = data(0,0,0,0), > *ptr_g = data(0,0,0,1), > *ptr_b = data(0,0,0,2); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > for (unsigned long off = raw._width/3UL; off; --off) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > > CImg<T>& load_rgba(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { > return _load_rgba(0,filename,dimw,dimh); > } > > > static CImg<T> get_load_rgba(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { > return CImg<T>().load_rgba(filename,dimw,dimh); > } > > > CImg<T>& load_rgba(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { > return _load_rgba(file,0,dimw,dimh); > } > > > static CImg<T> get_load_rgba(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { > return CImg<T>().load_rgba(file,dimw,dimh); > } > > CImg<T>& _load_rgba(std::FILE *const file, const char *const filename, const unsigned int dimw, const unsigned int dimh) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_rgba(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (!dimw || !dimh) return assign(); > const long cimg_iobuffer = 12*1024*1024; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > CImg<ucharT> raw; > assign(dimw,dimh,1,4); > T > *ptr_r = data(0,0,0,0), > *ptr_g = data(0,0,0,1), > *ptr_b = data(0,0,0,2), > *ptr_a = data(0,0,0,3); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > for (unsigned long off = raw._width/4UL; off; --off) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > *(ptr_a++) = (T)*(ptrs++); > } > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 37656 "./CImg.h" > CImg<T>& load_tiff(const char *const filename, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int > nfirst_frame = first_frame<last_frame?first_frame:last_frame, > nstep_frame = step_frame?step_frame:1; > unsigned int nlast_frame = first_frame<last_frame?last_frame:first_frame; > > > if (nfirst_frame || nlast_frame!=~0U || nstep_frame>1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Unable to read sub-images from file '%s' unless libtiff is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > return load_other(filename); ># 37705 "./CImg.h" > } > > > static CImg<T> get_load_tiff(const char *const filename, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1) { > return CImg<T>().load_tiff(filename,first_frame,last_frame,step_frame); > } ># 37937 "./CImg.h" > CImg<T>& load_minc2(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_minc2(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return load_other(filename); ># 37962 "./CImg.h" > } > > > static CImg<T> get_load_minc2(const char *const filename) { > return CImg<T>().load_analyze(filename); > } > > > > > > > CImg<T>& load_analyze(const char *const filename, float *const voxel_size=0) { > return _load_analyze(0,filename,voxel_size); > } > > > static CImg<T> get_load_analyze(const char *const filename, float *const voxel_size=0) { > return CImg<T>().load_analyze(filename,voxel_size); > } > > > CImg<T>& load_analyze(std::FILE *const file, float *const voxel_size=0) { > return _load_analyze(file,0,voxel_size); > } > > > static CImg<T> get_load_analyze(std::FILE *const file, float *const voxel_size=0) { > return CImg<T>().load_analyze(file,voxel_size); > } > > CImg<T>& _load_analyze(std::FILE *const file, const char *const filename, float *const voxel_size=0) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *nfile_header = 0, *nfile = 0; > if (!file) { > char body[1024] = { 0 }; > const char *const ext = cimg::split_filename(filename,body); > if (!cimg::strcasecmp(ext,"hdr")) { > nfile_header = cimg::fopen(filename,"rb"); > std::sprintf(body + std::strlen(body),".img"); > nfile = cimg::fopen(body,"rb"); > } else if (!cimg::strcasecmp(ext,"img")) { > nfile = cimg::fopen(filename,"rb"); > std::sprintf(body + std::strlen(body),".hdr"); > nfile_header = cimg::fopen(body,"rb"); > } else nfile_header = nfile = cimg::fopen(filename,"rb"); > } else nfile_header = nfile = file; > if (!nfile || !nfile_header) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): Invalid Analyze7.5 or NIFTI header in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > > bool endian = false; > unsigned int header_size; > cimg::fread(&header_size,1,nfile_header); > if (!header_size) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): Invalid zero-sized header in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > if (header_size>=4096) { endian = true; cimg::invert_endianness(header_size); } > unsigned char *const header = new unsigned char[header_size]; > cimg::fread(header+4,header_size-4,nfile_header); > if (!file && nfile_header!=nfile) cimg::fclose(nfile_header); > if (endian) { > cimg::invert_endianness((short*)(header+40),5); > cimg::invert_endianness((short*)(header+70),1); > cimg::invert_endianness((short*)(header+72),1); > cimg::invert_endianness((float*)(header+76),4); > cimg::invert_endianness((float*)(header+112),1); > } > unsigned short *dim = (unsigned short*)(header+40), dimx = 1, dimy = 1, dimz = 1, dimv = 1; > if (!dim[0]) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): File '%s' defines an image with zero dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > if (dim[0]>4) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): File '%s' defines an image with %u dimensions, reading only the 4 first.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)",dim[0]); > > if (dim[0]>=1) dimx = dim[1]; > if (dim[0]>=2) dimy = dim[2]; > if (dim[0]>=3) dimz = dim[3]; > if (dim[0]>=4) dimv = dim[4]; > float scalefactor = *(float*)(header+112); if (scalefactor==0) scalefactor=1; > const unsigned short datatype = *(short*)(header+70); > if (voxel_size) { > const float *vsize = (float*)(header+76); > voxel_size[0] = vsize[1]; voxel_size[1] = vsize[2]; voxel_size[2] = vsize[3]; > } > delete[] header; > > > assign(dimx,dimy,dimz,dimv); > switch (datatype) { > case 2 : { > unsigned char *const buffer = new unsigned char[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > case 4 : { > short *const buffer = new short[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > case 8 : { > int *const buffer = new int[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > case 16 : { > float *const buffer = new float[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > case 64 : { > double *const buffer = new double[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > default : > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): Unable to load datatype %d in file '%s'", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > datatype,filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > > CImg<T>& load_cimg(const char *const filename, const char axis='z', const float align=0) { > CImgList<T> list; > list.load_cimg(filename); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_cimg(const char *const filename, const char axis='z', const float align=0) { > return CImg<T>().load_cimg(filename,axis,align); > } > > > CImg<T>& load_cimg(std::FILE *const file, const char axis='z', const float align=0) { > CImgList<T> list; > list.load_cimg(file); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_cimg(std::FILE *const file, const char axis='z', const float align=0) { > return CImg<T>().load_cimg(file,axis,align); > } ># 38160 "./CImg.h" > CImg<T>& load_cimg(const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, > const char axis='z', const float align=0) { > CImgList<T> list; > list.load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_cimg(const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, > const char axis='z', const float align=0) { > return CImg<T>().load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1,axis,align); > } > > > CImg<T>& load_cimg(std::FILE *const file, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, > const char axis='z', const float align=0) { > CImgList<T> list; > list.load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_cimg(std::FILE *const file, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, > const char axis='z', const float align=0) { > return CImg<T>().load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1,axis,align); > } > > > > > > > CImg<T>& load_inr(const char *const filename, float *const voxel_size=0) { > return _load_inr(0,filename,voxel_size); > } > > > static CImg<T> get_load_inr(const char *const filename, float *const voxel_size=0) { > return CImg<T>().load_inr(filename,voxel_size); > } > > > CImg<T>& load_inr(std::FILE *const file, float *const voxel_size=0) { > return _load_inr(file,0,voxel_size); > } > > > static CImg<T> get_load_inr(std::FILE *const file, float *voxel_size=0) { > return CImg<T>().load_inr(file,voxel_size); > } > > static void _load_inr_header(std::FILE *file, int out[8], float *const voxel_size) { > char item[1024] = { 0 }, tmp1[64] = { 0 }, tmp2[64] = { 0 }; > out[0] = std::fscanf(file,"%63s",item); > out[0] = out[1] = out[2] = out[3] = out[5] = 1; out[4] = out[6] = out[7] = -1; > if(cimg::strncasecmp(item,"#INRIMAGE-4#{",13)!=0) > throw CImgIOException("CImg<%s>::load_inr(): INRIMAGE-4 header not found.", > pixel_type()); > > while (std::fscanf(file," %63[^\n]%*c",item)!=(-1) && std::strncmp(item,"##}",3)) { > std::sscanf(item," XDIM%*[^0-9]%d",out); > std::sscanf(item," YDIM%*[^0-9]%d",out+1); > std::sscanf(item," ZDIM%*[^0-9]%d",out+2); > std::sscanf(item," VDIM%*[^0-9]%d",out+3); > std::sscanf(item," PIXSIZE%*[^0-9]%d",out+6); > if (voxel_size) { > std::sscanf(item," VX%*[^0-9.+-]%f",voxel_size); > std::sscanf(item," VY%*[^0-9.+-]%f",voxel_size+1); > std::sscanf(item," VZ%*[^0-9.+-]%f",voxel_size+2); > } > if (std::sscanf(item," CPU%*[ =]%s",tmp1)) out[7]=cimg::strncasecmp(tmp1,"sun",3)?0:1; > switch (std::sscanf(item," TYPE%*[ =]%s %s",tmp1,tmp2)) { > case 0 : break; > case 2 : out[5] = cimg::strncasecmp(tmp1,"unsigned",8)?1:0; std::strncpy(tmp1,tmp2,sizeof(tmp1)-1); > case 1 : > if (!cimg::strncasecmp(tmp1,"int",3) || !cimg::strncasecmp(tmp1,"fixed",5)) out[4] = 0; > if (!cimg::strncasecmp(tmp1,"float",5) || !cimg::strncasecmp(tmp1,"double",6)) out[4] = 1; > if (!cimg::strncasecmp(tmp1,"packed",6)) out[4] = 2; > if (out[4]>=0) break; > default : > throw CImgIOException("CImg<%s>::load_inr(): Invalid pixel type '%s' defined in header.", > pixel_type(), > tmp2); > } > } > if(out[0]<0 || out[1]<0 || out[2]<0 || out[3]<0) > throw CImgIOException("CImg<%s>::load_inr(): Invalid dimensions (%d,%d,%d,%d) defined in header.", > pixel_type(), > out[0],out[1],out[2],out[3]); > if(out[4]<0 || out[5]<0) > throw CImgIOException("CImg<%s>::load_inr(): Incomplete pixel type defined in header.", > pixel_type()); > if(out[6]<0) > throw CImgIOException("CImg<%s>::load_inr(): Incomplete PIXSIZE field defined in header.", > pixel_type()); > if(out[7]<0) > throw CImgIOException("CImg<%s>::load_inr(): Big/Little Endian coding type undefined in header.", > pixel_type()); > } > > CImg<T>& _load_inr(std::FILE *const file, const char *const filename, float *const voxel_size) { ># 38287 "./CImg.h" > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_inr(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > int fopt[8], endian=cimg::endianness()?1:0; > bool loaded = false; > if (voxel_size) voxel_size[0] = voxel_size[1] = voxel_size[2] = 1; > _load_inr_header(nfile,fopt,voxel_size); > assign(fopt[0],fopt[1],fopt[2],fopt[3]); > if (!loaded && fopt[6]==8 && fopt[4]==0 && fopt[5]==0) { unsigned char *xval, *const val = new unsigned char[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==8 && fopt[4]==0 && fopt[5]==1) { char *xval, *const val = new char[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==16 && fopt[4]==0 && fopt[5]==0) { unsigned short *xval, *const val = new unsigned short[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==16 && fopt[4]==0 && fopt[5]==1) { short *xval, *const val = new short[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==32 && fopt[4]==0 && fopt[5]==0) { unsigned int *xval, *const val = new unsigned int[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==32 && fopt[4]==0 && fopt[5]==1) { int *xval, *const val = new int[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==32 && fopt[4]==1 && fopt[5]==0) { float *xval, *const val = new float[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==32 && fopt[4]==1 && fopt[5]==1) { float *xval, *const val = new float[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==64 && fopt[4]==1 && fopt[5]==0) { double *xval, *const val = new double[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==64 && fopt[4]==1 && fopt[5]==1) { double *xval, *const val = new double[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_inr(): Unknown pixel type defined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_exr(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_exr(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > > return load_other(filename); ># 38351 "./CImg.h" > } > > > static CImg<T> get_load_exr(const char *const filename) { > return CImg<T>().load_exr(filename); > } > > > > > > CImg<T>& load_pandore(const char *const filename) { > return _load_pandore(0,filename); > } > > > static CImg<T> get_load_pandore(const char *const filename) { > return CImg<T>().load_pandore(filename); > } > > > CImg<T>& load_pandore(std::FILE *const file) { > return _load_pandore(file,0); > } > > > static CImg<T> get_load_pandore(std::FILE *const file) { > return CImg<T>().load_pandore(file); > } > > CImg<T>& _load_pandore(std::FILE *const file, const char *const filename) { ># 38404 "./CImg.h" > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pandore(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > char header[32] = { 0 }; > cimg::fread(header,12,nfile); > if (cimg::strncasecmp("PANDORE",header,7)) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pandore(): PANDORE header not found in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > unsigned int imageid, dims[8] = { 0 }; > cimg::fread(&imageid,1,nfile); > const bool endian = (imageid>255); > if (endian) cimg::invert_endianness(imageid); > cimg::fread(header,20,nfile); > > switch (imageid) { > case 2: { if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 3: { if (sizeof(long)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 4: { if (sizeof(double)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 5: { if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 6: { if (sizeof(long)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 7: { if (sizeof(double)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 8: { if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 9: { if (sizeof(long)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 10: { if (sizeof(double)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 11 : { > cimg::fread(dims,3,nfile); > if (endian) cimg::invert_endianness(dims,3); > assign(dims[1],1,1,1); > const unsigned siz = size(); > if (dims[2]<256) { > unsigned char *buffer = new unsigned char[siz]; > cimg::fread(buffer,siz,nfile); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > if (dims[2]<65536) { > unsigned short *buffer = new unsigned short[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > unsigned int *buffer = new unsigned int[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } > } > } > break; > case 12 : { > cimg::fread(dims,4,nfile); > if (endian) cimg::invert_endianness(dims,4); > assign(dims[2],dims[1],1,1); > const unsigned int siz = size(); > if (dims[3]<256) { > unsigned char *buffer = new unsigned char[siz]; > cimg::fread(buffer,siz,nfile); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > if (dims[3]<65536) { > unsigned short *buffer = new unsigned short[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > unsigned long *buffer = new unsigned long[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } > } > } > break; > case 13 : { > cimg::fread(dims,5,nfile); > if (endian) cimg::invert_endianness(dims,5); > assign(dims[3],dims[2],dims[1],1); > const unsigned int siz = size(); > if (dims[4]<256) { > unsigned char *buffer = new unsigned char[siz]; > cimg::fread(buffer,siz,nfile); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > if (dims[4]<65536) { > unsigned short *buffer = new unsigned short[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > unsigned int *buffer = new unsigned int[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } > } > } > break; > case 16: { if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 17: { if (sizeof(long)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 18: { if (sizeof(double)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 19: { if (sizeof(unsigned char)==1) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 20: { if (sizeof(long)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 21: { if (sizeof(double)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 22: { if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 23: { if (sizeof(long)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; > case 24: { if (sizeof(unsigned long)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned long *buffer = new unsigned long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned int)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned int *buffer = new unsigned int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned short)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned short *buffer = new unsigned short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 25: { if (sizeof(double)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 26: { if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 27: { if (sizeof(long)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 28: { if (sizeof(unsigned long)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned long *buffer = new unsigned long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned int)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned int *buffer = new unsigned int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned short)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned short *buffer = new unsigned short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 29: { if (sizeof(double)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 30: { if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 31: { if (sizeof(long)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 32: { if (sizeof(unsigned long)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned long *buffer = new unsigned long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned int)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned int *buffer = new unsigned int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned short)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned short *buffer = new unsigned short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 33: { if (sizeof(double)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 34 : { > int ptbuf[4] = { 0 }; > cimg::fread(ptbuf,1,nfile); > if (endian) cimg::invert_endianness(ptbuf,1); > assign(1); (*this)(0) = (T)ptbuf[0]; > } break; > case 35 : { > int ptbuf[4] = { 0 }; > cimg::fread(ptbuf,2,nfile); > if (endian) cimg::invert_endianness(ptbuf,2); > assign(2); (*this)(0) = (T)ptbuf[1]; (*this)(1) = (T)ptbuf[0]; > } break; > case 36 : { > int ptbuf[4] = { 0 }; > cimg::fread(ptbuf,3,nfile); > if (endian) cimg::invert_endianness(ptbuf,3); > assign(3); (*this)(0) = (T)ptbuf[2]; (*this)(1) = (T)ptbuf[1]; (*this)(2) = (T)ptbuf[0]; > } break; > default : > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pandore(): Unable to load data with ID_type %u in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > imageid,filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > > CImg<T>& load_parrec(const char *const filename, const char axis='c', const float align=0) { > CImgList<T> list; > list.load_parrec(filename); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_parrec(const char *const filename, const char axis='c', const float align=0) { > return CImg<T>().load_parrec(filename,axis,align); > } ># 38610 "./CImg.h" > CImg<T>& load_raw(const char *const filename, > const unsigned int size_x=0, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, > const bool is_multiplexed=false, const bool invert_endianness=false, > const unsigned long offset=0) { > return _load_raw(0,filename,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); > } > > > static CImg<T> get_load_raw(const char *const filename, > const unsigned int size_x=0, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, > const bool is_multiplexed=false, const bool invert_endianness=false, > const unsigned long offset=0) { > return CImg<T>().load_raw(filename,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); > } > > > CImg<T>& load_raw(std::FILE *const file, > const unsigned int size_x=0, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, > const bool is_multiplexed=false, const bool invert_endianness=false, > const unsigned long offset=0) { > return _load_raw(file,0,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); > } > > > static CImg<T> get_load_raw(std::FILE *const file, > const unsigned int size_x=0, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, > const bool is_multiplexed=false, const bool invert_endianness=false, > const unsigned long offset=0) { > return CImg<T>().load_raw(file,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); > } > > CImg<T>& _load_raw(std::FILE *const file, const char *const filename, > const unsigned int size_x, const unsigned int size_y, > const unsigned int size_z, const unsigned int size_c, > const bool is_multiplexed, const bool invert_endianness, > const unsigned long offset) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_raw(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > unsigned int siz = size_x*size_y*size_z*size_c, _size_x = size_x, _size_y = size_y, _size_z = size_z, _size_c = size_c; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > if (!siz) { > const long fpos = std::ftell(nfile); > if (fpos<0) throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_raw(): Cannot determine size of input file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),filename?filename:"(FILE*)"); > std::fseek(nfile,0,2); > siz = _size_y = (unsigned int)std::ftell(nfile)/sizeof(T); > _size_x = _size_z = _size_c = 1; > std::fseek(nfile,fpos,0); > } > std::fseek(nfile,(long)offset,0); > assign(_size_x,_size_y,_size_z,_size_c,0); > if (!is_multiplexed || size_c==1) { > cimg::fread(_data,siz,nfile); > if (invert_endianness) cimg::invert_endianness(_data,siz); > } else { > CImg<T> buf(1,1,1,_size_c); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > cimg::fread(buf._data,_size_c,nfile); > if (invert_endianness) cimg::invert_endianness(buf._data,_size_c); > set_vector_at(buf,x,y,z); > } > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 38694 "./CImg.h" > CImg<T>& load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false, > const char axis='z', const float align=0) { > return get_load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format,resume,axis,align).move_to(*this); > } > > > static CImg<T> get_load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false, > const char axis='z', const float align=0) { > return CImgList<T>().load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format,resume).get_append(axis,align); > } ># 38718 "./CImg.h" > CImg<T>& load_yuv(const char *const filename, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { > return get_load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb,axis).move_to(*this); > } > > > static CImg<T> get_load_yuv(const char *const filename, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { > return CImgList<T>().load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb).get_append(axis); > } > > > CImg<T>& load_yuv(std::FILE *const file, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { > return get_load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb,axis).move_to(*this); > } > > > static CImg<T> get_load_yuv(std::FILE *const file, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { > return CImgList<T>().load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb).get_append(axis); > } > > > > > > > > template<typename tf, typename tc> > CImg<T>& load_off(CImgList<tf>& primitives, CImgList<tc>& colors, const char *const filename) { > return _load_off(primitives,colors,0,filename); > } > > > template<typename tf, typename tc> > static CImg<T> get_load_off(CImgList<tf>& primitives, CImgList<tc>& colors, const char *const filename) { > return CImg<T>().load_off(primitives,colors,filename); > } > > > template<typename tf, typename tc> > CImg<T>& load_off(CImgList<tf>& primitives, CImgList<tc>& colors, std::FILE *const file) { > return _load_off(primitives,colors,file,0); > } > > > template<typename tf, typename tc> > static CImg<T> get_load_off(CImgList<tf>& primitives, CImgList<tc>& colors, std::FILE *const file) { > return CImg<T>().load_off(primitives,colors,file); > } > > template<typename tf, typename tc> > CImg<T>& _load_off(CImgList<tf>& primitives, CImgList<tc>& colors, > std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); > unsigned int nb_points = 0, nb_primitives = 0, nb_read = 0; > char line[256] = { 0 }; > int err; > > > do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); > if (cimg::strncasecmp(line,"OFF",3) && cimg::strncasecmp(line,"COFF",4)) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): OFF header not found in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); > if ((err = std::sscanf(line,"%u%u%*[^\n] ",&nb_points,&nb_primitives))!=2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Invalid number of vertices or primitives specified in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > > > assign(nb_points,3); > float X = 0, Y = 0, Z = 0; > for (int l = 0; l<(int)((*this)._width); ++l) { > do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); > if ((err = std::sscanf(line,"%f%f%f%*[^\n] ",&X,&Y,&Z))!=3) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read vertex %u/%u in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > l+1,nb_points,filename?filename:"(FILE*)"); > } > (*this)(l,0) = (T)X; (*this)(l,1) = (T)Y; (*this)(l,2) = (T)Z; > } > > > primitives.assign(); > colors.assign(); > bool stop_flag = false; > while (!stop_flag) { > float c0 = 0.7f, c1 = 0.7f, c2 = 0.7f; > unsigned int prim = 0, i0 = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0; > *line = 0; > if ((err = std::fscanf(nfile,"%u",&prim))!=1) stop_flag = true; > else { > ++nb_read; > switch (prim) { > case 1 : { > if ((err = std::fscanf(nfile,"%u%255[^\n] ",&i0,line))<2) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0).move_to(primitives); > CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); > } > } break; > case 2 : { > if ((err = std::fscanf(nfile,"%u%u%255[^\n] ",&i0,&i1,line))<2) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i1).move_to(primitives); > CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); > } > } break; > case 3 : { > if ((err = std::fscanf(nfile,"%u%u%u%255[^\n] ",&i0,&i1,&i2,line))<3) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i2,i1).move_to(primitives); > CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); > } > } break; > case 4 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,line))<4) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i3,i2,i1).move_to(primitives); > CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); > } > } break; > case 5 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,line))<5) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i3,i2,i1).move_to(primitives); > CImg<tf>::vector(i0,i4,i3).move_to(primitives); > colors.insert(2,CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); > ++nb_primitives; > } > } break; > case 6 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,line))<6) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i3,i2,i1).move_to(primitives); > CImg<tf>::vector(i0,i5,i4,i3).move_to(primitives); > colors.insert(2,CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); > ++nb_primitives; > } > } break; > case 7 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,&i6,line))<7) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i4,i3,i1).move_to(primitives); > CImg<tf>::vector(i0,i6,i5,i4).move_to(primitives); > CImg<tf>::vector(i3,i2,i1).move_to(primitives); > colors.insert(3,CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); > ++(++nb_primitives); > } > } break; > case 8 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,&i6,&i7,line))<7) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i3,i2,i1).move_to(primitives); > CImg<tf>::vector(i0,i5,i4,i3).move_to(primitives); > CImg<tf>::vector(i0,i7,i6,i5).move_to(primitives); > colors.insert(3,CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); > ++(++nb_primitives); > } > } break; > default : > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u (%u vertices) from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,prim,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } > } > } > if (!file) cimg::fclose(nfile); > if (primitives._width!=nb_primitives) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Only %u/%u primitives read from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > primitives._width,nb_primitives,filename?filename:"(FILE*)"); > return *this; > } > > > > > > > > CImg<T>& load_ffmpeg_external(const char *const filename, const char axis='z', const float align=0) { > return get_load_ffmpeg_external(filename,axis,align).move_to(*this); > } > > > static CImg<T> get_load_ffmpeg_external(const char *const filename, const char axis='z', const float align=0) { > return CImgList<T>().load_ffmpeg_external(filename).get_append(axis,align); > } ># 38999 "./CImg.h" > CImg<T>& load_gif_external(const char *const filename, > const char axis='z', const float align=0) { > return get_load_gif_external(filename,axis,align).move_to(*this); > } > > > static CImg<T> get_load_gif_external(const char *const filename, > const char axis='z', const float align=0) { > return CImgList<T>().load_gif_external(filename).get_append(axis,align); > } > > > > > > CImg<T>& load_graphicsmagick_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_graphicsmagick_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file = 0; > const CImg<charT> s_filename = CImg<charT>::string(filename)._system_strescape(); > > snprintf(command,sizeof(command),"%s convert \"%s\" pnm:-", > cimg::graphicsmagick_path(),s_filename.data()); > file = popen(command,"r"); > if (file) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { load_pnm(file); } catch (...) { > pclose(file); > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_graphicsmagick_external(): Failed to load file '%s' with external command 'gm'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > pclose(file); > return *this; > } > > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.pnm",cimg::temporary_path(),'/',cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s convert \"%s\" \"%s\"", > cimg::graphicsmagick_path(),s_filename.data(),CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command,cimg::graphicsmagick_path()); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_graphicsmagick_external(): Failed to load file '%s' with external command 'gm'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > } else cimg::fclose(file); > load_pnm(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImg<T> get_load_graphicsmagick_external(const char *const filename) { > return CImg<T>().load_graphicsmagick_external(filename); > } > > > > > > CImg<T>& load_gzip_external(const char *const filename) { > if (!filename) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_gzip_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > const char > *const ext = cimg::split_filename(filename,body), > *const ext2 = cimg::split_filename(body,0); > > std::FILE *file = 0; > do { > if (!cimg::strcasecmp(ext,"gz")) { > if (*ext2) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext2); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > } else { > if (*ext) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > } > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", > cimg::gunzip_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_gzip_external(): Failed to load file '%s' with external command 'gunzip'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > } else cimg::fclose(file); > load(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImg<T> get_load_gzip_external(const char *const filename) { > return CImg<T>().load_gzip_external(filename); > } > > > > > > CImg<T>& load_imagemagick_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_imagemagick_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file = 0; > const CImg<charT> s_filename = CImg<charT>::string(filename)._system_strescape(); > > snprintf(command,sizeof(command),"%s%s \"%s\" pnm:-", > cimg::imagemagick_path(), > !cimg::strcasecmp(cimg::split_filename(filename),"pdf")?" -density 400x400":"", > s_filename.data()); > file = popen(command,"r"); > if (file) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { load_pnm(file); } catch (...) { > pclose(file); > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_imagemagick_external(): Failed to load file '%s' with external command 'convert'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > pclose(file); > return *this; > } > > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.pnm",cimg::temporary_path(),'/',cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s%s \"%s\" \"%s\"", > cimg::imagemagick_path(), > !cimg::strcasecmp(cimg::split_filename(filename),"pdf")?" -density 400x400":"", > s_filename.data(),CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command,cimg::imagemagick_path()); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_imagemagick_external(): Failed to load file '%s' with external command 'convert'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > } else cimg::fclose(file); > load_pnm(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImg<T> get_load_imagemagick_external(const char *const filename) { > return CImg<T>().load_imagemagick_external(filename); > } > > > > > > CImg<T>& load_medcon_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_medcon_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > cimg::fclose(cimg::fopen(filename,"r")); > std::FILE *file = 0; > do { > snprintf(filetmp,sizeof(filetmp),"%s.hdr",cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s -w -c anlz -o \"%s\" -f \"%s\"", > cimg::medcon_path(), > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > cimg::split_filename(filetmp,body); > > snprintf(command,sizeof(command),"%s.hdr",body); > file = std::fopen(command,"rb"); > if (!file) { > snprintf(command,sizeof(command),"m000-%s.hdr",body); > file = std::fopen(command,"rb"); > if (!file) { > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_medcon_external(): Failed to load file '%s' with external command 'medcon'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > } > cimg::fclose(file); > load_analyze(command); > std::remove(command); > cimg::split_filename(command,body); > snprintf(command,sizeof(command),"%s.img",body); > std::remove(command); > return *this; > } > > > static CImg<T> get_load_medcon_external(const char *const filename) { > return CImg<T>().load_medcon_external(filename); > } > > > > > > CImg<T>& load_dcraw_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dcraw_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file = 0; > const CImg<charT> s_filename = CImg<charT>::string(filename)._system_strescape(); > > snprintf(command,sizeof(command),"%s -w -4 -c \"%s\"", > cimg::dcraw_path(),s_filename.data()); > file = popen(command,"r"); > if (file) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { load_pnm(file); } catch (...) { > pclose(file); > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dcraw_external(): Failed to load file '%s' with external command 'dcraw'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > pclose(file); > return *this; > } > > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.ppm",cimg::temporary_path(),'/',cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s -w -4 -c \"%s\" > \"%s\"", > cimg::dcraw_path(),s_filename.data(),CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command,cimg::dcraw_path()); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dcraw_external(): Failed to load file '%s' with external command 'dcraw'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > } else cimg::fclose(file); > load_pnm(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImg<T> get_load_dcraw_external(const char *const filename) { > return CImg<T>().load_dcraw_external(filename); > } > > > > > > > > CImg<T>& load_camera(const unsigned int camera_index=0, const unsigned int skip_frames=0, const bool release_camera=true, > const unsigned int capture_width=0, const unsigned int capture_height=0) { ># 39331 "./CImg.h" > cimg::unused(camera_index,skip_frames,release_camera,capture_width,capture_height); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_camera(): This function requires the OpenCV library to run " > "(macro 'cimg_use_opencv' must be defined).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return *this; > } > > > static CImg<T> get_load_camera(const unsigned int camera_index=0, const unsigned int skip_frames=0, const bool release_camera=true, > const unsigned int capture_width=0, const unsigned int capture_height=0) { > return CImg<T>().load_camera(camera_index,skip_frames,release_camera,capture_width,capture_height); > } > > > > > > CImg<T>& load_other(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_other(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { load_magick(filename); } > catch (CImgException&) { > try { load_imagemagick_external(filename); } > catch (CImgException&) { > try { load_graphicsmagick_external(filename); } > catch (CImgException&) { > try { load_cimg(filename); } > catch (CImgException&) { > try { > std::fclose(cimg::fopen(filename,"rb")); > } catch (CImgException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_other(): Failed to open file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_other(): Failed to recognize format of file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > } > } > } > cimg::exception_mode() = omode; > return *this; > } > > > static CImg<T> get_load_other(const char *const filename) { > return CImg<T>().load_other(filename); > } ># 39405 "./CImg.h" > const CImg<T>& print(const char *const title=0, const bool display_stats=true) const { > int xm = 0, ym = 0, zm = 0, vm = 0, xM = 0, yM = 0, zM = 0, vM = 0; > CImg<doubleT> st; > if (!is_empty() && display_stats) { > st = get_stats(); > xm = (int)st[4]; ym = (int)st[5], zm = (int)st[6], vm = (int)st[7]; > xM = (int)st[8]; yM = (int)st[9], zM = (int)st[10], vM = (int)st[11]; > } > const unsigned long siz = size(), msiz = siz*sizeof(T), siz1 = siz-1, mdisp = msiz<8*1024?0:(msiz<8*1024*1024?1:2), width1 = _width-1; > > char _title[64] = { 0 }; > if (!title) snprintf(_title,sizeof(_title),"CImg<%s>",pixel_type()); > > std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = (%u,%u,%u,%u) [%lu %s], %sdata%s = (%s*)%p", > cimg::t_magenta,cimg::t_bold,title?title:_title,cimg::t_normal, > cimg::t_bold,cimg::t_normal,(void*)this, > cimg::t_bold,cimg::t_normal,_width,_height,_depth,_spectrum, > mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), > mdisp==0?"b":(mdisp==1?"Kio":"Mio"), > cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); > if (_data) std::fprintf(cimg::output(),"..%p (%s) = [ ",(void*)((char*)end()-1),_is_shared?"shared":"non-shared"); > else std::fprintf(cimg::output()," (%s) = [ ",_is_shared?"shared":"non-shared"); > > if (!is_empty()) for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) { > std::fprintf(cimg::output(),cimg::type<T>::format(),cimg::type<T>::format(_data[off])); > if (off!=siz1) std::fprintf(cimg::output(),"%s",off%_width==width1?" ; ":" "); > if (off==7 && siz>16) { off = siz1-8; std::fprintf(cimg::output(),"... "); } > } > if (!is_empty() && display_stats) > std::fprintf(cimg::output()," ], %smin%s = %g, %smax%s = %g, %smean%s = %g, %sstd%s = %g, %scoords_min%s = (%u,%u,%u,%u), %scoords_max%s = (%u,%u,%u,%u).\n", > cimg::t_bold,cimg::t_normal,st[0], > cimg::t_bold,cimg::t_normal,st[1], > cimg::t_bold,cimg::t_normal,st[2], > cimg::t_bold,cimg::t_normal,std::sqrt(st[3]), > cimg::t_bold,cimg::t_normal,xm,ym,zm,vm, > cimg::t_bold,cimg::t_normal,xM,yM,zM,vM); > else std::fprintf(cimg::output(),"%s].\n",is_empty()?"":" "); > std::fflush(cimg::output()); > return *this; > } > > > > > > const CImg<T>& display(CImgDisplay& disp) const { > disp.display(*this); > return *this; > } > > > > > > > const CImg<T>& display(CImgDisplay &disp, const bool display_info, unsigned int *const XYZ=0) const { > return _display(disp,0,display_info,XYZ,false); > } > > > > > > > const CImg<T>& display(const char *const title=0, const bool display_info=true, unsigned int *const XYZ=0) const { > CImgDisplay disp; > return _display(disp,title,display_info,XYZ,false); > } > > const CImg<T>& _display(CImgDisplay &disp, const char *const title, > const bool display_info, unsigned int *const XYZ, > const bool exit_on_simpleclick) const { > unsigned int oldw = 0, oldh = 0, _XYZ[3] = { 0 }, key = 0; > int x0 = 0, y0 = 0, z0 = 0, x1 = width()-1, y1 = height()-1, z1 = depth()-1; > > if (!disp) { > disp.assign(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),title?title:0,1); > if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); > else disp.set_title("%s",title); > } else if (title) disp.set_title("%s",title); > disp.show().flush(); > > const CImg<char> dtitle = CImg<char>::string(disp.title()); > if (display_info) print(dtitle); > > CImg<T> zoom; > for (bool reset_view = true, resize_disp = false, is_first_select = true; !key && !disp.is_closed(); ) { > if (reset_view) { > if (XYZ) { _XYZ[0] = XYZ[0]; _XYZ[1] = XYZ[1]; _XYZ[2] = XYZ[2]; } > else { _XYZ[0] = (x0 + x1)/2; _XYZ[1] = (y0 + y1)/2; _XYZ[2] = (z0 + z1)/2; } > x0 = 0; y0 = 0; z0 = 0; x1 = width()-1; y1 = height()-1; z1 = depth()-1; > oldw = disp.width(); oldh = disp.height(); > reset_view = false; > } > if (!x0 && !y0 && !z0 && x1==width()-1 && y1==height()-1 && z1==depth()-1) { if (is_empty()) zoom.assign(1,1,1,1,0); else zoom.assign(); } > else zoom = get_crop(x0,y0,z0,x1,y1,z1); > > const unsigned int > dx = 1 + x1 - x0, dy = 1 + y1 - y0, dz = 1 + z1 - z0, > tw = dx + (dz>1?dz:0), th = dy + (dz>1?dz:0); > if (!is_empty() && !disp.is_fullscreen() && resize_disp) { > const unsigned int > ttw = tw*disp.width()/oldw, tth = th*disp.height()/oldh, > dM = cimg::max(ttw,tth), diM = (unsigned int)cimg::max(disp.width(),disp.height()), > imgw = cimg::max(16U,ttw*diM/dM), imgh = cimg::max(16U,tth*diM/dM); > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(imgw,imgh,1,128,-85,false),CImgDisplay::_fitscreen(imgw,imgh,1,128,-85,true),false); > resize_disp = false; > } > oldw = tw; oldh = th; > > bool > go_up = false, go_down = false, go_left = false, go_right = false, > go_inc = false, go_dec = false, go_in = false, go_out = false, > go_in_center = false; > const CImg<T>& visu = zoom?zoom:*this; > > disp.set_title("%s",dtitle._data); > if (_width>1 && visu._width==1) disp.set_title("%s | x=%u",disp._title,x0); > if (_height>1 && visu._height==1) disp.set_title("%s | y=%u",disp._title,y0); > if (_depth>1 && visu._depth==1) disp.set_title("%s | z=%u",disp._title,z0); > > if (!is_first_select) { _XYZ[0] = (x1-x0)/2; _XYZ[1] = (y1-y0)/2; _XYZ[2] = (z1-z0)/2; } > const CImg<intT> selection = visu._get_select(disp,0,2,_XYZ,x0,y0,z0,is_first_select,_depth>1); > is_first_select = false; > > if (disp.wheel()) { > if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { go_out = !(go_in = disp.wheel()>0); go_in_center = false; } > else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) { go_right = !(go_left = disp.wheel()>0); } > else if (disp.is_keyALT() || disp.is_keyALTGR() || _depth==1) { go_down = !(go_up = disp.wheel()>0); } > disp.set_wheel(); > } > > const int > sx0 = selection(0), sy0 = selection(1), sz0 = selection(2), > sx1 = selection(3), sy1 = selection(4), sz1 = selection(5); > if (sx0>=0 && sy0>=0 && sz0>=0 && sx1>=0 && sy1>=0 && sz1>=0) { > x1 = x0 + sx1; y1 = y0 + sy1; z1 = z0 + sz1; > x0+=sx0; y0+=sy0; z0+=sz0; > if (sx0==sx1 && sy0==sy1 && sz0==sz1) { > if (exit_on_simpleclick && (!zoom || is_empty())) break; else reset_view = true; > } > resize_disp = true; > } else switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : > > case 0 : case cimg::keyCTRLLEFT : case cimg::keyPAD5 : case cimg::keySHIFTLEFT : > > case cimg::keyALTGR : > > case cimg::keyALT : key = 0; break; > case cimg::keyP : if (visu._depth>1 && (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT())) { > const unsigned int > w1 = visu._width*disp.width()/(visu._width+(visu._depth>1?visu._depth:0)), > h1 = visu._height*disp.height()/(visu._height+(visu._depth>1?visu._depth:0)); > float frame_timing = 5; > bool is_stopped = false; > disp.set_key(key,false).set_wheel().resize(CImgDisplay::_fitscreen(w1,h1,1,128,-85,false),CImgDisplay::_fitscreen(w1,h1,1,128,-85,true),false); key = 0; > for (unsigned int timer = 0; !key && !disp.is_closed() && !disp.button(); ) { > if (disp.is_resized()) disp.resize(false); > if (!timer) { > visu.get_slice((int)_XYZ[2]).display(disp.set_title("%s | z=%d",dtitle.data(),_XYZ[2])); > (++_XYZ[2])%=visu._depth; > } > if (!is_stopped) { if (++timer>(unsigned int)frame_timing) timer = 0; } else timer = ~0U; > if (disp.wheel()) { frame_timing-=disp.wheel()/3.0f; disp.set_wheel(); } > switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : > > case cimg::keyCTRLLEFT : key = 0; break; > case cimg::keyPAGEUP : frame_timing-=0.3f; key = 0; break; > case cimg::keyPAGEDOWN : frame_timing+=0.3f; key = 0; break; > case cimg::keySPACE : is_stopped = !is_stopped; disp.set_key(key,false); key = 0; break; > case cimg::keyARROWLEFT : case cimg::keyARROWUP : is_stopped = true; timer = 0; key = 0; break; > case cimg::keyARROWRIGHT : case cimg::keyARROWDOWN : is_stopped = true; (_XYZ[2]+=visu._depth-2)%=visu._depth; timer = 0; key = 0; break; > case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false); > disp.set_key(key,false); key = 0; > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false).set_key(key,false); key = 0; > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),false).set_key(key,false); key = 0; > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen().set_key(key,false); key = 0; > } break; > } > frame_timing = frame_timing<1?1:(frame_timing>39?39:frame_timing); > disp.wait(20); > } > const unsigned int > w2 = (visu._width + (visu._depth>1?visu._depth:0))*disp.width()/visu._width, > h2 = (visu._height + (visu._depth>1?visu._depth:0))*disp.height()/visu._height; > disp.resize(CImgDisplay::_fitscreen(w2,h2,1,128,-85,false),CImgDisplay::_fitscreen(w2,h2,1,128,-85,true),false).set_title(dtitle.data()).set_key().set_button().set_wheel(); > key = 0; > } break; > case cimg::keyHOME : reset_view = resize_disp = true; key = 0; break; > case cimg::keyPADADD : go_in = true; go_in_center = true; key = 0; break; > case cimg::keyPADSUB : go_out = true; key = 0; break; > case cimg::keyARROWLEFT : case cimg::keyPAD4: go_left = true; key = 0; break; > case cimg::keyARROWRIGHT : case cimg::keyPAD6: go_right = true; key = 0; break; > case cimg::keyARROWUP : case cimg::keyPAD8: go_up = true; key = 0; break; > case cimg::keyARROWDOWN : case cimg::keyPAD2: go_down = true; key = 0; break; > case cimg::keyPAD7 : go_up = go_left = true; key = 0; break; > case cimg::keyPAD9 : go_up = go_right = true; key = 0; break; > case cimg::keyPAD1 : go_down = go_left = true; key = 0; break; > case cimg::keyPAD3 : go_down = go_right = true; key = 0; break; > case cimg::keyPAGEUP : go_inc = true; key = 0; break; > case cimg::keyPAGEDOWN : go_dec = true; key = 0; break; > } > if (go_in) { > const int > mx = go_in_center?disp.width()/2:disp.mouse_x(), > my = go_in_center?disp.height()/2:disp.mouse_y(), > mX = mx*(_width+(_depth>1?_depth:0))/disp.width(), > mY = my*(_height+(_depth>1?_depth:0))/disp.height(); > int X = _XYZ[0], Y = _XYZ[1], Z = _XYZ[2]; > if (mX<width() && mY<height()) { X = x0 + mX*(1+x1-x0)/_width; Y = y0 + mY*(1+y1-y0)/_height; Z = _XYZ[2]; } > if (mX<width() && mY>=height()) { X = x0 + mX*(1+x1-x0)/_width; Z = z0 + (mY-_height)*(1+z1-z0)/_depth; Y = _XYZ[1]; } > if (mX>=width() && mY<height()) { Y = y0 + mY*(1+y1-y0)/_height; Z = z0 + (mX-_width)*(1+z1-z0)/_depth; X = _XYZ[0]; } > if (x1-x0>4) { x0 = X - 7*(X-x0)/8; x1 = X + 7*(x1-X)/8; } > if (y1-y0>4) { y0 = Y - 7*(Y-y0)/8; y1 = Y + 7*(y1-Y)/8; } > if (z1-z0>4) { z0 = Z - 7*(Z-z0)/8; z1 = Z + 7*(z1-Z)/8; } > } > if (go_out) { > const int > delta_x = (x1-x0)/8, delta_y = (y1-y0)/8, delta_z = (z1-z0)/8, > ndelta_x = delta_x?delta_x:(_width>1?1:0), > ndelta_y = delta_y?delta_y:(_height>1?1:0), > ndelta_z = delta_z?delta_z:(_depth>1?1:0); > x0-=ndelta_x; y0-=ndelta_y; z0-=ndelta_z; > x1+=ndelta_x; y1+=ndelta_y; z1+=ndelta_z; > if (x0<0) { x1-=x0; x0 = 0; if (x1>=width()) x1 = width() - 1; } > if (y0<0) { y1-=y0; y0 = 0; if (y1>=height()) y1 = height() - 1; } > if (z0<0) { z1-=z0; z0 = 0; if (z1>=depth()) z1 = depth() - 1; } > if (x1>=width()) { x0-=(x1-width()+1); x1 = width()-1; if (x0<0) x0 = 0; } > if (y1>=height()) { y0-=(y1-height()+1); y1 = height()-1; if (y0<0) y0 = 0; } > if (z1>=depth()) { z0-=(z1-depth()+1); z1 = depth()-1; if (z0<0) z0 = 0; } > } > if (go_left) { > const int delta = (x1-x0)/5, ndelta = delta?delta:(_width>1?1:0); > if (x0-ndelta>=0) { x0-=ndelta; x1-=ndelta; } > else { x1-=x0; x0 = 0; } > } > if (go_right) { > const int delta = (x1-x0)/5, ndelta = delta?delta:(_width>1?1:0); > if (x1+ndelta<width()) { x0+=ndelta; x1+=ndelta; } > else { x0+=(width()-1-x1); x1 = width()-1; } > } > if (go_up) { > const int delta = (y1-y0)/5, ndelta = delta?delta:(_height>1?1:0); > if (y0-ndelta>=0) { y0-=ndelta; y1-=ndelta; } > else { y1-=y0; y0 = 0; } > } > if (go_down) { > const int delta = (y1-y0)/5, ndelta = delta?delta:(_height>1?1:0); > if (y1+ndelta<height()) { y0+=ndelta; y1+=ndelta; } > else { y0+=(height()-1-y1); y1 = height()-1; } > } > if (go_inc) { > const int delta = (z1-z0)/5, ndelta = delta?delta:(_depth>1?1:0); > if (z0-ndelta>=0) { z0-=ndelta; z1-=ndelta; } > else { z1-=z0; z0 = 0; } > } > if (go_dec) { > const int delta = (z1-z0)/5, ndelta = delta?delta:(_depth>1?1:0); > if (z1+ndelta<depth()) { z0+=ndelta; z1+=ndelta; } > else { z0+=(depth()-1-z1); z1 = depth()-1; } > } > disp.wait(100); > } > disp.set_key(key); > if (XYZ) { XYZ[0] = _XYZ[0]; XYZ[1] = _XYZ[1]; XYZ[2] = _XYZ[2]; } > return *this; > } ># 39705 "./CImg.h" > template<typename tp, typename tf, typename tc, typename to> > const CImg<T>& display_object3d(CImgDisplay& disp, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return _display_object3d(disp,0,vertices,primitives,colors,opacities,centering,render_static, > render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp, typename tf, typename tc, typename to> > const CImg<T>& display_object3d(const char *const title, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > CImgDisplay disp; > return _display_object3d(disp,title,vertices,primitives,colors,opacities,centering,render_static, > render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp, typename tf, typename tc> > const CImg<T>& display_object3d(CImgDisplay &disp, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(disp,vertices,primitives,colors,CImgList<floatT>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp, typename tf, typename tc> > const CImg<T>& display_object3d(const char *const title, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(title,vertices,primitives,colors,CImgList<floatT>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp, typename tf> > const CImg<T>& display_object3d(CImgDisplay &disp, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(disp,vertices,primitives,CImgList<T>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > > template<typename tp, typename tf> > const CImg<T>& display_object3d(const char *const title, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(title,vertices,primitives,CImgList<T>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp> > const CImg<T>& display_object3d(CImgDisplay &disp, > const CImg<tp>& vertices, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(disp,vertices,CImgList<uintT>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp> > const CImg<T>& display_object3d(const char *const title, > const CImg<tp>& vertices, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(title,vertices,CImgList<uintT>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > template<typename tp, typename tf, typename tc, typename to> > const CImg<T>& _display_object3d(CImgDisplay& disp, const char *const title, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool centering, > const int render_static, const int render_motion, > const bool is_double_sided, const float focale, > const float light_x, const float light_y, const float light_z, > const float specular_lightness, const float specular_shininess, > const bool display_axes, float *const pose_matrix) const { > typedef typename cimg::superset<tp,float>::type tpfloat; > > > if (is_empty()) { > if (disp) return CImg<T>(disp.width(),disp.height(),1,(colors && colors[0].size()==1)?1:3,0). > _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > else return CImg<T>(1,2,1,1,64,128).resize(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true), > 1,(colors && colors[0].size()==1)?1:3,3). > _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } else { if (disp) disp.resize(*this,false); } > char error_message[1024] = { 0 }; > if (!vertices.is_object3d(primitives,colors,opacities,true,error_message)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "display_object3d(): Invalid specified 3d object (%u,%u) (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),vertices._width,primitives._width,error_message); > if (vertices._width && !primitives) { > CImgList<tf> nprimitives(vertices._width,1,1,1,1); > for (int l = 0; l<(int)(nprimitives)._width; ++l) nprimitives(l,0) = l; > return _display_object3d(disp,title,vertices,nprimitives,colors,opacities,centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > if (!disp) { > disp.assign(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),title?title:0,3); > if (!title) disp.set_title("CImg<%s> (%u vertices, %u primitives)",pixel_type(),vertices._width,primitives._width); > } else if (title) disp.set_title("%s",title); > > > CImg<floatT> > pose, > rotated_vertices(vertices._width,3), > bbox_vertices, rotated_bbox_vertices, > axes_vertices, rotated_axes_vertices, > bbox_opacities, axes_opacities; > CImgList<uintT> bbox_primitives, axes_primitives; > CImgList<tf> reverse_primitives; > CImgList<T> bbox_colors, bbox_colors2, axes_colors; > unsigned int ns_width = 0, ns_height = 0; > int _is_double_sided = (int)is_double_sided; > bool ndisplay_axes = display_axes; > const CImg<T> > background_color(1,1,1,_spectrum,0), > foreground_color(1,1,1,_spectrum,255); > float > Xoff = 0, Yoff = 0, Zoff = 0, sprite_scale = 1, > xm = 0, xM = vertices?vertices.get_shared_row(0).max_min(xm):0, > ym = 0, yM = vertices?vertices.get_shared_row(1).max_min(ym):0, > zm = 0, zM = vertices?vertices.get_shared_row(2).max_min(zm):0; > const float delta = cimg::max(xM-xm,yM-ym,zM-zm); > > rotated_bbox_vertices = bbox_vertices.assign(8,3,1,1, > xm,xM,xM,xm,xm,xM,xM,xm, > ym,ym,yM,yM,ym,ym,yM,yM, > zm,zm,zm,zm,zM,zM,zM,zM); > bbox_primitives.assign(6,1,4,1,1, 0,3,2,1, 4,5,6,7, 1,2,6,5, 0,4,7,3, 0,1,5,4, 2,3,7,6); > bbox_colors.assign(6,_spectrum,1,1,1,background_color[0]); > bbox_colors2.assign(6,_spectrum,1,1,1,foreground_color[0]); > bbox_opacities.assign(bbox_colors._width,1,1,1,0.3f); > > rotated_axes_vertices = axes_vertices.assign(7,3,1,1, > 0,20,0,0,22,-6,-6, > 0,0,20,0,-6,22,-6, > 0,0,0,20,0,0,22); > axes_opacities.assign(3,1,1,1,1); > axes_colors.assign(3,_spectrum,1,1,1,foreground_color[0]); > axes_primitives.assign(3,1,2,1,1, 0,1, 0,2, 0,3); > > > CImg<T> visu0(*this), visu; > CImg<tpfloat> zbuffer(visu0.width(),visu0.height(),1,1,0); > bool init_pose = true, clicked = false, redraw = true; > unsigned int key = 0; > int > x0 = 0, y0 = 0, x1 = 0, y1 = 0, > nrender_static = render_static, > nrender_motion = render_motion; > disp.show().flush(); > > while (!disp.is_closed() && !key) { > > > if (init_pose) { > const float > ratio = delta>0?(2.0f*cimg::min(disp.width(),disp.height())/(3.0f*delta)):1, > dx = (xM + xm)/2, dy = (yM + ym)/2, dz = (zM + zm)/2; > if (centering) > CImg<floatT>(4,3,1,1, ratio,0.,0.,-ratio*dx, 0.,ratio,0.,-ratio*dy, 0.,0.,ratio,-ratio*dz).move_to(pose); > else CImg<floatT>(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0).move_to(pose); > if (pose_matrix) { > CImg<floatT> pose0(pose_matrix,4,3,1,1,false); > pose0.resize(4,4,1,1,0); pose.resize(4,4,1,1,0); > pose0(3,3) = pose(3,3) = 1; > (pose0*pose).get_crop(0,0,3,2).move_to(pose); > Xoff = pose_matrix[12]; Yoff = pose_matrix[13]; Zoff = pose_matrix[14]; sprite_scale = pose_matrix[15]; > } else { Xoff = Yoff = Zoff = 0; sprite_scale = 1; } > init_pose = false; > redraw = true; > } > > > if (redraw) { > const float > r00 = pose(0,0), r10 = pose(1,0), r20 = pose(2,0), r30 = pose(3,0), > r01 = pose(0,1), r11 = pose(1,1), r21 = pose(2,1), r31 = pose(3,1), > r02 = pose(0,2), r12 = pose(1,2), r22 = pose(2,2), r32 = pose(3,2); > if ((clicked && nrender_motion>=0) || (!clicked && nrender_static>=0)) > for (int l = 0; l<(int)((vertices)._width); ++l) { > const float x = (float)vertices(l,0), y = (float)vertices(l,1), z = (float)vertices(l,2); > rotated_vertices(l,0) = r00*x + r10*y + r20*z + r30; > rotated_vertices(l,1) = r01*x + r11*y + r21*z + r31; > rotated_vertices(l,2) = r02*x + r12*y + r22*z + r32; > } > else for (int l = 0; l<(int)((bbox_vertices)._width); ++l) { > const float x = bbox_vertices(l,0), y = bbox_vertices(l,1), z = bbox_vertices(l,2); > rotated_bbox_vertices(l,0) = r00*x + r10*y + r20*z + r30; > rotated_bbox_vertices(l,1) = r01*x + r11*y + r21*z + r31; > rotated_bbox_vertices(l,2) = r02*x + r12*y + r22*z + r32; > } > > > > const bool render_with_zbuffer = true; > > > > visu = visu0; > if ((clicked && nrender_motion<0) || (!clicked && nrender_static<0)) > visu.draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, > rotated_bbox_vertices,bbox_primitives,bbox_colors,bbox_opacities,2,false,focale). > draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, > rotated_bbox_vertices,bbox_primitives,bbox_colors2,1,false,focale); > else visu._draw_object3d((void*)0,render_with_zbuffer?zbuffer.fill(0):CImg<tpfloat>::empty(), > Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, > rotated_vertices,reverse_primitives?reverse_primitives:primitives, > colors,opacities,clicked?nrender_motion:nrender_static,_is_double_sided==1,focale, > width()/2.0f+light_x,height()/2.0f+light_y,light_z+Zoff,specular_lightness,specular_shininess, > sprite_scale); > > if (ndisplay_axes) { > const float > n = (float)std::sqrt(1e-8 + r00*r00 + r01*r01 + r02*r02), > _r00 = r00/n, _r10 = r10/n, _r20 = r20/n, > _r01 = r01/n, _r11 = r11/n, _r21 = r21/n, > _r02 = r01/n, _r12 = r12/n, _r22 = r22/n, > Xaxes = 25, Yaxes = visu._height - 38.0f; > for (int l = 0; l<(int)((axes_vertices)._width); ++l) { > const float > x = axes_vertices(l,0), > y = axes_vertices(l,1), > z = axes_vertices(l,2); > rotated_axes_vertices(l,0) = _r00*x + _r10*y + _r20*z; > rotated_axes_vertices(l,1) = _r01*x + _r11*y + _r21*z; > rotated_axes_vertices(l,2) = _r02*x + _r12*y + _r22*z; > } > axes_opacities(0,0) = (rotated_axes_vertices(1,2)>0)?0.5f:1.0f; > axes_opacities(1,0) = (rotated_axes_vertices(2,2)>0)?0.5f:1.0f; > axes_opacities(2,0) = (rotated_axes_vertices(3,2)>0)?0.5f:1.0f; > visu.draw_object3d(Xaxes,Yaxes,0,rotated_axes_vertices,axes_primitives,axes_colors,axes_opacities,1,false,focale). > draw_text((int)(Xaxes+rotated_axes_vertices(4,0)), > (int)(Yaxes+rotated_axes_vertices(4,1)), > "X",axes_colors[0]._data,0,axes_opacities(0,0),13). > draw_text((int)(Xaxes+rotated_axes_vertices(5,0)), > (int)(Yaxes+rotated_axes_vertices(5,1)), > "Y",axes_colors[1]._data,0,axes_opacities(1,0),13). > draw_text((int)(Xaxes+rotated_axes_vertices(6,0)), > (int)(Yaxes+rotated_axes_vertices(6,1)), > "Z",axes_colors[2]._data,0,axes_opacities(2,0),13); > } > visu.display(disp); > if (!clicked || nrender_motion==nrender_static) redraw = false; > } > > > disp.wait(); > if ((disp.button() || disp.wheel()) && disp.mouse_x()>=0 && disp.mouse_y()>=0) { > redraw = true; > if (!clicked) { x0 = x1 = disp.mouse_x(); y0 = y1 = disp.mouse_y(); if (!disp.wheel()) clicked = true; } > else { x1 = disp.mouse_x(); y1 = disp.mouse_y(); } > if (disp.button()&1) { > const float > R = 0.45f*cimg::min(disp.width(),disp.height()), > R2 = R*R, > u0 = (float)(x0-disp.width()/2), > v0 = (float)(y0-disp.height()/2), > u1 = (float)(x1-disp.width()/2), > v1 = (float)(y1-disp.height()/2), > n0 = (float)std::sqrt(u0*u0+v0*v0), > n1 = (float)std::sqrt(u1*u1+v1*v1), > nu0 = n0>R?(u0*R/n0):u0, > nv0 = n0>R?(v0*R/n0):v0, > nw0 = (float)std::sqrt(cimg::max(0,R2-nu0*nu0-nv0*nv0)), > nu1 = n1>R?(u1*R/n1):u1, > nv1 = n1>R?(v1*R/n1):v1, > nw1 = (float)std::sqrt(cimg::max(0,R2-nu1*nu1-nv1*nv1)), > u = nv0*nw1-nw0*nv1, > v = nw0*nu1-nu0*nw1, > w = nv0*nu1-nu0*nv1, > n = (float)std::sqrt(u*u+v*v+w*w), > alpha = (float)std::asin(n/R2); > (CImg<floatT>::rotation_matrix(u,v,w,alpha)*pose).move_to(pose); > x0 = x1; y0 = y1; > } > if (disp.button()&2) { > if (focale>0) Zoff-=(y0-y1)*focale/400; > else { const float s = std::exp((y0-y1)/400.0f); pose*=s; sprite_scale*=s; } > x0 = x1; y0 = y1; > } > if (disp.wheel()) { > if (focale>0) Zoff-=disp.wheel()*focale/20; > else { const float s = std::exp(disp.wheel()/20.0f); pose*=s; sprite_scale*=s; } > disp.set_wheel(); > } > if (disp.button()&4) { Xoff+=(x1-x0); Yoff+=(y1-y0); x0 = x1; y0 = y1; } > if ((disp.button()&1) && (disp.button()&2)) { > init_pose = true; disp.set_button(); x0 = x1; y0 = y1; > pose = CImg<floatT>(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0); > } > } else if (clicked) { x0 = x1; y0 = y1; clicked = false; redraw = true; } > > switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : > > case 0 : case cimg::keyCTRLLEFT : key = 0; break; > case cimg::keyD: if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). > _is_resized = true; > disp.set_key(key,false); key = 0; > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > if (!ns_width || !ns_height || > ns_width>(unsigned int)disp.screen_width() || ns_height>(unsigned int)disp.screen_height()) { > ns_width = disp.screen_width()*3U/4; > ns_height = disp.screen_height()*3U/4; > } > if (disp.is_fullscreen()) disp.resize(ns_width,ns_height,false); > else { > ns_width = (unsigned int)disp.width(); ns_height = disp.height(); > disp.resize(disp.screen_width(),disp.screen_height(),false); > } > disp.toggle_fullscreen()._is_resized = true; > disp.set_key(key,false); key = 0; > } break; > case cimg::keyT : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > if (--_is_double_sided==-2) _is_double_sided = 1; > if (_is_double_sided>=0) reverse_primitives.assign(); > else primitives.get_reverse_object3d().move_to(reverse_primitives); > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyZ : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > if (zbuffer) zbuffer.assign(); > else zbuffer.assign(visu0.width(),visu0.height(),1,1,0); > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyA : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > ndisplay_axes = !ndisplay_axes; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF1 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==0 && nrender_motion!=0)?0:-1; nrender_static = 0; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF2 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==1 && nrender_motion!=1)?1:-1; nrender_static = 1; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF3 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==2 && nrender_motion!=2)?2:-1; nrender_static = 2; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF4 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==3 && nrender_motion!=3)?3:-1; nrender_static = 3; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF5 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==4 && nrender_motion!=4)?4:-1; nrender_static = 4; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF6 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==5 && nrender_motion!=5)?5:-1; nrender_static = 5; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"CImg" "_%.4u.bmp",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu).draw_text(0,0," Saving snapshot... ",foreground_color._data,background_color._data,0.7f,13).display(disp); > visu.save(filename); > (+visu).draw_text(0,0," Snapshot '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); > disp.set_key(key,false); key = 0; > } break; > case cimg::keyG : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"CImg" "_%.4u.off",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu).draw_text(0,0," Saving object... ",foreground_color._data,background_color._data,0.7f,13).display(disp); > vertices.save_off(reverse_primitives?reverse_primitives:primitives,colors,filename); > (+visu).draw_text(0,0," Object '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); > disp.set_key(key,false); key = 0; > } break; > case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > > > > snprintf(filename,sizeof(filename),"CImg" "_%.4u.cimg",snap_number++); > > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu).draw_text(0,0," Saving object... ",foreground_color._data,background_color._data,0.7f,13).display(disp); > vertices.get_object3dtoCImg3d(reverse_primitives?reverse_primitives:primitives,colors,opacities).save(filename); > (+visu).draw_text(0,0," Object '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); > disp.set_key(key,false); key = 0; > } break; ># 40243 "./CImg.h" > } > if (disp.is_resized()) { > disp.resize(false); visu0 = get_resize(disp,1); > if (zbuffer) zbuffer.assign(disp.width(),disp.height()); > redraw = true; > } > } > if (pose_matrix) { > std::memcpy(pose_matrix,pose._data,12*sizeof(float)); > pose_matrix[12] = Xoff; pose_matrix[13] = Yoff; pose_matrix[14] = Zoff; pose_matrix[15] = sprite_scale; > } > disp.set_button().set_key(key); > return *this; > } ># 40270 "./CImg.h" > const CImg<T>& display_graph(CImgDisplay &disp, > const unsigned int plot_type=1, const unsigned int vertex_type=1, > const char *const labelx=0, const double xmin=0, const double xmax=0, > const char *const labely=0, const double ymin=0, const double ymax=0) const { > return _display_graph(disp,0,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax); > } > > > const CImg<T>& display_graph(const char *const title=0, > const unsigned int plot_type=1, const unsigned int vertex_type=1, > const char *const labelx=0, const double xmin=0, const double xmax=0, > const char *const labely=0, const double ymin=0, const double ymax=0) const { > CImgDisplay disp; > return _display_graph(disp,title,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax); > } > > const CImg<T>& _display_graph(CImgDisplay &disp, const char *const title=0, > const unsigned int plot_type=1, const unsigned int vertex_type=1, > const char *const labelx=0, const double xmin=0, const double xmax=0, > const char *const labely=0, const double ymin=0, const double ymax=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "display_graph(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!disp) disp.assign(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true),0,0). > set_title(title?"%s":"CImg<%s>",title?title:pixel_type()); > const unsigned long siz = (unsigned long)_width*_height*_depth, siz1 = cimg::max(1U,siz-1); > const unsigned int old_normalization = disp.normalization(); > disp.show().flush()._normalization = 0; > > double y0 = ymin, y1 = ymax, nxmin = xmin, nxmax = xmax; > if (nxmin==nxmax) { nxmin = 0; nxmax = siz1; } > int x0 = 0, x1 = width()*height()*depth() - 1, key = 0; > > for (bool reset_view = true, resize_disp = false; !key && !disp.is_closed(); ) { > if (reset_view) { x0 = 0; x1 = width()*height()*depth()-1; y0 = ymin; y1 = ymax; reset_view = false; } > CImg<T> zoom(x1-x0+1,1,1,spectrum()); > for (int c = 0; c<(int)((*this)._spectrum); ++c) zoom.get_shared_channel(c) = CImg<T>(data(x0,0,0,c),x1-x0+1,1,1,1,true); > > if (y0==y1) { y0 = zoom.min_max(y1); const double dy = y1 - y0; y0-=dy/20; y1+=dy/20; } > if (y0==y1) { --y0; ++y1; } > const CImg<intT> selection = zoom.get_select_graph(disp,plot_type,vertex_type, > labelx, > nxmin + x0*(nxmax-nxmin)/siz1, > nxmin + x1*(nxmax-nxmin)/siz1, > labely,y0,y1); > const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); > if (selection[0]>=0) { > if (selection[2]<0) reset_view = true; > else { > x1 = x0 + selection[2]; x0+=selection[0]; > if (selection[1]>=0 && selection[3]>=0) { > y0 = y1 - selection[3]*(y1-y0)/(disp.height()-32); > y1-=selection[1]*(y1-y0)/(disp.height()-32); > } > } > } else { > bool go_in = false, go_out = false, go_left = false, go_right = false, go_up = false, go_down = false; > switch (key = disp.key()) { > case cimg::keyHOME : reset_view = resize_disp = true; key = 0; disp.set_key(); break; > case cimg::keyPADADD : go_in = true; go_out = false; key = 0; disp.set_key(); break; > case cimg::keyPADSUB : go_out = true; go_in = false; key = 0; disp.set_key(); break; > case cimg::keyARROWLEFT : case cimg::keyPAD4 : go_left = true; go_right = false; key = 0; disp.set_key(); break; > case cimg::keyARROWRIGHT : case cimg::keyPAD6 : go_right = true; go_left = false; key = 0; disp.set_key(); break; > case cimg::keyARROWUP : case cimg::keyPAD8 : go_up = true; go_down = false; key = 0; disp.set_key(); break; > case cimg::keyARROWDOWN : case cimg::keyPAD2 : go_down = true; go_up = false; key = 0; disp.set_key(); break; > case cimg::keyPAD7 : go_left = true; go_up = true; key = 0; disp.set_key(); break; > case cimg::keyPAD9 : go_right = true; go_up = true; key = 0; disp.set_key(); break; > case cimg::keyPAD1 : go_left = true; go_down = true; key = 0; disp.set_key(); break; > case cimg::keyPAD3 : go_right = true; go_down = true; key = 0; disp.set_key(); break; > } > if (disp.wheel()) { > if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) go_out = !(go_in = disp.wheel()>0); > else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) go_left = !(go_right = disp.wheel()>0); > else go_up = !(go_down = disp.wheel()<0); > key = 0; > } > > if (go_in) { > const int > xsiz = x1 - x0, > mx = (mouse_x-16)*xsiz/(disp.width()-32), > cx = x0 + (mx<0?0:(mx>=xsiz?xsiz:mx)); > if (x1-x0>4) { > x0 = cx - 7*(cx-x0)/8; x1 = cx + 7*(x1-cx)/8; > if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > const double > ysiz = y1 - y0, > my = (mouse_y-16)*ysiz/(disp.height()-32), > cy = y1 - (my<0?0:(my>=ysiz?ysiz:my)); > y0 = cy - 7*(cy-y0)/8; y1 = cy + 7*(y1-cy)/8; > } else y0 = y1 = 0; > } > } > if (go_out) { > if (x0>0 || x1<(int)siz1) { > const int delta_x = (x1-x0)/8, ndelta_x = delta_x?delta_x:(siz>1?1:0); > const double ndelta_y = (y1-y0)/8; > x0-=ndelta_x; x1+=ndelta_x; > y0-=ndelta_y; y1+=ndelta_y; > if (x0<0) { x1-=x0; x0 = 0; if (x1>=(int)siz) x1 = (int)siz1; } > if (x1>=(int)siz) { x0-=(x1-siz1); x1 = (int)siz1; if (x0<0) x0 = 0; } > } > } > if (go_left) { > const int delta = (x1-x0)/5, ndelta = delta?delta:1; > if (x0-ndelta>=0) { x0-=ndelta; x1-=ndelta; } > else { x1-=x0; x0 = 0; } > go_left = false; > } > if (go_right) { > const int delta = (x1-x0)/5, ndelta = delta?delta:1; > if (x1+ndelta<(int)siz) { x0+=ndelta; x1+=ndelta; } > else { x0+=(siz1-x1); x1 = siz1; } > go_right = false; > } > if (go_up) { > const double delta = (y1-y0)/10, ndelta = delta?delta:1; > y0+=ndelta; y1+=ndelta; > go_up = false; > } > if (go_down) { > const double delta = (y1-y0)/10, ndelta = delta?delta:1; > y0-=ndelta; y1-=ndelta; > go_down = false; > } > } > } > disp._normalization = old_normalization; > return *this; > } ># 40412 "./CImg.h" > const CImg<T>& save(const char *const filename, const int number=-1, const unsigned int digits=6) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const bool is_stdout = *filename=='-' && (!filename[1] || filename[1]=='.'); > const char *const ext = cimg::split_filename(filename); > char nfilename[1024] = { 0 }; > const char *const fn = is_stdout?filename:(number>=0)?cimg::number_filename(filename,number,digits,nfilename):filename; ># 40451 "./CImg.h" > if (!cimg::strcasecmp(ext,"asc")) return save_ascii(fn); > else if (!cimg::strcasecmp(ext,"dlm") || > !cimg::strcasecmp(ext,"txt")) return save_dlm(fn); > else if (!cimg::strcasecmp(ext,"cpp") || > !cimg::strcasecmp(ext,"hpp") || > !cimg::strcasecmp(ext,"h") || > !cimg::strcasecmp(ext,"c")) return save_cpp(fn); > > > else if (!cimg::strcasecmp(ext,"bmp")) return save_bmp(fn); > else if (!cimg::strcasecmp(ext,"jpg") || > !cimg::strcasecmp(ext,"jpeg") || > !cimg::strcasecmp(ext,"jpe") || > !cimg::strcasecmp(ext,"jfif") || > !cimg::strcasecmp(ext,"jif")) return save_jpeg(fn); > else if (!cimg::strcasecmp(ext,"rgb")) return save_rgb(fn); > else if (!cimg::strcasecmp(ext,"rgba")) return save_rgba(fn); > else if (!cimg::strcasecmp(ext,"png")) return save_png(fn); > else if (!cimg::strcasecmp(ext,"pgm") || > !cimg::strcasecmp(ext,"ppm") || > !cimg::strcasecmp(ext,"pnm")) return save_pnm(fn); > else if (!cimg::strcasecmp(ext,"pnk")) return save_pnk(fn); > else if (!cimg::strcasecmp(ext,"pfm")) return save_pfm(fn); > else if (!cimg::strcasecmp(ext,"exr")) return save_exr(fn); > else if (!cimg::strcasecmp(ext,"tif") || > !cimg::strcasecmp(ext,"tiff")) return save_tiff(fn); > > > else if (!cimg::strcasecmp(ext,"cimgz")) return save_cimg(fn,true); > else if (!cimg::strcasecmp(ext,"cimg") || !*ext) return save_cimg(fn,false); > else if (!cimg::strcasecmp(ext,"dcm")) return save_medcon_external(fn); > else if (!cimg::strcasecmp(ext,"hdr") || > !cimg::strcasecmp(ext,"nii")) return save_analyze(fn); > else if (!cimg::strcasecmp(ext,"inr")) return save_inr(fn); > else if (!cimg::strcasecmp(ext,"mnc")) return save_minc2(fn); > else if (!cimg::strcasecmp(ext,"pan")) return save_pandore(fn); > else if (!cimg::strcasecmp(ext,"raw")) return save_raw(fn); > > > else if (!cimg::strcasecmp(ext,"gz")) return save_gzip_external(fn); > > > else if (!cimg::strcasecmp(ext,"yuv")) return save_yuv(fn,true); > else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) return save_ffmpeg(fn); > return save_other(fn); > } > > > > > > const CImg<T>& save_ascii(const char *const filename) const { > return _save_ascii(0,filename); > } > > > const CImg<T>& save_ascii(std::FILE *const file) const { > return _save_ascii(file,0); > } > > const CImg<T>& _save_ascii(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_ascii(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); > std::fprintf(nfile,"%u %u %u %u\n",_width,_height,_depth,_spectrum); > const T* ptrs = _data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) std::fprintf(nfile,"%.16g ",(double)*(ptrs++)); > std::fputc('\n',nfile); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_cpp(const char *const filename) const { > return _save_cpp(0,filename); > } > > > const CImg<T>& save_cpp(std::FILE *const file) const { > return _save_cpp(file,0); > } > > const CImg<T>& _save_cpp(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_cpp(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); > char varname[1024] = { 0 }; > if (filename) std::sscanf(cimg::basename(filename),"%1023[a-zA-Z0-9_]",varname); > if (!*varname) snprintf(varname,sizeof(varname),"unnamed"); > std::fprintf(nfile, > "/* Define image '%s' of size %ux%ux%ux%u and type '%s' */\n" > "%s data_%s[] = { %s\n ", > varname,_width,_height,_depth,_spectrum,pixel_type(),pixel_type(),varname, > is_empty()?"};":""); > if (!is_empty()) for (unsigned long off = 0, siz = size()-1; off<=siz; ++off) { > std::fprintf(nfile,cimg::type<T>::format(),cimg::type<T>::format((*this)[off])); > if (off==siz) std::fprintf(nfile," };\n"); > else if (!((off+1)%16)) std::fprintf(nfile,",\n "); > else std::fprintf(nfile,", "); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_dlm(const char *const filename) const { > return _save_dlm(0,filename); > } > > > const CImg<T>& save_dlm(std::FILE *const file) const { > return _save_dlm(file,0); > } > > const CImg<T>& _save_dlm(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_dlm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_dlm(): Instance is volumetric, values along Z will be unrolled in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (_spectrum>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_dlm(): Instance is multispectral, values along C will be unrolled in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); > const T* ptrs = _data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) std::fprintf(nfile,"%.16g%s",(double)*(ptrs++),(x==width()-1)?"":","); > std::fputc('\n',nfile); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_bmp(const char *const filename) const { > return _save_bmp(0,filename); > } > > > const CImg<T>& save_bmp(std::FILE *const file) const { > return _save_bmp(file,0); > } > > const CImg<T>& _save_bmp(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_bmp(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_bmp(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (_spectrum>3) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_bmp(): Instance is multispectral, only the three first channels will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > unsigned char header[54] = { 0 }, align_buf[4] = { 0 }; > const unsigned int > align = (4 - (3*_width)%4)%4, > buf_size = (3*_width + align)*height(), > file_size = 54 + buf_size; > header[0] = 'B'; header[1] = 'M'; > header[0x02] = file_size&0xFF; > header[0x03] = (file_size>>8)&0xFF; > header[0x04] = (file_size>>16)&0xFF; > header[0x05] = (file_size>>24)&0xFF; > header[0x0A] = 0x36; > header[0x0E] = 0x28; > header[0x12] = _width&0xFF; > header[0x13] = (_width>>8)&0xFF; > header[0x14] = (_width>>16)&0xFF; > header[0x15] = (_width>>24)&0xFF; > header[0x16] = _height&0xFF; > header[0x17] = (_height>>8)&0xFF; > header[0x18] = (_height>>16)&0xFF; > header[0x19] = (_height>>24)&0xFF; > header[0x1A] = 1; > header[0x1B] = 0; > header[0x1C] = 24; > header[0x1D] = 0; > header[0x22] = buf_size&0xFF; > header[0x23] = (buf_size>>8)&0xFF; > header[0x24] = (buf_size>>16)&0xFF; > header[0x25] = (buf_size>>24)&0xFF; > header[0x27] = 0x1; > header[0x2B] = 0x1; > cimg::fwrite(header,54,nfile); > > const T > *ptr_r = data(0,_height-1,0,0), > *ptr_g = (_spectrum>=2)?data(0,_height-1,0,1):0, > *ptr_b = (_spectrum>=3)?data(0,_height-1,0,2):0; > > switch (_spectrum) { > case 1 : { > for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) { > const unsigned char val = (unsigned char)*(ptr_r++); > std::fputc(val,nfile); std::fputc(val,nfile); std::fputc(val,nfile); > } > cimg::fwrite(align_buf,align,nfile); > ptr_r-=2*_width; > } > } break; > case 2 : { > for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) { > std::fputc(0,nfile); > std::fputc((unsigned char)(*(ptr_g++)),nfile); > std::fputc((unsigned char)(*(ptr_r++)),nfile); > } > cimg::fwrite(align_buf,align,nfile); > ptr_r-=2*_width; ptr_g-=2*_width; > } > } break; > default : { > for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) { > std::fputc((unsigned char)(*(ptr_b++)),nfile); > std::fputc((unsigned char)(*(ptr_g++)),nfile); > std::fputc((unsigned char)(*(ptr_r++)),nfile); > } > cimg::fwrite(align_buf,align,nfile); > ptr_r-=2*_width; ptr_g-=2*_width; ptr_b-=2*_width; > } > } > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > const CImg<T>& save_jpeg(const char *const filename, const unsigned int quality=100) const { > return _save_jpeg(0,filename,quality); > } > > > const CImg<T>& save_jpeg(std::FILE *const file, const unsigned int quality=100) const { > return _save_jpeg(file,0,quality); > } > > const CImg<T>& _save_jpeg(std::FILE *const file, const char *const filename, const unsigned int quality) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_jpeg(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_jpeg(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > > if (!file) return save_other(filename,quality); > else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_jpeg(): Unable to save data in '(*FILE)' unless libjpeg is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); ># 40842 "./CImg.h" > } > > > > > > > const CImg<T>& save_magick(const char *const filename, const unsigned int bytes_per_pixel=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_magick(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } ># 40909 "./CImg.h" > cimg::unused(bytes_per_pixel); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_magick(): Unable to save file '%s' unless libMagick++ is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > return *this; > } > > > > > > > const CImg<T>& save_png(const char *const filename, const unsigned int bytes_per_pixel=0) const { > return _save_png(0,filename,bytes_per_pixel); > } > > > const CImg<T>& save_png(std::FILE *const file, const unsigned int bytes_per_pixel=0) const { > return _save_png(file,0,bytes_per_pixel); > } > > const CImg<T>& _save_png(std::FILE *const file, const char *const filename, const unsigned int bytes_per_pixel=0) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > > cimg::unused(bytes_per_pixel); > if (!file) return save_other(filename); > else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Unable to save data in '(*FILE)' unless libpng is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); ># 41118 "./CImg.h" > } > > > > > > > const CImg<T>& save_pnm(const char *const filename, const unsigned int bytes_per_pixel=0) const { > return _save_pnm(0,filename,bytes_per_pixel); > } > > > const CImg<T>& save_pnm(std::FILE *const file, const unsigned int bytes_per_pixel=0) const { > return _save_pnm(file,0,bytes_per_pixel); > } > > const CImg<T>& _save_pnm(std::FILE *const file, const char *const filename, const unsigned int bytes_per_pixel=0) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > double stmin, stmax = (double)max_min(stmin); > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnm(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (_spectrum>3) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnm(): Instance is multispectral, only the three first channels will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnm(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > stmin,stmax,filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const T > *ptr_r = data(0,0,0,0), > *ptr_g = (_spectrum>=2)?data(0,0,0,1):0, > *ptr_b = (_spectrum>=3)?data(0,0,0,2):0; > const unsigned long buf_size = cimg::min(1024*1024UL,_width*_height*(_spectrum==1?1UL:3UL)); > > std::fprintf(nfile,"P%c\n%u %u\n%u\n", > (_spectrum==1?'5':'6'),_width,_height,stmax<256?255:(stmax<4096?4095:65535)); > > switch (_spectrum) { > case 1 : { > if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { > CImg<ucharT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > unsigned char *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned char)*(ptr_r++); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } else { > CImg<ushortT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > unsigned short *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned short)*(ptr_r++); > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } > } break; > case 2 : { > if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { > CImg<ucharT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); > unsigned char *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (unsigned char)*(ptr_r++); > *(ptrd++) = (unsigned char)*(ptr_g++); > *(ptrd++) = 0; > } > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } else { > CImg<ushortT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); > unsigned short *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (unsigned short)*(ptr_r++); > *(ptrd++) = (unsigned short)*(ptr_g++); > *(ptrd++) = 0; > } > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } > } break; > default : { > if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { > CImg<ucharT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); > unsigned char *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (unsigned char)*(ptr_r++); > *(ptrd++) = (unsigned char)*(ptr_g++); > *(ptrd++) = (unsigned char)*(ptr_b++); > } > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } else { > CImg<ushortT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); > unsigned short *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (unsigned short)*(ptr_r++); > *(ptrd++) = (unsigned short)*(ptr_g++); > *(ptrd++) = (unsigned short)*(ptr_b++); > } > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } > } > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_pnk(const char *const filename) const { > return _save_pnk(0,filename); > } > > > const CImg<T>& save_pnk(std::FILE *const file) const { > return _save_pnk(file,0); > } > > const CImg<T>& _save_pnk(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnk(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_spectrum>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnk(): Instance is multispectral, only the first channel will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > const unsigned long buf_size = cimg::min(1024*1024LU,_width*_height*_depth); > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const T *ptr = data(0,0,0,0); > > if (!cimg::type<T>::is_float() && sizeof(T)==1 && _depth<2) _save_pnm(file,filename,0); > else if (!cimg::type<T>::is_float() && sizeof(T)==1) { > std::fprintf(nfile,"P5\n%u %u %u\n255\n",_width,_height,_depth); > CImg<ucharT> buf(buf_size); > for (long to_write = (long)_width*_height*_depth; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > unsigned char *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned char)*(ptr++); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } else if (!cimg::type<T>::is_float()) { > if (_depth>1) std::fprintf(nfile,"P8\n%u %u %u\n%d\n",_width,_height,_depth,(int)max()); > else std::fprintf(nfile,"P8\n%u %u\n%d\n",_width,_height,(int)max()); > CImg<intT> buf(buf_size); > for (long to_write = (long)_width*_height*_depth; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > int *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (int)*(ptr++); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } else { > if (_depth>1) std::fprintf(nfile,"P9\n%u %u %u\n%g\n",_width,_height,_depth,(double)max()); > else std::fprintf(nfile,"P9\n%u %u\n%g\n",_width,_height,(double)max()); > CImg<floatT> buf(buf_size); > for (long to_write = (long)_width*_height*_depth; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > float *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (float)*(ptr++); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } > > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_pfm(const char *const filename) const { > return get_mirror('y')._save_pfm(0,filename); > } > > > const CImg<T>& save_pfm(std::FILE *const file) const { > return get_mirror('y')._save_pfm(file,0); > } > > const CImg<T>& _save_pfm(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pfm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pfm(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (_spectrum>3) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pfm(): image instance is multispectral, only the three first channels will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const T > *ptr_r = data(0,0,0,0), > *ptr_g = (_spectrum>=2)?data(0,0,0,1):0, > *ptr_b = (_spectrum>=3)?data(0,0,0,2):0; > const unsigned int buf_size = cimg::min(1024*1024U,_width*_height*(_spectrum==1?1:3)); > > std::fprintf(nfile,"P%c\n%u %u\n1.0\n", > (_spectrum==1?'f':'F'),_width,_height); > > switch (_spectrum) { > case 1 : { > CImg<floatT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > float *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (float)*(ptr_r++); > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } break; > case 2 : { > CImg<floatT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned int N = cimg::min((unsigned int)to_write,buf_size/3); > float *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (float)*(ptr_r++); > *(ptrd++) = (float)*(ptr_g++); > *(ptrd++) = 0; > } > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } break; > default : { > CImg<floatT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned int N = cimg::min((unsigned int)to_write,buf_size/3); > float *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (float)*(ptr_r++); > *(ptrd++) = (float)*(ptr_g++); > *(ptrd++) = (float)*(ptr_b++); > } > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_rgb(const char *const filename) const { > return _save_rgb(0,filename); > } > > > const CImg<T>& save_rgb(std::FILE *const file) const { > return _save_rgb(file,0); > } > > const CImg<T>& _save_rgb(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_rgb(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_spectrum!=3) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_rgb(): image instance has not exactly 3 channels, for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const unsigned long wh = (unsigned long)_width*_height; > unsigned char *const buffer = new unsigned char[3*wh], *nbuffer = buffer; > const T > *ptr1 = data(0,0,0,0), > *ptr2 = _spectrum>1?data(0,0,0,1):0, > *ptr3 = _spectrum>2?data(0,0,0,2):0; > switch (_spectrum) { > case 1 : { > for (unsigned long k = 0; k<wh; ++k) { > const unsigned char val = (unsigned char)*(ptr1++); > *(nbuffer++) = val; > *(nbuffer++) = val; > *(nbuffer++) = val; > } > } break; > case 2 : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = 0; > } > } break; > default : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = (unsigned char)(*(ptr3++)); > } > } > } > cimg::fwrite(buffer,3*wh,nfile); > if (!file) cimg::fclose(nfile); > delete[] buffer; > return *this; > } > > > > > > const CImg<T>& save_rgba(const char *const filename) const { > return _save_rgba(0,filename); > } > > > const CImg<T>& save_rgba(std::FILE *const file) const { > return _save_rgba(file,0); > } > > const CImg<T>& _save_rgba(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_rgba(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_spectrum!=4) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_rgba(): image instance has not exactly 4 channels, for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const unsigned long wh = (unsigned long)_width*_height; > unsigned char *const buffer = new unsigned char[4*wh], *nbuffer = buffer; > const T > *ptr1 = data(0,0,0,0), > *ptr2 = _spectrum>1?data(0,0,0,1):0, > *ptr3 = _spectrum>2?data(0,0,0,2):0, > *ptr4 = _spectrum>3?data(0,0,0,3):0; > switch (_spectrum) { > case 1 : { > for (unsigned long k = 0; k<wh; ++k) { > const unsigned char val = (unsigned char)*(ptr1++); > *(nbuffer++) = val; > *(nbuffer++) = val; > *(nbuffer++) = val; > *(nbuffer++) = 255; > } > } break; > case 2 : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = 0; > *(nbuffer++) = 255; > } > } break; > case 3 : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = (unsigned char)(*(ptr3++)); > *(nbuffer++) = 255; > } > } break; > default : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = (unsigned char)(*(ptr3++)); > *(nbuffer++) = (unsigned char)(*(ptr4++)); > } > } > } > cimg::fwrite(buffer,4*wh,nfile); > if (!file) cimg::fclose(nfile); > delete[] buffer; > return *this; > } ># 41560 "./CImg.h" > const CImg<T>& save_tiff(const char *const filename, const unsigned int compression_type=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_tiff(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } ># 41577 "./CImg.h" > cimg::unused(compression_type); > return save_other(filename); > > return *this; > } ># 41661 "./CImg.h" > const CImg<T>& save_minc2(const char *const filename, > const char *const imitate_file=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_minc2(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > > cimg::unused(imitate_file); > return save_other(filename); ># 41695 "./CImg.h" > } > > > > > > > const CImg<T>& save_analyze(const char *const filename, const float *const voxel_size=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_analyze(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > std::FILE *file; > char header[348] = { 0 }, hname[1024] = { 0 }, iname[1024] = { 0 }; > const char *const ext = cimg::split_filename(filename); > short datatype=-1; > std::memset(header,0,348); > if (!*ext) { snprintf(hname,sizeof(hname),"%s.hdr",filename); snprintf(iname,sizeof(iname),"%s.img",filename); } > if (!cimg::strncasecmp(ext,"hdr",3)) { > std::strcpy(hname,filename); std::strncpy(iname,filename,sizeof(iname)-1); std::sprintf(iname + std::strlen(iname)-3,"img"); > } > if (!cimg::strncasecmp(ext,"img",3)) { > std::strcpy(hname,filename); std::strncpy(iname,filename,sizeof(iname)-1); std::sprintf(hname + std::strlen(iname)-3,"hdr"); > } > if (!cimg::strncasecmp(ext,"nii",3)) { > std::strncpy(hname,filename,sizeof(hname)-1); *iname = 0; > } > int *const iheader = (int*)header; > *iheader = 348; > std::strcpy(header + 4,"CImg"); > std::strcpy(header + 14," "); > ((short*)(header + 36))[0] = 4096; > ((char*)(header + 38))[0] = 114; > ((short*)(header + 40))[0] = 4; > ((short*)(header + 40))[1] = _width; > ((short*)(header + 40))[2] = _height; > ((short*)(header + 40))[3] = _depth; > ((short*)(header + 40))[4] = _spectrum; > if (!cimg::strcasecmp(pixel_type(),"bool")) datatype = 2; > if (!cimg::strcasecmp(pixel_type(),"unsigned char")) datatype = 2; > if (!cimg::strcasecmp(pixel_type(),"char")) datatype = 2; > if (!cimg::strcasecmp(pixel_type(),"unsigned short")) datatype = 4; > if (!cimg::strcasecmp(pixel_type(),"short")) datatype = 4; > if (!cimg::strcasecmp(pixel_type(),"unsigned int")) datatype = 8; > if (!cimg::strcasecmp(pixel_type(),"int")) datatype = 8; > if (!cimg::strcasecmp(pixel_type(),"unsigned long")) datatype = 8; > if (!cimg::strcasecmp(pixel_type(),"long")) datatype = 8; > if (!cimg::strcasecmp(pixel_type(),"float")) datatype = 16; > if (!cimg::strcasecmp(pixel_type(),"double")) datatype = 64; > if (datatype<0) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_analyze(): Unsupported pixel type '%s' for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > pixel_type(),filename); > > ((short*)(header+70))[0] = datatype; > ((short*)(header+72))[0] = sizeof(T); > ((float*)(header+112))[0] = 1; > ((float*)(header+76))[0] = 0; > if (voxel_size) { > ((float*)(header+76))[1] = voxel_size[0]; > ((float*)(header+76))[2] = voxel_size[1]; > ((float*)(header+76))[3] = voxel_size[2]; > } else ((float*)(header+76))[1] = ((float*)(header+76))[2] = ((float*)(header+76))[3] = 1; > file = cimg::fopen(hname,"wb"); > cimg::fwrite(header,348,file); > if (*iname) { cimg::fclose(file); file = cimg::fopen(iname,"wb"); } > cimg::fwrite(_data,size(),file); > cimg::fclose(file); > return *this; > } > > > > > > > const CImg<T>& save_cimg(const char *const filename, const bool is_compressed=false) const { > CImgList<T>(*this,true).save_cimg(filename,is_compressed); > return *this; > } > > > const CImg<T>& save_cimg(std::FILE *const file, const bool is_compressed=false) const { > CImgList<T>(*this,true).save_cimg(file,is_compressed); > return *this; > } ># 41794 "./CImg.h" > const CImg<T>& save_cimg(const char *const filename, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { > CImgList<T>(*this,true).save_cimg(filename,n0,x0,y0,z0,c0); > return *this; > } > > > const CImg<T>& save_cimg(std::FILE *const file, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { > CImgList<T>(*this,true).save_cimg(file,n0,x0,y0,z0,c0); > return *this; > } ># 41822 "./CImg.h" > static void save_empty_cimg(const char *const filename, > const unsigned int dx, const unsigned int dy=1, > const unsigned int dz=1, const unsigned int dc=1) { > return CImgList<T>::save_empty_cimg(filename,1,dx,dy,dz,dc); > } > > > > > > > static void save_empty_cimg(std::FILE *const file, > const unsigned int dx, const unsigned int dy=1, > const unsigned int dz=1, const unsigned int dc=1) { > return CImgList<T>::save_empty_cimg(file,1,dx,dy,dz,dc); > } > > > > > > > const CImg<T>& save_inr(const char *const filename, const float *const voxel_size=0) const { > return _save_inr(0,filename,voxel_size); > } > > > const CImg<T>& save_inr(std::FILE *const file, const float *const voxel_size=0) const { > return _save_inr(file,0,voxel_size); > } > > const CImg<T>& _save_inr(std::FILE *const file, const char *const filename, const float *const voxel_size) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_inr(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > int inrpixsize=-1; > const char *inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; > if (!cimg::strcasecmp(pixel_type(),"unsigned char")) { inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; } > if (!cimg::strcasecmp(pixel_type(),"char")) { inrtype = "fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; } > if (!cimg::strcasecmp(pixel_type(),"unsigned short")) { inrtype = "unsigned fixed\nPIXSIZE=16 bits\nSCALE=2**0";inrpixsize = 2; } > if (!cimg::strcasecmp(pixel_type(),"short")) { inrtype = "fixed\nPIXSIZE=16 bits\nSCALE=2**0"; inrpixsize = 2; } > if (!cimg::strcasecmp(pixel_type(),"unsigned int")) { inrtype = "unsigned fixed\nPIXSIZE=32 bits\nSCALE=2**0";inrpixsize = 4; } > if (!cimg::strcasecmp(pixel_type(),"int")) { inrtype = "fixed\nPIXSIZE=32 bits\nSCALE=2**0"; inrpixsize = 4; } > if (!cimg::strcasecmp(pixel_type(),"float")) { inrtype = "float\nPIXSIZE=32 bits"; inrpixsize = 4; } > if (!cimg::strcasecmp(pixel_type(),"double")) { inrtype = "float\nPIXSIZE=64 bits"; inrpixsize = 8; } > if (inrpixsize<=0) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_inr(): Unsupported pixel type '%s' for file '%s'", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > pixel_type(),filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > char header[257] = { 0 }; > int err = snprintf(header,sizeof(header),"#INRIMAGE-4#{\nXDIM=%u\nYDIM=%u\nZDIM=%u\nVDIM=%u\n",_width,_height,_depth,_spectrum); > if (voxel_size) err+=std::sprintf(header + err,"VX=%g\nVY=%g\nVZ=%g\n",voxel_size[0],voxel_size[1],voxel_size[2]); > err+=std::sprintf(header + err,"TYPE=%s\nCPU=%s\n",inrtype,cimg::endianness()?"sun":"decm"); > std::memset(header + err,'\n',252 - err); > std::memcpy(header + 252,"##}\n",4); > cimg::fwrite(header,256,nfile); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) cimg::fwrite(&((*this)(x,y,z,c)),1,nfile); > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > const CImg<T>& save_exr(const char *const filename) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_exr(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_exr(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > > return save_other(filename); ># 41954 "./CImg.h" > } > > > > > > > > const CImg<T>& save_pandore(const char *const filename, const unsigned int colorspace=0) const { > return _save_pandore(0,filename,colorspace); > } > > > > > > > const CImg<T>& save_pandore(std::FILE *const file, const unsigned int colorspace=0) const { > return _save_pandore(file,0,colorspace); > } > > unsigned int _save_pandore_header_length(unsigned int id, unsigned int *dims, const unsigned int colorspace) const { > unsigned int nbdims = 0; > if (id==2 || id==3 || id==4) { dims[0] = 1; dims[1] = _width; nbdims = 2; } > if (id==5 || id==6 || id==7) { dims[0] = 1; dims[1] = _height; dims[2] = _width; nbdims=3; } > if (id==8 || id==9 || id==10) { dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; } > if (id==16 || id==17 || id==18) { dims[0] = 3; dims[1] = _height; dims[2] = _width; dims[3] = colorspace; nbdims = 4; } > if (id==19 || id==20 || id==21) { dims[0] = 3; dims[1] = _depth; dims[2] = _height; dims[3] = _width; dims[4] = colorspace; nbdims = 5; } > if (id==22 || id==23 || id==25) { dims[0] = _spectrum; dims[1] = _width; nbdims = 2; } > if (id==26 || id==27 || id==29) { dims[0] = _spectrum; dims[1] = _height; dims[2] = _width; nbdims=3; } > if (id==30 || id==31 || id==33) { dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; } > return nbdims; > } > > const CImg<T>& _save_pandore(std::FILE *const file, const char *const filename, const unsigned int colorspace) const { ># 42031 "./CImg.h" > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pandore(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > unsigned char header[36] = { 'P','A','N','D','O','R','E','0','4',0,0,0, > 0,0,0,0,'C','I','m','g',0,0,0,0,0,'N','o',' ','d','a','t','e',0,0,0,0 }; > unsigned int nbdims, dims[5] = { 0 }; > bool saved = false; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=2),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (2==2 || 2==5 || 2==8 || 2==16 || 2==19 || 2==22 || 2==26 || 2==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (2==3 || 2==6 || 2==9 || 2==17 || 2==20 || 2==23 || 2==27 || 2==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (2==4 || 2==7 || 2==10 || 2==18 || 2==21 || 2==25 || 2==29 || 2==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=4),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (4==2 || 4==5 || 4==8 || 4==16 || 4==19 || 4==22 || 4==26 || 4==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (4==3 || 4==6 || 4==9 || 4==17 || 4==20 || 4==23 || 4==27 || 4==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (4==4 || 4==7 || 4==10 || 4==18 || 4==21 || 4==25 || 4==29 || 4==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=4),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (4==2 || 4==5 || 4==8 || 4==16 || 4==19 || 4==22 || 4==26 || 4==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (4==3 || 4==6 || 4==9 || 4==17 || 4==20 || 4==23 || 4==27 || 4==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (4==4 || 4==7 || 4==10 || 4==18 || 4==21 || 4==25 || 4==29 || 4==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=4),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (4==2 || 4==5 || 4==8 || 4==16 || 4==19 || 4==22 || 4==26 || 4==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (4==3 || 4==6 || 4==9 || 4==17 || 4==20 || 4==23 || 4==27 || 4==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (4==4 || 4==7 || 4==10 || 4==18 || 4==21 || 4==25 || 4==29 || 4==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=5),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (5==2 || 5==5 || 5==8 || 5==16 || 5==19 || 5==22 || 5==26 || 5==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (5==3 || 5==6 || 5==9 || 5==17 || 5==20 || 5==23 || 5==27 || 5==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (5==4 || 5==7 || 5==10 || 5==18 || 5==21 || 5==25 || 5==29 || 5==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=7),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (7==2 || 7==5 || 7==8 || 7==16 || 7==19 || 7==22 || 7==26 || 7==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (7==3 || 7==6 || 7==9 || 7==17 || 7==20 || 7==23 || 7==27 || 7==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (7==4 || 7==7 || 7==10 || 7==18 || 7==21 || 7==25 || 7==29 || 7==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=7),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (7==2 || 7==5 || 7==8 || 7==16 || 7==19 || 7==22 || 7==26 || 7==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (7==3 || 7==6 || 7==9 || 7==17 || 7==20 || 7==23 || 7==27 || 7==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (7==4 || 7==7 || 7==10 || 7==18 || 7==21 || 7==25 || 7==29 || 7==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=7),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (7==2 || 7==5 || 7==8 || 7==16 || 7==19 || 7==22 || 7==26 || 7==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (7==3 || 7==6 || 7==9 || 7==17 || 7==20 || 7==23 || 7==27 || 7==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (7==4 || 7==7 || 7==10 || 7==18 || 7==21 || 7==25 || 7==29 || 7==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=8),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (8==2 || 8==5 || 8==8 || 8==16 || 8==19 || 8==22 || 8==26 || 8==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (8==3 || 8==6 || 8==9 || 8==17 || 8==20 || 8==23 || 8==27 || 8==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (8==4 || 8==7 || 8==10 || 8==18 || 8==21 || 8==25 || 8==29 || 8==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=10),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (10==2 || 10==5 || 10==8 || 10==16 || 10==19 || 10==22 || 10==26 || 10==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (10==3 || 10==6 || 10==9 || 10==17 || 10==20 || 10==23 || 10==27 || 10==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (10==4 || 10==7 || 10==10 || 10==18 || 10==21 || 10==25 || 10==29 || 10==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=10),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (10==2 || 10==5 || 10==8 || 10==16 || 10==19 || 10==22 || 10==26 || 10==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (10==3 || 10==6 || 10==9 || 10==17 || 10==20 || 10==23 || 10==27 || 10==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (10==4 || 10==7 || 10==10 || 10==18 || 10==21 || 10==25 || 10==29 || 10==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=10),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (10==2 || 10==5 || 10==8 || 10==16 || 10==19 || 10==22 || 10==26 || 10==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (10==3 || 10==6 || 10==9 || 10==17 || 10==20 || 10==23 || 10==27 || 10==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (10==4 || 10==7 || 10==10 || 10==18 || 10==21 || 10==25 || 10==29 || 10==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=16),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (16==2 || 16==5 || 16==8 || 16==16 || 16==19 || 16==22 || 16==26 || 16==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (16==3 || 16==6 || 16==9 || 16==17 || 16==20 || 16==23 || 16==27 || 16==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (16==4 || 16==7 || 16==10 || 16==18 || 16==21 || 16==25 || 16==29 || 16==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=18),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (18==2 || 18==5 || 18==8 || 18==16 || 18==19 || 18==22 || 18==26 || 18==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (18==3 || 18==6 || 18==9 || 18==17 || 18==20 || 18==23 || 18==27 || 18==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (18==4 || 18==7 || 18==10 || 18==18 || 18==21 || 18==25 || 18==29 || 18==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=18),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (18==2 || 18==5 || 18==8 || 18==16 || 18==19 || 18==22 || 18==26 || 18==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (18==3 || 18==6 || 18==9 || 18==17 || 18==20 || 18==23 || 18==27 || 18==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (18==4 || 18==7 || 18==10 || 18==18 || 18==21 || 18==25 || 18==29 || 18==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=18),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (18==2 || 18==5 || 18==8 || 18==16 || 18==19 || 18==22 || 18==26 || 18==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (18==3 || 18==6 || 18==9 || 18==17 || 18==20 || 18==23 || 18==27 || 18==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (18==4 || 18==7 || 18==10 || 18==18 || 18==21 || 18==25 || 18==29 || 18==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=19),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (19==2 || 19==5 || 19==8 || 19==16 || 19==19 || 19==22 || 19==26 || 19==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (19==3 || 19==6 || 19==9 || 19==17 || 19==20 || 19==23 || 19==27 || 19==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (19==4 || 19==7 || 19==10 || 19==18 || 19==21 || 19==25 || 19==29 || 19==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=21),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (21==2 || 21==5 || 21==8 || 21==16 || 21==19 || 21==22 || 21==26 || 21==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (21==3 || 21==6 || 21==9 || 21==17 || 21==20 || 21==23 || 21==27 || 21==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (21==4 || 21==7 || 21==10 || 21==18 || 21==21 || 21==25 || 21==29 || 21==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=21),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (21==2 || 21==5 || 21==8 || 21==16 || 21==19 || 21==22 || 21==26 || 21==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (21==3 || 21==6 || 21==9 || 21==17 || 21==20 || 21==23 || 21==27 || 21==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (21==4 || 21==7 || 21==10 || 21==18 || 21==21 || 21==25 || 21==29 || 21==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=21),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (21==2 || 21==5 || 21==8 || 21==16 || 21==19 || 21==22 || 21==26 || 21==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (21==3 || 21==6 || 21==9 || 21==17 || 21==20 || 21==23 || 21==27 || 21==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (21==4 || 21==7 || 21==10 || 21==18 || 21==21 || 21==25 || 21==29 || 21==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=22),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (22==2 || 22==5 || 22==8 || 22==16 || 22==19 || 22==22 || 22==26 || 22==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (22==3 || 22==6 || 22==9 || 22==17 || 22==20 || 22==23 || 22==27 || 22==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (22==4 || 22==7 || 22==10 || 22==18 || 22==21 || 22==25 || 22==29 || 22==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=25),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (25==2 || 25==5 || 25==8 || 25==16 || 25==19 || 25==22 || 25==26 || 25==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (25==3 || 25==6 || 25==9 || 25==17 || 25==20 || 25==23 || 25==27 || 25==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (25==4 || 25==7 || 25==10 || 25==18 || 25==21 || 25==25 || 25==29 || 25==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=25),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (25==2 || 25==5 || 25==8 || 25==16 || 25==19 || 25==22 || 25==26 || 25==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (25==3 || 25==6 || 25==9 || 25==17 || 25==20 || 25==23 || 25==27 || 25==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (25==4 || 25==7 || 25==10 || 25==18 || 25==21 || 25==25 || 25==29 || 25==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=25),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (25==2 || 25==5 || 25==8 || 25==16 || 25==19 || 25==22 || 25==26 || 25==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (25==3 || 25==6 || 25==9 || 25==17 || 25==20 || 25==23 || 25==27 || 25==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (25==4 || 25==7 || 25==10 || 25==18 || 25==21 || 25==25 || 25==29 || 25==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=26),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (26==2 || 26==5 || 26==8 || 26==16 || 26==19 || 26==22 || 26==26 || 26==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (26==3 || 26==6 || 26==9 || 26==17 || 26==20 || 26==23 || 26==27 || 26==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (26==4 || 26==7 || 26==10 || 26==18 || 26==21 || 26==25 || 26==29 || 26==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=29),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (29==2 || 29==5 || 29==8 || 29==16 || 29==19 || 29==22 || 29==26 || 29==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (29==3 || 29==6 || 29==9 || 29==17 || 29==20 || 29==23 || 29==27 || 29==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (29==4 || 29==7 || 29==10 || 29==18 || 29==21 || 29==25 || 29==29 || 29==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=29),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (29==2 || 29==5 || 29==8 || 29==16 || 29==19 || 29==22 || 29==26 || 29==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (29==3 || 29==6 || 29==9 || 29==17 || 29==20 || 29==23 || 29==27 || 29==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (29==4 || 29==7 || 29==10 || 29==18 || 29==21 || 29==25 || 29==29 || 29==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=29),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (29==2 || 29==5 || 29==8 || 29==16 || 29==19 || 29==22 || 29==26 || 29==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (29==3 || 29==6 || 29==9 || 29==17 || 29==20 || 29==23 || 29==27 || 29==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (29==4 || 29==7 || 29==10 || 29==18 || 29==21 || 29==25 || 29==29 || 29==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=30),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (30==2 || 30==5 || 30==8 || 30==16 || 30==19 || 30==22 || 30==26 || 30==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (30==3 || 30==6 || 30==9 || 30==17 || 30==20 || 30==23 || 30==27 || 30==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (30==4 || 30==7 || 30==10 || 30==18 || 30==21 || 30==25 || 30==29 || 30==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=33),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (33==2 || 33==5 || 33==8 || 33==16 || 33==19 || 33==22 || 33==26 || 33==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (33==3 || 33==6 || 33==9 || 33==17 || 33==20 || 33==23 || 33==27 || 33==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (33==4 || 33==7 || 33==10 || 33==18 || 33==21 || 33==25 || 33==29 || 33==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=33),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (33==2 || 33==5 || 33==8 || 33==16 || 33==19 || 33==22 || 33==26 || 33==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (33==3 || 33==6 || 33==9 || 33==17 || 33==20 || 33==23 || 33==27 || 33==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (33==4 || 33==7 || 33==10 || 33==18 || 33==21 || 33==25 || 33==29 || 33==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=33),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (33==2 || 33==5 || 33==8 || 33==16 || 33==19 || 33==22 || 33==26 || 33==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (33==3 || 33==6 || 33==9 || 33==17 || 33==20 || 33==23 || 33==27 || 33==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (33==4 || 33==7 || 33==10 || 33==18 || 33==21 || 33==25 || 33==29 || 33==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!file) cimg::fclose(nfile); > return *this; > } ># 42141 "./CImg.h" > const CImg<T>& save_raw(const char *const filename, const bool is_multiplexed=false) const { > return _save_raw(0,filename,is_multiplexed); > } > > > > > > > const CImg<T>& save_raw(std::FILE *const file, const bool is_multiplexed=false) const { > return _save_raw(file,0,is_multiplexed); > } > > const CImg<T>& _save_raw(std::FILE *const file, const char *const filename, const bool is_multiplexed) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_raw(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > if (!is_multiplexed) cimg::fwrite(_data,size(),nfile); > else { > CImg<T> buf(_spectrum); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > for (int c = 0; c<(int)((*this)._spectrum); ++c) buf[c] = (*this)(x,y,z,c); > cimg::fwrite(buf._data,_spectrum,nfile); > } > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 42185 "./CImg.h" > const CImg<T>& save_ffmpeg(const char *const filename, const unsigned int fps=25, const unsigned int bitrate=2048) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_ffmpeg(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!fps) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_ffmpeg(): Invalid specified framerate 0, for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > > return save_ffmpeg_external(filename,0,fps,bitrate); > > > > > > return *this; > } > > > > > > > > const CImg<T>& save_yuv(const char *const filename, const bool is_rgb=true) const { > get_split('z').save_yuv(filename,is_rgb); > return *this; > } > > > > > > > const CImg<T>& save_yuv(std::FILE *const file, const bool is_rgb=true) const { > get_split('z').save_yuv(file,is_rgb); > return *this; > } ># 42239 "./CImg.h" > template<typename tf, typename tc> > const CImg<T>& save_off(const CImgList<tf>& primitives, const CImgList<tc>& colors, > const char *const filename) const { > return _save_off(primitives,colors,0,filename); > } > > > > > > > template<typename tf, typename tc> > const CImg<T>& save_off(const CImgList<tf>& primitives, const CImgList<tc>& colors, > std::FILE *const file) const { > return _save_off(primitives,colors,file,0); > } > > template<typename tf, typename tc> > const CImg<T>& _save_off(const CImgList<tf>& primitives, const CImgList<tc>& colors, > std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_off(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_off(): Empty instance, for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > CImgList<T> opacities; > char error_message[1024] = { 0 }; > if (!is_object3d(primitives,colors,opacities,true,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_off(): Invalid specified 3d object, for file '%s' (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)",error_message); > > const CImg<tc> default_color(1,3,1,1,200); > std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); > unsigned int supported_primitives = 0; > for (int l = 0; l<(int)(primitives)._width; ++l) if (primitives[l].size()!=5) ++supported_primitives; > std::fprintf(nfile,"OFF\n%u %u %u\n",_width,supported_primitives,3*primitives._width); > for (int i = 0; i<(int)((*this)._width); ++i) std::fprintf(nfile,"%f %f %f\n",(float)((*this)(i,0)),(float)((*this)(i,1)),(float)((*this)(i,2))); > for (int l = 0; l<(int)(primitives)._width; ++l) { > const CImg<tc>& color = l<colors.width()?colors[l]:default_color; > const unsigned int psiz = primitives[l].size(), csiz = color.size(); > const float r = color[0]/255.0f, g = (csiz>1?color[1]:r)/255.0f, b = (csiz>2?color[2]:g)/255.0f; > switch (psiz) { > case 1 : std::fprintf(nfile,"1 %u %f %f %f\n",(unsigned int)primitives(l,0),r,g,b); break; > case 2 : std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),r,g,b); break; > case 3 : std::fprintf(nfile,"3 %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,2), > (unsigned int)primitives(l,1),r,g,b); break; > case 4 : std::fprintf(nfile,"4 %u %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,3), > (unsigned int)primitives(l,2),(unsigned int)primitives(l,1),r,g,b); break; > case 5 : std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),r,g,b); break; > case 6 : { > const unsigned int xt = (unsigned int)primitives(l,2), yt = (unsigned int)primitives(l,3); > const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; > std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),rt,gt,bt); > } break; > case 9 : { > const unsigned int xt = (unsigned int)primitives(l,3), yt = (unsigned int)primitives(l,4); > const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; > std::fprintf(nfile,"3 %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,2), > (unsigned int)primitives(l,1),rt,gt,bt); > } break; > case 12 : { > const unsigned int xt = (unsigned int)primitives(l,4), yt = (unsigned int)primitives(l,5); > const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; > std::fprintf(nfile,"4 %u %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,3), > (unsigned int)primitives(l,2),(unsigned int)primitives(l,1),rt,gt,bt); > } break; > } > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 42329 "./CImg.h" > const CImg<T>& save_ffmpeg_external(const char *const filename, const char *const codec=0, > const unsigned int fps=25, const unsigned int bitrate=2048) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_ffmpeg_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > CImgList<T> list; > get_split('z').move_to(list); > list.save_ffmpeg_external(filename,codec,fps,bitrate); > return *this; > } > > > > > > > > const CImg<T>& save_gzip_external(const char *const filename) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_gzip_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > const char > *ext = cimg::split_filename(filename,body), > *ext2 = cimg::split_filename(body,0); > std::FILE *file; > do { > if (!cimg::strcasecmp(ext,"gz")) { > if (*ext2) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext2); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),'/',cimg::filenamerand()); > } else { > if (*ext) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),'/',cimg::filenamerand()); > } > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > save(filetmp); > snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", > cimg::gzip_path(), > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_gzip_external(): Failed to save file '%s' with external command 'gzip'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > else cimg::fclose(file); > std::remove(filetmp); > return *this; > } ># 42396 "./CImg.h" > const CImg<T>& save_graphicsmagick_external(const char *const filename, const unsigned int quality=100) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_graphicsmagick_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } ># 42410 "./CImg.h" > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file; > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),_spectrum==1?"pgm":"ppm"); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > > > > save_pnm(filetmp); > > snprintf(command,sizeof(command),"%s convert -quality %u \"%s\" \"%s\"", > cimg::graphicsmagick_path(),quality, > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_graphicsmagick_external(): Failed to save file '%s' with external command 'gm'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > if (file) cimg::fclose(file); > std::remove(filetmp); > return *this; > } ># 42445 "./CImg.h" > const CImg<T>& save_imagemagick_external(const char *const filename, const unsigned int quality=100) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_imagemagick_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } ># 42459 "./CImg.h" > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file; > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),_spectrum==1?"pgm":"ppm"); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > > > > save_pnm(filetmp); > > snprintf(command,sizeof(command),"%s -quality %u \"%s\" \"%s\"", > cimg::imagemagick_path(),quality, > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_imagemagick_external(): Failed to save file '%s' with external command 'convert'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > if (file) cimg::fclose(file); > std::remove(filetmp); > return *this; > } > > > > > > > > const CImg<T>& save_medcon_external(const char *const filename) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_medcon_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > std::FILE *file; > do { > snprintf(filetmp,sizeof(filetmp),"%s.hdr",cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > save_analyze(filetmp); > snprintf(command,sizeof(command),"%s -w -c dicom -o \"%s\" -f \"%s\"", > cimg::medcon_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command); > std::remove(filetmp); > cimg::split_filename(filetmp,body); > snprintf(filetmp,sizeof(filetmp),"%s.img",body); > std::remove(filetmp); > > file = std::fopen(filename,"rb"); > if (!file) { > snprintf(command,sizeof(command),"m000-%s",filename); > file = std::fopen(command,"rb"); > if (!file) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_medcon_external(): Failed to save file '%s' with external command 'medcon'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > } > cimg::fclose(file); > std::rename(command,filename); > return *this; > } ># 42545 "./CImg.h" > const CImg<T>& save_other(const char *const filename, const unsigned int quality=100) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_other(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > const unsigned int omode = cimg::exception_mode(); > bool is_saved = true; > cimg::exception_mode() = 0; > try { save_magick(filename); } > catch (CImgException&) { > try { save_imagemagick_external(filename,quality); } > catch (CImgException&) { > try { save_graphicsmagick_external(filename,quality); } > catch (CImgException&) { > is_saved = false; > } > } > } > cimg::exception_mode() = omode; > if (!is_saved) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_other(): Failed to save file '%s'. Format is not natively supported, and no external commands succeeded.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > return *this; > } > > > static CImg<T> _logo40x38() { > CImg<T> res(40,38,1,3); > const unsigned char *ptrs = cimg::logo40x38; > T *ptr1 = res.data(0,0,0,0), *ptr2 = res.data(0,0,0,1), *ptr3 = res.data(0,0,0,2); > for (unsigned long off = 0; off<(unsigned long)res._width*res._height;) { > const unsigned char n = *(ptrs++), r = *(ptrs++), g = *(ptrs++), b = *(ptrs++); > for (unsigned int l = 0; l<n; ++off, ++l) { *(ptr1++) = (T)r; *(ptr2++) = (T)g; *(ptr3++) = (T)b; } > } > return res; > } > > > }; ># 42601 "./CImg.h" > template<typename T> > struct CImgList { > unsigned int _width, _allocated_width; > CImg<T> *_data; ># 42620 "./CImg.h" > typedef CImg<T>* iterator; > > > > > > > > typedef const CImg<T>* const_iterator; ># 42638 "./CImg.h" > typedef T value_type; > > > typedef typename cimg::superset<T,bool>::type Tbool; > typedef typename cimg::superset<T,unsigned char>::type Tuchar; > typedef typename cimg::superset<T,char>::type Tchar; > typedef typename cimg::superset<T,unsigned short>::type Tushort; > typedef typename cimg::superset<T,short>::type Tshort; > typedef typename cimg::superset<T,unsigned int>::type Tuint; > typedef typename cimg::superset<T,int>::type Tint; > typedef typename cimg::superset<T,unsigned long>::type Tulong; > typedef typename cimg::superset<T,long>::type Tlong; > typedef typename cimg::superset<T,float>::type Tfloat; > typedef typename cimg::superset<T,double>::type Tdouble; > typedef typename cimg::last<T,bool>::type boolT; > typedef typename cimg::last<T,unsigned char>::type ucharT; > typedef typename cimg::last<T,char>::type charT; > typedef typename cimg::last<T,unsigned short>::type ushortT; > typedef typename cimg::last<T,short>::type shortT; > typedef typename cimg::last<T,unsigned int>::type uintT; > typedef typename cimg::last<T,int>::type intT; > typedef typename cimg::last<T,unsigned long>::type ulongT; > typedef typename cimg::last<T,long>::type longT; > typedef typename cimg::last<T,float>::type floatT; > typedef typename cimg::last<T,double>::type doubleT; ># 42712 "./CImg.h" > ~CImgList() { > delete[] _data; > } ># 42723 "./CImg.h" > CImgList(): > _width(0),_allocated_width(0),_data(0) {} ># 42733 "./CImg.h" > explicit CImgList(const unsigned int n):_width(n) { > if (n) _data = new CImg<T>[_allocated_width = cimg::max(16UL,cimg::nearest_pow2(n))]; > else { _allocated_width = 0; _data = 0; } > } ># 42747 "./CImg.h" > CImgList(const unsigned int n, const unsigned int width, const unsigned int height=1, > const unsigned int depth=1, const unsigned int spectrum=1): > _width(0),_allocated_width(0),_data(0) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(width,height,depth,spectrum); > } ># 42763 "./CImg.h" > CImgList(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const T val): > _width(0),_allocated_width(0),_data(0) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(width,height,depth,spectrum,val); > } ># 42781 "./CImg.h" > CImgList(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const int val0, const int val1, ...): > _width(0),_allocated_width(0),_data(0) { ># 42796 "./CImg.h" > { assign(n,width,height,depth,spectrum); const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; T *ptrd = _data->_data; va_list ap; __builtin_va_start(ap,val1); for (unsigned long l = 0, s = 0, i = 0; i<nsiz; ++i) { *(ptrd++) = (T)(i==0?val0:(i==1?val1:__builtin_va_arg(ap,int))); if ((++s)==siz) { ptrd = _data[++l]._data; s = 0; } } __builtin_va_end(ap); }; > } ># 42810 "./CImg.h" > CImgList(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const double val0, const double val1, ...): > _width(0),_allocated_width(0),_data(0) { > { assign(n,width,height,depth,spectrum); const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; T *ptrd = _data->_data; va_list ap; __builtin_va_start(ap,val1); for (unsigned long l = 0, s = 0, i = 0; i<nsiz; ++i) { *(ptrd++) = (T)(i==0?val0:(i==1?val1:__builtin_va_arg(ap,double))); if ((++s)==siz) { ptrd = _data[++l]._data; s = 0; } } __builtin_va_end(ap); }; > } > > > > > > > > template<typename t> > CImgList(const unsigned int n, const CImg<t>& img, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(img,is_shared); > } > > > > > > > template<typename t> > explicit CImgList(const CImg<t>& img, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(1); > _data[0].assign(img,is_shared); > } > > > > > > > > template<typename t1, typename t2> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(2); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); > } ># 42861 "./CImg.h" > template<typename t1, typename t2, typename t3> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(3); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); > } ># 42876 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(4); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > } ># 42892 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4, typename t5> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(5); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); > } ># 42911 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(6); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); > } ># 42931 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6, typename t7> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const CImg<t7>& img7, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(7); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); > } ># 42952 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6, typename t7, typename t8> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const CImg<t7>& img7, const CImg<t8>& img8, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(8); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); _data[7].assign(img8,is_shared); > } > > > > > > > template<typename t> > CImgList(const CImgList<t>& list):_width(0),_allocated_width(0),_data(0) { > assign(list._width); > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].assign(list[l],false); > } > > > CImgList(const CImgList<T>& list):_width(0),_allocated_width(0),_data(0) { > assign(list._width); > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].assign(list[l],list[l]._is_shared); > } > > > > > > > template<typename t> > CImgList(const CImgList<t>& list, const bool is_shared):_width(0),_allocated_width(0),_data(0) { > assign(list._width); > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].assign(list[l],is_shared); > } > > > > > > explicit CImgList(const char *const filename):_width(0),_allocated_width(0),_data(0) { > assign(filename); > } > > > > > > > explicit CImgList(const CImgDisplay& disp):_width(0),_allocated_width(0),_data(0) { > assign(disp); > } > > > > > > CImgList<T> get_shared() { > CImgList<T> res(_width); > for (int l = 0; l<(int)(*this)._width; ++l) res[l].assign(_data[l],true); > return res; > } > > > const CImgList<T> get_shared() const { > CImgList<T> res(_width); > for (int l = 0; l<(int)(*this)._width; ++l) res[l].assign(_data[l],true); > return res; > } > > > > > > CImgList<T>& assign() { > delete[] _data; > _width = _allocated_width = 0; > _data = 0; > return *this; > } > > > > > > > CImgList<T>& clear() { > return assign(); > } > > > > > > CImgList<T>& assign(const unsigned int n) { > if (!n) return assign(); > if (_allocated_width<n || _allocated_width>(n<<2)) { > delete[] _data; > _data = new CImg<T>[_allocated_width=cimg::max(16UL,cimg::nearest_pow2(n))]; > } > _width = n; > return *this; > } > > > > > > CImgList<T>& assign(const unsigned int n, const unsigned int width, const unsigned int height=1, > const unsigned int depth=1, const unsigned int spectrum=1) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(width,height,depth,spectrum); > return *this; > } > > > > > > CImgList<T>& assign(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const T val) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(width,height,depth,spectrum,val); > return *this; > } > > > > > > CImgList<T>& assign(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const int val0, const int val1, ...) { > { assign(n,width,height,depth,spectrum); const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; T *ptrd = _data->_data; va_list ap; __builtin_va_start(ap,val1); for (unsigned long l = 0, s = 0, i = 0; i<nsiz; ++i) { *(ptrd++) = (T)(i==0?val0:(i==1?val1:__builtin_va_arg(ap,int))); if ((++s)==siz) { ptrd = _data[++l]._data; s = 0; } } __builtin_va_end(ap); }; > return *this; > } > > > > > > CImgList<T>& assign(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const double val0, const double val1, ...) { > { assign(n,width,height,depth,spectrum); const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; T *ptrd = _data->_data; va_list ap; __builtin_va_start(ap,val1); for (unsigned long l = 0, s = 0, i = 0; i<nsiz; ++i) { *(ptrd++) = (T)(i==0?val0:(i==1?val1:__builtin_va_arg(ap,double))); if ((++s)==siz) { ptrd = _data[++l]._data; s = 0; } } __builtin_va_end(ap); }; > return *this; > } > > > > > > template<typename t> > CImgList<T>& assign(const unsigned int n, const CImg<t>& img, const bool is_shared=false) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(img,is_shared); > return *this; > } > > > > > > template<typename t> > CImgList<T>& assign(const CImg<t>& img, const bool is_shared=false) { > assign(1); > _data[0].assign(img,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const bool is_shared=false) { > assign(2); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const bool is_shared=false) { > assign(3); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const bool is_shared=false) { > assign(4); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4, typename t5> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const bool is_shared=false) { > assign(5); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const bool is_shared=false) { > assign(6); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6, typename t7> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const CImg<t7>& img7, const bool is_shared=false) { > assign(7); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6, typename t7, typename t8> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const CImg<t7>& img7, const CImg<t8>& img8, > const bool is_shared=false) { > assign(8); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); _data[7].assign(img8,is_shared); > return *this; > } > > > > > > template<typename t> > CImgList<T>& assign(const CImgList<t>& list, const bool is_shared=false) { > cimg::unused(is_shared); > assign(list._width); > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].assign(list[l],false); > return *this; > } > > > CImgList<T>& assign(const CImgList<T>& list, const bool is_shared=false) { > if (this==&list) return *this; > CImgList<T> res(list._width); > for (int l = 0; l<(int)(res)._width; ++l) res[l].assign(list[l],is_shared); > return res.move_to(*this); > } > > > > > > CImgList<T>& assign(const char *const filename) { > return load(filename); > } > > > > > > CImgList<T>& assign(const CImgDisplay &disp) { > return assign(CImg<T>(disp)); > } > > > > > > > template<typename t> > CImgList<t>& move_to(CImgList<t>& list) { > list.assign(_width); > bool is_one_shared_element = false; > for (int l = 0; l<(int)(*this)._width; ++l) is_one_shared_element|=_data[l]._is_shared; > if (is_one_shared_element) for (int l = 0; l<(int)(*this)._width; ++l) list[l].assign(_data[l]); > else for (int l = 0; l<(int)(*this)._width; ++l) _data[l].move_to(list[l]); > assign(); > return list; > } ># 43267 "./CImg.h" > template<typename t> > CImgList<t>& move_to(CImgList<t>& list, const unsigned int pos) { > if (is_empty()) return list; > const unsigned int npos = pos>list._width?list._width:pos; > list.insert(_width,npos); > bool is_one_shared_element = false; > for (int l = 0; l<(int)(*this)._width; ++l) is_one_shared_element|=_data[l]._is_shared; > if (is_one_shared_element) for (int l = 0; l<(int)(*this)._width; ++l) list[npos+l].assign(_data[l]); > else for (int l = 0; l<(int)(*this)._width; ++l) _data[l].move_to(list[npos+l]); > assign(); > return list; > } > > > > > > > CImgList<T>& swap(CImgList<T>& list) { > cimg::swap(_width,list._width); > cimg::swap(_allocated_width,list._allocated_width); > cimg::swap(_data,list._data); > return list; > } ># 43299 "./CImg.h" > static CImgList<T>& empty() { > static CImgList<T> _empty; > return _empty.assign(); > } ># 43315 "./CImg.h" > CImg<T>& operator()(const unsigned int pos) { ># 43325 "./CImg.h" > return _data[pos]; > } > > > > > > const CImg<T>& operator()(const unsigned int pos) const { > return const_cast<CImgList<T>*>(this)->operator()(pos); > } ># 43345 "./CImg.h" > T& operator()(const unsigned int pos, const unsigned int x, const unsigned int y=0, > const unsigned int z=0, const unsigned int c=0) { > return (*this)[pos](x,y,z,c); > } > > > const T& operator()(const unsigned int pos, const unsigned int x, const unsigned int y=0, > const unsigned int z=0, const unsigned int c=0) const { > return (*this)[pos](x,y,z,c); > } > > > > > > operator CImg<T>*() { > return _data; > } > > > operator const CImg<T>*() const { > return _data; > } > > > > > > > template<typename t> > CImgList<T>& operator=(const CImg<t>& img) { > return assign(img); > } > > > > > > > template<typename t> > CImgList<T>& operator=(const CImgList<t>& list) { > return assign(list); > } > > > CImgList<T>& operator=(const CImgList<T>& list) { > return assign(list); > } > > > > > > CImgList<T>& operator=(const char *const filename) { > return assign(filename); > } > > > > > > CImgList<T>& operator=(const CImgDisplay& disp) { > return assign(disp); > } > > > > > > CImgList<T> operator+() const { > return CImgList<T>(*this,false); > } ># 43426 "./CImg.h" > template<typename t> > CImgList<T>& operator,(const CImg<t>& img) { > return insert(img); > } > > > template<typename t> > CImgList<T> operator,(const CImg<t>& img) const { > return (+*this).insert(img); > } > > > > > > template<typename t> > CImgList<T>& operator,(const CImgList<t>& list) { > return insert(list); > } > > > template<typename t> > CImgList<T>& operator,(const CImgList<t>& list) const { > return (+*this).insert(list); > } > > > > > > > CImg<T> operator>(const char axis) const { > return get_append(axis,0); > } > > > > > > > CImgList<T> operator<(const char axis) const { > return get_split(axis); > } ># 43485 "./CImg.h" > static const char* pixel_type() { > return cimg::type<T>::string(); > } > > > > > > int width() const { > return (int)_width; > } > > > > > > unsigned int size() const { > return _width; > } > > > > > > CImg<T> *data() { > return _data; > } > > > const CImg<T> *data() const { > return _data; > } ># 43537 "./CImg.h" > CImg<T> *data(const unsigned int l) { > return _data + l; > } > > > const CImg<T> *data(const unsigned int l) const { > return _data + l; > } > > > > > > iterator begin() { > return _data; > } > > > const_iterator begin() const { > return _data; > } > > > > > iterator end() { > return _data + _width; > } > > > const_iterator end() const { > return _data + _width; > } > > > > > CImg<T>& front() { > return *_data; > } > > > const CImg<T>& front() const { > return *_data; > } > > > > > const CImg<T>& back() const { > return *(_data + _width - 1); > } > > > CImg<T>& back() { > return *(_data + _width - 1); > } > > > > > > CImg<T>& at(const int pos) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "at(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _data[pos<0?0:pos>=(int)_width?(int)_width-1:pos]; > } ># 43618 "./CImg.h" > T& atNXYZC(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXYZC(x,y,z,c,out_value); > } > > > T atNXYZC(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXYZC(x,y,z,c,out_value); > } ># 43636 "./CImg.h" > T& atNXYZC(const int pos, const int x, const int y, const int z, const int c) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXYZC(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXYZC(pos,x,y,z,c); > } > > > T atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXYZC(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXYZC(pos,x,y,z,c); > } > > T& _atNXYZC(const int pos, const int x, const int y, const int z, const int c) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZC(x,y,z,c); > } > > T _atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZC(x,y,z,c); > } ># 43673 "./CImg.h" > T& atNXYZ(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXYZ(x,y,z,c,out_value); > } > > > T atNXYZ(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXYZ(x,y,z,c,out_value); > } ># 43691 "./CImg.h" > T& atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXYZ(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXYZ(pos,x,y,z,c); > } > > > T atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXYZ(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXYZ(pos,x,y,z,c); > } > > T& _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZ(x,y,z,c); > } > > T _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZ(x,y,z,c); > } ># 43728 "./CImg.h" > T& atNXY(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXY(x,y,z,c,out_value); > } > > > T atNXY(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXY(x,y,z,c,out_value); > } ># 43746 "./CImg.h" > T& atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXY(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXY(pos,x,y,z,c); > } > > > T atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXY(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXY(pos,x,y,z,c); > } > > T& _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXY(x,y,z,c); > } > > T _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXY(x,y,z,c); > } ># 43783 "./CImg.h" > T& atNX(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atX(x,y,z,c,out_value); > } > > > T atNX(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atX(x,y,z,c,out_value); > } ># 43801 "./CImg.h" > T& atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNX(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNX(pos,x,y,z,c); > } > > > T atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNX(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNX(pos,x,y,z,c); > } > > T& _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atX(x,y,z,c); > } > > T _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atX(x,y,z,c); > } ># 43838 "./CImg.h" > T& atN(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):(*this)(pos,x,y,z,c); > } > > > T atN(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:(*this)(pos,x,y,z,c); > } ># 43856 "./CImg.h" > T& atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atN(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > return _atN(pos,x,y,z,c); > } > > > T atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atN(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > return _atN(pos,x,y,z,c); > } > > T& _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)](x,y,z,c); > } > > T _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)](x,y,z,c); > } > > > > > > > > CImg<charT> value_string(const char separator=',', const unsigned int max_size=0) const { > if (is_empty()) return CImg<ucharT>(1,1,1,1,0); > CImgList<charT> items; > for (unsigned int l = 0; l<_width-1; ++l) { > CImg<charT> item = _data[l].value_string(separator,0); > item.back() = separator; > item.move_to(items); > } > _data[_width-1].value_string(separator,0).move_to(items); > CImg<charT> res; (items>'x').move_to(res); > if (max_size) { res.crop(0,max_size); res(max_size) = 0; } > return res; > } ># 43911 "./CImg.h" > bool is_empty() const { > return (!_data || !_width); > } > > > > > > bool is_sameN(const unsigned int size_n) const { > return _width==size_n; > } > > > > > > template<typename t> > bool is_sameN(const CImgList<t>& list) const { > return is_sameN(list._width); > } ># 43973 "./CImg.h" > template<typename t> bool is_sameXY(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXY(img); return res; } template<typename t> bool is_sameXY(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXY(list[l]); return res; } template<typename t> bool is_sameNXY(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXY(img)); } template<typename t> bool is_sameNXY(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXY(list)); } > template<typename t> bool is_sameXZ(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXZ(img); return res; } template<typename t> bool is_sameXZ(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXZ(list[l]); return res; } template<typename t> bool is_sameNXZ(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXZ(img)); } template<typename t> bool is_sameNXZ(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXZ(list)); } > template<typename t> bool is_sameXC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXC(img); return res; } template<typename t> bool is_sameXC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXC(list[l]); return res; } template<typename t> bool is_sameNXC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXC(img)); } template<typename t> bool is_sameNXC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXC(list)); } > template<typename t> bool is_sameYZ(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYZ(img); return res; } template<typename t> bool is_sameYZ(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameYZ(list[l]); return res; } template<typename t> bool is_sameNYZ(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameYZ(img)); } template<typename t> bool is_sameNYZ(const CImgList<t>& list) const { return (is_sameN(list) && is_sameYZ(list)); } > template<typename t> bool is_sameYC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYC(img); return res; } template<typename t> bool is_sameYC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameYC(list[l]); return res; } template<typename t> bool is_sameNYC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameYC(img)); } template<typename t> bool is_sameNYC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameYC(list)); } > template<typename t> bool is_sameXYZ(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZ(img); return res; } template<typename t> bool is_sameXYZ(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXYZ(list[l]); return res; } template<typename t> bool is_sameNXYZ(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXYZ(img)); } template<typename t> bool is_sameNXYZ(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXYZ(list)); } > template<typename t> bool is_sameXYC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYC(img); return res; } template<typename t> bool is_sameXYC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXYC(list[l]); return res; } template<typename t> bool is_sameNXYC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXYC(img)); } template<typename t> bool is_sameNXYC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXYC(list)); } > template<typename t> bool is_sameYZC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYZC(img); return res; } template<typename t> bool is_sameYZC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameYZC(list[l]); return res; } template<typename t> bool is_sameNYZC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameYZC(img)); } template<typename t> bool is_sameNYZC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameYZC(list)); } > template<typename t> bool is_sameXYZC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZC(img); return res; } template<typename t> bool is_sameXYZC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXYZC(list[l]); return res; } template<typename t> bool is_sameNXYZC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXYZC(img)); } template<typename t> bool is_sameNXYZC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXYZC(list)); } > bool is_sameX(const unsigned int val) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameX(val); return res; } bool is_sameNX(const unsigned int n, const unsigned int val) const { return is_sameN(n) && is_sameX(val); } > bool is_sameY(const unsigned int val) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameY(val); return res; } bool is_sameNY(const unsigned int n, const unsigned int val) const { return is_sameN(n) && is_sameY(val); } > bool is_sameZ(const unsigned int val) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameZ(val); return res; } bool is_sameNZ(const unsigned int n, const unsigned int val) const { return is_sameN(n) && is_sameZ(val); } > bool is_sameC(const unsigned int val) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameC(val); return res; } bool is_sameNC(const unsigned int n, const unsigned int val) const { return is_sameN(n) && is_sameC(val); } > bool is_sameXY(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXY(val1,val2); return res; } bool is_sameNXY(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameXY(val1,val2); } > bool is_sameXZ(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXZ(val1,val2); return res; } bool is_sameNXZ(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameXZ(val1,val2); } > bool is_sameXC(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXC(val1,val2); return res; } bool is_sameNXC(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameXC(val1,val2); } > bool is_sameYZ(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYZ(val1,val2); return res; } bool is_sameNYZ(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameYZ(val1,val2); } > bool is_sameYC(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYC(val1,val2); return res; } bool is_sameNYC(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameYC(val1,val2); } > bool is_sameZC(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameZC(val1,val2); return res; } bool is_sameNZC(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameZC(val1,val2); } > bool is_sameXYZ(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZ(val1,val2,val3); return res; } bool is_sameNXYZ(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { return is_sameN(n) && is_sameXYZ(val1,val2,val3); } > bool is_sameXYC(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYC(val1,val2,val3); return res; } bool is_sameNXYC(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { return is_sameN(n) && is_sameXYC(val1,val2,val3); } > bool is_sameXZC(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXZC(val1,val2,val3); return res; } bool is_sameNXZC(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { return is_sameN(n) && is_sameXZC(val1,val2,val3); } > bool is_sameYZC(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYZC(val1,val2,val3); return res; } bool is_sameNYZC(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { return is_sameN(n) && is_sameYZC(val1,val2,val3); } ># 44004 "./CImg.h" > bool is_sameXYZC(const unsigned int dx, const unsigned int dy, const unsigned int dz, const unsigned int dc) const { > bool res = true; > for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZC(dx,dy,dz,dc); > return res; > } ># 44018 "./CImg.h" > bool is_sameNXYZC(const unsigned int n, const unsigned int dx, const unsigned int dy, const unsigned int dz, const unsigned int dc) const { > return is_sameN(n) && is_sameXYZC(dx,dy,dz,dc); > } ># 44030 "./CImg.h" > bool containsNXYZC(const int n, const int x=0, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) return false; > return n>=0 && n<(int)_width && x>=0 && x<_data[n].width() && y>=0 && y<_data[n].height() && > z>=0 && z<_data[n].depth() && c>=0 && c<_data[n].spectrum(); > } > > > > > > bool containsN(const int n) const { > if (is_empty()) return false; > return n>=0 && n<(int)_width; > } ># 44055 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& n, t& x, t&y, t& z, t& c) const { > if (is_empty()) return false; > for (int l = 0; l<(int)(*this)._width; ++l) if (_data[l].contains(pixel,x,y,z,c)) { n = (t)l; return true; } > return false; > } ># 44071 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& n, t& x, t&y, t& z) const { > t c; > return contains(pixel,n,x,y,z,c); > } ># 44085 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& n, t& x, t&y) const { > t z, c; > return contains(pixel,n,x,y,z,c); > } ># 44098 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& n, t& x) const { > t y, z, c; > return contains(pixel,n,x,y,z,c); > } > > > > > > > > template<typename t> > bool contains(const T& pixel, t& n) const { > t x, y, z, c; > return contains(pixel,n,x,y,z,c); > } > > > > > > bool contains(const T& pixel) const { > unsigned int n, x, y, z, c; > return contains(pixel,n,x,y,z,c); > } > > > > > > > > template<typename t> > bool contains(const CImg<T>& img, t& n) const { > if (is_empty()) return false; > const CImg<T> *const ptr = &img; > for (int i = 0; i<(int)(*this)._width; ++i) if (_data+i==ptr) { n = (t)i; return true; } > return false; > } > > > > > > bool contains(const CImg<T>& img) const { > unsigned int n; > return contains(img,n); > } ># 44158 "./CImg.h" > T& min() { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "min(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > T *ptr_min = _data->_data; > T min_value = *ptr_min; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs<min_value) min_value = *(ptr_min=ptrs); > } > return *ptr_min; > } > > > const T& min() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "min(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > const T *ptr_min = _data->_data; > T min_value = *ptr_min; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs<min_value) min_value = *(ptr_min=ptrs); > } > return *ptr_min; > } > > > > > T& max() { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "max(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > T *ptr_max = _data->_data; > T max_value = *ptr_max; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); > } > return *ptr_max; > } > > > const T& max() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "max(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > const T *ptr_max = _data->_data; > T max_value = *ptr_max; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); > } > return *ptr_max; > } > > > > > > template<typename t> > T& min_max(t& max_val) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "min_max(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > T *ptr_min = _data->_data; > T min_value = *ptr_min, max_value = min_value; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val<min_value) { min_value = val; ptr_min = ptrs; } > if (val>max_value) max_value = val; > } > } > max_val = (t)max_value; > return *ptr_min; > } > > > > > > template<typename t> > const T& min_max(t& max_val) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "min_max(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > const T *ptr_min = _data->_data; > T min_value = *ptr_min, max_value = min_value; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val<min_value) { min_value = val; ptr_min = ptrs; } > if (val>max_value) max_value = val; > } > } > max_val = (t)max_value; > return *ptr_min; > } > > > > > > template<typename t> > T& max_min(t& min_val) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "max_min(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > T *ptr_max = _data->_data; > T min_value = *ptr_max, max_value = min_value; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val>max_value) { max_value = val; ptr_max = ptrs; } > if (val<min_value) min_value = val; > } > } > min_val = (t)min_value; > return *ptr_max; > } > > > template<typename t> > const T& max_min(t& min_val) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "max_min(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > const T *ptr_max = _data->_data; > T min_value = *ptr_max, max_value = min_value; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val>max_value) { max_value = val; ptr_max = ptrs; } > if (val<min_value) min_value = val; > } > } > min_val = (t)min_value; > return *ptr_max; > } ># 44325 "./CImg.h" > template<typename t> > CImgList<T>& insert(const CImg<t>& img, const unsigned int pos=~0U, const bool is_shared=false) { > const unsigned int npos = pos==~0U?_width:pos; > if (npos>_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "insert(): Invalid insertion request of specified image (%u,%u,%u,%u,%p) at position %u.", > _width,_allocated_width,_data,pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data,npos); > if (is_shared) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "insert(): Invalid insertion request of specified shared image CImg<%s>(%u,%u,%u,%u,%p) at position %u " > "(pixel types are different).", > _width,_allocated_width,_data,pixel_type(), > img.pixel_type(),img._width,img._height,img._depth,img._spectrum,img._data,npos); > > CImg<T> *const new_data = (++_width>_allocated_width)?new CImg<T>[_allocated_width?(_allocated_width<<=1):(_allocated_width=16)]:0; > if (!_data) { > _data = new_data; > *_data = img; > } else { > if (new_data) { > if (npos) std::memcpy(new_data,_data,sizeof(CImg<T>)*npos); > if (npos!=_width-1) std::memcpy(new_data+npos+1,_data+npos,sizeof(CImg<T>)*(_width-1-npos)); > std::memset(_data,0,sizeof(CImg<T>)*(_width-1)); > delete[] _data; > _data = new_data; > } else if (npos!=_width-1) std::memmove(_data+npos+1,_data+npos,sizeof(CImg<T>)*(_width-1-npos)); > _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; _data[npos]._data = 0; > _data[npos] = img; > } > return *this; > } > > > CImgList<T>& insert(const CImg<T>& img, const unsigned int pos=~0U, const bool is_shared=false) { > const unsigned int npos = pos==~0U?_width:pos; > if (npos>_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "insert(): Invalid insertion request of specified image (%u,%u,%u,%u,%p) at position %u.", > _width,_allocated_width,_data,pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data,npos); > CImg<T> *const new_data = (++_width>_allocated_width)?new CImg<T>[_allocated_width?(_allocated_width<<=1):(_allocated_width=16)]:0; > if (!_data) { > _data = new_data; > if (is_shared && img) { > _data->_width = img._width; _data->_height = img._height; _data->_depth = img._depth; _data->_spectrum = img._spectrum; > _data->_is_shared = true; _data->_data = img._data; > } else *_data = img; > } > else { > if (new_data) { > if (npos) std::memcpy(new_data,_data,sizeof(CImg<T>)*npos); > if (npos!=_width-1) std::memcpy(new_data+npos+1,_data+npos,sizeof(CImg<T>)*(_width-1-npos)); > if (is_shared && img) { > new_data[npos]._width = img._width; new_data[npos]._height = img._height; new_data[npos]._depth = img._depth; > new_data[npos]._spectrum = img._spectrum; new_data[npos]._is_shared = true; new_data[npos]._data = img._data; > } else { > new_data[npos]._width = new_data[npos]._height = new_data[npos]._depth = new_data[npos]._spectrum = 0; new_data[npos]._data = 0; > new_data[npos] = img; > } > std::memset(_data,0,sizeof(CImg<T>)*(_width-1)); > delete[] _data; > _data = new_data; > } else { > if (npos!=_width-1) std::memmove(_data+npos+1,_data+npos,sizeof(CImg<T>)*(_width-1-npos)); > if (is_shared && img) { > _data[npos]._width = img._width; _data[npos]._height = img._height; _data[npos]._depth = img._depth; _data[npos]._spectrum = img._spectrum; > _data[npos]._is_shared = true; _data[npos]._data = img._data; > } else { > _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; _data[npos]._data = 0; > _data[npos] = img; > } > } > } > return *this; > } > > > template<typename t> > CImgList<T> get_insert(const CImg<t>& img, const unsigned int pos=~0U, const bool is_shared=false) const { > return (+*this).insert(img,pos,is_shared); > } > > > > > > > CImgList<T>& insert(const unsigned int n, const unsigned int pos=~0U) { > CImg<T> empty; > if (!n) return *this; > const unsigned int npos = pos==~0U?_width:pos; > for (unsigned int i = 0; i<n; ++i) insert(empty,npos+i); > return *this; > } > > > CImgList<T> get_insert(const unsigned int n, const unsigned int pos=~0U) const { > return (+*this).insert(n,pos); > } ># 44433 "./CImg.h" > template<typename t> > CImgList<T>& insert(const unsigned int n, const CImg<t>& img, const unsigned int pos=~0U, const bool is_shared=false) { > if (!n) return *this; > const unsigned int npos = pos==~0U?_width:pos; > insert(img,npos,is_shared); > for (unsigned int i = 1; i<n; ++i) insert(_data[npos],npos+i,is_shared); > return *this; > } > > > template<typename t> > CImgList<T> get_insert(const unsigned int n, const CImg<t>& img, const unsigned int pos=~0U, const bool is_shared=false) const { > return (+*this).insert(n,img,pos,is_shared); > } > > > > > > > > template<typename t> > CImgList<T>& insert(const CImgList<t>& list, const unsigned int pos=~0U, const bool is_shared=false) { > const unsigned int npos = pos==~0U?_width:pos; > if ((void*)this!=(void*)&list) for (int l = 0; l<(int)(list)._width; ++l) insert(list[l],npos+l,is_shared); > else insert(CImgList<T>(list),npos,is_shared); > return *this; > } > > > template<typename t> > CImgList<T> get_insert(const CImgList<t>& list, const unsigned int pos=~0U, const bool is_shared=false) const { > return (+*this).insert(list,pos,is_shared); > } ># 44475 "./CImg.h" > template<typename t> > CImgList<T>& insert(const unsigned int n, const CImgList<t>& list, const unsigned int pos=~0U, const bool is_shared=false) { > if (!n) return *this; > const unsigned int npos = pos==~0U?_width:pos; > for (unsigned int i = 0; i<n; ++i) insert(list,npos,is_shared); > return *this; > } > > > template<typename t> > CImgList<T> get_insert(const unsigned int n, const CImgList<t>& list, const unsigned int pos=~0U, const bool is_shared=false) const { > return (+*this).insert(n,list,pos,is_shared); > } > > > > > > > CImgList<T>& remove(const unsigned int pos1, const unsigned int pos2) { > const unsigned int > npos1 = pos1<pos2?pos1:pos2, > tpos2 = pos1<pos2?pos2:pos1, > npos2 = tpos2<_width?tpos2:_width-1; > if (npos1>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "remove(): Invalid remove request at positions %u->%u.", > _width,_allocated_width,_data,pixel_type(), > npos1,tpos2); > else { > if (tpos2>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "remove(): Invalid remove request at positions %u->%u.", > _width,_allocated_width,_data,pixel_type(), > npos1,tpos2); > > for (unsigned int k = npos1; k<=npos2; ++k) _data[k].assign(); > const unsigned int nb = 1 + npos2 - npos1; > if (!(_width-=nb)) return assign(); > if (_width>(_allocated_width>>2) || _allocated_width<=16) { > if (npos1!=_width) std::memmove(_data+npos1,_data+npos2+1,sizeof(CImg<T>)*(_width - npos1)); > std::memset(_data + _width,0,sizeof(CImg<T>)*nb); > } else { > _allocated_width>>=2; > while (_allocated_width>16 && _width<(_allocated_width>>1)) _allocated_width>>=1; > CImg<T> *const new_data = new CImg<T>[_allocated_width]; > if (npos1) std::memcpy(new_data,_data,sizeof(CImg<T>)*npos1); > if (npos1!=_width) std::memcpy(new_data+npos1,_data+npos2+1,sizeof(CImg<T>)*(_width-npos1)); > if (_width!=_allocated_width) std::memset(new_data+_width,0,sizeof(_allocated_width - _width)); > std::memset(_data,0,sizeof(CImg<T>)*(_width+nb)); > delete[] _data; > _data = new_data; > } > } > return *this; > } > > > CImgList<T> get_remove(const unsigned int pos1, const unsigned int pos2) const { > return (+*this).remove(pos1,pos2); > } > > > > > > CImgList<T>& remove(const unsigned int pos) { > return remove(pos,pos); > } > > > CImgList<T> get_remove(const unsigned int pos) const { > return (+*this).remove(pos); > } > > > > > CImgList<T>& remove() { > return remove(_width-1); > } > > > CImgList<T> get_remove() const { > return (+*this).remove(); > } > > > CImgList<T>& reverse() { > for (unsigned int l = 0; l<_width/2; ++l) (*this)[l].swap((*this)[_width-1-l]); > return *this; > } > > > CImgList<T> get_reverse() const { > return (+*this).reverse(); > } > > > > > > > CImgList<T>& images(const unsigned int pos0, const unsigned int pos1) { > return get_images(pos0,pos1).move_to(*this); > } > > > CImgList<T> get_images(const unsigned int pos0, const unsigned int pos1) const { > if (pos0>pos1 || pos1>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "images(): Specified sub-list indices (%u->%u) are out of bounds.", > _width,_allocated_width,_data,pixel_type(), > pos0,pos1); > CImgList<T> res(pos1-pos0+1); > for (int l = 0; l<(int)(res)._width; ++l) res[l].assign(_data[pos0+l]); > return res; > } > > > > > > > CImgList<T> get_shared_images(const unsigned int pos0, const unsigned int pos1) { > if (pos0>pos1 || pos1>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", > _width,_allocated_width,_data,pixel_type(), > pos0,pos1); > CImgList<T> res(pos1-pos0+1); > for (int l = 0; l<(int)(res)._width; ++l) res[l].assign(_data[pos0+l],_data[pos0+l]?true:false); > return res; > } > > > const CImgList<T> get_shared_images(const unsigned int pos0, const unsigned int pos1) const { > if (pos0>pos1 || pos1>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", > _width,_allocated_width,_data,pixel_type(), > pos0,pos1); > CImgList<T> res(pos1-pos0+1); > for (int l = 0; l<(int)(res)._width; ++l) res[l].assign(_data[pos0+l],_data[pos0+l]?true:false); > return res; > } > > > > > > > CImg<T> get_append(const char axis, const float align=0) const { > if (is_empty()) return CImg<T>(); > if (_width==1) return +((*this)[0]); > unsigned int dx = 0, dy = 0, dz = 0, dc = 0, pos = 0; > CImg<T> res; > switch (cimg::uncase(axis)) { > case 'x' : { > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { dx+=img._width; dy = cimg::max(dy,img._height); dz = cimg::max(dz,img._depth); dc = cimg::max(dc,img._spectrum); } > } > res.assign(dx,dy,dz,dc,0); > if (res) for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) res.draw_image(pos, > (int)(align*(dy-img._height)), > (int)(align*(dz-img._depth)), > (int)(align*(dc-img._spectrum)), > img); > pos+=img._width; > } > } break; > case 'y' : { > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { dx = cimg::max(dx,img._width); dy+=img._height; dz = cimg::max(dz,img._depth); dc = cimg::max(dc,img._spectrum); } > } > res.assign(dx,dy,dz,dc,0); > if (res) for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) res.draw_image((int)(align*(dx-img._width)), > pos, > (int)(align*(dz-img._depth)), > (int)(align*(dc-img._spectrum)), > img); > pos+=img._height; > } > } break; > case 'z' : { > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { dx = cimg::max(dx,img._width); dy = cimg::max(dy,img._height); dz+=img._depth; dc = cimg::max(dc,img._spectrum); } > } > res.assign(dx,dy,dz,dc,0); > if (res) for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) res.draw_image((int)(align*(dx-img._width)), > (int)(align*(dy-img._height)), > pos, > (int)(align*(dc-img._spectrum)), > img); > pos+=img._depth; > } > } break; > default : { > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { dx = cimg::max(dx,img._width); dy = cimg::max(dy,img._height); dz = cimg::max(dz,img._depth); dc+=img._spectrum; } > } > res.assign(dx,dy,dz,dc,0); > if (res) for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) res.draw_image((int)(align*(dx-img._width)), > (int)(align*(dy-img._height)), > (int)(align*(dz-img._depth)), > pos, > img); > pos+=img._spectrum; > } > } > } > return res; > } > > > > > > > CImgList<T>& split(const char axis, const int nb=0) { > return get_split(axis,nb).move_to(*this); > } > > > CImgList<T> get_split(const char axis, const int nb=0) const { > CImgList<T> res; > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].get_split(axis,nb).move_to(res,~0U); > return res; > } > > > > > > template<typename t> > CImgList<T>& push_back(const CImg<t>& img) { > return insert(img); > } > > > > > > template<typename t> > CImgList<T>& push_front(const CImg<t>& img) { > return insert(img,0); > } > > > > > > template<typename t> > CImgList<T>& push_back(const CImgList<t>& list) { > return insert(list); > } > > > > > > template<typename t> > CImgList<T>& push_front(const CImgList<t>& list) { > return insert(list,0); > } > > > > > CImgList<T>& pop_back() { > return remove(_width-1); > } > > > > > CImgList<T>& pop_front() { > return remove(0); > } > > > > > > CImgList<T>& erase(const iterator iter) { > return remove(iter-_data); > } ># 44790 "./CImg.h" > CImg<intT> get_select(CImgDisplay &disp, const bool feature_type=true, > const char axis='x', const float align=0) const { > return _get_select(disp,0,feature_type,axis,align,0,false,false,false); > } ># 44803 "./CImg.h" > CImg<intT> get_select(const char *const title, const bool feature_type=true, > const char axis='x', const float align=0) const { > CImgDisplay disp; > return _get_select(disp,title,feature_type,axis,align,0,false,false,false); > } > > CImg<intT> _get_select(CImgDisplay &disp, const char *const title, const bool feature_type, > const char axis, const float align, > const unsigned int orig, const bool resize_disp, > const bool exit_on_rightbutton, const bool exit_on_wheel) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "select(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > > CImgList<uintT> _indices; > unsigned int max_width = 0, max_height = 0, sum_width = 0, sum_height = 0; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > const unsigned int > w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), > h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); > if (w>max_width) max_width = w; > if (h>max_height) max_height = h; > sum_width+=w; sum_height+=h; > if (axis=='x') CImg<uintT>(w,1,1,1,(unsigned int)l).move_to(_indices); > else CImg<uintT>(h,1,1,1,(unsigned int)l).move_to(_indices); > } > const CImg<uintT> indices0 = _indices>'x'; > > > if (!disp) { > if (axis=='x') disp.assign(CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,false),CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,true),title?title:0,1); > else disp.assign(CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,false),CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,true),title?title:0,1); > if (!title) disp.set_title("CImgList<%s> (%u)",pixel_type(),_width); > } else if (title) disp.set_title("%s",title); > if (resize_disp) { > if (axis=='x') disp.resize(CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,false),CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,true),false); > else disp.resize(CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,false),CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,true),false); > } > > const unsigned int old_normalization = disp.normalization(); > bool old_is_resized = disp.is_resized(); > disp._normalization = 0; > disp.show().set_key(0); > const unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; > > > CImg<ucharT> visu0, visu; > CImg<uintT> indices; > CImg<intT> positions(_width,4,1,1,-1); > int oindice0 = -1, oindice1 = -1, indice0 = -1, indice1 = -1; > bool is_clicked = false, is_selected = false, text_down = false, update_display = true; > unsigned int key = 0; > while (!is_selected && !disp.is_closed() && !key) { > > > if (!visu0) { > visu0.assign(disp._width,disp._height,1,3,0); visu.assign(); > (indices0.get_resize(axis=='x'?visu0._width:visu0._height,1)).move_to(indices); > unsigned int ind = 0; > if (axis=='x') for (unsigned int x = 0; x<visu0._width; ) { > const unsigned int x0 = x; > ind = indices[x]; > while (x<indices._width && indices[x++]==ind) {} > const CImg<T> > onexone(1,1,1,1,0), > &src = _data[ind]?_data[ind]:onexone; > CImg<ucharT> res; > src.__get_select(disp,old_normalization,(src._width-1)/2,(src._height-1)/2,(src._depth-1)/2).move_to(res); > const unsigned int h = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,true); > res.resize(x - x0,cimg::max(32U,h*disp._height/max_height),1,res._spectrum==1?3:-100); > positions(ind,0) = positions(ind,2) = (int)x0; > positions(ind,1) = positions(ind,3) = (int)(align*(visu0.height()-res.height())); > positions(ind,2)+=res._width; > positions(ind,3)+=res._height - 1; > visu0.draw_image(positions(ind,0),positions(ind,1),res); > } else for (unsigned int y = 0; y<visu0._height; ) { > const unsigned int y0 = y; > ind = indices[y]; > while (y<visu0._height && indices[++y]==ind) {} > const CImg<T> > &src = _data[ind], > _img2d = src._depth>1?src.get_projections2d((src._width-1)/2,(src._height-1)/2,(src._depth-1)/2):CImg<T>(), > &img2d = _img2d?_img2d:src; > CImg<ucharT> res = old_normalization==1 || (old_normalization==3 && cimg::type<T>::string()!=cimg::type<unsigned char>::string())? > CImg<ucharT>(img2d.get_normalize(0,255)): > CImg<ucharT>(img2d); > if (res._spectrum>3) res.channels(0,2); > const unsigned int w = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,false); > res.resize(cimg::max(32U,w*disp._width/max_width),y - y0,1,res._spectrum==1?3:-100); > positions(ind,0) = positions(ind,2) = (int)(align*(visu0.width()-res.width())); > positions(ind,1) = positions(ind,3) = (int)y0; > positions(ind,2)+=res._width - 1; > positions(ind,3)+=res._height; > visu0.draw_image(positions(ind,0),positions(ind,1),res); > } > if (axis=='x') --positions(ind,2); else --positions(ind,3); > update_display = true; > } > > if (!visu || oindice0!=indice0 || oindice1!=indice1) { > if (indice0>=0 && indice1>=0) { > visu.assign(visu0,false); > const int indm = cimg::min(indice0,indice1), indM = cimg::max(indice0,indice1); > for (int ind = indm; ind<=indM; ++ind) if (positions(ind,0)>=0) { > visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3),background_color,0.2f); > if ((axis=='x' && positions(ind,2) - positions(ind,0)>=8) || > (axis!='x' && positions(ind,3) - positions(ind,1)>=8)) > visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3),foreground_color,0.9f,0xAAAAAAAA); > } > const int yt = (int)text_down?visu.height()-13:0; > if (is_clicked) visu.draw_text(0,yt," Images #%u - #%u, Size = %u",foreground_color,background_color,0.7f,13, > orig + indm,orig + indM,indM - indm + 1); > else visu.draw_text(0,yt," Image #%u (%u,%u,%u,%u)",foreground_color,background_color,0.7f,13, > orig + indice0, > _data[orig+indice0]._width, > _data[orig+indice0]._height, > _data[orig+indice0]._depth, > _data[orig+indice0]._spectrum); > update_display = true; > } else visu.assign(); > } > if (!visu) { visu.assign(visu0,true); update_display = true; } > if (update_display) { visu.display(disp); update_display = false; } > disp.wait(); > > > const int xm = disp.mouse_x(), ym = disp.mouse_y(); > int indice = -1; > > if (xm>=0) { > indice = (int)indices(axis=='x'?xm:ym); > if (disp.button()&1) { > if (!is_clicked) { is_clicked = true; oindice0 = indice0; indice0 = indice; } > oindice1 = indice1; indice1 = indice; > if (!feature_type) is_selected = true; > } else { > if (!is_clicked) { oindice0 = oindice1 = indice0; indice0 = indice1 = indice; } > else is_selected = true; > } > } else { > if (is_clicked) { > if (!(disp.button()&1)) { is_clicked = is_selected = false; indice0 = indice1 = -1; } > else indice1 = -1; > } else indice0 = indice1 = -1; > } > > if (disp.button()&4) { is_clicked = is_selected = false; indice0 = indice1 = -1; } > if (disp.button()&2 && exit_on_rightbutton) { is_selected = true; indice1 = indice0 = -1; } > if (disp.wheel() && exit_on_wheel) is_selected = true; > > switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : > > case 0 : case cimg::keyCTRLLEFT : key = 0; break; > case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). > _is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(axis=='x'?sum_width:max_width,axis=='x'?max_height:sum_height,1,128,-85,false),CImgDisplay::_fitscreen(axis=='x'?sum_width:max_width,axis=='x'?max_height:sum_height,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"CImg" "_%.4u.bmp",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > if (visu0) { > (+visu0).draw_text(0,0," Saving snapshot... ",foreground_color,background_color,0.7f,13).display(disp); > visu0.save(filename); > (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); > } > disp.set_key(key,false).wait(); key = 0; > } break; > case cimg::keyO : > if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > > > > snprintf(filename,sizeof(filename),"CImg" "_%.4u.cimg",snap_number++); > > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu0).draw_text(0,0," Saving instance... ",foreground_color,background_color,0.7f,13).display(disp); > save(filename); > (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); > disp.set_key(key,false).wait(); key = 0; > } break; > } > if (disp.is_resized()) { disp.resize(false); visu0.assign(); } > if (ym>=0 && ym<13) { if (!text_down) { visu.assign(); text_down = true; }} > else if (ym>=visu.height()-13) { if(text_down) { visu.assign(); text_down = false; }} > } > CImg<intT> res(1,2,1,1,-1); > if (is_selected) { if (feature_type) res.fill(cimg::min(indice0,indice1),cimg::max(indice0,indice1)); else res.fill(indice0); } > if (!(disp.button()&2)) disp.set_button(); > disp._normalization = old_normalization; > disp._is_resized = old_is_resized; > disp.set_key(key); > return res; > } > > > > > > CImgList<T>& load(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { > char filename_local[1024] = { 0 }; > load(cimg::load_network_external(filename,filename_local)); > std::remove(filename_local); > return *this; > } > > const char *const ext = cimg::split_filename(filename); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { ># 45074 "./CImg.h" > if (!cimg::strcasecmp(ext,"tif") || > !cimg::strcasecmp(ext,"tiff")) load_tiff(filename); > else if (!cimg::strcasecmp(ext,"gif")) load_gif_external(filename); > else if (!cimg::strcasecmp(ext,"cimg") || > !cimg::strcasecmp(ext,"cimgz") || > !*ext) load_cimg(filename); > else if (!cimg::strcasecmp(ext,"rec") || > !cimg::strcasecmp(ext,"par")) load_parrec(filename); > else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) load_ffmpeg(filename); > else if (!cimg::strcasecmp(ext,"gz")) load_gzip_external(filename); > else throw CImgIOException("CImgList<%s>::load()", > pixel_type()); > } catch (CImgIOException&) { > try { > cimg::fclose(cimg::fopen(filename,"rb")); > } catch (CImgIOException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load(): Failed to open file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > } > assign(1); > try { > _data->load(filename); > } catch (CImgIOException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load(): Failed to recognize format of file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > } > } > cimg::exception_mode() = omode; > return *this; > } > > > static CImgList<T> get_load(const char *const filename) { > return CImgList<T>().load(filename); > } > > > > > > CImgList<T>& load_cimg(const char *const filename) { > return _load_cimg(0,filename); > } > > > static CImgList<T> get_load_cimg(const char *const filename) { > return CImgList<T>().load_cimg(filename); > } > > > > > > CImgList<T>& load_cimg(std::FILE *const file) { > return _load_cimg(file,0); > } > > > static CImgList<T> get_load_cimg(std::FILE *const file) { > return CImgList<T>().load_cimg(file); > } > > CImgList<T>& _load_cimg(std::FILE *const file, const char *const filename) { ># 45213 "./CImg.h" > if (!filename && !file) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > const int cimg_iobuffer = 12*1024*1024; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > bool loaded = false, endian = cimg::endianness(); > char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; > unsigned int j, err, N = 0, W, H, D, C, csiz; > int i; > do { > j = 0; while ((i=std::fgetc(nfile))!='\n' && i!=(-1) && j<256) tmp[j++] = (char)i; tmp[j] = 0; > } while (*tmp=='#' && i!=(-1)); > err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); > if (err<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): CImg header not found in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > } > if (!cimg::strncasecmp("little",str_endian,6)) endian = false; > else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; > assign(N); > if (!loaded && !cimg::strcasecmp("bool",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<bool> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const bool *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_char",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned char> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned char *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("uchar",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned char> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned char *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("char",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<char> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const char *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_short",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned short> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned short *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("ushort",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned short> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned short *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("short",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<short> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const short *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_int",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned int> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned int *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("uint",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned int> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned int *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("int",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<int> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const int *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_long",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned long> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned long *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("ulong",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned long> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned long *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("long",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<long> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const long *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("float",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<float> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const float *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("double",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<double> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", _width,_allocated_width,_data,pixel_type(), filename?filename:"(FILE*)"); else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const double *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Unsupported pixel type '%s' for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > str_pixeltype,filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 45278 "./CImg.h" > CImgList<T>& load_cimg(const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { > return _load_cimg(0,filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > } > > > static CImgList<T> get_load_cimg(const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { > return CImgList<T>().load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > } > > > CImgList<T>& load_cimg(std::FILE *const file, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { > return _load_cimg(file,0,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > } > > > static CImgList<T> get_load_cimg(std::FILE *const file, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { > return CImgList<T>().load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > } > > CImgList<T>& _load_cimg(std::FILE *const file, const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { ># 45373 "./CImg.h" > if (!filename && !file) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > unsigned int > nn0 = cimg::min(n0,n1), nn1 = cimg::max(n0,n1), > nx0 = cimg::min(x0,x1), nx1 = cimg::max(x0,x1), > ny0 = cimg::min(y0,y1), ny1 = cimg::max(y0,y1), > nz0 = cimg::min(z0,z1), nz1 = cimg::max(z0,z1), > nc0 = cimg::min(c0,c1), nc1 = cimg::max(c0,c1); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > bool loaded = false, endian = cimg::endianness(); > char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; > unsigned int j, err, N, W, H, D, C; > int i; > j = 0; while((i=std::fgetc(nfile))!='\n' && i!=(-1) && j<256) tmp[j++] = (char)i; tmp[j] = 0; > err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); > if (err<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): CImg header not found in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > } > if (!cimg::strncasecmp("little",str_endian,6)) endian = false; > else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; > nn1 = n1==~0U?N-1:n1; > if (nn1>=N) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " > "because file '%s' contains only %u images.", > _width,_allocated_width,_data,pixel_type(), > n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,filename?filename:"(FILE*)",N); > assign(1+nn1-n0); > if (!loaded && !cimg::strcasecmp("bool",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(bool),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<bool> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(bool); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(bool); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(bool); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(bool); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const bool *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(bool); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(bool); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(bool); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(bool); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_char",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned char),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned char> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned char); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned char *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned char); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("uchar",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned char),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned char> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned char); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned char *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned char); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("char",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(char),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<char> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(char); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const char *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(char); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_short",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned short),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned short> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned short); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned short *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned short); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("ushort",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned short),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned short> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned short); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned short *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned short); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("short",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(short),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<short> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(short); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const short *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(short); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_int",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned int),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned int> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned int); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned int *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned int); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("uint",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned int),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned int> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned int); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned int *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned int); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("int",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(int),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<int> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(int); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const int *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(int); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_long",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned long),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned long> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned long); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned long *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned long); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("ulong",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned long),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned long> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned long); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned long *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned long); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("long",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(long),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<long> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(long); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const long *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(long); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("float",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(float),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<float> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(float); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(float); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(float); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(float); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const float *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(float); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(float); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(float); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(float); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("double",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(double),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<double> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(double); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(double); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(double); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(double); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const double *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(double); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(double); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(double); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(double); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Unsupported pixel type '%s' for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > str_pixeltype,filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImgList<T>& load_parrec(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_parrec(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > char body[1024] = { 0 }, filenamepar[1024] = { 0 }, filenamerec[1024] = { 0 }; > const char *const ext = cimg::split_filename(filename,body); > if (!std::strcmp(ext,"par")) { std::strncpy(filenamepar,filename,sizeof(filenamepar)-1); snprintf(filenamerec,sizeof(filenamerec),"%s.rec",body); } > if (!std::strcmp(ext,"PAR")) { std::strncpy(filenamepar,filename,sizeof(filenamepar)-1); snprintf(filenamerec,sizeof(filenamerec),"%s.REC",body); } > if (!std::strcmp(ext,"rec")) { std::strncpy(filenamerec,filename,sizeof(filenamerec)-1); snprintf(filenamepar,sizeof(filenamepar),"%s.par",body); } > if (!std::strcmp(ext,"REC")) { std::strncpy(filenamerec,filename,sizeof(filenamerec)-1); snprintf(filenamepar,sizeof(filenamepar),"%s.PAR",body); } > std::FILE *file = cimg::fopen(filenamepar,"r"); > > > CImgList<floatT> st_slices; > CImgList<uintT> st_global; > int err; > char line[256] = { 0 }; > do { err=std::fscanf(file,"%255[^\n]%*c",line); } while (err!=(-1) && (*line=='#' || *line=='.')); > do { > unsigned int sn,size_x,size_y,pixsize; > float rs,ri,ss; > err = std::fscanf(file,"%u%*u%*u%*u%*u%*u%*u%u%*u%u%u%g%g%g%*[^\n]",&sn,&pixsize,&size_x,&size_y,&ri,&rs,&ss); > if (err==7) { > CImg<floatT>::vector((float)sn,(float)pixsize,(float)size_x,(float)size_y,ri,rs,ss,0).move_to(st_slices); > unsigned int i; for (i = 0; i<st_global._width && sn<=st_global[i][2]; ++i) {} > if (i==st_global._width) CImg<uintT>::vector(size_x,size_y,sn).move_to(st_global); > else { > CImg<uintT> &vec = st_global[i]; > if (size_x>vec[0]) vec[0] = size_x; > if (size_y>vec[1]) vec[1] = size_y; > vec[2] = sn; > } > st_slices[st_slices._width-1][7] = (float)i; > } > } while (err==7); > > > std::FILE *file2 = cimg::fopen(filenamerec,"rb"); > for (int l = 0; l<(int)(st_global)._width; ++l) { > const CImg<uintT>& vec = st_global[l]; > CImg<T>(vec[0],vec[1],vec[2]).move_to(*this); > } > > for (int l = 0; l<(int)(st_slices)._width; ++l) { > const CImg<floatT>& vec = st_slices[l]; > const unsigned int > sn = (unsigned int)vec[0] - 1, > pixsize = (unsigned int)vec[1], > size_x = (unsigned int)vec[2], > size_y = (unsigned int)vec[3], > imn = (unsigned int)vec[7]; > const float ri = vec[4], rs = vec[5], ss = vec[6]; > switch (pixsize) { > case 8 : { > CImg<ucharT> buf(size_x,size_y); > cimg::fread(buf._data,size_x*size_y,file2); > if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); > CImg<T>& img = (*this)[imn]; > for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); > } break; > case 16 : { > CImg<ushortT> buf(size_x,size_y); > cimg::fread(buf._data,size_x*size_y,file2); > if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); > CImg<T>& img = (*this)[imn]; > for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); > } break; > case 32 : { > CImg<uintT> buf(size_x,size_y); > cimg::fread(buf._data,size_x*size_y,file2); > if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); > CImg<T>& img = (*this)[imn]; > for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); > } break; > default : > cimg::fclose(file); > cimg::fclose(file2); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_parrec(): Unsupported %d-bits pixel type for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > pixsize,filename); > } > } > cimg::fclose(file); > cimg::fclose(file2); > if (!_width) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_parrec(): Failed to recognize valid PAR-REC data in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > return *this; > } > > > static CImgList<T> get_load_parrec(const char *const filename) { > return CImgList<T>().load_parrec(filename); > } ># 45548 "./CImg.h" > CImgList<T>& load_yuv(const char *const filename, > const unsigned int size_x, const unsigned int size_y, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true) { > return _load_yuv(0,filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); > } > > > static CImgList<T> get_load_yuv(const char *const filename, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true) { > return CImgList<T>().load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); > } > > > CImgList<T>& load_yuv(std::FILE *const file, > const unsigned int size_x, const unsigned int size_y, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true) { > return _load_yuv(file,0,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); > } > > > static CImgList<T> get_load_yuv(std::FILE *const file, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true) { > return CImgList<T>().load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); > } > > CImgList<T>& _load_yuv(std::FILE *const file, const char *const filename, > const unsigned int size_x, const unsigned int size_y, > const unsigned int first_frame, const unsigned int last_frame, > const unsigned int step_frame, const bool yuv2rgb) { > if (!filename && !file) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (size_x%2 || size_y%2) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): Invalid odd XY dimensions %ux%u in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > size_x,size_y,filename?filename:"(FILE*)"); > if (!size_x || !size_y) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): Invalid sequence size (%u,%u) in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > size_x,size_y,filename?filename:"(FILE*)"); > > const unsigned int > nfirst_frame = first_frame<last_frame?first_frame:last_frame, > nlast_frame = first_frame<last_frame?last_frame:first_frame, > nstep_frame = step_frame?step_frame:1; > > CImg<ucharT> tmp(size_x,size_y,1,3), UV(size_x/2,size_y/2,1,2); > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > bool stop_flag = false; > int err; > if (nfirst_frame) { > err = std::fseek(nfile,nfirst_frame*(size_x*size_y + size_x*size_y/2),1); > if (err) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): File '%s' doesn't contain frame number %u.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)",nfirst_frame); > } > } > unsigned int frame; > for (frame = nfirst_frame; !stop_flag && frame<=nlast_frame; frame+=nstep_frame) { > tmp.fill(0); > > err = (int)std::fread((void*)(tmp._data),1,(unsigned long)tmp._width*tmp._height,nfile); > if (err!=(int)(tmp._width*tmp._height)) { > stop_flag = true; > if (err>0) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): File '%s' contains incomplete data or given image dimensions (%u,%u) are incorrect.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)",size_x,size_y); > } else { > UV.fill(0); > > err = (int)std::fread((void*)(UV._data),1,(size_t)(UV.size()),nfile); > if (err!=(int)(UV.size())) { > stop_flag = true; > if (err>0) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): File '%s' contains incomplete data or given image dimensions (%u,%u) are incorrect.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)",size_x,size_y); > } else { > for (int y = 0; y<(int)((UV)._height); ++y) for (int x = 0; x<(int)((UV)._width); ++x) { > const int x2 = x*2, y2 = y*2; > tmp(x2,y2,1) = tmp(x2+1,y2,1) = tmp(x2,y2+1,1) = tmp(x2+1,y2+1,1) = UV(x,y,0); > tmp(x2,y2,2) = tmp(x2+1,y2,2) = tmp(x2,y2+1,2) = tmp(x2+1,y2+1,2) = UV(x,y,1); > } > if (yuv2rgb) tmp.YCbCrtoRGB(); > insert(tmp); > if (nstep_frame>1) std::fseek(nfile,(nstep_frame-1)*(size_x*size_y + size_x*size_y/2),1); > } > } > } > if (stop_flag && nlast_frame!=~0U && frame!=nlast_frame) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): Frame %d not reached since only %u frames were found in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > nlast_frame,frame-1,filename?filename:"(FILE*)"); > > if (!file) cimg::fclose(nfile); > return *this; > } ># 45673 "./CImg.h" > CImgList<T>& load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_ffmpeg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > const unsigned int > nfirst_frame = first_frame<last_frame?first_frame:last_frame, > nlast_frame = first_frame<last_frame?last_frame:first_frame, > nstep_frame = step_frame?step_frame:1; > assign(); > > > if ((nfirst_frame || nlast_frame!=~0U || nstep_frame>1) || (resume && (pixel_format || !pixel_format))) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_ffmpeg(): Unable to load sub-frames from file '%s' unless libffmpeg is enabled.", > _width,_allocated_width,_data,pixel_type(), > filename); > > return load_ffmpeg_external(filename); ># 45816 "./CImg.h" > return *this; > } > > > static CImgList<T> get_load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool pixel_format=true) { > return CImgList<T>().load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format); > } > > > > > > CImgList<T>& load_ffmpeg_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_ffmpeg_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; > std::FILE *file = 0; > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > snprintf(filetmp2,sizeof(filetmp2),"%s_000001.ppm",filetmp); > if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(filetmp2,sizeof(filetmp2),"%s_%%6d.ppm",filetmp); > > snprintf(command,sizeof(command),"%s -i \"%s\" \"%s\" >/dev/null 2>&1", > cimg::ffmpeg_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp2)._system_strescape().data()); > > > > > > > cimg::system(command,0); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > assign(); > unsigned int i = 1; > for (bool stop_flag = false; !stop_flag; ++i) { > snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u.ppm",filetmp,i); > CImg<T> img; > try { img.load_pnm(filetmp2); } > catch (CImgException&) { stop_flag = true; } > if (img) { img.move_to(*this); std::remove(filetmp2); } > } > cimg::exception_mode() = omode; > if (is_empty()) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_ffmpeg_external(): Failed to open file '%s' with external command 'ffmpeg'.", > _width,_allocated_width,_data,pixel_type(), > filename); > return *this; > } > > > static CImgList<T> get_load_ffmpeg_external(const char *const filename) { > return CImgList<T>().load_ffmpeg_external(filename); > } > > > > > > > CImgList<T>& load_gif_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_gif_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > if (!_load_gif_external(filename,false)) > if (!_load_gif_external(filename,true)) > try { assign(CImg<T>().load_other(filename)); } catch (CImgException&) { assign(); } > if (is_empty()) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_gif_external(): Failed to open file '%s'.", > _width,_allocated_width,_data,pixel_type(),filename); > return *this; > } > > CImgList<T>& _load_gif_external(const char *const filename, const bool use_graphicsmagick=false) { > char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; > std::FILE *file = 0; > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > if (use_graphicsmagick) snprintf(filetmp2,sizeof(filetmp2),"%s.png.0",filetmp); > else snprintf(filetmp2,sizeof(filetmp2),"%s-0.png",filetmp); > if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); > } while (file); > > if (use_graphicsmagick) snprintf(command,sizeof(command),"%s convert \"%s\" \"%s.png\" >/dev/null 2>&1", > cimg::graphicsmagick_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); > else snprintf(command,sizeof(command),"%s \"%s\" \"%s.png\" >/dev/null 2>&1", > cimg::imagemagick_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); ># 45929 "./CImg.h" > cimg::system(command,0); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > assign(); > > > snprintf(filetmp2,sizeof(filetmp2),"%s.png",filetmp); > CImg<T> img; > try { img.load_png(filetmp2); } > catch (CImgException&) { } > if (img) { img.move_to(*this); std::remove(filetmp2); } > else { > unsigned int i = 0; > for (bool stop_flag = false; !stop_flag; ++i) { > if (use_graphicsmagick) snprintf(filetmp2,sizeof(filetmp2),"%s.png.%u",filetmp,i); > else snprintf(filetmp2,sizeof(filetmp2),"%s-%u.png",filetmp,i); > CImg<T> img; > try { img.load_png(filetmp2); } > catch (CImgException&) { stop_flag = true; } > if (img) { img.move_to(*this); std::remove(filetmp2); } > } > } > cimg::exception_mode() = omode; > return *this; > } > > > static CImgList<T> get_load_gif_external(const char *const filename) { > return CImgList<T>().load_gif_external(filename); > } > > > > > > CImgList<T>& load_gzip_external(const char *const filename) { > if (!filename) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_gzip_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > const char > *ext = cimg::split_filename(filename,body), > *ext2 = cimg::split_filename(body,0); > std::FILE *file = 0; > do { > if (!cimg::strcasecmp(ext,"gz")) { > if (*ext2) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext2); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > } else { > if (*ext) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > } > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", > cimg::gunzip_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_gzip_external(): Failed to open file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > > } else cimg::fclose(file); > load(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImgList<T> get_load_gzip_external(const char *const filename) { > return CImgList<T>().load_gzip_external(filename); > } ># 46015 "./CImg.h" > template<typename tf, typename tc> > CImgList<T>& load_off(const char *const filename, > CImgList<tf>& primitives, CImgList<tc>& colors) { > return get_load_off(filename,primitives,colors).move_to(*this); > } > > > template<typename tf, typename tc> > static CImgList<T> get_load_off(const char *const filename, > CImgList<tf>& primitives, CImgList<tc>& colors) { > return CImg<T>().load_off(filename,primitives,colors)<'x'; > } ># 46035 "./CImg.h" > CImgList<T>& load_tiff(const char *const filename, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1) { > const unsigned int > nfirst_frame = first_frame<last_frame?first_frame:last_frame, > nstep_frame = step_frame?step_frame:1; > unsigned int nlast_frame = first_frame<last_frame?last_frame:first_frame; > > if (nfirst_frame || nlast_frame!=~0U || nstep_frame!=1) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_tiff(): Unable to load sub-images from file '%s' unless libtiff is enabled.", > _width,_allocated_width,_data,pixel_type(), > filename); > > return assign(CImg<T>::get_load_tiff(filename)); ># 46077 "./CImg.h" > } > > > static CImgList<T> get_load_tiff(const char *const filename, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1) { > return CImgList<T>().load_tiff(filename,first_frame,last_frame,step_frame); > } ># 46098 "./CImg.h" > const CImgList<T>& print(const char *const title=0, const bool display_stats=true) const { > unsigned int msiz = 0; > for (int l = 0; l<(int)(*this)._width; ++l) msiz+=_data[l].size(); > msiz*=sizeof(T); > const unsigned int mdisp = msiz<8*1024?0:(msiz<8*1024*1024?1:2); > char _title[64] = { 0 }; > if (!title) snprintf(_title,sizeof(_title),"CImgList<%s>",pixel_type()); > std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = %u/%u [%u %s], %sdata%s = (CImg<%s>*)%p", > cimg::t_magenta,cimg::t_bold,title?title:_title,cimg::t_normal, > cimg::t_bold,cimg::t_normal,(void*)this, > cimg::t_bold,cimg::t_normal,_width,_allocated_width, > mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), > mdisp==0?"b":(mdisp==1?"Kio":"Mio"), > cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); > if (_data) std::fprintf(cimg::output(),"..%p.\n",(void*)((char*)end()-1)); > else std::fprintf(cimg::output(),".\n"); > > char tmp[16] = { 0 }; > for (int ll = 0; ll<(int)(*this)._width; ++ll) { > snprintf(tmp,sizeof(tmp),"[%d]",ll); > std::fprintf(cimg::output()," "); > _data[ll].print(tmp,display_stats); > if (ll==3 && _width>8) { ll = _width-5; std::fprintf(cimg::output()," ...\n"); } > } > std::fflush(cimg::output()); > return *this; > } ># 46135 "./CImg.h" > const CImgList<T>& display(CImgDisplay &disp, const char axis='x', const float align=0) const { > disp.display(*this,axis,align); > return *this; > } ># 46150 "./CImg.h" > const CImgList<T>& display(CImgDisplay &disp, const bool display_info, > const char axis='x', const float align=0, > unsigned int *const XYZ=0) const { > bool is_exit = false; > return _display(disp,0,display_info,axis,align,XYZ,0,true,is_exit); > } ># 46164 "./CImg.h" > const CImgList<T>& display(const char *const title=0, const bool display_info=true, > const char axis='x', const float align=0, > unsigned int *const XYZ=0) const { > CImgDisplay disp; > bool is_exit = false; > return _display(disp,title,display_info,axis,align,XYZ,0,true,is_exit); > } > > const CImgList<T>& _display(CImgDisplay &disp, const char *const title, const bool display_info, > const char axis, const float align, unsigned int *const XYZ, > const unsigned int orig, const bool is_first_call, bool &is_exit) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "display(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > if (!disp) { > if (axis=='x') { > unsigned int sum_width = 0, max_height = 0; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T> &img = _data[l]; > const unsigned int > w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), > h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); > sum_width+=w; > if (h>max_height) max_height = h; > } > disp.assign(CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,false),CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,true),title?title:0,1); > } else { > unsigned int max_width = 0, sum_height = 0; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T> &img = _data[l]; > const unsigned int > w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), > h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); > if (w>max_width) max_width = w; > sum_height+=h; > } > disp.assign(CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,false),CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,true),title?title:0,1); > } > if (!title) disp.set_title("CImgList<%s> (%u)",pixel_type(),_width); > } else if (title) disp.set_title("%s",title); > const CImg<char> dtitle = CImg<char>::string(disp.title()); > if (display_info) print(disp.title()); > disp.show().flush(); > > if (_width==1) { > const unsigned int dw = disp._width, dh = disp._height; > if (!is_first_call) > disp.resize(CImgDisplay::_fitscreen(_data[0]._width,_data[0]._height,_data[0]._depth,128,-85,false),CImgDisplay::_fitscreen(_data[0]._width,_data[0]._height,_data[0]._depth,128,-85,true),false). > set_title("%s (%ux%ux%ux%u)",dtitle.data(),_data[0]._width,_data[0]._height,_data[0]._depth,_data[0]._spectrum); > _data[0]._display(disp,0,false,XYZ,!is_first_call); > if (disp.key()) is_exit = true; > disp.resize(CImgDisplay::_fitscreen(dw,dh,1,128,-85,false),CImgDisplay::_fitscreen(dw,dh,1,128,-85,true),false).set_title("%s",dtitle.data()); > } else { > bool disp_resize = !is_first_call; > while (!disp.is_closed() && !is_exit) { > const CImg<intT> s = _get_select(disp,0,true,axis,align,orig,disp_resize,!is_first_call,true); > disp_resize = true; > if (s[0]<0) { > if (disp.button()&2) { disp.flush(); break; } > is_exit = true; > } else if (disp.wheel()) { > const int wheel = disp.wheel(); > disp.set_wheel(); > if (!is_first_call && wheel<0) break; > if (wheel>0 && _width>=4) { > const unsigned int > delta = cimg::max(1U,(unsigned int)cimg::round(0.3*_width)), > ind0 = (unsigned int)cimg::max(0,s[0] - (int)delta), > ind1 = (unsigned int)cimg::min(width() - 1,s[0] + (int)delta); > if ((ind0!=0 || ind1!=_width-1) && ind1 - ind0>=3) get_shared_images(ind0,ind1)._display(disp,0,false,axis,align,XYZ,orig + ind0,false,is_exit); > } > } else if (s[0]!=0 || s[1]!=width()-1) get_shared_images(s[0],s[1])._display(disp,0,false,axis,align,XYZ,orig+s[0],false,is_exit); > } > } > return *this; > } > > > > > > > > const CImgList<T>& save(const char *const filename, const int number=-1, const unsigned int digits=6) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > const bool is_stdout = *filename=='-' && (!filename[1] || filename[1]=='.'); > const char *const ext = cimg::split_filename(filename); > char nfilename[1024] = { 0 }; > const char *const fn = is_stdout?filename:number>=0?cimg::number_filename(filename,number,digits,nfilename):filename; ># 46286 "./CImg.h" > if (!cimg::strcasecmp(ext,"cimgz")) return save_cimg(fn,true); > else if (!cimg::strcasecmp(ext,"cimg") || !*ext) return save_cimg(fn,false); > else if (!cimg::strcasecmp(ext,"yuv")) return save_yuv(fn,true); > else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) return save_ffmpeg(fn); > > > > > else if (!cimg::strcasecmp(ext,"gz")) return save_gzip_external(fn); > else { > if (_width==1) _data[0].save(fn,-1); > else for (int l = 0; l<(int)(*this)._width; ++l) { _data[l].save(fn,is_stdout?-1:l); std::fputc((-1),stdout); } > } > return *this; > } > > > > > > > static bool is_saveable(const char *const filename) { > const char *const ext = cimg::split_filename(filename); > if (!cimg::strcasecmp(ext,"cimgz") || > > > > > !cimg::strcasecmp(ext,"yuv") || > !cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) return true; > return false; > } > > > > > > > > const CImgList<T>& save_gif_external(const char *const filename, const unsigned int fps=25, const unsigned int nb_loops=0) { > char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; > CImgList<charT> filenames; > std::FILE *file = 0; > > > > > > > > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > snprintf(filetmp2,sizeof(filetmp2),"%s_000001." "ppm",filetmp); > if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); > } while (file); > for (int l = 0; l<(int)(*this)._width; ++l) { > snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u." "ppm",filetmp,l+1); > CImg<charT>::string(filetmp2).move_to(filenames); > if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save(filetmp2); > else _data[l].save(filetmp2); > } > > > snprintf(command,sizeof(command),"%s -delay 1x%u -loop %u", > cimg::imagemagick_path(),fps,nb_loops); > CImg<ucharT>::string(command).move_to(filenames,0); > snprintf(command,sizeof(command),"\"%s\" >/dev/null 2>&1", > CImg<charT>::string(filename)._system_strescape().data()); > CImg<ucharT>::string(command).move_to(filenames); ># 46407 "./CImg.h" > CImg<charT> _command = filenames>'x'; > for (char *p = (_command)._data, *_maxp = (_command)._data + (_command).size(); p<_maxp; ++p) if (!*p) *p = ' '; > _command.back() = 0; > > cimg::system(_command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_gif_external(): Failed to save file '%s' with external command 'convert'.", > _width,_allocated_width,_data,pixel_type(), > filename); > else cimg::fclose(file); > for (int l = (int)(1)<0?0:(int)(1), _maxl = (unsigned int)filenames._width-1<(*this)._width?(int)(filenames._width-1):(int)(*this)._width-1; l<=_maxl; ++l) std::remove(filenames[l]); > return *this; > } ># 46430 "./CImg.h" > const CImgList<T>& save_ffmpeg(const char *const filename, const unsigned int fps=25, const unsigned int bitrate=2048) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (!fps) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg(): Invalid specified framerate 0, for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > for (int l = 0; l<(int)(*this)._width; ++l) if (!_data[l].is_sameXYZ(_data[0])) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg(): Invalid instance dimensions, for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > > > return save_ffmpeg_external(filename,0,fps,bitrate); ># 46720 "./CImg.h" > return *this; > } > > const CImgList<T>& _save_yuv(std::FILE *const file, const char *const filename, const bool is_rgb) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_yuv(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if ((*this)[0].width()%2 || (*this)[0].height()%2) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_yuv(): Invalid odd instance dimensions (%u,%u) for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > (*this)[0].width(),(*this)[0].height(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > for (int l = 0; l<(int)(*this)._width; ++l) { > CImg<ucharT> YCbCr((*this)[l]); > if (is_rgb) YCbCr.RGBtoYCbCr(); > cimg::fwrite(YCbCr._data,(unsigned long)YCbCr._width*YCbCr._height,nfile); > cimg::fwrite(YCbCr.get_resize(YCbCr._width/2, YCbCr._height/2,1,3,3).data(0,0,0,1), > (unsigned long)YCbCr._width*YCbCr._height/2,nfile); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > const CImgList<T>& save_yuv(const char *const filename=0, const bool is_rgb=true) const { > return _save_yuv(0,filename,is_rgb); > } > > > > > > > const CImgList<T>& save_yuv(std::FILE *const file, const bool is_rgb=true) const { > return _save_yuv(file,0,is_rgb); > } > > const CImgList<T>& _save_cimg(std::FILE *const file, const char *const filename, const bool is_compressed) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > if (is_compressed) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Unable to save compressed data in file '%s' unless zlib is enabled, saving them uncompressed.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const char *const ptype = pixel_type(), *const etype = cimg::endianness()?"big":"little"; > if (std::strstr(ptype,"unsigned")==ptype) std::fprintf(nfile,"%u unsigned_%s %s_endian\n",_width,ptype+9,etype); > else std::fprintf(nfile,"%u %s %s_endian\n",_width,ptype,etype); > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > std::fprintf(nfile,"%u %u %u %u",img._width,img._height,img._depth,img._spectrum); > if (img._data) { > CImg<T> tmp; > if (cimg::endianness()) { tmp = img; cimg::invert_endianness(tmp._data,tmp.size()); } > const CImg<T>& ref = cimg::endianness()?tmp:img; > bool failed_to_compress = true; > if (is_compressed) { ># 46807 "./CImg.h" > } > if (failed_to_compress) { > std::fputc('\n',nfile); > cimg::fwrite(ref._data,ref.size(),nfile); > } > } else std::fputc('\n',nfile); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > const CImgList<T>& save_cimg(const char *const filename, const bool is_compressed=false) const { > return _save_cimg(0,filename,is_compressed); > } > > > > > > > const CImgList<T>& save_cimg(std::FILE *file, const bool is_compressed=false) const { > return _save_cimg(file,0,is_compressed); > } > > const CImgList<T>& _save_cimg(std::FILE *const file, const char *const filename, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { ># 46897 "./CImg.h" > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Empty instance, for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb+"); > bool saved = false, endian = cimg::endianness(); > char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; > unsigned int j, err, N, W, H, D, C; > int i; > j = 0; while((i=std::fgetc(nfile))!='\n' && i!=(-1) && j<256) tmp[j++] = (char)i; tmp[j] = 0; > err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); > if (err<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): CImg header not found in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > } > if (!cimg::strncasecmp("little",str_endian,6)) endian = false; > else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; > const unsigned int lmax = cimg::min(N,n0+_width); > if (!saved && !cimg::strcasecmp("bool",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(bool),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<bool> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(bool); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(bool); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(bool); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(bool); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(bool); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(bool); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(bool); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(bool); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("unsigned_char",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned char),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned char> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned char); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned char); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("uchar",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned char),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned char> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned char); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned char); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("char",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(char),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<char> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(char); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(char); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("unsigned_short",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned short),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned short> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned short); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned short); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("ushort",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned short),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned short> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned short); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned short); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("short",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(short),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<short> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(short); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(short); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("unsigned_int",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned int),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned int> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned int); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned int); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("uint",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned int),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned int> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned int); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned int); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("int",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(int),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<int> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(int); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(int); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("unsigned_long",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned long),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned long> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned long); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned long); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("ulong",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned long),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned long> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned long); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned long); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("long",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(long),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<long> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(long); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(long); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("float",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(float),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<float> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(float); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(float); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(float); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(float); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(float); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(float); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(float); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(float); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("double",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(double),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<double> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(double); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(double); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(double); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(double); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(double); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(double); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(double); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(double); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Unsupported data type '%s' for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)",str_pixeltype); > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 46959 "./CImg.h" > const CImgList<T>& save_cimg(const char *const filename, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { > return _save_cimg(0,filename,n0,x0,y0,z0,c0); > } ># 46975 "./CImg.h" > const CImgList<T>& save_cimg(std::FILE *const file, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { > return _save_cimg(file,0,n0,x0,y0,z0,c0); > } > > static void _save_empty_cimg(std::FILE *const file, const char *const filename, > const unsigned int nb, > const unsigned int dx, const unsigned int dy, > const unsigned int dz, const unsigned int dc) { > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const unsigned long siz = (unsigned long)dx*dy*dz*dc*sizeof(T); > std::fprintf(nfile,"%u %s\n",nb,pixel_type()); > for (unsigned int i=nb; i; --i) { > std::fprintf(nfile,"%u %u %u %u\n",dx,dy,dz,dc); > for (unsigned long off=siz; off; --off) std::fputc(0,nfile); > } > if (!file) cimg::fclose(nfile); > } ># 47005 "./CImg.h" > static void save_empty_cimg(const char *const filename, > const unsigned int nb, > const unsigned int dx, const unsigned int dy=1, > const unsigned int dz=1, const unsigned int dc=1) { > return _save_empty_cimg(0,filename,nb,dx,dy,dz,dc); > } ># 47021 "./CImg.h" > static void save_empty_cimg(std::FILE *const file, > const unsigned int nb, > const unsigned int dx, const unsigned int dy=1, > const unsigned int dz=1, const unsigned int dc=1) { > return _save_empty_cimg(file,0,nb,dx,dy,dz,dc); > } > > > > > > > const CImgList<T>& save_tiff(const char *const filename, const unsigned int compression_type=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_tiff(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > > if (_width==1) _data[0].save_tiff(filename,compression_type); > else for (int l = 0; l<(int)(*this)._width; ++l) { > char nfilename[1024] = { 0 }; > cimg::number_filename(filename,l,6,nfilename); > _data[l].save_tiff(nfilename,compression_type); > } ># 47064 "./CImg.h" > return *this; > } > > > > > > > const CImgList<T>& save_gzip_external(const char *const filename) const { > if (!filename) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_gzip_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > const char > *ext = cimg::split_filename(filename,body), > *ext2 = cimg::split_filename(body,0); > std::FILE *file; > do { > if (!cimg::strcasecmp(ext,"gz")) { > if (*ext2) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext2); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),'/',cimg::filenamerand()); > } else { > if (*ext) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),'/',cimg::filenamerand()); > } > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > > if (is_saveable(body)) { > save(filetmp); > snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", > cimg::gzip_path(), > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_gzip_external(): Failed to save file '%s' with external command 'gzip'.", > _width,_allocated_width,_data,pixel_type(), > filename); > else cimg::fclose(file); > std::remove(filetmp); > } else { > char nfilename[1024] = { 0 }; > for (int l = 0; l<(int)(*this)._width; ++l) { > cimg::number_filename(body,l,6,nfilename); > if (*ext) std::sprintf(nfilename + std::strlen(nfilename),".%s",ext); > _data[l].save_gzip_external(nfilename); > } > } > return *this; > } ># 47127 "./CImg.h" > const CImgList<T>& save_ffmpeg_external(const char *const filename, const char *const codec=0, > const unsigned int fps=25, const unsigned int bitrate=2048) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > const char > *const ext = cimg::split_filename(filename), > *const _codec = codec?codec:!cimg::strcasecmp(ext,"flv")?"flv":"mpeg2video"; > > char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; > CImgList<charT> filenames; > std::FILE *file = 0; > for (int l = 0; l<(int)(*this)._width; ++l) if (!_data[l].is_sameXYZ(_data[0])) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg_external(): Invalid instance dimensions for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > snprintf(filetmp2,sizeof(filetmp2),"%s_000001.ppm",filetmp); > if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); > } while (file); > for (int l = 0; l<(int)(*this)._width; ++l) { > snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u.ppm",filetmp,l+1); > CImg<charT>::string(filetmp2).move_to(filenames); > if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save_pnm(filetmp2); > else _data[l].save_pnm(filetmp2); > } > > snprintf(command,sizeof(command),"%s -i \"%s_%%6d.ppm\" -vcodec %s -b %uk -r %u -y \"%s\" >/dev/null 2>&1", > cimg::ffmpeg_path(), > CImg<charT>::string(filetmp)._system_strescape().data(), > _codec,bitrate,fps, > CImg<charT>::string(filename)._system_strescape().data()); > > > > > > > > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg_external(): Failed to save file '%s' with external command 'ffmpeg'.", > _width,_allocated_width,_data,pixel_type(), > filename); > else cimg::fclose(file); > for (int l = 0; l<(int)(*this)._width; ++l) std::remove(filenames[l]); > return *this; > } ># 47193 "./CImg.h" > CImgList<T>& crop_font() { > return get_crop_font().move_to(*this); > } > > > > > CImgList<T> get_crop_font() const { > CImgList<T> res; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& letter = (*this)[l]; > int xmin = letter._width, xmax = 0; > for (int y = 0; y<(int)((letter)._height); ++y) for (int x = 0; x<(int)((letter)._width); ++x) if (letter(x,y)) { if (x<xmin) xmin = x; if (x>xmax) xmax = x; } > if (xmin>xmax) CImg<T>(letter._width,letter._height,1,letter._spectrum,0).move_to(res); > else letter.get_crop(xmin,0,xmax,letter._height-1).move_to(res); > } > res[' '].resize(res['f']._width,-100,-100,-100,0); > if (' '+256<res.size()) res[' '+256].resize(res['f']._width,-100,-100,-100,0); > return res; > } > > > > > > > static const CImgList<ucharT>& font(const unsigned int font_height, const bool is_variable_width=true) { > if (!font_height) return CImgList<ucharT>::empty(); > cimg::mutex(11); > > > const char *data_fonts[] = { cimg::data_font12x13, cimg::data_font20x23, cimg::data_font47x53, 0 }; > const unsigned int data_widths[] = { 12,20,47,90 }, data_heights[] = { 13,23,53,103 }, data_Ms[] = { 86,79,57,47 }; > const unsigned int data_ind = font_height<=13?0:font_height<=23?1:font_height<=53?2:3; > static CImg<ucharT> base_fonts[4]; > CImg<ucharT> &base_font = base_fonts[data_ind]; > if (!base_font) { > const unsigned int w = data_widths[data_ind], h = data_heights[data_ind], M = data_Ms[data_ind]; > base_font.assign(256*w,h); > const char *data_font = data_fonts[data_ind]; > unsigned char *ptrd = base_font; > const unsigned char *const ptrde = base_font.end(); > > > CImg<char> data90x103; > if (!data_font) { > ((CImg<char>(cimg::_data_font90x103[0],(unsigned int)std::strlen(cimg::_data_font90x103[0]),1,1,1,true), > CImg<char>(cimg::_data_font90x103[1],(unsigned int)std::strlen(cimg::_data_font90x103[1])+1,1,1,1,true))>'x').move_to(data90x103); > data_font = data90x103.data(); > } > > > for (const char *ptrs = data_font; *ptrs; ++ptrs) { > const int c = *ptrs-M-32, v = c>=0?255:0, n = c>=0?c:-c; > if (ptrd+n<=ptrde) { std::memset(ptrd,v,n); ptrd+=n; } > else { std::memset(ptrd,v,ptrde-ptrd); break; } > } > } > > > static CImgList<ucharT> fonts[16]; > static bool is_variable_widths[16] = { 0 }; > unsigned int ind = ~0U; > for (int i = 0; i<16; ++i) > if (!fonts[i] || (is_variable_widths[i]==is_variable_width && font_height==fonts[i][0]._height)) { ind = i; break; } > if (ind==~0U) { > std::memmove(fonts,fonts+1,15*sizeof(CImgList<ucharT>)); > std::memmove(is_variable_widths,is_variable_widths+1,15*sizeof(bool)); > std::memset(fonts+(ind=15),0,sizeof(CImgList<ucharT>)); > } > CImgList<ucharT> &font = fonts[ind]; > > > if (!font) { > const unsigned int padding_x = font_height<33?1:font_height<53?2:font_height<103?3:4; > is_variable_widths[ind] = is_variable_width; > font = base_font.get_split('x',256); > if (font_height!=font[0]._height) > for (int l = 0; l<(int)(font)._width; ++l) > font[l].resize(cimg::max(1U,font[l]._width*font_height/font[l]._height),font_height,-100,-100, > font[0]._height>font_height?2:5); > if (is_variable_width) font.crop_font(); > for (int l = 0; l<(int)(font)._width; ++l) font[l].resize(font[l]._width + padding_x,-100,1,1,0,0,0.5); > font.insert(256,0); > for (int l = (int)(0)<0?0:(int)(0), _maxl = (unsigned int)255<(font)._width?(int)(255):(int)(font)._width-1; l<=_maxl; ++l) font[l].assign(font[l+256]._width,font[l+256]._height,1,3,1); > } > cimg::mutex(11,0); > return font; > } > > > > > > > CImgList<T>& FFT(const char axis, const bool invert=false) { > if (is_empty()) return *this; > if (_width==1) insert(1); > if (_width>2) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "FFT(): Instance has more than 2 images", > _width,_allocated_width,_data,pixel_type()); > > CImg<T>::FFT(_data[0],_data[1],axis,invert); > return *this; > } > > > CImgList<Tfloat> get_FFT(const char axis, const bool invert=false) const { > return CImgList<Tfloat>(*this,false).FFT(axis,invert); > } > > > > > > CImgList<T>& FFT(const bool invert=false) { > if (is_empty()) return *this; > if (_width==1) insert(1); > if (_width>2) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "FFT(): Instance has more than 2 images", > _width,_allocated_width,_data,pixel_type()); > > CImg<T>::FFT(_data[0],_data[1],invert); > return *this; > } > > > CImgList<Tfloat> get_FFT(const bool invert=false) const { > return CImgList<Tfloat>(*this,false).FFT(invert); > } > > > > > CImgList<T>& reverse_object3d() { > for (int l = 0; l<(int)(*this)._width; ++l) { > CImg<T>& p = _data[l]; > switch (p.size()) { > case 2: case 3: cimg::swap(p[0],p[1]); break; > case 6: cimg::swap(p[0],p[1],p[2],p[4],p[3],p[5]); break; > case 9: cimg::swap(p[0],p[1],p[3],p[5],p[4],p[6]); break; > case 4: cimg::swap(p[0],p[1],p[2],p[3]); break; > case 12: cimg::swap(p[0],p[1],p[2],p[3],p[4],p[6],p[5],p[7],p[8],p[10],p[9],p[11]); break; > } > } > return *this; > } > > > CImgList<T> get_reverse_object3d() const { > return (+*this).reverse_object3d(); > } > > > }; ># 47359 "./CImg.h" >namespace cimg { > > > inline unsigned long tictoc(const bool is_tic) { > cimg::mutex(2); > static CImg<unsigned long> times(64); > static unsigned int pos = 0; > const unsigned long t1 = cimg::time(); > if (is_tic) { > times[pos++] = t1; > if (pos>=times._width) > throw CImgArgumentException("cimg::tic(): Too much calls to 'cimg::tic()' without calls to 'cimg::toc()'."); > cimg::mutex(2,0); > return t1; > } > > if (!pos) > throw CImgArgumentException("cimg::toc(): No previous call to 'cimg::tic()' has been made."); > const unsigned long > t0 = times[--pos], > dt = t1>=t0?(t1-t0):cimg::type<unsigned long>::max(); > const unsigned int > edays = (unsigned int)(dt/86400000.0), > ehours = (unsigned int)((dt - edays*86400000.0)/3600000.0), > emin = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0)/60000.0), > esec = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0)/1000.0), > ems = (unsigned int)(dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0 - esec*1000.0); > if (!edays && !ehours && !emin && !esec) > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u ms%s\n",cimg::t_red,1+2*pos,"",ems,cimg::t_normal); > else { > if (!edays && !ehours && !emin) > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",esec,ems,cimg::t_normal); > else { > if (!edays && !ehours) > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",emin,esec,ems,cimg::t_normal); > else{ > if (!edays) > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u hours %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",ehours,emin,esec,ems,cimg::t_normal); > else{ > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u days %u hours %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",edays,ehours,emin,esec,ems,cimg::t_normal); > } > } > } > } > cimg::mutex(2,0); > return dt; > } ># 47425 "./CImg.h" > template<typename t> > inline int dialog(const char *const title, const char *const msg, > const char *const button1_label, const char *const button2_label, > const char *const button3_label, const char *const button4_label, > const char *const button5_label, const char *const button6_label, > const CImg<t>& logo, const bool is_centered = false) { > > cimg::unused(title,msg,button1_label,button2_label,button3_label,button4_label,button5_label,button6_label,logo._data,is_centered); > throw CImgIOException("cimg::dialog(): No display available."); ># 47565 "./CImg.h" > } > > > inline int dialog(const char *const title, const char *const msg, > const char *const button1_label, const char *const button2_label, const char *const button3_label, > const char *const button4_label, const char *const button5_label, const char *const button6_label, > const bool is_centered) { > return dialog(title,msg,button1_label,button2_label,button3_label,button4_label,button5_label,button6_label, > CImg<unsigned char>::_logo40x38(),is_centered); > } ># 47592 "./CImg.h" > inline double eval(const char *const expression, const double x, const double y, const double z, const double c) { > static const CImg<float> empty; > return empty.eval(expression,x,y,z,c); > } > > template<typename t> > inline CImg<typename cimg::superset<double,t>::type> eval(const char *const expression, const CImg<t>& xyzc) { > static const CImg<float> empty; > return empty.eval(expression,xyzc); > } > > >} > > >} > > >namespace cil = cimg_library; ># 71 "gmic.h" 2 > > > > > > ># 1 "/usr/include/c++/4.8.2/cerrno" 1 3 ># 39 "/usr/include/c++/4.8.2/cerrno" 3 ># 40 "/usr/include/c++/4.8.2/cerrno" 3 > ># 1 "/usr/include/errno.h" 1 3 4 ># 31 "/usr/include/errno.h" 3 4 >extern "C" { > > > ># 1 "/usr/include/bits/errno.h" 1 3 4 ># 24 "/usr/include/bits/errno.h" 3 4 ># 1 "/usr/include/linux/errno.h" 1 3 4 ># 1 "/usr/include/asm/errno.h" 1 3 4 ># 1 "/usr/include/asm-generic/errno.h" 1 3 4 > > > ># 1 "/usr/include/asm-generic/errno-base.h" 1 3 4 ># 5 "/usr/include/asm-generic/errno.h" 2 3 4 ># 1 "/usr/include/asm/errno.h" 2 3 4 ># 1 "/usr/include/linux/errno.h" 2 3 4 ># 25 "/usr/include/bits/errno.h" 2 3 4 ># 50 "/usr/include/bits/errno.h" 3 4 >extern int *__errno_location (void) throw () __attribute__ ((__const__)); ># 36 "/usr/include/errno.h" 2 3 4 ># 54 "/usr/include/errno.h" 3 4 >extern char *program_invocation_name, *program_invocation_short_name; > > > >} ># 68 "/usr/include/errno.h" 3 4 >typedef int error_t; ># 42 "/usr/include/c++/4.8.2/cerrno" 2 3 ># 78 "gmic.h" 2 ># 1 "/usr/include/sys/resource.h" 1 3 4 ># 24 "/usr/include/sys/resource.h" 3 4 ># 1 "/usr/include/bits/resource.h" 1 3 4 ># 31 "/usr/include/bits/resource.h" 3 4 >enum __rlimit_resource >{ > > RLIMIT_CPU = 0, > > > > RLIMIT_FSIZE = 1, > > > > RLIMIT_DATA = 2, > > > > RLIMIT_STACK = 3, > > > > RLIMIT_CORE = 4, > > > > > > > __RLIMIT_RSS = 5, > > > > RLIMIT_NOFILE = 7, > __RLIMIT_OFILE = RLIMIT_NOFILE, > > > > > RLIMIT_AS = 9, > > > > __RLIMIT_NPROC = 6, > > > > __RLIMIT_MEMLOCK = 8, > > > > __RLIMIT_LOCKS = 10, > > > > __RLIMIT_SIGPENDING = 11, > > > > __RLIMIT_MSGQUEUE = 12, > > > > > > __RLIMIT_NICE = 13, > > > > > __RLIMIT_RTPRIO = 14, > > > > > > __RLIMIT_RTTIME = 15, > > > __RLIMIT_NLIMITS = 16, > __RLIM_NLIMITS = __RLIMIT_NLIMITS > > >}; ># 131 "/usr/include/bits/resource.h" 3 4 >typedef __rlim_t rlim_t; > > > > >typedef __rlim64_t rlim64_t; > > >struct rlimit > { > > rlim_t rlim_cur; > > rlim_t rlim_max; > }; > > >struct rlimit64 > { > > rlim64_t rlim_cur; > > rlim64_t rlim_max; > }; > > > >enum __rusage_who >{ > > RUSAGE_SELF = 0, > > > > RUSAGE_CHILDREN = -1 > > > > , > > RUSAGE_THREAD = 1 > > > > >}; > > ># 1 "/usr/include/bits/time.h" 1 3 4 ># 180 "/usr/include/bits/resource.h" 2 3 4 > > > > > > > >struct rusage > { > > struct timeval ru_utime; > > struct timeval ru_stime; > > __extension__ union > { > long int ru_maxrss; > __syscall_slong_t __ru_maxrss_word; > }; > > > > __extension__ union > { > long int ru_ixrss; > __syscall_slong_t __ru_ixrss_word; > }; > > __extension__ union > { > long int ru_idrss; > __syscall_slong_t __ru_idrss_word; > }; > > __extension__ union > { > long int ru_isrss; > __syscall_slong_t __ru_isrss_word; > }; > > > __extension__ union > { > long int ru_minflt; > __syscall_slong_t __ru_minflt_word; > }; > > __extension__ union > { > long int ru_majflt; > __syscall_slong_t __ru_majflt_word; > }; > > __extension__ union > { > long int ru_nswap; > __syscall_slong_t __ru_nswap_word; > }; > > > __extension__ union > { > long int ru_inblock; > __syscall_slong_t __ru_inblock_word; > }; > > __extension__ union > { > long int ru_oublock; > __syscall_slong_t __ru_oublock_word; > }; > > __extension__ union > { > long int ru_msgsnd; > __syscall_slong_t __ru_msgsnd_word; > }; > > __extension__ union > { > long int ru_msgrcv; > __syscall_slong_t __ru_msgrcv_word; > }; > > __extension__ union > { > long int ru_nsignals; > __syscall_slong_t __ru_nsignals_word; > }; > > > > __extension__ union > { > long int ru_nvcsw; > __syscall_slong_t __ru_nvcsw_word; > }; > > > __extension__ union > { > long int ru_nivcsw; > __syscall_slong_t __ru_nivcsw_word; > }; > }; > > > > > > > >enum __priority_which >{ > PRIO_PROCESS = 0, > > PRIO_PGRP = 1, > > PRIO_USER = 2 > >}; > > >extern "C" { > > > > >extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource, > const struct rlimit *__new_limit, > struct rlimit *__old_limit) throw (); ># 322 "/usr/include/bits/resource.h" 3 4 >extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource, > const struct rlimit64 *__new_limit, > struct rlimit64 *__old_limit) throw (); > > > >} ># 25 "/usr/include/sys/resource.h" 2 3 4 > > > > > > >extern "C" { ># 42 "/usr/include/sys/resource.h" 3 4 >typedef int __rlimit_resource_t; >typedef int __rusage_who_t; >typedef int __priority_which_t; > > > > > >extern int getrlimit (__rlimit_resource_t __resource, > struct rlimit *__rlimits) throw (); ># 61 "/usr/include/sys/resource.h" 3 4 >extern int getrlimit64 (__rlimit_resource_t __resource, > struct rlimit64 *__rlimits) throw (); > > > > > > >extern int setrlimit (__rlimit_resource_t __resource, > const struct rlimit *__rlimits) throw (); ># 81 "/usr/include/sys/resource.h" 3 4 >extern int setrlimit64 (__rlimit_resource_t __resource, > const struct rlimit64 *__rlimits) throw (); > > > > >extern int getrusage (__rusage_who_t __who, struct rusage *__usage) throw (); > > > > > >extern int getpriority (__priority_which_t __which, id_t __who) throw (); > > > >extern int setpriority (__priority_which_t __which, id_t __who, int __prio) > throw (); > >} ># 79 "gmic.h" 2 >static struct gmic_increase_stack { > gmic_increase_stack() { > const rlim_t requested_stack_size = 16777216; > struct rlimit rl; > const int result = getrlimit(RLIMIT_STACK,&rl); > if (!result && rl.rlim_cur<requested_stack_size) { > rl.rlim_cur = requested_stack_size; > setrlimit(RLIMIT_STACK,&rl); > } > } >} _gmic_increase_stack; > > > >const char _dollar = 23, _lbrace = 24, _rbrace = 25, _comma = 26, _dquote = 28, _arobace = 29, > _newline = 30; > > >inline char *gmic_strreplace(char *const str) { > for (char *s = str ; *s; ++s) { > const char c = *s; > if (c<' ') > *s = c==_dollar?'$':c==_lbrace?'{':c==_rbrace?'}':c==_comma?',': > c==_dquote?'\"':c==_arobace?'@':c; > } > return str; >} ># 156 "gmic.h" >struct gmic_exception { > cimg_library::CImg<char> _command_help, _message; > > gmic_exception() {} > > gmic_exception(const char *const command, const char *const message) { > if (command) { > _command_help.assign(std::strlen(command)+1,1,1,1); > std::strcpy(_command_help._data,command); > } > if (message) { > _message.assign(std::strlen(message)+1,1,1,1); > std::strcpy(_message._data,message); > } > } > > const char *what() const { > return _message._data?_message._data:""; > } > const char *command_help() const { > return _command_help._data?_command_help._data:""; > } >}; > > > >struct gmic { ># 191 "gmic.h" > ~gmic(); > > > gmic(); > > gmic(const char *const commands_line, const char *const custom_commands=0, > const bool include_default_commands=true, float *const p_progress=0, int *const p_cancel=0); > > template<typename T> > gmic(const int argc, const char *const *const argv, cimg_library::CImgList<T>& images, > cimg_library::CImgList<char>& images_names, > const char *const custom_commands=0, const bool include_default_commands=true, > float *const p_progress=0, int *const p_cancel=0); > > template<typename T> > gmic(const char *const commands_line, cimg_library::CImgList<T>& images, cimg_library::CImgList<char>& images_names, > const char *const custom_commands=0, const bool include_default_commands=true, > float *const p_progress=0, int *const p_cancel=0); > > > template<typename T> > gmic& parse(const char *const commands_line, > cimg_library::CImgList<T> &images, cimg_library::CImgList<char> &images_names) { > return parse(commands_line_to_CImgList(commands_line),images,images_names); > } > > > > > > template<typename T> > void _gmic(const char *const commands_line, cimg_library::CImgList<T>& images, cimg_library::CImgList<char>& images_names, > const char *const custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel); > > gmic& add_commands(const char *const data_commands, > cimg_library::CImgList<char> commands_names[256], > cimg_library::CImgList<char> commands[256], > cimg_library::CImgList<char> commands_has_arguments[256], > const char *const commands_file=0); > gmic& add_commands(std::FILE *const file, > const char *const filename, > cimg_library::CImgList<char> commands_names[256], > cimg_library::CImgList<char> commands[256], > cimg_library::CImgList<char> commands_has_arguments[256], > const bool add_debug_infos=false); > cimg_library::CImg<char> scope2string() const; > cimg_library::CImg<char> scope2string(const cimg_library::CImg<unsigned int>& scope_selection) const; > cimg_library::CImg<char> scope2string(const cimg_library::CImg<unsigned int>* scope_selection) const; > > cimg_library::CImg<unsigned int> selection2cimg(const char *const string, const unsigned int indice_max, > const cimg_library::CImgList<char>& names, > const char *const command, const bool is_selection, > const bool allow_new_name, cimg_library::CImg<char>& new_name); > > cimg_library::CImg<char> selection2string(const cimg_library::CImg<unsigned int>& selection, > const cimg_library::CImgList<char>& images_names, > const bool display_selection) const; > > cimg_library::CImgList<char> commands_line_to_CImgList(const char *const commands_line); > > template<typename T> > cimg_library::CImg<char> substitute_item(const char *const source, > cimg_library::CImgList<T>& images, cimg_library::CImgList<char>& images_names, > unsigned int variables_sizes[256]); > > gmic& print(const char *format, ...); > gmic& error(const char *format, ...); > gmic& debug(const char *format, ...); > > template<typename T> > gmic& print(const cimg_library::CImgList<T>& list, const cimg_library::CImg<unsigned int> *const scope_selection, > const char *format, ...); > > template<typename T> > gmic& warn(const cimg_library::CImgList<T>& list, const cimg_library::CImg<unsigned int> *const scope_selection, > const char *format, ...); > > template<typename T> > gmic& error(const cimg_library::CImgList<T>& list, const cimg_library::CImg<unsigned int> *const scope_selection, > const char *const command, const char *format, ...); > > template<typename T> > gmic& debug(const cimg_library::CImgList<T>& list, const char *format, ...); > > template<typename T> > gmic& print_images(const cimg_library::CImgList<T>& images, > const cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection, > const bool is_header=true); > template<typename T> > gmic& display_images(const cimg_library::CImgList<T>& images, > const cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection, > unsigned int *const XYZ); > template<typename T> > gmic& display_plots(const cimg_library::CImgList<T>& images, > const cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection, > const unsigned int plot_type, const unsigned int vertex_type, > const double xmin, const double xmax, > const double ymin, const double ymax); > template<typename T> > gmic& display_objects3d(const cimg_library::CImgList<T>& images, > const cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection); > template<typename T> > cimg_library::CImg<T>& check_image(const cimg_library::CImgList<T>& list, cimg_library::CImg<T>& img); > template<typename T> > const cimg_library::CImg<T>& check_image(const cimg_library::CImgList<T>& list, const cimg_library::CImg<T>& img); > > template<typename T> > gmic& remove_images(cimg_library::CImgList<T>& images, cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection, > const unsigned int start, const unsigned int end); > > template<typename T> > gmic& parse(const cimg_library::CImgList<char>& commands_line, > cimg_library::CImgList<T> &images, cimg_library::CImgList<char> &images_names) { > unsigned int variables_sizes[256] = { 0 }; > unsigned int position = 0; > setlocale(1,"C"); > scope.assign(1U); > scope._data[0].assign(2,1,1,1); > scope._data[0]._data[0] = '.'; > scope._data[0]._data[1] = 0; > dowhiles.assign(0U); > repeatdones.assign(0U); > status.assign(0U); > is_start = true; > is_quit = false; > is_return = false; > is_default_type = true; > *progress = -1; > return _parse(commands_line,position,images,images_names,variables_sizes); > } > > template<typename T> > gmic& _parse(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<T> &images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_bool(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<bool>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_uchar(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<unsigned char>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_char(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<char>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_ushort(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<unsigned short>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_short(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<short>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_uint(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<unsigned int>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_int(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<int>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_float(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<float>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_double(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<double>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > > > > > > cimg_library::CImgList<char> *const commands, *const commands_names, *const commands_has_arguments, > *const _variables, *const _variables_names, **const variables, **const variables_names, > commands_files, scope; > cimg_library::CImgList<unsigned int> dowhiles, repeatdones; > cimg_library::CImg<unsigned char> background3d, light3d; > cimg_library::CImg<float> pose3d; > cimg_library::CImg<char> status; > float focale3d, light3d_x, light3d_y, light3d_z, specular_lightness3d, specular_shininess3d, > _progress, *progress; > bool is_released, is_debug, is_start, is_quit, is_return, is_double3d, is_default_type, > is_debug_infos, check_elif; > int verbosity, render3d, renderd3d; > volatile int _cancel, *cancel; > unsigned int nb_carriages, debug_filename, debug_line; > unsigned long reference_time; > >}; ># 1880 "gmic.cpp" 2 > ># 1 "gmic_def.h" 1 > > >char data_gmic_def[] = { > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 71, 108, 111, 98, 97, 108, > 32, 111, 112, 116, 105, 111, 110, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 101, 98, 117, 103, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 65, 99, 116, 105, 118, 97, 116, 101, 32, 100, 101, > 98, 117, 103, 32, 109, 111, 100, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 87, 104, 101, 110, 32, 97, 99, 116, 105, 118, 97, 116, 101, > 100, 44, 32, 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 105, 110, 116, > 101, 114, 112, 114, 101, 116, 101, 114, 32, 98, 101, 99, 111, 109, 101, 115, > 32, 118, 101, 114, 121, 32, 118, 101, 114, 98, 111, 115, 101, 32, 97, 110, > 100, 32, 111, 117, 116, 112, 117, 116, 115, 32, 97, 100, 100, 105, 116, 105, > 111, 110, 110, 97, 108, 32, 108, 111, 103, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 109, 101, 115, 115, 97, 103, 101, 115, 32, 97, 98, 111, 117, > 116, 32, 105, 116, 115, 32, 105, 110, 116, 101, 114, 110, 97, 108, 32, 115, > 116, 97, 116, 101, 32, 111, 110, 32, 116, 104, 101, 32, 115, 116, 97, 110, > 100, 97, 114, 100, 32, 111, 117, 116, 112, 117, 116, 32, 40, 115, 116, 100, > 111, 117, 116, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, > 104, 105, 115, 32, 111, 112, 116, 105, 111, 110, 32, 99, 97, 110, 32, 98, > 101, 32, 117, 115, 101, 102, 117, 108, 32, 119, 104, 101, 110, 32, 100, 101, > 98, 117, 103, 103, 105, 110, 103, 32, 116, 104, 101, 32, 101, 120, 101, 99, > 117, 116, 105, 111, 110, 32, 111, 102, 32, 97, 32, 99, 117, 115, 116, 111, > 109, 32, 99, 111, 109, 109, 97, 110, 100, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 104, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 104, > 101, 108, 112, 39, 46, 32, 58, 32, 40, 42, 41, 10, 104, 32, 58, 10, > 45, 104, 101, 108, 112, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, > 104, 101, 108, 112, 32, 58, 32, 95, 99, 111, 109, 109, 97, 110, 100, 32, > 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, > 97, 121, 32, 104, 101, 108, 112, 32, 40, 111, 112, 116, 105, 111, 110, 97, > 108, 108, 121, 32, 102, 111, 114, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, 110, 108, 121, 41, 32, > 97, 110, 100, 32, 101, 120, 105, 116, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 104, 39, 41, > 46, 10, 104, 101, 108, 112, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 34, 34, 125, 44, 36, 123, 50, 61, 49, 125, 10, 45, 105, > 102, 32, 123, 33, 64, 35, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 121, 32, 45, 97, 32, 121, 10, 45, > 45, 95, 104, 101, 108, 112, 32, 36, 49, 44, 36, 50, 32, 45, 107, 91, > 48, 93, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 64, 123, 125, > 41, 125, 32, 45, 95, 104, 101, 108, 112, 91, 48, 93, 32, 64, 123, 125, > 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 10, 95, 104, > 101, 108, 112, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 34, 34, 125, 10, 45, 118, 32, 45, 49, 10, 45, 105, 102, 32, 123, 33, > 110, 97, 114, 103, 40, 34, 36, 49, 34, 41, 125, 32, 95, 105, 115, 95, > 101, 120, 97, 109, 112, 108, 101, 61, 48, 32, 45, 95, 95, 104, 101, 108, > 112, 32, 97, 115, 99, 105, 105, 32, 45, 118, 32, 43, 32, 45, 101, 91, > 93, 32, 34, 34, 32, 45, 118, 32, 45, 32, 45, 114, 109, 32, 45, 117, > 32, 34, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 40, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, 45, 97, > 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 45, 39, > 125, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 49, 48, 48, 37, > 125, 61, 61, 123, 39, 93, 39, 125, 34, 32, 38, 38, 32, 34, 105, 33, > 61, 123, 39, 91, 39, 125, 125, 32, 45, 108, 91, 45, 49, 93, 32, 45, > 115, 32, 45, 44, 123, 39, 91, 39, 125, 32, 45, 107, 91, 48, 93, 32, > 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 99, 111, 109, > 109, 97, 110, 100, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 107, 115, 48, 61, 34, 48, 34, 32, 107, 115, 49, > 61, 34, 45, 107, 91, 48, 93, 34, 10, 45, 105, 102, 32, 36, 50, 32, > 45, 95, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, 97, > 115, 99, 105, 105, 91, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 32, 49, 44, 123, 104, 43, 49, 125, 44, 49, 44, 49, 44, 48, 44, 48, > 44, 48, 44, 49, 10, 45, 115, 32, 43, 44, 123, 39, 34, 35, 64, 103, > 109, 105, 99, 32, 34, 36, 99, 111, 109, 109, 97, 110, 100, 34, 32, 58, > 34, 39, 125, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, 32, > 45, 115, 32, 43, 44, 123, 39, 34, 35, 64, 103, 109, 105, 99, 32, 34, > 36, 99, 111, 109, 109, 97, 110, 100, 34, 58, 34, 39, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, > 32, 45, 115, 32, 43, 44, 123, 39, 34, 35, 64, 103, 109, 105, 99, 32, > 34, 36, 99, 111, 109, 109, 97, 110, 100, 34, 92, 110, 34, 39, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, > 49, 125, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, > 91, 103, 109, 105, 99, 93, 32, 67, 111, 109, 109, 97, 110, 100, 32, 39, > 34, 36, 99, 111, 109, 109, 97, 110, 100, 34, 39, 32, 104, 97, 115, 32, > 110, 111, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 46, 32, > 84, 114, 121, 32, 39, 103, 109, 105, 99, 32, 45, 104, 39, 32, 102, 111, > 114, 32, 103, 108, 111, 98, 97, 108, 32, 104, 101, 108, 112, 46, 92, 110, > 92, 110, 34, 32, 45, 118, 32, 45, 32, 45, 114, 109, 32, 45, 117, 32, > 34, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 97, 32, 121, 32, 45, 115, > 32, 45, 44, 49, 48, 10, 115, 116, 111, 112, 102, 108, 97, 103, 61, 48, > 10, 95, 105, 115, 95, 101, 120, 97, 109, 112, 108, 101, 61, 48, 10, 45, > 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 104, > 101, 97, 100, 101, 114, 95, 97, 115, 99, 105, 105, 91, 93, 32, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 105, 102, 32, 123, 104, 62, 55, 34, 32, 38, 38, 32, 34, > 123, 64, 123, 45, 49, 44, 48, 45, 53, 125, 39, 61, 61, 39, 123, 39, > 34, 35, 64, 103, 109, 105, 99, 34, 39, 125, 125, 125, 10, 45, 114, 111, > 119, 115, 32, 55, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, > 123, 105, 33, 61, 123, 39, 58, 39, 125, 125, 10, 45, 115, 32, 45, 44, > 123, 39, 34, 58, 32, 34, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 123, > 64, 123, 48, 44, 116, 125, 39, 61, 61, 39, 36, 99, 111, 109, 109, 97, > 110, 100, 125, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 100, 101, 99, 108, 97, 114, 97, 116, 105, 111, 110, 95, > 97, 115, 99, 105, 105, 10, 45, 105, 102, 32, 36, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, > 92, 110, 32, 32, 32, 32, 45, 34, 36, 99, 111, 109, 109, 97, 110, 100, > 34, 58, 32, 69, 113, 117, 105, 118, 97, 108, 101, 110, 116, 32, 116, 111, > 32, 39, 34, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, > 107, 48, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 117, 32, 36, > 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, 107, 48, 32, 45, > 114, 101, 116, 117, 114, 110, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 108, 115, 101, 32, 115, 116, 111, 112, 102, 108, 97, 103, 61, 49, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 114, 111, 119, > 115, 32, 49, 44, 49, 48, 48, 37, 10, 45, 105, 102, 32, 123, 105, 61, > 61, 123, 39, 58, 39, 125, 125, 32, 115, 116, 111, 112, 102, 108, 97, 103, > 61, 49, 10, 45, 101, 108, 115, 101, 10, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 123, > 105, 61, 61, 123, 39, 36, 39, 125, 125, 10, 45, 114, 111, 119, 115, 32, > 49, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 36, 95, 105, > 115, 95, 101, 120, 97, 109, 112, 108, 101, 32, 45, 105, 91, 48, 93, 32, > 40, 123, 39, 34, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 34, 39, 125, 41, 10, 45, 101, 108, 115, 101, 32, 45, 105, 91, 48, 93, > 32, 40, 123, 39, 34, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 69, > 120, 97, 109, 112, 108, 101, 40, 115, 41, 58, 32, 34, 39, 125, 41, 32, > 95, 105, 115, 95, 101, 120, 97, 109, 112, 108, 101, 61, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 121, 91, 48, 93, 32, 45, 97, 32, 121, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, > 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, 105, 112, 116, 105, > 111, 110, 95, 97, 115, 99, 105, 105, 32, 48, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 115, > 116, 111, 112, 102, 108, 97, 103, 61, 49, 32, 45, 101, 110, 100, 105, 102, > 32, 36, 123, 107, 115, 123, 64, 35, 33, 61, 48, 125, 125, 32, 45, 101, > 110, 100, 108, 32, 45, 105, 102, 32, 36, 115, 116, 111, 112, 102, 108, 97, > 103, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 34, 92, 110, 34, 32, 45, 118, 32, 45, 32, 45, 114, 109, 10, 45, 117, > 32, 34, 34, 10, 95, 95, 104, 101, 108, 112, 32, 58, 10, 45, 109, 32, > 34, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 58, > 32, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 95, > 36, 49, 32, 92, 34, 36, 34, 34, 49, 92, 34, 34, 10, 45, 109, 32, > 34, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, > 32, 58, 32, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, > 97, 112, 104, 95, 36, 49, 32, 92, 34, 36, 34, 34, 49, 92, 34, 34, > 10, 45, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, 36, > 49, 91, 93, 10, 45, 95, 104, 101, 108, 112, 95, 117, 115, 97, 103, 101, > 91, 93, 10, 45, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, > 99, 32, 36, 49, 44, 34, 105, 109, 103, 47, 34, 44, 48, 10, 45, 95, > 104, 101, 108, 112, 95, 101, 120, 97, 109, 112, 108, 101, 115, 91, 93, 10, > 45, 95, 104, 101, 108, 112, 95, 102, 111, 111, 116, 101, 114, 95, 36, 49, > 91, 93, 10, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, > 108, 97, 116, 101, 120, 32, 58, 10, 45, 105, 102, 32, 123, 110, 97, 114, > 103, 40, 36, 95, 103, 109, 105, 99, 95, 105, 115, 95, 98, 101, 116, 97, > 41, 125, 32, 115, 116, 114, 98, 101, 116, 97, 61, 34, 32, 40, 98, 101, > 116, 97, 41, 34, 32, 45, 101, 108, 115, 101, 32, 115, 116, 114, 98, 101, > 116, 97, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, 95, 118, 101, > 114, 115, 105, 111, 110, 41, 125, 32, 115, 116, 114, 118, 101, 114, 61, 36, > 95, 103, 109, 105, 99, 95, 118, 101, 114, 115, 105, 111, 110, 32, 45, 101, > 108, 115, 101, 32, 115, 116, 114, 118, 101, 114, 61, 64, 123, 45, 115, 116, > 114, 118, 101, 114, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 34, 92, 92, 100, 111, 99, 117, 109, 101, > 110, 116, 99, 108, 97, 115, 115, 91, 97, 52, 112, 97, 112, 101, 114, 44, > 49, 49, 112, 116, 44, 116, 119, 111, 115, 105, 100, 101, 93, 123, 98, 111, > 111, 107, 125, 10, 92, 110, 92, 92, 117, 115, 101, 112, 97, 99, 107, 97, > 103, 101, 123, 104, 121, 112, 101, 114, 114, 101, 102, 44, 102, 97, 110, 99, > 121, 104, 100, 114, 44, 103, 114, 97, 112, 104, 105, 99, 120, 44, 97, 109, > 115, 115, 121, 109, 98, 44, 97, 109, 115, 109, 97, 116, 104, 44, 116, 105, > 109, 101, 115, 44, 109, 97, 107, 101, 105, 100, 120, 44, 108, 105, 115, 116, > 105, 110, 103, 115, 125, 10, 92, 110, 92, 92, 103, 114, 97, 112, 104, 105, > 99, 115, 112, 97, 116, 104, 123, 123, 105, 109, 103, 47, 125, 125, 10, 92, > 110, 92, 92, 112, 97, 103, 101, 115, 116, 121, 108, 101, 123, 102, 97, 110, > 99, 121, 112, 108, 97, 105, 110, 125, 10, 92, 110, 92, 92, 108, 104, 101, > 97, 100, 91, 92, 92, 102, 97, 110, 99, 121, 112, 108, 97, 105, 110, 123, > 125, 123, 92, 92, 116, 101, 120, 116, 98, 102, 92, 92, 116, 104, 101, 112, > 97, 103, 101, 125, 93, 123, 92, 92, 102, 97, 110, 99, 121, 112, 108, 97, > 105, 110, 123, 125, 123, 92, 92, 114, 105, 103, 104, 116, 109, 97, 114, 107, > 125, 125, 10, 92, 110, 92, 92, 114, 104, 101, 97, 100, 91, 92, 92, 102, > 97, 110, 99, 121, 112, 108, 97, 105, 110, 123, 125, 123, 92, 92, 108, 101, > 102, 116, 109, 97, 114, 107, 125, 93, 123, 92, 92, 102, 97, 110, 99, 121, > 112, 108, 97, 105, 110, 123, 125, 123, 92, 92, 116, 101, 120, 116, 98, 102, > 92, 92, 116, 104, 101, 112, 97, 103, 101, 125, 125, 10, 92, 110, 92, 92, > 99, 102, 111, 111, 116, 123, 125, 10, 92, 110, 92, 92, 115, 101, 116, 108, > 101, 110, 103, 116, 104, 123, 92, 92, 116, 101, 120, 116, 119, 105, 100, 116, > 104, 125, 123, 53, 46, 56, 55, 53, 105, 110, 125, 10, 92, 110, 92, 92, > 115, 101, 116, 108, 101, 110, 103, 116, 104, 123, 92, 92, 112, 97, 114, 105, > 110, 100, 101, 110, 116, 125, 123, 48, 112, 99, 125, 10, 92, 110, 92, 92, > 115, 101, 116, 108, 101, 110, 103, 116, 104, 123, 92, 92, 104, 111, 102, 102, > 115, 101, 116, 125, 123, 45, 48, 46, 56, 99, 109, 125, 10, 92, 110, 92, > 92, 115, 101, 116, 99, 111, 117, 110, 116, 101, 114, 123, 116, 111, 99, 100, > 101, 112, 116, 104, 125, 123, 49, 125, 10, 92, 110, 92, 92, 115, 108, 111, > 112, 112, 121, 123, 125, 10, 92, 110, 92, 92, 116, 105, 116, 108, 101, 123, > 92, 92, 102, 98, 111, 120, 123, 92, 92, 112, 97, 114, 98, 111, 120, 123, > 92, 92, 116, 101, 120, 116, 119, 105, 100, 116, 104, 125, 123, 92, 92, 98, > 101, 103, 105, 110, 123, 99, 101, 110, 116, 101, 114, 125, 92, 92, 118, 115, > 112, 97, 99, 101, 42, 123, 50, 99, 109, 125, 92, 92, 105, 110, 99, 108, > 117, 100, 101, 103, 114, 97, 112, 104, 105, 99, 115, 91, 119, 105, 100, 116, > 104, 61, 49, 50, 99, 109, 93, 123, 108, 111, 103, 111, 51, 46, 106, 112, > 103, 125, 92, 92, 92, 92, 92, 92, 118, 115, 112, 97, 99, 101, 42, 123, > 49, 99, 109, 125, 123, 92, 92, 72, 117, 103, 101, 32, 92, 92, 116, 101, > 120, 116, 98, 102, 123, 84, 104, 101, 32, 72, 97, 110, 100, 98, 111, 111, > 107, 125, 92, 92, 92, 92, 123, 92, 92, 115, 109, 97, 108, 108, 32, 86, > 101, 114, 115, 105, 111, 110, 32, 34, 36, 115, 116, 114, 118, 101, 114, 36, > 115, 116, 114, 98, 101, 116, 97, 34, 125, 92, 92, 92, 92, 92, 92, 118, > 115, 112, 97, 99, 101, 42, 123, 49, 99, 109, 125, 125, 92, 92, 101, 110, > 100, 123, 99, 101, 110, 116, 101, 114, 125, 125, 125, 125, 10, 92, 110, 92, > 92, 97, 117, 116, 104, 111, 114, 123, 92, 92, 76, 97, 114, 103, 101, 32, > 92, 92, 98, 102, 32, 68, 97, 118, 105, 100, 32, 84, 115, 99, 104, 117, > 109, 112, 101, 114, 108, 92, 92, 39, 101, 125, 10, 92, 110, 92, 92, 114, > 101, 110, 101, 119, 99, 111, 109, 109, 97, 110, 100, 92, 92, 105, 110, 100, > 101, 120, 110, 97, 109, 101, 123, 73, 110, 100, 101, 120, 32, 111, 102, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 125, 10, 92, 110, 92, 92, 109, 97, > 107, 101, 105, 110, 100, 101, 120, 10, 92, 110, 92, 92, 108, 115, 116, 115, > 101, 116, 123, 99, 111, 108, 117, 109, 110, 115, 61, 102, 117, 108, 108, 102, > 108, 101, 120, 105, 98, 108, 101, 44, 98, 97, 115, 105, 99, 115, 116, 121, > 108, 101, 61, 92, 92, 110, 111, 114, 109, 97, 108, 102, 111, 110, 116, 125, > 10, 92, 110, 92, 92, 98, 101, 103, 105, 110, 123, 100, 111, 99, 117, 109, > 101, 110, 116, 125, 10, 92, 110, 92, 92, 109, 97, 107, 101, 116, 105, 116, > 108, 101, 10, 92, 110, 92, 92, 116, 97, 98, 108, 101, 111, 102, 99, 111, > 110, 116, 101, 110, 116, 115, 10, 92, 110, 92, 92, 99, 104, 97, 112, 116, > 101, 114, 42, 123, 80, 114, 101, 97, 109, 98, 108, 101, 125, 10, 92, 110, > 92, 92, 115, 101, 99, 116, 105, 111, 110, 42, 123, 76, 105, 99, 101, 110, > 115, 101, 125, 10, 92, 110, 84, 104, 105, 115, 32, 100, 111, 99, 117, 109, > 101, 110, 116, 32, 105, 115, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, > 101, 100, 32, 117, 110, 100, 101, 114, 32, 116, 104, 101, 32, 92, 92, 116, > 101, 120, 116, 98, 102, 123, 71, 78, 85, 32, 70, 114, 101, 101, 32, 68, > 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 76, 105, 99, > 101, 110, 115, 101, 125, 44, 32, 118, 101, 114, 115, 105, 111, 110, 32, 49, > 46, 51, 46, 92, 92, 92, 92, 10, 92, 110, 82, 101, 97, 100, 32, 116, > 104, 101, 32, 102, 117, 108, 108, 32, 108, 105, 99, 101, 110, 115, 101, 32, > 116, 101, 114, 109, 115, 32, 97, 116, 32, 92, 92, 116, 101, 120, 116, 116, > 116, 123, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 103, 110, 117, > 46, 111, 114, 103, 47, 108, 105, 99, 101, 110, 115, 101, 115, 47, 102, 100, > 108, 45, 49, 46, 51, 46, 116, 120, 116, 125, 46, 92, 92, 92, 92, 126, > 92, 92, 92, 92, 10, 92, 110, 65, 110, 32, 111, 110, 108, 105, 110, 101, > 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, 116, 104, 105, 115, > 32, 100, 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 105, > 115, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 97, 116, 58, 92, > 92, 92, 92, 92, 92, 116, 101, 120, 116, 116, 116, 123, 104, 116, 116, 112, > 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 47, 114, 101, 102, 101, 114, 101, 110, 99, > 101, 46, 115, 104, 116, 109, 108, 125, 46, 10, 92, 110, 92, 92, 115, 101, > 99, 116, 105, 111, 110, 42, 123, 77, 111, 116, 105, 118, 97, 116, 105, 111, > 110, 115, 125, 10, 92, 110, 71, 92, 52, 55, 77, 73, 67, 32, 105, 115, > 32, 97, 110, 32, 111, 112, 101, 110, 32, 97, 110, 100, 32, 102, 117, 108, > 108, 45, 102, 101, 97, 116, 117, 114, 101, 100, 32, 102, 114, 97, 109, 101, > 119, 111, 114, 107, 32, 102, 111, 114, 32, 105, 109, 97, 103, 101, 32, 112, > 114, 111, 99, 101, 115, 115, 105, 110, 103, 44, 32, 112, 114, 111, 118, 105, > 100, 105, 110, 103, 32, 115, 101, 118, 101, 114, 97, 108, 32, 100, 105, 102, > 102, 101, 114, 101, 110, 116, 32, 117, 115, 101, 114, 32, 105, 110, 116, 101, > 114, 102, 97, 99, 101, 115, 32, 116, 111, 10, 92, 110, 99, 111, 110, 118, > 101, 114, 116, 47, 109, 97, 110, 105, 112, 117, 108, 97, 116, 101, 47, 102, > 105, 108, 116, 101, 114, 47, 118, 105, 115, 117, 97, 108, 105, 122, 101, 32, > 103, 101, 110, 101, 114, 105, 99, 32, 105, 109, 97, 103, 101, 32, 100, 97, > 116, 97, 115, 101, 116, 115, 44, 32, 102, 114, 111, 109, 32, 49, 100, 32, > 115, 99, 97, 108, 97, 114, 32, 115, 105, 103, 110, 97, 108, 101, 115, 32, > 116, 111, 32, 51, 100, 43, 116, 32, 115, 101, 113, 117, 101, 110, 99, 101, > 115, 32, 111, 102, 32, 109, 117, 108, 116, 105, 45, 115, 112, 101, 99, 116, > 114, 97, 108, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 92, 110, 84, 101, 99, 104, 110, 105, 99, > 97, 108, 108, 121, 32, 115, 112, 101, 97, 107, 105, 110, 103, 44, 32, 119, > 104, 97, 116, 32, 105, 116, 32, 100, 111, 101, 115, 32, 105, 115, 58, 10, > 92, 110, 92, 92, 98, 101, 103, 105, 110, 123, 105, 116, 101, 109, 105, 122, > 101, 125, 10, 92, 110, 92, 92, 105, 116, 101, 109, 32, 68, 101, 102, 105, > 110, 101, 32, 97, 32, 108, 105, 103, 104, 116, 119, 101, 105, 103, 104, 116, > 32, 98, 117, 116, 32, 112, 111, 119, 101, 114, 102, 117, 108, 32, 115, 99, > 114, 105, 112, 116, 32, 108, 97, 110, 103, 117, 97, 103, 101, 32, 40, 116, > 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 108, 97, 110, 103, 117, > 97, 103, 101, 41, 32, 100, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, > 111, 32, 116, 104, 101, 32, 100, 101, 115, 105, 103, 110, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, > 32, 112, 105, 112, 101, 108, 105, 110, 101, 115, 46, 10, 92, 110, 92, 92, > 105, 116, 101, 109, 32, 80, 114, 111, 118, 105, 100, 101, 32, 115, 101, 118, > 101, 114, 97, 108, 32, 117, 115, 101, 114, 32, 105, 110, 116, 101, 114, 102, > 97, 99, 101, 115, 32, 101, 109, 98, 101, 100, 100, 105, 110, 103, 32, 116, > 104, 101, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, 105, 110, 103, > 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 58, 10, 92, 110, > 92, 92, 98, 101, 103, 105, 110, 123, 105, 116, 101, 109, 105, 122, 101, 125, > 10, 92, 110, 92, 92, 105, 116, 101, 109, 32, 65, 32, 99, 111, 109, 109, > 97, 110, 100, 45, 108, 105, 110, 101, 32, 101, 120, 101, 99, 117, 116, 97, > 98, 108, 101, 32, 39, 103, 109, 105, 99, 39, 44, 32, 116, 111, 32, 117, > 115, 101, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 102, > 114, 97, 109, 101, 119, 111, 114, 107, 32, 102, 114, 111, 109, 32, 97, 32, > 115, 104, 101, 108, 108, 46, 10, 92, 110, 73, 110, 32, 116, 104, 105, 115, > 32, 115, 101, 116, 116, 105, 110, 103, 44, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 109, 97, 121, 32, 98, 101, 32, 115, 101, 101, 110, 32, 97, 115, > 32, 97, 32, 100, 105, 114, 101, 99, 116, 32, 40, 97, 110, 100, 32, 102, > 114, 105, 101, 110, 100, 108, 121, 41, 32, 99, 111, 109, 112, 101, 116, 105, > 116, 111, 114, 32, 111, 102, 32, 116, 104, 101, 32, 73, 109, 97, 103, 101, > 77, 97, 103, 105, 99, 107, 32, 111, 114, 32, 71, 114, 97, 112, 104, 105, > 99, 115, 77, 97, 103, 105, 99, 107, 32, 115, 111, 102, 116, 119, 97, 114, > 101, 32, 115, 117, 105, 116, 101, 115, 46, 10, 92, 110, 92, 92, 105, 116, > 101, 109, 32, 65, 32, 112, 108, 117, 103, 45, 105, 110, 32, 39, 103, 109, > 105, 99, 92, 92, 95, 103, 105, 109, 112, 39, 44, 32, 116, 111, 32, 98, > 114, 105, 110, 103, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 97, 112, > 97, 98, 105, 108, 105, 116, 105, 101, 115, 32, 116, 111, 32, 116, 104, 101, > 32, 71, 73, 77, 80, 32, 105, 109, 97, 103, 101, 32, 114, 101, 116, 111, > 117, 99, 104, 105, 110, 103, 32, 115, 111, 102, 116, 119, 97, 114, 101, 46, > 10, 92, 110, 92, 92, 105, 116, 101, 109, 32, 65, 32, 119, 101, 98, 45, > 115, 101, 114, 118, 105, 99, 101, 32, 39, 71, 92, 52, 55, 77, 73, 67, > 32, 79, 110, 108, 105, 110, 101, 39, 44, 32, 116, 111, 32, 97, 108, 108, > 111, 119, 32, 117, 115, 101, 114, 115, 32, 97, 112, 112, 108, 121, 105, 110, > 103, 32, 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, > 110, 103, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 115, 32, 100, 105, > 114, 101, 99, 116, 108, 121, 32, 105, 110, 32, 97, 32, 119, 101, 98, 32, > 98, 114, 111, 119, 101, 114, 46, 10, 92, 110, 92, 92, 105, 116, 101, 109, > 32, 65, 32, 81, 116, 45, 98, 97, 115, 101, 100, 32, 105, 110, 116, 101, > 114, 102, 97, 99, 101, 32, 39, 90, 65, 114, 116, 39, 44, 32, 102, 111, > 114, 32, 114, 101, 97, 108, 45, 116, 105, 109, 101, 32, 109, 97, 110, 105, > 112, 117, 108, 97, 116, 105, 111, 110, 32, 111, 102, 32, 119, 101, 98, 99, > 97, 109, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, 92, 92, 105, > 116, 101, 109, 32, 65, 32, 67, 43, 43, 32, 108, 105, 98, 114, 97, 114, > 121, 32, 39, 108, 105, 98, 103, 109, 105, 99, 39, 44, 32, 116, 111, 32, > 98, 101, 32, 108, 105, 110, 107, 101, 100, 32, 119, 105, 116, 104, 32, 116, > 104, 105, 114, 100, 45, 112, 97, 114, 116, 121, 32, 97, 112, 112, 108, 105, > 99, 97, 116, 105, 111, 110, 115, 46, 10, 92, 110, 92, 92, 101, 110, 100, > 123, 105, 116, 101, 109, 105, 122, 101, 125, 10, 92, 110, 92, 92, 101, 110, > 100, 123, 105, 116, 101, 109, 105, 122, 101, 125, 10, 92, 110, 71, 92, 52, > 55, 77, 73, 67, 32, 105, 115, 32, 102, 111, 99, 117, 115, 101, 100, 32, > 111, 110, 32, 116, 104, 101, 32, 100, 101, 115, 105, 103, 110, 32, 111, 102, > 32, 112, 111, 115, 115, 105, 98, 108, 121, 32, 99, 111, 109, 112, 108, 101, > 120, 32, 112, 105, 112, 101, 108, 105, 110, 101, 115, 32, 102, 111, 114, 32, > 99, 111, 110, 118, 101, 114, 116, 105, 110, 103, 44, 32, 109, 97, 110, 105, > 112, 117, 108, 97, 116, 105, 110, 103, 44, 32, 102, 105, 108, 116, 101, 114, > 105, 110, 103, 32, 97, 110, 100, 32, 118, 105, 115, 117, 97, 108, 105, 122, > 105, 110, 103, 32, 103, 101, 110, 101, 114, 105, 99, 32, 49, 100, 47, 50, > 100, 47, 51, 100, 32, 109, 117, 108, 116, 105, 45, 115, 112, 101, 99, 116, > 114, 97, 108, 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, 97, 115, 101, > 116, 115, 46, 32, 84, 104, 105, 115, 32, 105, 110, 99, 108, 117, 100, 101, > 115, 32, 111, 102, 32, 99, 111, 117, 114, 115, 101, 32, 99, 111, 108, 111, > 114, 32, 105, 109, 97, 103, 101, 115, 44, 32, 98, 117, 116, 32, 97, 108, > 115, 111, 32, 109, 111, 114, 101, 32, 99, 111, 109, 112, 108, 101, 120, 32, > 100, 97, 116, 97, 32, 97, 115, 32, 105, 109, 97, 103, 101, 32, 115, 101, > 113, 117, 101, 110, 99, 101, 115, 32, 111, 114, 32, 51, 100, 40, 43, 116, > 41, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 102, 108, 111, > 97, 116, 45, 118, 97, 108, 117, 101, 100, 32, 100, 97, 116, 97, 115, 101, > 116, 115, 46, 92, 92, 92, 92, 10, 92, 110, 10, 92, 110, 71, 92, 52, > 55, 77, 73, 67, 32, 105, 115, 32, 97, 110, 32, 111, 112, 101, 110, 32, > 102, 114, 97, 109, 101, 119, 111, 114, 107, 58, 32, 116, 104, 101, 32, 100, > 101, 102, 97, 117, 108, 116, 32, 108, 97, 110, 103, 117, 97, 103, 101, 32, > 99, 97, 110, 32, 98, 101, 32, 101, 120, 116, 101, 110, 100, 101, 100, 32, > 119, 105, 116, 104, 32, 99, 117, 115, 116, 111, 109, 32, 71, 92, 52, 55, > 77, 73, 67, 45, 119, 114, 105, 116, 116, 101, 110, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 44, 32, 100, 101, 102, 105, 110, 105, 110, 103, 32, 116, > 104, 117, 115, 32, 110, 101, 119, 32, 97, 118, 97, 105, 108, 97, 98, 108, > 101, 32, 105, 109, 97, 103, 101, 32, 102, 105, 108, 116, 101, 114, 115, 32, > 111, 114, 32, 101, 102, 102, 101, 99, 116, 115, 46, 32, 66, 121, 32, 116, > 104, 101, 32, 119, 97, 121, 44, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 97, 108, 114, 101, 97, 100, 121, 32, 99, 111, 110, 116, 97, 105, 110, 115, > 32, 97, 32, 115, 117, 98, 115, 116, 97, 110, 116, 105, 97, 108, 32, 115, > 101, 116, 32, 111, 102, 32, 112, 114, 101, 45, 100, 101, 102, 105, 110, 101, > 100, 32, 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, > 110, 103, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 115, 32, 97, 110, > 100, 32, 112, 105, 112, 101, 108, 105, 110, 101, 115, 32, 40, 109, 111, 114, > 101, 32, 116, 104, 97, 110, 32, 49, 48, 48, 48, 41, 46, 92, 92, 92, > 92, 10, 92, 110, 10, 92, 110, 71, 92, 52, 55, 77, 73, 67, 32, 104, > 97, 115, 32, 98, 101, 101, 110, 32, 100, 101, 115, 105, 103, 110, 101, 100, > 32, 119, 105, 116, 104, 32, 112, 111, 114, 116, 97, 98, 105, 108, 105, 116, > 121, 32, 105, 110, 32, 109, 105, 110, 100, 32, 97, 110, 100, 32, 114, 117, > 110, 115, 32, 111, 110, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, > 112, 108, 97, 116, 102, 111, 114, 109, 115, 32, 40, 87, 105, 110, 100, 111, > 119, 115, 44, 32, 85, 110, 105, 120, 44, 32, 77, 97, 99, 79, 83, 88, > 41, 46, 32, 73, 116, 32, 105, 115, 32, 100, 105, 115, 116, 114, 105, 98, > 117, 116, 101, 100, 32, 117, 110, 100, 101, 114, 32, 116, 104, 101, 32, 67, > 101, 67, 73, 76, 76, 32, 108, 105, 99, 101, 110, 115, 101, 32, 40, 71, > 80, 76, 45, 99, 111, 109, 112, 97, 116, 105, 98, 108, 101, 41, 46, 32, > 83, 105, 110, 99, 101, 32, 50, 48, 48, 56, 44, 32, 105, 116, 32, 105, > 115, 32, 100, 101, 118, 101, 108, 111, 112, 101, 100, 32, 105, 110, 32, 116, > 104, 101, 32, 73, 109, 97, 103, 101, 32, 84, 101, 97, 109, 32, 111, 102, > 32, 116, 104, 101, 32, 71, 82, 69, 89, 67, 32, 108, 97, 98, 111, 114, > 97, 116, 111, 114, 121, 44, 32, 105, 110, 32, 67, 97, 101, 110, 47, 70, > 114, 97, 110, 99, 101, 44, 32, 98, 121, 32, 112, 101, 114, 109, 97, 110, > 101, 110, 116, 32, 114, 101, 115, 101, 97, 114, 99, 104, 101, 114, 115, 32, > 119, 111, 114, 107, 105, 110, 103, 32, 105, 110, 32, 116, 104, 101, 32, 102, > 105, 101, 108, 100, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 112, 114, > 111, 99, 101, 115, 115, 105, 110, 103, 32, 111, 110, 32, 97, 32, 100, 97, > 105, 108, 121, 32, 98, 97, 115, 105, 115, 46, 10, 92, 110, 92, 92, 115, > 101, 99, 116, 105, 111, 110, 42, 123, 86, 101, 114, 115, 105, 111, 110, 125, > 10, 92, 110, 10, 92, 110, 32, 103, 109, 105, 99, 58, 32, 71, 82, 69, > 89, 67, 39, 115, 32, 77, 97, 103, 105, 99, 32, 102, 111, 114, 32, 73, > 109, 97, 103, 101, 32, 67, 111, 109, 112, 117, 116, 105, 110, 103, 46, 10, > 92, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 86, 101, 114, > 115, 105, 111, 110, 32, 34, 36, 115, 116, 114, 118, 101, 114, 36, 115, 116, > 114, 98, 101, 116, 97, 34, 44, 32, 67, 111, 112, 121, 114, 105, 103, 104, > 116, 32, 40, 99, 41, 32, 50, 48, 48, 56, 45, 50, 48, 49, 52, 44, > 32, 68, 97, 118, 105, 100, 32, 84, 115, 99, 104, 117, 109, 112, 101, 114, > 108, 92, 92, 39, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 40, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, > 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 41, 10, 92, 110, > 92, 92, 99, 104, 97, 112, 116, 101, 114, 123, 85, 115, 97, 103, 101, 125, > 10, 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, 115, 101, > 99, 116, 105, 111, 110, 95, 108, 97, 116, 101, 120, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 34, 36, 49, 34, 10, 45, 118, 32, 43, 10, 45, 101, > 91, 93, 32, 34, 92, 92, 115, 101, 99, 116, 105, 111, 110, 123, 36, 49, > 125, 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, 112, 97, > 114, 97, 103, 114, 97, 112, 104, 95, 108, 97, 116, 101, 120, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 34, 36, 49, 34, 10, 45, 118, 32, 43, 10, > 45, 101, 91, 93, 32, 34, 92, 92, 115, 109, 97, 108, 108, 34, 10, 45, > 101, 91, 93, 32, 34, 92, 92, 98, 101, 103, 105, 110, 123, 108, 115, 116, > 108, 105, 115, 116, 105, 110, 103, 125, 34, 10, 45, 101, 91, 93, 32, 34, > 36, 49, 34, 10, 45, 101, 91, 93, 32, 34, 92, 92, 101, 110, 100, 123, > 108, 115, 116, 108, 105, 115, 116, 105, 110, 103, 125, 34, 10, 45, 101, 91, > 93, 32, 34, 92, 92, 110, 111, 114, 109, 97, 108, 115, 105, 122, 101, 34, > 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, 102, 111, 111, 116, > 101, 114, 95, 108, 97, 116, 101, 120, 32, 58, 10, 45, 118, 32, 43, 10, > 45, 101, 91, 93, 32, 34, 10, 92, 110, 92, 92, 112, 114, 105, 110, 116, > 105, 110, 100, 101, 120, 10, 92, 110, 126, 92, 92, 92, 92, 36, 92, 92, > 115, 113, 117, 97, 114, 101, 36, 126, 69, 110, 100, 32, 111, 102, 32, 100, > 111, 99, 117, 109, 101, 110, 116, 46, 10, 92, 110, 92, 110, 92, 92, 101, > 110, 100, 123, 100, 111, 99, 117, 109, 101, 110, 116, 125, 34, 10, 45, 118, > 32, 45, 10, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, > 104, 116, 109, 108, 32, 58, 10, 95, 115, 101, 99, 116, 105, 111, 110, 61, > 48, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, > 105, 99, 95, 105, 115, 95, 98, 101, 116, 97, 41, 125, 32, 115, 116, 114, > 98, 101, 116, 97, 61, 34, 32, 40, 98, 101, 116, 97, 41, 34, 32, 45, > 101, 108, 115, 101, 32, 115, 116, 114, 98, 101, 116, 97, 61, 34, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, > 40, 36, 95, 103, 109, 105, 99, 95, 118, 101, 114, 115, 105, 111, 110, 41, > 125, 32, 115, 116, 114, 118, 101, 114, 61, 36, 95, 103, 109, 105, 99, 95, > 118, 101, 114, 115, 105, 111, 110, 32, 45, 101, 108, 115, 101, 32, 115, 116, > 114, 118, 101, 114, 61, 64, 123, 45, 115, 116, 114, 118, 101, 114, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, > 32, 34, 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, > 32, 80, 85, 66, 76, 73, 67, 32, 92, 34, 45, 47, 47, 87, 51, 67, > 47, 47, 68, 84, 68, 32, 88, 72, 84, 77, 76, 32, 49, 46, 48, 32, > 84, 114, 97, 110, 115, 105, 116, 105, 111, 110, 97, 108, 47, 47, 69, 78, > 92, 34, 32, 92, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, > 119, 51, 46, 111, 114, 103, 47, 84, 82, 47, 120, 104, 116, 109, 108, 49, > 47, 68, 84, 68, 47, 120, 104, 116, 109, 108, 49, 45, 116, 114, 97, 110, > 115, 105, 116, 105, 111, 110, 97, 108, 46, 100, 116, 100, 92, 34, 62, 10, > 92, 110, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, 101, 32, 102, > 105, 108, 101, 61, 92, 34, 104, 101, 97, 100, 101, 114, 46, 104, 116, 109, > 108, 92, 34, 32, 45, 45, 62, 10, 92, 110, 60, 108, 105, 110, 107, 32, > 104, 114, 101, 102, 61, 92, 34, 115, 116, 121, 108, 101, 46, 99, 115, 115, > 92, 34, 32, 114, 101, 108, 61, 92, 34, 115, 116, 121, 108, 101, 115, 104, > 101, 101, 116, 92, 34, 32, 116, 121, 112, 101, 61, 92, 34, 116, 101, 120, > 116, 47, 99, 115, 115, 92, 34, 62, 10, 92, 110, 60, 100, 105, 118, 32, > 105, 100, 61, 92, 34, 98, 108, 111, 99, 95, 111, 112, 116, 105, 111, 110, > 92, 34, 62, 10, 92, 110, 60, 100, 105, 118, 32, 105, 100, 61, 92, 34, > 116, 111, 112, 95, 114, 111, 117, 103, 101, 92, 34, 62, 60, 100, 105, 118, > 32, 105, 100, 61, 92, 34, 116, 101, 120, 116, 95, 116, 111, 112, 92, 34, > 62, 82, 101, 102, 101, 114, 101, 110, 99, 101, 60, 47, 100, 105, 118, 62, > 60, 47, 100, 105, 118, 62, 10, 92, 110, 60, 100, 105, 118, 32, 105, 100, > 61, 92, 34, 99, 101, 110, 116, 101, 114, 92, 34, 62, 60, 100, 105, 118, > 32, 105, 100, 61, 92, 34, 116, 101, 120, 116, 95, 99, 101, 110, 116, 114, > 101, 95, 105, 110, 116, 114, 111, 92, 34, 62, 10, 92, 110, 60, 104, 50, > 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 98, > 114, 111, 119, 110, 92, 34, 62, 60, 117, 62, 80, 114, 101, 97, 109, 98, > 108, 101, 60, 47, 117, 62, 60, 47, 102, 111, 110, 116, 62, 60, 47, 104, > 50, 62, 10, 92, 110, 60, 117, 108, 62, 10, 92, 110, 60, 108, 105, 62, > 84, 104, 105, 115, 32, 100, 111, 99, 117, 109, 101, 110, 116, 32, 105, 115, > 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 101, 100, 32, 117, 110, 100, > 101, 114, 32, 116, 104, 101, 32, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 103, 110, 117, 46, > 111, 114, 103, 47, 108, 105, 99, 101, 110, 115, 101, 115, 47, 102, 100, 108, > 45, 49, 46, 51, 46, 116, 120, 116, 92, 34, 62, 71, 78, 85, 32, 70, > 114, 101, 101, 32, 68, 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, > 110, 32, 76, 105, 99, 101, 110, 115, 101, 60, 47, 97, 62, 44, 32, 118, > 101, 114, 115, 105, 111, 110, 32, 49, 46, 51, 46, 60, 47, 108, 105, 62, > 10, 92, 110, 60, 108, 105, 62, 65, 32, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 103, 109, 105, 99, 95, 114, 101, 102, 101, 114, 101, 110, 99, > 101, 46, 112, 100, 102, 92, 34, 62, 46, 112, 100, 102, 32, 118, 101, 114, > 115, 105, 111, 110, 60, 47, 97, 62, 32, 111, 102, 32, 116, 104, 105, 115, > 32, 100, 111, 99, 117, 109, 101, 110, 116, 32, 105, 115, 32, 97, 118, 97, > 105, 108, 97, 98, 108, 101, 46, 60, 47, 108, 105, 62, 10, 92, 110, 60, > 108, 105, 62, 87, 101, 32, 97, 108, 115, 111, 32, 115, 117, 103, 103, 101, > 115, 116, 32, 121, 111, 117, 32, 114, 101, 97, 100, 32, 60, 97, 32, 104, > 114, 101, 102, 61, 92, 34, 116, 117, 116, 111, 114, 105, 97, 108, 47, 105, > 110, 100, 101, 120, 46, 115, 104, 116, 109, 108, 92, 34, 62, 116, 104, 101, > 115, 101, 32, 116, 117, 116, 111, 114, 105, 97, 108, 32, 112, 97, 103, 101, > 115, 60, 47, 97, 62, 32, 119, 104, 105, 99, 104, 32, 112, 114, 111, 118, > 105, 100, 101, 32, 97, 32, 109, 111, 114, 101, 32, 117, 115, 101, 114, 45, > 102, 114, 105, 101, 110, 100, 108, 121, 32, 101, 120, 112, 108, 97, 110, 97, > 116, 105, 111, 110, 32, 111, 102, 32, 109, 111, 115, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 98, 97, 115, 105, > 99, 115, 46, 60, 47, 108, 105, 62, 10, 92, 110, 60, 47, 117, 108, 62, > 10, 92, 110, 60, 104, 50, 62, 60, 97, 32, 105, 100, 61, 92, 34, 116, > 111, 99, 92, 34, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, > 61, 92, 34, 98, 114, 111, 119, 110, 92, 34, 62, 60, 117, 62, 84, 97, > 98, 108, 101, 32, 111, 102, 32, 99, 111, 110, 116, 101, 110, 116, 115, 60, > 47, 117, 62, 60, 47, 102, 111, 110, 116, 62, 60, 47, 97, 62, 60, 47, > 104, 50, 62, 10, 92, 110, 60, 117, 108, 62, 10, 92, 110, 60, 108, 105, > 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, > 105, 111, 110, 48, 92, 34, 62, 86, 101, 114, 115, 105, 111, 110, 60, 47, > 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, > 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, > 49, 92, 34, 62, 85, 115, 97, 103, 101, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 117, 108, 62, 10, 92, 110, 60, 108, 105, 62, > 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, > 111, 110, 50, 92, 34, 62, 79, 118, 101, 114, 97, 108, 108, 32, 99, 111, > 110, 116, 101, 120, 116, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, > 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, > 115, 101, 99, 116, 105, 111, 110, 51, 92, 34, 62, 73, 109, 97, 103, 101, > 32, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 32, 97, 110, 100, 32, > 116, 101, 114, 109, 105, 110, 111, 108, 111, 103, 121, 60, 47, 97, 62, 60, > 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, > 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, 52, 92, 34, > 62, 73, 116, 101, 109, 115, 32, 111, 102, 32, 97, 32, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, 110, 101, 60, > 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, > 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, > 110, 53, 92, 34, 62, 73, 110, 112, 117, 116, 32, 100, 97, 116, 97, 32, > 105, 116, 101, 109, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, > 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, > 115, 101, 99, 116, 105, 111, 110, 54, 92, 34, 62, 67, 111, 109, 109, 97, > 110, 100, 32, 105, 116, 101, 109, 115, 32, 97, 110, 100, 32, 115, 101, 108, > 101, 99, 116, 105, 111, 110, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, > 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 115, 101, 99, 116, 105, 111, 110, 55, 92, 34, 62, 73, 110, 112, > 117, 116, 47, 111, 117, 116, 112, 117, 116, 32, 112, 114, 111, 112, 101, 114, > 116, 105, 101, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, > 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, > 101, 99, 116, 105, 111, 110, 56, 92, 34, 62, 83, 117, 98, 115, 116, 105, > 116, 117, 116, 105, 111, 110, 32, 114, 117, 108, 101, 115, 60, 47, 97, 62, > 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, > 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, 57, 92, > 34, 62, 77, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 60, 47, 97, 62, 60, 47, > 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, > 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, 49, 48, 92, 34, > 62, 73, 109, 97, 103, 101, 32, 97, 110, 100, 32, 100, 97, 116, 97, 32, > 118, 105, 101, 119, 101, 114, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, > 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 115, 101, 99, 116, 105, 111, 110, 49, 49, 92, 34, 62, 65, 100, > 100, 105, 110, 103, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, > 60, 47, 117, 108, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, > 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, 49, 50, > 92, 34, 62, 76, 105, 115, 116, 32, 111, 102, 32, 99, 111, 109, 109, 97, > 110, 100, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, > 117, 108, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, > 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, > 92, 34, 62, 71, 108, 111, 98, 97, 108, 32, 111, 112, 116, 105, 111, 110, > 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, > 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 50, 92, 34, 62, 73, 110, 112, 117, 116, 115, > 47, 111, 117, 116, 112, 117, 116, 115, 60, 47, 97, 62, 60, 47, 108, 105, > 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, > 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 51, 92, 34, > 62, 76, 105, 115, 116, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, > 111, 110, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, > 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, > 115, 101, 99, 116, 105, 111, 110, 52, 92, 34, 62, 77, 97, 116, 104, 101, > 109, 97, 116, 105, 99, 97, 108, 32, 111, 112, 101, 114, 97, 116, 111, 114, > 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, > 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 53, 92, 34, 62, 86, 97, 108, 117, 101, 115, > 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 60, 47, 97, > 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, > 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, > 111, 110, 54, 92, 34, 62, 67, 111, 108, 111, 114, 115, 32, 109, 97, 110, > 105, 112, 117, 108, 97, 116, 105, 111, 110, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 55, 92, > 34, 62, 71, 101, 111, 109, 101, 116, 114, 121, 32, 109, 97, 110, 105, 112, > 117, 108, 97, 116, 105, 111, 110, 60, 47, 97, 62, 60, 47, 108, 105, 62, > 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 56, 92, 34, 62, > 70, 105, 108, 116, 101, 114, 105, 110, 103, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 57, 92, > 34, 62, 70, 101, 97, 116, 117, 114, 101, 115, 32, 101, 120, 116, 114, 97, > 99, 116, 105, 111, 110, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, > 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, > 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, 48, 92, 34, 62, 73, > 109, 97, 103, 101, 32, 100, 114, 97, 119, 105, 110, 103, 60, 47, 97, 62, > 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, > 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, > 110, 49, 49, 92, 34, 62, 77, 97, 116, 114, 105, 120, 32, 99, 111, 109, > 112, 117, 116, 97, 116, 105, 111, 110, 60, 47, 97, 62, 60, 47, 108, 105, > 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, > 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, 50, 92, > 34, 62, 51, 100, 32, 114, 101, 110, 100, 101, 114, 105, 110, 103, 60, 47, > 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, > 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, > 105, 111, 110, 49, 51, 92, 34, 62, 80, 114, 111, 103, 114, 97, 109, 32, > 99, 111, 110, 116, 114, 111, 108, 115, 60, 47, 97, 62, 60, 47, 108, 105, > 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, > 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, 52, 92, > 34, 62, 65, 114, 114, 97, 121, 115, 44, 116, 105, 108, 101, 115, 32, 97, > 110, 100, 32, 102, 114, 97, 109, 101, 115, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, 53, > 92, 34, 62, 65, 114, 116, 105, 115, 116, 105, 99, 60, 47, 97, 62, 60, > 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, > 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, > 49, 54, 92, 34, 62, 87, 97, 114, 112, 105, 110, 103, 115, 60, 47, 97, > 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, > 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, > 111, 110, 49, 55, 92, 34, 62, 68, 101, 103, 114, 97, 100, 97, 116, 105, > 111, 110, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, > 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 49, 56, 92, 34, 62, 66, 108, 101, > 110, 100, 105, 110, 103, 32, 97, 110, 100, 32, 102, 97, 100, 105, 110, 103, > 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, > 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 49, 57, 92, 34, 62, 73, 109, 97, 103, 101, 32, > 115, 101, 113, 117, 101, 110, 99, 101, 115, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 50, 48, > 92, 34, 62, 73, 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 100, > 101, 109, 111, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, > 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, > 117, 98, 115, 101, 99, 116, 105, 111, 110, 50, 49, 92, 34, 62, 80, 73, > 78, 75, 45, 108, 105, 98, 114, 97, 114, 121, 32, 111, 112, 101, 114, 97, > 116, 111, 114, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, > 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, > 117, 98, 115, 101, 99, 116, 105, 111, 110, 50, 50, 92, 34, 62, 67, 111, > 110, 118, 101, 110, 105, 101, 110, 99, 101, 32, 102, 117, 110, 99, 116, 105, > 111, 110, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, > 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 50, 51, 92, 34, 62, 67, 111, 109, > 109, 97, 110, 100, 115, 32, 115, 104, 111, 114, 116, 99, 117, 116, 115, 60, > 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 47, 117, 108, 62, > 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 115, 101, 99, 116, 105, 111, 110, 49, 51, 92, 34, 62, 69, 120, > 97, 109, 112, 108, 101, 115, 32, 111, 102, 32, 117, 115, 101, 60, 47, 97, > 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 47, 117, 108, 62, 10, 92, > 110, 60, 97, 32, 105, 100, 61, 92, 34, 115, 101, 99, 116, 105, 111, 110, > 48, 92, 34, 62, 60, 104, 50, 62, 60, 102, 111, 110, 116, 32, 99, 111, > 108, 111, 114, 61, 92, 34, 98, 114, 111, 119, 110, 92, 34, 62, 60, 117, > 62, 86, 101, 114, 115, 105, 111, 110, 60, 47, 117, 62, 60, 47, 102, 111, > 110, 116, 62, 60, 47, 104, 50, 62, 60, 47, 97, 62, 10, 92, 110, 60, > 112, 114, 101, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, > 92, 34, 98, 108, 117, 101, 92, 34, 62, 103, 109, 105, 99, 60, 47, 102, > 111, 110, 116, 62, 58, 32, 71, 82, 69, 89, 67, 39, 115, 32, 77, 97, > 103, 105, 99, 32, 102, 111, 114, 32, 73, 109, 97, 103, 101, 32, 67, 111, > 109, 112, 117, 116, 105, 110, 103, 46, 10, 92, 110, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 86, 101, 114, 115, 105, 111, 110, 32, 34, 36, 115, > 116, 114, 118, 101, 114, 36, 115, 116, 114, 98, 101, 116, 97, 34, 44, 32, > 67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 50, 48, > 48, 56, 45, 50, 48, 49, 52, 44, 32, 68, 97, 118, 105, 100, 32, 84, > 115, 99, 104, 117, 109, 112, 101, 114, 108, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 40, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 104, > 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, > 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 92, 34, 62, 104, 116, 116, > 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, > 111, 114, 103, 101, 46, 110, 101, 116, 60, 47, 97, 62, 41, 10, 92, 110, > 60, 47, 112, 114, 101, 62, 10, 34, 10, 45, 118, 32, 45, 10, 45, 95, > 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 85, 115, > 97, 103, 101, 34, 10, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, > 111, 110, 95, 104, 116, 109, 108, 32, 58, 10, 95, 115, 101, 99, 116, 105, > 111, 110, 61, 123, 36, 95, 115, 101, 99, 116, 105, 111, 110, 43, 49, 125, > 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 60, 104, 50, 62, > 60, 97, 32, 105, 100, 61, 92, 34, 115, 101, 99, 116, 105, 111, 110, 34, > 36, 95, 115, 101, 99, 116, 105, 111, 110, 34, 92, 34, 62, 60, 102, 111, > 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 98, 114, 111, 119, 110, > 92, 34, 62, 60, 117, 62, 36, 49, 60, 47, 117, 62, 60, 47, 102, 111, > 110, 116, 62, 60, 47, 97, 62, 34, 92, 10, 34, 38, 110, 98, 115, 112, > 59, 38, 110, 98, 115, 112, 59, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 116, 111, 99, 92, 34, 62, 60, 105, 109, 103, 32, 115, 114, 99, > 61, 92, 34, 105, 109, 103, 47, 98, 97, 99, 107, 95, 116, 111, 112, 46, > 112, 110, 103, 92, 34, 62, 60, 47, 105, 109, 103, 62, 60, 47, 97, 62, > 60, 47, 104, 50, 62, 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, > 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 95, 104, 116, 109, 108, > 32, 58, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 60, 112, > 114, 101, 62, 36, 42, 60, 47, 112, 114, 101, 62, 34, 10, 45, 118, 32, > 45, 10, 95, 104, 101, 108, 112, 95, 102, 111, 111, 116, 101, 114, 95, 104, > 116, 109, 108, 32, 58, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, > 34, 10, 92, 110, 60, 98, 114, 47, 62, 60, 98, 62, 60, 102, 111, 110, > 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 98, 114, 111, 119, 110, 92, > 34, 62, 42, 42, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 101, 115, 32, 119, 105, 116, 104, 32, 65, 66, 83, 79, 76, 85, 84, 69, > 76, 89, 32, 78, 79, 32, 87, 65, 82, 82, 65, 78, 84, 89, 59, 32, > 102, 111, 114, 32, 100, 101, 116, 97, 105, 108, 115, 32, 118, 105, 115, 105, > 116, 32, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 104, 116, 116, 112, > 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 92, 34, 62, 104, 116, 116, 112, 58, 47, > 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, > 101, 46, 110, 101, 116, 32, 42, 42, 60, 47, 97, 62, 60, 47, 102, 111, > 110, 116, 62, 60, 47, 98, 62, 10, 92, 110, 60, 47, 116, 116, 62, 10, > 92, 110, 60, 47, 100, 105, 118, 62, 10, 92, 110, 60, 47, 100, 105, 118, > 62, 10, 92, 110, 60, 100, 105, 118, 32, 105, 100, 61, 92, 34, 102, 111, > 111, 116, 101, 114, 92, 34, 62, 60, 105, 109, 103, 32, 115, 114, 99, 61, > 92, 34, 105, 109, 97, 103, 101, 115, 47, 102, 111, 111, 116, 101, 114, 46, > 106, 112, 103, 92, 34, 32, 47, 62, 60, 47, 100, 105, 118, 62, 10, 92, > 110, 60, 47, 100, 105, 118, 62, 10, 92, 110, 60, 33, 45, 45, 35, 105, > 110, 99, 108, 117, 100, 101, 32, 102, 105, 108, 101, 61, 92, 34, 99, 111, > 112, 121, 114, 105, 103, 104, 116, 46, 104, 116, 109, 108, 92, 34, 32, 45, > 45, 62, 10, 92, 110, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, > 101, 32, 102, 105, 108, 101, 61, 92, 34, 102, 111, 111, 116, 101, 114, 46, > 104, 116, 109, 108, 92, 34, 32, 45, 45, 62, 10, 34, 10, 45, 118, 32, > 45, 10, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, 97, > 115, 99, 105, 105, 32, 58, 10, 45, 95, 95, 104, 101, 108, 112, 95, 104, > 101, 97, 100, 101, 114, 95, 97, 115, 99, 105, 105, 10, 95, 115, 101, 99, > 116, 105, 111, 110, 61, 48, 32, 95, 115, 112, 97, 99, 101, 49, 61, 34, > 34, 32, 95, 115, 112, 97, 99, 101, 50, 61, 34, 32, 34, 10, 45, 95, > 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 85, 115, > 97, 103, 101, 34, 10, 95, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, > 101, 114, 95, 97, 115, 99, 105, 105, 32, 58, 10, 45, 105, 102, 32, 123, > 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, 95, 105, 115, 95, 98, > 101, 116, 97, 41, 125, 32, 115, 116, 114, 98, 101, 116, 97, 61, 34, 32, > 40, 98, 101, 116, 97, 41, 34, 32, 45, 101, 108, 115, 101, 32, 115, 116, > 114, 98, 101, 116, 97, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, > 95, 118, 101, 114, 115, 105, 111, 110, 41, 125, 32, 115, 116, 114, 118, 101, > 114, 61, 36, 95, 103, 109, 105, 99, 95, 118, 101, 114, 115, 105, 111, 110, > 32, 45, 101, 108, 115, 101, 32, 115, 116, 114, 118, 101, 114, 61, 64, 123, > 45, 115, 116, 114, 118, 101, 114, 125, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 10, 92, 110, 32, 103, > 109, 105, 99, 58, 32, 71, 82, 69, 89, 67, 39, 115, 32, 77, 97, 103, > 105, 99, 32, 102, 111, 114, 32, 73, 109, 97, 103, 101, 32, 67, 111, 109, > 112, 117, 116, 105, 110, 103, 46, 10, 92, 110, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 86, 101, 114, 115, 105, 111, 110, 32, 34, 36, 115, > 116, 114, 118, 101, 114, 36, 115, 116, 114, 98, 101, 116, 97, 34, 44, 32, > 67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 50, 48, > 48, 56, 45, 50, 48, 49, 52, 44, 32, 68, 97, 118, 105, 100, 32, 84, > 115, 99, 104, 117, 109, 112, 101, 114, 108, 101, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 32, 40, 104, 116, 116, 112, 58, 47, 47, 103, 109, > 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, > 101, 116, 41, 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, > 115, 101, 99, 116, 105, 111, 110, 95, 97, 115, 99, 105, 105, 32, 58, 10, > 95, 115, 101, 99, 116, 105, 111, 110, 61, 123, 36, 95, 115, 101, 99, 116, > 105, 111, 110, 43, 49, 125, 10, 123, 110, 97, 114, 103, 40, 123, 39, 34, > 36, 49, 34, 39, 125, 41, 125, 44, 49, 44, 49, 44, 49, 44, 123, 39, > 45, 39, 125, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, > 110, 32, 34, 36, 95, 115, 101, 99, 116, 105, 111, 110, 34, 46, 32, 36, > 49, 34, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 34, 36, 123, > 95, 115, 112, 97, 99, 101, 123, 110, 97, 114, 103, 40, 123, 39, 36, 95, > 115, 101, 99, 116, 105, 111, 110, 39, 125, 41, 125, 125, 64, 123, 45, 49, > 44, 116, 125, 34, 92, 110, 34, 10, 45, 118, 32, 45, 10, 45, 114, 109, > 91, 45, 49, 93, 10, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, > 114, 97, 112, 104, 95, 97, 115, 99, 105, 105, 32, 58, 10, 45, 118, 32, > 43, 10, 45, 101, 91, 93, 32, 34, 36, 42, 34, 10, 45, 118, 32, 45, > 10, 95, 104, 101, 108, 112, 95, 102, 111, 111, 116, 101, 114, 95, 97, 115, > 99, 105, 105, 32, 58, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, > 34, 32, 42, 42, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 101, 115, 32, 119, 105, 116, 104, 32, 65, 66, 83, 79, 76, 85, 84, 69, > 76, 89, 32, 78, 79, 32, 87, 65, 82, 82, 65, 78, 84, 89, 59, 32, > 102, 111, 114, 32, 100, 101, 116, 97, 105, 108, 115, 32, 118, 105, 115, 105, > 116, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, > 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 32, 42, 42, > 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, 117, 115, 97, > 103, 101, 32, 58, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, > 103, 114, 97, 112, 104, 32, 34, 32, 103, 109, 105, 99, 32, 91, 99, 111, > 109, 109, 97, 110, 100, 49, 32, 91, 97, 114, 103, 49, 95, 49, 44, 97, > 114, 103, 49, 95, 50, 44, 46, 46, 93, 93, 32, 46, 46, 32, 91, 99, > 111, 109, 109, 97, 110, 100, 78, 32, 91, 97, 114, 103, 78, 95, 49, 44, > 97, 114, 103, 78, 95, 50, 44, 46, 46, 93, 93, 10, 92, 110, 10, 92, > 110, 32, 39, 103, 109, 105, 99, 39, 32, 105, 115, 32, 97, 110, 32, 111, > 112, 101, 110, 45, 115, 111, 117, 114, 99, 101, 32, 105, 110, 116, 101, 114, > 112, 114, 101, 116, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 71, 92, > 52, 55, 77, 73, 67, 32, 108, 97, 110, 103, 117, 97, 103, 101, 44, 32, > 97, 32, 115, 99, 114, 105, 112, 116, 45, 98, 97, 115, 101, 100, 32, 112, > 114, 111, 103, 114, 97, 109, 109, 105, 110, 103, 10, 92, 110, 32, 32, 108, > 97, 110, 103, 117, 97, 103, 101, 32, 100, 101, 100, 105, 99, 97, 116, 101, > 100, 32, 116, 111, 32, 100, 101, 115, 105, 103, 110, 32, 105, 109, 97, 103, > 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, > 101, 108, 105, 110, 101, 115, 46, 32, 73, 116, 32, 99, 97, 110, 32, 98, > 101, 32, 117, 115, 101, 100, 32, 116, 111, 32, 99, 111, 110, 118, 101, 114, > 116, 44, 10, 92, 110, 32, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, > 101, 44, 32, 102, 105, 108, 116, 101, 114, 32, 97, 110, 100, 32, 118, 105, > 115, 117, 97, 108, 105, 122, 101, 32, 100, 97, 116, 97, 115, 101, 116, 115, > 32, 109, 97, 100, 101, 32, 111, 102, 32, 111, 110, 101, 32, 111, 114, 32, > 115, 101, 118, 101, 114, 97, 108, 32, 49, 100, 47, 50, 100, 32, 111, 114, > 32, 51, 100, 32, 109, 117, 108, 116, 105, 45, 10, 92, 110, 32, 32, 115, > 112, 101, 99, 116, 114, 97, 108, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 92, 110, 10, 92, 110, 32, 84, 104, 105, 115, 32, 100, 111, 99, 117, 109, > 101, 110, 116, 97, 116, 105, 111, 110, 32, 112, 114, 111, 112, 111, 115, 101, > 115, 32, 97, 32, 99, 111, 109, 112, 108, 101, 116, 101, 32, 100, 101, 115, > 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, > 71, 92, 52, 55, 77, 73, 67, 32, 108, 97, 110, 103, 117, 97, 103, 101, > 32, 98, 97, 115, 105, 99, 115, 32, 97, 110, 100, 32, 114, 117, 108, 101, > 115, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, > 111, 110, 32, 34, 79, 118, 101, 114, 97, 108, 108, 32, 99, 111, 110, 116, > 101, 120, 116, 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, > 103, 114, 97, 112, 104, 32, 34, 32, 32, 45, 32, 65, 116, 32, 97, 110, > 121, 32, 116, 105, 109, 101, 44, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 109, 97, 110, 97, 103, 101, 115, 32, 111, 110, 101, 32, 108, 105, 115, 116, > 32, 111, 102, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 40, 97, 110, > 100, 32, 111, 112, 116, 105, 111, 110, 97, 108, 108, 121, 32, 110, 97, 109, > 101, 100, 41, 32, 112, 105, 120, 101, 108, 45, 98, 97, 115, 101, 100, 10, > 92, 110, 32, 32, 32, 32, 32, 105, 109, 97, 103, 101, 115, 44, 32, 101, > 110, 116, 105, 114, 101, 108, 121, 32, 115, 116, 111, 114, 101, 100, 32, 105, > 110, 32, 99, 111, 109, 112, 117, 116, 101, 114, 32, 109, 101, 109, 111, 114, > 121, 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, 32, 102, 105, 114, > 115, 116, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 108, 105, 115, 116, 32, 104, 97, 115, 32, 105, 110, 100, 105, 99, 101, 32, > 39, 48, 39, 32, 97, 110, 100, 32, 105, 115, 32, 100, 101, 110, 111, 116, > 101, 100, 32, 98, 121, 32, 39, 91, 48, 93, 39, 46, 32, 84, 104, 101, > 32, 115, 101, 99, 111, 110, 100, 32, 105, 109, 97, 103, 101, 32, 111, 102, > 10, 92, 110, 32, 32, 32, 32, 32, 116, 104, 101, 32, 108, 105, 115, 116, > 32, 105, 115, 32, 100, 101, 110, 111, 116, 101, 100, 32, 98, 121, 32, 39, > 91, 49, 93, 39, 44, 32, 116, 104, 101, 32, 116, 104, 105, 114, 100, 32, > 98, 121, 32, 39, 91, 50, 93, 39, 32, 97, 110, 100, 32, 115, 111, 32, > 111, 110, 46, 10, 92, 110, 32, 32, 45, 32, 78, 101, 103, 97, 116, 105, > 118, 101, 32, 105, 110, 100, 105, 99, 101, 115, 32, 97, 114, 101, 32, 116, > 114, 101, 97, 116, 101, 100, 32, 105, 110, 32, 97, 32, 112, 101, 114, 105, > 111, 100, 105, 99, 32, 119, 97, 121, 58, 32, 39, 91, 45, 49, 93, 39, > 32, 114, 101, 102, 101, 114, 115, 32, 116, 111, 32, 116, 104, 101, 32, 108, > 97, 115, 116, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, > 10, 92, 110, 32, 32, 32, 32, 32, 108, 105, 115, 116, 44, 32, 39, 91, > 45, 50, 93, 39, 32, 116, 111, 32, 116, 104, 101, 32, 112, 101, 110, 117, > 108, 116, 105, 109, 97, 116, 101, 32, 111, 110, 101, 44, 32, 101, 116, 99, > 46, 32, 84, 104, 117, 115, 44, 32, 105, 102, 32, 116, 104, 101, 32, 108, > 105, 115, 116, 32, 104, 97, 115, 32, 52, 32, 105, 109, 97, 103, 101, 115, > 44, 32, 39, 91, 49, 93, 39, 32, 97, 110, 100, 32, 39, 91, 45, 51, > 93, 39, 10, 92, 110, 32, 32, 32, 32, 32, 98, 111, 116, 104, 32, 100, > 101, 115, 105, 103, 110, 97, 116, 101, 32, 116, 104, 101, 32, 115, 101, 99, > 111, 110, 100, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, > 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 45, 32, 65, 32, 110, > 97, 109, 101, 100, 32, 105, 109, 97, 103, 101, 32, 109, 97, 121, 32, 98, > 101, 32, 100, 101, 110, 111, 116, 101, 100, 32, 98, 121, 32, 39, 91, 110, > 97, 109, 101, 93, 39, 32, 105, 102, 32, 39, 110, 97, 109, 101, 39, 32, > 117, 115, 101, 115, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 32, > 115, 101, 116, 32, 91, 97, 45, 122, 65, 45, 90, 48, 45, 57, 95, 93, > 32, 97, 110, 100, 10, 92, 110, 32, 32, 32, 32, 32, 100, 111, 101, 115, > 32, 110, 111, 116, 32, 115, 116, 97, 114, 116, 32, 119, 105, 116, 104, 32, > 97, 32, 110, 117, 109, 98, 101, 114, 46, 32, 73, 109, 97, 103, 101, 32, > 110, 97, 109, 101, 115, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 116, > 32, 111, 114, 32, 114, 101, 97, 115, 115, 105, 103, 110, 101, 100, 32, 97, > 116, 32, 97, 110, 121, 32, 109, 111, 109, 101, 110, 116, 32, 100, 117, 114, > 105, 110, 103, 10, 92, 110, 32, 32, 32, 32, 32, 116, 104, 101, 32, 112, > 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 32, 40, 115, 101, 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, > 32, 39, 45, 110, 97, 109, 101, 39, 32, 97, 110, 100, 32, 39, 45, 105, > 110, 112, 117, 116, 39, 41, 46, 10, 92, 110, 32, 32, 45, 32, 71, 92, > 52, 55, 77, 73, 67, 32, 100, 101, 102, 105, 110, 101, 115, 32, 97, 32, > 115, 101, 116, 32, 111, 102, 32, 118, 97, 114, 105, 111, 117, 115, 32, 99, > 111, 109, 109, 97, 110, 100, 115, 32, 97, 110, 100, 32, 115, 117, 98, 115, > 116, 105, 116, 117, 116, 105, 111, 110, 32, 109, 101, 99, 104, 97, 110, 105, > 115, 109, 115, 32, 116, 111, 32, 97, 108, 108, 111, 119, 32, 116, 104, 101, > 32, 100, 101, 115, 105, 103, 110, 10, 92, 110, 32, 32, 32, 32, 32, 111, > 102, 32, 99, 111, 109, 112, 108, 101, 120, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 115, 32, 109, 97, 110, 97, 103, 105, 110, 103, 32, 116, 104, 105, > 115, 32, 108, 105, 115, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, > 44, 32, 105, 110, 32, 97, 32, 118, 101, 114, 121, 32, 102, 108, 101, 120, > 105, 98, 108, 101, 32, 119, 97, 121, 58, 10, 92, 110, 32, 32, 32, 32, > 32, 89, 111, 117, 32, 99, 97, 110, 32, 105, 110, 115, 101, 114, 116, 32, > 111, 114, 32, 114, 101, 109, 111, 118, 101, 32, 105, 109, 97, 103, 101, 115, > 32, 105, 110, 32, 116, 104, 101, 32, 108, 105, 115, 116, 44, 32, 114, 101, > 97, 114, 114, 97, 110, 103, 101, 32, 105, 109, 97, 103, 101, 32, 105, 110, > 100, 105, 99, 101, 115, 44, 32, 112, 114, 111, 99, 101, 115, 115, 32, 105, > 109, 97, 103, 101, 115, 10, 92, 110, 32, 32, 32, 32, 32, 40, 105, 110, > 100, 105, 118, 105, 100, 117, 97, 108, 108, 121, 32, 111, 114, 32, 97, 115, > 32, 97, 32, 103, 114, 111, 117, 112, 41, 44, 32, 109, 101, 114, 103, 101, > 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, 97, 32, 116, 111, 103, 101, > 116, 104, 101, 114, 32, 97, 110, 100, 32, 111, 117, 116, 112, 117, 116, 32, > 105, 109, 97, 103, 101, 32, 102, 105, 108, 101, 115, 46, 10, 92, 110, 32, > 32, 45, 32, 83, 117, 99, 104, 32, 97, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 32, 99, 97, 110, 32, 98, 101, 32, 119, 114, 105, 116, 116, 101, > 110, 32, 105, 116, 115, 101, 108, 102, 32, 97, 115, 32, 97, 32, 99, 117, > 115, 116, 111, 109, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 115, 116, 111, 114, 97, 98, 108, 101, 32, 105, 110, > 32, 97, 32, 99, 117, 115, 116, 111, 109, 10, 92, 110, 32, 32, 32, 32, > 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 102, 105, 108, 101, 44, 32, > 119, 104, 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 114, 101, 45, > 117, 115, 101, 100, 32, 97, 102, 116, 101, 114, 119, 97, 114, 100, 115, 32, > 105, 110, 32, 97, 110, 111, 116, 104, 101, 114, 32, 98, 105, 103, 103, 101, > 114, 32, 112, 105, 112, 101, 108, 105, 110, 101, 32, 105, 102, 32, 110, 101, > 99, 101, 115, 115, 97, 114, 121, 46, 34, 10, 45, 95, 104, 101, 108, 112, > 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 73, 109, 97, 103, 101, 32, > 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 32, 97, 110, 100, 32, 116, > 101, 114, 109, 105, 110, 111, 108, 111, 103, 121, 34, 10, 45, 95, 104, 101, > 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, 32, 32, > 45, 32, 73, 110, 32, 71, 92, 52, 55, 77, 73, 67, 44, 32, 97, 110, > 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 109, 111, 100, 101, 108, 101, > 100, 32, 97, 115, 32, 97, 32, 49, 100, 44, 32, 50, 100, 44, 32, 51, > 100, 32, 111, 114, 32, 52, 100, 32, 97, 114, 114, 97, 121, 32, 111, 102, > 32, 115, 99, 97, 108, 97, 114, 32, 118, 97, 108, 117, 101, 115, 44, 32, > 117, 110, 105, 102, 111, 114, 109, 108, 121, 10, 92, 110, 32, 32, 32, 32, > 32, 100, 105, 115, 99, 114, 101, 116, 105, 122, 101, 100, 32, 111, 110, 32, > 97, 32, 114, 101, 99, 116, 97, 110, 103, 117, 108, 97, 114, 47, 112, 97, > 114, 97, 108, 108, 101, 108, 101, 112, 105, 112, 101, 100, 105, 99, 32, 100, > 111, 109, 97, 105, 110, 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, > 32, 102, 111, 117, 114, 32, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, > 32, 111, 102, 32, 116, 104, 101, 115, 101, 32, 97, 114, 114, 97, 121, 115, > 32, 97, 114, 101, 32, 114, 101, 115, 112, 101, 99, 116, 105, 118, 101, 108, > 121, 32, 100, 101, 110, 111, 116, 101, 100, 32, 98, 121, 58, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 39, 119, 105, 100, 116, 104, 39, 44, 32, 116, > 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 32, 99, 111, 108, 117, 109, 110, 115, 32, 40, 115, 105, 122, 101, > 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 39, 120, 39, 45, 97, > 120, 105, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 104, > 101, 105, 103, 104, 116, 39, 44, 32, 116, 104, 101, 32, 110, 117, 109, 98, > 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 114, 111, 119, 115, > 32, 40, 115, 105, 122, 101, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, > 32, 39, 121, 39, 45, 97, 120, 105, 115, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 100, 101, 112, 116, 104, 39, 44, 32, 116, 104, 101, > 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 32, 115, 108, 105, 99, 101, 115, 32, 40, 115, 105, 122, 101, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 39, 122, 39, 45, 97, 120, 105, 115, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 84, 104, 101, > 32, 100, 101, 112, 116, 104, 32, 105, 115, 32, 101, 113, 117, 97, 108, 32, > 116, 111, 32, 49, 32, 102, 111, 114, 32, 117, 115, 117, 97, 108, 32, 50, > 100, 32, 99, 111, 108, 111, 114, 32, 111, 114, 32, 103, 114, 97, 121, 115, > 99, 97, 108, 101, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 39, 115, 112, 101, 99, 116, 114, 117, 109, 39, 44, > 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 40, 115, > 105, 122, 101, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 39, 99, > 39, 45, 97, 120, 105, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 84, 104, 101, 32, 115, 112, 101, 99, 116, 114, 117, 109, 32, > 105, 115, 32, 114, 101, 115, 112, 101, 99, 116, 105, 118, 101, 108, 121, 32, > 101, 113, 117, 97, 108, 32, 116, 111, 32, 51, 32, 97, 110, 100, 32, 52, > 32, 102, 111, 114, 32, 117, 115, 117, 97, 108, 32, 82, 71, 66, 32, 97, > 110, 100, 32, 82, 71, 66, 65, 32, 99, 111, 108, 111, 114, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, 114, > 101, 32, 97, 114, 101, 32, 110, 111, 32, 115, 105, 122, 101, 32, 108, 105, > 109, 105, 116, 97, 116, 105, 111, 110, 115, 32, 111, 110, 32, 101, 97, 99, > 104, 32, 105, 109, 97, 103, 101, 32, 100, 105, 109, 101, 110, 115, 105, 111, > 110, 115, 46, 32, 80, 97, 114, 116, 105, 99, 117, 108, 97, 114, 108, 121, > 44, 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 10, 92, 110, 32, 32, 32, 32, 32, 115, 108, 105, > 99, 101, 115, 32, 111, 114, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 99, 97, 110, 32, 98, 101, 32, 111, 102, 32, 97, 114, 98, 105, 116, 114, > 97, 114, 121, 32, 115, 105, 122, 101, 32, 119, 105, 116, 104, 105, 110, 32, > 116, 104, 101, 32, 108, 105, 109, 105, 116, 115, 32, 111, 102, 32, 97, 118, > 97, 105, 108, 97, 98, 108, 101, 32, 109, 101, 109, 111, 114, 121, 46, 10, > 92, 110, 32, 32, 45, 32, 84, 104, 101, 32, 119, 105, 100, 116, 104, 44, > 32, 104, 101, 105, 103, 104, 116, 32, 97, 110, 100, 32, 100, 101, 112, 116, > 104, 32, 111, 102, 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 97, 114, > 101, 32, 99, 111, 110, 115, 105, 100, 101, 114, 101, 100, 32, 97, 115, 32, > 39, 115, 112, 97, 116, 105, 97, 108, 39, 32, 100, 105, 109, 101, 110, 115, > 105, 111, 110, 115, 44, 32, 119, 104, 105, 108, 101, 32, 116, 104, 101, 10, > 92, 110, 32, 32, 32, 32, 32, 115, 112, 101, 99, 116, 114, 117, 109, 32, > 104, 97, 115, 32, 97, 32, 39, 109, 117, 108, 116, 105, 45, 115, 112, 101, > 99, 116, 114, 97, 108, 39, 32, 109, 101, 97, 110, 105, 110, 103, 46, 32, > 84, 104, 117, 115, 44, 32, 97, 32, 52, 100, 32, 105, 109, 97, 103, 101, > 32, 105, 110, 32, 71, 92, 52, 55, 77, 73, 67, 32, 115, 104, 111, 117, > 108, 100, 32, 98, 101, 32, 109, 111, 115, 116, 32, 111, 102, 116, 101, 110, > 10, 92, 110, 32, 32, 32, 32, 32, 114, 101, 103, 97, 114, 100, 101, 100, > 32, 97, 115, 32, 97, 32, 51, 100, 32, 100, 97, 116, 97, 115, 101, 116, > 32, 111, 102, 32, 109, 117, 108, 116, 105, 45, 115, 112, 101, 99, 116, 114, > 97, 108, 32, 118, 111, 120, 101, 108, 115, 46, 32, 77, 111, 115, 116, 32, > 111, 102, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, > 111, 109, 109, 97, 110, 100, 115, 32, 119, 105, 108, 108, 32, 115, 116, 105, > 99, 107, 10, 92, 110, 32, 32, 32, 32, 32, 119, 105, 116, 104, 32, 116, > 104, 105, 115, 32, 105, 100, 101, 97, 32, 40, 101, 46, 103, 46, 32, 99, > 111, 109, 109, 97, 110, 100, 32, 39, 45, 98, 108, 117, 114, 39, 32, 119, > 105, 108, 108, 32, 98, 108, 117, 114, 32, 105, 109, 97, 103, 101, 115, 32, > 111, 110, 108, 121, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 39, > 120, 121, 122, 39, 32, 97, 120, 101, 115, 41, 46, 10, 92, 110, 32, 32, > 45, 32, 65, 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, > 101, 115, 32, 111, 102, 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, > 32, 111, 102, 32, 116, 104, 101, 32, 108, 105, 115, 116, 32, 104, 97, 118, > 101, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 100, 97, 116, 97, 116, > 121, 112, 101, 46, 32, 73, 116, 32, 99, 97, 110, 32, 98, 101, 32, 111, > 110, 101, 32, 97, 109, 111, 110, 103, 58, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 39, 98, 111, 111, 108, 39, 58, 32, 83, 116, 97, 110, 100, 115, > 32, 102, 111, 114, 32, 39, 98, 111, 111, 108, 101, 97, 110, 39, 46, 32, > 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 123, > 32, 48, 61, 102, 97, 108, 115, 101, 32, 124, 32, 49, 61, 116, 114, 117, > 101, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 117, 99, > 104, 97, 114, 39, 58, 32, 83, 116, 97, 110, 100, 115, 32, 102, 111, 114, > 32, 39, 117, 110, 115, 105, 103, 110, 101, 100, 32, 99, 104, 97, 114, 39, > 46, 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, > 32, 91, 48, 44, 50, 53, 53, 93, 32, 40, 56, 98, 105, 116, 115, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 84, 104, 105, 115, > 32, 116, 121, 112, 101, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 99, > 111, 100, 105, 110, 103, 32, 105, 115, 32, 99, 111, 109, 109, 111, 110, 108, > 121, 32, 117, 115, 101, 100, 32, 116, 111, 32, 115, 116, 111, 114, 101, 32, > 56, 98, 105, 116, 115, 47, 99, 104, 97, 110, 110, 101, 108, 115, 32, 82, > 71, 66, 91, 65, 93, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 39, 99, 104, 97, 114, 39, 58, 32, 86, 97, > 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 91, 45, 49, > 50, 56, 44, 49, 50, 55, 93, 32, 40, 56, 98, 105, 116, 115, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 117, 115, 104, 111, 114, 116, > 39, 58, 32, 83, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 39, 117, > 110, 115, 105, 103, 110, 101, 100, 32, 115, 104, 111, 114, 116, 39, 46, 32, > 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 91, > 48, 44, 54, 53, 53, 51, 53, 93, 32, 40, 49, 54, 98, 105, 116, 115, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 84, 104, 105, > 115, 32, 116, 121, 112, 101, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, > 99, 111, 100, 105, 110, 103, 32, 105, 115, 32, 99, 111, 109, 109, 111, 110, > 108, 121, 32, 117, 115, 101, 100, 32, 116, 111, 32, 115, 116, 111, 114, 101, > 32, 49, 54, 98, 105, 116, 115, 47, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 82, 71, 66, 91, 65, 93, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 39, 115, 104, 111, 114, 116, 39, 58, > 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, > 91, 45, 51, 50, 55, 54, 56, 44, 51, 50, 55, 54, 55, 93, 32, 40, > 49, 54, 98, 105, 116, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 39, 117, 105, 110, 116, 39, 58, 32, 83, 116, 97, 110, 100, 115, 32, > 102, 111, 114, 32, 39, 117, 110, 115, 105, 103, 110, 101, 100, 32, 105, 110, > 116, 39, 46, 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, > 105, 115, 32, 91, 48, 44, 50, 94, 51, 50, 45, 49, 93, 32, 40, 51, > 50, 98, 105, 116, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, > 39, 105, 110, 116, 39, 58, 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, > 103, 101, 32, 105, 115, 32, 91, 45, 50, 94, 51, 49, 44, 50, 94, 51, > 49, 45, 49, 93, 32, 40, 51, 50, 32, 98, 105, 116, 115, 41, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 39, 102, 108, 111, 97, 116, 39, 58, > 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, > 91, 45, 51, 46, 52, 69, 51, 56, 44, 43, 51, 46, 52, 69, 51, 56, > 93, 32, 40, 51, 50, 98, 105, 116, 115, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 32, 84, 104, 105, 115, 32, 116, 121, 112, 101, 32, > 111, 102, 32, 99, 111, 100, 105, 110, 103, 32, 105, 115, 32, 97, 98, 108, > 101, 32, 116, 111, 32, 115, 116, 111, 114, 101, 32, 112, 105, 120, 101, 108, > 115, 32, 97, 115, 32, 51, 50, 32, 98, 105, 116, 115, 32, 102, 108, 111, > 97, 116, 45, 118, 97, 108, 117, 101, 100, 32, 110, 117, 109, 98, 101, 114, > 115, 46, 32, 84, 104, 105, 115, 32, 105, 115, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 116, 104, 101, 32, 100, 101, 102, 97, 117, 108, 116, > 32, 100, 97, 116, 97, 116, 121, 112, 101, 32, 117, 115, 101, 100, 32, 98, > 121, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 109, 97, 103, 101, 32, > 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 111, 112, 101, 114, 97, > 116, 105, 111, 110, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, > 100, 111, 117, 98, 108, 101, 39, 58, 32, 86, 97, 108, 117, 101, 32, 114, > 97, 110, 103, 101, 32, 105, 115, 32, 91, 45, 49, 46, 55, 69, 51, 48, > 56, 44, 49, 46, 55, 69, 51, 48, 56, 93, 32, 40, 54, 52, 98, 105, > 116, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 84, > 104, 105, 115, 32, 116, 121, 112, 101, 32, 111, 102, 32, 99, 111, 100, 105, > 110, 103, 32, 105, 115, 32, 97, 98, 108, 101, 32, 116, 111, 32, 115, 116, > 111, 114, 101, 32, 112, 105, 120, 101, 108, 115, 32, 97, 115, 32, 54, 52, > 32, 98, 105, 116, 115, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, 117, > 101, 100, 32, 110, 117, 109, 98, 101, 114, 115, 46, 10, 92, 110, 32, 32, > 45, 32, 67, 111, 110, 115, 105, 100, 101, 114, 105, 110, 103, 32, 112, 105, > 120, 101, 108, 32, 100, 97, 116, 97, 116, 121, 112, 101, 115, 32, 100, 105, > 102, 102, 101, 114, 101, 110, 116, 32, 116, 104, 97, 110, 32, 39, 102, 108, > 111, 97, 116, 39, 32, 105, 115, 32, 103, 101, 110, 101, 114, 97, 108, 108, > 121, 32, 117, 115, 101, 108, 101, 115, 115, 44, 32, 101, 120, 99, 101, 112, > 116, 32, 116, 111, 32, 102, 111, 114, 99, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, 47, 111, 117, 116, 112, > 117, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, 97, > 32, 116, 111, 32, 97, 32, 112, 114, 101, 115, 99, 114, 105, 98, 101, 100, > 32, 98, 105, 110, 97, 114, 121, 32, 102, 111, 114, 109, 97, 116, 46, 32, > 72, 101, 110, 99, 101, 44, 32, 109, 111, 115, 116, 32, 71, 92, 52, 55, > 77, 73, 67, 32, 105, 109, 97, 103, 101, 10, 92, 110, 32, 32, 32, 32, > 32, 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, > 103, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 97, 114, 101, 32, 97, > 118, 97, 105, 108, 97, 98, 108, 101, 32, 111, 110, 108, 121, 32, 102, 111, > 114, 32, 116, 104, 101, 32, 100, 101, 102, 97, 117, 108, 116, 32, 39, 102, > 108, 111, 97, 116, 39, 32, 112, 105, 120, 101, 108, 32, 100, 97, 116, 97, > 116, 121, 112, 101, 10, 92, 110, 32, 32, 32, 32, 32, 40, 115, 101, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, 121, 112, 101, 39, > 32, 105, 102, 32, 121, 111, 117, 32, 110, 101, 101, 100, 32, 116, 111, 32, > 115, 119, 105, 116, 99, 104, 32, 116, 111, 32, 97, 110, 111, 116, 104, 101, > 114, 32, 112, 105, 120, 101, 108, 32, 100, 97, 116, 97, 116, 121, 112, 101, > 41, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, > 111, 110, 32, 34, 73, 116, 101, 109, 115, 32, 111, 102, 32, 97, 32, 112, > 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, > 114, 97, 112, 104, 32, 34, 32, 32, 45, 32, 73, 110, 32, 71, 92, 52, > 55, 77, 73, 67, 44, 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 112, > 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 32, 105, 115, 32, 100, 101, 115, 99, 114, 105, 98, 101, 100, 32, > 97, 115, 32, 97, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 111, 102, > 32, 105, 116, 101, 109, 115, 32, 115, 101, 112, 97, 114, 97, 116, 101, 100, > 32, 98, 121, 10, 92, 110, 32, 32, 32, 32, 32, 116, 104, 101, 32, 115, > 112, 97, 99, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 32, 39, > 32, 39, 46, 32, 83, 117, 99, 104, 32, 105, 116, 101, 109, 115, 32, 97, > 114, 101, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 100, 32, 97, > 110, 100, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 102, 114, 111, 109, > 32, 116, 104, 101, 32, 108, 101, 102, 116, 32, 116, 111, 32, 116, 104, 101, > 10, 92, 110, 32, 32, 32, 32, 32, 114, 105, 103, 104, 116, 46, 32, 70, > 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 116, 104, 101, > 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 58, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 39, 105, 110, 112, 117, 116, 46, 106, 112, 103, > 32, 45, 98, 108, 117, 114, 32, 51, 44, 48, 32, 45, 115, 104, 97, 114, > 112, 101, 110, 32, 49, 48, 32, 45, 114, 101, 115, 105, 122, 101, 32, 50, > 48, 48, 37, 44, 50, 48, 48, 37, 32, 45, 111, 117, 116, 112, 117, 116, > 32, 111, 117, 116, 112, 117, 116, 46, 106, 112, 103, 39, 10, 92, 110, 32, > 32, 32, 32, 32, 100, 101, 102, 105, 110, 101, 115, 32, 97, 32, 118, 97, > 108, 105, 100, 32, 112, 105, 112, 101, 108, 105, 110, 101, 32, 99, 111, 109, > 112, 111, 115, 101, 100, 32, 111, 102, 32, 110, 105, 110, 101, 32, 71, 92, > 52, 55, 77, 73, 67, 32, 105, 116, 101, 109, 115, 46, 10, 92, 110, 32, > 32, 45, 32, 65, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 116, 101, > 109, 32, 105, 115, 32, 97, 32, 115, 116, 114, 105, 110, 103, 32, 119, 104, > 105, 99, 104, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 115, 32, 101, > 105, 116, 104, 101, 114, 32, 97, 32, 99, 111, 109, 109, 97, 110, 100, 44, > 32, 97, 32, 115, 101, 116, 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 44, 10, 92, 110, 32, > 32, 32, 32, 32, 97, 32, 102, 105, 108, 101, 110, 97, 109, 101, 44, 32, > 111, 114, 32, 97, 32, 115, 112, 101, 99, 105, 97, 108, 32, 105, 110, 112, > 117, 116, 32, 115, 116, 114, 105, 110, 103, 46, 10, 92, 110, 32, 32, 45, > 32, 69, 115, 99, 97, 112, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, > 114, 115, 32, 39, 92, 92, 39, 32, 97, 110, 100, 32, 100, 111, 117, 98, > 108, 101, 32, 113, 117, 111, 116, 101, 115, 32, 39, 92, 34, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 40, 97, 115, 32, 117, > 115, 117, 97, 108, 41, 32, 116, 111, 32, 100, 101, 102, 105, 110, 101, 32, > 105, 116, 101, 109, 115, 10, 92, 110, 32, 32, 32, 32, 32, 99, 111, 110, > 116, 97, 105, 110, 105, 110, 103, 32, 115, 112, 97, 99, 101, 115, 44, 32, > 111, 114, 32, 97, 110, 121, 32, 111, 116, 104, 101, 114, 32, 99, 104, 97, > 114, 97, 99, 116, 101, 114, 32, 115, 101, 113, 117, 101, 110, 99, 101, 115, > 46, 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, > 116, 104, 101, 32, 115, 116, 114, 105, 110, 103, 115, 10, 92, 110, 32, 32, > 32, 32, 32, 39, 115, 105, 110, 103, 108, 101, 92, 92, 32, 105, 116, 101, > 109, 39, 32, 97, 110, 100, 32, 39, 92, 34, 115, 105, 110, 103, 108, 101, > 32, 105, 116, 101, 109, 92, 34, 39, 32, 100, 101, 102, 105, 110, 101, 32, > 116, 104, 101, 32, 115, 97, 109, 101, 32, 115, 116, 114, 105, 110, 103, 32, > 105, 116, 101, 109, 44, 32, 119, 105, 116, 104, 32, 97, 32, 115, 112, 97, > 99, 101, 32, 105, 110, 32, 105, 116, 46, 34, 10, 45, 95, 104, 101, 108, > 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 73, 110, 112, 117, 116, > 32, 100, 97, 116, 97, 32, 105, 116, 101, 109, 115, 34, 10, 45, 95, 104, > 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, 32, > 32, 45, 32, 73, 102, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 116, 101, 109, 32, 97, > 112, 112, 101, 97, 114, 115, 32, 116, 111, 32, 98, 101, 32, 97, 110, 32, > 101, 120, 105, 115, 116, 105, 110, 103, 32, 102, 105, 108, 101, 110, 97, 109, > 101, 44, 32, 116, 104, 101, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, > 100, 105, 110, 103, 32, 105, 109, 97, 103, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 100, 97, 116, 97, 32, 97, 114, 101, 32, 108, 111, 97, 100, 101, > 100, 32, 97, 110, 100, 32, 105, 110, 115, 101, 114, 116, 101, 100, 32, 97, > 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, > 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, > 32, 45, 32, 83, 112, 101, 99, 105, 97, 108, 32, 102, 105, 108, 101, 110, > 97, 109, 101, 115, 32, 39, 45, 39, 32, 97, 110, 100, 32, 39, 45, 46, > 101, 120, 116, 39, 32, 115, 116, 97, 110, 100, 32, 102, 111, 114, 32, 116, > 104, 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 105, 110, 112, 117, > 116, 47, 111, 117, 116, 112, 117, 116, 32, 115, 116, 114, 101, 97, 109, 115, > 44, 32, 111, 112, 116, 105, 111, 110, 97, 108, 108, 121, 10, 92, 110, 32, > 32, 32, 32, 32, 102, 111, 114, 99, 101, 100, 32, 116, 111, 32, 98, 101, > 32, 105, 110, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, 39, > 101, 120, 116, 39, 32, 102, 105, 108, 101, 32, 102, 111, 114, 109, 97, 116, > 32, 40, 101, 46, 103, 46, 32, 39, 45, 46, 106, 112, 103, 39, 32, 111, > 114, 32, 39, 45, 46, 112, 110, 103, 39, 41, 46, 10, 92, 110, 32, 32, > 45, 32, 84, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, > 115, 112, 101, 99, 105, 97, 108, 32, 105, 110, 112, 117, 116, 32, 115, 116, > 114, 105, 110, 103, 115, 32, 109, 97, 121, 32, 98, 101, 32, 117, 115, 101, > 100, 32, 97, 115, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 116, 101, > 109, 115, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 32, 97, 110, 100, > 32, 105, 110, 115, 101, 114, 116, 32, 110, 101, 119, 10, 92, 110, 32, 32, > 32, 32, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 112, > 114, 101, 115, 99, 114, 105, 98, 101, 100, 32, 118, 97, 108, 117, 101, 115, > 44, 32, 97, 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, 102, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, 58, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 39, 91, 115, 101, 108, 101, 99, 116, > 105, 111, 110, 93, 39, 32, 111, 114, 32, 39, 91, 115, 101, 108, 101, 99, > 116, 105, 111, 110, 93, 120, 78, 39, 58, 32, 73, 110, 115, 101, 114, 116, > 32, 49, 32, 111, 114, 32, 78, 32, 99, 111, 112, 105, 101, 115, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 101, 120, 105, 115, 116, > 105, 110, 103, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 39, 115, 101, 108, 101, 99, 116, 105, 111, 110, 39, > 32, 109, 97, 121, 32, 99, 111, 110, 116, 97, 105, 110, 32, 111, 110, 101, > 32, 111, 114, 32, 115, 101, 118, 101, 114, 97, 108, 32, 105, 109, 97, 103, > 101, 115, 32, 40, 115, 101, 101, 32, 110, 101, 120, 116, 32, 115, 101, 99, > 116, 105, 111, 110, 32, 102, 111, 114, 32, 100, 101, 116, 97, 105, 108, 115, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 119, 105, 100, 116, > 104, 91, 37, 93, 44, 95, 104, 101, 105, 103, 104, 116, 91, 37, 93, 44, > 95, 100, 101, 112, 116, 104, 91, 37, 93, 44, 95, 115, 112, 101, 99, 116, > 114, 117, 109, 91, 37, 93, 44, 95, 118, 97, 108, 117, 101, 115, 39, 58, > 32, 73, 110, 115, 101, 114, 116, 32, 97, 32, 110, 101, 119, 32, 105, 109, > 97, 103, 101, 32, 119, 105, 116, 104, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, > 32, 97, 110, 100, 32, 118, 97, 108, 117, 101, 115, 32, 40, 97, 100, 100, > 105, 110, 103, 32, 39, 37, 39, 32, 116, 111, 32, 97, 32, 100, 105, 109, > 101, 110, 115, 105, 111, 110, 32, 109, 101, 97, 110, 115, 32, 39, 112, 101, > 114, 99, 101, 110, 116, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 115, 105, 122, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, 120, 105, > 115, 44, 32, 116, 97, 107, 101, 110, 32, 102, 114, 111, 109, 32, 116, 104, > 101, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, 101, 32, 39, 91, 45, > 49, 93, 39, 39, 41, 46, 32, 65, 110, 121, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 100, 105, 109, 101, 110, 115, 105, 111, 110, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 99, 97, 110, 32, 98, 101, 32, 97, > 108, 115, 111, 32, 119, 114, 105, 116, 116, 101, 110, 32, 97, 115, 32, 39, > 91, 105, 109, 97, 103, 101, 93, 39, 44, 32, 97, 110, 100, 32, 105, 115, > 32, 116, 104, 101, 110, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, > 32, 115, 105, 122, 101, 32, 40, 97, 108, 111, 110, 103, 32, 116, 104, 101, > 32, 115, 97, 109, 101, 32, 97, 120, 105, 115, 41, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 111, 102, 32, 116, 104, 101, 32, 101, 120, 105, 115, > 116, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, > 109, 97, 103, 101, 32, 91, 105, 109, 97, 103, 101, 93, 46, 32, 39, 118, > 97, 108, 117, 101, 115, 39, 32, 99, 97, 110, 32, 98, 101, 32, 101, 105, > 116, 104, 101, 114, 32, 97, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, > 111, 102, 32, 110, 117, 109, 98, 101, 114, 115, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, > 32, 99, 111, 109, 109, 97, 115, 32, 39, 44, 39, 44, 32, 111, 114, 32, > 97, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 97, 115, 32, 101, 46, > 103, 46, 32, 105, 110, 32, 105, 110, 112, 117, 116, 32, 105, 116, 101, 109, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 39, 50, 53, 54, 44, 50, > 53, 54, 44, 49, 44, 51, 44, 105, 102, 40, 99, 61, 61, 48, 44, 120, > 44, 105, 102, 40, 99, 61, 61, 49, 44, 121, 44, 48, 41, 41, 39, 32, > 119, 104, 105, 99, 104, 32, 99, 114, 101, 97, 116, 101, 115, 32, 97, 32, > 50, 53, 54, 120, 50, 53, 54, 32, 82, 71, 66, 32, 99, 111, 108, 111, > 114, 32, 105, 109, 97, 103, 101, 32, 119, 105, 116, 104, 32, 97, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 115, 112, 97, 116, 105, 97, 108, 32, > 115, 104, 97, 100, 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 114, > 101, 100, 32, 97, 110, 100, 32, 103, 114, 101, 101, 110, 32, 99, 104, 97, > 110, 110, 101, 108, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, > 40, 118, 49, 44, 118, 50, 44, 46, 46, 41, 39, 58, 32, 73, 110, 115, > 101, 114, 116, 32, 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, > 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 112, > 114, 101, 115, 99, 114, 105, 98, 101, 100, 32, 118, 97, 108, 117, 101, 115, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 86, 97, 108, 117, 101, > 32, 115, 101, 112, 97, 114, 97, 116, 111, 114, 32, 105, 110, 115, 105, 100, > 101, 32, 112, 97, 114, 101, 110, 116, 104, 101, 115, 101, 115, 32, 99, 97, > 110, 32, 98, 101, 32, 39, 44, 39, 32, 40, 99, 111, 108, 117, 109, 110, > 32, 115, 101, 112, 97, 114, 97, 116, 111, 114, 46, 41, 44, 32, 39, 59, > 39, 32, 40, 114, 111, 119, 32, 115, 101, 112, 46, 41, 44, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 39, 47, 39, 32, 40, 115, 108, 105, 99, > 101, 32, 115, 101, 112, 46, 41, 32, 111, 114, 32, 39, 94, 39, 32, 40, > 99, 104, 97, 110, 110, 101, 108, 32, 115, 101, 112, 46, 41, 46, 32, 70, > 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 39, 40, 49, 44, 50, 44, 51, 59, 52, 44, 53, 44, 54, 59, 55, > 44, 56, 44, 57, 41, 39, 32, 99, 114, 101, 97, 116, 101, 115, 32, 97, > 32, 51, 120, 51, 32, 109, 97, 116, 114, 105, 120, 32, 40, 115, 99, 97, > 108, 97, 114, 32, 105, 109, 97, 103, 101, 41, 44, 32, 119, 105, 116, 104, > 32, 118, 97, 108, 117, 101, 115, 32, 102, 114, 111, 109, 32, 49, 32, 116, > 111, 32, 57, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 48, 39, > 58, 32, 73, 110, 115, 101, 114, 116, 32, 97, 32, 110, 101, 119, 32, 39, > 101, 109, 112, 116, 121, 39, 32, 105, 109, 97, 103, 101, 44, 32, 99, 111, > 110, 116, 97, 105, 110, 105, 110, 103, 32, 110, 111, 32, 112, 105, 120, 101, > 108, 32, 100, 97, 116, 97, 46, 32, 69, 109, 112, 116, 121, 32, 105, 109, > 97, 103, 101, 115, 32, 97, 114, 101, 32, 117, 115, 101, 100, 32, 111, 110, > 108, 121, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 105, 110, 32, 114, > 97, 114, 101, 32, 111, 99, 99, 97, 115, 105, 111, 110, 115, 46, 10, 92, > 110, 32, 32, 45, 32, 73, 110, 112, 117, 116, 32, 105, 116, 101, 109, 32, > 39, 110, 97, 109, 101, 61, 118, 97, 108, 117, 101, 39, 32, 100, 101, 99, > 108, 97, 114, 101, 115, 32, 97, 32, 110, 101, 119, 32, 108, 111, 99, 97, > 108, 32, 111, 114, 32, 103, 108, 111, 98, 97, 108, 32, 118, 97, 114, 105, > 97, 98, 108, 101, 32, 39, 110, 97, 109, 101, 39, 44, 32, 111, 114, 32, > 97, 115, 115, 105, 103, 110, 32, 97, 32, 110, 101, 119, 10, 92, 110, 32, > 32, 32, 32, 32, 118, 97, 108, 117, 101, 32, 116, 111, 32, 97, 110, 32, > 101, 120, 105, 115, 116, 105, 110, 103, 32, 118, 97, 114, 105, 97, 98, 108, > 101, 46, 32, 86, 97, 114, 105, 97, 98, 108, 101, 32, 110, 97, 109, 101, > 115, 32, 117, 115, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, > 32, 115, 101, 116, 32, 91, 97, 45, 122, 65, 45, 90, 48, 45, 57, 95, > 93, 32, 97, 110, 100, 32, 99, 97, 110, 110, 111, 116, 10, 92, 110, 32, > 32, 32, 32, 32, 115, 116, 97, 114, 116, 32, 119, 105, 116, 104, 32, 97, > 32, 110, 117, 109, 98, 101, 114, 46, 32, 65, 32, 118, 97, 114, 105, 97, > 98, 108, 101, 32, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 32, 105, > 115, 32, 97, 108, 119, 97, 121, 115, 32, 108, 111, 99, 97, 108, 32, 116, > 111, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 101, 120, 99, 101, 112, 116, 10, 92, 110, 32, > 32, 32, 32, 32, 119, 104, 101, 110, 32, 105, 116, 32, 115, 116, 97, 114, > 116, 115, 32, 98, 121, 32, 116, 104, 101, 32, 117, 110, 100, 101, 114, 115, > 99, 111, 114, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 32, 39, > 95, 39, 46, 32, 73, 110, 32, 116, 104, 97, 116, 32, 99, 97, 115, 101, > 44, 32, 105, 116, 32, 98, 101, 99, 111, 109, 101, 115, 32, 97, 108, 115, > 111, 32, 97, 99, 99, 101, 115, 115, 105, 98, 108, 101, 10, 92, 110, 32, > 32, 32, 32, 32, 98, 121, 32, 97, 110, 121, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 105, 110, 118, 111, 107, 101, 100, 32, 111, 117, 116, 115, 105, > 100, 101, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 99, > 111, 109, 109, 97, 110, 100, 32, 115, 99, 111, 112, 101, 46, 34, 10, 45, > 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 67, > 111, 109, 109, 97, 110, 100, 32, 105, 116, 101, 109, 115, 32, 97, 110, 100, > 32, 115, 101, 108, 101, 99, 116, 105, 111, 110, 115, 34, 10, 45, 95, 104, > 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, 32, > 32, 45, 32, 65, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 116, 101, > 109, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 98, 121, 32, 39, 45, > 39, 32, 100, 101, 115, 105, 103, 110, 97, 116, 101, 115, 32, 97, 32, 99, > 111, 109, 109, 97, 110, 100, 44, 32, 109, 111, 115, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 116, 105, 109, 101, 46, 32, 71, 101, 110, 101, 114, 97, > 108, 108, 121, 44, 32, 99, 111, 109, 109, 97, 110, 100, 115, 10, 92, 110, > 32, 32, 32, 32, 32, 112, 101, 114, 102, 111, 114, 109, 32, 105, 109, 97, > 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 111, 112, > 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 110, 32, 111, 110, 101, 32, > 111, 114, 32, 115, 101, 118, 101, 114, 97, 108, 32, 97, 118, 97, 105, 108, > 97, 98, 108, 101, 32, 105, 109, 97, 103, 101, 115, 32, 111, 102, 32, 116, > 104, 101, 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 45, 32, 67, > 111, 109, 109, 111, 110, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 104, > 97, 118, 101, 32, 116, 119, 111, 32, 101, 113, 117, 105, 118, 97, 108, 101, > 110, 116, 32, 110, 97, 109, 101, 115, 32, 40, 114, 101, 103, 117, 108, 97, > 114, 32, 97, 110, 100, 32, 115, 104, 111, 114, 116, 41, 46, 32, 70, 111, > 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 99, 111, 109, 109, > 97, 110, 100, 10, 92, 110, 32, 32, 32, 32, 32, 110, 97, 109, 101, 115, > 32, 39, 45, 114, 101, 115, 105, 122, 101, 39, 32, 97, 110, 100, 32, 39, > 45, 114, 39, 32, 114, 101, 102, 101, 114, 32, 116, 111, 32, 116, 104, 101, > 32, 115, 97, 109, 101, 32, 105, 109, 97, 103, 101, 32, 114, 101, 115, 105, > 122, 105, 110, 103, 32, 97, 99, 116, 105, 111, 110, 46, 10, 92, 110, 32, > 32, 45, 32, 65, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 109, 97, 121, 32, 104, 97, 118, 101, 32, 109, 97, > 110, 100, 97, 116, 111, 114, 121, 32, 111, 114, 32, 111, 112, 116, 105, 111, > 110, 97, 108, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 46, 32, 67, > 111, 109, 109, 97, 110, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, > 32, 109, 117, 115, 116, 32, 98, 101, 10, 92, 110, 32, 32, 32, 32, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 110, 32, 116, 104, 101, > 32, 110, 101, 120, 116, 32, 105, 116, 101, 109, 32, 111, 110, 32, 116, 104, > 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 108, 105, 110, 101, 46, 32, > 67, 111, 109, 109, 97, 115, 32, 39, 44, 39, 32, 97, 114, 101, 32, 117, > 115, 101, 100, 32, 116, 111, 32, 115, 101, 112, 97, 114, 97, 116, 101, 32, > 109, 117, 108, 116, 105, 112, 108, 101, 10, 92, 110, 32, 32, 32, 32, 32, > 97, 114, 103, 117, 109, 101, 110, 116, 115, 44, 32, 105, 102, 32, 97, 110, > 121, 32, 114, 101, 113, 117, 105, 114, 101, 100, 46, 10, 92, 110, 32, 32, > 45, 32, 84, 104, 101, 32, 101, 120, 101, 99, 117, 116, 105, 111, 110, 32, > 111, 102, 32, 97, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 109, 97, 121, 32, 98, 101, 32, 114, 101, 115, 116, > 114, 105, 99, 116, 101, 100, 32, 111, 110, 108, 121, 32, 116, 111, 32, 97, > 32, 115, 117, 98, 115, 101, 116, 32, 111, 102, 32, 116, 104, 101, 32, 105, > 109, 97, 103, 101, 32, 108, 105, 115, 116, 44, 32, 98, 121, 10, 92, 110, > 32, 32, 32, 32, 32, 97, 112, 112, 101, 110, 100, 105, 110, 103, 32, 39, > 91, 115, 117, 98, 115, 101, 116, 93, 39, 32, 116, 111, 32, 116, 104, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 32, 110, 97, 109, 101, 46, 32, 69, > 120, 97, 109, 112, 108, 101, 115, 32, 111, 102, 32, 118, 97, 108, 105, 100, > 32, 115, 121, 110, 116, 97, 120, 101, 115, 32, 102, 111, 114, 32, 39, 115, > 117, 98, 115, 101, 116, 39, 32, 97, 114, 101, 58, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, 48, 44, 49, 44, 51, 93, > 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 111, 110, 108, 121, 32, 111, 110, 32, 105, 109, 97, 103, 101, 115, 32, > 91, 48, 93, 44, 91, 49, 93, 32, 97, 110, 100, 32, 91, 51, 93, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, 51, > 45, 53, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, > 97, 110, 100, 32, 111, 110, 108, 121, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 115, 32, 91, 51, 93, 32, 116, 111, 32, 91, 53, 93, 32, 40, 105, > 46, 101, 44, 32, 91, 51, 93, 44, 91, 52, 93, 32, 97, 110, 100, 32, > 91, 53, 93, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 45, > 99, 111, 109, 91, 53, 48, 37, 45, 49, 48, 48, 37, 93, 39, 58, 32, > 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, 110, > 108, 121, 32, 111, 110, 32, 116, 104, 101, 32, 115, 101, 99, 111, 110, 100, > 32, 104, 97, 108, 102, 32, 111, 102, 32, 116, 104, 101, 32, 105, 109, 97, > 103, 101, 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 39, 45, 99, 111, 109, 91, 48, 44, 45, 52, 45, 45, 49, 93, 39, > 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 111, 110, 108, 121, 32, 111, 110, 32, 116, 104, 101, 32, 102, 105, 114, 115, > 116, 32, 97, 110, 100, 32, 116, 104, 101, 32, 102, 111, 117, 114, 32, 108, > 97, 116, 101, 115, 116, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, 48, 45, 57, 58, > 51, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 111, 110, 108, 121, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 115, 32, 91, 48, 93, 32, 116, 111, 32, 91, 57, 93, 44, 32, 119, 105, > 116, 104, 32, 97, 32, 115, 116, 101, 112, 32, 111, 102, 32, 51, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 40, 105, 46, 101, 46, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 115, 32, 91, 48, 93, 44, 32, 91, 51, 93, 44, > 32, 91, 54, 93, 32, 97, 110, 100, 32, 91, 57, 93, 41, 46, 10, 92, > 110, 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, 48, 45, 45, > 49, 58, 50, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 111, 110, 108, 121, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 108, 105, 115, 116, 32, > 119, 105, 116, 104, 32, 101, 118, 101, 110, 32, 105, 110, 100, 105, 99, 101, > 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, > 91, 48, 44, 50, 45, 52, 44, 53, 48, 37, 45, 45, 49, 93, 39, 58, > 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, > 110, 32, 105, 109, 97, 103, 101, 115, 32, 91, 48, 93, 44, 91, 50, 93, > 44, 91, 51, 93, 44, 91, 52, 93, 32, 97, 110, 100, 32, 111, 110, 32, > 116, 104, 101, 32, 115, 101, 99, 111, 110, 100, 32, 104, 97, 108, 102, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, > 102, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, > 94, 48, 44, 49, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 111, 110, 32, 97, 108, 108, 32, 105, 109, 97, > 103, 101, 115, 32, 101, 120, 99, 101, 112, 116, 32, 116, 104, 101, 32, 102, > 105, 114, 115, 116, 32, 116, 119, 111, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 39, 45, 99, 111, 109, 91, 110, 97, 109, 101, 49, 44, 110, 97, > 109, 101, 50, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 111, 110, 32, 110, 97, 109, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 39, 110, 97, 109, 101, 49, 39, 32, 97, 110, 100, > 32, 39, 110, 97, 109, 101, 50, 39, 46, 10, 92, 110, 32, 32, 45, 32, > 73, 110, 100, 105, 99, 101, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, > 116, 105, 111, 110, 115, 32, 97, 114, 101, 32, 97, 108, 119, 97, 121, 115, > 32, 115, 111, 114, 116, 101, 100, 32, 105, 110, 32, 105, 110, 99, 114, 101, > 97, 115, 105, 110, 103, 32, 111, 114, 100, 101, 114, 44, 32, 97, 110, 100, > 32, 100, 117, 112, 108, 105, 99, 97, 116, 101, 32, 105, 110, 100, 105, 99, > 101, 115, 32, 97, 114, 101, 10, 92, 110, 32, 32, 32, 32, 32, 100, 105, > 115, 99, 97, 114, 100, 101, 100, 46, 32, 70, 111, 114, 32, 105, 110, 115, > 116, 97, 110, 99, 101, 44, 32, 115, 101, 108, 101, 99, 116, 105, 111, 110, > 115, 32, 39, 91, 51, 45, 49, 44, 49, 45, 51, 93, 39, 32, 97, 110, > 100, 32, 39, 91, 49, 44, 49, 44, 49, 44, 51, 44, 50, 93, 39, 32, > 97, 114, 101, 32, 98, 111, 116, 104, 32, 101, 113, 117, 105, 118, 97, 108, > 101, 110, 116, 32, 116, 111, 10, 92, 110, 32, 32, 32, 32, 32, 39, 91, > 49, 45, 51, 93, 39, 46, 32, 73, 102, 32, 121, 111, 117, 32, 119, 97, > 110, 116, 32, 116, 111, 32, 114, 101, 112, 101, 97, 116, 32, 97, 32, 115, > 105, 110, 103, 108, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 109, 117, > 108, 116, 105, 112, 108, 101, 32, 116, 105, 109, 101, 115, 32, 111, 110, 32, > 97, 110, 32, 105, 109, 97, 103, 101, 44, 32, 117, 115, 101, 32, 97, 10, > 92, 110, 32, 32, 32, 32, 32, 39, 45, 114, 101, 112, 101, 97, 116, 46, > 46, 45, 100, 111, 110, 101, 39, 32, 108, 111, 111, 112, 46, 32, 73, 110, > 118, 101, 114, 116, 105, 110, 103, 32, 116, 104, 101, 32, 111, 114, 100, 101, > 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 97, > 32, 115, 101, 108, 101, 99, 116, 105, 111, 110, 32, 99, 97, 110, 32, 98, > 101, 32, 97, 99, 104, 105, 101, 118, 101, 100, 32, 98, 121, 10, 92, 110, > 32, 32, 32, 32, 32, 105, 110, 118, 101, 114, 116, 105, 110, 103, 32, 102, > 105, 114, 115, 116, 32, 116, 104, 101, 32, 111, 114, 100, 101, 114, 32, 111, > 102, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, > 116, 104, 101, 32, 108, 105, 115, 116, 44, 32, 119, 105, 116, 104, 32, 99, > 111, 109, 109, 97, 110, 100, 32, 39, 45, 114, 101, 118, 101, 114, 115, 101, > 91, 115, 101, 108, 101, 99, 116, 105, 111, 110, 93, 39, 46, 10, 92, 110, > 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 32, 105, 110, 118, 111, 107, 101, 100, 32, 119, 105, 116, > 104, 111, 117, 116, 32, 39, 91, 115, 117, 98, 115, 101, 116, 93, 39, 32, > 97, 114, 101, 32, 97, 112, 112, 108, 105, 101, 100, 32, 111, 110, 32, 97, > 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 111, 102, 32, 116, 104, 101, > 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 45, 32, 65, 32, 71, > 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, 109, 97, 110, 100, 32, 115, > 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 45, 45, > 39, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, 39, 45, 39, > 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 97, 99, 116, 32, 39, 105, > 110, 45, 112, 108, 97, 99, 101, 39, 32, 98, 117, 116, 32, 105, 110, 115, > 101, 114, 116, 115, 32, 105, 116, 115, 10, 92, 110, 32, 32, 32, 32, 32, > 114, 101, 115, 117, 108, 116, 32, 97, 115, 32, 111, 110, 101, 32, 111, 114, > 32, 115, 101, 118, 101, 114, 97, 108, 32, 110, 101, 119, 32, 105, 109, 97, > 103, 101, 115, 32, 97, 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, > 102, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, > 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, 114, 101, 32, 97, 114, > 101, 32, 116, 119, 111, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, > 116, 121, 112, 101, 115, 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, > 115, 32, 116, 104, 97, 116, 32, 99, 97, 110, 32, 98, 101, 32, 114, 117, > 110, 32, 98, 121, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, > 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 58, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 78, 97, 116, 105, 118, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 115, 44, 32, 97, 114, 101, 32, 104, 97, 114, 100, 45, > 99, 111, 100, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 97, 108, > 105, 116, 105, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 105, 110, 116, > 101, 114, 112, 114, 101, 116, 101, 114, 32, 99, 111, 114, 101, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 84, 104, 101, 121, 32, 97, 114, 101, > 32, 116, 104, 117, 115, 32, 99, 111, 109, 112, 105, 108, 101, 100, 32, 97, > 115, 32, 109, 97, 99, 104, 105, 110, 101, 32, 99, 111, 100, 101, 32, 97, > 110, 100, 32, 114, 117, 110, 32, 113, 117, 105, 99, 107, 108, 121, 44, 32, > 109, 111, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, 116, 105, 109, 101, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 79, 109, 105, 116, 116, > 105, 110, 103, 32, 97, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, > 119, 104, 101, 110, 32, 105, 110, 118, 111, 107, 105, 110, 103, 32, 97, 32, > 110, 97, 116, 105, 118, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 105, > 115, 32, 110, 111, 116, 32, 112, 101, 114, 109, 105, 116, 116, 101, 100, 44, > 32, 101, 120, 99, 101, 112, 116, 32, 105, 102, 32, 97, 108, 108, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 102, 111, 108, 108, 111, 119, 105, 110, > 103, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 97, 114, 101, 32, > 97, 108, 115, 111, 32, 111, 109, 105, 116, 116, 101, 100, 46, 32, 70, 111, > 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 99, 97, 108, 108, > 32, 116, 111, 32, 39, 45, 112, 108, 97, 115, 109, 97, 32, 49, 48, 44, > 44, 53, 39, 32, 105, 115, 32, 105, 110, 118, 97, 108, 105, 100, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 98, 117, 116, 32, 39, 45, 112, 108, > 97, 115, 109, 97, 32, 49, 48, 39, 32, 105, 115, 32, 99, 111, 114, 114, > 101, 99, 116, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 117, 115, > 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 44, 32, 97, 114, > 101, 32, 100, 101, 102, 105, 110, 101, 100, 32, 97, 115, 32, 71, 92, 52, > 55, 77, 73, 67, 32, 112, 105, 112, 101, 108, 105, 110, 101, 115, 32, 111, > 102, 32, 110, 97, 116, 105, 118, 101, 32, 111, 114, 32, 99, 117, 115, 116, > 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 84, 104, 101, 121, 32, 97, 114, 101, 32, 105, > 110, 116, 101, 114, 112, 114, 101, 116, 101, 100, 32, 98, 121, 32, 116, 104, > 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 110, 116, 101, 114, 112, > 114, 101, 116, 101, 114, 44, 32, 97, 110, 100, 32, 114, 117, 110, 32, 115, > 108, 111, 119, 101, 114, 32, 116, 104, 97, 110, 32, 110, 97, 116, 105, 118, > 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 66, 117, 116, 32, 111, 109, 105, 116, 116, 105, 110, > 103, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 119, 104, 101, 110, > 32, 105, 110, 118, 111, 107, 105, 110, 103, 32, 97, 32, 99, 117, 115, 116, > 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 32, 105, 115, 32, 112, 101, > 114, 109, 105, 116, 116, 101, 100, 46, 32, 70, 111, 114, 32, 105, 110, 115, > 116, 97, 110, 99, 101, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, 39, 45, 102, 108, > 111, 119, 101, 114, 32, 44, 44, 44, 49, 48, 48, 44, 44, 50, 39, 32, > 111, 114, 32, 39, 45, 102, 108, 111, 119, 101, 114, 32, 44, 39, 32, 97, > 114, 101, 32, 99, 111, 114, 114, 101, 99, 116, 46, 10, 92, 110, 32, 32, > 45, 32, 65, 32, 117, 115, 101, 114, 32, 109, 97, 121, 32, 101, 97, 115, > 105, 108, 121, 32, 97, 100, 100, 32, 105, 116, 115, 32, 111, 119, 110, 32, > 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, > 116, 111, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, > 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 32, 40, 115, 101, 101, 32, > 115, 101, 99, 116, 105, 111, 110, 10, 92, 110, 32, 32, 32, 32, 32, 39, > 65, 100, 100, 105, 110, 103, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, > 109, 109, 97, 110, 100, 115, 39, 41, 46, 32, 78, 97, 116, 105, 118, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 99, 97, 110, 110, 111, 116, > 32, 98, 101, 32, 97, 100, 100, 101, 100, 32, 117, 110, 108, 101, 115, 115, > 32, 121, 111, 117, 32, 109, 111, 100, 105, 102, 121, 32, 116, 104, 101, 32, > 71, 92, 52, 55, 77, 73, 67, 10, 92, 110, 32, 32, 32, 32, 32, 105, > 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 32, 115, 111, 117, 114, 99, > 101, 32, 99, 111, 100, 101, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, > 115, 101, 99, 116, 105, 111, 110, 32, 34, 73, 110, 112, 117, 116, 115, 47, > 111, 117, 116, 112, 117, 116, 115, 32, 112, 114, 111, 112, 101, 114, 116, 105, > 101, 115, 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, > 114, 97, 112, 104, 32, 34, 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 105, 115, 32, 97, 98, 108, 101, 32, 116, 111, 32, 114, 101, 97, > 100, 47, 119, 114, 105, 116, 101, 32, 109, 111, 115, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 99, 108, 97, 115, 115, 105, 99, 97, 108, 32, 105, 109, > 97, 103, 101, 32, 102, 105, 108, 101, 32, 102, 111, 114, 109, 97, 116, 115, > 44, 32, 105, 110, 99, 108, 117, 100, 105, 110, 103, 58, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 50, 100, 32, 103, 114, 97, 121, 115, 99, 97, 108, > 101, 47, 99, 111, 108, 111, 114, 32, 102, 105, 108, 101, 115, 58, 32, 46, > 112, 110, 103, 44, 32, 46, 106, 112, 101, 103, 44, 32, 46, 103, 105, 102, > 44, 32, 46, 112, 110, 109, 44, 32, 46, 116, 105, 102, 44, 32, 46, 98, > 109, 112, 44, 32, 46, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 51, > 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 102, 105, 108, > 101, 115, 58, 32, 46, 100, 99, 109, 44, 32, 46, 104, 100, 114, 44, 32, > 46, 110, 105, 105, 44, 32, 46, 112, 97, 110, 44, 32, 46, 105, 110, 114, > 44, 32, 46, 112, 110, 107, 44, 32, 46, 46, 10, 92, 110, 32, 32, 32, > 32, 46, 32, 73, 109, 97, 103, 101, 32, 115, 101, 113, 117, 101, 110, 99, > 101, 115, 58, 32, 46, 109, 112, 101, 103, 44, 32, 46, 97, 118, 105, 44, > 32, 46, 109, 111, 118, 44, 32, 46, 111, 103, 103, 44, 32, 46, 102, 108, > 118, 44, 32, 46, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 71, 101, > 110, 101, 114, 105, 99, 32, 97, 115, 99, 105, 105, 32, 111, 114, 32, 98, > 105, 110, 97, 114, 121, 32, 100, 97, 116, 97, 32, 102, 105, 108, 101, 115, > 58, 32, 46, 99, 105, 109, 103, 44, 32, 46, 99, 105, 109, 103, 122, 44, > 32, 46, 100, 108, 109, 44, 32, 46, 97, 115, 99, 44, 32, 46, 112, 102, > 109, 44, 32, 46, 114, 97, 119, 44, 32, 46, 116, 120, 116, 44, 32, 46, > 104, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 32, 102, 105, 108, 101, 115, 58, 32, 46, 111, 102, 102, > 46, 10, 92, 110, 32, 32, 45, 32, 87, 104, 101, 110, 32, 100, 101, 97, > 108, 105, 110, 103, 32, 119, 105, 116, 104, 32, 99, 111, 108, 111, 114, 32, > 105, 109, 97, 103, 101, 115, 44, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 103, 101, 110, 101, 114, 97, 108, 108, 121, 32, 114, 101, 97, 100, 115, 44, > 32, 119, 114, 105, 116, 101, 115, 32, 97, 110, 100, 32, 100, 105, 115, 112, > 108, 97, 121, 115, 32, 100, 97, 116, 97, 32, 117, 115, 105, 110, 103, 32, > 116, 104, 101, 10, 92, 110, 32, 32, 32, 32, 32, 117, 115, 117, 97, 108, > 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 115, 112, 97, 99, 101, > 46, 10, 92, 110, 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 105, 115, 32, 97, 98, 108, 101, 32, 116, 111, 32, 109, 97, 110, 97, 103, > 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 116, 104, 97, > 116, 32, 109, 97, 121, 32, 98, 101, 32, 114, 101, 97, 100, 32, 102, 114, > 111, 109, 32, 102, 105, 108, 101, 115, 32, 111, 114, 32, 103, 101, 110, 101, > 114, 97, 116, 101, 100, 32, 98, 121, 32, 71, 92, 52, 55, 77, 73, 67, > 10, 92, 110, 32, 32, 32, 32, 32, 99, 111, 109, 109, 97, 110, 100, 115, > 46, 32, 84, 104, 101, 121, 32, 97, 114, 101, 32, 115, 116, 111, 114, 101, > 100, 32, 97, 115, 32, 111, 110, 101, 45, 99, 111, 108, 117, 109, 110, 32, > 115, 99, 97, 108, 97, 114, 32, 105, 109, 97, 103, 101, 115, 32, 99, 111, > 110, 116, 97, 105, 110, 105, 110, 103, 32, 116, 104, 101, 32, 111, 98, 106, > 101, 99, 116, 32, 100, 97, 116, 97, 44, 32, 105, 110, 32, 116, 104, 101, > 10, 92, 110, 32, 32, 32, 32, 32, 102, 111, 108, 108, 111, 119, 105, 110, > 103, 32, 111, 114, 100, 101, 114, 58, 32, 123, 32, 109, 97, 103, 105, 99, > 95, 110, 117, 109, 98, 101, 114, 59, 32, 115, 105, 122, 101, 115, 59, 32, > 118, 101, 114, 116, 105, 99, 101, 115, 59, 32, 112, 114, 105, 109, 105, 116, > 105, 118, 101, 115, 59, 32, 99, 111, 108, 111, 114, 115, 59, 32, 111, 112, > 97, 99, 105, 116, 105, 101, 115, 32, 125, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 84, 104, 101, 115, 101, 32, 51, 100, 32, 114, 101, 112, 114, 101, > 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 32, 99, 97, 110, 32, 98, > 101, 32, 112, 114, 111, 99, 101, 115, 115, 101, 100, 32, 97, 115, 32, 114, > 101, 103, 117, 108, 97, 114, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, > 117, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 40, 115, 101, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 39, 45, 115, 112, 108, 105, 116, 51, 100, 39, 32, 102, 111, 114, 32, 97, > 99, 99, 101, 115, 115, 105, 110, 103, 32, 101, 97, 99, 104, 32, 111, 102, > 32, 116, 104, 101, 115, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 32, 100, 97, 116, 97, 32, 115, 101, 112, 97, 114, 97, 116, 101, 108, 121, > 41, 46, 10, 92, 110, 32, 32, 45, 32, 66, 101, 32, 97, 119, 97, 114, > 101, 32, 116, 104, 97, 116, 32, 117, 115, 117, 97, 108, 32, 102, 105, 108, > 101, 32, 102, 111, 114, 109, 97, 116, 115, 32, 109, 97, 121, 32, 98, 101, > 32, 115, 111, 109, 101, 116, 105, 109, 101, 115, 32, 110, 111, 116, 32, 97, > 100, 97, 112, 116, 101, 100, 32, 116, 111, 32, 115, 116, 111, 114, 101, 32, > 97, 108, 108, 32, 116, 104, 101, 32, 97, 118, 97, 105, 108, 97, 98, 108, > 101, 10, 92, 110, 32, 32, 32, 32, 32, 105, 109, 97, 103, 101, 32, 100, > 97, 116, 97, 44, 32, 115, 105, 110, 99, 101, 32, 71, 92, 52, 55, 77, > 73, 67, 32, 117, 115, 101, 115, 32, 102, 108, 111, 97, 116, 45, 118, 97, > 108, 117, 101, 100, 32, 99, 111, 100, 105, 110, 103, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 32, 112, 105, 120, 101, 108, 115, 46, 32, 70, 111, 114, > 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 115, 97, 118, 105, 110, > 103, 10, 92, 110, 32, 32, 32, 32, 32, 97, 110, 32, 105, 109, 97, 103, > 101, 32, 116, 104, 97, 116, 32, 119, 97, 115, 32, 105, 110, 105, 116, 105, > 97, 108, 108, 121, 32, 108, 111, 97, 100, 101, 100, 32, 97, 115, 32, 97, > 32, 49, 54, 98, 105, 116, 115, 47, 99, 104, 97, 110, 110, 101, 108, 32, > 105, 109, 97, 103, 101, 44, 32, 97, 115, 32, 97, 32, 46, 106, 112, 103, > 32, 102, 105, 108, 101, 32, 119, 105, 108, 108, 32, 114, 101, 115, 117, 108, > 116, 10, 92, 110, 32, 32, 32, 32, 32, 105, 110, 32, 108, 111, 115, 115, > 32, 111, 102, 32, 105, 110, 102, 111, 114, 109, 97, 116, 105, 111, 110, 46, > 32, 85, 115, 101, 32, 116, 104, 101, 32, 46, 99, 105, 109, 103, 32, 102, > 105, 108, 101, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 32, 40, 111, > 114, 32, 46, 99, 105, 109, 103, 122, 44, 32, 105, 116, 115, 32, 99, 111, > 109, 112, 114, 101, 115, 115, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, > 118, 101, 114, 115, 105, 111, 110, 41, 32, 116, 111, 32, 101, 110, 115, 117, > 114, 101, 32, 116, 104, 97, 116, 32, 97, 108, 108, 32, 100, 97, 116, 97, > 32, 112, 114, 101, 99, 105, 115, 105, 111, 110, 32, 119, 105, 108, 108, 32, > 98, 101, 32, 112, 114, 101, 115, 101, 114, 118, 101, 100, 32, 119, 104, 101, > 110, 32, 115, 97, 118, 105, 110, 103, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 92, 110, 32, 32, 45, 32, 70, 105, 108, 101, 32, 111, 112, 116, 105, > 111, 110, 115, 32, 99, 97, 110, 47, 109, 117, 115, 116, 32, 98, 101, 32, > 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 115, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 99, 32, 102, 105, 108, 101, 32, 102, 111, 114, 109, > 97, 116, 115, 58, 10, 92, 110, 32, 32, 32, 32, 46, 32, 86, 105, 100, > 101, 111, 32, 102, 105, 108, 101, 115, 58, 32, 79, 110, 108, 121, 32, 115, > 117, 98, 45, 102, 114, 97, 109, 101, 115, 32, 111, 102, 32, 97, 110, 32, > 105, 109, 97, 103, 101, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 109, > 97, 121, 32, 98, 101, 32, 108, 111, 97, 100, 101, 100, 44, 32, 117, 115, > 105, 110, 103, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 101, 120, 116, 44, > 91, 102, 105, 114, 115, 116, 95, 102, 114, 97, 109, 101, 91, 37, 93, 91, > 44, 108, 97, 115, 116, 95, 102, 114, 97, 109, 101, 91, 37, 93, 91, 44, > 115, 116, 101, 112, 93, 93, 93, 39, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 79, 117, 116, 112, 117, 116, 32, 102, 114, 97, 109, 101, 114, > 97, 116, 101, 32, 97, 110, 100, 32, 98, 105, 116, 114, 97, 116, 101, 32, > 40, 105, 110, 32, 75, 98, 47, 115, 41, 32, 99, 97, 110, 32, 98, 101, > 32, 97, 108, 115, 111, 32, 115, 101, 116, 32, 98, 121, 32, 117, 115, 105, > 110, 103, 32, 116, 104, 101, 32, 111, 117, 116, 112, 117, 116, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 109, 112, 103, 44, > 95, 102, 112, 115, 44, 95, 98, 105, 116, 114, 97, 116, 101, 39, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 46, 99, 105, 109, 103, 91, 122, 93, > 32, 102, 105, 108, 101, 115, 32, 58, 32, 79, 110, 108, 121, 32, 99, 114, > 111, 112, 115, 32, 97, 110, 100, 32, 115, 117, 98, 45, 105, 109, 97, 103, > 101, 115, 32, 111, 102, 32, 46, 99, 105, 109, 103, 32, 102, 105, 108, 101, > 115, 32, 99, 97, 110, 32, 98, 101, 32, 108, 111, 97, 100, 101, 100, 44, > 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, > 105, 111, 110, 115, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, > 105, 109, 103, 44, 78, 48, 44, 78, 49, 39, 44, 32, 39, 102, 105, 108, > 101, 110, 97, 109, 101, 46, 99, 105, 109, 103, 44, 78, 48, 44, 78, 49, > 44, 120, 48, 44, 120, 49, 39, 44, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, 105, 109, 103, 44, > 78, 48, 44, 78, 49, 44, 120, 48, 44, 121, 48, 44, 120, 49, 44, 121, > 49, 39, 44, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, 105, > 109, 103, 44, 78, 48, 44, 78, 49, 44, 120, 48, 44, 121, 48, 44, 122, > 48, 44, 120, 49, 44, 121, 49, 44, 122, 49, 39, 44, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, > 105, 109, 103, 44, 78, 48, 44, 78, 49, 44, 120, 48, 44, 121, 48, 44, > 122, 48, 44, 99, 48, 44, 120, 49, 44, 121, 49, 44, 122, 49, 44, 99, > 49, 39, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 83, 112, 101, 99, > 105, 102, 121, 105, 110, 103, 32, 39, 45, 49, 39, 32, 102, 111, 114, 32, > 111, 110, 101, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 32, > 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 116, 104, 101, 32, 109, > 97, 120, 105, 109, 117, 109, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, > 118, 97, 108, 117, 101, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 79, > 117, 116, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, 105, 109, 103, 91, > 122, 93, 91, 44, 100, 97, 116, 97, 116, 121, 112, 101, 93, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 116, 111, 32, 102, 111, > 114, 99, 101, 32, 116, 104, 101, 32, 111, 117, 116, 112, 117, 116, 32, 112, > 105, 120, 101, 108, 32, 116, 121, 112, 101, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 39, 100, 97, 116, 97, 116, 121, 112, 101, 39, 32, 99, 97, > 110, 32, 98, 101, 32, 123, 32, 98, 111, 111, 108, 32, 124, 32, 117, 99, > 104, 97, 114, 32, 124, 32, 99, 104, 97, 114, 32, 124, 32, 117, 115, 104, > 111, 114, 116, 32, 124, 32, 115, 104, 111, 114, 116, 32, 124, 32, 117, 105, > 110, 116, 32, 124, 32, 105, 110, 116, 32, 124, 32, 117, 108, 111, 110, 103, > 32, 124, 32, 108, 111, 110, 103, 32, 124, 32, 102, 108, 111, 97, 116, 32, > 124, 32, 100, 111, 117, 98, 108, 101, 32, 125, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 46, 114, 97, 119, 32, 98, 105, 110, 97, 114, 121, 32, > 102, 105, 108, 101, 115, 58, 32, 73, 109, 97, 103, 101, 32, 100, 105, 109, > 101, 110, 115, 105, 111, 110, 115, 32, 97, 110, 100, 32, 105, 110, 112, 117, > 116, 32, 112, 105, 120, 101, 108, 32, 116, 121, 112, 101, 32, 109, 97, 121, > 32, 98, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 119, 104, > 101, 110, 32, 108, 111, 97, 100, 105, 110, 103, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 46, 114, 97, 119, 32, 102, 105, 108, 101, 115, 32, 119, > 105, 116, 104, 32, 105, 110, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, > 115, 115, 105, 111, 110, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, > 114, 97, 119, 91, 44, 100, 97, 116, 97, 116, 121, 112, 101, 93, 91, 44, > 119, 105, 100, 116, 104, 93, 91, 44, 104, 101, 105, 103, 104, 116, 91, 44, > 100, 101, 112, 116, 104, 91, 44, 100, 105, 109, 93, 93, 93, 93, 39, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 73, 102, 32, 110, 111, 32, > 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, 97, 114, 101, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 44, 32, 116, 104, 101, 32, 114, 101, > 115, 117, 108, 116, 105, 110, 103, 32, 105, 109, 97, 103, 101, 32, 105, 115, > 32, 97, 32, 111, 110, 101, 45, 99, 111, 108, 117, 109, 110, 32, 118, 101, > 99, 116, 111, 114, 32, 119, 105, 116, 104, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 109, 97, 120, 105, 109, 117, 109, 32, 112, 111, 115, 115, 105, > 98, 108, 101, 32, 104, 101, 105, 103, 104, 116, 46, 32, 80, 105, 120, 101, > 108, 32, 116, 121, 112, 101, 32, 99, 97, 110, 32, 97, 108, 115, 111, 32, > 98, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 119, 105, 116, > 104, 32, 116, 104, 101, 32, 111, 117, 116, 112, 117, 116, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 114, 97, 119, 91, 44, > 100, 97, 116, 97, 116, 121, 112, 101, 93, 39, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 39, 100, 97, 116, 97, 116, 121, 112, 101, 39, 32, > 99, 97, 110, 32, 98, 101, 32, 123, 32, 98, 111, 111, 108, 32, 124, 32, > 117, 99, 104, 97, 114, 32, 124, 32, 99, 104, 97, 114, 32, 124, 32, 117, > 115, 104, 111, 114, 116, 32, 124, 32, 115, 104, 111, 114, 116, 32, 124, 32, > 117, 105, 110, 116, 32, 124, 32, 105, 110, 116, 32, 124, 32, 117, 108, 111, > 110, 103, 32, 124, 32, 108, 111, 110, 103, 32, 124, 32, 102, 108, 111, 97, > 116, 32, 124, 32, 100, 111, 117, 98, 108, 101, 32, 125, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 46, 121, 117, 118, 32, 102, 105, 108, 101, 115, > 58, 32, 73, 109, 97, 103, 101, 32, 100, 105, 109, 101, 110, 115, 105, 111, > 110, 115, 32, 109, 117, 115, 116, 32, 98, 101, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 44, 32, 97, 110, 100, 32, 111, 110, 108, 121, 32, 115, > 117, 98, 45, 102, 114, 97, 109, 101, 115, 32, 111, 102, 32, 97, 110, 32, > 105, 109, 97, 103, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 115, > 101, 113, 117, 101, 110, 99, 101, 32, 109, 97, 121, 32, 98, 101, 32, 108, > 111, 97, 100, 101, 100, 44, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, > 32, 105, 110, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, 110, > 97, 109, 101, 46, 121, 117, 118, 44, 119, 105, 100, 116, 104, 44, 104, 101, > 105, 103, 104, 116, 91, 44, 102, 105, 114, 115, 116, 95, 102, 114, 97, 109, > 101, 91, 44, 108, 97, 115, 116, 95, 102, 114, 97, 109, 101, 91, 44, 115, > 116, 101, 112, 93, 93, 93, 39, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 46, 116, 105, 102, 102, 32, 102, 105, 108, 101, 115, 58, 32, 79, 110, > 108, 121, 32, 115, 117, 98, 45, 105, 109, 97, 103, 101, 115, 32, 111, 102, > 32, 109, 117, 108, 116, 105, 45, 112, 97, 103, 101, 115, 32, 116, 105, 102, > 102, 32, 102, 105, 108, 101, 115, 32, 99, 97, 110, 32, 98, 101, 32, 108, > 111, 97, 100, 101, 100, 44, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, > 32, 105, 110, 112, 117, 116, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 102, 105, 108, 101, > 110, 97, 109, 101, 46, 116, 105, 102, 44, 91, 102, 105, 114, 115, 116, 95, > 102, 114, 97, 109, 101, 44, 91, 108, 97, 115, 116, 95, 102, 114, 97, 109, > 101, 44, 91, 115, 116, 101, 112, 93, 93, 93, 39, 46, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 79, 117, 116, 112, 117, 116, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 32, 39, 102, 105, 108, 101, 110, 97, 109, > 101, 46, 116, 105, 102, 102, 44, 91, 100, 97, 116, 97, 116, 121, 112, 101, > 91, 44, 99, 111, 109, 112, 114, 101, 115, 115, 105, 111, 110, 93, 93, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 116, 111, 32, > 115, 112, 101, 99, 105, 102, 121, 32, 116, 104, 101, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 111, 117, 116, 112, 117, 116, 32, 112, 105, 120, 101, > 108, 32, 116, 121, 112, 101, 44, 32, 97, 115, 32, 119, 101, 108, 108, 32, > 97, 115, 32, 116, 104, 101, 32, 99, 111, 109, 112, 114, 101, 115, 115, 105, > 111, 110, 32, 109, 101, 116, 104, 111, 100, 46, 32, 39, 99, 111, 109, 112, > 114, 101, 115, 115, 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 123, 32, 48, 61, 110, 111, 110, > 101, 32, 124, 32, 49, 61, 67, 67, 73, 84, 84, 82, 76, 69, 32, 124, > 32, 50, 61, 67, 67, 73, 84, 84, 52, 32, 124, 32, 51, 61, 67, 67, > 73, 84, 84, 54, 32, 124, 32, 52, 61, 76, 90, 87, 32, 124, 32, 53, > 61, 74, 80, 69, 71, 49, 32, 124, 32, 54, 61, 74, 80, 69, 71, 50, > 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 39, 100, 97, 116, > 97, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 98, 111, 111, 108, 32, 124, 32, 117, 99, 104, 97, 114, 32, 124, 32, 99, > 104, 97, 114, 32, 124, 32, 117, 115, 104, 111, 114, 116, 32, 124, 32, 115, > 104, 111, 114, 116, 32, 124, 32, 117, 105, 110, 116, 32, 124, 32, 105, 110, > 116, 32, 124, 32, 117, 108, 111, 110, 103, 32, 124, 32, 108, 111, 110, 103, > 32, 124, 32, 102, 108, 111, 97, 116, 32, 124, 32, 100, 111, 117, 98, 108, > 101, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 46, 103, 105, > 102, 32, 102, 105, 108, 101, 115, 58, 32, 65, 110, 105, 109, 97, 116, 101, > 100, 32, 103, 105, 102, 32, 102, 105, 108, 101, 115, 32, 99, 97, 110, 32, > 98, 101, 32, 115, 97, 118, 101, 100, 44, 32, 117, 115, 105, 110, 103, 32, > 116, 104, 101, 32, 105, 110, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 39, 102, 105, > 108, 101, 110, 97, 109, 101, 46, 103, 105, 102, 44, 102, 112, 115, 44, 110, > 98, 95, 108, 111, 111, 112, 115, 39, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 83, 112, 101, 99, 105, 102, 121, 32, 39, 110, 98, 95, 108, 111, > 111, 112, 115, 61, 48, 39, 32, 116, 111, 32, 103, 101, 116, 32, 97, 110, > 32, 105, 110, 102, 105, 110, 105, 116, 101, 32, 110, 117, 109, 98, 101, 114, > 32, 111, 102, 32, 97, 110, 105, 109, 97, 116, 105, 111, 110, 32, 108, 111, > 111, 112, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 46, 106, 112, > 101, 103, 32, 102, 105, 108, 101, 115, 58, 32, 84, 104, 101, 32, 111, 117, > 116, 112, 117, 116, 32, 113, 117, 97, 108, 105, 116, 121, 32, 109, 97, 121, > 32, 98, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 40, 105, > 110, 32, 37, 41, 44, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, > 111, 117, 116, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, > 110, 97, 109, 101, 46, 106, 112, 103, 44, 51, 48, 39, 32, 40, 104, 101, > 114, 101, 44, 32, 116, 111, 32, 103, 101, 116, 32, 97, 32, 51, 48, 37, > 32, 113, 117, 97, 108, 105, 116, 121, 32, 111, 117, 116, 112, 117, 116, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 46, 109, 110, 99, 32, 102, > 105, 108, 101, 115, 58, 32, 84, 104, 101, 32, 111, 117, 116, 112, 117, 116, > 32, 104, 101, 97, 100, 101, 114, 32, 99, 97, 110, 32, 115, 101, 116, 32, > 102, 114, 111, 109, 32, 97, 110, 111, 116, 104, 101, 114, 32, 102, 105, 108, > 101, 44, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 111, 117, 116, > 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, 110, 97, 109, > 101, 46, 109, 110, 99, 44, 104, 101, 97, 100, 101, 114, 95, 116, 101, 109, > 112, 108, 97, 116, 101, 46, 109, 110, 99, 39, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 46, 112, 97, 110, 44, 32, 46, 99, 112, 112, 44, 32, > 46, 104, 112, 112, 44, 32, 46, 99, 32, 97, 110, 100, 32, 46, 104, 32, > 102, 105, 108, 101, 115, 58, 32, 84, 104, 101, 32, 111, 117, 116, 112, 117, > 116, 32, 100, 97, 116, 97, 116, 121, 112, 101, 32, 99, 97, 110, 32, 98, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 119, 105, 116, 104, 32, > 111, 117, 116, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, > 110, 97, 109, 101, 91, 44, 100, 97, 116, 97, 116, 121, 112, 101, 93, 39, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 39, 100, 97, 116, 97, 116, > 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 98, 111, > 111, 108, 32, 124, 32, 117, 99, 104, 97, 114, 32, 124, 32, 99, 104, 97, > 114, 32, 124, 32, 117, 115, 104, 111, 114, 116, 32, 124, 32, 115, 104, 111, > 114, 116, 32, 124, 32, 117, 105, 110, 116, 32, 124, 32, 105, 110, 116, 32, > 124, 32, 117, 108, 111, 110, 103, 32, 124, 32, 108, 111, 110, 103, 32, 124, > 32, 102, 108, 111, 97, 116, 32, 124, 32, 100, 111, 117, 98, 108, 101, 32, > 125, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 46, 103, 109, 105, 99, > 32, 102, 105, 108, 101, 115, 58, 32, 84, 104, 101, 115, 101, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 115, 32, 97, 114, 101, 32, 97, 115, 115, 117, > 109, 101, 100, 32, 116, 111, 32, 98, 101, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, > 115, 32, 102, 105, 108, 101, 115, 46, 32, 76, 111, 97, 100, 105, 110, 103, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 115, 117, 99, 104, 32, 97, > 32, 102, 105, 108, 101, 32, 119, 105, 108, 108, 32, 97, 100, 100, 32, 116, > 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 105, 116, 32, 100, > 101, 102, 105, 110, 101, 115, 32, 116, 111, 32, 116, 104, 101, 32, 105, 110, > 116, 101, 114, 112, 114, 101, 116, 101, 114, 46, 32, 68, 101, 98, 117, 103, > 32, 105, 110, 102, 111, 115, 32, 99, 97, 110, 32, 98, 101, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 101, 110, 97, 98, 108, 101, 100, 47, 100, > 105, 115, 97, 98, 108, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 105, > 110, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, > 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 103, 109, 105, 99, 44, 97, > 100, 100, 95, 100, 101, 98, 117, 103, 95, 105, 110, 102, 111, 115, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 39, 46, 10, 92, 110, 32, 32, 32, > 32, 46, 32, 73, 110, 115, 101, 114, 116, 105, 110, 103, 32, 39, 101, 120, > 116, 58, 39, 32, 111, 110, 32, 116, 104, 101, 32, 98, 101, 103, 105, 110, > 110, 105, 110, 103, 32, 111, 102, 32, 97, 32, 102, 105, 108, 101, 110, 97, > 109, 101, 32, 40, 101, 46, 103, 46, 32, 39, 106, 112, 103, 58, 102, 105, > 108, 101, 110, 97, 109, 101, 39, 41, 32, 102, 111, 114, 99, 101, 115, 32, > 71, 92, 52, 55, 77, 73, 67, 32, 116, 111, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 114, 101, 97, 100, 47, 119, 114, 105, 116, 101, 32, 116, > 104, 101, 32, 102, 105, 108, 101, 32, 97, 115, 32, 105, 116, 32, 119, 111, > 117, 108, 100, 32, 104, 97, 118, 101, 32, 98, 101, 101, 110, 32, 100, 111, > 110, 101, 32, 105, 102, 32, 105, 116, 32, 104, 97, 100, 32, 116, 104, 101, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 101, 120, 116, 101, 110, > 115, 105, 111, 110, 46, 10, 92, 110, 32, 32, 45, 32, 83, 111, 109, 101, > 32, 105, 110, 112, 117, 116, 47, 111, 117, 116, 112, 117, 116, 32, 102, 111, > 114, 109, 97, 116, 115, 32, 97, 110, 100, 32, 111, 112, 116, 105, 111, 110, > 115, 32, 109, 97, 121, 32, 110, 111, 116, 32, 98, 101, 32, 115, 117, 112, > 112, 111, 114, 116, 101, 100, 32, 98, 121, 32, 121, 111, 117, 114, 32, 99, > 117, 114, 114, 101, 110, 116, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, > 102, 10, 92, 110, 32, 32, 32, 32, 32, 39, 103, 109, 105, 99, 39, 44, > 32, 100, 101, 112, 101, 110, 100, 105, 110, 103, 32, 111, 110, 32, 116, 104, > 101, 32, 99, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 32, > 102, 108, 97, 103, 115, 32, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, > 101, 32, 98, 117, 105, 108, 100, 32, 111, 102, 32, 116, 104, 101, 32, 39, > 103, 109, 105, 99, 39, 32, 98, 105, 110, 97, 114, 105, 101, 115, 46, 34, > 10, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, > 34, 83, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 32, 114, 117, > 108, 101, 115, 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, > 103, 114, 97, 112, 104, 32, 34, 32, 32, 45, 32, 71, 92, 52, 55, 77, > 73, 67, 32, 105, 116, 101, 109, 115, 32, 99, 111, 110, 116, 97, 105, 110, > 105, 110, 103, 32, 39, 64, 39, 44, 32, 39, 36, 39, 32, 111, 114, 32, > 39, 123, 125, 39, 32, 109, 97, 121, 32, 98, 101, 32, 115, 117, 98, 115, > 116, 105, 116, 117, 116, 101, 100, 32, 98, 101, 102, 111, 114, 101, 32, 98, > 101, 105, 110, 103, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 100, > 46, 32, 85, 115, 101, 10, 92, 110, 32, 32, 32, 32, 32, 116, 104, 101, > 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 110, 103, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, 98, 101, 108, 111, 119, 32, > 116, 111, 32, 97, 99, 99, 101, 115, 115, 32, 100, 97, 116, 97, 32, 102, > 114, 111, 109, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 112, 114, 101, > 116, 101, 114, 32, 101, 110, 118, 105, 114, 111, 110, 109, 101, 110, 116, 58, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 35, 39, 32, 105, 115, > 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, > 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 110, 117, 109, 98, > 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, > 116, 104, 101, 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 39, 64, 42, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, > 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 110, 117, 109, > 98, 101, 114, 32, 111, 102, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, > 32, 99, 112, 117, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, > 64, 46, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, > 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, > 116, 32, 118, 101, 114, 115, 105, 111, 110, 32, 110, 117, 109, 98, 101, 114, > 32, 111, 102, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 64, 94, 39, 32, 105, 115, 32, 115, 117, 98, 115, > 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, > 117, 114, 114, 101, 110, 116, 32, 118, 101, 114, 98, 111, 115, 105, 116, 121, > 32, 108, 101, 118, 101, 108, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, > 39, 64, 37, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 112, 105, 100, 32, 111, > 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, > 111, 99, 101, 115, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, > 64, 124, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, > 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, > 116, 32, 118, 97, 108, 117, 101, 32, 40, 101, 120, 112, 114, 101, 115, 115, > 101, 100, 32, 105, 110, 32, 115, 101, 99, 111, 110, 100, 115, 41, 32, 111, > 102, 32, 97, 32, 109, 105, 108, 108, 105, 115, 101, 99, 111, 110, 100, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 112, 114, 101, 99, 105, 115, 105, > 111, 110, 32, 116, 105, 109, 101, 114, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 39, 64, 63, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, > 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, 117, 114, > 114, 101, 110, 116, 32, 100, 97, 116, 97, 32, 116, 121, 112, 101, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 32, 112, 105, 120, 101, 108, 115, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 47, 39, 32, 105, 115, 32, > 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, > 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 110, 117, 109, 98, 101, > 114, 32, 111, 102, 32, 108, 101, 118, 101, 108, 115, 32, 105, 110, 32, 116, > 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 115, 99, 111, 112, 101, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 123, 47, 125, 39, > 32, 111, 114, 32, 39, 64, 123, 47, 44, 115, 117, 98, 115, 101, 116, 125, > 39, 32, 97, 114, 101, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, > 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, 111, 110, 116, 101, 110, 116, > 32, 111, 102, 32, 116, 104, 101, 32, 103, 108, 111, 98, 97, 108, 32, 115, > 99, 111, 112, 101, 44, 32, 111, 114, 32, 97, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 115, 117, 98, 115, 101, 116, 32, 111, 102, 32, 105, 116, > 46, 32, 73, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, > 117, 98, 115, 101, 116, 32, 114, 101, 102, 101, 114, 115, 32, 116, 111, 32, > 109, 117, 108, 116, 105, 112, 108, 101, 32, 115, 99, 111, 112, 101, 32, 105, > 116, 101, 109, 115, 44, 32, 116, 104, 101, 121, 32, 97, 114, 101, 32, 115, > 101, 112, 97, 114, 97, 116, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 98, 121, 32, 115, 108, 97, 115, 104, 101, 115, 32, 39, 47, 39, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 62, 39, 32, 97, > 110, 100, 32, 39, 64, 60, 39, 32, 97, 114, 101, 32, 101, 113, 117, 105, > 118, 97, 108, 101, 110, 116, 46, 32, 84, 104, 101, 121, 32, 97, 114, 101, > 32, 98, 111, 116, 104, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, > 100, 32, 98, 121, 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, > 111, 102, 32, 110, 101, 115, 116, 101, 100, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 39, 114, 101, 112, 101, 97, 116, 45, 100, 111, 110, 101, 39, > 32, 108, 111, 111, 112, 115, 32, 116, 104, 97, 116, 32, 97, 114, 101, 32, > 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 114, 117, 110, 110, 105, 110, > 103, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 123, 62, 125, > 39, 32, 111, 114, 32, 39, 64, 123, 62, 44, 115, 117, 98, 115, 101, 116, > 125, 39, 32, 97, 114, 101, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, > 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 105, 110, 100, 105, 99, 101, > 32, 118, 97, 108, 117, 101, 115, 32, 40, 111, 114, 32, 97, 32, 115, 117, > 98, 115, 101, 116, 32, 111, 102, 32, 116, 104, 101, 109, 41, 32, 111, 102, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 116, 104, 101, 32, 114, 117, > 110, 110, 105, 110, 103, 32, 39, 114, 101, 112, 101, 97, 116, 45, 100, 111, > 110, 101, 39, 32, 108, 111, 111, 112, 115, 44, 32, 101, 120, 112, 114, 101, > 115, 115, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 97, 115, 99, 101, > 110, 100, 105, 110, 103, 32, 111, 114, 100, 101, 114, 44, 32, 115, 116, 97, > 114, 116, 105, 110, 103, 32, 102, 114, 111, 109, 32, 48, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 73, 102, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 115, 117, 98, 115, 101, 116, 32, 114, 101, 102, 101, 114, > 115, 32, 116, 111, 32, 109, 117, 108, 116, 105, 112, 108, 101, 32, 105, 110, > 100, 105, 99, 101, 115, 44, 32, 116, 104, 101, 121, 32, 97, 114, 101, 32, > 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, > 109, 97, 115, 32, 39, 44, 39, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 39, 64, 123, 60, 125, 39, 32, 111, 114, 32, 39, 64, 123, 60, 44, > 115, 117, 98, 115, 101, 116, 125, 39, 32, 100, 111, 32, 116, 104, 101, 32, > 115, 97, 109, 101, 32, 98, 117, 116, 32, 105, 110, 32, 100, 101, 115, 99, > 101, 110, 100, 105, 110, 103, 32, 111, 114, 100, 101, 114, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 39, 64, 105, 110, 100, 105, 99, 101, 39, 32, > 111, 114, 32, 39, 64, 123, 105, 110, 100, 105, 99, 101, 44, 102, 101, 97, > 116, 117, 114, 101, 125, 39, 32, 97, 114, 101, 32, 115, 117, 98, 115, 116, > 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 108, 105, > 115, 116, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, > 101, 115, 32, 111, 102, 32, 116, 104, 101, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 105, 109, 97, 103, 101, 32, 91, 105, 110, 100, 105, 99, 101, > 93, 32, 40, 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, > 99, 111, 109, 109, 97, 115, 41, 44, 32, 111, 114, 32, 98, 121, 32, 97, > 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, 102, 101, 97, 116, 117, 114, > 101, 32, 40, 111, 114, 32, 115, 117, 98, 115, 101, 116, 41, 32, 111, 102, > 32, 105, 116, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 39, 105, > 110, 100, 105, 99, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 97, 110, > 32, 105, 110, 100, 105, 99, 101, 32, 111, 114, 32, 97, 110, 32, 105, 109, > 97, 103, 101, 32, 110, 97, 109, 101, 46, 32, 82, 101, 113, 117, 101, 115, > 116, 101, 100, 32, 39, 102, 101, 97, 116, 117, 114, 101, 100, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 111, 110, 101, 32, 111, 102, 58, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 119, 39, 58, 32, > 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, 104, 32, 40, 110, 117, 109, > 98, 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 99, 111, 108, > 117, 109, 110, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 104, 39, 58, 32, 105, 109, 97, 103, 101, 32, 104, > 101, 105, 103, 104, 116, 32, 40, 110, 117, 109, 98, 101, 114, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 32, 114, 111, 119, 115, 41, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 100, 39, 58, 32, > 105, 109, 97, 103, 101, 32, 100, 101, 112, 116, 104, 32, 40, 110, 117, 109, > 98, 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 115, 108, 105, > 99, 101, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 115, 39, 58, 32, 105, 109, 97, 103, 101, 32, 115, 112, > 101, 99, 116, 114, 117, 109, 32, 40, 110, 117, 109, 98, 101, 114, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 32, 99, 104, 97, 110, 110, 101, 108, 115, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 119, 104, 39, 58, 32, 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, > 104, 32, 120, 32, 105, 109, 97, 103, 101, 32, 104, 101, 105, 103, 104, 116, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 119, 104, 100, 39, 58, 32, 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, > 104, 32, 120, 32, 105, 109, 97, 103, 101, 32, 104, 101, 105, 103, 104, 116, > 32, 120, 32, 105, 109, 97, 103, 101, 32, 100, 101, 112, 116, 104, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 119, 104, > 100, 115, 39, 58, 32, 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, 104, > 32, 120, 32, 105, 109, 97, 103, 101, 32, 104, 101, 105, 103, 104, 116, 32, > 120, 32, 105, 109, 97, 103, 101, 32, 100, 101, 112, 116, 104, 32, 120, 32, > 105, 109, 97, 103, 101, 32, 115, 112, 101, 99, 116, 114, 117, 109, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 40, 105, 46, 101, 46, 32, 110, 117, 109, 98, 101, > 114, 32, 111, 102, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 116, > 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 109, 97, > 103, 101, 44, 32, 101, 113, 46, 32, 116, 111, 32, 39, 35, 39, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 114, > 39, 58, 32, 105, 109, 97, 103, 101, 32, 115, 104, 97, 114, 101, 100, 32, > 115, 116, 97, 116, 101, 32, 40, 49, 44, 32, 105, 102, 32, 116, 104, 101, > 32, 112, 105, 120, 101, 108, 32, 98, 117, 102, 102, 101, 114, 32, 105, 115, > 32, 115, 104, 97, 114, 101, 100, 44, 32, 48, 32, 111, 116, 104, 101, 114, > 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 110, 39, 58, 32, 105, 109, 97, 103, 101, 32, 110, > 97, 109, 101, 32, 111, 114, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, > 40, 105, 102, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 104, 97, > 115, 32, 98, 101, 101, 110, 32, 114, 101, 97, 100, 32, 102, 114, 111, 109, > 32, 97, 32, 102, 105, 108, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 46, 32, 39, 98, 39, 58, 32, 105, 109, 97, 103, > 101, 32, 98, 97, 115, 101, 110, 97, 109, 101, 32, 40, 105, 46, 101, 46, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 119, 105, 116, 104, 111, 117, > 116, 32, 116, 104, 101, 32, 102, 111, 108, 100, 101, 114, 32, 112, 97, 116, > 104, 32, 110, 111, 114, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 120, 39, 58, 32, 105, 109, 97, 103, 101, 32, 101, 120, 116, 101, 110, 115, > 105, 111, 110, 32, 40, 105, 46, 101, 32, 108, 97, 115, 116, 32, 99, 104, > 97, 114, 97, 99, 116, 101, 114, 115, 32, 97, 102, 116, 101, 114, 32, 116, > 104, 101, 32, 108, 97, 115, 116, 32, 39, 46, 39, 32, 105, 110, 32, 116, > 104, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, 41, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 102, 39, 58, 32, > 105, 109, 97, 103, 101, 32, 102, 111, 108, 100, 101, 114, 32, 110, 97, 109, > 101, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 35, 39, 58, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 32, 118, 97, 108, 117, 101, 115, 32, 40, 105, 46, 101, > 46, 32, 119, 105, 100, 116, 104, 32, 120, 32, 104, 101, 105, 103, 104, 116, > 32, 120, 32, 100, 101, 112, 116, 104, 32, 120, 32, 115, 112, 101, 99, 116, > 114, 117, 109, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 43, 39, 58, 32, 115, 117, 109, 32, 111, 102, 32, 97, > 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 45, > 39, 58, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 32, 111, 102, > 32, 97, 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, > 115, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 42, 39, 58, 32, 112, 114, 111, 100, 117, 99, 116, 32, 111, 102, 32, > 97, 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 47, 39, 58, 32, 113, 117, 111, 116, 105, 101, 110, 116, 32, 111, 102, 32, > 97, 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 109, 39, 58, 32, 109, 105, 110, 105, 109, 117, 109, 32, 112, 105, 120, 101, > 108, 32, 118, 97, 108, 117, 101, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 46, 32, 39, 77, 39, 58, 32, 109, 97, 120, 105, 109, > 117, 109, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 97, 39, > 58, 32, 97, 118, 101, 114, 97, 103, 101, 32, 112, 105, 120, 101, 108, 32, > 118, 97, 108, 117, 101, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 118, 39, 58, 32, 118, 97, 114, 105, 97, 110, 99, > 101, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, > 115, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 116, 39, 58, 32, 116, 101, 120, 116, 32, 115, 116, 114, 105, 110, 103, > 32, 98, 117, 105, 108, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, > 105, 109, 97, 103, 101, 32, 118, 97, 108, 117, 101, 115, 44, 32, 114, 101, > 103, 97, 114, 100, 101, 100, 32, 97, 115, 32, 97, 115, 99, 105, 105, 32, > 99, 111, 100, 101, 115, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 99, 39, 58, 32, 40, 120, 44, 121, 44, 122, 44, > 99, 41, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 32, 111, > 102, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 117, 109, 32, 118, 97, > 108, 117, 101, 44, 32, 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, > 121, 32, 99, 111, 109, 109, 97, 115, 32, 39, 44, 39, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 67, 39, 58, 32, > 40, 120, 44, 121, 44, 122, 44, 99, 41, 32, 99, 111, 111, 114, 100, 105, > 110, 97, 116, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 109, 97, 120, > 105, 109, 117, 109, 32, 118, 97, 108, 117, 101, 44, 32, 115, 101, 112, 97, > 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, 109, 97, 115, 32, > 39, 44, 39, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 46, 32, 39, 40, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, 44, 95, > 122, 91, 37, 93, 44, 95, 99, 91, 37, 93, 44, 95, 98, 111, 117, 110, > 100, 97, 114, 121, 41, 39, 58, 32, 112, 105, 120, 101, 108, 32, 118, 97, > 108, 117, 101, 32, 97, 116, 32, 40, 120, 91, 37, 93, 44, 121, 91, 37, > 93, 44, 122, 91, 37, 93, 44, 99, 91, 37, 93, 41, 44, 32, 119, 105, > 116, 104, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 111, 117, 110, 100, > 97, 114, 121, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 46, 32, 65, 110, 121, 32, 111, 116, 104, 101, 114, 32, > 39, 102, 101, 97, 116, 117, 114, 101, 39, 32, 105, 115, 32, 99, 111, 110, > 115, 105, 100, 101, 114, 101, 100, 32, 101, 105, 116, 104, 101, 114, 32, 97, > 115, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 117, > 98, 115, 101, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 118, 97, > 108, 117, 101, 115, 44, 32, 111, 114, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 97, 115, 32, 97, 32, 109, 97, 116, 104, > 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, > 105, 111, 110, 32, 116, 111, 32, 101, 118, 97, 108, 117, 97, 116, 101, 32, > 40, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 116, 111, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 41, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70, 111, > 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 39, 64, 123, 45, > 49, 44, 48, 45, 53, 48, 37, 125, 39, 32, 105, 115, 32, 115, 117, 98, > 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, > 115, 101, 113, 117, 101, 110, 99, 101, 32, 111, 102, 32, 110, 117, 109, 101, > 114, 105, 99, 97, 108, 32, 118, 97, 108, 117, 101, 115, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 109, 105, 110, > 103, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 105, 114, 115, 116, > 32, 104, 97, 108, 102, 32, 100, 97, 116, 97, 32, 111, 102, 32, 116, 104, > 101, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, 101, 44, 32, 115, 101, > 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, 109, 97, > 115, 32, 39, 44, 39, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, > 39, 64, 123, 48, 44, 119, 43, 104, 125, 39, 32, 105, 115, 32, 115, 117, > 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, > 32, 115, 117, 109, 32, 111, 102, 32, 116, 104, 101, 32, 119, 105, 100, 116, > 104, 32, 97, 110, 100, 32, 104, 101, 105, 103, 104, 116, 32, 111, 102, 32, > 116, 104, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 102, 105, 114, 115, 116, 32, 105, 109, 97, 103, 101, 46, 10, 92, > 110, 32, 32, 32, 32, 46, 32, 39, 64, 33, 39, 32, 105, 115, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, > 101, 32, 118, 105, 115, 105, 98, 105, 108, 105, 116, 121, 32, 115, 116, 97, > 116, 101, 32, 111, 102, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, > 116, 32, 100, 105, 115, 112, 108, 97, 121, 32, 119, 105, 110, 100, 111, 119, > 32, 91, 48, 93, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 40, 99, > 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 99, 108, 111, 115, 101, 100, > 32, 124, 32, 49, 61, 118, 105, 115, 105, 98, 108, 101, 32, 125, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 123, 33, 44, 102, 101, > 97, 116, 117, 114, 101, 125, 39, 32, 111, 114, 32, 39, 64, 123, 33, 105, > 110, 100, 105, 99, 101, 44, 102, 101, 97, 116, 117, 114, 101, 125, 39, 32, > 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, > 121, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, 102, 101, 97, > 116, 117, 114, 101, 32, 111, 102, 32, 116, 104, 101, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 105, 110, 115, 116, 97, 110, 116, 32, 100, 105, 115, > 112, 108, 97, 121, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, > 40, 111, 114, 32, 91, 105, 110, 100, 105, 99, 101, 93, 44, 32, 105, 102, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 41, 46, 32, 82, 101, 113, > 117, 101, 115, 116, 101, 100, 32, 39, 102, 101, 97, 116, 117, 114, 101, 39, > 32, 99, 97, 110, 32, 98, 101, 58, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 46, 32, 39, 119, 39, 58, 32, 100, 105, 115, 112, 108, > 97, 121, 32, 119, 105, 100, 116, 104, 32, 40, 105, 46, 101, 46, 32, 119, > 105, 100, 116, 104, 32, 111, 102, 32, 116, 104, 101, 32, 100, 105, 115, 112, > 108, 97, 121, 32, 97, 114, 101, 97, 32, 109, 97, 110, 97, 103, 101, 100, > 32, 98, 121, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 104, > 39, 58, 32, 100, 105, 115, 112, 108, 97, 121, 32, 104, 101, 105, 103, 104, > 116, 32, 40, 105, 46, 101, 46, 32, 104, 101, 105, 103, 104, 116, 32, 111, > 102, 32, 116, 104, 101, 32, 100, 105, 115, 112, 108, 97, 121, 32, 97, 114, > 101, 97, 32, 109, 97, 110, 97, 103, 101, 100, 32, 98, 121, 32, 116, 104, > 101, 32, 119, 105, 110, 100, 111, 119, 41, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 119, 104, 39, 58, 32, 100, 105, > 115, 112, 108, 97, 121, 32, 119, 105, 100, 116, 104, 32, 120, 32, 100, 105, > 115, 112, 108, 97, 121, 32, 104, 101, 105, 103, 104, 116, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 100, 39, 58, 32, > 119, 105, 110, 100, 111, 119, 32, 119, 105, 100, 116, 104, 32, 40, 105, 46, > 101, 46, 32, 119, 105, 100, 116, 104, 32, 111, 102, 32, 116, 104, 101, 32, > 119, 105, 110, 100, 111, 119, 32, 119, 105, 100, 103, 101, 116, 41, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 101, 39, > 58, 32, 119, 105, 110, 100, 111, 119, 32, 104, 101, 105, 103, 104, 116, 32, > 40, 105, 46, 101, 46, 32, 104, 101, 105, 103, 104, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 32, 119, 105, 100, 103, 101, > 116, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, > 32, 39, 100, 101, 39, 58, 32, 119, 105, 110, 100, 111, 119, 32, 119, 105, > 100, 116, 104, 32, 120, 32, 119, 105, 110, 100, 111, 119, 32, 104, 101, 105, > 103, 104, 116, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 46, 32, 39, 117, 39, 58, 32, 115, 99, 114, 101, 101, 110, 32, 119, 105, > 100, 116, 104, 32, 40, 97, 99, 116, 117, 97, 108, 108, 121, 32, 105, 110, > 100, 101, 112, 101, 110, 100, 101, 110, 116, 32, 111, 110, 32, 116, 104, 101, > 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 41, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 39, 32, 118, 39, 58, > 32, 115, 99, 114, 101, 101, 110, 32, 104, 101, 105, 103, 104, 116, 32, 40, > 97, 99, 116, 117, 97, 108, 108, 121, 32, 105, 110, 100, 101, 112, 101, 110, > 100, 101, 110, 116, 32, 111, 110, 32, 116, 104, 101, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 46, 32, 39, 117, 118, 39, 58, 32, 115, 99, 114, > 101, 101, 110, 32, 119, 105, 100, 116, 104, 32, 120, 32, 115, 99, 114, 101, > 101, 110, 32, 104, 101, 105, 103, 104, 116, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 120, 39, 58, 32, 88, 45, 99, > 111, 111, 114, 100, 105, 110, 97, 116, 101, 32, 111, 102, 32, 116, 104, 101, > 32, 109, 111, 117, 115, 101, 32, 112, 111, 115, 105, 116, 105, 111, 110, 32, > 40, 111, 114, 32, 45, 49, 44, 32, 105, 102, 32, 111, 117, 116, 115, 105, > 100, 101, 32, 116, 104, 101, 32, 100, 105, 115, 112, 108, 97, 121, 32, 97, > 114, 101, 97, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 121, 39, 58, 32, 89, 45, 99, 111, 111, 114, 100, 105, > 110, 97, 116, 101, 32, 111, 102, 32, 116, 104, 101, 32, 109, 111, 117, 115, > 101, 32, 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 111, 114, 32, 45, > 49, 44, 32, 105, 102, 32, 111, 117, 116, 115, 105, 100, 101, 32, 116, 104, > 101, 32, 100, 105, 115, 112, 108, 97, 121, 32, 97, 114, 101, 97, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 98, > 39, 58, 32, 115, 116, 97, 116, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 115, 32, 123, 32, > 49, 61, 108, 101, 102, 116, 45, 98, 117, 116, 46, 32, 124, 32, 50, 61, > 114, 105, 103, 104, 116, 45, 98, 117, 116, 46, 32, 124, 32, 52, 61, 109, > 105, 100, 100, 108, 101, 45, 98, 117, 116, 46, 32, 125, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 111, 39, 58, 32, > 115, 116, 97, 116, 101, 32, 111, 102, 32, 116, 104, 101, 32, 109, 111, 117, > 115, 101, 32, 119, 104, 101, 101, 108, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 46, 32, 39, 107, 39, 58, 32, 100, 101, 99, 105, > 109, 97, 108, 32, 99, 111, 100, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 112, 114, 101, 115, 115, 101, 100, 32, 107, 101, 121, 32, 105, 102, 32, 97, > 110, 121, 44, 32, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 110, > 39, 58, 32, 99, 117, 114, 114, 101, 110, 116, 32, 110, 111, 114, 109, 97, > 108, 105, 122, 97, 116, 105, 111, 110, 32, 116, 121, 112, 101, 32, 111, 102, > 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, 100, 105, 115, > 112, 108, 97, 121, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 99, 39, 58, 32, 98, 111, 111, 108, 101, 97, 110, 32, > 40, 48, 32, 111, 114, 32, 49, 41, 32, 116, 101, 108, 108, 105, 110, 103, > 32, 105, 102, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, > 100, 105, 115, 112, 108, 97, 121, 32, 104, 97, 115, 32, 98, 101, 101, 110, > 32, 99, 108, 111, 115, 101, 100, 32, 114, 101, 99, 101, 110, 116, 108, 121, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 114, 39, 58, 32, 98, 111, 111, 108, 101, 97, 110, 32, 116, 101, 108, 108, > 105, 110, 103, 32, 105, 102, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, > 110, 116, 32, 100, 105, 115, 112, 108, 97, 121, 32, 104, 97, 115, 32, 98, > 101, 101, 110, 32, 114, 101, 115, 105, 122, 101, 100, 32, 114, 101, 99, 101, > 110, 116, 108, 121, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 109, 39, 58, 32, 98, 111, 111, 108, 101, 97, 110, 32, > 116, 101, 108, 108, 105, 110, 103, 32, 105, 102, 32, 116, 104, 101, 32, 105, > 110, 115, 116, 97, 110, 116, 32, 100, 105, 115, 112, 108, 97, 121, 32, 104, > 97, 115, 32, 98, 101, 101, 110, 32, 109, 111, 118, 101, 100, 32, 114, 101, > 99, 101, 110, 116, 108, 121, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 46, 32, 65, 110, 121, 32, 111, 116, 104, 101, 114, 32, 39, > 102, 101, 97, 116, 117, 114, 101, 39, 32, 115, 116, 97, 110, 100, 115, 32, > 102, 111, 114, 32, 97, 32, 107, 101, 121, 99, 111, 100, 101, 32, 110, 97, > 109, 101, 32, 105, 110, 32, 99, 97, 112, 105, 116, 97, 108, 32, 108, 101, > 116, 116, 101, 114, 115, 44, 32, 97, 110, 100, 32, 105, 115, 32, 115, 117, > 98, 115, 116, 105, 45, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, 32, 98, > 111, 111, 108, 101, 97, 110, 32, 100, 101, 115, 99, 114, 105, 98, 105, 110, > 103, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 107, 101, > 121, 32, 115, 116, 97, 116, 101, 32, 123, 32, 48, 61, 112, 114, 101, 115, > 115, 101, 100, 32, 124, 32, 49, 61, 114, 101, 108, 101, 97, 115, 101, 100, > 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 123, 92, > 34, 99, 111, 109, 109, 97, 110, 100, 32, 108, 105, 110, 101, 92, 34, 125, > 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, > 32, 98, 121, 32, 116, 104, 101, 32, 115, 116, 97, 116, 117, 115, 32, 118, > 97, 108, 117, 101, 32, 115, 101, 116, 32, 98, 121, 32, 116, 104, 101, 32, > 101, 120, 101, 99, 117, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 99, 111, 109, 109, 97, 110, 100, 32, 108, 105, 110, 101, > 32, 40, 115, 101, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 45, > 115, 116, 97, 116, 117, 115, 39, 41, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 64, 123, > 125, 39, 32, 115, 116, 97, 110, 100, 115, 32, 116, 104, 117, 115, 32, 102, > 111, 114, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 115, > 116, 97, 116, 117, 115, 32, 118, 97, 108, 117, 101, 46, 10, 92, 110, 32, > 32, 45, 32, 39, 36, 110, 97, 109, 101, 39, 32, 97, 110, 100, 32, 39, > 36, 123, 110, 97, 109, 101, 125, 39, 32, 97, 114, 101, 32, 98, 111, 116, > 104, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, > 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, > 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 110, 97, 109, 101, > 100, 32, 118, 97, 114, 105, 97, 98, 108, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 40, 115, 101, 116, 32, 112, 114, 101, 118, 105, 111, 117, 115, 108, > 121, 32, 98, 121, 32, 105, 116, 101, 109, 32, 39, 110, 97, 109, 101, 61, > 118, 97, 108, 117, 101, 39, 41, 44, 32, 111, 114, 32, 98, 121, 32, 116, > 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 111, 115, 105, 116, > 105, 118, 101, 32, 105, 110, 100, 105, 99, 101, 32, 111, 102, 32, 116, 104, > 101, 32, 110, 97, 109, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 105, > 109, 97, 103, 101, 32, 39, 91, 110, 97, 109, 101, 93, 39, 44, 32, 111, > 114, 32, 98, 121, 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, > 102, 32, 116, 104, 101, 32, 110, 97, 109, 101, 100, 32, 79, 83, 32, 101, > 110, 118, 105, 114, 111, 110, 109, 101, 110, 116, 32, 118, 97, 114, 105, 97, > 98, 108, 101, 32, 40, 105, 110, 32, 116, 104, 105, 115, 32, 111, 114, 100, > 101, 114, 41, 46, 10, 92, 110, 32, 32, 45, 32, 39, 36, 62, 39, 32, > 97, 110, 100, 32, 39, 36, 60, 39, 32, 40, 114, 101, 115, 112, 46, 32, > 39, 36, 123, 62, 125, 39, 32, 97, 110, 100, 32, 39, 36, 123, 60, 125, > 39, 41, 32, 97, 114, 101, 32, 115, 104, 111, 114, 116, 99, 117, 116, 115, > 32, 114, 101, 115, 112, 101, 99, 116, 105, 118, 101, 108, 121, 32, 102, 111, > 114, 32, 39, 64, 123, 62, 44, 45, 49, 125, 39, 32, 97, 110, 100, 10, > 92, 110, 32, 32, 32, 32, 32, 39, 64, 123, 60, 44, 45, 49, 125, 39, > 46, 32, 84, 104, 101, 121, 32, 114, 101, 102, 101, 114, 32, 116, 111, 32, > 116, 104, 101, 32, 105, 110, 99, 114, 101, 97, 115, 105, 110, 103, 47, 100, > 101, 99, 114, 101, 97, 115, 105, 110, 103, 32, 105, 110, 100, 105, 99, 101, > 32, 111, 102, 32, 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, 32, 40, > 99, 117, 114, 114, 101, 110, 116, 108, 121, 10, 92, 110, 32, 32, 32, 32, > 32, 114, 117, 110, 110, 105, 110, 103, 41, 32, 39, 114, 101, 112, 101, 97, > 116, 46, 46, 100, 111, 110, 101, 39, 32, 108, 111, 111, 112, 46, 10, 92, > 110, 32, 32, 45, 32, 65, 110, 121, 32, 111, 116, 104, 101, 114, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 105, 110, 115, 105, 100, 101, > 32, 98, 114, 97, 99, 101, 115, 32, 40, 97, 115, 32, 105, 110, 32, 39, > 123, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 125, 39, 41, 32, 105, > 115, 32, 99, 111, 110, 115, 105, 100, 101, 114, 101, 100, 32, 97, 115, 32, > 97, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 92, > 110, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 44, 32, 97, 110, 100, 32, 105, 115, 32, 101, 118, 97, 108, 117, 97, 116, > 101, 100, 44, 32, 101, 120, 99, 101, 112, 116, 32, 102, 111, 114, 32, 116, > 104, 101, 32, 116, 104, 114, 101, 101, 32, 102, 111, 108, 108, 111, 119, 105, > 110, 103, 32, 99, 97, 115, 101, 115, 58, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 73, 102, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, > 115, 116, 97, 114, 116, 115, 32, 97, 110, 100, 32, 101, 110, 100, 115, 32, > 98, 121, 32, 115, 105, 110, 103, 108, 101, 32, 113, 117, 111, 116, 101, 115, > 44, 32, 105, 116, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 115, 101, 113, 117, 101, > 110, 99, 101, 32, 111, 102, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 97, 115, 99, 105, 105, 32, 99, 111, 100, 101, 115, 32, 116, 104, 97, 116, > 32, 99, 111, 109, 112, 111, 115, 101, 115, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 44, 32, > 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, > 109, 97, 115, 32, 39, 44, 39, 46, 32, 70, 111, 114, 32, 105, 110, 115, > 116, 97, 110, 99, 101, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 105, 116, 101, 109, 32, 39, 123, 39, 102, 111, 111, 39, 125, 39, 32, 105, > 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, > 32, 39, 49, 48, 50, 44, 49, 49, 49, 44, 49, 49, 49, 39, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 73, 102, 32, 101, 120, 112, 114, 101, > 115, 115, 105, 111, 110, 32, 115, 116, 97, 114, 116, 115, 32, 97, 110, 100, > 32, 101, 110, 100, 115, 32, 119, 105, 116, 104, 32, 98, 97, 99, 107, 113, > 117, 111, 116, 101, 115, 32, 39, 96, 39, 44, 32, 105, 116, 32, 105, 115, > 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, > 116, 104, 101, 32, 115, 116, 114, 105, 110, 103, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 119, 104, 111, 115, 101, 32, 97, 115, 99, 105, 105, 32, > 99, 111, 100, 101, 115, 32, 97, 114, 101, 32, 103, 105, 118, 101, 110, 32, > 98, 121, 32, 116, 104, 101, 32, 108, 105, 115, 116, 32, 111, 102, 32, 118, > 97, 108, 117, 101, 115, 32, 105, 110, 32, 98, 101, 116, 119, 101, 101, 110, > 32, 116, 104, 101, 32, 98, 97, 99, 107, 113, 117, 111, 116, 101, 115, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 70, 111, 114, 32, 105, 110, > 115, 116, 97, 110, 99, 101, 44, 32, 105, 116, 101, 109, 32, 39, 123, 96, > 49, 48, 50, 44, 49, 49, 49, 44, 49, 49, 49, 96, 125, 39, 32, 105, > 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, > 32, 39, 102, 111, 111, 39, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, > 73, 102, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 99, 111, > 110, 116, 97, 105, 110, 115, 32, 111, 112, 101, 114, 97, 116, 111, 114, 32, > 39, 39, 61, 61, 39, 39, 32, 111, 114, 32, 39, 39, 33, 61, 39, 39, > 44, 32, 105, 116, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 116, 101, 100, 32, 98, 121, 32, 48, 32, 111, 114, 32, 49, 44, 32, 119, > 104, 101, 116, 104, 101, 114, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 116, 104, 101, 32, 115, 116, 114, 105, 110, 103, 115, 32, 98, 101, 115, 105, > 100, 101, 32, 116, 104, 101, 32, 111, 112, 101, 114, 97, 116, 111, 114, 32, > 97, 114, 101, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 111, 114, 32, > 110, 111, 116, 32, 40, 99, 97, 115, 101, 45, 115, 101, 110, 115, 105, 116, > 105, 118, 101, 41, 46, 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, 110, > 99, 101, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 98, 111, 116, > 104, 32, 105, 116, 101, 109, 115, 32, 39, 123, 102, 111, 111, 39, 61, 61, > 39, 102, 111, 111, 125, 39, 32, 97, 110, 100, 32, 39, 123, 102, 111, 111, > 39, 33, 61, 39, 70, 79, 79, 125, 39, 32, 97, 114, 101, 32, 115, 117, > 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 39, 49, 39, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 73, 102, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 32, 115, 116, 97, 114, 116, 115, 32, 119, > 105, 116, 104, 32, 97, 110, 32, 117, 110, 100, 101, 114, 115, 99, 111, 114, > 101, 32, 39, 95, 39, 44, 32, 105, 116, 32, 105, 115, 32, 115, 117, 98, > 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 101, 118, 97, 108, 117, 97, 116, 105, 111, 110, > 32, 111, 102, 32, 116, 104, 101, 32, 101, 120, 112, 114, 101, 115, 115, 105, > 111, 110, 44, 32, 116, 114, 117, 110, 99, 97, 116, 101, 100, 32, 116, 111, > 32, 97, 32, 114, 101, 97, 100, 97, 98, 108, 101, 32, 102, 111, 114, 109, > 97, 116, 46, 10, 92, 110, 32, 32, 45, 32, 73, 116, 101, 109, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 32, 105, 115, 32, 110, > 101, 118, 101, 114, 32, 100, 111, 110, 101, 32, 105, 110, 32, 105, 116, 101, > 109, 115, 32, 98, 101, 116, 119, 101, 101, 110, 32, 100, 111, 117, 98, 108, > 101, 32, 113, 117, 111, 116, 101, 115, 46, 32, 79, 110, 101, 32, 109, 117, > 115, 116, 32, 98, 114, 101, 97, 107, 32, 116, 104, 101, 32, 113, 117, 111, > 116, 101, 115, 10, 92, 110, 32, 32, 32, 32, 116, 111, 32, 101, 110, 97, > 98, 108, 101, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, > 32, 105, 102, 32, 110, 101, 101, 100, 101, 100, 44, 32, 97, 115, 32, 105, > 110, 32, 92, 34, 51, 43, 56, 32, 107, 103, 32, 61, 32, 92, 34, 123, > 51, 43, 56, 125, 92, 34, 32, 107, 103, 92, 34, 46, 32, 85, 115, 105, > 110, 103, 32, 100, 111, 117, 98, 108, 101, 32, 113, 117, 111, 116, 101, 115, > 10, 92, 110, 32, 32, 32, 32, 105, 115, 32, 116, 104, 101, 110, 32, 97, > 32, 99, 111, 110, 118, 101, 110, 105, 101, 110, 116, 32, 119, 97, 121, 32, > 116, 111, 32, 100, 105, 115, 97, 98, 108, 101, 32, 116, 104, 101, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 115, 32, 109, 101, 99, > 104, 97, 110, 105, 115, 109, 32, 105, 110, 32, 105, 116, 101, 109, 115, 44, > 32, 119, 104, 101, 110, 32, 110, 101, 99, 101, 115, 115, 97, 114, 121, 46, > 10, 92, 110, 32, 32, 45, 32, 79, 110, 101, 32, 99, 97, 110, 32, 97, > 108, 115, 111, 32, 100, 105, 115, 97, 98, 108, 101, 32, 116, 104, 101, 32, > 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 32, 109, 101, 99, > 104, 97, 110, 105, 115, 109, 32, 111, 110, 32, 105, 116, 101, 109, 115, 32, > 111, 117, 116, 115, 105, 100, 101, 32, 100, 111, 117, 98, 108, 101, 32, 113, > 117, 111, 116, 101, 115, 44, 32, 98, 121, 10, 92, 110, 32, 32, 32, 32, > 32, 101, 115, 99, 97, 112, 105, 110, 103, 32, 116, 104, 101, 32, 39, 64, > 39, 44, 39, 123, 39, 44, 39, 125, 39, 32, 111, 114, 32, 39, 36, 39, > 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 44, 32, 97, 115, 32, > 105, 110, 32, 39, 92, 92, 123, 51, 43, 52, 92, 92, 125, 92, 92, 32, > 100, 111, 101, 115, 110, 92, 52, 55, 116, 92, 92, 32, 101, 118, 97, 108, > 117, 97, 116, 101, 39, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, 115, > 101, 99, 116, 105, 111, 110, 32, 34, 77, 97, 116, 104, 101, 109, 97, 116, > 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, > 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, > 112, 104, 32, 34, 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 104, 97, 115, 32, 97, 110, 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 112, 97, 114, > 115, 101, 114, 46, 32, 73, 116, 32, 105, 115, 32, 117, 115, 101, 100, 32, > 116, 111, 32, 101, 118, 97, 108, 117, 97, 116, 101, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 115, 32, 105, 110, 115, 105, 100, 101, 10, 92, > 110, 32, 32, 32, 32, 32, 98, 114, 97, 99, 101, 115, 32, 39, 123, 125, > 39, 44, 32, 111, 114, 32, 102, 111, 114, 109, 117, 108, 97, 115, 32, 105, > 110, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 116, 104, 97, 116, 32, > 109, 97, 121, 32, 116, 97, 107, 101, 32, 111, 110, 101, 32, 97, 115, 32, > 97, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 40, 101, 46, 103, > 46, 32, 39, 45, 102, 105, 108, 108, 39, 41, 46, 10, 92, 110, 32, 32, > 45, 32, 87, 104, 101, 110, 32, 117, 115, 101, 100, 32, 105, 110, 32, 99, > 111, 109, 109, 97, 110, 100, 115, 44, 32, 97, 32, 102, 111, 114, 109, 117, > 108, 97, 32, 105, 115, 32, 101, 118, 97, 108, 117, 97, 116, 101, 100, 32, > 102, 111, 114, 32, 101, 97, 99, 104, 32, 112, 105, 120, 101, 108, 32, 111, > 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, > 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 112, 97, > 114, 115, 101, 114, 32, 117, 110, 100, 101, 114, 115, 116, 97, 110, 100, 115, > 32, 116, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 115, > 101, 116, 32, 111, 102, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 44, > 32, 111, 112, 101, 114, 97, 116, 111, 114, 115, 32, 97, 110, 100, 32, 118, > 97, 114, 105, 97, 98, 108, 101, 115, 58, 10, 92, 110, 32, 32, 32, 32, > 95, 32, 85, 115, 117, 97, 108, 32, 111, 112, 101, 114, 97, 116, 111, 114, > 115, 58, 32, 124, 124, 32, 40, 108, 111, 103, 105, 99, 97, 108, 32, 111, > 114, 41, 44, 32, 38, 38, 32, 40, 108, 111, 103, 105, 99, 97, 108, 32, > 97, 110, 100, 41, 44, 32, 124, 32, 40, 98, 105, 116, 119, 105, 115, 101, > 32, 111, 114, 41, 44, 32, 38, 32, 40, 98, 105, 116, 119, 105, 115, 101, > 32, 97, 110, 100, 41, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 33, 61, 44, 32, 61, 61, 44, 32, 60, 61, 44, 32, 62, 61, 44, 32, > 60, 44, 32, 62, 44, 32, 60, 60, 32, 40, 108, 101, 102, 116, 32, 98, > 105, 116, 119, 105, 115, 101, 32, 115, 104, 105, 102, 116, 41, 44, 32, 62, > 62, 32, 40, 114, 105, 103, 104, 116, 32, 98, 105, 116, 119, 105, 115, 101, > 32, 115, 104, 105, 102, 116, 41, 44, 32, 45, 44, 32, 43, 44, 32, 42, > 44, 32, 47, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 37, 32, > 40, 109, 111, 100, 117, 108, 111, 41, 44, 32, 94, 32, 40, 112, 111, 119, > 101, 114, 41, 44, 32, 33, 32, 40, 108, 111, 103, 105, 99, 97, 108, 32, > 110, 111, 116, 41, 44, 32, 126, 32, 40, 98, 105, 116, 119, 105, 115, 101, > 32, 110, 111, 116, 41, 46, 10, 92, 110, 32, 32, 32, 32, 95, 32, 85, > 115, 117, 97, 108, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 58, 32, > 115, 105, 110, 40, 41, 44, 32, 99, 111, 115, 40, 41, 44, 32, 116, 97, > 110, 40, 41, 44, 32, 97, 115, 105, 110, 40, 41, 44, 32, 97, 99, 111, > 115, 40, 41, 44, 32, 97, 116, 97, 110, 40, 41, 44, 32, 115, 105, 110, > 104, 40, 41, 44, 32, 99, 111, 115, 104, 40, 41, 44, 32, 116, 97, 110, > 104, 40, 41, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 108, 111, > 103, 40, 41, 44, 32, 108, 111, 103, 50, 40, 41, 44, 32, 108, 111, 103, > 49, 48, 40, 41, 44, 32, 101, 120, 112, 40, 41, 44, 32, 115, 105, 103, > 110, 40, 41, 44, 32, 97, 98, 115, 40, 41, 44, 32, 97, 116, 97, 110, > 50, 40, 41, 44, 32, 114, 111, 117, 110, 100, 40, 41, 44, 32, 110, 97, > 114, 103, 40, 41, 44, 32, 97, 114, 103, 40, 41, 44, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 105, 115, 118, 97, 108, 40, 41, 44, 32, 105, > 115, 110, 97, 110, 40, 41, 44, 32, 105, 115, 105, 110, 102, 40, 41, 44, > 32, 105, 115, 105, 110, 116, 40, 41, 44, 32, 105, 115, 98, 111, 111, 108, > 40, 41, 44, 32, 114, 111, 108, 40, 41, 32, 40, 108, 101, 102, 116, 32, > 98, 105, 116, 32, 114, 111, 116, 97, 116, 105, 111, 110, 41, 44, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 114, 111, 114, 40, 41, 32, 40, 114, > 105, 103, 104, 116, 32, 98, 105, 116, 32, 114, 111, 116, 97, 116, 105, 111, > 110, 41, 44, 32, 109, 105, 110, 40, 41, 44, 32, 109, 97, 120, 40, 41, > 44, 32, 109, 101, 100, 40, 41, 44, 32, 107, 116, 104, 40, 41, 44, 32, > 115, 105, 110, 99, 40, 41, 44, 32, 105, 110, 116, 40, 41, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 70, 117, 110, 99, 116, 105, 111, 110, > 32, 39, 97, 116, 97, 110, 50, 40, 41, 39, 32, 105, 115, 32, 116, 104, > 101, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, 97, 116, 97, > 110, 40, 41, 32, 119, 105, 116, 104, 32, 116, 119, 111, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 115, 32, 39, 121, 44, 120, 39, 32, 40, 97, 115, > 32, 105, 110, 32, 67, 47, 67, 43, 43, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 70, 117, 110, 99, 116, 105, 111, 110, 32, 39, 110, > 97, 114, 103, 40, 41, 39, 32, 114, 101, 116, 117, 114, 110, 115, 32, 116, > 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 70, 117, 110, 99, 116, > 105, 111, 110, 32, 39, 97, 114, 103, 40, 105, 44, 97, 95, 49, 44, 46, > 46, 44, 97, 95, 110, 41, 39, 32, 114, 101, 116, 117, 114, 110, 115, 32, > 116, 104, 101, 32, 105, 116, 104, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 32, 97, 95, 105, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 70, > 117, 110, 99, 116, 105, 111, 110, 115, 32, 39, 109, 105, 110, 40, 41, 39, > 44, 32, 39, 109, 97, 120, 40, 41, 39, 44, 32, 39, 109, 101, 100, 40, > 41, 39, 32, 97, 110, 100, 32, 39, 107, 116, 104, 40, 41, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 99, 97, 108, 108, 101, 100, 32, 119, 105, 116, > 104, 32, 97, 110, 32, 97, 114, 98, 105, 116, 114, 97, 114, 121, 32, 110, > 117, 109, 98, 101, 114, 32, 111, 102, 32, 97, 114, 103, 117, 109, 101, 110, > 116, 115, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 70, 117, 110, > 99, 116, 105, 111, 110, 115, 32, 39, 105, 115, 118, 97, 108, 40, 41, 39, > 44, 32, 39, 105, 115, 110, 97, 110, 40, 41, 39, 44, 32, 39, 105, 115, > 105, 110, 102, 40, 41, 39, 44, 32, 39, 105, 115, 98, 111, 111, 108, 40, > 41, 39, 32, 99, 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 116, > 111, 32, 116, 101, 115, 116, 32, 116, 104, 101, 32, 116, 121, 112, 101, 32, > 111, 102, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 97, 32, 103, 105, > 118, 101, 110, 32, 110, 117, 109, 98, 101, 114, 32, 111, 114, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 46, 10, 92, 110, 32, 32, 32, 32, > 95, 32, 84, 104, 101, 32, 118, 97, 114, 105, 97, 98, 108, 101, 32, 110, > 97, 109, 101, 115, 32, 98, 101, 108, 111, 119, 32, 97, 114, 101, 32, 112, > 114, 101, 45, 100, 101, 102, 105, 110, 101, 100, 46, 32, 84, 104, 101, 121, > 32, 99, 97, 110, 32, 98, 101, 32, 111, 118, 101, 114, 108, 111, 97, 100, > 101, 100, 32, 105, 102, 32, 110, 101, 99, 101, 115, 115, 97, 114, 121, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 119, > 39, 58, 32, 119, 105, 100, 116, 104, 32, 111, 102, 32, 116, 104, 101, 32, > 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 44, 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, > 114, 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 46, 32, 39, 104, 39, 58, 32, 104, 101, 105, 103, 104, 116, > 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, 121, > 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 100, 39, > 58, 32, 100, 101, 112, 116, 104, 32, 111, 102, 32, 116, 104, 101, 32, 97, > 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, > 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, > 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 115, 39, 58, 32, 115, 112, 101, 99, 116, 114, 117, > 109, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, > 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 120, > 39, 58, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 99, 101, > 115, 115, 101, 100, 32, 99, 111, 108, 117, 109, 110, 32, 111, 102, 32, 116, > 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, > 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 121, 39, 58, 32, 99, 117, 114, > 114, 101, 110, 116, 32, 112, 114, 111, 99, 101, 115, 115, 101, 100, 32, 114, > 111, 119, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, > 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, > 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 122, 39, 58, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 99, > 101, 115, 115, 101, 100, 32, 115, 108, 105, 99, 101, 32, 111, 102, 32, 116, > 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, > 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 99, 39, 58, 32, 99, 117, 114, > 114, 101, 110, 116, 32, 112, 114, 111, 99, 101, 115, 115, 101, 100, 32, 99, > 104, 97, 110, 110, 101, 108, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, > 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, > 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, > 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 101, 39, 58, 32, 118, 97, 108, 117, 101, 32, 111, 102, > 32, 101, 44, 32, 105, 46, 101, 46, 32, 50, 46, 55, 49, 56, 50, 56, > 46, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 112, 105, 39, 58, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 112, > 105, 44, 32, 105, 46, 101, 46, 32, 51, 46, 49, 52, 49, 53, 57, 50, > 54, 46, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, > 32, 39, 63, 39, 32, 111, 114, 32, 39, 117, 39, 58, 32, 97, 32, 114, > 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 32, 98, 101, 116, 119, > 101, 101, 110, 32, 91, 48, 44, 49, 93, 44, 32, 102, 111, 108, 108, 111, > 119, 105, 110, 103, 32, 97, 32, 117, 110, 105, 102, 111, 114, 109, 32, 100, > 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 46, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 103, 39, 58, 32, 97, > 32, 114, 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 44, 32, 102, > 111, 108, 108, 111, 119, 105, 110, 103, 32, 97, 32, 103, 97, 117, 115, 115, > 105, 97, 110, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, > 32, 111, 102, 32, 118, 97, 114, 105, 97, 110, 99, 101, 32, 49, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 114, 111, > 117, 103, 104, 108, 121, 32, 105, 110, 32, 91, 45, 53, 44, 53, 93, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 105, 39, 58, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 99, > 101, 115, 115, 101, 100, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, > 101, 32, 40, 105, 46, 101, 46, 32, 118, 97, 108, 117, 101, 32, 108, 111, > 99, 97, 116, 101, 100, 32, 97, 116, 32, 40, 120, 44, 121, 44, 122, 44, > 99, 41, 41, 32, 111, 102, 32, 116, 104, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 115, 115, 111, 99, 105, 97, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, > 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 105, > 109, 39, 44, 39, 105, 77, 39, 44, 39, 105, 97, 39, 44, 39, 105, 118, > 39, 58, 32, 82, 101, 115, 112, 101, 99, 116, 105, 118, 101, 108, 121, 32, > 116, 104, 101, 32, 109, 105, 110, 105, 109, 117, 109, 44, 32, 109, 97, 120, > 105, 109, 117, 109, 44, 32, 97, 118, 101, 114, 97, 103, 101, 32, 118, 97, > 108, 117, 101, 115, 32, 97, 110, 100, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 118, 97, 114, 105, 97, 110, 99, 101, 32, > 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, 121, 32, > 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 120, 109, 39, > 44, 39, 121, 109, 39, 44, 39, 122, 109, 39, 44, 39, 99, 109, 39, 58, > 32, 84, 104, 101, 32, 112, 105, 120, 101, 108, 32, 99, 111, 111, 114, 100, > 105, 110, 97, 116, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 109, 105, > 110, 105, 109, 117, 109, 32, 118, 97, 108, 117, 101, 32, 105, 110, 32, 116, > 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 109, 97, 103, > 101, 44, 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, > 101, 114, 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 46, 32, 39, 120, 77, 39, 44, 39, 121, 77, 39, 44, > 39, 122, 77, 39, 44, 39, 99, 77, 39, 58, 32, 84, 104, 101, 32, 112, > 105, 120, 101, 108, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, > 32, 111, 102, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 117, 109, 32, > 118, 97, 108, 117, 101, 32, 105, 110, 32, 116, 104, 101, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 115, 115, 111, 99, > 105, 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, > 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 95, 32, 84, 104, 101, 115, 101, > 32, 115, 112, 101, 99, 105, 97, 108, 32, 111, 112, 101, 114, 97, 116, 111, > 114, 115, 32, 99, 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 58, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 59, 39, > 58, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 115, 101, 112, > 97, 114, 97, 116, 111, 114, 46, 32, 84, 104, 101, 32, 114, 101, 116, 117, > 114, 110, 101, 100, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 97, 108, > 119, 97, 121, 115, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 101, 110, > 99, 111, 117, 110, 116, 101, 114, 101, 100, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, 105, > 111, 110, 46, 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, > 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 49, 59, 50, > 59, 112, 105, 39, 32, 105, 115, 32, 101, 118, 97, 108, 117, 97, 116, 101, > 100, 32, 97, 115, 32, 39, 112, 105, 39, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 61, 39, 58, 32, 118, 97, 114, > 105, 97, 98, 108, 101, 32, 97, 115, 115, 105, 103, 110, 109, 101, 110, 116, > 46, 32, 86, 97, 114, 105, 97, 98, 108, 101, 115, 32, 105, 110, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 112, 97, 114, 115, > 101, 114, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 114, 101, 102, 101, > 114, 32, 116, 111, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 110, 117, 109, 101, 114, 105, 99, 97, 108, 32, 118, 97, > 108, 117, 101, 115, 46, 32, 86, 97, 114, 105, 97, 98, 108, 101, 32, 110, > 97, 109, 101, 115, 32, 97, 114, 101, 32, 99, 97, 115, 101, 45, 115, 101, > 110, 115, 105, 116, 105, 118, 101, 46, 32, 85, 115, 101, 32, 116, 104, 105, > 115, 32, 111, 112, 101, 114, 97, 116, 111, 114, 32, 105, 110, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 110, 106, > 117, 110, 99, 116, 105, 111, 110, 32, 119, 105, 116, 104, 32, 39, 59, 39, > 32, 116, 111, 32, 100, 101, 102, 105, 110, 101, 32, 99, 111, 109, 112, 108, > 101, 120, 32, 101, 118, 97, 108, 117, 97, 98, 108, 101, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 115, 44, 32, 115, 117, 99, 104, 32, 97, > 115, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 39, 116, 61, 99, 111, 115, 40, 120, 41, 59, 51, 42, 116, 94, 50, > 43, 50, 42, 116, 43, 49, 39, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 84, 104, 101, 115, 101, 32, 118, 97, 114, > 105, 97, 98, 108, 101, 115, 32, 114, 101, 109, 97, 105, 110, 32, 108, 111, > 99, 97, 108, 32, 116, 111, 32, 116, 104, 101, 32, 109, 97, 116, 104, 101, > 109, 97, 116, 105, 99, 97, 108, 32, 112, 97, 114, 115, 101, 114, 32, 97, > 110, 100, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 97, 99, 99, > 101, 115, 115, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 111, 117, 116, 115, 105, 100, 101, 32, 116, 104, 101, 32, > 101, 118, 97, 108, 117, 97, 116, 101, 100, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 46, 10, 92, 110, 32, 32, 32, 32, 95, 32, 84, 104, > 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 115, 112, 101, 99, > 105, 102, 105, 99, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 32, 97, > 114, 101, 32, 97, 108, 115, 111, 32, 100, 101, 102, 105, 110, 101, 100, 58, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 105, > 102, 40, 101, 120, 112, 114, 95, 99, 111, 110, 100, 44, 101, 120, 112, 114, > 95, 116, 104, 101, 110, 44, 101, 120, 112, 114, 95, 101, 108, 115, 101, 41, > 39, 58, 32, 114, 101, 116, 117, 114, 110, 32, 118, 97, 108, 117, 101, 32, > 111, 102, 32, 39, 101, 120, 112, 114, 95, 116, 104, 101, 110, 39, 32, 111, > 114, 32, 39, 101, 120, 112, 114, 95, 101, 108, 115, 101, 39, 44, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 100, 101, 112, > 101, 110, 100, 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 118, 97, > 108, 117, 101, 32, 111, 102, 32, 39, 101, 120, 112, 114, 95, 99, 111, 110, > 100, 39, 32, 40, 48, 61, 102, 97, 108, 115, 101, 44, 32, 111, 116, 104, > 101, 114, 61, 116, 114, 117, 101, 41, 46, 32, 70, 111, 114, 32, 105, 110, > 115, 116, 97, 110, 99, 101, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 45, 102, 105, 108, 108, 32, 105, 102, 40, > 120, 37, 49, 48, 61, 61, 48, 44, 50, 53, 53, 44, 105, 41, 39, 32, > 119, 105, 108, 108, 32, 100, 114, 97, 119, 32, 98, 108, 97, 110, 107, 32, > 118, 101, 114, 116, 105, 99, 97, 108, 32, 108, 105, 110, 101, 115, 32, 111, > 110, 32, 101, 118, 101, 114, 121, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 49, 48, 116, 104, 32, 99, 111, 108, 117, 109, > 110, 32, 111, 102, 32, 97, 110, 32, 105, 109, 97, 103, 101, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 63, 40, 109, > 97, 120, 41, 39, 32, 111, 114, 32, 39, 63, 40, 109, 105, 110, 44, 109, > 97, 120, 41, 39, 58, 32, 114, 101, 116, 117, 114, 110, 32, 97, 32, 114, > 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 32, 98, 101, 116, 119, > 101, 101, 110, 32, 91, 48, 44, 109, 97, 120, 93, 32, 111, 114, 32, 91, > 109, 105, 110, 44, 109, 97, 120, 93, 44, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 102, 111, 108, 108, 111, 119, 105, 110, > 103, 32, 97, 32, 117, 110, 105, 102, 111, 114, 109, 32, 100, 105, 115, 116, > 114, 105, 98, 117, 116, 105, 111, 110, 46, 32, 39, 117, 40, 109, 97, 120, > 41, 39, 32, 97, 110, 100, 32, 39, 117, 40, 48, 44, 109, 97, 120, 41, > 39, 32, 109, 101, 97, 110, 32, 116, 104, 101, 32, 115, 97, 109, 101, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 105, > 40, 95, 97, 44, 95, 98, 44, 95, 99, 44, 95, 100, 44, 95, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, > 110, 100, 97, 114, 121, 41, 39, 58, 32, 114, 101, 116, 117, 114, 110, 32, > 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, > 32, 112, 105, 120, 101, 108, 32, 108, 111, 99, 97, 116, 101, 100, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 116, 32, > 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 97, 44, 98, 44, 99, 44, > 100, 41, 32, 105, 110, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, > 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, > 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 73, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 32, 112, 97, > 114, 97, 109, 101, 116, 101, 114, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 110, 101, 97, 114, 101, 115, 116, 32, 110, 101, 105, 103, 104, > 98, 111, 114, 32, 124, 32, 111, 116, 104, 101, 114, 61, 108, 105, 110, 101, > 97, 114, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 66, 111, 117, 110, 100, 97, 114, 121, 32, 99, 111, 110, > 100, 105, 116, 105, 111, 110, 115, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 79, 109, 105, 116, 116, 101, 100, 32, 99, > 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 32, 97, 114, 101, 32, 114, > 101, 112, 108, 97, 99, 101, 100, 32, 98, 121, 32, 116, 104, 101, 105, 114, > 32, 100, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 32, > 119, 104, 105, 99, 104, 32, 97, 114, 101, 32, 114, 101, 115, 112, 101, 99, > 116, 105, 118, 101, 108, 121, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 120, 44, 32, 121, 44, 32, 122, 44, 32, 99, 32, > 97, 110, 100, 32, 48, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 106, 40, 95, 100, 120, 44, 95, 100, 121, 44, 95, > 100, 122, 44, 95, 100, 99, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 41, > 39, 58, 32, 100, 111, 101, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, > 32, 102, 111, 114, 32, 116, 104, 101, 32, 112, 105, 120, 101, 108, 32, 108, > 111, 99, 97, 116, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 97, 116, 32, 112, 111, 115, 105, 116, 105, 111, 110, > 32, 40, 120, 43, 100, 120, 44, 121, 43, 100, 121, 44, 122, 43, 100, 122, > 44, 99, 43, 100, 99, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 46, 32, 39, 105, 91, 111, 102, 102, 115, 101, 116, 93, 39, > 58, 32, 114, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 118, 97, 108, > 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 120, 101, 108, 32, > 108, 111, 99, 97, 116, 101, 100, 32, 97, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 111, 102, 102, 115, 101, 116, 32, 105, 110, 32, 116, > 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 109, 97, 103, > 101, 32, 98, 117, 102, 102, 101, 114, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 46, 32, 39, 106, 91, 111, 102, 102, 115, 101, 116, > 93, 39, 58, 32, 100, 111, 101, 115, 32, 116, 104, 101, 32, 115, 97, 109, > 101, 32, 102, 111, 114, 32, 97, 110, 32, 111, 102, 102, 115, 101, 116, 32, > 114, 101, 108, 97, 116, 105, 118, 101, 32, 116, 111, 32, 116, 104, 101, 32, > 99, 117, 114, 114, 101, 110, 116, 32, 112, 105, 120, 101, 108, 32, 40, 120, > 44, 121, 44, 122, 44, 99, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, > 110, 99, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 45, 102, 105, > 108, 108, 32, 48, 46, 53, 42, 40, 105, 40, 120, 43, 49, 41, 45, 105, > 40, 120, 45, 49, 41, 41, 39, 32, 119, 105, 108, 108, 32, 101, 115, 116, > 105, 109, 97, 116, 101, 32, 116, 104, 101, 32, 88, 45, 100, 101, 114, 105, > 118, 97, 116, 105, 118, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 111, 102, 32, 97, 110, 32, 105, 109, 97, 103, 101, > 32, 119, 105, 116, 104, 32, 97, 32, 99, 108, 97, 115, 115, 105, 99, 97, > 108, 32, 102, 105, 110, 105, 116, 101, 32, 100, 105, 102, 102, 101, 114, 101, > 110, 99, 101, 32, 115, 99, 104, 101, 109, 101, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 46, 32, 73, 102, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 102, 111, 114, 109, 117, 108, 97, 32, 115, 116, > 97, 114, 116, 115, 32, 119, 105, 116, 104, 32, 39, 62, 39, 32, 111, 114, > 32, 39, 60, 39, 44, 32, 116, 104, 101, 32, 111, 112, 101, 114, 97, 116, > 111, 114, 115, 32, 39, 105, 40, 46, 46, 41, 39, 32, 97, 110, 100, 32, > 39, 106, 40, 46, 46, 41, 39, 32, 119, 105, 108, 108, 32, 114, 101, 116, > 117, 114, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, > 105, 109, 97, 103, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, > 98, 101, 105, 110, 103, 32, 109, 111, 100, 105, 102, 105, 101, 100, 44, 32, > 105, 110, 32, 102, 111, 114, 119, 97, 114, 100, 32, 40, 39, 62, 39, 41, > 32, 111, 114, 32, 98, 97, 99, 107, 119, 97, 114, 100, 32, 40, 39, 60, > 39, 41, 32, 111, 114, 100, 101, 114, 46, 10, 92, 110, 32, 32, 45, 32, > 84, 104, 101, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, 101, 32, 111, > 102, 32, 116, 104, 101, 32, 108, 105, 115, 116, 32, 105, 115, 32, 97, 108, > 119, 97, 121, 115, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, > 116, 111, 32, 116, 104, 101, 32, 101, 118, 97, 108, 117, 97, 116, 105, 111, > 110, 115, 32, 111, 102, 32, 39, 123, 101, 120, 112, 114, 101, 115, 115, 105, > 111, 110, 115, 125, 39, 44, 10, 92, 110, 32, 32, 32, 32, 32, 101, 46, > 103, 46, 32, 71, 92, 52, 55, 77, 73, 67, 32, 115, 101, 113, 117, 101, > 110, 99, 101, 32, 39, 50, 53, 54, 44, 49, 50, 56, 32, 45, 102, 32, > 123, 119, 125, 39, 32, 119, 105, 108, 108, 32, 99, 114, 101, 97, 116, 101, > 32, 97, 32, 50, 53, 54, 120, 49, 50, 56, 32, 105, 109, 97, 103, 101, > 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 118, 97, 108, > 117, 101, 32, 50, 53, 54, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, > 115, 101, 99, 116, 105, 111, 110, 32, 34, 73, 109, 97, 103, 101, 32, 97, > 110, 100, 32, 100, 97, 116, 97, 32, 118, 105, 101, 119, 101, 114, 115, 34, > 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, > 104, 32, 34, 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, 67, 32, 104, > 97, 115, 32, 115, 111, 109, 101, 32, 118, 101, 114, 121, 32, 104, 97, 110, > 100, 121, 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 118, 105, 115, 117, > 97, 108, 105, 122, 97, 116, 105, 111, 110, 32, 109, 111, 100, 117, 108, 101, > 115, 44, 32, 102, 111, 114, 32, 49, 100, 32, 115, 105, 103, 110, 97, 108, > 115, 10, 92, 110, 32, 32, 32, 32, 32, 40, 99, 111, 109, 109, 97, 110, > 100, 32, 39, 45, 112, 108, 111, 116, 39, 41, 44, 32, 49, 100, 47, 50, > 100, 47, 51, 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, 99, 111, 109, > 109, 97, 110, 100, 32, 39, 45, 100, 105, 115, 112, 108, 97, 121, 39, 41, > 32, 97, 110, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 10, > 92, 110, 32, 32, 32, 32, 32, 40, 99, 111, 109, 109, 97, 110, 100, 32, > 39, 45, 100, 105, 115, 112, 108, 97, 121, 51, 100, 39, 41, 46, 32, 73, > 116, 32, 101, 110, 97, 98, 108, 101, 115, 32, 97, 110, 32, 105, 110, 116, > 101, 114, 97, 99, 116, 105, 118, 101, 32, 118, 105, 101, 119, 32, 111, 102, > 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 32, 100, 97, 116, 97, 46, 10, 92, 110, 32, 32, 45, 32, > 84, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 107, 101, > 121, 98, 111, 97, 114, 100, 32, 115, 104, 111, 114, 116, 99, 117, 116, 115, > 32, 97, 114, 101, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 105, > 110, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, > 101, 32, 118, 105, 101, 119, 101, 114, 115, 58, 10, 92, 110, 32, 32, 32, > 32, 46, 32, 67, 84, 82, 76, 43, 68, 58, 32, 73, 110, 99, 114, 101, > 97, 115, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 67, 58, > 32, 68, 101, 99, 114, 101, 97, 115, 101, 32, 119, 105, 110, 100, 111, 119, > 32, 115, 105, 122, 101, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, > 84, 82, 76, 43, 82, 58, 32, 82, 101, 115, 101, 116, 32, 119, 105, 110, > 100, 111, 119, 32, 115, 105, 122, 101, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 67, 84, 82, 76, 43, 70, 58, 32, 84, 111, 103, 103, 108, 101, > 32, 102, 117, 108, 108, 115, 99, 114, 101, 101, 110, 32, 109, 111, 100, 101, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 83, > 58, 32, 83, 97, 118, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 119, > 105, 110, 100, 111, 119, 32, 115, 110, 97, 112, 115, 104, 111, 116, 32, 97, > 115, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 102, 105, 108, 101, 32, > 39, 103, 109, 105, 99, 95, 120, 120, 120, 120, 46, 98, 109, 112, 39, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 79, 58, > 32, 83, 97, 118, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 105, 110, > 115, 116, 97, 110, 99, 101, 32, 111, 102, 32, 116, 104, 101, 32, 118, 105, > 101, 119, 101, 100, 32, 100, 97, 116, 97, 44, 32, 97, 115, 32, 110, 117, > 109, 98, 101, 114, 101, 100, 32, 102, 105, 108, 101, 32, 39, 103, 109, 105, > 99, 95, 120, 120, 120, 120, 46, 99, 105, 109, 103, 122, 39, 46, 10, 92, > 110, 32, 32, 45, 32, 83, 104, 111, 114, 116, 99, 117, 116, 115, 32, 115, > 112, 101, 99, 105, 102, 105, 99, 32, 116, 111, 32, 116, 104, 101, 32, 49, > 100, 47, 50, 100, 47, 51, 100, 32, 105, 109, 97, 103, 101, 32, 118, 105, > 101, 119, 101, 114, 32, 97, 114, 101, 58, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 67, 84, 82, 76, 43, 65, 58, 32, 83, 119, 105, 116, 99, 104, > 32, 99, 117, 114, 115, 111, 114, 32, 109, 111, 100, 101, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 80, 58, 32, 80, 108, > 97, 121, 32, 122, 45, 115, 116, 97, 99, 107, 32, 111, 102, 32, 102, 114, > 97, 109, 101, 115, 32, 97, 115, 32, 97, 32, 109, 111, 118, 105, 101, 32, > 40, 102, 111, 114, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, > 51, 100, 32, 105, 109, 97, 103, 101, 115, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 67, 84, 82, 76, 43, 86, 58, 32, 83, 104, 111, 119, > 47, 104, 105, 100, 101, 32, 51, 68, 32, 118, 105, 101, 119, 32, 40, 102, > 111, 114, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 51, 100, > 32, 105, 109, 97, 103, 101, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 67, 84, 82, 76, 43, 40, 109, 111, 117, 115, 101, 119, 104, 101, > 101, 108, 41, 58, 32, 90, 111, 111, 109, 32, 105, 110, 47, 111, 117, 116, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 83, 72, 73, 70, 84, 43, > 40, 109, 111, 117, 115, 101, 119, 104, 101, 101, 108, 41, 58, 32, 71, 111, > 32, 108, 101, 102, 116, 47, 114, 105, 103, 104, 116, 46, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 65, 76, 84, 43, 40, 109, 111, 117, 115, 101, 119, > 104, 101, 101, 108, 41, 58, 32, 71, 111, 32, 117, 112, 47, 100, 111, 119, > 110, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 78, 117, 109, 101, 114, > 105, 99, 32, 80, 65, 68, 58, 32, 90, 111, 111, 109, 32, 105, 110, 47, > 111, 117, 116, 32, 40, 43, 47, 45, 41, 32, 97, 110, 100, 32, 109, 111, > 118, 101, 32, 116, 104, 114, 111, 117, 103, 104, 32, 122, 111, 111, 109, 101, > 100, 32, 105, 109, 97, 103, 101, 32, 40, 100, 105, 103, 105, 116, 115, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 66, 65, 67, 75, 83, 80, > 65, 67, 69, 58, 32, 82, 101, 115, 101, 116, 32, 122, 111, 111, 109, 32, > 115, 99, 97, 108, 101, 46, 10, 92, 110, 32, 32, 45, 32, 83, 104, 111, > 114, 116, 99, 117, 116, 115, 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, > 116, 111, 32, 116, 104, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 32, 118, 105, 101, 119, 101, 114, 32, 97, 114, 101, 58, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 40, 109, 111, 117, 115, 101, 41, 43, 40, 108, 101, > 102, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 41, > 58, 32, 82, 111, 116, 97, 116, 101, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 40, 109, 111, 117, > 115, 101, 41, 43, 40, 114, 105, 103, 104, 116, 32, 109, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 41, 58, 32, 90, 111, 111, 109, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 40, 109, 111, 117, 115, 101, 41, 43, 40, 109, 105, 100, 100, 108, > 101, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 41, 58, > 32, 83, 104, 105, 102, 116, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 40, 109, 111, 117, 115, 101, > 119, 104, 101, 101, 108, 41, 58, 32, 90, 111, 111, 109, 32, 105, 110, 47, > 111, 117, 116, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, > 76, 43, 70, 49, 32, 46, 46, 32, 67, 84, 82, 76, 43, 70, 54, 58, > 32, 83, 119, 105, 116, 99, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 51, 100, 32, 114, 101, 110, > 100, 101, 114, 105, 110, 103, 32, 109, 111, 100, 101, 115, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 90, 58, 32, 69, 110, > 97, 98, 108, 101, 47, 100, 105, 115, 97, 98, 108, 101, 32, 122, 45, 98, > 117, 102, 102, 101, 114, 101, 100, 32, 114, 101, 110, 100, 101, 114, 105, 110, > 103, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, > 65, 58, 32, 83, 104, 111, 119, 47, 104, 105, 100, 101, 32, 51, 100, 32, > 97, 120, 101, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, > 82, 76, 43, 71, 58, 32, 83, 97, 118, 101, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 44, 32, 97, 115, 32, 110, 117, 109, 98, 101, 114, 101, > 100, 32, 102, 105, 108, 101, 32, 39, 103, 109, 105, 99, 95, 120, 120, 120, > 120, 46, 111, 102, 102, 39, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, > 67, 84, 82, 76, 43, 84, 58, 32, 83, 119, 105, 116, 99, 104, 32, 98, > 101, 116, 119, 101, 101, 110, 32, 115, 105, 110, 103, 108, 101, 47, 100, 111, > 117, 98, 108, 101, 45, 115, 105, 100, 101, 100, 32, 51, 100, 32, 109, 111, > 100, 101, 115, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, > 116, 105, 111, 110, 32, 34, 65, 100, 100, 105, 110, 103, 32, 99, 117, 115, > 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 34, 10, 45, 95, > 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, > 32, 32, 45, 32, 67, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, > 110, 100, 115, 32, 99, 97, 110, 32, 98, 101, 32, 100, 101, 102, 105, 110, > 101, 100, 32, 98, 121, 32, 97, 32, 117, 115, 101, 114, 44, 32, 116, 104, > 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 117, 115, 101, 32, 111, 102, > 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 117, 115, 116, 111, 109, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 32, 102, 105, 108, 101, 115, 46, 10, > 92, 110, 32, 32, 45, 32, 65, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 102, 105, 108, 101, 32, 105, 115, 32, 97, 32, 115, 105, 109, 112, 108, 101, > 32, 97, 115, 99, 105, 105, 32, 116, 101, 120, 116, 32, 102, 105, 108, 101, > 44, 32, 119, 104, 101, 114, 101, 32, 101, 97, 99, 104, 32, 108, 105, 110, > 101, 32, 115, 116, 97, 114, 116, 115, 32, 101, 105, 116, 104, 101, 114, 32, > 98, 121, 10, 92, 110, 32, 32, 32, 32, 32, 39, 99, 111, 109, 109, 97, > 110, 100, 95, 110, 97, 109, 101, 58, 32, 99, 111, 109, 109, 97, 110, 100, > 95, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 39, 32, 111, 114, 32, > 39, 99, 111, 109, 109, 97, 110, 100, 95, 100, 101, 102, 105, 110, 105, 116, > 105, 111, 110, 32, 40, 99, 111, 110, 116, 105, 110, 117, 97, 116, 105, 111, > 110, 41, 39, 46, 10, 92, 110, 32, 32, 45, 32, 67, 117, 115, 116, 111, > 109, 32, 99, 111, 109, 109, 97, 110, 100, 32, 110, 97, 109, 101, 115, 32, > 109, 117, 115, 116, 32, 117, 115, 101, 32, 99, 104, 97, 114, 97, 99, 116, > 101, 114, 115, 32, 91, 97, 45, 122, 65, 45, 90, 48, 45, 57, 95, 93, > 32, 97, 110, 100, 32, 99, 97, 110, 110, 111, 116, 32, 115, 116, 97, 114, > 116, 32, 119, 105, 116, 104, 32, 97, 32, 110, 117, 109, 98, 101, 114, 46, > 10, 92, 110, 32, 32, 45, 32, 65, 110, 121, 32, 39, 32, 92, 35, 32, > 99, 111, 109, 109, 101, 110, 116, 39, 32, 101, 120, 112, 114, 101, 115, 115, > 105, 111, 110, 32, 102, 111, 117, 110, 100, 32, 105, 110, 32, 97, 32, 99, > 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 102, > 105, 108, 101, 32, 105, 115, 32, 100, 105, 115, 99, 97, 114, 100, 101, 100, > 32, 98, 121, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 10, > 92, 110, 32, 32, 32, 32, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, > 101, 114, 44, 32, 119, 104, 101, 114, 101, 118, 101, 114, 32, 105, 116, 32, > 105, 115, 32, 108, 111, 99, 97, 116, 101, 100, 32, 105, 110, 32, 97, 32, > 108, 105, 110, 101, 46, 10, 92, 110, 32, 32, 45, 32, 73, 110, 32, 99, > 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 44, 32, > 116, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 36, 45, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, 97, 114, 101, 32, > 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 58, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 39, 36, 34, 34, 42, 39, 32, 105, 115, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, 32, > 99, 111, 112, 121, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 111, 102, 32, > 97, 114, 103, 117, 109, 101, 110, 116, 115, 46, 10, 92, 110, 32, 32, 32, > 32, 46, 32, 39, 36, 92, 34, 42, 92, 34, 39, 32, 105, 115, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, 32, > 99, 111, 112, 121, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 111, 102, 32, > 97, 114, 103, 117, 109, 101, 110, 116, 115, 44, 32, 101, 97, 99, 104, 32, > 98, 101, 105, 110, 103, 32, 97, 114, 111, 117, 110, 100, 32, 100, 111, 117, > 98, 108, 101, 32, 113, 117, 111, 116, 101, 115, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 36, 34, 34, 35, 39, 32, 105, 115, 32, 115, 117, > 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, > 32, 109, 97, 120, 105, 109, 117, 109, 32, 105, 110, 100, 105, 99, 101, 32, > 111, 102, 32, 107, 110, 111, 119, 110, 32, 97, 114, 103, 117, 109, 101, 110, > 116, 115, 32, 40, 101, 105, 116, 104, 101, 114, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 98, 121, 32, 116, 104, 101, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 117, 115, 101, 114, 32, 111, 114, 32, 115, 101, 116, > 32, 116, 111, 32, 97, 32, 100, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 32, 105, 110, 32, 116, 104, 101, 32, 99, 117, 115, 116, 111, > 109, 32, 99, 111, 109, 109, 97, 110, 100, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 36, 34, 34, 63, 39, 32, 105, 115, 32, 115, 117, > 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, 32, 115, > 116, 114, 105, 110, 103, 32, 116, 101, 108, 108, 105, 110, 103, 32, 97, 98, > 111, 117, 116, 32, 116, 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 115, 117, 98, 115, 101, 116, 32, 114, 101, 115, 116, 114, 105, 99, 116, 105, > 111, 110, 32, 40, 111, 110, 108, 121, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 117, 115, 101, 102, 117, 108, 32, 119, 104, 101, 110, 32, 99, 117, > 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 110, 101, > 101, 100, 32, 116, 111, 32, 111, 117, 116, 112, 117, 116, 32, 100, 101, 115, > 99, 114, 105, 112, 116, 105, 118, 101, 32, 109, 101, 115, 115, 97, 103, 101, > 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 36, 105, 39, > 32, 97, 110, 100, 32, 39, 36, 123, 105, 125, 39, 32, 97, 114, 101, 32, > 98, 111, 116, 104, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, > 32, 98, 121, 32, 116, 104, 101, 32, 105, 45, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 46, > 32, 78, 101, 103, 97, 116, 105, 118, 101, 32, 105, 110, 100, 105, 99, 101, > 115, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 115, 117, 99, 104, 32, > 97, 115, 32, 39, 36, 123, 45, 106, 125, 39, 32, 97, 114, 101, 32, 97, > 108, 108, 111, 119, 101, 100, 32, 97, 110, 100, 32, 114, 101, 102, 101, 114, > 32, 116, 111, 32, 116, 104, 101, 32, 106, 94, 116, 104, 32, 108, 97, 116, > 101, 115, 116, 32, 97, 114, 103, 117, 109, 101, 110, 116, 46, 32, 39, 36, > 34, 34, 48, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 116, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 98, 121, 32, > 116, 104, 101, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 110, 97, 109, 101, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 39, 36, 123, 105, 61, 100, 101, 102, 97, 117, 108, 116, 125, 39, 32, > 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, > 121, 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 36, > 105, 32, 40, 105, 102, 32, 100, 101, 102, 105, 110, 101, 100, 41, 32, 111, > 114, 32, 98, 121, 32, 105, 116, 115, 32, 110, 101, 119, 32, 118, 97, 108, > 117, 101, 32, 115, 101, 116, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 116, 111, 32, 39, 100, 101, 102, 97, 117, 108, 116, 39, 32, 111, 116, > 104, 101, 114, 119, 105, 115, 101, 32, 40, 39, 100, 101, 102, 97, 117, 108, > 116, 39, 32, 109, 97, 121, 32, 98, 101, 32, 97, 32, 36, 45, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 32, 97, 115, 32, 119, 101, 108, 108, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 36, 123, 115, 117, > 98, 115, 101, 116, 125, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, > 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 115, 32, 118, 97, 108, 117, 101, 115, 32, 40, 115, > 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, 109, > 97, 115, 32, 39, 44, 39, 41, 32, 111, 102, 32, 97, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 97, 114, 103, 117, 109, 101, 110, 116, 32, 115, 117, 98, 115, 101, 116, 46, > 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 36, 34, 34, 123, 50, 45, > 45, 50, 125, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 101, 100, 32, 98, 121, 32, 97, 108, 108, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 115, 32, 101, 120, 99, 101, 112, 116, 32, 116, 104, > 101, 32, 102, 105, 114, 115, 116, 32, 97, 110, 100, 32, 116, 104, 101, 32, > 108, 97, 115, 116, 32, 111, 110, 101, 46, 32, 69, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 32, 39, 36, 34, 34, 123, 94, 48, 125, 39, 32, 105, > 115, 32, 116, 104, 101, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, > 108, 108, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 111, 102, 32, > 116, 104, 101, 32, 105, 110, 118, 111, 107, 101, 100, 32, 99, 111, 109, 109, > 97, 110, 100, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 36, 34, 34, > 42, 39, 32, 105, 102, 32, 97, 108, 108, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 115, 32, 104, 97, 118, 101, 32, 105, 110, 100, 101, > 101, 100, 32, 97, 32, 118, 97, 108, 117, 101, 41, 46, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 39, 36, 34, 34, 61, 118, 97, 114, 39, 32, 105, > 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, > 32, 116, 104, 101, 32, 115, 101, 116, 32, 111, 102, 32, 105, 110, 115, 116, > 114, 117, 99, 116, 105, 111, 110, 115, 32, 116, 104, 97, 116, 32, 119, 105, > 108, 108, 32, 97, 115, 115, 105, 103, 110, 32, 101, 97, 99, 104, 32, 97, > 114, 103, 117, 109, 101, 110, 116, 32, 36, 105, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 116, 111, 32, 116, 104, 101, 32, 110, 97, 109, 101, 100, > 32, 118, 97, 114, 105, 97, 98, 108, 101, 32, 39, 118, 97, 114, 36, 105, > 39, 32, 40, 102, 111, 114, 32, 105, 32, 105, 110, 32, 91, 48, 46, 46, > 36, 34, 34, 35, 93, 41, 46, 32, 84, 104, 105, 115, 32, 105, 115, 32, > 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 108, 121, 32, 117, 115, 101, > 102, 117, 108, 32, 119, 104, 101, 110, 32, 97, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 119, 97, 110, 116, 32, 116, 111, 32, 109, 97, 110, 97, 103, > 101, 32, 118, 97, 114, 105, 97, 98, 108, 101, 32, 110, 117, 109, 98, 101, > 114, 115, 32, 111, 102, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 46, > 32, 86, 97, 114, 105, 97, 98, 108, 101, 115, 32, 110, 97, 109, 101, 115, > 32, 109, 117, 115, 116, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 117, > 115, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 32, 91, 97, > 45, 122, 65, 45, 90, 48, 45, 57, 95, 93, 32, 97, 110, 100, 32, 99, > 97, 110, 110, 111, 116, 32, 115, 116, 97, 114, 116, 32, 119, 105, 116, 104, > 32, 97, 32, 110, 117, 109, 98, 101, 114, 46, 10, 92, 110, 32, 32, 45, > 32, 84, 104, 101, 115, 101, 32, 112, 97, 114, 116, 105, 99, 117, 108, 97, > 114, 32, 36, 45, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, > 97, 114, 101, 32, 97, 108, 119, 97, 121, 115, 32, 115, 117, 98, 115, 116, > 105, 116, 117, 116, 101, 100, 44, 32, 101, 118, 101, 110, 32, 105, 110, 32, > 100, 111, 117, 98, 108, 101, 32, 113, 117, 111, 116, 101, 100, 32, 105, 116, > 101, 109, 115, 32, 111, 114, 10, 92, 110, 32, 32, 32, 32, 32, 119, 104, > 101, 110, 32, 116, 104, 101, 32, 100, 111, 108, 108, 97, 114, 32, 115, 105, > 103, 110, 32, 39, 36, 39, 32, 105, 115, 32, 101, 115, 99, 97, 112, 101, > 100, 32, 119, 105, 116, 104, 32, 97, 32, 98, 97, 99, 107, 115, 108, 97, > 115, 104, 32, 39, 92, 92, 39, 46, 32, 84, 111, 32, 97, 118, 111, 105, > 100, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 44, 32, > 112, 108, 97, 99, 101, 10, 92, 110, 32, 32, 32, 32, 32, 97, 110, 32, > 101, 109, 112, 116, 121, 32, 100, 111, 117, 98, 108, 101, 32, 113, 117, 111, > 116, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 106, 117, 115, 116, 32, > 97, 102, 116, 101, 114, 32, 116, 104, 101, 32, 39, 36, 39, 32, 40, 97, > 115, 32, 105, 110, 32, 39, 36, 92, 34, 92, 34, 49, 39, 41, 46, 10, > 92, 110, 32, 32, 45, 32, 83, 112, 101, 99, 105, 102, 121, 105, 110, 103, > 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 109, 97, 121, 32, 98, > 101, 32, 115, 107, 105, 112, 112, 101, 100, 32, 119, 104, 101, 110, 32, 105, > 110, 118, 111, 107, 105, 110, 103, 32, 97, 32, 99, 117, 115, 116, 111, 109, > 32, 99, 111, 109, 109, 97, 110, 100, 44, 32, 98, 121, 32, 114, 101, 112, > 108, 97, 99, 105, 110, 103, 32, 116, 104, 101, 109, 32, 98, 121, 10, 92, > 110, 32, 32, 32, 32, 32, 99, 111, 109, 109, 97, 115, 32, 39, 44, 39, > 32, 97, 115, 32, 105, 110, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 32, 39, 45, 102, 108, 111, 119, 101, 114, 32, 44, 44, 51, 39, 46, > 32, 79, 109, 105, 116, 116, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, > 116, 115, 32, 97, 114, 101, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, > 101, 105, 114, 32, 100, 101, 102, 97, 117, 108, 116, 10, 92, 110, 32, 32, > 32, 32, 32, 118, 97, 108, 117, 101, 115, 44, 32, 119, 104, 105, 99, 104, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 116, 104, 117, 115, 32, 101, 120, > 112, 108, 105, 99, 105, 116, 108, 121, 32, 100, 101, 102, 105, 110, 101, 100, > 32, 105, 110, 32, 116, 104, 101, 32, 99, 111, 100, 101, 32, 111, 102, 32, > 116, 104, 101, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, 105, 110, > 103, 32, 99, 117, 115, 116, 111, 109, 10, 92, 110, 32, 32, 32, 32, 32, > 99, 111, 109, 109, 97, 110, 100, 32, 40, 117, 115, 105, 110, 103, 32, 100, > 101, 102, 97, 117, 108, 116, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, 97, 115, 32, 39, > 36, 34, 34, 123, 49, 61, 100, 101, 102, 97, 117, 108, 116, 125, 39, 41, > 46, 10, 92, 110, 32, 32, 45, 32, 73, 102, 32, 111, 110, 101, 32, 110, > 117, 109, 98, 101, 114, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 32, 114, 101, 113, 117, 101, 115, 116, 101, 100, 32, 105, 110, 32, 97, 32, > 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 32, 104, > 97, 115, 32, 110, 111, 32, 118, 97, 108, 117, 101, 44, 32, 97, 110, 32, > 101, 114, 114, 111, 114, 32, 105, 115, 32, 116, 104, 114, 111, 119, 110, 10, > 92, 110, 32, 32, 32, 32, 32, 98, 121, 32, 116, 104, 101, 32, 105, 110, > 116, 101, 114, 112, 114, 101, 116, 101, 114, 46, 34, 10, 45, 95, 104, 101, > 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 76, 105, 115, 116, > 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 115, 34, 10, 45, 95, > 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, > 32, 65, 108, 108, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 71, > 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, > 97, 114, 101, 32, 108, 105, 115, 116, 101, 100, 32, 98, 101, 108, 111, 119, > 44, 32, 99, 108, 97, 115, 115, 105, 102, 105, 101, 100, 32, 98, 121, 32, > 116, 104, 101, 109, 101, 115, 46, 10, 92, 110, 32, 87, 104, 101, 110, 32, > 115, 101, 118, 101, 114, 97, 108, 32, 99, 104, 111, 105, 99, 101, 115, 32, > 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 32, 97, 114, 103, 117, 109, > 101, 110, 116, 115, 32, 97, 114, 101, 32, 112, 111, 115, 115, 105, 98, 108, > 101, 44, 32, 116, 104, 101, 121, 32, 97, 112, 112, 101, 97, 114, 32, 115, > 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 39, 124, 39, 46, > 10, 92, 110, 32, 65, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 110, 115, 105, 100, 101, > 32, 39, 91, 93, 39, 32, 111, 114, 32, 115, 116, 97, 114, 116, 105, 110, > 103, 32, 98, 121, 32, 39, 95, 39, 32, 105, 115, 32, 111, 112, 116, 105, > 111, 110, 97, 108, 32, 101, 120, 99, 101, 112, 116, 32, 119, 104, 101, 110, > 32, 115, 116, 97, 110, 100, 105, 110, 103, 32, 102, 111, 114, 32, 97, 110, > 10, 92, 110, 32, 101, 120, 105, 115, 116, 105, 110, 103, 32, 105, 109, 97, > 103, 101, 32, 91, 105, 109, 97, 103, 101, 93, 44, 32, 119, 104, 101, 114, > 101, 32, 39, 105, 109, 97, 103, 101, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 101, 105, 116, 104, 101, 114, 32, 97, 110, 32, 105, 110, 100, 105, 99, > 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 114, 32, 97, 110, 32, 105, > 109, 97, 103, 101, 32, 110, 97, 109, 101, 46, 10, 92, 110, 32, 73, 110, > 32, 116, 104, 105, 115, 32, 99, 97, 115, 101, 44, 32, 116, 104, 101, 32, > 39, 91, 93, 39, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 32, > 97, 114, 101, 32, 109, 97, 110, 100, 97, 116, 111, 114, 121, 32, 119, 104, > 101, 110, 32, 119, 114, 105, 116, 105, 110, 103, 32, 116, 104, 101, 32, 105, > 116, 101, 109, 46, 32, 65, 32, 99, 111, 109, 109, 97, 110, 100, 32, 109, > 97, 114, 107, 101, 100, 32, 119, 105, 116, 104, 10, 92, 110, 32, 39, 40, > 42, 41, 39, 32, 111, 114, 32, 39, 40, 43, 41, 39, 32, 105, 115, 32, > 97, 32, 110, 97, 116, 105, 118, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 46, 32, 39, 40, 42, 41, 39, 32, 109, 101, 97, 110, 115, 32, 116, 104, > 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 105, 115, 32, 97, 118, 97, > 105, 108, 97, 98, 108, 101, 32, 102, 111, 114, 32, 97, 108, 108, 32, 112, > 105, 120, 101, 108, 32, 116, 121, 112, 101, 115, 44, 10, 92, 110, 32, 111, > 116, 104, 101, 114, 119, 105, 115, 101, 32, 111, 110, 108, 121, 32, 102, 111, > 114, 32, 116, 104, 101, 32, 100, 101, 102, 97, 117, 108, 116, 32, 39, 102, > 108, 111, 97, 116, 39, 32, 112, 105, 120, 101, 108, 32, 116, 121, 112, 101, > 46, 10, 92, 110, 32, 82, 101, 109, 101, 109, 98, 101, 114, 32, 116, 104, > 97, 116, 32, 110, 97, 116, 105, 118, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 115, 32, 114, 117, 110, 32, 102, 97, 115, 116, 101, 114, 32, 116, 104, > 97, 110, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, > 100, 115, 44, 32, 115, 111, 32, 117, 115, 101, 32, 116, 104, 101, 110, 32, > 119, 104, 101, 110, 32, 112, 111, 115, 115, 105, 98, 108, 101, 46, 10, 92, > 110, 32, 78, 111, 116, 101, 32, 97, 108, 115, 111, 32, 116, 104, 97, 116, > 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 116, > 104, 105, 115, 32, 114, 101, 102, 101, 114, 101, 110, 99, 101, 32, 100, 111, > 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 97, 114, 101, 32, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 32, 105, 110, 32, 91, 48, > 44, 50, 53, 53, 93, 32, 98, 101, 102, 111, 114, 101, 10, 92, 110, 32, > 98, 101, 105, 110, 103, 32, 100, 105, 115, 112, 108, 97, 121, 101, 100, 46, > 32, 89, 111, 117, 32, 109, 97, 121, 32, 110, 101, 101, 100, 32, 116, 111, > 32, 100, 111, 32, 116, 104, 105, 115, 32, 109, 97, 110, 117, 97, 108, 108, > 121, 32, 40, 99, 111, 109, 109, 97, 110, 100, 32, 39, 45, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, 53, 39, 41, 32, 105, > 102, 32, 121, 111, 117, 32, 119, 97, 110, 116, 10, 92, 110, 32, 115, 97, > 118, 101, 32, 105, 109, 97, 103, 101, 32, 102, 105, 108, 101, 115, 32, 104, > 97, 118, 105, 110, 103, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, > 115, 112, 101, 99, 116, 32, 116, 104, 97, 110, 32, 116, 104, 111, 115, 101, > 32, 100, 105, 115, 112, 108, 97, 121, 101, 100, 46, 34, 10, 95, 104, 101, > 108, 112, 95, 101, 120, 97, 109, 112, 108, 101, 115, 32, 58, 10, 45, 95, > 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 69, 120, > 97, 109, 112, 108, 101, 115, 32, 111, 102, 32, 117, 115, 101, 34, 10, 45, > 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, > 34, 32, 39, 103, 109, 105, 99, 39, 32, 105, 115, 32, 97, 32, 103, 101, > 110, 101, 114, 105, 99, 32, 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 32, 116, 111, 111, 108, 32, 119, 104, 105, 99, > 104, 32, 99, 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 105, 110, > 32, 97, 32, 119, 105, 100, 101, 32, 118, 97, 114, 105, 101, 116, 121, 32, > 111, 102, 32, 115, 105, 116, 117, 97, 116, 105, 111, 110, 115, 46, 10, 92, > 110, 32, 84, 104, 101, 32, 102, 101, 119, 32, 101, 120, 97, 109, 112, 108, > 101, 115, 32, 98, 101, 108, 111, 119, 32, 105, 108, 108, 117, 115, 116, 114, > 97, 116, 101, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, 117, 115, 101, > 115, 32, 111, 102, 32, 116, 104, 105, 115, 32, 116, 111, 111, 108, 58, 10, > 92, 110, 10, 92, 110, 32, 32, 45, 32, 86, 105, 101, 119, 32, 97, 32, > 108, 105, 115, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, 58, 10, > 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 102, 105, 108, 101, > 49, 46, 98, 109, 112, 32, 102, 105, 108, 101, 50, 46, 106, 112, 101, 103, > 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 67, 111, 110, 118, 101, 114, > 116, 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 102, 105, 108, 101, 58, > 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, 110, 112, > 117, 116, 46, 98, 109, 112, 32, 45, 111, 32, 111, 117, 116, 112, 117, 116, > 46, 106, 112, 103, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 67, 114, > 101, 97, 116, 101, 32, 97, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, > 99, 32, 105, 109, 97, 103, 101, 32, 102, 114, 111, 109, 32, 97, 32, 109, > 111, 118, 105, 101, 32, 115, 101, 113, 117, 101, 110, 99, 101, 58, 10, 92, > 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, 110, 112, 117, 116, > 46, 109, 112, 103, 32, 45, 97, 32, 122, 32, 45, 111, 32, 111, 117, 116, > 112, 117, 116, 46, 104, 100, 114, 10, 92, 110, 10, 92, 110, 32, 32, 45, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 105, 109, 97, 103, 101, 32, 103, > 114, 97, 100, 105, 101, 110, 116, 32, 110, 111, 114, 109, 58, 10, 92, 110, > 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, 110, 112, 117, 116, 46, > 98, 109, 112, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, > 114, 109, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 68, 101, 110, 111, > 105, 115, 101, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 109, 97, 103, > 101, 58, 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 101, 110, 111, 105, 115, > 101, 32, 51, 48, 44, 49, 48, 32, 45, 111, 32, 100, 101, 110, 111, 105, > 115, 101, 100, 46, 106, 112, 103, 10, 92, 110, 10, 92, 110, 32, 32, 45, > 32, 67, 111, 109, 112, 111, 115, 101, 32, 116, 119, 111, 32, 105, 109, 97, > 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 111, 118, 101, 114, 108, 97, > 121, 32, 108, 97, 121, 101, 114, 32, 98, 108, 101, 110, 100, 105, 110, 103, > 58, 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, 109, > 97, 103, 101, 49, 46, 106, 112, 103, 32, 105, 109, 97, 103, 101, 50, 46, > 106, 112, 103, 32, 45, 98, 108, 101, 110, 100, 32, 111, 118, 101, 114, 108, > 97, 121, 32, 45, 111, 32, 98, 108, 101, 110, 100, 101, 100, 46, 106, 112, > 103, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 69, 118, 97, 108, 117, > 97, 116, 101, 32, 97, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, > 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 58, 10, 92, > 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, 101, 32, 92, 34, > 99, 111, 115, 40, 112, 105, 47, 52, 41, 94, 50, 43, 115, 105, 110, 40, > 112, 105, 47, 52, 41, 94, 50, 61, 123, 99, 111, 115, 40, 112, 105, 47, > 52, 41, 94, 50, 43, 115, 105, 110, 40, 112, 105, 47, 52, 41, 94, 50, > 125, 92, 34, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 80, 108, 111, > 116, 32, 97, 32, 50, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 58, > 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 49, 48, 48, > 48, 44, 49, 44, 49, 44, 50, 32, 45, 102, 32, 92, 34, 88, 61, 51, > 42, 40, 120, 45, 53, 48, 48, 41, 47, 53, 48, 48, 59, 88, 94, 50, > 42, 115, 105, 110, 40, 51, 42, 88, 94, 50, 41, 43, 105, 102, 40, 99, > 61, 61, 48, 44, 117, 40, 48, 44, 45, 49, 41, 44, 99, 111, 115, 40, > 88, 42, 49, 48, 41, 41, 92, 34, 32, 45, 112, 108, 111, 116, 10, 92, > 110, 10, 92, 110, 32, 32, 45, 32, 80, 108, 111, 116, 32, 97, 32, 51, > 100, 32, 101, 108, 101, 118, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, > 105, 111, 110, 32, 105, 110, 32, 114, 97, 110, 100, 111, 109, 32, 99, 111, > 108, 111, 114, 115, 58, 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, > 99, 32, 49, 50, 56, 44, 49, 50, 56, 44, 49, 44, 51, 44, 92, 34, > 63, 40, 48, 44, 50, 53, 53, 41, 92, 34, 32, 45, 112, 108, 97, 115, > 109, 97, 32, 49, 48, 44, 51, 32, 45, 98, 108, 117, 114, 32, 52, 32, > 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, 48, 48, 48, 48, 32, 92, > 92, 10, 92, 110, 32, 32, 32, 32, 32, 32, 45, 101, 108, 101, 118, 97, > 116, 105, 111, 110, 51, 100, 91, 45, 49, 93, 32, 92, 34, 39, 88, 61, > 40, 120, 45, 54, 52, 41, 47, 54, 59, 89, 61, 40, 121, 45, 54, 52, > 41, 47, 54, 59, 49, 48, 48, 42, 101, 120, 112, 40, 45, 40, 88, 94, > 50, 43, 89, 94, 50, 41, 47, 51, 48, 41, 42, 97, 98, 115, 40, 99, > 111, 115, 40, 88, 41, 42, 115, 105, 110, 40, 89, 41, 41, 39, 92, 34, > 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 80, 108, 111, 116, 32, 116, > 104, 101, 32, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 32, 111, 102, > 32, 97, 32, 51, 100, 32, 118, 111, 108, 117, 109, 101, 58, 10, 92, 110, > 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, 109, 51, 100, 32, 53, > 32, 45, 109, 100, 51, 100, 32, 53, 32, 45, 100, 98, 51, 100, 32, 48, > 32, 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 92, > 34, 39, 120, 94, 50, 43, 121, 94, 50, 43, 97, 98, 115, 40, 122, 41, > 94, 97, 98, 115, 40, 52, 42, 99, 111, 115, 40, 120, 42, 121, 42, 122, > 42, 51, 41, 41, 39, 92, 34, 44, 51, 10, 92, 110, 10, 92, 110, 32, > 32, 45, 32, 82, 101, 110, 100, 101, 114, 32, 97, 32, 71, 92, 52, 55, > 77, 73, 67, 32, 51, 100, 32, 108, 111, 103, 111, 58, 10, 92, 110, 32, > 32, 32, 32, 32, 103, 109, 105, 99, 32, 49, 32, 45, 116, 101, 120, 116, > 32, 71, 92, 92, 92, 52, 55, 77, 73, 67, 44, 48, 44, 48, 44, 53, > 51, 44, 49, 44, 49, 44, 49, 44, 49, 32, 45, 101, 120, 112, 97, 110, > 100, 95, 120, 121, 32, 49, 48, 44, 48, 32, 45, 98, 108, 117, 114, 32, > 50, 32, 45, 110, 32, 48, 44, 49, 48, 48, 32, 45, 45, 112, 108, 97, > 115, 109, 97, 32, 48, 46, 52, 32, 45, 43, 32, 92, 92, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 45, 98, 108, 117, 114, 32, 49, 32, 45, 101, > 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 45, 48, 46, 49, 32, > 45, 109, 100, 51, 100, 32, 52, 10, 92, 110, 10, 92, 110, 32, 32, 45, > 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 97, 32, 51, 100, 32, 114, > 105, 110, 103, 32, 111, 102, 32, 116, 111, 114, 105, 105, 58, 10, 92, 110, > 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 50, 48, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 53, > 44, 50, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 92, 34, > 123, 63, 40, 54, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 54, > 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 54, 48, 44, 50, 53, > 53, 41, 125, 92, 34, 32, 92, 92, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 48, 46, 53, 44, 49, 32, > 45, 105, 102, 32, 92, 34, 123, 36, 62, 37, 50, 125, 92, 34, 32, 45, > 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 57, 48, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 51, 100, 91, 45, 49, 93, > 32, 55, 48, 32, 45, 43, 51, 100, 32, 92, 92, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 45, 114, 51, 100, 32, 48, 44, 48, 44, 49, 44, 49, > 56, 32, 45, 100, 111, 110, 101, 32, 45, 109, 100, 51, 100, 32, 51, 32, > 45, 109, 51, 100, 32, 53, 32, 45, 100, 98, 51, 100, 32, 48, 10, 92, > 110, 10, 92, 110, 32, 32, 45, 32, 67, 114, 101, 97, 116, 101, 32, 97, > 32, 118, 97, 115, 101, 32, 102, 114, 111, 109, 32, 97, 32, 51, 100, 32, > 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 58, 10, 92, 110, 32, 32, > 32, 32, 32, 103, 109, 105, 99, 32, 45, 109, 100, 51, 100, 32, 52, 32, > 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 92, 34, > 39, 120, 94, 50, 43, 50, 42, 97, 98, 115, 40, 121, 47, 50, 41, 42, > 115, 105, 110, 40, 50, 42, 121, 41, 94, 50, 43, 122, 94, 50, 45, 51, > 39, 44, 48, 92, 34, 32, 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, > 49, 46, 53, 32, 92, 92, 10, 92, 110, 32, 32, 32, 32, 32, 32, 45, > 45, 51, 100, 91, 45, 49, 93, 32, 48, 44, 53, 32, 45, 112, 108, 97, > 110, 101, 51, 100, 32, 49, 53, 44, 49, 53, 32, 45, 114, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 57, 48, 32, 45, 99, 51, > 100, 91, 45, 49, 93, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, > 44, 51, 46, 50, 32, 92, 92, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 56, 48, 44, 49, > 53, 48, 44, 50, 53, 53, 32, 45, 99, 111, 108, 51, 100, 91, 45, 50, > 93, 32, 49, 50, 56, 44, 50, 53, 53, 44, 48, 32, 45, 99, 111, 108, > 51, 100, 91, 45, 51, 93, 32, 50, 53, 53, 44, 49, 50, 56, 44, 48, > 32, 45, 43, 51, 100, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 68, > 105, 115, 112, 108, 97, 121, 32, 102, 105, 108, 116, 101, 114, 101, 100, 32, > 119, 101, 98, 99, 97, 109, 32, 115, 116, 114, 101, 97, 109, 58, 10, 92, > 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, 97, 112, 112, 108, > 121, 95, 99, 97, 109, 101, 114, 97, 32, 92, 92, 92, 34, 45, 45, 109, > 105, 114, 114, 111, 114, 32, 120, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 32, 121, 32, 45, 43, 32, 45, 47, 32, 52, 92, 92, 92, 34, 10, 92, > 110, 10, 92, 110, 32, 32, 45, 32, 76, 97, 117, 110, 99, 104, 32, 97, > 32, 115, 101, 116, 32, 111, 102, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 100, 101, 109, 111, > 115, 58, 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, > 100, 101, 109, 111, 10, 92, 110, 34, 10, 35, 64, 103, 109, 105, 99, 32, > 118, 101, 114, 115, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 105, 115, 112, 108, 97, 121, 32, 99, 117, 114, 114, 101, 110, 116, > 32, 118, 101, 114, 115, 105, 111, 110, 32, 110, 117, 109, 98, 101, 114, 32, > 97, 110, 100, 32, 101, 120, 105, 116, 46, 10, 118, 101, 114, 115, 105, 111, > 110, 32, 58, 10, 45, 118, 32, 45, 32, 45, 95, 95, 104, 101, 108, 112, > 95, 104, 101, 97, 100, 101, 114, 95, 97, 115, 99, 105, 105, 91, 93, 32, > 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 34, 10, 118, 32, 58, > 10, 45, 118, 101, 114, 115, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 58, 32, 73, 110, 112, 117, 116, 115, 47, 111, 117, 116, 112, 117, > 116, 115, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, 121, 95, > 99, 97, 109, 101, 114, 97, 32, 58, 32, 95, 99, 111, 109, 109, 97, 110, > 100, 44, 95, 99, 97, 109, 101, 114, 97, 95, 105, 110, 100, 101, 120, 62, > 61, 48, 44, 95, 115, 107, 105, 112, 95, 102, 114, 97, 109, 101, 115, 62, > 61, 48, 44, 95, 111, 117, 116, 112, 117, 116, 95, 102, 105, 108, 101, 110, > 97, 109, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 111, 110, 32, 108, 105, 118, 101, 32, 99, 97, 109, > 101, 114, 97, 32, 115, 116, 114, 101, 97, 109, 44, 32, 97, 110, 100, 32, > 100, 105, 115, 112, 108, 97, 121, 32, 105, 116, 32, 111, 110, 32, 100, 105, > 115, 112, 108, 97, 121, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, 109, 109, > 97, 110, 100, 61, 34, 34, 39, 44, 32, 39, 99, 97, 109, 101, 114, 97, > 95, 105, 110, 100, 101, 120, 61, 48, 39, 32, 40, 100, 101, 102, 97, 117, > 108, 116, 32, 99, 97, 109, 101, 114, 97, 41, 44, 32, 39, 115, 107, 105, > 112, 95, 102, 114, 97, 109, 101, 115, 61, 48, 39, 32, 97, 110, 100, 32, > 39, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 39, 46, 10, 97, > 112, 112, 108, 121, 95, 99, 97, 109, 101, 114, 97, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 34, 36, 123, 49, 61, 125, 44, 36, 123, 52, 61, 125, > 34, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 48, 125, 62, 61, 48, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, > 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, > 32, 99, 97, 109, 101, 114, 97, 32, 115, 116, 114, 101, 97, 109, 32, 92, > 35, 36, 50, 44, 32, 119, 105, 116, 104, 32, 36, 51, 32, 102, 114, 97, > 109, 101, 115, 32, 115, 107, 105, 112, 32, 97, 110, 100, 32, 102, 105, 108, > 101, 110, 97, 109, 101, 32, 39, 36, 52, 39, 46, 34, 32, 45, 118, 32, > 45, 10, 45, 108, 91, 93, 32, 102, 114, 97, 109, 101, 61, 48, 32, 45, > 100, 111, 10, 45, 99, 97, 109, 101, 114, 97, 32, 36, 50, 44, 49, 44, > 36, 51, 32, 36, 49, 32, 45, 119, 91, 45, 49, 93, 32, 45, 49, 44, > 45, 49, 44, 34, 40, 67, 97, 109, 101, 114, 97, 32, 34, 36, 115, 116, > 114, 101, 97, 109, 34, 44, 32, 34, 123, 119, 125, 120, 123, 104, 125, 34, > 41, 34, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 52, > 34, 41, 125, 32, 45, 111, 91, 45, 49, 93, 32, 64, 123, 45, 102, 105, > 108, 101, 110, 97, 109, 101, 92, 32, 34, 36, 52, 34, 44, 36, 102, 114, > 97, 109, 101, 125, 32, 102, 114, 97, 109, 101, 61, 123, 36, 102, 114, 97, > 109, 101, 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 64, 123, 33, 44, 83, 125, 32, 45, 111, 91, 45, 49, 93, 32, 103, > 109, 105, 99, 95, 99, 97, 109, 101, 114, 97, 46, 112, 110, 103, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, > 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, > 38, 38, 32, 34, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, > 32, 123, 64, 123, 33, 44, 119, 125, 42, 49, 46, 53, 125, 44, 123, 64, > 123, 33, 44, 104, 125, 42, 49, 46, 53, 125, 32, 45, 119, 97, 105, 116, > 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, > 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, > 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 67, 125, 125, > 32, 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, 47, 49, 46, > 53, 125, 44, 123, 64, 123, 33, 44, 104, 125, 47, 49, 46, 53, 125, 32, > 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, > 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, > 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, > 33, 44, 82, 125, 125, 32, 45, 119, 91, 93, 32, 64, 123, 48, 44, 119, > 125, 44, 64, 123, 48, 44, 104, 125, 32, 45, 119, 97, 105, 116, 32, 45, > 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, > 33, 64, 123, 33, 44, 81, 125, 125, 32, 45, 99, 97, 109, 101, 114, 97, > 32, 36, 50, 44, 48, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, 121, 95, 102, 105, > 108, 101, 115, 32, 58, 32, 34, 99, 111, 109, 109, 97, 110, 100, 34, 44, > 108, 105, 115, 116, 95, 111, 102, 95, 102, 105, 108, 101, 110, 97, 109, 101, > 115, 44, 95, 111, 117, 116, 112, 117, 116, 95, 112, 114, 101, 102, 105, 120, > 44, 95, 111, 117, 116, 112, 117, 116, 95, 101, 120, 116, 101, 110, 115, 105, > 111, 110, 44, 95, 118, 105, 101, 119, 95, 119, 105, 110, 100, 111, 119, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, 110, 32, 97, 108, > 108, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 102, 105, 108, 101, 115, 44, 32, 98, 121, 32, 114, 101, 97, 100, > 105, 110, 103, 32, 116, 104, 101, 109, 32, 111, 110, 101, 32, 98, 121, 32, > 111, 110, 101, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 97, 110, > 100, 32, 115, 97, 118, 101, 32, 114, 101, 115, 117, 108, 116, 32, 98, 121, > 32, 97, 112, 112, 101, 110, 100, 105, 110, 103, 32, 39, 111, 117, 116, 112, > 117, 116, 95, 112, 114, 101, 102, 105, 120, 39, 32, 116, 111, 32, 101, 97, > 99, 104, 32, 111, 114, 105, 103, 105, 110, 97, 108, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 108, 105, 115, 116, 95, 111, 102, 95, 102, 105, 108, 101, 110, 97, 109, 101, > 115, 39, 32, 109, 117, 115, 116, 32, 98, 101, 32, 116, 104, 101, 32, 108, > 105, 115, 116, 32, 111, 102, 32, 102, 105, 108, 101, 110, 97, 109, 101, 115, > 44, 32, 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 115, > 112, 97, 99, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, > 104, 117, 115, 44, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 99, 97, 110, 110, 111, 116, > 32, 99, 111, 110, 116, 97, 105, 110, 32, 97, 32, 115, 112, 97, 99, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, > 111, 117, 116, 112, 117, 116, 95, 101, 120, 116, 101, 110, 115, 105, 111, 110, > 39, 32, 105, 115, 32, 115, 101, 116, 44, 32, 116, 104, 101, 32, 111, 117, > 116, 112, 117, 116, 32, 102, 105, 108, 101, 115, 32, 97, 114, 101, 32, 119, > 114, 105, 116, 116, 101, 110, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 101, 120, 116, 101, 110, > 115, 105, 111, 110, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, > 107, 101, 101, 112, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 116, 104, 101, 32, 111, 114, 105, 103, 105, 110, 97, 108, 32, 111, 110, > 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 111, 117, 116, 112, > 117, 116, 95, 112, 114, 101, 102, 105, 120, 61, 103, 109, 105, 99, 95, 39, > 44, 32, 39, 111, 117, 116, 112, 117, 116, 95, 101, 120, 116, 101, 110, 115, > 105, 111, 110, 61, 34, 34, 39, 32, 97, 110, 100, 32, 39, 118, 105, 101, > 119, 95, 119, 105, 110, 100, 111, 119, 61, 48, 39, 46, 10, 97, 112, 112, > 108, 121, 95, 102, 105, 108, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 34, 36, 123, 51, 61, 103, 109, 105, 99, 95, 125, 34, 44, 34, 36, > 123, 52, 61, 125, 34, 44, 36, 123, 53, 61, 48, 125, 10, 45, 118, 32, > 45, 10, 40, 123, 39, 34, 36, 50, 34, 39, 125, 41, 32, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 50, 32, 45, 114, > 101, 112, 108, 97, 99, 101, 91, 45, 49, 93, 32, 51, 50, 44, 123, 39, > 44, 39, 125, 32, 102, 105, 108, 101, 115, 61, 64, 123, 45, 117, 92, 32, > 64, 123, 45, 49, 44, 116, 125, 125, 10, 45, 105, 102, 32, 123, 119, 62, > 49, 50, 56, 125, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 49, 50, > 55, 32, 115, 95, 102, 105, 108, 101, 115, 61, 64, 123, 45, 49, 44, 116, > 125, 46, 46, 46, 32, 45, 101, 108, 115, 101, 32, 115, 95, 102, 105, 108, > 101, 115, 61, 36, 102, 105, 108, 101, 115, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 32, 34, 95, 97, 112, > 112, 108, 121, 95, 102, 105, 108, 101, 115, 32, 58, 32, 36, 34, 34, 61, > 95, 102, 105, 108, 101, 32, 95, 110, 98, 95, 102, 105, 108, 101, 115, 61, > 36, 34, 34, 35, 34, 32, 45, 95, 97, 112, 112, 108, 121, 95, 102, 105, > 108, 101, 115, 32, 36, 102, 105, 108, 101, 115, 32, 45, 117, 110, 99, 111, > 109, 109, 97, 110, 100, 32, 95, 97, 112, 112, 108, 121, 95, 102, 105, 108, > 101, 115, 10, 45, 109, 32, 34, 95, 97, 112, 112, 108, 121, 95, 102, 105, > 108, 101, 115, 32, 58, 32, 36, 49, 34, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 102, 105, > 108, 101, 115, 32, 39, 34, 36, 115, 95, 102, 105, 108, 101, 115, 34, 39, > 32, 97, 110, 100, 32, 115, 97, 118, 101, 32, 114, 101, 115, 117, 108, 116, > 32, 119, 105, 116, 104, 32, 112, 114, 101, 102, 105, 120, 32, 39, 36, 51, > 39, 46, 92, 110, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 95, 110, 98, 95, 102, 105, 108, 101, 115, 32, 45, 108, > 91, 93, 10, 102, 105, 108, 101, 61, 36, 123, 95, 102, 105, 108, 101, 123, > 36, 62, 43, 49, 125, 125, 10, 95, 102, 105, 108, 101, 61, 64, 123, 45, > 98, 97, 115, 101, 110, 97, 109, 101, 92, 32, 36, 102, 105, 108, 101, 125, > 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 52, 34, 41, > 125, 32, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 95, 102, 105, > 108, 101, 32, 111, 117, 116, 112, 117, 116, 95, 102, 105, 108, 101, 61, 34, > 36, 51, 34, 64, 123, 45, 49, 44, 98, 125, 46, 34, 36, 52, 34, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 108, 115, 101, 32, 111, 117, > 116, 112, 117, 116, 95, 102, 105, 108, 101, 61, 34, 36, 51, 34, 36, 95, > 102, 105, 108, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 45, 32, 73, 109, 97, 103, > 101, 32, 34, 123, 49, 43, 36, 62, 125, 47, 36, 95, 110, 98, 95, 102, > 105, 108, 101, 115, 34, 32, 91, 34, 36, 95, 102, 105, 108, 101, 34, 93, > 32, 45, 62, 32, 91, 34, 36, 111, 117, 116, 112, 117, 116, 95, 102, 105, > 108, 101, 34, 93, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 34, 32, 45, 118, 32, 45, 10, 36, > 102, 105, 108, 101, 32, 45, 95, 97, 112, 112, 108, 121, 95, 102, 105, 108, > 101, 115, 10, 45, 111, 32, 36, 111, 117, 116, 112, 117, 116, 95, 102, 105, > 108, 101, 10, 45, 105, 102, 32, 36, 53, 32, 45, 119, 91, 45, 49, 93, > 32, 64, 123, 45, 102, 105, 116, 115, 99, 114, 101, 101, 110, 92, 32, 123, > 119, 125, 44, 123, 104, 125, 44, 123, 100, 125, 125, 44, 49, 44, 48, 44, > 45, 49, 44, 45, 49, 44, 36, 95, 102, 105, 108, 101, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 109, 10, 45, 111, 110, 102, 97, 105, 108, 32, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 32, 45, 32, > 69, 114, 114, 111, 114, 32, 111, 99, 99, 117, 114, 101, 100, 32, 111, 110, > 32, 102, 105, 108, 101, 32, 39, 34, 36, 102, 105, 108, 101, 34, 39, 46, > 92, 110, 34, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 117, 110, 99, 111, 109, 109, 97, 110, 100, 32, > 95, 97, 112, 112, 108, 121, 95, 102, 105, 108, 101, 115, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 97, 109, 101, 114, 97, 32, > 58, 32, 95, 99, 97, 109, 101, 114, 97, 95, 105, 110, 100, 101, 120, 62, > 61, 48, 44, 95, 110, 98, 95, 102, 114, 97, 109, 101, 115, 62, 48, 44, > 95, 115, 107, 105, 112, 95, 102, 114, 97, 109, 101, 115, 62, 61, 48, 44, > 95, 99, 97, 112, 116, 117, 114, 101, 95, 119, 105, 100, 116, 104, 62, 61, > 48, 44, 95, 99, 97, 112, 116, 117, 114, 101, 95, 104, 101, 105, 103, 104, > 116, 62, 61, 48, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 73, 110, 115, 101, 114, 116, 32, 111, 110, 101, 32, 111, > 114, 32, 115, 101, 118, 101, 114, 97, 108, 32, 102, 114, 97, 109, 101, 115, > 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 99, 97, 109, 101, 114, 97, 44, 32, 119, 105, 116, 104, 32, 99, 117, 115, > 116, 111, 109, 32, 100, 101, 108, 97, 121, 32, 98, 101, 116, 119, 101, 101, > 110, 32, 102, 114, 97, 109, 101, 115, 32, 40, 105, 110, 32, 109, 115, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 87, 104, 101, 110, 32, > 39, 110, 98, 95, 102, 114, 97, 109, 101, 115, 61, 61, 48, 39, 44, 32, > 116, 104, 101, 32, 99, 97, 109, 101, 114, 97, 32, 115, 116, 114, 101, 97, > 109, 32, 105, 115, 32, 114, 101, 108, 101, 97, 115, 101, 100, 32, 105, 110, > 115, 116, 101, 97, 100, 32, 111, 102, 32, 99, 97, 112, 116, 117, 114, 105, > 110, 103, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 97, 109, 101, 114, 97, 95, > 105, 110, 100, 101, 120, 61, 48, 39, 32, 40, 100, 101, 102, 97, 117, 108, > 116, 32, 99, 97, 109, 101, 114, 97, 41, 44, 32, 39, 110, 98, 95, 102, > 114, 97, 109, 101, 115, 61, 49, 39, 44, 32, 39, 115, 107, 105, 112, 95, > 102, 114, 97, 109, 101, 115, 61, 48, 39, 32, 97, 110, 100, 32, 39, 99, > 97, 112, 116, 117, 114, 101, 95, 119, 105, 100, 116, 104, 61, 99, 97, 112, > 116, 117, 114, 101, 95, 104, 101, 105, 103, 104, 116, 61, 48, 39, 32, 40, > 100, 101, 102, 97, 117, 108, 116, 32, 115, 105, 122, 101, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 109, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 99, 111, 109, 109, 97, 110, 100, 39, 46, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 58, 32, 95, 97, 100, 100, 95, 100, 101, 98, 117, 103, 95, 105, > 110, 102, 111, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 123, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 32, 124, 32, 104, 116, 116, 112, 91, > 115, 93, 58, 47, 47, 85, 82, 76, 32, 124, 32, 34, 115, 116, 114, 105, > 110, 103, 34, 32, 125, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 109, 112, 111, 114, 116, 32, 71, 39, 77, 73, > 67, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, > 115, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 102, 105, 108, 101, 44, 32, 85, 82, 76, 32, 111, 114, 32, 115, 116, > 114, 105, 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 73, 109, 112, 111, 114, 116, 101, 100, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 32, 97, 114, 101, 32, 97, 118, 97, > 105, 108, 97, 98, 108, 101, 32, 100, 105, 114, 101, 99, 116, 108, 121, 32, > 97, 102, 116, 101, 114, 32, 116, 104, 101, 32, 39, 45, 99, 111, 109, 109, > 97, 110, 100, 39, 32, 105, 110, 118, 111, 99, 97, 116, 105, 111, 110, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, 100, 100, 95, 100, 101, > 98, 117, 103, 95, 105, 110, 102, 111, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 99, 111, 109, 109, 97, 110, 100, 32, 34, 102, 111, 111, 32, > 58, 32, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 100, 101, 102, > 111, 114, 109, 32, 36, 34, 34, 49, 34, 32, 45, 45, 102, 111, 111, 91, > 48, 93, 32, 53, 32, 45, 45, 102, 111, 111, 91, 48, 93, 32, 49, 53, > 10, 117, 112, 100, 97, 116, 101, 95, 116, 117, 116, 111, 114, 105, 97, 108, > 95, 104, 116, 109, 108, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 110, 118, 101, 114, 116, 32, 71, 92, 52, 55, 77, 73, 67, > 32, 116, 117, 116, 111, 114, 105, 97, 108, 32, 102, 114, 111, 109, 32, 71, > 97, 114, 114, 121, 32, 79, 115, 103, 111, 111, 100, 92, 52, 55, 115, 32, > 98, 108, 111, 103, 32, 40, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, > 46, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 97, 114, 116, 46, 99, > 111, 109, 41, 44, 32, 102, 111, 114, 32, 116, 104, 101, 32, 71, 92, 52, > 55, 77, 73, 67, 32, 119, 101, 98, 32, 112, 97, 103, 101, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 109, 32, 45, 109, 32, 34, 97, 100, 100, > 95, 112, 97, 103, 101, 32, 58, 32, 45, 95, 95, 117, 112, 100, 97, 116, > 101, 95, 116, 117, 116, 111, 114, 105, 97, 108, 95, 104, 116, 109, 108, 32, > 36, 34, 34, 42, 34, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, > 47, 44, 49, 55, 48, 48, 44, 105, 110, 100, 101, 120, 44, 95, 105, 110, > 100, 101, 120, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 97, > 115, 105, 99, 115, 44, 52, 48, 48, 48, 10, 45, 97, 100, 100, 95, 112, > 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, > 111, 107, 98, 111, 111, 107, 44, 49, 48, 48, 48, 10, 45, 97, 100, 100, > 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, > 99, 111, 111, 107, 98, 111, 111, 107, 47, 99, 97, 117, 108, 100, 114, 111, > 110, 44, 51, 53, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, > 111, 111, 107, 47, 114, 97, 109, 112, 115, 44, 49, 50, 48, 48, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, > 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, 97, 109, 112, > 115, 47, 97, 112, 112, 108, 121, 105, 110, 103, 45, 97, 45, 99, 117, 114, > 118, 101, 44, 54, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, > 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, 98, 108, 117, 114, 114, 105, > 110, 103, 44, 54, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, > 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, 103, 101, 110, 101, 114, 97, > 108, 45, 114, 97, 109, 112, 115, 44, 50, 53, 48, 48, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, > 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, > 105, 110, 112, 117, 116, 45, 97, 110, 100, 45, 102, 105, 108, 108, 44, 49, > 50, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, > 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, > 47, 114, 97, 109, 112, 115, 47, 111, 110, 101, 45, 100, 105, 109, 101, 110, > 115, 105, 111, 110, 97, 108, 45, 102, 117, 110, 99, 116, 105, 111, 110, 115, > 44, 56, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, > 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, > 107, 47, 114, 97, 109, 112, 115, 47, 114, 101, 109, 97, 112, 112, 105, 110, > 103, 45, 115, 112, 97, 99, 101, 44, 50, 50, 48, 48, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, > 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, > 114, 101, 115, 105, 122, 105, 110, 103, 44, 54, 48, 48, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, > 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, > 119, 97, 114, 112, 44, 56, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, > 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, > 107, 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, 117, 115, 105, > 111, 110, 44, 49, 48, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, > 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, > 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, 117, 115, 105, 111, > 110, 47, 103, 114, 97, 100, 117, 97, 116, 101, 100, 45, 98, 108, 117, 114, > 115, 44, 51, 56, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, > 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, 117, 115, 105, 111, 110, > 47, 118, 97, 114, 105, 97, 116, 105, 111, 110, 115, 45, 111, 110, 45, 97, > 45, 116, 104, 101, 109, 101, 44, 51, 56, 48, 48, 10, 45, 97, 100, 100, > 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, > 99, 111, 111, 107, 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 47, 101, 105, 103, 101, 110, 118, 97, 108, 117, 101, > 115, 45, 97, 110, 100, 45, 101, 105, 103, 101, 110, 118, 101, 99, 116, 111, > 114, 115, 44, 50, 51, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, > 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, > 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, 117, 115, 105, 111, > 110, 47, 100, 105, 114, 101, 99, 116, 105, 111, 110, 97, 108, 45, 98, 108, > 117, 114, 114, 105, 110, 103, 44, 51, 53, 48, 48, 10, 45, 97, 100, 100, > 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, > 99, 111, 111, 107, 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 47, 116, 101, 110, 115, 111, 114, 115, 45, 102, 111, > 114, 45, 116, 104, 101, 45, 116, 111, 110, 115, 111, 114, 105, 97, 108, 108, > 121, 45, 99, 104, 97, 108, 108, 101, 110, 103, 101, 100, 44, 56, 53, 48, > 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, > 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 100, > 121, 105, 100, 105, 102, 102, 117, 115, 105, 111, 110, 47, 101, 105, 103, 101, > 110, 45, 116, 104, 105, 110, 103, 121, 115, 44, 52, 56, 48, 48, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, > 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 100, 121, 105, 100, > 105, 102, 102, 117, 115, 105, 111, 110, 47, 102, 97, 107, 101, 45, 100, 101, > 112, 116, 104, 45, 111, 102, 45, 102, 105, 101, 108, 100, 44, 55, 54, 48, > 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, > 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, > 111, 97, 100, 45, 115, 121, 115, 116, 101, 109, 115, 44, 50, 53, 48, 48, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, > 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 115, 116, > 97, 105, 110, 101, 100, 45, 103, 108, 97, 115, 115, 44, 52, 48, 48, 48, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, > 110, 100, 45, 100, 101, 99, 111, 114, 97, 116, 105, 111, 110, 115, 44, 51, > 53, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 105, 109, > 97, 103, 101, 115, 44, 49, 53, 48, 48, 10, 45, 97, 100, 100, 95, 112, > 97, 103, 101, 32, 105, 109, 97, 103, 101, 115, 47, 99, 111, 110, 106, 117, > 114, 105, 110, 103, 45, 105, 109, 97, 103, 101, 115, 44, 49, 48, 48, 48, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 105, 109, 97, 103, 101, > 115, 47, 105, 109, 97, 103, 101, 115, 45, 97, 115, 45, 100, 97, 116, 97, > 115, 101, 116, 115, 44, 51, 53, 48, 48, 10, 45, 97, 100, 100, 95, 112, > 97, 103, 101, 32, 105, 109, 97, 103, 101, 115, 47, 105, 109, 97, 103, 101, > 115, 45, 104, 97, 118, 101, 45, 101, 100, 103, 101, 115, 44, 49, 50, 48, > 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, > 97, 110, 100, 45, 103, 117, 105, 100, 101, 44, 53, 53, 48, 48, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 45, 103, 117, 105, 100, 101, 47, 45, 100, 105, 115, 112, 108, 97, 121, 44, > 50, 48, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, > 105, 110, 112, 117, 116, 115, 45, 111, 117, 116, 112, 117, 116, 115, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 45, 103, 117, 105, 100, 101, 47, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 116, 101, 110, 115, 111, 114, 115, 44, 49, 53, 48, 48, 44, 44, 44, 99, > 111, 109, 109, 97, 110, 100, 115, 45, 105, 110, 112, 117, 116, 115, 45, 111, > 117, 116, 112, 117, 116, 115, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, > 105, 110, 112, 117, 116, 44, 53, 53, 48, 48, 44, 44, 44, 99, 111, 109, > 109, 97, 110, 100, 115, 45, 105, 110, 112, 117, 116, 115, 45, 111, 117, 116, > 112, 117, 116, 115, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, > 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 116, 114, 105, > 103, 111, 109, 101, 116, 114, 105, 99, 45, 97, 110, 100, 45, 105, 110, 118, > 101, 114, 115, 101, 45, 116, 114, 105, 103, 111, 109, 101, 116, 114, 105, 99, > 45, 99, 111, 109, 109, 97, 110, 100, 115, 44, 50, 53, 48, 48, 44, 44, > 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 118, 97, 108, 117, 101, 115, > 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, > 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, > 103, 117, 105, 100, 101, 47, 45, 101, 105, 103, 101, 110, 50, 116, 101, 110, > 115, 111, 114, 44, 49, 55, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, > 110, 100, 115, 45, 118, 97, 108, 117, 101, 115, 45, 109, 97, 110, 105, 112, > 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, 103, > 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, > 45, 110, 111, 114, 109, 44, 55, 48, 48, 44, 44, 44, 99, 111, 109, 109, > 97, 110, 100, 115, 45, 118, 97, 108, 117, 101, 115, 45, 109, 97, 110, 105, > 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, > 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, > 47, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 44, 49, 55, 48, 48, > 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 118, 97, 108, 117, > 101, 115, 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, > 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 45, 103, 117, 105, 100, 101, 47, 45, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 44, 53, 48, 48, 48, 44, 44, 44, 99, 111, 109, 109, > 97, 110, 100, 115, 45, 118, 97, 108, 117, 101, 115, 45, 109, 97, 110, 105, > 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, > 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, > 47, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 44, 49, 53, 48, 48, > 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 118, 97, 108, 117, > 101, 115, 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, > 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 45, 103, 117, 105, 100, 101, 47, 45, 99, 111, 109, 112, 111, 115, 101, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 44, 49, 48, 48, 48, 44, 44, > 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 99, 111, 108, 111, 114, 115, > 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, > 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, > 103, 117, 105, 100, 101, 47, 45, 109, 105, 120, 95, 114, 103, 98, 44, 52, > 48, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 99, > 111, 108, 111, 114, 115, 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, > 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 115, 101, 108, 101, > 99, 116, 95, 99, 111, 108, 111, 114, 44, 51, 48, 48, 48, 44, 44, 44, > 99, 111, 109, 109, 97, 110, 100, 115, 45, 99, 111, 108, 111, 114, 115, 45, > 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, > 117, 105, 100, 101, 47, 45, 119, 97, 114, 112, 44, 53, 48, 48, 48, 44, > 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 103, 101, 111, 109, 101, > 116, 114, 121, 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, > 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 97, 110, 100, 112, 97, > 115, 115, 44, 53, 48, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, > 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, > 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 44, 50, 48, 48, 48, 44, > 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, > 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, > 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, > 117, 114, 95, 97, 110, 103, 117, 108, 97, 114, 44, 55, 48, 48, 44, 44, > 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, > 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, > 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, > 114, 95, 108, 105, 110, 101, 97, 114, 44, 55, 48, 48, 44, 44, 44, 99, > 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, > 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, > 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 95, > 114, 97, 100, 105, 97, 108, 44, 55, 48, 48, 44, 44, 44, 99, 111, 109, > 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, > 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 95, 115, 101, > 108, 101, 99, 116, 105, 118, 101, 44, 51, 53, 48, 48, 44, 44, 44, 99, > 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, > 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, > 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 95, > 120, 44, 55, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, > 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, > 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, > 100, 101, 47, 45, 98, 108, 117, 114, 95, 120, 121, 44, 55, 48, 48, 44, > 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, > 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, > 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, > 117, 114, 95, 120, 121, 122, 44, 55, 48, 48, 44, 44, 44, 99, 111, 109, > 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, > 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 95, 121, 44, > 55, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, > 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, > 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, > 47, 45, 98, 108, 117, 114, 95, 122, 44, 50, 53, 48, 48, 44, 44, 44, > 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, > 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 99, 111, 110, 118, > 111, 108, 118, 101, 44, 51, 53, 48, 48, 44, 44, 44, 99, 111, 109, 109, > 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 45, 103, 117, 105, 100, 101, 47, 45, 100, 101, 114, 105, 99, 104, 101, 44, > 49, 53, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, > 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, > 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, > 101, 47, 45, 103, 114, 97, 100, 105, 101, 110, 116, 44, 50, 48, 48, 48, > 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, > 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, > 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 103, > 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 44, 49, 51, 48, > 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, > 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, > 115, 116, 114, 117, 99, 116, 117, 114, 101, 116, 101, 110, 115, 111, 114, 115, > 44, 51, 51, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, > 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, > 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, > 100, 101, 47, 45, 100, 105, 115, 116, 97, 110, 99, 101, 44, 57, 53, 48, > 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 101, 97, > 116, 117, 114, 101, 115, 45, 101, 120, 116, 114, 97, 99, 116, 105, 111, 110, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, > 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 108, 97, 98, 101, 108, 44, > 49, 51, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, > 102, 101, 97, 116, 117, 114, 101, 115, 45, 101, 120, 116, 114, 97, 99, 116, > 105, 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, > 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 103, 97, 117, > 115, 115, 105, 97, 110, 44, 50, 48, 48, 48, 44, 44, 44, 99, 111, 109, > 109, 97, 110, 100, 115, 45, 105, 109, 97, 103, 101, 45, 100, 114, 97, 119, > 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, > 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 112, 108, 97, > 115, 109, 97, 44, 52, 53, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, > 110, 100, 115, 45, 105, 109, 97, 103, 101, 45, 100, 114, 97, 119, 105, 110, > 103, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 32, > 32, 42, 32, 80, 114, 101, 112, 97, 114, 101, 32, 102, 111, 108, 100, 101, > 114, 32, 115, 116, 114, 117, 99, 116, 117, 114, 101, 46, 34, 32, 45, 118, > 32, 45, 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, > 47, 116, 117, 116, 111, 114, 105, 97, 108, 46, 99, 115, 115, 32, 46, 34, > 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 99, > 111, 112, 121, 114, 105, 103, 104, 116, 46, 104, 116, 109, 108, 32, 46, 34, > 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 102, > 97, 118, 105, 99, 111, 110, 46, 105, 99, 111, 32, 46, 34, 10, 45, 120, > 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 102, 97, 118, 105, > 99, 111, 110, 46, 112, 110, 103, 32, 46, 34, 10, 45, 120, 32, 34, 108, > 110, 32, 45, 102, 115, 32, 46, 46, 47, 102, 111, 111, 116, 101, 114, 46, > 104, 116, 109, 108, 32, 46, 34, 10, 45, 120, 32, 34, 108, 110, 32, 45, > 102, 115, 32, 46, 46, 47, 104, 101, 97, 100, 101, 114, 46, 104, 116, 109, > 108, 32, 46, 34, 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, > 46, 46, 47, 104, 101, 97, 100, 101, 114, 46, 99, 115, 115, 32, 46, 34, > 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 106, > 113, 117, 101, 114, 121, 45, 49, 46, 49, 49, 46, 48, 46, 109, 105, 110, > 46, 106, 115, 32, 46, 34, 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, > 115, 32, 46, 46, 47, 105, 109, 97, 103, 101, 115, 32, 46, 34, 10, 45, > 120, 32, 34, 109, 107, 100, 105, 114, 32, 45, 112, 32, 105, 109, 103, 34, > 10, 45, 120, 32, 34, 99, 100, 32, 105, 109, 103, 32, 38, 38, 32, 108, > 110, 32, 45, 102, 115, 32, 46, 46, 47, 46, 46, 47, 105, 109, 103, 47, > 108, 111, 103, 111, 52, 46, 106, 112, 103, 32, 46, 34, 10, 45, 120, 32, > 34, 99, 100, 32, 105, 109, 103, 32, 38, 38, 32, 108, 110, 32, 45, 102, > 115, 32, 46, 46, 47, 46, 46, 47, 105, 109, 103, 47, 108, 111, 103, 111, > 115, 46, 106, 112, 103, 32, 46, 34, 10, 45, 120, 32, 34, 99, 100, 32, > 105, 109, 103, 32, 38, 38, 32, 108, 110, 32, 45, 102, 115, 32, 46, 46, > 47, 46, 46, 47, 105, 109, 103, 47, 114, 115, 115, 46, 112, 110, 103, 32, > 46, 34, 10, 45, 120, 32, 34, 99, 100, 32, 105, 109, 103, 32, 38, 38, > 32, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 46, 46, 47, 99, 111, > 110, 118, 101, 114, 116, 95, 114, 97, 119, 95, 105, 109, 103, 47, 42, 32, > 46, 34, 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, > 47, 99, 111, 110, 118, 101, 114, 116, 95, 114, 97, 119, 46, 104, 116, 109, > 108, 32, 46, 46, 47, 99, 111, 110, 118, 101, 114, 116, 95, 114, 97, 119, > 46, 115, 104, 116, 109, 108, 32, 46, 34, 10, 45, 120, 32, 34, 108, 110, > 32, 45, 102, 115, 32, 46, 46, 47, 116, 117, 116, 111, 114, 105, 97, 108, > 95, 116, 111, 99, 46, 104, 116, 109, 108, 32, 46, 34, 10, 45, 120, 32, > 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 104, 105, 103, 104, 115, > 108, 105, 100, 101, 32, 46, 34, 10, 49, 49, 44, 49, 49, 44, 49, 44, > 51, 44, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 32, 49, 44, 49, > 44, 48, 32, 45, 108, 105, 110, 101, 32, 51, 44, 53, 48, 37, 44, 123, > 119, 45, 52, 125, 44, 53, 48, 37, 44, 49, 44, 48, 32, 45, 45, 108, > 105, 110, 101, 32, 53, 48, 37, 44, 51, 44, 53, 48, 37, 44, 123, 104, > 45, 52, 125, 44, 49, 44, 48, 10, 45, 97, 32, 120, 32, 45, 111, 32, > 105, 109, 103, 47, 116, 111, 99, 95, 98, 117, 116, 116, 111, 110, 115, 46, > 112, 110, 103, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 52, 32, 45, 102, 99, 91, 45, 49, 93, 32, 50, 52, 53, 44, 50, 52, > 53, 44, 50, 52, 53, 44, 48, 32, 45, 111, 91, 45, 49, 93, 32, 105, > 109, 103, 47, 116, 111, 99, 95, 118, 111, 105, 100, 46, 112, 110, 103, 10, > 45, 114, 109, 10, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, > 78, 10, 45, 111, 91, 45, 49, 93, 32, 36, 123, 95, 111, 117, 116, 112, > 117, 116, 95, 104, 116, 109, 108, 36, 62, 125, 32, 45, 111, 91, 45, 49, > 93, 32, 36, 123, 95, 111, 117, 116, 112, 117, 116, 95, 115, 104, 116, 109, > 108, 36, 62, 125, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, 78, 10, 45, > 118, 32, 43, 32, 45, 95, 117, 112, 100, 97, 116, 101, 95, 116, 117, 116, > 111, 114, 105, 97, 108, 95, 104, 116, 109, 108, 91, 93, 32, 36, 123, 95, > 105, 110, 112, 117, 116, 36, 62, 125, 44, 36, 123, 95, 104, 101, 105, 103, > 104, 116, 36, 62, 125, 44, 36, 123, 95, 111, 117, 116, 112, 117, 116, 95, > 115, 104, 116, 109, 108, 36, 62, 125, 44, 36, 123, 95, 111, 117, 116, 112, > 117, 116, 95, 104, 116, 109, 108, 36, 62, 125, 44, 36, 123, 95, 105, 109, > 103, 95, 112, 114, 101, 102, 105, 120, 36, 62, 125, 44, 36, 123, 95, 116, > 111, 99, 105, 100, 36, 62, 125, 32, 45, 118, 32, 45, 10, 45, 100, 111, > 110, 101, 10, 45, 120, 32, 34, 114, 109, 32, 45, 102, 32, 95, 95, 116, > 109, 112, 46, 104, 116, 109, 108, 34, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 32, 32, 42, 32, 65, 108, 108, 32, 100, 111, 110, 101, > 32, 33, 46, 92, 110, 92, 110, 34, 10, 95, 95, 117, 112, 100, 97, 116, > 101, 95, 116, 117, 116, 111, 114, 105, 97, 108, 95, 104, 116, 109, 108, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 34, 34, 125, 44, > 36, 123, 52, 61, 34, 34, 125, 44, 36, 123, 53, 61, 34, 34, 125, 10, > 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, 36, 95, 78, 41, 125, > 32, 95, 78, 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 95, 105, 110, > 112, 117, 116, 36, 95, 78, 61, 36, 49, 32, 95, 104, 101, 105, 103, 104, > 116, 36, 95, 78, 61, 36, 50, 10, 45, 105, 102, 32, 123, 110, 97, 114, > 103, 40, 34, 36, 53, 34, 41, 125, 32, 95, 116, 111, 99, 105, 100, 36, > 95, 78, 61, 34, 36, 53, 34, 10, 45, 101, 108, 115, 101, 10, 40, 123, > 39, 34, 36, 49, 34, 39, 125, 41, 32, 45, 115, 32, 45, 44, 123, 39, > 47, 39, 125, 32, 45, 105, 102, 32, 64, 35, 32, 95, 116, 111, 99, 105, > 100, 36, 95, 78, 61, 64, 123, 48, 44, 116, 125, 32, 45, 114, 109, 32, > 45, 101, 108, 115, 101, 32, 95, 116, 111, 99, 105, 100, 36, 95, 78, 61, > 105, 110, 100, 101, 120, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 105, 102, 10, 111, 117, 116, 112, 117, 116, 95, 98, 97, 115, 101, 61, > 64, 123, 34, 45, 98, 97, 115, 101, 110, 97, 109, 101, 32, 36, 49, 34, > 125, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 111, 117, 116, > 112, 117, 116, 95, 98, 97, 115, 101, 41, 125, 10, 40, 123, 39, 36, 111, > 117, 116, 112, 117, 116, 95, 98, 97, 115, 101, 39, 125, 41, 32, 45, 105, > 102, 32, 123, 105, 61, 61, 123, 39, 45, 39, 125, 125, 32, 45, 61, 91, > 45, 49, 93, 32, 123, 39, 95, 39, 125, 32, 111, 117, 116, 112, 117, 116, > 95, 98, 97, 115, 101, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, > 51, 34, 41, 125, 32, 95, 111, 117, 116, 112, 117, 116, 95, 115, 104, 116, > 109, 108, 36, 95, 78, 61, 34, 36, 51, 34, 46, 115, 104, 116, 109, 108, > 32, 95, 111, 117, 116, 112, 117, 116, 95, 104, 116, 109, 108, 36, 95, 78, > 61, 34, 36, 51, 34, 46, 104, 116, 109, 108, 32, 95, 105, 109, 103, 95, > 112, 114, 101, 102, 105, 120, 36, 95, 78, 61, 34, 36, 51, 34, 10, 45, > 101, 108, 115, 101, 32, 95, 111, 117, 116, 112, 117, 116, 95, 115, 104, 116, > 109, 108, 36, 95, 78, 61, 36, 111, 117, 116, 112, 117, 116, 95, 98, 97, > 115, 101, 46, 115, 104, 116, 109, 108, 32, 95, 111, 117, 116, 112, 117, 116, > 95, 104, 116, 109, 108, 36, 95, 78, 61, 36, 111, 117, 116, 112, 117, 116, > 95, 98, 97, 115, 101, 46, 104, 116, 109, 108, 32, 95, 105, 109, 103, 95, > 112, 114, 101, 102, 105, 120, 36, 95, 78, 61, 36, 111, 117, 116, 112, 117, > 116, 95, 98, 97, 115, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 52, 34, 41, 125, 32, 95, > 111, 117, 116, 112, 117, 116, 95, 104, 116, 109, 108, 36, 95, 78, 61, 34, > 36, 52, 34, 46, 104, 116, 109, 108, 32, 45, 101, 110, 100, 105, 102, 10, > 95, 78, 61, 123, 36, 95, 78, 43, 49, 125, 10, 95, 117, 112, 100, 97, > 116, 101, 95, 116, 117, 116, 111, 114, 105, 97, 108, 95, 104, 116, 109, 108, > 32, 58, 10, 45, 118, 32, 45, 10, 117, 114, 108, 61, 34, 104, 116, 116, > 112, 58, 47, 47, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 97, 114, > 116, 46, 99, 111, 109, 47, 116, 111, 111, 108, 115, 45, 97, 110, 100, 45, > 116, 111, 121, 115, 47, 103, 109, 105, 99, 47, 36, 49, 34, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 32, 32, 42, 32, 67, > 111, 110, 118, 101, 114, 116, 32, 116, 117, 116, 111, 114, 105, 97, 108, 32, > 112, 97, 103, 101, 32, 39, 34, 36, 117, 114, 108, 34, 39, 46, 34, 32, > 45, 118, 32, 45, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, > 32, 32, 32, 32, 62, 32, 82, 101, 116, 114, 105, 101, 118, 101, 32, 112, > 97, 103, 101, 32, 39, 34, 36, 117, 114, 108, 34, 39, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 120, 32, 34, 119, 103, 101, 116, 32, 45, 113, 32, > 34, 36, 117, 114, 108, 34, 32, 45, 79, 32, 95, 95, 116, 109, 112, 46, > 104, 116, 109, 108, 34, 10, 45, 105, 32, 114, 97, 119, 58, 95, 95, 116, > 109, 112, 46, 104, 116, 109, 108, 44, 99, 104, 97, 114, 10, 45, 100, 105, > 115, 99, 97, 114, 100, 32, 49, 51, 10, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 34, 99, 108, 97, 115, 115, 61, 92, 34, 105, > 110, 116, 101, 114, 110, 97, 108, 92, 34, 32, 34, 10, 45, 114, 101, 112, > 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 99, 108, 97, 115, 115, 61, > 92, 34, 101, 120, 116, 101, 114, 110, 97, 108, 92, 34, 32, 34, 10, 45, > 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 100, 105, 114, > 61, 92, 34, 108, 116, 114, 92, 34, 32, 34, 10, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 116, 114, 32, 34, 98, 111, 114, 100, 101, 114, 58, > 32, 49, 112, 120, 34, 44, 34, 98, 111, 114, 100, 101, 114, 58, 32, 48, > 112, 120, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 32, 34, 71, 92, 49, 52, 48, 77, 73, 67, 34, 44, 34, 71, 92, 52, > 55, 77, 73, 67, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, > 116, 114, 32, 34, 67, 78, 84, 76, 34, 44, 34, 67, 84, 82, 76, 34, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 82, > 97, 115, 104, 105, 100, 34, 44, 34, 82, 97, 99, 104, 105, 100, 34, 10, > 45, 115, 32, 43, 44, 123, 39, 60, 104, 49, 39, 125, 10, 45, 105, 102, > 32, 123, 64, 35, 62, 49, 125, 32, 45, 114, 109, 91, 48, 93, 10, 45, > 101, 108, 115, 101, 10, 45, 115, 32, 43, 44, 123, 39, 60, 104, 50, 39, > 125, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, 10, 45, 114, 109, > 91, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 97, 32, 121, 10, 45, 115, 32, 43, 44, 123, 39, 34, 32, > 32, 32, 60, 47, 100, 105, 118, 62, 92, 110, 60, 47, 100, 105, 118, 62, > 92, 110, 60, 102, 111, 111, 116, 101, 114, 62, 34, 39, 125, 32, 45, 107, > 91, 48, 93, 10, 45, 105, 91, 48, 93, 32, 40, 123, 39, 34, 60, 33, > 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 62, 34, 92, 110, > 92, 10, 34, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 92, 34, > 101, 110, 45, 117, 115, 92, 34, 62, 60, 104, 101, 97, 100, 62, 60, 109, > 101, 116, 97, 32, 104, 116, 116, 112, 45, 101, 113, 117, 105, 118, 61, 92, > 34, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 92, 34, 32, > 99, 111, 110, 116, 101, 110, 116, 61, 92, 34, 116, 101, 120, 116, 47, 104, > 116, 109, 108, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 85, 84, 70, > 45, 56, 92, 34, 62, 34, 92, 110, 92, 10, 34, 60, 108, 105, 110, 107, > 32, 114, 101, 108, 61, 92, 34, 115, 116, 121, 108, 101, 115, 104, 101, 101, > 116, 92, 34, 32, 104, 114, 101, 102, 61, 92, 34, 116, 117, 116, 111, 114, > 105, 97, 108, 46, 99, 115, 115, 92, 34, 62, 34, 92, 110, 92, 10, 34, > 60, 115, 99, 114, 105, 112, 116, 32, 116, 121, 112, 101, 61, 92, 34, 116, > 101, 120, 116, 47, 106, 97, 118, 97, 115, 99, 114, 105, 112, 116, 92, 34, > 32, 115, 114, 99, 61, 92, 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, > 47, 104, 105, 103, 104, 115, 108, 105, 100, 101, 46, 106, 115, 92, 34, 62, > 60, 47, 115, 99, 114, 105, 112, 116, 62, 34, 92, 110, 92, 10, 34, 60, > 108, 105, 110, 107, 32, 114, 101, 108, 61, 92, 34, 115, 116, 121, 108, 101, > 115, 104, 101, 101, 116, 92, 34, 32, 116, 121, 112, 101, 61, 92, 34, 116, > 101, 120, 116, 47, 99, 115, 115, 92, 34, 32, 104, 114, 101, 102, 61, 92, > 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, 47, 104, 105, 103, 104, 115, > 108, 105, 100, 101, 46, 99, 115, 115, 92, 34, 32, 47, 62, 34, 92, 110, > 92, 10, 34, 60, 115, 99, 114, 105, 112, 116, 32, 116, 121, 112, 101, 61, > 92, 34, 116, 101, 120, 116, 47, 106, 97, 118, 97, 115, 99, 114, 105, 112, > 116, 92, 34, 62, 34, 92, 110, 92, 10, 34, 104, 115, 46, 103, 114, 97, > 112, 104, 105, 99, 115, 68, 105, 114, 32, 61, 32, 39, 104, 105, 103, 104, > 115, 108, 105, 100, 101, 47, 103, 114, 97, 112, 104, 105, 99, 115, 47, 39, > 59, 34, 92, 110, 92, 10, 34, 104, 115, 46, 119, 114, 97, 112, 112, 101, > 114, 67, 108, 97, 115, 115, 78, 97, 109, 101, 32, 61, 32, 39, 119, 105, > 100, 101, 45, 98, 111, 114, 100, 101, 114, 39, 59, 34, 92, 110, 92, 10, > 34, 60, 47, 115, 99, 114, 105, 112, 116, 62, 34, 92, 110, 92, 10, 34, > 60, 98, 111, 100, 121, 62, 34, 92, 110, 92, 110, 39, 125, 41, 10, 40, > 123, 39, 92, 110, 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, > 108, 62, 39, 125, 41, 10, 45, 121, 32, 45, 97, 32, 121, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 92, 34, 47, 115, > 116, 97, 116, 105, 99, 47, 109, 101, 100, 105, 97, 47, 117, 112, 108, 111, > 97, 100, 115, 47, 34, 44, 34, 92, 34, 104, 116, 116, 112, 58, 47, 47, > 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 97, 114, 116, 46, 99, 111, > 109, 47, 115, 116, 97, 116, 105, 99, 47, 109, 101, 100, 105, 97, 47, 117, > 112, 108, 111, 97, 100, 115, 47, 34, 10, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 34, 92, 34, 47, 116, 111, 111, 108, 115, 45, > 97, 110, 100, 45, 116, 111, 121, 115, 47, 103, 109, 105, 99, 47, 34, 44, > 34, 92, 34, 104, 116, 116, 112, 58, 47, 47, 112, 97, 114, 116, 105, 99, > 117, 108, 97, 114, 97, 114, 116, 46, 99, 111, 109, 47, 116, 111, 111, 108, > 115, 45, 97, 110, 100, 45, 116, 111, 121, 115, 47, 103, 109, 105, 99, 47, > 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, > 92, 34, 104, 116, 116, 112, 58, 47, 47, 112, 97, 114, 116, 105, 99, 117, > 108, 97, 114, 97, 114, 116, 46, 99, 111, 109, 47, 34, 44, 34, 92, 34, > 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 112, 97, 114, 116, 105, > 99, 117, 108, 97, 114, 97, 114, 116, 46, 99, 111, 109, 47, 34, 10, 45, > 115, 32, 43, 44, 123, 39, 34, 60, 97, 32, 34, 39, 125, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 36, 62, > 62, 48, 34, 32, 38, 38, 32, 34, 123, 64, 123, 123, 36, 62, 45, 49, > 125, 44, 116, 125, 39, 61, 61, 39, 34, 60, 97, 32, 34, 125, 125, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 115, 32, 43, 44, 123, 39, 104, 114, > 101, 102, 61, 92, 34, 39, 125, 32, 45, 108, 91, 45, 49, 93, 10, 45, > 115, 32, 43, 44, 123, 39, 92, 34, 39, 125, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 48, 125, 10, 108, 105, 110, 107, 61, 64, 123, 48, 44, 116, > 125, 10, 40, 123, 39, 36, 108, 105, 110, 107, 39, 125, 41, 32, 45, 122, > 91, 45, 49, 93, 32, 48, 44, 52, 56, 32, 98, 97, 115, 101, 108, 105, > 110, 107, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 123, 36, 98, 97, 115, 101, 108, 105, 110, > 107, 39, 61, 61, 39, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, > 46, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 97, 114, 116, 46, 99, > 111, 109, 47, 116, 111, 111, 108, 115, 45, 97, 110, 100, 45, 116, 111, 121, > 115, 47, 103, 109, 105, 99, 47, 34, 125, 10, 45, 108, 91, 93, 32, 97, > 110, 99, 104, 111, 114, 61, 34, 34, 32, 40, 123, 39, 36, 108, 105, 110, > 107, 39, 125, 41, 32, 45, 115, 32, 43, 44, 123, 34, 39, 92, 35, 39, > 34, 125, 32, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, 32, 97, 110, > 99, 104, 111, 114, 61, 35, 64, 123, 45, 49, 44, 116, 125, 32, 108, 105, > 110, 107, 61, 64, 123, 48, 44, 116, 125, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 114, 109, 32, 45, 101, 110, 100, 108, 10, 40, 123, 39, 36, 108, > 105, 110, 107, 39, 125, 41, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 91, 45, 49, 93, 32, 123, 39, 47, 39, 125, 10, 114, 101, 108, 105, 110, > 107, 61, 64, 123, 45, 98, 97, 115, 101, 110, 97, 109, 101, 92, 32, 64, > 123, 45, 49, 44, 116, 125, 125, 46, 115, 104, 116, 109, 108, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 40, 123, 39, 36, 114, 101, 108, 105, 110, 107, > 39, 125, 41, 32, 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 45, 39, > 125, 125, 32, 45, 61, 91, 45, 49, 93, 32, 123, 39, 95, 39, 125, 32, > 114, 101, 108, 105, 110, 107, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, > 102, 32, 36, 114, 101, 108, 105, 110, 107, 10, 114, 101, 108, 105, 110, 107, > 61, 36, 114, 101, 108, 105, 110, 107, 36, 97, 110, 99, 104, 111, 114, 10, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, > 32, 76, 111, 99, 97, 108, 32, 108, 105, 110, 107, 32, 39, 34, 36, 108, > 105, 110, 107, 36, 97, 110, 99, 104, 111, 114, 34, 39, 32, 114, 101, 108, > 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, 101, 108, 105, > 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 109, 91, > 48, 93, 32, 45, 105, 91, 48, 93, 32, 40, 123, 39, 36, 114, 101, 108, > 105, 110, 107, 39, 125, 41, 32, 45, 121, 91, 48, 93, 10, 45, 101, 108, > 115, 101, 10, 40, 123, 39, 36, 114, 101, 108, 105, 110, 107, 39, 125, 41, > 32, 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 95, 39, 125, 125, 10, > 45, 108, 91, 45, 49, 93, 32, 45, 122, 32, 49, 44, 49, 48, 48, 37, > 32, 45, 115, 32, 45, 44, 123, 39, 46, 39, 125, 32, 99, 111, 109, 109, > 97, 110, 100, 61, 64, 123, 45, 98, 97, 115, 101, 110, 97, 109, 101, 92, > 32, 64, 123, 48, 44, 116, 125, 125, 32, 45, 107, 91, 48, 93, 32, 45, > 101, 110, 100, 108, 10, 114, 101, 108, 105, 110, 107, 61, 34, 104, 116, 116, > 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, > 111, 114, 103, 101, 46, 110, 101, 116, 47, 114, 101, 102, 101, 114, 101, 110, > 99, 101, 46, 115, 104, 116, 109, 108, 35, 34, 36, 99, 111, 109, 109, 97, > 110, 100, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, > 32, 32, 62, 32, 76, 111, 99, 97, 108, 32, 108, 105, 110, 107, 32, 39, > 34, 36, 108, 105, 110, 107, 36, 97, 110, 99, 104, 111, 114, 34, 39, 32, > 114, 101, 108, 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, > 101, 108, 105, 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 114, 109, 91, 48, 93, 32, 45, 105, 91, 48, 93, 32, 40, 123, 39, 36, > 114, 101, 108, 105, 110, 107, 39, 125, 41, 32, 45, 121, 91, 48, 93, 10, > 45, 101, 108, 115, 101, 10, 114, 101, 108, 105, 110, 107, 61, 36, 108, 105, > 110, 107, 36, 97, 110, 99, 104, 111, 114, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, 32, 76, 111, 99, 97, 108, > 32, 108, 105, 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 36, 97, 110, > 99, 104, 111, 114, 34, 39, 32, 114, 101, 108, 105, 110, 107, 101, 100, 32, > 116, 111, 32, 39, 34, 36, 114, 101, 108, 105, 110, 107, 34, 39, 46, 34, > 32, 45, 118, 32, 45, 10, 45, 114, 109, 91, 48, 93, 32, 45, 105, 91, > 48, 93, 32, 40, 123, 39, 36, 114, 101, 108, 105, 110, 107, 39, 125, 41, > 32, 45, 121, 91, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, > 115, 101, 32, 45, 108, 10, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, > 36, 108, 105, 110, 107, 32, 101, 120, 116, 61, 64, 123, 45, 49, 44, 120, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 110, > 97, 114, 103, 40, 36, 101, 120, 116, 41, 125, 32, 101, 120, 116, 61, 64, > 123, 45, 115, 116, 114, 117, 110, 99, 97, 115, 101, 92, 32, 36, 101, 120, > 116, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 123, > 36, 101, 120, 116, 39, 61, 61, 39, 112, 110, 103, 125, 124, 124, 123, 36, > 101, 120, 116, 39, 61, 61, 39, 106, 112, 103, 125, 124, 124, 123, 36, 101, > 120, 116, 39, 61, 61, 39, 106, 112, 101, 103, 125, 125, 10, 114, 101, 108, > 105, 110, 107, 61, 105, 109, 103, 47, 36, 53, 95, 64, 123, 45, 98, 97, > 115, 101, 110, 97, 109, 101, 92, 32, 36, 108, 105, 110, 107, 125, 32, 48, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 114, 101, 108, 105, 110, 107, > 32, 114, 101, 108, 105, 110, 107, 61, 64, 123, 45, 49, 44, 102, 125, 64, > 123, 45, 49, 44, 98, 125, 46, 106, 112, 103, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 36, 114, 101, 108, 105, 110, 107, 32, 45, > 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, 32, > 69, 120, 116, 101, 114, 110, 97, 108, 32, 105, 109, 97, 103, 101, 32, 108, > 105, 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 34, 39, 32, 114, 101, > 108, 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, 101, 108, > 105, 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 101, 108, > 115, 101, 10, 45, 108, 91, 93, 32, 45, 105, 32, 36, 108, 105, 110, 107, > 32, 45, 107, 91, 48, 93, 32, 105, 115, 95, 111, 112, 97, 113, 117, 101, > 61, 48, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 32, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 34, 32, 124, 124, > 32, 34, 105, 97, 62, 50, 53, 48, 125, 32, 105, 115, 95, 111, 112, 97, > 113, 117, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, > 99, 10, 45, 105, 102, 32, 123, 36, 105, 115, 95, 111, 112, 97, 113, 117, > 101, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 101, 108, 115, 101, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 105, 91, 48, 93, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 32, 45, 102, > 99, 91, 48, 93, 32, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 111, 32, 36, 114, 101, 108, 105, 110, 107, 44, > 54, 48, 32, 45, 114, 109, 32, 45, 120, 32, 34, 103, 105, 116, 32, 97, > 100, 100, 32, 34, 36, 114, 101, 108, 105, 110, 107, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, 32, 73, 109, 97, > 103, 101, 32, 108, 105, 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 34, > 39, 32, 99, 111, 110, 118, 101, 114, 116, 101, 100, 32, 97, 110, 100, 32, > 114, 101, 108, 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, > 101, 108, 105, 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 111, 110, 102, 97, 105, 108, 32, 114, 101, 108, 105, 110, 107, 61, 36, 108, > 105, 110, 107, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, > 32, 32, 32, 62, 32, 70, 97, 105, 108, 101, 100, 32, 116, 111, 32, 114, > 101, 116, 114, 105, 101, 118, 101, 32, 105, 109, 97, 103, 101, 32, 108, 105, > 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 34, 39, 46, 34, 32, 45, > 118, 32, 45, 32, 45, 114, 109, 10, 45, 101, 110, 100, 108, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 105, 91, 48, > 93, 32, 40, 123, 39, 36, 114, 101, 108, 105, 110, 107, 39, 125, 41, 10, > 45, 105, 91, 50, 93, 32, 40, 123, 39, 34, 32, 99, 108, 97, 115, 115, > 61, 92, 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, 92, 34, 32, 111, > 110, 99, 108, 105, 99, 107, 61, 92, 34, 114, 101, 116, 117, 114, 110, 32, > 104, 115, 46, 101, 120, 112, 97, 110, 100, 40, 116, 104, 105, 115, 41, 92, > 34, 34, 39, 125, 41, 10, 45, 121, 91, 48, 44, 50, 93, 10, 45, 101, > 108, 115, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, > 32, 32, 32, 62, 32, 69, 120, 116, 101, 114, 110, 97, 108, 32, 108, 105, > 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 34, 39, 32, 102, 111, 117, > 110, 100, 46, 34, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 111, 110, 102, 97, 105, 108, 32, 45, 101, 110, 100, 108, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 97, 32, 121, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 121, 32, 45, 101, 110, > 100, 108, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, > 45, 97, 32, 121, 10, 45, 115, 32, 43, 44, 123, 39, 34, 60, 105, 109, > 103, 34, 39, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 105, 102, 32, 123, 36, 62, 62, 48, 34, 32, 38, 38, 32, 34, 123, > 64, 123, 123, 36, 62, 45, 49, 125, 44, 116, 125, 39, 61, 61, 39, 34, > 60, 105, 109, 103, 34, 125, 125, 10, 45, 108, 91, 36, 62, 93, 10, 45, > 115, 32, 43, 44, 123, 39, 34, 115, 114, 99, 61, 92, 34, 34, 39, 125, > 10, 45, 108, 91, 50, 93, 10, 45, 115, 32, 43, 44, 123, 39, 92, 34, > 39, 125, 32, 108, 105, 110, 107, 61, 64, 123, 48, 44, 116, 125, 10, 114, > 101, 108, 105, 110, 107, 61, 105, 109, 103, 47, 36, 53, 95, 64, 123, 45, > 98, 97, 115, 101, 110, 97, 109, 101, 92, 32, 36, 108, 105, 110, 107, 125, > 32, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 114, 101, 108, 105, > 110, 107, 32, 114, 101, 108, 105, 110, 107, 61, 64, 123, 45, 49, 44, 102, > 125, 64, 123, 45, 49, 44, 98, 125, 46, 106, 112, 103, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 114, 101, 108, 105, 110, 107, > 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, > 62, 32, 73, 109, 97, 103, 101, 32, 39, 34, 36, 108, 105, 110, 107, 34, > 39, 32, 114, 101, 108, 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, > 36, 114, 101, 108, 105, 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, > 10, 45, 101, 108, 115, 101, 10, 45, 108, 91, 93, 32, 45, 105, 32, 36, > 108, 105, 110, 107, 32, 45, 107, 91, 48, 93, 32, 105, 115, 95, 111, 112, > 97, 113, 117, 101, 61, 48, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, > 34, 32, 124, 124, 32, 34, 105, 97, 62, 50, 53, 48, 125, 32, 105, 115, > 95, 111, 112, 97, 113, 117, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 97, 32, 99, 10, 45, 105, 102, 32, 36, 105, 115, 95, 111, 112, > 97, 113, 117, 101, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 102, 114, > 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, 109, 101, > 32, 49, 48, 44, 49, 48, 44, 50, 52, 53, 10, 45, 101, 108, 115, 101, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 105, 91, 48, 93, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 32, 45, 102, > 99, 91, 48, 93, 32, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 111, 32, 36, 114, 101, 108, 105, 110, 107, 44, > 54, 48, 32, 45, 114, 109, 32, 45, 120, 32, 34, 103, 105, 116, 32, 97, > 100, 100, 32, 34, 36, 114, 101, 108, 105, 110, 107, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, 32, 73, 109, 97, > 103, 101, 32, 39, 34, 36, 108, 105, 110, 107, 34, 39, 32, 99, 111, 110, > 118, 101, 114, 116, 101, 100, 32, 97, 110, 100, 32, 114, 101, 108, 105, 110, > 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, 101, 108, 105, 110, 107, > 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 111, 110, 102, 97, 105, > 108, 32, 114, 101, 108, 105, 110, 107, 61, 36, 108, 105, 110, 107, 32, 45, > 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 32, 32, > 62, 32, 70, 97, 105, 108, 101, 100, 32, 116, 111, 32, 114, 101, 116, 114, > 105, 101, 118, 101, 32, 105, 109, 97, 103, 101, 32, 39, 34, 36, 108, 105, > 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 32, 45, 114, 109, 10, > 45, 101, 110, 100, 108, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 48, 93, 32, 45, 105, 91, 48, 93, 32, 40, 123, 39, 36, 114, 101, > 108, 105, 110, 107, 39, 125, 41, 32, 45, 121, 91, 48, 93, 10, 45, 101, > 110, 100, 108, 10, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 10, 45, > 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, 121, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 60, > 116, 100, 62, 60, 105, 109, 103, 34, 44, 34, 60, 116, 100, 32, 119, 105, > 100, 116, 104, 61, 92, 34, 50, 53, 54, 92, 34, 62, 60, 105, 109, 103, > 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, > 60, 116, 100, 62, 92, 110, 60, 112, 62, 60, 105, 109, 103, 34, 44, 34, > 60, 116, 100, 32, 119, 105, 100, 116, 104, 61, 92, 34, 50, 53, 54, 92, > 34, 62, 60, 112, 62, 60, 105, 109, 103, 34, 10, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 116, 114, 32, 34, 60, 97, 32, 34, 44, 34, 60, > 97, 32, 116, 97, 114, 103, 101, 116, 61, 92, 34, 95, 112, 97, 114, 101, > 110, 116, 92, 34, 32, 34, 10, 45, 111, 32, 114, 97, 119, 58, 36, 52, > 44, 99, 104, 97, 114, 10, 45, 120, 32, 34, 103, 105, 116, 32, 97, 100, > 100, 32, 36, 52, 34, 10, 45, 114, 109, 10, 40, 123, 39, 34, 60, 33, > 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 62, 34, 92, 110, > 92, 10, 34, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 92, 34, > 101, 110, 45, 117, 115, 92, 34, 62, 60, 104, 101, 97, 100, 62, 60, 109, > 101, 116, 97, 32, 104, 116, 116, 112, 45, 101, 113, 117, 105, 118, 61, 92, > 34, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 92, 34, 32, > 99, 111, 110, 116, 101, 110, 116, 61, 92, 34, 116, 101, 120, 116, 47, 104, > 116, 109, 108, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 85, 84, 70, > 45, 56, 92, 34, 62, 34, 92, 110, 92, 10, 34, 60, 33, 45, 45, 35, > 105, 110, 99, 108, 117, 100, 101, 32, 102, 105, 108, 101, 61, 92, 34, 104, > 101, 97, 100, 101, 114, 46, 104, 116, 109, 108, 92, 34, 32, 45, 45, 62, > 34, 92, 110, 92, 10, 34, 60, 108, 105, 110, 107, 32, 104, 114, 101, 102, > 61, 92, 34, 46, 46, 47, 115, 116, 121, 108, 101, 46, 99, 115, 115, 92, > 34, 32, 114, 101, 108, 61, 92, 34, 115, 116, 121, 108, 101, 115, 104, 101, > 101, 116, 92, 34, 32, 116, 121, 112, 101, 61, 92, 34, 116, 101, 120, 116, > 47, 99, 115, 115, 92, 34, 62, 34, 92, 110, 92, 10, 34, 60, 100, 105, > 118, 32, 105, 100, 61, 92, 34, 98, 108, 111, 99, 95, 111, 112, 116, 105, > 111, 110, 92, 34, 62, 60, 100, 105, 118, 32, 105, 100, 61, 92, 34, 116, > 111, 112, 95, 118, 101, 114, 116, 92, 34, 62, 60, 100, 105, 118, 32, 105, > 100, 61, 92, 34, 116, 101, 120, 116, 95, 116, 111, 112, 92, 34, 62, 84, > 117, 116, 111, 114, 105, 97, 108, 60, 47, 100, 105, 118, 62, 60, 47, 100, > 105, 118, 62, 34, 92, 110, 92, 10, 34, 60, 100, 105, 118, 32, 105, 100, > 61, 92, 34, 99, 101, 110, 116, 101, 114, 92, 34, 62, 60, 100, 105, 118, > 32, 105, 100, 61, 92, 34, 116, 101, 120, 116, 95, 99, 101, 110, 116, 114, > 101, 95, 105, 110, 116, 114, 111, 92, 34, 62, 34, 92, 110, 92, 10, 34, > 60, 115, 99, 114, 105, 112, 116, 32, 108, 97, 110, 103, 117, 97, 103, 101, > 61, 92, 34, 106, 97, 118, 97, 115, 99, 114, 105, 112, 116, 92, 34, 62, > 118, 97, 114, 32, 103, 70, 105, 108, 101, 110, 97, 109, 101, 32, 61, 32, > 39, 36, 54, 39, 59, 60, 47, 115, 99, 114, 105, 112, 116, 62, 34, 92, > 110, 92, 10, 34, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, 101, > 32, 102, 105, 108, 101, 61, 92, 34, 116, 117, 116, 111, 114, 105, 97, 108, > 95, 116, 111, 99, 46, 104, 116, 109, 108, 92, 34, 32, 45, 45, 62, 34, > 92, 110, 92, 10, 34, 60, 105, 102, 114, 97, 109, 101, 32, 119, 105, 100, > 116, 104, 61, 92, 34, 49, 48, 48, 37, 92, 34, 32, 104, 101, 105, 103, > 104, 116, 61, 92, 34, 36, 50, 92, 34, 32, 102, 114, 97, 109, 101, 98, > 111, 114, 100, 101, 114, 61, 92, 34, 48, 92, 34, 32, 115, 114, 99, 61, > 92, 34, 34, 36, 52, 34, 92, 34, 32, 115, 101, 97, 109, 108, 101, 115, > 115, 62, 60, 47, 105, 102, 114, 97, 109, 101, 62, 34, 92, 110, 92, 10, > 34, 60, 47, 100, 105, 118, 62, 60, 47, 100, 105, 118, 62, 60, 100, 105, > 118, 32, 105, 100, 61, 92, 34, 102, 111, 111, 116, 101, 114, 92, 34, 62, > 60, 105, 109, 103, 32, 115, 114, 99, 61, 92, 34, 105, 109, 97, 103, 101, > 115, 47, 102, 111, 111, 116, 101, 114, 46, 106, 112, 103, 92, 34, 32, 47, > 62, 60, 47, 100, 105, 118, 62, 60, 47, 100, 105, 118, 62, 34, 92, 110, > 92, 10, 34, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, 101, 32, > 102, 105, 108, 101, 61, 92, 34, 99, 111, 112, 121, 114, 105, 103, 104, 116, > 46, 104, 116, 109, 108, 92, 34, 32, 45, 45, 62, 34, 92, 110, 92, 10, > 34, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, 101, 32, 102, 105, > 108, 101, 61, 92, 34, 102, 111, 111, 116, 101, 114, 46, 104, 116, 109, 108, > 92, 34, 32, 45, 45, 62, 34, 92, 110, 39, 125, 41, 10, 45, 111, 32, > 114, 97, 119, 58, 36, 51, 44, 99, 104, 97, 114, 10, 45, 120, 32, 34, > 103, 105, 116, 32, 97, 100, 100, 32, 36, 51, 34, 10, 45, 114, 109, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 117, 112, 105, > 100, 32, 58, 32, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 99, 117, 112, 105, 100, > 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, 32, 119, 105, 116, > 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 99, 117, > 112, 105, 100, 32, 44, 10, 99, 117, 112, 105, 100, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 52, 56, 48, 125, 62, 61, > 49, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, > 116, 32, 36, 49, 120, 36, 49, 32, 99, 117, 112, 105, 100, 32, 98, 105, > 110, 97, 114, 121, 32, 109, 97, 115, 107, 46, 34, 32, 45, 118, 32, 45, > 10, 45, 108, 91, 93, 10, 40, 52, 56, 48, 44, 52, 56, 48, 44, 49, > 44, 49, 44, 49, 41, 10, 40, 123, 39, 34, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 87, 72, > 88, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 90, 76, 91, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 49, 92, 92, 78, 93, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 50, 107, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 50, 108, 32, 32, 32, 32, 32, 32, 32, 32, 32, 52, 109, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, 32, 52, 109, 32, 32, > 32, 32, 32, 32, 34, 92, 10, 34, 32, 32, 32, 52, 109, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, 32, 51, 108, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 51, 107, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 50, 107, 32, 32, 32, 32, 32, 32, 32, 32, 32, 49, 105, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 48, 105, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 47, 103, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 103, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 101, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 43, 99, 32, 32, 32, 32, 32, 32, 32, 32, 32, 41, > 97, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 96, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 38, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 36, 92, 92, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 89, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 78, 87, 32, 32, 32, 32, 32, 32, > 32, 34, 92, 10, 34, 32, 32, 32, 76, 85, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 73, 81, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 92, 10, > 34, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 58, 82, 62, 90, 32, 32, 32, 32, 32, 32, 32, 32, 32, 57, 90, > 68, 94, 32, 32, 32, 32, 32, 32, 56, 84, 32, 32, 42, 94, 71, 96, > 32, 32, 32, 32, 32, 32, 58, 88, 64, 81, 32, 32, 63, 96, 73, 98, > 32, 32, 32, 32, 32, 32, 59, 90, 67, 83, 32, 32, 65, 99, 77, 101, > 32, 32, 32, 32, 32, 32, 59, 91, 70, 84, 65, 81, 32, 92, 34, 123, > 32, 32, 32, 32, 32, 32, 59, 92, 92, 71, 84, 66, 83, 32, 36, 125, > 32, 32, 32, 32, 32, 32, 59, 92, 92, 74, 86, 66, 83, 32, 36, 125, > 32, 32, 32, 32, 32, 32, 59, 93, 76, 87, 66, 84, 32, 37, 125, 32, > 32, 32, 32, 32, 32, 59, 104, 66, 86, 32, 40, 126, 80, 32, 32, 32, > 32, 32, 32, 59, 103, 66, 88, 78, 84, 32, 48, 126, 80, 32, 32, 32, > 32, 32, 32, 59, 104, 67, 94, 32, 48, 126, 80, 32, 34, 92, 10, 34, > 32, 32, 32, 32, 32, 71, 81, 69, 104, 67, 94, 32, 48, 126, 80, 32, > 32, 32, 32, 32, 32, 75, 90, 75, 112, 75, 95, 32, 48, 126, 80, 32, > 32, 32, 32, 32, 32, 77, 126, 84, 77, 95, 32, 48, 126, 80, 32, 32, > 32, 32, 32, 32, 126, 104, 32, 48, 126, 80, 32, 32, 32, 32, 32, 33, > 126, 105, 32, 48, 126, 80, 32, 32, 32, 32, 32, 92, 34, 126, 106, 32, > 48, 126, 80, 32, 32, 32, 32, 32, 92, 35, 126, 107, 32, 48, 126, 32, > 32, 32, 32, 32, 92, 35, 126, 109, 32, 49, 126, 32, 32, 32, 32, 32, > 36, 126, 110, 32, 48, 125, 32, 32, 32, 32, 32, 37, 126, 111, 32, 48, > 124, 32, 32, 32, 32, 32, 37, 126, 113, 32, 49, 124, 32, 32, 32, 32, > 32, 38, 126, 114, 32, 48, 123, 32, 32, 32, 32, 32, 92, 52, 55, 126, > 116, 32, 49, 122, 32, 32, 32, 32, 32, 40, 126, 119, 32, 49, 121, 32, > 32, 32, 32, 32, 42, 126, 122, 32, 50, 120, 32, 32, 32, 32, 32, 43, > 126, 124, 32, 50, 119, 32, 32, 32, 32, 32, 43, 126, 126, 34, 92, 10, > 34, 32, 50, 118, 32, 32, 32, 32, 32, 44, 126, 126, 80, 32, 49, 116, > 32, 32, 32, 32, 32, 44, 126, 126, 92, 92, 32, 60, 116, 32, 32, 32, > 32, 32, 45, 126, 126, 95, 32, 61, 114, 32, 32, 32, 32, 32, 45, 126, > 126, 96, 32, 60, 112, 32, 32, 32, 32, 32, 46, 126, 126, 100, 32, 61, > 110, 32, 32, 32, 32, 32, 47, 126, 126, 102, 32, 61, 109, 32, 32, 32, > 32, 32, 48, 126, 126, 105, 32, 61, 108, 32, 32, 32, 32, 32, 48, 126, > 126, 105, 32, 60, 106, 32, 32, 32, 32, 32, 48, 126, 126, 106, 32, 59, > 104, 32, 32, 32, 32, 32, 48, 126, 126, 106, 32, 57, 102, 32, 32, 32, > 32, 32, 47, 126, 126, 97, 32, 47, 100, 32, 32, 32, 32, 32, 47, 126, > 126, 97, 32, 45, 98, 32, 32, 32, 52, 85, 32, 32, 126, 126, 96, 32, > 42, 95, 32, 32, 32, 51, 86, 32, 33, 126, 126, 95, 32, 40, 92, 92, > 32, 32, 32, 50, 88, 32, 92, 34, 126, 126, 94, 32, 38, 90, 32, 32, > 32, 49, 90, 32, 36, 126, 126, 94, 32, 37, 88, 32, 34, 92, 10, 34, > 32, 32, 48, 91, 32, 37, 126, 126, 94, 32, 92, 35, 85, 32, 32, 32, > 47, 92, 92, 32, 38, 126, 126, 94, 32, 32, 32, 32, 32, 44, 93, 32, > 92, 52, 55, 126, 126, 94, 32, 32, 32, 32, 32, 44, 94, 32, 40, 126, > 126, 95, 32, 32, 32, 32, 32, 45, 95, 32, 41, 126, 126, 95, 32, 32, > 32, 32, 32, 45, 96, 32, 42, 126, 126, 95, 32, 32, 32, 32, 32, 45, > 97, 32, 43, 126, 126, 96, 32, 32, 32, 32, 32, 45, 97, 32, 44, 126, > 126, 96, 32, 32, 32, 32, 32, 45, 99, 32, 46, 126, 126, 97, 32, 32, > 32, 32, 32, 45, 99, 32, 47, 126, 126, 97, 32, 32, 32, 32, 32, 45, > 100, 32, 48, 126, 126, 97, 32, 32, 32, 32, 32, 44, 101, 32, 50, 126, > 126, 98, 32, 32, 32, 32, 32, 45, 102, 32, 51, 126, 126, 98, 32, 32, > 32, 32, 32, 44, 102, 32, 52, 126, 126, 98, 32, 32, 32, 32, 32, 43, > 102, 32, 53, 126, 126, 98, 32, 32, 32, 32, 32, 43, 104, 32, 56, 126, > 126, 99, 32, 32, 32, 32, 32, 42, 105, 32, 59, 126, 34, 92, 10, 34, > 126, 100, 32, 32, 32, 32, 32, 42, 107, 32, 61, 126, 126, 100, 32, 32, > 32, 32, 32, 41, 108, 32, 64, 126, 126, 101, 32, 32, 32, 32, 32, 41, > 111, 32, 68, 126, 126, 102, 32, 32, 32, 32, 32, 40, 112, 32, 70, 126, > 126, 102, 32, 32, 32, 32, 32, 92, 52, 55, 113, 32, 73, 126, 126, 103, > 32, 32, 32, 32, 32, 38, 114, 32, 75, 126, 126, 103, 32, 32, 32, 32, > 32, 37, 116, 32, 78, 126, 126, 103, 32, 32, 32, 32, 32, 37, 119, 92, > 34, 126, 126, 103, 32, 32, 32, 32, 32, 36, 120, 36, 126, 126, 103, 32, > 32, 32, 32, 32, 46, 85, 74, 122, 92, 52, 55, 126, 126, 102, 32, 32, > 32, 32, 32, 46, 89, 76, 124, 42, 126, 126, 102, 32, 75, 80, 32, 32, > 32, 32, 51, 90, 76, 126, 45, 126, 126, 102, 32, 76, 82, 32, 32, 32, > 32, 53, 126, 98, 49, 126, 126, 102, 32, 77, 83, 32, 32, 32, 32, 53, > 126, 101, 52, 126, 126, 102, 32, 77, 82, 32, 32, 32, 32, 52, 126, 103, > 53, 126, 126, 100, 32, 77, 83, 32, 32, 32, 32, 52, 126, 34, 92, 10, > 34, 105, 56, 126, 126, 101, 32, 77, 83, 32, 32, 32, 32, 51, 126, 106, > 58, 126, 126, 101, 32, 77, 83, 32, 32, 32, 32, 51, 126, 107, 59, 126, > 126, 100, 32, 76, 83, 32, 32, 32, 32, 51, 126, 108, 60, 126, 126, 100, > 32, 76, 83, 32, 32, 32, 32, 50, 126, 108, 61, 126, 126, 99, 32, 75, > 83, 32, 32, 32, 32, 49, 126, 108, 62, 126, 126, 99, 32, 76, 85, 32, > 32, 32, 32, 50, 126, 109, 63, 126, 126, 98, 32, 75, 85, 32, 32, 32, > 32, 48, 126, 107, 63, 126, 126, 98, 32, 75, 86, 32, 32, 32, 32, 48, > 126, 107, 64, 126, 126, 98, 32, 75, 88, 32, 32, 32, 32, 50, 126, 108, > 64, 126, 126, 96, 32, 75, 90, 32, 32, 32, 32, 50, 126, 107, 64, 126, > 126, 96, 32, 75, 91, 32, 32, 32, 32, 49, 126, 106, 64, 126, 126, 95, > 32, 76, 84, 75, 85, 32, 32, 32, 50, 85, 38, 126, 105, 63, 126, 126, > 93, 32, 76, 83, 72, 85, 32, 32, 32, 52, 88, 92, 52, 55, 126, 105, > 64, 126, 126, 93, 32, 77, 84, 71, 84, 32, 32, 34, 92, 10, 34, 32, > 53, 91, 92, 52, 55, 126, 103, 64, 126, 126, 92, 92, 32, 77, 84, 69, > 84, 32, 32, 32, 54, 92, 92, 92, 52, 55, 126, 102, 63, 126, 126, 91, > 32, 77, 83, 67, 84, 32, 32, 32, 55, 93, 38, 126, 101, 64, 126, 126, > 90, 32, 77, 84, 67, 85, 32, 32, 32, 56, 95, 49, 86, 76, 126, 100, > 65, 126, 126, 90, 32, 77, 84, 65, 85, 32, 32, 32, 57, 97, 53, 126, > 112, 65, 126, 126, 90, 32, 78, 85, 64, 84, 32, 32, 32, 57, 99, 55, > 126, 112, 65, 126, 126, 89, 32, 77, 84, 62, 85, 32, 32, 32, 58, 100, > 58, 126, 113, 66, 126, 126, 89, 32, 76, 83, 61, 86, 32, 32, 32, 59, > 102, 60, 126, 114, 67, 126, 126, 89, 32, 77, 84, 60, 86, 32, 32, 32, > 60, 104, 62, 126, 114, 67, 126, 126, 89, 32, 78, 84, 58, 86, 32, 32, > 32, 60, 105, 64, 126, 114, 67, 126, 126, 89, 32, 85, 57, 86, 32, 32, > 32, 61, 106, 64, 126, 113, 67, 126, 126, 89, 32, 84, 56, 87, 32, 32, > 32, 61, 107, 66, 126, 113, 67, 126, 126, 90, 92, 34, 84, 54, 34, 92, > 10, 34, 86, 32, 32, 32, 60, 110, 68, 126, 111, 66, 126, 126, 89, 92, > 34, 84, 53, 86, 32, 32, 32, 61, 113, 70, 126, 111, 65, 126, 126, 88, > 36, 84, 51, 85, 32, 32, 32, 60, 115, 72, 126, 110, 61, 126, 126, 84, > 37, 84, 49, 85, 32, 32, 32, 59, 118, 75, 126, 108, 58, 126, 126, 82, > 92, 52, 55, 84, 47, 85, 32, 32, 32, 60, 126, 126, 104, 57, 126, 126, > 81, 40, 85, 46, 85, 32, 32, 32, 60, 126, 126, 103, 56, 126, 126, 80, > 40, 84, 45, 86, 32, 32, 32, 60, 126, 126, 103, 56, 126, 126, 80, 42, > 84, 43, 85, 32, 32, 32, 59, 126, 126, 102, 56, 126, 126, 80, 43, 85, > 42, 85, 32, 32, 32, 59, 126, 126, 101, 55, 126, 126, 43, 84, 40, 84, > 32, 32, 32, 59, 126, 126, 101, 54, 126, 124, 43, 84, 92, 52, 55, 85, > 32, 32, 32, 58, 126, 126, 100, 55, 126, 124, 43, 84, 38, 85, 32, 32, > 32, 58, 126, 126, 99, 55, 126, 124, 44, 84, 37, 86, 32, 32, 32, 59, > 126, 126, 99, 54, 126, 123, 44, 83, 92, 35, 85, 32, 32, 32, 57, 126, > 34, 92, 10, 34, 126, 98, 55, 126, 122, 45, 85, 92, 35, 86, 32, 32, > 32, 57, 126, 126, 97, 55, 126, 122, 45, 84, 33, 85, 32, 32, 32, 55, > 126, 126, 95, 55, 126, 121, 45, 85, 32, 84, 32, 32, 32, 53, 126, 126, > 94, 56, 126, 121, 46, 85, 32, 78, 85, 32, 32, 32, 63, 82, 72, 126, > 126, 93, 56, 126, 120, 45, 84, 32, 76, 85, 32, 32, 32, 66, 88, 75, > 126, 126, 92, 92, 57, 126, 121, 46, 85, 32, 76, 85, 32, 32, 32, 67, > 126, 126, 107, 58, 126, 121, 47, 85, 32, 74, 85, 32, 32, 32, 69, 126, > 126, 108, 59, 126, 121, 46, 84, 32, 73, 85, 32, 32, 32, 69, 126, 126, > 108, 60, 126, 121, 46, 85, 32, 72, 85, 32, 32, 32, 70, 126, 126, 109, > 62, 126, 122, 47, 85, 32, 71, 85, 32, 32, 32, 70, 126, 126, 109, 62, > 126, 121, 46, 84, 32, 70, 86, 32, 32, 32, 71, 126, 126, 109, 63, 126, > 121, 46, 84, 32, 68, 85, 32, 32, 32, 71, 126, 126, 109, 64, 126, 121, > 46, 85, 32, 68, 85, 32, 32, 32, 71, 126, 126, 110, 64, 126, 34, 92, > 10, 34, 119, 45, 84, 32, 66, 85, 32, 32, 32, 71, 126, 126, 109, 64, > 85, 72, 126, 105, 45, 84, 32, 65, 85, 32, 32, 32, 70, 126, 126, 109, > 42, 126, 94, 45, 85, 32, 65, 85, 32, 32, 32, 69, 126, 126, 108, 42, > 126, 93, 45, 85, 32, 63, 85, 32, 32, 32, 69, 126, 126, 108, 42, 126, > 90, 43, 84, 32, 62, 85, 32, 32, 32, 67, 126, 126, 108, 44, 126, 89, > 43, 85, 32, 62, 85, 32, 32, 32, 66, 126, 126, 116, 53, 126, 88, 43, > 85, 32, 61, 86, 32, 32, 32, 65, 126, 126, 118, 57, 126, 87, 43, 85, > 32, 59, 85, 32, 32, 32, 64, 126, 126, 119, 59, 126, 87, 43, 85, 32, > 59, 85, 32, 32, 32, 62, 126, 126, 121, 64, 126, 87, 43, 85, 32, 58, > 85, 32, 32, 32, 60, 126, 126, 122, 67, 126, 87, 43, 84, 32, 57, 86, > 32, 32, 32, 59, 126, 126, 122, 70, 126, 87, 43, 85, 32, 57, 86, 32, > 32, 32, 56, 126, 126, 121, 72, 126, 87, 44, 85, 32, 55, 85, 32, 32, > 32, 53, 126, 126, 120, 76, 126, 88, 43, 85, 34, 92, 10, 34, 32, 55, > 85, 32, 32, 32, 51, 126, 126, 126, 126, 83, 44, 85, 32, 54, 85, 32, > 32, 32, 63, 126, 126, 126, 126, 94, 44, 85, 32, 53, 85, 32, 32, 32, > 64, 126, 126, 126, 126, 94, 43, 85, 32, 53, 86, 32, 32, 32, 66, 126, > 126, 126, 126, 81, 73, 86, 43, 85, 32, 52, 86, 32, 32, 32, 67, 126, > 126, 126, 126, 81, 32, 77, 85, 32, 51, 86, 32, 32, 32, 67, 126, 126, > 126, 126, 80, 32, 76, 84, 32, 50, 86, 32, 32, 32, 67, 126, 126, 126, > 126, 32, 76, 85, 32, 50, 86, 32, 32, 32, 67, 126, 126, 126, 126, 32, > 77, 85, 32, 49, 86, 32, 32, 32, 67, 126, 126, 126, 125, 32, 77, 85, > 32, 48, 86, 32, 32, 32, 66, 126, 126, 126, 124, 32, 77, 84, 32, 47, > 86, 32, 32, 32, 65, 126, 126, 126, 123, 32, 78, 85, 32, 47, 86, 32, > 32, 32, 64, 126, 126, 126, 121, 32, 78, 85, 32, 47, 87, 32, 32, 32, > 62, 126, 126, 126, 119, 32, 78, 85, 32, 47, 86, 32, 32, 32, 58, 126, > 126, 126, 116, 32, 85, 32, 34, 92, 10, 34, 46, 86, 32, 32, 32, 56, > 126, 126, 126, 114, 33, 85, 32, 45, 86, 32, 32, 32, 52, 126, 126, 126, > 111, 92, 34, 85, 32, 45, 86, 32, 32, 32, 46, 126, 126, 126, 106, 36, > 85, 32, 45, 87, 32, 32, 32, 49, 126, 126, 126, 114, 42, 86, 32, 45, > 86, 32, 32, 32, 51, 126, 126, 126, 121, 47, 86, 32, 44, 86, 32, 32, > 32, 52, 126, 126, 126, 124, 49, 85, 32, 44, 87, 32, 32, 32, 53, 126, > 126, 126, 126, 51, 86, 32, 44, 87, 32, 32, 32, 54, 126, 126, 126, 126, > 82, 54, 86, 32, 43, 86, 32, 32, 32, 53, 126, 126, 126, 126, 84, 56, > 85, 32, 43, 87, 32, 32, 32, 52, 126, 126, 126, 126, 85, 58, 84, 32, > 42, 87, 32, 32, 32, 52, 126, 126, 126, 126, 90, 64, 85, 32, 43, 87, > 32, 32, 32, 51, 126, 126, 126, 126, 93, 68, 85, 32, 43, 87, 32, 32, > 32, 49, 126, 126, 126, 126, 94, 70, 84, 32, 42, 87, 32, 32, 32, 48, > 126, 126, 126, 126, 94, 72, 84, 32, 42, 87, 32, 32, 32, 45, 126, 126, > 126, 126, 94, 34, 92, 10, 34, 75, 84, 32, 42, 88, 32, 32, 32, 43, > 126, 126, 126, 126, 94, 78, 85, 32, 43, 88, 32, 32, 32, 92, 34, 126, > 126, 126, 126, 92, 92, 32, 43, 88, 32, 32, 32, 33, 126, 126, 126, 126, > 92, 92, 32, 44, 88, 32, 32, 32, 32, 126, 126, 126, 126, 91, 32, 43, > 87, 32, 32, 32, 32, 126, 126, 126, 126, 92, 92, 32, 44, 87, 32, 32, > 32, 32, 78, 126, 126, 126, 126, 92, 92, 32, 45, 87, 32, 32, 32, 32, > 78, 126, 126, 126, 126, 93, 32, 46, 88, 32, 32, 32, 32, 78, 126, 126, > 126, 126, 93, 32, 47, 88, 32, 32, 32, 32, 77, 126, 126, 126, 126, 93, > 32, 48, 89, 32, 32, 32, 32, 76, 126, 126, 126, 126, 93, 32, 49, 88, > 32, 32, 32, 32, 74, 126, 126, 126, 126, 92, 92, 32, 50, 88, 32, 32, > 32, 32, 71, 126, 126, 126, 126, 91, 32, 52, 88, 32, 32, 32, 32, 64, > 126, 126, 126, 126, 86, 32, 54, 89, 32, 32, 32, 32, 62, 126, 126, 126, > 126, 85, 32, 55, 88, 32, 32, 32, 32, 62, 126, 126, 126, 126, 88, 32, > 58, 88, 32, 32, 32, 34, 92, 10, 34, 32, 62, 126, 126, 126, 126, 90, > 32, 60, 89, 32, 32, 32, 32, 62, 126, 126, 126, 126, 93, 32, 64, 90, > 32, 32, 32, 32, 62, 126, 126, 126, 126, 116, 41, 90, 32, 32, 32, 32, > 62, 126, 126, 126, 126, 123, 48, 91, 32, 32, 32, 32, 61, 126, 126, 126, > 126, 125, 52, 92, 92, 32, 32, 32, 32, 61, 126, 126, 126, 126, 126, 81, > 57, 94, 32, 32, 32, 32, 59, 126, 126, 126, 126, 126, 82, 62, 97, 32, > 32, 32, 32, 52, 126, 126, 126, 126, 126, 70, 100, 32, 32, 32, 32, 52, > 126, 126, 126, 126, 126, 110, 32, 32, 32, 32, 53, 126, 126, 126, 126, 126, > 111, 42, 83, 32, 32, 32, 49, 126, 126, 126, 126, 126, 113, 45, 88, 32, > 32, 32, 52, 126, 126, 126, 126, 126, 121, 54, 90, 32, 32, 32, 53, 126, > 126, 126, 126, 126, 126, 85, 66, 93, 32, 32, 32, 55, 126, 126, 126, 126, > 126, 126, 91, 74, 96, 32, 32, 32, 54, 126, 126, 126, 126, 126, 126, 112, > 32, 32, 32, 47, 126, 126, 126, 126, 126, 104, 69, 117, 32, 32, 32, 47, > 126, 126, 34, 92, 10, 34, 126, 126, 126, 102, 61, 111, 32, 32, 32, 48, > 126, 126, 126, 126, 126, 102, 50, 100, 32, 32, 32, 47, 126, 126, 126, 126, > 126, 101, 49, 99, 32, 32, 32, 47, 126, 126, 126, 126, 126, 101, 48, 97, > 32, 32, 32, 44, 126, 126, 126, 126, 126, 99, 47, 94, 32, 32, 32, 92, > 35, 126, 126, 126, 126, 126, 92, 92, 46, 92, 92, 32, 32, 32, 33, 126, > 126, 126, 126, 126, 91, 45, 89, 32, 32, 32, 32, 78, 126, 126, 126, 126, > 126, 90, 42, 84, 32, 32, 32, 32, 75, 126, 126, 126, 126, 126, 90, 32, > 32, 32, 32, 33, 126, 126, 126, 126, 126, 90, 32, 32, 32, 32, 32, 126, > 126, 126, 126, 126, 88, 32, 32, 32, 32, 32, 75, 126, 126, 126, 126, 126, > 84, 32, 32, 32, 32, 32, 67, 126, 126, 126, 126, 123, 32, 32, 32, 32, > 32, 66, 126, 126, 126, 126, 121, 32, 32, 32, 32, 32, 64, 126, 126, 126, > 126, 120, 32, 32, 32, 32, 32, 62, 126, 126, 126, 126, 118, 32, 32, 32, > 32, 32, 61, 126, 126, 126, 126, 118, 32, 32, 32, 32, 32, 59, 126, 126, > 126, 34, 92, 10, 34, 126, 115, 32, 32, 32, 32, 32, 51, 126, 126, 126, > 126, 108, 32, 32, 32, 32, 32, 49, 126, 126, 126, 126, 91, 77, 92, 92, > 32, 32, 32, 32, 32, 48, 126, 126, 107, 75, 88, 58, 118, 71, 90, 32, > 32, 32, 32, 32, 46, 126, 126, 104, 72, 84, 52, 111, 68, 90, 32, 32, > 32, 32, 32, 44, 84, 75, 96, 76, 126, 120, 71, 82, 92, 52, 55, 95, > 63, 89, 32, 32, 32, 32, 32, 33, 93, 73, 126, 118, 71, 81, 32, 53, > 89, 32, 32, 32, 32, 32, 32, 90, 71, 126, 118, 70, 80, 32, 52, 89, > 32, 32, 32, 32, 32, 32, 78, 87, 70, 126, 118, 70, 80, 32, 52, 89, > 32, 32, 32, 32, 32, 32, 61, 126, 119, 71, 81, 32, 53, 89, 32, 32, > 32, 32, 32, 32, 61, 126, 119, 71, 81, 32, 53, 89, 32, 32, 32, 32, > 32, 32, 61, 126, 119, 71, 81, 32, 52, 88, 32, 32, 32, 32, 32, 32, > 62, 126, 120, 70, 80, 32, 52, 88, 32, 32, 32, 32, 32, 32, 63, 126, > 122, 71, 81, 32, 53, 88, 32, 32, 32, 32, 32, 32, 64, 126, 123, 71, > 34, 92, 10, 34, 81, 32, 53, 89, 32, 32, 32, 32, 32, 32, 68, 126, > 126, 71, 81, 32, 52, 88, 32, 32, 32, 32, 32, 32, 70, 126, 126, 81, > 71, 82, 32, 53, 88, 32, 32, 32, 32, 32, 32, 71, 126, 126, 82, 70, > 81, 32, 53, 88, 32, 32, 32, 32, 32, 32, 72, 126, 126, 83, 70, 81, > 32, 52, 88, 32, 32, 32, 32, 32, 32, 74, 126, 126, 84, 70, 82, 32, > 53, 88, 32, 32, 32, 32, 32, 32, 75, 126, 126, 85, 69, 81, 32, 52, > 87, 32, 32, 32, 32, 32, 32, 76, 126, 126, 86, 69, 81, 32, 52, 88, > 32, 32, 32, 32, 32, 32, 78, 126, 126, 87, 69, 81, 32, 52, 88, 32, > 32, 32, 32, 32, 32, 126, 126, 88, 69, 82, 32, 52, 87, 32, 32, 32, > 32, 32, 32, 126, 126, 88, 68, 81, 32, 52, 88, 32, 32, 32, 32, 32, > 92, 34, 126, 126, 89, 68, 81, 32, 52, 88, 32, 32, 32, 32, 32, 92, > 35, 126, 126, 90, 68, 81, 32, 51, 87, 32, 32, 32, 32, 32, 36, 126, > 126, 91, 68, 82, 32, 52, 88, 32, 32, 32, 32, 32, 37, 126, 34, 92, > 10, 34, 126, 91, 68, 82, 32, 52, 88, 32, 32, 32, 32, 32, 38, 126, > 126, 92, 92, 67, 81, 32, 52, 88, 32, 32, 32, 32, 32, 38, 126, 126, > 92, 92, 67, 81, 32, 52, 88, 32, 32, 32, 32, 32, 38, 126, 126, 92, > 92, 67, 81, 32, 52, 88, 32, 32, 32, 32, 32, 92, 52, 55, 126, 126, > 93, 67, 82, 32, 53, 88, 32, 32, 32, 32, 32, 92, 52, 55, 126, 126, > 93, 66, 81, 32, 53, 88, 32, 32, 32, 32, 32, 92, 52, 55, 126, 126, > 92, 92, 65, 81, 32, 53, 88, 32, 32, 32, 32, 32, 92, 52, 55, 126, > 126, 92, 92, 65, 81, 32, 53, 88, 32, 32, 32, 32, 32, 40, 126, 126, > 93, 65, 82, 32, 54, 88, 32, 32, 32, 32, 32, 40, 126, 126, 93, 64, > 81, 32, 54, 88, 32, 32, 32, 32, 32, 40, 126, 126, 93, 64, 81, 32, > 55, 89, 32, 32, 32, 32, 32, 41, 126, 126, 93, 63, 81, 32, 55, 88, > 32, 32, 32, 32, 76, 86, 32, 50, 126, 126, 93, 63, 82, 32, 56, 88, > 32, 32, 32, 33, 93, 32, 53, 126, 126, 93, 62, 81, 32, 56, 88, 32, > 32, 32, 92, 35, 97, 32, 55, 126, 34, 92, 10, 34, 126, 93, 62, 81, > 32, 57, 89, 32, 32, 32, 37, 100, 32, 56, 126, 126, 92, 92, 61, 82, > 32, 58, 88, 32, 32, 32, 38, 103, 32, 57, 126, 126, 92, 92, 61, 82, > 32, 58, 88, 32, 32, 32, 41, 107, 32, 58, 126, 126, 92, 92, 60, 81, > 32, 59, 89, 32, 32, 32, 55, 121, 32, 58, 126, 126, 92, 92, 60, 81, > 32, 59, 88, 32, 32, 32, 56, 124, 32, 59, 126, 126, 91, 59, 82, 32, > 60, 88, 32, 32, 32, 57, 125, 32, 59, 126, 126, 91, 59, 82, 32, 61, > 89, 32, 32, 32, 58, 126, 32, 59, 126, 126, 91, 59, 82, 32, 61, 88, > 32, 32, 32, 58, 126, 81, 32, 60, 126, 126, 90, 57, 81, 32, 62, 89, > 32, 32, 32, 59, 126, 82, 32, 60, 126, 126, 90, 57, 82, 32, 63, 88, > 32, 32, 32, 58, 126, 82, 32, 60, 126, 126, 89, 56, 82, 32, 64, 89, > 32, 32, 32, 59, 126, 83, 32, 60, 126, 126, 88, 54, 81, 32, 64, 88, > 32, 32, 32, 58, 126, 83, 32, 60, 126, 126, 88, 54, 81, 32, 65, 89, > 32, 32, 32, 59, 126, 84, 32, 61, 34, 92, 10, 34, 126, 126, 88, 53, > 82, 32, 66, 88, 32, 32, 32, 58, 126, 84, 32, 62, 126, 126, 88, 52, > 82, 32, 67, 88, 32, 32, 32, 57, 126, 85, 32, 66, 126, 126, 90, 50, > 81, 32, 67, 88, 32, 32, 32, 57, 126, 85, 32, 70, 126, 126, 93, 49, > 81, 32, 68, 88, 32, 32, 32, 56, 126, 86, 32, 73, 126, 126, 95, 49, > 81, 32, 69, 88, 32, 32, 32, 55, 126, 88, 32, 76, 126, 126, 94, 47, > 82, 32, 71, 89, 32, 32, 32, 55, 126, 100, 42, 126, 126, 95, 47, 82, > 32, 72, 89, 32, 32, 32, 53, 126, 102, 47, 126, 126, 97, 46, 81, 32, > 72, 88, 32, 32, 32, 52, 126, 104, 50, 126, 126, 97, 45, 81, 32, 73, > 88, 32, 32, 32, 49, 84, 74, 126, 95, 55, 126, 126, 99, 45, 82, 32, > 75, 89, 32, 32, 32, 36, 126, 94, 59, 126, 126, 101, 45, 82, 32, 76, > 89, 32, 32, 32, 92, 34, 126, 94, 61, 126, 126, 102, 44, 81, 32, 77, > 89, 32, 32, 32, 32, 126, 95, 64, 126, 126, 104, 45, 81, 32, 78, 89, > 32, 32, 32, 32, 75, 34, 92, 10, 34, 126, 93, 66, 126, 126, 105, 45, > 82, 33, 89, 32, 32, 32, 32, 72, 126, 91, 67, 126, 126, 107, 46, 82, > 92, 34, 89, 32, 32, 32, 32, 66, 126, 87, 69, 126, 126, 108, 45, 81, > 92, 35, 89, 32, 32, 32, 32, 61, 126, 84, 71, 126, 126, 109, 45, 82, > 37, 89, 32, 32, 32, 32, 59, 126, 84, 72, 126, 126, 110, 46, 82, 92, > 52, 55, 90, 32, 32, 32, 32, 57, 126, 84, 74, 126, 126, 112, 47, 82, > 40, 90, 32, 32, 32, 32, 55, 126, 84, 76, 126, 126, 113, 46, 81, 41, > 90, 32, 32, 32, 32, 53, 126, 126, 126, 120, 46, 82, 44, 91, 32, 32, > 32, 32, 51, 126, 126, 126, 120, 47, 82, 45, 91, 32, 32, 32, 32, 49, > 126, 126, 126, 119, 47, 82, 46, 90, 32, 32, 32, 32, 47, 126, 126, 126, > 119, 46, 81, 48, 91, 32, 32, 32, 32, 45, 126, 126, 126, 118, 46, 81, > 50, 92, 92, 32, 32, 32, 32, 43, 126, 126, 126, 118, 47, 82, 52, 91, > 32, 32, 32, 32, 40, 126, 126, 126, 117, 47, 82, 54, 91, 32, 32, 32, > 32, 38, 126, 126, 126, 117, 34, 92, 10, 34, 46, 81, 56, 92, 92, 32, > 32, 32, 32, 36, 126, 126, 126, 116, 46, 81, 57, 92, 92, 32, 32, 32, > 32, 92, 34, 126, 126, 126, 115, 46, 81, 59, 92, 92, 32, 32, 32, 32, > 32, 78, 126, 126, 126, 115, 47, 82, 62, 93, 32, 32, 32, 32, 32, 76, > 126, 126, 126, 114, 46, 81, 64, 93, 32, 32, 32, 32, 32, 73, 126, 126, > 126, 113, 46, 81, 66, 94, 32, 32, 32, 32, 32, 71, 126, 126, 126, 112, > 46, 81, 67, 93, 32, 32, 32, 32, 32, 68, 126, 126, 126, 112, 46, 81, > 70, 92, 92, 32, 32, 32, 32, 32, 64, 126, 126, 126, 111, 46, 81, 72, > 92, 92, 32, 32, 32, 32, 32, 61, 126, 126, 126, 110, 46, 82, 75, 92, > 92, 32, 32, 32, 32, 32, 58, 126, 126, 126, 109, 46, 98, 32, 32, 32, > 32, 32, 56, 126, 126, 126, 108, 46, 96, 32, 32, 32, 32, 32, 53, 126, > 126, 126, 107, 46, 93, 32, 32, 32, 32, 32, 49, 126, 126, 126, 106, 46, > 89, 32, 32, 32, 32, 32, 43, 126, 126, 126, 104, 46, 87, 32, 32, 32, > 32, 32, 40, 126, 126, 126, 103, 46, 85, 34, 92, 10, 34, 32, 32, 32, > 32, 32, 38, 126, 126, 126, 103, 46, 84, 32, 32, 32, 32, 32, 92, 35, > 126, 126, 126, 101, 46, 83, 32, 32, 32, 32, 32, 33, 126, 126, 86, 74, > 126, 88, 46, 83, 32, 32, 32, 32, 32, 32, 78, 126, 126, 82, 70, 126, > 86, 46, 82, 32, 32, 32, 32, 32, 32, 76, 126, 126, 80, 68, 126, 85, > 46, 82, 32, 32, 32, 32, 32, 32, 74, 126, 123, 65, 126, 85, 47, 81, > 32, 32, 32, 32, 32, 32, 71, 126, 119, 62, 126, 84, 32, 32, 32, 32, > 32, 32, 92, 35, 126, 115, 59, 126, 83, 32, 32, 32, 32, 32, 32, 33, > 126, 109, 54, 126, 82, 32, 32, 32, 32, 32, 32, 32, 78, 126, 105, 51, > 126, 81, 32, 32, 32, 32, 32, 32, 32, 74, 126, 97, 46, 126, 80, 32, > 32, 32, 32, 32, 32, 32, 71, 126, 90, 41, 126, 32, 32, 32, 32, 32, > 32, 32, 69, 126, 32, 77, 125, 32, 32, 32, 32, 32, 32, 32, 68, 115, > 32, 67, 124, 32, 32, 32, 32, 32, 32, 32, 67, 102, 32, 54, 123, 32, > 32, 32, 32, 32, 32, 32, 65, 34, 92, 10, 34, 97, 32, 50, 122, 32, > 32, 32, 32, 32, 32, 32, 64, 93, 32, 46, 122, 32, 32, 32, 32, 32, > 32, 32, 63, 89, 32, 43, 121, 32, 32, 32, 32, 32, 32, 32, 60, 83, > 32, 40, 121, 32, 32, 32, 32, 32, 32, 32, 32, 32, 67, 124, 32, 49, > 82, 32, 32, 32, 32, 32, 32, 32, 58, 126, 82, 32, 66, 86, 72, 88, > 32, 32, 32, 32, 32, 32, 32, 63, 126, 84, 32, 67, 89, 75, 90, 32, > 32, 32, 32, 32, 32, 32, 65, 126, 85, 32, 68, 91, 78, 93, 32, 32, > 32, 32, 32, 32, 32, 67, 126, 86, 32, 69, 108, 32, 32, 32, 32, 32, > 32, 32, 69, 126, 87, 32, 69, 108, 32, 32, 32, 32, 32, 32, 32, 71, > 126, 88, 32, 68, 108, 32, 32, 32, 32, 32, 32, 32, 72, 126, 89, 32, > 69, 110, 32, 32, 32, 32, 32, 32, 32, 74, 126, 90, 32, 69, 110, 32, > 32, 32, 32, 32, 32, 32, 74, 126, 89, 32, 68, 110, 32, 32, 32, 32, > 32, 32, 32, 76, 126, 91, 32, 68, 110, 32, 32, 32, 32, 32, 32, 32, > 76, 126, 90, 34, 92, 10, 34, 32, 67, 109, 32, 32, 32, 32, 32, 32, > 32, 76, 126, 90, 32, 65, 108, 32, 32, 32, 32, 32, 32, 32, 77, 126, > 90, 32, 64, 108, 32, 32, 32, 32, 32, 32, 32, 77, 126, 90, 32, 64, > 108, 32, 32, 32, 32, 32, 32, 32, 78, 126, 90, 32, 63, 107, 32, 32, > 32, 32, 32, 32, 32, 77, 126, 89, 32, 61, 106, 32, 32, 32, 32, 32, > 32, 32, 78, 126, 89, 32, 60, 105, 32, 32, 32, 32, 32, 32, 32, 77, > 126, 88, 32, 58, 104, 32, 32, 32, 32, 32, 32, 32, 78, 126, 87, 32, > 56, 103, 32, 32, 32, 32, 32, 32, 32, 77, 126, 86, 32, 54, 101, 32, > 32, 32, 32, 32, 32, 32, 77, 126, 86, 32, 52, 99, 32, 32, 32, 32, > 32, 32, 32, 77, 126, 85, 32, 49, 97, 32, 32, 32, 32, 32, 32, 32, > 76, 126, 84, 32, 48, 97, 32, 32, 32, 32, 32, 32, 32, 77, 126, 84, > 32, 46, 95, 32, 32, 32, 32, 32, 32, 32, 77, 126, 84, 32, 44, 93, > 32, 32, 32, 32, 32, 32, 32, 77, 126, 83, 32, 41, 91, 32, 32, 34, > 92, 10, 34, 32, 32, 32, 32, 32, 78, 126, 83, 32, 37, 87, 32, 32, > 32, 32, 32, 32, 32, 76, 126, 81, 32, 92, 34, 85, 32, 32, 32, 32, > 32, 32, 32, 78, 126, 83, 32, 32, 83, 32, 32, 32, 32, 32, 32, 32, > 126, 83, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 126, 84, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 75, 126, 84, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 76, 126, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 75, > 126, 83, 32, 32, 32, 32, 32, 32, 32, 32, 32, 74, 126, 83, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 74, 126, 81, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 71, 126, 80, 32, 32, 32, 32, 32, 32, 32, 32, 32, 71, > 126, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 124, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 67, 122, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 65, 120, 32, 32, 32, 32, 32, 32, 32, 32, 32, 63, 118, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 61, 116, 32, 32, 32, 32, 34, 92, 10, 34, > 32, 32, 32, 32, 32, 59, 114, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 57, 112, 32, 32, 32, 32, 32, 32, 32, 32, 32, 55, 112, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 54, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 53, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 52, 110, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 53, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, 32, 51, 108, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 50, 107, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 49, 106, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 105, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 103, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 45, 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, > 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, 44, 101, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 44, 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 44, 102, 32, 32, 32, 32, 32, 32, 34, 92, 10, 34, 32, 32, 32, 45, > 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, 44, 101, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 44, 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 45, 103, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 103, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 104, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 103, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 104, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 45, 102, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 45, 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, 43, 99, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 92, 52, 55, 96, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 92, 35, 89, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 34, 92, 10, 34, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 50, 34, 39, 125, 41, 10, 45, 45, 91, > 45, 49, 93, 32, 123, 52, 55, 43, 51, 50, 125, 32, 45, 97, 32, 120, > 32, 45, 121, 32, 45, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, > 114, 108, 101, 32, 45, 114, 32, 36, 49, 44, 36, 49, 44, 49, 44, 49, > 44, 53, 32, 45, 105, 102, 32, 123, 36, 49, 62, 52, 56, 48, 125, 32, > 45, 98, 91, 45, 49, 93, 32, 48, 46, 50, 37, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 103, 101, 32, 52, 48, 37, 10, 45, 110, 109, 32, 34, > 91, 67, 117, 112, 105, 100, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, > 115, 107, 93, 34, 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 99, 117, 114, 115, 111, 114, 32, 58, 32, > 95, 109, 111, 100, 101, 32, 61, 32, 123, 32, 48, 61, 104, 105, 100, 101, > 32, 124, 32, 49, 61, 115, 104, 111, 119, 32, 125, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, 111, 119, 32, > 111, 114, 32, 104, 105, 100, 101, 32, 109, 111, 117, 115, 101, 32, 99, 117, > 114, 115, 111, 114, 32, 102, 111, 114, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 109, > 97, 110, 100, 32, 115, 117, 98, 115, 101, 116, 32, 40, 105, 102, 32, 97, > 110, 121, 41, 32, 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 105, > 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, 32, 105, 110, > 100, 105, 99, 101, 115, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 32, 105, 110, 100, 105, 99, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 109, 111, 100, 101, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 100, 32, 58, 32, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, 121, 39, 46, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, > 112, 108, 97, 121, 32, 58, 32, 95, 88, 44, 95, 89, 44, 95, 90, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 105, 115, 112, 108, 97, 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 97, 110, 32, 105, 110, 116, > 101, 114, 97, 99, 116, 105, 118, 101, 32, 118, 105, 101, 119, 101, 114, 32, > 40, 117, 115, 101, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, > 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, > 112, 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 114, 103, 117, 109, 101, 110, 116, 115, 32, 39, 88, 39, 44, 39, > 89, 39, 44, 39, 90, 39, 32, 100, 101, 116, 101, 114, 109, 105, 110, 101, > 32, 116, 104, 101, 32, 105, 110, 105, 116, 105, 97, 108, 32, 115, 101, 108, > 101, 99, 116, 105, 111, 110, 32, 118, 105, 101, 119, 44, 32, 102, 111, 114, > 32, 51, 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 39, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 48, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, 121, 48, 39, 46, 10, 100, > 48, 32, 58, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, 121, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 111, 117, 116, 32, 118, 97, 108, 117, 101, 32, 110, 111, > 114, 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 100, 48, 39, 41, 46, 10, 100, 105, 115, 112, 108, 97, 121, 48, 32, 58, > 10, 45, 95, 36, 48, 10, 95, 100, 105, 115, 112, 108, 97, 121, 48, 32, > 58, 10, 45, 118, 32, 45, 10, 119, 61, 48, 32, 104, 61, 48, 32, 100, > 61, 48, 32, 115, 61, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 119, 61, 123, 36, 119, 43, 119, > 125, 32, 104, 61, 123, 109, 97, 120, 40, 36, 104, 44, 104, 41, 125, 32, > 100, 61, 123, 109, 97, 120, 40, 36, 100, 44, 100, 41, 125, 32, 115, 61, > 123, 109, 97, 120, 40, 36, 115, 44, 115, 41, 125, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 64, 35, 61, > 61, 49, 125, 32, 45, 119, 32, 45, 49, 44, 45, 49, 44, 48, 44, 48, > 44, 45, 49, 44, 45, 49, 44, 64, 123, 48, 44, 110, 125, 92, 32, 40, > 36, 119, 120, 36, 104, 120, 36, 100, 120, 36, 115, 41, 10, 45, 101, 108, > 105, 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 45, 119, 32, 45, 49, > 44, 45, 49, 44, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 64, 123, > 48, 44, 110, 125, 44, 64, 123, 45, 49, 44, 110, 125, 92, 32, 40, 36, > 119, 120, 36, 104, 120, 36, 100, 120, 36, 115, 41, 10, 45, 101, 108, 115, > 101, 32, 45, 119, 32, 45, 49, 44, 45, 49, 44, 48, 44, 48, 44, 45, > 49, 44, 45, 49, 44, 64, 123, 48, 44, 110, 125, 44, 46, 46, 44, 64, > 123, 45, 49, 44, 110, 125, 92, 32, 40, 36, 119, 120, 36, 104, 120, 36, > 100, 120, 36, 115, 41, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 43, 32, 45, 100, 10, 45, 118, 32, 45, 32, 45, 119, 91, 93, 32, 48, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 51, 100, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, > 108, 97, 121, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, 51, 100, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, > 115, 112, 108, 97, 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 105, 110, 32, 97, 110, 32, > 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 118, 105, 101, 119, > 101, 114, 32, 40, 117, 115, 101, 32, 116, 104, 101, 32, 105, 110, 115, 116, > 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, > 102, 32, 111, 112, 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 51, > 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 100, 97, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 97, 114, 114, 97, 121, 39, 46, 10, 100, 97, 32, 58, 10, 45, > 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, > 43, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, 97, 114, 114, 97, > 121, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, > 108, 97, 121, 95, 97, 114, 114, 97, 121, 32, 58, 32, 95, 119, 105, 100, > 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, 121, 32, > 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 105, 110, 116, 101, 114, 97, > 99, 116, 105, 118, 101, 32, 119, 105, 110, 100, 111, 119, 115, 32, 119, 104, > 101, 114, 101, 32, 112, 105, 120, 101, 108, 32, 110, 101, 105, 103, 104, 98, > 111, 114, 104, 111, 111, 100, 115, 32, 99, 97, 110, 32, 98, 101, 32, 101, > 120, 112, 108, 111, 114, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 119, 105, 100, 116, 104, 61, 49, 51, 39, 32, 97, 110, 100, > 32, 39, 104, 101, 105, 103, 104, 116, 61, 119, 105, 100, 116, 104, 39, 46, > 10, 100, 105, 115, 112, 108, 97, 121, 95, 97, 114, 114, 97, 121, 32, 58, > 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, > 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, 100, 105, 115, > 112, 108, 97, 121, 95, 97, 114, 114, 97, 121, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 36, 123, 49, 61, 49, 51, 125, 62, 48, 34, 32, 38, > 38, 32, 34, 36, 123, 50, 61, 36, 49, 125, 62, 48, 10, 45, 101, 91, > 48, 45, 45, 51, 93, 32, 34, 68, 105, 115, 112, 108, 97, 121, 32, 36, > 49, 120, 36, 50, 32, 97, 114, 114, 97, 121, 32, 111, 102, 32, 112, 105, > 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 102, 111, 114, 32, 105, > 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 46, 34, 10, 45, 118, 32, > 45, 10, 100, 120, 98, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 47, > 50, 44, 49, 44, 49, 41, 125, 32, 100, 120, 102, 61, 123, 36, 49, 45, > 49, 45, 36, 100, 120, 98, 125, 10, 100, 121, 98, 61, 123, 114, 111, 117, > 110, 100, 40, 36, 50, 47, 50, 44, 49, 44, 49, 41, 125, 32, 100, 121, > 102, 61, 123, 36, 50, 45, 49, 45, 36, 100, 121, 98, 125, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 105, 102, 32, 123, 119, 60, 49, 50, 56, 34, 32, 38, 38, 32, 34, > 104, 60, 49, 50, 56, 125, 32, 45, 114, 32, 49, 50, 56, 44, 49, 50, > 56, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 32, 45, 101, 110, 100, 105, 102, 10, 120, > 48, 61, 48, 32, 121, 48, 61, 48, 32, 119, 61, 123, 119, 125, 32, 104, > 61, 123, 104, 125, 10, 119, 109, 97, 120, 61, 123, 48, 46, 57, 42, 64, > 123, 33, 44, 117, 125, 125, 32, 104, 109, 97, 120, 61, 123, 48, 46, 57, > 42, 64, 123, 33, 44, 118, 125, 125, 10, 45, 100, 111, 10, 45, 105, 102, > 32, 123, 119, 62, 61, 36, 119, 109, 97, 120, 124, 124, 104, 62, 61, 36, > 104, 109, 97, 120, 125, 10, 110, 61, 64, 123, 45, 49, 44, 110, 125, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 34, 73, 109, 97, 103, 101, 32, 34, > 39, 64, 123, 45, 49, 44, 98, 125, 46, 64, 123, 45, 49, 44, 120, 125, > 39, 34, 32, 105, 115, 32, 116, 111, 111, 32, 108, 97, 114, 103, 101, 44, > 32, 112, 108, 101, 97, 115, 101, 32, 115, 101, 108, 101, 99, 116, 32, 97, > 32, 115, 117, 98, 45, 105, 109, 97, 103, 101, 46, 34, 10, 45, 45, 115, > 101, 108, 101, 99, 116, 91, 45, 49, 93, 32, 50, 32, 120, 48, 61, 123, > 105, 91, 48, 93, 125, 32, 121, 48, 61, 123, 105, 91, 49, 93, 125, 32, > 119, 61, 123, 49, 43, 105, 91, 51, 93, 45, 105, 91, 48, 93, 125, 32, > 104, 61, 123, 49, 43, 105, 91, 52, 93, 45, 105, 91, 49, 93, 125, 10, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, > 36, 110, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 122, 91, 45, 49, > 93, 32, 36, 120, 48, 44, 36, 121, 48, 44, 48, 44, 123, 36, 120, 48, > 43, 36, 119, 45, 49, 125, 44, 123, 36, 121, 48, 43, 36, 104, 45, 49, > 125, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 119, > 104, 105, 108, 101, 32, 123, 119, 62, 61, 36, 119, 109, 97, 120, 124, 124, > 104, 62, 61, 36, 104, 109, 97, 120, 125, 10, 120, 49, 61, 45, 49, 32, > 121, 49, 61, 45, 49, 32, 99, 49, 61, 48, 32, 111, 120, 49, 61, 45, > 49, 32, 111, 121, 49, 61, 45, 49, 32, 111, 99, 49, 61, 45, 49, 10, > 120, 50, 61, 45, 49, 32, 121, 50, 61, 45, 49, 32, 99, 50, 61, 48, > 32, 111, 120, 50, 61, 45, 49, 32, 111, 121, 50, 61, 45, 49, 32, 111, > 99, 50, 61, 45, 49, 10, 120, 51, 61, 45, 49, 32, 121, 51, 61, 45, > 49, 32, 99, 51, 61, 48, 32, 111, 120, 51, 61, 45, 49, 32, 111, 121, > 51, 61, 45, 49, 32, 111, 99, 51, 61, 45, 49, 10, 99, 48, 61, 48, > 32, 111, 120, 109, 61, 45, 49, 32, 111, 121, 109, 61, 45, 49, 10, 45, > 119, 91, 45, 49, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, 48, 44, > 45, 49, 44, 45, 49, 44, 64, 123, 45, 50, 44, 98, 125, 46, 64, 123, > 45, 50, 44, 120, 125, 10, 45, 100, 111, 10, 45, 119, 97, 105, 116, 91, > 48, 45, 51, 93, 10, 111, 99, 48, 61, 36, 99, 48, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 52, 10, 45, 105, 102, 32, 123, 36, 62, 34, 32, > 38, 38, 32, 34, 33, 64, 123, 33, 36, 62, 125, 34, 32, 38, 38, 32, > 34, 36, 123, 120, 36, 62, 125, 62, 61, 48, 125, 32, 45, 119, 36, 62, > 32, 48, 32, 120, 36, 62, 61, 45, 49, 32, 121, 36, 62, 61, 45, 49, > 32, 99, 36, 62, 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 64, 123, 33, 36, 62, 44, 111, 125, 32, 99, 36, 62, 61, 123, > 40, 36, 123, 99, 36, 62, 125, 43, 115, 105, 103, 110, 40, 64, 123, 33, > 36, 62, 44, 111, 125, 41, 41, 37, 115, 125, 32, 45, 119, 97, 105, 116, > 91, 36, 62, 93, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 36, 62, 44, 83, 80, 65, 67, 69, 125, > 34, 32, 124, 124, 32, 34, 64, 123, 33, 36, 62, 44, 69, 78, 84, 69, > 82, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 36, 62, 44, 65, 82, > 82, 79, 87, 82, 73, 71, 72, 84, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 36, 62, 44, 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, 125, > 32, 99, 36, 62, 61, 123, 40, 36, 123, 99, 36, 62, 125, 43, 49, 41, > 37, 115, 125, 32, 45, 119, 97, 105, 116, 91, 36, 62, 93, 32, 45, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, > 36, 62, 44, 66, 65, 67, 75, 83, 80, 65, 67, 69, 125, 34, 32, 124, > 124, 32, 34, 64, 123, 33, 36, 62, 44, 65, 82, 82, 79, 87, 76, 69, > 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 36, 62, 44, 65, > 82, 82, 79, 87, 85, 80, 125, 125, 32, 99, 36, 62, 61, 123, 40, 36, > 123, 99, 36, 62, 125, 45, 49, 41, 37, 115, 125, 32, 45, 119, 97, 105, > 116, 91, 36, 62, 93, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 111, 99, 48, 33, > 61, 36, 99, 48, 125, 32, 99, 49, 61, 36, 99, 48, 32, 99, 50, 61, > 36, 99, 48, 32, 99, 51, 61, 36, 99, 48, 32, 45, 101, 110, 100, 105, > 102, 10, 120, 109, 61, 64, 123, 33, 44, 120, 125, 32, 121, 109, 61, 64, > 123, 33, 44, 121, 125, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 98, 125, 38, 49, 125, > 32, 120, 49, 61, 36, 120, 109, 32, 121, 49, 61, 36, 121, 109, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 98, 125, 38, 50, 125, > 32, 120, 50, 61, 36, 120, 109, 32, 121, 50, 61, 36, 121, 109, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 98, 125, 38, 52, 125, > 32, 120, 51, 61, 36, 120, 109, 32, 121, 51, 61, 36, 121, 109, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 40, 36, 111, 120, 109, 33, 61, 36, 120, > 109, 34, 32, 124, 124, 32, 34, 36, 111, 121, 109, 33, 61, 36, 121, 109, > 41, 125, 32, 45, 119, 91, 93, 32, 45, 49, 44, 45, 49, 44, 45, 49, > 44, 45, 49, 44, 45, 49, 44, 45, 49, 44, 64, 123, 45, 50, 44, 98, > 125, 46, 64, 123, 45, 50, 44, 120, 125, 34, 32, 45, 32, 40, 34, 36, > 120, 109, 44, 36, 121, 109, 34, 41, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 120, 49, 33, 61, 36, 111, 120, 49, 34, > 32, 124, 124, 32, 34, 36, 121, 49, 33, 61, 36, 111, 121, 49, 34, 32, > 124, 124, 32, 34, 36, 120, 50, 33, 61, 36, 111, 120, 50, 34, 32, 124, > 124, 32, 34, 36, 121, 50, 33, 61, 36, 111, 121, 50, 34, 32, 124, 124, > 32, 34, 36, 120, 51, 33, 61, 36, 111, 120, 51, 34, 32, 124, 124, 32, > 34, 36, 121, 51, 33, 61, 36, 111, 121, 51, 125, 10, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 123, 36, 120, 49, 62, 61, 48, 125, 10, 120, 98, > 61, 123, 36, 120, 49, 45, 36, 100, 120, 98, 125, 32, 121, 98, 61, 123, > 36, 121, 49, 45, 36, 100, 121, 98, 125, 32, 120, 101, 61, 123, 36, 120, > 49, 43, 36, 100, 120, 102, 125, 32, 121, 101, 61, 123, 36, 121, 49, 43, > 36, 100, 121, 102, 125, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, > 44, 36, 121, 101, 44, 48, 46, 50, 44, 48, 44, 50, 53, 53, 44, 50, > 53, 53, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, > 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, 44, 36, 121, > 101, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, > 44, 50, 53, 53, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 120, 50, 62, 61, 48, 125, 10, 120, 98, 61, > 123, 36, 120, 50, 45, 36, 100, 120, 98, 125, 32, 121, 98, 61, 123, 36, > 121, 50, 45, 36, 100, 121, 98, 125, 32, 120, 101, 61, 123, 36, 120, 50, > 43, 36, 100, 120, 102, 125, 32, 121, 101, 61, 123, 36, 121, 50, 43, 36, > 100, 121, 102, 125, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, > 45, 49, 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, 44, > 36, 121, 101, 44, 48, 46, 50, 44, 50, 53, 53, 44, 51, 50, 44, 50, > 53, 53, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, > 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, 44, 36, 121, > 101, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 50, > 53, 53, 44, 51, 50, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 120, 51, 62, 61, 48, 125, 10, 120, 98, > 61, 123, 36, 120, 51, 45, 36, 100, 120, 98, 125, 32, 121, 98, 61, 123, > 36, 121, 51, 45, 36, 100, 121, 98, 125, 32, 120, 101, 61, 123, 36, 120, > 51, 43, 36, 100, 120, 102, 125, 32, 121, 101, 61, 123, 36, 121, 51, 43, > 36, 100, 121, 102, 125, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, > 44, 36, 121, 101, 44, 48, 46, 50, 44, 50, 53, 53, 44, 50, 53, 53, > 44, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, > 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, 44, 36, 121, > 101, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 119, 125, 44, 64, > 123, 45, 50, 44, 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 111, > 120, 109, 61, 36, 120, 109, 32, 111, 121, 109, 61, 36, 121, 109, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 49, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 40, 36, 111, 120, 49, 33, 61, 36, 120, > 49, 34, 32, 124, 124, 32, 34, 36, 111, 121, 49, 33, 61, 36, 121, 49, > 34, 32, 124, 124, 32, 34, 36, 111, 99, 49, 33, 61, 36, 99, 49, 41, > 125, 10, 45, 45, 122, 91, 45, 50, 93, 32, 123, 36, 120, 49, 45, 36, > 100, 120, 98, 125, 44, 123, 36, 121, 49, 45, 36, 100, 121, 98, 125, 44, > 48, 44, 36, 99, 49, 44, 123, 36, 120, 49, 43, 36, 100, 120, 102, 125, > 44, 123, 36, 121, 49, 43, 36, 100, 121, 102, 125, 44, 48, 44, 36, 99, > 49, 10, 45, 45, 122, 91, 45, 50, 93, 32, 123, 36, 120, 49, 45, 36, > 100, 120, 98, 125, 44, 123, 36, 121, 49, 45, 36, 100, 121, 98, 125, 44, > 48, 44, 123, 36, 120, 49, 43, 36, 100, 120, 102, 125, 44, 123, 36, 121, > 49, 43, 36, 100, 121, 102, 125, 44, 48, 10, 45, 95, 95, 100, 105, 115, > 112, 108, 97, 121, 95, 97, 114, 114, 97, 121, 91, 45, 50, 44, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 48, 44, 50, 53, 53, 44, 50, 53, > 53, 10, 45, 119, 49, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, 104, > 125, 44, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 64, 123, 45, 51, > 44, 98, 125, 34, 32, 45, 32, 40, 34, 36, 120, 49, 44, 36, 121, 49, > 44, 99, 61, 36, 99, 49, 34, 41, 34, 10, 45, 114, 109, 91, 45, 49, > 93, 32, 111, 120, 49, 61, 36, 120, 49, 32, 111, 121, 49, 61, 36, 121, > 49, 32, 111, 99, 49, 61, 36, 99, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 120, 50, 62, 61, 48, 34, 32, 38, 38, > 32, 34, 40, 36, 111, 120, 50, 33, 61, 36, 120, 50, 34, 32, 124, 124, > 32, 34, 36, 111, 121, 50, 33, 61, 36, 121, 50, 34, 32, 124, 124, 32, > 34, 36, 111, 99, 50, 33, 61, 36, 99, 50, 41, 125, 10, 45, 45, 122, > 91, 45, 50, 93, 32, 123, 36, 120, 50, 45, 36, 100, 120, 98, 125, 44, > 123, 36, 121, 50, 45, 36, 100, 121, 98, 125, 44, 48, 44, 36, 99, 50, > 44, 123, 36, 120, 50, 43, 36, 100, 120, 102, 125, 44, 123, 36, 121, 50, > 43, 36, 100, 121, 102, 125, 44, 48, 44, 36, 99, 50, 10, 45, 45, 122, > 91, 45, 50, 93, 32, 123, 36, 120, 50, 45, 36, 100, 120, 98, 125, 44, > 123, 36, 121, 50, 45, 36, 100, 121, 98, 125, 44, 48, 44, 123, 36, 120, > 50, 43, 36, 100, 120, 102, 125, 44, 123, 36, 121, 50, 43, 36, 100, 121, > 102, 125, 44, 48, 10, 45, 95, 95, 100, 105, 115, 112, 108, 97, 121, 95, > 97, 114, 114, 97, 121, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 50, 53, 53, 44, 51, 50, 44, 50, 53, 53, 10, 45, 119, > 50, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, > 48, 44, 45, 49, 44, 45, 49, 44, 64, 123, 45, 51, 44, 98, 125, 34, > 32, 45, 32, 40, 34, 36, 120, 50, 44, 36, 121, 50, 44, 99, 61, 36, > 99, 50, 34, 41, 34, 10, 45, 114, 109, 91, 45, 49, 93, 32, 111, 120, > 50, 61, 36, 120, 50, 32, 111, 121, 50, 61, 36, 121, 50, 32, 111, 99, > 50, 61, 36, 99, 50, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 36, 120, 51, 62, 61, 48, 34, 32, 38, 38, 32, 34, 40, 36, > 111, 120, 51, 33, 61, 36, 120, 51, 34, 32, 124, 124, 32, 34, 36, 111, > 121, 51, 33, 61, 36, 121, 51, 34, 32, 124, 124, 32, 34, 36, 111, 99, > 51, 33, 61, 36, 99, 51, 41, 125, 10, 45, 45, 122, 91, 45, 50, 93, > 32, 123, 36, 120, 51, 45, 36, 100, 120, 98, 125, 44, 123, 36, 121, 51, > 45, 36, 100, 121, 98, 125, 44, 48, 44, 36, 99, 51, 44, 123, 36, 120, > 51, 43, 36, 100, 120, 102, 125, 44, 123, 36, 121, 51, 43, 36, 100, 121, > 102, 125, 44, 48, 44, 36, 99, 51, 10, 45, 45, 122, 91, 45, 50, 93, > 32, 123, 36, 120, 51, 45, 36, 100, 120, 98, 125, 44, 123, 36, 121, 51, > 45, 36, 100, 121, 98, 125, 44, 48, 44, 123, 36, 120, 51, 43, 36, 100, > 120, 102, 125, 44, 123, 36, 121, 51, 43, 36, 100, 121, 102, 125, 44, 48, > 10, 45, 95, 95, 100, 105, 115, 112, 108, 97, 121, 95, 97, 114, 114, 97, > 121, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 48, 10, 45, 119, 51, 91, 45, 49, 93, > 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, 48, 44, 45, 49, 44, > 45, 49, 44, 64, 123, 45, 51, 44, 98, 125, 34, 32, 45, 32, 40, 34, > 36, 120, 51, 44, 36, 121, 51, 44, 99, 61, 36, 99, 51, 34, 41, 34, > 10, 45, 114, 109, 91, 45, 49, 93, 32, 111, 120, 51, 61, 36, 120, 51, > 32, 111, 121, 51, 61, 36, 121, 51, 32, 111, 99, 51, 61, 36, 99, 51, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, > 64, 33, 34, 32, 38, 38, 32, 34, 92, 10, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, > 34, 32, 38, 38, 32, 34, 92, 10, 33, 64, 123, 33, 49, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 49, 44, 81, 125, > 34, 32, 38, 38, 32, 34, 92, 10, 33, 64, 123, 33, 50, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 50, 44, 81, 125, > 34, 32, 38, 38, 32, 34, 92, 10, 33, 64, 123, 33, 51, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 51, 44, 81, 125, > 125, 10, 45, 107, 91, 48, 93, 32, 45, 119, 32, 48, 32, 45, 119, 49, > 32, 48, 32, 45, 119, 50, 32, 48, 32, 45, 119, 51, 32, 48, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 95, 95, 100, 105, 115, 112, 108, 97, 121, 95, 97, 114, 114, 97, 121, 32, > 58, 10, 45, 114, 111, 117, 110, 100, 91, 45, 50, 93, 32, 49, 32, 45, > 99, 91, 45, 50, 93, 32, 48, 44, 57, 57, 57, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, > 44, 123, 105, 102, 40, 115, 61, 61, 49, 44, 49, 44, 48, 41, 125, 10, > 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 45, 49, 93, 32, > 45, 114, 91, 45, 50, 93, 32, 123, 36, 49, 42, 50, 52, 125, 44, 123, > 36, 50, 42, 50, 52, 125, 32, 45, 103, 114, 105, 100, 91, 45, 50, 93, > 32, 123, 49, 48, 48, 47, 36, 49, 125, 37, 44, 123, 49, 48, 48, 47, > 36, 50, 125, 37, 44, 48, 44, 48, 44, 49, 44, 48, 10, 120, 98, 61, > 123, 50, 52, 42, 105, 110, 116, 40, 36, 49, 47, 50, 41, 125, 32, 121, > 98, 61, 123, 50, 52, 42, 105, 110, 116, 40, 36, 50, 47, 50, 41, 125, > 32, 120, 101, 61, 123, 36, 120, 98, 43, 50, 52, 125, 32, 121, 101, 61, > 123, 36, 121, 98, 43, 50, 52, 125, 10, 45, 114, 101, 99, 116, 97, 110, > 103, 108, 101, 91, 45, 50, 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, > 36, 120, 101, 44, 36, 121, 101, 44, 49, 44, 48, 120, 70, 70, 70, 70, > 70, 70, 70, 70, 44, 36, 51, 44, 36, 52, 44, 36, 53, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 50, 32, 121, 103, 61, 36, 62, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 120, 103, 61, 36, 62, 10, > 45, 116, 91, 45, 50, 93, 32, 64, 123, 45, 51, 44, 40, 36, 120, 103, > 44, 36, 121, 103, 41, 125, 44, 123, 53, 43, 36, 120, 103, 42, 50, 52, > 125, 44, 123, 53, 43, 36, 121, 103, 42, 50, 52, 125, 44, 49, 51, 44, > 48, 46, 56, 44, 123, 105, 102, 40, 64, 123, 45, 49, 44, 40, 36, 120, > 103, 44, 36, 121, 103, 41, 125, 62, 49, 50, 56, 44, 48, 44, 50, 53, > 53, 41, 125, 10, 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 51, 44, 45, 49, 93, 10, 35, 64, 103, 109, 105, > 99, 32, 100, 102, 102, 116, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 100, 105, 115, 112, 108, 97, 121, 95, 102, 102, 116, 39, 46, 10, > 100, 102, 102, 116, 32, 58, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, > 95, 102, 102, 116, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, > 108, 97, 121, 95, 102, 102, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 105, 115, 112, 108, 97, 121, 32, 102, 111, 117, 114, 105, 101, 114, > 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, > 105, 116, 104, 32, 99, 101, 110, 116, 101, 114, 101, 100, 32, 108, 111, 103, > 45, 109, 111, 100, 117, 108, 101, 32, 97, 110, 100, 32, 97, 114, 103, 117, > 109, 101, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 102, 102, 116, 39, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 102, 102, 116, 10, 100, 105, 115, 112, 108, 97, 121, 95, 102, 102, 116, 32, > 58, 10, 45, 95, 36, 48, 10, 95, 100, 105, 115, 112, 108, 97, 121, 95, > 102, 102, 116, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 82, 101, 110, 100, 101, 114, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, > 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 119, 105, 116, 104, 32, 99, 101, 110, 116, 101, 114, 101, > 100, 32, 108, 111, 103, 45, 109, 111, 100, 117, 108, 101, 32, 97, 110, 100, > 32, 97, 114, 103, 117, 109, 101, 110, 116, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 102, 102, 116, 112, 111, 108, 97, 114, 32, 45, 43, 91, > 45, 50, 93, 32, 49, 32, 45, 108, 111, 103, 91, 45, 50, 93, 32, 45, > 110, 32, 48, 44, 50, 53, 53, 32, 45, 97, 32, 120, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 115, 32, 120, 44, 50, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 103, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 103, 114, 97, 112, 104, 39, 46, 10, 100, 103, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 54, 52, 48, 125, 62, > 51, 50, 32, 38, 38, 32, 36, 123, 50, 61, 52, 56, 48, 125, 62, 51, > 50, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 49, 125, 44, > 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, > 54, 61, 48, 125, 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, > 48, 125, 44, 34, 36, 123, 57, 61, 120, 45, 97, 120, 105, 115, 125, 34, > 44, 34, 36, 123, 49, 48, 61, 121, 45, 97, 120, 105, 115, 125, 34, 10, > 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, > 36, 123, 49, 45, 56, 125, 44, 34, 36, 57, 34, 44, 34, 36, 49, 48, > 34, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, > 95, 103, 114, 97, 112, 104, 32, 58, 32, 95, 119, 105, 100, 116, 104, 62, > 51, 50, 44, 95, 104, 101, 105, 103, 104, 116, 62, 51, 50, 44, 95, 112, > 108, 111, 116, 95, 116, 121, 112, 101, 44, 95, 118, 101, 114, 116, 101, 120, > 95, 116, 121, 112, 101, 44, 95, 120, 109, 105, 110, 44, 95, 120, 109, 97, > 120, 44, 95, 121, 109, 105, 110, 44, 95, 121, 109, 97, 120, 44, 95, 120, > 108, 97, 98, 101, 108, 44, 95, 121, 108, 97, 98, 101, 108, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 103, 114, > 97, 112, 104, 32, 112, 108, 111, 116, 32, 102, 114, 111, 109, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, > 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 119, 105, 100, > 116, 104, 61, 54, 52, 48, 39, 44, 32, 39, 104, 101, 105, 103, 104, 116, > 61, 52, 56, 48, 39, 44, 32, 39, 112, 108, 111, 116, 95, 116, 121, 112, > 101, 61, 49, 39, 44, 32, 39, 118, 101, 114, 116, 101, 120, 95, 116, 121, > 112, 101, 61, 49, 39, 44, 32, 39, 120, 109, 105, 110, 61, 120, 109, 97, > 120, 61, 121, 109, 105, 110, 61, 121, 109, 97, 120, 61, 48, 39, 44, 32, > 39, 120, 108, 97, 98, 101, 108, 61, 34, 120, 45, 97, 120, 105, 115, 34, > 39, 32, 97, 110, 100, 32, 39, 121, 108, 97, 98, 101, 108, 61, 34, 121, > 45, 97, 120, 105, 115, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 49, 50, 56, 44, 49, 44, 49, 44, 49, 44, 39, 99, > 111, 115, 40, 120, 47, 49, 48, 43, 63, 41, 39, 32, 45, 45, 100, 105, > 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, > 51, 48, 48, 44, 51, 10, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, > 97, 112, 104, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 54, 52, 48, 125, 62, 51, 50, 32, 38, 38, 32, 36, 123, 50, > 61, 52, 56, 48, 125, 62, 51, 50, 34, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 51, 61, 49, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, > 53, 61, 48, 125, 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, 55, 61, > 48, 125, 44, 36, 123, 56, 61, 48, 125, 44, 34, 36, 123, 57, 61, 120, > 45, 97, 120, 105, 115, 125, 34, 44, 34, 36, 123, 49, 48, 61, 121, 45, > 97, 120, 105, 115, 125, 34, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, > 95, 103, 114, 97, 112, 104, 32, 36, 123, 49, 45, 56, 125, 44, 34, 36, > 57, 34, 44, 34, 36, 49, 48, 34, 10, 95, 100, 105, 115, 112, 108, 97, > 121, 95, 103, 114, 97, 112, 104, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 123, 49, 61, 54, 52, 48, 125, 62, 51, 50, 32, 38, 38, > 32, 36, 123, 50, 61, 52, 56, 48, 125, 62, 51, 50, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 51, 61, 49, 125, 44, 36, 123, 52, 61, 48, > 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 48, 125, 44, > 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, 48, 125, 44, 34, 36, > 123, 57, 61, 120, 45, 97, 120, 105, 115, 125, 34, 44, 34, 36, 123, 49, > 48, 61, 121, 45, 97, 120, 105, 115, 125, 34, 10, 45, 101, 91, 48, 45, > 45, 51, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 36, 49, 120, 36, > 50, 32, 103, 114, 97, 112, 104, 32, 112, 108, 111, 116, 32, 102, 114, 111, > 109, 32, 100, 97, 116, 97, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, > 48, 44, 110, 125, 10, 111, 110, 101, 61, 123, 36, 51, 33, 61, 51, 125, > 32, 115, 105, 122, 61, 123, 119, 42, 104, 42, 100, 125, 10, 45, 105, 102, > 32, 123, 36, 53, 61, 61, 36, 54, 125, 32, 120, 109, 105, 110, 61, 48, > 32, 120, 109, 97, 120, 61, 123, 36, 115, 105, 122, 45, 36, 111, 110, 101, > 125, 32, 45, 101, 108, 115, 101, 32, 120, 109, 105, 110, 61, 123, 109, 105, > 110, 40, 36, 53, 44, 36, 54, 41, 125, 32, 120, 109, 97, 120, 61, 123, > 109, 97, 120, 40, 36, 53, 44, 36, 54, 41, 125, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 55, 61, 61, 36, 56, 125, 32, > 121, 109, 105, 110, 61, 123, 105, 109, 45, 40, 105, 77, 45, 105, 109, 41, > 47, 50, 48, 125, 32, 121, 109, 97, 120, 61, 123, 105, 77, 43, 40, 105, > 77, 45, 105, 109, 41, 47, 50, 48, 125, 32, 45, 101, 108, 115, 101, 32, > 121, 109, 105, 110, 61, 123, 109, 105, 110, 40, 36, 55, 44, 36, 56, 41, > 125, 32, 121, 109, 97, 120, 61, 123, 109, 97, 120, 40, 36, 55, 44, 36, > 56, 41, 125, 32, 45, 101, 110, 100, 105, 102, 10, 103, 119, 61, 123, 36, > 49, 45, 51, 50, 125, 32, 103, 104, 61, 123, 36, 50, 45, 51, 50, 125, > 32, 103, 103, 61, 123, 40, 36, 103, 119, 45, 36, 111, 110, 101, 41, 47, > 40, 36, 115, 105, 122, 45, 36, 111, 110, 101, 41, 125, 10, 36, 103, 119, > 44, 36, 103, 104, 44, 49, 44, 51, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 123, 36, 115, 105, 122, 60, 51, 50, 125, 32, 45, 103, 114, 105, 100, > 91, 45, 49, 93, 32, 36, 103, 103, 44, 36, 103, 103, 44, 48, 44, 48, > 44, 48, 46, 50, 53, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, > 44, 48, 10, 45, 101, 108, 115, 101, 32, 45, 103, 114, 105, 100, 91, 45, > 49, 93, 32, 49, 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, > 46, 50, 53, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 48, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 45, > 50, 44, 115, 125, 61, 61, 49, 125, 32, 40, 49, 50, 48, 44, 49, 50, > 48, 44, 50, 48, 48, 41, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 45, 50, 44, 115, 125, 60, 61, 51, 125, 32, 40, 50, 50, 48, 44, 49, > 48, 44, 49, 48, 59, 49, 48, 44, 50, 50, 48, 44, 49, 48, 59, 49, > 48, 44, 49, 48, 44, 50, 50, 48, 41, 10, 45, 101, 108, 115, 101, 10, > 40, 48, 44, 50, 53, 53, 41, 32, 45, 114, 91, 45, 49, 93, 32, 50, > 53, 54, 44, 49, 44, 49, 44, 49, 44, 51, 32, 45, 109, 97, 112, 91, > 45, 49, 93, 32, 50, 32, 45, 122, 91, 45, 49, 93, 32, 50, 44, 49, > 48, 48, 37, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, > 32, 99, 120, 121, 122, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, > 109, 97, 120, 40, 51, 44, 64, 123, 45, 51, 44, 115, 125, 41, 125, 44, > 49, 44, 49, 44, 48, 44, 50, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 48, 44, 50, 44, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, 50, > 53, 53, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, > 44, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, > 45, 51, 44, 115, 125, 32, 45, 115, 104, 91, 45, 51, 93, 32, 36, 62, > 44, 36, 62, 32, 45, 103, 114, 97, 112, 104, 91, 45, 51, 93, 32, 91, > 45, 49, 93, 44, 36, 51, 44, 36, 52, 44, 36, 121, 109, 97, 120, 44, > 36, 121, 109, 105, 110, 44, 49, 44, 64, 123, 45, 50, 44, 48, 45, 50, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 105, 102, 116, > 91, 45, 49, 93, 32, 48, 44, 45, 49, 32, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 51, 44, 45, 49, 93, 10, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 48, 44, > 49, 44, 49, 49, 48, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 49, 48, 48, 37, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 49, 48, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, 49, 48, 48, > 37, 44, 49, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 48, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 49, 44, 50, > 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 44, 50, 53, 53, 10, 120, 109, 97, 120, 95, 61, 123, 36, 120, 109, 105, > 110, 43, 40, 36, 120, 109, 97, 120, 45, 36, 120, 109, 105, 110, 41, 42, > 40, 36, 115, 105, 122, 45, 36, 111, 110, 101, 41, 47, 40, 36, 115, 105, > 122, 45, 49, 41, 125, 10, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, > 36, 120, 109, 105, 110, 44, 36, 120, 109, 97, 120, 95, 44, 36, 121, 109, > 97, 120, 44, 36, 121, 109, 105, 110, 44, 49, 51, 44, 49, 44, 48, 10, > 45, 105, 102, 32, 123, 36, 120, 109, 105, 110, 62, 48, 125, 32, 45, 97, > 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 48, 44, 36, 121, 109, 97, > 120, 44, 36, 121, 109, 105, 110, 44, 49, 51, 44, 49, 44, 49, 54, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 109, > 97, 120, 60, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, > 123, 119, 45, 49, 125, 44, 123, 119, 45, 49, 125, 44, 36, 121, 109, 97, > 120, 44, 36, 121, 109, 105, 110, 44, 49, 51, 44, 49, 44, 49, 54, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 121, 109, > 105, 110, 62, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, > 36, 120, 109, 105, 110, 44, 36, 120, 109, 97, 120, 95, 44, 123, 104, 45, > 49, 125, 44, 123, 104, 45, 49, 125, 44, 49, 51, 44, 49, 44, 49, 54, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 121, > 109, 97, 120, 60, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, > 32, 36, 120, 109, 105, 110, 44, 36, 120, 109, 97, 120, 95, 44, 48, 44, > 48, 44, 49, 51, 44, 49, 44, 49, 54, 48, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, 32, 51, 32, > 45, 110, 101, 113, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 91, > 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 51, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 49, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 102, 114, 97, 109, 101, > 91, 45, 49, 93, 32, 49, 54, 44, 49, 54, 44, 50, 50, 48, 10, 48, > 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 57, 34, 44, 48, 44, 48, > 44, 49, 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, > 45, 50, 50, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 123, 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 47, 50, 125, > 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 49, 54, 125, 44, 48, 44, > 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 36, 49, 48, 34, 44, 48, 44, 48, 44, > 49, 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, 45, > 50, 50, 48, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, > 45, 57, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 50, 44, 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 104, 41, 47, 50, > 125, 44, 48, 44, 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 104, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 39, 46, 10, 100, 104, > 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, > 32, 45, 118, 32, 43, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 36, 34, 42, 34, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, 95, 104, 105, > 115, 116, 111, 103, 114, 97, 109, 32, 58, 32, 95, 119, 105, 100, 116, 104, > 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 99, 108, > 117, 115, 116, 101, 114, 115, 62, 48, 44, 95, 109, 105, 110, 95, 118, 97, > 108, 117, 101, 91, 37, 93, 44, 95, 109, 97, 120, 95, 118, 97, 108, 117, > 101, 91, 37, 93, 44, 95, 115, 104, 111, 119, 95, 97, 120, 101, 115, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 101, 120, 112, 114, 101, > 115, 115, 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 110, 100, 101, 114, 32, 97, 32, 99, 104, 97, 110, 110, 101, 108, > 45, 98, 121, 45, 99, 104, 97, 110, 110, 101, 108, 32, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 104, 97, 115, 32, 115, 101, 118, 101, 114, 97, 108, 32, 115, 108, > 105, 99, 101, 115, 44, 32, 116, 104, 101, 32, 114, 101, 110, 100, 101, 114, > 105, 110, 103, 32, 105, 115, 32, 112, 101, 114, 102, 111, 114, 109, 101, 100, > 32, 102, 111, 114, 32, 97, 108, 108, 32, 105, 110, 112, 117, 116, 32, 115, > 108, 105, 99, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 39, 32, 105, 115, 32, > 97, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 117, 115, 101, 100, 32, 116, > 111, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 116, 104, 101, 32, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 100, 97, 116, 97, 32, 102, > 111, 114, 32, 118, 105, 115, 117, 97, 108, 105, 122, 97, 116, 105, 111, 110, > 32, 112, 117, 114, 112, 111, 115, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 104, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 119, 105, 100, > 116, 104, 61, 53, 49, 50, 39, 44, 32, 39, 104, 101, 105, 103, 104, 116, > 61, 51, 48, 48, 39, 44, 32, 39, 99, 108, 117, 115, 116, 101, 114, 115, > 61, 50, 53, 54, 39, 44, 32, 39, 109, 105, 110, 95, 118, 97, 108, 117, > 101, 61, 48, 37, 39, 44, 32, 39, 109, 97, 120, 95, 118, 97, 108, 117, > 101, 61, 49, 48, 48, 37, 39, 44, 32, 39, 115, 104, 111, 119, 95, 97, > 120, 101, 115, 61, 49, 39, 32, 97, 110, 100, 32, 39, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 61, 105, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 100, 105, 115, 112, 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 53, 49, 50, 44, 51, 48, 48, 10, 100, 105, 115, 112, > 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 58, 10, > 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, > 32, 43, 10, 45, 95, 36, 48, 32, 36, 34, 42, 34, 10, 95, 100, 105, > 115, 112, 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, 49, > 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, 48, 48, 125, > 62, 48, 32, 38, 38, 32, 36, 123, 51, 61, 50, 53, 54, 125, 62, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 48, 37, 125, 44, > 36, 123, 53, 61, 49, 48, 48, 37, 125, 44, 36, 123, 54, 61, 49, 125, > 44, 34, 36, 123, 55, 61, 105, 125, 34, 10, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 36, 49, 120, 36, 50, > 32, 99, 104, 97, 110, 110, 101, 108, 45, 98, 121, 45, 99, 104, 97, 110, > 110, 101, 108, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 44, 32, 119, 105, > 116, 104, 32, 36, 51, 32, 99, 108, 117, 115, 116, 101, 114, 115, 44, 32, > 109, 105, 110, 105, 109, 117, 109, 32, 118, 97, 108, 117, 101, 32, 36, 52, > 32, 97, 110, 100, 32, 109, 97, 120, 105, 109, 117, 109, 32, 118, 97, 108, > 117, 101, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, > 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 105, 102, 32, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 52, 125, 32, > 109, 61, 123, 105, 109, 43, 40, 105, 77, 45, 105, 109, 41, 42, 36, 52, > 125, 32, 45, 101, 108, 115, 101, 32, 109, 61, 36, 52, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 53, 125, 32, 77, 61, 123, 105, 109, > 43, 40, 105, 77, 45, 105, 109, 41, 42, 36, 53, 125, 32, 45, 101, 108, > 115, 101, 32, 77, 61, 36, 53, 32, 45, 101, 110, 100, 105, 102, 10, 115, > 61, 123, 115, 125, 32, 45, 115, 32, 99, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 115, 32, 45, 108, 91, 123, 45, 49, 45, 36, 62, 125, 93, > 32, 45, 115, 32, 122, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 36, 51, 44, 36, 109, 44, 36, 77, 32, 45, 97, 32, 122, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, 99, 32, > 45, 102, 32, 39, 34, 36, 55, 34, 39, 32, 118, 77, 61, 123, 105, 77, > 125, 32, 45, 115, 32, 122, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 36, 49, 44, 36, 50, 44, 49, > 44, 123, 115, 125, 44, 45, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 115, 125, 32, 45, 115, 104, 91, 45, 50, 44, 45, 49, 93, > 32, 36, 62, 44, 36, 62, 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 51, 44, 48, 44, 36, 118, 77, 44, 48, > 44, 49, 44, 48, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 50, 93, 32, 45, 43, > 32, 50, 53, 53, 10, 45, 105, 102, 32, 36, 54, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, > 36, 109, 44, 36, 77, 44, 36, 118, 77, 44, 48, 44, 49, 51, 44, 49, > 44, 50, 53, 53, 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, > 93, 32, 51, 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, > 122, 32, 45, 110, 109, 32, 36, 110, 109, 44, 49, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, 95, 112, 97, 114, 97, > 109, 101, 116, 114, 105, 99, 32, 58, 32, 95, 119, 105, 100, 116, 104, 62, > 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 111, 117, 116, > 108, 105, 110, 101, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 118, 101, > 114, 116, 101, 120, 95, 114, 97, 100, 105, 117, 115, 62, 61, 48, 44, 95, > 105, 115, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, 101, 100, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 105, 115, 95, 100, 101, 99, > 111, 114, 97, 116, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 44, 95, 120, 108, 97, 98, 101, 108, 44, 95, 121, 108, 97, 98, 101, 108, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, > 32, 50, 100, 32, 111, 114, 32, 51, 100, 32, 112, 97, 114, 97, 109, 101, > 116, 114, 105, 99, 32, 99, 117, 114, 118, 101, 32, 111, 114, 32, 112, 111, > 105, 110, 116, 32, 99, 108, 111, 117, 100, 115, 32, 102, 114, 111, 109, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 100, > 97, 116, 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 117, > 114, 118, 101, 32, 112, 111, 105, 110, 116, 115, 32, 97, 114, 101, 32, 100, > 101, 102, 105, 110, 101, 100, 32, 97, 115, 32, 112, 105, 120, 101, 108, 115, > 32, 111, 102, 32, 97, 32, 50, 32, 111, 114, 32, 51, 45, 99, 104, 97, > 110, 110, 101, 108, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 102, 32, 116, 104, 101, 32, 112, 111, 105, 110, > 116, 32, 105, 109, 97, 103, 101, 32, 99, 111, 110, 116, 97, 105, 110, 115, > 32, 109, 111, 114, 101, 32, 116, 104, 97, 110, 32, 51, 32, 99, 104, 97, > 110, 110, 101, 108, 115, 44, 32, 97, 100, 100, 105, 116, 105, 111, 110, 97, > 108, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 100, 101, 102, 105, 110, > 101, 32, 116, 104, 101, 32, 40, 82, 44, 71, 44, 66, 41, 32, 99, 111, > 108, 111, 114, 32, 102, 111, 114, 32, 101, 97, 99, 104, 32, 118, 101, 114, > 116, 101, 120, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, > 32, 39, 111, 117, 116, 108, 105, 110, 101, 95, 111, 112, 97, 99, 105, 116, > 121, 62, 49, 39, 44, 32, 116, 104, 101, 32, 111, 117, 116, 108, 105, 110, > 101, 32, 105, 115, 32, 99, 111, 108, 111, 114, 101, 100, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 118, 101, 114, 116, 101, 120, 32, 99, > 111, 108, 111, 114, 115, 32, 97, 110, 100, 32, 39, 111, 117, 116, 108, 105, > 110, 101, 95, 111, 112, 97, 99, 105, 116, 121, 45, 49, 39, 32, 105, 115, > 32, 117, 115, 101, 100, 32, 97, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 116, 104, 101, 32, 97, 99, 116, 117, 97, 108, 32, 100, 114, 97, > 119, 105, 110, 103, 32, 111, 112, 97, 99, 105, 116, 121, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 119, 105, 100, 116, 104, 61, 53, 49, > 50, 39, 44, 32, 39, 104, 101, 105, 103, 104, 116, 61, 119, 105, 100, 116, > 104, 39, 44, 32, 39, 111, 117, 116, 108, 105, 110, 101, 95, 111, 112, 97, > 99, 105, 116, 121, 61, 51, 39, 44, 32, 39, 118, 101, 114, 116, 101, 120, > 95, 114, 97, 100, 105, 117, 115, 61, 48, 39, 44, 32, 39, 105, 115, 95, > 97, 110, 116, 105, 97, 108, 105, 97, 115, 101, 100, 61, 49, 39, 44, 32, > 39, 105, 115, 95, 100, 101, 99, 111, 114, 97, 116, 101, 100, 61, 49, 39, > 44, 32, 39, 120, 108, 97, 98, 101, 108, 61, 34, 120, 45, 97, 120, 105, > 115, 34, 39, 32, 97, 110, 100, 32, 39, 121, 108, 97, 98, 101, 108, 61, > 34, 121, 45, 97, 120, 105, 115, 34, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 49, 48, 50, 52, 44, 49, 44, 49, 44, 50, > 44, 39, 116, 61, 120, 47, 52, 48, 59, 105, 102, 40, 99, 61, 61, 48, > 44, 115, 105, 110, 40, 116, 41, 44, 99, 111, 115, 40, 116, 41, 41, 42, > 40, 101, 120, 112, 40, 99, 111, 115, 40, 116, 41, 41, 45, 50, 42, 99, > 111, 115, 40, 52, 42, 116, 41, 45, 115, 105, 110, 40, 116, 47, 49, 50, > 41, 94, 53, 41, 39, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 112, > 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 53, 49, 50, 44, 53, 49, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 48, 48, > 48, 44, 49, 44, 49, 44, 50, 44, 63, 40, 45, 49, 48, 48, 44, 49, > 48, 48, 41, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 52, 44, > 49, 32, 45, 110, 111, 105, 115, 101, 32, 49, 50, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 48, 44, 50, 32, 45, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, 53, 32, 45, 97, 112, 112, > 101, 110, 100, 32, 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 112, > 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 53, 49, 50, 44, 53, 49, > 50, 44, 48, 46, 49, 44, 56, 10, 100, 105, 115, 112, 108, 97, 121, 95, > 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 48, 32, 38, 38, 32, > 36, 123, 52, 61, 48, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 51, 61, 51, 125, 44, 36, 123, 53, 61, 49, 125, 44, 36, > 123, 54, 61, 49, 125, 44, 34, 36, 123, 55, 61, 120, 45, 97, 120, 105, > 115, 125, 34, 44, 34, 36, 123, 56, 61, 121, 45, 97, 120, 105, 115, 125, > 34, 10, 45, 118, 32, 45, 32, 115, 48, 61, 34, 110, 111, 32, 34, 32, > 115, 49, 61, 34, 34, 32, 111, 48, 61, 34, 34, 32, 111, 49, 61, 34, > 99, 111, 108, 111, 114, 101, 100, 32, 34, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 36, > 49, 120, 36, 50, 32, 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, > 103, 114, 97, 112, 104, 32, 112, 108, 111, 116, 32, 102, 114, 111, 109, 32, > 100, 97, 116, 97, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 34, 36, 123, 111, 123, 36, 51, 62, 49, 125, > 125, 34, 111, 117, 116, 108, 105, 110, 101, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 34, 123, 105, 102, 40, 36, 51, 62, 49, 44, 36, 51, 45, 49, > 44, 36, 51, 41, 125, 92, 10, 34, 44, 32, 118, 101, 114, 116, 101, 120, > 32, 114, 97, 100, 105, 117, 115, 32, 36, 52, 44, 32, 34, 36, 123, 115, > 123, 36, 53, 33, 61, 48, 125, 125, 34, 97, 110, 116, 105, 97, 108, 105, > 97, 115, 105, 110, 103, 32, 97, 110, 100, 32, 34, 36, 123, 115, 123, 36, > 54, 33, 61, 48, 125, 125, 34, 100, 101, 99, 111, 114, 97, 116, 105, 111, > 110, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, 109, 61, 64, 123, > 48, 44, 110, 125, 32, 78, 61, 123, 119, 42, 104, 42, 100, 125, 10, 45, > 105, 91, 48, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, > 41, 32, 45, 43, 91, 48, 93, 32, 48, 46, 53, 32, 45, 105, 91, 49, > 93, 32, 40, 36, 78, 59, 36, 78, 41, 10, 45, 105, 102, 32, 123, 115, > 61, 61, 52, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 51, 44, 51, 32, 45, 114, 91, 45, 49, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 50, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 99, 32, 105, 115, 95, 103, 114, 97, 121, > 115, 99, 97, 108, 101, 61, 49, 10, 45, 101, 108, 115, 101, 32, 105, 115, > 95, 103, 114, 97, 121, 115, 99, 97, 108, 101, 61, 123, 115, 60, 52, 125, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 44, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, 115, 104, 91, 45, 49, > 93, 32, 48, 44, 48, 32, 120, 109, 61, 123, 105, 109, 125, 32, 120, 77, > 61, 123, 105, 77, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, > 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 121, 109, 61, 123, 105, 109, > 125, 32, 121, 77, 61, 123, 105, 77, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, 122, 109, > 61, 123, 105, 109, 125, 32, 122, 77, 61, 123, 105, 77, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 49, 93, 32, 99, 120, 121, 122, 32, 45, 115, 91, 45, 49, 93, 32, 120, > 44, 50, 10, 45, 105, 91, 45, 50, 93, 32, 40, 49, 44, 48, 59, 49, > 44, 123, 36, 78, 45, 49, 125, 41, 32, 45, 114, 91, 45, 50, 93, 32, > 50, 44, 36, 78, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, > 100, 91, 45, 50, 93, 32, 49, 44, 36, 78, 44, 49, 44, 49, 44, 49, > 10, 45, 121, 32, 45, 97, 32, 121, 32, 45, 99, 51, 100, 32, 45, 110, > 51, 100, 32, 45, 42, 51, 100, 32, 49, 44, 45, 49, 44, 49, 10, 123, > 105, 102, 40, 36, 54, 44, 109, 97, 120, 40, 49, 44, 36, 49, 45, 51, > 50, 41, 44, 36, 49, 41, 125, 44, 123, 105, 102, 40, 36, 54, 44, 109, > 97, 120, 40, 49, 44, 36, 50, 45, 51, 50, 41, 44, 36, 50, 41, 125, > 44, 49, 44, 123, 105, 102, 40, 36, 105, 115, 95, 103, 114, 97, 121, 115, > 99, 97, 108, 101, 44, 49, 44, 51, 41, 125, 44, 50, 53, 53, 10, 45, > 42, 51, 100, 91, 48, 93, 32, 123, 48, 46, 57, 54, 42, 109, 105, 110, > 40, 119, 44, 104, 41, 125, 10, 45, 105, 102, 32, 36, 54, 32, 76, 61, > 123, 48, 46, 49, 42, 109, 97, 120, 40, 36, 49, 44, 36, 50, 41, 125, > 32, 45, 103, 114, 105, 100, 91, 49, 93, 32, 36, 76, 44, 36, 76, 44, > 48, 44, 48, 44, 48, 46, 50, 53, 44, 48, 120, 67, 67, 67, 67, 67, > 67, 67, 67, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 36, 53, 10, 45, 114, 91, 49, 93, 32, 50, 48, 48, 37, 44, 50, > 48, 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, 49, 32, 45, 42, 51, > 100, 91, 48, 93, 32, 50, 10, 45, 105, 102, 32, 36, 52, 32, 45, 45, > 99, 105, 114, 99, 108, 101, 115, 51, 100, 91, 48, 93, 32, 123, 50, 42, > 36, 52, 125, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, > 32, 91, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, > 44, 51, 44, 48, 44, 48, 32, 45, 114, 109, 91, 50, 93, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 36, 52, 10, 45, 45, > 99, 105, 114, 99, 108, 101, 115, 51, 100, 91, 48, 93, 32, 36, 52, 32, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, 50, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 51, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 50, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 108, 91, 48, 93, 32, 45, 115, > 51, 100, 32, 45, 102, 91, 49, 93, 32, 39, 105, 45, 121, 39, 32, 45, > 114, 109, 91, 51, 93, 32, 45, 105, 91, 51, 93, 32, 40, 50, 44, 48, > 44, 49, 59, 50, 44, 123, 36, 78, 45, 50, 125, 44, 123, 36, 78, 45, > 49, 125, 41, 32, 45, 114, 91, 51, 93, 32, 51, 44, 123, 36, 78, 45, > 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, > 51, 93, 10, 45, 114, 91, 53, 93, 32, 49, 44, 123, 104, 45, 49, 125, > 44, 49, 44, 49, 44, 48, 10, 45, 105, 102, 32, 123, 36, 51, 62, 49, > 125, 32, 45, 114, 91, 52, 93, 32, 51, 44, 64, 123, 52, 44, 104, 47, > 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 114, 91, 52, 93, 32, > 51, 44, 64, 123, 52, 44, 104, 45, 49, 125, 44, 49, 44, 49, 44, 50, > 32, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 52, 93, 32, 45, 105, > 91, 52, 93, 32, 51, 44, 123, 36, 78, 45, 49, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 121, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, > 108, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, > 48, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 123, 105, 102, > 40, 36, 51, 62, 49, 44, 36, 51, 45, 49, 44, 36, 51, 41, 125, 44, > 50, 44, 48, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 48, 93, 10, 45, 105, 102, 32, 36, 53, 32, 45, 114, 91, 45, 49, > 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 49, 44, 49, 48, 48, 37, > 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 54, > 10, 120, 99, 61, 123, 48, 46, 53, 42, 40, 36, 120, 109, 43, 36, 120, > 77, 41, 125, 32, 121, 99, 61, 123, 48, 46, 53, 42, 40, 36, 121, 109, > 43, 36, 121, 77, 41, 125, 32, 100, 120, 61, 123, 48, 46, 53, 42, 40, > 36, 120, 77, 45, 36, 120, 109, 41, 47, 48, 46, 57, 54, 125, 32, 100, > 121, 61, 123, 48, 46, 53, 42, 40, 36, 121, 77, 45, 36, 121, 109, 41, > 47, 48, 46, 57, 54, 125, 10, 120, 109, 61, 123, 36, 120, 99, 45, 36, > 100, 120, 125, 32, 120, 77, 61, 123, 36, 120, 99, 43, 36, 100, 120, 125, > 32, 121, 109, 61, 123, 36, 121, 99, 45, 36, 100, 121, 125, 32, 121, 77, > 61, 123, 36, 121, 99, 43, 36, 100, 121, 125, 10, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 36, > 120, 109, 44, 36, 120, 77, 44, 36, 121, 77, 44, 36, 121, 109, 44, 49, > 51, 44, 49, 44, 49, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 48, > 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 36, 121, 77, 44, 36, 121, 109, 44, 49, 51, 44, 49, 44, 49, 54, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 77, > 60, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 123, 119, > 45, 49, 125, 44, 123, 119, 45, 49, 125, 44, 36, 121, 77, 44, 36, 121, > 109, 44, 49, 51, 44, 49, 44, 49, 54, 48, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 36, 121, 109, 62, 48, 125, 32, 45, 97, > 120, 101, 115, 91, 45, 49, 93, 32, 36, 120, 109, 44, 36, 120, 77, 44, > 123, 104, 45, 49, 125, 44, 123, 104, 45, 49, 125, 44, 49, 51, 44, 49, > 44, 49, 54, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 121, 77, 60, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, > 93, 32, 36, 120, 109, 44, 36, 120, 77, 44, 48, 44, 48, 44, 49, 51, > 44, 49, 44, 49, 54, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 45, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, > 50, 48, 48, 32, 45, 101, 113, 91, 45, 50, 93, 32, 48, 10, 45, 42, > 91, 45, 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 49, 50, 56, 32, 45, 102, > 114, 97, 109, 101, 32, 49, 53, 44, 49, 53, 44, 50, 50, 48, 10, 48, > 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 55, 34, 44, 48, 44, 48, > 44, 49, 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, > 45, 50, 50, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 123, 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 47, 50, 125, > 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 49, 54, 125, 44, 48, 44, > 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 36, 56, 34, 44, 48, 44, 48, 44, 49, > 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, 45, 50, > 50, 48, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, 45, > 57, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 50, > 44, 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 104, 41, 47, 50, 125, > 44, 48, 44, 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 91, 45, 49, 93, 32, 36, > 110, 109, 44, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 112, 32, > 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, > 97, 121, 95, 112, 111, 108, 97, 114, 39, 46, 10, 100, 112, 32, 58, 10, > 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, > 32, 43, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, 112, 111, 108, > 97, 114, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, > 112, 108, 97, 121, 95, 112, 111, 108, 97, 114, 32, 58, 32, 95, 119, 105, > 100, 116, 104, 62, 51, 50, 44, 95, 104, 101, 105, 103, 104, 116, 62, 51, > 50, 44, 95, 111, 117, 116, 108, 105, 110, 101, 95, 116, 121, 112, 101, 44, > 95, 102, 105, 108, 108, 95, 82, 44, 95, 102, 105, 108, 108, 95, 71, 44, > 95, 102, 105, 108, 108, 95, 66, 44, 95, 116, 104, 101, 116, 97, 95, 115, > 116, 97, 114, 116, 44, 95, 116, 104, 101, 116, 97, 95, 101, 110, 100, 44, > 95, 120, 108, 97, 98, 101, 108, 44, 95, 121, 108, 97, 98, 101, 108, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, > 112, 111, 108, 97, 114, 32, 99, 117, 114, 118, 101, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, > 100, 97, 116, 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 112, 39, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 111, 117, 116, 108, 105, 110, 101, > 95, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 114, 60, 48, 61, 100, 111, 116, 115, 32, 119, 105, 116, 104, 32, 114, 97, > 100, 105, 117, 115, 32, 45, 114, 32, 124, 32, 48, 61, 110, 111, 32, 111, > 117, 116, 108, 105, 110, 101, 32, 124, 32, 114, 62, 48, 61, 108, 105, 110, > 101, 115, 43, 100, 111, 116, 115, 32, 119, 105, 116, 104, 32, 114, 97, 100, > 105, 117, 115, 32, 114, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 102, 105, 108, 108, 95, 99, 111, 108, 111, 114, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, 110, 111, 32, 102, 105, > 108, 108, 32, 124, 32, 82, 44, 71, 44, 66, 61, 102, 105, 108, 108, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, > 111, 108, 111, 114, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 119, 105, 100, 116, 104, 61, 53, 48, 48, 39, 44, 32, 39, 104, > 101, 105, 103, 104, 116, 61, 119, 105, 100, 116, 104, 39, 44, 32, 39, 111, > 117, 116, 108, 105, 110, 101, 95, 116, 121, 112, 101, 61, 49, 39, 44, 32, > 39, 102, 105, 108, 108, 95, 82, 61, 102, 105, 108, 108, 95, 71, 61, 102, > 105, 108, 108, 95, 66, 61, 50, 48, 48, 39, 44, 32, 39, 116, 104, 101, > 116, 97, 95, 115, 116, 97, 114, 116, 61, 48, 39, 44, 32, 39, 116, 104, > 101, 116, 97, 95, 101, 110, 100, 61, 51, 54, 48, 39, 44, 32, 39, 120, > 108, 97, 98, 101, 108, 61, 34, 120, 45, 97, 120, 105, 115, 34, 39, 32, > 97, 110, 100, 32, 39, 121, 108, 97, 98, 101, 108, 61, 34, 121, 45, 97, > 120, 105, 115, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 48, 46, 51, > 43, 97, 98, 115, 40, 99, 111, 115, 40, 49, 48, 42, 112, 105, 42, 120, > 47, 119, 41, 41, 43, 63, 40, 48, 46, 52, 41, 39, 32, 45, 100, 105, > 115, 112, 108, 97, 121, 95, 112, 111, 108, 97, 114, 32, 53, 49, 50, 44, > 53, 49, 50, 44, 52, 44, 50, 48, 48, 44, 50, 53, 53, 44, 50, 48, > 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, > 48, 44, 49, 44, 49, 44, 49, 44, 39, 120, 94, 51, 47, 49, 101, 49, > 48, 39, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 112, 111, 108, 97, > 114, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 45, 49, 44, 44, > 44, 48, 44, 123, 49, 53, 42, 51, 54, 48, 125, 10, 100, 105, 115, 112, > 108, 97, 121, 95, 112, 111, 108, 97, 114, 32, 58, 10, 45, 118, 32, 45, > 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, > 95, 36, 48, 32, 36, 42, 10, 95, 100, 105, 115, 112, 108, 97, 121, 95, > 112, 111, 108, 97, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 53, 48, 48, 125, 62, 51, 50, 32, 38, 38, 32, 36, > 123, 50, 61, 36, 49, 125, 62, 51, 50, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 51, 61, 49, 125, 44, 36, 123, 52, 61, 50, 48, 48, 125, > 44, 36, 123, 53, 61, 36, 52, 125, 44, 36, 123, 54, 61, 36, 53, 125, > 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, 51, 54, 48, 125, > 44, 34, 36, 123, 57, 61, 120, 45, 97, 120, 105, 115, 125, 34, 44, 34, > 36, 123, 49, 48, 61, 121, 45, 97, 120, 105, 115, 125, 34, 10, 45, 101, > 91, 48, 45, 45, 51, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 36, > 49, 120, 36, 50, 32, 112, 111, 108, 97, 114, 32, 103, 114, 97, 112, 104, > 32, 112, 108, 111, 116, 32, 102, 114, 111, 109, 32, 100, 97, 116, 97, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 44, 32, > 119, 105, 116, 104, 32, 111, 117, 116, 108, 105, 110, 101, 32, 36, 52, 32, > 97, 110, 100, 32, 102, 105, 108, 108, 32, 99, 111, 108, 111, 114, 32, 40, > 36, 52, 44, 36, 53, 44, 36, 54, 41, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 77, 61, 123, > 109, 97, 120, 40, 97, 98, 115, 40, 105, 77, 41, 44, 97, 98, 115, 40, > 105, 109, 41, 41, 125, 10, 45, 42, 32, 123, 48, 46, 52, 56, 42, 109, > 105, 110, 40, 36, 49, 44, 36, 50, 41, 47, 36, 77, 125, 10, 45, 121, > 32, 40, 123, 36, 55, 42, 112, 105, 47, 49, 56, 48, 125, 59, 123, 45, > 36, 56, 42, 112, 105, 47, 49, 56, 48, 125, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 51, 10, > 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, > 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, > 42, 91, 45, 51, 44, 45, 50, 93, 10, 45, 97, 91, 45, 50, 44, 45, > 49, 93, 32, 120, 32, 78, 61, 123, 104, 125, 10, 45, 110, 109, 91, 45, > 49, 93, 32, 99, 111, 111, 114, 100, 115, 10, 45, 105, 102, 32, 36, 51, > 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, 43, > 91, 45, 49, 93, 32, 48, 46, 53, 32, 40, 36, 78, 44, 36, 78, 41, > 10, 45, 45, 122, 91, 99, 111, 111, 114, 100, 115, 93, 32, 48, 44, 50, > 10, 49, 44, 36, 78, 44, 49, 44, 49, 44, 50, 32, 49, 44, 36, 78, > 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 45, 43, 91, 45, 49, 93, > 32, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, 32, 45, > 61, 91, 45, 49, 93, 32, 48, 44, 50, 44, 49, 48, 48, 37, 10, 51, > 44, 36, 78, 44, 49, 44, 49, 44, 48, 32, 49, 44, 36, 78, 44, 49, > 44, 49, 44, 49, 32, 45, 121, 91, 45, 54, 45, 45, 49, 93, 32, 45, > 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 110, 109, 91, 45, > 49, 93, 32, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, 114, 95, 111, > 117, 116, 108, 105, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 34, 36, 52, 62, 61, 48, 32, 38, 38, 32, 36, 53, 62, > 61, 48, 32, 38, 38, 32, 36, 54, 62, 61, 48, 34, 125, 10, 40, 123, > 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, 43, 91, 45, 49, > 93, 32, 48, 46, 53, 32, 40, 123, 36, 78, 43, 49, 125, 44, 36, 78, > 41, 10, 45, 45, 122, 91, 99, 111, 111, 114, 100, 115, 93, 32, 48, 44, > 45, 49, 44, 50, 44, 49, 48, 48, 37, 32, 45, 122, 91, 45, 49, 93, > 32, 48, 44, 50, 10, 49, 44, 36, 78, 44, 49, 44, 49, 44, 51, 32, > 49, 44, 36, 78, 32, 49, 44, 36, 78, 44, 49, 44, 49, 44, 39, 49, > 43, 121, 39, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 97, > 91, 45, 52, 45, 45, 49, 93, 32, 120, 32, 45, 61, 91, 45, 49, 93, > 32, 49, 44, 51, 44, 49, 48, 48, 37, 10, 51, 44, 36, 78, 44, 49, > 44, 49, 44, 36, 52, 44, 36, 53, 44, 36, 54, 32, 49, 44, 36, 78, > 44, 49, 44, 49, 44, 49, 10, 45, 121, 91, 45, 54, 45, 45, 49, 93, > 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 110, 109, > 91, 45, 49, 93, 32, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, 114, > 95, 102, 105, 108, 108, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 99, 111, 111, 114, 100, 115, 93, 10, 123, 36, 49, 45, 51, 50, 125, > 44, 123, 36, 50, 45, 51, 50, 125, 44, 49, 44, 51, 44, 50, 53, 53, > 10, 76, 61, 123, 48, 46, 49, 42, 109, 97, 120, 40, 36, 49, 44, 36, > 50, 41, 125, 32, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, 36, 76, > 44, 36, 76, 44, 48, 44, 48, 44, 48, 46, 50, 53, 44, 48, 120, 67, > 67, 67, 67, 67, 67, 67, 67, 44, 48, 10, 45, 105, 102, 32, 123, 34, > 36, 52, 62, 61, 48, 32, 38, 38, 32, 36, 53, 62, 61, 48, 32, 38, > 38, 32, 36, 54, 62, 61, 48, 34, 125, 10, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 95, 112, 108, 111, 116, 95, 112, > 111, 108, 97, 114, 95, 102, 105, 108, 108, 93, 44, 53, 48, 37, 44, 53, > 48, 37, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 10, 45, 114, 109, > 91, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, 114, 95, 102, 105, 108, > 108, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 51, > 10, 45, 105, 102, 32, 123, 36, 51, 62, 61, 48, 125, 10, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 95, 112, 108, 111, > 116, 95, 112, 111, 108, 97, 114, 95, 111, 117, 116, 108, 105, 110, 101, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 49, 44, 48, > 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 51, 33, 61, 48, 125, 10, 45, 105, 102, 32, 123, 97, 98, 115, 40, 36, > 51, 41, 62, 49, 125, 32, 45, 99, 105, 114, 99, 108, 101, 115, 51, 100, > 91, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, 114, 95, 111, 117, 116, > 108, 105, 110, 101, 93, 32, 123, 97, 98, 115, 40, 36, 51, 41, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, > 91, 45, 49, 93, 32, 91, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, > 114, 95, 111, 117, 116, 108, 105, 110, 101, 93, 44, 53, 48, 37, 44, 53, > 48, 37, 44, 48, 44, 48, 46, 50, 44, 50, 44, 48, 44, 48, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 95, 112, 108, 111, 116, 95, > 112, 111, 108, 97, 114, 95, 111, 117, 116, 108, 105, 110, 101, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 110, 77, 61, 123, 36, 77, 47, 48, 46, 57, > 54, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, 120, > 101, 115, 91, 45, 49, 93, 32, 123, 45, 36, 110, 77, 125, 44, 36, 110, > 77, 44, 36, 110, 77, 44, 123, 45, 36, 110, 77, 125, 44, 49, 51, 44, > 49, 44, 49, 10, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, > 32, 51, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 49, 93, 32, 50, 48, 48, 32, 45, 101, 113, 91, 45, 50, > 93, 32, 48, 10, 45, 42, 91, 45, 51, 44, 45, 50, 93, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, > 49, 44, 49, 44, 49, 50, 56, 32, 45, 102, 114, 97, 109, 101, 91, 45, > 49, 93, 32, 49, 53, 44, 49, 53, 44, 50, 50, 48, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 36, 57, 34, 44, 48, 44, 48, 44, 49, > 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, 45, 50, > 50, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 123, > 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 47, 50, 125, 44, 123, > 64, 123, 45, 50, 44, 104, 125, 45, 49, 54, 125, 44, 48, 44, 48, 44, > 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 34, 36, 49, 48, 34, 44, 48, 44, 48, 44, 49, 51, > 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, 45, 50, 50, > 48, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, 45, 57, > 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 50, 44, > 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 104, 41, 47, 50, 125, 44, > 48, 44, 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 114, 103, 98, 97, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, 39, 46, > 10, 100, 114, 103, 98, 97, 32, 58, 10, 45, 95, 100, 105, 115, 112, 108, > 97, 121, 95, 114, 103, 98, 97, 10, 35, 64, 103, 109, 105, 99, 32, 100, > 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 115, > 32, 111, 118, 101, 114, 32, 97, 32, 99, 104, 101, 99, 107, 101, 114, 98, > 111, 97, 114, 100, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 100, 114, 103, 98, 97, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 110, 111, 114, 109, 32, 45, 116, 104, 114, 101, 115, 104, > 111, 108, 100, 91, 45, 49, 93, 32, 52, 48, 37, 32, 45, 98, 108, 117, > 114, 91, 45, 49, 93, 32, 51, 32, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 97, 112, > 112, 101, 110, 100, 32, 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 114, 103, 98, 97, 10, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, > 97, 32, 58, 10, 45, 95, 36, 48, 10, 95, 100, 105, 115, 112, 108, 97, > 121, 95, 114, 103, 98, 97, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 82, 71, 66, 65, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 111, 118, 101, 114, 32, 97, 32, 99, 104, > 101, 99, 107, 101, 114, 98, 111, 97, 114, 100, 32, 98, 97, 99, 107, 103, > 114, 111, 117, 110, 100, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, > 95, 97, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 105, 91, 48, 93, 32, 40, 49, 54, 48, 44, > 49, 50, 56, 59, 49, 50, 56, 44, 49, 54, 48, 41, 32, 45, 110, 109, > 91, 48, 93, 32, 64, 123, 49, 44, 110, 125, 32, 45, 114, 91, 48, 93, > 32, 49, 54, 44, 49, 54, 32, 45, 114, 91, 48, 93, 32, 91, 49, 93, > 44, 91, 49, 93, 44, 49, 44, 123, 115, 45, 49, 125, 44, 48, 44, 50, > 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 116, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, 110, 115, > 111, 114, 115, 39, 46, 10, 100, 116, 32, 58, 10, 45, 118, 32, 45, 32, > 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, > 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, 110, 115, 111, 114, 115, 32, > 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, > 121, 95, 116, 101, 110, 115, 111, 114, 115, 32, 58, 32, 95, 115, 105, 122, > 101, 95, 102, 97, 99, 116, 111, 114, 62, 48, 44, 95, 101, 108, 108, 105, > 112, 115, 101, 95, 102, 97, 99, 116, 111, 114, 62, 61, 48, 44, 95, 99, > 111, 108, 111, 114, 101, 100, 95, 109, 111, 100, 101, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 110, 100, 101, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 109, > 97, 115, 107, 32, 102, 105, 101, 108, 100, 32, 111, 102, 32, 50, 120, 50, > 32, 116, 101, 110, 115, 111, 114, 115, 32, 119, 105, 116, 104, 32, 101, 108, > 108, 105, 112, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 116, 39, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, > 102, 97, 99, 116, 111, 114, 61, 49, 54, 39, 44, 32, 39, 101, 108, 108, > 105, 112, 115, 101, 95, 102, 97, 99, 116, 111, 114, 61, 48, 46, 57, 50, > 39, 44, 32, 39, 99, 111, 108, 111, 114, 95, 109, 111, 100, 101, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 105, 102, 102, 117, 115, 105, > 111, 110, 116, 101, 110, 115, 111, 114, 115, 32, 48, 46, 55, 44, 48, 46, > 54, 32, 45, 99, 114, 111, 112, 32, 54, 48, 44, 49, 48, 44, 57, 48, > 44, 51, 48, 32, 45, 45, 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, > 110, 115, 111, 114, 115, 32, 44, 10, 100, 105, 115, 112, 108, 97, 121, 95, > 116, 101, 110, 115, 111, 114, 115, 32, 58, 10, 45, 118, 32, 45, 32, 95, > 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, > 48, 32, 36, 42, 10, 95, 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, > 110, 115, 111, 114, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 49, 54, 125, 62, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 48, 46, 57, 50, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 34, 36, 123, 51, 61, 49, 125, 34, 10, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 102, 105, 101, 108, 100, > 32, 111, 102, 32, 50, 120, 50, 32, 116, 101, 110, 115, 111, 114, 115, 32, > 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, > 44, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 102, 97, 99, 116, > 111, 114, 32, 36, 49, 44, 32, 101, 108, 108, 105, 112, 115, 101, 32, 102, > 97, 99, 116, 111, 114, 32, 36, 50, 32, 105, 110, 32, 34, 64, 123, 45, > 97, 114, 103, 92, 32, 49, 43, 33, 36, 51, 44, 99, 111, 108, 111, 114, > 101, 100, 44, 109, 97, 115, 107, 101, 100, 125, 34, 32, 109, 111, 100, 101, > 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 51, 125, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, > 110, 115, 111, 114, 115, 32, 36, 49, 44, 36, 50, 44, 48, 10, 45, 115, > 91, 48, 93, 32, 99, 32, 45, 45, 109, 105, 110, 91, 48, 44, 50, 93, > 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 43, 91, 49, 44, 45, > 49, 93, 32, 45, 97, 91, 48, 45, 50, 93, 32, 99, 10, 45, 114, 91, > 48, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 32, 45, 110, 91, > 48, 93, 32, 48, 44, 50, 53, 53, 32, 45, 42, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 108, 115, 101, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 42, 32, 123, > 40, 36, 50, 42, 36, 49, 47, 50, 41, 94, 50, 47, 109, 97, 120, 40, > 97, 98, 115, 40, 105, 109, 41, 44, 97, 98, 115, 40, 105, 77, 41, 41, > 125, 10, 45, 115, 32, 99, 32, 45, 105, 91, 45, 50, 93, 32, 91, 45, > 50, 93, 32, 45, 97, 32, 99, 32, 45, 115, 32, 121, 120, 32, 45, 114, > 32, 50, 44, 50, 44, 49, 44, 49, 44, 45, 49, 10, 40, 48, 46, 53, > 44, 48, 59, 48, 44, 48, 46, 53, 41, 32, 45, 43, 91, 94, 45, 49, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 105, 110, 118, 101, 114, 116, 32, 45, 121, 32, 99, 32, 45, 114, 32, 36, > 49, 44, 36, 49, 10, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 39, > 120, 39, 32, 45, 45, 91, 45, 49, 93, 32, 123, 119, 47, 50, 125, 10, > 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 45, > 91, 45, 49, 93, 32, 123, 104, 47, 50, 125, 10, 45, 45, 115, 113, 114, > 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 51, 93, > 32, 45, 115, 113, 114, 91, 45, 51, 93, 32, 45, 105, 91, 45, 50, 93, > 32, 91, 45, 50, 93, 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, > 99, 10, 45, 42, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 32, 43, 32, 45, 108, 101, 32, 49, > 10, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 36, > 119, 44, 36, 104, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 119, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 100, 105, 115, 112, 108, 97, 121, 95, 119, 97, 114, 112, 39, 46, > 10, 100, 119, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, > 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 100, 105, 115, 112, 108, > 97, 121, 95, 119, 97, 114, 112, 32, 36, 42, 10, 35, 64, 103, 109, 105, > 99, 32, 100, 105, 115, 112, 108, 97, 121, 95, 119, 97, 114, 112, 32, 58, > 32, 95, 99, 101, 108, 108, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 50, 100, 32, 119, 97, 114, 112, 105, 110, > 103, 32, 102, 105, 101, 108, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 119, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 99, 101, 108, 108, > 95, 115, 105, 122, 101, 61, 49, 53, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 98, 108, 117, 114, > 32, 53, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 32, 45, 97, 112, > 112, 101, 110, 100, 32, 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 119, 97, 114, 112, 32, 44, 10, 100, 105, 115, 112, 108, 97, 121, 95, 119, > 97, 114, 112, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, > 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, > 10, 95, 100, 105, 115, 112, 108, 97, 121, 95, 119, 97, 114, 112, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 53, 125, > 62, 48, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 82, 101, > 110, 100, 101, 114, 32, 50, 100, 32, 119, 97, 114, 112, 105, 110, 103, 32, > 102, 105, 101, 108, 100, 34, 36, 95, 95, 115, 34, 44, 32, 119, 105, 116, > 104, 32, 99, 101, 108, 108, 32, 115, 105, 122, 101, 32, 36, 49, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 100, 33, 61, > 49, 124, 124, 115, 33, 61, 50, 125, 10, 45, 101, 114, 114, 111, 114, 91, > 48, 45, 45, 51, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 119, 97, 114, 112, 39, 58, 32, > 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, 91, 34, > 123, 64, 35, 45, 36, 62, 45, 49, 125, 34, 93, 58, 32, 68, 105, 109, > 101, 110, 115, 105, 111, 110, 115, 32, 34, 123, 119, 125, 34, 44, 34, 123, > 104, 125, 34, 44, 34, 123, 100, 125, 34, 44, 34, 123, 115, 125, 34, 32, > 100, 111, 101, 115, 32, 110, 111, 116, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 32, 97, 32, 50, 100, 32, 102, 105, 101, 108, 100, 32, 111, 102, > 32, 50, 100, 32, 118, 101, 99, 116, 111, 114, 115, 46, 34, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 32, 45, 103, 114, 105, 100, > 91, 48, 93, 32, 36, 49, 44, 36, 49, 32, 45, 110, 109, 91, 48, 93, > 32, 64, 123, 49, 44, 110, 125, 10, 45, 119, 97, 114, 112, 91, 48, 93, > 32, 91, 49, 93, 44, 49, 44, 49, 44, 48, 32, 45, 114, 109, 91, 49, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 42, > 32, 50, 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 58, > 32, 95, 102, 111, 114, 109, 97, 116, 61, 123, 32, 97, 115, 99, 105, 105, > 32, 124, 32, 104, 116, 109, 108, 32, 124, 32, 108, 97, 116, 101, 120, 32, > 124, 32, 120, 109, 108, 32, 124, 32, 98, 97, 115, 104, 32, 124, 32, 105, > 109, 97, 103, 101, 115, 32, 125, 44, 95, 105, 109, 97, 103, 101, 95, 112, > 97, 116, 104, 44, 95, 119, 114, 105, 116, 101, 95, 119, 114, 97, 112, 112, > 101, 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 100, 111, 99, > 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 46, 103, > 109, 105, 99, 32, 99, 111, 109, 109, 97, 110, 100, 32, 102, 105, 108, 101, > 115, 32, 40, 108, 111, 97, 100, 101, 100, 32, 97, 115, 32, 114, 97, 119, > 32, 39, 117, 99, 104, 97, 114, 39, 32, 105, 109, 97, 103, 101, 115, 41, > 44, 32, 105, 110, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, > 111, 114, 109, 97, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 102, 111, 114, 109, 97, 116, 61, 97, 115, 99, 105, 105, 39, 44, 32, > 39, 105, 109, 97, 103, 101, 95, 112, 97, 116, 104, 61, 34, 34, 39, 32, > 97, 110, 100, 32, 39, 119, 114, 105, 116, 101, 95, 119, 114, 97, 112, 112, > 101, 114, 61, 49, 39, 46, 92, 110, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 69, 120, 97, 109, 112, 108, 101, 40, 115, 41, 32, 58, 32, 114, > 97, 119, 58, 102, 105, 108, 101, 110, 97, 109, 101, 46, 103, 109, 105, 99, > 44, 99, 104, 97, 114, 32, 45, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 32, 104, 116, 109, 108, 44, 105, 109, 103, 10, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 34, 97, 115, 99, 105, 105, 34, 125, > 44, 36, 123, 50, 61, 34, 34, 125, 44, 36, 123, 51, 61, 49, 125, 10, > 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 49, 10, 95, > 110, 97, 109, 101, 61, 64, 123, 48, 44, 98, 125, 10, 45, 105, 102, 32, > 123, 64, 35, 62, 49, 125, 32, 45, 105, 91, 49, 45, 45, 50, 93, 32, > 40, 49, 48, 41, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 121, > 32, 45, 109, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 115, 32, 45, > 44, 49, 48, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, 95, 36, 49, 91, 93, 32, > 36, 51, 10, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 61, 48, > 10, 95, 101, 120, 97, 109, 112, 108, 101, 61, 48, 10, 95, 99, 111, 109, > 109, 97, 110, 100, 61, 48, 10, 95, 112, 97, 116, 104, 61, 34, 36, 50, > 34, 10, 107, 115, 48, 61, 34, 48, 34, 32, 107, 115, 49, 61, 34, 45, > 107, 91, 48, 93, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 105, 102, 32, 123, 104, 62, 55, > 34, 32, 38, 38, 32, 34, 123, 64, 123, 45, 49, 44, 48, 45, 53, 125, > 39, 61, 61, 39, 123, 39, 34, 35, 64, 103, 109, 105, 99, 34, 39, 125, > 125, 34, 32, 38, 38, 32, 34, 40, 105, 91, 54, 93, 61, 61, 123, 39, > 34, 32, 34, 39, 125, 34, 32, 124, 124, 32, 34, 105, 91, 54, 93, 61, > 61, 123, 39, 58, 39, 125, 41, 125, 10, 45, 114, 111, 119, 115, 32, 55, > 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, > 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 123, 105, 33, 61, > 123, 39, 58, 39, 125, 125, 10, 95, 99, 111, 109, 109, 97, 110, 100, 61, > 123, 36, 95, 99, 111, 109, 109, 97, 110, 100, 43, 49, 125, 10, 45, 115, > 32, 45, 44, 123, 39, 34, 58, 32, 34, 39, 125, 32, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, > 99, 108, 97, 114, 97, 116, 105, 111, 110, 95, 36, 49, 10, 45, 101, 108, > 115, 101, 10, 45, 114, 111, 119, 115, 32, 49, 44, 49, 48, 48, 37, 10, > 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 58, 39, 125, 125, 10, 95, > 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 61, 123, 36, 95, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 43, 49, 125, 10, 45, 114, 111, 119, > 115, 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 95, 36, 49, 10, 45, 101, 108, 115, 101, 10, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, > 10, 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 36, 39, 125, 125, 10, > 95, 101, 120, 97, 109, 112, 108, 101, 61, 123, 36, 95, 101, 120, 97, 109, > 112, 108, 101, 43, 49, 125, 10, 45, 114, 111, 119, 115, 32, 49, 44, 49, > 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 123, 39, > 34, 32, 34, 39, 125, 10, 95, 102, 105, 108, 101, 110, 97, 109, 101, 61, > 36, 95, 112, 97, 116, 104, 36, 95, 110, 97, 109, 101, 36, 95, 101, 120, > 97, 109, 112, 108, 101, 46, 106, 112, 103, 10, 45, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, 108, > 101, 95, 36, 49, 10, 45, 101, 108, 115, 101, 10, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, > 105, 112, 116, 105, 111, 110, 95, 36, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 32, 36, 123, 107, 115, 123, 64, 35, 33, 61, 48, > 125, 125, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 114, 109, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, 36, 49, 91, 93, 32, 36, > 51, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, > 95, 104, 101, 97, 100, 101, 114, 95, 104, 116, 109, 108, 32, 58, 10, 45, > 105, 102, 32, 36, 49, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 34, 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 32, > 80, 85, 66, 76, 73, 67, 32, 92, 34, 45, 47, 47, 87, 51, 67, 47, > 47, 68, 84, 68, 32, 88, 72, 84, 77, 76, 32, 49, 46, 48, 32, 84, > 114, 97, 110, 115, 105, 116, 105, 111, 110, 97, 108, 47, 47, 69, 78, 92, > 34, 32, 92, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, > 51, 46, 111, 114, 103, 47, 84, 82, 47, 120, 104, 116, 109, 108, 49, 47, > 68, 84, 68, 47, 120, 104, 116, 109, 108, 49, 45, 116, 114, 97, 110, 115, > 105, 116, 105, 111, 110, 97, 108, 46, 100, 116, 100, 92, 34, 62, 10, 92, > 110, 60, 104, 101, 97, 100, 62, 10, 92, 110, 60, 115, 99, 114, 105, 112, > 116, 32, 116, 121, 112, 101, 61, 92, 34, 116, 101, 120, 116, 47, 106, 97, > 118, 97, 115, 99, 114, 105, 112, 116, 92, 34, 32, 115, 114, 99, 61, 92, > 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, 47, 104, 105, 103, 104, 115, > 108, 105, 100, 101, 46, 106, 115, 92, 34, 62, 60, 47, 115, 99, 114, 105, > 112, 116, 62, 10, 92, 110, 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, > 92, 34, 115, 116, 121, 108, 101, 115, 104, 101, 101, 116, 92, 34, 32, 116, > 121, 112, 101, 61, 92, 34, 116, 101, 120, 116, 47, 99, 115, 115, 92, 34, > 32, 104, 114, 101, 102, 61, 92, 34, 104, 105, 103, 104, 115, 108, 105, 100, > 101, 47, 104, 105, 103, 104, 115, 108, 105, 100, 101, 46, 99, 115, 115, 92, > 34, 32, 47, 62, 10, 92, 110, 60, 115, 99, 114, 105, 112, 116, 32, 116, > 121, 112, 101, 61, 92, 34, 116, 101, 120, 116, 47, 106, 97, 118, 97, 115, > 99, 114, 105, 112, 116, 92, 34, 62, 10, 92, 110, 104, 115, 46, 103, 114, > 97, 112, 104, 105, 99, 115, 68, 105, 114, 32, 61, 32, 39, 104, 105, 103, > 104, 115, 108, 105, 100, 101, 47, 103, 114, 97, 112, 104, 105, 99, 115, 47, > 39, 59, 10, 92, 110, 104, 115, 46, 119, 114, 97, 112, 112, 101, 114, 67, > 108, 97, 115, 115, 78, 97, 109, 101, 32, 61, 32, 39, 119, 105, 100, 101, > 45, 98, 111, 114, 100, 101, 114, 39, 59, 10, 92, 110, 60, 47, 115, 99, > 114, 105, 112, 116, 62, 10, 92, 110, 60, 47, 104, 101, 97, 100, 62, 10, > 92, 110, 60, 98, 111, 100, 121, 62, 10, 92, 110, 34, 10, 45, 118, 32, > 45, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 32, 34, 100, 111, 110, > 32, 58, 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 100, 101, 115, 99, 95, 111, 110, 95, 104, 116, 109, 108, 34, > 10, 45, 109, 32, 34, 100, 111, 102, 102, 32, 58, 32, 45, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, > 95, 111, 102, 102, 95, 104, 116, 109, 108, 34, 10, 45, 109, 32, 34, 101, > 111, 110, 32, 58, 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 95, 101, 120, 95, 111, 110, 95, 104, 116, 109, 108, 34, > 10, 45, 109, 32, 34, 101, 111, 102, 102, 32, 58, 32, 45, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 95, 111, > 102, 102, 95, 104, 116, 109, 108, 34, 10, 95, 105, 115, 95, 100, 101, 115, > 99, 61, 48, 10, 95, 105, 115, 95, 101, 120, 61, 48, 10, 95, 115, 104, > 111, 114, 116, 99, 117, 116, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 95, 111, 110, 95, > 104, 116, 109, 108, 32, 58, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, > 36, 95, 105, 115, 95, 100, 101, 115, 99, 10, 45, 117, 32, 34, 60, 98, > 114, 47, 62, 34, 10, 45, 101, 108, 115, 101, 10, 45, 117, 32, 34, 60, > 112, 32, 115, 116, 121, 108, 101, 61, 92, 34, 109, 97, 114, 103, 105, 110, > 45, 108, 101, 102, 116, 58, 49, 48, 48, 112, 120, 92, 34, 62, 60, 116, > 116, 62, 34, 10, 95, 105, 115, 95, 100, 101, 115, 99, 61, 49, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 95, 111, > 102, 102, 95, 104, 116, 109, 108, 32, 58, 10, 45, 118, 32, 45, 10, 45, > 105, 102, 32, 36, 95, 105, 115, 95, 100, 101, 115, 99, 10, 45, 117, 32, > 34, 60, 47, 116, 116, 62, 60, 47, 112, 62, 34, 10, 95, 105, 115, 95, > 100, 101, 115, 99, 61, 48, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, > 95, 111, 110, 95, 104, 116, 109, 108, 32, 58, 10, 45, 118, 32, 45, 10, > 45, 105, 102, 32, 36, 95, 105, 115, 95, 101, 120, 10, 45, 117, 32, 34, > 34, 10, 45, 101, 108, 115, 101, 10, 45, 117, 32, 34, 60, 98, 114, 47, > 62, 60, 116, 97, 98, 108, 101, 32, 115, 116, 121, 108, 101, 61, 92, 34, > 109, 97, 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 49, 48, 48, 112, > 120, 92, 34, 32, 119, 105, 100, 116, 104, 61, 92, 34, 55, 53, 37, 92, > 34, 32, 98, 103, 99, 111, 108, 111, 114, 61, 92, 34, 35, 69, 69, 69, > 69, 69, 69, 92, 34, 32, 98, 111, 114, 100, 101, 114, 99, 111, 108, 111, > 114, 61, 92, 34, 98, 108, 97, 99, 107, 92, 34, 32, 98, 111, 114, 100, > 101, 114, 61, 92, 34, 49, 92, 34, 32, 99, 101, 108, 108, 112, 97, 100, > 100, 105, 110, 103, 61, 92, 34, 52, 92, 34, 32, 99, 101, 108, 108, 115, > 112, 97, 99, 105, 110, 103, 61, 92, 34, 48, 92, 34, 62, 34, 92, 10, > 34, 60, 116, 114, 62, 60, 116, 100, 32, 99, 111, 108, 115, 112, 97, 110, > 61, 92, 34, 50, 92, 34, 32, 98, 103, 99, 111, 108, 111, 114, 61, 92, > 34, 35, 55, 55, 55, 55, 55, 55, 92, 34, 62, 60, 102, 111, 110, 116, > 32, 99, 111, 108, 111, 114, 61, 92, 34, 119, 104, 105, 116, 101, 92, 34, > 62, 60, 98, 62, 69, 120, 97, 109, 112, 108, 101, 40, 115, 41, 32, 111, > 102, 32, 117, 115, 101, 58, 60, 47, 98, 62, 60, 47, 102, 111, 110, 116, > 62, 60, 47, 116, 100, 62, 60, 47, 116, 114, 62, 34, 10, 95, 105, 115, > 95, 101, 120, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 43, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, > 95, 101, 120, 95, 111, 102, 102, 95, 104, 116, 109, 108, 32, 58, 10, 45, > 118, 32, 45, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 101, 120, 10, > 45, 117, 32, 34, 60, 47, 116, 97, 98, 108, 101, 62, 34, 10, 95, 105, > 115, 95, 101, 120, 61, 48, 10, 45, 101, 108, 115, 101, 10, 45, 117, 32, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 95, 104, 116, 109, 108, 32, 58, 10, > 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, > 102, 125, 64, 123, 45, 100, 111, 102, 102, 125, 34, 60, 98, 114, 47, 62, > 60, 104, 51, 62, 60, 97, 32, 105, 100, 61, 92, 34, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 34, 36, 95, 115, 117, 98, 115, 101, 99, 116, > 105, 111, 110, 34, 92, 34, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, > 111, 114, 61, 92, 34, 112, 117, 114, 112, 108, 101, 92, 34, 62, 42, 42, > 32, 60, 117, 62, 34, 64, 123, 48, 44, 116, 125, 34, 60, 47, 117, 62, > 60, 47, 102, 111, 110, 116, 62, 60, 47, 97, 62, 34, 92, 10, 34, 38, > 110, 98, 115, 112, 59, 38, 110, 98, 115, 112, 59, 60, 97, 32, 104, 114, > 101, 102, 61, 92, 34, 35, 116, 111, 99, 92, 34, 62, 60, 105, 109, 103, > 32, 115, 114, 99, 61, 92, 34, 105, 109, 103, 47, 98, 97, 99, 107, 95, > 116, 111, 112, 46, 112, 110, 103, 92, 34, 62, 60, 47, 105, 109, 103, 62, > 60, 47, 97, 62, 60, 47, 104, 51, 62, 34, 10, 45, 118, 32, 45, 10, > 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, > 101, 99, 108, 97, 114, 97, 116, 105, 111, 110, 95, 104, 116, 109, 108, 32, > 58, 10, 45, 105, 102, 32, 123, 123, 64, 123, 45, 49, 44, 116, 125, 39, > 61, 61, 39, 34, 40, 42, 41, 34, 125, 34, 32, 124, 124, 32, 34, 123, > 64, 123, 45, 49, 44, 116, 125, 39, 61, 61, 39, 34, 40, 43, 41, 34, > 125, 125, 32, 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 32, 34, > 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 101, 108, 115, 101, 32, 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, > 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 115, 49, 61, 34, 92, 110, > 34, 32, 115, 48, 61, 34, 32, 124, 60, 98, 114, 47, 62, 34, 10, 45, > 105, 102, 32, 123, 64, 35, 62, 49, 34, 32, 38, 38, 32, 34, 123, 64, > 123, 45, 49, 44, 48, 45, 54, 125, 39, 61, 61, 39, 123, 39, 34, 101, > 113, 46, 32, 116, 111, 32, 34, 39, 125, 125, 125, 10, 45, 114, 111, 119, > 115, 91, 45, 49, 93, 32, 55, 44, 49, 48, 48, 37, 32, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 46, 39, 125, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, > 39, 34, 32, 34, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 91, 45, 49, 93, 32, 51, 57, 10, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 64, 123, 48, 44, > 116, 125, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, 107, > 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 64, 123, 45, 49, 44, > 116, 125, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 113, 117, 97, 108, > 105, 102, 105, 101, 114, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, > 36, 113, 117, 97, 108, 105, 102, 105, 101, 114, 10, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 61, 123, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, > 43, 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, 118, 32, 43, 10, 45, > 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 64, 123, 45, 100, > 111, 102, 102, 125, 34, 60, 112, 32, 115, 116, 121, 108, 101, 61, 92, 34, > 109, 97, 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 50, 48, 112, 120, > 92, 34, 62, 60, 97, 32, 105, 100, 61, 92, 34, 34, 64, 123, 48, 44, > 116, 125, 34, 92, 34, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, > 114, 61, 92, 34, 103, 114, 101, 101, 110, 92, 34, 62, 38, 110, 98, 115, > 112, 59, 38, 110, 98, 115, 112, 59, 60, 98, 62, 45, 34, 64, 123, 48, > 44, 116, 125, 36, 113, 117, 97, 108, 105, 102, 105, 101, 114, 34, 60, 47, > 98, 62, 58, 60, 47, 102, 111, 110, 116, 62, 60, 47, 97, 62, 34, 10, > 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, 10, 45, 101, 91, 93, 32, > 34, 60, 112, 32, 115, 116, 121, 108, 101, 61, 92, 34, 109, 97, 114, 103, > 105, 110, 45, 108, 101, 102, 116, 58, 49, 53, 48, 112, 120, 92, 34, 62, > 60, 116, 116, 62, 60, 105, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, > 111, 114, 61, 92, 34, 112, 117, 114, 112, 108, 101, 92, 34, 62, 34, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, > 101, 91, 93, 32, 64, 123, 123, 49, 43, 36, 62, 125, 44, 116, 125, 36, > 123, 115, 123, 36, 60, 61, 61, 48, 125, 125, 10, 45, 100, 111, 110, 101, > 10, 45, 101, 91, 93, 32, 34, 60, 47, 102, 111, 110, 116, 62, 60, 47, > 105, 62, 60, 47, 116, 116, 62, 60, 47, 112, 62, 34, 10, 45, 101, 108, > 115, 101, 32, 45, 101, 91, 93, 32, 34, 34, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 95, 100, > 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, > 99, 114, 105, 112, 116, 105, 111, 110, 95, 104, 116, 109, 108, 32, 58, 10, > 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 45, 49, 50, 125, 39, > 61, 61, 39, 123, 39, 34, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 34, 39, 125, 125, 10, 45, 115, 32, 43, 44, 123, 39, 58, > 39, 125, 32, 45, 108, 91, 94, 48, 93, 32, 45, 97, 32, 121, 32, 45, > 101, 110, 100, 108, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 123, > 39, 58, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 123, > 39, 34, 32, 34, 39, 125, 10, 45, 118, 32, 43, 10, 45, 105, 102, 32, > 123, 64, 35, 62, 49, 125, 32, 45, 101, 91, 93, 32, 64, 123, 45, 100, > 111, 110, 125, 34, 60, 98, 114, 47, 62, 60, 98, 62, 34, 64, 123, 48, > 44, 116, 125, 34, 60, 47, 98, 62, 58, 32, 34, 64, 123, 45, 49, 44, > 116, 125, 10, 45, 101, 108, 115, 101, 32, 45, 101, 91, 93, 32, 64, 123, > 45, 100, 111, 110, 125, 34, 60, 98, 114, 47, 62, 34, 64, 123, 48, 44, > 116, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 10, 45, > 101, 108, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 45, 55, 125, 39, > 61, 61, 39, 123, 39, 34, 40, 101, 113, 46, 32, 116, 111, 32, 34, 39, > 125, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, > 100, 111, 110, 125, 34, 60, 105, 62, 60, 102, 111, 110, 116, 32, 99, 111, > 108, 111, 114, 61, 92, 34, 98, 108, 117, 101, 92, 34, 62, 34, 64, 123, > 45, 49, 44, 116, 125, 34, 60, 47, 102, 111, 110, 116, 62, 60, 47, 105, > 62, 34, 32, 45, 118, 32, 45, 10, 45, 101, 108, 115, 101, 10, 45, 105, > 102, 32, 123, 40, 105, 60, 123, 39, 65, 39, 125, 34, 32, 124, 124, 32, > 34, 105, 62, 123, 39, 90, 39, 125, 41, 34, 32, 38, 38, 32, 34, 105, > 33, 61, 52, 48, 34, 32, 38, 38, 32, 34, 105, 33, 61, 51, 57, 125, > 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, > 110, 125, 34, 38, 110, 98, 115, 112, 59, 34, 64, 123, 45, 49, 44, 116, > 125, 32, 45, 118, 32, 45, 10, 45, 101, 108, 115, 101, 32, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, 110, 125, 64, 123, > 45, 49, 44, 116, 125, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, 108, 101, 95, > 104, 116, 109, 108, 32, 58, 10, 45, 105, 102, 32, 36, 95, 102, 105, 108, > 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 10, 45, 109, 32, 34, > 102, 111, 111, 32, 58, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, > 108, 91, 93, 32, 45, 118, 32, 45, 57, 57, 32, 45, 114, 101, 115, 101, > 116, 32, 45, 102, 111, 111, 32, 45, 118, 32, 45, 49, 32, 45, 95, 100, > 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 45, 111, 32, > 36, 95, 102, 105, 108, 101, 110, 97, 109, 101, 44, 56, 53, 32, 45, 114, > 109, 32, 45, 101, 110, 100, 108, 10, 45, 117, 110, 99, 111, 109, 109, 97, > 110, 100, 32, 102, 111, 111, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 10, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 110, 125, 34, > 60, 116, 114, 62, 60, 116, 100, 32, 119, 105, 100, 116, 104, 61, 92, 34, > 52, 48, 92, 34, 62, 60, 100, 105, 118, 62, 60, 97, 32, 104, 114, 101, > 102, 61, 92, 34, 34, 36, 95, 102, 105, 108, 101, 110, 97, 109, 101, 34, > 92, 34, 32, 99, 108, 97, 115, 115, 61, 92, 34, 104, 105, 103, 104, 115, > 108, 105, 100, 101, 92, 34, 32, 111, 110, 99, 108, 105, 99, 107, 61, 92, > 34, 114, 101, 116, 117, 114, 110, 32, 104, 115, 46, 101, 120, 112, 97, 110, > 100, 40, 116, 104, 105, 115, 41, 92, 34, 62, 34, 92, 10, 34, 60, 102, > 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 98, 108, 117, 101, > 92, 34, 62, 40, 118, 105, 101, 119, 41, 60, 47, 102, 111, 110, 116, 62, > 60, 47, 97, 62, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 92, > 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, 45, 99, 97, 112, 116, 105, > 111, 110, 92, 34, 62, 34, 64, 123, 45, 49, 44, 116, 125, 34, 60, 47, > 100, 105, 118, 62, 60, 47, 100, 105, 118, 62, 60, 47, 116, 100, 62, 60, > 116, 100, 62, 60, 116, 116, 62, 34, 64, 123, 45, 49, 44, 116, 125, 34, > 60, 47, 116, 116, 62, 60, 47, 116, 100, 62, 60, 47, 116, 114, 62, 34, > 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, 104, 116, 109, 108, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, 10, 45, 105, 102, 32, > 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 10, 95, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 61, 123, 36, 95, 115, 117, 98, 115, 101, 99, > 116, 105, 111, 110, 43, 49, 125, 10, 40, 123, 39, 34, 67, 111, 109, 109, > 97, 110, 100, 115, 32, 115, 104, 111, 114, 116, 99, 117, 116, 115, 34, 39, > 125, 41, 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 95, 104, 116, > 109, 108, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 60, 112, 32, 115, 116, 121, > 108, 101, 61, 92, 34, 109, 97, 114, 103, 105, 110, 45, 108, 101, 102, 116, > 58, 50, 48, 112, 120, 92, 34, 62, 34, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 10, 45, 101, 91, > 93, 32, 34, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, > 34, 103, 114, 101, 101, 110, 92, 34, 62, 60, 98, 62, 38, 110, 98, 115, > 112, 59, 38, 110, 98, 115, 112, 59, 45, 34, 36, 123, 95, 115, 104, 111, > 114, 116, 99, 117, 116, 36, 62, 125, 34, 32, 34, 36, 123, 95, 115, 104, > 111, 114, 116, 99, 117, 116, 113, 117, 97, 108, 105, 102, 105, 101, 114, 36, > 62, 125, 34, 60, 47, 98, 62, 58, 60, 47, 102, 111, 110, 116, 62, 34, > 10, 45, 101, 91, 93, 32, 34, 60, 102, 111, 110, 116, 32, 99, 111, 108, > 111, 114, 61, 92, 34, 98, 108, 117, 101, 92, 34, 62, 60, 105, 62, 101, > 113, 46, 32, 116, 111, 32, 39, 34, 36, 123, 95, 115, 104, 111, 114, 116, > 99, 117, 116, 108, 105, 110, 107, 36, 62, 125, 34, 39, 60, 47, 105, 62, > 60, 47, 102, 111, 110, 116, 62, 60, 98, 114, 47, 62, 34, 10, 45, 100, > 111, 110, 101, 10, 45, 101, 91, 93, 32, 34, 60, 47, 112, 62, 34, 32, > 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, > 10, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 64, 123, > 45, 100, 111, 102, 102, 125, 34, 60, 112, 32, 115, 116, 121, 108, 101, 61, > 92, 34, 109, 97, 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 49, 48, > 48, 112, 120, 92, 34, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, > 114, 61, 92, 34, 98, 108, 117, 101, 92, 34, 62, 60, 98, 62, 91, 32, > 84, 111, 116, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 58, 32, 34, 36, 95, 99, 111, 109, > 109, 97, 110, 100, 34, 32, 93, 60, 47, 98, 62, 60, 47, 102, 111, 110, > 116, 62, 34, 10, 45, 118, 32, 45, 10, 45, 117, 110, 99, 111, 109, 109, > 97, 110, 100, 32, 100, 111, 110, 44, 100, 111, 102, 102, 44, 101, 111, 110, > 44, 101, 111, 102, 102, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, 95, 120, 109, 108, 32, > 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 118, 32, 43, 10, 45, 101, > 91, 93, 32, 34, 60, 63, 120, 109, 108, 32, 118, 101, 114, 115, 105, 111, > 110, 61, 92, 34, 49, 46, 48, 92, 34, 32, 101, 110, 99, 111, 100, 105, > 110, 103, 61, 92, 34, 85, 84, 70, 45, 56, 92, 34, 32, 115, 116, 97, > 110, 100, 97, 108, 111, 110, 101, 61, 92, 34, 121, 101, 115, 92, 34, 63, > 62, 10, 92, 110, 60, 63, 120, 109, 108, 45, 115, 116, 121, 108, 101, 115, > 104, 101, 101, 116, 32, 104, 114, 101, 102, 61, 92, 34, 103, 109, 105, 99, > 95, 100, 111, 99, 46, 120, 115, 108, 92, 34, 32, 116, 121, 112, 101, 61, > 92, 34, 116, 101, 120, 116, 47, 120, 115, 108, 92, 34, 63, 62, 34, 10, > 45, 118, 32, 45, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, > 10, 45, 101, 91, 93, 32, 34, 60, 103, 109, 105, 99, 45, 112, 97, 99, > 107, 97, 103, 101, 32, 120, 109, 108, 110, 115, 58, 120, 115, 105, 61, 92, > 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, > 114, 103, 47, 50, 48, 48, 49, 47, 88, 77, 76, 83, 99, 104, 101, 109, > 97, 45, 105, 110, 115, 116, 97, 110, 99, 101, 92, 34, 32, 120, 115, 105, > 58, 110, 111, 78, 97, 109, 101, 115, 112, 97, 99, 101, 83, 99, 104, 101, > 109, 97, 76, 111, 99, 97, 116, 105, 111, 110, 61, 92, 34, 103, 109, 105, > 99, 95, 100, 111, 99, 46, 120, 115, 100, 92, 34, 62, 10, 92, 110, 60, > 110, 97, 109, 101, 62, 34, 36, 95, 110, 97, 109, 101, 34, 60, 47, 110, > 97, 109, 101, 62, 10, 92, 110, 60, 115, 101, 99, 116, 105, 111, 110, 62, > 10, 92, 110, 32, 32, 60, 110, 97, 109, 101, 62, 76, 105, 115, 116, 32, > 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 115, 60, 47, 110, 97, 109, > 101, 62, 34, 10, 45, 118, 32, 45, 10, 45, 109, 32, 34, 100, 111, 110, > 32, 58, 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 100, 101, 115, 99, 95, 111, 110, 95, 120, 109, 108, 34, 10, > 45, 109, 32, 34, 100, 111, 102, 102, 32, 58, 32, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 95, > 111, 102, 102, 95, 120, 109, 108, 34, 10, 95, 105, 115, 95, 115, 117, 98, > 115, 101, 99, 116, 105, 111, 110, 61, 48, 10, 95, 105, 115, 95, 99, 111, > 109, 109, 97, 110, 100, 61, 48, 10, 95, 105, 115, 95, 100, 101, 115, 99, > 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, > 99, 95, 100, 101, 115, 99, 95, 111, 110, 95, 120, 109, 108, 32, 58, 10, > 45, 118, 32, 45, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 100, 101, > 115, 99, 10, 45, 117, 32, 34, 34, 10, 45, 101, 108, 115, 101, 10, 45, > 117, 32, 34, 32, 32, 32, 32, 60, 100, 101, 115, 99, 114, 105, 112, 116, > 105, 111, 110, 62, 92, 110, 34, 10, 95, 105, 115, 95, 100, 101, 115, 99, > 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, > 115, 99, 95, 111, 102, 102, 95, 120, 109, 108, 32, 58, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 100, 101, 115, 99, 10, > 45, 117, 32, 34, 32, 32, 32, 32, 60, 47, 100, 101, 115, 99, 114, 105, > 112, 116, 105, 111, 110, 62, 92, 110, 34, 10, 95, 105, 115, 95, 100, 101, > 115, 99, 61, 48, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, 34, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 95, 120, 109, 108, 32, 58, 10, 45, 118, 32, > 43, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 99, > 111, 109, 109, 97, 110, 100, 32, 45, 101, 91, 93, 32, 64, 123, 45, 100, > 111, 102, 102, 125, 34, 32, 32, 60, 47, 102, 117, 110, 99, 116, 105, 111, > 110, 62, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 91, 93, 32, > 64, 123, 45, 100, 111, 102, 102, 125, 34, 60, 47, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 62, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 60, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 62, 10, 92, 110, 32, 32, 60, 110, > 97, 109, 101, 62, 34, 64, 123, 48, 44, 116, 125, 34, 60, 47, 110, 97, > 109, 101, 62, 34, 10, 45, 118, 32, 45, 10, 95, 105, 115, 95, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 61, 49, 10, 95, 105, 115, 95, 99, > 111, 109, 109, 97, 110, 100, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 99, 108, 97, 114, 97, 116, > 105, 111, 110, 95, 120, 109, 108, 32, 58, 10, 45, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, > 101, 95, 120, 109, 108, 10, 45, 118, 32, 43, 10, 45, 105, 102, 32, 36, > 95, 105, 115, 95, 99, 111, 109, 109, 97, 110, 100, 32, 45, 101, 91, 93, > 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 32, 32, 60, 47, 102, 117, > 110, 99, 116, 105, 111, 110, 62, 34, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 32, 32, > 60, 102, 117, 110, 99, 116, 105, 111, 110, 62, 34, 10, 45, 118, 32, 45, > 10, 95, 105, 115, 95, 99, 111, 109, 109, 97, 110, 100, 61, 49, 10, 45, > 105, 102, 32, 123, 123, 64, 123, 45, 49, 44, 116, 125, 39, 61, 61, 39, > 34, 40, 42, 41, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 45, > 49, 44, 116, 125, 39, 61, 61, 39, 34, 40, 43, 41, 34, 125, 125, 32, > 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 32, 34, 64, 123, 45, > 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 108, > 115, 101, 32, 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 115, 49, 61, 34, 34, 32, 115, 48, 61, > 34, 32, 124, 34, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, > 32, 32, 32, 32, 60, 110, 97, 109, 101, 62, 34, 64, 123, 48, 44, 116, > 125, 34, 60, 47, 110, 97, 109, 101, 62, 34, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 49, 125, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, > 60, 97, 114, 103, 117, 109, 101, 110, 116, 115, 62, 34, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 101, 91, 93, > 32, 34, 32, 32, 32, 32, 32, 32, 34, 64, 123, 123, 49, 43, 36, 62, > 125, 44, 116, 125, 36, 123, 115, 123, 36, 60, 61, 61, 48, 125, 125, 10, > 45, 100, 111, 110, 101, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, > 60, 47, 97, 114, 103, 117, 109, 101, 110, 116, 115, 62, 34, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, > 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, 105, 112, > 116, 105, 111, 110, 95, 120, 109, 108, 32, 58, 10, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, > 99, 101, 95, 120, 109, 108, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, > 32, 64, 123, 45, 100, 111, 110, 125, 34, 32, 32, 32, 32, 32, 32, 34, > 64, 123, 48, 44, 116, 125, 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, > 108, 101, 95, 120, 109, 108, 32, 58, 10, 45, 95, 100, 111, 99, 117, 109, > 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, 101, > 95, 120, 109, 108, 10, 45, 105, 102, 32, 36, 95, 102, 105, 108, 101, 110, > 97, 109, 101, 32, 45, 101, 108, 115, 101, 10, 45, 109, 32, 34, 102, 111, > 111, 32, 58, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, 108, 91, > 93, 32, 45, 118, 32, 45, 57, 57, 32, 45, 114, 101, 115, 101, 116, 32, > 45, 102, 111, 111, 32, 45, 118, 32, 45, 49, 32, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 45, 111, 32, 36, 95, > 102, 105, 108, 101, 110, 97, 109, 101, 44, 56, 53, 32, 45, 114, 109, 32, > 45, 101, 110, 100, 108, 10, 45, 117, 110, 99, 111, 109, 109, 97, 110, 100, > 32, 102, 111, 111, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, > 10, 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 32, > 32, 32, 32, 60, 101, 120, 97, 109, 112, 108, 101, 62, 34, 10, 45, 101, > 91, 93, 32, 34, 32, 32, 32, 32, 32, 32, 60, 99, 111, 109, 109, 97, > 110, 100, 62, 34, 64, 123, 48, 44, 116, 125, 34, 60, 47, 99, 111, 109, > 109, 97, 110, 100, 62, 34, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, > 32, 32, 32, 60, 114, 101, 115, 117, 108, 116, 62, 34, 36, 95, 102, 105, > 108, 101, 110, 97, 109, 101, 34, 60, 47, 114, 101, 115, 117, 108, 116, 62, > 34, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 60, 47, 101, 120, > 97, 109, 112, 108, 101, 62, 34, 10, 45, 118, 32, 45, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 102, 111, 111, 116, > 101, 114, 95, 120, 109, 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 49, 10, 45, 118, 32, 43, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, > 99, 111, 109, 109, 97, 110, 100, 32, 45, 101, 91, 93, 32, 64, 123, 45, > 100, 111, 102, 102, 125, 34, 60, 47, 102, 117, 110, 99, 116, 105, 111, 110, > 62, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 95, > 105, 115, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 32, 45, 101, > 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 60, 47, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 62, 34, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, > 60, 47, 115, 101, 99, 116, 105, 111, 110, 62, 10, 92, 110, 60, 47, 103, > 109, 105, 99, 45, 112, 97, 99, 107, 97, 103, 101, 62, 34, 10, 45, 118, > 32, 45, 10, 45, 117, 110, 99, 111, 109, 109, 97, 110, 100, 32, 100, 111, > 110, 44, 100, 111, 102, 102, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, > 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, 101, 95, 120, 109, > 108, 32, 58, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 32, 34, 38, 34, 44, 34, 38, 97, 109, 112, 59, 34, 10, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 60, 34, 44, 34, 38, > 108, 116, 59, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, > 114, 32, 34, 62, 34, 44, 34, 38, 103, 116, 59, 34, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 104, 101, 97, 100, > 101, 114, 95, 108, 97, 116, 101, 120, 32, 58, 10, 45, 105, 102, 32, 36, > 49, 32, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, 92, 100, > 111, 99, 117, 109, 101, 110, 116, 99, 108, 97, 115, 115, 91, 97, 52, 112, > 97, 112, 101, 114, 44, 49, 48, 112, 116, 44, 116, 119, 111, 115, 105, 100, > 101, 93, 123, 98, 111, 111, 107, 125, 10, 92, 110, 92, 92, 117, 115, 101, > 112, 97, 99, 107, 97, 103, 101, 123, 104, 121, 112, 101, 114, 114, 101, 102, > 44, 102, 97, 110, 99, 121, 104, 100, 114, 44, 103, 114, 97, 112, 104, 105, > 99, 120, 44, 97, 109, 115, 115, 121, 109, 98, 44, 97, 109, 115, 109, 97, > 116, 104, 44, 116, 105, 109, 101, 115, 44, 109, 97, 107, 101, 105, 100, 120, > 125, 10, 92, 110, 92, 92, 103, 114, 97, 112, 104, 105, 99, 115, 112, 97, > 116, 104, 123, 123, 34, 36, 95, 112, 97, 116, 104, 34, 125, 125, 10, 92, > 110, 92, 92, 112, 97, 103, 101, 115, 116, 121, 108, 101, 123, 102, 97, 110, > 99, 121, 112, 108, 97, 105, 110, 125, 10, 92, 110, 92, 92, 108, 104, 101, > 97, 100, 91, 92, 92, 102, 97, 110, 99, 121, 112, 108, 97, 105, 110, 123, > 125, 123, 92, 92, 116, 101, 120, 116, 98, 102, 92, 92, 116, 104, 101, 112, > 97, 103, 101, 125, 93, 123, 92, 92, 102, 97, 110, 99, 121, 112, 108, 97, > 105, 110, 123, 125, 123, 92, 92, 114, 105, 103, 104, 116, 109, 97, 114, 107, > 125, 125, 10, 92, 110, 92, 92, 114, 104, 101, 97, 100, 91, 92, 92, 102, > 97, 110, 99, 121, 112, 108, 97, 105, 110, 123, 125, 123, 92, 92, 108, 101, > 102, 116, 109, 97, 114, 107, 125, 93, 123, 92, 92, 102, 97, 110, 99, 121, > 112, 108, 97, 105, 110, 123, 125, 123, 92, 92, 116, 101, 120, 116, 98, 102, > 92, 92, 116, 104, 101, 112, 97, 103, 101, 125, 125, 10, 92, 110, 92, 92, > 99, 102, 111, 111, 116, 123, 125, 10, 92, 110, 92, 92, 115, 101, 116, 108, > 101, 110, 103, 116, 104, 123, 92, 92, 116, 101, 120, 116, 119, 105, 100, 116, > 104, 125, 123, 53, 46, 56, 55, 53, 105, 110, 125, 10, 92, 110, 92, 92, > 115, 101, 116, 108, 101, 110, 103, 116, 104, 123, 92, 92, 112, 97, 114, 105, > 110, 100, 101, 110, 116, 125, 123, 48, 112, 99, 125, 10, 92, 110, 92, 92, > 115, 101, 116, 108, 101, 110, 103, 116, 104, 123, 92, 92, 104, 111, 102, 102, > 115, 101, 116, 125, 123, 45, 48, 46, 56, 99, 109, 125, 10, 92, 110, 92, > 92, 115, 101, 116, 99, 111, 117, 110, 116, 101, 114, 123, 116, 111, 99, 100, > 101, 112, 116, 104, 125, 123, 49, 125, 10, 92, 110, 92, 92, 115, 108, 111, > 112, 112, 121, 123, 125, 10, 92, 110, 92, 92, 114, 101, 110, 101, 119, 99, > 111, 109, 109, 97, 110, 100, 92, 92, 105, 110, 100, 101, 120, 110, 97, 109, > 101, 123, 73, 110, 100, 101, 120, 32, 111, 102, 32, 99, 111, 109, 109, 97, > 110, 100, 115, 125, 10, 92, 110, 92, 92, 109, 97, 107, 101, 105, 110, 100, > 101, 120, 10, 92, 110, 92, 92, 98, 101, 103, 105, 110, 123, 100, 111, 99, > 117, 109, 101, 110, 116, 125, 10, 92, 110, 92, 92, 116, 97, 98, 108, 101, > 111, 102, 99, 111, 110, 116, 101, 110, 116, 115, 34, 10, 45, 118, 32, 45, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 32, 45, 101, 91, > 93, 32, 34, 92, 110, 92, 92, 99, 104, 97, 112, 116, 101, 114, 123, 76, > 105, 115, 116, 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 115, 125, > 34, 32, 45, 118, 32, 45, 10, 45, 109, 32, 34, 101, 111, 110, 32, 58, > 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, > 95, 101, 120, 95, 111, 110, 95, 108, 97, 116, 101, 120, 34, 10, 45, 109, > 32, 34, 101, 111, 102, 102, 32, 58, 32, 45, 95, 100, 111, 99, 117, 109, > 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 95, 111, 102, 102, 95, > 108, 97, 116, 101, 120, 34, 10, 95, 105, 115, 95, 100, 101, 115, 99, 61, > 48, 10, 95, 105, 115, 95, 101, 120, 61, 48, 10, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, > 95, 103, 109, 105, 99, 95, 101, 120, 95, 111, 110, 95, 108, 97, 116, 101, > 120, 32, 58, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 36, 95, 105, > 115, 95, 101, 120, 10, 45, 117, 32, 34, 92, 92, 92, 92, 34, 10, 45, > 101, 108, 115, 101, 10, 45, 117, 32, 34, 92, 92, 98, 101, 103, 105, 110, > 123, 99, 101, 110, 116, 101, 114, 125, 34, 10, 95, 105, 115, 95, 101, 120, > 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, > 95, 111, 102, 102, 95, 108, 97, 116, 101, 120, 32, 58, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 101, 120, 10, 45, 117, > 32, 34, 92, 92, 101, 110, 100, 123, 99, 101, 110, 116, 101, 114, 125, 34, > 10, 95, 105, 115, 95, 101, 120, 61, 48, 10, 45, 101, 108, 115, 101, 10, > 45, 117, 32, 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 43, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, > 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 95, 108, 97, 116, 101, > 120, 32, 58, 10, 95, 105, 115, 95, 100, 101, 115, 99, 61, 48, 10, 45, > 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, > 101, 112, 108, 97, 99, 101, 95, 108, 97, 116, 101, 120, 10, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 34, > 92, 110, 92, 92, 115, 101, 99, 116, 105, 111, 110, 123, 34, 64, 123, 48, > 44, 116, 125, 34, 125, 34, 32, 45, 118, 32, 45, 10, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 99, 108, 97, > 114, 97, 116, 105, 111, 110, 95, 108, 97, 116, 101, 120, 32, 58, 10, 95, > 105, 115, 95, 100, 101, 115, 99, 61, 48, 10, 45, 105, 102, 32, 123, 123, > 64, 123, 45, 49, 44, 116, 125, 39, 61, 61, 39, 34, 40, 42, 41, 34, > 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 45, 49, 44, 116, 125, 39, > 61, 61, 39, 34, 40, 43, 41, 34, 125, 125, 32, 113, 117, 97, 108, 105, > 102, 105, 101, 114, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 101, 108, 115, 101, 32, 113, 117, 97, 108, 105, > 102, 105, 101, 114, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 101, > 49, 61, 34, 92, 92, 92, 92, 126, 92, 92, 92, 92, 34, 32, 101, 48, > 61, 34, 126, 126, 126, 36, 124, 36, 92, 92, 92, 92, 34, 10, 115, 49, > 61, 34, 92, 92, 104, 115, 112, 97, 99, 101, 42, 123, 50, 46, 50, 99, > 109, 125, 34, 32, 115, 48, 61, 34, 34, 10, 45, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, > 101, 95, 108, 97, 116, 101, 120, 10, 45, 105, 102, 32, 123, 64, 35, 62, > 49, 34, 32, 38, 38, 32, 34, 123, 64, 123, 45, 49, 44, 48, 45, 54, > 125, 39, 61, 61, 39, 123, 39, 34, 101, 113, 46, 32, 116, 111, 32, 34, > 39, 125, 125, 125, 10, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 55, > 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, > 45, 49, 93, 32, 123, 39, 46, 39, 125, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 34, 32, 34, 39, 125, 32, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 57, > 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 36, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 61, 64, 123, 48, 44, 116, 125, 10, 95, 115, 104, 111, > 114, 116, 99, 117, 116, 108, 105, 110, 107, 36, 95, 115, 104, 111, 114, 116, > 99, 117, 116, 61, 64, 123, 45, 49, 44, 116, 125, 10, 95, 115, 104, 111, > 114, 116, 99, 117, 116, 113, 117, 97, 108, 105, 102, 105, 101, 114, 36, 95, > 115, 104, 111, 114, 116, 99, 117, 116, 61, 36, 113, 117, 97, 108, 105, 102, > 105, 101, 114, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 123, 36, > 95, 115, 104, 111, 114, 116, 99, 117, 116, 43, 49, 125, 10, 45, 101, 108, > 115, 101, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 64, 123, 45, > 101, 111, 102, 102, 125, 34, 92, 110, 92, 110, 92, 92, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 123, 92, 92, 101, 109, 112, 104, 123, 45, 34, > 64, 123, 48, 44, 116, 125, 34, 92, 92, 105, 110, 100, 101, 120, 123, 45, > 34, 64, 123, 48, 44, 116, 125, 34, 125, 125, 32, 34, 36, 113, 117, 97, > 108, 105, 102, 105, 101, 114, 34, 125, 92, 92, 118, 115, 112, 97, 99, 101, > 42, 123, 45, 48, 46, 53, 101, 109, 125, 34, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 49, 125, 10, 45, 101, 91, 93, 32, 34, 126, 92, 92, 92, > 92, 92, 92, 116, 101, 120, 116, 98, 102, 123, 65, 114, 103, 117, 109, 101, > 110, 116, 115, 58, 32, 125, 32, 34, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 10, 45, 101, 91, 93, 32, 36, 123, 115, > 123, 36, 62, 33, 61, 48, 125, 125, 34, 123, 92, 92, 115, 109, 97, 108, > 108, 32, 92, 92, 116, 101, 120, 116, 116, 116, 123, 34, 64, 123, 123, 49, > 43, 36, 62, 125, 44, 116, 125, 34, 125, 125, 34, 36, 123, 101, 123, 36, > 60, 61, 61, 48, 125, 125, 10, 45, 100, 111, 110, 101, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, > 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, > 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 95, 108, 97, 116, 101, 120, > 32, 58, 10, 115, 48, 61, 34, 34, 32, 115, 49, 61, 34, 126, 92, 92, > 92, 92, 34, 32, 115, 61, 36, 123, 115, 36, 95, 105, 115, 95, 100, 101, > 115, 99, 125, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, 101, 95, 108, 97, 116, 101, > 120, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 45, 49, 50, > 125, 39, 61, 61, 39, 123, 39, 34, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 34, 39, 125, 125, 10, 45, 115, 32, 43, 44, 123, > 39, 58, 39, 125, 32, 45, 108, 91, 94, 48, 93, 32, 45, 97, 32, 121, > 32, 45, 101, 110, 100, 108, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 123, 39, 58, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 123, 64, 35, > 62, 49, 125, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 91, 49, 93, 32, 34, 32, 97, 110, 100, 32, 34, 44, 34, 125, 32, 97, > 110, 100, 32, 92, 92, 92, 92, 116, 101, 120, 116, 116, 116, 123, 34, 10, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, > 102, 125, 36, 115, 34, 126, 92, 92, 92, 92, 92, 92, 116, 101, 120, 116, > 98, 102, 123, 34, 64, 123, 48, 44, 116, 125, 34, 125, 58, 32, 123, 92, > 92, 115, 109, 97, 108, 108, 32, 92, 92, 116, 101, 120, 116, 116, 116, 123, > 34, 64, 123, 45, 49, 44, 116, 125, 34, 125, 125, 34, 32, 45, 118, 32, > 45, 10, 45, 101, 108, 115, 101, 32, 45, 118, 32, 43, 32, 45, 101, 91, > 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 36, 115, 34, 126, 92, 92, > 92, 92, 34, 64, 123, 48, 44, 116, 125, 32, 45, 118, 32, 45, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 45, > 49, 44, 48, 45, 55, 125, 39, 61, 61, 39, 123, 39, 34, 40, 101, 113, > 46, 32, 116, 111, 32, 34, 39, 125, 125, 10, 45, 114, 111, 119, 115, 91, > 45, 49, 93, 32, 56, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, > 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 46, 39, 125, 32, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 41, > 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 36, 115, 34, 40, 92, > 92, 101, 109, 112, 104, 123, 101, 113, 46, 32, 116, 111, 125, 32, 123, 92, > 92, 115, 109, 97, 108, 108, 32, 92, 92, 116, 101, 120, 116, 116, 116, 123, > 34, 64, 123, 45, 49, 44, 116, 125, 34, 125, 125, 41, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, 123, 40, > 105, 60, 123, 39, 65, 39, 125, 34, 32, 124, 124, 32, 34, 105, 62, 123, > 39, 90, 39, 125, 41, 34, 32, 38, 38, 32, 34, 105, 33, 61, 52, 48, > 34, 32, 38, 38, 32, 34, 105, 33, 61, 51, 57, 125, 32, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 64, > 123, 45, 49, 44, 116, 125, 32, 45, 118, 32, 45, 10, 45, 101, 108, 115, > 101, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 101, > 111, 102, 102, 125, 36, 115, 64, 123, 45, 49, 44, 116, 125, 32, 45, 118, > 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, > 10, 95, 105, 115, 95, 100, 101, 115, 99, 61, 49, 10, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, > 108, 101, 95, 108, 97, 116, 101, 120, 32, 58, 10, 95, 105, 115, 95, 100, > 101, 115, 99, 61, 48, 10, 45, 105, 102, 32, 36, 95, 102, 105, 108, 101, > 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 10, 45, 109, 32, 34, 102, > 111, 111, 32, 58, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, 108, > 91, 93, 32, 45, 118, 32, 45, 57, 57, 32, 45, 114, 101, 115, 101, 116, > 32, 45, 102, 111, 111, 32, 45, 118, 32, 45, 49, 32, 45, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 45, 111, 32, 36, > 95, 102, 105, 108, 101, 110, 97, 109, 101, 44, 56, 53, 32, 45, 114, 109, > 32, 45, 101, 110, 100, 108, 10, 45, 117, 110, 99, 111, 109, 109, 97, 110, > 100, 32, 102, 111, 111, 10, 45, 101, 110, 100, 105, 102, 10, 45, 95, 100, > 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, > 108, 97, 99, 101, 95, 108, 97, 116, 101, 120, 10, 45, 118, 32, 43, 10, > 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 110, 125, 34, 92, 92, 105, > 110, 99, 108, 117, 100, 101, 103, 114, 97, 112, 104, 105, 99, 115, 91, 107, > 101, 101, 112, 97, 115, 112, 101, 99, 116, 114, 97, 116, 105, 111, 61, 116, > 114, 117, 101, 44, 104, 101, 105, 103, 104, 116, 61, 55, 99, 109, 44, 119, > 105, 100, 116, 104, 61, 92, 92, 116, 101, 120, 116, 119, 105, 100, 116, 104, > 93, 123, 34, 36, 95, 102, 105, 108, 101, 110, 97, 109, 101, 34, 125, 92, > 92, 92, 92, 34, 10, 45, 101, 91, 93, 32, 34, 123, 92, 92, 102, 111, > 111, 116, 110, 111, 116, 101, 115, 105, 122, 101, 32, 92, 92, 116, 101, 120, > 116, 98, 102, 123, 69, 120, 97, 109, 112, 108, 101, 32, 34, 36, 95, 101, > 120, 97, 109, 112, 108, 101, 34, 126, 58, 125, 32, 92, 92, 116, 101, 120, > 116, 116, 116, 123, 34, 64, 123, 45, 49, 44, 116, 125, 34, 125, 125, 34, > 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, 108, 97, 116, 101, > 120, 32, 58, 10, 45, 105, 102, 32, 36, 95, 115, 104, 111, 114, 116, 99, > 117, 116, 10, 40, 123, 39, 34, 67, 111, 109, 109, 97, 110, 100, 115, 32, > 115, 104, 111, 114, 116, 99, 117, 116, 115, 34, 39, 125, 41, 32, 45, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 95, 108, 97, 116, 101, 120, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 118, 32, 43, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, 115, 104, 111, 114, 116, 99, > 117, 116, 10, 45, 101, 91, 93, 32, 34, 36, 92, 92, 98, 117, 108, 108, > 101, 116, 36, 126, 39, 92, 92, 116, 101, 120, 116, 116, 116, 123, 45, 34, > 36, 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 36, 62, 125, 34, 125, > 39, 32, 34, 36, 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 113, 117, > 97, 108, 105, 102, 105, 101, 114, 36, 62, 125, 34, 126, 105, 115, 32, 101, > 113, 117, 105, 118, 97, 108, 101, 110, 116, 32, 116, 111, 126, 126, 39, 92, > 92, 116, 101, 120, 116, 116, 116, 123, 34, 36, 123, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 108, 105, 110, 107, 36, 62, 125, 34, 125, 39, 46, 92, > 92, 92, 92, 34, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 45, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 49, 10, 45, 118, > 32, 43, 10, 45, 101, 91, 93, 32, 34, 10, 92, 110, 92, 92, 112, 114, > 105, 110, 116, 105, 110, 100, 101, 120, 10, 92, 110, 126, 92, 92, 92, 92, > 36, 92, 92, 115, 113, 117, 97, 114, 101, 36, 126, 69, 110, 100, 32, 111, > 102, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 10, 92, 110, 92, 110, > 92, 92, 101, 110, 100, 123, 100, 111, 99, 117, 109, 101, 110, 116, 125, 34, > 10, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 117, 110, > 99, 111, 109, 109, 97, 110, 100, 32, 101, 111, 110, 44, 101, 111, 102, 102, > 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, > 114, 101, 112, 108, 97, 99, 101, 95, 108, 97, 116, 101, 120, 32, 58, 10, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 92, 92, > 34, 44, 34, 92, 92, 92, 92, 116, 101, 120, 116, 98, 97, 99, 107, 115, > 108, 97, 115, 104, 32, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 115, 116, 114, 32, 34, 95, 34, 44, 34, 92, 92, 92, 92, 95, 34, 10, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 37, 34, > 44, 34, 92, 92, 92, 92, 37, 34, 10, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 34, 35, 34, 44, 34, 92, 92, 92, 92, 37, > 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, > 94, 34, 44, 34, 92, 92, 92, 92, 116, 101, 120, 116, 97, 115, 99, 105, > 105, 99, 105, 114, 99, 117, 109, 32, 34, 10, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 115, 116, 114, 32, 34, 36, 34, 44, 34, 92, 92, 92, 92, > 36, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, > 34, 92, 123, 34, 44, 34, 92, 92, 92, 92, 92, 123, 34, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 92, 125, 34, 44, > 34, 92, 92, 92, 92, 92, 125, 34, 10, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 34, 38, 34, 44, 34, 92, 92, 92, 92, 38, > 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, > 124, 34, 44, 34, 126, 36, 124, 36, 126, 34, 10, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 116, 114, 32, 34, 60, 34, 44, 34, 36, 92, 60, > 36, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, > 34, 62, 34, 44, 34, 36, 92, 62, 36, 34, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, > 95, 105, 109, 97, 103, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 49, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, 110, > 32, 45, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 101, 120, 97, 109, > 112, 108, 101, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, > 115, 101, 116, 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, > 39, 34, 36, 95, 110, 97, 109, 101, 34, 39, 46, 92, 110, 34, 10, 45, > 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 95, 105, 109, > 97, 103, 101, 115, 32, 58, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, > 32, 34, 92, 110, 32, 42, 42, 32, 83, 101, 99, 116, 105, 111, 110, 32, > 92, 35, 34, 36, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 34, > 58, 32, 34, 64, 123, 48, 44, 116, 125, 34, 46, 92, 110, 34, 10, 45, > 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 100, 101, 99, 108, 97, 114, 97, 116, 105, 111, 110, 95, 105, > 109, 97, 103, 101, 115, 32, 58, 32, 95, 99, 111, 109, 109, 97, 110, 100, > 95, 110, 97, 109, 101, 61, 64, 123, 48, 44, 116, 125, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, > 114, 105, 112, 116, 105, 111, 110, 95, 105, 109, 97, 103, 101, 115, 32, 58, > 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, > 101, 120, 97, 109, 112, 108, 101, 95, 105, 109, 97, 103, 101, 115, 32, 58, > 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, > 91, 34, 36, 95, 101, 120, 97, 109, 112, 108, 101, 34, 93, 32, 67, 111, > 109, 109, 97, 110, 100, 32, 39, 45, 34, 36, 95, 99, 111, 109, 109, 97, > 110, 100, 95, 110, 97, 109, 101, 34, 39, 58, 32, 36, 32, 34, 64, 123, > 45, 49, 44, 116, 125, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 36, > 95, 102, 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 10, > 45, 109, 32, 34, 102, 111, 111, 34, 36, 95, 101, 120, 97, 109, 112, 108, > 101, 34, 32, 58, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, 108, > 91, 93, 32, 45, 118, 32, 45, 49, 32, 45, 114, 101, 115, 101, 116, 32, > 45, 118, 32, 45, 57, 57, 32, 45, 102, 111, 111, 36, 95, 101, 120, 97, > 109, 112, 108, 101, 32, 45, 118, 32, 45, 49, 32, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 45, 111, 32, 36, 95, > 102, 105, 108, 101, 110, 97, 109, 101, 44, 56, 53, 32, 45, 114, 109, 32, > 45, 101, 110, 100, 108, 10, 45, 117, 110, 99, 111, 109, 109, 97, 110, 100, > 32, 102, 111, 111, 36, 95, 101, 120, 97, 109, 112, 108, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, 105, 109, 97, 103, 101, > 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, 10, 45, 118, 32, > 43, 10, 45, 101, 91, 93, 32, 34, 92, 110, 32, 45, 32, 91, 32, 65, > 108, 108, 32, 100, 111, 110, 101, 33, 32, 93, 92, 110, 92, 110, 34, 10, > 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, 95, 97, 115, 99, 105, 105, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, 10, 95, 115, 104, 111, > 114, 116, 99, 117, 116, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, 110, > 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, > 110, 95, 97, 115, 99, 105, 105, 32, 58, 10, 45, 118, 32, 43, 10, 45, > 101, 91, 93, 32, 34, 92, 110, 32, 42, 42, 32, 34, 64, 123, 48, 44, > 116, 125, 34, 58, 34, 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 99, 108, 97, 114, > 97, 116, 105, 111, 110, 95, 97, 115, 99, 105, 105, 32, 58, 10, 45, 105, > 102, 32, 123, 123, 64, 123, 45, 49, 44, 116, 125, 39, 61, 61, 39, 34, > 40, 42, 41, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 45, 49, > 44, 116, 125, 39, 61, 61, 39, 34, 40, 43, 41, 34, 125, 125, 32, 113, > 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 32, 34, 64, 123, 45, 49, > 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 108, 115, > 101, 32, 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 34, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 34, > 32, 38, 38, 32, 34, 123, 64, 123, 45, 49, 44, 48, 45, 54, 125, 39, > 61, 61, 39, 123, 39, 34, 101, 113, 46, 32, 116, 111, 32, 34, 39, 125, > 125, 125, 10, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 55, 44, 49, > 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, > 93, 32, 123, 39, 46, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 91, 45, 49, 93, 32, 123, 39, 34, 32, 34, 39, 125, 32, 45, 97, > 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 57, 10, 95, > 115, 104, 111, 114, 116, 99, 117, 116, 36, 95, 115, 104, 111, 114, 116, 99, > 117, 116, 61, 64, 123, 48, 44, 116, 125, 10, 95, 115, 104, 111, 114, 116, > 99, 117, 116, 108, 105, 110, 107, 36, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 61, 64, 123, 45, 49, 44, 116, 125, 10, 95, 115, 104, 111, 114, 116, > 99, 117, 116, 113, 117, 97, 108, 105, 102, 105, 101, 114, 36, 95, 115, 104, > 111, 114, 116, 99, 117, 116, 61, 36, 113, 117, 97, 108, 105, 102, 105, 101, > 114, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 123, 36, 95, 115, > 104, 111, 114, 116, 99, 117, 116, 43, 49, 125, 10, 45, 101, 108, 115, 101, > 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 32, 32, > 32, 32, 45, 34, 64, 123, 48, 44, 116, 125, 36, 123, 113, 117, 97, 108, > 105, 102, 105, 101, 114, 125, 34, 58, 34, 32, 45, 118, 32, 45, 32, 45, > 114, 109, 91, 48, 93, 10, 45, 105, 102, 32, 64, 35, 10, 115, 61, 34, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 34, 10, 45, 121, 32, 120, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 40, 123, > 39, 34, 32, 124, 34, 39, 125, 41, 32, 45, 97, 91, 36, 62, 44, 45, > 49, 93, 32, 120, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 95, 100, > 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 112, 108, > 105, 116, 95, 97, 115, 99, 105, 105, 32, 56, 48, 44, 48, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 40, 123, 39, > 92, 110, 36, 115, 34, 32, 32, 34, 39, 125, 41, 32, 45, 97, 91, 36, > 62, 44, 45, 49, 93, 32, 120, 32, 45, 100, 111, 110, 101, 10, 45, 97, > 32, 120, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 36, 115, 64, > 123, 48, 44, 116, 125, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 34, 32, 45, 118, 32, 45, 10, > 45, 101, 110, 100, 105, 102, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, > 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, > 110, 95, 97, 115, 99, 105, 105, 32, 58, 10, 115, 61, 34, 32, 32, 32, > 32, 32, 32, 32, 32, 34, 32, 98, 115, 48, 61, 34, 92, 110, 34, 32, > 98, 115, 49, 61, 34, 92, 92, 92, 92, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 34, 10, 45, 121, 32, 120, 32, 45, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 112, > 108, 105, 116, 95, 97, 115, 99, 105, 105, 32, 57, 54, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 40, 123, 39, 36, > 123, 98, 115, 36, 95, 105, 115, 95, 101, 120, 97, 109, 112, 108, 101, 125, > 36, 115, 34, 32, 32, 34, 39, 125, 41, 32, 45, 97, 91, 36, 62, 44, > 45, 49, 93, 32, 120, 32, 45, 100, 111, 110, 101, 32, 45, 97, 32, 120, > 10, 45, 118, 32, 43, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 101, 91, 93, 32, 36, 115, 64, 123, 36, 62, 44, 116, 125, 32, > 45, 118, 32, 45, 32, 45, 100, 111, 110, 101, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, 108, > 101, 95, 97, 115, 99, 105, 105, 32, 58, 10, 95, 100, 111, 99, 117, 109, > 101, 110, 116, 95, 103, 109, 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, > 97, 115, 99, 105, 105, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, > 10, 45, 105, 102, 32, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 10, > 40, 123, 39, 34, 67, 111, 109, 109, 97, 110, 100, 115, 32, 115, 104, 111, > 114, 116, 99, 117, 116, 115, 34, 39, 125, 41, 32, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 95, 97, 115, 99, 105, 105, 91, 45, 49, 93, 32, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 34, 32, 45, 118, 32, > 45, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 118, 32, 43, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 36, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 45, 34, 36, 123, > 95, 115, 104, 111, 114, 116, 99, 117, 116, 36, 62, 125, 34, 32, 34, 36, > 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 113, 117, 97, 108, 105, 102, > 105, 101, 114, 36, 62, 125, 34, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 34, 36, 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, > 107, 36, 62, 125, 34, 39, 46, 34, 10, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 32, > 45, 101, 91, 93, 32, 34, 92, 110, 32, 32, 32, 91, 32, 84, 111, 116, > 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 99, 111, 109, > 109, 97, 110, 100, 115, 58, 32, 34, 36, 95, 99, 111, 109, 109, 97, 110, > 100, 34, 32, 93, 34, 32, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 112, 108, 105, 116, 95, > 97, 115, 99, 105, 105, 32, 58, 10, 45, 100, 111, 32, 45, 105, 102, 32, > 123, 119, 62, 36, 49, 125, 10, 105, 61, 123, 36, 49, 45, 49, 125, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 47, 50, 125, 32, 45, > 105, 102, 32, 123, 67, 61, 105, 40, 36, 49, 45, 49, 45, 36, 62, 41, > 59, 67, 61, 61, 51, 50, 124, 124, 67, 61, 61, 51, 56, 124, 124, 67, > 61, 61, 52, 50, 124, 124, 67, 61, 61, 52, 51, 124, 124, 67, 61, 61, > 52, 52, 124, 124, 67, 61, 61, 52, 54, 124, 124, 67, 61, 61, 52, 55, > 124, 124, 67, 61, 61, 53, 56, 124, 124, 67, 61, 61, 53, 57, 124, 124, > 67, 61, 61, 54, 51, 124, 124, 67, 61, 61, 57, 50, 124, 124, 67, 61, > 61, 49, 50, 52, 125, 32, 105, 61, 123, 36, 49, 45, 49, 45, 36, 62, > 125, 32, 45, 98, 114, 101, 97, 107, 10, 45, 101, 110, 100, 105, 102, 32, > 45, 100, 111, 110, 101, 10, 45, 45, 122, 91, 45, 49, 93, 32, 123, 36, > 105, 43, 49, 125, 44, 49, 48, 48, 37, 32, 45, 122, 91, 45, 50, 93, > 32, 48, 44, 36, 105, 10, 45, 101, 110, 100, 105, 102, 32, 45, 119, 104, > 105, 108, 101, 32, 123, 119, 62, 36, 49, 125, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, > 95, 98, 97, 115, 104, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, > 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, 35, 10, 92, > 110, 92, 35, 32, 32, 66, 97, 115, 104, 32, 99, 111, 109, 112, 108, 101, > 116, 105, 111, 110, 32, 114, 117, 108, 101, 115, 32, 102, 111, 114, 32, 39, > 103, 109, 105, 99, 39, 46, 10, 92, 110, 92, 35, 10, 92, 110, 92, 35, > 32, 84, 104, 105, 115, 32, 102, 105, 108, 101, 32, 104, 97, 115, 32, 98, > 101, 101, 110, 32, 103, 101, 110, 101, 114, 97, 116, 101, 100, 32, 97, 117, > 116, 111, 109, 97, 116, 105, 99, 97, 108, 108, 121, 46, 10, 92, 110, 92, > 35, 32, 68, 111, 32, 110, 111, 116, 32, 101, 100, 105, 116, 33, 10, 92, > 110, 92, 35, 10, 92, 110, 92, 35, 32, 84, 104, 105, 115, 32, 102, 105, > 108, 101, 32, 115, 104, 111, 117, 108, 100, 32, 98, 101, 32, 99, 111, 112, > 105, 101, 100, 47, 114, 101, 110, 97, 109, 101, 100, 32, 105, 110, 32, 39, > 47, 101, 116, 99, 47, 98, 97, 115, 104, 95, 99, 111, 109, 112, 108, 101, > 116, 105, 111, 110, 46, 100, 47, 103, 109, 105, 99, 39, 46, 10, 92, 110, > 92, 35, 10, 92, 110, 10, 92, 110, 95, 34, 36, 95, 110, 97, 109, 101, > 34, 40, 41, 10, 92, 110, 123, 10, 92, 110, 92, 116, 108, 111, 99, 97, > 108, 32, 99, 117, 114, 32, 112, 114, 101, 118, 32, 111, 112, 116, 115, 32, > 99, 111, 109, 115, 10, 92, 110, 92, 116, 67, 79, 77, 80, 82, 69, 80, > 76, 89, 61, 40, 41, 10, 92, 110, 92, 116, 99, 117, 114, 61, 92, 34, > 36, 123, 67, 79, 77, 80, 95, 87, 79, 82, 68, 83, 91, 67, 79, 77, > 80, 95, 67, 87, 79, 82, 68, 93, 125, 92, 34, 10, 92, 110, 92, 116, > 112, 114, 101, 118, 61, 92, 34, 36, 123, 67, 79, 77, 80, 95, 87, 79, > 82, 68, 83, 91, 67, 79, 77, 80, 95, 67, 87, 79, 82, 68, 45, 49, > 93, 125, 92, 34, 10, 34, 10, 45, 118, 32, 45, 10, 95, 111, 112, 116, > 115, 61, 10, 95, 99, 111, 109, 115, 61, 10, 95, 97, 114, 103, 99, 111, > 109, 109, 97, 110, 100, 61, 48, 10, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 61, 48, 10, 95, 110, 98, 111, 112, 116, 115, 61, 48, 10, 95, 110, > 98, 99, 111, 109, 115, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, 110, > 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, > 110, 95, 98, 97, 115, 104, 32, 58, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, 105, 112, 116, > 105, 111, 110, 95, 98, 97, 115, 104, 32, 58, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, 108, > 101, 95, 98, 97, 115, 104, 32, 58, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 99, 108, 97, 114, 97, 116, > 105, 111, 110, 95, 98, 97, 115, 104, 32, 58, 10, 95, 111, 112, 116, 115, > 36, 95, 110, 98, 111, 112, 116, 115, 61, 45, 64, 123, 48, 44, 116, 125, > 34, 32, 34, 45, 45, 64, 123, 48, 44, 116, 125, 10, 95, 110, 98, 111, > 112, 116, 115, 61, 123, 36, 95, 110, 98, 111, 112, 116, 115, 43, 49, 125, > 10, 95, 99, 111, 109, 115, 36, 95, 110, 98, 99, 111, 109, 115, 61, 64, > 123, 48, 44, 116, 125, 10, 95, 110, 98, 99, 111, 109, 115, 61, 123, 36, > 95, 110, 98, 99, 111, 109, 115, 43, 49, 125, 10, 45, 105, 102, 32, 123, > 123, 64, 123, 48, 44, 116, 125, 39, 61, 61, 39, 34, 105, 110, 112, 117, > 116, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 48, 44, 116, 125, > 39, 61, 61, 39, 34, 105, 34, 125, 34, 32, 124, 124, 32, 34, 92, 10, > 123, 64, 123, 48, 44, 116, 125, 39, 61, 61, 39, 34, 111, 117, 116, 112, > 117, 116, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 48, 44, 116, > 125, 39, 61, 61, 39, 34, 111, 34, 125, 34, 32, 124, 124, 32, 34, 92, > 10, 123, 64, 123, 48, 44, 116, 125, 39, 61, 61, 39, 34, 99, 111, 109, > 109, 97, 110, 100, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 48, > 44, 116, 125, 39, 61, 61, 39, 34, 109, 34, 125, 125, 32, 45, 114, 101, > 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 123, 64, 123, 36, > 60, 44, 116, 125, 39, 61, 61, 39, 34, 40, 42, 41, 34, 125, 124, 124, > 123, 64, 123, 36, 60, 44, 116, 125, 39, 61, 61, 39, 34, 40, 43, 41, > 34, 125, 125, 32, 45, 114, 109, 91, 36, 60, 93, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 64, 35, > 61, 61, 50, 34, 32, 38, 38, 32, 34, 123, 64, 123, 45, 49, 44, 48, > 45, 54, 125, 39, 61, 61, 39, 123, 39, 34, 101, 113, 46, 32, 116, 111, > 32, 34, 39, 125, 125, 125, 10, 45, 114, 111, 119, 115, 91, 45, 49, 93, > 32, 55, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 91, 45, 49, 93, 32, 123, 39, 46, 39, 125, 32, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 34, 32, 34, 39, > 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, > 51, 57, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 123, 39, 45, 39, 125, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, > 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 64, 123, 48, 44, 116, > 125, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, 107, 36, > 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 64, 123, 45, 115, 116, 114, > 50, 104, 101, 120, 92, 32, 64, 123, 49, 44, 116, 125, 125, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, > 123, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 43, 49, 125, 10, 45, > 101, 108, 105, 102, 32, 123, 64, 35, 62, 49, 125, 10, 95, 99, 111, 109, > 109, 97, 110, 100, 36, 95, 97, 114, 103, 99, 111, 109, 109, 97, 110, 100, > 61, 64, 123, 48, 44, 116, 125, 10, 45, 105, 102, 32, 123, 64, 123, 48, > 44, 116, 125, 39, 61, 61, 39, 34, 104, 101, 108, 112, 34, 125, 32, 95, > 97, 114, 103, 117, 109, 101, 110, 116, 36, 95, 97, 114, 103, 99, 111, 109, > 109, 97, 110, 100, 61, 34, 36, 99, 111, 109, 115, 92, 34, 32, 45, 45, > 32, 92, 34, 36, 99, 117, 114, 34, 10, 45, 101, 108, 115, 101, 10, 45, > 105, 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 40, 123, 39, 62, 39, > 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 105, 115, 99, 97, > 114, 100, 91, 94, 48, 93, 32, 123, 39, 34, 32, 34, 39, 125, 32, 45, > 105, 91, 50, 45, 45, 50, 93, 32, 40, 123, 39, 34, 32, 34, 39, 125, > 41, 32, 45, 97, 91, 94, 48, 93, 32, 121, 10, 95, 97, 114, 103, 117, > 109, 101, 110, 116, 36, 95, 97, 114, 103, 99, 111, 109, 109, 97, 110, 100, > 61, 64, 123, 49, 44, 116, 125, 10, 45, 101, 110, 100, 105, 102, 10, 95, > 97, 114, 103, 117, 109, 101, 110, 116, 108, 105, 110, 107, 64, 123, 45, 115, > 116, 114, 50, 104, 101, 120, 92, 32, 64, 123, 48, 44, 116, 125, 125, 61, > 36, 123, 95, 97, 114, 103, 117, 109, 101, 110, 116, 36, 95, 97, 114, 103, > 99, 111, 109, 109, 97, 110, 100, 125, 10, 95, 97, 114, 103, 99, 111, 109, > 109, 97, 110, 100, 61, 123, 36, 95, 97, 114, 103, 99, 111, 109, 109, 97, > 110, 100, 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 102, 111, 111, 116, > 101, 114, 95, 98, 97, 115, 104, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 49, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, 116, > 111, 112, 116, 115, 61, 92, 34, 92, 92, 34, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 95, 110, 98, 111, 112, 116, 115, 32, 45, 101, 91, 93, > 32, 34, 92, 116, 32, 32, 32, 32, 32, 32, 34, 36, 123, 95, 111, 112, > 116, 115, 36, 62, 125, 92, 92, 32, 45, 100, 111, 110, 101, 32, 45, 101, > 91, 93, 32, 34, 92, 116, 32, 32, 32, 32, 32, 92, 34, 34, 10, 45, > 101, 91, 93, 32, 34, 92, 110, 92, 116, 99, 111, 109, 115, 61, 92, 34, > 92, 92, 34, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, 110, 98, > 99, 111, 109, 115, 32, 45, 101, 91, 93, 32, 34, 92, 116, 32, 32, 32, > 32, 32, 32, 34, 36, 123, 95, 99, 111, 109, 115, 36, 62, 125, 92, 92, > 32, 45, 100, 111, 110, 101, 32, 45, 101, 91, 93, 32, 34, 92, 116, 32, > 32, 32, 32, 32, 92, 34, 34, 10, 45, 101, 91, 93, 32, 34, 92, 110, > 92, 116, 99, 97, 115, 101, 32, 92, 34, 36, 123, 112, 114, 101, 118, 125, > 92, 34, 32, 105, 110, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 95, 97, 114, 103, 99, 111, 109, 109, 97, 110, 100, 10, 45, 101, 91, 93, > 32, 34, 92, 116, 92, 116, 92, 34, 45, 34, 36, 123, 95, 99, 111, 109, > 109, 97, 110, 100, 36, 62, 125, 34, 92, 34, 32, 124, 32, 92, 34, 45, > 45, 34, 36, 123, 95, 99, 111, 109, 109, 97, 110, 100, 36, 62, 125, 34, > 92, 34, 41, 34, 10, 45, 101, 91, 93, 32, 34, 92, 116, 92, 116, 67, > 79, 77, 80, 82, 69, 80, 76, 89, 61, 40, 32, 36, 40, 99, 111, 109, > 112, 103, 101, 110, 32, 45, 87, 32, 92, 34, 34, 36, 123, 95, 97, 114, > 103, 117, 109, 101, 110, 116, 36, 62, 125, 34, 92, 34, 41, 32, 41, 92, > 110, 92, 116, 92, 116, 114, 101, 116, 117, 114, 110, 32, 48, 92, 110, 92, > 116, 92, 116, 59, 59, 34, 10, 45, 100, 111, 110, 101, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 10, > 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 123, 95, 97, 114, 103, > 117, 109, 101, 110, 116, 108, 105, 110, 107, 36, 123, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 108, 105, 110, 107, 36, 62, 125, 125, 41, 125, 10, 45, > 101, 91, 93, 32, 34, 92, 116, 92, 116, 92, 34, 45, 34, 36, 123, 95, > 115, 104, 111, 114, 116, 99, 117, 116, 36, 62, 125, 34, 92, 34, 32, 124, > 32, 92, 34, 45, 45, 34, 36, 123, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 36, 62, 125, 34, 92, 34, 41, 34, 10, 45, 101, 91, 93, 32, 34, > 92, 116, 92, 116, 67, 79, 77, 80, 82, 69, 80, 76, 89, 61, 40, 32, > 36, 40, 99, 111, 109, 112, 103, 101, 110, 32, 45, 87, 32, 92, 34, 34, > 36, 123, 95, 97, 114, 103, 117, 109, 101, 110, 116, 108, 105, 110, 107, 36, > 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, 107, 36, 62, > 125, 125, 34, 92, 34, 41, 32, 41, 92, 110, 92, 116, 92, 116, 114, 101, > 116, 117, 114, 110, 32, 48, 92, 110, 92, 116, 92, 116, 59, 59, 34, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 101, 91, > 93, 32, 34, 92, 116, 101, 115, 97, 99, 34, 10, 45, 101, 91, 93, 32, > 34, 92, 110, 92, 116, 105, 102, 32, 91, 91, 32, 92, 34, 36, 99, 117, > 114, 92, 34, 32, 61, 61, 32, 45, 42, 32, 93, 93, 32, 59, 32, 116, > 104, 101, 110, 10, 92, 110, 92, 116, 92, 116, 67, 79, 77, 80, 82, 69, > 80, 76, 89, 61, 40, 32, 36, 40, 99, 111, 109, 112, 103, 101, 110, 32, > 45, 87, 32, 92, 34, 36, 111, 112, 116, 115, 92, 34, 32, 45, 45, 32, > 92, 34, 36, 99, 117, 114, 92, 34, 41, 32, 41, 10, 92, 110, 92, 116, > 101, 108, 115, 101, 10, 92, 110, 92, 116, 92, 116, 95, 102, 105, 108, 101, > 100, 105, 114, 10, 92, 110, 92, 116, 102, 105, 10, 92, 110, 10, 92, 110, > 125, 10, 92, 110, 10, 99, 111, 109, 112, 108, 101, 116, 101, 32, 45, 70, > 32, 95, 34, 36, 95, 110, 97, 109, 101, 34, 32, 45, 111, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 115, 32, 103, 109, 105, 99, 34, 10, 45, 118, > 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, > 99, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 87, 36, 62, 61, 123, 119, 125, 32, 72, 36, > 62, 61, 123, 104, 125, 32, 68, 36, 62, 61, 123, 100, 125, 32, 83, 36, > 62, 61, 123, 115, 125, 32, 73, 83, 95, 51, 68, 36, 62, 61, 64, 123, > 45, 105, 115, 95, 51, 100, 125, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, > 51, 100, 125, 32, 45, 114, 51, 100, 32, 49, 44, 49, 44, 48, 44, 45, > 56, 48, 32, 45, 114, 51, 100, 32, 48, 44, 49, 44, 48, 44, 56, 48, > 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, 51, 100, 32, 52, 48, 48, > 32, 45, 101, 108, 115, 101, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, > 115, 32, 44, 32, 45, 105, 102, 32, 123, 119, 62, 57, 48, 48, 125, 32, > 114, 61, 123, 114, 111, 117, 110, 100, 40, 57, 48, 48, 42, 49, 48, 48, > 47, 119, 44, 48, 46, 49, 41, 125, 32, 45, 114, 91, 94, 45, 49, 93, > 32, 36, 114, 37, 44, 36, 114, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 50, 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 105, 102, 32, 123, 115, 61, 61, 49, 125, 32, 45, 114, > 32, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, 51, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 32, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, > 51, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 119, 60, 61, 104, 38, 38, 104, 60, 50, 53, 54, 125, 32, 45, 114, 50, > 100, 121, 32, 50, 53, 54, 44, 50, 32, 45, 101, 108, 105, 102, 32, 123, > 104, 60, 61, 119, 38, 38, 119, 60, 50, 53, 54, 125, 32, 45, 114, 50, > 100, 120, 32, 50, 53, 54, 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 119, 60, 61, 104, 38, 38, 104, 62, 53, 49, 50, > 125, 32, 45, 114, 50, 100, 121, 32, 53, 49, 50, 44, 50, 32, 45, 101, > 108, 105, 102, 32, 123, 104, 60, 61, 119, 38, 38, 119, 62, 53, 49, 50, > 125, 32, 45, 114, 50, 100, 120, 32, 53, 49, 50, 44, 50, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 104, 60, 52, 56, 125, 32, > 45, 114, 32, 49, 48, 48, 37, 44, 52, 56, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 119, 60, 52, 56, 125, 32, 45, 114, 32, > 52, 56, 44, 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, > 109, 101, 32, 52, 44, 52, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 78, 61, 64, 35, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 78, 32, 45, 108, 91, 36, 62, 93, 10, 123, 119, > 125, 44, 49, 54, 44, 49, 44, 51, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 123, 119, 62, 55, 53, 125, 10, 45, 105, 102, 32, 123, 36, 78, 62, > 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 49, 49, 48, 125, 32, 45, > 116, 91, 45, 49, 93, 32, 73, 109, 97, 103, 101, 92, 32, 91, 36, 62, > 93, 58, 44, 51, 44, 51, 44, 49, 53, 32, 45, 101, 108, 115, 101, 32, > 45, 116, 91, 45, 49, 93, 32, 91, 36, 62, 93, 58, 44, 51, 44, 51, > 44, 49, 53, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 123, 73, 83, 95, 51, 68, 36, 62, 125, > 32, 48, 32, 45, 116, 91, 45, 49, 93, 32, 40, 51, 100, 92, 32, 111, > 98, 106, 101, 99, 116, 41, 44, 48, 44, 48, 44, 49, 51, 44, 49, 44, > 50, 53, 53, 10, 45, 101, 108, 115, 101, 32, 48, 32, 45, 116, 91, 45, > 49, 93, 32, 40, 36, 123, 87, 36, 62, 125, 120, 36, 123, 72, 36, 62, > 125, 120, 36, 123, 68, 36, 62, 125, 120, 36, 123, 83, 36, 62, 125, 41, > 44, 48, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, > 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 54, 52, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 45, 49, 93, 10, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 123, 64, 123, 45, 50, 44, 119, 125, 45, 119, 45, 53, 125, 44, 123, 64, > 123, 45, 50, 44, 104, 125, 45, 104, 45, 49, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 116, 91, 45, 49, 93, > 32, 91, 36, 62, 93, 58, 44, 51, 44, 51, 44, 49, 53, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 45, 32, 50, 53, 53, 32, 45, > 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 44, 32, 45, > 43, 32, 50, 53, 53, 10, 45, 105, 102, 32, 123, 119, 60, 50, 53, 54, > 125, 32, 45, 45, 32, 50, 53, 53, 32, 45, 114, 32, 50, 53, 54, 44, > 49, 48, 48, 37, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, > 44, 48, 46, 53, 32, 45, 43, 32, 50, 53, 53, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 104, 60, 50, 53, 54, 125, 32, 45, > 45, 32, 50, 53, 53, 32, 45, 114, 32, 49, 48, 48, 37, 44, 50, 53, > 54, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 32, 45, 43, 32, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, > 35, 64, 103, 109, 105, 99, 32, 101, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 101, 99, 104, 111, 39, 46, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 99, 104, 111, 32, 58, 32, 109, > 101, 115, 115, 97, 103, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 109, 101, 115, 115, 97, 103, 101, 44, 32, > 111, 110, 32, 116, 104, 101, 32, 101, 114, 114, 111, 114, 32, 111, 117, 116, > 112, 117, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 101, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 109, 97, 110, 100, 32, 115, 117, > 98, 115, 101, 116, 32, 40, 105, 102, 32, 97, 110, 121, 41, 32, 115, 116, > 97, 110, 100, 115, 32, 102, 111, 114, 32, 100, 105, 115, 112, 108, 97, 121, > 101, 100, 32, 115, 99, 111, 112, 101, 32, 105, 110, 100, 105, 99, 101, 115, > 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 32, 105, 110, 100, 105, 99, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 101, 99, 104, 111, 95, 102, 105, 108, 101, 32, 58, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 44, 109, 101, 115, 115, 97, 103, 101, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 109, 101, 115, 115, 97, 103, 101, > 44, 32, 97, 112, 112, 101, 110, 100, 105, 110, 103, 32, 105, 116, 32, 116, > 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 111, 117, 116, 112, > 117, 116, 32, 102, 105, 108, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 115, 105, 109, 105, 108, 97, 114, 32, 116, 111, 32, 39, 45, > 101, 99, 104, 111, 39, 32, 102, 111, 114, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 111, 117, 116, 112, 117, 116, 32, 102, 105, 108, 101, 32, > 115, 116, 114, 101, 97, 109, 41, 46, 10, 101, 99, 104, 111, 95, 102, 105, > 108, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, > 39, 92, 110, 39, 125, 34, 10, 45, 118, 32, 45, 32, 40, 123, 34, 39, > 36, 123, 50, 45, 45, 49, 125, 92, 110, 39, 34, 125, 41, 32, 45, 111, > 91, 45, 49, 93, 32, 114, 97, 119, 58, 36, 49, 44, 99, 104, 97, 114, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 101, 99, 104, 111, 95, 115, 116, 100, 111, 117, 116, > 32, 58, 32, 109, 101, 115, 115, 97, 103, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 109, 101, 115, 115, 97, 103, 101, 44, 32, 111, 110, > 32, 116, 104, 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 111, 117, > 116, 112, 117, 116, 32, 40, 115, 116, 100, 111, 117, 116, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 105, 109, 105, 108, 97, 114, > 32, 116, 111, 32, 39, 45, 101, 99, 104, 111, 39, 32, 102, 111, 114, 32, > 111, 117, 116, 112, 117, 116, 32, 111, 110, 32, 115, 116, 97, 110, 100, 97, > 114, 100, 32, 111, 117, 116, 112, 117, 116, 32, 105, 110, 115, 116, 101, 97, > 100, 32, 111, 102, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 101, 114, > 114, 111, 114, 41, 46, 10, 101, 99, 104, 111, 95, 115, 116, 100, 111, 117, > 116, 32, 58, 10, 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 42, 34, > 92, 110, 39, 125, 41, 32, 45, 111, 91, 45, 49, 93, 32, 45, 46, 114, > 97, 119, 44, 99, 104, 97, 114, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 117, 110, 99, > 116, 105, 111, 110, 49, 100, 32, 58, 32, 48, 60, 61, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 60, 61, 49, 44, 120, 48, 62, 61, 48, 44, > 121, 48, 44, 120, 49, 62, 61, 48, 44, 121, 49, 44, 46, 46, 46, 44, > 120, 110, 62, 61, 48, 44, 121, 110, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 110, 112, 117, 116, 32, 99, 111, 110, 116, 105, 110, 117, 111, > 117, 115, 32, 49, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 102, > 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 108, 105, > 115, 116, 32, 111, 102, 32, 107, 101, 121, 112, 111, 105, 110, 116, 115, 32, > 40, 120, 107, 44, 121, 107, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 109, 97, 120, > 40, 120, 107, 41, 93, 32, 40, 120, 107, 32, 97, 114, 101, 32, 112, 111, > 115, 105, 116, 105, 118, 101, 32, 105, 110, 116, 101, 103, 101, 114, 115, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 61, 49, 39, 32, 97, 110, 100, 32, 39, 120, > 48, 61, 121, 48, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, > 49, 44, 48, 44, 48, 44, 49, 48, 44, 51, 48, 44, 52, 48, 44, 50, > 48, 44, 55, 48, 44, 51, 48, 44, 56, 48, 44, 48, 32, 45, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, > 44, 51, 48, 48, 10, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 49, 60, 61, 49, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, > 32, 99, 111, 110, 116, 105, 110, 117, 111, 117, 115, 32, 49, 100, 32, 102, > 117, 110, 99, 116, 105, 111, 110, 44, 32, 119, 105, 116, 104, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 32, 97, 110, 100, 32, > 107, 101, 121, 112, 111, 105, 110, 116, 115, 32, 40, 36, 123, 50, 45, 45, > 49, 125, 41, 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, > 36, 35, 60, 53, 125, 32, 123, 109, 97, 120, 40, 48, 44, 36, 50, 41, > 43, 49, 125, 44, 49, 44, 49, 44, 49, 44, 36, 51, 32, 45, 118, 32, > 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 40, 36, 123, 50, 45, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 50, 44, 123, 119, 47, 50, 125, 44, 49, 44, 49, 44, 45, 49, > 32, 45, 115, 111, 114, 116, 91, 45, 49, 93, 32, 43, 44, 121, 32, 45, > 115, 91, 45, 49, 93, 32, 120, 44, 50, 32, 45, 114, 111, 117, 110, 100, > 91, 45, 50, 93, 32, 49, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, > 32, 120, 10, 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 48, > 44, 49, 44, 48, 44, 48, 44, 49, 32, 45, 45, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 10, 45, > 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, 48, 44, 45, 49, 44, > 48, 44, 48, 44, 49, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 51, > 93, 10, 45, 45, 42, 91, 45, 50, 93, 32, 123, 36, 49, 47, 50, 125, > 32, 45, 45, 42, 91, 45, 50, 93, 32, 123, 49, 45, 36, 49, 47, 50, > 125, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 42, 91, 45, > 51, 93, 32, 123, 49, 45, 36, 49, 47, 50, 125, 32, 45, 42, 91, 45, > 50, 93, 32, 123, 36, 49, 47, 50, 125, 32, 45, 43, 91, 45, 51, 44, > 45, 50, 93, 10, 45, 115, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, > 45, 43, 91, 45, 52, 44, 45, 50, 93, 32, 49, 101, 45, 49, 48, 10, > 45, 47, 91, 45, 51, 93, 32, 91, 45, 52, 93, 32, 45, 47, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 52, 44, 45, > 50, 93, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, 10, 123, > 64, 123, 45, 49, 44, 40, 48, 44, 123, 104, 45, 49, 125, 41, 125, 43, > 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 123, 45, 50, > 44, 104, 125, 45, 49, 125, 10, 120, 115, 116, 97, 114, 116, 61, 123, 105, > 102, 40, 36, 62, 44, 64, 123, 45, 50, 44, 48, 125, 44, 48, 41, 125, > 10, 45, 95, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, 64, 123, > 45, 50, 44, 48, 45, 49, 125, 44, 64, 123, 45, 50, 44, 51, 125, 44, > 64, 123, 45, 50, 44, 52, 45, 54, 125, 44, 36, 120, 115, 116, 97, 114, > 116, 44, 64, 123, 45, 50, 44, 52, 125, 32, 45, 106, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 36, 120, 115, 116, 97, 114, 116, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, > 32, 48, 44, 45, 49, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 45, 50, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 34, 91, 49, 100, > 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40, 36, 123, 50, 45, 45, > 49, 125, 41, 93, 34, 10, 45, 118, 32, 43, 10, 95, 102, 117, 110, 99, > 116, 105, 111, 110, 49, 100, 32, 58, 10, 40, 123, 36, 49, 94, 51, 125, > 44, 123, 36, 49, 94, 50, 125, 44, 36, 49, 44, 49, 59, 92, 10, 123, > 51, 42, 36, 49, 94, 50, 125, 44, 123, 50, 42, 36, 49, 125, 44, 49, > 44, 48, 59, 92, 10, 123, 36, 52, 94, 51, 125, 44, 123, 36, 52, 94, > 50, 125, 44, 36, 52, 44, 49, 59, 92, 10, 123, 51, 42, 36, 52, 94, > 50, 125, 44, 123, 50, 42, 36, 52, 125, 44, 49, 44, 48, 41, 10, 40, > 36, 50, 59, 36, 51, 59, 36, 53, 59, 36, 54, 41, 32, 45, 115, 111, > 108, 118, 101, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, > 91, 45, 50, 93, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, > 45, 49, 93, 10, 40, 36, 55, 44, 36, 56, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 123, 49, 43, 36, 56, 45, 36, 55, 125, 44, 49, 44, 49, > 44, 49, 44, 51, 32, 45, 45, 94, 91, 45, 49, 93, 32, 51, 32, 45, > 45, 94, 91, 45, 50, 93, 32, 50, 32, 45, 45, 102, 91, 45, 49, 93, > 32, 49, 32, 45, 109, 118, 91, 45, 52, 93, 32, 45, 49, 32, 45, 97, > 91, 45, 52, 45, 45, 49, 93, 32, 121, 10, 45, 42, 42, 91, 45, 50, > 44, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 103, 109, 105, 99, > 107, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 111, 97, 100, > 32, 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, > 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 109, 97, 115, 99, 111, 116, > 32, 39, 71, 109, 105, 99, 107, 121, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 103, 109, 105, 99, 107, 121, 10, 103, 109, > 105, 99, 107, 121, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 76, 111, 97, 100, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, > 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 109, 97, 115, 99, 111, 116, > 32, 39, 71, 109, 105, 99, 107, 121, 39, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, > 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, > 105, 109, 103, 47, 103, 109, 105, 99, 107, 121, 95, 108, 97, 114, 103, 101, > 46, 99, 105, 109, 103, 122, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 103, 109, 105, 99, 107, 121, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 103, 109, 105, 99, 107, 121, 95, 119, 105, 108, 98, 101, > 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 111, 97, 100, 32, > 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, > 104, 101, 32, 71, 39, 77, 73, 67, 32, 109, 97, 115, 99, 111, 116, 32, > 39, 71, 109, 105, 99, 107, 121, 39, 32, 116, 111, 103, 101, 116, 104, 101, > 114, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 32, 109, 97, 115, 99, > 111, 116, 32, 39, 87, 105, 108, 98, 101, 114, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 45, 103, 109, 105, 99, 107, 121, 95, > 119, 105, 108, 98, 101, 114, 10, 103, 109, 105, 99, 107, 121, 95, 119, 105, > 108, 98, 101, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 76, 111, 97, 100, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, > 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 109, 97, 115, 99, 111, 116, > 32, 39, 71, 109, 105, 99, 107, 121, 39, 32, 116, 111, 103, 101, 116, 104, > 101, 114, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 32, 109, 97, 115, > 99, 111, 116, 32, 39, 87, 105, 108, 98, 101, 114, 39, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, > 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, > 101, 116, 47, 105, 109, 103, 47, 103, 109, 105, 99, 107, 121, 95, 119, 105, > 108, 98, 101, 114, 95, 108, 97, 114, 103, 101, 46, 99, 105, 109, 103, 122, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 103, 109, 105, 99, 107, 121, > 95, 119, 105, 108, 98, 101, 114, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 104, 101, 97, 114, 116, 32, 58, 32, 95, 119, 105, > 100, 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 104, > 101, 97, 114, 116, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 104, 101, 97, 114, 116, 32, 44, 10, 104, 101, 97, 114, 116, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, 49, > 50, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, > 62, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 36, 49, 120, 36, 50, 32, 104, 101, 97, 114, 116, 32, > 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 108, 91, 93, 10, 50, 48, 52, 56, 44, 49, 44, 49, > 44, 49, 44, 39, 116, 61, 50, 42, 112, 105, 42, 120, 47, 119, 59, 49, > 54, 42, 115, 105, 110, 40, 116, 41, 94, 51, 39, 10, 50, 48, 52, 56, > 44, 49, 44, 49, 44, 49, 44, 39, 116, 61, 50, 42, 112, 105, 42, 120, > 47, 119, 59, 49, 51, 42, 99, 111, 115, 40, 116, 41, 45, 53, 42, 99, > 111, 115, 40, 50, 42, 116, 41, 45, 50, 42, 99, 111, 115, 40, 51, 42, > 116, 41, 45, 99, 111, 115, 40, 52, 42, 116, 41, 39, 10, 45, 97, 32, > 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 112, 97, 114, 97, 109, > 101, 116, 114, 105, 99, 32, 36, 49, 44, 36, 50, 44, 49, 44, 48, 44, > 48, 44, 48, 10, 45, 102, 108, 111, 111, 100, 32, 53, 48, 37, 44, 53, > 48, 37, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 32, 45, 101, 113, > 91, 45, 49, 93, 32, 48, 10, 45, 110, 109, 32, 34, 91, 72, 101, 97, > 114, 116, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, 93, 34, > 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 105, 110, 112, 117, 116, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 105, 110, 112, 117, 116, 32, 58, 32, 91, 116, 121, > 112, 101, 58, 93, 102, 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 91, > 116, 121, 112, 101, 58, 93, 104, 116, 116, 112, 58, 47, 47, 85, 82, 76, > 32, 58, 32, 91, 115, 101, 108, 101, 99, 116, 105, 111, 110, 93, 120, 95, > 110, 98, 95, 99, 111, 112, 105, 101, 115, 62, 48, 32, 58, 32, 123, 32, > 119, 105, 100, 116, 104, 62, 48, 91, 37, 93, 32, 124, 32, 91, 105, 109, > 97, 103, 101, 95, 119, 93, 32, 125, 44, 123, 32, 95, 104, 101, 105, 103, > 104, 116, 62, 48, 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, > 95, 104, 93, 32, 125, 44, 123, 32, 95, 100, 101, 112, 116, 104, 62, 48, > 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, 95, 100, 93, 32, > 125, 44, 123, 32, 95, 115, 112, 101, 99, 116, 114, 117, 109, 62, 48, 91, > 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, 95, 115, 93, 32, 125, > 44, 95, 123, 32, 118, 97, 108, 117, 101, 49, 44, 95, 118, 97, 108, 117, > 101, 50, 44, 46, 46, 32, 124, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 32, 125, 32, 58, 32, 40, 118, 97, 108, 117, 101, 49, 123, 44, 124, > 59, 124, 47, 124, 94, 125, 118, 97, 108, 117, 101, 50, 123, 44, 124, 59, > 124, 47, 124, 94, 125, 46, 46, 41, 32, 58, 32, 48, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 115, 101, > 114, 116, 32, 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, 116, > 97, 107, 101, 110, 32, 102, 114, 111, 109, 32, 97, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 32, 111, 114, 32, 102, 114, 111, 109, 32, 97, 32, 99, > 111, 112, 121, 32, 111, 102, 32, 97, 110, 32, 101, 120, 105, 115, 116, 105, > 110, 103, 32, 105, 109, 97, 103, 101, 32, 91, 39, 105, 110, 100, 105, 99, > 101, 39, 93, 44, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 111, > 114, 32, 105, 110, 115, 101, 114, 116, 32, 110, 101, 119, 32, 105, 109, 97, > 103, 101, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, 97, 110, 100, > 32, 118, 97, 108, 117, 101, 115, 46, 32, 83, 105, 110, 103, 108, 101, 32, > 113, 117, 111, 116, 101, 115, 32, 109, 97, 121, 32, 98, 101, 32, 111, 109, > 105, 116, 116, 101, 100, 32, 105, 110, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 46, 32, 83, 112, 101, > 99, 105, 102, 121, 105, 110, 103, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 32, 39, 48, 39, 32, 105, 110, 115, 101, 114, 116, 115, 32, 97, 110, 32, > 39, 101, 109, 112, 116, 121, 39, 32, 105, 109, 97, 103, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 105, 39, 32, 124, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, > 99, 111, 112, 105, 101, 115, 61, 49, 39, 44, 32, 39, 104, 101, 105, 103, > 104, 116, 61, 100, 101, 112, 116, 104, 61, 115, 112, 101, 99, 116, 114, 117, > 109, 61, 49, 39, 32, 97, 110, 100, 32, 39, 118, 97, 108, 117, 101, 49, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 105, 110, 112, 117, 116, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 105, 32, 40, > 49, 44, 50, 44, 51, 59, 52, 44, 53, 44, 54, 59, 55, 44, 56, 44, > 57, 94, 57, 44, 56, 44, 55, 59, 54, 44, 53, 44, 52, 59, 51, 44, > 50, 44, 49, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 40, 49, 44, 50, 44, 51, > 59, 52, 44, 53, 44, 54, 59, 55, 44, 56, 44, 57, 41, 32, 40, 50, > 53, 53, 94, 49, 50, 56, 94, 54, 52, 41, 32, 52, 48, 48, 44, 52, > 48, 48, 44, 49, 44, 51, 44, 39, 105, 102, 40, 120, 62, 119, 47, 50, > 44, 120, 44, 121, 41, 42, 99, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 111, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, 117, 116, > 112, 117, 116, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 111, 117, 116, 112, 117, 116, 32, 58, 32, 91, 116, 121, 112, > 101, 58, 93, 102, 105, 108, 101, 110, 97, 109, 101, 44, 95, 102, 111, 114, > 109, 97, 116, 95, 111, 112, 116, 105, 111, 110, 115, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, > 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 97, 115, 32, 111, 110, 101, 32, 111, 114, 32, 115, 101, 118, 101, > 114, 97, 108, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 102, 105, 108, > 101, 40, 115, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 102, 111, 114, 109, 97, 116, 95, 111, 112, > 116, 105, 111, 110, 115, 39, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, > 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 111, 117, 116, 112, 117, > 116, 95, 103, 103, 114, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 44, 95, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 97, 109, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 115, 32, 71, 73, 77, 80, 32, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 102, 105, 108, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 102, 32, 110, 111, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 110, 97, 109, 101, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 44, 32, 105, 116, 32, 105, 115, 32, 100, 101, 100, 117, 99, 101, 100, > 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 105, 108, 101, 110, 97, > 109, 101, 46, 10, 111, 117, 116, 112, 117, 116, 95, 103, 103, 114, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, 125, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 79, 117, 116, 112, 117, 116, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 97, 115, 32, 71, 73, 77, 80, 32, 103, > 114, 97, 100, 105, 101, 110, 116, 32, 102, 105, 108, 101, 32, 39, 36, 49, > 39, 46, 34, 10, 45, 118, 32, 45, 32, 78, 61, 64, 35, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 78, 32, 45, 45, 108, 91, 36, 62, 93, > 32, 45, 114, 32, 49, 44, 123, 119, 42, 104, 42, 100, 125, 44, 49, 44, > 49, 48, 48, 37, 44, 45, 49, 32, 45, 116, 111, 95, 114, 103, 98, 97, > 32, 45, 47, 32, 50, 53, 53, 10, 45, 105, 102, 32, 123, 110, 97, 114, > 103, 40, 34, 36, 50, 34, 41, 125, 32, 110, 97, 109, 101, 61, 34, 36, > 50, 34, 10, 45, 101, 108, 115, 101, 32, 45, 108, 91, 93, 32, 49, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 34, 36, 49, 34, 32, 40, 123, 39, > 64, 123, 45, 49, 44, 98, 125, 39, 125, 41, 32, 45, 102, 32, 34, 105, > 102, 40, 120, 61, 61, 48, 38, 38, 105, 62, 61, 34, 123, 39, 97, 39, > 125, 34, 38, 38, 105, 60, 61, 34, 123, 39, 122, 39, 125, 34, 44, 105, > 45, 34, 123, 39, 97, 39, 125, 34, 43, 34, 123, 39, 65, 39, 125, 34, > 44, 105, 41, 34, 32, 110, 97, 109, 101, 61, 64, 123, 45, 49, 44, 116, > 125, 32, 45, 114, 109, 32, 45, 101, 110, 100, 108, 10, 45, 101, 110, 100, > 105, 102, 10, 40, 123, 39, 34, 71, 73, 77, 80, 32, 71, 114, 97, 100, > 105, 101, 110, 116, 92, 110, 78, 97, 109, 101, 58, 32, 34, 36, 110, 97, > 109, 101, 92, 110, 64, 123, 48, 44, 104, 125, 92, 110, 39, 125, 41, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, 44, 104, 125, 10, 115, > 116, 97, 114, 116, 61, 123, 95, 36, 62, 47, 64, 123, 48, 44, 104, 125, > 125, 10, 101, 110, 100, 61, 123, 95, 40, 36, 62, 43, 49, 41, 47, 64, > 123, 48, 44, 104, 125, 125, 10, 109, 105, 100, 61, 123, 95, 48, 46, 53, > 42, 40, 36, 115, 116, 97, 114, 116, 43, 36, 101, 110, 100, 41, 125, 10, > 114, 103, 98, 97, 61, 64, 123, 45, 97, 116, 91, 48, 93, 92, 32, 48, > 44, 36, 62, 125, 10, 114, 61, 123, 97, 114, 103, 40, 49, 44, 36, 114, > 103, 98, 97, 41, 125, 32, 103, 61, 123, 97, 114, 103, 40, 50, 44, 36, > 114, 103, 98, 97, 41, 125, 32, 98, 61, 123, 97, 114, 103, 40, 51, 44, > 36, 114, 103, 98, 97, 41, 125, 32, 97, 61, 123, 97, 114, 103, 40, 52, > 44, 36, 114, 103, 98, 97, 41, 125, 10, 40, 123, 39, 36, 115, 116, 97, > 114, 116, 34, 32, 34, 36, 109, 105, 100, 34, 32, 34, 36, 101, 110, 100, > 34, 32, 34, 36, 114, 34, 32, 34, 36, 103, 34, 32, 34, 36, 98, 34, > 32, 34, 36, 97, 34, 32, 34, 36, 114, 34, 32, 34, 36, 103, 34, 32, > 34, 36, 98, 34, 32, 34, 36, 97, 34, 32, 48, 32, 48, 92, 110, 34, > 39, 125, 41, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 93, > 32, 45, 97, 32, 120, 10, 45, 105, 102, 32, 123, 36, 78, 62, 49, 125, > 32, 45, 111, 32, 114, 97, 119, 58, 64, 123, 34, 45, 102, 105, 108, 101, > 110, 97, 109, 101, 32, 92, 34, 36, 49, 92, 34, 44, 36, 62, 34, 125, > 44, 99, 104, 97, 114, 32, 45, 101, 108, 115, 101, 32, 45, 111, 32, 114, > 97, 119, 58, 34, 36, 49, 34, 44, 99, 104, 97, 114, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 109, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 111, 110, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, 117, > 116, 112, 117, 116, 110, 39, 46, 10, 111, 110, 32, 58, 10, 45, 118, 32, > 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, > 45, 95, 111, 117, 116, 112, 117, 116, 110, 32, 36, 42, 10, 35, 64, 103, > 109, 105, 99, 32, 111, 117, 116, 112, 117, 116, 110, 32, 58, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 79, 117, 116, 112, 117, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 97, 117, 116, 111, 109, 97, > 116, 105, 99, 97, 108, 108, 121, 32, 110, 117, 109, 98, 101, 114, 101, 100, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 115, 32, 105, 110, 32, 114, 101, > 112, 101, 97, 116, 46, 46, 100, 111, 110, 101, 32, 108, 111, 111, 112, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 111, 110, 39, 41, 46, 10, 111, 117, 116, 112, 117, > 116, 110, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, > 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, > 95, 111, 117, 116, 112, 117, 116, 110, 32, 58, 10, 45, 118, 32, 45, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 102, 105, 108, 101, > 110, 97, 109, 101, 92, 32, 34, 36, 49, 34, 44, 64, 123, 62, 125, 125, > 32, 45, 118, 32, 43, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 79, 117, 116, 112, 117, 116, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, > 115, 34, 32, 97, 115, 32, 102, 105, 108, 101, 32, 39, 34, 36, 102, 105, > 108, 101, 110, 97, 109, 101, 34, 39, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 111, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 112, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 111, 117, 116, 112, 117, 116, 112, 39, 46, > 10, 111, 112, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, > 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 111, 117, 116, 112, 117, > 116, 112, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 111, 117, 116, > 112, 117, 116, 112, 32, 58, 32, 112, 114, 101, 102, 105, 120, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, > 32, 112, 114, 101, 102, 105, 120, 101, 100, 32, 118, 101, 114, 115, 105, 111, > 110, 115, 32, 111, 102, 32, 116, 104, 101, 105, 114, 32, 111, 114, 105, 103, > 105, 110, 97, 108, 32, 102, 105, 108, 101, 110, 97, 109, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 111, 112, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 112, 114, 101, 102, 105, 120, 61, 95, 39, 46, 10, 111, 117, 116, > 112, 117, 116, 112, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, > 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, > 42, 10, 95, 111, 117, 116, 112, 117, 116, 112, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 34, 95, 34, 125, 10, 45, 105, 102, 32, > 123, 64, 35, 62, 49, 125, 32, 45, 101, 91, 48, 45, 45, 52, 93, 32, > 34, 79, 117, 116, 112, 117, 116, 32, 105, 109, 97, 103, 101, 34, 36, 95, > 95, 115, 34, 32, 97, 115, 32, 116, 104, 101, 105, 114, 32, 105, 110, 105, > 116, 105, 97, 108, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 44, 32, > 112, 114, 101, 102, 105, 120, 101, 100, 32, 98, 121, 32, 39, 36, 49, 39, > 46, 34, 10, 45, 101, 108, 115, 101, 32, 45, 101, 91, 48, 45, 45, 52, > 93, 32, 34, 79, 117, 116, 112, 117, 116, 32, 105, 109, 97, 103, 101, 34, > 36, 95, 95, 115, 34, 32, 97, 115, 32, 105, 116, 115, 32, 105, 110, 105, > 116, 105, 97, 108, 32, 108, 111, 99, 97, 116, 105, 111, 110, 44, 32, 112, > 114, 101, 102, 105, 120, 101, 100, 32, 98, 121, 32, 39, 36, 49, 39, 46, > 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 111, 91, 36, 62, 93, 32, > 64, 123, 36, 62, 44, 102, 125, 36, 49, 64, 123, 36, 62, 44, 98, 125, > 46, 64, 123, 36, 62, 44, 120, 125, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 119, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, 117, 116, 112, 117, 116, 119, > 39, 46, 10, 111, 119, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, > 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 111, 117, 116, > 112, 117, 116, 119, 10, 35, 64, 103, 109, 105, 99, 32, 111, 117, 116, 112, > 117, 116, 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, > 112, 117, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 111, 118, 101, 114, 119, 114, 105, 116, 116, > 105, 110, 103, 32, 116, 104, 101, 105, 114, 32, 111, 114, 105, 103, 105, 110, > 97, 108, 32, 108, 111, 99, 97, 116, 105, 111, 110, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 111, 119, 39, 41, 46, 10, 111, 117, 116, 112, 117, 116, 119, 32, 58, 10, > 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, > 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, 111, 117, 116, 112, > 117, 116, 119, 32, 58, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, > 32, 45, 101, 91, 48, 45, 45, 52, 93, 32, 34, 79, 117, 116, 112, 117, > 116, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 97, 115, > 32, 116, 104, 101, 105, 114, 32, 105, 110, 105, 116, 105, 97, 108, 32, 108, > 111, 99, 97, 116, 105, 111, 110, 46, 34, 10, 45, 101, 108, 115, 101, 32, > 45, 101, 91, 48, 45, 45, 52, 93, 32, 34, 79, 117, 116, 112, 117, 116, > 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 97, 115, 32, > 105, 116, 115, 32, 105, 110, 105, 116, 105, 97, 108, 32, 108, 111, 99, 97, > 116, 105, 111, 110, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 111, > 91, 36, 62, 93, 32, 64, 123, 36, 62, 44, 110, 125, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, > 108, 111, 116, 32, 58, 32, 95, 112, 108, 111, 116, 95, 116, 121, 112, 101, > 44, 95, 118, 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, 44, 95, 120, > 109, 105, 110, 44, 95, 120, 109, 97, 120, 44, 95, 121, 109, 105, 110, 44, > 95, 121, 109, 97, 120, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 44, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 62, 61, 48, > 44, 95, 112, 108, 111, 116, 95, 116, 121, 112, 101, 44, 95, 118, 101, 114, > 116, 101, 120, 95, 116, 121, 112, 101, 44, 95, 120, 109, 105, 110, 44, 120, > 109, 97, 120, 44, 95, 121, 109, 105, 110, 44, 95, 121, 109, 97, 120, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 105, 115, 112, 108, 97, 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 32, 111, 114, 32, 102, 111, 114, 109, 117, 108, 97, > 32, 105, 110, 32, 97, 110, 32, 105, 110, 116, 101, 114, 97, 99, 116, 105, > 118, 101, 32, 118, 105, 101, 119, 101, 114, 32, 40, 117, 115, 101, 32, 116, > 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, > 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, 112, 101, 110, 101, 100, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 108, 111, 116, > 95, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 108, 105, 110, 101, 115, > 32, 124, 32, 50, 61, 115, 112, 108, 105, 110, 101, 115, 32, 124, 32, 51, > 61, 98, 97, 114, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 118, 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, > 32, 49, 61, 112, 111, 105, 110, 116, 115, 32, 124, 32, 50, 44, 51, 61, > 99, 114, 111, 115, 115, 101, 115, 32, 124, 32, 52, 44, 53, 61, 99, 105, > 114, 99, 108, 101, 115, 32, 124, 32, 54, 44, 55, 61, 115, 113, 117, 97, > 114, 101, 115, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 120, 109, 105, 110, 39, 44, 39, 120, 109, 97, 120, 39, 44, 39, 121, > 109, 105, 110, 39, 44, 39, 121, 109, 97, 120, 39, 32, 115, 101, 116, 32, > 116, 104, 101, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 32, > 111, 102, 32, 116, 104, 101, 32, 100, 105, 115, 112, 108, 97, 121, 101, 100, > 32, 120, 121, 45, 97, 120, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 112, 108, 111, 116, 95, 116, 121, 112, 101, 61, 49, 39, > 44, 32, 39, 118, 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, 61, 49, > 39, 32, 97, 110, 100, 32, 39, 120, 109, 105, 110, 61, 120, 109, 97, 120, > 61, 121, 109, 105, 110, 61, 121, 109, 97, 120, 61, 48, 32, 40, 97, 117, > 116, 111, 41, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 112, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 112, 114, 105, 110, 116, 39, > 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 112, > 114, 105, 110, 116, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 105, 110, 102, 111, 114, > 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 111, 110, 32, 116, 104, > 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 101, 114, 114, 111, 114, > 32, 40, 115, 116, 100, 101, 114, 114, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 112, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 114, 97, 105, 110, 98, 111, > 119, 95, 108, 117, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 110, 112, 117, 116, 32, 97, 32, 50, 53, 54, 45, 101, 110, 116, 114, 105, > 101, 115, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, > 111, 102, 32, 114, 97, 105, 110, 98, 111, 119, 32, 99, 111, 108, 111, 114, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 97, 105, 110, 98, 111, 119, > 95, 108, 117, 116, 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, > 91, 45, 50, 93, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 10, 114, 97, 105, 110, 98, 111, 119, 95, 108, 117, 116, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 82, 71, 66, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 111, 102, 32, > 50, 53, 54, 32, 114, 97, 105, 110, 98, 111, 119, 32, 99, 111, 108, 111, > 114, 115, 46, 34, 10, 45, 118, 32, 45, 10, 40, 50, 44, 49, 48, 44, > 49, 51, 44, 49, 51, 44, 49, 53, 44, 49, 54, 44, 49, 53, 44, 49, > 53, 44, 49, 56, 44, 50, 51, 44, 50, 54, 44, 51, 49, 44, 51, 51, > 44, 51, 55, 44, 51, 56, 44, 51, 57, 44, 52, 50, 44, 52, 50, 44, > 52, 52, 44, 52, 53, 44, 52, 52, 44, 52, 52, 44, 52, 53, 44, 52, > 53, 44, 52, 52, 44, 52, 50, 44, 52, 52, 44, 52, 53, 44, 52, 53, > 44, 52, 57, 44, 53, 48, 44, 53, 50, 44, 53, 52, 44, 53, 53, 44, > 53, 54, 44, 53, 55, 44, 92, 10, 53, 54, 44, 53, 54, 44, 53, 55, > 44, 53, 55, 44, 53, 56, 44, 53, 55, 44, 53, 56, 44, 53, 56, 44, > 53, 57, 44, 53, 56, 44, 54, 48, 44, 53, 57, 44, 53, 56, 44, 53, > 57, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 54, 48, > 44, 54, 48, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, > 54, 48, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 53, > 57, 44, 53, 57, 44, 53, 57, 44, 53, 56, 44, 53, 56, 44, 53, 56, > 44, 53, 54, 44, 92, 10, 53, 54, 44, 53, 52, 44, 53, 49, 44, 52, > 56, 44, 52, 52, 44, 51, 57, 44, 51, 51, 44, 50, 48, 44, 53, 44, > 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 92, 10, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 53, 44, 50, 53, > 44, 53, 48, 44, 54, 54, 44, 56, 49, 44, 57, 48, 44, 49, 48, 50, > 44, 49, 48, 57, 44, 49, 49, 56, 44, 49, 50, 57, 44, 49, 51, 55, > 44, 49, 52, 52, 44, 49, 53, 50, 44, 49, 53, 56, 44, 49, 54, 56, > 44, 49, 55, 56, 44, 49, 56, 51, 44, 49, 57, 48, 44, 49, 57, 57, > 44, 50, 48, 55, 44, 92, 10, 50, 49, 51, 44, 50, 50, 48, 44, 50, > 50, 55, 44, 50, 51, 48, 44, 50, 51, 54, 44, 50, 52, 50, 44, 50, > 52, 54, 44, 50, 53, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, > 53, 51, 44, 50, 53, 51, 44, 50, 53, 51, 44, 50, 53, 50, 44, 50, > 53, 49, 44, 50, 53, 48, 44, 50, 53, 48, 44, 50, 52, 57, 44, 50, > 52, 56, 44, 50, 52, 56, 44, 50, 52, 55, 44, 50, 52, 56, 44, 50, > 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 53, 44, 50, > 52, 54, 44, 92, 10, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, > 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, > 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 44, 50, 52, 53, 44, 50, 52, 52, 44, 50, 52, 53, 44, 50, 52, 52, > 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 44, 92, 10, 50, 52, 53, 44, 50, 52, 52, 44, 50, 52, 52, 44, 50, > 52, 53, 44, 50, 52, 53, 44, 50, 52, 51, 44, 50, 51, 57, 44, 50, > 51, 53, 44, 50, 51, 48, 44, 50, 50, 54, 44, 50, 50, 48, 44, 50, > 49, 54, 44, 50, 49, 49, 44, 50, 48, 52, 44, 50, 48, 49, 44, 49, > 57, 52, 44, 49, 57, 48, 44, 49, 56, 52, 44, 49, 55, 54, 44, 49, > 55, 49, 44, 49, 54, 52, 44, 49, 54, 48, 44, 49, 53, 50, 44, 49, > 52, 52, 44, 49, 51, 56, 44, 49, 51, 48, 44, 49, 50, 50, 44, 92, > 10, 49, 49, 52, 44, 49, 48, 55, 44, 57, 54, 44, 56, 55, 44, 55, > 56, 44, 54, 57, 44, 53, 55, 44, 53, 48, 44, 52, 54, 44, 51, 56, > 44, 51, 49, 44, 49, 57, 44, 53, 94, 51, 44, 49, 48, 44, 49, 52, > 44, 49, 53, 44, 49, 55, 44, 49, 56, 44, 49, 57, 44, 49, 56, 44, > 49, 57, 44, 50, 51, 44, 50, 53, 44, 51, 48, 44, 51, 49, 44, 51, > 53, 44, 51, 55, 44, 51, 57, 44, 52, 50, 44, 52, 52, 44, 52, 53, > 44, 52, 56, 44, 52, 57, 44, 53, 48, 44, 53, 49, 44, 92, 10, 53, > 50, 44, 53, 51, 44, 53, 54, 44, 53, 57, 44, 54, 51, 44, 54, 54, > 44, 54, 54, 44, 54, 56, 44, 54, 57, 44, 55, 49, 44, 55, 51, 44, > 55, 52, 44, 55, 53, 44, 55, 54, 44, 55, 54, 44, 55, 55, 44, 55, > 56, 44, 55, 57, 44, 55, 57, 44, 56, 48, 44, 56, 49, 44, 56, 49, > 44, 56, 50, 44, 56, 50, 44, 56, 51, 44, 56, 52, 44, 56, 52, 44, > 56, 52, 44, 56, 52, 44, 56, 52, 44, 56, 53, 44, 56, 53, 44, 56, > 54, 44, 56, 54, 44, 56, 54, 44, 56, 54, 44, 92, 10, 56, 55, 44, > 56, 56, 44, 56, 55, 44, 56, 54, 44, 56, 54, 44, 56, 54, 44, 56, > 54, 44, 56, 56, 44, 56, 57, 44, 56, 57, 44, 57, 48, 44, 57, 50, > 44, 57, 50, 44, 57, 52, 44, 57, 54, 44, 57, 57, 44, 49, 48, 50, > 44, 49, 48, 52, 44, 49, 48, 55, 44, 49, 49, 49, 44, 49, 49, 55, > 44, 49, 50, 48, 44, 49, 50, 54, 44, 49, 51, 48, 44, 49, 51, 54, > 44, 49, 52, 50, 44, 49, 52, 57, 44, 49, 53, 53, 44, 49, 54, 49, > 44, 49, 54, 55, 44, 49, 55, 50, 44, 92, 10, 49, 55, 54, 44, 49, > 55, 56, 44, 49, 55, 57, 44, 49, 55, 57, 44, 49, 55, 56, 44, 49, > 55, 56, 44, 49, 55, 56, 44, 49, 55, 56, 44, 49, 55, 55, 44, 49, > 55, 55, 44, 49, 55, 55, 44, 49, 55, 54, 44, 49, 55, 54, 44, 49, > 55, 54, 44, 49, 55, 54, 44, 49, 55, 53, 44, 49, 55, 51, 44, 49, > 55, 51, 44, 49, 55, 52, 44, 49, 55, 51, 44, 49, 55, 50, 44, 49, > 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, > 55, 49, 44, 49, 55, 49, 44, 92, 10, 49, 55, 49, 44, 49, 55, 49, > 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, > 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, > 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, > 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 51, 44, 49, 55, 51, > 44, 49, 55, 51, 44, 49, 55, 53, 44, 49, 55, 54, 44, 49, 55, 56, > 44, 49, 55, 56, 44, 49, 55, 56, 44, 49, 56, 49, 44, 49, 56, 50, > 44, 49, 56, 52, 44, 92, 10, 49, 56, 54, 44, 49, 56, 54, 44, 49, > 57, 48, 44, 49, 57, 50, 44, 49, 57, 51, 44, 49, 57, 53, 44, 49, > 57, 56, 44, 50, 48, 48, 44, 50, 48, 49, 44, 50, 48, 52, 44, 50, > 48, 54, 44, 50, 48, 57, 44, 50, 49, 49, 44, 50, 48, 56, 44, 50, > 48, 54, 44, 50, 48, 50, 44, 49, 57, 55, 44, 49, 57, 52, 44, 49, > 57, 48, 44, 49, 56, 53, 44, 49, 56, 50, 44, 49, 55, 56, 44, 49, > 55, 50, 44, 49, 54, 55, 44, 49, 54, 50, 44, 49, 53, 55, 44, 49, > 53, 50, 44, 92, 10, 49, 52, 52, 44, 49, 51, 57, 44, 49, 51, 50, > 44, 49, 50, 55, 44, 49, 50, 49, 44, 49, 49, 53, 44, 49, 48, 56, > 44, 49, 48, 50, 44, 57, 56, 44, 57, 50, 44, 56, 55, 44, 55, 57, > 44, 55, 53, 44, 54, 57, 44, 54, 52, 44, 54, 50, 44, 53, 56, 44, > 53, 53, 44, 53, 50, 44, 53, 48, 44, 52, 57, 44, 52, 55, 44, 52, > 55, 44, 52, 55, 44, 52, 55, 44, 52, 55, 44, 52, 55, 44, 52, 55, > 44, 52, 55, 44, 52, 54, 44, 52, 54, 44, 52, 54, 44, 52, 54, 44, > 92, 10, 52, 53, 44, 52, 52, 44, 52, 52, 44, 52, 50, 44, 52, 50, > 44, 52, 49, 44, 52, 49, 44, 52, 48, 44, 51, 57, 44, 51, 56, 44, > 51, 55, 44, 51, 54, 44, 51, 52, 44, 51, 49, 44, 51, 48, 44, 50, > 57, 44, 51, 48, 44, 51, 48, 44, 51, 49, 44, 51, 50, 44, 51, 50, > 44, 51, 50, 44, 51, 51, 44, 51, 51, 44, 51, 52, 44, 51, 52, 44, > 51, 51, 44, 51, 52, 44, 51, 51, 44, 51, 50, 44, 51, 49, 44, 51, > 49, 44, 51, 48, 44, 50, 57, 44, 50, 54, 44, 50, 53, 44, 92, 10, > 50, 51, 44, 50, 49, 44, 49, 57, 44, 49, 53, 44, 49, 51, 44, 49, > 51, 44, 49, 54, 44, 49, 56, 44, 49, 56, 44, 49, 56, 44, 49, 55, > 44, 49, 53, 44, 49, 51, 44, 49, 50, 44, 57, 44, 50, 94, 54, 44, > 49, 57, 44, 50, 53, 44, 51, 50, 44, 52, 49, 44, 52, 57, 44, 53, > 53, 44, 54, 53, 44, 55, 49, 44, 55, 57, 44, 56, 52, 44, 57, 48, > 44, 57, 54, 44, 49, 48, 50, 44, 49, 48, 54, 44, 49, 49, 49, 44, > 49, 49, 55, 44, 49, 50, 49, 44, 49, 50, 56, 44, 92, 10, 49, 51, > 50, 44, 49, 51, 52, 44, 49, 51, 57, 44, 49, 52, 51, 44, 49, 52, > 54, 44, 49, 52, 57, 44, 49, 53, 50, 44, 49, 53, 53, 44, 49, 53, > 54, 44, 49, 53, 55, 44, 49, 53, 57, 44, 49, 53, 57, 44, 49, 54, > 48, 44, 49, 54, 49, 44, 49, 54, 50, 44, 49, 54, 51, 44, 49, 54, > 52, 44, 49, 54, 52, 44, 49, 54, 53, 44, 49, 54, 54, 44, 49, 54, > 55, 44, 49, 54, 54, 44, 49, 54, 53, 44, 49, 54, 54, 44, 49, 54, > 54, 44, 49, 54, 55, 44, 49, 54, 55, 44, 92, 10, 49, 54, 56, 44, > 49, 54, 56, 44, 49, 54, 56, 44, 49, 54, 57, 44, 49, 54, 57, 44, > 49, 54, 57, 44, 49, 54, 57, 44, 49, 55, 48, 44, 49, 55, 48, 44, > 49, 55, 48, 44, 49, 55, 48, 44, 49, 55, 48, 44, 49, 55, 48, 44, > 49, 55, 48, 44, 49, 55, 49, 44, 49, 55, 48, 44, 49, 55, 48, 44, > 49, 55, 48, 44, 49, 55, 48, 44, 49, 55, 48, 44, 49, 55, 49, 44, > 49, 55, 49, 44, 49, 55, 50, 44, 49, 55, 51, 44, 49, 55, 51, 44, > 49, 55, 51, 44, 49, 55, 53, 44, 92, 10, 49, 55, 55, 44, 49, 55, > 57, 44, 49, 56, 48, 44, 49, 56, 51, 44, 49, 56, 53, 44, 49, 56, > 55, 44, 49, 57, 48, 44, 49, 57, 51, 44, 49, 57, 56, 44, 50, 48, > 49, 44, 50, 48, 54, 44, 50, 49, 51, 44, 50, 49, 57, 44, 50, 50, > 53, 44, 50, 50, 55, 44, 50, 50, 55, 44, 50, 50, 51, 44, 50, 49, > 56, 44, 50, 49, 52, 44, 50, 48, 52, 44, 49, 57, 57, 44, 49, 57, > 50, 44, 49, 56, 52, 44, 49, 55, 57, 44, 49, 55, 50, 44, 49, 54, > 56, 44, 49, 54, 50, 44, 92, 10, 49, 53, 54, 44, 49, 53, 49, 44, > 49, 52, 53, 44, 49, 51, 57, 44, 49, 51, 51, 44, 49, 50, 54, 44, > 49, 50, 48, 44, 49, 49, 51, 44, 49, 48, 54, 44, 57, 56, 44, 57, > 48, 44, 56, 53, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, > 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, > 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, > 50, 44, 56, 50, 44, 56, 52, 44, 56, 52, 44, 56, 50, 44, 56, 50, > 44, 56, 50, 44, 92, 10, 56, 50, 44, 56, 50, 44, 56, 51, 44, 56, > 51, 44, 56, 49, 44, 56, 49, 44, 56, 49, 44, 56, 48, 44, 56, 48, > 44, 55, 56, 44, 55, 56, 44, 55, 56, 44, 55, 54, 44, 55, 52, 44, > 55, 51, 44, 55, 51, 44, 55, 49, 44, 55, 50, 44, 54, 57, 44, 54, > 56, 44, 54, 55, 44, 54, 53, 44, 54, 50, 44, 53, 57, 44, 53, 56, > 44, 53, 54, 44, 53, 49, 44, 53, 48, 44, 52, 57, 44, 52, 53, 44, > 52, 51, 44, 52, 48, 44, 51, 56, 44, 51, 55, 44, 51, 53, 44, 51, > 50, 44, 92, 10, 51, 49, 44, 51, 50, 44, 51, 50, 44, 51, 51, 44, > 51, 51, 44, 51, 52, 44, 51, 52, 44, 51, 53, 44, 51, 54, 44, 51, > 54, 44, 51, 55, 44, 51, 56, 44, 51, 57, 44, 52, 50, 44, 52, 52, > 44, 52, 53, 44, 52, 54, 44, 52, 54, 44, 52, 55, 44, 52, 56, 44, > 52, 57, 44, 52, 56, 44, 52, 56, 44, 52, 56, 44, 52, 56, 44, 52, > 56, 44, 52, 56, 44, 52, 56, 44, 52, 56, 44, 52, 56, 44, 52, 56, > 44, 52, 55, 44, 52, 55, 44, 52, 55, 44, 52, 55, 44, 52, 54, 44, > 92, 10, 52, 53, 44, 52, 53, 44, 52, 51, 44, 52, 51, 44, 52, 50, > 44, 52, 49, 44, 52, 48, 44, 51, 57, 44, 51, 56, 44, 51, 55, 44, > 51, 56, 44, 51, 56, 44, 51, 55, 44, 51, 55, 44, 51, 56, 44, 51, > 56, 44, 51, 56, 44, 51, 56, 44, 51, 57, 44, 52, 48, 44, 51, 57, > 44, 52, 48, 44, 51, 57, 44, 52, 48, 44, 52, 48, 44, 51, 57, 44, > 51, 57, 44, 51, 56, 44, 51, 56, 44, 51, 55, 44, 51, 53, 44, 51, > 52, 44, 51, 50, 44, 51, 48, 44, 50, 56, 44, 50, 54, 44, 92, 10, > 50, 51, 44, 50, 48, 44, 49, 54, 44, 49, 52, 44, 49, 50, 44, 49, > 54, 44, 49, 54, 44, 49, 56, 44, 49, 56, 44, 49, 55, 44, 49, 54, > 44, 49, 52, 44, 49, 51, 44, 57, 44, 50, 41, 10, 45, 110, 109, 91, > 45, 49, 93, 32, 91, 114, 97, 105, 110, 98, 111, 119, 92, 32, 108, 117, > 116, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 111, 100, 100, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 111, > 97, 100, 32, 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, 111, > 102, 32, 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 82, 111, 100, 105, > 108, 105, 117, 115, 32, 109, 97, 115, 99, 111, 116, 32, 39, 82, 111, 100, > 100, 121, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 114, 111, 100, 100, 121, 10, 114, 111, 100, 100, 121, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 76, 111, 97, 100, 32, 105, 109, 97, > 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 82, 111, 100, 105, 108, 105, 117, 115, 32, 109, 97, 115, 99, 111, > 116, 32, 39, 82, 111, 100, 100, 121, 39, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, > 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, > 105, 109, 103, 47, 114, 111, 100, 100, 121, 95, 108, 97, 114, 103, 101, 46, > 99, 105, 109, 103, 122, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 114, > 111, 100, 100, 121, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 101, 109, 111, 118, 101, 95, 100, 117, 112, 108, 105, 99, 97, > 116, 101, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 109, > 111, 118, 101, 32, 100, 117, 112, 108, 105, 99, 97, 116, 101, 115, 32, 105, > 109, 97, 103, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 108, 105, 115, > 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, > 44, 50, 44, 51, 44, 52, 44, 50, 44, 52, 44, 51, 44, 49, 44, 51, > 44, 52, 44, 50, 44, 49, 41, 32, 45, 115, 112, 108, 105, 116, 32, 120, > 32, 45, 114, 101, 109, 111, 118, 101, 95, 100, 117, 112, 108, 105, 99, 97, > 116, 101, 115, 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, 114, 101, > 109, 111, 118, 101, 95, 100, 117, 112, 108, 105, 99, 97, 116, 101, 115, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, > 101, 32, 100, 117, 112, 108, 105, 99, 97, 116, 101, 115, 32, 105, 109, 97, > 103, 101, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 108, 105, 115, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 10, 98, 97, 115, 101, 61, 36, 62, 32, 111, 102, 102, 61, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 36, 62, 45, 49, > 125, 10, 99, 111, 109, 112, 61, 123, 36, 98, 97, 115, 101, 43, 49, 43, > 36, 62, 45, 36, 111, 102, 102, 125, 10, 45, 105, 102, 32, 123, 36, 99, > 111, 109, 112, 62, 61, 64, 35, 125, 32, 45, 98, 114, 101, 97, 107, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 45, 45, 91, 36, 98, 97, 115, 101, > 44, 36, 99, 111, 109, 112, 93, 32, 45, 97, 98, 115, 91, 45, 49, 93, > 32, 105, 115, 95, 100, 117, 112, 108, 105, 99, 97, 116, 101, 61, 123, 33, > 64, 123, 45, 49, 44, 43, 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 36, 105, 115, 95, 100, 117, 112, 108, 105, 99, 97, > 116, 101, 32, 45, 114, 109, 91, 36, 99, 111, 109, 112, 93, 32, 111, 102, > 102, 61, 123, 36, 111, 102, 102, 43, 49, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 109, 111, 118, 101, > 95, 101, 109, 112, 116, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 109, 111, 118, 101, 32, 101, 109, 112, 116, 121, 32, 105, 109, 97, > 103, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, 46, 10, > 114, 101, 109, 111, 118, 101, 95, 101, 109, 112, 116, 121, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, 101, 32, 101, > 109, 112, 116, 121, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 108, 105, 115, 116, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 33, > 64, 123, 36, 60, 44, 119, 104, 100, 115, 125, 125, 32, 45, 114, 109, 91, > 36, 60, 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 101, 108, > 101, 99, 116, 32, 58, 32, 102, 101, 97, 116, 117, 114, 101, 95, 116, 121, > 112, 101, 44, 95, 88, 44, 95, 89, 44, 95, 90, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 108, 121, 32, 115, 101, 108, 101, 99, 116, 32, > 97, 32, 102, 101, 97, 116, 117, 114, 101, 32, 102, 114, 111, 109, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, > 117, 115, 101, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, > 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, 112, > 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 102, 101, 97, 116, 117, 114, 101, 95, 116, 121, 112, 101, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 112, 111, 105, 110, 116, 32, > 124, 32, 49, 61, 115, 101, 103, 109, 101, 110, 116, 32, 124, 32, 50, 61, > 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 124, 32, 51, 61, 101, 108, > 108, 105, 112, 115, 101, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 114, 103, 117, 109, 101, 110, 116, 115, 32, 39, 88, 39, 44, > 39, 89, 39, 44, 39, 90, 39, 32, 100, 101, 116, 101, 114, 109, 105, 110, > 101, 32, 116, 104, 101, 32, 105, 110, 105, 116, 105, 97, 108, 32, 115, 101, > 108, 101, 99, 116, 105, 111, 110, 32, 118, 105, 101, 119, 44, 32, 102, 111, > 114, 32, 51, 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 84, 104, 101, 32, 114, 101, 116, 114, 105, 101, 118, 101, 100, 32, 102, > 101, 97, 116, 117, 114, 101, 32, 105, 115, 32, 114, 101, 116, 117, 114, 110, > 101, 100, 32, 97, 115, 32, 97, 32, 51, 100, 32, 111, 114, 32, 54, 100, > 32, 118, 101, 99, 116, 111, 114, 32, 99, 111, 110, 116, 97, 105, 110, 105, > 110, 103, 32, 116, 104, 101, 32, 102, 101, 97, 116, 117, 114, 101, 32, 99, > 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 104, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 115, 104, 97, 114, 101, 100, 39, 46, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 104, 97, 114, 101, 100, 32, 58, 32, > 120, 48, 91, 37, 93, 44, 120, 49, 91, 37, 93, 44, 121, 91, 37, 93, > 44, 122, 91, 37, 93, 44, 118, 91, 37, 93, 32, 58, 32, 121, 48, 91, > 37, 93, 44, 121, 49, 91, 37, 93, 44, 122, 91, 37, 93, 44, 118, 91, > 37, 93, 32, 58, 32, 122, 48, 91, 37, 93, 44, 122, 49, 91, 37, 93, > 44, 118, 91, 37, 93, 32, 58, 32, 118, 48, 91, 37, 93, 44, 118, 49, > 91, 37, 93, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 110, 115, 101, 114, 116, 32, 115, 104, 97, 114, 101, 100, 32, 98, 117, 102, > 102, 101, 114, 115, 32, 102, 114, 111, 109, 32, 40, 111, 112, 116, 46, 32, > 112, 111, 105, 110, 116, 115, 47, 114, 111, 119, 115, 47, 112, 108, 97, 110, > 101, 115, 47, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, 102, 41, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, 97, 114, 101, 100, > 32, 98, 117, 102, 102, 101, 114, 115, 32, 99, 97, 110, 110, 111, 116, 32, > 98, 101, 32, 114, 101, 116, 117, 114, 110, 101, 100, 32, 98, 121, 32, 97, > 32, 99, 111, 109, 109, 97, 110, 100, 44, 32, 110, 111, 114, 32, 97, 32, > 108, 111, 99, 97, 108, 32, 101, 110, 118, 105, 114, 111, 110, 109, 101, 110, > 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 115, 104, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 115, 104, 97, 114, 101, 100, 32, 49, 44, 49, 32, 45, 98, 108, > 117, 114, 91, 45, 49, 93, 32, 51, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 115, 125, 32, 45, 115, 104, 97, 114, 101, 100, 32, 50, 53, > 37, 44, 55, 53, 37, 44, 48, 44, 36, 62, 32, 45, 109, 105, 114, 114, > 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 115, 114, 97, 110, 100, 32, 58, 32, 118, 97, 108, 117, 101, 32, > 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 114, > 97, 110, 100, 111, 109, 32, 103, 101, 110, 101, 114, 97, 116, 111, 114, 32, > 115, 101, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 110, 111, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 105, 115, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 44, 32, 97, 32, 114, 97, > 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 117, 115, > 101, 100, 32, 97, 115, 32, 116, 104, 101, 32, 114, 97, 110, 100, 111, 109, > 32, 103, 101, 110, 101, 114, 97, 116, 111, 114, 32, 115, 101, 101, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 116, 101, 115, 116, 105, 109, 97, 103, > 101, 50, 100, 32, 58, 32, 95, 119, 105, 100, 116, 104, 62, 48, 44, 95, > 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 115, 112, 101, 99, 116, 114, > 117, 109, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 112, 117, 116, 32, 97, 32, 50, 100, 32, 115, 121, 110, 116, 104, 101, 116, > 105, 99, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 119, 105, 100, 116, 104, 61, 53, 49, 50, 39, 44, 32, > 39, 104, 101, 105, 103, 104, 116, 61, 119, 105, 100, 116, 104, 39, 32, 97, > 110, 100, 32, 39, 115, 112, 101, 99, 116, 114, 117, 109, 61, 51, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 101, 115, > 116, 105, 109, 97, 103, 101, 50, 100, 32, 53, 49, 50, 10, 116, 101, 115, > 116, 105, 109, 97, 103, 101, 50, 100, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, > 32, 36, 123, 50, 61, 36, 49, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 51, 61, 51, 125, 62, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 73, 110, 112, 117, 116, 32, 50, 100, 32, 115, 121, 110, 116, 104, 101, > 116, 105, 99, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 115, 105, 122, > 101, 32, 36, 49, 120, 36, 50, 120, 36, 51, 46, 34, 10, 45, 118, 32, > 45, 10, 68, 109, 97, 120, 50, 61, 123, 48, 46, 49, 53, 42, 109, 105, > 110, 40, 36, 49, 44, 36, 50, 41, 94, 50, 125, 10, 36, 49, 44, 36, > 50, 44, 49, 44, 36, 51, 44, 39, 88, 61, 120, 45, 119, 47, 50, 59, > 89, 61, 121, 45, 104, 47, 50, 59, 97, 61, 97, 116, 97, 110, 50, 40, > 89, 44, 88, 41, 59, 105, 102, 40, 88, 94, 50, 43, 89, 94, 50, 60, > 61, 36, 68, 109, 97, 120, 50, 44, 50, 53, 53, 42, 97, 98, 115, 40, > 99, 111, 115, 40, 99, 43, 50, 48, 48, 42, 40, 120, 47, 119, 45, 48, > 46, 53, 41, 42, 40, 121, 47, 104, 45, 48, 46, 53, 41, 41, 41, 44, > 56, 53, 48, 42, 40, 97, 37, 40, 48, 46, 49, 42, 40, 99, 43, 49, > 41, 41, 41, 41, 39, 10, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, > 49, 93, 32, 52, 44, 50, 48, 37, 44, 50, 48, 37, 44, 54, 48, 37, > 44, 50, 48, 37, 44, 55, 48, 37, 44, 55, 48, 37, 44, 51, 53, 37, > 44, 52, 53, 37, 44, 48, 46, 57, 44, 48, 44, 50, 53, 53, 44, 48, > 10, 45, 116, 111, 114, 117, 115, 51, 100, 32, 123, 36, 49, 47, 55, 125, > 44, 123, 36, 49, 47, 50, 48, 125, 32, 45, 114, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 49, 44, 49, 44, 56, 48, 32, 45, 99, 111, 108, 51, > 100, 91, 45, 49, 93, 32, 49, 50, 56, 44, 50, 48, 48, 44, 50, 53, > 53, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 51, 48, 37, 44, 55, 48, 37, 44, 48, 44, 49, > 44, 53, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 10, 45, 110, 109, 91, > 45, 49, 93, 32, 34, 91, 50, 100, 32, 116, 101, 115, 116, 32, 105, 109, > 97, 103, 101, 93, 34, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 101, 120, 116, 50, 105, 109, 103, 32, 58, 32, 116, 101, 120, > 116, 44, 95, 108, 105, 110, 101, 95, 115, 101, 112, 97, 114, 97, 116, 111, > 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 97, 32, 50, 100, 32, 105, 109, 97, 103, 101, 32, 119, 104, 111, 115, > 101, 32, 118, 97, 108, 117, 101, 115, 32, 97, 114, 101, 32, 65, 83, 67, > 73, 73, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 32, 111, 102, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 110, 112, 117, 116, > 32, 116, 101, 120, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 108, 105, 110, 101, 95, 115, 101, 112, 97, 114, 97, 116, 111, 114, 61, 32, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, > 101, 120, 116, 50, 105, 109, 103, 32, 34, 84, 104, 101, 114, 101, 32, 97, > 114, 101, 32, 52, 32, 119, 111, 114, 100, 115, 34, 10, 116, 101, 120, 116, > 50, 105, 109, 103, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, > 50, 61, 32, 125, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, > 110, 112, 117, 116, 32, 105, 109, 97, 103, 101, 32, 102, 114, 111, 109, 32, > 116, 101, 120, 116, 32, 92, 34, 36, 49, 92, 34, 44, 32, 119, 105, 116, > 104, 32, 108, 105, 110, 101, 32, 115, 101, 112, 97, 114, 97, 116, 111, 114, > 32, 39, 36, 50, 39, 46, 34, 10, 45, 118, 32, 45, 32, 40, 123, 39, > 34, 36, 49, 34, 39, 125, 41, 32, 45, 108, 91, 45, 49, 93, 32, 45, > 115, 32, 45, 44, 123, 39, 34, 36, 50, 34, 39, 125, 32, 45, 121, 32, > 120, 32, 45, 97, 32, 121, 32, 45, 110, 109, 32, 34, 91, 92, 34, 36, > 49, 92, 34, 93, 34, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 116, 121, 112, 101, 32, 58, 32, 100, > 97, 116, 97, 116, 121, 112, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 112, 105, 120, 101, 108, > 32, 100, 97, 116, 97, 116, 121, 112, 101, 32, 102, 111, 114, 32, 97, 108, > 108, 32, 105, 109, 97, 103, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, > 108, 105, 115, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 100, 97, 116, 97, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 123, 32, 98, 111, 111, 108, 32, 124, 32, 117, 99, 104, 97, 114, 32, > 124, 32, 99, 104, 97, 114, 32, 124, 32, 117, 115, 104, 111, 114, 116, 32, > 124, 32, 115, 104, 111, 114, 116, 32, 124, 32, 117, 105, 110, 116, 32, 124, > 32, 105, 110, 116, 32, 124, 32, 102, 108, 111, 97, 116, 32, 124, 32, 100, > 111, 117, 98, 108, 101, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 112, 101, 110, 100, 105, 110, 103, 32, 111, 110, 32, 104, > 111, 119, 32, 121, 111, 117, 114, 32, 71, 39, 77, 73, 67, 32, 118, 101, > 114, 115, 105, 111, 110, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 99, > 111, 109, 112, 105, 108, 101, 100, 44, 32, 115, 111, 109, 101, 32, 100, 97, > 116, 97, 116, 121, 112, 101, 115, 32, 109, 97, 121, 32, 98, 101, 32, 117, > 110, 97, 118, 97, 105, 108, 97, 98, 108, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 116, 121, 112, 105, 99, 97, 108, 108, 121, 32, 100, > 97, 116, 97, 116, 121, 112, 101, 115, 32, 100, 105, 102, 102, 101, 114, 101, > 110, 116, 32, 102, 114, 111, 109, 32, 39, 102, 108, 111, 97, 116, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 117, 110, 99, 111, 109, 109, 97, > 110, 100, 32, 58, 32, 99, 111, 109, 109, 97, 110, 100, 95, 110, 97, 109, > 101, 91, 44, 95, 99, 111, 109, 109, 97, 110, 100, 95, 110, 97, 109, 101, > 50, 44, 46, 46, 46, 93, 32, 58, 32, 42, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 99, 97, 114, > 100, 32, 108, 97, 115, 116, 32, 100, 101, 102, 105, 110, 105, 116, 105, 111, > 110, 32, 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, > 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 32, 116, 111, 32, 39, 42, 39, 32, 102, 111, 114, > 32, 100, 105, 115, 99, 97, 114, 100, 105, 110, 103, 32, 97, 108, 108, 32, > 101, 120, 105, 115, 116, 105, 110, 103, 32, 99, 117, 115, 116, 111, 109, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 117, 110, 105, 102, 111, 114, 109, 95, 100, 105, 115, 116, 114, 105, 98, > 117, 116, 105, 111, 110, 32, 58, 32, 110, 98, 95, 108, 101, 118, 101, 108, > 115, 62, 61, 49, 44, 115, 112, 101, 99, 116, 114, 117, 109, 62, 61, 49, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, > 115, 101, 116, 32, 111, 102, 32, 117, 110, 105, 102, 111, 114, 109, 108, 121, > 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 101, 100, 32, 78, 45, 100, > 32, 112, 111, 105, 110, 116, 115, 32, 105, 110, 32, 91, 48, 44, 49, 93, > 94, 78, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 117, 110, 105, 102, 111, 114, 109, 95, 100, 105, 115, 116, 114, 105, 98, 117, > 116, 105, 111, 110, 32, 54, 52, 44, 51, 32, 45, 42, 32, 50, 53, 53, > 32, 45, 45, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, > 100, 32, 45, 99, 105, 114, 99, 108, 101, 115, 51, 100, 91, 45, 49, 93, > 32, 49, 48, 10, 117, 110, 105, 102, 111, 114, 109, 95, 100, 105, 115, 116, > 114, 105, 98, 117, 116, 105, 111, 110, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 49, 41, 32, 38, 38, 32, > 36, 49, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 50, > 41, 32, 38, 38, 32, 36, 50, 62, 48, 34, 10, 45, 101, 91, 94, 49, > 93, 32, 34, 73, 110, 112, 117, 116, 32, 115, 101, 116, 32, 111, 102, 32, > 36, 49, 32, 117, 110, 105, 102, 111, 114, 109, 108, 121, 32, 100, 105, 115, > 116, 114, 105, 98, 117, 116, 101, 100, 32, 36, 50, 45, 100, 32, 112, 111, > 105, 110, 116, 115, 32, 105, 110, 32, 91, 48, 44, 49, 93, 94, 36, 50, > 46, 34, 10, 45, 118, 32, 45, 32, 110, 61, 123, 114, 111, 117, 110, 100, > 40, 36, 49, 94, 40, 49, 47, 36, 50, 41, 44, 49, 44, 49, 41, 125, > 10, 40, 48, 44, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 36, 110, > 44, 49, 44, 49, 44, 49, 44, 51, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 36, 50, 45, 49, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 45, 49, 93, 32, 49, 48, 48, 37, 32, 45, 114, 91, 45, > 49, 93, 32, 123, 36, 110, 42, 119, 125, 44, 49, 44, 49, 44, 49, 44, > 49, 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, > 49, 44, 49, 48, 48, 37, 44, 48, 44, 50, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 99, 32, 45, 100, 111, 110, 101, 10, 45, 114, 91, > 45, 49, 93, 32, 36, 49, 44, 49, 44, 49, 44, 36, 50, 44, 49, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 34, 91, 117, 110, 105, 102, 111, 114, > 109, 32, 36, 50, 100, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, > 111, 110, 93, 34, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 117, 112, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 117, > 112, 100, 97, 116, 101, 39, 46, 10, 117, 112, 32, 58, 10, 45, 95, 117, > 112, 100, 97, 116, 101, 10, 35, 64, 103, 109, 105, 99, 32, 117, 112, 100, > 97, 116, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 85, 112, 100, > 97, 116, 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 102, 114, 111, > 109, 32, 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, 32, 100, 101, 102, > 105, 110, 105, 116, 105, 111, 110, 32, 102, 105, 108, 101, 32, 111, 110, 32, > 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 115, 101, 114, 118, 101, 114, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 105, 115, 32, > 114, 101, 113, 117, 105, 114, 101, 115, 32, 97, 110, 32, 97, 99, 116, 105, > 118, 101, 32, 73, 110, 116, 101, 114, 110, 101, 116, 32, 99, 111, 110, 110, > 101, 99, 116, 105, 111, 110, 32, 97, 110, 100, 32, 97, 110, 32, 97, 99, > 99, 101, 115, 115, 32, 116, 111, 32, 116, 104, 101, 32, 101, 120, 116, 101, > 114, 110, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 116, 111, > 111, 108, 115, 32, 39, 99, 117, 114, 108, 39, 32, 111, 114, 32, 39, 119, > 103, 101, 116, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 117, 112, 39, 41, 46, 10, 117, > 112, 100, 97, 116, 101, 32, 58, 10, 45, 95, 36, 48, 10, 95, 117, 112, > 100, 97, 116, 101, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, > 34, 85, 112, 100, 97, 116, 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, > 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, > 32, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 32, 102, 105, 108, 101, > 32, 111, 110, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 115, 101, 114, 118, 101, 114, 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, > 32, 114, 97, 119, 58, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, > 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, > 47, 117, 112, 100, 97, 116, 101, 64, 46, 46, 103, 109, 105, 99, 44, 99, > 104, 97, 114, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 118, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 118, 101, 114, > 98, 111, 115, 101, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 118, 101, 114, 98, 111, 115, 101, 32, 58, 32, 95, 108, > 101, 118, 101, 108, 32, 58, 32, 123, 32, 43, 32, 124, 32, 45, 32, 125, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 83, 101, 116, 32, 111, 114, 32, 105, 110, 99, 114, 101, 109, 101, 110, 116, > 47, 100, 101, 99, 114, 101, 109, 101, 110, 116, 32, 116, 104, 101, 32, 118, > 101, 114, 98, 111, 115, 105, 116, 121, 32, 108, 101, 118, 101, 108, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 118, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 87, 104, 101, 110, 32, 39, 108, 101, 118, 101, 108, 39, 62, 61, 48, > 44, 32, 71, 39, 77, 73, 67, 32, 108, 111, 103, 32, 109, 101, 115, 115, > 97, 103, 101, 115, 32, 97, 114, 101, 32, 100, 105, 115, 112, 108, 97, 121, > 101, 100, 32, 111, 110, 32, 116, 104, 101, 32, 115, 116, 97, 110, 100, 97, > 114, 100, 32, 101, 114, 114, 111, 114, 32, 40, 115, 116, 100, 101, 114, 114, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 108, 101, 118, 101, > 108, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 105, > 116, 32, 58, 32, 100, 101, 108, 97, 121, 32, 58, 32, 40, 110, 111, 32, > 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 87, 97, 105, 116, 32, 102, 111, 114, 32, 97, 32, > 103, 105, 118, 101, 110, 32, 100, 101, 108, 97, 121, 32, 40, 105, 110, 32, > 109, 115, 41, 32, 115, 105, 110, 99, 101, 32, 108, 97, 115, 116, 32, 99, > 97, 108, 108, 44, 32, 111, 114, 32, 115, 108, 101, 101, 112, 32, 100, 117, > 114, 105, 110, 103, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 100, 101, 108, 97, 121, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 111, 114, 32, 119, 97, 105, 116, 32, 102, 111, 114, 32, 97, 32, 117, > 115, 101, 114, 32, 101, 118, 101, 110, 116, 32, 111, 99, 99, 117, 114, 105, > 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, > 119, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 100, 101, 108, > 97, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 60, 48, 61, > 100, 101, 108, 97, 121, 43, 102, 108, 117, 115, 104, 32, 124, 32, 48, 61, > 101, 118, 101, 110, 116, 32, 124, 32, 62, 48, 61, 100, 101, 108, 97, 121, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 109, 97, 110, 100, 32, 115, 117, 98, 115, 101, 116, 32, 40, 105, 102, 32, > 97, 110, 121, 41, 32, 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, > 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, 32, 105, > 110, 100, 105, 99, 101, 115, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 32, 105, 110, 100, 105, 99, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 110, 111, 32, > 119, 105, 110, 100, 111, 119, 32, 105, 110, 100, 105, 99, 101, 115, 32, 97, > 114, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 110, 100, > 32, 105, 102, 32, 39, 100, 101, 108, 97, 121, 39, 32, 105, 115, 32, 110, > 101, 103, 97, 116, 105, 118, 101, 44, 32, 116, 104, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 114, 101, 115, 117, 108, 116, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 105, 110, 32, 97, 32, 104, 97, 114, 100, 32, > 115, 108, 101, 101, 112, 32, 100, 117, 114, 105, 110, 103, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 100, 101, 108, 97, 121, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 100, 101, 108, 97, 121, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 114, 110, 32, 58, 32, 109, > 101, 115, 115, 97, 103, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 80, 114, 105, 110, 116, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 119, 97, 114, 110, 105, 110, 103, 32, 109, 101, > 115, 115, 97, 103, 101, 44, 32, 111, 110, 32, 116, 104, 101, 32, 115, 116, > 97, 110, 100, 97, 114, 100, 32, 101, 114, 114, 111, 114, 32, 40, 115, 116, > 100, 101, 114, 114, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 109, 97, 110, 100, 32, 115, 117, 98, 115, 101, 116, 32, 40, > 105, 102, 32, 97, 110, 121, 41, 32, 115, 116, 97, 110, 100, 115, 32, 102, > 111, 114, 32, 100, 105, 115, 112, 108, 97, 121, 101, 100, 32, 115, 99, 111, > 112, 101, 32, 105, 110, 100, 105, 99, 101, 115, 32, 105, 110, 115, 116, 101, > 97, 100, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 105, 110, 100, 105, > 99, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 119, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 119, 105, 110, 100, 111, 119, 39, > 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 119, > 105, 110, 100, 111, 119, 32, 58, 32, 95, 119, 105, 100, 116, 104, 91, 37, > 93, 62, 61, 45, 49, 44, 95, 104, 101, 105, 103, 104, 116, 91, 37, 93, > 62, 61, 45, 49, 44, 95, 110, 111, 114, 109, 97, 108, 105, 122, 97, 116, > 105, 111, 110, 44, 95, 102, 117, 108, 108, 115, 99, 114, 101, 101, 110, 44, > 95, 112, 111, 115, 95, 120, 91, 37, 93, 44, 95, 112, 111, 115, 95, 121, > 91, 37, 93, 44, 95, 116, 105, 116, 108, 101, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, > 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 105, 110, 116, 111, 32, 97, 110, 32, 105, 110, 115, 116, 97, 110, > 116, 32, 119, 105, 110, 100, 111, 119, 32, 119, 105, 116, 104, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, 44, 32, 110, 111, > 114, 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, 32, 116, 121, 112, 101, > 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 102, 117, 108, 108, 115, > 99, 114, 101, 101, 110, 32, 109, 111, 100, 101, 32, 97, 110, 100, 32, 116, > 105, 116, 108, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 119, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 119, 105, 100, 116, 104, > 39, 32, 111, 114, 32, 39, 104, 101, 105, 103, 104, 116, 39, 32, 105, 115, > 32, 115, 101, 116, 32, 116, 111, 32, 45, 49, 44, 32, 116, 104, 101, 32, > 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, 105, 110, 103, 32, 100, 105, > 109, 101, 110, 115, 105, 111, 110, 32, 105, 115, 32, 97, 100, 106, 117, 115, > 116, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, > 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 111, 114, 32, 105, 109, > 97, 103, 101, 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 87, 104, 101, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 115, 32, 39, 112, 111, 115, 95, 120, 39, 32, 97, 110, 100, 32, 39, 112, > 111, 115, 95, 121, 39, 32, 97, 114, 101, 32, 98, 111, 116, 104, 32, 100, > 105, 102, 102, 101, 114, 101, 110, 116, 32, 116, 104, 97, 110, 32, 45, 49, > 44, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 32, 105, 115, 32, > 109, 111, 118, 101, 100, 32, 116, 111, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 119, 105, 100, 116, 104, 39, 61, 48, 32, > 111, 114, 32, 39, 104, 101, 105, 103, 104, 116, 39, 61, 48, 32, 99, 108, > 111, 115, 101, 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, > 32, 119, 105, 110, 100, 111, 119, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 110, 111, 114, 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, > 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, 107, 101, > 101, 112, 32, 115, 97, 109, 101, 32, 124, 32, 48, 61, 110, 111, 110, 101, > 32, 124, 32, 49, 61, 97, 108, 119, 97, 121, 115, 32, 124, 32, 50, 61, > 49, 115, 116, 45, 116, 105, 109, 101, 32, 124, 32, 51, 61, 97, 117, 116, > 111, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 102, > 117, 108, 108, 115, 99, 114, 101, 101, 110, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 45, 49, 61, 107, 101, 101, 112, 32, 115, 97, 109, 101, > 32, 124, 32, 48, 61, 110, 111, 32, 124, 32, 49, 61, 121, 101, 115, 32, > 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 89, 111, 117, 32, > 99, 97, 110, 32, 109, 97, 110, 97, 103, 101, 32, 117, 112, 32, 116, 111, > 32, 49, 48, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 105, 110, > 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, 115, 32, 98, 121, > 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, > 114, 101, 100, 32, 118, 97, 114, 105, 97, 110, 116, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 45, 119, 48, 39, 32, 40, 100, 101, 102, > 97, 117, 108, 116, 44, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 119, > 39, 41, 44, 39, 45, 119, 49, 39, 44, 46, 46, 44, 39, 45, 119, 57, > 39, 32, 111, 102, 32, 116, 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 45, 119, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 119, 105, 100, 116, 104, 61, 104, 101, 105, 103, 104, 116, 61, 110, 111, > 114, 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, 61, 102, 117, 108, 108, > 115, 99, 114, 101, 101, 110, 61, 45, 49, 39, 32, 97, 110, 100, 32, 39, > 116, 105, 116, 108, 101, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, > 41, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 76, 105, > 115, 116, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, > 35, 64, 103, 109, 105, 99, 32, 107, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 107, 101, 101, 112, 39, 46, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 107, 101, 101, 112, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 75, 101, 101, 112, > 32, 111, 110, 108, 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 107, 39, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 120, 32, 45, 107, 101, > 101, 112, 91, 48, 45, 53, 48, 37, 58, 50, 93, 32, 45, 97, 112, 112, > 101, 110, 100, 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, > 116, 32, 120, 32, 45, 107, 101, 101, 112, 91, 94, 51, 48, 37, 45, 55, > 48, 37, 93, 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 118, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 109, 111, 118, 101, 39, 46, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 109, 111, 118, 101, 32, 58, 32, 112, 111, > 115, 105, 116, 105, 111, 110, 91, 37, 93, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 77, 111, 118, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 116, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 112, 111, 115, 105, 116, > 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 109, 118, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 120, 44, 51, 32, 45, 109, > 111, 118, 101, 91, 49, 93, 32, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, > 112, 108, 105, 116, 32, 120, 32, 45, 109, 111, 118, 101, 91, 53, 48, 37, > 45, 45, 49, 58, 50, 93, 32, 48, 32, 45, 97, 112, 112, 101, 110, 100, > 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 110, 109, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 110, 97, 109, 101, 39, 46, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 110, 97, 109, 101, > 32, 58, 32, 110, 97, 109, 101, 44, 95, 105, 115, 95, 109, 111, 100, 105, > 102, 105, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, > 116, 32, 110, 97, 109, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 110, 109, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 114, 103, > 117, 109, 101, 110, 116, 32, 39, 105, 115, 95, 109, 111, 100, 105, 102, 105, > 101, 100, 39, 32, 116, 101, 108, 108, 115, 32, 97, 98, 111, 117, 116, 32, > 116, 104, 101, 32, 109, 111, 100, 105, 102, 105, 101, 100, 32, 115, 116, 97, > 116, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 105, 115, 95, 109, 111, 100, 105, 102, 105, 101, 100, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 110, 97, 109, 101, 32, 105, 109, 97, 103, 101, > 32, 45, 98, 108, 117, 114, 91, 105, 109, 97, 103, 101, 93, 32, 50, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 109, 32, 58, 32, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 114, 101, 109, 111, 118, 101, 39, 46, 32, 58, 32, > 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 109, 111, 118, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 109, 111, 118, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 109, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 120, 32, > 45, 114, 101, 109, 111, 118, 101, 91, 51, 48, 37, 45, 55, 48, 37, 93, > 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 115, 112, 108, 105, 116, 32, 120, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 48, 45, 53, 48, 37, 58, 50, 93, 32, 45, 97, 112, 112, 101, 110, > 100, 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 114, 118, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, 118, 101, 114, 115, 101, > 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 114, 101, 118, 101, 114, 115, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 118, 101, 114, 115, 101, 32, 112, > 111, 115, 105, 116, 105, 111, 110, 115, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 114, 118, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, > 116, 32, 120, 44, 51, 32, 45, 114, 101, 118, 101, 114, 115, 101, 91, 45, > 50, 44, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, > 116, 32, 120, 44, 45, 49, 54, 32, 45, 114, 101, 118, 101, 114, 115, 101, > 91, 53, 48, 37, 45, 49, 48, 48, 37, 93, 32, 45, 97, 112, 112, 101, > 110, 100, 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 115, 111, 114, 116, > 95, 108, 105, 115, 116, 32, 58, 32, 95, 111, 114, 100, 101, 114, 105, 110, > 103, 61, 123, 32, 43, 32, 124, 32, 45, 32, 125, 44, 95, 99, 114, 105, > 116, 101, 114, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 83, 111, 114, 116, 32, 108, 105, 115, 116, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 105, 109, 97, 103, 101, 32, 99, 114, > 105, 116, 101, 114, 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 111, 114, 100, 101, 114, 105, 110, 103, 61, 43, 39, 44, 32, > 39, 99, 114, 105, 116, 101, 114, 105, 111, 110, 61, 105, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, 59, 52, 59, 55, > 59, 51, 59, 57, 59, 50, 59, 52, 59, 55, 59, 54, 59, 51, 59, 57, > 59, 49, 59, 48, 59, 51, 59, 51, 59, 50, 41, 32, 45, 115, 112, 108, > 105, 116, 32, 121, 32, 45, 115, 111, 114, 116, 95, 108, 105, 115, 116, 32, > 43, 32, 45, 97, 112, 112, 101, 110, 100, 32, 121, 10, 115, 111, 114, 116, > 95, 108, 105, 115, 116, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 43, 125, 44, 36, 123, 50, 61, 105, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 83, 111, 114, 116, 32, 108, 105, 115, 116, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 36, 63, 32, 105, 110, 32, 34, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 123, 36, 49, 39, 61, 61, 39, 43, > 125, 44, 100, 101, 115, 99, 101, 110, 100, 105, 110, 103, 44, 97, 115, 99, > 101, 110, 100, 105, 110, 103, 125, 34, 32, 111, 114, 100, 101, 114, 44, 32, > 34, 92, 10, 34, 97, 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, > 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 99, 114, 105, 116, 101, > 114, 105, 111, 110, 32, 39, 36, 50, 39, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 105, 102, 32, 64, 35, 10, 105, 61, 64, 35, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 40, 64, 123, 36, 62, 44, 36, 50, > 125, 41, 32, 45, 100, 111, 110, 101, 32, 45, 97, 91, 36, 105, 45, 45, > 49, 93, 32, 121, 32, 45, 45, 102, 91, 45, 49, 93, 32, 39, 121, 39, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, 115, 111, > 114, 116, 91, 45, 49, 93, 32, 36, 49, 44, 121, 32, 45, 122, 91, 45, > 49, 93, 32, 49, 44, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 104, 125, 32, 110, 109, 36, 62, 61, 64, 123, 36, 62, 44, 110, 125, 32, > 45, 110, 109, 91, 36, 62, 93, 32, 115, 111, 114, 116, 108, 105, 115, 116, > 36, 62, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 104, 125, 32, 45, 109, 118, 91, 115, 111, 114, 116, 108, 105, 115, > 116, 123, 105, 40, 48, 44, 36, 62, 41, 125, 93, 32, 45, 49, 32, 45, > 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, > 32, 45, 110, 109, 91, 36, 62, 93, 32, 36, 123, 110, 109, 123, 105, 40, > 48, 44, 36, 62, 41, 125, 125, 32, 45, 100, 111, 110, 101, 10, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 111, 114, 116, 95, 115, 116, > 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 40, 118, 105, 101, 119, 101, 100, 32, 97, 115, 32, 97, 32, 108, 105, 115, > 116, 32, 111, 102, 32, 115, 116, 114, 105, 110, 103, 115, 41, 32, 105, 110, > 32, 108, 101, 120, 105, 99, 111, 103, 114, 97, 112, 104, 105, 99, 32, 111, > 114, 100, 101, 114, 46, 10, 115, 111, 114, 116, 95, 115, 116, 114, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 83, 111, 114, 116, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 105, 110, 32, 108, 101, 120, 105, 99, 111, > 103, 114, 97, 112, 104, 105, 99, 32, 111, 114, 100, 101, 114, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 121, 32, 45, 97, 32, 120, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 114, 111, 117, 110, 100, 40, 104, 47, 52, 44, > 49, 44, 49, 41, 125, 32, 121, 61, 123, 52, 42, 36, 62, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, > 10, 45, 45, 114, 111, 119, 115, 32, 36, 121, 44, 123, 36, 121, 43, 51, > 125, 32, 45, 102, 91, 49, 93, 32, 39, 105, 102, 40, 105, 62, 61, 57, > 55, 38, 38, 105, 60, 61, 49, 50, 50, 44, 105, 45, 51, 50, 44, 105, > 41, 39, 32, 45, 45, 91, 45, 49, 93, 32, 51, 50, 32, 45, 99, 91, > 45, 49, 93, 32, 48, 44, 54, 51, 32, 45, 115, 91, 45, 49, 93, 32, > 121, 32, 45, 42, 91, 45, 50, 93, 32, 54, 52, 32, 45, 42, 91, 45, > 51, 93, 32, 52, 48, 57, 54, 32, 45, 42, 91, 45, 52, 93, 32, 50, > 54, 50, 49, 52, 52, 32, 45, 43, 91, 45, 52, 45, 45, 49, 93, 10, > 45, 114, 118, 32, 45, 97, 32, 121, 32, 45, 115, 111, 114, 116, 32, 43, > 44, 120, 32, 45, 45, 114, 111, 119, 115, 32, 48, 32, 45, 114, 111, 119, > 115, 91, 48, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 108, 97, 98, > 101, 108, 91, 49, 93, 32, 45, 37, 91, 49, 93, 32, 50, 10, 45, 115, > 91, 49, 93, 32, 43, 44, 48, 32, 78, 61, 123, 64, 35, 45, 49, 125, > 10, 120, 48, 61, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, > 35, 45, 49, 125, 32, 120, 49, 61, 123, 36, 120, 48, 43, 64, 123, 123, > 49, 43, 36, 62, 125, 44, 104, 125, 125, 32, 45, 45, 122, 91, 48, 93, > 32, 36, 120, 48, 44, 123, 36, 120, 49, 45, 49, 125, 32, 120, 48, 61, > 36, 120, 49, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 45, > 36, 78, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 100, 111, 110, 101, 32, 45, 115, 32, 120, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 77, 97, 116, 104, 101, 109, > 97, 116, 105, 99, 97, 108, 32, 111, 112, 101, 114, 97, 116, 111, 114, 115, > 10, 35, 64, 103, 109, 105, 99, 32, 97, 98, 115, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 97, 98, 115, 111, 108, 117, 116, 101, 32, 118, 97, 108, 117, 101, 115, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 117, 98, 32, > 123, 105, 97, 125, 32, 45, 97, 98, 115, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, > 44, 49, 44, 39, 99, 111, 115, 40, 50, 48, 42, 120, 47, 119, 41, 39, > 32, 45, 45, 97, 98, 115, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 97, 99, 111, 115, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 97, > 114, 99, 45, 99, 111, 115, 105, 110, 101, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 45, > 49, 44, 49, 32, 45, 97, 99, 111, 115, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, > 44, 49, 44, 39, 120, 47, 119, 43, 48, 46, 49, 42, 117, 39, 32, 45, > 45, 97, 99, 111, 115, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, > 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 43, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 97, 100, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 97, 100, 100, 32, 58, 32, 118, 97, 108, 117, 101, 91, > 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, > 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, > 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 100, 100, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, > 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 116, 111, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, > 115, 117, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 43, 39, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 97, 100, 100, 32, 51, 48, 37, 32, 45, > 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 108, 117, 114, 32, 53, 32, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 32, 48, 44, 50, 53, 53, 32, 45, 97, 100, 100, 91, 49, 93, > 32, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 97, 100, 100, 32, 39, > 56, 48, 42, 99, 111, 115, 40, 56, 48, 42, 40, 120, 47, 119, 45, 48, > 46, 53, 41, 42, 40, 121, 47, 119, 45, 48, 46, 53, 41, 43, 99, 41, > 39, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 57, 32, 45, 45, 114, 111, > 116, 97, 116, 101, 91, 48, 93, 32, 123, 36, 62, 42, 51, 54, 125, 44, > 49, 44, 48, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, 111, 110, > 101, 32, 45, 97, 100, 100, 32, 45, 100, 105, 118, 32, 49, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 38, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 97, 110, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 97, 110, 100, 32, 58, 32, 118, 97, 108, 117, > 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, > 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, > 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 98, 105, 116, 119, 105, 115, 101, 32, 65, 78, 68, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 101, 113, 117, 101, > 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, 101, 32, 65, 78, > 68, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 38, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 97, 110, 100, 32, 123, 49, 50, 56, 43, 54, 52, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, > 32, 45, 97, 110, 100, 10, 35, 64, 103, 109, 105, 99, 32, 97, 115, 105, > 110, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, > 110, 116, 119, 105, 115, 101, 32, 97, 114, 99, 45, 115, 105, 110, 101, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 32, 45, 49, 44, 49, 32, 45, 97, 115, 105, 110, 91, > 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, > 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 120, 47, 119, 43, 48, 46, > 49, 42, 117, 39, 32, 45, 45, 97, 115, 105, 110, 32, 45, 100, 105, 115, > 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, > 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 97, 116, 97, 110, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, > 105, 115, 101, 32, 97, 114, 99, 45, 116, 97, 110, 103, 101, 110, 116, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 32, 48, 44, 56, 32, 45, 97, 116, 97, 110, 91, 45, > 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, > 48, 44, 49, 44, 49, 44, 49, 44, 39, 52, 42, 120, 47, 119, 43, 117, > 39, 32, 45, 45, 97, 116, 97, 110, 32, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 97, 116, 97, 110, 50, 32, 58, 32, 91, > 120, 95, 97, 114, 103, 117, 109, 101, 110, 116, 93, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 111, 114, 105, 101, 110, 116, 101, 100, 32, 97, 114, 99, 45, 116, 97, > 110, 103, 101, 110, 116, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 97, 99, 104, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 114, 101, 103, 97, 114, 100, > 101, 100, 32, 97, 115, 32, 116, 104, 101, 32, 121, 45, 97, 114, 103, 117, > 109, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 97, 114, 99, 45, > 116, 97, 110, 103, 101, 110, 116, 32, 102, 117, 110, 99, 116, 105, 111, 110, > 44, 32, 119, 104, 105, 108, 101, 32, 116, 104, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, > 109, 97, 103, 101, 32, 103, 105, 118, 101, 115, 32, 116, 104, 101, 32, 99, > 111, 114, 114, 101, 115, 112, 111, 110, 100, 105, 110, 103, 32, 120, 45, 97, > 114, 103, 117, 109, 101, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 40, 45, 49, 44, 49, 41, 32, 40, 45, 49, 59, 49, > 41, 32, 45, 114, 101, 115, 105, 122, 101, 32, 52, 48, 48, 44, 52, 48, > 48, 44, 49, 44, 49, 44, 51, 32, 45, 97, 116, 97, 110, 50, 91, 49, > 93, 32, 91, 48, 93, 32, 45, 107, 101, 101, 112, 91, 49, 93, 32, 45, > 109, 111, 100, 32, 123, 112, 105, 47, 56, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 60, 60, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 98, 115, 108, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 98, 115, 108, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, > 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, > 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, > 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, > 105, 116, 119, 105, 115, 101, 32, 108, 101, 102, 116, 32, 115, 104, 105, 102, > 116, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, > 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, > 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, > 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, > 101, 32, 108, 101, 102, 116, 32, 115, 104, 105, 102, 116, 32, 111, 102, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 60, 60, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 115, 108, 32, 39, 114, 111, > 117, 110, 100, 40, 51, 42, 120, 47, 119, 44, 48, 41, 39, 32, 45, 99, > 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, > 62, 62, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 98, 115, > 114, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 98, 115, 114, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, > 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, > 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, > 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 105, 116, > 119, 105, 115, 101, 32, 114, 105, 103, 104, 116, 32, 115, 104, 105, 102, 116, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, > 111, 114, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, > 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, > 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, > 101, 32, 114, 105, 103, 104, 116, 32, 115, 104, 105, 102, 116, 32, 111, 102, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 62, 62, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 115, 114, 32, 39, 114, > 111, 117, 110, 100, 40, 51, 42, 120, 47, 119, 44, 48, 41, 39, 32, 45, > 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, > 32, 99, 111, 115, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 99, 111, 115, 105, 110, 101, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 32, 48, 44, 123, 50, 42, 112, 105, 125, 32, 45, > 99, 111, 115, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 50, 48, > 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 99, 111, 115, 32, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, > 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 115, 104, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, > 116, 119, 105, 115, 101, 32, 104, 121, 112, 101, 114, 98, 111, 108, 105, 99, > 32, 99, 111, 115, 105, 110, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 45, 51, 44, > 51, 32, 45, 99, 111, 115, 104, 91, 45, 49, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, > 44, 39, 52, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 99, 111, 115, > 104, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, > 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 47, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 118, > 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 105, 118, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, > 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, > 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 105, 118, 105, 100, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, > 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, > 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 113, 117, > 111, 116, 105, 101, 110, 116, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 47, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 105, 118, 32, 39, 49, 43, > 97, 98, 115, 40, 99, 111, 115, 40, 120, 47, 49, 48, 41, 42, 115, 105, > 110, 40, 121, 47, 49, 48, 41, 41, 39, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 110, 111, 114, 109, 32, 45, 97, 100, 100, 91, 45, 49, 93, 32, 49, > 32, 45, 45, 100, 105, 118, 10, 35, 64, 103, 109, 105, 99, 32, 61, 61, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 101, 113, 39, 46, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 101, 113, > 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, > 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, 108, 101, 97, 110, > 32, 101, 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, > 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, > 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, > 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, > 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, > 108, 101, 97, 110, 32, 101, 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 61, 61, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 111, 117, 110, 100, 32, 52, 48, 32, 45, 101, 113, 32, 123, 114, > 111, 117, 110, 100, 40, 105, 97, 44, 52, 48, 41, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 113, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 120, 112, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 101, 120, 112, 111, 110, 101, 110, 116, 105, 97, 108, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 48, 44, 50, 32, 45, 101, 120, 112, 91, 45, 49, 93, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, > 49, 44, 49, 44, 39, 55, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, > 101, 120, 112, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, > 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 62, 61, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 103, 101, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 103, 101, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, > 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, > 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, > 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, > 108, 101, 97, 110, 32, 39, 103, 114, 101, 97, 116, 101, 114, 32, 111, 114, > 32, 101, 113, 117, 97, 108, 32, 116, 104, 97, 110, 39, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, > 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, > 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, > 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 98, 111, 111, 108, 101, 97, 110, 32, 39, 103, 114, 101, 97, 116, 101, 114, > 32, 111, 114, 32, 101, 113, 117, 97, 108, 32, 116, 104, 97, 110, 39, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 62, 61, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 103, 101, 32, 123, 105, 97, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 103, 101, 10, 35, > 64, 103, 109, 105, 99, 32, 62, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 103, 116, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 103, 116, 32, 58, 32, 118, 97, 108, 117, 101, 91, > 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, > 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, > 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 98, 111, 111, 108, 101, 97, 110, 32, 39, 103, 114, 101, 97, 116, 101, 114, > 32, 116, 104, 97, 110, 39, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, > 105, 109, 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, > 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, 108, 101, 97, > 110, 32, 39, 103, 114, 101, 97, 116, 101, 114, 32, 116, 104, 97, 110, 39, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 62, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 103, 116, 32, 123, 105, 97, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 103, 116, 10, 35, > 64, 103, 109, 105, 99, 32, 60, 61, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 108, 101, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 108, 101, 32, 58, 32, 118, 97, 108, 117, 101, > 91, 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, > 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, > 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 98, 111, 111, 108, 101, 97, 110, 32, 39, 108, 101, 115, 115, 32, 111, > 114, 32, 101, 113, 117, 97, 108, 32, 116, 104, 97, 110, 39, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, 104, 101, 109, 97, > 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 98, 111, 111, 108, 101, 97, 110, 32, 39, 108, 101, 115, 115, 32, 111, > 114, 32, 101, 113, 117, 97, 108, 32, 116, 104, 97, 110, 39, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 60, 61, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 108, 101, 32, 123, 105, 97, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 108, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 60, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 108, 116, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 108, 116, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, > 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, > 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, > 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, > 111, 108, 101, 97, 110, 32, 39, 108, 101, 115, 115, 32, 116, 104, 97, 110, > 39, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, > 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, > 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 98, 111, 111, 108, 101, 97, 110, 32, 39, 108, 101, > 115, 115, 32, 116, 104, 97, 110, 39, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 60, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 116, 32, 123, 105, > 97, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 32, 120, 32, 45, 108, 116, 10, 35, 64, 103, 109, 105, 99, 32, 108, 111, > 103, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, > 110, 116, 119, 105, 115, 101, 32, 98, 97, 115, 101, 45, 101, 32, 108, 111, > 103, 97, 114, 105, 116, 104, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 97, 100, 100, 32, 49, 32, 45, 108, 111, 103, 91, 45, 49, > 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, > 44, 49, 44, 49, 44, 49, 44, 39, 55, 42, 120, 47, 119, 43, 117, 39, > 32, 45, 45, 108, 111, 103, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 108, 111, 103, 49, 48, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, > 98, 97, 115, 101, 45, 49, 48, 32, 108, 111, 103, 97, 114, 105, 116, 104, > 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 97, 100, 100, > 32, 49, 32, 45, 108, 111, 103, 49, 48, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, > 44, 49, 44, 39, 55, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 108, > 111, 103, 49, 48, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, > 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 108, 111, 103, 50, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 98, 97, 115, > 101, 45, 50, 32, 108, 111, 103, 97, 114, 105, 116, 104, 109, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 97, 100, 100, 32, 49, 32, 45, 108, > 111, 103, 50, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 55, 42, > 120, 47, 119, 43, 117, 39, 32, 45, 45, 108, 111, 103, 50, 32, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, > 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 32, > 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, > 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, > 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 117, 109, 32, > 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 97, 110, 100, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, > 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 109, 97, 120, 105, 109, 97, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, > 32, 45, 109, 97, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 97, 120, 32, > 39, 82, 61, 40, 40, 120, 47, 119, 45, 48, 46, 53, 41, 94, 50, 43, > 40, 121, 47, 104, 45, 48, 46, 53, 41, 94, 50, 41, 94, 48, 46, 53, > 59, 50, 53, 53, 42, 82, 39, 10, 35, 64, 103, 109, 105, 99, 32, 47, > 47, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 100, 105, > 118, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 109, 100, 105, 118, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, > 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, > 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, > 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 97, > 116, 114, 105, 120, 32, 100, 105, 118, 105, 115, 105, 111, 110, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 109, 97, 116, 114, 105, 99, > 101, 115, 47, 118, 101, 99, 116, 111, 114, 115, 32, 98, 121, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, > 109, 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 97, 116, 114, 105, 120, 32, > 100, 105, 118, 105, 115, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 47, 47, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, > 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, > 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 117, 109, > 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 110, 100, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, > 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, > 101, 32, 109, 105, 110, 105, 109, 97, 32, 98, 101, 116, 119, 101, 101, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, > 120, 32, 45, 109, 105, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 105, 110, > 32, 39, 82, 61, 40, 40, 120, 47, 119, 45, 48, 46, 53, 41, 94, 50, > 43, 40, 121, 47, 104, 45, 48, 46, 53, 41, 94, 50, 41, 94, 48, 46, > 53, 59, 50, 53, 53, 42, 82, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 37, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 111, 100, > 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 111, 100, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, > 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, > 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 111, 100, 117, > 108, 111, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, > 101, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, > 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 120, 112, 114, 101, > 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, > 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 109, 111, 100, 117, 108, > 111, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 37, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 109, > 111, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 111, 100, 32, 39, 82, 61, > 40, 40, 120, 47, 119, 45, 48, 46, 53, 41, 94, 50, 43, 40, 121, 47, > 104, 45, 48, 46, 53, 41, 94, 50, 41, 94, 48, 46, 53, 59, 50, 53, > 53, 42, 82, 39, 10, 35, 64, 103, 109, 105, 99, 32, 42, 42, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 109, 117, 108, 39, 46, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 109, 109, > 117, 108, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, > 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, > 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 97, 116, 114, 105, > 120, 32, 114, 105, 103, 104, 116, 32, 109, 117, 108, 116, 105, 112, 108, 105, > 99, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 109, 97, 116, 114, 105, 99, 101, 115, 47, 118, 101, 99, 116, > 111, 114, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, 104, 101, 109, > 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 109, 97, 116, 114, 105, 120, 32, 114, 105, 103, 104, 116, 32, 109, > 117, 108, 116, 105, 112, 108, 105, 99, 97, 116, 105, 111, 110, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 42, 42, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 40, 48, 44, 49, 44, 48, 59, 48, 44, 48, > 44, 49, 59, 49, 44, 48, 44, 48, 41, 32, 40, 49, 59, 50, 59, 51, > 41, 32, 45, 45, 109, 109, 117, 108, 10, 35, 64, 103, 109, 105, 99, 32, > 42, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 117, 108, > 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 117, 108, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, > 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, > 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 77, 117, 108, 116, 105, 112, 108, 121, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, > 103, 101, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, > 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 111, 114, 32, 99, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 112, 114, 111, 100, 117, 99, 116, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 42, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 117, 108, 32, > 50, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 40, 49, 44, 50, 44, 51, 44, 52, 44, 53, 44, 54, 44, 55, > 44, 56, 41, 32, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, > 91, 48, 93, 32, 45, 109, 117, 108, 91, 48, 93, 32, 91, 45, 49, 93, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 109, 117, 108, 32, 39, 49, 45, 51, 42, > 97, 98, 115, 40, 120, 47, 119, 45, 48, 46, 53, 41, 39, 32, 45, 99, > 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 110, 101, 103, 97, 116, > 105, 118, 101, 91, 45, 49, 93, 32, 45, 45, 109, 117, 108, 10, 35, 64, > 103, 109, 105, 99, 32, 33, 61, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 110, 101, 113, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 110, 101, 113, 32, 58, 32, 118, 97, 108, 117, > 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, > 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, > 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 98, 111, 111, 108, 101, 97, 110, 32, 105, 110, 101, 113, 117, 97, > 108, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, > 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, 108, 101, 97, 110, 32, > 105, 110, 101, 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 33, 61, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 111, > 117, 110, 100, 32, 52, 48, 32, 45, 110, 101, 113, 32, 123, 114, 111, 117, > 110, 100, 40, 105, 97, 44, 52, 48, 41, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 124, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, > 114, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 111, 114, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, > 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, > 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 105, 116, 119, > 105, 115, 101, 32, 79, 82, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, > 105, 109, 97, 103, 101, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, > 116, 105, 99, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, > 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, > 105, 115, 101, 32, 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 98, > 105, 116, 119, 105, 115, 101, 32, 79, 82, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 124, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 111, 114, 32, 49, > 50, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 32, 120, 32, 45, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 94, 32, > 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 112, 111, 119, 39, 46, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, > 119, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, > 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, > 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 97, > 105, 115, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 32, 116, 111, 32, 116, 104, 101, 32, 112, 111, 119, 101, 114, 32, > 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, > 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, 109, 97, 116, > 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, > 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, > 105, 110, 116, 119, 105, 115, 101, 32, 115, 101, 113, 117, 101, 110, 116, 105, > 97, 108, 32, 112, 111, 119, 101, 114, 115, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 94, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 105, 118, 32, > 50, 53, 53, 32, 45, 45, 112, 111, 119, 32, 48, 46, 53, 32, 45, 109, > 117, 108, 32, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 103, 114, 97, > 100, 105, 101, 110, 116, 32, 45, 112, 111, 119, 32, 50, 32, 45, 97, 100, > 100, 32, 45, 112, 111, 119, 32, 48, 46, 50, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 111, 108, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, > 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, > 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, > 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 105, > 116, 119, 105, 115, 101, 32, 108, 101, 102, 116, 32, 114, 111, 116, 97, 116, > 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, > 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, > 105, 115, 101, 32, 108, 101, 102, 116, 32, 114, 111, 116, 97, 116, 105, 111, > 110, 32, 111, 102, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 111, 108, 32, 39, 114, 111, 117, 110, 100, 40, > 51, 42, 120, 47, 119, 44, 48, 41, 39, 32, 45, 99, 117, 116, 32, 48, > 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 114, 111, 114, 32, > 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, > 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, > 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 98, 105, 116, 119, 105, 115, 101, 32, > 114, 105, 103, 104, 116, 32, 114, 111, 116, 97, 116, 105, 111, 110, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, 104, 101, 109, > 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 101, 113, 117, > 101, 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, 101, 32, 114, > 105, 103, 104, 116, 32, 114, 111, 116, 97, 116, 105, 111, 110, 32, 111, 102, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 111, 114, 32, 39, 114, 111, 117, 110, 100, 40, 51, 42, 120, 47, > 119, 44, 48, 41, 39, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 105, 103, 110, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, > 101, 32, 115, 105, 103, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 115, 117, 98, 32, 123, 105, 97, 125, 32, 45, 115, 105, 103, 110, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 99, 111, 115, 40, 50, > 48, 42, 120, 47, 119, 43, 117, 41, 39, 32, 45, 45, 115, 105, 103, 110, > 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, > 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 105, 110, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, > 105, 110, 116, 119, 105, 115, 101, 32, 115, 105, 110, 101, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 48, 44, 123, 50, 42, 112, 105, 125, 32, 45, 115, 105, 110, 91, > 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, > 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 50, 48, 42, 120, 47, 119, > 43, 117, 39, 32, 45, 45, 115, 105, 110, 32, 45, 100, 105, 115, 112, 108, > 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 105, 110, 99, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, > 101, 32, 115, 105, 110, 99, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 32, 123, 45, 50, 42, 112, 105, 125, 44, 123, 50, 42, > 112, 105, 125, 32, 45, 115, 105, 110, 99, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, > 44, 49, 44, 39, 50, 48, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, > 115, 105, 110, 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, > 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 105, 110, 104, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 104, 121, 112, > 101, 114, 98, 111, 108, 105, 99, 32, 115, 105, 110, 101, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 45, 51, 44, 51, 32, 45, 115, 105, 110, 104, 91, 45, 49, 93, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, > 49, 44, 49, 44, 49, 44, 39, 52, 42, 120, 47, 119, 43, 117, 39, 32, > 45, 45, 115, 105, 110, 104, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 115, 113, 114, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, > 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 113, > 117, 97, 114, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 113, 114, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, > 49, 44, 39, 52, 48, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 115, > 113, 114, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, > 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 113, 114, 116, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 113, 117, 97, 114, > 101, 32, 114, 111, 111, 116, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 115, 113, 114, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 52, 48, 42, > 120, 47, 119, 43, 117, 39, 32, 45, 45, 115, 113, 114, 116, 32, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, > 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 45, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, 117, 98, 39, 46, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 115, 117, 98, 32, > 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, > 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, > 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 117, 98, 116, > 114, 97, 99, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, > 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 100, 105, 102, > 102, 101, 114, 101, 110, 99, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 45, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 117, 98, 32, 51, > 48, 37, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 115, > 117, 98, 91, 45, 49, 93, 32, 91, 48, 93, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 115, 117, 98, 32, 39, 105, 40, 119, 47, 50, 43, 48, 46, 57, 42, > 40, 120, 45, 119, 47, 50, 41, 44, 121, 41, 39, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 115, 117, 98, > 10, 35, 64, 103, 109, 105, 99, 32, 116, 97, 110, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 116, 97, 110, 103, 101, 110, 116, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 123, 45, > 48, 46, 52, 55, 42, 112, 105, 125, 44, 123, 48, 46, 52, 55, 42, 112, > 105, 125, 32, 45, 116, 97, 110, 91, 45, 49, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, > 44, 39, 50, 48, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 116, 97, > 110, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, > 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 116, 97, 110, 104, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 104, 121, 112, 101, 114, 98, > 111, 108, 105, 99, 32, 116, 97, 110, 103, 101, 110, 116, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 45, 51, 44, 51, 32, 45, 116, 97, 110, 104, 91, 45, 49, 93, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, > 49, 44, 49, 44, 49, 44, 39, 52, 42, 120, 47, 119, 43, 117, 39, 32, > 45, 45, 116, 97, 110, 104, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 120, 111, 114, 32, 58, 32, 118, 97, 108, 117, 101, > 91, 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, > 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, > 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 98, 105, 116, 119, 105, 115, 101, 32, 88, 79, 82, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, > 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, > 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 101, 113, 117, 101, 110, > 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, 101, 32, 88, 79, 82, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 120, 111, 114, 32, 49, > 50, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 32, 120, 32, 45, 120, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 58, 32, 86, 97, 108, 117, 101, 115, 32, 109, 97, 110, 105, 112, 117, 108, > 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 32, 58, 32, 48, 60, 61, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 60, 61, 49, 44, 120, 48, 44, 121, > 48, 44, 120, 49, 44, 121, 49, 44, 120, 50, 44, 121, 50, 44, 46, 46, > 46, 44, 120, 78, 44, 121, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 99, 117, 114, 118, 101, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 116, 111, 32, 105, > 109, 97, 103, 101, 32, 118, 97, 108, 117, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 61, 49, 39, 44, 32, 39, 120, 48, 61, 48, 39, 44, 32, 39, 121, > 48, 61, 49, 48, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 49, 44, 48, 44, 48, > 44, 49, 50, 56, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 10, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 49, 60, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 49, 48, 48, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 105, 110, > 116, 101, 110, 115, 105, 116, 121, 32, 99, 117, 114, 118, 101, 32, 119, 105, > 116, 104, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, > 32, 97, 110, 100, 32, 107, 101, 121, 112, 111, 105, 110, 116, 115, 32, 40, > 36, 123, 50, 45, 45, 49, 125, 41, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 102, 117, 110, 99, > 116, 105, 111, 110, 49, 100, 32, 36, 123, 94, 48, 125, 32, 45, 109, 97, > 112, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 58, 32, 103, 97, > 109, 109, 97, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 103, 97, 109, 109, 97, 32, 99, 111, 114, 114, > 101, 99, 116, 105, 111, 110, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 50, 10, > 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 36, 49, 62, 61, 48, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 71, 97, 109, 109, 97, 45, > 99, 111, 114, 114, 101, 99, 116, 105, 111, 110, 32, 116, 111, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 103, 97, 109, 109, > 97, 32, 36, 49, 46, 34, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 109, 77, 61, 123, 105, 109, 125, > 44, 123, 105, 77, 125, 32, 45, 110, 32, 48, 44, 49, 32, 45, 94, 32, > 123, 49, 47, 36, 49, 125, 32, 45, 110, 32, 36, 109, 77, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 98, 97, 108, 97, 110, 99, 101, 95, 103, 97, > 109, 109, 97, 32, 58, 32, 95, 114, 101, 102, 95, 99, 111, 108, 111, 114, > 49, 44, 46, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 99, 111, 108, 111, 114, 32, 98, 97, 108, 97, 110, > 99, 101, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 97, 116, 105, 111, > 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 44, 32, 119, 105, 116, 104, 32, 114, 101, 115, 112, 101, 99, > 116, 32, 116, 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 114, > 101, 102, 101, 114, 101, 110, 99, 101, 32, 99, 111, 108, 111, 114, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 101, 102, 95, 99, 111, 108, > 111, 114, 49, 61, 49, 50, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 97, 108, 97, 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 49, > 50, 56, 44, 54, 52, 44, 54, 52, 10, 98, 97, 108, 97, 110, 99, 101, > 95, 103, 97, 109, 109, 97, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 49, 50, 56, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 99, 111, 108, 111, 114, 32, 98, 97, 108, > 97, 110, 99, 101, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 97, 116, > 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 119, 105, 116, 104, 32, 103, 97, 109, 109, 97, 32, 99, 117, 114, 118, 101, > 32, 97, 110, 100, 32, 114, 101, 102, 101, 114, 101, 110, 99, 101, 32, 99, > 111, 108, 111, 114, 32, 40, 34, 36, 123, 94, 48, 125, 34, 41, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 40, 36, 123, 94, 48, 125, 41, 32, > 45, 114, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 115, 125, 44, 49, > 44, 49, 44, 49, 44, 48, 44, 49, 32, 45, 115, 91, 45, 50, 93, 32, > 99, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 47, 91, 36, > 62, 93, 32, 50, 53, 53, 32, 45, 94, 91, 36, 62, 93, 32, 123, 108, > 111, 103, 40, 64, 123, 45, 49, 44, 36, 62, 125, 41, 47, 108, 111, 103, > 40, 64, 123, 36, 62, 44, 97, 125, 41, 125, 32, 45, 42, 91, 36, 62, > 93, 32, 50, 53, 53, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 97, 32, 99, 32, 45, 110, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 109, 112, 108, 101, > 120, 50, 112, 111, 108, 97, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 99, 111, 109, 112, 108, 101, 120, > 32, 116, 111, 32, 112, 111, 108, 97, 114, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 102, 102, 116, 32, 45, 99, 111, 109, 112, 108, 101, 120, 50, 112, 111, 108, > 97, 114, 91, 45, 50, 44, 45, 49, 93, 32, 45, 108, 111, 103, 91, 45, > 50, 93, 32, 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, 53, 48, > 37, 44, 53, 48, 37, 44, 48, 44, 48, 44, 50, 32, 45, 114, 101, 109, > 111, 118, 101, 91, 45, 49, 93, 10, 99, 111, 109, 112, 108, 101, 120, 50, > 112, 111, 108, 97, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 109, 112, 117, 116, 101, 32, 99, 111, 109, 112, 108, 101, 120, > 32, 116, 111, 32, 112, 111, 108, 97, 114, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 123, 50, > 42, 36, 62, 125, 44, 123, 50, 42, 36, 62, 43, 49, 125, 93, 10, 45, > 114, 91, 49, 93, 32, 91, 48, 93, 44, 51, 32, 45, 45, 97, 116, 97, > 110, 50, 91, 49, 93, 32, 91, 48, 93, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 64, 123, 49, 44, 110, 125, 44, 49, 32, 45, 115, 113, 114, 91, > 45, 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 51, 44, 45, 50, 93, > 32, 45, 115, 113, 114, 116, 91, 45, 50, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 99, 111, 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 32, > 58, 32, 95, 105, 115, 95, 98, 105, 110, 97, 114, 121, 95, 100, 97, 116, > 97, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 109, 97, 120, > 105, 109, 117, 109, 95, 115, 101, 113, 117, 101, 110, 99, 101, 95, 108, 101, > 110, 103, 116, 104, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 114, 101, 115, 115, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 50, 120, 78, > 32, 100, 97, 116, 97, 32, 109, 97, 116, 114, 105, 99, 101, 115, 44, 32, > 117, 115, 105, 110, 103, 32, 82, 76, 69, 32, 97, 108, 103, 111, 114, 105, > 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, > 116, 32, 39, 109, 97, 120, 105, 109, 117, 109, 95, 115, 101, 113, 117, 101, > 110, 99, 101, 95, 108, 101, 110, 103, 116, 104, 61, 48, 39, 32, 116, 111, > 32, 100, 105, 115, 97, 98, 108, 101, 32, 109, 97, 120, 105, 109, 117, 109, > 32, 108, 101, 110, 103, 116, 104, 32, 99, 111, 110, 115, 116, 114, 97, 105, > 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 115, > 95, 98, 105, 110, 97, 114, 121, 95, 100, 97, 116, 97, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 109, 97, 120, 105, 109, 117, 109, 95, 115, 101, 113, > 117, 101, 110, 99, 101, 95, 108, 101, 110, 103, 116, 104, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, > 32, 49, 48, 48, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 52, > 32, 45, 114, 111, 117, 110, 100, 32, 45, 45, 99, 111, 109, 112, 114, 101, > 115, 115, 95, 114, 108, 101, 32, 44, 32, 45, 45, 117, 110, 99, 111, 109, > 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 10, 99, 111, > 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 48, 125, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 48, 125, 41, 32, > 38, 38, 32, 36, 50, 62, 61, 48, 34, 10, 45, 118, 32, 45, 32, 115, > 48, 61, 34, 32, 102, 111, 114, 32, 98, 105, 110, 97, 114, 121, 32, 100, > 97, 116, 97, 34, 32, 115, 49, 61, 34, 34, 10, 45, 105, 102, 32, 36, > 50, 32, 115, 61, 34, 44, 32, 119, 105, 116, 104, 32, 109, 97, 120, 105, > 109, 97, 108, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 108, 101, 110, > 103, 116, 104, 32, 34, 36, 50, 32, 45, 101, 108, 115, 101, 32, 115, 61, > 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 114, 101, 115, 115, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 82, > 76, 69, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 34, 36, 123, 115, > 123, 33, 36, 49, 125, 125, 36, 115, 34, 46, 34, 32, 45, 118, 32, 45, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 32, 105, 109, 61, > 123, 105, 109, 125, 32, 104, 101, 97, 100, 101, 114, 61, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 100, 125, 59, 123, 115, 125, 59, 36, 105, 109, 59, > 123, 36, 49, 33, 61, 48, 125, 10, 45, 45, 32, 36, 105, 109, 32, 45, > 121, 32, 120, 32, 40, 123, 64, 123, 48, 44, 45, 49, 125, 43, 49, 125, > 41, 32, 45, 97, 32, 120, 32, 45, 114, 32, 49, 48, 48, 37, 44, 51, > 10, 45, 102, 32, 39, 62, 105, 102, 40, 121, 61, 61, 48, 44, 105, 44, > 105, 102, 40, 121, 61, 61, 49, 44, 105, 102, 40, 105, 40, 120, 44, 48, > 41, 61, 61, 105, 40, 120, 43, 49, 44, 48, 41, 44, 45, 49, 44, 120, > 41, 44, 105, 102, 40, 105, 40, 120, 45, 49, 44, 49, 41, 61, 61, 45, > 49, 44, 105, 40, 120, 45, 49, 44, 50, 41, 43, 49, 44, 49, 41, 41, > 41, 39, 10, 45, 105, 102, 32, 36, 50, 10, 45, 116, 114, 97, 110, 115, > 112, 111, 115, 101, 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 10, 45, > 102, 91, 45, 49, 93, 32, 39, 62, 105, 102, 40, 120, 61, 61, 50, 44, > 105, 44, 105, 102, 40, 120, 61, 61, 48, 44, 105, 102, 40, 106, 40, 48, > 44, 45, 49, 41, 61, 61, 36, 50, 44, 49, 44, 105, 102, 40, 105, 33, > 61, 49, 44, 106, 40, 48, 44, 45, 49, 41, 43, 49, 44, 49, 41, 41, > 44, 105, 102, 40, 105, 61, 61, 45, 49, 38, 38, 106, 40, 45, 49, 41, > 61, 61, 36, 50, 44, 121, 44, 105, 41, 41, 41, 39, 10, 45, 109, 105, > 114, 114, 111, 114, 32, 120, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, > 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 122, 32, 48, 44, 123, 119, > 45, 50, 125, 32, 45, 115, 32, 121, 44, 51, 32, 45, 100, 105, 115, 99, > 97, 114, 100, 91, 49, 93, 32, 45, 49, 32, 45, 119, 97, 114, 112, 91, > 48, 44, 50, 93, 32, 91, 49, 93, 44, 48, 44, 48, 32, 45, 114, 109, > 91, 49, 93, 10, 45, 105, 102, 32, 36, 49, 10, 45, 110, 101, 113, 91, > 48, 93, 32, 48, 32, 45, 42, 91, 48, 93, 32, 50, 32, 45, 45, 91, > 48, 93, 32, 49, 32, 45, 42, 10, 45, 101, 108, 115, 101, 10, 45, 42, > 91, 45, 49, 93, 32, 45, 49, 32, 45, 114, 118, 32, 45, 97, 32, 120, > 32, 45, 121, 32, 45, 100, 105, 115, 99, 97, 114, 100, 32, 45, 49, 32, > 45, 102, 32, 39, 62, 105, 102, 40, 105, 40, 48, 44, 121, 45, 49, 41, > 60, 48, 38, 38, 105, 61, 61, 48, 38, 38, 105, 40, 48, 44, 121, 43, > 49, 41, 60, 48, 44, 45, 49, 44, 105, 41, 39, 32, 45, 100, 105, 115, > 99, 97, 114, 100, 32, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 91, 48, 93, 32, 40, 36, 104, 101, 97, 100, 101, 114, 41, 32, 45, > 97, 32, 121, 32, 45, 110, 109, 32, 36, 110, 109, 44, 49, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 117, 109, 117, 108, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 99, 117, 109, 117, 108, 97, 116, 105, 118, 101, 32, 102, 117, 110, 99, > 116, 105, 111, 110, 32, 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, 97, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 45, > 45, 99, 117, 109, 117, 108, 91, 45, 49, 93, 32, 45, 100, 105, 115, 112, > 108, 97, 121, 95, 103, 114, 97, 112, 104, 91, 45, 50, 44, 45, 49, 93, > 32, 52, 48, 48, 44, 51, 48, 48, 44, 51, 10, 99, 117, 109, 117, 108, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, > 117, 116, 101, 32, 99, 117, 109, 117, 108, 97, 116, 105, 118, 101, 32, 111, > 102, 32, 102, 117, 110, 99, 116, 105, 111, 110, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 100, 105, 109, 61, 123, 119, 125, 44, 123, 104, > 125, 44, 123, 100, 125, 44, 123, 115, 125, 32, 45, 121, 32, 120, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 114, 111, 117, 110, 100, 40, 108, 111, > 103, 50, 40, 119, 41, 44, 49, 44, 49, 41, 125, 32, 45, 45, 115, 104, > 105, 102, 116, 91, 45, 49, 93, 32, 123, 50, 94, 36, 62, 125, 32, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, > 114, 32, 36, 100, 105, 109, 44, 45, 49, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 99, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 99, > 117, 116, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 99, 117, 116, 32, 58, 32, 123, 32, 118, 97, 108, 117, 101, 48, > 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, 125, > 44, 123, 32, 118, 97, 108, 117, 101, 49, 91, 37, 93, 32, 124, 32, 91, > 105, 109, 97, 103, 101, 49, 93, 32, 125, 32, 58, 32, 91, 105, 109, 97, > 103, 101, 93, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 117, 116, 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 114, 97, 110, 103, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 99, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 114, 117, 110, 115, 32, > 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 109, 111, 100, 101, > 32, 40, 117, 115, 101, 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, > 110, 116, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, > 32, 111, 112, 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 97, 100, 100, 32, 51, 48, 37, 32, 45, 99, 117, 116, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, > 117, 116, 32, 50, 53, 37, 44, 55, 53, 37, 10, 35, 64, 103, 109, 105, > 99, 32, 100, 105, 115, 99, 97, 114, 100, 32, 58, 32, 118, 97, 108, 117, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 109, 111, 118, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 118, 97, 108, 117, 101, 32, 105, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 110, 100, 32, 114, > 101, 116, 117, 114, 110, 32, 114, 101, 115, 117, 108, 116, 115, 32, 97, 115, > 32, 115, 105, 110, 103, 108, 101, 45, 99, 111, 108, 117, 109, 110, 32, 118, > 101, 99, 116, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 102, 32, 97, 108, 108, 32, 112, 105, 120, 101, 108, 115, 32, 111, 102, > 32, 97, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 97, 114, 101, 32, 101, 113, 117, 97, 108, 32, 116, 111, 32, 116, > 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, > 117, 101, 44, 32, 97, 110, 32, 101, 109, 112, 116, 121, 32, 105, 109, 97, > 103, 101, 32, 105, 115, 32, 114, 101, 116, 117, 114, 110, 101, 100, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, 59, 50, 59, > 51, 59, 52, 59, 51, 59, 50, 59, 49, 41, 32, 45, 45, 100, 105, 115, > 99, 97, 114, 100, 32, 50, 10, 100, 105, 115, 99, 97, 114, 100, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, 101, > 32, 118, 97, 108, 117, 101, 32, 36, 49, 32, 105, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, > 32, 45, 44, 36, 49, 32, 45, 97, 32, 121, 10, 45, 105, 102, 32, 123, > 33, 64, 35, 125, 32, 49, 44, 49, 44, 49, 44, 49, 44, 36, 49, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, > 105, 103, 101, 110, 50, 116, 101, 110, 115, 111, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 99, 111, 109, 112, 111, 115, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 112, 97, 105, 114, 115, 32, 111, 102, > 32, 101, 105, 103, 101, 110, 118, 97, 108, 117, 101, 115, 47, 101, 105, 103, > 101, 110, 118, 101, 99, 116, 111, 114, 115, 32, 97, 115, 32, 50, 120, 50, > 32, 111, 114, 32, 51, 120, 51, 32, 116, 101, 110, 115, 111, 114, 32, 102, > 105, 101, 108, 100, 115, 46, 10, 101, 105, 103, 101, 110, 50, 116, 101, 110, > 115, 111, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, > 101, 99, 111, 109, 112, 111, 115, 101, 32, 112, 97, 105, 114, 115, 32, 105, > 110, 32, 101, 105, 103, 101, 110, 32, 102, 105, 101, 108, 100, 36, 63, 32, > 97, 115, 32, 50, 120, 50, 32, 111, 114, 32, 51, 120, 51, 32, 116, 101, > 110, 115, 111, 114, 32, 102, 105, 101, 108, 100, 115, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 47, 50, > 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, > 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 105, 102, 32, 123, 115, > 61, 61, 50, 125, 10, 45, 115, 91, 45, 49, 93, 32, 99, 10, 45, 45, > 115, 113, 114, 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 51, 93, 32, 45, 115, 113, 114, 91, 45, 51, 93, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 45, 45, 42, 91, 45, 51, 93, 32, 45, 49, 10, > 45, 115, 104, 91, 45, 53, 93, 10, 45, 97, 91, 45, 51, 45, 45, 49, > 93, 32, 99, 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 10, > 45, 115, 104, 91, 45, 51, 93, 32, 48, 44, 48, 32, 45, 42, 91, 45, > 51, 44, 45, 49, 93, 10, 45, 115, 104, 91, 45, 51, 93, 32, 49, 44, > 49, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 114, 109, 91, > 45, 51, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, > 108, 105, 102, 32, 123, 115, 61, 61, 54, 125, 10, 45, 115, 91, 45, 49, > 93, 32, 99, 10, 45, 108, 91, 45, 54, 45, 45, 52, 93, 32, 45, 45, > 115, 113, 114, 91, 45, 50, 93, 32, 45, 45, 42, 91, 45, 50, 44, 45, > 51, 93, 32, 45, 45, 115, 113, 114, 91, 45, 51, 93, 32, 45, 42, 91, > 45, 53, 93, 32, 91, 45, 54, 93, 32, 45, 42, 91, 45, 52, 93, 32, > 91, 45, 54, 93, 32, 45, 115, 113, 114, 91, 45, 54, 93, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 10, 45, 108, 91, 45, 51, 45, 45, > 49, 93, 32, 45, 45, 115, 113, 114, 91, 45, 50, 93, 32, 45, 45, 42, > 91, 45, 50, 44, 45, 51, 93, 32, 45, 45, 115, 113, 114, 91, 45, 51, > 93, 32, 45, 42, 91, 45, 53, 93, 32, 91, 45, 54, 93, 32, 45, 42, > 91, 45, 52, 93, 32, 91, 45, 54, 93, 32, 45, 115, 113, 114, 91, 45, > 54, 93, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 10, 45, 115, > 91, 45, 51, 93, 32, 99, 10, 45, 45, 91, 45, 53, 93, 32, 91, 45, > 51, 93, 32, 45, 45, 91, 45, 52, 93, 32, 91, 45, 51, 93, 32, 45, > 42, 91, 45, 50, 93, 32, 91, 45, 53, 93, 32, 45, 42, 91, 45, 49, > 93, 32, 91, 45, 52, 93, 10, 40, 49, 94, 48, 94, 48, 94, 49, 94, > 48, 94, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 52, 93, 32, 45, 114, 109, > 91, 45, 54, 45, 45, 52, 93, 32, 45, 43, 91, 45, 51, 45, 45, 49, > 93, 10, 45, 101, 108, 115, 101, 32, 45, 101, 114, 114, 111, 114, 91, 48, > 45, 45, 51, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, > 101, 105, 103, 101, 110, 50, 116, 101, 110, 115, 111, 114, 39, 58, 32, 73, > 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, 91, 34, 123, > 64, 35, 45, 36, 62, 45, 49, 125, 34, 93, 32, 58, 32, 68, 105, 109, > 101, 110, 115, 105, 111, 110, 115, 32, 34, 123, 119, 125, 34, 44, 34, 123, > 104, 125, 34, 44, 34, 123, 100, 125, 34, 44, 34, 123, 115, 125, 34, 32, > 100, 111, 101, 115, 32, 110, 111, 116, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 32, 97, 32, 102, 105, 101, 108, 100, 32, 111, 102, 32, 50, 100, > 32, 111, 114, 32, 51, 100, 32, 101, 105, 103, 101, 110, 118, 101, 99, 116, > 111, 114, 115, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, > 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, > 110, 100, 105, 97, 110, 32, 58, 32, 95, 100, 97, 116, 97, 116, 121, 112, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 118, 101, 114, 115, 101, 32, 100, 97, 116, 97, 32, 101, 110, > 100, 105, 97, 110, 110, 101, 115, 115, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 101, 118, 101, > 110, 116, 117, 97, 108, 108, 121, 32, 99, 111, 110, 115, 105, 100, 101, 114, > 105, 110, 103, 32, 116, 104, 101, 32, 112, 105, 120, 101, 108, 32, 98, 101, > 105, 110, 103, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 100, 97, 116, 97, 116, 121, 112, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 100, 97, 116, 97, 116, 121, 112, > 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 98, 111, 111, 108, > 32, 124, 32, 117, 99, 104, 97, 114, 32, 124, 32, 99, 104, 97, 114, 32, > 124, 32, 117, 115, 104, 111, 114, 116, 32, 124, 32, 115, 104, 111, 114, 116, > 32, 124, 32, 117, 105, 110, 116, 32, 124, 32, 105, 110, 116, 32, 124, 32, > 117, 108, 111, 110, 103, 32, 124, 32, 108, 111, 110, 103, 32, 124, 32, 102, > 108, 111, 97, 116, 32, 124, 32, 100, 111, 117, 98, 108, 101, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 113, 117, 97, 108, 105, 122, 101, > 32, 58, 32, 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 91, > 37, 93, 44, 95, 118, 97, 108, 117, 101, 95, 109, 105, 110, 91, 37, 93, > 44, 95, 118, 97, 108, 117, 101, 95, 109, 97, 120, 91, 37, 93, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 113, > 117, 97, 108, 105, 122, 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 118, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 44, 32, 116, 104, 101, 32, > 101, 113, 117, 97, 108, 105, 122, 97, 116, 105, 111, 110, 32, 105, 115, 32, > 100, 111, 110, 101, 32, 111, 110, 108, 121, 32, 102, 111, 114, 32, 112, 105, > 120, 101, 108, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 118, > 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 110, 98, 95, 108, 101, 118, 101, 108, 115, 61, > 50, 53, 54, 39, 44, 32, 39, 118, 97, 108, 117, 101, 95, 109, 105, 110, > 61, 48, 37, 39, 32, 97, 110, 100, 32, 39, 118, 97, 108, 117, 101, 95, > 109, 97, 120, 61, 49, 48, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, 52, 44, 48, 44, 49, > 50, 56, 10, 35, 64, 103, 109, 105, 99, 32, 102, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 102, 105, 108, 108, 39, 46, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 108, 108, 32, > 58, 32, 118, 97, 108, 117, 101, 49, 44, 95, 118, 97, 108, 117, 101, 50, > 44, 46, 46, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, > 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 105, 108, 108, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, > 116, 104, 32, 118, 97, 108, 117, 101, 115, 32, 114, 101, 97, 100, 32, 102, > 114, 111, 109, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 118, 97, 108, 117, 101, 32, 108, 105, 115, 116, 44, 32, 101, 120, > 105, 115, 116, 105, 110, 103, 32, 105, 109, 97, 103, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, > 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 46, 32, 83, 105, 110, 103, 108, 101, 32, 113, 117, 111, 116, 101, 115, 32, > 109, 97, 121, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, 100, 32, 105, > 110, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 102, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 52, 44, 52, 32, 45, 102, 105, 108, 108, 32, 49, 44, 50, 44, 51, 44, > 52, 44, 53, 44, 54, 44, 55, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 52, 44, 52, 32, 40, 49, 44, 50, 44, 51, 44, 52, 44, > 53, 44, 54, 44, 55, 41, 32, 45, 102, 105, 108, 108, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 32, 45, 102, 105, > 108, 108, 32, 34, 88, 61, 120, 45, 119, 47, 50, 59, 32, 89, 61, 121, > 45, 104, 47, 50, 59, 32, 82, 61, 115, 113, 114, 116, 40, 88, 94, 50, > 43, 89, 94, 50, 41, 59, 32, 97, 61, 97, 116, 97, 110, 50, 40, 89, > 44, 88, 41, 59, 32, 105, 102, 32, 40, 82, 60, 61, 49, 56, 48, 44, > 50, 53, 53, 42, 97, 98, 115, 40, 99, 111, 115, 40, 99, 43, 50, 48, > 48, 42, 40, 120, 47, 119, 45, 48, 46, 53, 41, 42, 40, 121, 47, 104, > 45, 48, 46, 53, 41, 41, 41, 44, 56, 53, 48, 42, 40, 97, 37, 40, > 48, 46, 49, 42, 40, 99, 43, 49, 41, 41, 41, 41, 34, 10, 35, 64, > 103, 109, 105, 99, 32, 102, 108, 111, 97, 116, 50, 105, 110, 116, 56, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 102, 108, 111, 97, 116, 45, > 118, 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, > 32, 56, 98, 105, 116, 115, 32, 105, 110, 116, 101, 103, 101, 114, 32, 114, > 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, > 102, 108, 111, 97, 116, 50, 105, 110, 116, 56, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 102, 108, > 111, 97, 116, 45, 118, 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 116, 111, 32, 56, 98, 105, 116, 115, 32, 105, 110, 116, 101, > 103, 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, > 111, 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, > 99, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 109, 61, 123, 105, 109, 125, 32, 77, 61, 123, 105, 77, > 125, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 49, 54, 55, 55, > 55, 50, 49, 54, 44, 48, 44, 49, 10, 45, 45, 62, 62, 32, 56, 32, > 45, 97, 110, 100, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 45, 97, > 110, 100, 91, 45, 50, 93, 32, 50, 53, 53, 32, 45, 62, 62, 91, 45, > 51, 93, 32, 49, 54, 10, 40, 123, 39, 36, 109, 44, 36, 77, 39, 125, > 41, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 105, 110, 116, 56, 50, 102, 108, 111, 97, 116, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 56, 98, 105, 116, 115, 32, 105, 110, 116, 101, 103, > 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, > 110, 115, 32, 116, 111, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, 117, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 105, 110, 116, 56, 50, > 102, 108, 111, 97, 116, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 110, 118, 101, 114, 116, 32, 56, 98, 105, 116, 115, 32, 105, > 110, 116, 101, 103, 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, > 97, 116, 105, 111, 110, 36, 63, 32, 116, 111, 32, 102, 108, 111, 97, 116, > 45, 118, 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 123, 104, 45, 49, 125, 44, 123, 104, > 45, 49, 125, 44, 48, 44, 48, 32, 109, 61, 64, 123, 45, 49, 44, 116, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 111, 119, 115, 32, > 48, 44, 123, 104, 45, 50, 125, 32, 45, 115, 32, 121, 44, 51, 32, 45, > 42, 91, 45, 51, 93, 32, 54, 53, 53, 51, 54, 32, 45, 42, 91, 45, > 50, 93, 32, 50, 53, 54, 32, 45, 111, 114, 10, 45, 115, 107, 105, 112, > 32, 64, 123, 45, 110, 92, 32, 36, 109, 125, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 105, 110, 100, 101, 120, 32, 58, 32, 123, 32, 91, 112, > 97, 108, 101, 116, 116, 101, 93, 32, 124, 32, 112, 114, 101, 100, 101, 102, > 105, 110, 101, 100, 95, 112, 97, 108, 101, 116, 116, 101, 32, 125, 44, 48, > 60, 61, 95, 100, 105, 116, 104, 101, 114, 105, 110, 103, 60, 61, 49, 44, > 95, 109, 97, 112, 95, 112, 97, 108, 101, 116, 116, 101, 61, 123, 32, 48, > 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 73, 110, 100, 101, 120, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, > 108, 117, 101, 100, 32, 112, 97, 108, 101, 116, 116, 101, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 112, 114, 101, 100, 101, 102, 105, 110, > 101, 100, 95, 112, 97, 108, 101, 116, 116, 101, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 100, 101, 102, 97, 117, 108, 116, 32, 124, > 32, 49, 61, 72, 83, 86, 32, 124, 32, 50, 61, 108, 105, 110, 101, 115, > 32, 124, 32, 51, 61, 104, 111, 116, 32, 124, 32, 52, 61, 99, 111, 111, > 108, 32, 124, 32, 53, 61, 106, 101, 116, 32, 124, 32, 54, 61, 102, 108, > 97, 103, 32, 124, 32, 55, 61, 99, 117, 98, 101, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 105, 116, 104, 101, 114, 105, > 110, 103, 61, 48, 39, 32, 97, 110, 100, 32, 39, 109, 97, 112, 95, 112, > 97, 108, 101, 116, 116, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 105, 110, 100, 101, 120, 32, 49, 44, 49, 44, 49, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 40, 48, 59, 50, 53, 53, 59, 50, 53, 53, 94, 48, 59, > 49, 50, 56, 59, 50, 53, 53, 94, 48, 59, 48, 59, 50, 53, 53, 41, > 32, 45, 45, 105, 110, 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 44, 49, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 97, > 103, 101, 95, 105, 110, 116, 101, 103, 114, 97, 108, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 105, 109, 97, 103, 101, 32, 105, 110, 116, 101, 103, 114, 97, 108, 32, > 40, 115, 117, 109, 109, 101, 100, 32, 97, 114, 101, 97, 32, 116, 97, 98, > 108, 101, 41, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 105, > 109, 97, 103, 101, 95, 105, 110, 116, 101, 103, 114, 97, 108, 10, 105, 109, > 97, 103, 101, 95, 105, 110, 116, 101, 103, 114, 97, 108, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 105, 110, 116, 101, 103, 114, > 97, 108, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 102, 32, 39, 62, 105, 43, 105, 40, 120, 45, > 49, 44, 121, 41, 39, 32, 45, 102, 32, 39, 62, 105, 43, 105, 40, 120, > 44, 121, 45, 49, 41, 39, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 109, 97, 112, 32, 58, 32, 91, 112, 97, 108, 101, 116, 116, > 101, 93, 32, 58, 32, 112, 114, 101, 100, 101, 102, 105, 110, 101, 100, 95, > 112, 97, 108, 101, 116, 116, 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 77, 97, 112, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, > 101, 100, 32, 112, 97, 108, 101, 116, 116, 101, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 110, 100, 101, 120, 101, 100, 32, 115, > 99, 97, 108, 97, 114, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 112, 114, 101, 100, 101, 102, 105, 110, > 101, 100, 95, 112, 97, 108, 101, 116, 116, 101, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 100, 101, 102, 97, 117, 108, 116, 32, 124, > 32, 49, 61, 72, 83, 86, 32, 124, 32, 50, 61, 108, 105, 110, 101, 115, > 32, 124, 32, 51, 61, 104, 111, 116, 32, 124, 32, 52, 61, 99, 111, 111, > 108, 32, 124, 32, 53, 61, 106, 101, 116, 32, 124, 32, 54, 61, 102, 108, > 97, 103, 32, 124, 32, 55, 61, 99, 117, 98, 101, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, > 45, 109, 97, 112, 91, 45, 49, 93, 32, 51, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 115, 112, 108, > 105, 116, 91, 45, 49, 93, 32, 99, 32, 40, 48, 44, 50, 53, 53, 44, > 48, 41, 32, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, 50, > 53, 54, 44, 49, 44, 49, 44, 49, 44, 51, 32, 45, 109, 97, 112, 91, > 45, 52, 93, 32, 91, 45, 49, 93, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 49, 93, 32, 45, 97, 112, 112, 101, 110, 100, 91, 45, 51, 45, > 45, 49, 93, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, 114, 103, 98, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 112, 95, > 99, 108, 117, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 77, 97, > 112, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 76, 85, 84, 32, > 105, 109, 97, 103, 101, 32, 40, 114, 101, 103, 97, 114, 100, 101, 100, 32, > 97, 115, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, > 101, 41, 32, 116, 111, 32, 97, 108, 108, 32, 111, 116, 104, 101, 114, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 117, 110, 105, 102, 111, 114, 109, 95, 100, > 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 32, 123, 50, 94, 53, > 125, 44, 51, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, > 120, 32, 45, 45, 109, 97, 112, 95, 99, 108, 117, 116, 10, 109, 97, 112, > 95, 99, 108, 117, 116, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 77, 97, 112, 32, 99, 111, 108, 111, 114, 32, 76, 85, 84, 32, 105, > 109, 97, 103, 101, 44, 32, 117, 115, 105, 110, 103, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 10, 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, > 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, 50, 93, 32, 34, 67, > 111, 109, 109, 97, 110, 100, 32, 39, 45, 109, 97, 112, 95, 99, 108, 117, > 116, 39, 58, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 97, 116, 32, > 108, 101, 97, 115, 116, 32, 116, 119, 111, 32, 105, 109, 97, 103, 101, 115, > 32, 116, 111, 32, 119, 111, 114, 107, 32, 112, 114, 111, 112, 101, 114, 108, > 121, 32, 33, 34, 32, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 45, 32, 45, 116, 111, 95, 99, 111, 108, 111, 114, 91, 48, 45, 45, 50, > 93, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 108, 61, > 123, 114, 111, 117, 110, 100, 40, 40, 119, 42, 104, 42, 100, 41, 94, 40, > 49, 47, 51, 41, 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 36, 108, > 44, 36, 108, 44, 36, 108, 44, 51, 44, 45, 49, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, > 44, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 91, 48, 93, 32, 45, 47, 91, 48, 93, 32, 123, 50, 53, > 54, 47, 36, 108, 125, 10, 45, 45, 119, 97, 114, 112, 91, 45, 49, 93, > 32, 91, 48, 93, 44, 48, 44, 49, 44, 49, 10, 45, 114, 109, 91, 48, > 93, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 97, 91, 94, > 45, 49, 93, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 109, 105, 120, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 58, 32, 40, 97, 48, 48, 44, 46, 46, 46, 44, 97, 77, > 78, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 109, 97, 116, 114, > 105, 120, 32, 116, 111, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 120, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, > 48, 44, 48, 59, 48, 44, 48, 44, 49, 41, 10, 109, 105, 120, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 109, 97, 116, 114, 105, 120, 32, > 36, 49, 32, 116, 111, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 104, 100, > 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, 100, 125, 32, 45, 114, 32, > 123, 119, 42, 104, 42, 100, 125, 44, 123, 115, 125, 44, 49, 44, 49, 44, > 45, 49, 32, 45, 105, 91, 48, 93, 32, 36, 123, 94, 48, 125, 32, 45, > 42, 42, 32, 45, 114, 32, 36, 119, 104, 100, 44, 123, 104, 125, 44, 45, > 49, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 110, 101, 103, 97, 116, 105, 118, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 110, 101, > 103, 97, 116, 105, 118, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 110, 101, 103, 97, 116, 105, 118, 101, 10, 110, 101, 103, 97, 116, > 105, 118, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 109, 112, 117, 116, 101, 32, 110, 101, 103, 97, 116, 105, 118, 101, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 45, 32, 123, 105, 77, 125, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 42, 32, 45, 49, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, 105, 115, 101, 32, > 58, 32, 115, 116, 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 62, > 61, 48, 91, 37, 93, 44, 95, 110, 111, 105, 115, 101, 95, 116, 121, 112, > 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 100, 100, 32, 114, 97, 110, 100, 111, 109, 32, 110, 111, 105, 115, > 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 110, 111, 105, 115, 101, 95, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 103, 97, 117, 115, 115, 105, 97, 110, 32, > 124, 32, 49, 61, 117, 110, 105, 102, 111, 114, 109, 32, 124, 32, 50, 61, > 115, 97, 108, 116, 38, 112, 101, 112, 112, 101, 114, 32, 124, 32, 51, 61, > 112, 111, 105, 115, 115, 111, 110, 32, 124, 32, 52, 61, 114, 105, 99, 101, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 110, 111, 105, > 115, 101, 95, 116, 121, 112, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, 93, 32, 53, 48, 44, 48, > 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, 93, 32, 53, 48, 44, 49, > 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, 93, 32, 49, 48, 44, 50, > 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 51, 48, 48, 44, 49, > 44, 51, 32, 91, 48, 93, 32, 45, 110, 111, 105, 115, 101, 91, 48, 93, > 32, 50, 48, 44, 48, 32, 45, 110, 111, 105, 115, 101, 91, 49, 93, 32, > 50, 48, 44, 49, 32, 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 49, 48, 48, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, > 97, 112, 104, 91, 45, 50, 44, 45, 49, 93, 32, 52, 48, 48, 44, 51, > 48, 48, 44, 51, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, 114, 109, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, > 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 110, 111, 114, 109, 32, 111, > 102, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, 101, 100, 32, > 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 110, 111, 114, 109, 10, 110, 111, 114, 109, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 112, > 111, 105, 110, 116, 119, 105, 115, 101, 32, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 32, 110, 111, 114, 109, 32, 111, 102, 32, 118, 101, 99, 116, 111, > 114, 115, 44, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 115, 113, 114, 32, 45, 99, 111, 109, 112, > 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 43, 32, 45, > 115, 113, 114, 116, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 110, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 39, 46, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 32, 58, 32, 123, 32, 118, 97, 108, 117, 101, 48, 91, 37, 93, 32, 124, > 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, 125, 44, 123, 32, 118, 97, > 108, 117, 101, 49, 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, > 49, 93, 32, 125, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 105, > 110, 101, 97, 114, 108, 121, 32, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 114, 97, 110, 103, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 110, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, > 105, 116, 32, 120, 44, 50, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 91, 45, 49, 93, 32, 54, 52, 44, 49, 57, 54, 32, 45, 97, 112, > 112, 101, 110, 100, 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 78, 111, 114, 109, 97, 108, 105, 122, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, > 105, 116, 104, 32, 97, 32, 117, 110, 105, 116, 97, 114, 121, 32, 115, 117, > 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 91, 45, 49, 93, 32, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 32, 45, 100, 105, 115, 112, > 108, 97, 121, 95, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 52, 48, > 48, 44, 51, 48, 48, 10, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, > 115, 117, 109, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 78, > 111, 114, 109, 97, 108, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 119, 105, 116, 104, 32, 97, 32, 117, 110, 105, 116, 97, 114, 121, 32, > 115, 117, 109, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 115, 117, 109, 61, 64, 123, 36, 62, 44, 43, > 125, 32, 45, 105, 102, 32, 123, 36, 115, 117, 109, 33, 61, 48, 125, 32, > 45, 47, 91, 36, 62, 93, 32, 36, 115, 117, 109, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 110, 111, 116, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 98, 111, 111, 108, 101, 97, 110, 32, > 110, 111, 116, 32, 111, 112, 101, 114, 97, 116, 105, 111, 110, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 103, 101, 32, 53, 48, 37, 32, > 45, 45, 110, 111, 116, 91, 45, 49, 93, 10, 110, 111, 116, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 98, > 111, 111, 108, 101, 97, 110, 32, 110, 111, 116, 32, 111, 112, 101, 114, 97, > 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 101, 113, 32, 48, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, > 105, 115, 101, 32, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, > 111, 102, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, 101, 100, > 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 45, > 45, 110, 111, 114, 109, 91, 45, 50, 93, 32, 45, 110, 101, 103, 97, 116, > 105, 118, 101, 91, 45, 49, 93, 32, 45, 109, 117, 108, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 101, 118, 101, 114, 115, 101, 91, 45, > 50, 44, 45, 49, 93, 10, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, > 112, 117, 116, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 111, > 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 118, 101, 99, 116, 111, > 114, 115, 44, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 45, 110, 111, 114, 109, 91, 36, 62, 93, 32, 45, 114, 101, 112, > 108, 97, 99, 101, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 47, 91, > 36, 62, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 116, 115, 117, 32, 58, 32, > 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 72, 97, 114, 100, 45, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 79, 116, 115, 117, 39, > 115, 32, 109, 101, 116, 104, 111, 100, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 84, 104, 101, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 115, 32, 97, 114, 101, 32, 114, > 101, 116, 117, 114, 110, 101, 100, 32, 97, 115, 32, 97, 32, 108, 105, 115, > 116, 32, 111, 102, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 116, > 104, 101, 32, 115, 116, 97, 116, 117, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 110, 98, 95, 108, 101, 118, 101, 108, 115, 61, 50, 53, > 54, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 45, 111, 116, 115, 117, 32, 44, 10, 111, 116, 115, > 117, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, > 116, 40, 36, 123, 49, 61, 50, 53, 54, 125, 41, 32, 38, 38, 32, 36, > 49, 62, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 72, 97, > 114, 100, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 79, 116, 115, 117, 92, > 52, 55, 115, 32, 109, 101, 116, 104, 111, 100, 44, 32, 119, 105, 116, 104, > 32, 36, 49, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 108, 101, > 118, 101, 108, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 105, 109, > 61, 123, 105, 109, 125, 32, 105, 77, 61, 123, 105, 77, 125, 32, 45, 110, > 32, 48, 44, 123, 36, 49, 45, 49, 125, 10, 45, 45, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 32, 36, 49, 32, 116, 111, 116, 97, 108, 61, 64, > 123, 45, 49, 44, 43, 125, 10, 45, 45, 42, 91, 45, 49, 93, 32, 39, > 120, 39, 32, 115, 117, 109, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 115, 117, 109, 66, 61, 48, 32, 119, 66, > 61, 48, 32, 119, 70, 61, 48, 32, 118, 97, 114, 77, 97, 120, 61, 48, > 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 48, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 49, 10, 119, 66, 61, 123, 36, 119, 66, 43, > 64, 123, 45, 49, 44, 36, 62, 125, 125, 10, 45, 105, 102, 32, 123, 36, > 119, 66, 61, 61, 48, 125, 32, 45, 99, 111, 110, 116, 105, 110, 117, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 119, 70, 61, 123, 36, 116, 111, 116, > 97, 108, 45, 36, 119, 66, 125, 10, 45, 105, 102, 32, 123, 36, 119, 70, > 61, 61, 48, 125, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, > 105, 102, 10, 115, 117, 109, 66, 61, 123, 36, 115, 117, 109, 66, 43, 36, > 62, 42, 64, 123, 45, 49, 44, 36, 62, 125, 125, 10, 109, 66, 61, 123, > 36, 115, 117, 109, 66, 47, 36, 119, 66, 125, 10, 109, 70, 61, 123, 40, > 36, 115, 117, 109, 45, 36, 115, 117, 109, 66, 41, 47, 36, 119, 70, 125, > 10, 118, 97, 114, 66, 101, 116, 119, 101, 101, 110, 61, 123, 36, 119, 66, > 42, 36, 119, 70, 42, 40, 36, 109, 66, 45, 36, 109, 70, 41, 94, 50, > 125, 10, 45, 105, 102, 32, 123, 36, 118, 97, 114, 66, 101, 116, 119, 101, > 101, 110, 62, 36, 118, 97, 114, 77, 97, 120, 125, 32, 118, 97, 114, 77, > 97, 120, 61, 36, 118, 97, 114, 66, 101, 116, 119, 101, 101, 110, 32, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 61, 36, 62, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 116, 104, 114, 101, 115, 104, > 111, 108, 100, 10, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 123, 36, > 105, 109, 43, 36, 116, 104, 114, 101, 115, 104, 111, 108, 100, 42, 40, 36, > 105, 77, 45, 36, 105, 109, 41, 47, 40, 36, 49, 45, 49, 41, 125, 10, > 45, 105, 102, 32, 36, 62, 32, 45, 117, 32, 64, 123, 125, 44, 36, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 36, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 108, 97, > 114, 50, 99, 111, 109, 112, 108, 101, 120, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 112, 111, 108, 97, 114, > 32, 116, 111, 32, 99, 111, 109, 112, 108, 101, 120, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 112, 111, 108, 97, 114, > 50, 99, 111, 109, 112, 108, 101, 120, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 112, 111, 108, 97, > 114, 32, 116, 111, 32, 99, 111, 109, 112, 108, 101, 120, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 123, 50, 42, 36, 62, 125, 44, 123, 50, 42, 36, 62, 43, 49, 125, > 93, 10, 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 51, 32, 45, 45, > 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 42, 91, > 45, 51, 44, 45, 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 113, > 117, 97, 110, 116, 105, 122, 101, 32, 58, 32, 110, 98, 95, 108, 101, 118, > 101, 108, 115, 62, 61, 49, 44, 95, 107, 101, 101, 112, 95, 118, 97, 108, > 117, 101, 115, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 105, > 115, 95, 117, 110, 105, 102, 111, 114, 109, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 81, 117, 97, > 110, 116, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 107, 101, 101, 112, 95, 118, 97, 108, 117, 101, 115, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 105, 115, 95, 117, 110, 105, 102, 111, 114, 109, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 45, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 51, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 50, 48, 48, 44, 50, > 48, 48, 44, 49, 44, 49, 44, 39, 99, 111, 115, 40, 120, 47, 49, 48, > 41, 42, 115, 105, 110, 40, 121, 47, 49, 48, 41, 39, 32, 45, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 54, 32, 45, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 52, 32, 45, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 51, 32, 45, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 50, 10, 113, 117, 97, > 110, 116, 105, 122, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 105, 115, 105, 110, 116, 40, 36, 49, 41, 32, 38, 38, 32, 36, 49, 62, > 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, > 44, 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 81, 117, 97, 110, 116, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 117, 115, 105, 110, 103, 32, 36, 49, 32, 108, 101, 118, 101, 108, > 115, 44, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, > 50, 44, 119, 105, 116, 104, 44, 119, 105, 116, 104, 111, 117, 116, 125, 34, > 32, 107, 101, 101, 112, 105, 110, 103, 32, 118, 97, 108, 117, 101, 32, 114, > 97, 110, 103, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 36, 51, 10, 45, 105, 102, 32, 123, 115, 61, 61, 49, 125, 10, > 45, 105, 102, 32, 36, 50, 32, 109, 77, 61, 123, 105, 109, 125, 44, 123, > 105, 77, 125, 32, 45, 110, 32, 48, 44, 36, 49, 32, 45, 114, 111, 117, > 110, 100, 32, 49, 44, 45, 49, 32, 45, 109, 105, 110, 32, 123, 36, 49, > 45, 49, 125, 32, 45, 110, 32, 36, 109, 77, 10, 45, 101, 108, 115, 101, > 32, 45, 110, 32, 48, 44, 36, 49, 32, 45, 114, 111, 117, 110, 100, 32, > 49, 44, 45, 49, 32, 45, 109, 105, 110, 32, 123, 36, 49, 45, 49, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 109, 77, > 61, 123, 105, 109, 125, 44, 123, 105, 77, 125, 32, 45, 117, 110, 105, 102, > 111, 114, 109, 95, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, > 32, 36, 49, 44, 123, 115, 125, 32, 45, 110, 91, 45, 49, 93, 32, 36, > 109, 77, 32, 45, 105, 110, 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 36, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, 45, 99, > 111, 108, 111, 114, 109, 97, 112, 32, 36, 49, 44, 48, 32, 45, 105, 110, > 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 36, > 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 97, 110, 100, 32, 58, 32, > 123, 32, 118, 97, 108, 117, 101, 48, 91, 37, 93, 32, 124, 32, 91, 105, > 109, 97, 103, 101, 48, 93, 32, 125, 44, 123, 32, 118, 97, 108, 117, 101, > 49, 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, 49, 93, 32, > 125, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 105, 108, 108, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 114, 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, > 101, 115, 32, 117, 110, 105, 102, 111, 114, 109, 108, 121, 32, 100, 105, 115, > 116, 114, 105, 98, 117, 116, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 114, 97, 110, 103, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, > 52, 48, 48, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 32, 45, 49, > 48, 44, 49, 48, 32, 45, 45, 98, 108, 117, 114, 32, 49, 48, 32, 45, > 115, 105, 103, 110, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, > 114, 101, 112, 108, 97, 99, 101, 32, 58, 32, 118, 97, 108, 117, 101, 95, > 115, 114, 99, 44, 118, 97, 108, 117, 101, 95, 100, 101, 115, 116, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, 97, 99, 101, 32, > 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, 59, 50, > 59, 51, 59, 52, 41, 32, 45, 45, 114, 101, 112, 108, 97, 99, 101, 32, > 50, 44, 51, 10, 114, 101, 112, 108, 97, 99, 101, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 112, > 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 36, 49, 32, 119, > 105, 116, 104, 32, 36, 50, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 45, 61, 61, 32, > 36, 49, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 50, 45, 36, 49, > 125, 32, 45, 43, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 112, > 108, 97, 99, 101, 95, 105, 110, 102, 32, 58, 32, 95, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 112, 108, 97, 99, 101, 32, 97, 108, 108, 32, 105, 110, 102, 105, > 110, 105, 116, 101, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, > 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 40, 48, 59, 49, 59, 50, 41, 32, 45, 108, 111, 103, 32, > 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, 105, 110, 102, 32, 50, 10, > 114, 101, 112, 108, 97, 99, 101, 95, 105, 110, 102, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 97, > 108, 108, 32, 105, 110, 102, 105, 110, 105, 116, 101, 32, 118, 97, 108, 117, > 101, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 32, 98, 121, > 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 36, 49, 39, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 102, 32, 34, 105, 102, 40, 105, > 61, 61, 105, 43, 49, 44, 36, 49, 44, 105, 41, 34, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 112, 108, 97, 99, 101, > 95, 110, 97, 110, 32, 58, 32, 95, 101, 120, 112, 114, 101, 115, 115, 105, > 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, > 97, 99, 101, 32, 97, 108, 108, 32, 78, 97, 78, 32, 118, 97, 108, 117, > 101, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 45, 49, 59, 48, 59, > 50, 41, 32, 45, 115, 113, 114, 116, 32, 45, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 110, 97, 110, 32, 50, 10, 114, 101, 112, 108, 97, 99, 101, > 95, 110, 97, 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 82, 101, 112, 108, 97, 99, 101, 32, 97, 108, 108, 32, 78, 97, 78, 32, > 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, 115, > 36, 63, 32, 98, 121, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 32, 39, 36, 49, 39, 46, 34, 10, 45, 118, 32, 45, 32, 45, 102, 32, > 34, 105, 102, 40, 105, 62, 61, 48, 32, 124, 124, 32, 105, 60, 61, 48, > 44, 105, 44, 36, 49, 41, 34, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 101, 112, 108, 97, 99, 101, 95, 115, 101, 113, 32, > 58, 32, 34, 115, 101, 97, 114, 99, 104, 95, 115, 101, 113, 34, 44, 34, > 114, 101, 112, 108, 97, 99, 101, 95, 115, 101, 113, 34, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 83, 101, 97, 114, 99, 104, 32, 97, 110, 100, > 32, 114, 101, 112, 108, 97, 99, 101, 32, 97, 32, 115, 101, 113, 117, 101, > 110, 99, 101, 32, 111, 102, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, 59, > 50, 59, 51, 59, 52, 59, 53, 41, 32, 45, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 115, 101, 113, 32, 34, 50, 44, 51, 44, 52, 34, 44, 34, > 55, 44, 56, 34, 10, 114, 101, 112, 108, 97, 99, 101, 95, 115, 101, 113, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, 125, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, > 101, 32, 118, 97, 108, 117, 101, 32, 115, 101, 113, 117, 101, 110, 99, 101, > 32, 39, 36, 49, 39, 32, 98, 121, 32, 118, 97, 108, 117, 101, 32, 115, > 101, 113, 117, 101, 110, 99, 101, 32, 39, 36, 123, 50, 45, 45, 49, 125, > 39, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 110, 115, 61, 123, 110, 97, 114, 103, 40, 36, 49, 41, > 125, 32, 110, 100, 61, 123, 110, 97, 114, 103, 40, 36, 123, 50, 45, 45, > 49, 125, 41, 125, 32, 114, 97, 116, 105, 111, 61, 123, 36, 110, 100, 42, > 49, 48, 48, 47, 36, 110, 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 43, 44, > 36, 49, 32, 45, 45, 114, 111, 119, 115, 91, 48, 93, 32, 48, 44, 123, > 36, 110, 115, 45, 49, 125, 32, 40, 36, 49, 41, 32, 45, 45, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 105, > 110, 100, 61, 123, 105, 77, 33, 61, 48, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 123, 36, 105, 110, 100, 60, 64, 35, 125, > 32, 45, 105, 102, 32, 36, 110, 100, 32, 45, 114, 91, 36, 105, 110, 100, > 45, 45, 49, 58, 50, 93, 32, 49, 44, 36, 114, 97, 116, 105, 111, 37, > 44, 49, 44, 49, 44, 48, 32, 45, 102, 91, 36, 105, 110, 100, 45, 45, > 49, 58, 50, 93, 32, 36, 123, 50, 45, 45, 49, 125, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 109, 91, 36, 105, 110, 100, 45, 45, 49, 58, 50, > 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 121, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 112, > 108, 97, 99, 101, 95, 115, 116, 114, 32, 58, 32, 34, 115, 101, 97, 114, > 99, 104, 95, 115, 116, 114, 34, 44, 34, 114, 101, 112, 108, 97, 99, 101, > 95, 115, 116, 114, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, > 101, 97, 114, 99, 104, 32, 97, 110, 100, 32, 114, 101, 112, 108, 97, 99, > 101, 32, 97, 32, 115, 116, 114, 105, 110, 103, 32, 105, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, 118, > 105, 101, 119, 101, 100, 32, 97, 115, 32, 115, 116, 114, 105, 110, 103, 115, > 44, 32, 105, 46, 101, 46, 32, 115, 101, 113, 117, 101, 110, 99, 101, 115, > 32, 111, 102, 32, 97, 115, 99, 105, 105, 32, 99, 111, 100, 101, 115, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 123, 39, > 34, 72, 101, 108, 108, 111, 32, 116, 104, 101, 114, 101, 44, 32, 104, 111, > 119, 32, 97, 114, 101, 32, 121, 111, 117, 32, 63, 34, 39, 125, 41, 32, > 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 72, > 101, 108, 108, 111, 32, 116, 104, 101, 114, 101, 34, 44, 34, 72, 105, 32, > 68, 97, 118, 105, 100, 34, 10, 114, 101, 112, 108, 97, 99, 101, 95, 115, > 116, 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, > 125, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, > 97, 99, 101, 32, 115, 116, 114, 105, 110, 103, 32, 39, 36, 49, 39, 32, > 98, 121, 32, 115, 116, 114, 105, 110, 103, 32, 39, 36, 123, 50, 45, 45, > 49, 125, 39, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 32, 40, > 118, 105, 101, 119, 101, 100, 32, 97, 115, 32, 115, 116, 114, 105, 110, 103, > 36, 63, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 101, 113, 32, 64, 123, 45, 113, 117, 111, 116, 101, > 92, 32, 123, 39, 34, 36, 49, 34, 39, 125, 125, 44, 123, 39, 34, 36, > 123, 50, 45, 45, 49, 125, 34, 39, 125, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 111, 117, 110, 100, 32, 58, 32, 114, 111, > 117, 110, 100, 105, 110, 103, 95, 118, 97, 108, 117, 101, 62, 61, 48, 44, > 95, 114, 111, 117, 110, 100, 105, 110, 103, 95, 116, 121, 112, 101, 32, 58, > 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 111, 117, 110, 100, 32, > 118, 97, 108, 117, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 114, 111, 117, 110, 100, 105, 110, 103, 95, 116, 121, > 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, > 98, 97, 99, 107, 119, 97, 114, 100, 32, 124, 32, 48, 61, 110, 101, 97, > 114, 101, 115, 116, 32, 124, 32, 49, 61, 102, 111, 114, 119, 97, 114, 100, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 111, 117, > 110, 100, 105, 110, 103, 95, 116, 121, 112, 101, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 114, 111, 117, 110, 100, 32, 49, 48, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 109, 117, 108, 32, 123, 112, 105, 47, 49, 56, > 48, 125, 32, 45, 115, 105, 110, 32, 45, 45, 114, 111, 117, 110, 100, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 111, 117, 110, 100, 105, 102, 121, 32, > 58, 32, 103, 97, 109, 109, 97, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 114, 111, 117, 110, 100, 105, > 102, 121, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 97, 116, 105, 111, > 110, 32, 111, 110, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, 117, 101, > 100, 32, 100, 97, 116, 97, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 103, 97, 109, 109, 97, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 103, 97, 109, 109, 97, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 48, 48, 48, > 32, 45, 102, 105, 108, 108, 32, 39, 52, 42, 120, 47, 119, 39, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 53, 32, 45, 45, 114, 111, 117, 110, 100, > 105, 102, 121, 91, 48, 93, 32, 123, 36, 62, 42, 48, 46, 50, 125, 32, > 45, 100, 111, 110, 101, 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, > 48, 48, 44, 51, 48, 48, 10, 114, 111, 117, 110, 100, 105, 102, 121, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, 61, 48, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 82, 111, 117, 110, 100, 105, 102, 121, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 103, > 97, 109, 109, 97, 32, 36, 49, 46, 34, 10, 45, 105, 102, 32, 123, 36, > 49, 61, 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 114, 111, > 117, 110, 100, 32, 49, 32, 45, 45, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 45, 42, 91, 45, 50, 93, 32, 50, 32, 45, 97, 98, 115, > 91, 45, 49, 93, 32, 45, 94, 91, 45, 49, 93, 32, 36, 49, 32, 45, > 115, 105, 103, 110, 91, 45, 51, 93, 32, 45, 42, 91, 45, 51, 44, 45, > 49, 93, 32, 45, 42, 91, 45, 50, 93, 32, 48, 46, 53, 32, 45, 43, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 61, 32, 58, 32, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 115, 101, 116, 39, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 115, 101, 116, 32, 58, 32, 118, > 97, 108, 117, 101, 44, 95, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, > 44, 95, 122, 91, 37, 93, 44, 95, 99, 91, 37, 93, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, > 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 32, 105, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, > 97, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 111, > 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 61, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, > 116, 101, 115, 32, 97, 114, 101, 32, 111, 117, 116, 115, 105, 100, 101, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 98, 111, 117, 110, 100, 115, > 44, 32, 110, 111, 32, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 112, > 101, 114, 102, 111, 114, 109, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 120, 61, 121, 61, 122, 61, 99, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 50, 44, 50, 32, 45, > 115, 101, 116, 32, 49, 44, 48, 44, 48, 32, 45, 115, 101, 116, 32, 50, > 44, 49, 44, 48, 32, 45, 115, 101, 116, 32, 51, 44, 48, 44, 49, 32, > 45, 115, 101, 116, 32, 52, 44, 49, 44, 49, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 48, 48, 48, 32, 45, 115, > 101, 116, 32, 50, 53, 53, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, > 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 48, 44, 123, 63, 40, > 49, 48, 48, 41, 125, 37, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 58, 32, > 118, 97, 108, 117, 101, 91, 37, 93, 44, 95, 105, 115, 95, 115, 111, 102, > 116, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 115, 111, 102, 116, > 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 104, 97, 114, > 100, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 105, 110, 103, 32, 124, > 32, 49, 61, 115, 111, 102, 116, 45, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 105, 110, 103, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 114, 117, 110, 115, 32, 105, > 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 109, 111, 100, 101, 32, > 40, 117, 115, 101, 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, > 116, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, > 111, 112, 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 105, 115, 95, 115, 111, 102, 116, 61, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 91, 48, > 93, 32, 53, 48, 37, 32, 45, 45, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 91, 48, 93, 32, 53, 48, 37, 44, 49, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 50, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 50, 39, 46, 10, 116, 50, 32, > 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, > 45, 118, 32, 43, 10, 45, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, > 50, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 50, 32, 58, 32, 109, 105, 110, 91, 37, 93, 44, > 109, 97, 120, 91, 37, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 84, 104, 114, 101, 115, 104, 111, 108, 100, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 101, 116, 119, 101, 101, > 110, 32, 116, 104, 101, 32, 116, 119, 111, 32, 103, 105, 118, 101, 110, 32, > 118, 97, 108, 117, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 116, 50, 39, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 50, 32, 50, 53, 37, 44, 55, 53, 37, 10, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 50, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, > 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, > 36, 42, 10, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 50, 32, 58, > 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 72, 97, 114, 100, 45, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 105, 109, 97, 103, 101, 34, > 36, 95, 95, 115, 34, 32, 98, 101, 116, 119, 101, 101, 110, 32, 118, 97, > 108, 117, 101, 115, 32, 36, 49, 32, 97, 110, 100, 32, 36, 50, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 109, 61, 36, 49, 32, 77, 61, 36, > 50, 10, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 49, 125, 32, 109, 61, 123, 105, 109, 43, 40, > 105, 77, 45, 105, 109, 41, 42, 36, 109, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 50, 125, 32, 77, 61, 123, 105, 109, 43, 40, > 105, 77, 45, 105, 109, 41, 42, 36, 77, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 32, 123, 48, 46, 53, 42, 40, 36, 109, 43, 36, 77, > 41, 125, 32, 45, 97, 98, 115, 32, 45, 108, 101, 32, 123, 48, 46, 53, > 42, 97, 98, 115, 40, 36, 77, 45, 36, 109, 41, 125, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, > 114, 108, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 85, 110, 99, > 111, 109, 112, 114, 101, 115, 115, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 50, 120, 78, 32, 100, 97, 116, 97, 32, 109, 97, 116, 114, 105, 99, > 101, 115, 44, 32, 117, 115, 105, 110, 103, 32, 82, 76, 69, 32, 97, 108, > 103, 111, 114, 105, 116, 104, 109, 46, 10, 117, 110, 99, 111, 109, 112, 114, > 101, 115, 115, 95, 114, 108, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 85, 110, 99, 111, 109, 112, 114, 101, 115, 115, 32, 100, 97, > 116, 97, 32, 118, 101, 99, 116, 111, 114, 36, 63, 44, 32, 117, 115, 105, > 110, 103, 32, 82, 76, 69, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 121, 32, 119, 104, 100, > 115, 61, 64, 123, 48, 44, 48, 45, 51, 125, 32, 105, 109, 61, 64, 123, > 48, 44, 52, 125, 32, 105, 115, 95, 98, 105, 110, 97, 114, 121, 95, 100, > 97, 116, 97, 61, 64, 123, 48, 44, 53, 125, 32, 45, 114, 111, 119, 115, > 32, 54, 44, 49, 48, 48, 37, 10, 45, 105, 102, 32, 36, 105, 115, 95, > 98, 105, 110, 97, 114, 121, 95, 100, 97, 116, 97, 10, 45, 45, 103, 101, > 32, 48, 32, 45, 97, 98, 115, 91, 48, 93, 32, 45, 97, 32, 120, 10, > 45, 101, 108, 115, 101, 10, 45, 45, 108, 116, 91, 45, 49, 93, 32, 48, > 32, 40, 48, 59, 49, 59, 49, 41, 32, 45, 101, 114, 111, 100, 101, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, 97, 32, 120, > 32, 45, 100, 105, 115, 99, 97, 114, 100, 32, 45, 49, 10, 45, 45, 108, > 116, 32, 48, 32, 40, 49, 59, 49, 59, 48, 41, 32, 45, 100, 105, 108, > 97, 116, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, 50, 32, 45, > 43, 91, 45, 49, 93, 32, 49, 10, 45, 114, 118, 32, 45, 97, 98, 115, > 91, 45, 49, 93, 32, 45, 97, 32, 120, 32, 45, 100, 105, 115, 99, 97, > 114, 100, 32, 45, 49, 10, 45, 114, 32, 50, 44, 123, 104, 47, 50, 125, > 44, 49, 44, 49, 44, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 115, 32, 121, 44, 45, 50, 53, 54, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 91, 48, 93, > 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, 43, > 91, 48, 93, 32, 48, 46, 53, 10, 45, 105, 91, 49, 93, 32, 40, 123, > 50, 42, 104, 125, 59, 123, 104, 125, 41, 10, 45, 115, 91, 45, 49, 93, > 32, 120, 44, 50, 32, 45, 99, 117, 109, 117, 108, 91, 45, 50, 93, 32, > 115, 105, 122, 61, 64, 123, 45, 50, 44, 45, 49, 125, 10, 45, 45, 115, > 104, 105, 102, 116, 91, 45, 50, 93, 32, 48, 44, 49, 32, 45, 45, 91, > 45, 51, 93, 32, 49, 32, 45, 114, 118, 91, 45, 51, 44, 45, 49, 93, > 32, 45, 122, 91, 45, 51, 44, 45, 49, 93, 32, 48, 44, 50, 32, 45, > 97, 91, 45, 51, 44, 45, 49, 93, 32, 120, 10, 45, 105, 91, 51, 93, > 32, 40, 50, 44, 48, 44, 49, 59, 50, 44, 123, 50, 42, 104, 45, 50, > 125, 44, 123, 50, 42, 104, 45, 49, 125, 41, 32, 45, 114, 91, 51, 93, > 32, 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, > 117, 110, 100, 91, 51, 93, 10, 45, 114, 91, 52, 93, 32, 51, 32, 49, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 32, 45, 121, 32, 45, > 97, 32, 121, 10, 36, 115, 105, 122, 32, 45, 111, 98, 106, 101, 99, 116, > 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 50, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 97, > 32, 120, 32, 45, 114, 32, 36, 119, 104, 100, 115, 44, 45, 49, 32, 45, > 43, 32, 36, 105, 109, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 117, 110, > 114, 101, 112, 101, 97, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 109, 111, 118, 101, 32, 114, 101, 112, 101, 116, 105, 116, 105, 111, > 110, 32, 111, 102, 32, 97, 100, 106, 97, 99, 101, 110, 116, 32, 118, 97, > 108, 117, 101, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 40, 49, 59, 49, 59, 49, 59, 49, 59, 49, 59, 50, > 59, 50, 59, 50, 59, 51, 59, 52, 59, 52, 59, 52, 59, 53, 59, 53, > 59, 53, 41, 32, 45, 45, 117, 110, 114, 101, 112, 101, 97, 116, 10, 117, > 110, 114, 101, 112, 101, 97, 116, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 82, 101, 109, 111, 118, 101, 32, 114, 101, 112, 101, 116, 105, > 116, 105, 111, 110, 32, 111, 102, 32, 97, 100, 106, 97, 99, 101, 110, 116, > 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, > 123, 48, 44, 110, 125, 10, 45, 121, 32, 120, 32, 40, 123, 64, 123, 48, > 44, 45, 49, 125, 43, 49, 125, 41, 32, 45, 97, 32, 120, 32, 45, 114, > 32, 49, 48, 48, 37, 44, 50, 10, 45, 102, 91, 45, 49, 93, 32, 39, > 62, 105, 102, 40, 121, 61, 61, 48, 44, 105, 44, 105, 102, 40, 105, 40, > 120, 44, 48, 41, 61, 61, 105, 40, 120, 43, 49, 44, 48, 41, 44, 45, > 49, 44, 120, 41, 41, 39, 10, 45, 122, 32, 48, 44, 123, 119, 45, 50, > 125, 32, 45, 115, 32, 121, 44, 50, 32, 45, 100, 105, 115, 99, 97, 114, > 100, 91, 49, 93, 32, 45, 49, 32, 45, 109, 97, 112, 91, 49, 93, 32, > 91, 48, 93, 10, 45, 114, 109, 91, 48, 93, 32, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 118, 101, 99, > 116, 111, 114, 50, 116, 101, 110, 115, 111, 114, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 32, 102, 105, 101, 108, > 100, 115, 32, 116, 111, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, > 105, 110, 103, 32, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 116, 101, > 110, 115, 111, 114, 32, 102, 105, 101, 108, 100, 115, 46, 10, 118, 101, 99, > 116, 111, 114, 50, 116, 101, 110, 115, 111, 114, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 118, 101, > 99, 116, 111, 114, 32, 102, 105, 101, 108, 100, 36, 63, 32, 116, 111, 32, > 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 116, 101, 110, 115, 111, 114, > 32, 102, 105, 101, 108, 100, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 45, 115, 32, 99, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, > 50, 125, 32, 45, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 42, 91, > 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 115, 113, 114, 91, 45, 51, > 93, 10, 45, 101, 108, 105, 102, 32, 123, 64, 35, 61, 61, 51, 125, 32, > 45, 45, 115, 113, 114, 91, 45, 50, 93, 32, 45, 45, 42, 91, 45, 51, > 93, 32, 91, 45, 50, 93, 32, 45, 45, 115, 113, 114, 91, 45, 51, 93, > 32, 45, 42, 91, 45, 53, 44, 45, 52, 93, 32, 91, 45, 54, 93, 32, > 45, 115, 113, 114, 91, 45, 54, 93, 10, 45, 101, 108, 115, 101, 32, 45, > 101, 114, 114, 111, 114, 91, 48, 45, 45, 52, 93, 32, 34, 67, 111, 109, > 109, 97, 110, 100, 32, 39, 45, 118, 101, 99, 116, 111, 114, 50, 116, 101, > 110, 115, 111, 114, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, > 109, 97, 103, 101, 32, 91, 34, 123, 64, 35, 45, 36, 62, 45, 49, 125, > 34, 93, 32, 58, 32, 68, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, > 34, 123, 119, 125, 34, 44, 34, 123, 104, 125, 34, 44, 34, 123, 100, 125, > 34, 44, 34, 123, 115, 125, 34, 32, 100, 111, 101, 115, 32, 110, 111, 116, > 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 32, 97, 32, 102, 105, 101, > 108, 100, 32, 111, 102, 32, 50, 100, 32, 111, 114, 32, 51, 100, 32, 118, > 101, 99, 116, 111, 114, 115, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, > 67, 111, 108, 111, 114, 115, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, > 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 32, 34, 99, 111, 109, > 109, 97, 110, 100, 34, 44, 95, 99, 104, 97, 110, 110, 101, 108, 115, 61, > 123, 32, 97, 108, 108, 61, 48, 32, 124, 32, 114, 103, 98, 97, 61, 49, > 32, 124, 32, 114, 103, 98, 61, 50, 32, 124, 32, 121, 61, 51, 32, 124, > 32, 99, 98, 99, 114, 61, 52, 32, 124, 32, 99, 98, 61, 53, 32, 124, > 32, 99, 114, 61, 54, 32, 124, 32, 108, 61, 55, 32, 124, 32, 97, 98, > 61, 56, 32, 124, 32, 97, 61, 57, 32, 124, 32, 98, 61, 49, 48, 32, > 124, 32, 104, 61, 49, 49, 32, 124, 32, 115, 61, 49, 50, 32, 124, 32, > 118, 61, 49, 51, 32, 124, 32, 107, 61, 49, 52, 32, 124, 32, 99, 103, > 61, 49, 53, 32, 124, 32, 99, 104, 61, 49, 54, 32, 124, 32, 99, 61, > 49, 55, 32, 124, 32, 72, 61, 49, 56, 32, 124, 32, 114, 61, 49, 57, > 32, 124, 32, 103, 61, 50, 48, 32, 124, 32, 98, 61, 50, 49, 32, 124, > 32, 97, 108, 112, 104, 97, 61, 61, 50, 50, 32, 125, 44, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 61, 123, 32, 48, 61, 99, 117, 116, 32, > 124, 32, 49, 61, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 111, 110, 32, 99, 104, 111, 115, 101, 110, 32, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 100, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, > 102, 32, 101, 97, 99, 104, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 110, 111, 114, 109, 97, 108, 105, 122, 101, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, > 45, 98, 108, 117, 114, 32, 50, 34, 44, 53, 10, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 51, 61, 48, 125, 10, 45, 105, 102, 32, 123, 123, 36, > 50, 39, 61, 61, 39, 97, 108, 108, 125, 34, 32, 124, 124, 32, 34, 123, > 36, 50, 39, 61, 61, 39, 48, 125, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 36, 49, 39, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 95, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 36, 49, 34, 10, > 45, 105, 102, 32, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 108, 115, 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, > 114, 103, 98, 97, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, > 61, 39, 49, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, > 39, 32, 111, 110, 32, 82, 71, 66, 65, 32, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, > 45, 118, 32, 45, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 36, 49, 34, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, > 36, 50, 39, 61, 61, 39, 114, 103, 98, 125, 34, 32, 124, 124, 32, 34, > 123, 36, 50, 39, 61, 61, 39, 50, 125, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 82, 71, 66, 32, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, > 98, 91, 48, 93, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 48, 93, 32, 34, 36, 49, 34, 10, 45, 105, > 102, 32, 36, 51, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 114, 103, > 98, 91, 48, 93, 10, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, > 39, 61, 61, 39, 121, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, > 61, 61, 39, 51, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, > 49, 39, 32, 111, 110, 32, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, > 89, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, > 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, 48, 93, 32, 45, 115, > 91, 48, 93, 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 34, 36, 49, 34, 32, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 48, 10, 45, 105, > 102, 32, 36, 51, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, > 93, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, > 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, > 39, 99, 98, 99, 114, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, > 61, 61, 39, 52, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, > 49, 39, 32, 111, 110, 32, 98, 108, 117, 101, 32, 97, 110, 100, 32, 114, > 101, 100, 32, 99, 104, 114, 111, 109, 105, 110, 97, 110, 99, 101, 115, 32, > 67, 98, 67, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 48, 93, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, 48, 93, > 32, 45, 115, 91, 48, 93, 32, 99, 32, 45, 97, 91, 49, 44, 50, 93, > 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 49, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 49, 93, 32, 48, 44, 49, 10, 45, 105, 102, > 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 108, 115, 101, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 49, 93, > 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, 93, > 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, > 99, 98, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, > 53, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, > 111, 110, 32, 98, 108, 117, 101, 32, 99, 104, 114, 111, 109, 105, 110, 97, > 110, 99, 101, 32, 67, 98, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, > 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, > 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 95, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, > 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, > 32, 48, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, > 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, > 36, 50, 39, 61, 61, 39, 99, 114, 125, 34, 32, 124, 124, 32, 34, 123, > 36, 50, 39, 61, 61, 39, 54, 125, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 36, 49, 39, 32, 111, 110, 32, 114, 101, 100, 32, 99, 104, 114, > 111, 109, 105, 110, 97, 110, 99, 101, 32, 67, 114, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, > 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 121, > 99, 98, 99, 114, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, > 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 91, 50, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 50, 93, 32, 48, 10, 45, 105, 102, 32, 36, 51, 32, 45, > 110, 91, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, > 32, 45, 99, 91, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 121, > 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 108, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 55, 125, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 108, 105, 103, > 104, 116, 110, 101, 115, 115, 32, 76, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, > 114, 103, 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, > 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 42, 91, 48, 93, > 32, 50, 46, 53, 53, 32, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 34, 36, 49, 34, 32, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 48, 32, 45, 47, > 91, 48, 93, 32, 50, 46, 53, 53, 10, 45, 105, 102, 32, 36, 51, 32, > 45, 110, 91, 48, 93, 32, 48, 44, 49, 48, 48, 32, 45, 101, 108, 115, > 101, 32, 45, 99, 91, 48, 93, 32, 48, 44, 49, 48, 48, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, > 108, 97, 98, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, > 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 97, 98, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 56, 125, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 97, 45, 98, > 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, > 95, 114, 103, 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 108, 97, 98, > 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 43, 91, 49, > 93, 32, 56, 54, 32, 45, 42, 91, 49, 93, 32, 49, 46, 51, 56, 53, > 56, 55, 32, 45, 43, 91, 50, 93, 32, 49, 48, 56, 32, 45, 42, 91, > 50, 93, 32, 49, 46, 50, 53, 54, 49, 54, 10, 45, 97, 91, 49, 44, > 50, 93, 32, 99, 32, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, 36, 49, 34, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 48, 44, 49, 32, 45, > 115, 91, 49, 93, 32, 99, 10, 45, 47, 91, 49, 93, 32, 49, 46, 51, > 56, 53, 56, 55, 32, 45, 45, 91, 49, 93, 32, 56, 54, 32, 45, 47, > 91, 50, 93, 32, 49, 46, 50, 53, 54, 49, 54, 32, 45, 45, 91, 50, > 93, 32, 49, 48, 56, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, > 49, 93, 32, 45, 56, 54, 44, 57, 56, 32, 45, 110, 91, 50, 93, 32, > 45, 49, 48, 56, 44, 57, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 108, 97, 98, 50, 114, 103, > 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, > 39, 61, 61, 39, 97, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, > 61, 61, 39, 57, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, > 49, 39, 32, 111, 110, 32, 97, 45, 99, 104, 97, 110, 110, 101, 108, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, > 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 114, > 103, 98, 50, 108, 97, 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, > 99, 10, 45, 43, 91, 49, 93, 32, 56, 54, 32, 45, 42, 91, 49, 93, > 32, 49, 46, 51, 56, 53, 56, 55, 32, 45, 95, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, 36, 49, > 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 48, > 32, 45, 47, 91, 49, 93, 32, 49, 46, 51, 56, 53, 56, 55, 32, 45, > 45, 91, 49, 93, 32, 56, 54, 10, 45, 105, 102, 32, 36, 51, 32, 45, > 110, 91, 49, 93, 32, 45, 56, 54, 44, 57, 56, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 108, 97, > 98, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, > 123, 123, 36, 50, 39, 61, 61, 39, 98, 125, 34, 32, 124, 124, 32, 34, > 123, 36, 50, 39, 61, 61, 39, 49, 48, 125, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 98, 45, 99, 104, 97, > 110, 110, 101, 108, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 48, 93, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, 48, 93, 32, 45, > 115, 91, 48, 93, 32, 99, 10, 45, 43, 91, 50, 93, 32, 49, 48, 56, > 32, 45, 42, 91, 50, 93, 32, 49, 46, 50, 53, 54, 49, 54, 32, 45, > 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 50, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 50, 93, 32, 48, 32, 45, 47, 91, 50, 93, 32, 49, 46, 50, > 53, 54, 49, 54, 32, 45, 45, 91, 50, 93, 32, 49, 48, 56, 10, 45, > 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, 45, 49, 48, 56, > 44, 57, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, > 50, 93, 32, 99, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 48, 93, > 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, > 104, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, > 49, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, > 111, 110, 32, 104, 117, 101, 32, 72, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, > 114, 103, 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, > 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 42, 91, 48, 93, > 32, 48, 46, 55, 48, 56, 51, 51, 51, 32, 45, 95, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 34, 36, > 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, > 48, 32, 45, 47, 91, 48, 93, 32, 48, 46, 55, 48, 56, 51, 51, 51, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 48, 93, 32, 48, 44, > 51, 54, 48, 32, 45, 101, 108, 115, 101, 32, 45, 37, 91, 48, 93, 32, > 51, 54, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, > 50, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 48, 93, > 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, > 115, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, > 50, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, > 111, 110, 32, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 32, 83, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, > 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 114, > 103, 98, 50, 104, 115, 118, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, > 99, 10, 45, 42, 91, 49, 93, 32, 50, 53, 53, 32, 45, 95, 97, 112, > 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, > 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, > 93, 32, 48, 32, 45, 47, 91, 49, 93, 32, 50, 53, 53, 10, 45, 105, > 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, 48, 44, 49, 32, 45, > 101, 108, 115, 101, 32, 45, 99, 91, 49, 93, 32, 48, 44, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, > 45, 104, 115, 118, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 118, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, 51, 125, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 118, 97, > 108, 117, 101, 32, 86, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, > 91, 48, 93, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 48, 93, 32, > 45, 115, 91, 48, 93, 32, 99, 10, 45, 42, 91, 50, 93, 32, 50, 53, > 53, 32, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 50, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 50, 93, 32, 48, 32, 45, 47, 91, 50, 93, 32, > 50, 53, 53, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 50, 93, > 32, 48, 44, 49, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 50, 93, > 32, 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, > 45, 50, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 48, > 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, > 39, 107, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, > 52, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, > 111, 110, 32, 107, 101, 121, 32, 99, 104, 97, 110, 110, 101, 108, 32, 75, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, > 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, > 114, 103, 98, 50, 99, 109, 121, 107, 91, 48, 93, 32, 45, 115, 91, 48, > 93, 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 51, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 51, 93, 32, 48, 10, 45, 105, 102, 32, > 36, 51, 32, 45, 110, 91, 51, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 101, 108, 115, 101, 32, 45, 99, 91, 51, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 51, 93, 32, > 99, 32, 45, 99, 109, 121, 107, 50, 114, 103, 98, 91, 48, 93, 32, 45, > 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 99, 103, > 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, 53, > 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 99, 111, 109, 109, 97, 110, 100, 40, 115, 41, 32, 39, 36, 49, > 39, 32, 111, 110, 32, 103, 114, 101, 101, 110, 32, 99, 104, 114, 111, 109, > 105, 110, 97, 110, 99, 101, 32, 67, 103, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, > 95, 114, 103, 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 32, > 45, 114, 118, 91, 49, 44, 50, 93, 32, 45, 97, 91, 48, 45, 50, 93, > 32, 99, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, 48, 93, > 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, 36, 49, > 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 48, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 49, 93, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, > 48, 45, 50, 93, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, 114, 103, > 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 32, 45, 114, 118, > 91, 49, 44, 50, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, > 50, 39, 61, 61, 39, 99, 104, 125, 34, 32, 124, 124, 32, 34, 123, 36, > 50, 39, 61, 61, 39, 49, 54, 125, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 36, 49, 39, 32, 111, 110, 32, 99, 45, 104, 32, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, > 91, 48, 93, 32, 45, 114, 103, 98, 50, 108, 99, 104, 91, 48, 93, 32, > 45, 115, 91, 48, 93, 32, 99, 10, 45, 42, 91, 49, 93, 32, 50, 46, > 53, 53, 32, 45, 43, 91, 50, 93, 32, 123, 112, 105, 125, 32, 45, 42, > 91, 50, 93, 32, 123, 50, 53, 53, 47, 40, 50, 42, 112, 105, 41, 125, > 10, 45, 97, 91, 49, 44, 50, 93, 32, 99, 32, 45, 95, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, > 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, > 32, 48, 44, 49, 32, 45, 115, 91, 49, 93, 32, 99, 10, 45, 47, 91, > 49, 93, 32, 50, 46, 53, 53, 32, 45, 47, 91, 50, 93, 32, 123, 50, > 53, 53, 47, 40, 50, 42, 112, 105, 41, 125, 32, 45, 45, 91, 50, 93, > 32, 123, 112, 105, 125, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, > 49, 93, 32, 48, 44, 49, 48, 48, 32, 45, 110, 91, 50, 93, 32, 45, > 123, 112, 105, 125, 44, 123, 112, 105, 125, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 108, 99, 104, 50, > 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, > 36, 50, 39, 61, 61, 39, 99, 125, 34, 32, 124, 124, 32, 34, 123, 36, > 50, 39, 61, 61, 39, 49, 55, 125, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 36, 49, 39, 32, 111, 110, 32, 99, 45, 99, 104, 97, 110, 110, > 101, 108, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, > 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, > 32, 45, 114, 103, 98, 50, 108, 99, 104, 91, 48, 93, 32, 45, 115, 91, > 48, 93, 32, 99, 10, 45, 42, 91, 49, 93, 32, 50, 46, 53, 53, 32, > 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 91, 49, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 49, 93, 32, 48, 32, 45, 47, 91, 49, 93, 32, 50, 46, > 53, 53, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, > 48, 44, 49, 48, 48, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 49, > 93, 32, 48, 44, 49, 48, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 108, 99, 104, 50, 114, 103, > 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, > 39, 61, 61, 39, 104, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, > 61, 61, 39, 49, 56, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, > 36, 49, 39, 32, 111, 110, 32, 104, 45, 99, 104, 97, 110, 110, 101, 108, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, > 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, > 114, 103, 98, 50, 108, 99, 104, 91, 48, 93, 32, 45, 115, 91, 48, 93, > 32, 99, 10, 45, 43, 91, 50, 93, 32, 123, 112, 105, 125, 32, 45, 42, > 91, 50, 93, 32, 123, 50, 53, 53, 47, 40, 50, 42, 112, 105, 41, 125, > 32, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 50, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 50, 93, 32, 48, 32, 45, 47, 91, 50, 93, 32, 123, > 50, 53, 53, 47, 40, 50, 42, 112, 105, 41, 125, 32, 45, 45, 91, 50, > 93, 32, 123, 112, 105, 125, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, > 91, 50, 93, 32, 45, 123, 112, 105, 125, 44, 123, 112, 105, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, > 45, 108, 99, 104, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 114, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, 57, 125, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 114, 101, > 100, 32, 99, 104, 97, 110, 110, 101, 108, 32, 82, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, > 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, > 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 48, 93, 32, 34, 36, 49, 34, 10, 45, 105, 102, 32, 36, > 51, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, > 108, 115, 101, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 103, 114, 97, 121, 91, > 48, 93, 10, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, > 61, 39, 103, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, > 39, 50, 48, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, > 39, 32, 111, 110, 32, 103, 114, 101, 101, 110, 32, 99, 104, 97, 110, 110, > 101, 108, 32, 71, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 95, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, > 36, 49, 34, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 116, 111, 95, 103, 114, 97, 121, 91, 49, 93, 10, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 98, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 50, 49, 125, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 98, 108, > 117, 101, 32, 99, 104, 97, 110, 110, 101, 108, 32, 66, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, > 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 50, 93, 32, 34, 36, 49, 34, 10, 45, 105, 102, 32, > 36, 51, 32, 45, 110, 91, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 101, 108, 115, 101, 32, 45, 99, 91, 50, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 103, 114, 97, 121, > 91, 50, 93, 10, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, > 61, 61, 39, 97, 108, 112, 104, 97, 125, 34, 32, 124, 124, 32, 34, 123, > 36, 50, 39, 61, 61, 39, 50, 50, 125, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 97, 108, 112, 104, 97, 32, > 99, 104, 97, 110, 110, 101, 108, 32, 65, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 115, 32, 99, 10, 45, 95, 97, 112, > 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 51, 93, 32, > 34, 36, 49, 34, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 51, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, > 91, 51, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 116, 111, 95, 103, 114, 97, 121, 91, 51, 93, 10, 45, 97, 32, > 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 10, 36, 123, 49, 45, > 45, 49, 125, 32, 45, 107, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, > 32, 97, 117, 116, 111, 105, 110, 100, 101, 120, 32, 58, 32, 110, 98, 95, > 99, 111, 108, 111, 114, 115, 62, 48, 44, 48, 60, 61, 95, 100, 105, 116, > 104, 101, 114, 105, 110, 103, 60, 61, 49, 44, 95, 109, 101, 116, 104, 111, > 100, 61, 123, 32, 48, 61, 109, 101, 100, 105, 97, 110, 45, 99, 117, 116, > 32, 124, 32, 49, 61, 107, 45, 109, 101, 97, 110, 115, 32, 125, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 100, 101, 120, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, > 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 97, > 100, 97, 112, 116, 101, 100, 32, 99, 111, 108, 111, 114, 109, 97, 112, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 105, 116, 104, > 101, 114, 105, 110, 103, 61, 48, 39, 32, 97, 110, 100, 32, 39, 109, 101, > 116, 104, 111, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, 32, 52, 32, 45, > 45, 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, 32, 56, 32, > 45, 45, 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, 32, 49, > 54, 10, 97, 117, 116, 111, 105, 110, 100, 101, 120, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 49, 41, 32, > 38, 38, 32, 36, 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 48, > 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 100, 101, > 120, 32, 99, 111, 108, 111, 114, 115, 32, 105, 110, 32, 105, 109, 97, 103, > 101, 115, 36, 63, 32, 98, 121, 32, 97, 100, 97, 112, 116, 101, 100, 32, > 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, 116, 104, 32, 36, 49, > 32, 101, 110, 116, 114, 105, 101, 115, 44, 32, 100, 105, 116, 104, 101, 114, > 105, 110, 103, 32, 108, 101, 118, 101, 108, 32, 36, 50, 32, 97, 110, 100, > 32, 34, 92, 10, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, > 51, 44, 107, 45, 109, 101, 97, 110, 115, 44, 109, 101, 100, 105, 97, 110, > 45, 99, 117, 116, 125, 34, 32, 109, 101, 116, 104, 111, 100, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 119, 62, 104, 125, > 32, 45, 105, 102, 32, 123, 119, 62, 50, 53, 54, 125, 32, 45, 45, 114, > 50, 100, 120, 32, 50, 53, 54, 32, 45, 101, 108, 115, 101, 32, 91, 48, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, > 105, 102, 32, 123, 104, 62, 50, 53, 54, 125, 32, 45, 45, 114, 50, 100, > 121, 32, 50, 53, 54, 32, 45, 101, 108, 115, 101, 32, 91, 48, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 99, > 111, 108, 111, 114, 109, 97, 112, 91, 49, 93, 32, 36, 49, 44, 36, 51, > 44, 48, 10, 45, 105, 110, 100, 101, 120, 91, 48, 93, 32, 91, 49, 93, > 44, 36, 50, 44, 49, 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 98, 97, 121, 101, 114, 50, 114, 103, 98, 32, 58, > 32, 95, 71, 77, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 44, > 95, 82, 66, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 49, 44, > 95, 82, 66, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 50, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, 97, 110, 115, 102, 111, > 114, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 82, 71, 66, 45, > 66, 97, 121, 101, 114, 32, 115, 97, 109, 112, 108, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 116, 111, 32, 99, 111, 108, 111, 114, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 71, 77, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 82, 66, > 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 82, 66, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 50, 61, 48, 46, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, > 103, 98, 50, 98, 97, 121, 101, 114, 32, 48, 32, 45, 45, 98, 97, 121, > 101, 114, 50, 114, 103, 98, 32, 49, 44, 49, 44, 48, 46, 53, 10, 98, > 97, 121, 101, 114, 50, 114, 103, 98, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 49, 125, 44, 36, 123, 50, 61, 49, 125, 44, 36, > 123, 51, 61, 48, 46, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 84, 114, 97, 110, 115, 102, 111, 114, 109, 32, 82, 71, 66, 45, 66, > 97, 121, 101, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, > 99, 111, 108, 111, 114, 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, 105, > 116, 104, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 40, 36, > 49, 44, 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, > 120, 112, 97, 110, 100, 95, 120, 32, 123, 34, 50, 32, 43, 32, 52, 42, > 36, 49, 34, 125, 44, 48, 32, 45, 101, 120, 112, 97, 110, 100, 95, 121, > 32, 123, 34, 50, 32, 43, 32, 52, 42, 36, 49, 34, 125, 44, 48, 10, > 40, 45, 49, 44, 49, 59, 49, 44, 45, 49, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, > 44, 48, 44, 50, 10, 45, 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 10, 40, 48, 46, 50, 53, 44, 48, 46, 53, 44, 48, 46, 50, 53, > 41, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, > 45, 49, 93, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 98, 91, 45, 49, 93, 32, 36, 49, 10, 45, 42, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 10, 45, 45, 91, 45, 51, 44, 45, 50, 93, 10, 40, > 49, 44, 45, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, 50, 10, 45, > 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 10, 40, 48, 46, 50, 53, > 44, 48, 46, 53, 44, 48, 46, 50, 53, 41, 32, 45, 99, 111, 110, 118, > 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 99, 111, > 110, 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 108, 117, 114, 95, 121, 91, > 45, 49, 93, 32, 36, 50, 32, 45, 98, 108, 117, 114, 95, 120, 91, 45, > 49, 93, 32, 36, 51, 10, 40, 49, 59, 45, 49, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, > 49, 44, 48, 44, 50, 10, 45, 42, 91, 45, 49, 93, 32, 91, 45, 52, > 93, 10, 40, 48, 46, 50, 53, 44, 48, 46, 53, 44, 48, 46, 50, 53, > 41, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, > 45, 49, 93, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 98, 108, 117, 114, 95, 120, 91, 45, 49, 93, 32, 36, 50, 32, 45, 98, > 108, 117, 114, 95, 121, 91, 45, 49, 93, 32, 36, 51, 10, 45, 43, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 47, 91, 45, 49, 93, 32, 50, 10, > 40, 50, 44, 48, 59, 48, 44, 45, 50, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, > 48, 44, 50, 10, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, > 45, 45, 91, 45, 52, 44, 45, 49, 93, 10, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 99, 10, 45, 109, 105, 120, 95, 114, 103, 98, 91, 45, > 49, 93, 32, 49, 44, 45, 49, 44, 50, 44, 49, 44, 49, 44, 48, 44, > 49, 44, 45, 49, 44, 45, 50, 10, 45, 115, 104, 114, 105, 110, 107, 95, > 120, 32, 123, 34, 50, 32, 43, 32, 52, 42, 36, 49, 34, 125, 44, 48, > 32, 45, 115, 104, 114, 105, 110, 107, 95, 121, 32, 123, 34, 50, 32, 43, > 32, 52, 42, 36, 49, 34, 125, 44, 48, 10, 45, 99, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 109, 121, 50, 114, > 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, > 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 102, 114, 111, 109, 32, 67, 77, 89, 32, 116, 111, 32, > 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, > 99, 109, 121, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 102, 114, 111, 109, 32, 67, 77, 89, 32, 116, 111, 32, 82, > 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 103, 98, 50, 99, 109, 121, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 109, 121, 107, 50, > 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, > 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 67, 77, 89, 75, 32, 116, > 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, > 46, 10, 99, 109, 121, 107, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 67, 77, 89, 75, 32, > 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, > 32, 45, 45, 47, 91, 45, 49, 93, 32, 45, 50, 53, 53, 32, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 48, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 43, 91, 48, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 97, 32, 99, 32, 45, 99, 109, 121, 50, 114, 103, 98, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, > 58, 32, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 61, 49, 44, 95, > 109, 101, 116, 104, 111, 100, 61, 123, 32, 48, 61, 109, 101, 100, 105, 97, > 110, 45, 99, 117, 116, 32, 124, 32, 49, 61, 107, 45, 109, 101, 97, 110, > 115, 32, 125, 44, 95, 115, 111, 114, 116, 95, 118, 101, 99, 116, 111, 114, > 115, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 69, 115, 116, 105, 109, 97, 116, 101, 32, 98, 101, > 115, 116, 45, 102, 105, 116, 116, 105, 110, 103, 32, 99, 111, 108, 111, 114, > 109, 97, 112, 32, 119, 105, 116, 104, 32, 39, 110, 98, 95, 99, 111, 108, > 111, 114, 115, 39, 32, 101, 110, 116, 114, 105, 101, 115, 44, 32, 116, 111, > 32, 105, 110, 100, 101, 120, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 109, 101, 116, 104, 111, 100, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 115, 111, 114, 116, 95, 118, 101, 99, 116, 111, 114, 115, 61, 49, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 99, 111, 108, 111, 114, 109, 97, 112, > 91, 48, 93, 32, 52, 32, 45, 45, 99, 111, 108, 111, 114, 109, 97, 112, > 91, 48, 93, 32, 56, 32, 45, 45, 99, 111, 108, 111, 114, 109, 97, 112, > 91, 48, 93, 32, 49, 54, 10, 99, 111, 108, 111, 114, 109, 97, 112, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, > 36, 49, 41, 32, 38, 38, 32, 36, 49, 62, 48, 34, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 49, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 115, 116, 105, 109, 97, > 116, 101, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, 116, 104, > 32, 36, 49, 32, 101, 110, 116, 114, 105, 101, 115, 32, 102, 111, 114, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 98, 121, 32, 34, 64, 123, 45, > 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 107, 45, 109, 101, 97, > 110, 115, 44, 109, 101, 100, 105, 97, 110, 45, 99, 117, 116, 125, 34, 32, > 109, 101, 116, 104, 111, 100, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 114, 32, 123, 119, 42, 104, 125, 44, 49, 44, 49, 44, 49, 48, 48, > 37, 44, 45, 49, 10, 45, 105, 102, 32, 123, 33, 36, 50, 125, 32, 45, > 95, 99, 111, 108, 111, 114, 109, 97, 112, 32, 36, 49, 10, 45, 101, 108, > 115, 101, 10, 109, 61, 123, 105, 109, 125, 32, 77, 61, 123, 105, 77, 125, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, > 95, 99, 111, 108, 111, 114, 109, 97, 112, 32, 36, 49, 32, 45, 45, 105, > 110, 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 53, 54, 32, 45, 43, 91, 45, 51, 44, 45, > 49, 93, 10, 45, 100, 111, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 115, 125, 10, 45, 115, 104, 91, 48, 93, 32, 36, 62, 44, 36, 62, 32, > 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, > 123, 36, 49, 42, 50, 53, 54, 125, 44, 48, 44, 123, 36, 49, 42, 50, > 53, 54, 45, 49, 125, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 105, > 91, 45, 50, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 49, 44, 39, > 120, 39, 32, 45, 114, 91, 45, 50, 93, 32, 123, 119, 125, 44, 49, 44, > 49, 44, 49, 44, 48, 44, 50, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, > 44, 49, 44, 49, 44, 49, 44, 50, 32, 45, 109, 97, 120, 91, 45, 49, > 93, 32, 48, 46, 48, 49, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 100, 111, 110, 101, 32, 45, 97, 91, 50, 45, 45, 49, 93, 32, > 99, 10, 45, 45, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 97, > 98, 115, 91, 45, 50, 93, 32, 100, 105, 102, 102, 61, 123, 64, 123, 45, > 50, 44, 43, 125, 47, 119, 125, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 97, 110, 100, 91, 45, 50, 93, 32, 50, 53, 53, 32, 45, 45, 105, > 110, 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 54, 32, 45, 43, 91, > 45, 51, 44, 45, 49, 93, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, > 100, 105, 102, 102, 62, 48, 46, 53, 125, 10, 45, 114, 109, 91, 45, 50, > 93, 32, 45, 42, 91, 45, 49, 93, 32, 123, 40, 36, 77, 45, 36, 109, > 41, 47, 50, 53, 53, 125, 32, 45, 43, 91, 45, 49, 93, 32, 36, 109, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 51, 32, 45, > 45, 110, 111, 114, 109, 32, 45, 114, 118, 32, 45, 97, 32, 121, 32, 45, > 115, 111, 114, 116, 32, 43, 44, 120, 32, 45, 114, 111, 119, 115, 32, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 32, 34, 91, 99, 111, > 108, 111, 114, 109, 97, 112, 32, 111, 102, 32, 34, 64, 123, 45, 49, 44, > 98, 125, 34, 93, 34, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 95, 99, 111, 108, 111, 114, 109, 97, 112, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, > 125, 10, 64, 35, 44, 123, 115, 125, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 10, 110, 61, 36, 62, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 123, 36, 110, 44, 115, 125, 32, 45, 115, 104, > 91, 36, 110, 93, 32, 36, 62, 44, 36, 62, 32, 45, 61, 91, 45, 50, > 93, 32, 123, 105, 102, 40, 119, 62, 49, 44, 105, 118, 44, 45, 49, 41, > 125, 44, 36, 110, 44, 36, 62, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, 10, 99, 61, 64, 123, > 45, 49, 44, 67, 125, 10, 98, 61, 64, 123, 45, 97, 114, 103, 92, 32, > 49, 44, 36, 99, 125, 10, 97, 61, 64, 123, 45, 97, 114, 103, 92, 32, > 50, 44, 36, 99, 125, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, > 104, 105, 102, 116, 91, 36, 98, 93, 32, 48, 44, 48, 44, 48, 44, 123, > 45, 36, 97, 125, 44, 50, 32, 45, 115, 111, 114, 116, 91, 36, 98, 93, > 32, 43, 44, 120, 32, 45, 115, 104, 105, 102, 116, 91, 36, 98, 93, 32, > 48, 44, 48, 44, 48, 44, 36, 97, 44, 50, 32, 45, 115, 91, 36, 98, > 93, 32, 120, 44, 50, 10, 45, 100, 111, 110, 101, 10, 45, 114, 32, 49, > 44, 49, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 97, 32, 120, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 111, 115, 101, 32, 97, 108, 108, 32, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 101, 97, 99, 104, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 117, > 115, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, > 114, 105, 116, 104, 109, 101, 116, 105, 99, 32, 111, 112, 101, 114, 97, 116, > 111, 114, 32, 40, 43, 44, 45, 44, 111, 114, 44, 109, 105, 110, 44, 46, > 46, 46, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 49, 61, > 43, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 111, 109, 112, 111, > 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 97, 110, 100, 10, > 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 34, 43, 34, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 111, > 115, 101, 32, 97, 108, 108, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 111, 112, 101, 114, 97, 116, 111, 114, 32, 39, 36, 49, 39, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 104, 32, 48, 44, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 123, 45, 50, 44, 115, 125, > 45, 49, 125, 32, 45, 115, 104, 91, 45, 50, 93, 32, 123, 36, 62, 43, > 49, 125, 44, 123, 36, 62, 43, 49, 125, 32, 45, 108, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 36, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 45, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 114, 101, 99, > 116, 105, 111, 110, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 82, 71, 66, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 50, 100, 32, 100, 105, 114, 101, > 99, 116, 105, 111, 110, 32, 102, 105, 101, 108, 100, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 103, > 114, 97, 100, 105, 101, 110, 116, 32, 45, 97, 112, 112, 101, 110, 100, 32, > 99, 32, 45, 98, 108, 117, 114, 32, 50, 32, 45, 111, 114, 105, 101, 110, > 116, 97, 116, 105, 111, 110, 32, 45, 45, 100, 105, 114, 101, 99, 116, 105, > 111, 110, 50, 114, 103, 98, 10, 100, 105, 114, 101, 99, 116, 105, 111, 110, > 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 109, 112, 117, 116, 101, 32, 82, 71, 66, 32, 114, 101, 112, 114, > 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 50, 100, > 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 32, 102, 105, 101, 108, 100, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 48, 44, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, > 44, 110, 125, 10, 45, 115, 32, 99, 32, 45, 99, 111, 109, 112, 108, 101, > 120, 50, 112, 111, 108, 97, 114, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 50, 93, 32, 48, 46, 48, 48, 49, 10, 45, 42, 91, 45, 49, 93, 32, > 123, 49, 56, 48, 47, 112, 105, 125, 32, 45, 37, 91, 45, 49, 93, 32, > 51, 54, 48, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 49, 44, 49, 32, 45, 109, 118, 91, 45, 51, 93, 32, 64, 35, 10, 45, > 105, 102, 32, 123, 105, 109, 33, 61, 105, 77, 125, 32, 45, 110, 91, 45, > 49, 93, 32, 48, 44, 49, 32, 45, 101, 108, 115, 101, 32, 45, 102, 91, > 45, 49, 93, 32, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, > 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 116, > 104, 101, 114, 101, 100, 98, 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 114, 101, 97, 116, 101, 32, 100, 105, 116, 104, 101, 114, 101, 100, > 32, 66, 38, 87, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, > 32, 45, 100, 105, 116, 104, 101, 114, 101, 100, 98, 119, 91, 45, 49, 93, > 10, 100, 105, 116, 104, 101, 114, 101, 100, 98, 119, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 100, 105, > 116, 104, 101, 114, 101, 100, 32, 66, 38, 87, 32, 118, 101, 114, 115, 105, > 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 10, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, > 91, 48, 93, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, 32, > 40, 48, 44, 50, 53, 53, 41, 32, 45, 105, 110, 100, 101, 120, 91, 48, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 99, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 105, > 108, 108, 95, 99, 111, 108, 111, 114, 39, 46, 10, 102, 99, 32, 58, 10, > 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, > 32, 43, 10, 45, 95, 102, 105, 108, 108, 95, 99, 111, 108, 111, 114, 32, > 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 108, 108, 95, 99, > 111, 108, 111, 114, 32, 58, 32, 99, 111, 108, 49, 44, 46, 46, 46, 44, > 99, 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 105, > 108, 108, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 99, 111, 108, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 99, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 102, 105, 108, 108, 95, 99, 111, > 108, 111, 114, 32, 50, 53, 53, 44, 48, 44, 50, 53, 53, 10, 102, 105, > 108, 108, 95, 99, 111, 108, 111, 114, 32, 58, 10, 45, 118, 32, 45, 32, > 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, > 36, 48, 32, 36, 42, 10, 95, 102, 105, 108, 108, 95, 99, 111, 108, 111, > 114, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 70, 105, > 108, 108, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 119, > 105, 116, 104, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 94, 48, 125, > 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 115, 125, 32, 45, 115, 104, 91, 48, 93, 32, 36, 62, > 44, 36, 62, 32, 45, 102, 91, 45, 49, 93, 32, 123, 97, 114, 103, 40, > 49, 43, 36, 62, 44, 36, 123, 94, 48, 125, 41, 125, 32, 45, 100, 111, > 110, 101, 32, 45, 107, 91, 48, 93, 10, 45, 110, 109, 32, 64, 123, 45, > 49, 44, 110, 125, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 103, > 114, 97, 100, 105, 101, 110, 116, 50, 114, 103, 98, 32, 58, 32, 95, 105, > 115, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 61, 123, 32, > 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 82, 71, 66, 32, 114, 101, 112, > 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 50, > 100, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 105, 115, 95, 111, 114, 105, 101, 110, > 116, 97, 116, 105, 111, 110, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 50, 114, 103, 98, 32, 48, > 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 10, 103, > 114, 97, 100, 105, 101, 110, 116, 50, 114, 103, 98, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 98, 111, 111, 108, 40, 36, 123, 49, > 61, 48, 125, 41, 34, 10, 45, 97, 114, 103, 32, 49, 43, 33, 36, 49, > 44, 34, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 34, 44, > 34, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, > 117, 116, 101, 32, 82, 71, 66, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 50, 100, 32, 103, 114, 97, > 100, 105, 101, 110, 116, 32, 34, 64, 123, 125, 34, 111, 102, 32, 105, 109, > 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, > 114, 109, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 105, 102, 32, 36, 49, 32, 45, 103, 114, 97, > 100, 105, 101, 110, 116, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 32, 50, 32, 45, 101, 108, 115, 101, 32, 45, 103, 32, 120, 121, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 99, 32, 45, 100, 105, 114, > 101, 99, 116, 105, 111, 110, 50, 114, 103, 98, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 104, 115, 105, 50, 114, 103, 98, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, > 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 102, 114, 111, 109, 32, 72, 83, 73, 32, 116, 111, 32, 82, 71, > 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 104, 115, 105, 56, 50, 114, 103, 98, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 72, 83, 73, 56, 32, 116, 111, 32, 82, 71, 66, 32, > 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 104, 115, 105, > 56, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 102, 114, 111, 109, 32, 72, 83, 73, 56, 32, 116, 111, 32, 82, 71, > 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 95, 104, 115, 120, 56, 50, 114, 103, 98, 32, > 45, 104, 115, 105, 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 104, 115, 108, 50, 114, 103, 98, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, > 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 102, 114, 111, 109, 32, 72, 83, 76, 32, 116, 111, 32, > 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 104, 115, 108, 56, 50, 114, 103, 98, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 102, 114, 111, 109, 32, 72, 83, 76, 56, 32, 116, 111, 32, 82, 71, > 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 104, > 115, 108, 56, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 102, 114, 111, 109, 32, 72, 83, 76, 56, 32, 116, 111, 32, > 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 95, 104, 115, 120, 56, 50, 114, 103, > 98, 32, 45, 104, 115, 108, 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 104, 115, 118, 50, 114, 103, 98, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 72, 83, 86, 32, 116, > 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, > 51, 54, 48, 59, 48, 44, 51, 54, 48, 94, 48, 44, 48, 59, 49, 44, > 49, 94, 49, 44, 49, 59, 49, 44, 49, 41, 32, 45, 114, 101, 115, 105, > 122, 101, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 44, 51, > 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, > 32, 104, 115, 118, 56, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, > 72, 83, 86, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, > 114, 32, 98, 97, 115, 101, 115, 46, 10, 104, 115, 118, 56, 50, 114, 103, > 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, > 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, > 109, 32, 72, 83, 86, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, > 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 95, 104, 115, 120, 56, 50, 114, 103, 98, 32, 45, 104, 115, 118, > 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, 95, 104, 115, 120, 56, 50, > 114, 103, 98, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 47, 91, > 45, 49, 93, 32, 48, 46, 55, 48, 56, 51, 51, 51, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 50, > 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 108, 97, 98, 50, 108, 99, 104, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 76, 97, 98, 32, 116, 111, 32, 76, 99, 104, 32, 99, > 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 108, 97, 98, 50, > 108, 99, 104, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, > 114, 111, 109, 32, 76, 97, 98, 32, 116, 111, 32, 76, 99, 104, 32, 99, > 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 51, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, 99, 111, > 109, 112, 108, 101, 120, 50, 112, 111, 108, 97, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 108, 97, 98, 50, 114, 103, 98, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 76, 97, 98, 32, 116, 111, 32, 82, 71, 66, 32, 99, > 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 40, 53, 48, 44, 53, 48, 59, 53, 48, 44, > 53, 48, 94, 45, 51, 44, 51, 59, 45, 51, 44, 51, 94, 45, 51, 44, > 45, 51, 59, 51, 44, 51, 41, 32, 45, 114, 101, 115, 105, 122, 101, 32, > 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 44, 51, 32, 45, 108, > 97, 98, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 108, 97, > 98, 56, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 76, 97, 98, > 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, > 97, 115, 101, 115, 46, 10, 108, 97, 98, 56, 50, 114, 103, 98, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, > 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 76, > 97, 98, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, 91, 36, 62, 93, > 32, 48, 44, 48, 32, 45, 47, 91, 45, 49, 93, 32, 50, 46, 53, 53, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, > 32, 49, 44, 49, 32, 45, 47, 91, 45, 49, 93, 32, 49, 46, 50, 55, > 53, 32, 45, 45, 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, > 32, 45, 47, 91, 45, 49, 93, 32, 49, 46, 49, 53, 57, 48, 57, 32, > 45, 45, 91, 45, 49, 93, 32, 49, 49, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 108, 97, 98, 50, 114, 103, > 98, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 99, > 104, 50, 108, 97, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 76, 99, 104, 32, > 116, 111, 32, 76, 97, 98, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 10, 108, 99, 104, 50, 108, 97, 98, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 76, 99, 104, 32, > 116, 111, 32, 76, 97, 98, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 51, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 115, 32, 99, 32, 45, 112, 111, 108, 97, 114, 50, 99, 111, 109, 112, > 108, 101, 120, 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 32, 99, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 108, 99, 104, 50, 114, 103, 98, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 102, 114, 111, 109, 32, 76, 99, 104, 32, 116, 111, 32, 82, 71, 66, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 108, 99, > 104, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 102, 114, 111, 109, 32, 76, 99, 104, 32, 116, 111, 32, 82, 71, 66, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 108, 99, 104, 50, 108, 97, 98, 32, 45, 108, 97, > 98, 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 108, 99, 104, 56, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, > 32, 76, 99, 104, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, > 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 108, 99, 104, 56, 50, 114, > 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, > 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, > 111, 109, 32, 76, 99, 104, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, > 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, > 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 47, 91, 45, 49, 93, 32, > 50, 46, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 47, 91, 45, 49, 93, 32, > 49, 46, 56, 56, 56, 56, 57, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, 45, 47, 91, 45, > 49, 93, 32, 52, 48, 46, 53, 56, 52, 53, 32, 45, 45, 91, 45, 49, > 93, 32, 51, 46, 49, 52, 49, 53, 57, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 100, 111, 110, 101, 32, 45, 108, 99, 104, 50, 114, 103, 98, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 115, 82, > 71, 66, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 10, 108, 117, 109, 105, > 110, 97, 110, 99, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 109, 112, 117, 116, 101, 32, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 115, 114, 103, 98, 50, 114, 103, 98, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 123, 115, 61, 61, 51, 125, 32, 45, 115, 104, 32, > 48, 44, 48, 32, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 32, 45, > 115, 104, 91, 48, 93, 32, 50, 44, 50, 32, 45, 42, 91, 49, 93, 32, > 48, 46, 50, 57, 57, 32, 45, 42, 91, 50, 93, 32, 48, 46, 53, 56, > 55, 32, 45, 42, 91, 51, 93, 32, 48, 46, 49, 49, 52, 32, 45, 43, > 91, 49, 45, 51, 93, 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, 108, > 105, 102, 32, 123, 115, 33, 61, 49, 125, 32, 45, 110, 111, 114, 109, 32, > 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 48, 32, 45, 114, 103, 98, 50, 115, 114, 103, > 98, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, > 120, 95, 114, 103, 98, 32, 58, 32, 97, 49, 49, 44, 97, 49, 50, 44, > 97, 49, 51, 44, 97, 50, 49, 44, 97, 50, 50, 44, 97, 50, 51, 44, > 97, 51, 49, 44, 97, 51, 50, 44, 97, 51, 51, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 51, 120, 51, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 109, 97, 116, 114, 105, 120, 32, > 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 115, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 49, 49, 61, > 49, 39, 44, 32, 39, 97, 49, 50, 61, 97, 49, 51, 61, 97, 50, 49, > 61, 48, 39, 44, 32, 39, 97, 50, 50, 61, 49, 39, 44, 32, 39, 97, > 50, 51, 61, 97, 51, 49, 61, 97, 51, 50, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 97, 51, 51, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 109, 105, 120, 95, 114, 103, 98, 32, 48, 44, 49, 44, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 10, 109, 105, 120, 95, > 114, 103, 98, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 125, 44, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, > 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 49, 125, 44, 36, > 123, 54, 61, 48, 125, 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, > 61, 48, 125, 44, 36, 123, 57, 61, 49, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 109, 97, 116, 114, 105, 120, > 32, 91, 32, 36, 49, 32, 36, 50, 32, 36, 51, 32, 59, 32, 36, 52, > 32, 36, 53, 32, 36, 54, 32, 59, 32, 36, 55, 32, 36, 56, 32, 36, > 57, 32, 93, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 51, 44, 48, 44, 50, 32, 45, 109, 105, 120, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 40, 36, 49, 44, 36, 50, 44, 36, 51, > 59, 36, 52, 44, 36, 53, 44, 36, 54, 59, 36, 55, 44, 36, 56, 44, > 36, 57, 41, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, 58, 32, 95, 109, 97, > 120, 95, 105, 110, 99, 114, 101, 109, 101, 110, 116, 62, 61, 48, 44, 95, > 74, 78, 68, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, 61, 48, > 44, 95, 98, 105, 116, 115, 95, 100, 101, 112, 116, 104, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, 97, 116, 101, > 32, 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, 99, 111, 108, 111, > 114, 109, 97, 112, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 105, 110, 99, 114, 101, 109, 101, 110, 116, 32, 97, 110, > 100, 32, 112, 101, 114, 99, 101, 112, 116, 117, 97, 108, 32, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 102, 32, 39, 74, 78, 68, 95, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 39, 32, 105, 115, 32, 48, 44, 32, 110, 111, 32, 112, 101, 114, > 99, 101, 112, 116, 117, 97, 108, 32, 99, 111, 110, 115, 116, 114, 97, 105, > 110, 116, 115, 32, 97, 114, 101, 32, 97, 112, 112, 108, 105, 101, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 109, 97, 120, 95, 105, > 110, 99, 114, 101, 109, 101, 110, 116, 61, 53, 39, 44, 32, 39, 74, 78, > 68, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 50, 46, 51, 39, > 32, 97, 110, 100, 32, 39, 98, 105, 116, 115, 95, 100, 101, 112, 116, 104, > 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, 53, 10, 112, 115, > 101, 117, 100, 111, 103, 114, 97, 121, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 53, 125, 41, > 32, 38, 38, 32, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 50, 46, 51, 125, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, 110, > 116, 40, 36, 123, 51, 61, 56, 125, 41, 32, 38, 38, 32, 36, 51, 62, > 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 110, 101, > 114, 97, 116, 101, 32, 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, > 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, 116, 104, 32, 105, 110, > 99, 114, 101, 109, 101, 110, 116, 32, 36, 49, 44, 32, 74, 78, 68, 32, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 36, 50, 32, 97, 110, 100, > 32, 36, 51, 32, 98, 105, 116, 115, 32, 100, 101, 112, 116, 104, 46, 34, > 10, 45, 118, 32, 45, 10, 123, 114, 111, 117, 110, 100, 40, 50, 94, 36, > 51, 41, 125, 44, 49, 44, 49, 44, 51, 44, 39, 120, 39, 10, 45, 105, > 102, 32, 123, 33, 36, 49, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 123, 36, 49, 43, 49, 125, 44, > 123, 36, 49, 43, 49, 125, 44, 123, 36, 49, 43, 49, 125, 44, 49, 44, > 39, 120, 39, 32, 45, 45, 102, 91, 45, 49, 93, 32, 39, 121, 39, 32, > 45, 45, 102, 91, 45, 49, 93, 32, 39, 122, 39, 32, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, 93, 32, 123, > 119, 42, 104, 42, 100, 125, 44, 49, 44, 49, 44, 51, 44, 45, 49, 10, > 45, 102, 91, 45, 49, 93, 32, 39, 82, 61, 105, 40, 120, 44, 48, 44, > 48, 44, 48, 41, 59, 71, 61, 105, 40, 120, 44, 48, 44, 48, 44, 49, > 41, 59, 66, 61, 105, 40, 120, 44, 48, 44, 48, 44, 50, 41, 59, 105, > 102, 40, 109, 105, 110, 40, 82, 44, 71, 44, 66, 41, 44, 45, 49, 44, > 105, 41, 39, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, > 32, 99, 120, 121, 122, 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, > 49, 93, 32, 45, 49, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, > 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, > 109, 117, 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 10, 45, 114, > 91, 45, 50, 93, 32, 123, 119, 42, 49, 48, 48, 125, 37, 32, 45, 114, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 102, 91, 45, 49, 93, 32, 39, > 82, 61, 105, 40, 120, 44, 48, 44, 48, 44, 48, 41, 59, 71, 61, 105, > 40, 120, 44, 48, 44, 48, 44, 49, 41, 59, 66, 61, 105, 40, 120, 44, > 48, 44, 48, 44, 50, 41, 59, 105, 102, 40, 109, 97, 120, 40, 82, 44, > 71, 44, 66, 41, 62, 50, 94, 36, 51, 45, 49, 44, 45, 49, 44, 105, > 41, 39, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, > 99, 120, 121, 122, 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 49, > 93, 32, 45, 49, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, > 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, > 117, 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 10, 45, 110, 91, > 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, 115, 114, 103, 98, > 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 103, 98, 50, 108, 97, > 98, 91, 45, 49, 93, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, 115, 111, > 114, 116, 91, 45, 49, 93, 32, 43, 44, 120, 10, 45, 105, 102, 32, 123, > 33, 36, 50, 125, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 49, > 10, 45, 101, 108, 115, 101, 10, 45, 115, 91, 45, 49, 93, 32, 121, 32, > 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 91, 45, 49, 93, 32, > 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 50, 32, 45, 102, 91, 45, > 49, 93, 32, 48, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 110, 111, 114, 109, 91, 45, 49, 93, > 10, 45, 108, 101, 91, 45, 49, 93, 32, 36, 50, 32, 45, 42, 91, 45, > 49, 93, 32, 39, 120, 43, 49, 39, 32, 45, 100, 105, 115, 99, 97, 114, > 100, 91, 45, 49, 93, 32, 48, 32, 45, 45, 91, 45, 49, 93, 32, 49, > 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 48, 48, 48, 48, 10, 45, 45, 115, 114, 103, 98, 50, 114, 103, 98, 91, > 45, 49, 93, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, > 32, 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 48, 44, 123, > 49, 45, 50, 42, 40, 36, 62, 37, 50, 41, 125, 44, 48, 44, 48, 44, > 49, 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 111, 114, > 109, 91, 45, 49, 93, 10, 45, 108, 101, 91, 45, 49, 93, 32, 36, 50, > 10, 45, 105, 102, 32, 123, 105, 109, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 42, 91, 45, 49, 93, 32, 39, 121, 43, 49, 39, 32, 45, 100, 105, > 115, 99, 97, 114, 100, 91, 45, 49, 93, 32, 48, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 100, 111, 110, 101, > 10, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, > 32, 58, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 91, 37, 93, 62, > 61, 48, 44, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, > 62, 61, 48, 44, 115, 114, 99, 49, 44, 115, 114, 99, 50, 44, 46, 46, > 46, 44, 100, 101, 115, 116, 49, 44, 100, 101, 115, 116, 50, 44, 46, 46, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, 97, > 99, 101, 32, 112, 105, 120, 101, 108, 115, 32, 102, 114, 111, 109, 47, 116, > 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, > 114, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 52, 48, 44, 51, > 44, 50, 48, 52, 44, 49, 53, 51, 44, 49, 49, 48, 44, 50, 53, 53, > 44, 48, 44, 48, 10, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, > 111, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, > 61, 48, 32, 38, 38, 32, 36, 50, 62, 61, 48, 34, 10, 45, 118, 32, > 45, 32, 45, 108, 91, 93, 32, 40, 36, 123, 51, 45, 45, 49, 125, 41, > 32, 45, 121, 32, 99, 32, 45, 115, 32, 99, 44, 50, 32, 99, 111, 108, > 49, 61, 64, 48, 32, 99, 111, 108, 50, 61, 64, 49, 32, 45, 114, 109, > 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 99, 111, 108, > 111, 114, 32, 40, 34, 36, 99, 111, 108, 49, 34, 41, 32, 98, 121, 32, > 99, 111, 108, 111, 114, 32, 40, 34, 36, 99, 111, 108, 50, 34, 41, 32, > 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, > 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 44, 49, 44, 49, 44, 49, > 48, 48, 37, 44, 36, 99, 111, 108, 49, 32, 45, 114, 91, 49, 93, 32, > 91, 48, 93, 10, 45, 105, 102, 32, 36, 49, 32, 45, 45, 91, 49, 93, > 32, 91, 48, 93, 32, 45, 110, 111, 114, 109, 91, 49, 93, 32, 45, 108, > 101, 91, 49, 93, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, 45, 61, > 61, 91, 49, 93, 32, 91, 48, 93, 32, 45, 108, 91, 49, 93, 32, 45, > 115, 32, 99, 32, 45, 97, 110, 100, 32, 45, 101, 110, 100, 108, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 98, 91, 49, 93, 32, 36, 50, 10, 49, > 44, 49, 44, 49, 44, 64, 123, 48, 44, 115, 125, 44, 36, 99, 111, 108, > 50, 32, 45, 114, 91, 50, 93, 32, 91, 48, 93, 32, 45, 106, 91, 48, > 93, 32, 91, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 91, 49, 93, 32, 45, 107, 91, 48, 93, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 103, 98, 50, 98, 97, 121, 101, 114, 32, 58, 32, 95, 115, > 116, 97, 114, 116, 95, 112, 97, 116, 116, 101, 114, 110, 61, 48, 44, 95, > 99, 111, 108, 111, 114, 95, 103, 114, 105, 100, 61, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 84, 114, 97, 110, 115, 102, 111, 114, 109, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 99, 111, 108, 111, 114, 32, 105, > 109, 97, 103, 101, 115, 32, 116, 111, 32, 82, 71, 66, 45, 66, 97, 121, > 101, 114, 32, 115, 97, 109, 112, 108, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 97, > 114, 116, 95, 112, 97, 116, 116, 101, 114, 110, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 99, 111, 108, 111, 114, 95, 103, 114, 105, 100, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 103, 98, 50, 98, 97, 121, > 101, 114, 32, 48, 10, 114, 103, 98, 50, 98, 97, 121, 101, 114, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 125, 44, 36, 123, > 50, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 84, 114, > 97, 110, 115, 102, 111, 114, 109, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 116, 111, 32, 97, 32, 82, 71, 66, 45, 66, 97, 121, 101, 114, 32, 34, > 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 99, 111, > 108, 111, 114, 44, 109, 111, 110, 111, 99, 104, 114, 111, 109, 101, 125, 34, > 32, 103, 114, 105, 100, 44, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, > 102, 114, 111, 109, 32, 112, 97, 116, 116, 101, 114, 110, 32, 39, 36, 49, > 39, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, 103, 98, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 95, 114, 103, 98, 50, 98, 97, 121, 101, 114, 36, 49, > 32, 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 48, 44, 50, 32, 45, > 42, 32, 45, 105, 102, 32, 123, 33, 36, 50, 125, 32, 45, 115, 32, 99, > 32, 45, 43, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 95, 114, 103, 98, > 50, 98, 97, 121, 101, 114, 48, 32, 58, 32, 40, 49, 44, 48, 59, 48, > 44, 48, 94, 48, 44, 49, 59, 49, 44, 48, 94, 48, 44, 48, 59, 48, > 44, 49, 41, 10, 95, 114, 103, 98, 50, 98, 97, 121, 101, 114, 49, 32, > 58, 32, 40, 48, 44, 48, 59, 48, 44, 49, 94, 48, 44, 49, 59, 49, > 44, 48, 94, 49, 44, 48, 59, 48, 44, 48, 41, 10, 95, 114, 103, 98, > 50, 98, 97, 121, 101, 114, 50, 32, 58, 32, 40, 48, 44, 48, 59, 49, > 44, 48, 94, 49, 44, 48, 59, 48, 44, 49, 94, 48, 44, 49, 59, 48, > 44, 48, 41, 10, 95, 114, 103, 98, 50, 98, 97, 121, 101, 114, 51, 32, > 58, 32, 40, 48, 44, 49, 59, 48, 44, 48, 94, 49, 44, 48, 59, 48, > 44, 49, 94, 48, 44, 48, 59, 49, 44, 48, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 114, 103, 98, 50, 99, 109, 121, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, > 32, 82, 71, 66, 32, 116, 111, 32, 67, 77, 89, 32, 99, 111, 108, 111, > 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, > 98, 50, 99, 109, 121, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, > 103, 98, 50, 99, 109, 121, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 67, 77, > 89, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 32, 45, 42, 32, 45, 49, 32, 45, 43, 32, 50, > 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 103, 98, 50, 99, 109, 121, 107, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 67, 77, 89, 75, 32, 99, 111, 108, 111, 114, 98, > 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, > 99, 109, 121, 107, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 114, 103, 98, 50, 99, 109, 121, 107, 32, 45, 115, 112, > 108, 105, 116, 32, 99, 32, 45, 102, 105, 108, 108, 91, 51, 93, 32, 48, > 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, 45, 99, 109, 121, 107, > 50, 114, 103, 98, 10, 114, 103, 98, 50, 99, 109, 121, 107, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 67, 77, 89, 75, 32, 99, 111, 108, 111, 114, 32, > 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, > 98, 50, 99, 109, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, 45, 109, > 105, 110, 32, 45, 45, 91, 48, 45, 50, 93, 32, 91, 45, 49, 93, 32, > 45, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, > 45, 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 47, 91, 48, 45, 50, 93, 32, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 97, 32, 99, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 104, 115, 105, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, > 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, > 32, 72, 83, 73, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, 105, 32, 45, > 115, 112, 108, 105, 116, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 103, 98, 50, 104, 115, 105, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 72, 83, 73, 56, 32, 99, 111, 108, 111, 114, 32, > 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, > 50, 104, 115, 105, 56, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, > 103, 98, 50, 104, 115, 105, 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, > 83, 73, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, 98, 50, 104, 115, 105, 32, > 45, 95, 114, 103, 98, 50, 104, 115, 120, 56, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 104, 115, 108, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 72, 83, 76, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, 108, 32, > 45, 115, 112, 108, 105, 116, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, > 103, 98, 50, 104, 115, 108, 32, 45, 45, 115, 112, 108, 105, 116, 32, 99, > 32, 45, 97, 100, 100, 91, 45, 51, 93, 32, 49, 48, 48, 32, 45, 109, > 111, 100, 91, 45, 51, 93, 32, 51, 54, 48, 32, 45, 97, 112, 112, 101, > 110, 100, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, 108, > 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, > 104, 115, 108, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 72, 83, 76, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, > 108, 56, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, 103, 98, 50, > 104, 115, 108, 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, 83, 76, 56, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 103, 98, 50, 104, 115, 108, 32, 45, 95, 114, > 103, 98, 50, 104, 115, 120, 56, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 103, 98, 50, 104, 115, 118, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, > 83, 86, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, 118, 32, 45, 115, 112, > 108, 105, 116, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, > 104, 115, 118, 32, 45, 45, 115, 112, 108, 105, 116, 32, 99, 32, 45, 97, > 100, 100, 91, 45, 50, 93, 32, 48, 46, 51, 32, 45, 99, 117, 116, 91, > 45, 50, 93, 32, 48, 44, 49, 32, 45, 97, 112, 112, 101, 110, 100, 91, > 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, > 98, 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 104, 115, 118, > 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, > 83, 86, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, 118, 56, 32, > 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, 103, 98, 50, 104, 115, 118, > 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, > 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, > 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, 83, 86, 56, 32, 99, 111, > 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 103, 98, 50, 104, 115, 118, 32, 45, 95, 114, 103, 98, 50, > 104, 115, 120, 56, 32, 45, 118, 32, 43, 10, 95, 114, 103, 98, 50, 104, > 115, 120, 56, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 48, 46, 55, 48, 56, 51, 51, 51, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 50, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 103, 98, 50, 108, 97, 98, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 97, 98, 32, > 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 103, 98, 50, 108, 97, 98, 32, 45, 115, 112, 108, 105, 116, > 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 108, 97, 98, > 32, 45, 45, 115, 112, 108, 105, 116, 32, 99, 32, 45, 109, 117, 108, 91, > 45, 50, 44, 45, 49, 93, 32, 50, 46, 53, 32, 45, 97, 112, 112, 101, > 110, 100, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 108, 97, 98, > 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, > 108, 97, 98, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 76, 97, 98, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 108, 97, > 98, 56, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, 103, 98, 50, > 108, 97, 98, 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 97, 98, 56, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 103, 98, 50, 108, 97, 98, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, 91, 36, 62, 93, 32, > 48, 44, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 46, 53, 53, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, > 49, 44, 49, 32, 45, 43, 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, > 42, 91, 45, 49, 93, 32, 49, 46, 50, 55, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 49, 48, 32, 45, 42, 91, 45, 49, > 93, 32, 49, 46, 49, 53, 57, 48, 57, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 103, 98, 50, 108, 99, 104, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, > 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 99, 104, 32, 99, 111, 108, > 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 114, 103, 98, 50, 108, 99, 104, 32, 45, 115, 112, 108, 105, 116, 32, 99, > 10, 114, 103, 98, 50, 108, 99, 104, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, > 76, 99, 104, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, 98, 50, 108, 97, 98, 32, > 45, 108, 97, 98, 50, 108, 99, 104, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 103, 98, 50, 108, 99, 104, 56, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 99, 104, 56, 32, > 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 114, 103, 98, 50, 108, 99, 104, 56, 32, 45, 115, 112, 108, > 105, 116, 32, 99, 10, 114, 103, 98, 50, 108, 99, 104, 56, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 76, 99, 104, 56, 32, 99, 111, 108, 111, 114, 32, > 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, > 98, 50, 108, 99, 104, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 46, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 42, 91, > 45, 49, 93, 32, 49, 46, 56, 56, 56, 56, 57, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, > 45, 43, 91, 45, 49, 93, 32, 51, 46, 49, 52, 49, 53, 57, 32, 45, > 42, 91, 45, 49, 93, 32, 52, 48, 46, 53, 56, 52, 53, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 108, 117, 118, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 85, 86, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 114, 103, 98, 50, 108, 117, 118, 32, 45, 115, 112, 108, > 105, 116, 32, 99, 10, 114, 103, 98, 50, 108, 117, 118, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, > 32, 116, 111, 32, 76, 85, 86, 32, 99, 111, 108, 111, 114, 32, 98, 97, > 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 114, > 103, 98, 50, 120, 121, 122, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, > 45, 50, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 50, > 93, 32, 48, 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, 45, 42, 91, > 45, 49, 93, 32, 51, 32, 45, 45, 42, 91, 45, 50, 93, 32, 49, 53, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, > 93, 32, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, > 45, 56, 10, 45, 42, 91, 45, 51, 93, 32, 52, 32, 45, 42, 91, 45, > 50, 93, 32, 57, 32, 45, 47, 91, 45, 51, 44, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 91, 45, > 50, 93, 32, 48, 46, 50, 48, 48, 57, 32, 45, 45, 91, 45, 49, 93, > 32, 48, 46, 52, 54, 49, 48, 10, 45, 45, 42, 91, 45, 51, 93, 32, > 49, 51, 32, 45, 42, 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 32, 99, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 115, 114, 103, 98, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 115, 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 120, 121, > 122, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 88, > 89, 90, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 116, 104, 101, 32, 68, 54, 53, 32, > 105, 108, 108, 117, 109, 105, 110, 97, 110, 116, 32, 105, 115, 32, 117, 115, > 101, 100, 32, 97, 115, 32, 116, 104, 101, 32, 119, 104, 105, 116, 101, 32, > 112, 111, 105, 110, 116, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, > 98, 50, 120, 121, 122, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, > 103, 98, 50, 120, 121, 122, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 88, 89, > 90, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 47, 32, 50, 53, 53, 32, 45, 109, 105, 120, > 95, 114, 103, 98, 32, 48, 46, 52, 49, 50, 52, 53, 51, 44, 48, 46, > 51, 53, 55, 53, 56, 48, 44, 48, 46, 49, 56, 48, 52, 50, 51, 44, > 48, 46, 50, 49, 50, 54, 55, 49, 44, 48, 46, 55, 49, 53, 49, 54, > 48, 44, 48, 46, 48, 55, 50, 49, 54, 57, 44, 48, 46, 48, 49, 57, > 51, 51, 52, 44, 48, 46, 49, 49, 57, 49, 57, 51, 44, 48, 46, 57, > 53, 48, 50, 50, 55, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 103, 98, 50, 120, 121, 122, 56, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, > 32, 82, 71, 66, 32, 116, 111, 32, 88, 89, 90, 56, 32, 99, 111, 108, > 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 114, 103, 98, 50, 120, 121, 122, 56, 32, 45, 115, 112, 108, 105, 116, 32, > 99, 10, 114, 103, 98, 50, 120, 121, 122, 56, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 88, 89, 90, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, 98, 50, 120, > 121, 122, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, > 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 42, 91, 45, 49, 93, 32, > 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, > 36, 62, 93, 32, 50, 44, 50, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 51, 49, 46, 56, 49, 56, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 103, 98, 50, 121, 99, 98, 99, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, > 109, 32, 82, 71, 66, 32, 116, 111, 32, 89, 67, 98, 67, 114, 32, 99, > 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 115, 112, 108, 105, > 116, 32, 99, 10, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 89, 67, 98, 67, 114, 32, 99, 111, 108, 111, 114, > 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 109, > 105, 120, 95, 114, 103, 98, 32, 54, 54, 44, 49, 50, 57, 44, 50, 53, > 44, 45, 51, 56, 44, 45, 55, 52, 44, 49, 49, 50, 44, 49, 49, 50, > 44, 45, 57, 52, 44, 45, 49, 56, 32, 45, 43, 32, 49, 50, 56, 32, > 45, 47, 32, 50, 53, 54, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 104, 32, 48, 44, 48, > 32, 45, 43, 91, 45, 49, 93, 32, 49, 54, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 115, 104, 32, 49, 44, 50, 32, 45, 43, 91, 45, 49, > 93, 32, 49, 50, 56, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 121, 117, 118, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 89, 85, 86, 32, 99, > 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 103, 98, 50, 121, 117, 118, 32, 45, 115, 112, 108, 105, 116, 32, > 99, 10, 114, 103, 98, 50, 121, 117, 118, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, > 32, 89, 85, 86, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 47, 32, 50, 53, 53, 32, 45, > 109, 105, 120, 95, 114, 103, 98, 32, 48, 46, 50, 57, 57, 44, 48, 46, > 53, 56, 55, 44, 48, 46, 49, 49, 52, 44, 45, 48, 46, 49, 52, 55, > 49, 51, 44, 45, 48, 46, 50, 56, 56, 56, 54, 44, 48, 46, 52, 51, > 54, 44, 48, 46, 54, 49, 53, 44, 45, 48, 46, 53, 49, 52, 57, 56, > 44, 45, 48, 46, 49, 48, 48, 48, 49, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 121, 117, 118, 56, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 89, 85, 86, 56, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 114, 103, 98, 50, 121, 117, 118, 56, 32, 45, 115, 112, > 108, 105, 116, 32, 99, 10, 114, 103, 98, 50, 121, 117, 118, 56, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, > 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, > 71, 66, 32, 116, 111, 32, 89, 85, 86, 56, 32, 99, 111, 108, 111, 114, > 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 103, 98, 50, 121, 117, 118, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 43, 91, > 45, 49, 93, 32, 48, 46, 52, 52, 32, 45, 42, 91, 45, 49, 93, 32, > 50, 56, 57, 46, 55, 55, 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, 45, 43, 91, 45, > 49, 93, 32, 48, 46, 54, 50, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 48, 53, 46, 54, 52, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, > 111, 112, 97, 99, 105, 116, 121, 32, 99, 104, 97, 110, 110, 101, 108, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, > 109, 111, 118, 101, 32, 111, 112, 97, 99, 105, 116, 121, 32, 99, 104, 97, > 110, 110, 101, 108, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 115, 61, > 61, 50, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 10, > 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 52, 125, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 48, 44, 50, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 109, 32, 64, 123, 45, 49, 44, 110, 125, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 101, 108, 101, 99, 116, 95, 99, > 111, 108, 111, 114, 32, 58, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, > 91, 37, 93, 62, 61, 48, 44, 99, 111, 108, 49, 44, 46, 46, 44, 99, > 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 108, > 101, 99, 116, 32, 112, 105, 120, 101, 108, 115, 32, 119, 105, 116, 104, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 32, > 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 101, 108, 101, 99, > 116, 95, 99, 111, 108, 111, 114, 32, 52, 48, 44, 50, 48, 52, 44, 49, > 53, 51, 44, 49, 49, 48, 10, 115, 101, 108, 101, 99, 116, 95, 99, 111, > 108, 111, 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 83, 101, 108, 101, > 99, 116, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 50, 45, 45, 49, > 125, 41, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 102, 99, 32, 36, > 123, 50, 45, 45, 49, 125, 32, 45, 45, 32, 45, 110, 111, 114, 109, 32, > 45, 108, 101, 32, 36, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 101, 112, 105, 97, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 115, 101, 112, 105, 97, 32, 116, 111, 110, 101, 115, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 115, 101, 112, 105, 97, 10, 115, 101, 112, 105, 97, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 115, > 101, 112, 105, 97, 32, 116, 111, 110, 101, 115, 32, 101, 102, 102, 101, 99, > 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 40, 48, 44, 52, 52, 44, 49, 49, 53, 44, 49, 52, > 51, 44, 49, 57, 54, 44, 50, 52, 52, 94, 48, 44, 50, 48, 44, 56, > 52, 44, 49, 49, 57, 44, 49, 56, 52, 44, 50, 51, 53, 94, 48, 44, > 53, 44, 52, 52, 44, 55, 51, 44, 49, 52, 52, 44, 50, 48, 48, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, > 51, 44, 51, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 49, 125, 32, 45, 108, 91, 36, 62, 44, 45, 49, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, 109, 97, 112, 91, 48, > 93, 32, 91, 45, 49, 93, 32, 45, 97, 91, 94, 45, 49, 93, 32, 99, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 111, 108, 97, 114, 105, 122, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 83, 111, 108, 97, 114, 105, 122, 101, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 115, 111, 108, 97, 114, 105, 122, 101, 10, 115, 111, 108, > 97, 114, 105, 122, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 83, 111, 108, 97, 114, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 110, 32, 48, 44, 49, 50, 56, 32, 45, 109, 97, > 112, 32, 49, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 112, 108, 105, 116, 32, 99, 111, 108, > 111, 114, 32, 97, 110, 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 112, > 97, 114, 116, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 83, 112, 108, 105, 116, 32, 99, 111, 108, 111, 114, 32, 97, 110, > 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 112, 97, 114, 116, 115, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 60, 93, 32, 45, 115, 32, 99, 44, 123, 105, 102, 40, 115, 61, 61, > 52, 44, 45, 51, 44, 105, 102, 40, 115, 61, 61, 50, 44, 45, 49, 44, > 45, 115, 41, 41, 125, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 114, > 103, 98, 50, 114, 103, 98, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, > 111, 109, 32, 115, 82, 71, 66, 32, 116, 111, 32, 82, 71, 66, 32, 99, > 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 111, 95, 97, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 70, 111, 114, 99, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 116, 111, 32, 104, 97, 118, 101, 32, 97, 110, > 32, 97, 108, 112, 104, 97, 32, 99, 104, 97, 110, 110, 101, 108, 46, 10, > 116, 111, 95, 97, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, > 32, 104, 97, 118, 101, 32, 97, 110, 32, 97, 108, 112, 104, 97, 32, 99, > 104, 97, 110, 110, 101, 108, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 105, 102, 32, 123, 115, 61, 61, 49, 124, 124, 115, 61, 61, 51, 125, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 123, 115, 125, > 32, 45, 115, 104, 91, 45, 49, 93, 32, 123, 115, 45, 49, 125, 44, 123, > 115, 45, 49, 125, 32, 45, 102, 91, 45, 49, 93, 32, 50, 53, 53, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, 99, 111, 108, 111, 114, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 111, 114, 99, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, > 111, 32, 98, 101, 32, 105, 110, 32, 99, 111, 108, 111, 114, 32, 109, 111, > 100, 101, 32, 40, 82, 71, 66, 32, 111, 114, 32, 82, 71, 66, 65, 41, > 46, 10, 116, 111, 95, 99, 111, 108, 111, 114, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 99, 111, 108, > 111, 114, 32, 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, > 114, 91, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 39, 58, 32, 73, 109, 97, 103, 101, 32, > 91, 34, 64, 123, 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, > 111, 116, 32, 97, 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, > 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, > 108, 105, 102, 32, 123, 115, 61, 61, 50, 125, 32, 45, 114, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 44, 48, 44, 49, 44, > 48, 44, 48, 44, 48, 44, 49, 10, 45, 101, 108, 105, 102, 32, 123, 115, > 61, 61, 49, 125, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 44, 51, 44, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, 99, 111, 108, 111, 114, 109, > 111, 100, 101, 32, 58, 32, 109, 111, 100, 101, 61, 123, 32, 48, 61, 97, > 100, 97, 112, 116, 105, 118, 101, 32, 124, 32, 49, 61, 71, 32, 124, 32, > 50, 61, 71, 65, 32, 124, 32, 51, 61, 82, 71, 66, 32, 124, 32, 52, > 61, 82, 71, 66, 65, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 70, 111, 114, 99, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, > 97, 32, 103, 105, 118, 101, 110, 32, 99, 111, 108, 111, 114, 32, 109, 111, > 100, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 109, 111, 100, > 101, 61, 48, 39, 46, 10, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, > 100, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, > 125, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 116, > 111, 95, 103, 114, 97, 121, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 50, 125, 32, 45, 116, 111, 95, 103, 114, 97, 121, 97, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 116, 111, > 95, 114, 103, 98, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 52, 125, 32, 45, 116, 111, 95, 114, 103, 98, 97, 10, 45, 101, 108, 115, > 101, 10, 115, 61, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 105, 102, 32, 123, 64, 123, 36, 62, 44, 115, 125, 62, 52, 125, > 32, 45, 101, 114, 114, 111, 114, 32, 34, 67, 111, 109, 109, 97, 110, 100, > 32, 39, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 39, > 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 36, 62, 34, 93, 32, 105, > 115, 32, 110, 111, 116, 32, 97, 32, 71, 44, 71, 65, 44, 82, 71, 66, > 32, 111, 114, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 46, 34, > 10, 45, 101, 108, 115, 101, 32, 115, 61, 123, 109, 97, 120, 40, 36, 115, > 44, 64, 123, 36, 62, 44, 115, 125, 41, 125, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 32, 45, 116, 111, 95, 99, 111, 108, 111, > 114, 109, 111, 100, 101, 32, 36, 115, 10, 45, 101, 110, 100, 105, 102, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, 103, 114, 97, 121, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 70, 111, 114, 99, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, > 32, 98, 101, 32, 105, 110, 32, 71, 82, 65, 89, 32, 109, 111, 100, 101, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, 111, 95, 103, 114, 97, 121, > 10, 116, 111, 95, 103, 114, 97, 121, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 71, 82, 65, 89, 32, > 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, 114, 91, 93, > 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, 111, 95, 103, > 114, 97, 121, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 64, 123, > 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, 111, 116, 32, 97, > 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, 71, 66, > 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, 108, 105, 102, 32, > 123, 115, 62, 61, 51, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 48, 44, 50, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 10, > 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 50, 125, 32, 45, 114, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 111, 95, 103, 114, 97, 121, 97, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 70, 111, 114, 99, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, 32, 98, 101, 32, > 105, 110, 32, 71, 82, 65, 89, 65, 32, 109, 111, 100, 101, 46, 10, 116, > 111, 95, 103, 114, 97, 121, 97, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 71, 82, 65, 89, 65, 32, > 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, 114, 91, 93, > 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, 111, 95, 103, > 114, 97, 121, 97, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 64, > 123, 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, 111, 116, 32, > 97, 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, 71, > 66, 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, 108, 105, 102, > 32, 123, 115, 61, 61, 52, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 51, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, > 50, 93, 32, 48, 44, 50, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 91, 45, 50, 93, 32, 45, 97, 32, 99, 10, 45, 101, 108, 105, 102, > 32, 123, 115, 61, 61, 51, 125, 32, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 49, > 32, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 102, 91, > 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 49, 125, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 48, 44, 49, 32, 45, 115, 104, 91, 45, > 49, 93, 32, 49, 44, 49, 32, 45, 102, 91, 45, 49, 93, 32, 50, 53, > 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, 112, 115, 101, 117, > 100, 111, 103, 114, 97, 121, 32, 58, 32, 95, 109, 97, 120, 95, 115, 116, > 101, 112, 62, 61, 48, 44, 95, 105, 115, 95, 112, 101, 114, 99, 101, 112, > 116, 117, 97, 108, 95, 99, 111, 110, 115, 116, 114, 97, 105, 110, 116, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 98, 105, 116, 115, 95, > 100, 101, 112, 116, 104, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 115, 99, 97, 108, 97, 114, 32, 105, 109, 97, 103, 101, 115, 32, > 40, 91, 48, 45, 50, 53, 53, 93, 45, 118, 97, 108, 117, 101, 100, 41, > 32, 116, 111, 32, 112, 115, 101, 117, 100, 111, 45, 103, 114, 97, 121, 32, > 99, 111, 108, 111, 114, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 112, > 97, 114, 97, 109, 101, 116, 101, 114, 115, 32, 58, 32, 39, 109, 97, 120, > 95, 115, 116, 101, 112, 61, 53, 39, 44, 32, 39, 105, 115, 95, 112, 101, > 114, 99, 101, 112, 116, 117, 97, 108, 95, 99, 111, 110, 115, 116, 114, 97, > 105, 110, 116, 61, 49, 39, 32, 97, 110, 100, 32, 39, 98, 105, 116, 115, > 95, 100, 101, 112, 116, 104, 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 84, 104, 101, 32, 111, 114, 105, 103, 105, 110, 97, 108, > 32, 112, 115, 101, 117, 100, 111, 45, 103, 114, 97, 121, 32, 116, 101, 99, > 104, 110, 105, 113, 117, 101, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, > 105, 110, 116, 114, 111, 100, 117, 99, 101, 100, 32, 98, 121, 32, 82, 105, > 99, 104, 32, 70, 114, 97, 110, 122, 101, 110, 32, 91, 104, 116, 116, 112, > 58, 47, 47, 114, 48, 107, 46, 117, 115, 47, 103, 114, 97, 112, 104, 105, > 99, 115, 47, 112, 115, 101, 117, 100, 111, 71, 114, 101, 121, 46, 104, 116, > 109, 108, 93, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, > 116, 101, 110, 115, 105, 111, 110, 32, 111, 102, 32, 116, 104, 105, 115, 32, > 116, 101, 99, 104, 110, 105, 113, 117, 101, 32, 116, 111, 32, 97, 114, 98, > 105, 116, 114, 97, 114, 121, 32, 105, 110, 99, 114, 101, 109, 101, 110, 116, > 115, 32, 102, 111, 114, 32, 109, 111, 114, 101, 32, 116, 111, 110, 101, 115, > 44, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 100, 111, 110, 101, 32, > 98, 121, 32, 68, 97, 118, 105, 100, 32, 84, 115, 99, 104, 117, 109, 112, > 101, 114, 108, 101, 46, 10, 116, 111, 95, 112, 115, 101, 117, 100, 111, 103, > 114, 97, 121, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, > 105, 110, 116, 40, 36, 123, 49, 61, 53, 125, 41, 32, 38, 38, 32, 36, > 49, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, > 51, 61, 56, 125, 41, 32, 38, 38, 32, 36, 51, 62, 48, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 115, 99, 97, > 108, 97, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, 112, > 115, 101, 117, 100, 111, 45, 103, 114, 97, 121, 32, 99, 111, 108, 111, 114, > 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 116, > 101, 112, 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 48, 32, 45, 115, 114, 103, 98, 50, > 114, 103, 98, 32, 45, 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, > 36, 49, 44, 123, 50, 46, 51, 42, 36, 50, 125, 44, 36, 51, 10, 45, > 45, 115, 114, 103, 98, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, > 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, 49, > 93, 32, 123, 54, 53, 53, 51, 53, 47, 49, 48, 48, 125, 32, 45, 114, > 111, 117, 110, 100, 91, 45, 49, 93, 32, 45, 114, 111, 119, 115, 91, 45, > 49, 93, 32, 48, 44, 50, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 120, > 99, 121, 122, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, 112, 111, 105, 110, 116, 99, > 108, 111, 117, 100, 91, 45, 49, 93, 32, 48, 10, 45, 45, 110, 111, 114, > 109, 91, 45, 49, 93, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, > 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 119, 97, 116, 101, > 114, 115, 104, 101, 100, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, > 116, 111, 95, 114, 103, 98, 91, 36, 62, 93, 32, 45, 114, 103, 98, 50, > 108, 97, 98, 91, 36, 62, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 36, 62, 93, 32, 48, 32, 45, 42, 91, 36, 62, 93, 32, 123, > 54, 53, 53, 51, 53, 47, 49, 48, 48, 125, 32, 45, 114, 111, 117, 110, > 100, 91, 36, 62, 93, 32, 45, 99, 91, 36, 62, 93, 32, 48, 44, 54, > 53, 53, 51, 53, 10, 45, 109, 97, 112, 91, 36, 62, 93, 32, 91, 45, > 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, > 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 111, 114, > 99, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 82, 71, 66, 32, > 109, 111, 100, 101, 46, 10, 116, 111, 95, 114, 103, 98, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 82, > 71, 66, 32, 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, > 114, 91, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, > 111, 95, 114, 103, 98, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, > 64, 123, 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, 111, 116, > 32, 97, 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, > 71, 66, 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, 108, 105, > 102, 32, 123, 115, 61, 61, 52, 125, 32, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 48, 44, 50, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, > 61, 50, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, > 48, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 51, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, > 49, 125, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 51, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 116, 111, 95, 114, 103, 98, 97, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 70, 111, 114, 99, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, 32, > 98, 101, 32, 105, 110, 32, 82, 71, 66, 65, 32, 109, 111, 100, 101, 46, > 10, 116, 111, 95, 114, 103, 98, 97, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 82, 71, 66, 65, 32, > 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, 114, 91, 93, > 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, 111, 95, 114, > 103, 98, 97, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 64, 123, > 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, 111, 116, 32, 97, > 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, 71, 66, > 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, 108, 105, 102, 32, > 123, 115, 61, 61, 51, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 48, 44, 51, 32, 45, 115, 104, 91, 45, 49, 93, 32, 51, 44, 51, > 32, 45, 102, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 50, 125, > 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 52, 32, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, > 32, 45, 102, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 49, > 125, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 52, 32, 45, 115, 104, 91, 45, 49, 93, 32, 51, 44, > 51, 32, 45, 102, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 116, 114, 97, 110, 115, 102, 101, 114, 95, 99, 111, 108, > 111, 114, 115, 32, 58, 32, 95, 116, 114, 97, 110, 115, 102, 101, 114, 95, > 98, 114, 105, 103, 104, 116, 110, 101, 115, 115, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, > 97, 110, 115, 102, 101, 114, 32, 99, 111, 108, 111, 114, 115, 32, 111, 102, > 32, 116, 104, 101, 32, 102, 105, 114, 115, 116, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 116, 111, 32, 116, 104, 101, > 32, 111, 116, 104, 101, 114, 32, 111, 110, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 116, 114, 97, 110, 115, 102, 101, 114, 95, 98, > 114, 105, 103, 104, 116, 110, 101, 115, 115, 61, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 114, 97, 110, 100, 32, 48, 44, 50, 53, 53, 32, > 45, 114, 101, 118, 101, 114, 115, 101, 32, 45, 45, 116, 114, 97, 110, 115, > 102, 101, 114, 95, 99, 111, 108, 111, 114, 115, 32, 49, 10, 116, 114, 97, > 110, 115, 102, 101, 114, 95, 99, 111, 108, 111, 114, 115, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 84, 114, 97, 110, 115, 102, 101, 114, 32, 99, 111, > 108, 111, 114, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 91, 48, > 93, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 116, > 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 116, 111, 95, 99, 111, 108, > 111, 114, 109, 111, 100, 101, 91, 94, 48, 93, 32, 123, 109, 97, 120, 40, > 51, 44, 64, 123, 45, 109, 97, 120, 95, 115, 125, 41, 125, 32, 45, 99, > 32, 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 103, 98, 50, 121, 99, 98, > 99, 114, 91, 48, 93, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 108, 91, 48, 93, 32, 45, 115, 32, > 99, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 95, 99, 117, 109, > 117, 108, 32, 50, 53, 54, 44, 49, 44, 48, 44, 50, 53, 53, 32, 45, > 97, 32, 99, 32, 45, 42, 32, 50, 53, 53, 32, 45, 101, 110, 100, 108, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, > 45, 108, 91, 48, 44, 45, 49, 93, 10, 45, 105, 102, 32, 36, 49, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 51, 32, 45, 115, 104, 91, 48, 44, > 49, 93, 32, 36, 62, 44, 36, 62, 32, 45, 101, 113, 117, 97, 108, 105, > 122, 101, 91, 45, 49, 93, 32, 50, 53, 54, 44, 48, 44, 50, 53, 53, > 32, 45, 105, 110, 100, 101, 120, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 50, 32, 45, 115, 104, 91, 48, 44, 49, 93, 32, 123, > 36, 62, 43, 49, 125, 44, 123, 36, 62, 43, 49, 125, 32, 45, 101, 113, > 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 50, 53, 54, 44, 48, > 44, 50, 53, 53, 32, 45, 105, 110, 100, 101, 120, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, > 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, > 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 118, > 32, 43, 10, 95, 116, 114, 97, 110, 115, 102, 101, 114, 95, 99, 111, 108, > 111, 114, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 114, 103, 98, 50, 121, 99, 98, > 99, 114, 32, 45, 115, 32, 99, 32, 45, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 32, 50, 53, 54, 44, 48, 44, 50, 53, 53, 32, 45, 97, 32, > 99, 32, 45, 100, 103, 32, 51, 48, 48, 44, 50, 48, 48, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 120, 121, 122, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 88, > 89, 90, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, > 97, 115, 101, 115, 46, 10, 120, 121, 122, 50, 114, 103, 98, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 88, 89, > 90, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, > 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 42, 32, 50, > 53, 53, 32, 45, 109, 105, 120, 95, 114, 103, 98, 32, 51, 46, 50, 52, > 48, 52, 55, 57, 44, 45, 49, 46, 53, 51, 55, 49, 53, 48, 44, 45, > 48, 46, 52, 57, 56, 53, 51, 53, 44, 45, 48, 46, 57, 54, 57, 50, > 53, 54, 44, 49, 46, 56, 55, 53, 57, 57, 50, 44, 48, 46, 48, 52, > 49, 53, 53, 54, 44, 48, 46, 48, 53, 53, 54, 52, 56, 44, 45, 48, > 46, 50, 48, 52, 48, 52, 51, 44, 49, 46, 48, 53, 55, 51, 49, 49, > 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 120, 121, 122, 56, 50, 114, 103, 98, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 102, 114, 111, 109, 32, 88, 89, 90, 56, 32, 116, 111, 32, 82, 71, 66, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 120, 121, > 122, 56, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 102, 114, 111, 109, 32, 88, 89, 90, 56, 32, 116, 111, 32, 82, > 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 47, 91, > 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 47, 91, 45, > 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, 45, 47, 91, 45, 49, > 93, 32, 50, 51, 49, 46, 56, 49, 56, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 120, 121, 122, 50, 114, 103, > 98, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 121, 99, > 98, 99, 114, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 89, 67, > 98, 67, 114, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 98, 97, 115, 101, 115, 46, 10, 121, 99, 98, 99, 114, 50, 114, 103, 98, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, > 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, > 32, 89, 67, 98, 67, 114, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, > 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 115, 104, 32, 48, 44, 48, 32, 45, 45, 91, 45, 49, > 93, 32, 49, 54, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, > 32, 49, 44, 50, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 109, 105, 120, 95, 114, 103, 98, 32, 50, 57, 56, > 44, 48, 44, 52, 48, 57, 44, 50, 57, 56, 44, 45, 49, 48, 48, 44, > 45, 50, 48, 56, 44, 50, 57, 56, 44, 53, 49, 54, 44, 48, 32, 45, > 43, 32, 49, 50, 56, 32, 45, 47, 32, 50, 53, 54, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 121, 117, 118, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, > 89, 85, 86, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 98, 97, 115, 101, 115, 46, 10, 121, 117, 118, 50, 114, 103, 98, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, > 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 89, > 85, 86, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, > 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 109, 105, > 120, 95, 114, 103, 98, 32, 49, 44, 48, 44, 49, 46, 49, 51, 57, 56, > 51, 44, 49, 44, 45, 48, 46, 51, 57, 52, 54, 53, 44, 45, 48, 46, > 53, 56, 48, 54, 44, 49, 44, 50, 46, 48, 51, 50, 49, 49, 44, 48, > 32, 45, 42, 32, 50, 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 121, 117, 118, 56, 50, 114, 103, 98, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, > 111, 109, 32, 89, 85, 86, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, > 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 121, 117, 118, 56, > 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 102, 114, 111, 109, 32, 89, 85, 86, 56, 32, 116, 111, 32, 82, 71, 66, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, > 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 47, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, > 104, 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 47, 91, 45, 49, 93, > 32, 50, 56, 57, 46, 55, 55, 51, 32, 45, 45, 91, 45, 49, 93, 32, > 48, 46, 52, 52, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 36, 62, 93, 32, 50, 44, 50, 32, 45, 47, 91, 45, 49, 93, 32, > 50, 48, 53, 46, 54, 52, 53, 32, 45, 45, 91, 45, 49, 93, 32, 48, > 46, 54, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, > 101, 32, 45, 121, 117, 118, 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 71, 101, 111, 109, 101, 116, > 114, 121, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, > 35, 64, 103, 109, 105, 99, 32, 97, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 97, 112, 112, 101, 110, 100, 39, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 101, 110, 100, 32, > 58, 32, 91, 105, 109, 97, 103, 101, 93, 44, 97, 120, 105, 115, 44, 95, > 97, 108, 105, 103, 110, 109, 101, 110, 116, 32, 58, 32, 97, 120, 105, 115, > 44, 95, 97, 108, 105, 103, 110, 109, 101, 110, 116, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 101, 110, > 100, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 44, 32, 111, 114, 32, 97, 108, 108, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, 103, > 101, 116, 104, 101, 114, 44, 32, 97, 108, 111, 110, 103, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 120, 105, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 97, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, > 120, 105, 115, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 120, 32, > 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 85, 115, 117, 97, 108, 32, 39, 97, > 108, 105, 103, 110, 109, 101, 110, 116, 39, 32, 118, 97, 108, 117, 101, 115, > 32, 97, 114, 101, 32, 123, 32, 48, 61, 108, 101, 102, 116, 45, 106, 117, > 115, 116, 105, 102, 105, 101, 100, 32, 124, 32, 48, 46, 53, 61, 99, 101, > 110, 116, 101, 114, 101, 100, 32, 124, 32, 49, 61, 114, 105, 103, 104, 116, > 45, 106, 117, 115, 116, 105, 102, 105, 101, 100, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 97, 108, 105, 103, 110, 109, 101, 110, 116, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, > 32, 121, 44, 49, 48, 32, 45, 114, 101, 118, 101, 114, 115, 101, 32, 45, > 97, 112, 112, 101, 110, 100, 32, 121, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 53, 32, 45, 45, 114, 111, 119, 115, 91, 48, > 93, 32, 48, 44, 123, 49, 48, 43, 49, 56, 42, 36, 62, 125, 37, 32, > 45, 100, 111, 110, 101, 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, > 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 44, 48, 46, 53, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 97, 112, 112, 101, 110, 100, 91, 48, 93, 32, 91, > 48, 93, 44, 121, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 101, > 110, 100, 95, 116, 105, 108, 101, 115, 32, 58, 32, 95, 77, 62, 61, 48, > 44, 95, 78, 62, 61, 48, 44, 48, 60, 61, 95, 120, 95, 97, 108, 105, > 103, 110, 109, 101, 110, 116, 60, 61, 49, 44, 48, 60, 61, 95, 121, 95, > 97, 108, 105, 103, 110, 109, 101, 110, 116, 60, 61, 49, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 101, 110, 100, 32, 77, 120, 78, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 116, 105, 108, 101, 115, 32, > 97, 115, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 78, 39, 32, 105, > 115, 32, 115, 101, 116, 32, 116, 111, 32, 48, 44, 32, 110, 117, 109, 98, > 101, 114, 32, 111, 102, 32, 114, 111, 119, 115, 32, 105, 115, 32, 101, 115, > 116, 105, 109, 97, 116, 101, 100, 32, 97, 117, 116, 111, 109, 97, 116, 105, > 99, 97, 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 102, 32, 39, 77, 39, 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, > 32, 48, 44, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 99, 111, > 108, 117, 109, 110, 115, 32, 105, 115, 32, 101, 115, 116, 105, 109, 97, 116, > 101, 100, 32, 97, 117, 116, 111, 109, 97, 116, 105, 99, 97, 108, 108, 121, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 77, > 39, 32, 97, 110, 100, 32, 39, 78, 39, 32, 97, 114, 101, 32, 98, 111, > 116, 104, 32, 115, 101, 116, 32, 116, 111, 32, 39, 48, 39, 44, 32, 97, > 117, 116, 111, 45, 109, 111, 100, 101, 32, 105, 115, 32, 117, 115, 101, 100, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 77, > 39, 32, 111, 114, 32, 39, 78, 39, 32, 105, 115, 32, 115, 101, 116, 32, > 116, 111, 32, 48, 44, 32, 111, 110, 108, 121, 32, 97, 32, 115, 105, 110, > 103, 108, 101, 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 112, 114, 111, > 100, 117, 99, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 120, 95, 97, 108, 105, 103, 110, 109, 101, 110, 116, 39, 32, 97, 110, > 100, 32, 39, 121, 95, 97, 108, 105, 103, 109, 101, 110, 116, 39, 32, 116, > 101, 108, 108, 115, 32, 97, 98, 111, 117, 116, 32, 116, 104, 101, 32, 97, > 108, 105, 103, 110, 109, 101, 110, 116, 32, 111, 102, 32, 116, 105, 108, 101, > 115, 32, 119, 104, 101, 110, 32, 116, 104, 101, 121, 32, 104, 97, 118, 101, > 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 115, 105, 122, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 77, 61, 48, 39, > 44, 32, 39, 78, 61, 48, 39, 44, 32, 39, 120, 95, 97, 108, 105, 103, > 110, 109, 101, 110, 116, 61, 121, 95, 97, 108, 105, 103, 110, 109, 101, 110, > 116, 61, 48, 46, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, > 108, 105, 116, 32, 120, 121, 44, 52, 32, 45, 97, 112, 112, 101, 110, 100, > 95, 116, 105, 108, 101, 115, 32, 44, 10, 97, 112, 112, 101, 110, 100, 95, > 116, 105, 108, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 48, 125, 41, 32, 38, 38, > 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 48, 125, 41, 32, 38, > 38, 32, 36, 123, 51, 61, 48, 46, 53, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 51, 60, 61, 49, 32, 38, 38, 32, 36, 123, 52, 61, 36, 51, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, 61, 49, 34, 10, 45, > 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 97, 115, 32, 97, 32, 48, 120, 48, 45, 116, 105, 108, 101, 100, > 32, 105, 109, 97, 103, 101, 46, 34, 32, 45, 114, 101, 116, 117, 114, 110, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 36, 49, > 38, 38, 33, 36, 50, 125, 10, 45, 118, 32, 45, 32, 78, 61, 123, 105, > 110, 116, 40, 115, 113, 114, 116, 40, 64, 35, 41, 41, 125, 32, 77, 61, > 123, 114, 111, 117, 110, 100, 40, 64, 35, 47, 36, 78, 44, 49, 44, 49, > 41, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, 45, 51, 93, > 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 97, 115, 32, 97, 32, 34, 36, 123, 77, 125, 120, 36, 123, 78, 125, > 34, 45, 116, 105, 108, 101, 100, 32, 105, 109, 97, 103, 101, 32, 40, 97, > 117, 116, 111, 45, 109, 111, 100, 101, 41, 46, 34, 32, 45, 118, 32, 45, > 10, 77, 78, 61, 123, 36, 77, 42, 36, 78, 125, 32, 45, 105, 102, 32, > 123, 64, 35, 37, 36, 77, 78, 125, 32, 123, 36, 77, 78, 45, 40, 64, > 35, 37, 36, 77, 78, 41, 125, 32, 45, 115, 91, 45, 49, 93, 32, 120, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 33, > 36, 50, 125, 10, 45, 118, 32, 45, 32, 77, 61, 36, 49, 32, 78, 61, > 123, 114, 111, 117, 110, 100, 40, 64, 35, 47, 36, 49, 44, 49, 44, 49, > 41, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, 45, 51, 93, > 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 97, 115, 32, 97, 32, 34, 36, 123, 77, 125, 120, 36, 123, 78, 125, > 34, 45, 116, 105, 108, 101, 100, 32, 105, 109, 97, 103, 101, 46, 34, 32, > 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 77, 62, 64, 35, 125, > 32, 45, 118, 32, 43, 32, 45, 119, 97, 114, 110, 91, 48, 45, 45, 51, > 93, 32, 34, 77, 105, 115, 115, 105, 110, 103, 32, 105, 109, 97, 103, 101, > 115, 32, 102, 111, 114, 32, 104, 97, 118, 105, 110, 103, 32, 111, 110, 101, > 32, 114, 111, 119, 32, 105, 110, 32, 97, 32, 34, 36, 123, 77, 125, 120, > 36, 123, 78, 125, 34, 45, 116, 105, 108, 101, 100, 32, 105, 109, 97, 103, > 101, 46, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 64, 35, 37, 36, 77, 125, 32, 123, > 36, 77, 45, 40, 64, 35, 37, 36, 77, 41, 125, 32, 45, 115, 91, 45, > 49, 93, 32, 120, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, > 102, 32, 123, 33, 36, 49, 125, 10, 45, 118, 32, 45, 32, 77, 61, 123, > 114, 111, 117, 110, 100, 40, 64, 35, 47, 36, 50, 44, 49, 44, 49, 41, > 125, 32, 78, 61, 36, 50, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, > 45, 45, 51, 93, 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 97, 115, 32, 97, 32, 34, 36, 123, 77, 125, 120, > 36, 123, 78, 125, 34, 45, 116, 105, 108, 101, 100, 32, 105, 109, 97, 103, > 101, 46, 34, 32, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 78, > 62, 64, 35, 125, 32, 45, 118, 32, 43, 32, 45, 119, 97, 114, 110, 91, > 48, 45, 45, 51, 93, 32, 34, 77, 105, 115, 115, 105, 110, 103, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 111, 114, 32, 104, 97, 118, 105, 110, 103, > 32, 111, 110, 101, 32, 99, 111, 108, 117, 109, 110, 32, 105, 110, 32, 97, > 32, 34, 36, 123, 77, 125, 120, 36, 123, 78, 125, 34, 45, 116, 105, 108, > 101, 100, 32, 105, 109, 97, 103, 101, 46, 34, 32, 45, 114, 101, 116, 117, > 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, > 35, 37, 36, 77, 125, 32, 123, 36, 77, 45, 40, 64, 35, 37, 36, 77, > 41, 125, 32, 45, 115, 91, 45, 49, 93, 32, 120, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 97, 115, 32, 36, 49, 120, 36, 50, 45, 116, 105, 108, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 34, 32, 45, 118, 32, 45, 10, > 77, 61, 36, 49, 32, 78, 61, 36, 50, 10, 45, 101, 110, 100, 105, 102, > 10, 77, 78, 61, 123, 36, 77, 42, 36, 78, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 77, 78, 41, > 125, 32, 45, 108, 91, 36, 62, 45, 123, 36, 62, 43, 36, 77, 78, 45, > 49, 125, 93, 10, 36, 77, 78, 44, 49, 44, 49, 44, 50, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 77, 78, 32, 45, 112, 111, 105, 110, 116, > 91, 45, 49, 93, 32, 36, 62, 44, 48, 44, 48, 44, 49, 44, 64, 123, > 36, 62, 44, 119, 125, 44, 64, 123, 36, 62, 44, 104, 125, 32, 45, 100, > 111, 110, 101, 32, 45, 114, 91, 45, 49, 93, 32, 36, 77, 44, 36, 78, > 44, 49, 44, 50, 44, 45, 49, 10, 45, 115, 91, 45, 49, 93, 32, 99, > 32, 45, 108, 91, 45, 50, 93, 32, 45, 115, 32, 121, 32, 45, 109, 97, > 120, 32, 45, 101, 110, 100, 108, 32, 45, 108, 91, 45, 49, 93, 32, 45, > 115, 32, 120, 32, 45, 109, 97, 120, 32, 45, 101, 110, 100, 108, 10, 105, > 61, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 32, 121, 61, > 36, 62, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 77, 32, 45, 114, > 91, 36, 105, 93, 32, 64, 123, 45, 50, 44, 36, 62, 125, 44, 64, 123, > 45, 49, 44, 36, 121, 125, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 48, 44, 48, 44, 36, 51, 44, 36, 52, 32, 105, 61, 123, 36, 105, > 43, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 77, 41, 125, 32, > 45, 97, 91, 36, 62, 45, 123, 36, 62, 43, 36, 77, 45, 49, 125, 93, > 32, 120, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 78, 41, 125, 32, 45, 97, > 91, 36, 62, 45, 123, 36, 62, 43, 36, 78, 45, 49, 125, 93, 32, 121, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, > 117, 116, 111, 99, 114, 111, 112, 32, 58, 32, 118, 97, 108, 117, 101, 49, > 44, 118, 97, 108, 117, 101, 50, 44, 46, 46, 46, 32, 58, 32, 40, 110, > 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 117, 116, 111, 99, 114, 111, 112, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 101, 99, > 116, 111, 114, 45, 118, 97, 108, 117, 101, 100, 32, 105, 110, 116, 101, 110, > 115, 105, 116, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 110, 111, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 97, > 114, 101, 32, 112, 114, 111, 118, 105, 100, 101, 100, 44, 32, 99, 114, 111, > 112, 112, 105, 110, 103, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 103, > 117, 101, 115, 115, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 32, 45, > 102, 105, 108, 108, 95, 99, 111, 108, 111, 114, 32, 54, 52, 44, 49, 50, > 56, 44, 50, 53, 53, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, > 48, 37, 44, 53, 48, 37, 44, 49, 50, 48, 44, 49, 50, 48, 44, 48, > 44, 49, 44, 50, 53, 53, 32, 45, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 10, 35, 64, 103, 109, 105, 99, 32, 97, 117, 116, 111, 99, 114, 111, > 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 58, 32, 95, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 91, 37, 93, 44, 95, 109, 105, > 110, 95, 97, 114, 101, 97, 91, 37, 93, 62, 61, 48, 44, 95, 105, 115, > 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, > 116, 121, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 111, 117, > 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 123, 32, 48, 61, 99, 114, > 111, 112, 32, 124, 32, 49, 61, 115, 101, 103, 109, 101, 110, 116, 97, 116, > 105, 111, 110, 32, 124, 32, 50, 61, 99, 111, 111, 114, 100, 105, 110, 97, > 116, 101, 115, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 117, 116, 111, 99, 114, 111, 112, 32, 97, 110, 100, 32, 101, 120, 116, 114, > 97, 99, 116, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, 111, > 109, 112, 111, 110, 101, 110, 116, 115, 32, 105, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 97, 32, 109, 97, 115, 107, > 32, 103, 105, 118, 101, 110, 32, 97, 115, 32, 116, 104, 101, 32, 108, 97, > 115, 116, 32, 99, 104, 97, 110, 110, 101, 108, 32, 111, 102, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 101, 97, 99, 104, 32, 111, 102, 32, 116, > 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 40, 101, 46, 103, 46, 32, 97, 108, 112, 104, 97, 45, 99, 104, > 97, 110, 110, 101, 108, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 48, 37, 39, 44, > 32, 39, 109, 105, 110, 95, 97, 114, 101, 97, 61, 48, 46, 49, 37, 39, > 44, 32, 39, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 50, 53, 54, 44, 50, > 53, 54, 32, 45, 110, 111, 105, 115, 101, 32, 48, 46, 49, 44, 50, 32, > 45, 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, 32, 50, 48, 32, > 45, 108, 97, 98, 101, 108, 95, 102, 103, 32, 48, 44, 49, 32, 45, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, 53, 32, 45, > 45, 110, 101, 113, 32, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, > 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, 45, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, > 115, 32, 44, 10, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, > 112, 111, 110, 101, 110, 116, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 48, 37, 125, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 50, 61, 48, 46, 49, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 105, 115, 98, 111, 111, 108, 40, 36, 123, 51, 61, 48, 125, 41, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 52, 61, 49, 125, 41, 32, > 38, 38, 32, 36, 52, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, 61, > 50, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 117, 116, 111, > 99, 114, 111, 112, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, > 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 102, 114, 111, 109, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 36, 49, 44, 32, 109, 105, 110, 105, 109, > 97, 108, 32, 97, 114, 101, 97, 32, 36, 50, 44, 32, 34, 64, 123, 45, > 97, 114, 103, 92, 32, 49, 43, 36, 51, 44, 108, 111, 119, 44, 104, 105, > 103, 104, 125, 34, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 32, 34, 92, 10, 34, 97, 110, 100, 32, 111, 117, 116, 112, 117, 116, > 32, 116, 121, 112, 101, 32, 115, 101, 116, 32, 116, 111, 32, 39, 34, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 52, 44, 99, 114, 111, 112, > 44, 115, 101, 103, 109, 101, 110, 116, 97, 116, 105, 111, 110, 44, 99, 111, > 111, 114, 100, 105, 110, 97, 116, 101, 115, 125, 34, 39, 46, 92, 110, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 109, 105, 110, 95, 97, 114, 101, 97, > 61, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 105, 102, > 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, > 36, 50, 125, 44, 36, 50, 42, 119, 42, 104, 44, 36, 50, 41, 41, 41, > 125, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, 48, 48, > 37, 32, 45, 103, 116, 91, 45, 49, 93, 32, 36, 49, 32, 45, 97, 114, > 101, 97, 95, 102, 103, 91, 45, 49, 93, 32, 48, 44, 36, 51, 32, 45, > 103, 101, 91, 45, 49, 93, 32, 36, 109, 105, 110, 95, 97, 114, 101, 97, > 10, 45, 45, 97, 114, 101, 97, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 108, 116, 91, 45, 49, 93, 32, 36, 109, 105, 110, 95, 97, 114, 101, > 97, 32, 45, 111, 114, 91, 45, 50, 44, 45, 49, 93, 32, 45, 108, 97, > 98, 101, 108, 95, 102, 103, 91, 45, 49, 93, 32, 48, 44, 49, 10, 78, > 61, 123, 105, 77, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, > 77, 125, 10, 110, 61, 123, 49, 43, 36, 62, 125, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 32, 62, 32, 34, 36, 110, > 47, 36, 78, 32, 45, 118, 32, 45, 10, 45, 114, 112, 114, 111, 103, 114, > 101, 115, 115, 32, 123, 49, 48, 48, 42, 36, 110, 47, 36, 78, 125, 10, > 45, 45, 61, 61, 91, 49, 93, 32, 36, 110, 32, 45, 45, 42, 91, 48, > 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 105, 102, > 32, 123, 36, 52, 61, 61, 48, 125, 32, 99, 111, 111, 114, 100, 115, 61, > 64, 123, 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, > 100, 115, 91, 45, 49, 93, 92, 32, 97, 117, 116, 111, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 45, 122, 91, 48, 93, 32, 36, 99, 111, > 111, 114, 100, 115, 10, 45, 101, 108, 105, 102, 32, 123, 36, 52, 61, 61, > 49, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 10, 45, 101, 108, 115, 101, 32, 99, 111, 111, 114, 100, 115, 61, 64, 123, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, 100, 115, > 91, 45, 49, 93, 92, 32, 97, 117, 116, 111, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 40, 36, 99, 111, 111, 114, 100, 115, 41, 32, 45, 121, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, > 101, 10, 45, 114, 109, 91, 48, 44, 49, 93, 10, 45, 105, 102, 32, 123, > 36, 52, 61, 61, 50, 125, 32, 45, 97, 32, 120, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 117, 116, 111, 99, > 114, 111, 112, 95, 115, 101, 113, 32, 58, 32, 118, 97, 108, 117, 101, 49, > 44, 118, 97, 108, 117, 101, 50, 44, 46, 46, 46, 32, 124, 32, 97, 117, > 116, 111, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 117, 116, 111, > 99, 114, 111, 112, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 99, > 114, 111, 112, 32, 103, 101, 111, 109, 101, 116, 114, 121, 32, 111, 102, 32, > 116, 104, 101, 32, 108, 97, 115, 116, 32, 111, 110, 101, 32, 98, 121, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 101, 99, 116, 111, 114, > 45, 118, 97, 108, 117, 101, 100, 32, 105, 110, 116, 101, 110, 115, 105, 116, > 121, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 111, 114, 32, 98, > 121, 32, 97, 117, 116, 111, 109, 97, 116, 105, 99, 32, 103, 117, 101, 115, > 115, 105, 110, 103, 32, 116, 104, 101, 32, 99, 114, 111, 112, 112, 105, 110, > 103, 32, 118, 97, 108, 117, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 97, 117, 116, 111, 32, 109, 111, 100, 101, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 102, 105, 108, 108, 91, 45, 49, 93, 32, 48, 32, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, > 48, 37, 44, 51, 48, 37, 44, 50, 48, 37, 44, 48, 44, 49, 44, 49, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 115, 101, 113, 32, 48, > 10, 97, 117, 116, 111, 99, 114, 111, 112, 95, 115, 101, 113, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 97, 117, 116, 111, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 117, 116, 111, 45, 99, 114, > 111, 112, 32, 105, 109, 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, > 32, 99, 114, 111, 112, 32, 103, 101, 111, 109, 101, 116, 114, 121, 32, 111, > 102, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, 101, 32, 98, 121, 32, > 118, 101, 99, 116, 111, 114, 32, 39, 36, 42, 39, 46, 34, 10, 45, 105, > 102, 32, 123, 33, 64, 35, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, > 123, 64, 35, 61, 61, 49, 125, 32, 45, 95, 97, 117, 116, 111, 99, 114, > 111, 112, 36, 105, 115, 95, 97, 117, 116, 111, 32, 36, 123, 49, 45, 45, > 49, 125, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 99, 111, 111, 114, 100, 115, 61, 64, 123, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, 100, 115, > 91, 45, 49, 93, 92, 32, 36, 123, 49, 45, 45, 49, 125, 125, 10, 120, > 48, 61, 123, 97, 114, 103, 40, 49, 44, 36, 99, 111, 111, 114, 100, 115, > 41, 125, 32, 121, 48, 61, 123, 97, 114, 103, 40, 50, 44, 36, 99, 111, > 111, 114, 100, 115, 41, 125, 32, 122, 48, 61, 123, 97, 114, 103, 40, 51, > 44, 36, 99, 111, 111, 114, 100, 115, 41, 125, 10, 120, 49, 61, 123, 97, > 114, 103, 40, 52, 44, 36, 99, 111, 111, 114, 100, 115, 41, 125, 32, 121, > 49, 61, 123, 97, 114, 103, 40, 53, 44, 36, 99, 111, 111, 114, 100, 115, > 41, 125, 32, 122, 49, 61, 123, 97, 114, 103, 40, 54, 44, 36, 99, 111, > 111, 114, 100, 115, 41, 125, 10, 45, 105, 102, 32, 123, 36, 120, 48, 62, > 36, 120, 49, 34, 32, 124, 124, 32, 34, 36, 121, 48, 62, 36, 121, 49, > 34, 32, 124, 124, 32, 34, 36, 122, 48, 62, 36, 122, 49, 125, 32, 45, > 105, 91, 48, 45, 45, 50, 93, 32, 48, 32, 45, 114, 109, 91, 49, 45, > 45, 49, 58, 50, 93, 10, 45, 101, 108, 115, 101, 32, 45, 122, 32, 36, > 120, 48, 44, 36, 121, 48, 44, 36, 122, 48, 44, 36, 120, 49, 44, 36, > 121, 49, 44, 36, 122, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 58, 32, 123, 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, > 124, 32, 99, 48, 91, 37, 93, 32, 125, 44, 95, 123, 32, 91, 105, 109, > 97, 103, 101, 49, 93, 32, 124, 32, 99, 49, 91, 37, 93, 32, 125, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 75, > 101, 101, 112, 32, 111, 110, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 114, 105, 99, 104, 108, > 101, 116, 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, 105, 115, 32, 117, > 115, 101, 100, 32, 119, 104, 101, 110, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 97, 114, 101, 32, > 111, 117, 116, 32, 111, 102, 32, 114, 97, 110, 103, 101, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 49, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 50, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 111, 108, 117, 109, 110, 115, 32, 58, 32, > 123, 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, 124, 32, 120, 48, 91, > 37, 93, 32, 125, 44, 95, 123, 32, 91, 105, 109, 97, 103, 101, 49, 93, > 32, 124, 32, 120, 49, 91, 37, 93, 32, 125, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 75, 101, 101, 112, 32, 111, > 110, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, > 108, 117, 109, 110, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 105, 114, 105, 99, 104, 108, 101, 116, 32, 98, 111, 117, > 110, 100, 97, 114, 121, 32, 105, 115, 32, 117, 115, 101, 100, 32, 119, 104, > 101, 110, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, > 117, 109, 110, 115, 32, 97, 114, 101, 32, 111, 117, 116, 32, 111, 102, 32, > 114, 97, 110, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 99, 111, 108, > 117, 109, 110, 115, 32, 45, 50, 53, 37, 44, 53, 48, 37, 10, 35, 64, > 103, 109, 105, 99, 32, 122, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 99, 114, 111, 112, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 114, 111, 112, 32, 58, 32, 120, 48, 91, > 37, 93, 44, 120, 49, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, > 114, 121, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, 48, 91, 37, 93, > 44, 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, > 48, 91, 37, 93, 44, 122, 48, 91, 37, 93, 44, 120, 49, 91, 37, 93, > 44, 121, 49, 91, 37, 93, 44, 122, 49, 91, 37, 93, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, > 48, 91, 37, 93, 44, 122, 48, 91, 37, 93, 44, 99, 48, 91, 37, 93, > 44, 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 122, 49, 91, > 37, 93, 44, 99, 49, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, > 114, 121, 32, 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 111, > 112, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 114, 101, 103, 105, 111, 110, 32, 99, 111, 111, 114, 100, 105, 110, 97, > 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 122, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, > 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, > 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 110, > 111, 97, 114, 103, 115, 41, 32, 114, 117, 110, 115, 32, 105, 110, 116, 101, > 114, 97, 99, 116, 105, 118, 101, 32, 109, 111, 100, 101, 32, 40, 117, 115, > 101, 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, > 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, 112, 101, > 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 99, 114, 111, 112, 32, 45, 50, 51, 48, 44, 45, 50, 51, > 48, 44, 50, 56, 48, 44, 50, 56, 48, 44, 49, 32, 45, 99, 114, 111, > 112, 91, 48, 93, 32, 45, 50, 51, 48, 44, 45, 50, 51, 48, 44, 50, > 56, 48, 44, 50, 56, 48, 44, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 99, > 114, 111, 112, 32, 50, 53, 37, 44, 50, 53, 37, 44, 55, 53, 37, 44, > 55, 53, 37, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 97, 103, 111, > 110, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, 97, > 110, 115, 102, 111, 114, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 118, 101, 99, 116, 111, 114, 115, 32, 97, 115, 32, 100, 105, 97, 103, 111, > 110, 97, 108, 32, 109, 97, 116, 114, 105, 99, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 44, 49, 48, 44, 49, 44, > 49, 44, 39, 121, 39, 32, 45, 45, 100, 105, 97, 103, 111, 110, 97, 108, > 10, 100, 105, 97, 103, 111, 110, 97, 108, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 84, 114, 97, 110, 115, 102, 111, 114, 109, 32, 118, > 101, 99, 116, 111, 114, 36, 63, 32, 97, 115, 32, 100, 105, 97, 103, 111, > 110, 97, 108, 32, 109, 97, 116, 114, 105, 120, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 114, 91, 36, 62, 93, 32, 64, 123, 36, 62, 44, 104, 43, 49, 125, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 32, 45, 114, 91, 36, > 62, 93, 32, 64, 123, 36, 62, 44, 104, 125, 44, 49, 48, 48, 37, 44, > 49, 44, 49, 44, 45, 49, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, 101, 118, 97, 116, 101, > 32, 58, 32, 95, 100, 101, 112, 116, 104, 44, 95, 105, 115, 95, 112, 108, > 97, 105, 110, 44, 95, 105, 115, 95, 99, 111, 108, 111, 114, 101, 100, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 108, 101, 118, 97, 116, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 50, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 105, 110, 116, 111, 32, 51, 100, 32, 118, 111, 108, 117, > 109, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, > 101, 112, 116, 104, 61, 54, 52, 39, 44, 32, 39, 105, 115, 95, 112, 108, > 97, 105, 110, 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 99, > 111, 108, 111, 114, 101, 100, 61, 49, 39, 46, 10, 101, 108, 101, 118, 97, > 116, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, > 61, 54, 52, 125, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 50, 61, 49, 125, 44, 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 69, 108, 101, 118, 97, 116, 101, 32, 50, 100, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 105, 110, 116, 111, 32, 36, 49, 45, > 115, 108, 105, 99, 101, 115, 32, 118, 111, 108, 117, 109, 101, 40, 115, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 48, 48, 37, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, > 61, 64, 123, 48, 44, 110, 125, 10, 45, 45, 110, 111, 114, 109, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 36, 49, 44, 123, 105, 102, 40, > 36, 51, 44, 64, 123, 48, 44, 115, 125, 44, 49, 41, 125, 10, 109, 61, > 64, 123, 45, 50, 44, 109, 125, 32, 100, 61, 123, 64, 123, 45, 50, 44, > 77, 125, 45, 36, 109, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 49, 10, 45, 105, 102, 32, 36, 50, 32, 45, 45, 103, 101, 91, 49, 93, > 32, 123, 36, 109, 43, 36, 100, 42, 40, 36, 62, 43, 49, 41, 47, 36, > 49, 125, 10, 45, 101, 108, 115, 101, 32, 45, 45, 116, 50, 91, 49, 93, > 32, 123, 36, 109, 43, 36, 100, 42, 36, 62, 47, 36, 49, 125, 44, 123, > 36, 109, 43, 36, 100, 42, 40, 36, 62, 43, 49, 41, 47, 36, 49, 125, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, 45, 49, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 91, 45, 50, 93, 32, > 45, 105, 102, 32, 36, 51, 32, 45, 42, 91, 45, 49, 93, 32, 91, 48, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 48, 44, 48, 44, 36, 62, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 44, > 49, 93, 32, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 101, 120, 112, 97, 110, 100, 95, 120, 32, 58, 32, > 115, 105, 122, 101, 95, 120, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, > 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, > 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, > 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 69, 120, 112, 97, 110, 100, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, > 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 114, 100, 101, 114, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 101, 120, 112, 97, 110, 100, 95, > 120, 32, 51, 48, 44, 48, 10, 101, 120, 112, 97, 110, 100, 95, 120, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 50, 60, 61, 50, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 69, 120, 112, 97, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, > 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 32, > 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, > 32, 98, 111, 114, 100, 101, 114, 32, 99, 111, 110, 100, 105, 116, 105, 111, > 110, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 64, > 123, 36, 62, 44, 119, 43, 50, 42, 36, 49, 125, 44, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, 36, 50, 44, > 48, 46, 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 120, > 112, 97, 110, 100, 95, 120, 121, 32, 58, 32, 115, 105, 122, 101, 62, 61, > 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, > 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, > 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, > 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, > 112, 97, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, > 121, 45, 97, 120, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 98, 111, 114, 100, 101, 114, 61, 49, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 51, 48, 44, 48, > 10, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 50, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 120, 112, 97, 110, > 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 120, 121, 45, 97, 120, 101, 115, 32, 119, 105, 116, 104, > 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, 98, 111, 114, > 100, 101, 114, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, 36, > 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 64, 123, 36, 62, 44, > 119, 43, 50, 42, 36, 49, 125, 44, 64, 123, 36, 62, 44, 104, 43, 50, > 42, 36, 49, 125, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, > 44, 36, 50, 44, 48, 46, 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 101, 120, 112, 97, 110, 100, 95, 120, 121, 122, 32, 58, 32, 115, > 105, 122, 101, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, > 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 120, 112, 97, 110, 100, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 120, 121, 122, 45, 97, 120, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 98, 111, 114, 100, 101, 114, 61, 49, 39, > 46, 10, 101, 120, 112, 97, 110, 100, 95, 120, 121, 122, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, > 61, 50, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 120, 112, > 97, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, > 103, 32, 116, 104, 101, 32, 120, 121, 122, 45, 97, 120, 101, 115, 32, 119, > 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, > 98, 111, 114, 100, 101, 114, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, > 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 64, 123, > 36, 62, 44, 119, 43, 50, 42, 36, 49, 125, 44, 64, 123, 36, 62, 44, > 104, 43, 50, 42, 36, 49, 125, 44, 64, 123, 36, 62, 44, 100, 43, 50, > 42, 36, 49, 125, 44, 49, 48, 48, 37, 44, 48, 44, 36, 50, 44, 48, > 46, 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 120, 112, > 97, 110, 100, 95, 121, 32, 58, 32, 115, 105, 122, 101, 95, 121, 62, 61, > 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, > 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, > 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, > 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, > 112, 97, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, > 45, 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 98, 111, 114, 100, 101, 114, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 101, 120, 112, 97, 110, 100, 95, 121, 32, 51, 48, 44, 48, 10, 101, > 120, 112, 97, 110, 100, 95, 121, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 49, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 50, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 69, 120, 112, 97, 110, 100, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, > 32, 121, 45, 97, 120, 105, 115, 32, 119, 105, 116, 104, 32, 115, 105, 122, > 101, 32, 36, 49, 32, 97, 110, 100, 32, 98, 111, 114, 100, 101, 114, 32, > 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, 36, 50, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 114, 91, 36, 62, 93, 32, 49, 48, 48, 37, 44, 64, 123, 36, 62, > 44, 104, 43, 50, 42, 36, 49, 125, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 48, 44, 36, 50, 44, 48, 46, 53, 44, 48, 46, 53, 44, > 48, 46, 53, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 101, 120, 112, 97, 110, 100, 95, 122, 32, 58, > 32, 115, 105, 122, 101, 95, 122, 62, 61, 48, 44, 95, 98, 111, 117, 110, > 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, > 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, > 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 69, 120, 112, 97, 110, 100, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 114, 100, 101, 114, 61, > 49, 39, 46, 10, 101, 120, 112, 97, 110, 100, 95, 122, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, > 61, 50, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 120, 112, > 97, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, > 103, 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 32, 119, 105, 116, > 104, 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, 98, 111, > 114, 100, 101, 114, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, > 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 64, 123, 36, 62, 44, 100, 43, 50, 42, 36, > 49, 125, 44, 49, 48, 48, 37, 44, 48, 44, 36, 50, 44, 48, 46, 53, > 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 111, 110, 116, 97, > 103, 101, 32, 58, 32, 34, 95, 108, 97, 121, 111, 117, 116, 95, 99, 111, > 100, 101, 34, 44, 95, 109, 111, 110, 116, 97, 103, 101, 95, 109, 111, 100, > 101, 61, 123, 32, 48, 60, 61, 97, 108, 105, 103, 110, 109, 101, 110, 116, > 60, 61, 49, 32, 124, 32, 50, 60, 61, 115, 99, 97, 108, 101, 43, 50, > 60, 61, 51, 32, 125, 44, 95, 111, 117, 116, 112, 117, 116, 95, 109, 111, > 100, 101, 61, 123, 32, 48, 61, 115, 105, 110, 103, 108, 101, 32, 108, 97, > 121, 101, 114, 32, 124, 32, 49, 61, 109, 117, 108, 116, 105, 112, 108, 101, > 32, 108, 97, 121, 101, 114, 115, 32, 125, 44, 34, 95, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 95, 99, 111, 109, 109, 97, 110, 100, 34, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, > 97, 32, 115, 105, 110, 103, 108, 101, 32, 105, 109, 97, 103, 101, 32, 109, > 111, 110, 116, 97, 103, 101, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 108, 97, 121, 111, 117, 116, 32, 99, 111, 100, 101, 32, > 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, 39, 72, 39, > 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, 101, 32, 97, 108, 108, > 32, 105, 109, 97, 103, 101, 115, 32, 104, 111, 114, 105, 122, 111, 110, 116, > 97, 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, > 32, 39, 86, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, 101, > 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 118, 101, 114, 116, > 105, 99, 97, 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 45, 32, 39, 65, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, > 108, 101, 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, > 32, 97, 110, 32, 104, 111, 114, 105, 122, 111, 110, 116, 97, 108, 32, 97, > 114, 114, 97, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, > 32, 39, 66, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, 101, > 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 97, > 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 97, 114, 114, 97, 121, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, 39, 72, 97, 58, > 98, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, 101, 32, 116, > 119, 111, 32, 98, 108, 111, 99, 107, 115, 32, 39, 97, 39, 32, 97, 110, > 100, 32, 39, 98, 39, 32, 104, 111, 114, 105, 122, 111, 110, 116, 97, 108, > 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, 39, > 86, 97, 58, 98, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, > 101, 32, 116, 119, 111, 32, 98, 108, 111, 99, 107, 115, 32, 39, 97, 39, > 32, 97, 110, 100, 32, 39, 98, 39, 32, 118, 101, 114, 116, 105, 99, 97, > 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, > 39, 82, 97, 39, 32, 116, 111, 32, 114, 111, 116, 97, 116, 101, 32, 97, > 32, 98, 108, 111, 99, 107, 32, 39, 97, 39, 32, 98, 121, 32, 57, 48, > 32, 100, 101, 103, 46, 32, 40, 39, 82, 82, 97, 39, 32, 102, 111, 114, > 32, 49, 56, 48, 32, 100, 101, 103, 46, 32, 97, 110, 100, 32, 39, 82, > 82, 82, 97, 39, 32, 102, 111, 114, 32, 50, 55, 48, 32, 100, 101, 103, > 46, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, 39, > 77, 97, 39, 32, 116, 111, 32, 109, 105, 114, 114, 111, 114, 32, 97, 32, > 98, 108, 111, 99, 107, 32, 39, 97, 39, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 88, 45, 97, 120, 105, 115, 32, 40, 39, 77, 82, 82, > 97, 39, 32, 102, 111, 114, 32, 116, 104, 101, 32, 89, 45, 97, 120, 105, > 115, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 32, 98, > 108, 111, 99, 107, 32, 39, 97, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 97, 110, 32, 105, 109, 97, 103, 101, 32, 105, 110, 100, 105, 99, 101, 32, > 40, 116, 114, 101, 97, 116, 101, 100, 32, 112, 101, 114, 105, 111, 100, 105, > 99, 97, 108, 108, 121, 41, 32, 111, 114, 32, 97, 32, 110, 101, 115, 116, > 101, 100, 32, 108, 97, 121, 111, 117, 116, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 32, 105, 116, 115, 101, 108, 102, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 70, 111, 114, 32, 101, 120, 97, 109, 112, 108, > 101, 44, 32, 108, 97, 121, 111, 117, 116, 32, 99, 111, 100, 101, 32, 39, > 72, 48, 58, 86, 49, 58, 50, 39, 32, 99, 114, 101, 97, 116, 101, 115, > 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 119, 104, 101, 114, 101, 32, > 105, 109, 97, 103, 101, 32, 91, 48, 93, 32, 105, 115, 32, 111, 110, 32, > 116, 104, 101, 32, 108, 101, 102, 116, 44, 32, 97, 110, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 91, 49, 93, 32, 97, 110, 100, 32, 91, 50, 93, > 32, 118, 101, 114, 116, 105, 99, 97, 108, 108, 121, 32, 112, 97, 99, 107, > 101, 100, 32, 111, 110, 32, 116, 104, 101, 32, 114, 105, 103, 104, 116, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 108, 97, 121, 111, 117, > 116, 95, 99, 111, 100, 101, 61, 65, 39, 44, 32, 39, 109, 111, 110, 116, > 97, 103, 101, 95, 109, 111, 100, 101, 61, 50, 39, 44, 32, 111, 117, 116, > 112, 117, 116, 95, 109, 111, 100, 101, 61, 39, 48, 39, 32, 97, 110, 100, > 32, 39, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 95, 99, 111, 109, > 109, 97, 110, 100, 61, 34, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 53, 49, 50, 32, > 45, 45, 112, 108, 97, 115, 109, 97, 91, 48, 93, 32, 45, 99, 117, 112, > 105, 100, 32, 50, 53, 54, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 48, 44, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 32, 51, > 44, 51, 44, 48, 32, 45, 102, 114, 97, 109, 101, 32, 49, 48, 44, 49, > 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 45, > 109, 111, 110, 116, 97, 103, 101, 32, 65, 32, 45, 45, 109, 111, 110, 116, > 97, 103, 101, 91, 94, 45, 49, 93, 32, 72, 49, 58, 86, 48, 58, 86, > 72, 50, 58, 49, 72, 48, 58, 51, 10, 109, 111, 110, 116, 97, 103, 101, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 118, 97, 108, > 40, 36, 123, 50, 61, 50, 125, 41, 32, 38, 38, 32, 36, 50, 62, 61, > 48, 32, 38, 38, 32, 36, 50, 60, 61, 51, 34, 32, 45, 115, 107, 105, > 112, 32, 34, 36, 123, 49, 61, 65, 125, 34, 44, 36, 123, 51, 61, 48, > 125, 44, 34, 36, 123, 52, 61, 125, 34, 10, 45, 118, 32, 45, 10, 45, > 105, 102, 32, 123, 36, 50, 60, 61, 49, 125, 32, 45, 118, 32, 43, 32, > 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 67, 114, 101, 97, 116, 101, > 32, 97, 108, 105, 103, 110, 101, 100, 32, 109, 111, 110, 116, 97, 103, 101, > 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 108, 97, 121, 111, 117, 116, 32, 99, 111, 100, 101, 32, > 39, 36, 49, 39, 32, 97, 110, 100, 32, 97, 108, 105, 103, 110, 109, 101, > 110, 116, 32, 36, 50, 46, 34, 10, 45, 101, 108, 115, 101, 32, 45, 118, > 32, 43, 32, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 67, 114, 101, > 97, 116, 101, 32, 115, 99, 97, 108, 101, 100, 32, 109, 111, 110, 116, 97, > 103, 101, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 108, 97, 121, 111, 117, 116, 32, 99, 111, 100, > 101, 32, 39, 36, 49, 39, 32, 97, 110, 100, 32, 115, 99, 97, 108, 101, > 32, 34, 123, 36, 50, 45, 50, 125, 34, 46, 34, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 45, 10, 78, 61, 64, 35, 10, 45, 108, 91, > 93, 32, 95, 115, 99, 111, 100, 101, 61, 34, 36, 49, 34, 32, 95, 109, > 111, 100, 101, 61, 36, 50, 10, 45, 105, 102, 32, 123, 123, 34, 36, 49, > 34, 39, 61, 61, 39, 72, 125, 124, 124, 123, 34, 36, 49, 34, 39, 61, > 61, 39, 104, 125, 125, 32, 45, 105, 102, 32, 123, 36, 78, 62, 49, 125, > 32, 123, 36, 78, 45, 49, 125, 44, 49, 44, 49, 44, 49, 44, 45, 49, > 32, 36, 78, 44, 49, 44, 49, 44, 49, 44, 120, 32, 45, 97, 32, 120, > 32, 45, 121, 32, 45, 101, 108, 115, 101, 32, 45, 118, 32, 43, 32, 45, > 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 108, 105, 102, 32, 123, 123, 34, 36, 49, 34, 39, 61, 61, 39, 86, 125, > 124, 124, 123, 34, 36, 49, 34, 39, 61, 61, 39, 118, 125, 125, 32, 45, > 105, 102, 32, 123, 36, 78, 62, 49, 125, 32, 123, 36, 78, 45, 49, 125, > 44, 49, 44, 49, 44, 49, 44, 45, 50, 32, 36, 78, 44, 49, 44, 49, > 44, 49, 44, 120, 32, 45, 97, 32, 120, 32, 45, 121, 32, 45, 101, 108, > 115, 101, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 123, 34, > 36, 49, 34, 39, 61, 61, 39, 65, 125, 124, 124, 123, 34, 36, 49, 34, > 39, 61, 61, 39, 97, 125, 124, 124, 123, 34, 36, 49, 34, 39, 61, 61, > 39, 66, 125, 124, 124, 123, 34, 36, 49, 34, 39, 61, 61, 39, 98, 125, > 125, 10, 45, 105, 102, 32, 123, 36, 78, 60, 50, 125, 32, 45, 118, 32, > 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 110, 114, 61, 123, 114, 111, 117, 110, 100, 40, 115, 113, 114, 116, 40, > 36, 78, 41, 41, 125, 32, 110, 99, 61, 123, 114, 111, 117, 110, 100, 40, > 36, 78, 47, 36, 110, 114, 44, 49, 44, 49, 41, 125, 10, 45, 105, 102, > 32, 123, 123, 34, 36, 49, 34, 39, 61, 61, 39, 66, 125, 124, 124, 123, > 34, 36, 49, 34, 39, 61, 61, 39, 98, 125, 125, 32, 110, 61, 36, 110, > 114, 32, 110, 114, 61, 36, 110, 99, 32, 110, 99, 61, 36, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 36, 78, 44, 49, 44, 49, 44, 49, 44, 120, > 32, 45, 115, 32, 120, 44, 45, 123, 114, 111, 117, 110, 100, 40, 119, 47, > 36, 110, 114, 44, 49, 44, 49, 41, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 105, 102, 32, > 123, 119, 62, 49, 125, 32, 45, 105, 91, 48, 93, 32, 123, 119, 45, 49, > 125, 44, 49, 44, 49, 44, 49, 44, 45, 49, 32, 45, 97, 32, 120, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 97, 32, 120, 10, 45, 105, 102, 32, 123, 36, 110, 114, > 62, 49, 125, 32, 45, 105, 91, 48, 93, 32, 123, 36, 110, 114, 45, 49, > 125, 44, 49, 44, 49, 44, 49, 44, 45, 50, 32, 45, 97, 32, 120, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 121, 10, 45, 101, 108, 115, 101, 10, > 40, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, 45, 102, 32, 39, 105, > 102, 40, 105, 61, 61, 55, 50, 124, 124, 105, 61, 61, 49, 48, 52, 44, > 45, 49, 44, 105, 102, 40, 105, 61, 61, 56, 54, 124, 124, 105, 61, 61, > 49, 49, 56, 44, 45, 50, 44, 105, 102, 40, 105, 61, 61, 56, 50, 124, > 124, 105, 61, 61, 49, 49, 52, 44, 45, 51, 44, 105, 102, 40, 105, 61, > 61, 55, 55, 124, 124, 105, 61, 61, 49, 48, 57, 44, 45, 52, 44, 105, > 102, 40, 105, 62, 61, 52, 56, 38, 38, 105, 60, 61, 53, 55, 44, 105, > 45, 52, 56, 44, 45, 53, 41, 41, 41, 41, 41, 39, 10, 45, 115, 32, > 43, 44, 45, 49, 32, 45, 115, 32, 43, 44, 45, 50, 32, 45, 115, 32, > 43, 44, 45, 51, 32, 45, 115, 32, 43, 44, 45, 52, 32, 45, 115, 32, > 43, 44, 45, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 105, 102, 32, 123, 105, 109, 62, 61, > 48, 125, 32, 45, 45, 43, 91, 45, 49, 93, 32, 52, 56, 32, 45, 61, > 91, 45, 50, 93, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 114, 111, 119, 115, 32, 48, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 97, 32, 121, 32, 45, 100, 105, 115, 99, 97, 114, 100, 32, 45, 53, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 102, 32, 39, 105, 102, 40, 105, > 60, 48, 44, 105, 44, 105, 37, 36, 78, 41, 39, 10, 45, 101, 110, 100, > 108, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 36, 78, 125, 32, 45, > 114, 109, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 91, 94, 45, 49, 93, 32, > 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, 99, 61, > 123, 105, 91, 36, 62, 93, 125, 32, 45, 105, 102, 32, 123, 36, 99, 62, > 61, 48, 125, 32, 45, 105, 102, 32, 64, 123, 36, 99, 44, 110, 125, 32, > 45, 105, 91, 45, 50, 93, 32, 91, 36, 99, 93, 32, 105, 61, 123, 64, > 35, 45, 50, 125, 32, 45, 61, 91, 45, 49, 93, 32, 36, 105, 44, 48, > 44, 36, 62, 32, 114, 101, 102, 36, 105, 61, 36, 99, 32, 45, 101, 108, > 115, 101, 32, 45, 110, 109, 91, 36, 99, 93, 32, 49, 32, 114, 101, 102, > 36, 99, 61, 36, 99, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 95, 99, 111, 100, 101, 61, > 64, 45, 49, 32, 95, 108, 99, 111, 100, 101, 61, 123, 110, 97, 114, 103, > 40, 36, 95, 99, 111, 100, 101, 41, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 78, 61, 64, 35, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 78, 32, 40, 36, 62, 44, 48, 44, 48, 44, 64, 123, 36, 62, 44, 119, > 125, 44, 64, 123, 36, 62, 44, 104, 125, 44, 48, 44, 48, 44, 48, 41, > 32, 45, 100, 111, 110, 101, 10, 45, 108, 91, 36, 78, 45, 45, 49, 93, > 32, 95, 112, 61, 49, 32, 45, 107, 91, 64, 123, 45, 95, 109, 111, 110, > 116, 97, 103, 101, 125, 93, 32, 119, 61, 123, 105, 91, 51, 93, 125, 32, > 104, 61, 123, 105, 91, 52, 93, 125, 32, 45, 102, 32, 39, 105, 102, 40, > 105, 40, 48, 44, 121, 41, 60, 48, 44, 45, 49, 44, 105, 41, 39, 32, > 45, 100, 105, 115, 99, 97, 114, 100, 32, 45, 49, 32, 45, 114, 32, 56, > 44, 123, 104, 47, 56, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 101, > 110, 100, 108, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, > 52, 34, 41, 125, 32, 45, 109, 32, 34, 95, 95, 109, 111, 110, 116, 97, > 103, 101, 32, 58, 32, 36, 52, 32, 45, 107, 91, 48, 93, 34, 10, 45, > 101, 108, 115, 101, 10, 45, 109, 32, 34, 95, 95, 109, 111, 110, 116, 97, > 103, 101, 32, 58, 32, 45, 105, 102, 32, 123, 36, 34, 34, 55, 37, 50, > 125, 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 105, 102, 32, 123, 36, 34, 34, 56, 37, 50, 125, 32, > 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 123, 57, 48, 42, 36, 34, 34, > 54, 125, 32, 45, 114, 32, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, > 110, 100, 40, 36, 34, 34, 52, 44, 49, 44, 49, 41, 41, 125, 44, 123, > 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 36, 34, 34, 53, > 44, 49, 44, 49, 41, 41, 125, 44, 49, 44, 49, 48, 48, 37, 44, 51, > 34, 10, 45, 101, 110, 100, 105, 102, 10, 115, 61, 64, 123, 45, 109, 97, > 120, 95, 115, 91, 94, 45, 49, 93, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 104, 125, 10, 105, 61, 123, 105, 40, 48, 44, 36, 62, 41, > 125, 32, 120, 105, 61, 123, 105, 40, 49, 44, 36, 62, 41, 125, 32, 121, > 105, 61, 123, 105, 40, 50, 44, 36, 62, 41, 125, 32, 119, 105, 61, 123, > 105, 40, 51, 44, 36, 62, 41, 125, 32, 104, 105, 61, 123, 105, 40, 52, > 44, 36, 62, 41, 125, 32, 97, 105, 61, 123, 105, 40, 53, 44, 36, 62, > 41, 125, 32, 109, 120, 105, 61, 123, 105, 40, 54, 44, 36, 62, 41, 125, > 32, 109, 121, 105, 61, 123, 105, 40, 55, 44, 36, 62, 41, 125, 10, 45, > 105, 102, 32, 123, 36, 51, 124, 124, 33, 36, 62, 125, 32, 45, 105, 91, > 45, 50, 93, 32, 36, 119, 44, 36, 104, 44, 49, 44, 36, 115, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 95, 95, 109, 111, 110, 116, 97, 103, 101, > 91, 36, 105, 93, 32, 36, 123, 114, 101, 102, 36, 105, 125, 44, 36, 120, > 105, 44, 36, 121, 105, 44, 123, 109, 97, 120, 40, 49, 44, 36, 119, 105, > 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 36, 104, 105, 41, 125, 44, > 36, 97, 105, 44, 36, 109, 120, 105, 44, 36, 109, 121, 105, 10, 45, 106, > 91, 45, 50, 93, 32, 91, 36, 105, 93, 44, 36, 120, 105, 44, 36, 121, > 105, 10, 45, 100, 111, 110, 101, 10, 45, 117, 110, 99, 111, 109, 109, 97, > 110, 100, 32, 95, 95, 109, 111, 110, 116, 97, 103, 101, 10, 45, 114, 109, > 91, 48, 45, 123, 36, 78, 45, 49, 125, 44, 45, 49, 93, 32, 45, 110, > 109, 32, 34, 91, 77, 111, 110, 116, 97, 103, 101, 32, 39, 36, 49, 39, > 93, 34, 10, 45, 118, 32, 43, 10, 95, 109, 111, 110, 116, 97, 103, 101, > 32, 58, 10, 45, 105, 102, 32, 123, 36, 95, 112, 62, 36, 95, 108, 99, > 111, 100, 101, 125, 32, 45, 101, 114, 114, 111, 114, 32, 34, 67, 111, 109, > 109, 97, 110, 100, 32, 39, 45, 109, 111, 110, 116, 97, 103, 101, 39, 58, > 32, 73, 110, 99, 111, 109, 112, 108, 101, 116, 101, 32, 108, 97, 121, 111, > 117, 116, 32, 99, 111, 100, 101, 32, 39, 34, 36, 95, 115, 99, 111, 100, > 101, 34, 39, 46, 34, 32, 45, 101, 110, 100, 105, 102, 10, 99, 61, 123, > 97, 114, 103, 40, 36, 95, 112, 44, 36, 95, 99, 111, 100, 101, 41, 125, > 10, 45, 105, 102, 32, 123, 36, 99, 62, 61, 48, 125, 32, 95, 112, 61, > 123, 36, 95, 112, 43, 49, 125, 32, 45, 117, 32, 36, 99, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 99, 61, 61, 45, 52, 125, 10, 95, 112, 61, > 123, 36, 95, 112, 43, 49, 125, 32, 108, 61, 64, 123, 45, 95, 109, 111, > 110, 116, 97, 103, 101, 125, 32, 45, 102, 91, 36, 108, 93, 32, 39, 97, > 61, 105, 40, 53, 44, 121, 41, 37, 50, 59, 105, 102, 40, 40, 120, 61, > 61, 55, 38, 38, 97, 41, 124, 124, 40, 120, 61, 61, 54, 38, 38, 33, > 97, 41, 44, 33, 105, 44, 105, 102, 40, 120, 61, 61, 49, 44, 105, 40, > 51, 44, 48, 41, 45, 105, 40, 51, 44, 121, 41, 45, 105, 44, 105, 41, > 41, 39, 32, 45, 117, 32, 36, 108, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 99, 61, 61, 45, 51, 125, 10, 95, 112, 61, 123, 36, 95, 112, 43, > 49, 125, 32, 108, 61, 64, 123, 45, 95, 109, 111, 110, 116, 97, 103, 101, > 125, 32, 45, 108, 91, 36, 108, 93, 32, 45, 115, 32, 120, 32, 45, 43, > 91, 50, 93, 32, 91, 52, 93, 32, 45, 114, 118, 91, 49, 44, 50, 93, > 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 43, 91, 49, 93, 32, > 64, 123, 52, 44, 48, 125, 32, 45, 114, 118, 91, 51, 44, 52, 93, 32, > 45, 43, 91, 53, 93, 32, 49, 32, 45, 97, 32, 120, 32, 45, 101, 110, > 100, 108, 32, 45, 117, 32, 36, 108, 10, 45, 101, 108, 115, 101, 10, 95, > 112, 61, 123, 36, 95, 112, 43, 49, 125, 10, 108, 61, 64, 123, 45, 95, > 109, 111, 110, 116, 97, 103, 101, 125, 32, 108, 119, 61, 64, 123, 36, 108, > 44, 51, 125, 32, 108, 104, 61, 64, 123, 36, 108, 44, 52, 125, 10, 114, > 61, 64, 123, 45, 95, 109, 111, 110, 116, 97, 103, 101, 125, 32, 114, 119, > 61, 64, 123, 36, 114, 44, 51, 125, 32, 114, 104, 61, 64, 123, 36, 114, > 44, 52, 125, 10, 45, 105, 102, 32, 123, 36, 99, 61, 61, 45, 49, 125, > 10, 45, 105, 102, 32, 123, 36, 95, 109, 111, 100, 101, 60, 50, 125, 10, > 104, 61, 123, 109, 97, 120, 40, 36, 108, 104, 44, 36, 114, 104, 41, 125, > 32, 45, 43, 91, 36, 108, 93, 32, 39, 48, 44, 48, 44, 123, 40, 36, > 104, 45, 36, 108, 104, 41, 42, 109, 105, 110, 40, 49, 44, 36, 95, 109, > 111, 100, 101, 41, 125, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 39, > 32, 45, 43, 91, 36, 114, 93, 32, 39, 48, 44, 36, 108, 119, 44, 123, > 40, 36, 104, 45, 36, 114, 104, 41, 42, 109, 105, 110, 40, 49, 44, 36, > 95, 109, 111, 100, 101, 41, 125, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 39, 10, 45, 101, 108, 115, 101, 10, 104, 61, 123, 40, 36, 95, 109, > 111, 100, 101, 45, 50, 41, 42, 109, 97, 120, 40, 36, 108, 104, 44, 36, > 114, 104, 41, 43, 40, 51, 45, 36, 95, 109, 111, 100, 101, 41, 42, 109, > 105, 110, 40, 36, 108, 104, 44, 36, 114, 104, 41, 125, 10, 108, 102, 61, > 123, 36, 104, 47, 36, 108, 104, 125, 32, 114, 102, 61, 123, 36, 104, 47, > 36, 114, 104, 125, 32, 108, 119, 61, 123, 36, 108, 119, 42, 36, 108, 102, > 125, 32, 114, 119, 61, 123, 36, 114, 119, 42, 36, 114, 102, 125, 10, 45, > 42, 91, 36, 108, 93, 32, 39, 49, 44, 36, 108, 102, 44, 36, 108, 102, > 44, 36, 108, 102, 44, 36, 108, 102, 44, 49, 44, 49, 44, 49, 39, 32, > 45, 42, 91, 36, 114, 93, 32, 39, 49, 44, 36, 114, 102, 44, 36, 114, > 102, 44, 36, 114, 102, 44, 36, 114, 102, 44, 49, 44, 49, 44, 49, 39, > 32, 45, 43, 91, 36, 114, 93, 32, 39, 48, 44, 36, 108, 119, 44, 48, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 39, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 91, 36, 108, 93, 32, 40, 45, 49, 44, 48, 44, > 48, 44, 123, 36, 108, 119, 43, 36, 114, 119, 125, 44, 36, 104, 44, 48, > 44, 48, 44, 48, 41, 32, 45, 97, 91, 36, 108, 44, 123, 36, 108, 43, > 49, 125, 93, 32, 121, 32, 45, 97, 91, 36, 108, 93, 32, 91, 36, 114, > 93, 44, 121, 32, 45, 114, 91, 36, 114, 93, 32, 49, 44, 49, 44, 49, > 44, 49, 44, 48, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, 123, > 36, 95, 109, 111, 100, 101, 60, 50, 125, 10, 119, 61, 123, 109, 97, 120, > 40, 36, 108, 119, 44, 36, 114, 119, 41, 125, 32, 45, 43, 91, 36, 108, > 93, 32, 39, 48, 44, 123, 40, 36, 119, 45, 36, 108, 119, 41, 42, 109, > 105, 110, 40, 49, 44, 36, 95, 109, 111, 100, 101, 41, 125, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 39, 32, 45, 43, 91, 36, 114, > 93, 32, 39, 48, 44, 123, 40, 36, 119, 45, 36, 114, 119, 41, 42, 109, > 105, 110, 40, 49, 44, 36, 95, 109, 111, 100, 101, 41, 125, 44, 36, 108, > 104, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 39, 10, 45, 101, 108, > 115, 101, 10, 119, 61, 123, 40, 36, 95, 109, 111, 100, 101, 45, 50, 41, > 42, 109, 97, 120, 40, 36, 108, 119, 44, 36, 114, 119, 41, 43, 40, 51, > 45, 36, 95, 109, 111, 100, 101, 41, 42, 109, 105, 110, 40, 36, 108, 119, > 44, 36, 114, 119, 41, 125, 10, 108, 102, 61, 123, 36, 119, 47, 36, 108, > 119, 125, 32, 114, 102, 61, 123, 36, 119, 47, 36, 114, 119, 125, 32, 108, > 104, 61, 123, 36, 108, 104, 42, 36, 108, 102, 125, 32, 114, 104, 61, 123, > 36, 114, 104, 42, 36, 114, 102, 125, 10, 45, 42, 91, 36, 108, 93, 32, > 39, 49, 44, 36, 108, 102, 44, 36, 108, 102, 44, 36, 108, 102, 44, 36, > 108, 102, 44, 49, 44, 49, 44, 49, 39, 32, 45, 42, 91, 36, 114, 93, > 32, 39, 49, 44, 36, 114, 102, 44, 36, 114, 102, 44, 36, 114, 102, 44, > 36, 114, 102, 44, 49, 44, 49, 44, 49, 39, 32, 45, 43, 91, 36, 114, > 93, 32, 39, 48, 44, 48, 44, 36, 108, 104, 44, 48, 44, 48, 44, 48, > 44, 48, 44, 48, 39, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, > 36, 108, 93, 32, 40, 45, 49, 44, 48, 44, 48, 44, 36, 119, 44, 123, > 36, 108, 104, 43, 36, 114, 104, 125, 44, 48, 44, 48, 44, 48, 41, 32, > 45, 97, 91, 36, 108, 44, 123, 36, 108, 43, 49, 125, 93, 32, 121, 32, > 45, 97, 91, 36, 108, 93, 32, 91, 36, 114, 93, 44, 121, 32, 45, 114, > 91, 36, 114, 93, 32, 49, 44, 49, 44, 49, 44, 49, 44, 48, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 117, 32, 36, 108, 10, 45, 101, 110, 100, > 105, 102, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 114, 114, 111, 114, > 32, 58, 32, 123, 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 125, > 46, 46, 123, 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 125, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 77, > 105, 114, 114, 111, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 97, 120, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 48, 93, 32, 99, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 45, 109, 105, 114, 114, > 111, 114, 32, 121, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, > 101, 115, 32, 50, 44, 50, 10, 35, 64, 103, 109, 105, 99, 32, 112, 101, > 114, 109, 117, 116, 101, 32, 58, 32, 112, 101, 114, 109, 117, 116, 97, 116, > 105, 111, 110, 95, 115, 116, 114, 105, 110, 103, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 101, 114, 109, 117, 116, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 32, 97, 120, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 112, 101, 114, 109, 117, 116, 97, 116, 105, 111, 110, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 101, 114, 109, 117, 116, > 97, 116, 105, 111, 110, 39, 32, 105, 115, 32, 97, 32, 99, 111, 109, 98, > 105, 110, 97, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, 99, > 104, 97, 114, 97, 99, 116, 101, 114, 32, 115, 101, 116, 32, 123, 120, 124, > 121, 124, 122, 124, 99, 125, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 101, 46, 103, 46, 32, 39, 120, 121, 99, 122, 39, 44, 32, 39, 99, > 120, 121, 122, 39, 44, 32, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 112, > 101, 114, 109, 117, 116, 101, 32, 121, 120, 122, 99, 10, 35, 64, 103, 109, > 105, 99, 32, 114, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 114, 101, 115, 105, 122, 101, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 101, 115, 105, 122, 101, 32, 58, 32, 91, > 105, 109, 97, 103, 101, 93, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, > 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, 122, 44, 95, 97, 99, 32, > 58, 32, 123, 91, 105, 109, 97, 103, 101, 95, 119, 93, 32, 124, 32, 119, > 105, 100, 116, 104, 62, 48, 91, 37, 93, 125, 44, 95, 123, 91, 105, 109, > 97, 103, 101, 95, 104, 93, 32, 124, 32, 104, 101, 105, 103, 104, 116, 62, > 48, 91, 37, 93, 125, 44, 95, 123, 91, 105, 109, 97, 103, 101, 95, 100, > 93, 32, 124, 32, 100, 101, 112, 116, 104, 62, 48, 91, 37, 93, 125, 44, > 95, 123, 91, 105, 109, 97, 103, 101, 95, 115, 93, 32, 124, 32, 115, 112, > 101, 99, 116, 114, 117, 109, 62, 48, 91, 37, 93, 125, 44, 95, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, > 110, 100, 97, 114, 121, 44, 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, > 122, 44, 95, 97, 99, 32, 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 114, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, 110, 111, 110, > 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, 110, 116, 101, 110, > 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, > 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, 97, 118, 101, 114, > 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, 97, 114, 32, 124, > 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, 98, 105, 99, 117, > 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, 122, 111, 115, 32, > 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, 105, 102, 102, 101, > 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, 115, 44, 32, 97, > 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, > 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, 58, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, > 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, 32, 52, 32, 125, > 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 105, 115, > 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 48, 39, > 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, > 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, > 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, > 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, > 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 117, > 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, 99, 39, 32, 115, > 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, 109, 101, 110, 116, > 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, 101, 97, 99, 104, > 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 32, 111, 114, 32, 52, > 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, > 116, 111, 32, 39, 48, 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, > 116, 44, 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, > 101, 100, 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, > 93, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 110, 111, > 97, 114, 103, 115, 41, 32, 114, 117, 110, 115, 32, 105, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 32, 109, 111, 100, 101, 32, 40, 117, 115, 101, > 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, > 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, 112, 101, 110, > 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 49, 39, 44, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 97, 120, 61, 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 40, 48, 44, 49, 59, 48, 44, 49, > 94, 48, 44, 48, 59, 49, 44, 49, 94, 49, 44, 49, 59, 49, 44, 49, > 41, 32, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 51, 32, 45, 109, 117, 108, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 115, 105, 122, 101, > 91, 45, 49, 93, 32, 50, 53, 54, 44, 49, 50, 56, 44, 49, 44, 51, > 44, 50, 32, 45, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, > 49, 50, 48, 37, 44, 49, 50, 48, 37, 44, 49, 44, 51, 44, 48, 44, > 49, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 45, 114, 101, 115, 105, > 122, 101, 91, 45, 49, 93, 32, 49, 50, 48, 37, 44, 49, 50, 48, 37, > 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 50, 44, 48, 46, 50, > 32, 45, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, 91, 48, > 93, 44, 91, 48, 93, 44, 49, 44, 51, 44, 52, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 111, 119, 50, 32, 58, 32, 95, 105, 110, 116, 101, 114, > 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, > 114, 121, 44, 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, 122, 44, 95, > 97, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, > 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 115, 111, 32, 116, 104, 97, 116, 32, 101, 97, 99, 104, 32, > 100, 105, 109, 101, 110, 115, 105, 111, 110, 32, 105, 115, 32, 97, 32, 112, > 111, 119, 101, 114, 32, 111, 102, 32, 50, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, > 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, > 110, 111, 110, 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, 110, > 116, 101, 110, 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, 124, > 32, 49, 61, 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, 97, > 118, 101, 114, 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, 97, > 114, 32, 124, 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, 98, > 105, 99, 117, 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, 122, > 111, 115, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, 105, > 102, 102, 101, 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, 115, > 44, 32, 97, 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, > 104, 101, 32, 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, 114, > 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, 58, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 123, 32, 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, 32, > 52, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 105, 115, 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 48, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, > 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 123, 32, 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, 44, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, > 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, 99, > 39, 32, 115, 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, 109, > 101, 110, 116, 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, 101, > 97, 99, 104, 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, 116, 111, > 32, 39, 48, 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, 44, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, 101, 100, > 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, 93, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 97, 120, 61, 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 114, 101, 115, 105, 122, 101, 95, 112, 111, > 119, 50, 91, 45, 49, 93, 32, 48, 10, 114, 101, 115, 105, 122, 101, 95, > 112, 111, 119, 50, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, > 115, 105, 110, 116, 40, 36, 123, 49, 61, 48, 125, 41, 32, 38, 38, 32, > 36, 49, 62, 61, 45, 49, 32, 38, 38, 32, 36, 49, 60, 61, 54, 34, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, > 51, 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, > 48, 125, 44, 36, 123, 54, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 82, 101, 115, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 115, 111, 32, 116, 104, 97, 116, 32, 101, 97, 99, 104, 32, 100, > 105, 109, 101, 110, 115, 105, 111, 110, 32, 105, 115, 32, 97, 32, 112, 111, > 119, 101, 114, 32, 111, 102, 32, 50, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 114, 91, 36, 62, > 93, 32, 64, 123, 36, 62, 44, 50, 94, 40, 114, 111, 117, 110, 100, 40, > 108, 111, 103, 50, 40, 119, 41, 44, 49, 44, 49, 41, 41, 125, 44, 64, > 123, 36, 62, 44, 50, 94, 40, 114, 111, 117, 110, 100, 40, 108, 111, 103, > 50, 40, 104, 41, 44, 49, 44, 49, 41, 41, 125, 44, 64, 123, 36, 62, > 44, 50, 94, 40, 114, 111, 117, 110, 100, 40, 108, 111, 103, 50, 40, 100, > 41, 44, 49, 44, 49, 41, 41, 125, 44, 49, 48, 48, 37, 44, 36, 123, > 49, 45, 54, 125, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 114, 50, 100, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 114, 101, 115, 105, 122, 101, 95, 114, 97, > 116, 105, 111, 50, 100, 39, 46, 10, 114, 114, 50, 100, 32, 58, 10, 45, > 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, > 43, 10, 45, 95, 114, 101, 115, 105, 122, 101, 95, 114, 97, 116, 105, 111, > 50, 100, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 115, > 105, 122, 101, 95, 114, 97, 116, 105, 111, 50, 100, 32, 58, 32, 119, 105, > 100, 116, 104, 62, 48, 44, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, > 109, 111, 100, 101, 61, 123, 32, 48, 61, 105, 110, 115, 105, 100, 101, 32, > 124, 32, 49, 61, 111, 117, 116, 115, 105, 100, 101, 32, 124, 32, 50, 61, > 112, 97, 100, 100, 101, 100, 32, 125, 44, 48, 61, 60, 95, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 60, 61, 54, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 104, > 105, 108, 101, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, 116, > 104, 101, 105, 114, 32, 97, 115, 112, 101, 99, 116, 32, 114, 97, 116, 105, > 111, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 114, 114, 50, 100, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 109, 111, 100, 101, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, > 111, 110, 61, 54, 39, 46, 10, 114, 101, 115, 105, 122, 101, 95, 114, 97, > 116, 105, 111, 50, 100, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, > 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, > 36, 42, 10, 95, 114, 101, 115, 105, 122, 101, 95, 114, 97, 116, 105, 111, > 50, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, > 48, 32, 38, 38, 32, 36, 50, 62, 48, 32, 38, 38, 32, 36, 123, 51, > 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 50, 32, > 38, 38, 32, 36, 123, 52, 61, 54, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 52, 60, 61, 54, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, > 34, 82, 101, 115, 105, 122, 101, 32, 50, 100, 32, 105, 109, 97, 103, 101, > 34, 36, 95, 95, 115, 34, 32, 116, 111, 32, 36, 49, 120, 36, 50, 32, > 119, 105, 116, 104, 32, 114, 97, 116, 105, 111, 45, 34, 64, 123, 45, 97, > 114, 103, 92, 32, 49, 43, 36, 51, 44, 105, 110, 115, 105, 100, 101, 44, > 111, 117, 116, 115, 105, 100, 101, 44, 112, 97, 100, 100, 101, 100, 125, 92, > 10, 34, 32, 109, 111, 100, 101, 32, 97, 110, 100, 32, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 32, 116, 121, 112, 101, 32, 36, > 52, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 10, 114, 97, 116, 105, 111, 61, 64, 123, 36, 62, 44, 105, > 102, 40, 36, 51, 61, 61, 49, 44, 109, 97, 120, 40, 36, 49, 47, 119, > 44, 36, 50, 47, 104, 41, 44, 109, 105, 110, 40, 36, 49, 47, 119, 44, > 36, 50, 47, 104, 41, 41, 125, 10, 45, 114, 91, 36, 62, 93, 32, 64, > 123, 36, 62, 44, 119, 42, 36, 114, 97, 116, 105, 111, 125, 44, 64, 123, > 36, 62, 44, 104, 42, 36, 114, 97, 116, 105, 111, 125, 44, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 36, 52, 10, 45, 100, 111, 110, 101, 10, > 45, 105, 102, 32, 123, 36, 51, 61, 61, 50, 125, 32, 45, 114, 32, 36, > 49, 44, 36, 50, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 50, > 100, 120, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, > 115, 105, 122, 101, 50, 100, 120, 39, 46, 10, 114, 50, 100, 120, 32, 58, > 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, > 118, 32, 43, 10, 45, 95, 114, 101, 115, 105, 122, 101, 50, 100, 120, 32, > 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 115, 105, 122, 101, > 50, 100, 120, 32, 58, 32, 119, 105, 100, 116, 104, 91, 37, 93, 62, 48, > 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, > 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 97, 120, 44, 95, 97, > 121, 44, 95, 97, 122, 44, 95, 97, 99, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, > 101, 114, 118, 105, 110, 103, 32, 50, 100, 32, 114, 97, 116, 105, 111, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 114, 50, 100, 120, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, > 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, > 61, 110, 111, 110, 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, > 110, 116, 101, 110, 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, > 124, 32, 49, 61, 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, > 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, > 97, 114, 32, 124, 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, > 98, 105, 99, 117, 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, > 122, 111, 115, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, > 105, 102, 102, 101, 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, > 115, 44, 32, 97, 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, > 116, 104, 101, 32, 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, > 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, > 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 61, 123, 32, 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, > 32, 52, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 39, 32, 105, 115, 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, > 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 61, 48, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, > 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, > 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, > 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 61, 123, 32, 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, > 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, > 32, 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, > 99, 39, 32, 115, 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, > 109, 101, 110, 116, 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, > 101, 97, 99, 104, 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, > 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, 116, > 111, 32, 39, 48, 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, > 44, 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, 101, > 100, 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, 93, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 51, 39, 44, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, > 39, 97, 120, 61, 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 115, 105, 122, 101, 50, 100, > 120, 32, 49, 48, 48, 44, 50, 32, 45, 97, 112, 112, 101, 110, 100, 32, > 120, 10, 114, 101, 115, 105, 122, 101, 50, 100, 120, 32, 58, 10, 45, 118, > 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, > 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, 114, 101, 115, 105, 122, 101, > 50, 100, 120, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, > 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 50, 60, 61, 54, 32, 38, 38, 32, 36, 123, 51, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 50, 32, 38, > 38, 32, 36, 123, 52, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 52, 60, 61, 49, 32, 38, 38, 32, 36, 123, 53, 61, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, 32, 38, 38, 32, 36, 123, > 54, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 54, 60, 61, 49, > 32, 38, 38, 32, 36, 123, 55, 61, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 55, 60, 61, 49, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, > 32, 34, 82, 101, 115, 105, 122, 101, 32, 50, 100, 32, 105, 109, 97, 103, > 101, 34, 36, 95, 95, 115, 34, 32, 116, 111, 32, 36, 49, 32, 112, 105, > 120, 101, 108, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, > 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, > 103, 32, 50, 100, 32, 114, 97, 116, 105, 111, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, > 36, 49, 42, 119, 44, 36, 49, 41, 125, 10, 45, 114, 32, 123, 109, 97, > 120, 40, 49, 44, 36, 115, 105, 122, 101, 41, 125, 44, 123, 109, 97, 120, > 40, 49, 44, 104, 42, 36, 115, 105, 122, 101, 47, 119, 41, 125, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 36, 123, 50, 45, 55, 125, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 114, 50, 100, 121, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, 115, 105, 122, 101, 50, 100, > 121, 39, 46, 10, 114, 50, 100, 121, 32, 58, 10, 45, 118, 32, 45, 32, > 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, > 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 36, 42, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 58, 32, > 104, 101, 105, 103, 104, 116, 91, 37, 93, 62, 61, 48, 44, 95, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, > 110, 100, 97, 114, 121, 44, 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, > 122, 44, 95, 97, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, > 121, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, > 110, 103, 32, 50, 100, 32, 114, 97, 116, 105, 111, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 114, 50, 100, 121, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, 110, 111, 110, > 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, 110, 116, 101, 110, > 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, > 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, 97, 118, 101, 114, > 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, 97, 114, 32, 124, > 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, 98, 105, 99, 117, > 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, 122, 111, 115, 32, > 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, 105, 102, 102, 101, > 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, 115, 44, 32, 97, > 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, > 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, 58, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, > 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, 32, 52, 32, 125, > 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 105, 115, > 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 48, 39, > 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, > 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, > 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, > 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, > 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 117, > 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, 99, 39, 32, 115, > 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, 109, 101, 110, 116, > 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, 101, 97, 99, 104, > 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, 116, 111, 32, 39, 48, > 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, 44, 32, 109, 117, > 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, 101, 100, 32, 105, 110, > 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, 93, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 61, 51, 39, 44, 32, 39, 98, 111, 117, 110, > 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, 97, 120, 61, > 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 49, 48, > 48, 44, 50, 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, 114, 101, > 115, 105, 122, 101, 50, 100, 121, 32, 58, 10, 45, 118, 32, 45, 32, 95, > 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, > 48, 32, 36, 42, 10, 95, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 50, 60, 61, 54, 32, 38, 38, 32, 36, 123, 51, 61, 48, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 50, 32, 38, 38, 32, 36, > 123, 52, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, 61, > 49, 32, 38, 38, 32, 36, 123, 53, 61, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 53, 60, 61, 49, 32, 38, 38, 32, 36, 123, 54, 61, 48, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 54, 60, 61, 49, 32, 38, 38, > 32, 36, 123, 55, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 55, > 60, 61, 49, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 82, > 101, 115, 105, 122, 101, 32, 50, 100, 32, 105, 109, 97, 103, 101, 34, 36, > 95, 95, 115, 34, 32, 116, 111, 32, 36, 49, 32, 112, 105, 120, 101, 108, > 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, 120, > 105, 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, 50, > 100, 32, 114, 97, 116, 105, 111, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, > 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, > 104, 44, 36, 49, 41, 125, 10, 45, 114, 32, 123, 109, 97, 120, 40, 49, > 44, 119, 42, 36, 115, 105, 122, 101, 47, 104, 41, 125, 44, 123, 109, 97, > 120, 40, 49, 44, 36, 115, 105, 122, 101, 41, 125, 44, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 36, 123, 50, 45, 55, 125, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 51, 100, 120, 32, 58, 32, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 114, 101, 115, 105, 122, 101, 51, 100, 120, 39, 46, > 10, 114, 51, 100, 120, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, > 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 114, 101, 115, > 105, 122, 101, 51, 100, 120, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 101, 115, 105, 122, 101, 51, 100, 120, 32, 58, 32, 119, 105, 100, > 116, 104, 91, 37, 93, 62, 48, 44, 95, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 44, 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, 122, 44, 95, 97, 99, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, > 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, 51, 100, > 32, 114, 97, 116, 105, 111, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 51, 100, 120, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 45, 49, 61, 110, 111, 110, 101, 32, 40, 109, 101, > 109, 111, 114, 121, 32, 99, 111, 110, 116, 101, 110, 116, 41, 32, 124, 32, > 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 97, 114, 101, > 115, 116, 32, 124, 32, 50, 61, 97, 118, 101, 114, 97, 103, 101, 32, 124, > 32, 51, 61, 108, 105, 110, 101, 97, 114, 32, 124, 32, 52, 61, 103, 114, > 105, 100, 32, 124, 32, 53, 61, 98, 105, 99, 117, 98, 105, 99, 32, 124, > 32, 54, 61, 108, 97, 110, 99, 122, 111, 115, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 39, 32, 104, 97, 115, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, > 109, 101, 97, 110, 105, 110, 103, 115, 44, 32, 97, 99, 99, 111, 114, 100, > 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 99, 104, 111, 115, 101, > 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 39, 32, 109, 111, 100, 101, 32, 58, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, > 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, 45, 49, 32, 124, 32, > 49, 32, 124, 32, 50, 32, 124, 32, 52, 32, 125, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 39, 32, 105, 115, 32, 109, 101, 97, 110, > 105, 110, 103, 108, 101, 115, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, > 111, 108, 97, 116, 105, 111, 110, 61, 61, 48, 39, 44, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, > 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, 51, 32, 124, 32, 53, > 32, 124, 32, 54, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, > 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, > 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, 120, 44, > 97, 121, 44, 97, 122, 44, 97, 99, 39, 32, 115, 101, 116, 32, 116, 104, > 101, 32, 97, 108, 105, 103, 110, 109, 101, 110, 116, 32, 109, 111, 100, 101, > 32, 97, 108, 111, 110, 103, 32, 101, 97, 99, 104, 32, 97, 120, 105, 115, > 32, 119, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, > 116, 105, 111, 110, 61, 48, 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 115, 101, 116, 32, 116, 111, 32, 39, 48, 39, 32, 98, 121, 32, > 100, 101, 102, 97, 117, 108, 116, 44, 32, 109, 117, 115, 116, 32, 98, 101, > 32, 100, 101, 102, 105, 110, 101, 100, 32, 105, 110, 32, 114, 97, 110, 103, > 101, 32, 91, 48, 44, 49, 93, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, > 110, 61, 51, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 48, 39, 32, 97, 110, 100, 32, 39, 97, 120, 61, 97, 121, 61, 97, 122, > 61, 97, 99, 61, 48, 39, 46, 10, 114, 101, 115, 105, 122, 101, 51, 100, > 120, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, > 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, > 114, 101, 115, 105, 122, 101, 51, 100, 120, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, > 51, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 54, 32, 38, > 38, 32, 36, 123, 51, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 51, 60, 61, 50, 32, 38, 38, 32, 36, 123, 52, 61, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 52, 60, 61, 49, 32, 38, 38, 32, 36, 123, > 53, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, > 32, 38, 38, 32, 36, 123, 54, 61, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 54, 60, 61, 49, 32, 38, 38, 32, 36, 123, 55, 61, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 55, 60, 61, 49, 34, 10, 45, 101, > 91, 48, 45, 45, 51, 93, 32, 34, 82, 101, 115, 105, 122, 101, 32, 51, > 100, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 116, 111, > 32, 36, 49, 32, 112, 105, 120, 101, 108, 115, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, > 115, 101, 114, 118, 105, 110, 103, 32, 51, 100, 32, 114, 97, 116, 105, 111, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 115, 105, 122, 101, 61, 123, > 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, > 92, 32, 36, 49, 125, 44, 36, 49, 42, 119, 44, 36, 49, 41, 125, 10, > 45, 114, 32, 123, 109, 97, 120, 40, 49, 44, 36, 115, 105, 122, 101, 41, > 125, 44, 123, 109, 97, 120, 40, 49, 44, 104, 42, 36, 115, 105, 122, 101, > 47, 119, 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 100, 42, 36, 115, > 105, 122, 101, 47, 119, 41, 125, 44, 49, 48, 48, 37, 44, 36, 123, 50, > 45, 55, 125, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 51, 100, 121, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, 115, 105, > 122, 101, 51, 100, 121, 39, 46, 10, 114, 51, 100, 121, 32, 58, 10, 45, > 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, > 43, 10, 45, 95, 114, 101, 115, 105, 122, 101, 51, 100, 121, 32, 36, 42, > 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 115, 105, 122, 101, 51, 100, > 121, 32, 58, 32, 104, 101, 105, 103, 104, 116, 91, 37, 93, 62, 48, 44, > 95, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, > 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 97, 120, 44, 95, 97, 121, > 44, 95, 97, 122, 44, 95, 97, 99, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, > 104, 101, 32, 121, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, 101, > 114, 118, 105, 110, 103, 32, 51, 100, 32, 114, 97, 116, 105, 111, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 114, 51, 100, 121, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, > 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, > 110, 111, 110, 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, 110, > 116, 101, 110, 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, 124, > 32, 49, 61, 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, 97, > 118, 101, 114, 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, 97, > 114, 32, 124, 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, 98, > 105, 99, 117, 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, 122, > 111, 115, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, 105, > 102, 102, 101, 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, 115, > 44, 32, 97, 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, > 104, 101, 32, 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, 114, > 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, 58, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 123, 32, 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, 32, > 52, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 105, 115, 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 48, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, > 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 123, 32, 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, 44, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, > 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, 99, > 39, 32, 115, 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, 109, > 101, 110, 116, 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, 101, > 97, 99, 104, 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, 116, 111, > 32, 39, 48, 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, 44, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, 101, 100, > 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, 93, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 51, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 97, 120, 61, 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, 39, 46, 10, > 114, 101, 115, 105, 122, 101, 51, 100, 121, 32, 58, 10, 45, 118, 32, 45, > 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, > 95, 36, 48, 32, 36, 42, 10, 95, 114, 101, 115, 105, 122, 101, 51, 100, > 121, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 48, > 32, 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 50, 60, 61, 54, 32, 38, 38, 32, 36, 123, 51, 61, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 50, 32, 38, 38, 32, > 36, 123, 52, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, > 61, 49, 32, 38, 38, 32, 36, 123, 53, 61, 48, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 53, 60, 61, 49, 32, 38, 38, 32, 36, 123, 54, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 54, 60, 61, 49, 32, 38, > 38, 32, 36, 123, 55, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 55, 60, 61, 49, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 82, 101, 115, 105, 122, 101, 32, 51, 100, 32, 105, 109, 97, 103, 101, 34, > 36, 95, 95, 115, 34, 32, 116, 111, 32, 36, 49, 32, 112, 105, 120, 101, > 108, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, > 120, 105, 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, > 51, 100, 32, 114, 97, 116, 105, 111, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, > 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, > 42, 104, 44, 36, 49, 41, 125, 10, 45, 114, 32, 123, 109, 97, 120, 40, > 49, 44, 119, 42, 36, 115, 105, 122, 101, 47, 104, 41, 125, 44, 123, 109, > 97, 120, 40, 49, 44, 36, 115, 105, 122, 101, 41, 125, 44, 123, 109, 97, > 120, 40, 49, 44, 100, 42, 36, 115, 105, 122, 101, 47, 104, 41, 125, 44, > 49, 48, 48, 37, 44, 36, 123, 50, 45, 55, 125, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 51, 100, 122, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 114, 101, 115, 105, 122, 101, 51, 100, 122, 39, 46, 10, > 114, 51, 100, 122, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, > 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 114, 101, 115, 105, > 122, 101, 51, 100, 122, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, > 114, 101, 115, 105, 122, 101, 51, 100, 122, 32, 58, 32, 100, 101, 112, 116, > 104, 91, 37, 93, 62, 48, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, > 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, 122, 44, 95, 97, 99, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, > 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, 51, 100, 32, > 114, 97, 116, 105, 111, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 51, 100, 122, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 45, 49, 61, 110, 111, 110, 101, 32, 40, 109, 101, 109, > 111, 114, 121, 32, 99, 111, 110, 116, 101, 110, 116, 41, 32, 124, 32, 48, > 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 97, 114, 101, 115, > 116, 32, 124, 32, 50, 61, 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, > 51, 61, 108, 105, 110, 101, 97, 114, 32, 124, 32, 52, 61, 103, 114, 105, > 100, 32, 124, 32, 53, 61, 98, 105, 99, 117, 98, 105, 99, 32, 124, 32, > 54, 61, 108, 97, 110, 99, 122, 111, 115, 32, 125, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 104, 97, 115, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 109, > 101, 97, 110, 105, 110, 103, 115, 44, 32, 97, 99, 99, 111, 114, 100, 105, > 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 99, 104, 111, 115, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, > 32, 109, 111, 100, 101, 32, 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, 45, 49, 32, 124, 32, 49, > 32, 124, 32, 50, 32, 124, 32, 52, 32, 125, 39, 44, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 39, 32, 105, 115, 32, 109, 101, 97, 110, 105, > 110, 103, 108, 101, 115, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 61, 61, 48, 39, 44, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, > 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, > 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, 51, 32, 124, 32, 53, 32, > 124, 32, 54, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, > 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, 111, > 110, 101, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, 120, 44, 97, > 121, 44, 97, 122, 44, 97, 99, 39, 32, 115, 101, 116, 32, 116, 104, 101, > 32, 97, 108, 105, 103, 110, 109, 101, 110, 116, 32, 109, 111, 100, 101, 32, > 97, 108, 111, 110, 103, 32, 101, 97, 99, 104, 32, 97, 120, 105, 115, 32, > 119, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, > 105, 111, 110, 61, 48, 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 115, 101, 116, 32, 116, 111, 32, 39, 48, 39, 32, 98, 121, 32, 100, > 101, 102, 97, 117, 108, 116, 44, 32, 109, 117, 115, 116, 32, 98, 101, 32, > 100, 101, 102, 105, 110, 101, 100, 32, 105, 110, 32, 114, 97, 110, 103, 101, > 32, 91, 48, 44, 49, 93, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 51, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 48, > 39, 32, 97, 110, 100, 32, 39, 97, 120, 61, 97, 121, 61, 97, 122, 61, > 97, 99, 61, 48, 39, 46, 10, 114, 101, 115, 105, 122, 101, 51, 100, 122, > 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, > 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, 114, > 101, 115, 105, 122, 101, 51, 100, 122, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 54, 32, 38, 38, > 32, 36, 123, 51, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 51, > 60, 61, 50, 32, 38, 38, 32, 36, 123, 52, 61, 48, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 52, 60, 61, 49, 32, 38, 38, 32, 36, 123, 53, > 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, 32, > 38, 38, 32, 36, 123, 54, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 54, 60, 61, 49, 32, 38, 38, 32, 36, 123, 55, 61, 48, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 55, 60, 61, 49, 34, 10, 45, 101, 91, > 48, 45, 45, 51, 93, 32, 34, 82, 101, 115, 105, 122, 101, 32, 51, 100, > 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 116, 111, 32, > 36, 49, 32, 112, 105, 120, 101, 108, 115, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, > 101, 114, 118, 105, 110, 103, 32, 51, 100, 32, 114, 97, 116, 105, 111, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 115, 105, 122, 101, 61, 123, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 49, 125, 44, 36, 49, 42, 100, 44, 36, 49, 41, 125, 10, 45, > 114, 91, 36, 62, 93, 32, 123, 109, 97, 120, 40, 49, 44, 119, 42, 36, > 115, 105, 122, 101, 47, 100, 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, > 104, 42, 36, 115, 105, 122, 101, 47, 100, 41, 125, 44, 123, 109, 97, 120, > 40, 49, 44, 36, 115, 105, 122, 101, 41, 125, 44, 49, 48, 48, 37, 44, > 36, 123, 50, 45, 55, 125, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 111, 116, 97, 116, 101, 32, 58, 32, 97, 110, 103, 108, 101, 44, 95, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 44, 95, 99, 120, 91, 37, 93, 44, 95, 99, > 121, 91, 37, 93, 44, 95, 122, 111, 111, 109, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 111, 116, 97, 116, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 97, 110, 103, 108, 101, 32, 40, 105, 110, 32, 100, 101, 103, 46, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, > 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 108, 105, > 110, 101, 97, 114, 32, 124, 32, 50, 61, 98, 105, 99, 117, 98, 105, 99, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 87, 104, 101, 110, 32, 114, 111, 116, 97, 116, 105, 111, 110, 32, > 99, 101, 110, 116, 101, 114, 32, 40, 39, 99, 120, 39, 44, 39, 99, 121, > 39, 41, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 44, > 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 111, 102, 32, 116, 104, 101, > 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 112, 114, 101, 115, 101, 114, > 118, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 44, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 49, 39, 44, 32, 39, > 99, 120, 61, 99, 121, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, > 41, 39, 32, 97, 110, 100, 32, 39, 122, 111, 111, 109, 61, 49, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 114, 111, 116, 97, 116, 101, 32, 45, > 50, 53, 44, 49, 44, 50, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, > 46, 54, 32, 45, 114, 111, 116, 97, 116, 101, 91, 48, 93, 32, 50, 53, > 10, 35, 64, 103, 109, 105, 99, 32, 114, 111, 116, 97, 116, 101, 95, 116, > 105, 108, 101, 97, 98, 108, 101, 32, 58, 32, 97, 110, 103, 108, 101, 44, > 95, 109, 97, 120, 95, 115, 105, 122, 101, 95, 102, 97, 99, 116, 111, 114, > 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 111, 116, > 97, 116, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 97, 110, 103, 108, 101, 32, 97, 110, 100, 32, 109, 97, 107, 101, 32, > 116, 104, 101, 109, 32, 116, 105, 108, 101, 97, 98, 108, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 114, 101, 115, 117, 108, > 116, 105, 110, 103, 32, 115, 105, 122, 101, 32, 111, 102, 32, 97, 110, 32, > 105, 109, 97, 103, 101, 32, 105, 115, 32, 116, 111, 111, 32, 98, 105, 103, > 44, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 114, > 101, 112, 108, 97, 99, 101, 100, 32, 98, 121, 32, 97, 32, 49, 120, 49, > 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 109, 97, 120, 95, 115, 105, 122, 101, 95, 102, 97, 99, 116, 111, > 114, 61, 56, 39, 46, 10, 114, 111, 116, 97, 116, 101, 95, 116, 105, 108, > 101, 97, 98, 108, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, > 123, 50, 61, 56, 125, 62, 61, 48, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 82, 111, 116, 97, 116, 101, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 32, 36, 49, 32, 100, > 101, 103, 46, 32, 97, 110, 100, 32, 109, 97, 107, 101, 32, 116, 104, 101, > 109, 32, 116, 105, 108, 101, 97, 98, 108, 101, 46, 34, 10, 45, 118, 32, > 45, 10, 97, 110, 103, 108, 101, 61, 123, 36, 49, 37, 51, 54, 48, 125, > 10, 45, 105, 102, 32, 123, 36, 97, 110, 103, 108, 101, 62, 61, 50, 55, > 48, 125, 32, 45, 114, 111, 116, 97, 116, 101, 32, 50, 55, 48, 32, 97, > 110, 103, 108, 101, 61, 123, 36, 97, 110, 103, 108, 101, 45, 50, 55, 48, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 97, 110, 103, 108, 101, 62, > 61, 49, 56, 48, 125, 32, 45, 114, 111, 116, 97, 116, 101, 32, 49, 56, > 48, 32, 97, 110, 103, 108, 101, 61, 123, 36, 97, 110, 103, 108, 101, 45, > 49, 56, 48, 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 97, 110, 103, > 108, 101, 62, 61, 57, 48, 125, 32, 45, 114, 111, 116, 97, 116, 101, 32, > 57, 48, 32, 97, 110, 103, 108, 101, 61, 123, 36, 97, 110, 103, 108, 101, > 45, 57, 48, 125, 10, 45, 101, 110, 100, 105, 102, 10, 40, 48, 44, 49, > 59, 49, 44, 56, 59, 49, 44, 55, 59, 49, 44, 54, 59, 49, 44, 53, > 59, 49, 44, 52, 59, 49, 44, 53, 59, 49, 44, 51, 59, 50, 44, 53, > 59, 49, 44, 50, 59, 50, 44, 53, 59, 51, 44, 53, 59, 50, 44, 51, > 59, 51, 44, 52, 59, 52, 44, 53, 59, 49, 44, 49, 59, 53, 44, 52, > 59, 55, 44, 53, 59, 51, 44, 50, 59, 56, 44, 53, 59, 57, 44, 53, > 59, 50, 44, 49, 59, 51, 44, 49, 59, 52, 44, 49, 59, 53, 44, 49, > 59, 54, 44, 49, 59, 55, 44, 49, 59, 56, 44, 49, 41, 10, 45, 115, > 91, 45, 49, 93, 32, 120, 44, 50, 32, 45, 45, 47, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 97, 116, 97, 110, 91, 45, 49, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 123, 49, 56, 48, 47, 112, 105, 125, 10, 40, 36, > 97, 110, 103, 108, 101, 41, 32, 45, 105, 110, 100, 101, 120, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 112, > 61, 64, 123, 45, 51, 44, 64, 45, 49, 125, 32, 113, 61, 64, 123, 45, > 50, 44, 64, 45, 49, 125, 32, 45, 114, 109, 91, 45, 51, 45, 45, 49, > 93, 10, 45, 105, 102, 32, 123, 33, 36, 112, 124, 124, 33, 36, 113, 125, > 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 116, 104, 101, 116, 97, 61, 123, 97, 116, 97, 110, 50, 40, 36, > 112, 44, 36, 113, 41, 125, 10, 103, 99, 100, 61, 64, 123, 45, 103, 99, > 100, 34, 32, 34, 123, 104, 42, 36, 113, 125, 44, 123, 119, 42, 36, 112, > 125, 125, 10, 112, 119, 61, 123, 104, 42, 36, 113, 47, 36, 103, 99, 100, > 125, 10, 110, 119, 61, 123, 114, 111, 117, 110, 100, 40, 36, 112, 119, 42, > 119, 47, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 41, 125, 10, > 103, 99, 100, 61, 64, 123, 45, 103, 99, 100, 34, 32, 34, 123, 104, 42, > 36, 112, 125, 44, 123, 119, 42, 36, 113, 125, 125, 10, 113, 104, 61, 123, > 119, 42, 36, 113, 47, 36, 103, 99, 100, 125, 10, 110, 104, 61, 123, 114, > 111, 117, 110, 100, 40, 36, 113, 104, 42, 104, 47, 99, 111, 115, 40, 36, > 116, 104, 101, 116, 97, 41, 41, 125, 10, 45, 105, 102, 32, 123, 33, 36, > 50, 34, 32, 124, 124, 32, 34, 40, 36, 110, 119, 60, 36, 50, 42, 119, > 34, 32, 38, 38, 32, 34, 36, 110, 104, 60, 36, 50, 42, 104, 41, 125, > 10, 45, 114, 32, 123, 49, 46, 53, 42, 36, 110, 119, 125, 44, 123, 49, > 46, 53, 42, 36, 110, 104, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, > 44, 50, 10, 45, 114, 111, 116, 97, 116, 101, 32, 123, 36, 116, 104, 101, > 116, 97, 42, 49, 56, 48, 47, 112, 105, 125, 44, 49, 44, 50, 44, 53, > 48, 37, 44, 53, 48, 37, 10, 45, 114, 32, 36, 110, 119, 44, 36, 110, > 104, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 50, 44, 48, 46, 53, > 44, 48, 46, 53, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 32, 49, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 114, 111, 119, 115, 32, 58, 32, 123, 32, 91, 105, 109, 97, 103, 101, 48, > 93, 32, 124, 32, 121, 48, 91, 37, 93, 32, 125, 44, 95, 123, 32, 91, > 105, 109, 97, 103, 101, 49, 93, 32, 124, 32, 121, 49, 91, 37, 93, 32, > 125, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 75, 101, 101, 112, 32, 111, 110, 108, 121, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 114, 111, 119, 115, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 105, 114, 105, 99, 104, 108, 101, 116, > 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, 105, 115, 32, 117, 115, 101, > 100, 32, 119, 104, 101, 110, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 114, 111, 119, 115, 32, 97, 114, 101, 32, 111, 117, 116, 32, 111, 102, > 32, 114, 97, 110, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 111, > 119, 115, 32, 45, 50, 53, 37, 44, 53, 48, 37, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 99, 97, 108, 101, 50, 120, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, > 32, 116, 104, 101, 32, 83, 99, 97, 108, 101, 50, 120, 32, 97, 108, 103, > 111, 114, 105, 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, 114, 101, 115, > 105, 122, 101, 32, 53, 48, 37, 44, 53, 48, 37, 32, 45, 45, 115, 99, > 97, 108, 101, 50, 120, 10, 115, 99, 97, 108, 101, 50, 120, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 111, 117, 98, 108, 101, 32, > 120, 121, 45, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, 32, > 83, 99, 97, 108, 101, 50, 120, 32, 97, 108, 103, 111, 114, 105, 116, 104, > 109, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 32, 50, 48, > 48, 37, 44, 50, 48, 48, 37, 10, 45, 102, 32, 34, 100, 120, 61, 120, > 38, 49, 59, 100, 121, 61, 121, 38, 49, 59, 65, 61, 106, 40, 48, 44, > 45, 50, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 66, 61, 106, 40, > 50, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 67, 61, 106, > 40, 45, 50, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 68, > 61, 106, 40, 48, 44, 50, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, > 34, 92, 10, 34, 33, 100, 121, 42, 40, 33, 100, 120, 42, 105, 102, 40, > 67, 61, 61, 65, 38, 38, 67, 33, 61, 68, 38, 38, 65, 33, 61, 66, > 44, 65, 44, 105, 41, 32, 43, 32, 100, 120, 42, 105, 102, 40, 65, 61, > 61, 66, 38, 38, 65, 33, 61, 67, 38, 38, 66, 33, 61, 68, 44, 66, > 44, 105, 41, 41, 32, 43, 32, 100, 121, 42, 40, 100, 120, 42, 105, 102, > 40, 66, 61, 61, 68, 38, 38, 66, 33, 61, 65, 38, 38, 68, 33, 61, > 67, 44, 68, 44, 105, 41, 32, 43, 32, 33, 100, 120, 42, 105, 102, 40, > 68, 61, 61, 67, 38, 38, 68, 33, 61, 66, 38, 38, 67, 33, 61, 65, > 44, 67, 44, 105, 41, 41, 34, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 99, 97, 108, 101, 51, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 116, 104, > 101, 32, 83, 99, 97, 108, 101, 51, 120, 32, 97, 108, 103, 111, 114, 105, > 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, 114, 101, 115, 105, 122, 101, > 32, 51, 51, 37, 44, 51, 51, 37, 32, 45, 45, 115, 99, 97, 108, 101, > 51, 120, 10, 115, 99, 97, 108, 101, 51, 120, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 84, 114, 105, 112, 108, 101, 32, 120, 121, 45, > 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, 111, 102, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, 32, 83, 99, 97, > 108, 101, 51, 120, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 32, 51, 48, 48, 37, 44, > 51, 48, 48, 37, 10, 45, 102, 32, 34, 100, 120, 61, 120, 37, 51, 59, > 100, 121, 61, 121, 37, 51, 59, 99, 48, 61, 33, 100, 120, 59, 99, 49, > 61, 40, 100, 120, 61, 61, 49, 41, 59, 99, 50, 61, 40, 100, 120, 61, > 61, 50, 41, 59, 34, 92, 10, 34, 65, 61, 106, 40, 45, 51, 44, 45, > 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 66, 61, 106, 40, 48, > 44, 45, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 67, 61, 106, > 40, 51, 44, 45, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 34, > 92, 10, 34, 68, 61, 106, 40, 45, 51, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 49, 41, 59, 70, 61, 106, 40, 51, 44, 48, 44, 48, 44, 48, > 44, 48, 44, 49, 41, 59, 34, 92, 10, 34, 71, 61, 106, 40, 45, 51, > 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 72, 61, 106, 40, > 48, 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 73, 61, 106, > 40, 51, 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 34, 92, > 10, 34, 33, 100, 121, 42, 40, 99, 48, 42, 105, 102, 40, 68, 61, 61, > 66, 38, 38, 68, 33, 61, 72, 38, 38, 66, 33, 61, 70, 44, 68, 44, > 105, 41, 32, 43, 32, 99, 49, 42, 105, 102, 40, 40, 68, 61, 61, 66, > 38, 38, 68, 33, 61, 72, 38, 38, 66, 33, 61, 70, 38, 38, 105, 33, > 61, 67, 41, 124, 124, 40, 66, 61, 61, 70, 38, 38, 66, 33, 61, 68, > 38, 38, 70, 33, 61, 72, 38, 38, 105, 33, 61, 65, 41, 44, 66, 44, > 105, 41, 32, 43, 32, 99, 50, 42, 105, 102, 40, 66, 61, 61, 70, 38, > 38, 66, 33, 61, 68, 38, 38, 70, 33, 61, 72, 44, 70, 44, 105, 41, > 41, 32, 43, 32, 34, 92, 10, 34, 40, 100, 121, 61, 61, 49, 41, 42, > 40, 99, 48, 42, 105, 102, 40, 40, 72, 61, 61, 68, 38, 38, 72, 33, > 61, 70, 38, 38, 68, 33, 61, 66, 38, 38, 105, 33, 61, 65, 41, 124, > 124, 40, 68, 61, 61, 66, 38, 38, 68, 33, 61, 72, 38, 38, 66, 33, > 61, 70, 38, 38, 105, 33, 61, 71, 41, 44, 68, 44, 105, 41, 32, 43, > 32, 99, 49, 42, 105, 32, 43, 32, 99, 50, 42, 105, 102, 40, 40, 66, > 61, 61, 70, 38, 38, 66, 33, 61, 68, 38, 38, 70, 33, 61, 72, 38, > 38, 105, 33, 61, 73, 41, 124, 124, 40, 70, 61, 61, 72, 38, 38, 70, > 33, 61, 66, 38, 38, 72, 33, 61, 68, 38, 38, 105, 33, 61, 67, 41, > 44, 70, 44, 105, 41, 41, 32, 43, 32, 34, 92, 10, 34, 40, 100, 121, > 61, 61, 50, 41, 42, 40, 99, 48, 42, 105, 102, 40, 72, 61, 61, 68, > 38, 38, 72, 33, 61, 70, 38, 38, 68, 33, 61, 66, 44, 68, 44, 105, > 41, 32, 43, 32, 99, 49, 42, 105, 102, 40, 40, 70, 61, 61, 72, 38, > 38, 70, 33, 61, 66, 38, 38, 72, 33, 61, 68, 38, 38, 105, 33, 61, > 71, 41, 124, 124, 40, 72, 61, 61, 68, 38, 38, 72, 33, 61, 70, 38, > 38, 68, 33, 61, 66, 38, 38, 105, 33, 61, 73, 41, 44, 72, 44, 105, > 41, 32, 43, 32, 99, 50, 42, 105, 102, 40, 70, 61, 61, 72, 38, 38, > 70, 33, 61, 66, 38, 38, 72, 33, 61, 68, 44, 70, 44, 105, 41, 41, > 34, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 101, 97, 109, 99, 97, > 114, 118, 101, 32, 58, 32, 95, 119, 105, 100, 116, 104, 91, 37, 93, 62, > 61, 48, 44, 95, 104, 101, 105, 103, 104, 116, 91, 37, 93, 62, 61, 48, > 44, 95, 105, 115, 95, 112, 114, 105, 111, 114, 105, 116, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, > 95, 105, 115, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, 105, 110, 103, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 109, 97, 120, 105, > 109, 117, 109, 95, 115, 101, 97, 109, 115, 91, 37, 93, 62, 61, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 50, > 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 44, 32, 117, 115, 105, 110, > 103, 32, 116, 104, 101, 32, 115, 101, 97, 109, 45, 99, 97, 114, 118, 105, > 110, 103, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 104, 101, 105, 103, 104, 116, 61, 49, > 48, 48, 37, 39, 44, 32, 39, 105, 115, 95, 112, 114, 105, 111, 114, 105, > 116, 121, 95, 99, 104, 97, 110, 110, 101, 108, 61, 48, 39, 44, 32, 39, > 105, 115, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, 105, 110, 103, 61, > 49, 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 105, 109, 117, 109, 95, > 115, 101, 97, 109, 115, 61, 50, 53, 37, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 54, 48, 37, > 10, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 50, 61, 49, 48, 48, 37, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 53, 61, 50, 53, 37, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, 125, 44, 36, > 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, > 101, 115, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, > 32, 36, 49, 120, 36, 50, 32, 117, 115, 105, 110, 103, 32, 115, 101, 97, > 109, 45, 99, 97, 114, 118, 105, 110, 103, 32, 97, 108, 103, 111, 114, 105, > 116, 104, 109, 44, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 33, 36, 51, 44, 119, 105, 116, 104, 44, 119, 105, 116, 104, 111, 117, 116, > 125, 34, 32, 112, 114, 105, 111, 114, 105, 116, 121, 32, 99, 104, 97, 110, > 110, 101, 108, 44, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 33, 36, 52, 44, 119, 105, 116, 104, 44, 119, 105, 116, 104, 111, 117, 116, > 125, 34, 32, 97, 110, 116, 105, 45, 97, 108, 105, 97, 115, 105, 110, 103, > 32, 97, 110, 100, 32, 109, 97, 120, 105, 109, 117, 109, 32, 115, 101, 97, > 109, 115, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, > 119, 61, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 49, 125, 44, 36, 49, 42, 119, 44, 36, 49, 41, 41, 41, 125, > 10, 110, 104, 61, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, > 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 104, 44, 36, 50, 41, 41, > 41, 125, 10, 45, 105, 102, 32, 123, 36, 110, 119, 33, 61, 119, 125, 32, > 45, 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 36, 110, 119, 44, > 36, 51, 44, 36, 52, 44, 36, 53, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 104, 33, 61, 104, 125, 32, 45, 116, 114, > 97, 110, 115, 112, 111, 115, 101, 32, 45, 95, 115, 101, 97, 109, 99, 97, > 114, 118, 101, 32, 36, 110, 104, 44, 36, 51, 44, 36, 52, 44, 36, 53, > 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 58, > 10, 45, 100, 111, 10, 109, 97, 120, 95, 115, 101, 97, 109, 115, 61, 123, > 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, > 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 52, > 125, 44, 36, 52, 42, 119, 44, 36, 52, 41, 41, 41, 125, 10, 115, 115, > 109, 115, 61, 123, 109, 97, 120, 40, 109, 105, 110, 40, 114, 111, 117, 110, > 100, 40, 36, 49, 45, 119, 41, 44, 119, 41, 44, 49, 45, 119, 41, 125, > 10, 115, 109, 115, 61, 123, 109, 105, 110, 40, 36, 109, 97, 120, 95, 115, > 101, 97, 109, 115, 44, 97, 98, 115, 40, 36, 115, 115, 109, 115, 41, 41, > 125, 10, 45, 105, 102, 32, 36, 50, 32, 45, 115, 91, 48, 93, 32, 99, > 44, 123, 49, 45, 115, 125, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, > 54, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 103, 114, 97, 100, 105, > 101, 110, 116, 91, 48, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, > 32, 99, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 43, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 10, 45, > 105, 102, 32, 36, 50, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 97, 91, 48, 44, 49, 93, 32, 99, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 36, 51, 32, 49, 48, 48, 37, 44, 49, > 44, 49, 44, 49, 44, 120, 32, 45, 114, 91, 45, 49, 93, 32, 91, 48, > 93, 44, 91, 48, 93, 32, 45, 97, 91, 48, 44, 45, 49, 93, 32, 99, > 32, 45, 101, 110, 100, 105, 102, 10, 91, 45, 49, 93, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 104, 125, 10, 45, 45, 114, 111, 119, 115, 91, > 45, 49, 93, 32, 123, 36, 60, 43, 49, 125, 32, 45, 101, 114, 111, 100, > 101, 91, 45, 49, 93, 32, 51, 10, 45, 106, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 36, 60, 44, 48, 44, 48, 44, 45, 49, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 45, 114, 111, 119, 115, 91, 49, > 93, 32, 48, 10, 45, 110, 109, 91, 49, 93, 32, 103, 114, 97, 100, 32, > 45, 110, 109, 91, 50, 93, 32, 108, 111, 119, 32, 45, 110, 109, 91, 51, > 93, 32, 115, 101, 97, 109, 32, 45, 110, 109, 91, 52, 93, 32, 116, 111, > 112, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, 44, 104, 45, > 49, 125, 32, 110, 114, 61, 123, 36, 62, 43, 49, 125, 10, 45, 45, 114, > 111, 119, 115, 91, 108, 111, 119, 93, 32, 36, 110, 114, 10, 45, 45, 42, > 91, 52, 44, 53, 93, 32, 45, 45, 115, 104, 105, 102, 116, 91, 52, 93, > 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 91, 53, 93, 32, 45, 45, > 115, 104, 105, 102, 116, 91, 53, 93, 32, 49, 32, 45, 42, 91, 45, 49, > 93, 32, 91, 52, 93, 10, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 106, 91, 53, 93, 32, 91, 52, 93, 32, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 99, 10, 45, 102, 91, 45, 49, 93, 32, 34, 62, 105, > 102, 40, 99, 44, 105, 44, 109, 97, 120, 40, 106, 40, 45, 49, 41, 43, > 106, 40, 48, 44, 48, 44, 48, 44, 49, 41, 44, 106, 40, 45, 50, 41, > 43, 106, 40, 48, 44, 48, 44, 48, 44, 50, 41, 41, 41, 34, 10, 45, > 115, 91, 45, 49, 93, 32, 99, 32, 45, 115, 104, 105, 102, 116, 91, 45, > 51, 93, 32, 49, 32, 45, 43, 91, 45, 50, 93, 32, 91, 45, 51, 93, > 32, 45, 115, 104, 105, 102, 116, 91, 45, 51, 93, 32, 49, 32, 45, 43, > 91, 45, 51, 44, 45, 49, 93, 10, 45, 103, 116, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 102, 91, 45, 49, 93, 32, 34, 60, 105, 102, 40, 106, > 40, 49, 41, 60, 48, 44, 49, 44, 45, 105, 41, 34, 10, 45, 106, 91, > 115, 101, 97, 109, 93, 32, 91, 45, 49, 93, 44, 48, 44, 36, 62, 10, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 102, 91, 45, > 49, 93, 32, 34, 106, 40, 105, 44, 48, 44, 48, 44, 45, 49, 41, 34, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 49, > 10, 45, 45, 114, 111, 119, 115, 91, 103, 114, 97, 100, 93, 32, 36, 110, > 114, 32, 45, 43, 91, 116, 111, 112, 44, 45, 49, 93, 10, 45, 100, 111, > 110, 101, 10, 109, 97, 120, 61, 123, 105, 77, 42, 50, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 115, 109, 115, 32, 45, 61, 91, 45, 49, > 93, 32, 36, 109, 97, 120, 44, 64, 123, 45, 49, 44, 120, 109, 125, 32, > 45, 100, 111, 110, 101, 10, 45, 106, 91, 103, 114, 97, 100, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 49, 48, 48, 37, 32, 45, 114, 109, 91, 108, > 111, 119, 44, 116, 111, 112, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 10, 45, 102, 91, 45, 49, 93, 32, 34, 60, 105, 102, 40, > 99, 44, 105, 44, 106, 40, 106, 40, 48, 44, 48, 44, 48, 44, 49, 41, > 44, 49, 44, 48, 44, 48, 44, 48, 44, 49, 41, 41, 34, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 10, 45, 43, > 91, 48, 93, 32, 48, 46, 49, 32, 45, 110, 101, 113, 91, 45, 49, 93, > 32, 36, 109, 97, 120, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, > 125, 32, 115, 61, 64, 123, 48, 44, 115, 125, 10, 45, 105, 102, 32, 123, > 36, 115, 115, 109, 115, 60, 48, 125, 32, 45, 42, 32, 45, 100, 105, 115, > 99, 97, 114, 100, 32, 48, 32, 45, 114, 32, 123, 36, 119, 45, 36, 115, > 109, 115, 125, 44, 36, 104, 44, 49, 44, 36, 115, 44, 45, 49, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 115, 115, 109, 115, 62, 48, 125, 10, 45, > 45, 91, 45, 49, 93, 32, 50, 32, 45, 115, 91, 48, 93, 32, 99, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 115, 32, 45, 105, 102, 32, 123, > 36, 62, 60, 40, 36, 115, 45, 49, 41, 125, 32, 91, 45, 49, 93, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 97, 91, 36, 62, 44, 45, 49, 93, > 32, 99, 32, 45, 100, 111, 110, 101, 10, 45, 112, 101, 114, 109, 117, 116, > 101, 32, 99, 120, 121, 122, 32, 45, 97, 32, 99, 32, 45, 100, 105, 115, > 99, 97, 114, 100, 32, 45, 49, 32, 45, 102, 32, 34, 105, 102, 40, 105, > 60, 48, 44, 106, 40, 48, 44, 45, 49, 41, 44, 105, 41, 34, 10, 45, > 114, 32, 123, 36, 119, 43, 36, 115, 109, 115, 125, 44, 36, 104, 44, 49, > 44, 36, 115, 44, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 36, 51, 10, 45, 115, 32, 99, 44, 123, 49, 45, 115, 125, 32, > 45, 103, 114, 97, 100, 105, 101, 110, 116, 91, 45, 49, 93, 32, 120, 44, > 49, 32, 45, 114, 111, 117, 110, 100, 32, 45, 110, 101, 113, 91, 45, 49, > 93, 32, 49, 10, 40, 48, 46, 53, 44, 48, 46, 53, 41, 32, 45, 45, > 99, 111, 110, 118, 111, 108, 118, 101, 91, 48, 93, 32, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 106, 91, 48, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 49, > 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, > 97, 61, 119, 47, 36, 49, 59, 105, 102, 40, 97, 60, 49, 44, 97, 42, > 49, 48, 48, 44, 49, 48, 48, 47, 97, 41, 125, 10, 45, 119, 104, 105, > 108, 101, 32, 123, 119, 33, 61, 36, 49, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 115, 104, 105, 102, 116, 32, 58, 32, 118, 120, 91, 37, 93, 44, > 95, 118, 121, 91, 37, 93, 44, 95, 118, 122, 91, 37, 93, 44, 95, 118, > 99, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, > 105, 102, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 100, 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 32, 118, 101, > 99, 116, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, > 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 115, 104, 105, 102, 116, 91, 48, 93, > 32, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 48, 44, 48, 32, 45, > 45, 115, 104, 105, 102, 116, 91, 48, 93, 32, 53, 48, 37, 44, 53, 48, > 37, 44, 48, 44, 48, 44, 49, 32, 45, 45, 115, 104, 105, 102, 116, 91, > 48, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 48, 44, 50, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 104, 114, 105, 110, 107, 95, 120, > 32, 58, 32, 115, 105, 122, 101, 95, 120, 62, 61, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 83, 104, 114, 105, 110, 107, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, > 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 115, 104, 114, 105, 110, 107, 95, 120, 32, 51, 48, > 10, 115, 104, 114, 105, 110, 107, 95, 120, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 83, 104, 114, 105, 110, 107, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, > 120, 105, 115, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 122, 91, 36, 62, 93, 32, 36, 49, 44, 64, 123, 36, > 62, 44, 119, 45, 36, 49, 45, 49, 125, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 104, 114, 105, > 110, 107, 95, 120, 121, 32, 58, 32, 115, 105, 122, 101, 62, 61, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, 114, 105, 110, 107, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 121, 45, 97, 120, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 104, 114, 105, 110, 107, 95, > 120, 121, 32, 51, 48, 10, 115, 104, 114, 105, 110, 107, 95, 120, 121, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 83, 104, 114, 105, 110, 107, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, > 104, 101, 32, 120, 121, 45, 97, 120, 101, 115, 32, 119, 105, 116, 104, 32, > 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 122, 91, 36, 62, 93, > 32, 36, 49, 44, 36, 49, 44, 64, 123, 36, 62, 44, 119, 45, 36, 49, > 45, 49, 125, 44, 64, 123, 36, 62, 44, 104, 45, 36, 49, 45, 49, 125, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 104, 114, 105, 110, 107, 95, 120, 121, 122, 32, 58, 32, > 115, 105, 122, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 83, 104, 114, 105, 110, 107, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, > 101, 32, 120, 121, 122, 45, 97, 120, 101, 115, 46, 10, 115, 104, 114, 105, > 110, 107, 95, 120, 121, 122, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 49, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 83, 104, 114, 105, 110, 107, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 121, 122, 45, 97, 120, > 101, 115, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 122, 91, 36, 62, 93, 32, 36, 49, 44, 36, 49, 44, 36, > 49, 44, 64, 123, 36, 62, 44, 119, 45, 36, 49, 45, 49, 125, 44, 64, > 123, 36, 62, 44, 104, 45, 36, 49, 45, 49, 125, 44, 64, 123, 36, 62, > 44, 100, 45, 36, 49, 45, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 104, 114, 105, 110, > 107, 95, 121, 32, 58, 32, 115, 105, 122, 101, 95, 121, 62, 61, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, 114, 105, 110, 107, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, 120, 105, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 115, 104, 114, 105, 110, 107, 95, 121, > 32, 51, 48, 10, 115, 104, 114, 105, 110, 107, 95, 121, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 83, 104, 114, 105, 110, 107, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, > 121, 45, 97, 120, 105, 115, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, > 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 122, 91, 36, 62, 93, 32, 48, 44, 36, > 49, 44, 49, 48, 48, 37, 44, 64, 123, 36, 62, 44, 104, 45, 36, 49, > 45, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 115, 104, 114, 105, 110, 107, 95, 122, 32, 58, > 32, 115, 105, 122, 101, 95, 122, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 83, 104, 114, 105, 110, 107, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 46, 10, 115, 104, 114, > 105, 110, 107, 95, 122, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 49, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 83, 104, 114, 105, 110, 107, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, > 108, 111, 110, 103, 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 32, > 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 122, 91, 36, 62, 93, 32, 48, 44, 48, 44, 36, 49, 44, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 64, 123, 36, 62, 44, 100, 45, 36, 49, > 45, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 115, 108, 105, 99, 101, 115, 32, 58, 32, 123, > 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, 124, 32, 122, 48, 91, 37, > 93, 32, 125, 44, 95, 123, 32, 91, 105, 109, 97, 103, 101, 49, 93, 32, > 124, 32, 122, 49, 91, 37, 93, 32, 125, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 75, 101, 101, 112, 32, 111, 110, > 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 108, 105, > 99, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 105, 114, 105, 99, 104, 108, 101, 116, 32, 98, 111, 117, 110, 100, > 97, 114, 121, 32, 105, 115, 32, 117, 115, 101, 100, 32, 119, 104, 101, 110, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 108, 105, 99, 101, > 115, 32, 97, 114, 101, 32, 111, 117, 116, 32, 111, 102, 32, 114, 97, 110, > 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 115, 111, 114, 116, 32, > 58, 32, 95, 111, 114, 100, 101, 114, 105, 110, 103, 61, 123, 32, 43, 32, > 124, 32, 45, 32, 125, 44, 95, 97, 120, 105, 115, 61, 123, 32, 120, 32, > 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, 114, > 116, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, > 97, 120, 105, 115, 39, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 44, 32, 116, 104, 101, 32, 115, 111, 114, 116, 105, 110, 103, 32, > 105, 115, 32, 100, 111, 110, 101, 32, 97, 99, 99, 111, 114, 100, 105, 110, > 103, 32, 116, 111, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 111, 102, > 32, 116, 104, 101, 32, 102, 105, 114, 115, 116, 32, 99, 111, 108, 117, 109, > 110, 47, 114, 111, 119, 47, 115, 108, 105, 99, 101, 47, 99, 104, 97, 110, > 110, 101, 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 114, 100, 101, 114, > 105, 110, 103, 61, 43, 39, 32, 97, 110, 100, 32, 39, 97, 120, 105, 115, > 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 54, 52, 32, 45, 114, 97, > 110, 100, 32, 48, 44, 49, 48, 48, 32, 45, 45, 115, 111, 114, 116, 32, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, > 48, 48, 44, 51, 48, 48, 44, 51, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, 112, 108, > 105, 116, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 115, 112, 108, 105, 116, 32, 58, 32, 123, 32, 120, 32, 124, 32, > 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 46, 46, 123, 32, 120, > 32, 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 44, 95, > 110, 98, 95, 112, 97, 114, 116, 115, 32, 58, 32, 107, 101, 101, 112, 95, > 115, 112, 108, 105, 116, 116, 105, 110, 103, 95, 118, 97, 108, 117, 101, 115, > 61, 123, 32, 43, 32, 124, 32, 45, 32, 125, 44, 118, 97, 108, 117, 101, > 49, 44, 118, 97, 108, 117, 101, 50, 44, 46, 46, 46, 32, 58, 32, 40, > 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 83, 112, 108, 105, 116, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 101, 105, > 116, 104, 101, 114, 32, 97, 108, 111, 110, 103, 32, 97, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 120, 105, 115, 44, 32, 111, 114, 32, > 114, 101, 103, 97, 114, 100, 105, 110, 103, 32, 116, 111, 32, 97, 32, 115, > 101, 113, 117, 101, 110, 99, 101, 32, 111, 102, 32, 115, 99, 97, 108, 97, > 114, 32, 118, 97, 108, 117, 101, 115, 44, 32, 111, 114, 32, 97, 115, 32, > 97, 32, 115, 101, 116, 32, 111, 102, 32, 99, 111, 110, 115, 116, 97, 110, > 116, 32, 115, 117, 98, 45, 118, 101, 99, 116, 111, 114, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 115, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 110, 98, 95, 112, 97, 114, 116, 115, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 48, 61, 109, 97, 120, 105, 109, 117, 109, 32, 115, 112, > 108, 105, 116, 32, 124, 32, 62, 48, 61, 115, 112, 108, 105, 116, 32, 105, > 110, 32, 78, 32, 112, 97, 114, 116, 115, 32, 124, 32, 60, 48, 61, 115, > 112, 108, 105, 116, 32, 105, 110, 32, 112, 97, 114, 116, 115, 32, 111, 102, > 32, 115, 105, 122, 101, 32, 45, 78, 32, 125, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 58, 32, 39, 110, 98, 95, 112, 97, 114, 116, 115, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 121, 44, 51, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 120, 44, 45, 49, > 50, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 44, > 50, 48, 44, 49, 44, 49, 44, 34, 49, 44, 50, 44, 51, 44, 52, 34, > 32, 45, 45, 115, 112, 108, 105, 116, 32, 45, 44, 50, 44, 51, 32, 45, > 97, 112, 112, 101, 110, 100, 91, 49, 45, 45, 49, 93, 32, 121, 10, 35, > 64, 103, 109, 105, 99, 32, 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, > 115, 32, 58, 32, 77, 33, 61, 48, 44, 95, 78, 33, 61, 48, 44, 95, > 105, 115, 95, 104, 111, 109, 111, 103, 101, 110, 101, 111, 117, 115, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 83, 112, 108, 105, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 97, 32, 77, 120, 78, > 32, 97, 114, 114, 97, 121, 32, 111, 102, 32, 116, 105, 108, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 77, 32, 111, > 114, 32, 78, 32, 105, 115, 32, 110, 101, 103, 97, 116, 105, 118, 101, 44, > 32, 105, 116, 32, 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 116, > 104, 101, 32, 116, 105, 108, 101, 32, 115, 105, 122, 101, 32, 105, 110, 115, > 116, 101, 97, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 78, 61, 77, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 104, 111, 109, > 111, 103, 101, 110, 101, 111, 117, 115, 61, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 108, 111, 99, 97, 108, 32, 45, 115, 112, 108, 105, 116, > 95, 116, 105, 108, 101, 115, 32, 53, 44, 52, 32, 45, 98, 108, 117, 114, > 32, 51, 44, 48, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 55, 48, > 48, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, > 52, 44, 53, 32, 45, 101, 110, 100, 108, 111, 99, 97, 108, 10, 115, 112, > 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 48, 125, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 83, 112, 108, 105, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, > 115, 32, 97, 32, 36, 49, 120, 36, 50, 32, 97, 114, 114, 97, 121, 32, > 111, 102, 32, 104, 111, 109, 111, 103, 101, 110, 101, 111, 117, 115, 32, 116, > 105, 108, 101, 115, 46, 34, 10, 45, 101, 108, 115, 101, 32, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 83, 112, 108, 105, 116, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 97, 115, 32, 97, 32, 36, 49, 120, 36, 50, 32, 97, > 114, 114, 97, 121, 32, 111, 102, 32, 116, 105, 108, 101, 115, 46, 34, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 32, 45, 115, > 32, 121, 44, 36, 50, 32, 45, 115, 32, 120, 44, 36, 49, 32, 45, 105, > 102, 32, 36, 51, 32, 45, 114, 32, 91, 48, 93, 44, 91, 48, 93, 44, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 121, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 117, 110, 114, 111, 108, 108, 39, 46, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 117, 110, > 114, 111, 108, 108, 32, 58, 32, 95, 97, 120, 105, 115, 61, 123, 32, 120, > 32, 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 85, 110, > 114, 111, 108, 108, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 121, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, 120, 105, 115, > 61, 121, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 40, 49, 44, 50, 44, 51, 59, 52, 44, 53, 44, 54, 59, 55, 44, 56, > 44, 57, 41, 32, 45, 45, 117, 110, 114, 111, 108, 108, 32, 121, 10, 35, > 64, 103, 109, 105, 99, 32, 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, > 97, 114, 116, 32, 58, 32, 119, 105, 100, 116, 104, 44, 95, 104, 101, 105, > 103, 104, 116, 44, 95, 100, 101, 112, 116, 104, 44, 95, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, 97, 110, 105, 115, 111, > 116, 114, 111, 112, 121, 61, 91, 48, 44, 49, 93, 44, 115, 104, 97, 114, > 112, 101, 110, 105, 110, 103, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 85, 112, 115, 99, 97, 108, 101, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, > 97, 110, 32, 101, 100, 103, 101, 45, 112, 114, 101, 115, 101, 114, 118, 105, > 110, 103, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 104, 101, 105, 103, 104, 116, 61, 49, > 48, 48, 37, 39, 44, 32, 39, 100, 101, 112, 116, 104, 61, 49, 48, 48, > 37, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, > 50, 39, 44, 32, 39, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 61, > 48, 46, 52, 39, 32, 97, 110, 100, 32, 39, 115, 104, 97, 114, 112, 101, > 110, 105, 110, 103, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 49, 48, 48, 32, 45, 45, > 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, 97, 114, 116, 32, 53, 48, > 48, 37, 44, 53, 48, 48, 37, 32, 45, 97, 112, 112, 101, 110, 100, 32, > 120, 10, 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, 97, 114, 116, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 48, 48, 37, > 125, 44, 36, 123, 51, 61, 49, 48, 48, 37, 125, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 52, 61, 50, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 53, 61, 48, 46, 52, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 53, 60, 61, 49, 32, 38, 38, 32, 36, 123, 54, 61, 49, 48, 125, > 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 85, 112, > 115, 99, 97, 108, 101, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, > 32, 36, 49, 120, 36, 50, 120, 36, 51, 44, 32, 119, 105, 116, 104, 32, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 52, 44, 32, 97, > 110, 105, 115, 111, 116, 114, 111, 112, 121, 32, 36, 53, 32, 97, 110, 100, > 32, 115, 104, 97, 114, 112, 101, 110, 105, 110, 103, 32, 36, 54, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, > 123, 104, 125, 10, 45, 45, 114, 91, 45, 49, 93, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 44, 49, 44, 48, 10, 45, 105, 102, 32, 123, 119, 60, > 36, 119, 34, 32, 38, 38, 32, 34, 104, 60, 36, 104, 125, 10, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 44, 49, 48, 48, 37, 44, 50, 10, 45, 101, 108, > 115, 101, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 100, 105, 102, > 102, 117, 115, 105, 111, 110, 116, 101, 110, 115, 111, 114, 115, 32, 48, 44, > 36, 53, 44, 49, 46, 50, 44, 49, 46, 50, 10, 45, 114, 91, 45, 50, > 44, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 49, 48, > 48, 37, 44, 53, 10, 45, 115, 109, 111, 111, 116, 104, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 36, 52, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 36, > 54, 44, 49, 48, 34, 44, 51, 44, 48, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 114, 112, 32, 58, 32, > 91, 119, 97, 114, 112, 105, 110, 103, 95, 102, 105, 101, 108, 100, 93, 44, > 95, 105, 115, 95, 114, 101, 108, 97, 116, 105, 118, 101, 61, 123, 32, 48, > 32, 124, 32, 49, 32, 125, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, > 95, 110, 98, 95, 102, 114, 97, 109, 101, 115, 62, 48, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 87, 97, 114, 112, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, > 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 32, 102, 105, 101, 108, > 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 110, 101, 97, 114, 101, 115, 116, 45, 110, > 101, 105, 103, 104, 98, 111, 114, 32, 124, 32, 49, 61, 108, 105, 110, 101, > 97, 114, 32, 124, 32, 50, 61, 99, 117, 98, 105, 99, 32, 125, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, > 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, > 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, > 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, > 115, 95, 114, 101, 108, 97, 116, 105, 118, 101, 61, 48, 39, 44, 32, 39, > 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 49, 39, > 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 110, 98, 95, 102, 114, 97, 109, 101, 115, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 50, 44, 39, 88, 61, 120, 47, 119, 45, 48, 46, 53, 59, > 89, 61, 121, 47, 104, 45, 48, 46, 53, 59, 82, 61, 40, 88, 42, 88, > 43, 89, 42, 89, 41, 94, 48, 46, 53, 59, 65, 61, 97, 116, 97, 110, > 50, 40, 89, 44, 88, 41, 59, 49, 51, 48, 42, 82, 42, 105, 102, 40, > 99, 61, 61, 48, 44, 99, 111, 115, 40, 52, 42, 65, 41, 44, 115, 105, > 110, 40, 56, 42, 65, 41, 41, 39, 32, 45, 119, 97, 114, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 48, 32, 45, 113, > 117, 105, 118, 101, 114, 91, 45, 49, 93, 32, 91, 45, 49, 93, 44, 49, > 48, 44, 48, 46, 50, 44, 49, 44, 49, 44, 49, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 58, 32, 70, 105, 108, 116, 101, 114, 105, 110, > 103, 10, 35, 64, 103, 109, 105, 99, 32, 98, 97, 110, 100, 112, 97, 115, > 115, 32, 58, 32, 95, 109, 105, 110, 95, 102, 114, 101, 113, 91, 37, 93, > 44, 95, 109, 97, 120, 95, 102, 114, 101, 113, 91, 37, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 98, 97, 110, > 100, 112, 97, 115, 115, 32, 102, 105, 108, 116, 101, 114, 32, 116, 111, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 109, 105, 110, 95, 102, > 114, 101, 113, 61, 48, 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 95, > 102, 114, 101, 113, 61, 50, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 98, 97, 110, 100, 112, 97, 115, 115, 32, 49, 37, 44, 51, 37, 10, > 98, 97, 110, 100, 112, 97, 115, 115, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 48, 125, 44, 36, 123, 50, 61, 50, 48, 37, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, > 98, 97, 110, 100, 112, 97, 115, 115, 32, 102, 105, 108, 116, 101, 114, 32, > 91, 36, 49, 44, 36, 50, 93, 32, 116, 111, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 102, 91, 45, 49, > 93, 32, 34, 115, 113, 114, 116, 40, 40, 120, 47, 119, 45, 48, 46, 53, > 41, 94, 50, 32, 43, 32, 40, 121, 47, 104, 45, 48, 46, 53, 41, 94, > 50, 32, 43, 32, 40, 122, 47, 100, 45, 48, 46, 53, 41, 94, 50, 41, > 34, 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 116, 50, > 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 32, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, > 44, 123, 105, 110, 116, 40, 104, 47, 50, 41, 125, 44, 53, 48, 37, 44, > 48, 44, 50, 10, 45, 102, 102, 116, 91, 45, 50, 93, 32, 45, 42, 91, > 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 105, 108, 97, 116, 101, 114, > 97, 108, 32, 58, 32, 91, 103, 117, 105, 100, 101, 93, 44, 115, 116, 100, > 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 95, 115, 62, 48, 91, 37, > 93, 44, 115, 116, 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 95, > 114, 91, 37, 93, 62, 48, 32, 58, 32, 115, 116, 100, 95, 118, 97, 114, > 105, 97, 116, 105, 111, 110, 95, 115, 62, 48, 91, 37, 93, 44, 115, 116, > 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 95, 114, 91, 37, 93, > 62, 48, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 97, 110, 105, 115, 111, 116, > 114, 111, 112, 105, 99, 32, 40, 101, 118, 101, 110, 116, 117, 97, 108, 108, > 121, 32, 106, 111, 105, 110, 116, 47, 99, 114, 111, 115, 115, 41, 32, 98, > 105, 108, 97, 116, 101, 114, 97, 108, 32, 102, 105, 108, 116, 101, 114, 105, > 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, > 97, 32, 103, 117, 105, 100, 101, 32, 105, 109, 97, 103, 101, 32, 105, 115, > 32, 112, 114, 111, 118, 105, 100, 101, 100, 44, 32, 105, 116, 32, 105, 115, > 32, 117, 115, 101, 100, 32, 102, 111, 114, 32, 99, 111, 109, 112, 117, 116, > 105, 110, 103, 32, 116, 104, 101, 32, 115, 109, 111, 111, 116, 104, 105, 110, > 103, 32, 103, 101, 111, 109, 101, 116, 114, 121, 32, 105, 110, 32, 116, 104, > 101, 32, 99, 114, 111, 115, 115, 32, 98, 105, 108, 97, 116, 101, 114, 97, > 108, 32, 102, 105, 108, 116, 101, 114, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 32, 103, 117, 105, 100, 101, 32, 105, 109, 97, 103, 101, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 115, 97, 109, 101, 32, 120, 121, 122, 45, 115, 105, 122, 101, 32, 97, 115, > 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 91, 48, 93, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 53, 32, 45, 98, 105, 108, 97, 116, 101, > 114, 97, 108, 91, 45, 49, 93, 32, 49, 48, 44, 49, 48, 32, 45, 100, > 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 98, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 98, 108, 117, 114, 39, 46, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, 114, > 32, 58, 32, 115, 116, 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, > 62, 61, 48, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 44, 95, 107, 101, > 114, 110, 101, 108, 61, 123, 32, 48, 61, 113, 117, 97, 115, 105, 45, 103, > 97, 117, 115, 115, 105, 97, 110, 32, 40, 102, 97, 115, 116, 101, 114, 41, > 32, 124, 32, 49, 61, 103, 97, 117, 115, 115, 105, 97, 110, 32, 125, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, > 108, 117, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 97, 32, 113, 117, 97, 115, 105, 45, 103, > 97, 117, 115, 115, 105, 97, 110, 32, 111, 114, 32, 103, 97, 117, 115, 115, > 105, 97, 110, 32, 102, 105, 108, 116, 101, 114, 32, 40, 114, 101, 99, 117, > 114, 115, 105, 118, 101, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 97, > 116, 105, 111, 110, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 98, 39, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 49, 39, 32, 97, 110, 100, 32, 39, 107, 101, 114, 110, 101, 108, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, > 53, 44, 48, 32, 45, 45, 98, 108, 117, 114, 91, 48, 93, 32, 53, 44, > 49, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, 114, 95, 97, 110, > 103, 117, 108, 97, 114, 32, 58, 32, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 91, 37, 93, 44, 95, 99, 120, 44, 95, 99, 121, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 97, 110, 103, 117, > 108, 97, 114, 32, 98, 108, 117, 114, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 95, 97, > 110, 103, 117, 108, 97, 114, 32, 50, 37, 10, 98, 108, 117, 114, 95, 97, > 110, 103, 117, 108, 97, 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, 53, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, > 97, 110, 103, 117, 108, 97, 114, 32, 98, 108, 117, 114, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 32, 97, 110, 100, 32, 99, > 101, 110, 116, 101, 114, 32, 40, 36, 50, 44, 36, 51, 41, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 101, 117, 99, 108, 105, 100, 101, 97, 110, 50, > 112, 111, 108, 97, 114, 32, 36, 50, 44, 36, 51, 44, 49, 46, 51, 44, > 49, 32, 45, 101, 120, 112, 97, 110, 100, 95, 121, 32, 49, 54, 44, 50, > 32, 45, 98, 108, 117, 114, 95, 121, 32, 36, 49, 32, 45, 115, 104, 114, > 105, 110, 107, 95, 121, 32, 49, 54, 32, 45, 112, 111, 108, 97, 114, 50, > 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 36, 50, 44, 36, 51, 44, > 49, 46, 51, 44, 49, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 49, 91, 37, 93, 44, 95, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 50, 91, 37, 93, 44, 95, 97, 110, > 103, 108, 101, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, > 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, > 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 108, 105, 110, 101, 97, 114, 32, > 98, 108, 117, 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 97, 110, 103, 108, 101, 32, 97, 110, > 100, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 50, 61, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, > 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 95, 108, > 105, 110, 101, 97, 114, 32, 49, 48, 44, 48, 44, 52, 53, 10, 98, 108, > 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, > 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 108, 105, 110, 101, 97, 114, 32, 98, 108, 117, > 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 97, 110, 103, 108, 101, 32, 36, 51, 32, 100, 101, 103, 46, > 32, 97, 110, 100, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 115, 32, > 40, 36, 49, 44, 36, 50, 41, 46, 34, 10, 45, 118, 32, 45, 10, 115, > 116, 100, 49, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, 109, 97, > 120, 40, 119, 44, 104, 41, 44, 36, 49, 41, 125, 10, 115, 116, 100, 50, > 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, > 110, 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 109, 97, 120, 40, 119, > 44, 104, 41, 44, 36, 50, 41, 125, 10, 115, 116, 100, 77, 61, 123, 114, > 111, 117, 110, 100, 40, 49, 46, 50, 53, 42, 109, 97, 120, 40, 36, 115, > 116, 100, 49, 44, 36, 115, 116, 100, 50, 41, 41, 125, 10, 45, 105, 102, > 32, 123, 36, 115, 116, 100, 77, 60, 61, 48, 125, 32, 45, 114, 101, 116, > 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, 120, > 112, 97, 110, 100, 95, 120, 121, 32, 36, 115, 116, 100, 77, 44, 123, 36, > 52, 33, 61, 48, 125, 10, 123, 50, 42, 36, 115, 116, 100, 77, 125, 44, > 123, 50, 42, 36, 115, 116, 100, 77, 125, 32, 45, 103, 97, 117, 115, 115, > 105, 97, 110, 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, > 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 91, > 45, 49, 93, 10, 45, 99, 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, > 116, 32, 45, 115, 104, 114, 105, 110, 107, 95, 120, 121, 32, 36, 115, 116, > 100, 77, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, 114, 95, > 114, 97, 100, 105, 97, 108, 32, 58, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 91, 37, 93, 44, 95, 99, 120, 44, 95, 99, 121, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 114, 97, 100, > 105, 97, 108, 32, 98, 108, 117, 114, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 95, 114, > 97, 100, 105, 97, 108, 32, 50, 37, 10, 98, 108, 117, 114, 95, 114, 97, > 100, 105, 97, 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, > 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, 53, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 114, 97, > 100, 105, 97, 108, 32, 98, 108, 117, 114, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 32, 36, 49, 32, 97, 110, 100, 32, 99, 101, 110, 116, > 101, 114, 32, 40, 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 101, 117, 99, 108, 105, 100, 101, 97, 110, 50, 112, 111, 108, > 97, 114, 32, 36, 50, 44, 36, 51, 44, 53, 44, 49, 32, 45, 98, 108, > 117, 114, 95, 120, 32, 36, 49, 32, 45, 112, 111, 108, 97, 114, 50, 101, > 117, 99, 108, 105, 100, 101, 97, 110, 32, 36, 50, 44, 36, 51, 44, 53, > 44, 49, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, > 108, 117, 114, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, 32, 58, 32, > 115, 105, 103, 109, 97, 62, 61, 48, 44, 95, 101, 100, 103, 101, 115, 62, > 48, 44, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, > 110, 103, 32, 115, 101, 108, 101, 99, 116, 105, 118, 101, 32, 103, 97, 117, > 115, 115, 105, 97, 110, 32, 115, 99, 97, 108, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 103, 109, 97, 61, 53, 39, > 44, 32, 39, 101, 100, 103, 101, 115, 61, 48, 46, 53, 39, 32, 97, 110, > 100, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 53, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 110, 111, 105, 115, 101, 32, 50, 48, 32, > 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 32, 45, 45, 108, 111, 99, > 97, 108, 91, 45, 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 52, > 32, 45, 98, 108, 117, 114, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, > 32, 44, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, 111, 99, > 97, 108, 10, 98, 108, 117, 114, 95, 115, 101, 108, 101, 99, 116, 105, 118, > 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 48, 46, 53, > 125, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, > 51, 61, 53, 125, 41, 32, 38, 38, 32, 36, 51, 62, 48, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 66, 108, 117, 114, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 36, 51, 32, 115, 101, > 108, 101, 99, 116, 105, 118, 101, 32, 103, 97, 117, 115, 115, 105, 97, 110, > 32, 115, 99, 97, 108, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 105, > 103, 109, 97, 32, 36, 49, 32, 97, 110, 100, 32, 101, 100, 103, 101, 115, > 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, > 64, 123, 48, 44, 110, 125, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, > 116, 95, 110, 111, 114, 109, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, > 45, 94, 91, 45, 49, 93, 32, 123, 45, 109, 97, 120, 40, 48, 46, 48, > 49, 44, 36, 50, 41, 125, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, > 91, 45, 49, 93, 32, 123, 36, 51, 43, 49, 125, 44, 48, 44, 49, 32, > 45, 109, 105, 110, 91, 45, 49, 93, 32, 123, 36, 51, 45, 49, 125, 32, > 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 47, 91, 45, > 49, 93, 32, 49, 48, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 51, 32, 45, 45, 61, 61, 91, 45, 49, 93, 32, 123, 36, 62, 47, 49, > 48, 48, 125, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, > 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 98, 91, 45, 50, 93, > 32, 123, 36, 49, 47, 40, 36, 51, 43, 49, 41, 125, 32, 45, 100, 111, > 110, 101, 10, 45, 114, 109, 91, 45, 50, 93, 32, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, > 114, 95, 120, 32, 58, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 91, > 37, 93, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, > 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 95, 120, 32, > 54, 10, 98, 108, 117, 114, 95, 120, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 66, 108, 117, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 44, 32, > 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, 49, 32, 97, 110, > 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, > 44, 110, 101, 117, 109, 97, 110, 110, 44, 100, 105, 114, 105, 99, 104, 108, > 101, 116, 125, 34, 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, 99, 111, > 110, 100, 105, 116, 105, 111, 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 49, 44, 48, 44, 120, 44, > 36, 50, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, > 108, 117, 114, 95, 120, 121, 32, 58, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 95, 120, 91, 37, 93, 44, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 95, 121, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 88, 32, 97, 110, 100, 32, 89, 32, 97, 120, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 117, 110, > 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 98, 108, 117, 114, 95, 120, 121, 32, 54, 10, 98, 108, 117, 114, 95, 120, > 121, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 36, 49, > 125, 44, 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 66, 108, 117, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, > 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 121, 45, 97, 120, 101, 115, > 44, 32, 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, 49, 32, > 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, > 36, 50, 44, 110, 101, 117, 109, 97, 110, 110, 44, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 125, 34, 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, > 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 49, 44, 48, 44, > 120, 44, 36, 51, 32, 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 50, > 44, 48, 44, 121, 44, 36, 51, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 98, 108, 117, 114, 95, 120, 121, 122, 32, 58, 32, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 95, 120, 91, 37, 93, 44, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 95, 121, 91, 37, 93, 44, 97, 109, 112, > 108, 105, 116, 117, 100, 101, 95, 122, 44, 95, 98, 111, 117, 110, 100, 97, > 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, > 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, > 110, 103, 32, 116, 104, 101, 32, 88, 44, 32, 89, 32, 97, 110, 100, 32, > 90, 32, 97, 120, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 98, 108, > 117, 114, 95, 120, 121, 122, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, > 108, 117, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, > 103, 32, 116, 104, 101, 32, 120, 121, 122, 45, 97, 120, 101, 115, 44, 32, > 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, 49, 32, 97, 110, > 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, > 44, 110, 101, 117, 109, 97, 110, 110, 44, 100, 105, 114, 105, 99, 104, 108, > 101, 116, 125, 34, 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, 99, 111, > 110, 100, 105, 116, 105, 111, 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 49, 44, 48, 44, 120, 44, > 36, 52, 32, 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 50, 44, 48, > 44, 121, 44, 36, 52, 32, 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, > 51, 44, 48, 44, 122, 44, 36, 52, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 98, 108, 117, 114, 95, 121, 32, 58, 32, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 91, 37, 93, 62, 61, 48, 44, 95, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, > 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, > 110, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, 117, > 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, 120, > 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 108, 117, 114, 95, 121, 32, 54, 10, 98, 108, 117, 114, 95, 121, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, 108, 117, 114, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, > 121, 45, 97, 120, 105, 115, 44, 32, 119, 105, 116, 104, 32, 115, 105, 103, > 109, 97, 32, 36, 49, 32, 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 50, 44, 110, 101, 117, 109, 97, 110, 110, > 44, 100, 105, 114, 105, 99, 104, 108, 101, 116, 125, 34, 32, 98, 111, 117, > 110, 100, 97, 114, 121, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 100, 101, 114, 105, 99, 104, 101, > 32, 36, 49, 44, 48, 44, 121, 44, 36, 50, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, 114, 95, 122, 32, 58, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 91, 37, 93, 62, 61, 48, 44, > 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, > 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, > 97, 110, 110, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, > 108, 117, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 122, 45, > 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 98, 108, 117, 114, > 95, 122, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, 108, 117, 114, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, > 101, 32, 122, 45, 97, 120, 105, 115, 44, 32, 119, 105, 116, 104, 32, 115, > 105, 103, 109, 97, 32, 36, 49, 32, 97, 110, 100, 32, 34, 64, 123, 45, > 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 110, 101, 117, 109, 97, > 110, 110, 44, 100, 105, 114, 105, 99, 104, 108, 101, 116, 125, 34, 32, 98, > 111, 117, 110, 100, 97, 114, 121, 32, 99, 111, 110, 100, 105, 116, 105, 111, > 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 100, 101, 114, 105, 99, > 104, 101, 32, 36, 49, 44, 48, 44, 122, 44, 36, 50, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 111, 107, 101, 104, 32, 58, > 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 48, 60, > 61, 95, 100, 101, 110, 115, 105, 116, 121, 60, 61, 49, 48, 48, 44, 95, > 98, 111, 107, 101, 104, 95, 115, 105, 122, 101, 62, 48, 44, 48, 60, 61, > 95, 98, 111, 107, 101, 104, 95, 111, 117, 116, 108, 105, 110, 101, 95, 115, > 105, 122, 101, 60, 61, 49, 48, 48, 44, 95, 98, 111, 107, 101, 104, 95, > 111, 117, 116, 108, 105, 110, 101, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 44, 95, 98, 111, 107, 101, 104, 95, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 97, 32, 66, 111, 107, 101, > 104, 32, 101, 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 61, 50, 48, 48, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 61, 50, 39, 44, 32, 39, 100, 101, 110, 115, 105, 116, > 121, 61, 48, 46, 50, 39, 44, 32, 39, 98, 111, 107, 101, 104, 95, 115, > 105, 122, 101, 61, 50, 52, 39, 44, 32, 39, 98, 111, 107, 101, 104, 95, > 111, 117, 116, 108, 105, 110, 101, 95, 115, 105, 122, 101, 61, 49, 48, 39, > 44, 32, 39, 98, 111, 107, 101, 104, 95, 111, 117, 116, 108, 105, 110, 101, > 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 39, 32, 97, 110, > 100, 32, 39, 98, 111, 107, 101, 104, 95, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 61, 48, 46, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 111, 107, 101, 104, 32, 44, 10, 98, 111, 107, 101, 104, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 50, 48, 48, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 50, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 50, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 51, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, > 123, 52, 61, 50, 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 53, 61, > 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, 48, > 48, 32, 38, 38, 32, 36, 123, 54, 61, 50, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 55, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 56, 61, 48, 46, 49, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 98, 111, 107, 101, 104, > 32, 101, 102, 102, 101, 99, 116, 32, 116, 111, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 32, 36, 49, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 32, 36, 50, 44, 32, 100, 101, 110, 115, 105, 116, 121, 32, 36, 51, > 37, 44, 32, 98, 111, 107, 101, 104, 32, 115, 105, 122, 101, 32, 36, 52, > 44, 32, 98, 111, 107, 101, 104, 32, 111, 117, 116, 108, 105, 110, 101, 32, > 115, 105, 122, 101, 32, 36, 53, 32, 34, 92, 10, 34, 98, 111, 107, 101, > 104, 32, 111, 117, 116, 108, 105, 110, 101, 32, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 32, 36, 54, 32, 97, 110, 100, 32, 98, 111, 107, 101, 104, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 55, 46, 34, > 10, 45, 118, 32, 45, 10, 50, 53, 54, 44, 50, 53, 54, 32, 45, 61, > 91, 45, 49, 93, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 10, 45, > 45, 108, 116, 91, 45, 49, 93, 32, 55, 48, 37, 32, 45, 116, 50, 91, > 45, 50, 93, 32, 55, 48, 37, 44, 123, 55, 48, 45, 36, 53, 42, 55, > 48, 47, 49, 48, 48, 125, 37, 32, 45, 42, 91, 45, 50, 93, 32, 36, > 54, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 91, 45, > 49, 93, 32, 36, 52, 44, 36, 52, 44, 49, 44, 49, 44, 50, 10, 45, > 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 123, 51, > 42, 36, 55, 125, 44, 48, 32, 45, 98, 91, 45, 49, 93, 32, 36, 55, > 44, 48, 32, 45, 45, 103, 116, 91, 45, 49, 93, 32, 48, 46, 49, 32, > 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 45, 49, 93, 10, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, 44, > 45, 49, 93, 10, 45, 45, 114, 101, 109, 111, 118, 101, 95, 112, 105, 120, > 101, 108, 115, 91, 48, 93, 32, 123, 49, 48, 48, 45, 36, 51, 125, 32, > 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 48, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 36, 49, > 10, 45, 98, 91, 48, 93, 32, 36, 50, 32, 45, 43, 91, 48, 44, 45, > 49, 93, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, > 111, 109, 112, 111, 115, 101, 95, 102, 114, 101, 113, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 111, 115, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 108, 111, 119, 32, 97, 110, 100, 32, 104, 105, > 103, 104, 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 112, 97, 114, > 116, 115, 32, 105, 110, 116, 111, 32, 110, 101, 119, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 95, > 102, 114, 101, 113, 32, 50, 37, 32, 45, 109, 105, 114, 114, 111, 114, 91, > 45, 49, 93, 32, 120, 32, 45, 99, 111, 109, 112, 111, 115, 101, 95, 102, > 114, 101, 113, 10, 99, 111, 109, 112, 111, 115, 101, 95, 102, 114, 101, 113, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, > 111, 115, 101, 32, 108, 111, 119, 32, 97, 110, 100, 32, 104, 105, 103, 104, > 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 112, 97, 114, 116, 36, > 63, 32, 105, 110, 116, 111, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, > 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 43, 91, > 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 110, > 118, 111, 108, 118, 101, 32, 58, 32, 91, 109, 97, 115, 107, 93, 44, 95, > 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 111, 108, 118, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 109, 97, 115, 107, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, > 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, > 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, > 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, > 45, 52, 44, 49, 59, 48, 44, 49, 44, 48, 41, 32, 45, 99, 111, 110, > 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, > 107, 101, 101, 112, 91, 45, 50, 93, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 40, 48, > 44, 49, 44, 48, 41, 32, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, > 93, 32, 49, 51, 48, 44, 49, 44, 49, 44, 49, 44, 51, 32, 45, 45, > 99, 111, 110, 118, 111, 108, 118, 101, 91, 48, 93, 32, 91, 49, 93, 10, > 35, 64, 103, 109, 105, 99, 32, 99, 111, 110, 118, 111, 108, 118, 101, 95, > 102, 102, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, > 118, 111, 108, 118, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, > 32, 116, 104, 114, 111, 117, 103, 104, 32, 102, 111, 117, 114, 105, 101, 114, > 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 103, 97, 117, > 115, 115, 105, 97, 110, 91, 45, 49, 93, 32, 50, 48, 44, 49, 44, 52, > 53, 32, 45, 45, 99, 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, 116, > 10, 99, 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, 116, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 111, 108, 118, > 101, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 119, 111, 45, 98, 121, > 45, 116, 119, 111, 32, 116, 104, 114, 111, 117, 103, 104, 32, 102, 111, 117, > 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, > 44, 123, 36, 62, 43, 49, 125, 93, 10, 119, 50, 61, 123, 105, 110, 116, > 40, 64, 123, 48, 44, 119, 125, 47, 50, 41, 125, 32, 104, 50, 61, 123, > 105, 110, 116, 40, 64, 123, 48, 44, 104, 125, 47, 50, 41, 125, 32, 100, > 50, 61, 123, 105, 110, 116, 40, 64, 123, 48, 44, 100, 125, 47, 50, 41, > 125, 10, 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, > 91, 48, 93, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 115, 104, 105, 102, 116, > 91, 49, 93, 32, 45, 36, 119, 50, 44, 45, 36, 104, 50, 44, 45, 36, > 100, 50, 44, 48, 44, 50, 10, 45, 102, 102, 116, 91, 48, 93, 32, 45, > 102, 102, 116, 91, 50, 93, 10, 45, 45, 42, 91, 45, 52, 93, 32, 91, > 45, 49, 93, 32, 45, 45, 42, 91, 45, 52, 93, 32, 91, 45, 51, 93, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 42, 91, 45, 53, > 44, 45, 51, 93, 32, 45, 42, 91, 45, 51, 44, 45, 50, 93, 32, 45, > 45, 91, 45, 51, 44, 45, 50, 93, 10, 45, 105, 102, 102, 116, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, > 111, 114, 114, 101, 108, 97, 116, 101, 32, 58, 32, 91, 109, 97, 115, 107, > 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 114, 114, 101, 108, 97, 116, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 109, 97, 115, 107, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, > 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, > 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, > 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 40, 48, 44, 49, 44, > 48, 59, 49, 44, 45, 52, 44, 49, 59, 48, 44, 49, 44, 48, 41, 32, > 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 107, 101, 101, 112, 91, 45, 50, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 99, 114, 111, 112, 32, 52, 48, 37, 44, 52, 48, > 37, 44, 54, 48, 37, 44, 54, 48, 37, 32, 45, 45, 99, 111, 114, 114, > 101, 108, 97, 116, 101, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 49, 10, 35, 64, 103, 109, 105, 99, 32, 99, 114, 111, 115, 115, 95, 99, > 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 99, 114, 111, 115, > 115, 45, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 117, 115, > 105, 110, 103, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 115, 104, 105, 102, 116, 32, 45, 51, 48, > 44, 45, 50, 48, 32, 45, 99, 114, 111, 115, 115, 95, 99, 111, 114, 114, > 101, 108, 97, 116, 105, 111, 110, 10, 99, 114, 111, 115, 115, 95, 99, 111, > 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 99, 114, 111, > 115, 115, 45, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 117, > 115, 105, 110, 103, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, 32, > 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, > 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, > 10, 45, 110, 111, 114, 109, 32, 45, 102, 102, 116, 91, 45, 50, 93, 32, > 45, 102, 102, 116, 91, 45, 49, 93, 32, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 53, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 91, 45, 54, 93, 10, 45, 45, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 42, 91, 45, 53, 44, 45, 51, 93, 32, 45, 42, 91, > 45, 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 51, 44, 45, 50, 93, > 32, 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, > 101, 32, 105, 115, 111, 112, 104, 111, 116, 101, 32, 99, 117, 114, 118, 97, > 116, 117, 114, 101, 115, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 98, 108, 117, 114, 32, 49, 48, 32, 45, 99, 117, 114, 118, 97, 116, 117, > 114, 101, 10, 99, 117, 114, 118, 97, 116, 117, 114, 101, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, > 105, 115, 111, 112, 104, 111, 116, 101, 32, 99, 117, 114, 118, 97, 116, 117, > 114, 101, 115, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 100, 61, 61, > 49, 125, 10, 45, 45, 103, 32, 120, 121, 44, 48, 32, 45, 104, 101, 115, > 115, 105, 97, 110, 91, 45, 51, 93, 32, 120, 120, 120, 121, 121, 121, 10, > 45, 42, 91, 45, 51, 93, 32, 91, 45, 50, 93, 32, 45, 42, 91, 45, > 52, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 45, > 50, 10, 45, 43, 91, 45, 52, 44, 45, 51, 93, 32, 45, 42, 91, 45, > 51, 93, 32, 91, 45, 50, 93, 10, 45, 115, 113, 114, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 91, 45, 49, 93, 32, > 45, 43, 91, 45, 52, 44, 45, 51, 93, 10, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 49, 32, 45, > 94, 91, 45, 49, 93, 32, 49, 46, 53, 32, 45, 47, 10, 45, 101, 108, > 115, 101, 10, 45, 45, 105, 110, 110, 32, 45, 45, 103, 114, 97, 100, 105, > 101, 110, 116, 95, 110, 111, 114, 109, 91, 45, 50, 93, 32, 45, 108, 97, > 112, 108, 97, 99, 105, 97, 110, 91, 45, 51, 93, 10, 45, 45, 91, 45, > 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 49, > 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 10, 45, 45, 105, 110, 110, > 91, 45, 49, 93, 32, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 91, > 45, 50, 93, 32, 45, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 101, 98, 108, 117, 114, 32, 58, 32, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 91, 37, 93, 62, 61, 48, 44, 95, > 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, 44, 95, 100, 116, 62, 61, > 48, 44, 95, 114, 101, 103, 117, 108, 62, 61, 48, 44, 95, 114, 101, 103, > 117, 108, 95, 116, 121, 112, 101, 61, 123, 32, 48, 61, 84, 105, 107, 104, > 111, 110, 111, 118, 32, 124, 32, 49, 61, 109, 101, 97, 110, 99, 117, 114, > 118, 46, 32, 124, 32, 50, 61, 84, 86, 32, 125, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 98, 108, 117, 114, 32, 105, 109, 97, 103, > 101, 32, 117, 115, 105, 110, 103, 32, 97, 32, 114, 101, 103, 117, 108, 97, > 114, 105, 122, 101, 100, 32, 74, 97, 110, 115, 115, 111, 110, 45, 86, 97, > 110, 32, 67, 105, 116, 116, 101, 114, 116, 32, 97, 108, 103, 111, 114, 105, > 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, > 98, 95, 105, 116, 101, 114, 61, 49, 48, 39, 44, 32, 39, 100, 116, 61, > 50, 48, 39, 44, 32, 39, 114, 101, 103, 117, 108, 61, 48, 46, 55, 39, > 32, 97, 110, 100, 32, 39, 114, 101, 103, 117, 108, 95, 116, 121, 112, 101, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, > 51, 32, 45, 45, 100, 101, 98, 108, 117, 114, 32, 51, 44, 52, 48, 44, > 50, 48, 44, 48, 46, 48, 49, 10, 100, 101, 98, 108, 117, 114, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 49, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 50, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 52, 61, 48, 46, 55, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 53, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 68, 101, 98, 108, 117, 114, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 97, 32, 114, 101, > 103, 117, 108, 97, 114, 105, 122, 101, 100, 32, 74, 97, 110, 115, 115, 111, > 110, 45, 86, 97, 110, 32, 67, 105, 116, 116, 101, 114, 116, 32, 97, 108, > 103, 111, 114, 105, 116, 104, 109, 44, 32, 119, 105, 116, 104, 32, 115, 105, > 103, 109, 97, 32, 36, 49, 44, 32, 36, 50, 32, 105, 116, 101, 114, 97, > 116, 105, 111, 110, 115, 44, 32, 116, 105, 109, 101, 32, 115, 116, 101, 112, > 32, 36, 51, 32, 97, 110, 100, 32, 114, 101, 103, 117, 108, 97, 114, 105, > 122, 97, 116, 105, 111, 110, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 91, 48, 93, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 10, 45, 105, 102, 32, > 123, 36, 53, 62, 61, 50, 125, 32, 45, 45, 99, 117, 114, 118, 97, 116, > 117, 114, 101, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 53, 62, 61, 49, 125, 32, 45, 45, 105, 101, 101, 91, 45, 49, 93, 10, > 45, 101, 108, 115, 101, 32, 45, 45, 108, 97, 112, 108, 97, 99, 105, 97, > 110, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 42, 91, > 45, 49, 93, 32, 36, 52, 10, 45, 45, 98, 91, 45, 50, 93, 32, 36, > 49, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 52, 93, 10, 45, 45, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 42, 91, 45, 49, 93, 32, 123, > 36, 51, 47, 40, 48, 46, 48, 48, 48, 49, 43, 109, 97, 120, 40, 97, > 98, 115, 40, 64, 123, 45, 49, 44, 109, 125, 41, 44, 97, 98, 115, 40, > 64, 123, 45, 49, 44, 77, 125, 41, 41, 41, 125, 10, 45, 43, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 45, 50, 93, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 101, 98, 108, 117, 114, 95, 103, 111, 108, > 100, 109, 101, 105, 110, 101, 108, 32, 58, 32, 115, 105, 103, 109, 97, 62, > 61, 48, 44, 32, 95, 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, 44, > 32, 95, 97, 99, 99, 101, 108, 101, 114, 97, 116, 105, 111, 110, 62, 61, > 48, 44, 32, 95, 107, 101, 114, 110, 101, 108, 95, 116, 121, 112, 101, 61, > 123, 32, 48, 61, 113, 117, 97, 115, 105, 45, 103, 97, 117, 115, 115, 105, > 97, 110, 32, 40, 102, 97, 115, 116, 101, 114, 41, 32, 124, 32, 49, 61, > 103, 97, 117, 115, 115, 105, 97, 110, 32, 125, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 98, 108, 117, 114, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, 110, > 103, 32, 71, 111, 108, 100, 45, 77, 101, 105, 110, 101, 108, 32, 97, 108, > 103, 111, 114, 105, 116, 104, 109, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 110, 98, 95, 105, 116, 101, 114, 61, 56, 39, 44, 32, 39, 97, > 99, 99, 101, 108, 101, 114, 97, 116, 105, 111, 110, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 107, 101, 114, 110, 101, 108, 95, 116, 121, 112, 101, 61, > 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, > 49, 32, 45, 45, 100, 101, 98, 108, 117, 114, 95, 103, 111, 108, 100, 109, > 101, 105, 110, 101, 108, 91, 45, 49, 93, 32, 49, 10, 100, 101, 98, 108, > 117, 114, 95, 103, 111, 108, 100, 109, 101, 105, 110, 101, 108, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 50, 61, 56, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 51, 61, 49, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, > 101, 98, 108, 117, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 117, 115, > 105, 110, 103, 32, 71, 111, 108, 100, 45, 77, 101, 105, 110, 101, 108, 32, > 97, 108, 103, 111, 114, 105, 116, 104, 109, 44, 32, 119, 105, 116, 104, 32, > 115, 105, 103, 109, 97, 32, 36, 49, 44, 32, 36, 50, 32, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 115, 44, 32, 97, 99, 99, 101, 108, 101, 114, > 97, 116, 105, 111, 110, 32, 36, 51, 32, 97, 110, 100, 32, 34, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 52, 44, 34, 34, 44, 113, > 117, 97, 115, 105, 45, 125, 34, 103, 97, 117, 115, 115, 105, 97, 110, 32, > 107, 101, 114, 110, 101, 108, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 91, 48, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 10, 45, > 45, 98, 91, 45, 49, 93, 32, 36, 49, 44, 49, 44, 36, 52, 32, 45, > 45, 47, 91, 48, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, > 32, 45, 94, 91, 45, 49, 93, 32, 36, 51, 32, 45, 42, 91, 45, 49, > 44, 45, 50, 93, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, 98, 108, 117, 114, > 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, 99, 121, 32, > 58, 32, 115, 105, 103, 109, 97, 62, 61, 48, 44, 32, 110, 98, 95, 105, > 116, 101, 114, 62, 61, 48, 44, 32, 95, 107, 101, 114, 110, 101, 108, 95, > 116, 121, 112, 101, 61, 123, 32, 48, 61, 113, 117, 97, 115, 105, 45, 103, > 97, 117, 115, 115, 105, 97, 110, 32, 40, 102, 97, 115, 116, 101, 114, 41, > 32, 124, 32, 49, 61, 103, 97, 117, 115, 115, 105, 97, 110, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 98, 108, 117, 114, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 117, 115, 105, 110, 103, 32, 82, 105, 99, 104, 97, 114, 100, 115, 111, > 110, 45, 76, 117, 99, 121, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 105, > 116, 101, 114, 61, 53, 48, 39, 32, 97, 110, 100, 32, 39, 107, 101, 114, > 110, 101, 108, 95, 116, 121, 112, 101, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 98, 108, 117, 114, 32, 49, 32, 45, 45, 100, 101, 98, > 108, 117, 114, 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, > 99, 121, 91, 45, 49, 93, 32, 49, 10, 100, 101, 98, 108, 117, 114, 95, > 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, 99, 121, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 53, 48, 125, 62, 61, 48, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 68, 101, 98, 108, 117, 114, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 117, 115, 105, 110, 103, 32, 82, 105, 99, 104, 97, 114, 100, > 115, 111, 110, 45, 76, 117, 99, 121, 32, 97, 108, 103, 111, 114, 105, 116, > 104, 109, 44, 32, 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, > 49, 44, 32, 36, 50, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, > 32, 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 33, 36, 51, 44, 34, 34, 44, 113, 117, 97, 115, 105, 45, 125, 34, 103, > 97, 117, 115, 115, 105, 97, 110, 32, 107, 101, 114, 110, 101, 108, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 91, 48, 93, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 50, 10, 45, 45, 98, 91, 45, 49, 93, 32, 36, > 49, 44, 49, 44, 123, 36, 51, 33, 61, 48, 125, 32, 45, 45, 47, 91, > 48, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 98, > 91, 45, 49, 93, 32, 36, 49, 44, 49, 44, 123, 36, 51, 33, 61, 48, > 125, 32, 45, 42, 91, 45, 49, 44, 45, 50, 93, 10, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 48, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 101, 99, 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, 116, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 99, 111, 110, 118, 111, > 108, 118, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, 32, 116, > 104, 114, 111, 117, 103, 104, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, > 114, 97, 110, 115, 102, 111, 114, 109, 115, 46, 10, 100, 101, 99, 111, 110, > 118, 111, 108, 118, 101, 95, 102, 102, 116, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 68, 101, 99, 111, 110, 118, 111, 108, 118, 101, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 116, 119, 111, 45, 98, 121, 45, 116, > 119, 111, 32, 116, 104, 114, 111, 117, 103, 104, 32, 102, 111, 117, 114, 105, > 101, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, > 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, > 36, 62, 43, 49, 125, 93, 10, 119, 50, 61, 123, 105, 110, 116, 40, 64, > 123, 48, 44, 119, 125, 47, 50, 41, 125, 32, 104, 50, 61, 123, 105, 110, > 116, 40, 64, 123, 48, 44, 104, 125, 47, 50, 41, 125, 32, 100, 50, 61, > 123, 105, 110, 116, 40, 64, 123, 48, 44, 100, 125, 47, 50, 41, 125, 10, > 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, 91, 48, > 93, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 44, > 48, 46, 53, 44, 48, 46, 53, 32, 45, 115, 104, 105, 102, 116, 91, 49, > 93, 32, 45, 36, 119, 50, 44, 45, 36, 104, 50, 44, 45, 36, 100, 50, > 44, 48, 44, 50, 10, 45, 102, 102, 116, 91, 48, 93, 32, 45, 102, 102, > 116, 91, 49, 93, 10, 45, 45, 115, 113, 114, 91, 45, 50, 93, 32, 45, > 45, 115, 113, 114, 91, 45, 50, 93, 32, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 53, 10, 45, > 45, 42, 91, 45, 52, 93, 32, 91, 45, 51, 93, 10, 45, 45, 42, 91, > 45, 54, 93, 32, 91, 45, 51, 93, 10, 45, 45, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 42, 91, 45, 54, 44, 45, 52, 93, 10, 45, 42, 91, > 45, 52, 44, 45, 51, 93, 10, 45, 43, 91, 45, 52, 44, 45, 51, 93, > 10, 45, 47, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 47, 91, > 45, 51, 44, 45, 50, 93, 10, 45, 105, 102, 102, 116, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, 105, > 110, 116, 101, 114, 108, 97, 99, 101, 32, 58, 32, 95, 109, 101, 116, 104, > 111, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 105, 110, 116, 101, 114, 108, 97, 99, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 40, 39, 109, 101, 116, 104, 111, 100, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 115, 116, 97, 110, 100, 97, 114, 100, 32, > 111, 114, 32, 49, 61, 109, 111, 116, 105, 111, 110, 45, 99, 111, 109, 112, > 101, 110, 115, 97, 116, 101, 100, 32, 125, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 58, 32, 39, 109, 101, 116, 104, 111, 100, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 114, 111, 116, 97, 116, 101, 32, 51, 44, > 49, 44, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 114, 101, 115, > 105, 122, 101, 32, 49, 48, 48, 37, 44, 53, 48, 37, 32, 45, 114, 101, > 115, 105, 122, 101, 32, 49, 48, 48, 37, 44, 50, 48, 48, 37, 44, 49, > 44, 51, 44, 52, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 97, 100, 100, 32, 45, 45, 100, 101, 105, 110, 116, > 101, 114, 108, 97, 99, 101, 32, 49, 10, 100, 101, 105, 110, 116, 101, 114, > 108, 97, 99, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 101, 105, > 110, 116, 101, 114, 108, 97, 99, 101, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 119, 105, 116, 104, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, > 43, 33, 36, 49, 44, 109, 111, 116, 105, 111, 110, 45, 99, 111, 109, 112, > 101, 110, 115, 97, 116, 101, 100, 44, 115, 116, 97, 110, 100, 97, 114, 100, > 125, 34, 32, 109, 101, 116, 104, 111, 100, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 10, 45, 115, > 32, 121, 32, 45, 97, 91, 48, 45, 45, 49, 58, 50, 93, 32, 121, 32, > 45, 97, 91, 94, 48, 93, 32, 121, 32, 45, 114, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 48, 32, 45, 114, 32, 49, 48, 48, 37, 44, 50, > 48, 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, 53, 10, 45, 105, 102, > 32, 123, 36, 49, 33, 61, 48, 125, 32, 45, 45, 100, 105, 115, 112, 108, > 97, 99, 101, 109, 101, 110, 116, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 48, 46, 48, 53, 32, 45, 119, 97, 114, 112, 91, 45, 51, 93, 32, > 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 43, 32, 45, 47, 32, > 50, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 114, 32, 36, 119, > 104, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, 110, 111, 105, 115, > 101, 32, 58, 32, 115, 116, 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, > 110, 95, 115, 62, 61, 48, 44, 95, 115, 116, 100, 95, 118, 97, 114, 105, > 97, 116, 105, 111, 110, 95, 112, 62, 61, 48, 44, 95, 112, 97, 116, 99, > 104, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 108, 111, 111, 107, 117, > 112, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 44, 95, 102, 97, 115, 116, 95, 97, 112, 112, 114, > 111, 120, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 110, 111, > 105, 115, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 110, 111, 110, 45, 108, 111, 99, 97, 108, > 32, 112, 97, 116, 99, 104, 32, 97, 118, 101, 114, 97, 103, 105, 110, 103, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 100, 95, > 118, 97, 114, 105, 97, 116, 105, 111, 110, 95, 112, 61, 49, 48, 39, 44, > 32, 39, 112, 97, 116, 99, 104, 95, 115, 105, 122, 101, 61, 53, 39, 44, > 32, 39, 108, 111, 111, 107, 117, 112, 95, 115, 105, 122, 101, 61, 54, 39, > 32, 97, 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 101, 110, 111, > 105, 115, 101, 32, 53, 44, 53, 44, 56, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 101, 110, 111, 105, 115, 101, 95, 104, 97, 97, 114, 32, 58, 32, > 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, 61, 48, 44, 95, 110, > 98, 95, 115, 99, 97, 108, 101, 115, 62, 61, 48, 44, 95, 99, 121, 99, > 108, 101, 95, 115, 112, 105, 110, 110, 105, 110, 103, 62, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 110, 111, 105, 115, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 117, 115, > 105, 110, 103, 32, 104, 97, 97, 114, 45, 119, 97, 118, 101, 108, 101, 116, > 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 105, 110, 103, 32, 119, 105, > 116, 104, 32, 99, 121, 99, 108, 101, 32, 115, 112, 105, 110, 110, 105, 110, > 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, > 39, 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 61, 48, 39, 32, 116, > 111, 32, 97, 117, 116, 111, 109, 97, 116, 105, 99, 97, 108, 108, 121, 32, > 100, 101, 116, 101, 114, 109, 105, 110, 101, 32, 116, 104, 101, 32, 111, 112, > 116, 105, 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, > 115, 99, 97, 108, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 49, 46, 52, 39, > 44, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 61, 48, 39, 32, 97, > 110, 100, 32, 39, 99, 121, 99, 108, 101, 95, 115, 112, 105, 110, 110, 105, > 110, 103, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 110, 111, > 105, 115, 101, 32, 50, 48, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, > 45, 45, 100, 101, 110, 111, 105, 115, 101, 95, 104, 97, 97, 114, 91, 45, > 49, 93, 32, 48, 46, 56, 10, 100, 101, 110, 111, 105, 115, 101, 95, 104, > 97, 97, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 49, 46, 52, 125, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, > 110, 116, 40, 36, 123, 50, 61, 48, 125, 41, 32, 38, 38, 32, 36, 50, > 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 51, > 61, 49, 48, 125, 41, 32, 38, 38, 32, 36, 51, 62, 48, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 68, 101, 110, 111, 105, 115, 101, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 104, 97, > 97, 114, 45, 119, 97, 118, 101, 108, 101, 116, 32, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 105, 110, 103, 44, 32, 119, 105, 116, 104, 32, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 32, 36, 49, 44, 32, 34, 92, 10, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 40, 36, 50, 62, 48, 41, 44, > 97, 117, 116, 111, 44, 36, 50, 125, 34, 32, 115, 99, 97, 108, 101, 115, > 32, 97, 110, 100, 32, 36, 51, 32, 115, 112, 105, 110, 110, 105, 110, 103, > 32, 99, 121, 99, 108, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 110, 98, 95, 115, 99, > 97, 108, 101, 115, 61, 123, 109, 105, 110, 40, 105, 102, 40, 36, 50, 44, > 36, 50, 44, 51, 50, 41, 44, 105, 110, 116, 40, 108, 111, 103, 50, 40, > 109, 105, 110, 40, 119, 44, 104, 41, 41, 45, 49, 41, 41, 125, 10, 119, > 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, > 32, 115, 105, 103, 109, 97, 61, 64, 123, 45, 118, 97, 114, 105, 97, 110, > 99, 101, 95, 110, 111, 105, 115, 101, 125, 10, 45, 114, 32, 123, 114, 111, > 117, 110, 100, 40, 119, 44, 50, 94, 40, 36, 110, 98, 95, 115, 99, 97, > 108, 101, 115, 43, 49, 41, 44, 49, 41, 125, 44, 123, 114, 111, 117, 110, > 100, 40, 104, 44, 50, 94, 40, 36, 110, 98, 95, 115, 99, 97, 108, 101, > 115, 43, 49, 41, 44, 49, 41, 125, 44, 123, 105, 102, 40, 100, 61, 61, > 49, 44, 49, 44, 114, 111, 117, 110, 100, 40, 100, 44, 50, 94, 40, 36, > 110, 98, 95, 115, 99, 97, 108, 101, 115, 43, 49, 41, 44, 49, 41, 41, > 125, 44, 49, 48, 48, 37, 44, 48, 44, 48, 10, 45, 45, 102, 32, 48, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 51, 10, 100, 120, 61, 123, > 114, 111, 117, 110, 100, 40, 63, 40, 48, 44, 123, 52, 42, 36, 110, 98, > 95, 115, 99, 97, 108, 101, 115, 125, 41, 41, 125, 10, 100, 121, 61, 123, > 114, 111, 117, 110, 100, 40, 63, 40, 48, 44, 123, 52, 42, 36, 110, 98, > 95, 115, 99, 97, 108, 101, 115, 125, 41, 41, 125, 10, 100, 122, 61, 123, > 105, 102, 40, 36, 100, 61, 61, 49, 44, 48, 44, 114, 111, 117, 110, 100, > 40, 63, 40, 48, 44, 123, 52, 42, 36, 110, 98, 95, 115, 99, 97, 108, > 101, 115, 125, 41, 41, 41, 125, 10, 45, 45, 115, 104, 105, 102, 116, 91, > 48, 93, 32, 36, 100, 120, 44, 36, 100, 121, 44, 36, 100, 122, 44, 48, > 44, 50, 10, 45, 104, 97, 97, 114, 91, 45, 49, 93, 32, 36, 110, 98, > 95, 115, 99, 97, 108, 101, 115, 10, 45, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 91, 45, 49, 93, 32, 123, 36, 49, 42, 36, 115, 105, 103, 109, > 97, 125, 44, 49, 10, 45, 105, 104, 97, 97, 114, 91, 45, 49, 93, 32, > 36, 110, 98, 95, 115, 99, 97, 108, 101, 115, 10, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 123, 45, 36, 100, 120, 125, 44, 123, 45, 36, > 100, 121, 125, 44, 123, 45, 36, 100, 122, 125, 44, 48, 44, 50, 10, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, > 114, 109, 91, 48, 93, 32, 45, 47, 32, 36, 51, 32, 45, 114, 32, 36, > 119, 44, 36, 104, 44, 36, 100, 44, 49, 48, 48, 37, 44, 48, 10, 45, > 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 101, 114, 105, 99, 104, 101, 32, 58, 32, 115, 116, 100, 95, 118, > 97, 114, 105, 97, 116, 105, 111, 110, 62, 61, 48, 91, 37, 93, 44, 111, > 114, 100, 101, 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, 124, 32, 50, > 32, 125, 44, 97, 120, 105, 115, 61, 123, 32, 120, 32, 124, 32, 121, 32, > 124, 32, 122, 32, 124, 32, 99, 32, 125, 44, 95, 98, 111, 117, 110, 100, > 97, 114, 121, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 68, 101, 114, 105, 99, 104, 101, > 32, 114, 101, 99, 117, 114, 115, 105, 118, 101, 32, 102, 105, 108, 116, 101, > 114, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 100, 101, 118, 105, 97, 116, > 105, 111, 110, 44, 32, 111, 114, 100, 101, 114, 44, 32, 97, 120, 105, 115, > 32, 97, 110, 100, 32, 98, 111, 114, 100, 101, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 101, 114, 105, 99, 104, 101, > 32, 51, 44, 49, 44, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 101, > 114, 105, 99, 104, 101, 32, 51, 48, 44, 48, 44, 120, 32, 45, 100, 101, > 114, 105, 99, 104, 101, 91, 45, 50, 93, 32, 51, 48, 44, 48, 44, 121, > 32, 45, 97, 100, 100, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 108, > 97, 116, 101, 32, 58, 32, 115, 105, 122, 101, 62, 61, 48, 32, 58, 32, > 115, 105, 122, 101, 95, 120, 62, 61, 48, 44, 115, 105, 122, 101, 95, 121, > 62, 61, 48, 44, 115, 105, 122, 101, 95, 122, 62, 61, 48, 32, 58, 32, > 91, 109, 97, 115, 107, 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 44, 95, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 108, 97, 116, 101, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 98, 121, 32, 97, 32, 114, 101, 99, 116, 97, 110, 103, 117, 108, 97, 114, > 32, 111, 114, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 115, 116, 114, 117, 99, 116, 117, 114, 105, 110, 103, 32, 101, 108, > 101, 109, 101, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, > 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 122, 61, > 49, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, > 32, 97, 110, 100, 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, > 105, 108, 97, 116, 101, 32, 49, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, 32, 58, 32, 95, 115, > 105, 122, 101, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 44, 95, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 99, 105, 114, 99, 117, 108, 97, > 114, 32, 100, 105, 108, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 98, 121, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 100, 61, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, 32, > 55, 10, 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, 61, 48, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, 36, 123, 51, 61, 48, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, > 99, 105, 114, 99, 117, 108, 97, 114, 32, 100, 105, 108, 97, 116, 105, 111, > 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 32, 98, 121, 32, > 115, 105, 122, 101, 32, 36, 49, 44, 32, 98, 111, 117, 110, 100, 97, 114, > 121, 32, 36, 50, 32, 97, 110, 100, 32, 105, 115, 95, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 100, 32, 36, 51, 46, 34, 10, 45, 105, 102, 32, > 123, 36, 49, 60, 50, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 95, 100, 116, 95, > 99, 105, 114, 99, 108, 101, 91, 93, 32, 36, 49, 32, 45, 100, 105, 108, > 97, 116, 101, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, 44, 36, 50, > 44, 36, 51, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 108, 97, 116, 101, 95, 111, > 99, 116, 32, 58, 32, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 98, > 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 111, 99, 116, 97, 103, 111, 110, 97, 108, 32, 100, 105, 108, 97, 116, 105, > 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, 110, > 100, 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 105, 108, 97, > 116, 101, 95, 111, 99, 116, 32, 55, 10, 100, 105, 108, 97, 116, 101, 95, > 111, 99, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, > 61, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, > 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 111, 99, 116, 97, 103, 111, 110, 97, 108, 32, > 100, 105, 108, 97, 116, 105, 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 98, 121, 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, > 98, 111, 117, 110, 100, 97, 114, 121, 32, 36, 50, 32, 97, 110, 100, 32, > 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 32, 36, 51, > 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 49, 60, > 50, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 36, 49, 38, 49, 125, 32, 115, 115, 61, > 123, 36, 49, 125, 32, 45, 101, 108, 115, 101, 32, 115, 115, 61, 123, 36, > 49, 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 48, > 93, 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, 49, 44, 49, 59, 48, > 44, 49, 44, 48, 41, 32, 45, 105, 91, 49, 93, 32, 40, 49, 44, 49, > 44, 49, 59, 49, 44, 49, 44, 49, 59, 49, 44, 49, 44, 49, 41, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 10, 114, > 61, 123, 114, 111, 117, 110, 100, 40, 40, 36, 115, 115, 45, 49, 41, 42, > 115, 113, 114, 116, 40, 50, 41, 47, 40, 49, 43, 115, 113, 114, 116, 40, > 50, 41, 41, 47, 50, 41, 125, 10, 113, 61, 123, 114, 111, 117, 110, 100, > 40, 40, 36, 115, 115, 45, 49, 41, 47, 40, 49, 43, 115, 113, 114, 116, > 40, 50, 41, 41, 47, 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, 114, > 62, 48, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 114, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 91, 48, 93, 44, 36, > 50, 44, 36, 51, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 36, 113, 62, 48, 125, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 113, 32, 45, 100, 105, 108, 97, 116, 101, 91, > 45, 49, 93, 32, 91, 49, 93, 44, 36, 50, 44, 36, 51, 32, 45, 100, > 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, > 49, 93, 32, 50, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, > 44, 49, 93, 32, 45, 118, 32, 43, 10, 95, 107, 114, 95, 99, 105, 114, > 99, 108, 101, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 37, 50, 61, > 61, 48, 125, 32, 45, 105, 32, 50, 44, 50, 44, 49, 44, 49, 44, 49, > 32, 45, 101, 108, 115, 101, 32, 45, 105, 32, 49, 44, 49, 44, 49, 44, > 49, 44, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 10, 45, 100, 105, 115, 116, 97, 110, 99, > 101, 91, 45, 49, 93, 32, 49, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 49, 93, 32, 48, 46, 53, 32, 45, 116, 50, 91, 45, 49, 93, 32, 48, > 44, 123, 36, 49, 47, 50, 125, 10, 95, 106, 102, 95, 99, 105, 114, 99, > 108, 101, 32, 58, 10, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, > 44, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, 10, 99, 101, 110, > 116, 101, 114, 61, 123, 48, 46, 53, 42, 40, 119, 45, 49, 41, 125, 10, > 45, 102, 91, 45, 49, 93, 32, 39, 115, 113, 114, 116, 40, 40, 120, 45, > 36, 99, 101, 110, 116, 101, 114, 41, 94, 50, 43, 40, 121, 45, 36, 99, > 101, 110, 116, 101, 114, 41, 94, 50, 41, 39, 10, 45, 105, 102, 32, 123, > 33, 40, 119, 37, 50, 41, 125, 10, 45, 114, 111, 117, 110, 100, 91, 45, > 49, 93, 32, 48, 46, 48, 48, 48, 49, 44, 45, 49, 10, 116, 49, 61, > 123, 115, 113, 114, 116, 40, 40, 40, 114, 111, 117, 110, 100, 40, 36, 49, > 41, 45, 49, 41, 47, 50, 41, 94, 50, 43, 48, 46, 50, 53, 41, 125, > 10, 116, 50, 61, 123, 115, 113, 114, 116, 40, 40, 40, 114, 111, 117, 110, > 100, 40, 36, 49, 41, 43, 49, 41, 47, 50, 41, 94, 50, 43, 48, 46, > 50, 53, 41, 125, 10, 107, 61, 123, 36, 49, 45, 114, 111, 117, 110, 100, > 40, 36, 49, 41, 43, 48, 46, 53, 125, 10, 116, 61, 123, 36, 116, 49, > 43, 40, 36, 116, 50, 45, 36, 116, 49, 41, 42, 36, 107, 125, 10, 45, > 116, 50, 91, 45, 49, 93, 32, 48, 44, 36, 116, 10, 45, 101, 108, 115, > 101, 32, 45, 116, 50, 91, 45, 49, 93, 32, 48, 44, 123, 36, 49, 47, > 50, 45, 48, 46, 50, 53, 125, 10, 45, 101, 110, 100, 105, 102, 10, 95, > 100, 116, 95, 99, 105, 114, 99, 108, 101, 32, 58, 10, 105, 114, 61, 123, > 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, 10, 45, 105, 102, 32, 123, > 33, 36, 105, 114, 125, 32, 49, 44, 49, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 105, 114, 60, 50, 125, 32, 36, 105, 114, 44, 36, 105, 114, 44, > 49, 44, 49, 44, 49, 10, 45, 101, 108, 115, 101, 10, 123, 105, 110, 116, > 40, 36, 105, 114, 47, 50, 41, 43, 40, 36, 105, 114, 37, 50, 41, 125, > 44, 123, 105, 110, 116, 40, 36, 105, 114, 47, 50, 41, 43, 40, 36, 105, > 114, 37, 50, 41, 125, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 10, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 108, 101, 91, 45, 49, 93, > 32, 123, 40, 105, 43, 48, 46, 52, 41, 47, 115, 113, 114, 116, 40, 50, > 41, 125, 10, 45, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, > 120, 10, 45, 105, 102, 32, 123, 36, 105, 114, 62, 49, 38, 38, 40, 36, > 105, 114, 37, 50, 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, > 45, 49, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 44, 48, > 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 120, 32, 45, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 49, 93, 32, 121, 10, 45, 105, 102, 32, 123, 36, 105, 114, 62, 49, 38, > 38, 40, 36, 105, 114, 37, 50, 41, 125, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 123, 104, 45, 49, 125, 44, 49, 44, 49, 44, > 48, 44, 48, 44, 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 45, 101, 110, 100, 105, > 102, 10, 95, 100, 116, 95, 100, 105, 97, 109, 111, 110, 100, 32, 58, 10, > 105, 114, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, 10, 45, > 105, 102, 32, 123, 36, 105, 114, 60, 50, 125, 32, 36, 105, 114, 44, 36, > 105, 114, 44, 49, 44, 49, 44, 49, 10, 45, 101, 108, 115, 101, 10, 123, > 105, 110, 116, 40, 36, 105, 114, 47, 50, 41, 43, 40, 36, 105, 114, 37, > 50, 41, 125, 44, 123, 105, 110, 116, 40, 36, 105, 114, 47, 50, 41, 43, > 40, 36, 105, 114, 37, 50, 41, 125, 32, 45, 61, 91, 45, 49, 93, 32, > 49, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 108, > 101, 91, 45, 49, 93, 32, 123, 105, 47, 50, 125, 10, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 10, 45, 105, 102, 32, 123, > 36, 105, 114, 62, 49, 38, 38, 40, 36, 105, 114, 37, 50, 41, 125, 32, > 45, 114, 91, 45, 49, 93, 32, 123, 119, 45, 49, 125, 44, 49, 48, 48, > 37, 44, 49, 44, 49, 44, 48, 44, 48, 44, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, > 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 10, 45, 105, > 102, 32, 123, 36, 105, 114, 62, 49, 38, 38, 40, 36, 105, 114, 37, 50, > 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 123, > 104, 45, 49, 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 44, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 10, 45, 101, 110, 100, 105, 102, 10, 35, 64, 103, 109, 105, > 99, 32, 100, 105, 118, 101, 114, 103, 101, 110, 99, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 100, 105, > 118, 101, 114, 103, 101, 110, 99, 101, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 32, 102, 105, 101, 108, > 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 32, 45, > 97, 112, 112, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, > 45, 100, 105, 118, 101, 114, 103, 101, 110, 99, 101, 91, 45, 49, 93, 10, > 100, 105, 118, 101, 114, 103, 101, 110, 99, 101, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 100, 105, > 118, 101, 114, 103, 101, 110, 99, 101, 32, 111, 102, 32, 118, 101, 99, 116, > 111, 114, 32, 102, 105, 101, 108, 100, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 105, 102, 32, 123, 115, 61, 61, 49, 125, 32, 45, > 103, 32, 120, 44, 48, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, > 50, 125, 32, 45, 115, 32, 99, 32, 45, 103, 91, 45, 50, 93, 32, 120, > 44, 48, 32, 45, 103, 91, 45, 49, 93, 32, 121, 44, 48, 32, 45, 43, > 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 51, 125, 32, 45, 115, > 32, 99, 32, 45, 103, 91, 45, 51, 93, 32, 120, 44, 48, 32, 45, 103, > 91, 45, 50, 93, 32, 121, 44, 48, 32, 45, 103, 91, 45, 49, 93, 32, > 122, 44, 48, 32, 45, 43, 10, 45, 101, 108, 115, 101, 32, 45, 101, 114, > 114, 111, 114, 91, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, > 45, 100, 105, 118, 101, 114, 103, 101, 110, 99, 101, 39, 58, 32, 67, 97, > 110, 110, 111, 116, 32, 99, 111, 109, 112, 117, 116, 101, 32, 100, 105, 118, > 101, 114, 103, 101, 110, 99, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 32, 91, 34, 36, 62, 34, 93, 32, 40, 104, 97, 115, 32, 34, 123, 115, > 125, 34, 62, 51, 32, 99, 104, 97, 110, 110, 101, 108, 115, 41, 46, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 111, 103, 32, 58, 32, 95, 115, 105, 103, 109, 97, 49, 62, 61, 48, > 91, 37, 93, 44, 95, 115, 105, 103, 109, 97, 50, 62, 61, 48, 91, 37, > 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 32, 111, 102, > 32, 103, 97, 117, 115, 115, 105, 97, 110, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 103, 109, 97, 49, 61, 50, > 37, 39, 32, 97, 110, 100, 32, 39, 115, 105, 103, 109, 97, 50, 61, 51, > 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 111, 103, 32, 50, > 44, 51, 10, 100, 111, 103, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 50, 61, 51, 37, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 100, 105, 102, 102, > 101, 114, 101, 110, 99, 101, 32, 111, 102, 32, 103, 97, 117, 115, 115, 105, > 97, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 100, 101, 118, > 105, 97, 116, 105, 111, 110, 115, 32, 36, 49, 32, 97, 110, 100, 32, 36, > 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 91, 48, 93, 32, 45, > 112, 97, 114, 97, 108, 108, 101, 108, 32, 34, 45, 98, 91, 48, 93, 32, > 36, 49, 34, 44, 34, 45, 98, 91, 49, 93, 32, 36, 50, 34, 32, 45, > 45, 32, 45, 110, 111, 114, 109, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 105, 102, 102, 117, 115, 105, 111, 110, 116, 101, 110, 115, 111, 114, 115, > 32, 58, 32, 95, 115, 104, 97, 114, 112, 110, 101, 115, 115, 62, 61, 48, > 44, 48, 60, 61, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 60, > 61, 49, 44, 95, 97, 108, 112, 104, 97, 91, 37, 93, 44, 95, 115, 105, > 103, 109, 97, 91, 37, 93, 44, 105, 115, 95, 115, 113, 114, 116, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 100, 105, > 102, 102, 117, 115, 105, 111, 110, 32, 116, 101, 110, 115, 111, 114, 115, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 102, 111, 114, 32, 101, 100, 103, 101, 45, 112, 114, 101, 115, > 101, 114, 118, 105, 110, 103, 32, 115, 109, 111, 111, 116, 104, 105, 110, 103, > 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 61, 48, 46, 55, 39, 44, 32, 39, 97, 110, 105, 115, 111, 116, 114, 111, > 112, 121, 61, 48, 46, 51, 39, 44, 32, 39, 97, 108, 112, 104, 97, 61, > 48, 46, 54, 39, 44, 32, 39, 115, 105, 103, 109, 97, 61, 49, 46, 49, > 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 115, 113, 114, 116, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 105, 102, 102, 117, 115, 105, > 111, 110, 116, 101, 110, 115, 111, 114, 115, 32, 48, 46, 56, 32, 45, 97, > 98, 115, 32, 45, 112, 111, 119, 32, 48, 46, 50, 10, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 116, 101, 110, 115, 111, 114, 115, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 48, 46, 55, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 48, 46, 51, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 34, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 51, 61, 48, 46, 54, 125, 44, 36, 123, 52, 61, 49, > 46, 49, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 32, 116, 101, 110, 115, 111, 114, 115, 32, 102, 111, > 114, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, > 115, 104, 97, 114, 112, 110, 101, 115, 115, 32, 36, 49, 44, 32, 97, 110, > 105, 115, 111, 116, 114, 111, 112, 121, 32, 36, 50, 44, 32, 97, 108, 112, > 104, 97, 32, 36, 51, 32, 97, 110, 100, 32, 115, 105, 103, 109, 97, 32, > 36, 52, 46, 34, 10, 45, 118, 32, 45, 10, 112, 49, 61, 123, 105, 102, > 40, 36, 53, 44, 48, 46, 53, 44, 49, 41, 42, 109, 97, 120, 40, 36, > 49, 44, 49, 101, 45, 53, 41, 125, 10, 112, 50, 61, 123, 36, 112, 49, > 47, 40, 49, 101, 45, 55, 43, 49, 45, 36, 50, 41, 125, 10, 45, 98, > 32, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 115, 116, > 114, 117, 99, 116, 117, 114, 101, 116, 101, 110, 115, 111, 114, 115, 32, 50, > 32, 45, 98, 32, 36, 52, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, 105, 103, 101, 110, 32, > 45, 109, 97, 120, 91, 45, 50, 93, 32, 48, 10, 45, 105, 102, 32, 123, > 115, 61, 61, 50, 125, 32, 45, 115, 91, 45, 50, 93, 32, 99, 32, 45, > 43, 91, 45, 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 50, 93, 32, > 49, 32, 45, 45, 94, 91, 45, 50, 93, 32, 45, 36, 112, 49, 32, 45, > 94, 91, 45, 51, 93, 32, 45, 36, 112, 50, 32, 45, 97, 91, 45, 51, > 44, 45, 49, 93, 32, 99, 10, 45, 101, 108, 115, 101, 32, 45, 115, 91, > 45, 50, 93, 32, 99, 32, 45, 43, 91, 45, 52, 45, 45, 50, 93, 32, > 45, 43, 91, 45, 50, 93, 32, 49, 32, 45, 45, 94, 91, 45, 50, 93, > 32, 45, 36, 112, 49, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 50, 32, 45, 94, > 91, 45, 51, 93, 32, 45, 36, 112, 50, 32, 45, 97, 91, 45, 51, 44, > 45, 49, 93, 32, 99, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 105, > 103, 101, 110, 50, 116, 101, 110, 115, 111, 114, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 101, 100, 103, 101, 115, 32, 58, 32, 95, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 69, 115, 116, 105, 109, 97, 116, 101, 32, 99, 111, > 110, 116, 111, 117, 114, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 101, 100, 103, 101, 115, 61, 49, 53, 37, 39, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 101, 100, 103, 101, 115, 32, 49, 53, 37, 10, > 101, 100, 103, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 49, 53, 37, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 69, 115, 116, 105, 109, 97, 116, 101, 32, 105, 109, 97, 103, 101, 32, 99, > 111, 110, 116, 111, 117, 114, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 98, 32, 48, > 46, 53, 32, 45, 103, 101, 32, 36, 49, 32, 45, 100, 105, 115, 116, 97, > 110, 99, 101, 32, 48, 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, > 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 99, 32, 51, 48, 37, > 44, 55, 48, 37, 32, 45, 110, 32, 48, 44, 49, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 114, 111, 100, 101, 32, 58, 32, > 115, 105, 122, 101, 62, 61, 48, 32, 58, 32, 115, 105, 122, 101, 95, 120, > 62, 61, 48, 44, 115, 105, 122, 101, 95, 121, 62, 61, 48, 44, 95, 115, > 105, 122, 101, 95, 122, 62, 61, 48, 32, 58, 32, 91, 109, 97, 115, 107, > 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 69, 114, 111, 100, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 97, 32, 114, > 101, 99, 116, 97, 110, 103, 117, 108, 97, 114, 32, 111, 114, 32, 116, 104, > 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 114, 117, > 99, 116, 117, 114, 105, 110, 103, 32, 101, 108, 101, 109, 101, 110, 116, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 98, 111, 117, 110, 100, 97, > 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, > 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, > 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 105, 122, 101, 95, 122, 61, 49, 39, 44, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, > 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 101, 114, 111, 100, 101, 32, 49, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 114, 111, 100, 101, 95, 99, 105, > 114, 99, 32, 58, 32, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 98, > 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 99, 105, 114, 99, 117, 108, 97, 114, 32, 101, 114, 111, 115, 105, 111, 110, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, 110, 100, > 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 101, 114, 111, 100, 101, > 95, 99, 105, 114, 99, 32, 55, 10, 101, 114, 111, 100, 101, 95, 99, 105, > 114, 99, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, 61, > 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, 36, > 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 99, 105, 114, 99, 117, 108, 97, 114, 32, 101, 114, > 111, 115, 105, 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 98, 121, 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, 98, 111, 117, > 110, 100, 97, 114, 121, 32, 36, 50, 32, 97, 110, 100, 32, 105, 115, 95, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 32, 36, 51, 46, 34, 10, > 45, 105, 102, 32, 123, 36, 49, 60, 50, 125, 32, 45, 114, 101, 116, 117, > 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, > 95, 100, 116, 95, 99, 105, 114, 99, 108, 101, 91, 93, 32, 36, 49, 32, > 45, 101, 114, 111, 100, 101, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, > 44, 36, 50, 44, 36, 51, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 114, 111, 100, 101, > 95, 111, 99, 116, 32, 58, 32, 95, 115, 105, 122, 101, 62, 61, 48, 44, > 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, > 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 111, 99, 116, 97, 103, 111, 110, 97, 108, 32, 101, 114, 111, 115, > 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 101, 114, > 111, 100, 101, 95, 111, 99, 116, 32, 55, 10, 101, 114, 111, 100, 101, 95, > 111, 99, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, > 61, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, > 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 111, 99, 116, 97, 103, 111, 110, 97, 108, 32, > 101, 114, 111, 115, 105, 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 98, 121, 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, 98, > 111, 117, 110, 100, 97, 114, 121, 32, 36, 50, 32, 97, 110, 100, 32, 105, > 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 32, 36, 51, 46, > 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 49, 60, 50, > 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 38, 49, 125, 32, 115, 115, 61, 123, > 36, 49, 125, 32, 45, 101, 108, 115, 101, 32, 115, 115, 61, 123, 36, 49, > 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 48, 93, > 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, 49, 44, 49, 59, 48, 44, > 49, 44, 48, 41, 32, 45, 105, 91, 49, 93, 32, 40, 49, 44, 49, 44, > 49, 59, 49, 44, 49, 44, 49, 59, 49, 44, 49, 44, 49, 41, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 10, 114, 61, > 123, 114, 111, 117, 110, 100, 40, 40, 36, 115, 115, 45, 49, 41, 42, 115, > 113, 114, 116, 40, 50, 41, 47, 40, 49, 43, 115, 113, 114, 116, 40, 50, > 41, 41, 47, 50, 41, 125, 10, 113, 61, 123, 114, 111, 117, 110, 100, 40, > 40, 36, 115, 115, 45, 49, 41, 47, 40, 49, 43, 115, 113, 114, 116, 40, > 50, 41, 41, 47, 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, 114, 62, > 48, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 114, 32, 45, 101, > 114, 111, 100, 101, 91, 45, 49, 93, 32, 91, 48, 93, 44, 36, 50, 44, > 36, 51, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 113, 62, 48, 125, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 113, 32, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, > 32, 91, 49, 93, 44, 36, 50, 44, 36, 51, 32, 45, 100, 111, 110, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, > 50, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 44, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 102, 116, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 100, 105, 114, 101, > 99, 116, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, > 102, 111, 114, 109, 32, 40, 114, 101, 97, 108, 32, 97, 110, 100, 32, 105, > 109, 97, 103, 105, 110, 97, 114, 121, 32, 112, 97, 114, 116, 115, 41, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 45, 102, 102, 116, 32, 45, 97, 112, 112, 101, 110, > 100, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 110, 111, 114, 109, > 91, 45, 49, 93, 32, 45, 108, 111, 103, 91, 45, 49, 93, 32, 45, 115, > 104, 105, 102, 116, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, > 44, 48, 44, 48, 44, 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 102, 116, > 32, 45, 115, 104, 105, 102, 116, 32, 53, 48, 37, 44, 53, 48, 37, 44, > 48, 44, 48, 44, 50, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, > 48, 37, 44, 53, 48, 37, 44, 51, 48, 44, 51, 48, 44, 48, 44, 49, > 44, 48, 32, 45, 115, 104, 105, 102, 116, 32, 45, 53, 48, 37, 44, 45, > 53, 48, 37, 44, 48, 44, 48, 44, 50, 32, 45, 105, 102, 102, 116, 32, > 45, 114, 101, 109, 111, 118, 101, 91, 45, 49, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 103, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 103, 114, 97, 100, 105, 101, 110, 116, 39, 46, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 58, 32, 123, 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 125, > 46, 46, 123, 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 125, 44, > 95, 115, 99, 104, 101, 109, 101, 32, 58, 32, 40, 110, 111, 32, 97, 114, > 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 103, > 114, 97, 100, 105, 101, 110, 116, 32, 99, 111, 109, 112, 111, 110, 101, 110, > 116, 115, 32, 40, 102, 105, 114, 115, 116, 32, 100, 101, 114, 105, 118, 97, > 116, 105, 118, 101, 115, 41, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 103, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 115, 99, 104, > 101, 109, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, > 61, 98, 97, 99, 107, 119, 97, 114, 100, 32, 124, 32, 48, 61, 99, 101, > 110, 116, 101, 114, 101, 100, 32, 124, 32, 49, 61, 102, 111, 114, 119, 97, > 114, 100, 32, 124, 32, 50, 61, 115, 111, 98, 101, 108, 32, 124, 32, 51, > 61, 114, 111, 116, 97, 116, 105, 111, 110, 45, 105, 110, 118, 97, 114, 105, > 97, 110, 116, 32, 40, 100, 101, 102, 97, 117, 108, 116, 41, 32, 124, 32, > 52, 61, 100, 101, 114, 105, 99, 104, 101, 32, 124, 32, 53, 61, 118, 97, > 110, 118, 108, 105, 101, 116, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 99, 111, 109, > 112, 117, 116, 101, 32, 97, 108, 108, 32, 115, 105, 103, 110, 105, 102, 105, > 99, 97, 110, 116, 32, 50, 100, 47, 51, 100, 32, 99, 111, 109, 112, 111, > 110, 101, 110, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 115, 99, 104, 101, 109, 101, 61, 51, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 103, 114, 97, 100, 105, 101, 110, 116, 10, 35, 64, 103, 109, 105, 99, > 32, 103, 114, 97, 100, 105, 101, 110, 116, 95, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 32, 58, 32, 95, 100, 105, 109, 101, 110, 115, 105, > 111, 110, 61, 123, 49, 44, 50, 44, 51, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 78, 45, 100, 32, > 103, 114, 97, 100, 105, 101, 110, 116, 32, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 100, 105, 109, 101, 110, 115, 105, 111, 110, 61, 51, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, > 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 50, 10, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, > 111, 110, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, > 61, 51, 125, 61, 61, 49, 32, 124, 124, 32, 36, 49, 61, 61, 50, 32, > 124, 124, 32, 36, 49, 61, 61, 51, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 36, 49, 45, 100, 32, > 103, 114, 97, 100, 105, 101, 110, 116, 32, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 105, 102, 32, 123, 36, 49, > 61, 61, 49, 125, 32, 45, 103, 32, 120, 32, 45, 45, 97, 98, 115, 91, > 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, > 45, 47, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, > 32, 45, 103, 32, 120, 121, 32, 45, 45, 115, 113, 114, 32, 45, 43, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, > 45, 56, 32, 45, 115, 113, 114, 116, 91, 45, 49, 93, 32, 45, 47, 91, > 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 103, 32, 120, 121, 122, 32, > 45, 45, 115, 113, 114, 32, 45, 43, 91, 45, 51, 45, 45, 49, 93, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, 45, 115, 113, 114, > 116, 91, 45, 49, 93, 32, 45, 47, 91, 45, 52, 44, 45, 51, 93, 32, > 91, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 103, 114, 97, > 100, 105, 101, 110, 116, 32, 110, 111, 114, 109, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, > 111, 114, 109, 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, > 93, 10, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, > 116, 101, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, 110, 111, 114, 109, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 45, 103, 32, 120, 32, 45, 115, 113, 114, 91, > 45, 49, 93, 10, 45, 45, 103, 91, 45, 50, 93, 32, 121, 32, 45, 115, > 113, 114, 91, 45, 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 103, 91, 45, 50, 93, 32, 122, 32, 45, 115, 113, 114, 91, 45, > 50, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 115, 61, 123, > 115, 125, 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 43, 91, 45, > 36, 115, 45, 45, 49, 93, 32, 45, 115, 113, 114, 116, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 97, 97, 114, 32, 58, 32, > 115, 99, 97, 108, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 100, 105, 114, > 101, 99, 116, 32, 104, 97, 97, 114, 32, 109, 117, 108, 116, 105, 115, 99, > 97, 108, 101, 32, 119, 97, 118, 101, 108, 101, 116, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 104, 97, 97, 114, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, > 123, 49, 61, 49, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 48, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, > 101, 32, 104, 97, 97, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, > 32, 36, 49, 32, 115, 99, 97, 108, 101, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 95, 104, 97, 97, 114, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 36, 49, 45, 49, 125, 10, 119, 61, 123, 109, 97, 120, > 40, 48, 44, 114, 111, 117, 110, 100, 40, 119, 47, 50, 94, 40, 49, 43, > 36, 62, 41, 41, 45, 49, 41, 125, 10, 104, 61, 123, 109, 97, 120, 40, > 48, 44, 114, 111, 117, 110, 100, 40, 104, 47, 50, 94, 40, 49, 43, 36, > 62, 41, 41, 45, 49, 41, 125, 10, 100, 61, 123, 109, 97, 120, 40, 48, > 44, 114, 111, 117, 110, 100, 40, 100, 47, 50, 94, 40, 49, 43, 36, 62, > 41, 41, 45, 49, 41, 125, 10, 45, 45, 122, 32, 48, 44, 48, 44, 48, > 44, 36, 119, 44, 36, 104, 44, 36, 100, 32, 45, 95, 104, 97, 97, 114, > 91, 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 95, 104, 97, 97, 114, 32, 58, 10, 45, 95, 104, 97, 97, 114, 95, 120, > 32, 45, 95, 104, 97, 97, 114, 95, 121, 32, 45, 95, 104, 97, 97, 114, > 95, 122, 10, 95, 104, 97, 97, 114, 95, 120, 32, 58, 10, 45, 105, 102, > 32, 123, 119, 60, 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 119, 37, 50, 125, > 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, 54, 93, 32, 34, 67, > 111, 109, 109, 97, 110, 100, 32, 39, 45, 104, 97, 97, 114, 39, 58, 32, > 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, 119, 105, > 100, 116, 104, 61, 34, 123, 119, 125, 34, 32, 40, 105, 115, 32, 110, 111, > 116, 32, 101, 118, 101, 110, 41, 46, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 45, 115, 104, 105, 102, 116, 32, 45, 49, 32, 45, 114, 32, 53, > 48, 37, 32, 45, 45, 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 43, > 91, 48, 44, 49, 93, 32, 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, > 41, 125, 32, 45, 97, 32, 120, 10, 95, 104, 97, 97, 114, 95, 121, 32, > 58, 10, 45, 105, 102, 32, 123, 104, 60, 61, 49, 125, 32, 45, 114, 101, > 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 104, 37, 50, 125, 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, > 54, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 104, 97, > 97, 114, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, > 103, 101, 32, 104, 101, 105, 103, 104, 116, 61, 34, 123, 104, 125, 34, 32, > 40, 105, 115, 32, 110, 111, 116, 32, 101, 118, 101, 110, 41, 46, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 45, 115, 104, 105, 102, 116, 32, 48, > 44, 45, 49, 32, 45, 114, 32, 49, 48, 48, 37, 44, 53, 48, 37, 32, > 45, 45, 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 43, 91, 48, 44, > 49, 93, 32, 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, 41, 125, 32, > 45, 97, 32, 121, 10, 95, 104, 97, 97, 114, 95, 122, 32, 58, 10, 45, > 105, 102, 32, 123, 100, 60, 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 100, 37, > 50, 125, 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, 54, 93, 32, > 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 104, 97, 97, 114, 39, > 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, > 100, 101, 112, 116, 104, 61, 34, 123, 104, 125, 34, 32, 40, 105, 115, 32, > 110, 111, 116, 32, 101, 118, 101, 110, 41, 46, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 45, 115, 104, 105, 102, 116, 32, 48, 44, 48, 44, 45, > 49, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 53, > 48, 37, 32, 45, 45, 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 43, > 91, 48, 44, 49, 93, 32, 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, > 41, 125, 32, 45, 97, 32, 122, 10, 35, 64, 103, 109, 105, 99, 32, 104, > 101, 97, 116, 95, 102, 108, 111, 119, 32, 58, 32, 95, 110, 98, 95, 105, > 116, 101, 114, 62, 61, 48, 44, 95, 100, 116, 44, 95, 107, 101, 101, 112, > 95, 115, 101, 113, 117, 101, 110, 99, 101, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, > 32, 116, 104, 101, 32, 104, 101, 97, 116, 32, 102, 108, 111, 119, 32, 111, > 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, > 105, 116, 101, 114, 61, 49, 48, 39, 44, 32, 39, 100, 116, 61, 51, 48, > 39, 32, 97, 110, 100, 32, 39, 107, 101, 101, 112, 95, 115, 101, 113, 117, > 101, 110, 99, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 104, 101, 97, 116, 95, 102, 108, 111, 119, 32, 50, 48, 10, 104, 101, 97, > 116, 95, 102, 108, 111, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 49, 48, 125, 44, 36, 123, 50, 61, 51, 48, 125, 44, 36, > 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 36, 49, 32, 105, 116, 101, 114, 97, 116, 105, 111, > 110, 115, 32, 111, 102, 32, 116, 104, 101, 32, 104, 101, 97, 116, 32, 102, > 108, 111, 119, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 119, 105, 116, 104, 32, 116, 105, 109, 101, 32, 115, 116, 101, 112, 32, 36, > 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 112, 100, 101, 95, 102, 108, > 111, 119, 32, 36, 49, 44, 36, 50, 44, 108, 97, 112, 108, 97, 99, 105, > 97, 110, 44, 36, 51, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 104, 101, 115, 115, 105, 97, 110, 32, 58, 32, 123, 32, 120, 120, > 32, 124, 32, 120, 121, 32, 124, 32, 120, 122, 32, 124, 32, 121, 121, 32, > 124, 32, 121, 122, 32, 124, 32, 122, 122, 32, 125, 46, 46, 123, 32, 120, > 120, 32, 124, 32, 120, 121, 32, 124, 32, 120, 122, 32, 124, 32, 121, 121, > 32, 124, 32, 121, 122, 32, 124, 32, 122, 122, 32, 125, 32, 58, 32, 40, > 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, > 116, 104, 101, 32, 104, 101, 115, 115, 105, 97, 110, 32, 99, 111, 109, 112, > 111, 110, 101, 110, 116, 115, 32, 40, 115, 101, 99, 111, 110, 100, 32, 100, > 101, 114, 105, 118, 97, 116, 105, 118, 101, 115, 41, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, > 115, 41, 32, 99, 111, 109, 112, 117, 116, 101, 32, 97, 108, 108, 32, 115, > 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 99, 111, 109, 112, 111, > 110, 101, 110, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 104, 101, 115, > 115, 105, 97, 110, 10, 35, 64, 103, 109, 105, 99, 32, 105, 101, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, > 32, 103, 114, 97, 100, 105, 101, 110, 116, 45, 111, 114, 116, 104, 111, 103, > 111, 110, 97, 108, 45, 100, 105, 114, 101, 99, 116, 101, 100, 32, 50, 110, > 100, 32, 100, 101, 114, 105, 118, 97, 116, 105, 118, 101, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 40, 115, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 105, 101, 101, 10, 105, 101, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 103, 114, 97, 100, 105, > 101, 110, 116, 45, 111, 114, 116, 104, 111, 103, 111, 110, 97, 108, 45, 100, > 105, 114, 101, 99, 116, 101, 100, 32, 50, 110, 100, 32, 100, 101, 114, 105, > 118, 97, 116, 105, 118, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, > 100, 61, 61, 49, 125, 10, 45, 45, 103, 32, 120, 121, 44, 48, 32, 45, > 104, 101, 115, 115, 105, 97, 110, 91, 45, 51, 93, 32, 120, 120, 120, 121, > 121, 121, 10, 45, 42, 91, 45, 51, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 52, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 52, > 93, 32, 45, 50, 10, 45, 43, 91, 45, 52, 44, 45, 51, 93, 32, 45, > 42, 91, 45, 51, 93, 32, 91, 45, 50, 93, 10, 45, 115, 113, 114, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 91, 45, > 49, 93, 32, 45, 43, 91, 45, 52, 44, 45, 51, 93, 10, 45, 43, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, > 45, 56, 32, 45, 47, 10, 45, 101, 108, 115, 101, 10, 45, 45, 105, 110, > 110, 32, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 91, 45, 50, 93, > 32, 45, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 102, 102, 116, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 105, 110, 118, 101, 114, 115, 101, 32, 102, 111, 117, 114, 105, > 101, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 40, 114, 101, > 97, 108, 32, 97, 110, 100, 32, 105, 109, 97, 103, 105, 110, 97, 114, 121, > 32, 112, 97, 114, 116, 115, 41, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 104, 97, 97, 114, 32, 58, 32, 115, 99, 97, 108, 101, > 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 105, 110, 118, 101, 114, 115, 101, 32, > 104, 97, 97, 114, 32, 109, 117, 108, 116, 105, 115, 99, 97, 108, 101, 32, > 119, 97, 118, 101, 108, 101, 116, 32, 116, 114, 97, 110, 115, 102, 111, 114, > 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 105, 104, 97, 97, 114, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, > 49, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 105, > 110, 118, 101, 114, 115, 101, 32, 104, 97, 97, 114, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 119, 105, 116, 104, 32, 36, 49, 32, 115, 99, 97, 108, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 36, 49, 45, 49, 125, 10, 119, 61, 123, 109, 97, 120, 40, 48, > 44, 114, 111, 117, 110, 100, 40, 119, 47, 50, 94, 40, 49, 43, 36, 60, > 41, 41, 45, 49, 41, 125, 10, 104, 61, 123, 109, 97, 120, 40, 48, 44, > 114, 111, 117, 110, 100, 40, 104, 47, 50, 94, 40, 49, 43, 36, 60, 41, > 41, 45, 49, 41, 125, 10, 100, 61, 123, 109, 97, 120, 40, 48, 44, 114, > 111, 117, 110, 100, 40, 100, 47, 50, 94, 40, 49, 43, 36, 60, 41, 41, > 45, 49, 41, 125, 10, 45, 45, 122, 32, 48, 44, 48, 44, 48, 44, 36, > 119, 44, 36, 104, 44, 36, 100, 32, 45, 95, 105, 104, 97, 97, 114, 91, > 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 95, > 105, 104, 97, 97, 114, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 95, 105, 104, 97, 97, 114, 32, 58, 10, > 45, 95, 105, 104, 97, 97, 114, 95, 120, 32, 45, 95, 105, 104, 97, 97, > 114, 95, 121, 32, 45, 95, 105, 104, 97, 97, 114, 95, 122, 10, 95, 105, > 104, 97, 97, 114, 95, 120, 32, 58, 10, 45, 105, 102, 32, 123, 119, 60, > 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 119, 37, 50, 125, 32, 45, 101, 114, > 114, 111, 114, 91, 48, 45, 45, 54, 93, 32, 34, 67, 111, 109, 109, 97, > 110, 100, 32, 39, 45, 105, 104, 97, 97, 114, 39, 58, 32, 73, 110, 118, > 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, 104, > 61, 34, 123, 119, 125, 34, 32, 40, 105, 115, 32, 110, 111, 116, 32, 101, > 118, 101, 110, 41, 46, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, > 32, 120, 44, 50, 32, 45, 114, 32, 50, 48, 48, 37, 32, 40, 45, 49, > 44, 49, 41, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, > 32, 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, 41, 125, 10, 95, 105, > 104, 97, 97, 114, 95, 121, 32, 58, 10, 45, 105, 102, 32, 123, 104, 60, > 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 104, 37, 50, 125, 32, 45, 101, 114, > 114, 111, 114, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 105, > 104, 97, 97, 114, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, > 109, 97, 103, 101, 32, 104, 101, 105, 103, 104, 116, 61, 34, 123, 104, 125, > 34, 32, 40, 105, 115, 32, 110, 111, 116, 32, 101, 118, 101, 110, 41, 46, > 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, 32, 121, 44, 50, 32, > 45, 114, 32, 49, 48, 48, 37, 44, 50, 48, 48, 37, 32, 40, 45, 49, > 59, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, > 119, 125, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 32, > 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, 41, 125, 10, 95, 105, 104, > 97, 97, 114, 95, 122, 32, 58, 10, 45, 105, 102, 32, 123, 100, 60, 61, > 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 100, 37, 50, 125, 32, 45, 101, 114, 114, > 111, 114, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 105, 104, > 97, 97, 114, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, > 97, 103, 101, 32, 100, 101, 112, 116, 104, 61, 34, 123, 104, 125, 34, 32, > 40, 105, 115, 32, 110, 111, 116, 32, 101, 118, 101, 110, 41, 46, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 115, 32, 122, 44, 50, 32, 45, 114, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 50, 48, 48, 37, 32, > 40, 45, 49, 47, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 119, 125, 44, 64, 123, 45, 50, 44, 104, 125, 32, 45, 42, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 32, 45, 47, 32, 123, 115, > 113, 114, 116, 40, 50, 41, 125, 10, 35, 64, 103, 109, 105, 99, 32, 105, > 110, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 103, 114, 97, 100, 105, 101, 110, 116, 45, 100, 105, 114, > 101, 99, 116, 101, 100, 32, 50, 110, 100, 32, 100, 101, 114, 105, 118, 97, > 116, 105, 118, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, 40, 115, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 105, 110, 110, 10, 105, 110, 110, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, > 116, 101, 32, 103, 114, 97, 100, 105, 101, 110, 116, 45, 100, 105, 114, 101, > 99, 116, 101, 100, 32, 50, 110, 100, 32, 100, 101, 114, 105, 118, 97, 116, > 105, 118, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 100, 61, 61, > 49, 125, 10, 45, 45, 103, 32, 120, 121, 44, 48, 32, 45, 104, 101, 115, > 115, 105, 97, 110, 91, 45, 51, 93, 32, 120, 120, 120, 121, 121, 121, 10, > 45, 42, 91, 45, 53, 93, 32, 91, 45, 50, 93, 32, 45, 42, 91, 45, > 52, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 50, > 10, 45, 43, 91, 45, 53, 44, 45, 52, 93, 32, 45, 42, 91, 45, 52, > 93, 32, 91, 45, 50, 93, 10, 45, 115, 113, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 42, 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, > 43, 91, 45, 52, 44, 45, 51, 93, 10, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, 45, > 47, 10, 45, 101, 108, 115, 101, 10, 45, 45, 103, 32, 120, 121, 122, 44, > 48, 32, 45, 104, 101, 115, 115, 105, 97, 110, 91, 45, 52, 93, 32, 120, > 120, 120, 121, 120, 122, 121, 121, 121, 122, 122, 122, 10, 45, 42, 91, 45, > 57, 93, 32, 91, 45, 51, 93, 32, 45, 42, 91, 45, 56, 93, 32, 91, > 45, 50, 93, 32, 45, 42, 91, 45, 56, 93, 32, 50, 32, 45, 42, 91, > 45, 55, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 55, 93, 32, > 50, 10, 45, 43, 91, 45, 57, 45, 45, 55, 93, 32, 45, 42, 91, 45, > 55, 93, 32, 91, 45, 51, 93, 10, 45, 42, 91, 45, 54, 93, 32, 91, > 45, 50, 93, 32, 45, 42, 91, 45, 53, 93, 32, 91, 45, 49, 93, 32, > 45, 42, 91, 45, 53, 93, 32, 50, 10, 45, 43, 91, 45, 54, 44, 45, > 53, 93, 32, 45, 42, 91, 45, 53, 93, 32, 91, 45, 50, 93, 32, 45, > 43, 91, 45, 54, 44, 45, 53, 93, 10, 45, 115, 113, 114, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 91, 45, 49, 93, > 32, 45, 43, 91, 45, 53, 44, 45, 52, 93, 10, 45, 43, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, > 32, 45, 47, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 110, 112, 97, 105, 110, 116, 32, 58, 32, 91, 109, 97, > 115, 107, 93, 32, 58, 32, 91, 109, 97, 115, 107, 93, 44, 48, 44, 95, > 102, 97, 115, 116, 95, 109, 101, 116, 104, 111, 100, 32, 58, 32, 91, 109, > 97, 115, 107, 93, 44, 95, 112, 97, 116, 99, 104, 95, 115, 105, 122, 101, > 62, 61, 49, 44, 95, 108, 111, 111, 107, 117, 112, 95, 115, 105, 122, 101, > 62, 61, 49, 44, 95, 108, 111, 111, 107, 117, 112, 95, 102, 97, 99, 116, > 111, 114, 62, 61, 48, 44, 95, 108, 111, 111, 107, 117, 112, 95, 105, 110, > 99, 114, 101, 109, 101, 110, 116, 33, 61, 48, 44, 95, 98, 108, 101, 110, > 100, 95, 115, 105, 122, 101, 62, 61, 48, 44, 48, 60, 61, 95, 98, 108, > 101, 110, 100, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 60, 61, 49, > 44, 95, 98, 108, 101, 110, 100, 95, 100, 101, 99, 97, 121, 62, 61, 48, > 44, 95, 98, 108, 101, 110, 100, 95, 115, 99, 97, 108, 101, 115, 62, 61, > 49, 44, 95, 105, 115, 95, 98, 108, 101, 110, 100, 95, 111, 117, 116, 101, > 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 97, 105, > 110, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 109, 97, 115, 107, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 110, 111, 32, 112, 97, 116, 99, 104, 32, 115, 105, 122, 101, 32, > 40, 111, 114, 32, 48, 41, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 44, 32, 105, 110, 112, 97, 105, 110, 116, 105, 110, 103, 32, > 105, 115, 32, 100, 111, 110, 101, 32, 117, 115, 105, 110, 103, 32, 97, 32, > 102, 97, 115, 116, 32, 97, 118, 101, 114, 97, 103, 101, 32, 111, 114, 32, > 109, 101, 100, 105, 97, 110, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 79, 116, 104, 101, 114, > 119, 105, 115, 101, 44, 32, 105, 116, 32, 117, 115, 101, 100, 32, 97, 32, > 112, 97, 116, 99, 104, 45, 98, 97, 115, 101, 100, 32, 114, 101, 99, 111, > 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 32, 109, 101, 116, 104, 111, > 100, 44, 32, 116, 104, 97, 116, 32, 99, 97, 110, 32, 98, 101, 32, 118, > 101, 114, 121, 32, 116, 105, 109, 101, 32, 99, 111, 110, 115, 117, 109, 105, > 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 102, 97, > 115, 116, 95, 109, 101, 116, 104, 111, 100, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 48, 61, 108, 111, 119, 45, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 32, 97, 118, 101, 114, 97, 103, 101, 32, 124, > 32, 49, 61, 104, 105, 103, 104, 45, 99, 111, 110, 110, 101, 99, 116, 105, > 118, 105, 116, 121, 32, 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, 50, > 61, 108, 111, 119, 45, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 32, 109, 101, 100, 105, 97, 110, 32, 124, 32, 51, 61, 104, 105, 103, > 104, 45, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 32, 109, > 101, 100, 105, 97, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 32, 58, 32, 39, 112, 97, 116, 99, 104, 95, 115, 105, 122, 101, 61, 48, > 39, 44, 32, 39, 102, 97, 115, 116, 95, 109, 101, 116, 104, 111, 100, 61, > 49, 39, 44, 32, 39, 108, 111, 111, 107, 117, 112, 95, 115, 105, 122, 101, > 61, 50, 50, 39, 44, 32, 39, 108, 111, 111, 107, 117, 112, 95, 102, 97, > 99, 116, 111, 114, 61, 48, 46, 53, 39, 44, 32, 39, 108, 111, 111, 107, > 117, 112, 95, 105, 110, 99, 114, 101, 109, 101, 110, 116, 61, 49, 39, 44, > 32, 39, 98, 108, 101, 110, 100, 95, 115, 105, 122, 101, 61, 48, 39, 44, > 32, 39, 98, 108, 101, 110, 100, 95, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 61, 48, 39, 44, 32, 39, 98, 108, 101, 110, 100, 95, 100, 101, 99, > 97, 121, 61, 48, 46, 48, 53, 39, 44, 32, 39, 98, 108, 101, 110, 100, > 95, 115, 99, 97, 108, 101, 115, 61, 49, 48, 39, 32, 97, 110, 100, 32, > 39, 105, 115, 95, 98, 108, 101, 110, 100, 95, 111, 117, 116, 101, 114, 61, > 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, 48, 37, 44, > 53, 48, 37, 44, 51, 48, 44, 51, 48, 44, 48, 44, 49, 44, 50, 53, > 53, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 50, 48, 37, 44, 50, > 48, 37, 44, 51, 48, 44, 49, 48, 44, 48, 44, 49, 44, 50, 53, 53, > 32, 45, 45, 105, 110, 112, 97, 105, 110, 116, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 101, 109, 111, 118, 101, 91, 45, 50, 93, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 99, 105, 114, 99, 108, 101, 32, 51, 48, 37, 44, 51, 48, 37, 44, 51, > 48, 44, 49, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 32, 45, 99, > 105, 114, 99, 108, 101, 32, 55, 48, 37, 44, 55, 48, 37, 44, 53, 48, > 44, 49, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 32, 45, 45, 105, > 110, 112, 97, 105, 110, 116, 91, 48, 93, 32, 91, 49, 93, 44, 53, 44, > 49, 53, 44, 48, 46, 53, 44, 49, 44, 57, 44, 48, 32, 45, 114, 101, > 109, 111, 118, 101, 91, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 105, > 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, 119, 32, 58, 32, 95, 110, > 98, 95, 105, 116, 101, 114, 49, 62, 61, 48, 44, 95, 110, 98, 95, 105, > 116, 101, 114, 50, 62, 61, 48, 44, 95, 100, 116, 62, 61, 48, 44, 95, > 97, 108, 112, 104, 97, 44, 95, 115, 105, 103, 109, 97, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 105, 116, 101, 114, > 97, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, 105, 110, 112, > 97, 105, 110, 116, 105, 110, 103, 32, 102, 108, 111, 119, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 105, 116, > 101, 114, 49, 61, 52, 39, 44, 32, 39, 110, 98, 95, 105, 116, 101, 114, > 50, 61, 49, 53, 39, 44, 32, 39, 100, 116, 61, 49, 53, 39, 44, 32, > 39, 97, 108, 112, 104, 97, 61, 49, 39, 32, 97, 110, 100, 32, 39, 115, > 105, 103, 109, 97, 61, 51, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 101, 108, 108, 105, 112, 115, 101, > 91, 45, 49, 93, 32, 51, 48, 37, 44, 51, 48, 37, 44, 52, 48, 44, > 51, 48, 44, 48, 44, 49, 44, 50, 53, 53, 32, 45, 114, 101, 118, 101, > 114, 115, 101, 32, 45, 105, 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, > 119, 32, 44, 10, 105, 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, 119, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 52, 125, 44, > 36, 123, 50, 61, 49, 53, 125, 44, 36, 123, 51, 61, 49, 53, 125, 44, > 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 51, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 36, 49, 32, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, > 32, 105, 110, 112, 97, 105, 110, 116, 105, 110, 103, 32, 102, 108, 111, 119, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 110, 111, 114, 109, 91, 48, 93, 32, 45, 113, 117, 97, > 110, 116, 105, 122, 101, 91, 48, 93, 32, 50, 44, 49, 44, 49, 32, 45, > 110, 91, 48, 93, 32, 48, 44, 49, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 105, 102, 32, 36, 62, 32, 45, 108, 91, 48, 44, > 36, 62, 93, 10, 45, 114, 91, 48, 93, 32, 91, 49, 93, 32, 45, 105, > 110, 112, 97, 105, 110, 116, 91, 49, 93, 32, 91, 48, 93, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 45, 100, 105, 102, 102, 117, > 115, 105, 111, 110, 116, 101, 110, 115, 111, 114, 115, 91, 49, 93, 32, 48, > 44, 49, 44, 36, 52, 44, 36, 53, 44, 48, 32, 45, 42, 91, 50, 93, > 32, 91, 48, 93, 32, 45, 115, 109, 111, 111, 116, 104, 91, 49, 93, 32, > 91, 50, 93, 44, 36, 50, 44, 36, 51, 44, 48, 32, 45, 114, 109, 91, > 50, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 105, 110, 112, 97, 105, 110, 116, 95, > 104, 111, 108, 101, 115, 32, 58, 32, 109, 97, 120, 105, 109, 97, 108, 95, > 97, 114, 101, 97, 91, 37, 93, 62, 61, 48, 44, 95, 116, 111, 108, 101, > 114, 97, 110, 99, 101, 62, 61, 48, 44, 95, 105, 115, 95, 104, 105, 103, > 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 110, 112, 97, 105, 110, 116, 32, 97, 108, 108, 32, 99, 111, > 110, 110, 101, 99, 116, 101, 100, 32, 114, 101, 103, 105, 111, 110, 115, 32, > 104, 97, 118, 105, 110, 103, 32, 97, 110, 32, 97, 114, 101, 97, 32, 108, > 101, 115, 115, 32, 116, 104, 97, 110, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 118, 97, 108, 117, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 109, 97, 120, 105, 109, 97, 108, 95, 97, 114, 101, 97, > 61, 52, 39, 44, 32, 39, 116, 111, 108, 101, 114, 97, 110, 99, 101, 61, > 48, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 104, 105, 103, 104, 95, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 110, 111, 105, 115, 101, 32, 53, 37, 44, > 50, 32, 45, 45, 105, 110, 112, 97, 105, 110, 116, 95, 104, 111, 108, 101, > 115, 32, 56, 44, 52, 48, 10, 105, 110, 112, 97, 105, 110, 116, 95, 104, > 111, 108, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 123, 49, 61, 52, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, > 48, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, > 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, > 97, 105, 110, 116, 32, 104, 111, 108, 101, 115, 32, 119, 105, 104, 32, 97, > 114, 101, 97, 32, 108, 101, 115, 115, 32, 116, 104, 97, 110, 32, 36, 49, > 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 111, 108, 101, 114, 97, 110, > 99, 101, 32, 36, 50, 32, 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 51, 44, 104, 105, 103, 104, 44, 108, 111, > 119, 125, 34, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 10, 97, 114, 101, 97, 61, 123, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 49, 125, 44, 36, 49, 42, 119, 42, 104, 42, 100, 44, 36, 49, > 41, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, 44, 115, > 125, 32, 45, 115, 104, 91, 48, 93, 32, 36, 62, 44, 36, 62, 32, 45, > 45, 97, 114, 101, 97, 91, 45, 49, 93, 32, 36, 50, 44, 36, 51, 32, > 45, 108, 101, 91, 45, 49, 93, 32, 36, 49, 32, 45, 111, 114, 91, 49, > 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, > 110, 101, 10, 45, 105, 102, 32, 123, 105, 109, 125, 32, 45, 107, 91, 48, > 93, 32, 119, 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, 100, > 125, 32, 45, 114, 32, 49, 44, 49, 44, 49, 44, 49, 48, 48, 37, 44, > 50, 32, 45, 114, 32, 36, 119, 104, 100, 44, 49, 48, 48, 37, 10, 45, > 101, 108, 115, 101, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, 48, 93, > 32, 91, 49, 93, 44, 48, 44, 123, 50, 42, 33, 36, 50, 43, 33, 33, > 36, 51, 125, 32, 45, 107, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 107, 117, 119, 97, 104, 97, 114, > 97, 32, 58, 32, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 75, 117, 119, 97, 104, 97, > 114, 97, 32, 102, 105, 108, 116, 101, 114, 32, 111, 102, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, 32, 111, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 107, 117, 119, 97, 104, 97, 114, 97, 32, > 53, 10, 107, 117, 119, 97, 104, 97, 114, 97, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 36, 49, 62, 48, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 65, 112, 112, 108, 121, 32, 75, 117, 119, 97, 104, 97, 114, 97, > 32, 102, 105, 108, 116, 101, 114, 32, 111, 102, 32, 115, 105, 122, 101, 32, > 36, 49, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 115, 61, 123, 115, 125, 10, 45, 45, 100, > 105, 108, 97, 116, 101, 32, 36, 49, 32, 45, 99, 111, 109, 112, 111, 115, > 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 109, > 105, 110, 10, 45, 45, 101, 114, 111, 100, 101, 91, 48, 93, 32, 36, 49, > 32, 45, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 45, 49, 93, 32, 109, 97, 120, 10, 45, 45, 91, 45, 50, > 44, 45, 49, 93, 10, 36, 49, 44, 49, 44, 49, 44, 49, 44, 123, 49, > 47, 36, 49, 125, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 48, > 93, 32, 91, 45, 49, 93, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, > 101, 91, 45, 49, 93, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, > 48, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 112, 61, 123, 105, 110, 116, 40, 36, 49, 47, 50, 41, 125, 10, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 102, 32, 34, 118, 49, > 61, 105, 40, 120, 45, 34, 36, 112, 34, 44, 121, 45, 34, 36, 112, 34, > 44, 48, 44, 34, 36, 115, 34, 44, 48, 44, 49, 41, 59, 32, 92, 10, > 118, 50, 61, 105, 40, 120, 43, 34, 36, 112, 34, 44, 121, 45, 34, 36, > 112, 34, 44, 48, 44, 34, 36, 115, 34, 44, 48, 44, 49, 41, 59, 32, > 92, 10, 118, 51, 61, 105, 40, 120, 45, 34, 36, 112, 34, 44, 121, 43, > 34, 36, 112, 34, 44, 48, 44, 34, 36, 115, 34, 44, 48, 44, 49, 41, > 59, 32, 92, 10, 118, 52, 61, 105, 40, 120, 43, 34, 36, 112, 34, 44, > 121, 43, 34, 36, 112, 34, 44, 48, 44, 34, 36, 115, 34, 44, 48, 44, > 49, 41, 59, 32, 92, 10, 118, 109, 61, 109, 105, 110, 40, 118, 49, 44, > 118, 50, 44, 118, 51, 44, 118, 52, 41, 59, 32, 92, 10, 105, 102, 40, > 99, 62, 61, 34, 36, 115, 34, 44, 105, 44, 32, 92, 10, 105, 102, 40, > 118, 109, 61, 61, 118, 49, 44, 105, 40, 120, 45, 34, 36, 112, 34, 44, > 121, 45, 34, 36, 112, 34, 44, 48, 44, 99, 44, 48, 44, 49, 41, 44, > 10, 105, 102, 40, 118, 109, 61, 61, 118, 50, 44, 105, 40, 120, 43, 34, > 36, 112, 34, 44, 121, 45, 34, 36, 112, 34, 44, 48, 44, 99, 44, 48, > 44, 49, 41, 44, 10, 105, 102, 40, 118, 109, 61, 61, 118, 51, 44, 105, > 40, 120, 45, 34, 36, 112, 34, 44, 121, 43, 34, 36, 112, 34, 44, 48, > 44, 99, 44, 48, 44, 49, 41, 44, 10, 105, 40, 120, 43, 34, 36, 112, > 34, 44, 121, 43, 34, 36, 112, 34, 44, 48, 44, 99, 44, 48, 44, 49, > 41, 41, 41, 41, 41, 34, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 48, 44, 123, 115, 45, 50, 125, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 108, 97, 112, 108, 97, 99, 105, 97, 110, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 76, 97, 112, 108, > 97, 99, 105, 97, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 108, 97, 112, 108, 97, 99, 105, 97, 110, 10, 108, 97, 112, 108, 97, 99, > 105, 97, 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 109, 112, 117, 116, 101, 32, 76, 97, 112, 108, 97, 99, 105, 97, 110, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 104, 101, 115, 115, 105, 97, 110, 32, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 40, 100, 61, 61, 49, 41, 44, > 120, 120, 121, 121, 122, 122, 44, 120, 120, 121, 121, 125, 32, 45, 43, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, 99, 32, 58, 32, 95, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 62, 48, 44, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 110, 100, 101, 114, 32, 76, 73, 67, 32, 114, 101, 112, 114, 101, > 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 32, 102, 105, 101, > 108, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 61, 51, 48, 39, 32, 97, 110, 100, > 32, 39, 99, 104, 97, 110, 110, 101, 108, 115, 61, 49, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, > 48, 44, 49, 44, 50, 44, 39, 105, 102, 40, 99, 61, 61, 48, 44, 120, > 45, 119, 47, 50, 44, 121, 45, 104, 47, 50, 41, 39, 32, 45, 45, 108, > 105, 99, 32, 50, 48, 48, 44, 51, 32, 45, 113, 117, 105, 118, 101, 114, > 91, 45, 50, 93, 32, 91, 45, 50, 93, 44, 49, 48, 44, 45, 49, 51, > 44, 49, 44, 49, 44, 50, 53, 53, 10, 108, 105, 99, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, > 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, > 100, 101, 114, 32, 76, 73, 67, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 50, 100, 32, 118, 101, 99, > 116, 111, 114, 32, 102, 105, 101, 108, 100, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 32, 97, > 110, 100, 32, 36, 50, 32, 99, 104, 97, 110, 110, 101, 108, 40, 115, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, > 44, 110, 125, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, > 49, 32, 45, 47, 32, 123, 109, 97, 120, 40, 97, 98, 115, 40, 64, 123, > 45, 49, 44, 109, 125, 41, 44, 97, 98, 115, 40, 64, 123, 45, 49, 44, > 77, 125, 41, 41, 125, 32, 45, 118, 101, 99, 116, 111, 114, 50, 116, 101, > 110, 115, 111, 114, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 36, 50, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 115, 109, 111, 111, 116, 104, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 36, 49, 32, 45, 114, 109, 91, 45, > 50, 93, 10, 45, 101, 113, 117, 97, 108, 105, 122, 101, 10, 45, 110, 109, > 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 97, 112, 95, 116, 111, 110, 101, 115, 32, 58, 32, 95, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 62, 61, 48, 44, 95, 103, 97, 109, 109, 97, 62, > 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, > 48, 44, 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 116, 111, 110, 101, > 32, 109, 97, 112, 112, 105, 110, 103, 32, 111, 112, 101, 114, 97, 116, 111, > 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 44, 32, 98, 97, 115, 101, 100, 32, 111, 110, 32, 80, > 111, 105, 115, 115, 111, 110, 32, 101, 113, 117, 97, 116, 105, 111, 110, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 61, 48, 46, 49, 39, 44, 32, 39, 103, 97, 109, 109, > 97, 61, 48, 46, 56, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 61, 48, 46, 53, 39, 32, 97, 110, 100, 32, 39, 110, 98, > 95, 105, 116, 101, 114, 61, 51, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 109, 97, 112, 95, 116, 111, 110, 101, 115, 32, 44, 10, 109, 97, > 112, 95, 116, 111, 110, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 48, 46, 49, 125, 44, 36, 123, 50, 61, 48, 46, 56, > 125, 44, 36, 123, 51, 61, 48, 46, 53, 125, 44, 36, 123, 52, 61, 51, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 116, 111, 110, 101, 32, 109, 97, 112, 112, 105, 110, 103, 32, 111, > 112, 101, 114, 97, 116, 111, 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 36, 49, 44, 32, 103, 97, 109, 109, 97, 32, 36, 50, 44, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 32, 97, > 110, 100, 32, 36, 52, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 108, 32, 45, 115, > 32, 99, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 103, 32, 120, 121, 44, 49, 32, 45, 97, 32, > 99, 32, 45, 45, 110, 111, 114, 109, 32, 45, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 91, 45, 50, 93, 10, 109, 61, 123, 105, 109, 125, > 32, 77, 61, 123, 105, 77, 125, 32, 45, 98, 91, 45, 49, 93, 32, 36, > 51, 32, 45, 110, 91, 45, 49, 93, 32, 36, 109, 44, 36, 77, 10, 45, > 42, 91, 45, 49, 93, 32, 39, 97, 108, 112, 104, 97, 61, 36, 49, 42, > 105, 77, 59, 40, 97, 108, 112, 104, 97, 47, 40, 49, 101, 45, 49, 48, > 43, 105, 41, 41, 42, 40, 105, 47, 40, 49, 101, 45, 49, 48, 43, 97, > 108, 112, 104, 97, 41, 41, 94, 36, 50, 39, 10, 45, 42, 32, 45, 115, > 32, 99, 32, 45, 103, 91, 45, 50, 93, 32, 120, 44, 45, 49, 32, 45, > 103, 91, 45, 49, 93, 32, 121, 44, 45, 49, 32, 45, 43, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 97, 32, 99, 32, 45, > 42, 32, 48, 46, 50, 53, 32, 45, 101, 110, 100, 108, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 52, 32, 45, 45, 108, 97, 112, 108, 97, 99, > 105, 97, 110, 91, 45, 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, 48, > 46, 50, 53, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, > 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 56, 48, 48, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, > 32, 45, 47, 91, 45, 50, 93, 32, 56, 48, 49, 32, 45, 99, 91, 45, > 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 100, 111, 110, 101, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, 115, 116, 32, 58, > 32, 95, 114, 97, 100, 105, 117, 115, 91, 37, 93, 62, 61, 48, 44, 95, > 112, 111, 119, 101, 114, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 102, 97, 115, 116, 32, 116, 111, 110, > 101, 32, 109, 97, 112, 112, 105, 110, 103, 32, 111, 112, 101, 114, 97, 116, > 111, 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 114, 97, 100, 105, 117, 115, 61, 51, 37, 39, 32, 97, 110, 100, 32, > 39, 112, 111, 119, 101, 114, 61, 48, 46, 51, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, > 115, 116, 32, 44, 10, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, > 97, 115, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 51, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, > 48, 46, 51, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 65, 112, 112, 108, 121, 32, 102, 97, 115, 116, 32, 116, 111, 110, > 101, 32, 109, 97, 112, 112, 105, 110, 103, 32, 111, 112, 101, 114, 97, 116, > 111, 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 32, 97, 110, > 100, 32, 112, 111, 119, 101, 114, 32, 36, 50, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, > 45, 98, 91, 45, 49, 93, 32, 36, 49, 32, 45, 110, 32, 48, 44, 49, > 10, 45, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 45, 91, 45, 49, > 93, 32, 49, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 123, 36, 50, 42, 108, 111, 103, 40, 49, 48, 41, 125, > 32, 45, 101, 120, 112, 91, 45, 49, 93, 10, 45, 108, 101, 91, 45, 50, > 93, 32, 48, 46, 53, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 51, > 93, 10, 45, 45, 42, 91, 45, 51, 93, 32, 45, 49, 32, 45, 43, 91, > 45, 49, 93, 32, 49, 32, 45, 94, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, > 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 10, 45, 94, 91, 45, 52, 44, 45, 50, 93, 32, 45, 101, 113, 91, 45, > 50, 93, 32, 48, 32, 45, 42, 91, 45, 51, 44, 45, 50, 93, 32, 45, > 43, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 110, > 32, 48, 44, 50, 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 109, 101, 97, 110, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 95, 102, 108, 111, 119, 32, 58, 32, 95, 110, 98, 95, 105, 116, 101, 114, > 62, 61, 48, 44, 95, 100, 116, 44, 95, 115, 101, 113, 117, 101, 110, 99, > 101, 95, 102, 108, 97, 103, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 116, 104, > 101, 32, 109, 101, 97, 110, 32, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 32, 102, 108, 111, 119, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 110, 98, 95, 105, 116, 101, 114, 61, 49, 48, 39, 44, > 32, 39, 100, 116, 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, 107, 101, > 101, 112, 95, 115, 101, 113, 117, 101, 110, 99, 101, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 109, 101, 97, 110, 99, 117, 114, 118, 97, > 116, 117, 114, 101, 95, 102, 108, 111, 119, 32, 50, 48, 10, 109, 101, 97, > 110, 99, 117, 114, 118, 97, 116, 117, 114, 101, 95, 102, 108, 111, 119, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, 44, > 36, 123, 50, 61, 51, 48, 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 36, 49, > 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 116, > 104, 101, 32, 109, 101, 97, 110, 32, 99, 117, 114, 118, 97, 116, 117, 114, > 101, 32, 102, 108, 111, 119, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 116, 105, 109, 101, 32, 115, 116, 101, > 112, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 112, 100, 101, > 95, 102, 108, 111, 119, 32, 36, 49, 44, 36, 50, 44, 105, 101, 101, 44, > 36, 51, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 101, 100, 105, 97, 110, 32, 58, 32, 115, 105, 122, 101, 62, 61, 48, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 109, 101, 100, 105, 97, 110, 32, 102, 105, 108, 116, > 101, 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 116, 114, 117, 99, > 116, 117, 114, 105, 110, 103, 32, 101, 108, 101, 109, 101, 110, 116, 32, 115, > 105, 122, 101, 32, 120, 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 109, 101, 100, 105, 97, 110, 32, 53, 10, 35, 64, 103, 109, > 105, 99, 32, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, > 97, 108, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, > 61, 48, 44, 95, 114, 97, 100, 105, 117, 115, 62, 48, 44, 95, 110, 95, > 115, 109, 111, 111, 116, 104, 62, 61, 48, 91, 37, 93, 44, 95, 97, 95, > 115, 109, 111, 111, 116, 104, 62, 61, 48, 91, 37, 93, 44, 95, 105, 115, > 95, 99, 117, 116, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, > 109, 105, 110, 61, 48, 44, 95, 109, 97, 120, 61, 50, 53, 53, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 78, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 108, 111, 99, 97, 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 51, > 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, 54, 39, 44, 32, > 39, 110, 95, 115, 109, 111, 111, 116, 104, 61, 52, 37, 39, 44, 32, 39, > 97, 95, 115, 109, 111, 111, 116, 104, 61, 50, 37, 39, 44, 32, 39, 105, > 115, 95, 99, 117, 116, 61, 49, 39, 44, 32, 39, 109, 105, 110, 61, 48, > 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 61, 50, 53, 53, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 95, 108, 111, 99, 97, 108, 32, 56, 44, 49, 48, 10, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 32, 58, 10, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 51, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 50, 61, 49, 54, 125, 62, 48, 32, 38, 38, > 32, 105, 115, 98, 111, 111, 108, 40, 36, 123, 53, 61, 49, 125, 41, 34, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 52, 37, 125, 44, 36, > 123, 52, 61, 50, 37, 125, 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, > 55, 61, 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 78, 111, 114, 109, 97, 108, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 108, 111, 99, 97, 108, 108, 121, 44, 32, 119, 105, 116, 104, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 44, 32, 114, 97, > 100, 105, 117, 115, 32, 36, 50, 44, 32, 110, 101, 105, 103, 104, 98, 111, > 114, 104, 111, 111, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 32, 36, 51, 32, 97, 110, 100, 32, 97, 118, 101, 114, 97, 103, 101, 32, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 52, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 45, 108, 32, 45, 101, 114, 111, 100, > 101, 32, 123, 50, 42, 36, 50, 43, 49, 125, 32, 45, 115, 32, 99, 32, > 45, 109, 105, 110, 32, 45, 101, 110, 100, 108, 10, 45, 45, 108, 91, 45, > 50, 93, 32, 45, 100, 105, 108, 97, 116, 101, 32, 123, 50, 42, 36, 50, > 43, 49, 125, 32, 45, 115, 32, 99, 32, 45, 109, 97, 120, 32, 45, 101, > 110, 100, 108, 10, 45, 45, 98, 91, 45, 51, 93, 32, 36, 52, 32, 45, > 98, 91, 45, 51, 44, 45, 50, 93, 32, 36, 51, 10, 45, 45, 45, 91, > 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, > 48, 46, 48, 49, 32, 45, 45, 91, 45, 53, 93, 32, 91, 45, 52, 93, > 32, 45, 47, 91, 45, 53, 44, 45, 49, 93, 10, 45, 42, 91, 45, 51, > 44, 45, 50, 93, 32, 123, 36, 49, 43, 49, 125, 32, 45, 42, 91, 45, > 49, 93, 32, 45, 36, 49, 32, 45, 43, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, > 32, 36, 53, 32, 45, 109, 97, 120, 91, 45, 50, 93, 32, 36, 54, 32, > 45, 109, 105, 110, 91, 45, 49, 93, 32, 36, 55, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 51, 44, 45, 49, 93, 32, 45, 43, 10, 45, 105, 102, 32, > 36, 53, 32, 45, 99, 32, 36, 54, 44, 36, 55, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 100, 95, 99, 114, 111, 115, 115, 95, 99, 111, 114, 114, > 101, 108, 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 100, 32, 99, 114, 111, 115, 115, 45, 99, 111, 114, 114, 101, 108, > 97, 116, 105, 111, 110, 32, 117, 115, 105, 110, 103, 32, 116, 119, 111, 45, > 98, 121, 45, 116, 119, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, > 104, 105, 102, 116, 32, 45, 51, 48, 44, 45, 50, 48, 32, 45, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 100, 95, 99, 114, 111, 115, 115, 95, 99, > 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 10, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 100, 95, 99, 114, 111, 115, 115, 95, 99, 111, 114, 114, > 101, 108, 97, 116, 105, 111, 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 100, 32, 99, 114, 111, 115, 115, 45, 99, 111, 114, 114, > 101, 108, 97, 116, 105, 111, 110, 32, 117, 115, 105, 110, 103, 32, 116, 119, > 111, 45, 98, 121, 45, 116, 119, 111, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, 114, 109, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, > 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 10, > 45, 102, 102, 116, 91, 45, 50, 93, 32, 45, 102, 102, 116, 91, 45, 49, > 93, 32, 91, 45, 50, 44, 45, 49, 93, 32, 45, 109, 117, 108, 91, 45, > 50, 93, 32, 91, 45, 53, 93, 32, 45, 109, 117, 108, 91, 45, 49, 93, > 32, 91, 45, 54, 93, 10, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 42, 91, 45, 53, 44, 45, 51, 93, 32, 45, 42, 91, 45, 51, 44, > 45, 50, 93, 32, 45, 43, 91, 45, 51, 44, 45, 50, 93, 32, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 99, 32, 45, 110, 111, 114, 109, 91, 45, 49, 93, 10, 45, 47, 91, 45, > 51, 93, 32, 91, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 104, 97, 115, 101, 95, 99, 111, > 114, 114, 101, 108, 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 115, 116, 105, 109, 97, 116, 101, 32, 116, 114, 97, 110, > 115, 108, 97, 116, 105, 111, 110, 32, 118, 101, 99, 116, 111, 114, 32, 117, > 115, 105, 110, 103, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 115, 104, 105, 102, 116, 32, 45, 51, > 48, 44, 45, 50, 48, 32, 45, 45, 112, 104, 97, 115, 101, 95, 99, 111, > 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 45, 117, 110, 114, 111, 108, > 108, 91, 45, 49, 93, 32, 121, 10, 112, 104, 97, 115, 101, 95, 99, 111, > 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 69, 115, 116, 105, 109, 97, 116, 101, 32, 116, 114, > 97, 110, 115, 108, 97, 116, 105, 111, 110, 32, 118, 101, 99, 116, 111, 114, > 32, 117, 115, 105, 110, 103, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, > 111, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, > 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, > 125, 93, 10, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 95, 99, > 114, 111, 115, 115, 95, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, > 10, 40, 64, 123, 45, 49, 44, 67, 125, 41, 32, 45, 42, 91, 45, 49, > 93, 32, 50, 32, 45, 115, 91, 45, 49, 93, 32, 120, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 45, 51, 62, 64, 123, > 45, 52, 44, 119, 125, 125, 32, 45, 45, 91, 45, 51, 93, 32, 64, 123, > 45, 52, 44, 119, 125, 32, 45, 45, 91, 45, 51, 93, 32, 64, 123, 45, > 52, 44, 119, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 64, 45, 50, 62, 64, 123, 45, 52, 44, 104, 125, 125, 32, 45, 45, > 91, 45, 50, 93, 32, 64, 123, 45, 52, 44, 104, 125, 32, 45, 45, 91, > 45, 50, 93, 32, 64, 123, 45, 52, 44, 104, 125, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 64, 45, 49, 62, 64, 123, 45, 52, > 44, 100, 125, 125, 32, 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 52, > 44, 100, 125, 32, 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 52, 44, > 100, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 99, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 47, > 32, 50, 32, 45, 42, 32, 45, 49, 10, 45, 110, 109, 32, 91, 112, 104, > 97, 115, 101, 92, 32, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 100, 101, 95, 102, 108, > 111, 119, 32, 58, 32, 95, 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, > 44, 95, 100, 116, 44, 95, 118, 101, 108, 111, 99, 105, 116, 121, 95, 99, > 111, 109, 109, 97, 110, 100, 44, 95, 107, 101, 101, 112, 95, 115, 101, 113, > 117, 101, 110, 99, 101, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 105, > 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 97, 32, 103, > 101, 110, 101, 114, 105, 99, 32, 80, 68, 69, 32, 102, 108, 111, 119, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, > 95, 105, 116, 101, 114, 61, 49, 48, 39, 44, 32, 39, 100, 116, 61, 51, > 48, 39, 44, 32, 39, 118, 101, 108, 111, 99, 105, 116, 121, 95, 99, 111, > 109, 109, 97, 110, 100, 61, 108, 97, 112, 108, 97, 99, 105, 97, 110, 39, > 32, 97, 110, 100, 32, 39, 107, 101, 101, 112, 95, 115, 101, 113, 117, 101, > 110, 99, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 112, > 100, 101, 95, 102, 108, 111, 119, 32, 50, 48, 10, 112, 100, 101, 95, 102, > 108, 111, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 48, 125, 44, 36, 123, 50, 61, 51, 48, 125, 44, 36, 123, 51, 61, > 108, 97, 112, 108, 97, 99, 105, 97, 110, 125, 44, 36, 123, 52, 61, 48, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, > 32, 36, 49, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, > 102, 32, 116, 104, 101, 32, 118, 101, 108, 111, 99, 105, 116, 121, 32, 102, > 108, 111, 119, 32, 39, 36, 51, 39, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 105, 109, 101, 32, 115, > 116, 101, 112, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 45, 45, 36, 51, 91, > 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 50, 47, 40, > 48, 46, 48, 49, 43, 109, 97, 120, 40, 97, 98, 115, 40, 105, 109, 41, > 44, 97, 98, 115, 40, 105, 77, 41, 41, 41, 125, 10, 45, 105, 102, 32, > 36, 52, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 101, 108, 115, 101, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, > 36, 52, 32, 45, 114, 109, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 97, 32, 120, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 36, 52, 32, 45, 115, 32, 120, 44, 36, 49, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 112, 101, 114, 105, 111, 100, 105, 122, 101, 95, 112, 111, > 105, 115, 115, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, > 101, 114, 105, 111, 100, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 97, > 32, 80, 111, 105, 115, 115, 111, 110, 32, 115, 111, 108, 118, 101, 114, 32, > 105, 110, 32, 70, 111, 117, 114, 105, 101, 114, 32, 115, 112, 97, 99, 101, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 112, 101, 114, 105, 111, 100, 105, > 122, 101, 95, 112, 111, 105, 115, 115, 111, 110, 32, 45, 97, 114, 114, 97, > 121, 32, 50, 44, 50, 44, 50, 10, 112, 101, 114, 105, 111, 100, 105, 122, > 101, 95, 112, 111, 105, 115, 115, 111, 110, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 80, 101, 114, 105, 111, 100, 105, 122, 101, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 80, 111, 105, > 115, 115, 111, 110, 32, 115, 111, 108, 118, 101, 114, 32, 105, 110, 32, 70, > 111, 117, 114, 105, 101, 114, 32, 115, 112, 97, 99, 101, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 109, 77, 61, > 123, 105, 109, 125, 44, 123, 105, 77, 125, 32, 115, 117, 109, 61, 64, 123, > 48, 44, 43, 125, 10, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 32, > 45, 102, 102, 116, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 100, 61, > 61, 49, 125, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 49, 44, 39, 45, 40, 52, 45, 50, 42, 99, 111, 115, 40, 50, 42, 120, > 42, 112, 105, 47, 119, 41, 45, 50, 42, 99, 111, 115, 40, 50, 42, 121, > 42, 112, 105, 47, 104, 41, 41, 39, 10, 45, 101, 108, 115, 101, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 39, 45, 40, 54, 45, 50, 42, 99, 111, 115, 40, 50, 42, 120, 42, 112, > 105, 47, 119, 41, 45, 50, 42, 99, 111, 115, 40, 50, 42, 121, 42, 112, > 105, 47, 104, 41, 45, 50, 42, 99, 111, 115, 40, 50, 42, 122, 42, 112, > 105, 47, 100, 41, 41, 39, 10, 45, 101, 110, 100, 105, 102, 10, 45, 61, > 91, 45, 49, 93, 32, 49, 32, 45, 47, 91, 45, 51, 44, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 61, > 91, 45, 50, 93, 32, 36, 115, 117, 109, 32, 45, 61, 91, 45, 49, 93, > 32, 48, 10, 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 99, 32, 36, 109, 77, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 101, 100, 95, 101, 121, 101, 32, 58, 32, 48, 60, 61, 95, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 60, 61, 49, 48, 48, 44, 95, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 48, 60, 61, > 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 60, 61, 49, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 116, 116, 101, 110, 117, 97, 116, > 101, 32, 114, 101, 100, 45, 101, 121, 101, 32, 101, 102, 102, 101, 99, 116, > 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 61, 55, 53, 39, 44, 32, 39, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 51, 46, 53, 39, 32, 97, > 110, 100, 32, 39, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 61, > 48, 46, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 100, > 95, 101, 121, 101, 32, 44, 10, 114, 101, 100, 95, 101, 121, 101, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 55, 53, 125, 44, 36, > 123, 50, 61, 51, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, 49, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 116, 116, 101, 110, 117, > 97, 116, 101, 32, 114, 101, 100, 45, 101, 121, 101, 32, 101, 102, 102, 101, > 99, 116, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 36, 49, > 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 32, > 97, 110, 100, 32, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 32, > 36, 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, > 115, 32, 99, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, > 45, 103, 101, 91, 45, 49, 93, 32, 36, 49, 37, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 50, 32, 45, 115, 113, 114, 116, 91, 45, 49, 93, 32, > 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, > 32, 49, 10, 45, 110, 91, 45, 49, 93, 32, 36, 51, 44, 49, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, > 49, 50, 56, 32, 45, 97, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, > 114, 103, 98, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 109, 111, > 118, 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 58, 32, 95, > 109, 97, 115, 107, 95, 115, 105, 122, 101, 62, 48, 44, 32, 95, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 91, 37, 93, 62, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, 104, 111, 116, > 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 109, 97, 115, 107, 95, 115, 105, 122, 101, 61, > 51, 39, 32, 97, 110, 100, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 61, 49, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 110, 111, > 105, 115, 101, 32, 49, 48, 44, 50, 32, 45, 45, 114, 101, 109, 111, 118, > 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 44, 10, 114, 101, > 109, 111, 118, 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 51, 125, 62, 48, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 48, 37, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, 101, 32, > 104, 111, 116, 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 109, 97, 115, 107, > 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 45, 109, 101, 100, 105, 97, 110, 32, 36, 49, 32, 45, > 45, 45, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 103, 101, 91, > 45, 49, 93, 32, 36, 50, 10, 45, 42, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 32, 45, 61, 61, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, > 45, 51, 44, 45, 49, 93, 32, 45, 43, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 101, 109, 111, 118, 101, 95, 112, 105, 120, 101, 108, 115, 32, > 58, 32, 100, 101, 110, 115, 105, 116, 121, 62, 61, 48, 44, 95, 112, 105, > 120, 101, 108, 95, 115, 117, 109, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, 40, 105, 46, 101, 46, > 32, 115, 101, 116, 32, 116, 111, 32, 48, 41, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 100, 101, 110, 115, 105, 116, 121, 32, 40, 105, 110, > 32, 112, 101, 114, 99, 101, 110, 116, 41, 32, 111, 102, 32, 110, 111, 110, > 45, 122, 101, 114, 111, 32, 112, 105, 120, 101, 108, 115, 32, 116, 111, 32, > 48, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 100, 101, 110, 115, 105, 116, 121, 32, 105, 115, > 32, 114, 101, 103, 97, 114, 100, 101, 100, 32, 97, 103, 97, 105, 110, 115, > 116, 32, 39, 112, 105, 120, 101, 108, 95, 115, 117, 109, 39, 32, 101, 120, > 99, 101, 112, 116, 32, 105, 102, 32, 105, 116, 32, 105, 115, 32, 115, 101, > 116, 32, 116, 111, 32, 39, 48, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 105, 110, 32, 116, 104, 105, 115, 32, 99, 97, 115, 101, 44, > 32, 39, 112, 105, 120, 101, 108, 95, 115, 117, 109, 39, 32, 104, 97, 115, > 32, 100, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 32, 39, > 119, 105, 100, 116, 104, 42, 104, 101, 105, 103, 104, 116, 39, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, > 61, 49, 48, 39, 44, 32, 39, 112, 105, 120, 101, 108, 95, 115, 117, 109, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 109, 111, > 118, 101, 95, 112, 105, 120, 101, 108, 115, 32, 53, 48, 10, 114, 101, 109, > 111, 118, 101, 95, 112, 105, 120, 101, 108, 115, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 48, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 48, 125, 62, 61, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, 101, 32, 36, 49, > 37, 32, 111, 102, 32, 110, 111, 110, 45, 122, 101, 114, 111, 32, 112, 105, > 120, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 110, 111, 114, 109, 32, > 45, 103, 116, 91, 45, 49, 93, 32, 48, 10, 45, 105, 102, 32, 36, 50, > 32, 114, 97, 116, 101, 61, 123, 36, 49, 42, 36, 50, 47, 109, 97, 120, > 40, 49, 101, 45, 56, 44, 64, 123, 45, 49, 44, 43, 125, 41, 125, 10, > 45, 101, 108, 115, 101, 32, 114, 97, 116, 101, 61, 123, 36, 49, 42, 119, > 42, 104, 47, 109, 97, 120, 40, 49, 101, 45, 56, 44, 64, 123, 45, 49, > 44, 43, 125, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 45, 49, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 103, 101, > 91, 45, 49, 93, 32, 36, 114, 97, 116, 101, 37, 32, 45, 42, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 104, 97, 114, 112, 101, 110, 32, 58, > 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 32, 58, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 101, 100, 103, > 101, 62, 61, 48, 44, 95, 97, 108, 112, 104, 97, 44, 95, 115, 105, 103, > 109, 97, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 83, 104, 97, 114, 112, 101, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 105, 110, 118, > 101, 114, 115, 101, 32, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 111, > 114, 32, 115, 104, 111, 99, 107, 32, 102, 105, 108, 116, 101, 114, 115, 32, > 109, 101, 116, 104, 111, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 101, 100, 103, 101, 39, 32, 109, 117, 115, 116, 32, 98, 101, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 116, 111, 32, 101, 110, > 97, 98, 108, 101, 32, 115, 104, 111, 99, 107, 45, 102, 105, 108, 116, 101, > 114, 32, 109, 101, 116, 104, 111, 100, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 97, 108, 112, 104, 97, 61, 48, 39, 32, 97, 110, 100, > 32, 39, 115, 105, 103, 109, 97, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 115, 104, 97, 114, 112, 101, 110, 32, 51, 48, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 53, 32, 45, 45, 115, 104, > 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 51, 48, 48, 44, 49, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 109, 111, 111, 116, 104, 32, 58, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, 115, 104, > 97, 114, 112, 110, 101, 115, 115, 62, 61, 48, 44, 95, 97, 110, 105, 115, > 111, 116, 114, 111, 112, 121, 44, 95, 97, 108, 112, 104, 97, 44, 95, 115, > 105, 103, 109, 97, 44, 95, 100, 108, 62, 48, 44, 95, 100, 97, 62, 48, > 44, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 62, 48, 44, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 102, 97, 115, > 116, 95, 97, 112, 112, 114, 111, 120, 61, 123, 32, 48, 32, 124, 32, 49, > 32, 125, 32, 58, 32, 110, 98, 95, 105, 116, 101, 114, 97, 116, 105, 111, > 110, 115, 62, 61, 48, 44, 95, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 62, 61, 48, 44, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 44, > 95, 97, 108, 112, 104, 97, 44, 95, 115, 105, 103, 109, 97, 44, 95, 100, > 116, 62, 48, 44, 48, 32, 58, 32, 91, 116, 101, 110, 115, 111, 114, 95, > 102, 105, 101, 108, 100, 93, 44, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 44, 95, 100, 108, 62, 48, 44, 95, 100, 97, 62, 48, > 44, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 62, 48, 44, 95, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 102, 97, > 115, 116, 95, 97, 112, 112, 114, 111, 120, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 32, 58, 32, 91, 116, 101, 110, 115, 111, 114, 95, 102, 105, > 101, 108, 100, 93, 44, 95, 110, 98, 95, 105, 116, 101, 114, 115, 62, 61, > 48, 44, 95, 100, 116, 62, 48, 44, 48, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 109, 111, 111, 116, 104, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 110, 105, 115, 111, 116, 114, 111, 112, 105, 99, 97, 108, 108, 121, 32, > 117, 115, 105, 110, 103, 32, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, > 80, 68, 69, 39, 115, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 102, 105, 101, 108, 100, 32, 111, 102, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 100, 105, 102, 102, 117, 115, 105, 111, > 110, 32, 116, 101, 110, 115, 111, 114, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 39, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 105, 110, 32, 91, 48, 44, 49, > 93, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 110, 101, 97, 114, 101, 115, 116, 32, 124, > 32, 49, 61, 108, 105, 110, 101, 97, 114, 32, 124, 32, 50, 61, 114, 117, > 110, 103, 101, 45, 107, 117, 116, 116, 97, 32, 125, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 61, 48, 46, 55, 39, 44, 32, 39, 97, 110, 105, 115, 111, 116, 114, 111, > 112, 121, 61, 48, 46, 51, 39, 44, 32, 39, 97, 108, 112, 104, 97, 61, > 48, 46, 54, 39, 44, 32, 39, 115, 105, 103, 109, 97, 61, 49, 46, 49, > 39, 44, 32, 39, 100, 108, 61, 48, 46, 56, 39, 44, 32, 39, 100, 97, > 61, 51, 48, 39, 44, 32, 39, 112, 114, 101, 99, 105, 115, 105, 111, 110, > 61, 50, 39, 44, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, > 105, 111, 110, 61, 48, 39, 32, 97, 110, 100, 32, 39, 102, 97, 115, 116, > 95, 97, 112, 112, 114, 111, 120, 61, 49, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 91, 48, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 51, 32, 45, > 115, 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 50, 48, 32, 45, 100, > 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 50, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 45, 49, 48, 48, 44, 49, 48, 48, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 50, 32, 45, 115, 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, > 49, 48, 48, 44, 48, 46, 50, 44, 49, 44, 52, 44, 52, 32, 45, 100, > 111, 110, 101, 32, 45, 45, 119, 97, 114, 112, 91, 48, 93, 32, 91, 45, > 49, 93, 44, 49, 44, 49, 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, > 108, 105, 116, 95, 102, 114, 101, 113, 32, 58, 32, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 62, 48, 91, 37, 93, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 83, 112, 108, 105, 116, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 116, 111, 32, 108, > 111, 119, 32, 97, 110, 100, 32, 104, 105, 103, 104, 32, 102, 114, 101, 113, > 117, 101, 110, 99, 121, 32, 112, 97, 114, 116, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 115, 112, 108, 105, 116, 95, 102, 114, 101, 113, 32, 50, 37, > 10, 115, 112, 108, 105, 116, 95, 102, 114, 101, 113, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 83, 112, 108, 105, 116, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 105, 110, 116, 111, 32, 108, 111, 119, 32, 97, 110, > 100, 32, 104, 105, 103, 104, 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, > 32, 112, 97, 114, 116, 115, 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 45, 98, 32, 36, 49, 32, 45, 45, 91, 48, 93, > 32, 91, 49, 93, 32, 45, 114, 118, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 111, 108, 105, 100, 105, 102, 121, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 82, 101, 112, 108, 97, 99, 101, 32, 116, 114, 97, 110, 115, > 112, 97, 114, 101, 110, 116, 32, 114, 101, 103, 105, 111, 110, 115, 32, 111, > 102, 32, 97, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 32, 98, > 121, 32, 109, 111, 114, 112, 104, 111, 108, 111, 103, 105, 99, 97, 108, 108, > 121, 32, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 99, > 111, 108, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 32, 45, 103, 101, 91, 45, 49, 93, 32, 49, > 50, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, > 112, 112, 101, 110, 100, 32, 99, 32, 45, 45, 115, 111, 108, 105, 100, 105, > 102, 121, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, > 10, 115, 111, 108, 105, 100, 105, 102, 121, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 116, 114, 97, > 110, 115, 112, 97, 114, 101, 110, 116, 32, 114, 101, 103, 105, 111, 110, 115, > 32, 111, 102, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 98, 121, 32, 109, 111, 114, 112, 104, 111, 108, 111, 103, 105, 99, 97, > 108, 108, 121, 32, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, > 32, 99, 111, 108, 111, 114, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 32, 45, 116, 111, 95, 97, > 10, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 91, 45, 50, 93, 32, 45, 103, 101, 91, 45, 50, 93, > 32, 53, 48, 37, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, > 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 45, 49, 44, 45, 49, 44, 45, 49, 44, 45, 49, 32, 45, 116, 111, 95, > 114, 103, 98, 91, 45, 49, 93, 10, 45, 100, 111, 10, 45, 45, 100, 105, > 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, 50, 93, 32, 48, 44, > 48, 44, 45, 49, 44, 45, 49, 44, 45, 49, 44, 49, 48, 48, 48, 44, > 49, 48, 48, 48, 44, 49, 48, 48, 48, 10, 45, 101, 114, 111, 100, 101, > 91, 45, 50, 93, 32, 51, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 99, 111, 108, 111, 114, 91, 45, 50, 93, 32, 48, 44, 48, 44, 49, 48, > 48, 48, 44, 49, 48, 48, 48, 44, 49, 48, 48, 48, 44, 45, 49, 44, > 45, 49, 44, 45, 49, 10, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 47, 91, 45, 49, 93, 32, 50, 10, 45, 106, 91, 45, 49, 93, 32, > 91, 45, 51, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 50, 93, 10, 45, 119, 104, 105, 108, 101, 32, 123, 105, 109, 60, 48, > 125, 10, 45, 107, 91, 45, 49, 93, 10, 45, 110, 109, 32, 36, 110, 109, > 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 111, 108, 105, 100, > 105, 102, 121, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, 95, 115, 105, > 103, 109, 97, 62, 61, 49, 44, 95, 100, 115, 105, 103, 109, 97, 62, 61, > 49, 44, 48, 60, 61, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 60, > 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, > 97, 99, 101, 32, 116, 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 32, > 114, 101, 103, 105, 111, 110, 115, 32, 111, 102, 32, 97, 32, 82, 71, 66, > 65, 32, 105, 109, 97, 103, 101, 32, 98, 121, 32, 108, 105, 110, 101, 97, > 114, 108, 121, 32, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, > 32, 99, 111, 108, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 105, 103, 109, 97, 61, 49, 46, 53, 39, 44, 32, 39, 100, > 115, 105, 103, 109, 97, 61, 49, 39, 32, 97, 110, 100, 32, 39, 112, 114, > 101, 99, 105, 115, 105, 111, 110, 61, 48, 46, 53, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, > 103, 101, 91, 45, 49, 93, 32, 49, 50, 48, 32, 45, 42, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, > 45, 45, 115, 111, 108, 105, 100, 105, 102, 121, 95, 108, 105, 110, 101, 97, > 114, 32, 44, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, > 97, 10, 115, 111, 108, 105, 100, 105, 102, 121, 95, 108, 105, 110, 101, 97, > 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 49, 46, 53, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 50, 61, 49, > 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 53, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 49, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 116, > 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 32, 114, 101, 103, 105, 111, > 110, 115, 32, 111, 102, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 98, 121, 32, 108, 105, 110, 101, 97, 114, 108, 121, 32, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 99, 111, 108, 111, > 114, 115, 44, 32, 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, > 49, 44, 32, 100, 115, 105, 103, 109, 97, 32, 36, 50, 32, 97, 110, 100, > 32, 112, 114, 101, 99, 105, 115, 105, 111, 110, 32, 36, 51, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, > 10, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 37, 32, 45, 42, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 10, 115, 105, 103, 109, 97, 61, 36, > 49, 32, 45, 100, 111, 10, 78, 61, 123, 118, 61, 114, 111, 117, 110, 100, > 40, 51, 42, 36, 115, 105, 103, 109, 97, 41, 59, 109, 105, 110, 40, 51, > 51, 44, 109, 97, 120, 40, 51, 44, 118, 43, 49, 45, 40, 118, 37, 50, > 41, 41, 41, 125, 10, 36, 78, 44, 36, 78, 32, 45, 61, 91, 45, 49, > 93, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, > 49, 93, 32, 123, 45, 49, 47, 36, 115, 105, 103, 109, 97, 94, 50, 125, > 32, 45, 101, 120, 112, 91, 45, 49, 93, 32, 45, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 10, 45, 45, 99, > 111, 110, 118, 111, 108, 118, 101, 91, 45, 51, 44, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 51, 93, 10, 45, 109, 97, 120, > 91, 45, 49, 93, 32, 49, 101, 45, 53, 32, 45, 47, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, > 32, 123, 118, 61, 114, 111, 117, 110, 100, 40, 40, 49, 47, 51, 45, 36, > 78, 47, 54, 41, 42, 36, 51, 43, 36, 78, 47, 50, 41, 59, 109, 97, > 120, 40, 51, 44, 118, 43, 49, 45, 40, 118, 37, 50, 41, 41, 125, 10, > 45, 45, 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, > 50, 93, 32, 91, 45, 51, 93, 32, 45, 114, 109, 91, 45, 51, 93, 10, > 45, 45, 91, 45, 51, 44, 45, 50, 93, 10, 115, 105, 103, 109, 97, 61, > 123, 36, 115, 105, 103, 109, 97, 42, 36, 50, 125, 10, 45, 119, 104, 105, > 108, 101, 32, 123, 33, 105, 109, 125, 10, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 111, 108, 105, 100, 105, 102, 121, 95, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, > 97, 99, 101, 32, 116, 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 32, > 114, 101, 103, 105, 111, 110, 115, 32, 111, 102, 32, 82, 71, 66, 65, 32, > 105, 109, 97, 103, 101, 32, 98, 121, 32, 99, 111, 108, 111, 114, 32, 112, > 114, 111, 112, 97, 103, 97, 116, 105, 111, 110, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 103, 101, > 91, 45, 49, 93, 32, 49, 50, 48, 32, 45, 42, 91, 45, 49, 93, 32, > 50, 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, 45, 45, > 115, 111, 108, 105, 100, 105, 102, 121, 95, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, > 10, 115, 111, 108, 105, 100, 105, 102, 121, 95, 119, 97, 116, 101, 114, 115, > 104, 101, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, > 101, 112, 108, 97, 99, 101, 32, 116, 114, 97, 110, 115, 112, 97, 114, 101, > 110, 116, 32, 114, 101, 103, 105, 111, 110, 115, 32, 111, 102, 32, 82, 71, > 66, 65, 32, 105, 109, 97, 103, 101, 36, 63, 32, 98, 121, 32, 99, 111, > 108, 111, 114, 32, 112, 114, 111, 112, 97, 103, 97, 116, 105, 111, 110, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, 64, 35, 62, > 49, 125, 10, 45, 43, 91, 48, 93, 32, 49, 32, 45, 103, 101, 91, 49, > 93, 32, 53, 48, 37, 32, 45, 42, 91, 48, 93, 32, 91, 49, 93, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 49, 93, 32, 49, 32, 45, > 42, 91, 49, 93, 32, 45, 49, 10, 45, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, 91, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 111, 108, 118, 101, 95, 112, 111, 105, 115, 115, 111, 110, 32, 58, 32, > 34, 108, 97, 112, 108, 97, 99, 105, 97, 110, 95, 99, 111, 109, 109, 97, > 110, 100, 34, 44, 95, 110, 98, 95, 105, 116, 101, 114, 97, 116, 105, 111, > 110, 115, 62, 61, 48, 44, 95, 116, 105, 109, 101, 95, 115, 116, 101, 112, > 62, 48, 44, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, 108, 118, 101, 32, > 80, 111, 105, 115, 115, 111, 110, 32, 101, 113, 117, 97, 116, 105, 111, 110, > 32, 115, 111, 32, 116, 104, 97, 116, 32, 97, 112, 112, 108, 121, 105, 110, > 103, 32, 39, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 91, 110, 93, > 39, 32, 105, 115, 32, 99, 108, 111, 115, 101, 32, 116, 111, 32, 116, 104, > 101, 32, 114, 101, 115, 117, 108, 116, 32, 111, 102, 32, 39, 45, 108, 97, > 112, 108, 97, 99, 105, 97, 110, 95, 99, 111, 109, 109, 97, 110, 100, 91, > 110, 93, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, > 108, 118, 105, 110, 103, 32, 105, 115, 32, 112, 101, 114, 102, 111, 114, 109, > 101, 100, 32, 117, 115, 105, 110, 103, 32, 97, 32, 109, 117, 108, 116, 105, > 45, 115, 99, 97, 108, 101, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 100, 101, 115, 99, 101, 110, 116, 32, 97, 108, 103, 111, 114, 105, 116, 104, > 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, > 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 48, 39, 44, 32, 116, 104, > 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 115, 99, 97, 108, > 101, 115, 32, 105, 115, 32, 97, 117, 116, 111, 109, 97, 116, 105, 99, 97, > 108, 108, 121, 32, 100, 101, 116, 101, 114, 109, 105, 110, 101, 100, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 115, 61, 54, 48, 39, 44, 32, 39, 100, 116, > 61, 53, 39, 32, 97, 110, 100, 32, 39, 110, 98, 95, 115, 99, 97, 108, > 101, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 32, 34, > 102, 111, 111, 32, 58, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 120, 34, 32, 45, 45, 115, 111, 108, 118, 101, 95, 112, 111, 105, 115, 115, > 111, 110, 32, 102, 111, 111, 32, 45, 45, 102, 111, 111, 91, 48, 93, 32, > 45, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 91, 49, 93, 10, 115, > 111, 108, 118, 101, 95, 112, 111, 105, 115, 115, 111, 110, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 54, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 51, 61, 53, 125, 62, 48, 32, 38, 38, > 32, 36, 123, 52, 61, 48, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 83, 111, 108, 118, 101, 32, 80, 111, 105, 115, 115, > 111, 110, 32, 101, 113, 117, 97, 116, 105, 111, 110, 32, 102, 111, 114, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 102, 111, 114, 32, 108, 97, 112, > 108, 97, 99, 105, 97, 110, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, > 36, 49, 39, 44, 32, 119, 105, 116, 104, 32, 36, 50, 32, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 115, 44, 32, 116, 105, 109, 101, 32, 115, 116, > 101, 112, 32, 36, 51, 32, 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 40, 36, 52, 61, 61, 48, 41, 44, 36, 52, 44, > 97, 117, 116, 111, 125, 34, 32, 115, 99, 97, 108, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 91, 48, 93, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 105, 102, 40, 36, 52, 44, 36, 52, 44, 105, 110, 116, > 40, 109, 97, 120, 40, 108, 111, 103, 50, 40, 109, 97, 120, 40, 119, 44, > 104, 41, 41, 45, 49, 44, 49, 41, 41, 41, 125, 10, 102, 61, 123, 50, > 94, 36, 60, 125, 10, 45, 114, 91, 49, 93, 32, 64, 123, 48, 44, 109, > 97, 120, 40, 49, 44, 119, 47, 36, 102, 41, 125, 44, 64, 123, 48, 44, > 109, 97, 120, 40, 49, 44, 104, 47, 36, 102, 41, 125, 44, 49, 44, 49, > 48, 48, 37, 44, 51, 10, 45, 45, 114, 91, 48, 93, 32, 91, 49, 93, > 44, 50, 32, 45, 108, 91, 45, 49, 93, 32, 45, 36, 49, 32, 45, 107, > 91, 48, 93, 32, 45, 101, 110, 100, 108, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 50, 32, 45, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, > 91, 45, 50, 93, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 51, 47, 109, 97, 120, 40, > 49, 101, 45, 56, 44, 97, 98, 115, 40, 105, 109, 41, 44, 97, 98, 115, > 40, 105, 77, 41, 41, 125, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, > 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 93, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, > 115, 32, 58, 32, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 48, > 44, 95, 98, 97, 115, 101, 95, 115, 99, 97, 108, 101, 91, 37, 93, 62, > 61, 48, 44, 95, 100, 101, 116, 97, 105, 108, 95, 115, 99, 97, 108, 101, > 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 83, 112, 108, 105, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 105, 110, 116, 111, 32, 39, 110, 98, 95, 115, > 99, 97, 108, 101, 115, 39, 32, 115, 112, 97, 116, 105, 97, 108, 32, 115, > 99, 97, 108, 101, 115, 32, 40, 103, 97, 117, 115, 115, 105, 97, 110, 32, > 112, 121, 114, 97, 109, 105, 100, 115, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 52, > 39, 44, 32, 39, 98, 97, 115, 101, 95, 115, 99, 97, 108, 101, 61, 50, > 37, 39, 32, 97, 110, 100, 32, 39, 100, 101, 116, 97, 105, 108, 95, 115, > 99, 97, 108, 101, 61, 48, 46, 53, 37, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 32, > 44, 10, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, > 36, 123, 49, 61, 52, 125, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 51, 61, 48, 46, 53, 37, 125, 62, 61, 48, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 83, 112, 108, 105, 116, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 36, 49, 32, 115, > 112, 97, 116, 105, 97, 108, 32, 115, 99, 97, 108, 101, 115, 32, 119, 105, > 116, 104, 32, 98, 97, 115, 101, 32, 115, 99, 97, 108, 101, 32, 36, 50, > 32, 97, 110, 100, 32, 100, 101, 116, 97, 105, 108, 32, 115, 99, 97, 108, > 101, 32, 36, 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 115, 115, > 61, 123, 109, 97, 120, 40, 48, 46, 51, 44, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, > 36, 50, 42, 109, 97, 120, 40, 119, 44, 104, 41, 44, 36, 50, 41, 41, > 125, 10, 115, 101, 61, 123, 109, 97, 120, 40, 48, 46, 51, 44, 105, 102, > 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, > 36, 51, 125, 44, 36, 51, 42, 109, 97, 120, 40, 119, 44, 104, 41, 44, > 36, 51, 41, 41, 125, 10, 100, 115, 61, 123, 36, 115, 101, 45, 36, 115, > 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, > 125, 32, 45, 45, 98, 91, 45, 49, 93, 32, 123, 36, 115, 115, 43, 36, > 62, 42, 36, 100, 115, 47, 40, 36, 49, 45, 50, 41, 125, 32, 45, 45, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 118, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 116, 114, 117, 99, 116, 117, 114, 101, 116, 101, 110, 115, > 111, 114, 115, 32, 58, 32, 95, 115, 99, 104, 101, 109, 101, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 115, 116, 114, 117, 99, 116, 117, > 114, 101, 32, 116, 101, 110, 115, 111, 114, 32, 102, 105, 101, 108, 100, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 115, 99, > 104, 101, 109, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, > 61, 99, 101, 110, 116, 101, 114, 101, 100, 32, 124, 32, 49, 61, 102, 111, > 114, 119, 97, 114, 100, 45, 98, 97, 99, 107, 119, 97, 114, 100, 49, 32, > 124, 32, 50, 61, 102, 111, 114, 119, 97, 114, 100, 45, 98, 97, 99, 107, > 119, 97, 114, 100, 50, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 115, 99, 104, 101, 109, 101, 61, 50, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 115, 116, 114, 117, 99, 116, 117, 114, 101, 116, 101, 110, 115, > 111, 114, 115, 32, 45, 97, 98, 115, 32, 45, 112, 111, 119, 32, 48, 46, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 115, 121, 110, 116, 101, 120, 116, > 117, 114, 105, 122, 101, 32, 58, 32, 95, 119, 105, 100, 116, 104, 91, 37, > 93, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 91, 37, 93, 62, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 121, 110, 116, > 104, 101, 116, 105, 122, 101, 32, 39, 119, 105, 100, 116, 104, 39, 120, 39, > 104, 101, 105, 103, 104, 116, 39, 32, 118, 101, 114, 115, 105, 111, 110, 115, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 109, 105, 99, > 114, 111, 45, 116, 101, 120, 116, 117, 114, 101, 115, 32, 98, 121, 32, 112, > 104, 97, 115, 101, 32, 114, 97, 110, 100, 111, 109, 105, 122, 97, 116, 105, > 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 101, > 32, 116, 101, 120, 116, 117, 114, 101, 32, 115, 121, 110, 116, 104, 101, 115, > 105, 115, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 32, 105, 115, 32, > 97, 32, 115, 116, 114, 97, 105, 103, 104, 116, 102, 111, 114, 119, 97, 114, > 100, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, > 32, 111, 102, 32, 116, 104, 101, 32, 109, 101, 116, 104, 111, 100, 32, 100, > 101, 115, 99, 114, 105, 98, 101, 100, 32, 105, 110, 32, 58, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 104, 116, 116, 112, 58, 47, 47, 119, 119, > 119, 46, 105, 112, 111, 108, 46, 105, 109, 47, 112, 117, 98, 47, 97, 114, > 116, 47, 50, 48, 49, 49, 47, 103, 103, 109, 95, 114, 112, 110, 47, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 119, 105, 100, 116, 104, 61, > 104, 101, 105, 103, 104, 116, 61, 49, 48, 48, 37, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 99, 114, 111, 112, 32, 50, 44, 50, 56, 50, 44, 53, > 48, 44, 51, 50, 56, 32, 45, 45, 115, 121, 110, 116, 101, 120, 116, 117, > 114, 105, 122, 101, 32, 51, 50, 48, 44, 51, 50, 48, 10, 115, 121, 110, > 116, 101, 120, 116, 117, 114, 105, 122, 101, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 49, 48, 48, 37, 125, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 115, 121, 110, 116, 104, 101, 116, > 105, 122, 101, 32, 36, 49, 120, 36, 50, 32, 118, 101, 114, 115, 105, 111, > 110, 115, 32, 111, 102, 32, 116, 101, 120, 116, 117, 114, 101, 36, 63, 32, > 98, 121, 32, 112, 104, 97, 115, 101, 32, 114, 97, 110, 100, 111, 109, 105, > 122, 97, 116, 105, 111, 110, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 109, 77, 61, 123, 105, 109, 125, 44, 123, 105, 77, 125, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 115, 125, 32, 45, 115, 104, 91, 45, 49, 93, > 32, 36, 62, 44, 36, 62, 32, 115, 117, 109, 36, 62, 61, 64, 123, 45, > 49, 44, 43, 125, 32, 118, 97, 114, 36, 62, 61, 64, 123, 45, 49, 44, > 105, 118, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, > 101, 10, 110, 119, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, 119, > 44, 36, 49, 41, 125, 10, 110, 104, 61, 123, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, > 36, 50, 42, 104, 44, 36, 50, 41, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 115, 125, 32, 115, 117, 109, 36, 62, 61, 123, 36, 123, 115, > 117, 109, 36, 62, 125, 42, 36, 110, 119, 42, 36, 110, 104, 47, 40, 119, > 42, 104, 41, 125, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, > 36, 110, 119, 62, 119, 124, 124, 36, 110, 104, 62, 104, 125, 10, 45, 112, > 101, 114, 105, 111, 100, 105, 122, 101, 95, 112, 111, 105, 115, 115, 111, 110, > 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 114, 101, 99, 116, > 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 53, 44, 53, 44, 123, 119, > 45, 54, 125, 44, 123, 104, 45, 54, 125, 44, 49, 44, 49, 32, 45, 98, > 91, 45, 49, 93, 32, 50, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 49, 10, 36, 110, 119, 44, 36, 110, 104, 44, 49, 44, 64, 123, 45, 50, > 44, 115, 125, 32, 45, 102, 99, 91, 45, 49, 93, 32, 64, 123, 45, 97, > 118, 101, 114, 97, 103, 101, 95, 99, 111, 108, 111, 114, 91, 45, 51, 93, > 125, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 51, 93, 44, 123, 40, > 119, 45, 64, 123, 45, 50, 44, 119, 125, 41, 47, 50, 125, 44, 123, 40, > 104, 45, 64, 123, 45, 50, 44, 104, 125, 41, 47, 50, 125, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 50, 93, 10, 45, 114, 109, 91, 45, 51, 44, > 45, 50, 93, 10, 45, 101, 108, 115, 101, 10, 45, 114, 32, 36, 110, 119, > 44, 36, 110, 104, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 10, 45, 112, 101, 114, 105, 111, 100, 105, > 122, 101, 95, 112, 111, 105, 115, 115, 111, 110, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 102, 102, 116, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, 45, 112, 105, 125, > 44, 123, 112, 105, 125, 10, 45, 61, 91, 45, 49, 93, 32, 48, 10, 45, > 105, 102, 32, 123, 33, 40, 119, 37, 50, 41, 125, 32, 45, 61, 91, 45, > 49, 93, 32, 123, 40, 63, 60, 48, 46, 53, 41, 42, 112, 105, 125, 44, > 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 33, 40, 104, 37, 50, 41, 125, 32, 45, > 61, 91, 45, 49, 93, 32, 123, 40, 63, 60, 48, 46, 53, 41, 42, 112, > 105, 125, 44, 48, 44, 123, 105, 110, 116, 40, 104, 47, 50, 41, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 40, 104, 37, > 50, 41, 38, 38, 33, 40, 104, 37, 50, 41, 125, 32, 45, 61, 91, 45, > 49, 93, 32, 123, 40, 63, 60, 48, 46, 53, 41, 42, 112, 105, 125, 44, > 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, 44, 123, 105, 110, 116, 40, > 104, 47, 50, 41, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 115, > 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, 10, > 45, 45, 42, 91, 45, 52, 44, 45, 49, 93, 32, 45, 45, 42, 91, 45, > 52, 44, 45, 51, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 42, 91, 45, 53, 44, 45, 51, 93, 32, 45, 42, 91, 45, 51, 44, > 45, 50, 93, 32, 45, 45, 91, 45, 51, 44, 45, 50, 93, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 115, 125, 32, 45, 61, 91, 45, 50, 93, > 32, 36, 123, 115, 117, 109, 36, 62, 125, 44, 48, 44, 48, 44, 48, 44, > 36, 62, 32, 45, 61, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, > 48, 44, 36, 62, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 102, 116, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 115, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 36, 62, 44, > 36, 62, 32, 97, 118, 103, 61, 123, 105, 97, 125, 32, 45, 45, 91, 45, > 49, 93, 32, 36, 97, 118, 103, 32, 45, 42, 91, 45, 49, 93, 32, 123, > 115, 113, 114, 116, 40, 36, 123, 118, 97, 114, 36, 62, 125, 47, 105, 102, > 40, 105, 118, 44, 105, 118, 44, 49, 41, 41, 125, 32, 45, 43, 91, 45, > 49, 93, 32, 36, 97, 118, 103, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 100, 111, 110, 101, 10, 45, 99, 32, 36, 109, 77, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 118, 95, 102, 108, 111, 119, 32, 58, 32, 95, > 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, 44, 95, 100, 116, 44, 95, > 115, 101, 113, 117, 101, 110, 99, 101, 95, 102, 108, 97, 103, 61, 123, 32, > 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, > 115, 32, 111, 102, 32, 116, 104, 101, 32, 116, 111, 116, 97, 108, 32, 118, > 97, 114, 105, 97, 116, 105, 111, 110, 32, 102, 108, 111, 119, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 105, > 116, 101, 114, 61, 49, 48, 39, 44, 32, 39, 100, 116, 61, 51, 48, 39, > 32, 97, 110, 100, 32, 39, 107, 101, 101, 112, 95, 115, 101, 113, 117, 101, > 110, 99, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, > 118, 95, 102, 108, 111, 119, 32, 52, 48, 10, 116, 118, 95, 102, 108, 111, > 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, > 125, 44, 36, 123, 50, 61, 51, 48, 125, 44, 36, 123, 51, 61, 48, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, > 36, 49, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, > 32, 116, 104, 101, 32, 116, 111, 116, 97, 108, 32, 118, 97, 114, 105, 97, > 116, 105, 111, 110, 32, 102, 108, 111, 119, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 105, 109, 101, 32, > 115, 116, 101, 112, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 112, 100, 101, 95, 102, 108, 111, 119, 32, 36, 49, 44, 36, 50, 44, 99, > 117, 114, 118, 97, 116, 117, 114, 101, 44, 36, 51, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 117, 110, 115, 104, 97, 114, 112, 32, > 58, 32, 114, 97, 100, 105, 117, 115, 91, 37, 93, 62, 61, 48, 44, 95, > 97, 109, 111, 117, 110, 116, 62, 61, 48, 44, 95, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 117, 110, 115, 104, 97, 114, > 112, 32, 109, 97, 115, 107, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 97, 109, 111, 117, 110, 116, 61, 50, 39, 32, 97, > 110, 100, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 51, 32, 45, > 45, 117, 110, 115, 104, 97, 114, 112, 32, 49, 46, 53, 44, 49, 53, 32, > 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 117, 110, 115, 104, 97, > 114, 112, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, > 61, 50, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 117, 110, 115, 104, 97, 114, 112, 32, 109, 97, 115, 107, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 44, 32, 97, 109, 111, > 117, 110, 116, 32, 36, 50, 32, 97, 110, 100, 32, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 32, 36, 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 98, 91, 36, 62, > 93, 32, 36, 49, 32, 45, 45, 91, 45, 49, 93, 32, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 45, 110, 111, 114, 109, 91, 45, > 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 51, 32, 45, 42, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 45, 91, 36, 62, 44, 45, > 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, > 97, 118, 101, 32, 58, 32, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, > 62, 48, 44, 95, 114, 97, 100, 105, 117, 115, 91, 37, 93, 62, 61, 48, > 44, 95, 97, 109, 111, 117, 110, 116, 62, 61, 48, 44, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 111, 99, 116, 97, 118, > 101, 32, 115, 104, 97, 114, 112, 101, 110, 105, 110, 103, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 115, 99, > 97, 108, 101, 115, 61, 52, 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, > 61, 49, 39, 44, 32, 39, 97, 109, 111, 117, 110, 116, 61, 50, 39, 32, > 97, 110, 100, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 51, 32, > 45, 45, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, 97, 118, 101, > 32, 52, 44, 53, 44, 49, 53, 32, 45, 99, 117, 116, 32, 48, 44, 50, > 53, 53, 10, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, 97, 118, > 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 51, 61, 50, 125, 62, 61, > 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, > 36, 123, 52, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 111, 99, 116, 97, 118, 101, 32, 115, 104, 97, > 114, 112, 101, 110, 105, 110, 103, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 115, 99, 97, 108, > 101, 115, 44, 32, 114, 97, 100, 105, 117, 115, 32, 36, 50, 44, 32, 97, > 109, 111, 117, 110, 116, 32, 36, 51, 32, 97, 110, 100, 32, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 45, 102, > 32, 48, 32, 119, 101, 105, 103, 104, 116, 61, 48, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 49, 10, 45, 45, 117, 110, 115, 104, 97, 114, 112, > 91, 48, 93, 32, 123, 36, 50, 42, 50, 94, 45, 64, 123, 60, 44, 45, > 49, 125, 125, 44, 36, 51, 44, 36, 52, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 50, 94, 45, 36, 62, 125, 32, 119, 101, 105, 103, 104, 116, 61, > 123, 36, 119, 101, 105, 103, 104, 116, 43, 50, 94, 45, 36, 62, 125, 32, > 45, 43, 91, 49, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, > 114, 109, 91, 48, 93, 32, 45, 47, 32, 36, 119, 101, 105, 103, 104, 116, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 118, 97, 110, 118, 108, 105, 101, 116, 32, 58, 32, 115, 116, > 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 62, 61, 48, 91, 37, > 93, 44, 111, 114, 100, 101, 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 124, 32, 50, 32, 124, 32, 51, 32, 125, 44, 97, 120, 105, 115, 61, 123, > 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, > 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 86, 97, 110, 118, 108, 105, 101, 116, 32, 114, 101, 99, 117, 114, 115, 105, > 118, 101, 32, 102, 105, 108, 116, 101, 114, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 97, 110, 100, 97, 114, > 100, 32, 100, 101, 118, 105, 97, 116, 105, 111, 110, 44, 32, 111, 114, 100, > 101, 114, 44, 32, 97, 120, 105, 115, 32, 97, 110, 100, 32, 98, 111, 114, > 100, 101, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 99, 111, 110, > 100, 105, 116, 105, 111, 110, 115, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, > 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 118, 97, 110, 118, 108, 105, 101, 116, 32, 51, 44, 49, 44, 120, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 118, 97, 110, 118, 108, 105, 101, 116, 32, > 51, 48, 44, 48, 44, 120, 32, 45, 118, 97, 110, 118, 108, 105, 101, 116, > 91, 45, 50, 93, 32, 51, 48, 44, 48, 44, 121, 32, 45, 97, 100, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 116, 101, 114, 109, 97, 114, > 107, 95, 102, 111, 117, 114, 105, 101, 114, 32, 58, 32, 116, 101, 120, 116, > 44, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 100, 100, 32, 97, 32, 116, 101, 120, 116, 117, 97, 108, 32, > 119, 97, 116, 101, 114, 109, 97, 114, 107, 32, 105, 110, 32, 116, 104, 101, > 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 100, 111, 109, 97, 105, > 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 115, > 105, 122, 101, 61, 51, 51, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, 102, 111, 117, 114, 105, 101, > 114, 32, 34, 87, 97, 116, 101, 114, 109, 97, 114, 107, 101, 100, 33, 34, > 32, 45, 45, 100, 105, 115, 112, 108, 97, 121, 95, 102, 102, 116, 32, 45, > 114, 101, 109, 111, 118, 101, 91, 45, 51, 44, 45, 49, 93, 32, 45, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, 53, 32, 45, > 97, 112, 112, 101, 110, 100, 91, 45, 52, 44, 45, 50, 93, 32, 121, 32, > 45, 97, 112, 112, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 121, > 10, 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, 102, 111, 117, 114, 105, > 101, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 50, 61, > 51, 51, 125, 62, 48, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 100, 100, 32, 116, 101, 120, 116, 117, 97, 108, 32, 119, 97, 116, 101, 114, > 109, 97, 114, 107, 32, 39, 36, 49, 39, 32, 119, 105, 116, 104, 32, 115, > 105, 122, 101, 32, 36, 50, 32, 105, 110, 32, 116, 104, 101, 32, 102, 114, > 101, 113, 117, 101, 110, 99, 121, 32, 100, 111, 109, 97, 105, 110, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 105, 91, 48, 93, 32, 48, 32, 45, 116, 91, 48, 93, 32, 34, > 36, 49, 34, 44, 48, 44, 48, 44, 36, 50, 44, 49, 44, 49, 32, 45, > 103, 101, 91, 48, 93, 32, 48, 46, 53, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 48, 93, 32, 48, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 32, 119, 50, 61, 123, 105, 110, 116, 40, > 119, 47, 50, 41, 125, 32, 104, 50, 61, 123, 105, 110, 116, 40, 104, 47, > 50, 41, 125, 10, 45, 102, 102, 116, 91, 45, 49, 93, 10, 45, 115, 104, > 105, 102, 116, 91, 45, 50, 44, 45, 49, 93, 32, 36, 119, 50, 44, 36, > 104, 50, 44, 48, 44, 48, 44, 50, 10, 91, 48, 93, 44, 91, 48, 93, > 44, 49, 44, 123, 115, 125, 10, 45, 106, 91, 45, 51, 44, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 51, 44, 51, 44, 48, 44, 48, 44, 49, 44, > 91, 48, 93, 10, 45, 109, 105, 114, 114, 111, 114, 91, 48, 93, 32, 120, > 10, 45, 106, 91, 45, 51, 44, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 123, 64, 123, 45, 50, 44, 119, 125, 45, 50, 45, 64, 123, 48, 44, 119, > 125, 125, 44, 51, 44, 48, 44, 48, 44, 49, 44, 91, 48, 93, 10, 45, > 109, 105, 114, 114, 111, 114, 91, 48, 93, 32, 121, 10, 45, 106, 91, 45, > 51, 44, 45, 50, 93, 32, 91, 45, 49, 93, 44, 123, 64, 123, 45, 50, > 44, 119, 125, 45, 50, 45, 64, 123, 48, 44, 119, 125, 125, 44, 123, 64, > 123, 45, 50, 44, 104, 125, 45, 50, 45, 64, 123, 48, 44, 104, 125, 125, > 44, 48, 44, 48, 44, 49, 44, 91, 48, 93, 10, 45, 109, 105, 114, 114, > 111, 114, 91, 48, 93, 32, 120, 10, 45, 106, 91, 45, 51, 44, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 51, 44, 123, 64, 123, 45, 50, 44, 104, > 125, 45, 50, 45, 64, 123, 48, 44, 104, 125, 125, 44, 48, 44, 48, 44, > 49, 44, 91, 48, 93, 10, 45, 109, 105, 114, 114, 111, 114, 91, 48, 93, > 32, 121, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 105, 102, > 116, 91, 45, 50, 44, 45, 49, 93, 32, 45, 36, 119, 50, 44, 45, 36, > 104, 50, 44, 48, 44, 48, 44, 50, 10, 45, 105, 102, 102, 116, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 10, 45, 114, > 109, 91, 48, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 119, 97, 116, 101, 114, 115, 104, 101, 100, 32, 58, 32, 91, 112, 114, > 105, 111, 114, 105, 116, 121, 95, 105, 109, 97, 103, 101, 93, 44, 95, 102, > 105, 108, 108, 95, 108, 105, 110, 101, 115, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 119, > 97, 116, 101, 114, 115, 104, 101, 100, 32, 116, 114, 97, 110, 115, 102, 111, > 114, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 102, 105, 108, 108, 95, 108, 105, 110, 101, 115, 61, 49, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, > 48, 32, 45, 110, 111, 105, 115, 101, 32, 48, 46, 50, 44, 50, 32, 45, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, 49, 32, 45, 109, 117, 108, > 91, 45, 49, 93, 32, 45, 49, 32, 45, 108, 97, 98, 101, 108, 91, 45, > 50, 93, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 109, 111, 100, 91, 45, 50, 93, 32, > 50, 53, 54, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 48, 32, 45, > 114, 101, 118, 101, 114, 115, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 58, 32, 70, 101, 97, 116, 117, 114, 101, 115, 32, 101, 120, 116, 114, 97, > 99, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 97, 114, 101, > 97, 32, 58, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 62, 61, 48, > 44, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, > 105, 118, 105, 116, 121, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, > 32, 97, 114, 101, 97, 32, 111, 102, 32, 99, 111, 110, 110, 101, 99, 116, > 101, 100, 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 105, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 115, 95, 104, > 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, > 97, 110, 99, 101, 32, 45, 115, 116, 101, 110, 99, 105, 108, 91, 45, 49, > 93, 32, 49, 32, 45, 45, 97, 114, 101, 97, 32, 48, 10, 97, 114, 101, > 97, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, > 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, > 32, 97, 114, 101, 97, 32, 111, 102, 32, 99, 111, 110, 110, 101, 99, 116, > 101, 100, 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 105, 110, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, > 111, 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, 100, 32, > 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 104, > 105, 103, 104, 44, 108, 111, 119, 125, 34, 32, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 32, 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 97, 98, 101, 108, 91, 36, 62, 93, 32, 36, 49, 44, 36, 50, > 32, 110, 98, 61, 64, 123, 36, 62, 44, 49, 43, 105, 77, 125, 32, 45, > 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 36, 62, 93, 32, 36, > 110, 98, 44, 48, 44, 123, 36, 110, 98, 45, 49, 125, 32, 45, 109, 97, > 112, 91, 36, 62, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 97, 114, 101, 97, 95, 102, 103, 32, 58, 32, > 116, 111, 108, 101, 114, 97, 110, 99, 101, 62, 61, 48, 44, 105, 115, 95, > 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 97, 114, 101, > 97, 32, 111, 102, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, > 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 102, 111, 114, 32, 110, 111, > 110, 45, 122, 101, 114, 111, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 105, 109, 105, 108, > 97, 114, 32, 116, 111, 32, 39, 45, 97, 114, 101, 97, 39, 32, 101, 120, > 99, 101, 112, 116, 32, 116, 104, 97, 116, 32, 48, 45, 118, 97, 108, 117, > 101, 100, 32, 112, 105, 120, 101, 108, 115, 32, 97, 114, 101, 32, 110, 111, > 116, 32, 99, 111, 110, 115, 105, 100, 101, 114, 101, 100, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 105, 115, 95, 104, 105, 103, 104, 95, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, > 32, 45, 115, 116, 101, 110, 99, 105, 108, 91, 45, 49, 93, 32, 49, 32, > 45, 45, 97, 114, 101, 97, 95, 102, 103, 32, 48, 10, 97, 114, 101, 97, > 95, 102, 103, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, > 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, > 116, 101, 32, 97, 114, 101, 97, 32, 111, 102, 32, 102, 111, 114, 101, 103, > 114, 111, 117, 110, 100, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, > 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 105, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 111, 108, 101, > 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, 100, 32, 34, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 104, 105, 103, 104, > 44, 108, 111, 119, 125, 34, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, > 105, 116, 121, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 32, > 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 97, > 98, 101, 108, 95, 102, 103, 91, 36, 62, 93, 32, 36, 49, 44, 36, 50, > 32, 110, 98, 61, 64, 123, 36, 62, 44, 49, 43, 105, 77, 125, 32, 45, > 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 36, 62, 93, 32, 36, > 110, 98, 44, 48, 44, 123, 36, 110, 98, 45, 49, 125, 32, 45, 61, 91, > 45, 49, 93, 32, 48, 32, 45, 109, 97, 112, 91, 36, 62, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, > 101, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, > 116, 95, 108, 105, 110, 101, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, > 48, 91, 37, 93, 44, 122, 48, 91, 37, 93, 44, 120, 49, 91, 37, 93, > 44, 121, 49, 91, 37, 93, 44, 122, 49, 91, 37, 93, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 116, 114, 105, 101, 118, 101, 32, 112, > 105, 120, 101, 108, 115, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 101, 108, > 111, 110, 103, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 108, 105, 110, 101, 32, 40, 120, 48, > 44, 121, 48, 44, 122, 48, 41, 45, 40, 120, 49, 44, 121, 49, 44, 122, > 49, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 97, 116, 95, 108, 105, > 110, 101, 32, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 48, 10, 97, 116, 95, 108, 105, 110, 101, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 36, 123, 55, 61, 49, 48, 48, 37, 125, 62, > 61, 48, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 116, 114, > 105, 101, 118, 101, 32, 112, 105, 120, 101, 108, 115, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 98, 101, 108, 111, 110, 103, 105, 110, > 103, 32, 116, 111, 32, 108, 105, 110, 101, 32, 40, 36, 49, 44, 36, 50, > 44, 36, 51, 41, 45, 40, 36, 52, 44, 36, 53, 44, 36, 54, 41, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 120, 48, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 49, 125, 44, 40, 119, 45, 49, 41, 42, 36, 49, 44, 36, 49, 41, 125, > 10, 121, 48, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, 40, 104, 45, 49, 41, > 42, 36, 50, 44, 36, 50, 41, 125, 10, 122, 48, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 51, 125, 44, 40, 100, 45, 49, 41, 42, 36, 51, 44, 36, 51, 41, 125, > 10, 120, 49, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 52, 125, 44, 40, 119, 45, 49, 41, > 42, 36, 52, 44, 36, 52, 41, 125, 10, 121, 49, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 53, 125, 44, 40, 104, 45, 49, 41, 42, 36, 53, 44, 36, 53, 41, 125, > 10, 122, 49, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 54, 125, 44, 40, 100, 45, 49, 41, > 42, 36, 54, 44, 36, 54, 41, 125, 10, 40, 36, 120, 48, 44, 36, 120, > 49, 94, 36, 121, 48, 44, 36, 121, 49, 94, 36, 122, 48, 44, 36, 122, > 49, 41, 10, 45, 114, 91, 45, 49, 93, 32, 123, 49, 43, 109, 97, 120, > 40, 97, 98, 115, 40, 36, 120, 49, 45, 36, 120, 48, 41, 44, 97, 98, > 115, 40, 36, 121, 49, 45, 36, 121, 48, 41, 44, 97, 98, 115, 40, 36, > 122, 49, 45, 36, 122, 48, 41, 41, 125, 44, 49, 44, 49, 44, 51, 44, > 51, 10, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, > 119, 97, 114, 112, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, 118, 101, > 99, 116, 111, 114, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 118, 97, > 108, 117, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 50, 53, 54, 44, 50, 53, 54, 32, 45, 101, 108, 108, 105, 112, 115, > 101, 32, 53, 48, 37, 44, 53, 48, 37, 44, 50, 48, 37, 44, 50, 48, > 37, 44, 48, 44, 49, 44, 49, 32, 45, 100, 101, 102, 111, 114, 109, 32, > 50, 48, 32, 45, 45, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, > 45, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 50, 93, 32, 64, 123, > 45, 49, 44, 48, 44, 49, 125, 44, 53, 44, 53, 44, 48, 44, 49, 48, > 10, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, 118, 101, > 99, 116, 111, 114, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 118, 97, > 108, 117, 101, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, 114, 109, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, > 109, 61, 64, 123, 48, 44, 98, 125, 10, 115, 117, 109, 61, 64, 123, 45, > 49, 44, 43, 125, 10, 45, 105, 102, 32, 123, 36, 115, 117, 109, 62, 48, > 125, 10, 45, 105, 102, 32, 123, 100, 62, 49, 125, 32, 45, 45, 42, 32, > 39, 122, 39, 32, 122, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 101, 108, 115, 101, 32, 122, 61, 48, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 104, 62, 49, 125, > 32, 45, 45, 42, 32, 39, 121, 39, 32, 121, 61, 64, 123, 45, 49, 44, > 43, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 108, 115, 101, > 32, 121, 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 42, 32, 39, > 120, 39, 32, 120, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 40, 123, 36, 120, 47, 36, 115, 117, 109, 125, 59, > 123, 36, 121, 47, 36, 115, 117, 109, 125, 59, 123, 36, 122, 47, 36, 115, > 117, 109, 125, 41, 10, 45, 101, 108, 115, 101, 32, 40, 123, 119, 47, 50, > 125, 44, 123, 104, 47, 50, 125, 44, 123, 100, 47, 50, 125, 41, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 110, > 109, 32, 34, 91, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, 111, > 102, 32, 39, 34, 36, 110, 109, 34, 39, 93, 34, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 101, 116, 101, 99, 116, 95, 115, 107, 105, 110, 32, > 58, 32, 48, 60, 61, 116, 111, 108, 101, 114, 97, 110, 99, 101, 60, 61, > 49, 44, 95, 115, 107, 105, 110, 95, 120, 44, 95, 115, 107, 105, 110, 95, > 121, 44, 95, 115, 107, 105, 110, 95, 114, 97, 100, 105, 117, 115, 62, 61, > 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 116, 101, 99, > 116, 32, 115, 107, 105, 110, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 99, 111, 108, 111, 114, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 110, 100, 32, 111, 117, 116, 112, 117, 116, 32, 97, 110, 32, 97, 112, > 112, 97, 114, 116, 101, 110, 97, 110, 99, 101, 32, 112, 114, 111, 98, 97, > 98, 105, 108, 105, 116, 121, 32, 109, 97, 112, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 116, 101, 99, 116, 105, 111, 110, 32, 105, > 115, 32, 112, 101, 114, 102, 111, 114, 109, 101, 100, 32, 117, 115, 105, 110, > 103, 32, 67, 98, 67, 114, 32, 99, 104, 114, 111, 109, 97, 116, 105, 99, > 105, 116, 121, 32, 100, 97, 116, 97, 32, 111, 102, 32, 115, 107, 105, 110, > 32, 112, 105, 120, 101, 108, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 102, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 39, > 115, 107, 105, 110, 95, 120, 39, 44, 32, 39, 115, 107, 105, 110, 95, 121, > 39, 32, 97, 110, 100, 32, 39, 115, 107, 105, 110, 95, 114, 97, 100, 105, > 117, 115, 39, 32, 97, 114, 101, 32, 112, 114, 111, 118, 105, 100, 101, 100, > 44, 32, 115, 107, 105, 110, 32, 112, 105, 120, 101, 108, 115, 32, 97, 114, > 101, 32, 108, 101, 97, 114, 110, 116, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 97, 109, 112, 108, > 101, 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 115, 105, 100, 101, 32, > 116, 104, 101, 32, 99, 105, 114, 99, 108, 101, 32, 108, 111, 99, 97, 116, > 101, 100, 32, 97, 116, 32, 40, 39, 115, 107, 105, 110, 95, 120, 39, 44, > 39, 115, 107, 105, 110, 95, 121, 39, 41, 32, 119, 105, 116, 104, 32, 114, > 97, 100, 105, 117, 115, 32, 39, 115, 107, 105, 110, 95, 114, 97, 100, 105, > 117, 115, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 116, 111, > 108, 101, 114, 97, 110, 99, 101, 61, 48, 46, 53, 39, 32, 97, 110, 100, > 32, 39, 115, 107, 105, 110, 95, 120, 61, 115, 107, 105, 110, 121, 61, 114, > 97, 100, 105, 117, 115, 61, 45, 49, 39, 46, 10, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 48, 46, 53, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 49, 60, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, > 61, 45, 49, 125, 44, 36, 123, 51, 61, 45, 49, 125, 44, 36, 123, 52, > 61, 45, 49, 125, 10, 45, 105, 102, 32, 123, 36, 50, 60, 48, 124, 124, > 36, 51, 60, 61, 48, 124, 124, 36, 52, 60, 61, 48, 125, 10, 45, 101, > 91, 48, 45, 45, 51, 93, 32, 34, 68, 101, 116, 101, 99, 116, 32, 115, > 107, 105, 110, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 117, 115, 105, 110, 103, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 32, > 36, 49, 46, 34, 10, 45, 118, 32, 45, 10, 109, 48, 61, 49, 50, 48, > 46, 57, 50, 57, 50, 49, 48, 56, 56, 48, 48, 48, 54, 57, 10, 109, > 49, 61, 49, 52, 50, 46, 53, 55, 52, 53, 50, 55, 50, 57, 49, 56, > 48, 56, 52, 10, 65, 61, 48, 46, 48, 57, 55, 52, 57, 57, 56, 53, > 52, 56, 54, 50, 54, 56, 57, 57, 55, 10, 66, 61, 48, 46, 48, 54, > 51, 56, 56, 56, 55, 49, 51, 55, 49, 55, 52, 54, 48, 54, 51, 10, > 67, 61, 48, 46, 48, 53, 50, 53, 48, 48, 53, 51, 49, 48, 55, 55, > 51, 56, 52, 57, 53, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 115, > 114, 103, 98, 50, 114, 103, 98, 32, 45, 114, 103, 98, 50, 121, 99, 98, > 99, 114, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, 44, 50, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 119, 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, > 100, 125, 32, 45, 114, 32, 123, 119, 42, 104, 42, 100, 125, 44, 50, 44, > 49, 44, 49, 44, 45, 49, 10, 45, 115, 32, 121, 32, 45, 45, 91, 48, > 93, 32, 36, 109, 48, 32, 45, 45, 91, 49, 93, 32, 36, 109, 49, 32, > 45, 97, 32, 121, 10, 45, 105, 91, 48, 93, 32, 40, 36, 65, 44, 36, > 66, 59, 36, 66, 44, 36, 67, 41, 32, 45, 45, 42, 42, 32, 45, 114, > 109, 91, 48, 93, 10, 45, 42, 32, 45, 115, 32, 121, 32, 45, 43, 32, > 45, 42, 91, 45, 49, 93, 32, 123, 36, 49, 45, 49, 125, 32, 45, 101, > 120, 112, 91, 45, 49, 93, 10, 45, 114, 32, 36, 119, 104, 100, 44, 49, > 44, 45, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 68, 101, 116, 101, 99, 116, 32, 115, 107, 105, 110, 32, 105, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, 32, 116, 111, > 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, 100, 32, 116, > 97, 114, 103, 101, 116, 32, 99, 105, 114, 99, 108, 101, 32, 97, 116, 32, > 40, 36, 50, 44, 36, 51, 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, > 105, 117, 115, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, 10, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 115, 114, 103, 98, 50, 114, 103, 98, 32, > 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 49, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 99, 105, 114, 99, 108, 101, 91, 49, 93, 32, > 36, 50, 44, 36, 51, 44, 36, 52, 44, 49, 44, 49, 32, 45, 45, 102, > 91, 49, 93, 32, 39, 105, 102, 40, 105, 44, 121, 44, 45, 49, 41, 39, > 32, 45, 102, 91, 49, 93, 32, 39, 105, 102, 40, 105, 44, 120, 44, 45, > 49, 41, 39, 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 49, 44, 50, > 93, 32, 45, 49, 32, 45, 97, 91, 49, 44, 50, 93, 32, 99, 10, 45, > 45, 119, 97, 114, 112, 91, 48, 93, 32, 91, 49, 93, 44, 48, 44, 48, > 32, 45, 114, 109, 91, 49, 93, 10, 45, 115, 91, 49, 93, 32, 99, 10, > 109, 48, 61, 64, 123, 49, 44, 105, 97, 125, 32, 45, 45, 91, 49, 93, > 32, 36, 109, 48, 10, 109, 49, 61, 64, 123, 50, 44, 105, 97, 125, 32, > 45, 45, 91, 50, 93, 32, 36, 109, 49, 10, 77, 61, 123, 104, 125, 32, > 45, 97, 91, 49, 44, 50, 93, 32, 120, 32, 45, 45, 116, 114, 97, 110, > 115, 112, 111, 115, 101, 91, 49, 93, 32, 45, 114, 118, 91, 49, 44, 50, > 93, 32, 45, 42, 42, 91, 49, 44, 50, 93, 32, 45, 47, 91, 49, 93, > 32, 36, 77, 32, 45, 105, 110, 118, 101, 114, 116, 91, 49, 93, 10, 45, > 114, 118, 32, 119, 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, > 100, 125, 32, 45, 114, 91, 49, 93, 32, 123, 119, 42, 104, 42, 100, 125, > 44, 50, 44, 49, 44, 49, 44, 45, 49, 10, 45, 115, 91, 49, 93, 32, > 121, 32, 45, 45, 91, 49, 93, 32, 36, 109, 48, 32, 45, 45, 91, 50, > 93, 32, 36, 109, 49, 32, 45, 97, 91, 49, 44, 50, 93, 32, 121, 32, > 45, 45, 42, 42, 32, 45, 114, 109, 91, 48, 93, 10, 45, 42, 32, 45, > 115, 32, 121, 32, 45, 43, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, > 49, 45, 49, 125, 32, 45, 101, 120, 112, 91, 45, 49, 93, 10, 45, 114, > 32, 36, 119, 104, 100, 44, 49, 44, 45, 49, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, > 99, 101, 109, 101, 110, 116, 32, 58, 32, 91, 115, 111, 117, 114, 99, 101, > 95, 105, 109, 97, 103, 101, 93, 44, 95, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 44, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 62, 61, > 48, 44, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 61, 48, 44, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 95, 109, 97, 120, 62, 61, 48, > 44, 105, 115, 95, 98, 97, 99, 107, 119, 97, 114, 100, 61, 123, 32, 48, > 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 69, 115, 116, 105, 109, 97, 116, 101, 32, 100, > 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 32, 102, 105, 101, 108, > 100, 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 115, 111, 117, 114, 99, 101, 32, 97, 110, 100, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 39, 44, 32, 114, 101, 103, > 117, 108, 97, 114, 105, 122, 97, 116, 105, 111, 110, 32, 116, 121, 112, 101, > 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, 32, 105, 115, 111, 116, 114, > 111, 112, 105, 99, 44, 32, 101, 108, 115, 101, 32, 116, 111, 32, 97, 110, > 105, 115, 111, 116, 114, 111, 112, 105, 99, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 73, 102, 32, 39, 110, 98, 115, 99, 97, 108, 101, 115, > 61, 61, 48, 39, 44, 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, 114, > 32, 111, 102, 32, 110, 101, 101, 100, 101, 100, 32, 115, 99, 97, 108, 101, > 115, 32, 105, 115, 32, 101, 115, 116, 105, 109, 97, 116, 101, 100, 32, 102, > 114, 111, 109, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 115, 105, > 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 49, 39, 44, 32, 39, > 112, 114, 101, 99, 105, 115, 105, 111, 110, 61, 53, 39, 44, 32, 39, 110, > 98, 95, 115, 99, 97, 108, 101, 115, 61, 48, 39, 44, 32, 39, 105, 116, > 101, 114, 97, 116, 105, 111, 110, 95, 109, 97, 120, 61, 49, 48, 48, 48, > 48, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 98, 97, 99, 107, 119, > 97, 114, 100, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, > 111, 116, 97, 116, 101, 32, 51, 44, 49, 44, 48, 44, 53, 48, 37, 44, > 53, 48, 37, 44, 48, 46, 57, 32, 45, 45, 100, 105, 115, 112, 108, 97, > 99, 101, 109, 101, 110, 116, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 45, 113, 117, 105, 118, 101, 114, 91, 45, 49, 93, 32, 91, 45, 49, 93, > 44, 49, 53, 44, 45, 50, 48, 44, 49, 44, 49, 44, 123, 49, 46, 53, > 42, 105, 77, 125, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 116, > 97, 110, 99, 101, 32, 58, 32, 105, 115, 111, 118, 97, 108, 117, 101, 91, > 37, 93, 44, 95, 109, 101, 116, 114, 105, 99, 32, 58, 32, 105, 115, 111, > 118, 97, 108, 117, 101, 91, 37, 93, 44, 91, 109, 101, 116, 114, 105, 99, > 93, 44, 95, 109, 101, 116, 104, 111, 100, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 117, 110, 115, 105, 103, 110, 101, 100, 32, 100, 105, > 115, 116, 97, 110, 99, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, > 116, 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 115, 111, > 118, 97, 108, 117, 101, 44, 32, 111, 112, 116, 46, 32, 97, 99, 99, 111, > 114, 100, 105, 110, 103, 32, 116, 111, 32, 97, 32, 99, 117, 115, 116, 111, > 109, 32, 109, 101, 116, 114, 105, 99, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 39, 109, 101, 116, 114, 105, 99, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 99, 104, 101, 98, 121, 115, 104, 101, 118, > 32, 124, 32, 49, 61, 109, 97, 110, 104, 97, 116, 116, 97, 110, 32, 124, > 32, 50, 61, 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 124, 32, 51, > 61, 115, 113, 117, 97, 114, 101, 100, 45, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 109, 101, 116, 104, 111, 100, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 102, 97, 115, 116, 45, 109, 97, 114, 99, 104, 105, 110, 103, > 32, 124, 32, 49, 61, 108, 111, 119, 45, 99, 111, 110, 110, 101, 99, 116, > 105, 118, 105, 116, 121, 32, 100, 105, 106, 107, 115, 116, 114, 97, 32, 124, > 32, 50, 61, 104, 105, 103, 104, 45, 99, 111, 110, 110, 101, 99, 116, 105, > 118, 105, 116, 121, 32, 100, 105, 106, 107, 115, 116, 114, 97, 32, 124, 32, > 51, 61, 49, 43, 114, 101, 116, 117, 114, 110, 32, 112, 97, 116, 104, 32, > 124, 32, 52, 61, 50, 43, 114, 101, 116, 117, 114, 110, 32, 112, 97, 116, > 104, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 109, 101, > 116, 114, 105, 99, 61, 50, 39, 32, 97, 110, 100, 32, 39, 109, 101, 116, > 104, 111, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 32, 50, 48, 37, 32, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 32, 48, 32, 45, 112, 111, 119, 32, 48, 46, 51, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, > 52, 48, 48, 32, 45, 115, 101, 116, 32, 49, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 48, 93, > 32, 49, 44, 50, 32, 45, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 48, 93, 32, 49, 44, 49, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, > 91, 48, 93, 32, 49, 44, 48, 32, 45, 109, 111, 100, 32, 51, 50, 32, > 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 49, 54, 32, 45, 97, > 112, 112, 101, 110, 100, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 102, > 108, 111, 97, 116, 50, 102, 102, 116, 56, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, 117, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, 32, 56, 98, 105, 116, 115, > 32, 102, 111, 117, 114, 105, 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 102, 108, 111, 97, 116, 50, > 102, 102, 116, 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 102, 108, 111, 97, 116, 45, 118, 97, > 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, > 56, 98, 105, 116, 115, 32, 102, 111, 117, 114, 105, 101, 114, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 102, 102, 116, 112, 111, 108, 97, 114, > 32, 45, 43, 91, 45, 50, 93, 32, 49, 32, 45, 108, 111, 103, 91, 45, > 50, 93, 32, 45, 102, 108, 111, 97, 116, 50, 105, 110, 116, 56, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 102, 116, 56, 50, 102, 108, 111, 97, 116, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 56, 98, 105, 116, 115, 32, 102, 111, > 117, 114, 105, 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, > 116, 105, 111, 110, 115, 32, 116, 111, 32, 102, 108, 111, 97, 116, 45, 118, > 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 102, 102, > 116, 56, 50, 102, 108, 111, 97, 116, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 102, 108, 111, 97, > 116, 45, 118, 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 116, 111, 32, 56, 98, 105, 116, 115, 32, 102, 111, 117, 114, 105, 101, > 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, > 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 121, 44, > 50, 32, 45, 105, 110, 116, 56, 50, 102, 108, 111, 97, 116, 32, 45, 101, > 120, 112, 91, 45, 50, 93, 32, 45, 45, 91, 45, 50, 93, 32, 49, 32, > 45, 105, 102, 102, 116, 112, 111, 108, 97, 114, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 102, 116, 112, 111, 108, 97, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 102, 111, 117, > 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 44, 32, 97, 115, 32, 99, 101, 110, 116, 101, 114, 101, 100, 32, 109, > 97, 103, 110, 105, 116, 117, 100, 101, 47, 112, 104, 97, 115, 101, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 102, 116, > 112, 111, 108, 97, 114, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, > 48, 37, 44, 53, 48, 37, 44, 49, 48, 44, 49, 48, 44, 48, 44, 49, > 44, 48, 32, 45, 105, 102, 102, 116, 112, 111, 108, 97, 114, 10, 102, 102, > 116, 112, 111, 108, 97, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 102, 111, 117, 114, 105, 101, > 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 97, 115, 32, 99, 101, 110, 116, 101, > 114, 101, 100, 32, 109, 97, 103, 110, 105, 116, 117, 100, 101, 47, 112, 104, > 97, 115, 101, 32, 105, 109, 97, 103, 101, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 60, 93, 10, 45, 102, 102, 116, 32, 45, 99, 111, 109, 112, 108, 101, > 120, 50, 112, 111, 108, 97, 114, 32, 45, 115, 104, 105, 102, 116, 32, 123, > 45, 114, 111, 117, 110, 100, 40, 119, 47, 50, 41, 125, 44, 123, 45, 114, > 111, 117, 110, 100, 40, 104, 47, 50, 41, 125, 44, 123, 45, 114, 111, 117, > 110, 100, 40, 100, 47, 50, 41, 125, 44, 48, 44, 50, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 58, > 32, 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 91, 37, 93, > 44, 95, 118, 97, 108, 117, 101, 48, 91, 37, 93, 44, 95, 118, 97, 108, > 117, 101, 49, 91, 37, 93, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 118, 97, 108, 117, > 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 115, 101, 116, 44, 32, > 116, 104, 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 105, 115, > 32, 101, 115, 116, 105, 109, 97, 116, 101, 100, 32, 111, 110, 108, 121, 32, > 102, 111, 114, 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 116, 104, > 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 118, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, > 46, 32, 65, 114, 103, 117, 109, 101, 110, 116, 32, 39, 118, 97, 108, 117, > 101, 49, 39, 32, 109, 117, 115, 116, 32, 98, 101, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 105, 102, 32, 39, 118, 97, 108, 117, 101, 48, > 39, 32, 105, 115, 32, 115, 101, 116, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 110, 98, 95, 108, 101, 118, 101, 108, 115, 61, 50, 53, > 54, 39, 44, 32, 39, 118, 97, 108, 117, 101, 48, 61, 48, 37, 39, 32, > 97, 110, 100, 32, 39, 118, 97, 108, 117, 101, 49, 61, 49, 48, 48, 37, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 54, 52, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 52, 48, 48, 44, 51, 48, > 48, 44, 51, 10, 35, 64, 103, 109, 105, 99, 32, 104, 105, 115, 116, 111, > 103, 114, 97, 109, 51, 32, 58, 32, 110, 98, 95, 108, 101, 118, 101, 108, > 115, 62, 48, 91, 37, 93, 44, 95, 118, 97, 108, 117, 101, 48, 91, 37, > 93, 44, 95, 118, 97, 108, 117, 101, 49, 91, 37, 93, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 49, 100, 44, 50, 100, 32, 111, 114, 32, 51, 100, 32, 104, 105, > 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 109, 117, 108, 116, 105, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 105, 109, 97, 103, 101, 115, 32, 40, 104, 97, 118, 105, 110, > 103, 32, 49, 44, 50, 32, 111, 114, 32, 51, 32, 99, 104, 97, 110, 110, > 101, 108, 115, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 118, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, > 32, 115, 101, 116, 44, 32, 116, 104, 101, 32, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 105, 115, 32, 101, 115, 116, 105, 109, 97, 116, 101, 100, > 32, 111, 110, 108, 121, 32, 102, 111, 114, 32, 112, 105, 120, 101, 108, 115, > 32, 105, 110, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 118, 97, 108, 117, 101, > 32, 114, 97, 110, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 118, 97, 108, 117, 101, 48, 61, 48, 37, 39, 32, 97, 110, 100, > 32, 39, 118, 97, 108, 117, 101, 49, 61, 49, 48, 48, 37, 39, 46, 10, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 51, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 36, 49, 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 37, 125, 44, 36, 123, 51, 61, 49, 48, 48, 37, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, > 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, 32, 109, > 117, 108, 116, 105, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, 32, 36, 49, 32, > 108, 101, 118, 101, 108, 115, 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, > 91, 36, 49, 44, 36, 50, 93, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 114, 32, 123, 119, 42, 104, 42, 100, 125, 44, 123, 109, 105, 110, > 40, 51, 44, 115, 41, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 114, > 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 10, 118, 109, 105, 110, 61, > 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 105, 109, 44, 36, 50, 41, > 125, 32, 118, 109, 97, 120, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, > 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, 125, 44, 36, 51, > 42, 105, 77, 44, 36, 51, 41, 125, 10, 45, 45, 32, 36, 118, 109, 105, > 110, 32, 45, 42, 32, 123, 40, 36, 49, 45, 49, 41, 47, 40, 36, 118, > 109, 97, 120, 45, 36, 118, 109, 105, 110, 41, 125, 10, 110, 98, 95, 108, > 101, 118, 101, 108, 115, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, > 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, > 40, 36, 118, 109, 97, 120, 45, 36, 118, 109, 105, 110, 41, 43, 49, 44, > 36, 49, 41, 125, 10, 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, > 32, 49, 44, 36, 110, 98, 95, 108, 101, 118, 101, 108, 115, 44, 36, 110, > 98, 95, 108, 101, 118, 101, 108, 115, 44, 36, 110, 98, 95, 108, 101, 118, > 101, 108, 115, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 95, 99, 117, 109, 117, 108, 32, 58, 32, 95, 110, > 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 44, 95, 105, 115, 95, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 44, 95, 118, 97, 108, 48, 91, 37, 93, 44, 95, 118, 97, > 108, 49, 91, 37, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 109, 112, 117, 116, 101, 32, 99, 117, 109, 117, 108, 97, 116, 105, 118, > 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 108, 101, 118, > 101, 108, 115, 61, 50, 53, 54, 39, 44, 32, 39, 105, 115, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 100, 61, 48, 39, 32, 97, 110, 100, 32, > 39, 118, 97, 108, 48, 61, 118, 97, 108, 49, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 95, > 99, 117, 109, 117, 108, 32, 50, 53, 54, 32, 45, 104, 105, 115, 116, 111, > 103, 114, 97, 109, 91, 48, 93, 32, 50, 53, 54, 32, 45, 100, 105, 115, > 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, > 48, 48, 44, 51, 10, 104, 105, 115, 116, 111, 103, 114, 97, 109, 95, 99, > 117, 109, 117, 108, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, > 49, 61, 50, 53, 54, 125, 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 125, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 48, 125, 44, 36, 123, 52, 61, 48, 125, 10, 45, 97, 114, 103, 32, 49, > 43, 33, 36, 50, 44, 34, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, > 32, 34, 44, 34, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 109, 112, 117, 116, 101, 32, 34, 64, 123, 125, 34, 99, 117, 109, 117, > 108, 97, 116, 105, 118, 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, > 110, 103, 32, 36, 49, 32, 108, 101, 118, 101, 108, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 36, > 49, 44, 36, 51, 44, 36, 52, 32, 45, 99, 117, 109, 117, 108, 32, 45, > 105, 102, 32, 36, 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 47, 91, 36, 62, 93, 32, 64, 123, 36, 62, 44, 77, 125, 32, > 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 95, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 58, 32, 110, > 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 91, 37, 93, 44, 95, 118, > 97, 108, 117, 101, 48, 91, 37, 93, 44, 95, 118, 97, 108, 117, 101, 49, > 91, 37, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 32, 111, 102, 32, 101, 97, 99, 104, 32, 118, 101, 99, 116, 111, > 114, 45, 118, 97, 108, 117, 101, 100, 32, 112, 111, 105, 110, 116, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 118, > 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 115, 101, > 116, 44, 32, 116, 104, 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 105, 115, 32, 101, 115, 116, 105, 109, 97, 116, 101, 100, 32, 111, 110, > 108, 121, 32, 102, 111, 114, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, > 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 118, 97, 108, 117, 101, 32, 114, 97, > 110, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 118, > 97, 108, 117, 101, 48, 61, 48, 37, 39, 32, 97, 110, 100, 32, 39, 118, > 97, 108, 117, 101, 49, 61, 49, 48, 48, 37, 39, 46, 10, 104, 105, 115, > 116, 111, 103, 114, 97, 109, 95, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 37, 125, > 44, 36, 123, 51, 61, 49, 48, 48, 37, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 111, 102, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, > 108, 117, 101, 100, 32, 112, 111, 105, 110, 116, 115, 32, 105, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, > 108, 101, 118, 101, 108, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 110, 98, 95, 108, 101, 118, > 101, 108, 115, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, > 44, 40, 105, 77, 45, 105, 109, 41, 42, 36, 49, 44, 36, 49, 41, 41, > 125, 10, 118, 97, 108, 117, 101, 48, 61, 123, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, > 105, 109, 43, 40, 105, 77, 45, 105, 109, 41, 42, 36, 50, 44, 36, 50, > 41, 125, 10, 118, 97, 108, 117, 101, 49, 61, 123, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, 125, > 44, 105, 109, 43, 40, 105, 77, 45, 105, 109, 41, 42, 36, 51, 44, 36, > 51, 41, 125, 10, 45, 45, 32, 36, 118, 97, 108, 117, 101, 48, 32, 45, > 42, 32, 123, 36, 110, 98, 95, 108, 101, 118, 101, 108, 115, 47, 109, 97, > 120, 40, 49, 44, 97, 98, 115, 40, 36, 118, 97, 108, 117, 101, 49, 45, > 36, 118, 97, 108, 117, 101, 48, 41, 41, 125, 32, 45, 99, 32, 48, 44, > 123, 36, 110, 98, 95, 108, 101, 118, 101, 108, 115, 45, 49, 125, 32, 45, > 114, 111, 117, 110, 100, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, > 125, 32, 100, 61, 123, 100, 125, 32, 45, 114, 32, 123, 119, 42, 104, 42, > 100, 125, 44, 123, 115, 125, 44, 49, 44, 49, 44, 45, 49, 10, 45, 105, > 91, 45, 50, 93, 32, 40, 48, 44, 123, 119, 45, 49, 125, 41, 32, 45, > 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, > 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, 50, 93, > 10, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 51, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 44, 52, 32, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 49, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 121, 91, 45, 49, 93, 10, 45, 105, 91, 45, 50, 93, 32, > 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 44, 123, 104, 47, 51, > 125, 44, 123, 104, 47, 51, 125, 41, 10, 40, 49, 44, 48, 59, 49, 44, > 123, 104, 47, 51, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 50, 44, 64, 123, 45, 50, 44, 104, 47, 51, 125, 44, 49, 44, 49, 44, > 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 10, 51, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 44, 49, 32, 49, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 44, 45, 49, 32, 45, 121, 91, 45, 53, 44, 45, 51, > 44, 45, 50, 93, 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, 121, > 10, 123, 36, 119, 42, 36, 104, 42, 36, 100, 125, 44, 36, 110, 98, 95, > 108, 101, 118, 101, 108, 115, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 114, 32, 36, 119, 44, 36, 104, 44, 36, 100, 44, 36, 110, 98, 95, > 108, 101, 118, 101, 108, 115, 44, 45, 49, 10, 45, 110, 109, 32, 36, 110, > 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 111, 117, 103, > 104, 32, 58, 32, 95, 119, 105, 100, 116, 104, 62, 48, 44, 95, 104, 101, > 105, 103, 104, 116, 62, 48, 44, 103, 114, 97, 100, 105, 101, 110, 116, 95, > 110, 111, 114, 109, 95, 118, 111, 116, 105, 110, 103, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 109, 112, 117, 116, 101, 32, 104, 111, 117, 103, 104, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 32, 40, 116, 104, 101, 116, 97, 44, 114, 104, > 111, 41, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 119, 105, 100, 116, 104, 61, 53, 49, 50, 39, 44, 32, 39, 104, 101, > 105, 103, 104, 116, 61, 119, 105, 100, 116, 104, 39, 32, 97, 110, 100, 32, > 39, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 95, 118, > 111, 116, 105, 110, 103, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 108, 117, 114, 91, 45, 49, 93, 32, 49, 46, 53, 32, 45, 104, > 111, 117, 103, 104, 91, 45, 49, 93, 32, 52, 48, 48, 44, 52, 48, 48, > 32, 45, 98, 108, 117, 114, 91, 45, 49, 93, 32, 48, 46, 53, 32, 45, > 43, 91, 45, 49, 93, 32, 49, 32, 45, 108, 111, 103, 91, 45, 49, 93, > 10, 104, 111, 117, 103, 104, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, 32, 36, > 123, 50, 61, 36, 49, 125, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 109, 112, 117, 116, 101, 32, 36, 49, 120, 36, 50, 32, 104, 111, > 117, 103, 104, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 51, 44, 119, 105, 116, 104, 44, 119, 105, > 116, 104, 111, 117, 116, 125, 34, 32, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 110, 111, 114, 109, 32, 118, 111, 116, 105, 110, 103, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 115, 108, 105, 99, 101, 115, 32, 53, 48, 37, 32, > 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, > 64, 123, 48, 44, 110, 125, 10, 114, 104, 111, 109, 97, 120, 61, 123, 115, > 113, 114, 116, 40, 119, 94, 50, 43, 104, 94, 50, 41, 47, 50, 125, 10, > 45, 103, 32, 40, 48, 44, 123, 119, 45, 49, 125, 41, 32, 40, 48, 59, > 123, 64, 123, 45, 50, 44, 104, 125, 45, 49, 125, 41, 32, 45, 114, 91, > 45, 50, 44, 45, 49, 93, 32, 64, 123, 45, 51, 44, 119, 125, 44, 64, > 123, 45, 51, 44, 104, 125, 44, 49, 44, 49, 44, 51, 32, 45, 45, 91, > 45, 50, 93, 32, 123, 119, 47, 50, 125, 32, 45, 45, 91, 45, 49, 93, > 32, 123, 104, 47, 50, 125, 10, 45, 99, 111, 109, 112, 108, 101, 120, 50, > 112, 111, 108, 97, 114, 91, 45, 52, 45, 45, 49, 93, 32, 45, 45, 91, > 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 112, 111, 108, 97, 114, 50, > 99, 111, 109, 112, 108, 101, 120, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 45, 108, 116, 91, 45, 49, 93, 32, > 48, 32, 45, 42, 91, 45, 49, 93, 32, 123, 112, 105, 125, 32, 45, 43, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 97, 98, 115, 91, 45, 49, 93, > 32, 45, 37, 91, 45, 50, 93, 32, 123, 50, 42, 112, 105, 125, 10, 45, > 42, 91, 45, 49, 93, 32, 123, 36, 50, 47, 36, 114, 104, 111, 109, 97, > 120, 125, 32, 45, 42, 91, 45, 50, 93, 32, 123, 48, 46, 53, 42, 36, > 49, 47, 112, 105, 125, 10, 45, 121, 91, 45, 51, 45, 45, 49, 93, 32, > 120, 32, 123, 119, 125, 32, 45, 109, 118, 91, 45, 52, 93, 32, 64, 35, > 32, 45, 105, 102, 32, 123, 33, 36, 51, 125, 32, 45, 102, 91, 45, 49, > 93, 32, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 121, 32, > 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 32, 49, 32, 45, 114, > 32, 36, 49, 44, 36, 50, 44, 49, 44, 49, 44, 48, 10, 45, 110, 109, > 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, > 102, 102, 116, 112, 111, 108, 97, 114, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 105, 110, 118, 101, 114, 115, > 101, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 44, 32, 102, 114, 111, 109, 32, 99, 101, 110, > 116, 101, 114, 101, 100, 32, 109, 97, 103, 110, 105, 116, 117, 100, 101, 47, > 112, 104, 97, 115, 101, 32, 105, 109, 97, 103, 101, 115, 46, 10, 105, 102, > 102, 116, 112, 111, 108, 97, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 105, 110, 118, 101, 114, > 115, 101, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, > 102, 111, 114, 109, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 102, 114, 111, 109, 32, 99, 101, 110, 116, 101, 114, 101, 100, 32, 109, > 97, 103, 110, 105, 116, 117, 100, 101, 47, 112, 104, 97, 115, 101, 32, 105, > 109, 97, 103, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, > 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 10, 45, > 115, 104, 105, 102, 116, 32, 123, 114, 111, 117, 110, 100, 40, 119, 47, 50, > 41, 125, 44, 123, 114, 111, 117, 110, 100, 40, 104, 47, 50, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 100, 47, 50, 41, 125, 44, 48, 44, 50, > 32, 45, 112, 111, 108, 97, 114, 50, 99, 111, 109, 112, 108, 101, 120, 32, > 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 105, 115, 111, 112, 104, 111, 116, 101, 115, 32, > 58, 32, 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 105, > 115, 111, 112, 104, 111, 116, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 111, 110, 32, 97, > 32, 116, 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 32, 98, 97, 99, > 107, 103, 114, 111, 117, 110, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 110, 98, 95, 108, 101, 118, 101, 108, 115, 61, 54, 52, 39, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 50, 32, 45, 105, 115, > 111, 112, 104, 111, 116, 101, 115, 32, 54, 32, 45, 100, 105, 108, 97, 116, > 101, 95, 99, 105, 114, 99, 32, 53, 32, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 114, 103, 98, 97, 10, 105, 115, 111, 112, 104, 111, 116, 101, 115, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 54, 52, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, > 32, 105, 115, 111, 112, 104, 111, 116, 101, 32, 109, 97, 112, 115, 32, 102, > 114, 111, 109, 32, 105, 109, 97, 103, 101, 115, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 36, 49, 32, 108, 101, 118, 101, 108, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, > 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 49, 32, 45, 45, 105, 115, 111, 108, 105, 110, 101, 51, > 100, 91, 49, 93, 32, 123, 36, 62, 42, 50, 53, 53, 47, 40, 36, 49, > 45, 49, 41, 125, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 49, > 93, 32, 45, 43, 51, 100, 91, 94, 48, 93, 32, 45, 99, 111, 108, 51, > 100, 91, 45, 49, 93, 32, 49, 10, 91, 48, 93, 44, 91, 48, 93, 32, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, > 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 42, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 108, 97, 98, 101, 108, 32, 58, 32, 95, 116, 111, 108, > 101, 114, 97, 110, 99, 101, 62, 61, 48, 44, 105, 115, 95, 104, 105, 103, > 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 98, 101, 108, 32, 99, 111, > 110, 110, 101, 99, 116, 101, 100, 32, 99, 111, 109, 112, 111, 110, 101, 110, > 116, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 116, 111, 108, 101, 114, 97, 110, 99, 101, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 54, 48, 37, 32, 45, 108, 97, 98, 101, > 108, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, > 53, 53, 32, 45, 109, 97, 112, 32, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, 32, 45, 115, 101, > 116, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 32, 49, 32, 45, 109, 111, 100, 32, 49, 54, 32, > 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 56, 32, 45, 108, 97, > 98, 101, 108, 32, 45, 109, 111, 100, 32, 50, 53, 53, 32, 45, 109, 97, > 112, 32, 50, 10, 35, 64, 103, 109, 105, 99, 32, 108, 97, 98, 101, 108, > 95, 102, 103, 32, 58, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 62, > 61, 48, 44, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 98, 101, 108, > 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, 111, 109, 112, 111, > 110, 101, 110, 116, 115, 32, 102, 111, 114, 32, 110, 111, 110, 45, 122, 101, > 114, 111, 32, 118, 97, 108, 117, 101, 115, 32, 40, 102, 111, 114, 101, 103, > 114, 111, 117, 110, 100, 41, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 83, 105, 109, 105, 108, 97, 114, 32, 116, 111, 32, 39, > 45, 108, 97, 98, 101, 108, 39, 32, 101, 120, 99, 101, 112, 116, 32, 116, > 104, 97, 116, 32, 48, 45, 118, 97, 108, 117, 101, 100, 32, 112, 105, 120, > 101, 108, 115, 32, 97, 114, 101, 32, 110, 111, 116, 32, 108, 97, 98, 101, > 108, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 105, 115, > 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, > 116, 121, 61, 48, 39, 46, 10, 108, 97, 98, 101, 108, 95, 102, 103, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 76, 97, 98, 101, 108, 32, 102, 111, 114, > 101, 103, 114, 111, 117, 110, 100, 32, 99, 111, 110, 110, 101, 99, 116, 101, > 100, 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 32, 91, 49, 93, 44, 32, 119, 105, 116, 104, 32, > 116, 111, 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, 100, > 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, > 104, 105, 103, 104, 44, 108, 111, 119, 125, 34, 32, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 123, 100, 62, 49, 125, 32, 45, 45, 122, 32, 45, > 49, 44, 45, 49, 44, 45, 49, 44, 123, 119, 45, 49, 125, 44, 123, 104, > 45, 49, 125, 44, 123, 100, 45, 49, 125, 32, 45, 108, 97, 98, 101, 108, > 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 32, 45, 122, 91, 45, 49, > 93, 32, 49, 44, 49, 44, 49, 44, 123, 119, 45, 49, 125, 44, 123, 104, > 45, 49, 125, 44, 123, 100, 45, 49, 125, 10, 45, 101, 108, 115, 101, 32, > 45, 45, 122, 32, 45, 49, 44, 45, 49, 44, 123, 119, 45, 49, 125, 44, > 123, 104, 45, 49, 125, 32, 45, 108, 97, 98, 101, 108, 91, 45, 49, 93, > 32, 36, 49, 44, 36, 50, 32, 45, 122, 91, 45, 49, 93, 32, 49, 44, > 49, 44, 123, 119, 45, 49, 125, 44, 123, 104, 45, 49, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 110, 101, 113, 91, 45, 50, 93, 32, 48, 32, > 45, 42, 10, 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 123, > 49, 43, 105, 77, 125, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 42, 91, 45, 49, 93, 32, 39, 120, 39, 32, 45, 114, 111, 119, > 115, 91, 45, 49, 93, 32, 45, 49, 44, 48, 32, 45, 108, 97, 98, 101, > 108, 91, 45, 49, 93, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, > 49, 44, 49, 10, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 109, 97, 120, 95, 112, 97, 116, 99, 104, 32, 58, 32, 95, 112, > 97, 116, 99, 104, 95, 115, 105, 122, 101, 62, 61, 49, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 108, 111, 99, > 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 109, 97, 120, 105, 109, 97, > 108, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 108, 111, 99, 97, > 108, 32, 112, 97, 116, 99, 104, 45, 98, 97, 115, 101, 100, 32, 110, 101, > 105, 103, 104, 98, 111, 114, 104, 111, 111, 100, 32, 111, 102, 32, 103, 105, > 118, 101, 110, 32, 115, 105, 122, 101, 32, 102, 111, 114, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 112, 97, 116, 99, 104, 95, 115, 105, 122, > 101, 61, 49, 54, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 110, 111, 114, > 109, 32, 45, 45, 109, 97, 120, 95, 112, 97, 116, 99, 104, 32, 49, 54, > 10, 109, 97, 120, 95, 112, 97, 116, 99, 104, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 49, > 54, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 49, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 116, 117, 114, 110, 32, 108, 111, > 99, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 109, 97, 120, 105, 109, > 97, 108, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 108, 111, 99, > 97, 108, 32, 112, 97, 116, 99, 104, 32, 110, 101, 105, 103, 104, 98, 111, > 114, 104, 111, 111, 100, 32, 111, 102, 32, 115, 105, 122, 101, 32, 36, 49, > 44, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 45, 100, 105, 108, 97, 116, 101, 91, 36, 62, 93, 32, 36, 49, 32, 45, > 61, 61, 91, 36, 62, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, > 112, 97, 116, 99, 104, 32, 58, 32, 95, 112, 97, 116, 99, 104, 95, 115, > 105, 122, 101, 62, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 116, 117, 114, 110, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, > 32, 111, 102, 32, 109, 105, 110, 105, 109, 97, 108, 32, 118, 97, 108, 117, > 101, 115, 32, 105, 110, 32, 108, 111, 99, 97, 108, 32, 112, 97, 116, 99, > 104, 45, 98, 97, 115, 101, 100, 32, 110, 101, 105, 103, 104, 98, 111, 114, > 104, 111, 111, 100, 32, 111, 102, 32, 103, 105, 118, 101, 110, 32, 115, 105, > 122, 101, 32, 102, 111, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 112, 97, 116, 99, 104, 95, 115, 105, 122, 101, 61, 49, 54, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 110, 111, 114, 109, 32, 45, 45, 109, 105, > 110, 95, 112, 97, 116, 99, 104, 32, 49, 54, 10, 109, 105, 110, 95, 112, > 97, 116, 99, 104, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, > 115, 105, 110, 116, 40, 36, 123, 49, 61, 49, 54, 125, 41, 32, 38, 38, > 32, 36, 49, 62, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 82, 101, 116, 117, 114, 110, 32, 108, 111, 99, 97, 116, 105, 111, 110, > 115, 32, 111, 102, 32, 109, 105, 110, 105, 109, 97, 108, 32, 118, 97, 108, > 117, 101, 115, 32, 105, 110, 32, 108, 111, 99, 97, 108, 32, 112, 97, 116, > 99, 104, 32, 110, 101, 105, 103, 104, 98, 111, 114, 104, 111, 111, 100, 32, > 111, 102, 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, 105, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 45, 101, 114, 111, 100, 101, > 91, 36, 62, 93, 32, 36, 49, 32, 45, 61, 61, 91, 36, 62, 44, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, > 104, 32, 58, 32, 120, 48, 91, 37, 93, 62, 61, 48, 44, 121, 48, 91, > 37, 93, 62, 61, 48, 44, 122, 48, 91, 37, 93, 62, 61, 48, 44, 120, > 49, 91, 37, 93, 62, 61, 48, 44, 121, 49, 91, 37, 93, 62, 61, 48, > 44, 122, 49, 91, 37, 93, 62, 61, 48, 44, 95, 105, 115, 95, 104, 105, > 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 109, 105, 110, 105, 109, > 97, 108, 32, 112, 97, 116, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 116, 119, 111, 32, 112, 111, 105, 110, 116, 115, 32, 111, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 112, 111, 116, 101, 110, 116, 105, 97, 108, > 32, 109, 97, 112, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, > 118, 105, 116, 121, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 102, > 105, 108, 108, 91, 45, 49, 93, 32, 49, 47, 40, 49, 43, 105, 41, 32, > 45, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, 104, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 48, 32, 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 91, > 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 56, 48, > 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 101, > 115, 105, 122, 101, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 32, > 45, 111, 114, 10, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, 104, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, > 32, 38, 38, 32, 36, 50, 62, 61, 48, 32, 38, 38, 32, 36, 51, 62, > 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 55, 61, 48, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, > 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 112, 97, 116, 104, 32, 98, > 101, 116, 119, 101, 101, 110, 32, 112, 111, 105, 110, 116, 115, 32, 40, 36, > 49, 44, 36, 50, 44, 36, 51, 41, 32, 97, 110, 100, 32, 40, 36, 52, > 44, 36, 53, 44, 36, 54, 41, 32, 102, 111, 114, 32, 112, 111, 116, 101, > 110, 116, 105, 97, 108, 32, 109, 97, 112, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 55, 44, > 108, 111, 119, 44, 104, 105, 103, 104, 125, 34, 32, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 45, 32, 123, 105, > 109, 125, 32, 45, 43, 32, 123, 105, 77, 47, 49, 48, 48, 125, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 61, 32, 49, 44, 36, 123, > 52, 45, 54, 125, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, > 49, 93, 32, 49, 44, 91, 48, 93, 44, 123, 105, 102, 40, 36, 55, 44, > 52, 44, 51, 41, 125, 32, 45, 107, 91, 45, 49, 93, 10, 120, 61, 123, > 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, 40, > 119, 45, 49, 41, 44, 36, 49, 41, 41, 125, 10, 121, 61, 123, 114, 111, > 117, 110, 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, > 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 40, 104, 45, > 49, 41, 44, 36, 50, 41, 41, 125, 10, 122, 61, 123, 114, 111, 117, 110, > 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, > 110, 116, 92, 32, 36, 51, 125, 44, 36, 51, 42, 40, 100, 45, 49, 41, > 44, 36, 51, 41, 41, 125, 10, 40, 36, 120, 59, 36, 121, 59, 36, 122, > 41, 10, 45, 100, 111, 10, 112, 61, 64, 123, 48, 44, 40, 36, 120, 44, > 36, 121, 44, 36, 122, 41, 125, 10, 45, 105, 102, 32, 123, 36, 112, 38, > 49, 125, 32, 120, 61, 123, 36, 120, 45, 49, 125, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 112, 38, 50, 125, 32, 120, 61, 123, 36, 120, 43, 49, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 112, > 38, 52, 125, 32, 121, 61, 123, 36, 121, 45, 49, 125, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 112, 38, 56, 125, 32, 121, 61, 123, 36, 121, 43, > 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 112, 38, 49, 54, 125, 32, 122, 61, 123, 36, 122, 45, 49, 125, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 112, 38, 51, 50, 125, 32, 122, 61, 123, > 36, 122, 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 40, 36, 120, > 59, 36, 121, 59, 36, 122, 41, 10, 45, 119, 104, 105, 108, 101, 32, 36, > 112, 10, 45, 114, 109, 91, 48, 44, 45, 49, 93, 32, 45, 97, 32, 120, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 109, 115, 101, 32, 58, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, > 77, 83, 69, 32, 40, 77, 101, 97, 110, 45, 83, 113, 117, 97, 114, 101, > 100, 32, 69, 114, 114, 111, 114, 41, 32, 109, 97, 116, 114, 105, 120, 32, > 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 110, 111, 105, 115, 101, 32, 51, 48, 32, 45, 45, 110, 111, 105, 115, 101, > 91, 48, 93, 32, 51, 53, 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, > 93, 32, 51, 56, 32, 45, 99, 117, 116, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 32, 45, 109, 115, 101, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 97, 116, 99, 104, 101, 115, 32, 58, 32, 112, 97, 116, 99, 104, 95, > 119, 105, 100, 116, 104, 62, 48, 44, 112, 97, 116, 99, 104, 95, 104, 101, > 105, 103, 104, 116, 62, 48, 44, 112, 97, 116, 99, 104, 95, 100, 101, 112, > 116, 104, 62, 48, 44, 120, 48, 44, 121, 48, 44, 122, 48, 44, 95, 120, > 49, 44, 95, 121, 49, 44, 95, 122, 49, 44, 46, 46, 46, 44, 95, 120, > 78, 44, 95, 121, 78, 44, 95, 122, 78, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 120, 116, 114, 97, 99, 116, 32, 78, 43, 49, 32, 112, > 97, 116, 99, 104, 101, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 99, 101, 110, > 116, 101, 114, 101, 100, 32, 97, 116, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 112, 97, 116, 99, 104, 101, 115, 32, 54, 52, 44, > 54, 52, 44, 49, 44, 49, 53, 51, 44, 49, 50, 52, 44, 48, 44, 49, > 56, 52, 44, 50, 52, 48, 44, 48, 44, 50, 49, 55, 44, 49, 50, 54, > 44, 48, 44, 50, 55, 53, 44, 51, 56, 44, 48, 10, 112, 97, 116, 99, > 104, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, > 105, 110, 116, 40, 36, 49, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, > 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 50, 41, 32, 38, 38, 32, > 36, 50, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 51, > 41, 32, 38, 38, 32, 36, 51, 62, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 69, 120, 116, 114, 97, 99, 116, 32, 36, 49, 120, 36, > 50, 120, 36, 51, 32, 112, 97, 116, 99, 104, 101, 115, 32, 102, 114, 111, > 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 97, 116, 32, 108, 111, > 99, 97, 116, 105, 111, 110, 115, 32, 40, 36, 123, 52, 45, 45, 49, 125, > 41, 46, 34, 10, 45, 118, 32, 45, 10, 40, 36, 123, 52, 45, 45, 49, > 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 119, 47, 51, > 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, > 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 32, 78, 61, 123, 119, 125, > 10, 72, 61, 123, 105, 110, 116, 40, 115, 113, 114, 116, 40, 119, 41, 41, > 125, 32, 87, 61, 123, 114, 111, 117, 110, 100, 40, 119, 47, 36, 72, 44, > 49, 44, 49, 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 123, 36, 87, > 42, 36, 72, 125, 44, 49, 44, 49, 44, 51, 44, 48, 32, 45, 114, 91, > 45, 49, 93, 32, 36, 87, 44, 36, 72, 44, 49, 44, 51, 44, 45, 49, > 10, 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 36, 49, 125, 44, 123, > 104, 42, 36, 50, 125, 44, 123, 100, 42, 36, 51, 125, 10, 36, 49, 44, > 36, 50, 44, 36, 51, 44, 49, 44, 120, 45, 123, 105, 110, 116, 40, 36, > 49, 47, 50, 41, 125, 32, 45, 45, 102, 91, 45, 49, 93, 32, 121, 45, > 123, 105, 110, 116, 40, 36, 50, 47, 50, 41, 125, 32, 45, 45, 102, 91, > 45, 49, 93, 32, 122, 45, 123, 105, 110, 116, 40, 36, 51, 47, 50, 41, > 125, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 114, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 64, 35, 45, 49, 125, 32, 45, 119, 97, 114, 112, 91, 36, 62, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 32, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 32, 45, 115, 32, 121, > 44, 36, 72, 32, 45, 115, 32, 120, 44, 36, 87, 32, 45, 107, 91, 48, > 45, 123, 36, 78, 45, 49, 125, 93, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 112, 108, 111, 116, 50, 118, 97, 108, 117, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 114, 105, 101, 118, 101, 32, 118, 97, > 108, 117, 101, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 50, 100, 32, 103, 114, 97, 112, 104, 32, 112, 108, 111, 116, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, > 48, 44, 51, 48, 48, 44, 49, 44, 49, 44, 39, 105, 102, 40, 121, 62, > 51, 48, 48, 42, 97, 98, 115, 40, 99, 111, 115, 40, 120, 47, 49, 48, > 43, 50, 42, 63, 41, 41, 44, 49, 44, 48, 41, 39, 32, 45, 45, 112, > 108, 111, 116, 50, 118, 97, 108, 117, 101, 32, 45, 45, 100, 105, 115, 112, > 108, 97, 121, 95, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 52, 48, > 48, 44, 51, 48, 48, 10, 112, 108, 111, 116, 50, 118, 97, 108, 117, 101, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 116, 114, > 105, 101, 118, 101, 32, 118, 97, 108, 117, 101, 115, 32, 102, 114, 111, 109, > 32, 50, 100, 32, 103, 114, 97, 112, 104, 32, 112, 108, 111, 116, 36, 63, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, > 103, 101, 32, 53, 48, 37, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 40, 49, 44, 123, 119, 125, 41, > 32, 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 51, 32, 45, 42, 32, > 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 123, 119, 125, 44, 49, > 44, 123, 119, 125, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, > 105, 110, 116, 99, 108, 111, 117, 100, 32, 58, 32, 95, 116, 121, 112, 101, > 32, 61, 32, 123, 32, 45, 88, 61, 45, 88, 45, 111, 112, 97, 99, 105, > 116, 121, 32, 124, 32, 48, 61, 98, 105, 110, 97, 114, 121, 32, 124, 32, > 49, 61, 99, 117, 109, 117, 108, 97, 116, 105, 118, 101, 32, 124, 32, 50, > 61, 108, 97, 98, 101, 108, 32, 125, 44, 95, 119, 105, 100, 116, 104, 44, > 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 100, 101, 112, 116, 104, > 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, > 101, 114, 116, 32, 97, 32, 78, 120, 49, 44, 32, 78, 120, 50, 44, 32, > 78, 120, 51, 32, 111, 114, 32, 78, 120, 77, 32, 105, 109, 97, 103, 101, > 32, 97, 115, 32, 97, 32, 112, 111, 105, 110, 116, 32, 99, 108, 111, 117, > 100, 32, 105, 110, 32, 97, 32, 49, 100, 47, 50, 100, 32, 111, 114, 32, > 51, 100, 32, 98, 105, 110, 97, 114, 121, 32, 105, 109, 97, 103, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 77, 39, > 62, 51, 44, 32, 116, 104, 101, 32, 51, 45, 116, 111, 45, 77, 32, 108, > 105, 110, 101, 115, 32, 115, 101, 116, 115, 32, 116, 104, 101, 32, 40, 77, > 45, 51, 41, 45, 100, 105, 109, 101, 110, 115, 105, 111, 110, 97, 108, 32, > 99, 111, 108, 111, 114, 32, 97, 116, 32, 101, 97, 99, 104, 32, 112, 111, > 105, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 97, > 114, 97, 109, 101, 116, 101, 114, 115, 32, 39, 119, 105, 100, 116, 104, 39, > 44, 39, 104, 101, 105, 103, 104, 116, 39, 32, 97, 110, 100, 32, 39, 100, > 101, 112, 116, 104, 39, 32, 97, 114, 101, 32, 114, 101, 108, 97, 116, 101, > 100, 32, 116, 111, 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 111, 102, > 32, 116, 104, 101, 32, 102, 105, 110, 97, 108, 32, 105, 109, 97, 103, 101, > 32, 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 32, 32, 45, 32, > 73, 102, 32, 115, 101, 116, 32, 116, 111, 32, 48, 44, 32, 116, 104, 101, > 32, 115, 105, 122, 101, 32, 105, 115, 32, 97, 117, 116, 111, 109, 97, 116, > 105, 99, 97, 108, 108, 121, 32, 115, 101, 116, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, > 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 32, 32, > 45, 32, 73, 102, 32, 115, 101, 116, 32, 116, 111, 32, 78, 62, 48, 44, > 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 120, > 105, 115, 32, 105, 115, 32, 78, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 32, 32, 45, 32, 73, 102, 32, 115, 101, 116, 32, 116, 111, 32, > 78, 60, 48, 44, 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 97, 120, 105, 115, 32, 105, 115, 32, 97, 116, 32, 109, 111, 115, > 116, 32, 78, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 111, > 105, 110, 116, 115, 32, 119, 105, 116, 104, 32, 99, 111, 111, 114, 100, 105, > 110, 97, 116, 101, 115, 32, 116, 104, 97, 116, 32, 97, 114, 101, 32, 110, > 101, 103, 97, 116, 105, 118, 101, 32, 111, 114, 32, 104, 105, 103, 104, 101, > 114, 32, 116, 104, 97, 110, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 40, 39, 119, 105, 100, 116, 104, 39, 44, 39, 104, 101, 105, 103, 104, > 116, 39, 44, 39, 100, 101, 112, 116, 104, 39, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 97, 114, 101, 32, 110, 111, 116, 32, 112, 108, 111, > 116, 116, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 116, 121, 112, 101, 61, 48, 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, > 95, 119, 105, 100, 116, 104, 61, 109, 97, 120, 95, 104, 101, 105, 103, 104, > 116, 61, 109, 97, 120, 95, 100, 101, 112, 116, 104, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 48, 44, > 50, 32, 45, 114, 97, 110, 100, 32, 48, 44, 52, 48, 48, 32, 45, 45, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 32, 48, 32, 45, 100, 105, > 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 51, 48, 48, 48, 44, 50, 32, 45, 114, 97, > 110, 100, 32, 48, 44, 52, 48, 48, 32, 123, 119, 125, 32, 123, 119, 125, > 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, 121, 32, 45, 45, 112, > 111, 105, 110, 116, 99, 108, 111, 117, 100, 32, 48, 32, 45, 100, 105, 108, > 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 112, 111, 105, 110, 116, 99, > 108, 111, 117, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 123, 49, 61, 48, 125, 60, 51, 34, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, > 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, > 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, > 112, 111, 105, 110, 116, 32, 99, 108, 111, 117, 100, 115, 44, 32, 105, 110, > 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 50, 43, 40, 36, 49, 62, > 61, 48, 41, 42, 36, 49, 45, 40, 36, 49, 60, 48, 41, 44, 123, 45, > 36, 49, 125, 45, 111, 112, 97, 99, 105, 116, 121, 44, 98, 105, 110, 97, > 114, 121, 44, 99, 117, 109, 117, 108, 97, 116, 105, 118, 101, 44, 108, 97, > 98, 101, 108, 105, 110, 103, 125, 34, 32, 109, 111, 100, 101, 44, 34, 92, > 10, 34, 119, 105, 116, 104, 32, 40, 36, 50, 44, 36, 51, 44, 36, 52, > 41, 32, 97, 115, 32, 109, 97, 120, 105, 109, 97, 108, 32, 100, 105, 109, > 101, 110, 115, 105, 111, 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 105, 102, 32, 123, > 34, 100, 62, 49, 32, 124, 124, 32, 115, 62, 49, 34, 125, 32, 45, 101, > 114, 114, 111, 114, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 39, 58, 32, 73, 110, 118, > 97, 108, 105, 100, 32, 105, 110, 112, 117, 116, 32, 105, 109, 97, 103, 101, > 32, 34, 123, 119, 125, 120, 123, 104, 125, 120, 123, 100, 125, 120, 123, 115, > 125, 34, 46, 32, 83, 104, 111, 117, 108, 100, 32, 98, 101, 32, 78, 120, > 77, 120, 49, 120, 49, 46, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 111, 119, 115, 32, 48, 44, 123, 109, 97, 120, 40, 50, 44, 104, 45, > 49, 41, 125, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 48, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 100, > 120, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 36, 50, 61, 61, > 48, 44, 105, 77, 43, 49, 44, 105, 102, 40, 36, 50, 60, 48, 44, 109, > 105, 110, 40, 105, 77, 43, 49, 44, 45, 36, 50, 41, 44, 36, 50, 41, > 41, 41, 125, 10, 45, 115, 104, 91, 45, 50, 93, 32, 49, 44, 49, 44, > 48, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 100, > 121, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 36, 51, 61, 61, > 48, 44, 105, 77, 43, 49, 44, 105, 102, 40, 36, 51, 60, 48, 44, 109, > 105, 110, 40, 105, 77, 43, 49, 44, 45, 36, 51, 41, 44, 36, 51, 41, > 41, 41, 125, 10, 45, 115, 104, 91, 45, 51, 93, 32, 50, 44, 50, 44, > 48, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 100, > 122, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 36, 52, 61, 61, > 48, 44, 105, 77, 43, 49, 44, 105, 102, 40, 36, 52, 60, 48, 44, 109, > 105, 110, 40, 105, 77, 43, 49, 44, 45, 36, 52, 41, 44, 36, 52, 41, > 41, 41, 125, 10, 45, 42, 91, 45, 49, 93, 32, 36, 100, 121, 32, 45, > 43, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 102, 91, 45, 49, > 93, 32, 48, 32, 45, 114, 109, 91, 45, 51, 45, 45, 49, 93, 10, 45, > 115, 32, 120, 44, 45, 49, 48, 48, 48, 48, 48, 48, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, > 98, 112, 61, 123, 119, 125, 10, 45, 105, 102, 32, 123, 104, 62, 51, 125, > 32, 45, 45, 114, 111, 119, 115, 32, 51, 44, 49, 48, 48, 37, 32, 45, > 114, 111, 119, 115, 91, 45, 50, 93, 32, 48, 44, 50, 32, 45, 101, 108, > 115, 101, 32, 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 44, 49, 32, > 45, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 102, 91, 45, > 49, 93, 32, 49, 43, 120, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, > 110, 100, 105, 102, 10, 115, 112, 101, 99, 116, 114, 117, 109, 61, 123, 104, > 125, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 49, > 59, 49, 59, 123, 104, 125, 41, 32, 45, 114, 91, 45, 50, 93, 32, 123, > 119, 125, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 45, > 105, 91, 45, 51, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, > 125, 41, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 105, 91, 45, 51, 93, 32, 40, 36, 110, 98, > 112, 59, 36, 110, 98, 112, 41, 10, 45, 105, 91, 45, 50, 93, 32, 49, > 44, 36, 110, 98, 112, 44, 49, 44, 49, 44, 49, 32, 45, 105, 91, 45, > 50, 93, 32, 49, 44, 36, 110, 98, 112, 44, 49, 44, 49, 44, 121, 32, > 45, 97, 91, 45, 51, 44, 45, 50, 93, 32, 120, 10, 49, 44, 36, 110, > 98, 112, 44, 49, 44, 49, 44, 123, 105, 102, 40, 36, 49, 60, 48, 44, > 45, 36, 49, 44, 105, 102, 40, 36, 49, 61, 61, 49, 44, 45, 49, 44, > 49, 41, 41, 125, 10, 45, 121, 91, 45, 52, 45, 45, 50, 93, 32, 45, > 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 43, 51, 100, 10, 36, 100, 120, 44, 123, 36, 100, 121, 42, 36, 100, > 122, 125, 44, 49, 44, 36, 115, 112, 101, 99, 116, 114, 117, 109, 32, 45, > 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 32, > 45, 114, 109, 91, 45, 50, 93, 32, 45, 114, 91, 45, 49, 93, 32, 36, > 100, 120, 44, 36, 100, 121, 44, 36, 100, 122, 44, 49, 48, 48, 37, 44, > 45, 49, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 112, 115, 110, 114, 32, 58, 32, 95, 109, 97, 120, > 95, 118, 97, 108, 117, 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 80, 83, > 78, 82, 32, 40, 80, 101, 97, 107, 32, 83, 105, 103, 110, 97, 108, 45, > 116, 111, 45, 78, 111, 105, 115, 101, 32, 82, 97, 116, 105, 111, 41, 32, > 109, 97, 116, 114, 105, 120, 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 109, 97, 120, 95, 118, 97, 108, > 117, 101, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 110, 111, 105, 115, 101, 32, 51, 48, 32, 45, 45, 110, 111, 105, 115, 101, > 91, 48, 93, 32, 51, 53, 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, > 93, 32, 51, 56, 32, 45, 99, 117, 116, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 32, 45, 112, 115, 110, 114, 32, 50, 53, 53, 32, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 105, 110, 102, 32, 48, 10, 112, 115, 110, > 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 50, 53, > 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 34, 64, 35, 120, 64, 35, 34, 32, > 109, 97, 116, 114, 105, 120, 32, 111, 102, 32, 80, 83, 78, 82, 32, 118, > 97, 108, 117, 101, 115, 44, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 119, 105, 116, 104, 32, 109, 97, 120, 105, 109, 117, 109, > 32, 118, 97, 108, 117, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 109, 115, 101, 32, 45, 108, 111, 103, 49, 48, 32, 45, 45, 32, > 123, 108, 111, 103, 49, 48, 40, 36, 49, 42, 36, 49, 41, 125, 32, 45, > 42, 32, 45, 49, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 80, > 83, 78, 82, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 32, 58, 32, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, > 61, 48, 44, 95, 102, 105, 108, 108, 95, 108, 105, 110, 101, 115, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 119, 97, 116, 101, 114, 115, 104, 101, > 100, 32, 115, 101, 103, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, > 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 61, 50, 39, 32, 97, 110, 100, 32, 39, 102, > 105, 108, 108, 95, 108, 105, 110, 101, 115, 61, 49, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, > 101, 114, 115, 104, 101, 100, 32, 50, 44, 48, 10, 115, 101, 103, 109, 101, > 110, 116, 95, 119, 97, 116, 101, 114, 115, 104, 101, 100, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 50, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 119, 97, > 116, 101, 114, 115, 104, 101, 100, 32, 115, 101, 103, 109, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 101, 100, 103, 101, 32, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 43, 32, 123, 49, 43, 64, 123, 45, 49, 44, 109, 125, 125, 32, > 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 10, > 45, 105, 102, 32, 123, 100, 62, 49, 125, 32, 45, 45, 102, 91, 45, 49, > 93, 32, 34, 105, 102, 40, 105, 60, 36, 49, 32, 38, 38, 32, 105, 60, > 106, 40, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, 45, 49, 41, 32, > 38, 38, 32, 105, 60, 106, 40, 48, 44, 49, 41, 32, 38, 38, 32, 105, > 60, 106, 40, 48, 44, 45, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, > 48, 44, 48, 44, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, 48, 44, > 48, 44, 45, 49, 41, 44, 49, 44, 48, 41, 34, 10, 45, 101, 108, 115, > 101, 32, 45, 45, 102, 91, 45, 49, 93, 32, 34, 105, 102, 40, 105, 60, > 36, 49, 32, 38, 38, 32, 105, 60, 106, 40, 49, 41, 32, 38, 38, 32, > 105, 60, 106, 40, 45, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, 48, > 44, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, 48, 44, 45, 49, 41, > 44, 49, 44, 48, 41, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 42, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, > 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 36, 50, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 107, 101, 108, 101, 116, 111, > 110, 32, 58, 32, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, > 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 109, 112, 117, 116, 101, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, > 111, 102, 32, 98, 105, 110, 97, 114, 121, 32, 115, 104, 97, 112, 101, 115, > 32, 117, 115, 105, 110, 103, 32, 100, 105, 115, 116, 97, 110, 99, 101, 32, > 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 53, 48, 37, 32, 45, 45, 115, 107, 101, 108, 101, 116, 111, > 110, 32, 48, 10, 115, 107, 101, 108, 101, 116, 111, 110, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 48, 125, 62, 61, 48, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 111, 102, 32, 98, 105, 110, > 97, 114, 121, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 103, 101, 32, 53, 48, 37, 32, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 32, 48, 32, 45, 98, 32, 36, 49, 32, 45, 115, 104, > 97, 114, 112, 101, 110, 32, 49, 101, 49, 48, 32, 45, 103, 101, 32, 49, > 48, 48, 37, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 45, 101, 114, 111, 100, 101, 91, 36, 62, 93, 32, 50, 32, 45, 45, 91, > 36, 62, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 115, 100, 95, 112, 97, 116, > 99, 104, 32, 58, 32, 95, 117, 115, 101, 95, 102, 111, 117, 114, 105, 101, > 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 98, 111, 117, > 110, 100, 97, 114, 121, 95, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 102, 105, > 101, 108, 100, 32, 111, 102, 32, 83, 83, 68, 32, 98, 101, 116, 119, 101, > 101, 110, 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 97, 110, 100, 32, > 97, 32, 112, 97, 116, 99, 104, 44, 32, 116, 97, 107, 101, 110, 32, 97, > 115, 32, 99, 111, 110, 115, 101, 99, 117, 116, 105, 118, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 114, 103, 117, 109, 101, 110, 116, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 95, 99, 111, 110, 100, 105, > 116, 105, 111, 110, 115, 39, 32, 105, 115, 32, 118, 97, 108, 105, 100, 32, > 111, 110, 108, 121, 32, 119, 104, 101, 110, 32, 39, 117, 115, 101, 95, 102, > 111, 117, 114, 105, 101, 114, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 117, 115, 101, 95, 102, 111, 117, 114, 105, 101, 114, 61, > 48, 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 95, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 99, 114, 111, 112, 32, 50, 48, 37, 44, > 50, 48, 37, 44, 51, 53, 37, 44, 51, 53, 37, 32, 45, 45, 115, 115, > 100, 95, 112, 97, 116, 99, 104, 32, 48, 44, 48, 10, 115, 115, 100, 95, > 112, 97, 116, 99, 104, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 48, 125, 44, 36, 123, 50, 61, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 102, 105, 101, > 108, 100, 32, 111, 102, 32, 83, 83, 68, 32, 98, 101, 116, 119, 101, 101, > 110, 32, 105, 109, 97, 103, 101, 115, 32, 97, 110, 100, 32, 112, 97, 116, > 99, 104, 115, 32, 117, 115, 105, 110, 103, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 49, 44, 102, 111, 117, 114, 105, 101, 114, > 44, 115, 112, 97, 116, 105, 97, 108, 125, 34, 32, 109, 111, 100, 101, 44, > 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, > 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, > 43, 49, 125, 93, 10, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 64, 123, 45, 109, 97, 120, 95, 115, 125, > 32, 45, 115, 32, 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, > 35, 47, 50, 125, 32, 45, 108, 91, 36, 62, 44, 123, 45, 49, 45, 36, > 60, 125, 93, 10, 45, 45, 115, 113, 114, 91, 49, 93, 32, 118, 97, 108, > 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 45, 115, 113, 114, 91, 48, 93, 32, 45, 45, 102, 91, 49, 93, > 32, 49, 10, 45, 105, 102, 32, 36, 49, 10, 45, 99, 111, 110, 118, 111, > 108, 118, 101, 95, 102, 102, 116, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 109, 105, 114, 114, 111, 114, 91, 49, 93, 32, 120, 121, 122, 32, 45, 99, > 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, 116, 91, 48, 44, 49, 93, > 10, 45, 101, 108, 115, 101, 10, 45, 99, 111, 114, 114, 101, 108, 97, 116, > 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 50, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, > 91, 48, 93, 32, 91, 49, 93, 44, 36, 50, 32, 45, 114, 109, 91, 49, > 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 42, 91, 48, 93, 32, 45, > 50, 32, 45, 43, 91, 48, 44, 49, 93, 32, 45, 43, 32, 36, 118, 97, > 108, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 43, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 104, 105, 110, 110, 105, 110, > 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 111, 102, 32, 98, > 105, 110, 97, 114, 121, 32, 115, 104, 97, 112, 101, 115, 32, 117, 115, 105, > 110, 103, 32, 109, 111, 114, 112, 104, 111, 108, 111, 103, 105, 99, 97, 108, > 32, 116, 104, 105, 110, 110, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 113, 117, > 105, 116, 101, 32, 115, 108, 111, 119, 32, 105, 116, 101, 114, 97, 116, 105, > 118, 101, 32, 112, 114, 111, 99, 101, 115, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, > 45, 116, 104, 105, 110, 110, 105, 110, 103, 10, 116, 104, 105, 110, 110, 105, > 110, 103, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, > 109, 112, 117, 116, 101, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 111, > 102, 32, 98, 105, 110, 97, 114, 121, 32, 105, 109, 97, 103, 101, 36, 63, > 44, 32, 117, 115, 105, 110, 103, 32, 109, 111, 114, 112, 104, 111, 108, 111, > 103, 105, 99, 97, 108, 32, 116, 104, 105, 110, 110, 105, 110, 103, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 103, 101, 32, 53, 48, 37, 32, 45, 42, > 32, 50, 32, 45, 45, 32, 49, 10, 40, 45, 49, 44, 45, 49, 44, 45, > 49, 59, 48, 44, 49, 44, 48, 59, 49, 44, 49, 44, 49, 41, 32, 40, > 48, 44, 45, 49, 44, 45, 49, 59, 49, 44, 49, 44, 45, 49, 59, 48, > 44, 49, 44, 48, 41, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, > 50, 44, 45, 49, 93, 32, 57, 48, 32, 45, 45, 114, 111, 116, 97, 116, > 101, 91, 45, 50, 44, 45, 49, 93, 32, 57, 48, 32, 45, 45, 114, 111, > 116, 97, 116, 101, 91, 45, 50, 44, 45, 49, 93, 32, 57, 48, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 56, 125, 10, 98, 97, > 118, 103, 61, 64, 123, 45, 57, 44, 43, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 57, 57, 57, 57, 57, 10, 45, 45, 99, 111, 114, 114, 101, > 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, 56, 93, 32, 45, 103, > 101, 91, 45, 49, 93, 32, 55, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, 10, 45, 45, 99, 111, > 114, 114, 101, 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, 55, 93, > 32, 45, 103, 101, 91, 45, 49, 93, 32, 54, 32, 45, 42, 91, 45, 49, > 93, 32, 50, 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, 10, 45, > 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, > 45, 54, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 55, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, > 93, 10, 45, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 45, 57, > 93, 32, 91, 45, 53, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 54, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 45, 91, 45, 49, 48, > 44, 45, 49, 93, 10, 45, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, > 91, 45, 57, 93, 32, 91, 45, 52, 93, 32, 45, 103, 101, 91, 45, 49, > 93, 32, 55, 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 45, 91, > 45, 49, 48, 44, 45, 49, 93, 10, 45, 45, 99, 111, 114, 114, 101, 108, > 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, 51, 93, 32, 45, 103, 101, > 91, 45, 49, 93, 32, 54, 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, > 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, 10, 45, 45, 99, 111, 114, > 114, 101, 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, 50, 93, 32, > 45, 103, 101, 91, 45, 49, 93, 32, 55, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, 10, 45, 45, > 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, > 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 54, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, > 10, 97, 97, 118, 103, 61, 64, 123, 45, 57, 44, 43, 125, 32, 45, 105, > 102, 32, 123, 36, 97, 97, 118, 103, 61, 61, 36, 98, 97, 118, 103, 125, > 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 32, 98, > 97, 118, 103, 61, 36, 97, 97, 118, 103, 10, 45, 100, 111, 110, 101, 10, > 45, 109, 118, 91, 45, 57, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, > 45, 114, 109, 91, 45, 56, 45, 45, 49, 93, 32, 45, 43, 32, 49, 32, > 45, 47, 32, 50, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 116, 111, 110, 101, 115, 32, 58, 32, 78, 62, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 71, 101, 116, 32, 78, 32, 116, 111, 110, 101, > 115, 32, 109, 97, 115, 107, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 116, 111, 110, 101, 115, 32, 51, 10, 116, 111, 110, > 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, 48, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 116, 32, 36, 49, > 32, 116, 111, 110, 101, 115, 32, 109, 97, 115, 107, 115, 32, 102, 114, 111, > 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 110, 111, 114, 109, 32, 45, 110, 32, 48, 44, 123, 36, 49, 45, > 49, 125, 32, 45, 114, 111, 117, 110, 100, 32, 49, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, 125, 32, 45, 45, 61, > 61, 91, 48, 93, 32, 123, 49, 43, 36, 62, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 61, 61, 91, 48, 93, 32, 48, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 116, 111, 112, 111, 103, 114, 97, 112, 104, 105, 99, 95, 109, > 97, 112, 32, 58, 32, 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, > 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, > 32, 116, 111, 112, 111, 103, 114, 97, 112, 104, 105, 99, 32, 109, 97, 112, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, > 108, 101, 118, 101, 108, 115, 61, 49, 54, 39, 32, 97, 110, 100, 32, 39, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 50, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 116, 111, 112, 111, 103, 114, 97, 112, 104, 105, > 99, 95, 109, 97, 112, 32, 49, 48, 10, 116, 111, 112, 111, 103, 114, 97, > 112, 104, 105, 99, 95, 109, 97, 112, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 49, 54, 125, > 41, 32, 38, 38, 32, 36, 49, 62, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 82, 101, 110, 100, 101, 114, 32, 116, 111, 112, 111, 103, 114, 97, 112, > 104, 105, 99, 32, 109, 97, 112, 115, 32, 102, 114, 111, 109, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 108, > 101, 118, 101, 108, 115, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 45, 98, 32, 36, 50, 32, 45, 105, 115, 111, 112, 104, 111, 116, > 101, 115, 91, 45, 49, 93, 32, 36, 49, 32, 45, 99, 111, 109, 112, 111, > 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, > 43, 32, 45, 61, 61, 91, 45, 49, 93, 32, 48, 32, 45, 98, 108, 101, > 110, 100, 32, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 118, 97, 114, 105, 97, 110, 99, > 101, 95, 112, 97, 116, 99, 104, 32, 58, 32, 95, 112, 97, 116, 99, 104, > 95, 115, 105, 122, 101, 62, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 118, 97, 114, 105, 97, 110, > 99, 101, 32, 111, 102, 32, 101, 97, 99, 104, 32, 105, 109, 97, 103, 101, > 115, 32, 112, 97, 116, 99, 104, 32, 99, 101, 110, 116, 101, 114, 101, 100, > 32, 97, 116, 32, 40, 120, 44, 121, 41, 44, 32, 105, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 112, 97, 116, 99, 104, 95, 115, 105, > 122, 101, 61, 49, 54, 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 118, 97, > 114, 105, 97, 110, 99, 101, 95, 112, 97, 116, 99, 104, 10, 118, 97, 114, > 105, 97, 110, 99, 101, 95, 112, 97, 116, 99, 104, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, > 49, 54, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 49, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, > 118, 97, 114, 105, 97, 110, 99, 101, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 32, 112, 97, 116, 99, 104, 101, 115, 32, 105, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 112, 97, 116, 99, 104, > 32, 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 10, > 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 49, 32, 45, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, > 91, 36, 62, 44, 45, 49, 93, 10, 45, 45, 115, 113, 114, 91, 48, 93, > 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 48, 44, 50, 93, 32, > 91, 49, 93, 10, 45, 115, 113, 114, 91, 48, 93, 32, 45, 114, 118, 91, > 48, 44, 50, 93, 32, 45, 45, 91, 48, 44, 50, 93, 32, 45, 109, 97, > 120, 91, 48, 93, 32, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 73, 109, 97, 103, 101, 32, > 100, 114, 97, 119, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 97, > 120, 101, 115, 32, 58, 32, 120, 48, 44, 120, 49, 44, 121, 48, 44, 121, > 49, 44, 95, 102, 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 62, 61, > 48, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, > 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, > 97, 119, 32, 120, 121, 45, 97, 120, 101, 115, 32, 111, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, > 39, 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, > 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, > 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, > 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, > 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, > 32, 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 84, 111, 32, 100, 114, 97, 119, 32, 111, 110, 108, 121, 32, > 111, 110, 101, 32, 120, 45, 97, 120, 105, 115, 32, 97, 116, 32, 114, 111, > 119, 32, 89, 44, 32, 115, 101, 116, 32, 98, 111, 116, 104, 32, 39, 121, > 48, 39, 32, 97, 110, 100, 32, 39, 121, 49, 39, 32, 116, 111, 32, 89, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 111, 32, 100, 114, > 97, 119, 32, 111, 110, 108, 121, 32, 111, 110, 101, 32, 121, 45, 97, 120, > 105, 115, 32, 97, 116, 32, 99, 111, 108, 117, 109, 110, 32, 88, 44, 32, > 115, 101, 116, 32, 98, 111, 116, 104, 32, 39, 120, 48, 39, 32, 97, 110, > 100, 32, 39, 120, 49, 39, 32, 116, 111, 32, 88, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 102, 111, 110, 116, 95, 104, 101, 105, 103, > 104, 116, 61, 49, 51, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, 39, > 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, > 51, 44, 50, 53, 53, 32, 45, 97, 120, 101, 115, 32, 45, 49, 44, 49, > 44, 49, 44, 45, 49, 10, 35, 64, 103, 109, 105, 99, 32, 98, 97, 108, > 108, 32, 58, 32, 95, 115, 105, 122, 101, 62, 48, 44, 32, 95, 82, 44, > 95, 71, 44, 95, 66, 44, 48, 60, 61, 95, 115, 112, 101, 99, 117, 108, > 97, 114, 95, 108, 105, 103, 104, 116, 60, 61, 56, 44, 48, 60, 61, 95, > 115, 112, 101, 99, 117, 108, 97, 114, 95, 115, 105, 122, 101, 60, 61, 56, > 44, 95, 115, 104, 97, 100, 111, 119, 62, 61, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 97, 32, 50, 100, 32, > 82, 71, 66, 65, 32, 99, 111, 108, 111, 114, 101, 100, 32, 98, 97, 108, > 108, 32, 115, 112, 114, 105, 116, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 115, 105, 122, 101, 61, 54, 52, 39, 44, 32, 39, 82, > 61, 50, 53, 53, 39, 44, 32, 39, 71, 61, 82, 39, 44, 32, 39, 66, > 61, 82, 39, 44, 32, 39, 115, 112, 101, 99, 117, 108, 97, 114, 95, 108, > 105, 103, 104, 116, 61, 48, 46, 56, 39, 44, 32, 39, 115, 112, 101, 99, > 117, 108, 97, 114, 95, 115, 105, 122, 101, 61, 49, 39, 32, 97, 110, 100, > 32, 39, 115, 104, 97, 100, 105, 110, 103, 61, 49, 46, 53, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 57, 32, 45, 98, 97, 108, 108, 32, 123, 49, 46, 53, 94, > 40, 36, 62, 43, 50, 41, 125, 44, 64, 123, 45, 82, 71, 66, 125, 32, > 45, 100, 111, 110, 101, 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, > 98, 97, 108, 108, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 123, 49, 61, 54, 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 53, 61, > 48, 46, 56, 125, 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 56, > 32, 38, 38, 32, 36, 123, 54, 61, 49, 125, 62, 61, 48, 32, 36, 54, > 60, 61, 56, 32, 38, 38, 32, 36, 123, 55, 61, 49, 46, 53, 125, 62, > 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 53, > 53, 125, 44, 36, 123, 51, 61, 36, 50, 125, 44, 36, 123, 52, 61, 36, > 51, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, > 116, 32, 36, 49, 120, 36, 49, 32, 98, 97, 108, 108, 32, 119, 105, 116, > 104, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 50, 45, 52, 125, 41, > 44, 32, 115, 112, 101, 99, 117, 108, 97, 114, 32, 108, 105, 103, 104, 116, > 32, 36, 53, 44, 32, 115, 112, 101, 99, 117, 108, 97, 114, 32, 115, 105, > 122, 101, 32, 36, 54, 32, 97, 110, 100, 32, 115, 104, 97, 100, 111, 119, > 32, 102, 97, 99, 116, 111, 114, 32, 36, 55, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 108, 91, 93, 10, 123, 50, 42, 36, 49, 125, 44, 123, 50, > 42, 36, 49, 125, 32, 45, 61, 32, 49, 44, 54, 53, 37, 44, 51, 48, > 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, 49, 32, 45, 42, > 32, 45, 49, 10, 45, 45, 110, 32, 48, 44, 49, 32, 45, 94, 91, 49, > 93, 32, 36, 55, 32, 45, 42, 91, 49, 93, 32, 49, 46, 52, 32, 45, > 45, 42, 91, 49, 93, 32, 36, 51, 32, 45, 45, 42, 91, 49, 93, 32, > 36, 52, 32, 45, 42, 91, 49, 93, 32, 36, 50, 32, 45, 97, 91, 94, > 48, 93, 32, 99, 10, 45, 103, 101, 91, 48, 93, 32, 123, 49, 48, 48, > 45, 49, 48, 42, 36, 54, 125, 37, 32, 45, 98, 91, 48, 93, 32, 123, > 51, 42, 36, 54, 125, 37, 32, 45, 110, 91, 48, 93, 32, 48, 44, 123, > 36, 53, 42, 50, 53, 53, 125, 32, 45, 114, 118, 32, 45, 43, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 32, 45, 99, 105, 114, 99, 108, 101, 91, 49, 93, 32, 53, 48, 37, > 44, 53, 48, 37, 44, 51, 52, 37, 44, 49, 44, 49, 32, 45, 42, 91, > 48, 93, 32, 91, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, > 53, 32, 45, 97, 32, 99, 10, 45, 114, 32, 36, 49, 44, 36, 49, 44, > 49, 44, 52, 44, 50, 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 104, 101, 115, 115, 98, 111, 97, > 114, 100, 32, 58, 32, 115, 105, 122, 101, 49, 62, 48, 44, 95, 115, 105, > 122, 101, 50, 62, 48, 44, 95, 111, 102, 102, 115, 101, 116, 49, 44, 95, > 111, 102, 102, 115, 101, 116, 50, 44, 95, 97, 110, 103, 108, 101, 44, 95, > 111, 112, 97, 99, 105, 116, 121, 44, 95, 99, 111, 108, 111, 114, 49, 44, > 46, 46, 44, 95, 99, 111, 108, 111, 114, 50, 44, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 99, 104, 101, 115, > 115, 98, 111, 97, 114, 100, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 115, 105, 122, 101, 50, 61, 115, 105, 122, 101, 49, > 39, 44, 32, 39, 111, 102, 102, 115, 101, 116, 49, 61, 111, 102, 102, 115, > 101, 116, 50, 61, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, > 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 44, 32, > 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 99, 111, 108, 111, 114, 50, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 99, 104, 101, 115, 115, 98, 111, 97, 114, 100, 32, 51, 50, > 44, 51, 50, 44, 48, 44, 48, 44, 50, 53, 44, 48, 46, 51, 44, 50, > 53, 53, 44, 49, 50, 56, 44, 48, 44, 48, 44, 49, 50, 56, 44, 50, > 53, 53, 10, 99, 104, 101, 115, 115, 98, 111, 97, 114, 100, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 36, 49, 125, 62, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, > 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 49, 125, 44, 36, 123, 55, > 61, 48, 125, 44, 36, 123, 56, 61, 50, 53, 53, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 99, 104, 101, 115, 115, > 98, 111, 97, 114, 100, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 44, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 115, 32, 40, 36, 49, > 44, 36, 50, 41, 44, 32, 111, 102, 102, 115, 101, 116, 115, 32, 40, 36, > 51, 44, 36, 52, 41, 44, 32, 97, 110, 103, 108, 101, 32, 36, 53, 32, > 100, 101, 103, 46, 44, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 54, > 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 115, 32, 40, 36, 123, 55, > 45, 45, 49, 125, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 105, 91, > 48, 93, 32, 40, 36, 123, 55, 45, 45, 49, 125, 41, 32, 45, 114, 91, > 48, 93, 32, 123, 64, 123, 48, 44, 119, 125, 47, 50, 125, 44, 49, 44, > 49, 44, 50, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, > 48, 93, 32, 99, 121, 122, 120, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 64, 35, 45, 49, 125, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 32, 116, 104, 101, 116, 97, 61, 123, 36, 53, 42, 112, 105, 47, > 49, 56, 48, 125, 10, 40, 36, 51, 44, 123, 36, 51, 43, 36, 119, 45, > 49, 125, 59, 36, 51, 44, 123, 36, 51, 43, 36, 119, 45, 49, 125, 94, > 36, 52, 44, 36, 52, 59, 123, 36, 52, 43, 36, 104, 45, 49, 125, 44, > 123, 36, 52, 43, 36, 104, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 36, 119, 44, 36, 104, 44, 49, 44, 50, 44, 51, 10, 45, 114, > 91, 45, 49, 93, 32, 123, 36, 119, 42, 36, 104, 125, 44, 50, 44, 49, > 44, 49, 44, 45, 49, 10, 45, 105, 91, 45, 50, 93, 32, 40, 123, 99, > 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 44, 123, 45, 115, 105, > 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 59, 123, 115, 105, 110, 40, > 36, 116, 104, 101, 116, 97, 41, 125, 44, 123, 99, 111, 115, 40, 36, 116, > 104, 101, 116, 97, 41, 125, 41, 32, 45, 42, 42, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 114, 91, 45, 49, 93, 32, 36, 119, 44, 36, 104, 44, > 49, 44, 50, 44, 45, 49, 10, 45, 37, 91, 45, 49, 93, 32, 123, 36, > 49, 43, 36, 50, 125, 32, 45, 62, 61, 91, 45, 49, 93, 32, 36, 49, > 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 120, 111, 114, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, > 48, 93, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 91, 45, 50, 93, 10, 45, 106, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 36, > 54, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 105, 101, > 49, 57, 51, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, > 97, 119, 32, 67, 73, 69, 45, 49, 57, 51, 49, 32, 99, 104, 114, 111, > 109, 97, 116, 105, 99, 105, 116, 121, 32, 100, 105, 97, 103, 114, 97, 109, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 53, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 32, 45, 99, 105, 101, > 49, 57, 51, 49, 10, 99, 105, 101, 49, 57, 51, 49, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 67, 73, 69, > 45, 49, 57, 51, 49, 32, 99, 104, 114, 111, 109, 97, 116, 105, 99, 105, > 116, 121, 32, 100, 105, 97, 103, 114, 97, 109, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 10, 40, 54, 55, > 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, > 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 51, > 55, 59, 51, 54, 41, 10, 40, 50, 56, 48, 44, 52, 50, 48, 44, 48, > 59, 49, 55, 49, 44, 56, 50, 57, 44, 48, 59, 49, 53, 56, 44, 56, > 50, 48, 44, 48, 59, 49, 53, 51, 44, 56, 49, 54, 44, 48, 59, 49, > 52, 55, 44, 56, 49, 49, 44, 48, 59, 49, 52, 48, 44, 56, 48, 52, > 44, 48, 59, 49, 51, 50, 44, 55, 57, 52, 44, 48, 59, 49, 50, 49, > 44, 55, 55, 54, 44, 48, 59, 49, 48, 54, 44, 55, 52, 55, 44, 48, > 59, 56, 56, 44, 55, 48, 49, 44, 48, 59, 92, 10, 54, 53, 44, 54, > 51, 51, 44, 48, 59, 52, 50, 44, 53, 51, 57, 44, 48, 59, 50, 48, > 44, 52, 50, 49, 44, 48, 59, 53, 44, 50, 57, 53, 44, 48, 59, 48, > 44, 49, 55, 57, 44, 48, 59, 52, 44, 49, 49, 53, 44, 48, 59, 49, > 48, 44, 56, 51, 44, 48, 59, 49, 54, 44, 54, 49, 44, 48, 59, 50, > 53, 44, 51, 56, 44, 48, 59, 51, 53, 44, 50, 49, 44, 48, 59, 52, > 55, 44, 49, 48, 44, 48, 59, 53, 56, 44, 51, 44, 48, 59, 92, 10, > 55, 49, 44, 48, 44, 48, 59, 57, 50, 44, 49, 44, 48, 59, 49, 49, > 49, 44, 55, 44, 48, 59, 49, 53, 49, 44, 50, 56, 44, 48, 59, 49, > 56, 57, 44, 53, 50, 44, 48, 59, 50, 50, 54, 44, 55, 57, 44, 48, > 59, 50, 54, 50, 44, 49, 48, 57, 44, 48, 59, 50, 57, 56, 44, 49, > 52, 49, 44, 48, 59, 51, 51, 52, 44, 49, 55, 53, 44, 48, 59, 51, > 55, 48, 44, 50, 48, 57, 44, 48, 59, 52, 48, 53, 44, 50, 52, 52, > 44, 48, 59, 92, 10, 52, 52, 49, 44, 50, 55, 57, 44, 48, 59, 52, > 55, 53, 44, 51, 49, 51, 44, 48, 59, 53, 48, 57, 44, 51, 52, 55, > 44, 48, 59, 55, 51, 49, 44, 53, 54, 56, 44, 48, 41, 10, 120, 77, > 61, 55, 51, 49, 32, 121, 77, 61, 56, 50, 57, 10, 50, 44, 123, 104, > 45, 49, 125, 44, 49, 44, 49, 44, 51, 44, 48, 32, 49, 44, 123, 104, > 125, 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 45, 43, 91, 45, 49, > 93, 32, 49, 32, 45, 37, 91, 45, 49, 93, 32, 123, 104, 125, 32, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 32, 49, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 120, 10, 51, 44, 123, 104, 125, 44, 49, 44, 49, > 44, 49, 54, 48, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 49, > 10, 45, 121, 91, 45, 52, 45, 45, 50, 93, 32, 45, 97, 91, 45, 53, > 45, 45, 49, 93, 32, 121, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 10, 120, 82, 61, 54, 51, 54, 32, 121, 82, 61, 53, 48, 52, 32, 120, > 71, 61, 50, 57, 55, 32, 121, 71, 61, 50, 51, 52, 32, 120, 66, 61, > 49, 52, 55, 32, 121, 66, 61, 55, 55, 52, 10, 53, 49, 50, 44, 53, > 49, 50, 44, 49, 44, 51, 32, 45, 116, 114, 105, 97, 110, 103, 108, 101, > 95, 115, 104, 97, 100, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 123, > 119, 45, 49, 125, 44, 48, 44, 48, 44, 123, 104, 45, 49, 125, 44, 34, > 34, 50, 53, 53, 44, 48, 44, 48, 44, 34, 34, 48, 44, 50, 53, 53, > 44, 48, 44, 34, 34, 48, 44, 48, 44, 50, 53, 53, 32, 45, 114, 103, > 98, 50, 115, 114, 103, 98, 91, 45, 49, 93, 10, 45, 45, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 109, 97, 120, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, > 56, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 50, 53, 53, 10, 45, 105, 91, 45, 50, 93, 32, 40, 54, > 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, > 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, > 51, 59, 49, 59, 36, 120, 82, 59, 36, 121, 82, 59, 45, 48, 46, 48, > 49, 59, 36, 120, 71, 59, 36, 121, 71, 59, 45, 48, 46, 48, 49, 59, > 36, 120, 66, 59, 36, 121, 66, 59, 45, 48, 46, 48, 49, 59, 57, 59, > 48, 59, 49, 59, 50, 59, 48, 59, 48, 59, 53, 49, 49, 59, 48, 59, > 48, 59, 53, 49, 49, 59, 45, 49, 50, 56, 59, 53, 49, 50, 59, 53, > 49, 50, 59, 51, 41, 10, 45, 121, 91, 45, 49, 93, 32, 40, 49, 41, > 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 121, 32, 45, 109, 118, > 91, 45, 49, 93, 32, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 64, 35, 45, 50, 125, 10, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, > 93, 32, 45, 102, 99, 91, 45, 49, 93, 32, 50, 53, 53, 44, 50, 53, > 53, 44, 50, 53, 53, 32, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, > 49, 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, > 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 49, 44, 48, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 45, 42, > 51, 100, 91, 48, 44, 49, 93, 32, 123, 40, 119, 45, 56, 41, 47, 36, > 120, 77, 125, 44, 123, 40, 104, 45, 51, 50, 41, 47, 36, 121, 77, 125, > 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, > 45, 49, 93, 44, 50, 44, 51, 48, 44, 48, 44, 49, 44, 50, 10, 45, > 45, 110, 101, 113, 91, 45, 51, 93, 32, 48, 32, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, > 93, 32, 45, 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, > 45, 52, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 47, 91, 45, 51, 93, 32, 49, 46, 53, 10, 45, 111, 98, 106, > 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, 50, > 44, 51, 48, 44, 48, 44, 49, 44, 50, 10, 45, 112, 51, 100, 91, 45, > 49, 93, 32, 49, 32, 45, 112, 51, 100, 91, 45, 49, 93, 32, 50, 32, > 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, > 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, > 93, 44, 50, 44, 51, 48, 44, 48, 44, 49, 44, 49, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 64, 123, 45, 50, 44, 119, 125, 44, 64, 123, 45, > 50, 44, 104, 125, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 50, 44, 51, 48, 44, 48, 44, 49, > 44, 50, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 45, 101, 114, 111, > 100, 101, 91, 45, 49, 93, 32, 52, 32, 45, 45, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 32, 45, 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, > 42, 91, 45, 51, 44, 45, 49, 93, 10, 45, 97, 91, 45, 50, 44, 45, > 49, 93, 32, 99, 32, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, > 49, 93, 32, 97, 108, 112, 104, 97, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 97, 120, 101, 115, > 91, 45, 49, 93, 32, 48, 44, 48, 46, 55, 53, 44, 48, 46, 56, 53, > 44, 48, 44, 49, 51, 44, 49, 32, 45, 45, 101, 114, 111, 100, 101, 91, > 45, 49, 93, 32, 51, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, > 45, 49, 93, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 50, 93, 10, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 52, 48, 48, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 50, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 44, > 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, > 105, 114, 99, 108, 101, 32, 58, 32, 120, 91, 37, 93, 44, 121, 91, 37, > 93, 44, 82, 91, 37, 93, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, > 95, 112, 97, 116, 116, 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, > 44, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, > 119, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, > 114, 101, 100, 32, 99, 105, 114, 99, 108, 101, 32, 111, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 32, 114, 97, 100, 105, 117, 115, > 32, 111, 102, 32, 39, 49, 48, 48, 37, 39, 32, 115, 116, 97, 110, 100, > 115, 32, 102, 111, 114, 32, 39, 115, 113, 114, 116, 40, 119, 105, 100, 116, > 104, 94, 50, 43, 104, 101, 105, 103, 104, 116, 94, 50, 41, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, > 110, 39, 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, > 116, 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, > 104, 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, > 116, 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, > 110, 32, 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 46, 32, 73, 102, 32, 97, 32, > 112, 97, 116, 116, 101, 114, 110, 32, 105, 115, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 44, 32, 116, 104, 101, 32, 99, 105, 114, 99, 108, 101, > 32, 105, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 100, 114, 97, > 119, 110, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 105, 110, 115, 116, > 101, 97, 100, 32, 111, 102, 32, 102, 105, 108, 108, 101, 100, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, 39, > 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 51, 48, 48, 32, 45, 99, 105, 114, > 99, 108, 101, 32, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, > 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 51, 48, 41, 125, 44, > 48, 46, 51, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 99, 105, 114, 99, 108, 101, 32, 53, 48, 37, 44, 53, 48, > 37, 44, 49, 48, 48, 44, 48, 46, 55, 44, 50, 53, 53, 10, 99, 105, > 114, 99, 108, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, > 61, 49, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 118, 32, 45, 32, > 40, 123, 39, 34, 36, 53, 34, 39, 125, 41, 32, 105, 115, 95, 112, 97, > 116, 116, 101, 114, 110, 61, 123, 64, 123, 45, 49, 44, 48, 45, 49, 125, > 39, 61, 61, 39, 123, 39, 48, 120, 39, 125, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 118, 32, 43, 10, 45, 105, 102, 32, 36, 105, 115, > 95, 112, 97, 116, 116, 101, 114, 110, 10, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 68, 114, 97, 119, 32, 111, 117, 116, 108, 105, 110, 101, 100, > 32, 99, 105, 114, 99, 108, 101, 32, 97, 116, 32, 40, 36, 49, 44, 36, > 50, 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, > 51, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 52, 32, 97, 110, > 100, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 54, 45, 45, 49, 125, > 41, 46, 34, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 68, 114, 97, 119, 32, 102, 105, 108, 108, 101, 100, 32, > 99, 105, 114, 99, 108, 101, 32, 97, 116, 32, 40, 36, 49, 44, 36, 50, > 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 51, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 52, 32, 97, 110, 100, > 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 53, 45, 45, 49, 125, 41, > 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, > 101, 108, 108, 105, 112, 115, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, > 44, 36, 51, 44, 48, 44, 36, 123, 52, 45, 45, 49, 125, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, 108, 105, 112, 115, > 101, 32, 58, 32, 120, 91, 37, 93, 44, 121, 91, 37, 93, 44, 82, 91, > 37, 93, 44, 114, 91, 37, 93, 44, 95, 97, 110, 103, 108, 101, 44, 95, > 111, 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, > 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, > 100, 32, 101, 108, 108, 105, 112, 115, 101, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 32, 114, 97, 100, 105, 117, 115, 32, > 111, 102, 32, 39, 49, 48, 48, 37, 39, 32, 115, 116, 97, 110, 100, 115, > 32, 102, 111, 114, 32, 39, 115, 113, 114, 116, 40, 119, 105, 100, 116, 104, > 94, 50, 43, 104, 101, 105, 103, 104, 116, 94, 50, 41, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, > 39, 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, > 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, > 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, > 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, > 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, > 32, 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 46, 32, 73, 102, 32, 97, 32, 112, > 97, 116, 116, 101, 114, 110, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 44, 32, 116, 104, 101, 32, 101, 108, 108, 105, 112, 115, 101, > 32, 105, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 100, 114, 97, > 119, 110, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 105, 110, 115, 116, > 101, 97, 100, 32, 111, 102, 32, 102, 105, 108, 108, 101, 100, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, 39, > 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 51, 48, 48, 32, 45, 101, 108, 108, > 105, 112, 115, 101, 32, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, > 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 51, 48, 41, 125, > 44, 123, 63, 40, 51, 48, 41, 125, 44, 123, 63, 40, 49, 56, 48, 41, > 125, 44, 48, 46, 51, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, > 111, 110, 101, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, 48, 37, > 44, 53, 48, 37, 44, 49, 48, 48, 44, 49, 48, 48, 44, 48, 44, 48, > 46, 55, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 102, 108, > 111, 111, 100, 32, 58, 32, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, > 44, 95, 122, 91, 37, 93, 44, 95, 116, 111, 108, 101, 114, 97, 110, 99, > 101, 62, 61, 48, 44, 95, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, > 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 99, > 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 70, 108, 111, 111, 100, 45, 102, 105, > 108, 108, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 117, 115, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 118, 97, 108, 117, 101, 32, 97, 110, 100, 32, 116, 111, 108, > 101, 114, 97, 110, 99, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 121, 61, 122, 61, 48, 39, 44, 32, 39, 116, 111, 108, 101, 114, > 97, 110, 99, 101, 61, 48, 39, 44, 32, 39, 105, 115, 95, 104, 105, 103, > 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 48, > 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 48, 48, > 32, 45, 102, 108, 111, 111, 100, 32, 123, 63, 40, 49, 48, 48, 41, 125, > 37, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 48, 44, 50, 48, > 44, 48, 44, 49, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, > 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 103, 97, 117, 115, 115, 105, > 97, 110, 32, 58, 32, 95, 115, 105, 103, 109, 97, 49, 91, 37, 93, 44, > 95, 115, 105, 103, 109, 97, 50, 91, 37, 93, 44, 95, 97, 110, 103, 108, > 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, > 97, 32, 99, 101, 110, 116, 101, 114, 101, 100, 32, 103, 97, 117, 115, 115, > 105, 97, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, > 100, 101, 118, 105, 97, 116, 105, 111, 110, 115, 32, 97, 110, 100, 32, 111, > 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 115, 105, 103, 109, 97, 49, 61, 51, 39, 44, > 32, 39, 115, 105, 103, 109, 97, 50, 61, 115, 105, 103, 109, 97, 49, 39, > 32, 97, 110, 100, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, > 48, 48, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 32, 49, 48, 48, > 44, 51, 48, 44, 52, 53, 10, 103, 97, 117, 115, 115, 105, 97, 110, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 125, 44, 36, > 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 99, 101, 110, 116, > 101, 114, 101, 100, 32, 103, 97, 117, 115, 115, 105, 97, 110, 32, 111, 110, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 115, 116, > 97, 110, 100, 97, 114, 100, 32, 100, 101, 118, 105, 97, 116, 105, 111, 110, > 115, 32, 40, 36, 49, 44, 36, 50, 41, 32, 97, 110, 100, 32, 97, 110, > 103, 108, 101, 32, 36, 51, 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, > 45, 10, 117, 61, 123, 99, 111, 115, 40, 36, 51, 42, 112, 105, 47, 49, > 56, 48, 41, 125, 10, 118, 61, 123, 115, 105, 110, 40, 36, 51, 42, 112, > 105, 47, 49, 56, 48, 41, 125, 10, 100, 109, 97, 120, 61, 123, 109, 97, > 120, 40, 119, 44, 104, 41, 125, 10, 45, 105, 102, 32, 123, 105, 115, 118, > 97, 108, 40, 36, 49, 41, 125, 32, 108, 49, 61, 36, 49, 32, 45, 101, > 108, 115, 101, 32, 108, 49, 61, 123, 36, 123, 49, 125, 49, 48, 48, 48, > 48, 42, 36, 100, 109, 97, 120, 47, 49, 48, 48, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 105, 115, 118, 97, 108, 40, 36, > 50, 41, 125, 32, 108, 50, 61, 36, 50, 32, 45, 101, 108, 115, 101, 32, > 108, 50, 61, 123, 36, 123, 50, 125, 49, 48, 48, 48, 48, 42, 36, 100, > 109, 97, 120, 47, 49, 48, 48, 125, 32, 45, 101, 110, 100, 105, 102, 10, > 108, 49, 61, 123, 49, 47, 40, 50, 42, 109, 97, 120, 40, 49, 47, 51, > 44, 36, 108, 49, 41, 94, 50, 41, 125, 10, 108, 50, 61, 123, 49, 47, > 40, 50, 42, 109, 97, 120, 40, 49, 47, 51, 44, 36, 108, 50, 41, 94, > 50, 41, 125, 10, 65, 61, 123, 36, 108, 49, 42, 36, 117, 42, 36, 117, > 43, 36, 108, 50, 42, 36, 118, 42, 36, 118, 125, 10, 66, 61, 123, 40, > 36, 108, 49, 45, 36, 108, 50, 41, 42, 36, 117, 42, 36, 118, 125, 10, > 67, 61, 123, 36, 108, 49, 42, 36, 118, 42, 36, 118, 43, 36, 108, 50, > 42, 36, 117, 42, 36, 117, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, > 44, 110, 125, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, > 100, 115, 61, 123, 100, 125, 44, 123, 115, 125, 32, 45, 114, 109, 10, 40, > 123, 45, 36, 119, 47, 50, 125, 44, 123, 36, 119, 47, 50, 125, 41, 32, > 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 44, 51, 10, 45, > 102, 91, 45, 49, 93, 32, 34, 89, 61, 121, 45, 34, 123, 36, 104, 47, > 50, 125, 59, 36, 65, 34, 42, 105, 42, 105, 43, 50, 42, 34, 36, 66, > 34, 42, 105, 42, 89, 43, 34, 36, 67, 42, 34, 89, 42, 89, 34, 10, > 45, 42, 32, 45, 49, 32, 45, 101, 120, 112, 32, 45, 114, 32, 36, 119, > 44, 36, 104, 44, 36, 100, 115, 10, 45, 110, 109, 32, 36, 110, 109, 44, > 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 103, 114, 97, 112, 104, 32, > 58, 32, 91, 102, 117, 110, 99, 116, 105, 111, 110, 95, 105, 109, 97, 103, > 101, 93, 44, 95, 112, 108, 111, 116, 95, 116, 121, 112, 101, 44, 95, 118, > 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, 44, 95, 121, 109, 105, 110, > 44, 95, 121, 109, 97, 120, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, > 95, 112, 97, 116, 116, 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, > 44, 46, 46, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 44, > 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 62, 61, 48, 44, 95, > 112, 108, 111, 116, 95, 116, 121, 112, 101, 44, 95, 118, 101, 114, 116, 101, > 120, 95, 116, 121, 112, 101, 44, 95, 120, 109, 105, 110, 44, 120, 109, 97, > 120, 44, 95, 121, 109, 105, 110, 44, 95, 121, 109, 97, 120, 44, 95, 111, > 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, 44, > 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, > 110, 32, 103, 114, 97, 112, 104, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 112, 108, 111, 116, 95, 116, 121, 112, 101, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, > 32, 124, 32, 49, 61, 108, 105, 110, 101, 115, 32, 124, 32, 50, 61, 115, > 112, 108, 105, 110, 101, 115, 32, 124, 32, 51, 61, 98, 97, 114, 32, 125, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 118, 101, 114, 116, > 101, 120, 95, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 112, 111, 105, > 110, 116, 115, 32, 124, 32, 50, 44, 51, 61, 99, 114, 111, 115, 115, 101, > 115, 32, 124, 32, 52, 44, 53, 61, 99, 105, 114, 99, 108, 101, 115, 32, > 124, 32, 54, 44, 55, 61, 115, 113, 117, 97, 114, 101, 115, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, > 114, 110, 39, 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, > 99, 105, 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, > 114, 116, 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, > 119, 104, 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, > 116, 116, 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, > 101, 110, 32, 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 112, 108, 111, 116, 95, 116, 121, 112, 101, 61, > 49, 39, 44, 32, 39, 118, 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, > 61, 49, 39, 44, 32, 39, 121, 109, 105, 110, 61, 121, 109, 97, 120, 61, > 48, 32, 40, 97, 117, 116, 111, 41, 39, 44, 32, 39, 111, 112, 97, 99, > 105, 116, 121, 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, > 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, > 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 111, > 119, 115, 32, 53, 48, 37, 32, 45, 98, 108, 117, 114, 91, 45, 49, 93, > 32, 51, 32, 45, 115, 112, 108, 105, 116, 91, 45, 49, 93, 32, 99, 32, > 45, 100, 105, 118, 91, 48, 93, 32, 49, 46, 53, 32, 45, 103, 114, 97, > 112, 104, 91, 48, 93, 32, 91, 49, 93, 44, 50, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 50, 53, 53, 44, 48, 44, 48, 32, 45, 103, 114, 97, > 112, 104, 91, 48, 93, 32, 91, 50, 93, 44, 50, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 32, 45, 103, 114, 97, > 112, 104, 91, 48, 93, 32, 91, 51, 93, 44, 50, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 48, 44, 48, 44, 50, 53, 53, 32, 45, 107, 101, 101, > 112, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, 32, 103, 114, 105, 100, > 32, 58, 32, 115, 105, 122, 101, 95, 120, 91, 37, 93, 62, 61, 48, 44, > 115, 105, 122, 101, 95, 121, 91, 37, 93, 62, 61, 48, 44, 95, 111, 102, > 102, 115, 101, 116, 95, 120, 91, 37, 93, 44, 95, 111, 102, 102, 115, 101, > 116, 95, 121, 91, 37, 93, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, > 95, 112, 97, 116, 116, 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, > 44, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, > 119, 32, 120, 121, 45, 103, 114, 105, 100, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, > 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, > 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, > 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, > 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 111, 102, 102, 115, 101, 116, 95, 120, 61, 111, 102, 102, 115, > 101, 116, 95, 121, 61, 48, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, > 121, 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, > 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, > 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 103, 114, 105, 100, 32, 49, 48, 37, 44, 49, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, > 51, 44, 50, 53, 53, 32, 45, 103, 114, 105, 100, 32, 49, 48, 37, 44, > 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, > 67, 67, 67, 67, 67, 67, 44, 49, 50, 56, 44, 51, 50, 44, 49, 54, > 10, 103, 114, 105, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 50, 62, 61, 48, 34, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, > 61, 48, 125, 44, 36, 123, 53, 61, 49, 125, 44, 36, 123, 54, 61, 48, > 125, 10, 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 54, 34, 39, 125, > 41, 32, 105, 115, 95, 112, 97, 116, 116, 101, 114, 110, 61, 123, 64, 123, > 45, 49, 44, 48, 45, 49, 125, 39, 61, 61, 39, 123, 39, 48, 120, 39, > 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, > 45, 105, 102, 32, 36, 105, 115, 95, 112, 97, 116, 116, 101, 114, 110, 10, > 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 68, 114, 97, 119, 32, 120, > 121, 45, 103, 114, 105, 100, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 115, 32, 40, 36, > 49, 44, 36, 50, 41, 44, 32, 111, 102, 102, 115, 101, 116, 115, 32, 40, > 36, 51, 44, 36, 52, 41, 44, 32, 111, 112, 97, 99, 105, 116, 121, 32, > 36, 53, 44, 32, 112, 97, 116, 116, 101, 114, 110, 32, 36, 54, 32, 97, > 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 55, 45, 45, 49, > 125, 41, 46, 34, 10, 45, 118, 32, 45, 32, 112, 97, 116, 116, 101, 114, > 110, 61, 36, 54, 32, 99, 111, 108, 111, 114, 61, 36, 123, 55, 45, 45, > 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 68, 114, 97, 119, 32, 120, 121, 45, 103, 114, 105, 100, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 115, 105, 122, 101, 115, 32, 40, 36, 49, 44, 36, 50, 41, 44, 32, > 111, 102, 102, 115, 101, 116, 115, 32, 40, 36, 51, 44, 36, 52, 41, 44, > 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 53, 44, 32, 97, 110, 100, > 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 54, 45, 45, 49, 125, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 112, 97, 116, 116, 101, 114, 110, 61, > 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 32, 99, 111, 108, 111, 114, > 61, 36, 123, 54, 45, 45, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 115, 120, 61, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 32, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 115, 121, 61, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 10, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 111, 120, 61, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, 125, 32, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 111, 121, 61, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 52, 125, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 115, 61, > 123, 115, 125, 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 36, 105, 115, > 95, 112, 101, 114, 99, 101, 110, 116, 115, 120, 44, 109, 97, 120, 40, 49, > 44, 119, 42, 36, 49, 41, 44, 36, 49, 41, 125, 10, 45, 105, 102, 32, > 123, 36, 115, 105, 122, 101, 62, 61, 49, 125, 10, 111, 102, 102, 115, 101, > 116, 61, 123, 105, 102, 40, 36, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 111, 120, 44, 36, 115, 105, 122, 101, 42, 36, 51, 44, 36, 51, 41, > 125, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, > 43, 91, 45, 49, 93, 32, 48, 46, 53, 10, 49, 44, 123, 49, 43, 105, > 110, 116, 40, 36, 119, 47, 36, 115, 105, 122, 101, 41, 125, 44, 49, 44, > 49, 44, 39, 121, 39, 32, 45, 42, 91, 45, 49, 93, 32, 36, 115, 105, > 122, 101, 32, 45, 43, 91, 45, 49, 93, 32, 123, 36, 111, 102, 102, 115, > 101, 116, 37, 36, 115, 105, 122, 101, 125, 10, 49, 44, 123, 104, 125, 44, > 49, 44, 49, 44, 123, 36, 104, 47, 50, 125, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, > 50, 32, 110, 61, 123, 104, 125, 32, 45, 105, 91, 45, 50, 93, 32, 40, > 36, 110, 59, 36, 110, 41, 10, 40, 49, 44, 48, 59, 49, 44, 123, 36, > 110, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 50, 44, 36, > 110, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 49, 93, 10, 40, 45, 49, 50, 56, 59, 49, 59, 36, 104, 59, 36, 115, > 41, 32, 49, 44, 36, 104, 44, 49, 44, 36, 115, 32, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, > 44, 49, 44, 36, 112, 97, 116, 116, 101, 114, 110, 44, 36, 99, 111, 108, > 111, 114, 10, 45, 105, 102, 32, 123, 36, 110, 62, 49, 125, 32, 49, 44, > 123, 52, 42, 40, 36, 110, 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, > 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 40, 45, 49, 50, 56, 59, 49, 59, 36, 104, 59, 49, 41, 32, 49, > 44, 36, 104, 44, 49, 44, 49, 32, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 44, 36, > 112, 97, 116, 116, 101, 114, 110, 44, 49, 10, 45, 105, 102, 32, 123, 36, > 110, 62, 49, 125, 32, 49, 44, 123, 52, 42, 40, 36, 110, 45, 49, 41, > 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, 44, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 121, 91, 94, 48, 93, 32, 45, > 97, 91, 94, 48, 93, 32, 121, 32, 45, 111, 98, 106, 101, 99, 116, 51, > 100, 91, 48, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 36, > 53, 44, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 36, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 115, 121, 44, 109, 97, 120, > 40, 49, 44, 104, 42, 36, 50, 41, 44, 36, 50, 41, 125, 10, 45, 105, > 102, 32, 123, 36, 115, 105, 122, 101, 62, 61, 49, 125, 10, 111, 102, 102, > 115, 101, 116, 61, 123, 105, 102, 40, 36, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 111, 121, 44, 36, 115, 105, 122, 101, 42, 36, 52, 44, 36, > 52, 41, 125, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, > 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 53, 10, 49, 44, 123, 49, > 43, 105, 110, 116, 40, 36, 104, 47, 36, 115, 105, 122, 101, 41, 125, 44, > 49, 44, 49, 44, 39, 121, 39, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 115, 105, 122, 101, 32, 45, 43, 91, 45, 49, 93, 32, 123, 36, 111, 102, > 102, 115, 101, 116, 37, 36, 115, 105, 122, 101, 125, 10, 45, 105, 91, 45, > 50, 93, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 123, 36, 119, > 47, 50, 125, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, > 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 110, 61, 123, 104, 125, > 32, 45, 105, 91, 45, 50, 93, 32, 40, 36, 110, 59, 36, 110, 41, 10, > 40, 49, 44, 48, 59, 49, 44, 123, 36, 110, 45, 49, 125, 41, 32, 45, > 114, 91, 45, 49, 93, 32, 50, 44, 36, 110, 44, 49, 44, 49, 44, 51, > 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 10, 40, 45, 49, 50, > 56, 59, 36, 119, 59, 49, 59, 36, 115, 41, 32, 36, 119, 44, 49, 44, > 49, 44, 36, 115, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, > 44, 48, 44, 49, 48, 48, 37, 44, 48, 44, 49, 44, 36, 112, 97, 116, > 116, 101, 114, 110, 44, 36, 99, 111, 108, 111, 114, 10, 45, 105, 102, 32, > 123, 36, 110, 62, 49, 125, 32, 49, 44, 123, 52, 42, 40, 36, 110, 45, > 49, 41, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, > 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 40, 45, 49, 50, 56, 59, > 36, 119, 59, 49, 59, 49, 41, 32, 36, 119, 44, 49, 44, 49, 44, 49, > 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, > 48, 48, 37, 44, 48, 44, 49, 44, 36, 112, 97, 116, 116, 101, 114, 110, > 44, 49, 10, 45, 105, 102, 32, 123, 36, 110, 62, 49, 125, 32, 49, 44, > 123, 52, 42, 40, 36, 110, 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, > 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 121, 91, 94, 48, 93, 32, 45, 97, 91, 94, 48, 93, 32, 121, > 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 36, 53, 44, 48, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 106, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 105, 109, 97, 103, 101, 39, 46, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 97, 103, > 101, 32, 58, 32, 91, 115, 112, 114, 105, 116, 101, 93, 44, 95, 120, 91, > 37, 93, 44, 95, 121, 91, 37, 93, 44, 95, 122, 91, 37, 93, 44, 95, > 99, 91, 37, 93, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 91, > 115, 112, 114, 105, 116, 101, 95, 109, 97, 115, 107, 93, 44, 95, 109, 97, > 120, 95, 111, 112, 97, 99, 105, 116, 121, 95, 109, 97, 115, 107, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, > 97, 119, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 112, 114, > 105, 116, 101, 32, 105, 109, 97, 103, 101, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 106, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 120, 61, 121, 61, 122, 61, 99, 61, 48, 39, 44, 32, 39, 111, 112, 97, > 99, 105, 116, 121, 61, 49, 39, 44, 32, 39, 115, 112, 114, 105, 116, 101, > 95, 109, 97, 115, 107, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, > 41, 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 95, 111, 112, 97, 99, > 105, 116, 121, 95, 109, 97, 115, 107, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 99, 114, 111, 112, 32, 52, 48, 37, 44, 52, 48, 37, > 44, 54, 48, 37, 44, 54, 48, 37, 32, 45, 114, 101, 115, 105, 122, 101, > 91, 45, 49, 93, 32, 50, 48, 48, 37, 44, 50, 48, 48, 37, 44, 49, > 44, 51, 44, 53, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, > 50, 44, 50, 44, 48, 32, 45, 105, 109, 97, 103, 101, 91, 48, 93, 32, > 91, 45, 49, 93, 44, 51, 48, 37, 44, 51, 48, 37, 32, 45, 107, 101, > 101, 112, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, 110, > 101, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, 48, 91, 37, 93, 44, > 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, 44, 95, 99, > 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, 108, > 105, 110, 101, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, 32, 105, 115, 32, 97, 110, > 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 110, 117, 109, > 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, 116, > 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, 99, 104, 32, 99, 97, 110, > 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, 100, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, 105, 102, 32, 97, 32, 99, > 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, > 99, 105, 116, 121, 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, > 110, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, > 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, 48, 48, 32, > 45, 108, 105, 110, 101, 32, 53, 48, 37, 44, 53, 48, 37, 44, 123, 63, > 40, 119, 41, 125, 44, 123, 63, 40, 104, 41, 125, 44, 48, 46, 53, 44, > 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 108, > 105, 110, 101, 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, > 53, 53, 32, 45, 108, 105, 110, 101, 32, 49, 48, 48, 37, 44, 48, 44, > 48, 44, 49, 48, 48, 37, 44, 49, 44, 48, 120, 67, 67, 67, 67, 67, > 67, 67, 67, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 58, 32, 122, 48, 114, 44, > 122, 48, 105, 44, 122, 49, 114, 44, 122, 49, 105, 44, 95, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 95, 109, 97, 120, 62, 61, 48, 44, 95, 105, > 115, 95, 106, 117, 108, 105, 97, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 44, 95, 99, 48, 114, 44, 95, 99, 48, 105, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 114, 97, 119, 32, 109, 97, 110, 100, 101, 108, 98, > 114, 111, 116, 47, 106, 117, 108, 105, 97, 32, 102, 114, 97, 99, 116, 97, > 108, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 95, 109, 97, 120, 61, 49, 48, > 48, 39, 44, 32, 39, 105, 115, 95, 106, 117, 108, 105, 97, 61, 48, 39, > 44, 32, 39, 99, 48, 114, 61, 99, 48, 105, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, > 48, 32, 45, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 45, 50, > 46, 53, 44, 45, 50, 44, 50, 44, 50, 44, 49, 48, 50, 52, 32, 45, > 109, 97, 112, 32, 48, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, 45, > 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 91, 45, 49, 93, 32, > 45, 48, 46, 50, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 114, 98, > 108, 101, 32, 58, 32, 95, 105, 109, 97, 103, 101, 95, 119, 101, 105, 103, > 104, 116, 44, 95, 112, 97, 116, 116, 101, 114, 110, 95, 119, 101, 105, 103, > 104, 116, 44, 95, 97, 110, 103, 108, 101, 44, 95, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 44, 95, 115, 104, 97, 114, 112, 110, 101, 115, 115, 62, > 61, 48, 44, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 62, 61, > 48, 44, 95, 97, 108, 112, 104, 97, 44, 95, 115, 105, 103, 109, 97, 44, > 95, 99, 117, 116, 95, 108, 111, 119, 62, 61, 48, 44, 95, 99, 117, 116, > 95, 104, 105, 103, 104, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 82, 101, 110, 100, 101, 114, 32, 109, 97, 114, 98, 108, 101, 32, > 108, 105, 107, 101, 32, 112, 97, 116, 116, 101, 114, 110, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 109, 97, 103, 101, > 95, 119, 101, 105, 103, 104, 116, 61, 48, 46, 50, 39, 44, 32, 39, 112, > 97, 116, 116, 101, 114, 110, 95, 119, 101, 105, 103, 104, 116, 61, 48, 46, > 49, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 52, 53, 39, 44, 32, > 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 48, 39, 44, 32, 39, > 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, 48, 46, 52, 39, 44, 32, > 39, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 61, 48, 46, 56, 39, > 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, 108, 112, 104, > 97, 61, 48, 46, 54, 39, 44, 32, 39, 115, 105, 103, 109, 97, 61, 49, > 46, 49, 39, 32, 97, 110, 100, 32, 39, 99, 117, 116, 95, 108, 111, 119, > 61, 99, 117, 116, 95, 104, 105, 103, 104, 61, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 109, 97, 114, 98, 108, 101, 32, 44, 10, 109, 97, > 114, 98, 108, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 48, 46, 50, 125, 44, 36, 123, 50, 61, 48, 46, 49, 125, 44, 36, > 123, 51, 61, 52, 53, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, > 53, 61, 48, 46, 52, 125, 44, 36, 123, 54, 61, 48, 46, 56, 125, 44, > 36, 123, 55, 61, 48, 46, 54, 125, 44, 36, 123, 56, 61, 49, 46, 49, > 125, 44, 36, 123, 57, 61, 48, 37, 125, 44, 36, 123, 49, 48, 61, 49, > 48, 48, 37, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, > 110, 100, 101, 114, 32, 109, 97, 114, 98, 108, 101, 32, 108, 105, 107, 101, > 32, 112, 97, 116, 116, 101, 114, 110, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 105, 109, 97, 103, 101, 32, > 119, 101, 105, 103, 104, 116, 32, 36, 49, 44, 32, 112, 97, 116, 116, 101, > 114, 110, 32, 119, 101, 105, 103, 104, 116, 32, 36, 50, 44, 32, 97, 110, > 103, 108, 101, 32, 36, 51, 32, 100, 101, 103, 46, 44, 32, 97, 109, 112, > 108, 105, 116, 117, 100, 101, 32, 36, 52, 44, 32, 34, 92, 10, 34, 115, > 104, 97, 114, 112, 110, 101, 115, 115, 32, 36, 53, 44, 32, 97, 110, 105, > 115, 111, 116, 114, 111, 112, 121, 32, 36, 54, 44, 32, 97, 108, 112, 104, > 97, 32, 36, 55, 44, 32, 115, 105, 103, 109, 97, 32, 36, 56, 44, 32, > 97, 110, 100, 32, 99, 117, 116, 32, 40, 36, 57, 44, 36, 49, 48, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 115, 120, 61, 123, 36, 50, 42, 115, > 105, 110, 40, 36, 51, 42, 112, 105, 47, 49, 56, 48, 41, 125, 32, 115, > 121, 61, 123, 36, 50, 42, 99, 111, 115, 40, 36, 51, 42, 112, 105, 47, > 49, 56, 48, 41, 125, 32, 45, 102, 32, 115, 105, 110, 40, 120, 42, 36, > 115, 120, 43, 121, 42, 36, 115, 121, 43, 105, 42, 36, 49, 41, 10, 45, > 105, 102, 32, 123, 36, 52, 125, 32, 45, 115, 109, 111, 111, 116, 104, 32, > 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 99, 32, 36, 57, 44, 36, 49, 48, 32, > 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 97, 122, 101, 32, 58, 32, 95, 119, 105, 100, > 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, > 99, 101, 108, 108, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 109, 97, 122, 101, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, > 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 109, 97, 122, 101, 32, 51, 48, 44, 50, 48, 32, 45, 110, 101, 103, > 97, 116, 105, 118, 101, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 32, 48, 44, 50, 53, 53, 10, 109, 97, 122, 101, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, > 49, 53, 125, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, 38, 38, 32, > 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 36, 49, 125, 41, 32, 38, > 38, 32, 36, 50, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, > 36, 123, 51, 61, 50, 52, 125, 41, 32, 38, 38, 32, 36, 51, 62, 48, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, > 32, 36, 49, 120, 36, 50, 32, 109, 97, 122, 101, 46, 34, 10, 45, 118, > 32, 45, 10, 40, 123, 114, 111, 117, 110, 100, 40, 63, 40, 36, 49, 45, > 49, 41, 41, 125, 44, 123, 114, 111, 117, 110, 100, 40, 63, 40, 36, 50, > 45, 49, 41, 41, 125, 41, 10, 36, 49, 44, 36, 50, 44, 49, 44, 49, > 44, 49, 53, 32, 45, 45, 102, 91, 45, 49, 93, 32, 48, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 95, 103, 101, 110, 101, > 114, 97, 116, 101, 95, 109, 97, 122, 101, 32, 36, 49, 44, 36, 50, 10, > 45, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 122, 101, 91, 45, 49, > 93, 32, 36, 51, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 109, 97, > 122, 101, 93, 10, 45, 118, 32, 43, 10, 95, 103, 101, 110, 101, 114, 97, > 116, 101, 95, 109, 97, 122, 101, 32, 58, 10, 45, 100, 111, 10, 120, 61, > 64, 123, 45, 50, 44, 45, 50, 125, 32, 121, 61, 64, 123, 45, 50, 44, > 45, 49, 125, 10, 45, 61, 91, 45, 49, 93, 32, 49, 44, 36, 120, 44, > 36, 121, 44, 48, 44, 49, 10, 105, 115, 95, 99, 97, 110, 100, 105, 100, > 97, 116, 101, 61, 48, 10, 117, 112, 61, 45, 49, 32, 45, 105, 102, 32, > 123, 105, 40, 36, 120, 44, 36, 121, 41, 38, 56, 34, 32, 38, 38, 32, > 34, 36, 121, 62, 48, 34, 32, 38, 38, 32, 34, 33, 105, 40, 36, 120, > 44, 36, 121, 45, 49, 44, 48, 44, 49, 41, 125, 32, 117, 112, 61, 36, > 120, 44, 123, 36, 121, 45, 49, 125, 44, 56, 32, 105, 115, 95, 99, 97, > 110, 100, 105, 100, 97, 116, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 100, 111, 119, 110, 61, 45, 49, 32, 45, 105, 102, 32, 123, 105, 40, > 36, 120, 44, 36, 121, 41, 38, 52, 34, 32, 38, 38, 32, 34, 36, 121, > 60, 36, 50, 45, 49, 34, 32, 38, 38, 32, 34, 33, 105, 40, 36, 120, > 44, 36, 121, 43, 49, 44, 48, 44, 49, 41, 125, 32, 100, 111, 119, 110, > 61, 36, 120, 44, 123, 36, 121, 43, 49, 125, 44, 52, 32, 105, 115, 95, > 99, 97, 110, 100, 105, 100, 97, 116, 101, 61, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 108, 101, 102, 116, 61, 45, 49, 32, 45, 105, 102, 32, 123, > 105, 40, 36, 120, 44, 36, 121, 41, 38, 50, 34, 32, 38, 38, 32, 34, > 36, 120, 62, 48, 34, 32, 38, 38, 32, 34, 33, 105, 40, 36, 120, 45, > 49, 44, 36, 121, 44, 48, 44, 49, 41, 125, 32, 108, 101, 102, 116, 61, > 123, 36, 120, 45, 49, 125, 44, 36, 121, 44, 50, 32, 105, 115, 95, 99, > 97, 110, 100, 105, 100, 97, 116, 101, 61, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 114, 105, 103, 104, 116, 61, 45, 49, 32, 45, 105, 102, 32, 123, > 105, 40, 36, 120, 44, 36, 121, 41, 38, 49, 34, 32, 38, 38, 32, 34, > 36, 120, 60, 36, 49, 45, 49, 34, 32, 38, 38, 32, 34, 33, 105, 40, > 36, 120, 43, 49, 44, 36, 121, 44, 48, 44, 49, 41, 125, 32, 114, 105, > 103, 104, 116, 61, 123, 36, 120, 43, 49, 125, 44, 36, 121, 44, 49, 32, > 105, 115, 95, 99, 97, 110, 100, 105, 100, 97, 116, 101, 61, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 105, 115, 95, 99, 97, > 110, 100, 105, 100, 97, 116, 101, 10, 40, 36, 117, 112, 44, 36, 100, 111, > 119, 110, 44, 36, 108, 101, 102, 116, 44, 36, 114, 105, 103, 104, 116, 41, > 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 49, 93, 32, 45, 49, > 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 47, 51, 125, 44, > 49, 44, 49, 44, 45, 49, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, > 93, 32, 48, 44, 123, 63, 40, 52, 41, 125, 44, 48, 44, 48, 44, 50, > 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 45, 50, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 105, 115, 95, 99, 97, 110, 100, 105, 100, 97, > 116, 101, 10, 45, 105, 102, 32, 123, 64, 123, 45, 50, 44, 45, 49, 125, > 61, 61, 56, 125, 32, 32, 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, > 40, 36, 120, 44, 36, 121, 41, 38, 55, 125, 44, 36, 120, 44, 36, 121, > 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, 120, 44, 36, 121, > 45, 49, 41, 38, 49, 49, 125, 44, 36, 120, 44, 123, 36, 121, 45, 49, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 45, 50, 44, 45, 49, > 125, 61, 61, 52, 125, 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, > 36, 120, 44, 36, 121, 41, 38, 49, 49, 125, 44, 36, 120, 44, 36, 121, > 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, 120, 44, 36, 121, > 43, 49, 41, 38, 55, 125, 44, 36, 120, 44, 123, 36, 121, 43, 49, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 45, 50, 44, 45, 49, 125, > 61, 61, 50, 125, 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, > 120, 44, 36, 121, 41, 38, 49, 51, 125, 44, 36, 120, 44, 36, 121, 32, > 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, 120, 45, 49, 44, 36, > 121, 41, 38, 49, 52, 125, 44, 123, 36, 120, 45, 49, 125, 44, 36, 121, > 10, 45, 101, 108, 115, 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, > 120, 44, 36, 121, 41, 38, 49, 52, 125, 44, 36, 120, 44, 36, 121, 32, > 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, 120, 43, 49, 44, 36, > 121, 41, 38, 49, 51, 125, 44, 123, 36, 120, 43, 49, 125, 44, 36, 121, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 122, 91, 45, 50, 93, 32, 48, > 44, 49, 32, 45, 97, 91, 45, 51, 44, 45, 50, 93, 32, 121, 10, 45, > 101, 108, 115, 101, 10, 45, 105, 102, 32, 123, 64, 123, 45, 50, 44, 104, > 125, 61, 61, 49, 125, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 111, 119, 115, 91, 45, 50, 93, 32, 48, 44, > 123, 64, 123, 45, 50, 44, 104, 125, 45, 50, 125, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 49, 10, 45, 114, 109, 91, > 45, 50, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 48, 10, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 122, 101, > 32, 58, 10, 45, 105, 91, 48, 93, 32, 36, 49, 44, 36, 49, 32, 45, > 105, 91, 49, 93, 32, 91, 48, 93, 120, 49, 53, 10, 45, 108, 105, 110, > 101, 91, 56, 45, 49, 53, 93, 32, 48, 44, 48, 44, 49, 48, 48, 37, > 44, 48, 44, 49, 44, 49, 10, 45, 108, 105, 110, 101, 91, 52, 45, 55, > 44, 49, 50, 45, 49, 53, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 10, 45, 108, 105, > 110, 101, 91, 50, 45, 51, 44, 54, 45, 55, 44, 49, 48, 45, 49, 49, > 44, 49, 52, 45, 49, 53, 93, 32, 48, 44, 48, 44, 48, 44, 49, 48, > 48, 37, 44, 49, 44, 49, 10, 45, 108, 105, 110, 101, 91, 49, 45, 49, > 53, 58, 50, 93, 32, 49, 48, 48, 37, 44, 48, 44, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 10, 45, 97, 91, 48, 45, 49, > 53, 93, 32, 120, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 36, > 49, 125, 44, 123, 104, 42, 36, 49, 125, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 49, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 48, 44, 49, 10, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, > 120, 32, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 121, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 50, 44, 48, > 44, 50, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 119, 97, > 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, > 32, 109, 97, 122, 101, 95, 109, 97, 115, 107, 32, 58, 32, 95, 99, 101, > 108, 108, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 110, 112, 117, 116, 32, 109, 97, 122, 101, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 115, 105, 122, 101, 32, 97, > 110, 100, 32, 115, 104, 97, 112, 101, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 109, 97, 115, 107, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 77, 97, 115, 107, 32, > 109, 97, 121, 32, 99, 111, 110, 116, 97, 105, 110, 32, 100, 105, 115, 99, > 111, 110, 110, 101, 99, 116, 101, 100, 32, 115, 104, 97, 112, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 48, 32, 45, 116, > 101, 120, 116, 32, 34, 71, 39, 77, 73, 67, 34, 44, 48, 44, 48, 44, > 53, 51, 44, 49, 44, 49, 32, 45, 100, 105, 108, 97, 116, 101, 32, 51, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 48, 32, 45, 102, 114, > 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 109, 97, 122, 101, 95, > 109, 97, 115, 107, 32, 56, 32, 45, 100, 105, 108, 97, 116, 101, 32, 51, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 42, 32, 50, 53, > 53, 10, 109, 97, 122, 101, 95, 109, 97, 115, 107, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, > 50, 52, 125, 41, 32, 38, 38, 32, 36, 49, 62, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 109, 97, 115, > 107, 101, 100, 32, 109, 97, 122, 101, 32, 102, 114, 111, 109, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 99, 101, 108, 108, 32, > 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 110, 111, 114, 109, 32, 45, 103, 101, 32, 53, 48, 37, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, > 100, 111, 10, 45, 45, 114, 97, 110, 100, 91, 48, 93, 32, 48, 44, 49, > 32, 45, 42, 91, 45, 49, 93, 32, 91, 48, 93, 32, 40, 123, 120, 77, > 125, 44, 123, 121, 77, 125, 41, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 45, 102, 108, 111, 111, 100, 91, 48, 93, 32, 64, 45, 49, 44, 48, > 44, 48, 44, 48, 44, 49, 44, 50, 32, 45, 103, 101, 91, 45, 49, 93, > 32, 50, 32, 45, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, > 93, 32, 45, 42, 91, 45, 50, 93, 32, 49, 53, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 10, 45, 102, 108, 111, 111, 100, 91, 48, > 93, 32, 64, 45, 50, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 10, > 45, 95, 103, 101, 110, 101, 114, 97, 116, 101, 95, 109, 97, 122, 101, 32, > 123, 119, 125, 44, 123, 104, 125, 10, 45, 119, 104, 105, 108, 101, 32, 64, > 123, 48, 44, 77, 125, 10, 45, 114, 109, 91, 48, 93, 32, 45, 43, 32, > 45, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 122, 101, 91, 45, 49, > 93, 32, 36, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 109, 97, > 122, 101, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 98, 106, 101, > 99, 116, 51, 100, 32, 58, 32, 91, 111, 98, 106, 101, 99, 116, 51, 100, > 93, 44, 95, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, 44, 95, 122, > 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 114, 101, 110, 100, 101, > 114, 105, 110, 103, 95, 109, 111, 100, 101, 44, 95, 105, 115, 95, 100, 111, > 117, 98, 108, 101, 95, 115, 105, 100, 101, 100, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 44, 95, 105, 115, 95, 122, 98, 117, 102, 102, 101, 114, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 102, 111, 99, 97, > 108, 101, 44, 95, 108, 105, 103, 104, 116, 95, 120, 44, 95, 108, 105, 103, > 104, 116, 95, 121, 44, 95, 108, 105, 103, 104, 116, 95, 122, 44, 95, 115, > 112, 101, 99, 117, 108, 97, 114, 95, 108, 105, 103, 104, 116, 110, 101, 115, > 115, 44, 95, 115, 112, 101, 99, 117, 108, 97, 114, 95, 115, 104, 105, 110, > 105, 110, 101, 115, 115, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 114, 101, 110, 100, > 101, 114, 105, 110, 103, 95, 109, 111, 100, 101, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 100, 111, 116, 115, 32, 124, 32, 49, 61, > 119, 105, 114, 101, 102, 114, 97, 109, 101, 32, 124, 32, 50, 61, 102, 108, > 97, 116, 32, 124, 32, 51, 61, 102, 108, 97, 116, 45, 115, 104, 97, 100, > 101, 100, 32, 124, 32, 52, 61, 103, 111, 117, 114, 97, 117, 100, 45, 115, > 104, 97, 100, 101, 100, 32, 124, 32, 53, 61, 112, 104, 111, 110, 103, 45, > 115, 104, 97, 100, 101, 100, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 120, 61, 121, 61, 122, 61, 48, 39, 44, 32, 39, 111, > 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, > 115, 95, 122, 98, 117, 102, 102, 101, 114, 61, 49, 39, 46, 32, 65, 108, > 108, 32, 111, 116, 104, 101, 114, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 115, 32, 116, 97, 107, 101, 32, 116, 104, 101, 105, 114, 32, 100, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 32, 102, 114, 111, 109, > 32, 116, 104, 101, 32, 51, 100, 32, 101, 110, 118, 105, 114, 111, 110, 109, > 101, 110, 116, 32, 118, 97, 114, 105, 97, 98, 108, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, > 44, 49, 48, 32, 45, 99, 111, 110, 101, 51, 100, 32, 51, 48, 44, 45, > 49, 50, 48, 32, 45, 97, 100, 100, 51, 100, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 49, 44, 48, 44, 54, 48, 32, 45, 111, 98, 106, 101, 99, 116, > 51, 100, 91, 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 107, 101, 101, 112, 91, 48, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 97, 99, 107, 95, 115, 112, 114, 105, 116, 101, 115, 32, > 58, 32, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 61, 48, 44, > 48, 60, 61, 95, 109, 105, 110, 95, 115, 99, 97, 108, 101, 60, 61, 49, > 48, 48, 44, 95, 97, 108, 108, 111, 119, 95, 114, 111, 116, 97, 116, 105, > 111, 110, 61, 123, 32, 48, 61, 48, 32, 100, 101, 103, 46, 32, 124, 32, > 49, 61, 49, 56, 48, 32, 100, 101, 103, 46, 32, 124, 32, 50, 61, 57, > 48, 32, 100, 101, 103, 46, 32, 124, 32, 51, 61, 97, 110, 121, 32, 125, > 44, 95, 115, 112, 97, 99, 105, 110, 103, 44, 95, 112, 114, 101, 99, 105, > 115, 105, 111, 110, 62, 61, 48, 44, 109, 97, 120, 95, 105, 116, 101, 114, > 97, 116, 105, 111, 110, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 84, 114, 121, 32, 116, 111, 32, 114, 97, 110, 100, 111, 109, > 108, 121, 32, 112, 97, 99, 107, 32, 97, 115, 32, 109, 97, 110, 121, 32, > 115, 112, 114, 105, 116, 101, 115, 32, 97, 115, 32, 112, 111, 115, 115, 105, > 98, 108, 101, 32, 111, 110, 116, 111, 32, 116, 104, 101, 32, 39, 101, 109, > 112, 116, 121, 39, 32, 97, 114, 101, 97, 115, 32, 111, 102, 32, 97, 110, > 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 83, 112, 114, 105, 116, 101, 115, 32, 99, 97, 110, 32, 98, 101, 32, > 101, 118, 101, 110, 116, 117, 97, 108, 108, 121, 32, 114, 111, 116, 97, 116, > 101, 100, 32, 97, 110, 100, 32, 115, 99, 97, 108, 101, 100, 32, 100, 117, > 114, 105, 110, 103, 32, 116, 104, 101, 32, 112, 97, 99, 107, 105, 110, 103, > 32, 112, 114, 111, 99, 101, 115, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 70, 105, 114, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 116, 104, 101, 32, 99, > 97, 110, 118, 97, 115, 32, 116, 104, 97, 116, 32, 119, 105, 108, 108, 32, > 98, 101, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 116, > 104, 101, 32, 115, 112, 114, 105, 116, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 116, 115, 32, 108, 97, 115, 116, 32, 99, 104, > 97, 110, 110, 101, 108, 32, 109, 117, 115, 116, 32, 98, 101, 32, 97, 32, > 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, 32, 119, 104, 111, 115, > 101, 32, 122, 101, 114, 111, 32, 118, 97, 108, 117, 101, 115, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 32, 112, 111, 116, 101, 110, 116, 105, 97, > 108, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 32, 102, 111, 114, 32, > 100, 114, 97, 119, 105, 110, 103, 32, 116, 104, 101, 32, 115, 112, 114, 105, > 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 108, > 108, 32, 111, 116, 104, 101, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 32, 116, 104, 101, 32, 115, 112, 114, 105, 116, 101, 115, 32, 99, 111, > 110, 115, 105, 100, 101, 114, 101, 100, 32, 102, 111, 114, 32, 112, 97, 99, > 107, 105, 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, > 104, 101, 105, 114, 32, 108, 97, 115, 116, 32, 99, 104, 97, 110, 110, 101, > 108, 32, 109, 117, 115, 116, 32, 98, 101, 32, 97, 32, 98, 105, 110, 97, > 114, 121, 32, 109, 97, 115, 107, 32, 116, 104, 97, 116, 32, 114, 101, 112, > 114, 101, 115, 101, 110, 116, 115, 32, 116, 104, 101, 32, 115, 112, 114, 105, > 116, 101, 32, 115, 104, 97, 112, 101, 32, 40, 105, 46, 101, 46, 32, 97, > 32, 56, 45, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, 111, 109, > 112, 111, 110, 101, 110, 116, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 84, 104, 101, 32, 111, 114, 100, 101, 114, 32, 111, 102, 32, 115, > 112, 114, 105, 116, 101, 32, 112, 97, 99, 107, 105, 110, 103, 32, 102, 111, > 108, 108, 111, 119, 115, 32, 116, 104, 101, 32, 111, 114, 100, 101, 114, 32, > 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 112, 114, > 105, 116, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 105, 109, 97, 103, > 101, 32, 108, 105, 115, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 83, 112, 114, 105, 116, 101, 32, 112, 97, 99, 107, 105, 110, 103, 32, > 105, 115, 32, 100, 111, 110, 101, 32, 111, 110, 32, 114, 97, 110, 100, 111, > 109, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 32, 97, 110, 100, 32, > 105, 116, 101, 114, 97, 116, 105, 118, 101, 108, 121, 32, 119, 105, 116, 104, > 32, 100, 101, 99, 114, 101, 97, 115, 105, 110, 103, 32, 115, 99, 97, 108, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 110, 98, > 95, 115, 99, 97, 108, 101, 115, 39, 32, 115, 101, 116, 115, 32, 116, 104, > 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 100, 101, 99, 114, > 101, 97, 115, 105, 110, 103, 32, 115, 99, 97, 108, 101, 115, 32, 99, 111, > 110, 115, 105, 100, 101, 114, 101, 100, 32, 102, 111, 114, 32, 97, 108, 108, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 112, 114, 105, 116, > 101, 115, 32, 116, 111, 32, 98, 101, 32, 112, 97, 99, 107, 101, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 109, 105, 110, 95, 115, > 99, 97, 108, 101, 39, 32, 40, 105, 110, 32, 37, 41, 32, 115, 101, 116, > 115, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 115, 105, > 122, 101, 32, 99, 111, 110, 115, 105, 100, 101, 114, 101, 100, 32, 102, 111, > 114, 32, 112, 97, 99, 107, 105, 110, 103, 32, 40, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 97, 115, 32, 97, 32, 112, 101, 114, 99, 101, 110, > 116, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, 111, 114, 105, 103, > 105, 110, 97, 108, 32, 115, 112, 114, 105, 116, 101, 32, 115, 105, 122, 101, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 115, 112, 97, > 99, 105, 110, 103, 39, 32, 99, 97, 110, 32, 98, 101, 32, 112, 111, 115, > 105, 116, 105, 118, 101, 32, 111, 114, 32, 110, 101, 103, 97, 116, 105, 118, > 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 114, 101, > 99, 105, 115, 105, 111, 110, 39, 32, 116, 101, 108, 108, 115, 32, 97, 98, > 111, 117, 116, 32, 116, 104, 101, 32, 100, 101, 115, 105, 114, 101, 100, 32, > 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 102, 97, 105, 108, 101, 100, > 32, 116, 114, 105, 97, 108, 115, 32, 98, 101, 102, 111, 114, 101, 32, 101, > 110, 100, 105, 110, 103, 32, 116, 104, 101, 32, 102, 105, 108, 108, 105, 110, > 103, 32, 112, 114, 111, 99, 101, 115, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 53, > 39, 44, 32, 39, 109, 105, 110, 95, 115, 99, 97, 108, 101, 61, 50, 53, > 39, 44, 32, 39, 97, 108, 108, 111, 119, 95, 114, 111, 116, 97, 116, 105, > 111, 110, 61, 51, 39, 44, 32, 39, 115, 112, 97, 99, 105, 110, 103, 61, > 49, 39, 44, 32, 39, 112, 114, 101, 99, 105, 115, 105, 111, 110, 61, 55, > 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 95, 105, 116, 101, 114, 97, > 116, 105, 111, 110, 115, 61, 50, 53, 54, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 53, 49, 50, 44, 53, 49, 50, 44, 49, > 44, 51, 44, 34, 109, 105, 110, 40, 50, 53, 53, 44, 121, 42, 99, 47, > 50, 41, 34, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 99, > 105, 114, 99, 108, 101, 32, 53, 48, 37, 44, 53, 48, 37, 44, 49, 48, > 48, 44, 49, 44, 50, 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, > 99, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 101, 115, > 105, 122, 101, 50, 100, 121, 91, 45, 49, 93, 32, 50, 52, 32, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 112, 97, 99, 107, 95, 115, 112, 114, > 105, 116, 101, 115, 32, 51, 44, 50, 53, 10, 112, 97, 99, 107, 95, 115, > 112, 114, 105, 116, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 53, 125, 41, 32, 38, > 38, 32, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 50, > 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 48, 48, > 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 51, 61, 51, 125, > 41, 32, 38, 38, 32, 36, 51, 62, 61, 48, 32, 38, 38, 32, 36, 51, > 60, 61, 51, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 52, > 61, 49, 125, 41, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, > 53, 61, 55, 125, 41, 32, 38, 38, 32, 36, 53, 62, 61, 48, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 54, 61, 50, 53, 54, 125, > 41, 32, 38, 38, 32, 36, 54, 62, 61, 48, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 82, 97, 110, 100, 111, 109, 108, 121, 32, 112, 97, > 99, 107, 32, 105, 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, > 36, 49, 32, 115, 99, 97, 108, 101, 115, 44, 32, 109, 105, 110, 105, 109, > 117, 109, 32, 115, 99, 97, 108, 101, 32, 36, 50, 37, 44, 32, 34, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 51, 44, 110, 111, 44, 49, > 56, 48, 92, 34, 92, 32, 92, 34, 100, 101, 103, 46, 44, 57, 48, 92, > 34, 92, 32, 92, 34, 100, 101, 103, 46, 44, 97, 110, 121, 125, 34, 32, > 114, 111, 116, 97, 116, 105, 111, 110, 44, 32, 115, 112, 97, 99, 105, 110, > 103, 32, 36, 52, 44, 32, 112, 114, 101, 99, 105, 115, 105, 111, 110, 32, > 36, 53, 32, 97, 110, 100, 32, 36, 54, 32, 109, 97, 120, 105, 109, 117, > 109, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 78, 61, 123, 64, 35, 45, 49, 125, 32, 105, 115, 95, > 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 61, 49, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 123, 109, 97, 120, 40, > 50, 44, 64, 123, 36, 62, 44, 115, 125, 41, 125, 32, 45, 100, 111, 110, > 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 45, 114, 112, > 114, 111, 103, 114, 101, 115, 115, 32, 123, 36, 62, 42, 49, 48, 48, 47, > 36, 49, 125, 10, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, 115, 61, > 48, 10, 114, 97, 116, 105, 111, 61, 123, 105, 102, 40, 36, 49, 62, 49, > 44, 36, 50, 43, 40, 49, 48, 48, 45, 36, 50, 41, 42, 36, 60, 47, > 40, 36, 49, 45, 49, 41, 44, 49, 48, 48, 41, 125, 37, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 78, 32, 45, 45, 108, 91, 123, 49, 43, > 36, 62, 125, 93, 10, 119, 61, 123, 119, 42, 36, 114, 97, 116, 105, 111, > 125, 32, 104, 61, 123, 104, 42, 36, 114, 97, 116, 105, 111, 125, 10, 45, > 105, 102, 32, 123, 36, 119, 60, 49, 124, 124, 36, 104, 60, 49, 125, 32, > 45, 114, 109, 10, 45, 101, 108, 115, 101, 32, 45, 114, 32, 36, 119, 44, > 36, 104, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 115, 104, 91, > 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, > 101, 113, 91, 45, 49, 93, 32, 48, 32, 97, 114, 101, 97, 123, 49, 43, > 36, 62, 125, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 108, 91, 48, 44, 123, 36, 78, 43, > 49, 125, 45, 45, 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 54, 10, 105, 110, 100, 61, 123, 49, 43, 40, 36, 62, 37, 36, 78, 41, > 125, 32, 97, 114, 101, 97, 61, 36, 123, 97, 114, 101, 97, 36, 105, 110, > 100, 125, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, 48, 125, 32, 91, > 36, 105, 110, 100, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, > 61, 49, 125, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 36, 105, 110, > 100, 93, 32, 123, 114, 111, 117, 110, 100, 40, 63, 41, 42, 49, 56, 48, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 50, 125, 32, > 45, 45, 114, 111, 116, 97, 116, 101, 91, 36, 105, 110, 100, 93, 32, 123, > 114, 111, 117, 110, 100, 40, 63, 40, 51, 41, 41, 42, 57, 48, 125, 10, > 45, 101, 108, 115, 101, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 36, > 105, 110, 100, 93, 32, 123, 63, 42, 51, 54, 48, 125, 32, 45, 115, 104, > 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 110, 101, 113, 91, 45, 49, 93, 32, 48, 32, 97, 114, 101, 97, 61, 64, > 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 91, 48, 93, 32, 49, 48, 48, 37, 32, 45, 101, 113, 91, 45, 49, 93, > 32, 48, 10, 45, 105, 102, 32, 123, 36, 52, 62, 49, 125, 32, 45, 101, > 114, 111, 100, 101, 91, 45, 49, 93, 32, 123, 50, 42, 36, 52, 45, 49, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 52, 60, 49, 125, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 123, 45, 50, 42, 36, > 52, 43, 51, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 114, 101, > 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, 120, 70, 70, > 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 105, 102, 32, 36, 105, 115, > 95, 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 32, 45, 110, 111, 105, > 115, 101, 91, 45, 49, 93, 32, 48, 46, 49, 44, 50, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, > 93, 32, 48, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 49, > 44, 49, 10, 45, 109, 97, 120, 95, 112, 97, 116, 99, 104, 91, 45, 49, > 93, 32, 123, 114, 111, 117, 110, 100, 40, 49, 46, 53, 42, 64, 123, 36, > 105, 110, 100, 44, 109, 97, 120, 40, 119, 44, 104, 41, 125, 41, 125, 10, > 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 112, 111, 105, > 110, 116, 99, 108, 111, 117, 100, 51, 100, 91, 45, 49, 93, 10, 45, 105, > 102, 32, 123, 36, 78, 62, 49, 125, 32, 45, 108, 91, 45, 49, 93, 10, > 45, 115, 51, 100, 32, 45, 47, 91, 49, 93, 32, 36, 78, 32, 45, 114, > 111, 117, 110, 100, 91, 49, 93, 32, 45, 109, 97, 120, 91, 49, 93, 32, > 49, 32, 110, 61, 64, 123, 49, 44, 48, 125, 10, 45, 114, 91, 50, 93, > 32, 51, 44, 123, 64, 123, 50, 44, 104, 125, 47, 51, 125, 44, 49, 44, > 49, 44, 45, 49, 10, 45, 105, 91, 50, 93, 32, 49, 44, 64, 123, 50, > 44, 104, 125, 32, 45, 114, 97, 110, 100, 91, 50, 93, 32, 48, 44, 49, > 32, 45, 97, 91, 50, 44, 51, 93, 32, 120, 32, 45, 115, 111, 114, 116, > 91, 50, 93, 32, 43, 44, 121, 32, 45, 122, 91, 50, 93, 32, 49, 44, > 51, 32, 45, 114, 91, 50, 93, 32, 51, 44, 36, 110, 44, 49, 44, 49, > 32, 45, 121, 91, 50, 93, 10, 45, 114, 91, 51, 93, 32, 49, 44, 123, > 50, 42, 36, 110, 125, 44, 49, 44, 49, 44, 48, 32, 45, 114, 91, 52, > 93, 32, 49, 44, 123, 51, 42, 36, 110, 125, 44, 49, 44, 49, 44, 48, > 32, 45, 114, 91, 53, 93, 32, 49, 44, 36, 110, 44, 49, 44, 49, 44, > 48, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, 101, 110, > 100, 105, 102, 10, 110, 61, 64, 123, 45, 49, 44, 55, 125, 10, 45, 105, > 102, 32, 36, 110, 10, 45, 115, 51, 100, 91, 45, 49, 93, 32, 45, 114, > 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, 51, > 61, 61, 48, 125, 10, 91, 45, 54, 93, 32, 45, 105, 91, 45, 50, 93, > 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, > 115, 125, 41, 10, 45, 105, 102, 32, 123, 36, 110, 62, 49, 125, 32, 52, > 44, 123, 36, 110, 45, 49, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, > 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 50, 93, 32, 49, 48, 48, > 37, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, > 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 105, 102, 32, > 123, 36, 110, 62, 49, 125, 32, 91, 45, 51, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 49, 125, > 10, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, 54, 93, 32, 123, 114, > 111, 117, 110, 100, 40, 63, 40, 49, 41, 41, 42, 49, 56, 48, 125, 32, > 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, > 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 105, 102, 32, 123, 36, > 110, 62, 49, 125, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, > 93, 32, 49, 56, 48, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, > 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 62, 50, > 125, 32, 52, 44, 123, 36, 110, 45, 50, 125, 44, 49, 44, 49, 44, 45, > 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 49, 44, 49, 48, 48, 37, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, > 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, 106, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 45, 52, 93, 32, 49, 48, 48, 37, 32, 45, 105, 91, > 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, > 125, 59, 123, 115, 125, 41, 10, 45, 105, 102, 32, 123, 36, 110, 62, 49, > 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 52, 93, > 32, 49, 48, 48, 37, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, > 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 62, 50, > 125, 32, 91, 45, 53, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 108, 115, 101, 10, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, 54, 93, > 32, 123, 114, 111, 117, 110, 100, 40, 63, 40, 51, 41, 41, 42, 57, 48, > 125, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, > 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 105, 102, 32, > 123, 36, 110, 62, 49, 125, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, > 45, 49, 93, 32, 57, 48, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, > 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 62, > 50, 125, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, > 57, 48, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, > 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 62, 51, 125, 32, 45, > 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, 57, 48, 32, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 52, 125, 32, 52, 44, 123, 36, 110, > 45, 52, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, > 44, 48, 32, 49, 44, 49, 48, 48, 37, 32, 45, 114, 97, 110, 100, 91, > 45, 49, 93, 32, 48, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 49, 93, 32, 49, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 56, 93, > 32, 49, 48, 48, 37, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, > 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 49, 125, 32, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 56, 93, 32, 49, 48, 48, 37, 32, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 50, 125, 32, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 56, 93, 32, 49, 48, 48, 37, 32, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 51, 125, 32, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 56, 93, 32, 49, 48, 48, 37, 32, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 52, 125, 32, 91, 45, 57, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 121, > 91, 123, 36, 78, 43, 51, 125, 45, 45, 49, 93, 32, 45, 97, 91, 123, > 36, 78, 43, 51, 125, 45, 45, 49, 93, 32, 121, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 109, 91, 45, 51, 93, 10, 91, 48, 93, 32, 45, > 115, 104, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 32, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 45, 91, 45, 49, 93, > 32, 91, 45, 52, 93, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 45, 50, 93, 32, 91, 45, 51, 93, 44, 48, 44, 48, 44, 48, 44, 49, > 44, 50, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 51, 44, 45, 49, > 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 32, 45, 97, 114, 101, 97, 95, 102, 103, 91, 45, 49, 93, > 32, 48, 44, 49, 32, 45, 101, 113, 91, 45, 49, 93, 32, 36, 97, 114, > 101, 97, 10, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, > 114, 109, 91, 45, 51, 93, 32, 45, 115, 104, 91, 45, 50, 93, 32, 48, > 44, 64, 123, 45, 50, 44, 115, 45, 50, 125, 32, 45, 42, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 105, 77, 125, 32, 45, 106, 91, 48, 93, 32, 91, 45, > 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 108, > 115, 101, 10, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 110, 98, > 95, 97, 116, 116, 101, 109, 112, 116, 115, 61, 123, 36, 110, 98, 95, 97, > 116, 116, 101, 109, 112, 116, 115, 43, 49, 125, 10, 45, 105, 102, 32, 123, > 36, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, 115, 62, 36, 53, 125, > 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 108, 115, 101, 32, 45, 99, > 111, 110, 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 32, 45, 107, 91, 48, > 93, 32, 45, 101, 110, 100, 108, 10, 45, 100, 111, 110, 101, 32, 45, 107, > 91, 48, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 105, 101, 99, 104, 97, 114, 116, 32, 58, 32, 108, 97, 98, 101, 108, > 95, 104, 101, 105, 103, 104, 116, 62, 61, 48, 44, 108, 97, 98, 101, 108, > 95, 82, 44, 108, 97, 98, 101, 108, 95, 71, 44, 108, 97, 98, 101, 108, > 95, 66, 44, 34, 108, 97, 98, 101, 108, 49, 34, 44, 118, 97, 108, 117, > 101, 49, 44, 82, 49, 44, 71, 49, 44, 66, 49, 44, 46, 46, 46, 44, > 34, 108, 97, 98, 101, 108, 78, 34, 44, 118, 97, 108, 117, 101, 78, 44, > 82, 78, 44, 71, 78, 44, 66, 78, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 114, 97, 119, 32, 112, 105, 101, 32, 99, 104, 97, 114, 116, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 40, 82, 71, > 66, 41, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 112, 105, 101, 99, 104, 97, 114, 116, 32, 50, 53, 44, 48, 44, 48, > 44, 48, 44, 34, 82, 101, 100, 34, 44, 53, 53, 44, 50, 53, 53, 44, > 48, 44, 48, 44, 34, 71, 114, 101, 101, 110, 34, 44, 52, 48, 44, 48, > 44, 50, 53, 53, 44, 48, 44, 34, 66, 108, 117, 101, 34, 44, 51, 48, > 44, 49, 50, 56, 44, 49, 50, 56, 44, 50, 53, 53, 44, 34, 79, 116, > 104, 101, 114, 34, 44, 53, 44, 49, 50, 56, 44, 49, 50, 56, 44, 49, > 50, 56, 10, 112, 105, 101, 99, 104, 97, 114, 116, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 36, 49, 62, 61, 48, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 68, 114, 97, 119, 32, 112, 105, 101, 32, 99, 104, 97, > 114, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 108, 97, 98, 101, 108, 32, 104, 101, 105, 103, 104, 116, > 32, 36, 49, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, 36, > 50, 44, 36, 51, 44, 36, 52, 41, 46, 34, 10, 45, 118, 32, 45, 32, > 36, 61, 97, 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, 108, 108, 105, 112, 115, 101, > 32, 53, 48, 37, 44, 53, 48, 37, 44, 123, 119, 47, 50, 45, 49, 125, > 44, 123, 104, 47, 50, 45, 49, 125, 44, 48, 44, 49, 44, 49, 10, 45, > 101, 108, 108, 105, 112, 115, 101, 32, 53, 48, 37, 44, 53, 48, 37, 44, > 123, 119, 47, 50, 45, 49, 125, 44, 123, 104, 47, 50, 45, 49, 125, 44, > 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 10, 40, > 36, 123, 54, 45, 45, 49, 58, 53, 125, 41, 32, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 10, 116, 104, > 101, 116, 97, 61, 48, 10, 45, 105, 102, 32, 123, 119, 62, 49, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 10, 120, 101, 61, 123, > 48, 46, 53, 42, 64, 123, 45, 50, 44, 119, 125, 42, 40, 49, 43, 99, > 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 41, 125, 10, 121, 101, 61, > 123, 48, 46, 53, 42, 64, 123, 45, 50, 44, 104, 125, 42, 40, 49, 43, > 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 41, 125, 10, 45, 108, > 105, 110, 101, 91, 45, 50, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, > 36, 120, 101, 44, 36, 121, 101, 10, 116, 104, 101, 116, 97, 61, 123, 36, > 116, 104, 101, 116, 97, 45, 50, 42, 112, 105, 42, 105, 40, 36, 62, 41, > 125, 10, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 116, > 104, 101, 116, 97, 61, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 119, 125, 32, 45, 105, 102, 32, 123, 105, 40, 36, 62, 41, 125, 10, 110, > 116, 104, 101, 116, 97, 61, 123, 36, 116, 104, 101, 116, 97, 45, 50, 42, > 112, 105, 42, 105, 40, 36, 62, 41, 125, 10, 120, 99, 61, 123, 48, 46, > 53, 42, 64, 123, 45, 50, 44, 119, 125, 42, 40, 49, 43, 48, 46, 53, > 42, 99, 111, 115, 40, 48, 46, 53, 42, 40, 36, 110, 116, 104, 101, 116, > 97, 43, 36, 116, 104, 101, 116, 97, 41, 41, 41, 125, 10, 121, 99, 61, > 123, 48, 46, 53, 42, 64, 123, 45, 50, 44, 104, 125, 42, 40, 49, 43, > 48, 46, 53, 42, 115, 105, 110, 40, 48, 46, 53, 42, 40, 36, 110, 116, > 104, 101, 116, 97, 43, 36, 116, 104, 101, 116, 97, 41, 41, 41, 125, 10, > 120, 102, 61, 123, 48, 46, 53, 42, 64, 123, 45, 50, 44, 119, 125, 42, > 40, 49, 43, 48, 46, 56, 42, 99, 111, 115, 40, 48, 46, 53, 42, 40, > 36, 110, 116, 104, 101, 116, 97, 43, 36, 116, 104, 101, 116, 97, 41, 41, > 41, 125, 10, 121, 102, 61, 123, 48, 46, 53, 42, 64, 123, 45, 50, 44, > 104, 125, 42, 40, 49, 43, 48, 46, 56, 42, 115, 105, 110, 40, 48, 46, > 53, 42, 40, 36, 110, 116, 104, 101, 116, 97, 43, 36, 116, 104, 101, 116, > 97, 41, 41, 41, 125, 10, 45, 102, 108, 111, 111, 100, 91, 45, 50, 93, > 32, 36, 120, 102, 44, 36, 121, 102, 44, 48, 44, 48, 44, 48, 44, 49, > 44, 36, 123, 97, 114, 103, 123, 55, 43, 53, 42, 36, 62, 125, 125, 44, > 36, 123, 97, 114, 103, 123, 56, 43, 53, 42, 36, 62, 125, 125, 44, 36, > 123, 97, 114, 103, 123, 57, 43, 53, 42, 36, 62, 125, 125, 10, 45, 105, > 102, 32, 123, 97, 98, 115, 40, 36, 110, 116, 104, 101, 116, 97, 45, 36, > 116, 104, 101, 116, 97, 41, 62, 48, 46, 49, 125, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 36, 123, 97, 114, 103, 123, 53, 43, 53, 42, 36, > 62, 125, 125, 44, 48, 44, 48, 44, 36, 49, 44, 49, 44, 49, 10, 40, > 36, 50, 94, 36, 51, 94, 36, 52, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 51, 32, 45, > 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 106, 91, 45, 52, > 93, 32, 91, 45, 49, 93, 44, 123, 36, 120, 99, 45, 119, 47, 50, 125, > 44, 123, 36, 121, 99, 45, 104, 47, 50, 125, 44, 48, 44, 48, 44, 49, > 44, 91, 45, 50, 93, 10, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 116, 104, 101, 116, 97, 61, 36, 110, > 116, 104, 101, 116, 97, 10, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, > 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 108, 97, 115, 109, 97, 32, 58, 32, 95, 97, 108, 112, > 104, 97, 44, 95, 95, 98, 101, 116, 97, 44, 95, 115, 99, 97, 108, 101, > 62, 61, 48, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 114, 97, 119, 32, 97, 32, 114, 97, 110, 100, 111, 109, > 32, 99, 111, 108, 111, 114, 101, 100, 32, 112, 108, 97, 115, 109, 97, 32, > 102, 114, 97, 99, 116, 97, 108, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 84, 104, 105, 115, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 115, 32, 116, 104, 101, > 32, 115, 111, 45, 99, 97, 108, 108, 101, 100, 32, 39, 68, 105, 97, 109, > 111, 110, 100, 45, 83, 113, 117, 97, 114, 101, 39, 32, 97, 108, 103, 111, > 114, 105, 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 97, 108, 112, 104, 97, 61, 49, 39, 44, 32, 39, 98, 101, 116, 97, > 61, 49, 39, 32, 97, 110, 100, 32, 39, 115, 99, 97, 108, 101, 61, 56, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, > 48, 44, 52, 48, 48, 44, 49, 44, 51, 32, 45, 112, 108, 97, 115, 109, > 97, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 105, 110, 116, 32, 58, > 32, 120, 91, 37, 93, 44, 121, 91, 37, 93, 44, 95, 122, 91, 37, 93, > 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 99, 111, 108, 111, 114, > 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 83, 101, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, 112, 105, 120, 101, 108, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 122, 61, > 48, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 48, > 48, 48, 32, 45, 112, 111, 105, 110, 116, 32, 123, 63, 40, 49, 48, 48, > 41, 125, 37, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 48, 44, > 49, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 112, 111, 108, 107, 97, 95, 100, 111, 116, > 115, 32, 58, 32, 100, 105, 97, 109, 101, 116, 101, 114, 62, 61, 48, 44, > 95, 100, 101, 110, 115, 105, 116, 121, 44, 95, 111, 102, 102, 115, 101, 116, > 49, 44, 95, 111, 102, 102, 115, 101, 116, 50, 44, 95, 97, 110, 103, 108, > 101, 44, 95, 97, 108, 105, 97, 115, 105, 110, 103, 44, 95, 115, 104, 97, > 100, 105, 110, 103, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 99, > 111, 108, 111, 114, 44, 46, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 114, 97, 119, 32, 100, 111, 116, 115, 32, 112, 97, 116, 116, > 101, 114, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, 50, 48, 39, 44, 32, 39, > 111, 102, 102, 115, 101, 116, 49, 61, 111, 102, 102, 115, 101, 116, 50, 61, > 53, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, 44, 32, > 39, 97, 108, 105, 97, 115, 105, 110, 103, 61, 49, 48, 39, 44, 32, 39, > 115, 104, 97, 100, 105, 110, 103, 61, 49, 39, 44, 32, 39, 111, 112, 97, > 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, > 111, 114, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 112, > 111, 108, 107, 97, 95, 100, 111, 116, 115, 32, 49, 48, 44, 49, 53, 44, > 48, 44, 48, 44, 50, 48, 44, 49, 48, 44, 49, 44, 48, 46, 53, 44, > 48, 44, 49, 50, 56, 44, 50, 53, 53, 10, 112, 111, 108, 107, 97, 95, > 100, 111, 116, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, > 62, 61, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 48, > 125, 44, 36, 123, 51, 61, 53, 48, 125, 44, 36, 123, 52, 61, 53, 48, > 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 49, 48, 125, > 44, 36, 123, 55, 61, 49, 125, 44, 36, 123, 56, 61, 49, 125, 44, 36, > 123, 57, 61, 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 68, 114, 97, 119, 32, 112, 111, 108, 107, 97, 32, 100, 111, 116, 115, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 100, 105, 97, 109, 101, 116, 101, 114, 32, 36, 49, 44, 32, 100, > 101, 110, 115, 105, 116, 121, 32, 36, 50, 44, 32, 97, 110, 103, 108, 101, > 32, 36, 51, 32, 100, 101, 103, 46, 44, 32, 115, 104, 105, 102, 116, 32, > 40, 36, 52, 44, 36, 53, 41, 44, 32, 97, 108, 105, 97, 115, 105, 110, > 103, 32, 36, 54, 32, 97, 110, 100, 32, 115, 104, 97, 100, 105, 110, 103, > 32, 36, 55, 46, 34, 10, 45, 118, 32, 45, 32, 116, 104, 101, 116, 97, > 61, 123, 36, 53, 42, 112, 105, 47, 49, 56, 48, 125, 32, 99, 116, 61, > 123, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 32, 115, 116, > 61, 123, 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 32, 109, > 105, 100, 49, 61, 123, 36, 49, 47, 50, 125, 32, 109, 105, 100, 50, 61, > 123, 36, 50, 47, 50, 125, 10, 45, 105, 91, 48, 93, 32, 40, 36, 123, > 57, 45, 45, 49, 125, 41, 32, 45, 121, 91, 48, 93, 32, 99, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 87, 72, > 61, 123, 109, 97, 120, 40, 119, 44, 104, 41, 125, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 34, 120, 110, > 32, 61, 32, 49, 48, 48, 42, 120, 47, 34, 36, 87, 72, 34, 45, 36, > 51, 59, 32, 121, 110, 32, 61, 32, 49, 48, 48, 42, 121, 47, 34, 36, > 87, 72, 34, 45, 36, 52, 59, 32, 92, 10, 120, 114, 32, 61, 32, 120, > 110, 42, 34, 36, 99, 116, 34, 45, 121, 110, 42, 34, 36, 115, 116, 34, > 59, 32, 121, 114, 32, 61, 32, 120, 110, 42, 34, 36, 115, 116, 34, 43, > 121, 110, 42, 34, 36, 99, 116, 34, 59, 32, 92, 10, 120, 99, 32, 61, > 32, 120, 114, 37, 36, 50, 45, 34, 36, 109, 105, 100, 50, 34, 59, 32, > 121, 99, 32, 61, 32, 121, 114, 37, 36, 50, 45, 34, 36, 109, 105, 100, > 50, 34, 59, 32, 92, 10, 34, 36, 109, 105, 100, 49, 34, 45, 115, 113, > 114, 116, 40, 120, 99, 42, 120, 99, 43, 121, 99, 42, 121, 99, 41, 34, > 10, 45, 42, 91, 45, 49, 93, 32, 36, 54, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 36, 55, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 36, 56, 32, 40, 36, 123, 57, 45, 45, 49, 125, 41, 32, 45, 121, 91, > 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 91, 45, 50, 93, 44, 91, 45, 50, 93, 10, 45, 106, 91, 45, > 51, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 48, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 112, 111, 108, 121, 103, 111, 110, 32, 58, 32, 78, > 62, 61, 49, 44, 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, > 46, 46, 44, 120, 78, 91, 37, 93, 44, 121, 78, 91, 37, 93, 44, 95, > 111, 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, > 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, > 100, 32, 78, 45, 118, 101, 114, 116, 105, 99, 101, 115, 32, 112, 111, 108, > 121, 103, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, 32, 105, 115, 32, 97, > 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 110, 117, > 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, > 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, 99, 104, 32, 99, 97, > 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, 105, 102, 32, 97, 32, > 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 46, 32, 73, 102, 32, 97, 32, 112, 97, 116, 116, 101, 114, 110, > 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 44, 32, 116, > 104, 101, 32, 112, 111, 108, 121, 103, 111, 110, 32, 105, 115, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 100, 114, 97, 119, 110, 32, 111, 117, 116, > 108, 105, 110, 101, 100, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, > 32, 102, 105, 108, 108, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 44, 32, 39, > 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, 110, 100, 101, 102, 105, 110, > 101, 100, 41, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 112, 111, 108, 121, 103, > 111, 110, 32, 52, 44, 50, 48, 37, 44, 50, 48, 37, 44, 56, 48, 37, > 44, 51, 48, 37, 44, 56, 48, 37, 44, 55, 48, 37, 44, 50, 48, 37, > 44, 56, 48, 37, 44, 48, 46, 51, 44, 48, 44, 50, 53, 53, 44, 48, > 32, 45, 112, 111, 108, 121, 103, 111, 110, 32, 52, 44, 50, 48, 37, 44, > 50, 48, 37, 44, 56, 48, 37, 44, 51, 48, 37, 44, 56, 48, 37, 44, > 55, 48, 37, 44, 50, 48, 37, 44, 56, 48, 37, 44, 49, 44, 48, 120, > 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 50, 44, 49, 54, 44, 49, 44, 49, 44, 39, 63, 40, 105, 102, > 40, 120, 44, 64, 123, 45, 49, 44, 104, 125, 44, 64, 123, 45, 49, 44, > 119, 125, 41, 41, 39, 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, > 50, 93, 32, 123, 104, 125, 44, 64, 45, 49, 44, 48, 46, 54, 44, 50, > 53, 53, 44, 48, 44, 50, 53, 53, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 113, 117, 105, 118, > 101, 114, 32, 58, 32, 91, 102, 117, 110, 99, 116, 105, 111, 110, 95, 105, > 109, 97, 103, 101, 93, 44, 95, 115, 97, 109, 112, 108, 105, 110, 103, 62, > 48, 44, 95, 102, 97, 99, 116, 111, 114, 44, 95, 105, 115, 95, 97, 114, > 114, 111, 119, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 111, > 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, 44, > 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 50, 100, 32, 118, 101, 99, 116, > 111, 114, 47, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 102, > 105, 101, 108, 100, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, 32, 105, 115, 32, 97, > 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 110, 117, > 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, > 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, 99, 104, 32, 99, 97, > 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, 105, 102, 32, 97, 32, > 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 97, > 109, 112, 108, 105, 110, 103, 61, 50, 53, 39, 44, 32, 39, 102, 97, 99, > 116, 111, 114, 61, 45, 50, 48, 39, 44, 32, 39, 105, 115, 95, 97, 114, > 114, 111, 119, 61, 49, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, > 48, 48, 44, 49, 48, 48, 44, 49, 44, 50, 44, 39, 105, 102, 40, 99, > 61, 61, 48, 44, 120, 45, 119, 47, 50, 44, 121, 45, 104, 47, 50, 41, > 39, 32, 53, 48, 48, 44, 53, 48, 48, 44, 49, 44, 51, 44, 50, 53, > 53, 32, 45, 113, 117, 105, 118, 101, 114, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 49, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 115, > 105, 122, 101, 50, 100, 121, 32, 54, 48, 48, 32, 45, 108, 117, 109, 105, > 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, 103, 114, 97, 100, 105, 101, > 110, 116, 91, 48, 93, 32, 45, 109, 117, 108, 91, 49, 93, 32, 45, 49, > 32, 45, 114, 101, 118, 101, 114, 115, 101, 91, 48, 44, 49, 93, 32, 45, > 97, 112, 112, 101, 110, 100, 91, 48, 44, 49, 93, 32, 99, 32, 45, 98, > 108, 117, 114, 91, 48, 93, 32, 56, 32, 45, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 91, 48, 93, 32, 45, 113, 117, 105, 118, 101, 114, > 91, 49, 93, 32, 91, 48, 93, 44, 49, 48, 44, 49, 48, 44, 49, 44, > 48, 46, 56, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 101, 99, 116, 97, 110, 103, 108, 101, 32, 58, 32, 120, 48, 91, 37, 93, > 44, 121, 48, 91, 37, 93, 44, 120, 49, 91, 37, 93, 44, 121, 49, 91, > 37, 93, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, > 116, 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, > 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, > 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, > 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, > 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, > 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 46, 32, 73, 102, 32, 97, 32, 112, 97, > 116, 116, 101, 114, 110, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 44, 32, 116, 104, 101, 32, 114, 101, 99, 116, 97, 110, 103, 108, > 101, 32, 105, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 100, 114, > 97, 119, 110, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 105, 110, 115, > 116, 101, 97, 100, 32, 111, 102, 32, 102, 105, 108, 108, 101, 100, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, 99, 105, 116, > 121, 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, > 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, > 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 51, 48, 32, 45, 114, 101, 99, > 116, 97, 110, 103, 108, 101, 32, 123, 63, 40, 49, 48, 48, 41, 125, 37, > 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 49, 48, > 48, 41, 125, 37, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 48, > 46, 51, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, > 10, 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 53, 61, 49, 125, 44, 36, 123, 54, 61, 48, 125, > 10, 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 53, 34, 39, 125, 41, > 32, 105, 115, 95, 112, 97, 116, 116, 101, 114, 110, 61, 123, 64, 123, 45, > 49, 44, 48, 45, 49, 125, 39, 61, 61, 39, 123, 39, 48, 120, 39, 125, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 45, > 105, 102, 32, 36, 105, 115, 95, 112, 97, 116, 116, 101, 114, 110, 10, 45, > 101, 91, 48, 45, 45, 51, 93, 32, 34, 68, 114, 97, 119, 32, 111, 117, > 116, 108, 105, 110, 101, 100, 32, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 32, 102, 114, 111, 109, 32, 40, 36, 49, 44, 36, 50, 41, 32, 116, 111, > 32, 40, 36, 51, 44, 36, 52, 41, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 53, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, > 36, 123, 55, 45, 45, 49, 125, 41, 46, 34, 10, 45, 101, 108, 115, 101, > 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 68, 114, 97, 119, 32, > 102, 105, 108, 108, 101, 100, 32, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 32, 102, 114, 111, 109, 32, 40, 36, 49, 44, 36, 50, 41, 32, 116, 111, > 32, 40, 36, 51, 44, 36, 52, 41, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 53, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, > 36, 123, 54, 45, 45, 49, 125, 41, 46, 34, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 118, 32, 45, 32, 45, 112, 111, 108, 121, 103, 111, 110, 32, > 52, 44, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 50, 44, 36, 51, > 44, 36, 52, 44, 36, 49, 44, 36, 52, 44, 36, 123, 53, 45, 45, 49, > 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 111, > 114, 115, 99, 104, 97, 99, 104, 32, 58, 32, 39, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 39, 44, 39, 109, 105, > 114, 114, 111, 114, 105, 110, 103, 61, 123, 32, 48, 61, 110, 111, 110, 101, > 32, 124, 32, 49, 61, 120, 32, 124, 32, 50, 61, 121, 32, 124, 32, 51, > 61, 120, 121, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 110, 100, 101, 114, 32, 114, 111, 114, 115, 99, 104, 97, 99, 104, 45, > 108, 105, 107, 101, 32, 105, 110, 107, 98, 108, 111, 116, 115, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 61, 53, 37, 39, 32, 97, 110, 100, 32, 39, > 109, 105, 114, 114, 111, 114, 105, 110, 103, 61, 49, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, > 32, 45, 114, 111, 114, 115, 99, 104, 97, 99, 104, 32, 51, 37, 10, 114, > 111, 114, 115, 99, 104, 97, 99, 104, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 53, 37, 125, 62, 61, 48, 32, 38, 38, > 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 49, 125, 41, 32, 38, > 38, 32, 36, 50, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 51, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, > 114, 32, 114, 111, 114, 115, 99, 104, 97, 99, 104, 45, 108, 105, 107, 101, > 32, 105, 110, 107, 98, 108, 111, 116, 115, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 32, 36, 49, 32, 97, 110, 100, 32, 34, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 36, 50, 44, 110, 111, 44, 120, 44, > 121, 44, 120, 121, 125, 34, 45, 109, 105, 114, 114, 111, 114, 105, 110, 103, > 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 50, 61, > 61, 48, 125, 10, 45, 114, 97, 110, 100, 32, 45, 49, 44, 49, 32, 45, > 98, 32, 36, 49, 32, 45, 103, 101, 32, 48, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 50, 61, 61, 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, > 10, 45, 99, 111, 108, 117, 109, 110, 115, 32, 48, 44, 123, 119, 47, 50, > 45, 49, 125, 32, 45, 114, 97, 110, 100, 32, 45, 49, 44, 49, 32, 45, > 98, 32, 36, 49, 32, 45, 103, 101, 32, 48, 10, 45, 45, 109, 105, 114, > 114, 111, 114, 32, 120, 32, 45, 105, 102, 32, 123, 36, 119, 37, 50, 125, > 32, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 49, 44, > 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 120, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 50, 61, 61, 50, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 104, 61, 123, > 104, 125, 10, 45, 114, 111, 119, 115, 32, 48, 44, 123, 104, 47, 50, 45, > 49, 125, 32, 45, 114, 97, 110, 100, 32, 45, 49, 44, 49, 32, 45, 98, > 32, 36, 49, 32, 45, 103, 101, 32, 48, 10, 45, 45, 109, 105, 114, 114, > 111, 114, 32, 121, 32, 45, 105, 102, 32, 123, 36, 104, 37, 50, 125, 32, > 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 121, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 50, 61, 61, 51, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, > 61, 123, 104, 125, 10, 45, 122, 32, 48, 44, 48, 44, 123, 119, 47, 50, > 45, 49, 125, 44, 123, 104, 47, 50, 45, 49, 125, 32, 45, 114, 97, 110, > 100, 32, 45, 49, 44, 49, 32, 45, 98, 32, 36, 49, 32, 45, 103, 101, > 32, 48, 10, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 105, > 102, 32, 123, 36, 119, 37, 50, 125, 32, 45, 99, 111, 108, 117, 109, 110, > 115, 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 97, 32, 120, 10, 45, 45, 109, 105, 114, 114, 111, > 114, 32, 121, 32, 45, 105, 102, 32, 123, 36, 104, 37, 50, 125, 32, 45, > 114, 111, 119, 115, 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 105, 101, 114, 112, > 105, 110, 115, 107, 105, 32, 58, 32, 114, 101, 99, 117, 114, 115, 105, 111, > 110, 95, 108, 101, 118, 101, 108, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 114, 97, 119, 32, 83, 105, 101, 114, 112, 105, 110, > 115, 107, 105, 32, 116, 114, 105, 97, 110, 103, 108, 101, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 101, 99, 117, 114, 115, > 105, 111, 110, 95, 108, 101, 118, 101, 108, 61, 55, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 55, > 10, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 36, 123, 49, 61, 55, 125, 62, 61, 48, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 50, 61, 53, 48, 125, 44, 36, 123, 51, > 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 49, > 48, 48, 125, 44, 36, 123, 54, 61, 49, 48, 48, 125, 44, 36, 123, 55, > 61, 49, 48, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, > 114, 97, 119, 32, 83, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 116, > 114, 105, 97, 110, 103, 108, 101, 32, 111, 102, 32, 100, 101, 103, 114, 101, > 101, 32, 36, 49, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 95, 115, 105, 101, 114, 112, 105, 110, > 115, 107, 105, 32, 36, 123, 50, 45, 55, 125, 44, 36, 49, 32, 32, 45, > 118, 32, 43, 10, 95, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, > 58, 10, 45, 105, 102, 32, 123, 36, 55, 60, 61, 48, 125, 32, 45, 112, > 111, 108, 121, 103, 111, 110, 32, 51, 44, 36, 49, 37, 44, 36, 50, 37, > 44, 36, 51, 37, 44, 36, 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, > 44, 49, 44, 50, 53, 53, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 95, 115, 105, 101, 114, 112, 105, 110, 115, > 107, 105, 32, 36, 49, 44, 36, 50, 44, 123, 40, 36, 49, 43, 36, 51, > 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, 52, 41, 47, 50, 125, > 44, 123, 40, 36, 49, 43, 36, 53, 41, 47, 50, 125, 44, 123, 40, 36, > 50, 43, 36, 54, 41, 47, 50, 125, 44, 123, 36, 55, 45, 49, 125, 10, > 45, 95, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 123, 40, 36, > 49, 43, 36, 51, 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, 52, > 41, 47, 50, 125, 44, 36, 51, 44, 36, 52, 44, 123, 40, 36, 51, 43, > 36, 53, 41, 47, 50, 125, 44, 123, 40, 36, 52, 43, 36, 54, 41, 47, > 50, 125, 44, 123, 36, 55, 45, 49, 125, 10, 45, 95, 115, 105, 101, 114, > 112, 105, 110, 115, 107, 105, 32, 123, 40, 36, 49, 43, 36, 53, 41, 47, > 50, 125, 44, 123, 40, 36, 50, 43, 36, 54, 41, 47, 50, 125, 44, 36, > 53, 44, 36, 54, 44, 123, 40, 36, 51, 43, 36, 53, 41, 47, 50, 125, > 44, 123, 40, 36, 52, 43, 36, 54, 41, 47, 50, 125, 44, 123, 36, 55, > 45, 49, 125, 10, 35, 64, 103, 109, 105, 99, 32, 115, 110, 111, 119, 102, > 108, 97, 107, 101, 32, 58, 32, 95, 114, 101, 99, 117, 114, 115, 105, 111, > 110, 62, 61, 48, 44, 95, 120, 48, 44, 95, 121, 48, 44, 95, 120, 49, > 44, 95, 121, 49, 44, 95, 120, 50, 44, 95, 121, 50, 44, 95, 111, 112, > 97, 99, 105, 116, 121, 44, 95, 99, 111, 108, 49, 44, 46, 46, 46, 95, > 99, 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, > 97, 119, 32, 97, 32, 75, 111, 99, 104, 32, 115, 110, 111, 119, 102, 108, > 97, 107, 101, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 114, 101, 99, 117, 114, 115, 105, 111, 110, 61, 52, 39, 44, 32, > 39, 120, 48, 61, 50, 48, 39, 44, 32, 39, 121, 48, 61, 55, 48, 39, > 44, 32, 39, 120, 49, 61, 56, 48, 39, 44, 32, 39, 121, 49, 61, 55, > 48, 39, 44, 32, 39, 120, 50, 61, 53, 48, 39, 44, 32, 39, 121, 50, > 61, 49, 48, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, > 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 49, 61, 50, 53, 53, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 115, 110, 111, 119, 102, 108, 97, 107, > 101, 32, 52, 10, 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 52, 125, 62, 61, 48, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 48, 125, 44, 36, > 123, 51, 61, 55, 48, 125, 44, 36, 123, 52, 61, 56, 48, 125, 44, 36, > 123, 53, 61, 55, 48, 125, 44, 36, 123, 54, 61, 53, 48, 125, 44, 36, > 123, 55, 61, 49, 48, 125, 44, 36, 123, 56, 61, 49, 125, 44, 36, 123, > 57, 61, 50, 53, 53, 125, 10, 45, 118, 32, 45, 10, 45, 112, 111, 108, > 121, 103, 111, 110, 32, 51, 44, 36, 50, 37, 44, 36, 51, 37, 44, 36, > 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, 44, 36, 55, 37, 44, 36, > 123, 56, 45, 45, 49, 125, 10, 45, 95, 115, 110, 111, 119, 102, 108, 97, > 107, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 54, 44, 36, > 55, 44, 36, 123, 56, 45, 45, 49, 125, 10, 45, 95, 115, 110, 111, 119, > 102, 108, 97, 107, 101, 32, 36, 49, 44, 36, 54, 44, 36, 55, 44, 36, > 52, 44, 36, 53, 44, 36, 123, 56, 45, 45, 49, 125, 10, 45, 95, 115, > 110, 111, 119, 102, 108, 97, 107, 101, 32, 36, 49, 44, 36, 52, 44, 36, > 53, 44, 36, 50, 44, 36, 51, 44, 36, 123, 56, 45, 45, 49, 125, 10, > 45, 118, 32, 43, 10, 95, 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, > 58, 10, 120, 48, 61, 123, 36, 50, 43, 40, 36, 52, 45, 36, 50, 41, > 47, 51, 125, 32, 121, 48, 61, 123, 36, 51, 43, 40, 36, 53, 45, 36, > 51, 41, 47, 51, 125, 10, 120, 49, 61, 123, 36, 50, 43, 50, 42, 40, > 36, 52, 45, 36, 50, 41, 47, 51, 125, 32, 121, 49, 61, 123, 36, 51, > 43, 50, 42, 40, 36, 53, 45, 36, 51, 41, 47, 51, 125, 10, 99, 61, > 123, 99, 111, 115, 40, 45, 112, 105, 47, 51, 41, 125, 32, 115, 61, 123, > 115, 105, 110, 40, 45, 112, 105, 47, 51, 41, 125, 10, 120, 50, 61, 123, > 36, 120, 48, 43, 40, 36, 120, 49, 45, 36, 120, 48, 41, 42, 36, 99, > 45, 40, 36, 121, 49, 45, 36, 121, 48, 41, 42, 36, 115, 125, 32, 121, > 50, 61, 123, 36, 121, 48, 43, 40, 36, 120, 49, 45, 36, 120, 48, 41, > 42, 36, 115, 43, 40, 36, 121, 49, 45, 36, 121, 48, 41, 42, 36, 99, > 125, 10, 45, 112, 111, 108, 121, 103, 111, 110, 32, 51, 44, 36, 120, 48, > 37, 44, 36, 121, 48, 37, 44, 36, 120, 49, 37, 44, 36, 121, 49, 37, > 44, 36, 120, 50, 37, 44, 36, 121, 50, 37, 44, 36, 123, 54, 45, 45, > 49, 125, 10, 45, 105, 102, 32, 36, 49, 10, 45, 95, 115, 110, 111, 119, > 102, 108, 97, 107, 101, 32, 123, 36, 49, 45, 49, 125, 44, 36, 50, 44, > 36, 51, 44, 36, 120, 48, 44, 36, 121, 48, 44, 36, 123, 54, 45, 45, > 49, 125, 10, 45, 95, 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, 123, > 36, 49, 45, 49, 125, 44, 36, 120, 48, 44, 36, 121, 48, 44, 36, 120, > 50, 44, 36, 121, 50, 44, 36, 123, 54, 45, 45, 49, 125, 10, 45, 95, > 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, 123, 36, 49, 45, 49, 125, > 44, 36, 120, 50, 44, 36, 121, 50, 44, 36, 120, 49, 44, 36, 121, 49, > 44, 36, 123, 54, 45, 45, 49, 125, 10, 45, 95, 115, 110, 111, 119, 102, > 108, 97, 107, 101, 32, 123, 36, 49, 45, 49, 125, 44, 36, 120, 49, 44, > 36, 121, 49, 44, 36, 52, 44, 36, 53, 44, 36, 123, 54, 45, 45, 49, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 112, 105, 114, 97, 108, 98, 119, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 114, 97, 119, 32, 40, 115, 113, 117, 97, 114, 101, 100, 41, > 32, 115, 112, 105, 114, 97, 108, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 49, 54, 44, 49, 54, 32, 45, 115, 112, > 105, 114, 97, 108, 98, 119, 10, 115, 112, 105, 114, 97, 108, 98, 119, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, > 40, 115, 113, 117, 97, 114, 101, 100, 41, 32, 98, 108, 97, 99, 107, 32, > 97, 110, 100, 32, 119, 104, 105, 116, 101, 32, 115, 112, 105, 114, 97, 108, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 10, 45, > 102, 32, 34, 114, 61, 109, 105, 110, 40, 120, 44, 121, 44, 119, 45, 49, > 45, 120, 44, 104, 45, 49, 45, 121, 41, 59, 32, 50, 42, 114, 42, 40, > 119, 43, 104, 45, 50, 42, 114, 45, 49, 41, 32, 43, 32, 105, 102, 40, > 109, 105, 110, 40, 120, 44, 104, 45, 49, 45, 121, 41, 62, 61, 109, 105, > 110, 40, 119, 45, 49, 45, 120, 44, 121, 41, 44, 120, 43, 121, 44, 50, > 42, 40, 119, 43, 104, 45, 50, 45, 50, 42, 114, 41, 45, 120, 45, 121, > 41, 34, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 112, 108, 105, 110, 101, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, 48, > 91, 37, 93, 44, 117, 48, 91, 37, 93, 44, 118, 48, 91, 37, 93, 44, > 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 117, 49, 91, 37, > 93, 44, 118, 49, 91, 37, 93, 44, 95, 110, 98, 95, 118, 101, 114, 116, > 105, 99, 101, 115, 62, 61, 50, 44, 95, 111, 112, 97, 99, 105, 116, 121, > 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, 115, 112, 108, 105, > 110, 101, 32, 99, 117, 114, 118, 101, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, 99, 117, 98, > 105, 99, 32, 104, 101, 114, 109, 105, 116, 101, 32, 115, 112, 108, 105, 110, > 101, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, > 95, 118, 101, 114, 116, 105, 99, 101, 115, 61, 50, 53, 54, 39, 44, 32, > 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, > 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 51, 48, 32, 45, 115, 112, 108, > 105, 110, 101, 32, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, > 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 45, 54, 48, 48, 44, > 54, 48, 48, 41, 125, 44, 123, 63, 40, 45, 54, 48, 48, 44, 54, 48, > 48, 41, 125, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, > 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 45, 54, 48, 48, 44, > 54, 48, 48, 41, 125, 44, 123, 63, 40, 45, 54, 48, 48, 44, 54, 48, > 48, 41, 125, 44, 50, 53, 54, 44, 48, 46, 51, 44, 50, 53, 53, 32, > 45, 100, 111, 110, 101, 10, 115, 112, 108, 105, 110, 101, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 57, 61, 50, 53, 54, 125, 44, 36, 123, > 49, 48, 61, 49, 125, 44, 36, 123, 49, 49, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 115, 112, 108, 105, > 110, 101, 32, 102, 114, 111, 109, 32, 40, 36, 49, 44, 36, 50, 41, 32, > 91, 36, 51, 44, 36, 52, 93, 32, 116, 111, 32, 40, 36, 53, 44, 36, > 54, 41, 32, 91, 36, 55, 44, 36, 56, 93, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 57, 32, 118, > 101, 114, 116, 105, 99, 101, 115, 44, 32, 111, 112, 97, 99, 105, 116, 121, > 32, 36, 49, 48, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, > 36, 123, 49, 49, 45, 45, 49, 125, 41, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 120, 48, 61, 123, 105, 102, 40, 64, 123, 34, 45, 105, 115, > 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 49, 34, 125, 44, 36, 49, > 42, 40, 119, 45, 49, 41, 44, 36, 49, 41, 125, 10, 121, 48, 61, 123, > 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 32, 36, 50, 34, 125, 44, 36, 50, 42, 40, 104, 45, 49, 41, 44, > 36, 50, 41, 125, 10, 117, 48, 61, 123, 105, 102, 40, 64, 123, 34, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 51, 34, 125, 44, > 36, 51, 42, 40, 119, 45, 49, 41, 44, 36, 51, 41, 125, 10, 118, 48, > 61, 123, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 32, 36, 52, 34, 125, 44, 36, 52, 42, 40, 104, 45, 49, > 41, 44, 36, 52, 41, 125, 10, 120, 49, 61, 123, 105, 102, 40, 64, 123, > 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 53, 34, > 125, 44, 36, 53, 42, 40, 119, 45, 49, 41, 44, 36, 53, 41, 125, 10, > 121, 49, 61, 123, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 32, 36, 54, 34, 125, 44, 36, 54, 42, 40, 104, > 45, 49, 41, 44, 36, 54, 41, 125, 10, 117, 49, 61, 123, 105, 102, 40, > 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, > 55, 34, 125, 44, 36, 55, 42, 40, 119, 45, 49, 41, 44, 36, 55, 41, > 125, 10, 118, 49, 61, 123, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, > 112, 101, 114, 99, 101, 110, 116, 32, 36, 56, 34, 125, 44, 36, 56, 42, > 40, 104, 45, 49, 41, 44, 36, 56, 41, 125, 10, 45, 115, 112, 108, 105, > 110, 101, 51, 100, 32, 36, 120, 48, 44, 36, 121, 48, 44, 48, 44, 36, > 117, 48, 44, 36, 118, 48, 44, 48, 44, 36, 120, 49, 44, 36, 121, 49, > 44, 48, 44, 36, 117, 49, 44, 36, 118, 49, 44, 48, 44, 36, 57, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 56, 44, 123, 56, 43, 51, 42, 36, > 57, 45, 49, 125, 44, 48, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 99, 111, 108, > 51, 100, 91, 49, 93, 32, 36, 123, 49, 49, 45, 45, 49, 125, 32, 45, > 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, 93, 32, 91, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 36, 49, 48, 44, 49, 44, 48, 44, 48, 32, > 45, 114, 109, 91, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 116, 101, 120, 116, > 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 116, 101, 120, 116, 32, 58, 32, 116, 101, 120, 116, 44, 95, 120, 91, 37, > 93, 44, 95, 121, 91, 37, 93, 44, 95, 102, 111, 110, 116, 95, 104, 101, > 105, 103, 104, 116, 62, 61, 48, 44, 95, 111, 112, 97, 99, 105, 116, 121, > 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, > 100, 32, 116, 101, 120, 116, 32, 115, 116, 114, 105, 110, 103, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 116, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 120, 97, 99, 116, 32, 112, 114, 101, 45, 100, 101, 102, > 105, 110, 101, 100, 32, 115, 105, 122, 101, 115, 32, 97, 114, 101, 32, 39, > 49, 51, 39, 44, 39, 50, 51, 39, 44, 39, 53, 51, 39, 32, 97, 110, > 100, 32, 39, 49, 48, 51, 39, 46, 32, 85, 115, 105, 110, 103, 32, 116, > 104, 101, 115, 101, 32, 115, 105, 122, 101, 115, 32, 101, 110, 115, 117, 114, > 101, 115, 32, 121, 111, 117, 32, 100, 114, 97, 119, 32, 98, 105, 110, 97, > 114, 121, 32, 108, 101, 116, 116, 101, 114, 115, 32, 119, 105, 116, 104, 111, > 117, 116, 32, 97, 110, 116, 105, 45, 97, 108, 105, 97, 115, 105, 110, 103, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 110, 121, 32, 111, > 116, 104, 101, 114, 32, 102, 111, 110, 116, 32, 115, 105, 122, 101, 32, 105, > 115, 32, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 102, > 114, 111, 109, 32, 97, 110, 32, 101, 120, 97, 99, 116, 32, 115, 105, 122, > 101, 32, 40, 116, 104, 101, 32, 117, 112, 112, 101, 114, 32, 119, 104, 101, > 110, 32, 112, 111, 115, 115, 105, 98, 108, 101, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 83, 112, 101, 99, 105, 102, 121, 105, 110, 103, > 32, 97, 110, 32, 101, 109, 112, 116, 121, 32, 116, 97, 114, 103, 101, 116, > 32, 105, 109, 97, 103, 101, 32, 114, 101, 115, 105, 122, 101, 115, 32, 105, > 116, 32, 116, 111, 32, 110, 101, 119, 32, 100, 105, 109, 101, 110, 115, 105, > 111, 110, 115, 32, 115, 117, 99, 104, 32, 116, 104, 97, 116, 32, 116, 104, > 101, 32, 105, 109, 97, 103, 101, 32, 99, 111, 110, 116, 97, 105, 110, 115, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 116, 104, 101, 32, 101, 110, > 116, 105, 114, 101, 32, 116, 101, 120, 116, 32, 115, 116, 114, 105, 110, 103, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, 99, > 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, > 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 101, 115, > 105, 122, 101, 50, 100, 121, 32, 54, 48, 48, 32, 121, 61, 48, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 51, 48, 32, 45, 116, 101, 120, 116, 32, > 123, 50, 42, 36, 62, 125, 34, 32, 58, 32, 84, 104, 105, 115, 32, 105, > 115, 32, 97, 32, 110, 105, 99, 101, 32, 116, 101, 120, 116, 44, 32, 105, > 115, 110, 39, 116, 32, 105, 116, 32, 63, 34, 44, 49, 48, 44, 36, 121, > 44, 123, 50, 42, 36, 62, 125, 44, 48, 46, 57, 44, 50, 53, 53, 32, > 121, 61, 123, 36, 121, 43, 50, 42, 36, 62, 125, 32, 45, 100, 111, 110, > 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 48, 32, 45, > 116, 101, 120, 116, 32, 34, 71, 39, 77, 73, 67, 34, 44, 48, 44, 48, > 44, 50, 51, 44, 49, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, > 32, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 58, 32, > 116, 101, 120, 116, 44, 95, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, > 44, 95, 102, 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, > 95, 111, 117, 116, 108, 105, 110, 101, 62, 61, 48, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, > 97, 110, 100, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 116, 101, 120, > 116, 32, 115, 116, 114, 105, 110, 103, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 120, 61, 121, 61, 50, 39, 44, 32, 39, > 102, 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 61, 49, 51, 39, 44, > 32, 39, 111, 117, 116, 108, 105, 110, 101, 61, 50, 39, 44, 32, 39, 111, > 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 99, > 111, 108, 111, 114, 49, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 34, > 72, 105, 32, 116, 104, 101, 114, 101, 33, 34, 44, 49, 48, 44, 49, 48, > 44, 54, 51, 44, 51, 10, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, > 110, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, > 125, 44, 36, 123, 51, 61, 50, 125, 44, 36, 123, 52, 61, 49, 51, 125, > 44, 36, 123, 53, 61, 50, 125, 44, 36, 123, 54, 61, 49, 125, 44, 36, > 123, 55, 61, 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 68, 114, 97, 119, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 116, > 101, 120, 116, 32, 39, 36, 49, 39, 32, 97, 116, 32, 112, 111, 115, 105, > 116, 105, 111, 110, 32, 40, 36, 50, 44, 36, 51, 41, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 102, 111, > 110, 116, 32, 104, 101, 105, 103, 104, 116, 32, 36, 52, 44, 32, 111, 117, > 116, 108, 105, 110, 101, 32, 36, 53, 44, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 54, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 36, > 123, 55, 45, 45, 49, 125, 46, 34, 10, 45, 118, 32, 45, 32, 45, 105, > 102, 32, 36, 53, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, > 49, 34, 44, 48, 44, 48, 44, 36, 52, 44, 49, 44, 36, 123, 55, 45, > 45, 49, 125, 44, 49, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, > 91, 45, 49, 93, 32, 123, 49, 43, 36, 53, 125, 44, 48, 10, 45, 115, > 91, 45, 49, 93, 32, 99, 44, 123, 45, 110, 97, 114, 103, 40, 36, 123, > 55, 45, 45, 49, 125, 41, 125, 32, 45, 100, 105, 108, 97, 116, 101, 91, > 45, 49, 93, 32, 123, 50, 42, 36, 53, 43, 49, 125, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 32, 45, 108, 91, 36, > 62, 44, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 64, 123, 48, > 44, 119, 125, 10, 45, 105, 102, 32, 123, 64, 123, 48, 44, 115, 125, 61, > 61, 64, 123, 49, 44, 115, 125, 125, 32, 45, 106, 91, 48, 93, 32, 91, > 49, 93, 44, 36, 50, 44, 36, 51, 44, 48, 44, 48, 44, 36, 54, 44, > 91, 50, 93, 10, 45, 101, 108, 115, 101, 32, 45, 45, 114, 91, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 64, 123, 48, > 44, 115, 125, 44, 48, 44, 49, 32, 45, 106, 91, 48, 93, 32, 91, 51, > 93, 44, 36, 50, 44, 36, 51, 44, 48, 44, 48, 44, 36, 54, 44, 91, > 50, 93, 32, 45, 114, 109, 91, 51, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 48, 93, 32, 45, 105, > 91, 48, 93, 32, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 116, 32, 34, > 36, 49, 34, 44, 36, 123, 50, 45, 52, 125, 44, 36, 123, 54, 45, 45, > 49, 125, 10, 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 116, 114, 105, 97, 110, 103, 108, 101, 95, 115, > 104, 97, 100, 101, 32, 58, 32, 120, 48, 44, 121, 48, 44, 120, 49, 44, > 121, 48, 44, 120, 50, 44, 121, 50, 44, 82, 48, 44, 71, 48, 44, 66, > 48, 44, 46, 46, 46, 44, 82, 49, 44, 71, 49, 44, 66, 49, 44, 46, > 46, 46, 44, 82, 50, 44, 71, 50, 44, 66, 50, 44, 46, 46, 46, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 116, > 114, 105, 97, 110, 103, 108, 101, 32, 119, 105, 116, 104, 32, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 99, 111, 108, 111, 114, 115, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 114, 105, 97, 110, > 103, 108, 101, 95, 115, 104, 97, 100, 101, 32, 50, 48, 44, 50, 48, 44, > 52, 48, 48, 44, 49, 48, 48, 44, 49, 50, 48, 44, 50, 48, 48, 44, > 50, 53, 53, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 44, 48, 44, > 48, 44, 48, 44, 50, 53, 53, 10, 116, 114, 105, 97, 110, 103, 108, 101, > 95, 115, 104, 97, 100, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 68, 114, 97, 119, 32, 116, 114, 105, 97, 110, 103, 108, 101, 32, > 40, 36, 49, 44, 36, 50, 41, 45, 40, 36, 51, 44, 36, 52, 41, 45, > 40, 36, 53, 44, 36, 54, 41, 32, 119, 105, 116, 104, 32, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 99, 111, 108, 111, 114, 115, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 10, 45, 108, 91, 93, 32, 40, 36, 49, 44, 36, 50, 44, 49, > 59, 36, 51, 44, 36, 52, 44, 49, 59, 36, 53, 44, 36, 54, 44, 49, > 41, 32, 40, 36, 123, 55, 45, 45, 49, 125, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 123, 119, 47, 51, 125, 44, 51, 44, 49, 44, 49, 44, 45, > 49, 32, 45, 115, 91, 45, 49, 93, 32, 120, 32, 45, 115, 111, 108, 118, > 101, 91, 94, 48, 93, 32, 91, 48, 93, 32, 45, 114, 109, 91, 48, 93, > 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 10, 45, 112, 111, 108, > 121, 103, 111, 110, 91, 94, 45, 49, 93, 32, 51, 44, 36, 123, 49, 45, > 54, 125, 44, 49, 44, 45, 54, 53, 53, 51, 53, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, > 44, 45, 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, > 44, 115, 125, 10, 97, 61, 123, 105, 40, 48, 44, 48, 44, 48, 44, 36, > 62, 41, 125, 32, 98, 61, 123, 105, 40, 48, 44, 49, 44, 48, 44, 36, > 62, 41, 125, 32, 99, 61, 123, 105, 40, 48, 44, 50, 44, 48, 44, 36, > 62, 41, 125, 10, 45, 115, 104, 91, 48, 93, 32, 36, 62, 44, 36, 62, > 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, > 54, 53, 53, 51, 53, 44, 36, 97, 42, 120, 43, 36, 98, 42, 121, 43, > 36, 99, 44, 105, 41, 39, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 114, 117, 99, 104, 101, 116, 32, 58, 32, 95, > 115, 99, 97, 108, 101, 62, 48, 44, 95, 114, 97, 100, 105, 117, 115, 62, > 61, 48, 44, 95, 112, 97, 116, 116, 101, 114, 110, 95, 116, 121, 112, 101, > 61, 123, 32, 48, 61, 115, 116, 114, 97, 105, 103, 104, 116, 32, 124, 32, > 49, 61, 99, 117, 114, 118, 101, 100, 32, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 70, 105, 108, 108, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 114, 97, > 110, 100, 111, 109, 32, 116, 114, 117, 99, 104, 101, 116, 32, 112, 97, 116, > 116, 101, 114, 110, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 115, 99, 97, 108, 101, 61, 51, 50, 39, 44, 32, 39, 114, 97, 100, > 105, 117, 115, 61, 53, 39, 32, 97, 110, 100, 32, 39, 112, 97, 116, 116, > 101, 114, 110, 95, 116, 121, 112, 101, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 51, 48, 48, 32, > 45, 116, 114, 117, 99, 104, 101, 116, 32, 44, 10, 116, 114, 117, 99, 104, > 101, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, > 110, 116, 40, 36, 123, 49, 61, 51, 50, 125, 41, 32, 38, 38, 32, 36, > 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 34, > 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 51, 44, 99, 117, > 114, 118, 101, 100, 44, 115, 116, 114, 97, 105, 103, 104, 116, 125, 34, 32, > 116, 114, 117, 99, 104, 101, 116, 32, 112, 97, 116, 116, 101, 114, 110, 115, > 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 115, 99, 97, 108, 101, 32, 36, 49, 32, 97, 110, 100, 32, 114, > 97, 100, 105, 117, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 61, 123, 119, > 125, 32, 104, 61, 123, 104, 125, 32, 115, 61, 123, 115, 125, 32, 45, 114, > 109, 10, 36, 49, 44, 36, 49, 32, 45, 61, 32, 49, 44, 48, 44, 48, > 32, 45, 61, 32, 49, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, 49, 44, 123, 49, 43, 36, > 51, 125, 32, 77, 61, 123, 105, 110, 116, 40, 105, 77, 47, 50, 41, 125, > 10, 45, 116, 50, 32, 123, 36, 77, 45, 36, 50, 47, 50, 45, 40, 36, > 49, 37, 50, 41, 125, 44, 123, 36, 77, 43, 36, 50, 47, 50, 125, 32, > 45, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 97, 32, 120, 10, > 123, 114, 111, 117, 110, 100, 40, 36, 119, 47, 36, 49, 44, 49, 44, 49, > 41, 125, 44, 123, 114, 111, 117, 110, 100, 40, 36, 104, 47, 36, 49, 44, > 49, 44, 49, 41, 125, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 37, 32, > 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 36, 49, 125, 44, 123, 104, > 42, 36, 49, 125, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 10, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 49, > 32, 40, 48, 44, 123, 36, 49, 45, 49, 125, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 51, 32, 45, > 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, 32, 45, 43, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 103, 101, 32, > 53, 48, 37, 32, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, > 44, 48, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 36, 115, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 117, 114, 98, 117, 108, 101, 110, 99, > 101, 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, 62, 48, 44, 95, 111, > 99, 116, 97, 118, 101, 115, 61, 123, 49, 44, 50, 44, 51, 46, 46, 46, > 44, 49, 50, 125, 44, 95, 97, 108, 112, 104, 97, 62, 48, 44, 95, 100, > 105, 102, 102, 101, 114, 101, 110, 99, 101, 61, 123, 45, 49, 48, 44, 49, > 48, 125, 44, 95, 109, 111, 100, 101, 61, 123, 48, 44, 49, 44, 50, 44, > 51, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, > 101, 114, 32, 102, 114, 97, 99, 116, 97, 108, 32, 110, 111, 105, 115, 101, > 32, 111, 114, 32, 116, 117, 114, 98, 117, 108, 101, 110, 99, 101, 32, 111, > 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 97, 100, > 105, 117, 115, 61, 51, 50, 39, 44, 32, 39, 111, 99, 116, 97, 118, 101, > 115, 61, 54, 39, 44, 32, 39, 97, 108, 112, 104, 97, 61, 51, 39, 44, > 32, 39, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 109, 111, 100, 101, 61, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, > 44, 49, 44, 51, 32, 45, 116, 117, 114, 98, 117, 108, 101, 110, 99, 101, > 32, 49, 54, 10, 116, 117, 114, 98, 117, 108, 101, 110, 99, 101, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 51, 50, 125, > 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 54, 125, 62, 48, 34, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 51, 125, 44, 36, 123, 52, > 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 102, 114, 97, 99, 116, > 97, 108, 32, 110, 111, 105, 115, 101, 32, 111, 114, 32, 116, 117, 114, 98, > 117, 108, 101, 110, 99, 101, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, > 49, 44, 32, 111, 99, 116, 97, 118, 101, 115, 32, 36, 50, 44, 32, 100, > 97, 109, 112, 105, 110, 103, 32, 112, 101, 114, 32, 111, 99, 116, 97, 118, > 101, 32, 36, 51, 44, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, > 32, 36, 52, 32, 97, 110, 100, 32, 109, 111, 100, 101, 32, 36, 53, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, > 110, 125, 10, 45, 105, 102, 32, 123, 36, 52, 125, 32, 91, 45, 49, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 91, 45, 49, 93, 32, 48, > 32, 45, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 49, 48, 44, > 48, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 44, 48, 10, 45, 105, > 102, 32, 123, 36, 53, 61, 61, 48, 124, 124, 36, 53, 61, 61, 49, 125, > 32, 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 49, 44, 97, 125, 32, > 45, 97, 98, 115, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 53, 61, 61, 51, 124, 124, 36, 53, 61, 61, 52, 125, 32, 45, 94, > 91, 45, 49, 93, 32, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, > 61, 61, 53, 125, 32, 45, 94, 91, 45, 49, 93, 32, 51, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 50, > 45, 49, 125, 10, 45, 45, 110, 111, 105, 115, 101, 91, 45, 50, 93, 32, > 49, 48, 44, 48, 32, 45, 98, 91, 45, 49, 93, 32, 123, 36, 49, 47, > 50, 94, 36, 62, 125, 44, 48, 10, 45, 105, 102, 32, 123, 36, 53, 61, > 61, 48, 125, 32, 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 49, 44, > 97, 125, 32, 45, 97, 98, 115, 91, 45, 49, 93, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 53, 61, 61, 52, 125, 32, 45, 94, 91, 45, 49, 93, > 32, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 53, 125, > 32, 45, 94, 91, 45, 49, 93, 32, 51, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 42, 91, 45, 50, 93, 32, 36, 51, 32, 45, 43, 91, 45, 50, > 45, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 110, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 105, 102, 32, 123, 36, 52, 125, 32, 45, 42, 91, 45, 49, 93, 32, > 36, 52, 32, 45, 109, 118, 91, 45, 50, 93, 32, 50, 32, 45, 45, 32, > 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 121, 105, 110, 121, 97, 110, 103, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 97, 32, 121, 105, > 110, 45, 121, 97, 110, 103, 32, 115, 121, 109, 98, 111, 108, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, > 44, 52, 48, 48, 32, 45, 121, 105, 110, 121, 97, 110, 103, 10, 121, 105, > 110, 121, 97, 110, 103, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 68, 114, 97, 119, 32, 121, 105, 110, 45, 121, 97, 110, 103, 32, 115, > 121, 109, 98, 111, 108, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 102, 32, 48, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 115, > 61, 123, 115, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, > 10, 114, 61, 123, 114, 111, 117, 110, 100, 40, 48, 46, 57, 53, 42, 109, > 105, 110, 40, 119, 44, 104, 41, 47, 52, 41, 125, 10, 45, 45, 108, 105, > 110, 101, 32, 53, 48, 37, 44, 48, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 49, 44, 50, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 53, 48, 37, 44, 123, 104, 47, 50, 45, 36, 114, 125, 44, 36, > 114, 44, 36, 114, 44, 48, 44, 49, 44, 50, 10, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 32, 45, 101, 108, 108, 105, 112, > 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 123, 104, 47, 50, 43, > 36, 114, 125, 44, 36, 114, 44, 36, 114, 44, 48, 44, 49, 44, 49, 10, > 45, 102, 108, 111, 111, 100, 91, 45, 49, 93, 32, 123, 119, 47, 50, 45, > 36, 114, 125, 44, 53, 48, 37, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 50, 10, 45, 102, 108, 111, 111, 100, 91, 45, 49, 93, 32, 123, 119, 47, > 50, 43, 36, 114, 125, 44, 53, 48, 37, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 49, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 50, 93, > 32, 53, 48, 37, 44, 53, 48, 37, 44, 123, 50, 42, 36, 114, 125, 44, > 123, 50, 42, 36, 114, 125, 44, 48, 44, 49, 44, 49, 10, 45, 42, 10, > 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, > 44, 123, 104, 47, 50, 45, 36, 114, 125, 44, 123, 36, 114, 47, 51, 125, > 44, 123, 36, 114, 47, 51, 125, 44, 48, 44, 49, 44, 49, 10, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 123, > 104, 47, 50, 43, 36, 114, 125, 44, 123, 36, 114, 47, 51, 125, 44, 123, > 36, 114, 47, 51, 125, 44, 48, 44, 49, 44, 50, 10, 45, 114, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 36, 115, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 58, 32, 77, 97, 116, 114, 105, 120, 32, > 99, 111, 109, 112, 117, 116, 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, > 105, 99, 32, 100, 105, 106, 107, 115, 116, 114, 97, 32, 58, 32, 115, 116, > 97, 114, 116, 105, 110, 103, 95, 110, 111, 100, 101, 62, 61, 48, 44, 101, > 110, 100, 105, 110, 103, 95, 110, 111, 100, 101, 62, 61, 48, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 100, 105, 115, > 116, 97, 110, 99, 101, 115, 32, 97, 110, 100, 32, 112, 97, 116, 104, 101, > 115, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 97, 100, 106, 97, 99, 101, 110, 99, 121, 32, 109, 97, 116, 114, 105, > 99, 101, 115, 32, 98, 121, 32, 116, 104, 101, 32, 68, 105, 106, 107, 115, > 116, 114, 97, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 101, 105, 103, 101, 110, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 101, 105, 103, 101, 110, 118, 97, 108, 117, > 101, 115, 32, 97, 110, 100, 32, 101, 105, 103, 101, 110, 118, 101, 99, 116, > 111, 114, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 115, 121, 109, 109, 101, 116, 114, 105, 99, 32, 109, 97, 116, 114, 105, 99, > 101, 115, 32, 111, 114, 32, 109, 97, 116, 114, 105, 120, 32, 102, 105, 101, > 108, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, > 32, 111, 110, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 32, 104, 97, 115, 32, 51, 32, 111, 114, 32, 54, 32, 99, > 104, 97, 110, 110, 101, 108, 115, 44, 32, 105, 116, 32, 105, 115, 32, 114, > 101, 103, 97, 114, 100, 101, 100, 32, 97, 115, 32, 97, 32, 102, 105, 101, > 108, 100, 32, 111, 102, 32, 50, 120, 50, 32, 111, 114, 32, 51, 120, 51, > 32, 115, 121, 109, 109, 101, 116, 114, 105, 99, 32, 109, 97, 116, 114, 105, > 99, 101, 115, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 119, 104, > 111, 115, 101, 32, 101, 105, 103, 101, 110, 32, 101, 108, 101, 109, 101, 110, > 116, 115, 32, 97, 114, 101, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, > 97, 116, 32, 101, 97, 99, 104, 32, 112, 111, 105, 110, 116, 32, 111, 102, > 32, 116, 104, 101, 32, 102, 105, 101, 108, 100, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 40, 49, 44, 48, 44, 48, 59, 48, 44, > 50, 44, 48, 59, 48, 44, 48, 44, 51, 41, 32, 45, 45, 101, 105, 103, > 101, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 116, 114, 117, 99, 116, 117, > 114, 101, 116, 101, 110, 115, 111, 114, 115, 32, 45, 98, 108, 117, 114, 32, > 50, 32, 45, 101, 105, 103, 101, 110, 32, 45, 115, 112, 108, 105, 116, 91, > 48, 93, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 105, 110, 118, 101, > 114, 116, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 105, 110, > 118, 101, 114, 115, 101, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 109, 97, 116, 114, 105, 99, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 49, 44, > 48, 59, 48, 44, 48, 44, 49, 59, 49, 44, 48, 44, 48, 41, 32, 45, > 45, 105, 110, 118, 101, 114, 116, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 111, 108, 118, 101, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, > 108, 118, 101, 32, 108, 105, 110, 101, 97, 114, 32, 115, 121, 115, 116, 101, > 109, 32, 65, 88, 32, 61, 32, 66, 32, 102, 111, 114, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 66, 45, 118, 101, 99, 116, 111, 114, 115, 32, > 97, 110, 100, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 65, 45, > 109, 97, 116, 114, 105, 120, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 102, 32, 116, 104, 101, 32, 115, 121, 115, 116, 101, 109, 32, 105, > 115, 32, 117, 110, 100, 101, 114, 45, 32, 111, 114, 32, 111, 118, 101, 114, > 45, 100, 101, 116, 101, 114, 109, 105, 110, 101, 100, 44, 32, 108, 101, 97, > 115, 116, 32, 115, 113, 117, 97, 114, 101, 32, 115, 111, 108, 117, 116, 105, > 111, 110, 32, 105, 115, 32, 114, 101, 116, 117, 114, 110, 101, 100, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 49, 44, > 48, 59, 49, 44, 48, 44, 48, 59, 48, 44, 48, 44, 49, 41, 32, 40, > 49, 59, 50, 59, 51, 41, 32, 45, 45, 115, 111, 108, 118, 101, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 118, 100, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 83, 86, 68, 32, 100, 101, > 99, 111, 109, 112, 111, 115, 105, 116, 105, 111, 110, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 109, 97, 116, 114, 105, 99, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 48, 44, > 49, 48, 44, 49, 44, 49, 44, 39, 105, 102, 40, 120, 61, 61, 121, 44, > 120, 43, 63, 40, 45, 48, 46, 50, 44, 48, 46, 50, 41, 44, 48, 41, > 39, 32, 45, 45, 115, 118, 100, 10, 35, 64, 103, 109, 105, 99, 32, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 84, 114, 97, 110, 115, 112, 111, 115, 101, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 109, 97, 116, 114, 105, 99, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 10, > 116, 114, 97, 110, 115, 112, 111, 115, 101, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 84, 114, 97, 110, 115, 112, 111, 115, 101, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 112, > 101, 114, 109, 117, 116, 101, 32, 121, 120, 122, 99, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 116, 114, 105, 115, 111, 108, 118, 101, > 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, 108, 118, 101, 32, > 116, 114, 105, 100, 105, 97, 103, 111, 110, 97, 108, 32, 115, 121, 115, 116, > 101, 109, 32, 65, 88, 32, 61, 32, 66, 32, 102, 111, 114, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 66, 45, 118, 101, 99, 116, 111, 114, 115, > 32, 97, 110, 100, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 116, > 114, 105, 100, 105, 97, 103, 111, 110, 97, 108, 32, 65, 45, 109, 97, 116, > 114, 105, 120, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, > 105, 100, 105, 97, 103, 111, 110, 97, 108, 32, 109, 97, 116, 114, 105, 120, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 115, 116, 111, 114, 101, 100, 32, > 97, 115, 32, 97, 32, 51, 32, 99, 111, 108, 117, 109, 110, 32, 118, 101, > 99, 116, 111, 114, 44, 32, 119, 104, 101, 114, 101, 32, 50, 110, 100, 32, > 99, 111, 108, 117, 109, 110, 32, 99, 111, 110, 116, 97, 105, 110, 115, 32, > 116, 104, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 100, 105, 97, > 103, 111, 110, 97, 108, 32, 99, 111, 101, 102, 102, 105, 99, 105, 101, 110, > 116, 115, 44, 32, 119, 104, 105, 108, 101, 32, 49, 115, 116, 32, 97, 110, > 100, 32, 51, 114, 100, 32, 99, 111, 108, 117, 109, 110, 115, 32, 99, 111, > 110, 116, 97, 105, 110, 32, 116, 104, 101, 32, 108, 101, 102, 116, 32, 97, > 110, 100, 32, 114, 105, 103, 104, 116, 32, 99, 111, 101, 102, 102, 105, 99, > 105, 101, 110, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 40, 48, 44, 48, 44, 49, 59, 49, 44, 48, 44, 48, 59, 48, > 44, 49, 44, 48, 41, 32, 40, 49, 59, 50, 59, 51, 41, 32, 45, 45, > 116, 114, 105, 115, 111, 108, 118, 101, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 51, 100, 32, 114, > 101, 110, 100, 101, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, > 43, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 97, > 100, 100, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 97, 100, 100, 51, 100, 32, 58, 32, 116, 120, 44, 95, > 116, 121, 44, 95, 116, 122, 32, 58, 32, 91, 111, 98, 106, 101, 99, 116, > 51, 100, 93, 32, 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, > 105, 102, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, > 111, 98, 106, 101, 99, 116, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 100, 105, 115, 112, 108, 97, 99, 101, 109, > 101, 110, 116, 32, 118, 101, 99, 116, 111, 114, 44, 32, 111, 114, 32, 109, > 101, 114, 103, 101, 32, 116, 104, 101, 109, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 44, 32, 111, 114, 32, > 109, 101, 114, 103, 101, 32, 97, 108, 108, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 116, 111, > 103, 101, 116, 104, 101, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 43, 51, 100, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 121, 61, 116, > 122, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, 49, 48, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 53, 32, 45, 45, 97, 100, 100, 51, 100, 91, > 45, 49, 93, 32, 49, 48, 44, 123, 63, 40, 45, 49, 48, 44, 49, 48, > 41, 125, 44, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, > 45, 97, 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 45, 114, 101, 112, 101, 97, 116, 32, 50, 48, 32, 45, 116, 111, > 114, 117, 115, 51, 100, 32, 49, 53, 44, 50, 32, 45, 99, 111, 108, 111, > 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, > 45, 109, 117, 108, 51, 100, 91, 45, 49, 93, 32, 48, 46, 53, 44, 49, > 32, 45, 105, 102, 32, 123, 36, 62, 37, 50, 125, 32, 45, 114, 111, 116, > 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, > 57, 48, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 100, 100, 51, 100, > 91, 45, 49, 93, 32, 55, 48, 32, 45, 97, 100, 100, 51, 100, 32, 45, > 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, > 44, 49, 44, 49, 56, 32, 45, 100, 111, 110, 101, 32, 45, 100, 111, 117, > 98, 108, 101, 51, 100, 32, 48, 10, 35, 64, 103, 109, 105, 99, 32, 97, > 110, 105, 109, 97, 116, 101, 51, 100, 32, 58, 32, 95, 119, 105, 100, 116, > 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 100, > 120, 44, 95, 100, 121, 44, 95, 100, 122, 44, 95, 122, 111, 111, 109, 62, > 61, 48, 44, 95, 102, 105, 108, 101, 110, 97, 109, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 110, 105, 109, 97, 116, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 115, 32, 105, 110, 32, 97, 32, 119, 105, 110, 100, 111, 119, 46, 10, 97, > 110, 105, 109, 97, 116, 101, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 54, 52, 48, 125, 44, 36, 123, 50, 61, 52, 56, > 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 49, 125, > 44, 36, 123, 53, 61, 48, 125, 44, 34, 36, 123, 55, 61, 34, 34, 125, > 34, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 54, 61, 49, 125, 62, > 61, 48, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 110, 105, 109, > 97, 116, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 44, > 32, 105, 110, 32, 97, 32, 36, 49, 120, 36, 50, 32, 119, 105, 110, 100, > 111, 119, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 32, 118, 101, > 108, 111, 99, 105, 116, 105, 101, 115, 32, 40, 36, 51, 44, 36, 52, 44, > 36, 53, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 45, 108, 91, 36, 62, 93, 10, 45, 110, > 51, 100, 32, 45, 42, 51, 100, 32, 123, 36, 54, 42, 109, 105, 110, 40, > 36, 49, 44, 36, 50, 41, 47, 49, 46, 53, 125, 32, 45, 99, 51, 100, > 10, 97, 120, 61, 48, 32, 97, 121, 61, 48, 32, 97, 122, 61, 48, 32, > 102, 114, 97, 109, 101, 61, 48, 10, 45, 100, 111, 10, 45, 45, 114, 51, > 100, 32, 49, 44, 48, 44, 48, 44, 36, 97, 120, 32, 45, 114, 51, 100, > 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 36, 97, 121, 32, 45, > 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, 36, 97, > 122, 10, 97, 120, 61, 123, 36, 97, 120, 43, 36, 51, 125, 32, 97, 121, > 61, 123, 36, 97, 121, 43, 36, 52, 125, 32, 97, 122, 61, 123, 36, 97, > 122, 43, 36, 53, 125, 10, 36, 49, 44, 36, 50, 44, 49, 44, 51, 44, > 45, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 49, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 55, 34, > 41, 125, 10, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, 32, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, > 49, 93, 32, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 45, 49, 44, > 50, 53, 53, 44, 54, 52, 44, 54, 52, 44, 54, 52, 44, 48, 10, 45, > 111, 91, 45, 49, 93, 32, 64, 123, 45, 102, 105, 108, 101, 110, 97, 109, > 101, 92, 32, 34, 36, 55, 34, 44, 36, 62, 44, 36, 102, 114, 97, 109, > 101, 125, 32, 102, 114, 97, 109, 101, 61, 123, 36, 102, 114, 97, 109, 101, > 43, 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 112, 108, 97, > 99, 101, 91, 45, 49, 93, 32, 45, 49, 44, 54, 52, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 119, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, > 104, 125, 44, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 64, 123, 48, > 44, 110, 125, 32, 45, 119, 97, 105, 116, 32, 50, 48, 32, 45, 107, 91, > 48, 93, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, > 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, > 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 32, 45, 114, 109, 32, 45, > 119, 32, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, > 121, 95, 99, 97, 109, 101, 114, 97, 51, 100, 32, 58, 32, 112, 111, 115, > 95, 120, 44, 112, 111, 115, 95, 121, 44, 112, 111, 115, 95, 122, 44, 116, > 97, 114, 103, 101, 116, 95, 120, 44, 116, 97, 114, 103, 101, 116, 95, 121, > 44, 116, 97, 114, 103, 101, 116, 95, 122, 44, 117, 112, 95, 120, 44, 117, > 112, 95, 121, 44, 117, 112, 95, 122, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 51, 100, 32, 99, 97, 109, 101, 114, > 97, 32, 109, 97, 116, 114, 105, 120, 32, 116, 111, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 97, 114, 103, 101, > 116, 95, 120, 61, 48, 39, 44, 32, 39, 116, 97, 114, 103, 101, 116, 95, > 121, 61, 48, 39, 44, 32, 39, 116, 97, 114, 103, 101, 116, 95, 122, 61, > 48, 39, 44, 32, 39, 117, 112, 95, 120, 61, 48, 39, 44, 32, 39, 117, > 112, 95, 121, 61, 45, 49, 39, 32, 97, 110, 100, 32, 39, 117, 112, 95, > 122, 61, 48, 39, 46, 10, 97, 112, 112, 108, 121, 95, 99, 97, 109, 101, > 114, 97, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, > 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 48, > 125, 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, 45, 49, 125, > 44, 36, 123, 57, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 51, 100, 32, 99, 97, 109, 101, 114, 97, > 32, 109, 97, 116, 114, 105, 120, 32, 116, 111, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 36, 63, 44, 32, 119, 105, 116, 104, 32, 99, 97, 109, > 101, 114, 97, 32, 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 36, 49, > 44, 36, 50, 44, 36, 51, 41, 44, 32, 116, 97, 114, 103, 101, 116, 32, > 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 36, 52, 44, 36, 53, 44, > 36, 54, 41, 32, 97, 110, 100, 32, 117, 112, 45, 118, 101, 99, 116, 111, > 114, 32, 40, 36, 55, 44, 36, 56, 44, 36, 57, 41, 46, 34, 10, 45, > 118, 32, 45, 10, 40, 123, 36, 52, 45, 36, 49, 125, 94, 123, 36, 53, > 45, 36, 50, 125, 94, 123, 36, 54, 45, 36, 51, 125, 41, 10, 40, 36, > 55, 94, 36, 56, 94, 36, 57, 41, 10, 45, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 91, 45, 50, 44, 45, 49, 93, 10, 45, 95, 99, > 114, 111, 115, 115, 51, 100, 32, 64, 45, 50, 44, 64, 45, 49, 10, 45, > 95, 99, 114, 111, 115, 115, 51, 100, 32, 64, 45, 49, 44, 64, 45, 51, > 10, 45, 114, 109, 91, 45, 51, 93, 32, 45, 121, 91, 45, 51, 45, 45, > 49, 93, 32, 120, 32, 45, 109, 118, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 51, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 121, 32, 45, > 122, 91, 45, 49, 93, 32, 48, 44, 51, 10, 45, 45, 51, 100, 91, 94, > 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 32, 45, 97, 112, > 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, 91, 94, 45, 49, 93, 32, > 64, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 51, 100, > 32, 48, 44, 48, 44, 56, 48, 48, 10, 45, 118, 32, 43, 10, 95, 99, > 114, 111, 115, 115, 51, 100, 32, 58, 10, 40, 123, 36, 50, 42, 36, 54, > 45, 36, 51, 42, 36, 53, 125, 94, 123, 36, 51, 42, 36, 52, 45, 36, > 49, 42, 36, 54, 125, 94, 123, 36, 49, 42, 36, 53, 45, 36, 50, 42, > 36, 52, 125, 41, 32, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 91, 45, 49, 93, 32, 45, 121, 91, 45, 49, 93, 10, 35, 64, 103, > 109, 105, 99, 32, 97, 112, 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, > 32, 58, 32, 112, 49, 44, 46, 46, 44, 112, 49, 50, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 51, 100, 32, 112, > 111, 115, 101, 32, 109, 97, 116, 114, 105, 120, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, > 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 50, 48, 32, 45, 97, > 112, 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, 32, 48, 46, 49, 53, > 50, 52, 51, 55, 44, 49, 46, 50, 48, 54, 54, 54, 44, 45, 48, 46, > 53, 52, 54, 51, 54, 54, 44, 48, 44, 45, 48, 46, 53, 51, 53, 57, > 54, 50, 44, 48, 46, 53, 53, 57, 49, 50, 57, 44, 49, 46, 48, 56, > 53, 51, 49, 44, 48, 44, 49, 46, 50, 49, 49, 51, 50, 44, 48, 46, > 48, 57, 53, 53, 52, 51, 49, 44, 48, 46, 53, 52, 56, 57, 54, 54, > 44, 48, 44, 48, 44, 48, 44, 45, 50, 48, 54, 44, 49, 32, 45, 115, > 110, 97, 112, 115, 104, 111, 116, 51, 100, 32, 52, 48, 48, 10, 97, 112, > 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 51, 100, 32, 112, > 111, 115, 101, 32, 109, 97, 116, 114, 105, 120, 32, 91, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 44, 36, 52, 59, 32, 36, 53, 44, 36, 54, 44, > 36, 55, 44, 36, 56, 59, 32, 36, 57, 44, 36, 49, 48, 44, 36, 49, > 49, 44, 36, 49, 50, 32, 93, 32, 116, 111, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 51, 100, 125, 10, 45, 115, > 51, 100, 32, 45, 114, 91, 50, 93, 32, 51, 44, 64, 123, 50, 44, 104, > 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 105, 91, 51, 93, > 32, 49, 44, 64, 123, 50, 44, 104, 125, 44, 49, 44, 49, 44, 49, 32, > 45, 97, 91, 50, 44, 51, 93, 32, 120, 10, 45, 105, 91, 51, 93, 32, > 40, 36, 49, 44, 36, 53, 44, 36, 57, 59, 36, 50, 44, 36, 54, 44, > 36, 49, 48, 59, 36, 51, 44, 36, 55, 44, 36, 49, 49, 59, 36, 52, > 44, 36, 56, 44, 36, 49, 50, 41, 32, 45, 42, 42, 91, 50, 44, 51, > 93, 10, 45, 114, 91, 50, 93, 32, 49, 44, 64, 123, 50, 44, 51, 42, > 104, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 97, 32, 121, 10, 45, > 101, 108, 115, 101, 32, 45, 101, 114, 114, 111, 114, 32, 34, 67, 111, 109, > 109, 97, 110, 100, 32, 39, 45, 97, 112, 112, 108, 121, 95, 112, 111, 115, > 101, 51, 100, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 123, 64, > 35, 45, 36, 62, 45, 49, 125, 34, 93, 32, 100, 111, 101, 115, 32, 110, > 111, 116, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 32, 97, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 46, 34, 10, 45, 101, 110, 100, 105, > 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 114, 114, 111, 119, 51, > 100, 32, 58, 32, 120, 48, 44, 121, 48, 44, 122, 48, 44, 120, 49, 44, > 121, 49, 44, 122, 49, 44, 95, 114, 97, 100, 105, 117, 115, 91, 37, 93, > 62, 61, 48, 44, 95, 104, 101, 97, 100, 95, 108, 101, 110, 103, 116, 104, > 91, 37, 93, 62, 61, 48, 44, 95, 104, 101, 97, 100, 95, 114, 97, 100, > 105, 117, 115, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 97, 114, 114, 111, > 119, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 97, 110, 100, 32, 101, 110, > 100, 105, 110, 103, 32, 51, 100, 32, 112, 111, 105, 110, 116, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 97, 100, 105, 117, 115, > 61, 53, 37, 39, 44, 32, 39, 104, 101, 97, 100, 95, 108, 101, 110, 103, > 116, 104, 61, 50, 53, 37, 39, 32, 97, 110, 100, 32, 39, 104, 101, 97, > 100, 95, 114, 97, 100, 105, 117, 115, 61, 49, 53, 37, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 49, 48, 32, 97, 61, 123, 36, 62, 42, 50, 42, 112, 105, 47, > 49, 48, 125, 32, 45, 97, 114, 114, 111, 119, 51, 100, 32, 48, 44, 48, > 44, 48, 44, 123, 99, 111, 115, 40, 36, 97, 41, 125, 44, 123, 115, 105, > 110, 40, 36, 97, 41, 125, 44, 45, 48, 46, 53, 32, 45, 100, 111, 110, > 101, 32, 45, 43, 51, 100, 10, 97, 114, 114, 111, 119, 51, 100, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 55, 61, 53, 37, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 123, 56, 61, 50, 53, 37, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 123, 57, 61, 49, 53, 37, 125, 62, 61, > 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 97, 114, 114, 111, 119, 44, 32, 102, 114, 111, 109, > 32, 40, 36, 123, 49, 45, 51, 125, 41, 32, 116, 111, 32, 40, 36, 123, > 52, 45, 54, 125, 41, 44, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, > 117, 115, 32, 36, 55, 44, 32, 104, 101, 97, 100, 32, 108, 101, 110, 103, > 116, 104, 32, 36, 56, 32, 97, 110, 100, 32, 104, 101, 97, 100, 32, 114, > 97, 100, 105, 117, 115, 32, 36, 57, 46, 34, 10, 45, 118, 32, 45, 10, > 76, 61, 123, 115, 113, 114, 116, 40, 40, 36, 52, 45, 36, 49, 41, 94, > 50, 43, 40, 36, 53, 45, 36, 50, 41, 94, 50, 43, 40, 36, 54, 45, > 36, 51, 41, 94, 50, 41, 125, 10, 82, 61, 123, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 55, 125, > 44, 36, 55, 42, 36, 76, 44, 36, 55, 41, 125, 10, 108, 61, 123, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 56, 125, 44, 36, 56, 42, 36, 76, 44, 36, 56, 41, 125, 10, > 114, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 57, 125, 44, 36, 57, 42, 36, 76, 44, 36, > 57, 41, 125, 10, 76, 61, 123, 36, 76, 45, 36, 108, 125, 32, 45, 99, > 121, 108, 105, 110, 100, 101, 114, 51, 100, 32, 36, 82, 44, 36, 76, 32, > 45, 99, 111, 110, 101, 51, 100, 32, 36, 114, 44, 36, 108, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 44, 36, 76, 32, 45, 43, > 51, 100, 91, 45, 50, 44, 45, 49, 93, 10, 40, 123, 36, 52, 45, 36, > 49, 125, 94, 123, 36, 53, 45, 36, 50, 125, 94, 123, 36, 54, 45, 36, > 51, 125, 41, 32, 40, 48, 46, 48, 49, 94, 45, 48, 46, 48, 50, 94, > 48, 46, 48, 51, 41, 32, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, > 111, 110, 91, 45, 50, 44, 45, 49, 93, 10, 45, 95, 99, 114, 111, 115, > 115, 51, 100, 32, 64, 45, 50, 44, 64, 45, 49, 32, 45, 95, 99, 114, > 111, 115, 115, 51, 100, 32, 64, 45, 49, 44, 64, 45, 51, 32, 45, 114, > 109, 91, 45, 51, 93, 32, 45, 121, 91, 45, 51, 45, 45, 49, 93, 32, > 120, 32, 45, 109, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 51, 10, > 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 121, 10, 45, 115, 51, 100, > 91, 45, 50, 93, 32, 45, 114, 91, 45, 53, 93, 32, 51, 44, 64, 123, > 45, 53, 44, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, > 42, 42, 91, 45, 53, 44, 45, 49, 93, 10, 45, 121, 91, 45, 52, 93, > 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 32, 45, 43, 51, > 100, 91, 45, 49, 93, 32, 36, 123, 49, 45, 51, 125, 32, 45, 114, 118, > 51, 100, 91, 45, 49, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 97, 120, 101, 115, 51, 100, 32, 58, 32, 95, 115, 105, 122, > 101, 95, 120, 44, 95, 115, 105, 122, 101, 95, 121, 44, 95, 115, 105, 122, > 101, 95, 122, 44, 95, 102, 111, 110, 116, 95, 115, 105, 122, 101, 62, 48, > 44, 95, 108, 97, 98, 101, 108, 95, 120, 44, 95, 108, 97, 98, 101, 108, > 95, 121, 44, 95, 108, 97, 98, 101, 108, 95, 122, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 97, 120, > 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 115, 105, 122, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, > 101, 32, 120, 44, 121, 32, 97, 110, 100, 32, 122, 32, 111, 114, 105, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 115, 105, 122, 101, 95, 120, 61, 115, 105, 122, 101, 95, > 121, 61, 115, 105, 122, 101, 95, 122, 61, 49, 39, 44, 32, 39, 102, 111, > 110, 116, 95, 115, 105, 122, 101, 61, 50, 51, 39, 44, 32, 39, 108, 97, > 98, 101, 108, 95, 120, 61, 88, 39, 44, 32, 39, 108, 97, 98, 101, 108, > 95, 121, 61, 89, 39, 32, 97, 110, 100, 32, 39, 108, 97, 98, 101, 108, > 95, 122, 61, 90, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 45, 97, 120, 101, 115, 51, 100, 32, 44, 10, 97, 120, 101, 115, > 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 52, 61, > 50, 51, 125, 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 36, > 50, 125, 44, 34, 36, 123, 53, 61, 88, 125, 44, 36, 123, 54, 61, 89, > 125, 44, 36, 123, 55, 61, 90, 125, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 97, 120, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 115, 32, 40, 36, 49, 44, > 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 108, > 91, 93, 10, 109, 61, 123, 109, 97, 120, 40, 97, 98, 115, 40, 36, 49, > 41, 44, 97, 98, 115, 40, 36, 50, 41, 44, 97, 98, 115, 40, 36, 51, > 41, 41, 47, 52, 48, 125, 32, 109, 50, 61, 123, 50, 42, 36, 109, 125, > 32, 109, 51, 61, 123, 49, 46, 50, 42, 36, 109, 50, 125, 10, 45, 95, > 97, 120, 101, 115, 51, 100, 32, 34, 79, 34, 44, 36, 52, 32, 45, 45, > 51, 100, 91, 45, 49, 93, 32, 36, 109, 51, 44, 36, 109, 51, 44, 36, > 109, 51, 10, 45, 105, 102, 32, 36, 49, 10, 45, 108, 105, 110, 101, 51, > 100, 32, 48, 44, 48, 44, 48, 44, 36, 49, 44, 48, 44, 48, 10, 45, > 99, 111, 110, 101, 51, 100, 32, 36, 109, 44, 123, 50, 42, 36, 109, 125, > 44, 49, 54, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, > 44, 48, 44, 45, 57, 48, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, > 123, 36, 49, 45, 36, 109, 50, 125, 44, 48, 44, 48, 10, 45, 95, 97, > 120, 101, 115, 51, 100, 32, 34, 36, 53, 34, 44, 36, 52, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 123, 36, 49, 43, 36, 109, 51, 125, 44, > 48, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, > 50, 10, 45, 108, 105, 110, 101, 51, 100, 32, 48, 44, 48, 44, 48, 44, > 48, 44, 36, 50, 44, 48, 10, 45, 99, 111, 110, 101, 51, 100, 32, 36, > 109, 44, 123, 50, 42, 36, 109, 125, 44, 49, 54, 32, 45, 114, 51, 100, > 91, 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 57, 48, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 48, 44, 123, 36, 50, 45, 36, 109, 50, > 125, 44, 48, 10, 45, 95, 97, 120, 101, 115, 51, 100, 32, 34, 36, 54, > 34, 44, 36, 52, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, > 123, 36, 50, 43, 36, 109, 51, 125, 44, 48, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 51, 10, 45, 108, 105, 110, 101, 51, 100, > 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 36, 51, 10, 45, 99, > 111, 110, 101, 51, 100, 32, 36, 109, 44, 123, 50, 42, 36, 109, 125, 44, > 49, 54, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 123, 36, 51, 45, 36, 109, 50, 125, 10, 45, 95, 97, 120, 101, 115, 51, > 100, 32, 34, 36, 55, 34, 44, 36, 52, 32, 45, 43, 51, 100, 91, 45, > 49, 93, 32, 48, 44, 48, 44, 123, 36, 51, 43, 36, 109, 51, 125, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 43, 51, 100, 32, 45, 110, 109, 32, > 91, 51, 100, 92, 32, 97, 120, 101, 115, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 118, 32, 43, 10, 95, 97, 120, 101, 115, 51, 100, 32, 58, 10, > 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 50, 44, > 48, 44, 36, 50, 44, 49, 44, 49, 32, 45, 45, 100, 105, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 51, 32, 45, 42, 91, 45, 50, 93, 32, 50, > 53, 53, 32, 45, 114, 91, 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 51, 10, 45, 105, 91, 45, 51, 93, 32, 40, > 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, > 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, > 59, 49, 59, 49, 59, 48, 59, 48, 59, 48, 59, 49, 59, 48, 59, 45, > 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 51, 41, 10, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 49, 41, 32, 45, 121, 91, 45, 51, 44, 45, 49, 93, > 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 121, 10, 35, 64, 103, > 109, 105, 99, 32, 98, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 51, 100, 39, > 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 98, > 97, 99, 107, 103, 114, 111, 117, 110, 100, 51, 100, 32, 58, 32, 82, 44, > 95, 71, 44, 95, 66, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, > 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 105, 110, > 101, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 32, 102, 114, 111, > 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, > 114, 32, 111, 114, 32, 101, 120, 105, 115, 116, 105, 110, 103, 32, 105, 109, > 97, 103, 101, 32, 102, 111, 114, 32, 105, 110, 116, 101, 114, 97, 99, 116, > 105, 118, 101, 32, 51, 100, 32, 118, 105, 101, 119, 101, 114, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 98, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 114, 101, 115, 101, > 116, 115, 32, 116, 104, 101, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, > 100, 32, 116, 111, 32, 100, 101, 102, 97, 117, 108, 116, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 98, 111, 120, 51, 100, 32, 58, 32, 95, 115, 105, > 122, 101, 95, 120, 44, 95, 115, 105, 122, 101, 95, 121, 44, 95, 115, 105, > 122, 101, 95, 122, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 98, 111, 120, 32, 97, 116, 32, 40, 48, > 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 120, > 61, 49, 39, 32, 97, 110, 100, 32, 39, 115, 105, 122, 101, 95, 122, 61, > 115, 105, 122, 101, 95, 121, 61, 115, 105, 122, 101, 95, 120, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 98, 111, 120, 51, > 100, 32, 49, 48, 48, 44, 52, 48, 44, 51, 48, 32, 45, 45, 112, 114, > 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, 45, 99, 111, > 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, 82, 71, 66, > 125, 10, 98, 111, 120, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 49, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, 36, > 123, 51, 61, 36, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 73, 110, 112, 117, 116, 32, 51, 100, 32, 98, 111, 120, 44, 32, 119, 105, > 116, 104, 32, 115, 105, 122, 101, 32, 40, 36, 49, 44, 36, 50, 44, 36, > 51, 41, 46, 34, 10, 45, 118, 32, 45, 10, 49, 44, 56, 54, 44, 49, > 44, 49, 44, 92, 10, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, > 48, 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, > 49, 48, 48, 46, 53, 44, 56, 44, 54, 44, 92, 10, 48, 44, 48, 44, > 48, 44, 36, 49, 44, 48, 44, 48, 44, 36, 49, 44, 36, 50, 44, 48, > 44, 48, 44, 36, 50, 44, 48, 44, 92, 10, 48, 44, 48, 44, 36, 51, > 44, 36, 49, 44, 48, 44, 36, 51, 44, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 48, 44, 36, 50, 44, 36, 51, 44, 92, 10, 52, 44, 48, 44, > 51, 44, 50, 44, 49, 44, 52, 44, 52, 44, 53, 44, 54, 44, 55, 44, > 52, 44, 48, 44, 49, 44, 53, 44, 52, 44, 52, 44, 51, 44, 55, 44, > 54, 44, 50, 44, 52, 44, 48, 44, 52, 44, 55, 44, 51, 44, 52, 44, > 49, 44, 50, 44, 54, 44, 53, 44, 92, 10, 50, 48, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, > 48, 44, 92, 10, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, > 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 98, 111, 120, > 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 51, > 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 99, 101, 110, > 116, 101, 114, 51, 100, 39, 46, 10, 99, 51, 100, 32, 58, 10, 45, 95, > 99, 101, 110, 116, 101, 114, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 99, 101, 110, 116, 101, 114, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 101, 110, 116, 101, 114, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 97, 116, 32, > 40, 48, 44, 48, 44, 48, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 99, 51, 100, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 49, 48, 48, 32, 45, 99, 105, 114, 99, 108, > 101, 51, 100, 32, 123, 63, 40, 49, 48, 48, 41, 125, 44, 123, 63, 40, > 49, 48, 48, 41, 125, 44, 123, 63, 40, 49, 48, 48, 41, 125, 44, 50, > 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, 32, 45, 99, > 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 48, > 44, 48, 32, 45, 45, 99, 101, 110, 116, 101, 114, 51, 100, 32, 45, 99, > 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 44, 48, 32, 45, 97, 100, 100, 51, 100, 10, 99, 101, 110, 116, 101, 114, > 51, 100, 32, 58, 10, 45, 95, 36, 48, 10, 95, 99, 101, 110, 116, 101, > 114, 51, 100, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 67, 101, 110, 116, 101, 114, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 99, 104, 101, 99, 107, > 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 110, 61, 123, 105, 91, 54, 93, 125, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 48, 125, 10, 45, 115, 104, 32, 56, > 44, 123, 55, 43, 51, 42, 36, 110, 125, 44, 48, 44, 48, 32, 45, 114, > 91, 45, 49, 93, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, > 44, 45, 49, 32, 45, 115, 91, 45, 49, 93, 32, 120, 10, 45, 45, 91, > 45, 51, 93, 32, 64, 123, 45, 51, 44, 40, 105, 77, 43, 105, 109, 41, > 47, 50, 125, 32, 45, 45, 91, 45, 50, 93, 32, 64, 123, 45, 50, 44, > 40, 105, 77, 43, 105, 109, 41, 47, 50, 125, 32, 45, 45, 91, 45, 49, > 93, 32, 123, 40, 105, 77, 43, 105, 109, 41, 47, 50, 125, 10, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 120, 32, 45, 121, 91, 45, 49, 93, > 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 56, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 105, 114, 99, 108, 101, 51, 100, > 32, 58, 32, 95, 120, 48, 44, 95, 121, 48, 44, 95, 122, 48, 44, 95, > 114, 97, 100, 105, 117, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 99, 105, 114, 99, > 108, 101, 32, 97, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 120, 48, 61, 121, 48, 61, 122, 48, 61, > 48, 39, 32, 97, 110, 100, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 53, 48, 48, 32, 97, 61, 123, 36, 62, 42, > 112, 105, 47, 50, 53, 48, 125, 32, 45, 99, 105, 114, 99, 108, 101, 51, > 100, 32, 123, 99, 111, 115, 40, 51, 42, 36, 97, 41, 125, 44, 123, 115, > 105, 110, 40, 50, 42, 36, 97, 41, 125, 44, 48, 44, 123, 36, 97, 47, > 53, 48, 125, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, > 32, 64, 123, 45, 82, 71, 66, 125, 44, 48, 46, 52, 32, 45, 100, 111, > 110, 101, 32, 45, 97, 100, 100, 51, 100, 10, 99, 105, 114, 99, 108, 101, > 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, > 125, 44, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, > 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 73, 110, 112, 117, 116, 32, 51, 100, 32, 99, 105, 114, 99, 108, 101, 32, > 97, 116, 32, 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 36, 49, 44, > 36, 50, 44, 36, 51, 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, > 117, 115, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, 10, 114, 61, 123, > 36, 52, 47, 115, 113, 114, 116, 40, 51, 41, 125, 10, 49, 44, 50, 52, > 44, 49, 44, 49, 44, 92, 10, 54, 55, 46, 53, 44, 55, 51, 46, 53, > 44, 49, 48, 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, > 53, 44, 49, 48, 48, 46, 53, 44, 50, 44, 49, 44, 92, 10, 123, 36, > 49, 45, 36, 114, 125, 44, 123, 36, 50, 45, 36, 114, 125, 44, 123, 36, > 51, 45, 36, 114, 125, 44, 92, 10, 123, 36, 49, 43, 36, 114, 125, 44, > 123, 36, 50, 43, 36, 114, 125, 44, 123, 36, 51, 43, 36, 114, 125, 44, > 92, 10, 53, 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 49, 10, 45, 110, 109, 91, > 45, 49, 93, 32, 91, 51, 100, 92, 32, 99, 105, 114, 99, 108, 101, 93, > 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 105, 114, > 99, 108, 101, 115, 51, 100, 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, > 62, 61, 48, 44, 95, 105, 115, 95, 102, 105, 108, 108, 101, 100, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 116, > 111, 32, 115, 101, 116, 115, 32, 111, 102, 32, 51, 100, 32, 99, 105, 114, > 99, 108, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 114, 97, 100, 105, 117, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 105, 115, 95, 102, 105, 108, 108, 101, 100, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 52, 48, > 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, > 45, 42, 32, 50, 53, 53, 32, 45, 112, 111, 105, 110, 116, 99, 108, 111, > 117, 100, 51, 100, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 99, > 105, 114, 99, 108, 101, 115, 51, 100, 32, 48, 46, 55, 10, 99, 105, 114, > 99, 108, 101, 115, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 36, 123, 49, 61, 49, 125, 62, 61, 48, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 36, 63, 32, 116, 111, 32, 115, 101, 116, 115, 32, 111, 102, 32, 51, > 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 50, 44, > 119, 105, 114, 101, 102, 114, 97, 109, 101, 44, 102, 105, 108, 108, 101, 100, > 125, 34, 32, 99, 105, 114, 99, 108, 101, 115, 32, 119, 105, 116, 104, 32, > 114, 97, 100, 105, 117, 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 112, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, 98, 118, 61, 64, 123, > 45, 49, 44, 54, 125, 32, 110, 98, 112, 61, 64, 123, 45, 49, 44, 55, > 125, 10, 45, 105, 102, 32, 123, 36, 110, 98, 118, 38, 38, 36, 110, 98, > 112, 125, 10, 45, 45, 51, 100, 32, 123, 36, 49, 47, 50, 125, 44, 48, > 44, 48, 32, 45, 45, 43, 51, 100, 32, 36, 49, 44, 48, 44, 48, 32, > 45, 43, 51, 100, 32, 110, 98, 112, 50, 61, 64, 123, 45, 49, 44, 55, > 125, 10, 45, 115, 51, 100, 32, 45, 61, 91, 49, 93, 32, 36, 110, 98, > 112, 44, 48, 44, 49, 10, 45, 114, 91, 51, 93, 32, 50, 44, 36, 110, > 98, 112, 50, 44, 49, 44, 49, 44, 45, 49, 32, 45, 99, 111, 108, 117, > 109, 110, 115, 91, 51, 93, 32, 49, 44, 49, 32, 45, 115, 91, 51, 93, > 32, 121, 44, 50, 32, 45, 105, 91, 51, 93, 32, 49, 44, 36, 110, 98, > 112, 44, 49, 44, 49, 44, 53, 10, 45, 105, 91, 54, 93, 32, 49, 44, > 36, 110, 98, 112, 44, 49, 44, 49, 44, 123, 33, 36, 50, 125, 32, 45, > 97, 91, 51, 45, 54, 93, 32, 120, 32, 45, 99, 111, 108, 117, 109, 110, > 115, 91, 51, 93, 32, 48, 44, 53, 10, 45, 121, 91, 51, 93, 10, 45, > 114, 111, 119, 115, 91, 52, 93, 32, 48, 44, 123, 51, 42, 36, 110, 98, > 112, 45, 49, 125, 32, 45, 114, 111, 119, 115, 91, 53, 93, 32, 48, 44, > 123, 36, 110, 98, 112, 45, 49, 125, 32, 45, 97, 32, 121, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 108, > 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 99, 111, > 108, 111, 114, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, 51, 100, 32, 58, 32, 82, > 44, 95, 71, 44, 95, 66, 44, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, > 101, 116, 32, 99, 111, 108, 111, 114, 32, 97, 110, 100, 32, 111, 112, 97, > 99, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 99, 111, 108, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 66, 61, 71, 61, 82, 39, 32, 97, 110, 100, 32, 39, 111, 112, > 97, 99, 105, 116, 121, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, > 41, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 49, 48, 32, 45, > 100, 111, 117, 98, 108, 101, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 55, 32, 45, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 50, 48, 32, 45, 99, 111, > 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, > 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 51, 100, 32, 99, 111, 108, 111, 114, 32, 99, 117, 98, 101, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 99, 111, 108, 111, > 114, 99, 117, 98, 101, 51, 100, 32, 45, 109, 111, 100, 101, 51, 100, 32, > 50, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, > 32, 49, 10, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, 100, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 51, 100, 32, 82, 71, 66, 45, 99, 111, 108, 111, 114, 32, 99, 117, 98, > 101, 46, 34, 10, 45, 118, 32, 45, 10, 40, 54, 55, 46, 53, 59, 55, > 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, > 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 56, 59, 54, 41, 10, > 40, 48, 59, 48, 59, 48, 59, 92, 10, 50, 53, 53, 59, 48, 59, 48, > 59, 92, 10, 50, 53, 53, 59, 50, 53, 53, 59, 48, 59, 92, 10, 48, > 59, 50, 53, 53, 59, 48, 59, 92, 10, 48, 59, 48, 59, 50, 53, 53, > 59, 92, 10, 50, 53, 53, 59, 48, 59, 50, 53, 53, 59, 92, 10, 50, > 53, 53, 59, 50, 53, 53, 59, 50, 53, 53, 59, 92, 10, 48, 59, 50, > 53, 53, 59, 50, 53, 53, 41, 10, 40, 49, 50, 59, 48, 59, 51, 59, > 50, 59, 49, 59, 48, 59, 48, 59, 48, 59, 54, 51, 59, 54, 51, 59, > 54, 51, 59, 54, 51, 59, 48, 59, 92, 10, 49, 50, 59, 49, 59, 50, > 59, 54, 59, 53, 59, 48, 59, 48, 59, 48, 59, 54, 51, 59, 54, 51, > 59, 54, 51, 59, 54, 51, 59, 48, 59, 92, 10, 49, 50, 59, 48, 59, > 52, 59, 55, 59, 51, 59, 48, 59, 48, 59, 54, 51, 59, 48, 59, 54, > 51, 59, 54, 51, 59, 48, 59, 54, 51, 59, 92, 10, 49, 50, 59, 52, > 59, 53, 59, 54, 59, 55, 59, 48, 59, 48, 59, 54, 51, 59, 48, 59, > 54, 51, 59, 54, 51, 59, 48, 59, 54, 51, 59, 92, 10, 49, 50, 59, > 48, 59, 49, 59, 53, 59, 52, 59, 48, 59, 48, 59, 54, 51, 59, 48, > 59, 54, 51, 59, 54, 51, 59, 48, 59, 54, 51, 59, 92, 10, 49, 50, > 59, 51, 59, 55, 59, 54, 59, 50, 59, 48, 59, 48, 59, 48, 59, 54, > 51, 59, 54, 51, 59, 54, 51, 59, 54, 51, 59, 48, 41, 10, 40, 48, > 44, 50, 53, 53, 59, 48, 44, 50, 53, 53, 94, 48, 44, 48, 59, 50, > 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 59, 48, 44, 48, 41, 10, > 40, 50, 53, 53, 44, 50, 53, 53, 59, 50, 53, 53, 44, 50, 53, 53, > 94, 48, 44, 48, 59, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 50, > 53, 53, 59, 48, 44, 50, 53, 53, 41, 10, 40, 48, 44, 48, 59, 48, > 44, 48, 94, 48, 44, 48, 59, 50, 53, 53, 44, 50, 53, 53, 94, 48, > 44, 50, 53, 53, 59, 48, 44, 50, 53, 53, 41, 10, 40, 48, 44, 50, > 53, 53, 59, 48, 44, 50, 53, 53, 94, 48, 44, 48, 59, 50, 53, 53, > 44, 50, 53, 53, 94, 50, 53, 53, 44, 50, 53, 53, 59, 50, 53, 53, > 44, 50, 53, 53, 41, 10, 40, 48, 44, 50, 53, 53, 59, 48, 44, 50, > 53, 53, 94, 48, 44, 48, 59, 48, 44, 48, 94, 48, 44, 48, 59, 50, > 53, 53, 44, 50, 53, 53, 41, 10, 40, 48, 44, 50, 53, 53, 59, 48, > 44, 50, 53, 53, 94, 50, 53, 53, 44, 50, 53, 53, 59, 50, 53, 53, > 44, 50, 53, 53, 94, 48, 44, 48, 59, 50, 53, 53, 44, 50, 53, 53, > 41, 10, 45, 114, 91, 45, 54, 45, 45, 49, 93, 32, 54, 52, 44, 54, > 52, 44, 49, 44, 51, 44, 51, 32, 45, 121, 91, 45, 54, 45, 45, 49, > 93, 32, 45, 105, 91, 45, 55, 45, 45, 50, 93, 32, 40, 45, 49, 50, > 56, 59, 54, 52, 59, 54, 52, 59, 51, 41, 10, 40, 49, 59, 49, 59, > 49, 59, 49, 59, 49, 59, 49, 41, 10, 45, 97, 91, 45, 49, 54, 45, > 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, > 100, 92, 32, 99, 111, 108, 111, 114, 99, 117, 98, 101, 93, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 110, 101, 51, 100, > 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, 44, 95, 104, 101, 105, 103, > 104, 116, 44, 95, 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, 115, 105, > 111, 110, 115, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 110, 112, 117, 116, 32, 51, 100, 32, 99, 111, 110, 101, 32, 97, 116, 32, > 40, 48, 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 97, 100, 105, 117, > 115, 61, 49, 39, 44, 39, 104, 101, 105, 103, 104, 116, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, 115, > 105, 111, 110, 115, 61, 50, 52, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 45, 99, 111, 110, 101, 51, 100, 32, 49, 48, 44, > 52, 48, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, > 100, 32, 49, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, > 32, 64, 123, 45, 82, 71, 66, 125, 10, 99, 111, 110, 101, 51, 100, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 51, 61, 50, 52, 125, > 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 125, 44, > 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 73, 110, 112, 117, 116, 32, 51, 100, 32, 99, 111, 110, 101, 44, 32, 119, > 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 44, 32, 104, > 101, 105, 103, 104, 116, 32, 36, 50, 32, 97, 110, 100, 32, 36, 51, 32, > 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 46, 34, 10, 45, > 118, 32, 45, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, > 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, > 49, 48, 48, 46, 53, 41, 10, 40, 123, 36, 51, 43, 50, 125, 59, 123, > 50, 42, 36, 51, 125, 41, 10, 40, 48, 44, 48, 44, 48, 59, 48, 44, > 48, 44, 36, 50, 41, 10, 40, 48, 59, 123, 50, 42, 112, 105, 125, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 36, 51, 43, 49, 125, > 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, > 32, 48, 44, 123, 36, 51, 45, 49, 125, 32, 45, 45, 115, 105, 110, 91, > 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, 32, 45, 42, 91, > 45, 50, 44, 45, 49, 93, 32, 36, 49, 32, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 49, 44, 36, > 51, 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 48, 44, 45, 49, 32, 45, 43, 91, 45, 50, > 44, 45, 49, 93, 32, 50, 10, 50, 44, 36, 51, 44, 49, 44, 49, 44, > 51, 44, 48, 32, 91, 45, 50, 93, 32, 91, 45, 52, 93, 32, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 120, 10, 45, 105, 91, 45, 52, 93, > 32, 50, 44, 36, 51, 44, 49, 44, 49, 44, 51, 44, 49, 32, 45, 97, > 91, 45, 52, 45, 45, 50, 93, 32, 120, 10, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 121, 10, 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, > 50, 48, 48, 10, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 49, 10, > 45, 121, 91, 45, 52, 45, 45, 50, 93, 32, 45, 97, 91, 45, 54, 45, > 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, > 100, 92, 32, 99, 111, 110, 101, 93, 10, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 99, 117, 98, 101, 115, 51, 100, 32, 58, 32, 95, > 115, 105, 122, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 116, 111, > 32, 115, 101, 116, 115, 32, 111, 102, 32, 51, 100, 32, 99, 117, 98, 101, > 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 115, 105, 122, 101, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, > 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 115, 105, 122, 101, > 50, 100, 121, 32, 52, 48, 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 32, 53, 48, 37, 32, 45, 42, 32, 50, 53, 53, 32, 45, 112, 111, > 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 45, 99, 111, 108, 111, > 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 50, 53, 53, 44, > 50, 53, 53, 32, 45, 99, 117, 98, 101, 115, 51, 100, 32, 49, 10, 99, > 117, 98, 101, 115, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 36, 123, 49, 61, 49, 125, 62, 61, 48, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 36, 63, 32, 116, 111, 32, 115, 101, 116, 115, 32, 111, > 102, 32, 51, 100, 32, 99, 117, 98, 101, 115, 32, 119, 105, 116, 104, 32, > 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 112, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 110, 98, 118, 61, 64, 123, 45, 49, > 44, 54, 125, 32, 110, 98, 112, 61, 64, 123, 45, 49, 44, 55, 125, 10, > 45, 105, 102, 32, 123, 36, 110, 98, 118, 38, 38, 36, 110, 98, 112, 125, > 10, 45, 115, 51, 100, 10, 45, 108, 91, 49, 93, 32, 45, 61, 32, 123, > 56, 42, 105, 91, 48, 93, 125, 32, 45, 61, 32, 123, 54, 42, 105, 91, > 49, 93, 125, 44, 48, 44, 49, 32, 45, 101, 110, 100, 108, 10, 45, 108, > 91, 50, 93, 32, 45, 114, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, > 44, 49, 44, 45, 49, 10, 104, 97, 108, 102, 61, 123, 36, 49, 47, 50, > 125, 10, 45, 45, 32, 39, 36, 104, 97, 108, 102, 44, 48, 44, 48, 39, > 32, 45, 45, 43, 32, 39, 36, 49, 44, 48, 44, 48, 39, 32, 45, 97, > 32, 120, 10, 45, 45, 32, 39, 48, 44, 36, 104, 97, 108, 102, 44, 48, > 39, 32, 45, 45, 43, 32, 39, 48, 44, 36, 49, 44, 48, 39, 32, 45, > 97, 32, 120, 10, 45, 45, 32, 39, 48, 44, 48, 44, 36, 104, 97, 108, > 102, 39, 32, 45, 45, 43, 32, 39, 48, 44, 48, 44, 36, 49, 39, 32, > 45, 97, 32, 120, 10, 45, 101, 110, 100, 108, 10, 45, 108, 91, 51, 93, > 32, 45, 114, 32, 50, 44, 123, 104, 47, 50, 125, 44, 49, 44, 49, 44, > 45, 49, 10, 45, 122, 32, 49, 44, 49, 32, 45, 42, 32, 56, 32, 45, > 114, 32, 52, 44, 49, 48, 48, 37, 32, 45, 105, 91, 48, 93, 32, 49, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 52, 32, 45, 97, 32, 120, > 32, 91, 45, 49, 93, 120, 53, 32, 45, 97, 32, 120, 10, 45, 43, 32, > 39, 34, 48, 44, 48, 44, 50, 44, 51, 44, 49, 44, 32, 48, 44, 52, > 44, 53, 44, 55, 44, 54, 44, 32, 48, 44, 48, 44, 49, 44, 53, 44, > 52, 44, 32, 48, 44, 50, 44, 54, 44, 55, 44, 51, 44, 32, 48, 44, > 48, 44, 52, 44, 54, 44, 50, 44, 32, 48, 44, 49, 44, 51, 44, 55, > 44, 53, 34, 39, 10, 45, 101, 110, 100, 108, 10, 45, 108, 91, 52, 93, > 32, 45, 114, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, > 45, 49, 32, 45, 114, 32, 49, 56, 44, 49, 48, 48, 37, 44, 49, 44, > 49, 44, 48, 44, 50, 32, 45, 101, 110, 100, 108, 32, 45, 114, 91, 53, > 93, 32, 54, 44, 49, 48, 48, 37, 10, 45, 121, 32, 45, 97, 32, 121, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 99, 117, 112, 51, 100, 32, 58, 32, 95, 114, 101, 115, 111, 108, 117, 116, > 105, 111, 110, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 110, 112, 117, 116, 32, 51, 100, 32, 99, 117, 112, 32, 111, 98, 106, 101, > 99, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 99, 117, 112, 51, 100, 32, 44, 10, 99, 117, 112, 51, 100, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 49, 50, 56, 125, 62, > 48, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, > 32, 51, 100, 32, 99, 117, 112, 44, 32, 119, 105, 116, 104, 32, 114, 101, > 115, 111, 108, 117, 116, 105, 111, 110, 32, 36, 49, 46, 34, 10, 45, 118, > 32, 45, 10, 49, 48, 48, 44, 50, 48, 48, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 48, 37, 44, 48, 37, 44, 52, 48, > 37, 44, 52, 48, 37, 44, 48, 44, 49, 44, 49, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 51, 53, 37, > 44, 51, 53, 37, 44, 48, 44, 49, 44, 48, 10, 45, 112, 111, 108, 121, > 103, 111, 110, 91, 45, 49, 93, 32, 52, 44, 48, 44, 52, 53, 37, 44, > 56, 37, 44, 52, 53, 37, 44, 50, 48, 37, 44, 57, 48, 37, 44, 48, > 44, 57, 48, 37, 44, 49, 44, 49, 10, 45, 101, 108, 108, 105, 112, 115, > 101, 91, 45, 49, 93, 32, 48, 37, 44, 49, 48, 48, 37, 44, 51, 48, > 37, 44, 49, 48, 37, 44, 48, 44, 49, 44, 49, 32, 45, 98, 91, 45, > 49, 93, 32, 48, 46, 49, 37, 10, 45, 108, 97, 116, 104, 101, 51, 100, > 91, 45, 49, 93, 32, 36, 49, 44, 50, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 91, 51, 100, 92, 32, 99, 117, 112, 93, 10, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 121, 108, 105, 110, 100, 101, 114, > 51, 100, 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, 44, 95, 104, 101, > 105, 103, 104, 116, 44, 95, 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, > 115, 105, 111, 110, 115, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 99, 121, 108, 105, 110, 100, > 101, 114, 32, 97, 116, 32, 40, 48, 44, 48, 44, 48, 41, 44, 32, 119, > 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 103, 101, > 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 114, 97, 100, 105, 117, 115, 61, 49, 39, 44, 39, 104, 101, 105, 103, > 104, 116, 61, 49, 39, 32, 97, 110, 100, 32, 39, 110, 98, 95, 115, 117, > 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 61, 50, 52, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 99, 121, 108, 105, > 110, 100, 101, 114, 51, 100, 32, 49, 48, 44, 52, 48, 32, 45, 45, 112, > 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, 45, 99, > 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, 82, 71, > 66, 125, 10, 99, 121, 108, 105, 110, 100, 101, 114, 51, 100, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 36, 123, 51, 61, 50, 52, 125, 62, 48, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 125, 44, 36, 123, > 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 99, 121, 108, 105, 110, 100, 101, 114, 44, > 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 44, > 32, 104, 101, 105, 103, 104, 116, 32, 36, 50, 32, 97, 110, 100, 32, 36, > 51, 32, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 46, 34, > 10, 45, 118, 32, 45, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, > 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, > 53, 59, 49, 48, 48, 46, 53, 41, 10, 40, 123, 50, 42, 36, 51, 43, > 50, 125, 59, 123, 51, 42, 36, 51, 125, 41, 10, 40, 48, 44, 48, 44, > 48, 59, 48, 44, 48, 44, 36, 50, 41, 10, 40, 48, 59, 123, 50, 42, > 112, 105, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 36, > 51, 43, 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 119, 115, > 91, 45, 49, 93, 32, 48, 44, 123, 36, 51, 45, 49, 125, 32, 45, 45, > 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 45, 122, 91, 45, 49, > 93, 32, 48, 44, 50, 32, 49, 44, 36, 51, 44, 49, 44, 49, 44, 36, > 50, 32, 45, 97, 91, 45, 51, 44, 45, 49, 93, 32, 120, 10, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 121, 10, 49, 44, 36, 51, 44, 49, > 44, 49, 44, 39, 121, 39, 32, 45, 45, 115, 104, 105, 102, 116, 91, 45, > 49, 93, 32, 48, 44, 45, 49, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 32, 50, 10, 50, 44, 36, 51, 44, 49, 44, 49, 44, 51, 44, 49, > 32, 91, 45, 51, 93, 32, 91, 45, 51, 93, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 120, 10, 50, 44, 36, 51, 44, 49, 44, 49, 44, > 51, 44, 48, 32, 91, 45, 51, 93, 32, 91, 45, 53, 93, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 36, 51, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 120, 10, 45, 45, 43, 91, 45, 52, 44, 45, 51, > 93, 32, 36, 51, 32, 45, 105, 91, 45, 55, 93, 32, 49, 44, 36, 51, > 44, 49, 44, 49, 44, 52, 32, 45, 114, 118, 91, 45, 54, 44, 45, 53, > 93, 32, 45, 97, 91, 45, 55, 45, 45, 53, 44, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 51, 44, 123, 51, 42, 36, 51, 125, 44, 49, 44, 49, > 44, 50, 48, 48, 10, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 49, > 10, 45, 121, 91, 45, 54, 45, 45, 50, 93, 32, 45, 97, 91, 45, 56, > 45, 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 99, 121, 108, 105, 110, 100, 101, 114, 93, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 116, 114, 105, > 98, 117, 116, 105, 111, 110, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 71, 101, 116, 32, 51, 100, 32, 99, 111, 108, 111, 114, 32, 100, > 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, > 111, 110, 51, 100, 32, 45, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, > 100, 32, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 91, > 45, 49, 93, 32, 49, 32, 45, 97, 100, 100, 51, 100, 10, 100, 105, 115, > 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 71, 101, 116, 32, 51, 100, 32, 99, 111, > 108, 111, 114, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 112, 101, 114, 109, > 117, 116, 101, 32, 34, 99, 120, 121, 122, 34, 32, 45, 121, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 110, 98, 112, 61, 123, 104, 47, 51, 125, 10, 45, 105, 91, 45, 50, 93, > 32, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, > 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, > 46, 53, 59, 92, 10, 36, 110, 98, 112, 59, 36, 110, 98, 112, 41, 10, > 40, 49, 44, 48, 59, 49, 44, 123, 36, 110, 98, 112, 45, 49, 125, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 50, 44, 36, 110, 98, 112, 44, 49, > 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, > 49, 32, 45, 121, 91, 45, 49, 93, 10, 91, 45, 50, 93, 10, 49, 44, > 36, 110, 98, 112, 44, 49, 44, 49, 44, 49, 10, 45, 97, 32, 121, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 100, 105, 115, > 116, 114, 105, 98, 117, 116, 105, 111, 110, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 47, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 100, 105, 118, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 100, 105, 118, 51, 100, 32, 58, 32, 102, > 97, 99, 116, 111, 114, 32, 58, 32, 102, 97, 99, 116, 111, 114, 95, 120, > 44, 102, 97, 99, 116, 111, 114, 95, 121, 44, 95, 102, 97, 99, 116, 111, > 114, 95, 122, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 83, 99, 97, 108, 101, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 105, 115, 111, > 116, 114, 111, 112, 105, 99, 97, 108, 108, 121, 32, 111, 114, 32, 97, 110, > 105, 115, 111, 116, 114, 111, 112, 105, 99, 97, 108, 108, 121, 44, 32, 119, > 105, 116, 104, 32, 116, 104, 101, 32, 105, 110, 118, 101, 114, 115, 101, 32, > 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 102, 97, 99, 116, 111, 114, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 47, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 102, 97, 99, 116, 111, 114, 95, 122, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, 115, > 51, 100, 32, 53, 44, 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, > 32, 45, 45, 97, 100, 100, 51, 100, 91, 45, 49, 93, 32, 49, 50, 44, > 48, 44, 48, 32, 45, 100, 105, 118, 51, 100, 91, 45, 49, 93, 32, 49, > 46, 50, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, > 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, > 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 100, 98, 51, 100, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 111, 117, 98, > 108, 101, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 111, 117, 98, 108, 101, 51, 100, 32, 58, 32, 95, > 105, 115, 95, 100, 111, 117, 98, 108, 101, 95, 115, 105, 100, 101, 100, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 110, 97, 98, 108, 101, 47, > 100, 105, 115, 97, 98, 108, 101, 32, 100, 111, 117, 98, 108, 101, 45, 115, > 105, 100, 101, 100, 32, 109, 111, 100, 101, 32, 102, 111, 114, 32, 51, 100, > 32, 114, 101, 110, 100, 101, 114, 105, 110, 103, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, > 98, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 105, 115, 95, 100, 111, 117, 98, 108, 101, 95, 115, 105, 100, 101, 100, 61, > 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 109, 111, 100, 101, 51, 100, 32, 49, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 50, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, > 51, 48, 32, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, > 32, 49, 44, 49, 44, 48, 44, 54, 48, 32, 45, 100, 111, 117, 98, 108, > 101, 51, 100, 32, 36, 62, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, > 51, 100, 91, 45, 49, 93, 32, 52, 48, 48, 32, 45, 100, 111, 110, 101, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, 101, 118, 97, 116, 105, 111, > 110, 51, 100, 32, 58, 32, 122, 45, 102, 97, 99, 116, 111, 114, 32, 58, > 32, 91, 101, 108, 101, 118, 97, 116, 105, 111, 110, 95, 109, 97, 112, 93, > 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, > 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 66, 117, 105, 108, 100, 32, 51, 100, > 32, 101, 108, 101, 118, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, > 105, 116, 104, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 101, 108, 101, 118, 97, 116, 105, 111, 110, 32, 109, 97, 112, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 87, 104, 101, 110, 32, 105, 110, 118, > 111, 107, 101, 100, 32, 119, 105, 116, 104, 32, 40, 110, 111, 32, 97, 114, > 103, 115, 41, 32, 111, 114, 32, 39, 122, 45, 102, 97, 99, 116, 111, 114, > 39, 44, 32, 116, 104, 101, 32, 101, 108, 101, 118, 97, 116, 105, 111, 110, > 32, 109, 97, 112, 32, 105, 115, 32, 99, 111, 109, 112, 117, 116, 101, 100, > 32, 97, 115, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, > 101, 32, 76, 50, 32, 110, 111, 114, 109, 32, 111, 102, 32, 116, 104, 101, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 112, 105, 120, 101, 108, 32, > 118, 97, 108, 117, 101, 115, 46, 32, 79, 116, 104, 101, 114, 119, 105, 115, > 101, 44, 32, 116, 104, 101, 32, 101, 108, 101, 118, 97, 116, 105, 111, 110, > 32, 109, 97, 112, 32, 105, 115, 32, 116, 97, 107, 101, 110, 32, 102, 114, > 111, 109, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, 102, 111, 114, 109, 117, 108, > 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 53, 32, > 45, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 48, 46, 53, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 50, 56, 44, > 49, 50, 56, 44, 49, 44, 51, 44, 63, 40, 50, 53, 53, 41, 32, 45, > 112, 108, 97, 115, 109, 97, 32, 49, 48, 44, 51, 32, 45, 98, 108, 117, > 114, 32, 52, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, 48, 48, > 48, 48, 32, 45, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 91, > 45, 49, 93, 32, 39, 88, 61, 40, 120, 45, 54, 52, 41, 47, 54, 59, > 89, 61, 40, 121, 45, 54, 52, 41, 47, 54, 59, 49, 48, 48, 42, 101, > 120, 112, 40, 45, 40, 88, 94, 50, 43, 89, 94, 50, 41, 47, 51, 48, > 41, 42, 97, 98, 115, 40, 99, 111, 115, 40, 88, 41, 42, 115, 105, 110, > 40, 89, 41, 41, 39, 10, 35, 64, 103, 109, 105, 99, 32, 101, 109, 112, > 116, 121, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 112, 117, 116, 32, 101, 109, 112, 116, 121, 32, 51, 100, 32, 111, 98, 106, > 101, 99, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 101, 109, 112, 116, 121, 51, 100, 10, 101, 109, 112, 116, 121, 51, 100, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, > 116, 32, 101, 109, 112, 116, 121, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 46, 34, 10, 45, 118, 32, 45, 32, 40, 54, 55, 46, 53, 59, 55, > 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, > 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 48, 59, 48, 41, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 101, 109, 112, > 116, 121, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 101, 120, 116, 114, 117, 100, 101, 51, 100, 32, 58, 32, 95, 100, 101, 112, > 116, 104, 62, 48, 44, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, > 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, > 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 101, 120, 116, 114, 117, 100, 101, 100, 32, > 51, 100, 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 98, 105, 110, 97, 114, 121, 32, 88, > 89, 45, 112, 114, 111, 102, 105, 108, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 100, 101, 112, 116, 104, 61, 49, 54, 39, 44, > 32, 39, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 61, 49, 48, 50, > 52, 39, 32, 97, 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 61, 48, 46, 53, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, 101, > 120, 116, 114, 117, 100, 101, 51, 100, 32, 49, 54, 10, 101, 120, 116, 114, > 117, 100, 101, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 49, 54, 125, 62, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 49, 48, 50, 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 51, 61, > 48, 46, 53, 37, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 101, 120, 116, 114, > 117, 100, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 32, 102, > 114, 111, 109, 32, 88, 89, 45, 112, 114, 111, 102, 105, 108, 101, 36, 63, > 44, 32, 119, 105, 116, 104, 32, 100, 101, 112, 116, 104, 32, 36, 49, 44, > 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 32, 36, 50, 32, 97, > 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, 114, 109, 32, 45, 110, > 32, 48, 44, 49, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 48, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 114, 61, > 123, 114, 111, 117, 110, 100, 40, 109, 97, 120, 40, 49, 44, 105, 102, 40, > 119, 62, 104, 44, 109, 105, 110, 40, 36, 50, 44, 119, 41, 44, 109, 105, > 110, 40, 36, 50, 44, 104, 41, 42, 119, 47, 104, 41, 41, 41, 125, 10, > 104, 114, 61, 123, 114, 111, 117, 110, 100, 40, 109, 97, 120, 40, 49, 44, > 105, 102, 40, 119, 62, 104, 44, 109, 105, 110, 40, 36, 50, 44, 119, 41, > 42, 104, 47, 119, 44, 109, 105, 110, 40, 36, 50, 44, 104, 41, 41, 41, > 41, 125, 10, 102, 97, 99, 116, 61, 123, 36, 49, 47, 109, 97, 120, 40, > 119, 47, 36, 119, 114, 44, 104, 47, 36, 104, 114, 41, 125, 10, 45, 98, > 32, 36, 51, 44, 48, 32, 45, 114, 32, 36, 119, 114, 44, 36, 104, 114, > 44, 49, 44, 49, 44, 50, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, > 121, 122, 32, 49, 44, 48, 10, 45, 105, 115, 111, 115, 117, 114, 102, 97, > 99, 101, 51, 100, 32, 53, 48, 37, 32, 45, 42, 51, 100, 32, 49, 44, > 49, 44, 36, 102, 97, 99, 116, 32, 45, 114, 118, 51, 100, 10, 45, 110, > 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, > 111, 99, 97, 108, 101, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 102, 111, 99, 97, 108, 101, 51, 100, 32, > 58, 32, 102, 111, 99, 97, 108, 101, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 51, 100, 32, 102, > 111, 99, 97, 108, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 51, 100, 39, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 39, 102, > 111, 99, 97, 108, 101, 39, 32, 116, 111, 32, 48, 32, 116, 111, 32, 101, > 110, 97, 98, 108, 101, 32, 112, 97, 114, 97, 108, 108, 101, 108, 32, 112, > 114, 111, 106, 101, 99, 116, 105, 111, 110, 32, 40, 105, 110, 115, 116, 101, > 97, 100, 32, 111, 102, 32, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, > 101, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, > 32, 110, 101, 103, 97, 116, 105, 118, 101, 32, 39, 102, 111, 99, 97, 108, > 101, 39, 32, 119, 105, 108, 108, 32, 100, 105, 115, 97, 98, 108, 101, 32, > 51, 100, 32, 115, 112, 114, 105, 116, 101, 32, 122, 111, 111, 109, 105, 110, > 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 102, 111, 99, 97, > 108, 101, 61, 55, 48, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, 32, 45, 116, > 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, 32, 45, 114, > 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 49, 44, 49, 44, > 48, 44, 54, 48, 32, 45, 102, 111, 99, 97, 108, 101, 51, 100, 32, 123, > 36, 60, 42, 57, 48, 125, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, > 51, 100, 91, 45, 49, 93, 32, 52, 48, 48, 32, 45, 100, 111, 110, 101, > 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 103, 97, 117, 115, 115, 105, 97, 110, 115, 51, 100, 32, 58, > 32, 95, 115, 105, 122, 101, 62, 48, 44, 95, 111, 112, 97, 99, 105, 116, > 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, > 98, 106, 101, 99, 116, 115, 32, 105, 110, 116, 111, 32, 115, 101, 116, 32, > 111, 102, 32, 51, 100, 32, 103, 97, 117, 115, 115, 105, 97, 110, 45, 115, > 104, 97, 112, 101, 100, 32, 115, 112, 114, 105, 116, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 50, 100, 121, 32, 51, 50, 32, 45, 100, 105, > 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, 100, 32, 45, 103, 97, > 117, 115, 115, 105, 97, 110, 115, 51, 100, 32, 50, 48, 32, 45, 99, 111, > 108, 111, 114, 99, 117, 98, 101, 51, 100, 32, 45, 112, 114, 105, 109, 105, > 116, 105, 118, 101, 115, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 43, > 51, 100, 10, 103, 97, 117, 115, 115, 105, 97, 110, 115, 51, 100, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 51, 50, 125, > 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 46, > 51, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, > 101, 114, 116, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 32, > 105, 110, 116, 111, 32, 115, 101, 116, 115, 32, 111, 102, 32, 103, 97, 117, > 115, 115, 105, 97, 110, 45, 115, 104, 97, 112, 101, 100, 32, 51, 100, 32, > 115, 112, 114, 105, 116, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 105, > 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 112, 51, 100, > 32, 50, 32, 45, 112, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, > 123, 48, 44, 110, 125, 32, 45, 115, 51, 100, 10, 110, 98, 118, 61, 123, > 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 40, 45, 49, 50, 56, > 59, 36, 49, 59, 36, 49, 59, 49, 41, 10, 36, 49, 44, 36, 49, 32, > 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, 45, 49, 93, 32, 51, 53, > 37, 44, 51, 53, 37, 44, 48, 32, 45, 99, 91, 45, 49, 93, 32, 51, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 36, 50, 32, 45, 121, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 121, 10, 45, 105, 102, 32, 123, 36, 110, 98, 118, > 62, 49, 125, 32, 52, 44, 123, 36, 110, 98, 118, 45, 49, 125, 44, 49, > 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 121, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 121, 10, > 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 103, 109, 105, 99, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 110, 112, 117, 116, 32, 97, 32, 51, 100, 32, 71, 39, 77, > 73, 67, 32, 108, 111, 103, 111, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 103, 109, 105, 99, 51, 100, 32, 45, 45, 112, 114, > 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 10, 103, 109, 105, > 99, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, > 110, 112, 117, 116, 32, 51, 100, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 108, 111, 103, 111, 46, 34, 10, 45, 118, 32, 45, 10, 45, 116, 101, 120, > 116, 51, 100, 32, 71, 44, 54, 48, 44, 50, 48, 44, 50, 32, 45, 99, > 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 54, 44, 54, 52, 44, 50, > 53, 53, 10, 45, 116, 101, 120, 116, 51, 100, 32, 92, 39, 44, 54, 48, > 44, 50, 48, 44, 50, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 52, > 48, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 54, 52, 44, > 49, 50, 56, 44, 50, 53, 53, 10, 45, 116, 101, 120, 116, 51, 100, 32, > 77, 44, 54, 48, 44, 50, 48, 44, 50, 32, 45, 43, 51, 100, 91, 45, > 49, 93, 32, 53, 48, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, > 32, 57, 54, 44, 49, 57, 54, 44, 50, 53, 53, 10, 45, 116, 101, 120, > 116, 51, 100, 32, 73, 44, 54, 48, 44, 50, 48, 44, 50, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 57, 48, 32, 45, 99, 111, 108, 51, 100, > 91, 45, 49, 93, 32, 54, 52, 44, 49, 50, 56, 44, 50, 53, 53, 10, > 45, 116, 101, 120, 116, 51, 100, 32, 67, 44, 54, 48, 44, 50, 48, 44, > 50, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, > 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 54, 44, 54, 52, 44, > 50, 53, 53, 10, 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, 56, 32, > 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 48, 50, 44, 45, 51, 44, > 49, 53, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 57, > 50, 44, 49, 50, 56, 44, 50, 53, 53, 10, 45, 43, 51, 100, 91, 45, > 54, 45, 45, 49, 93, 32, 45, 99, 51, 100, 91, 45, 49, 93, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 51, 48, 10, 45, 98, 111, 120, 51, 100, > 32, 123, 109, 105, 110, 40, 51, 43, 64, 123, 60, 44, 45, 49, 125, 47, > 50, 44, 49, 48, 41, 125, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, > 93, 32, 123, 51, 48, 42, 36, 62, 125, 44, 123, 50, 48, 43, 56, 48, > 42, 36, 62, 125, 44, 123, 49, 48, 42, 36, 62, 125, 44, 48, 46, 53, > 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, 49, 44, 49, 44, > 123, 36, 62, 42, 49, 50, 125, 10, 45, 43, 51, 100, 91, 45, 49, 93, > 32, 123, 56, 48, 42, 99, 111, 115, 40, 48, 46, 53, 43, 49, 46, 48, > 50, 42, 36, 62, 42, 49, 50, 42, 112, 105, 47, 49, 56, 48, 41, 125, > 44, 123, 51, 48, 42, 115, 105, 110, 40, 48, 46, 56, 43, 36, 62, 42, > 49, 50, 42, 112, 105, 47, 49, 56, 48, 41, 125, 44, 123, 50, 42, 36, > 62, 45, 54, 48, 125, 10, 45, 100, 111, 110, 101, 10, 45, 43, 51, 100, > 91, 45, 51, 48, 45, 45, 49, 93, 32, 45, 43, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 53, 44, 51, 48, 32, 45, 43, 51, 100, 91, 45, 50, > 45, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 103, 109, 105, 99, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 103, 121, 114, 111, 105, 100, 51, 100, 32, 58, 32, 95, > 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 62, 48, 44, 95, 122, 111, > 111, 109, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 103, 121, 114, 111, 105, 100, 32, 97, 116, 32, 40, > 48, 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, > 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 101, 115, > 111, 108, 117, 116, 105, 111, 110, 61, 51, 50, 39, 32, 97, 110, 100, 32, > 39, 122, 111, 111, 109, 61, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 45, 103, 121, 114, 111, 105, 100, 51, 100, 32, 52, > 56, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, > 32, 49, 10, 103, 121, 114, 111, 105, 100, 51, 100, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 36, 123, 49, 61, 51, 50, 125, 62, 48, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 50, 61, 53, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 103, 121, > 114, 111, 105, 100, 44, 32, 119, 105, 116, 104, 32, 114, 101, 115, 111, 108, > 117, 116, 105, 111, 110, 32, 36, 49, 32, 97, 110, 100, 32, 114, 97, 110, > 103, 101, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 115, > 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 34, 39, 48, 46, 52, > 57, 42, 40, 92, 10, 99, 111, 115, 40, 32, 50, 42, 120, 32, 43, 32, > 121, 32, 43, 32, 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, > 115, 40, 32, 50, 42, 120, 32, 45, 32, 121, 32, 43, 32, 122, 32, 45, > 32, 112, 105, 41, 92, 10, 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, > 120, 32, 43, 32, 121, 32, 45, 32, 122, 32, 45, 32, 112, 105, 41, 32, > 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, 120, 32, 45, 32, 121, 32, > 45, 32, 122, 32, 45, 32, 112, 105, 41, 92, 10, 43, 32, 99, 111, 115, > 40, 32, 120, 32, 43, 32, 50, 42, 121, 32, 43, 32, 122, 32, 45, 32, > 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 32, 120, 32, 43, 32, 50, > 42, 121, 32, 45, 32, 122, 32, 45, 32, 112, 105, 41, 92, 10, 43, 32, > 99, 111, 115, 40, 45, 32, 120, 32, 45, 32, 50, 42, 121, 32, 43, 32, > 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 45, 32, > 120, 32, 45, 32, 50, 42, 121, 32, 45, 32, 122, 32, 45, 32, 112, 105, > 41, 92, 10, 43, 32, 99, 111, 115, 40, 32, 120, 32, 43, 32, 121, 32, > 43, 32, 50, 42, 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, > 115, 40, 45, 32, 120, 32, 43, 32, 121, 32, 43, 32, 50, 42, 122, 32, > 45, 32, 112, 105, 41, 92, 10, 43, 32, 99, 111, 115, 40, 32, 120, 32, > 45, 32, 121, 32, 45, 32, 50, 42, 122, 32, 45, 32, 112, 105, 41, 32, > 43, 32, 99, 111, 115, 40, 45, 32, 120, 32, 45, 32, 121, 32, 45, 32, > 50, 42, 122, 32, 45, 32, 112, 105, 41, 92, 10, 43, 32, 99, 111, 115, > 40, 45, 32, 50, 42, 120, 32, 43, 32, 121, 32, 43, 32, 122, 41, 32, > 43, 32, 99, 111, 115, 40, 32, 50, 42, 120, 32, 43, 32, 121, 32, 45, > 32, 122, 41, 92, 10, 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, 120, > 32, 45, 32, 121, 32, 43, 32, 122, 41, 32, 43, 32, 99, 111, 115, 40, > 32, 50, 42, 120, 32, 45, 32, 121, 32, 45, 32, 122, 41, 92, 10, 43, > 32, 99, 111, 115, 40, 45, 32, 120, 32, 43, 32, 50, 42, 121, 32, 43, > 32, 122, 41, 32, 43, 32, 99, 111, 115, 40, 32, 120, 32, 45, 32, 50, > 42, 121, 32, 43, 32, 122, 41, 92, 10, 43, 32, 99, 111, 115, 40, 45, > 32, 120, 32, 43, 32, 50, 42, 121, 32, 45, 32, 122, 41, 32, 43, 32, > 99, 111, 115, 40, 32, 120, 32, 45, 32, 50, 42, 121, 32, 45, 32, 122, > 41, 92, 10, 43, 32, 99, 111, 115, 40, 32, 120, 32, 45, 32, 121, 32, > 43, 32, 50, 42, 122, 41, 32, 43, 32, 99, 111, 115, 40, 32, 120, 32, > 43, 32, 121, 32, 45, 32, 50, 42, 122, 41, 92, 10, 43, 32, 99, 111, > 115, 40, 45, 32, 120, 32, 45, 32, 121, 32, 43, 32, 50, 42, 122, 41, > 32, 43, 32, 99, 111, 115, 40, 45, 32, 120, 32, 43, 32, 121, 32, 45, > 32, 50, 42, 122, 41, 92, 10, 41, 32, 43, 32, 48, 46, 50, 55, 42, > 40, 32, 92, 10, 99, 111, 115, 40, 45, 32, 50, 42, 120, 32, 43, 32, > 50, 42, 121, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, > 32, 50, 42, 120, 32, 45, 32, 50, 42, 121, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 32, 50, 42, 120, 32, 43, 32, 50, > 42, 121, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 45, > 32, 50, 42, 120, 32, 45, 32, 50, 42, 121, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, 121, 32, 43, 32, > 50, 42, 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, > 32, 50, 42, 121, 32, 45, 32, 50, 42, 122, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 32, 50, 42, 121, 32, 43, 32, 50, > 42, 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 45, > 32, 50, 42, 121, 32, 45, 32, 50, 42, 122, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, 122, 32, 43, 32, > 50, 42, 120, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, > 32, 50, 42, 122, 32, 45, 32, 50, 42, 120, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 32, 50, 42, 122, 32, 43, 32, 50, > 42, 120, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 45, > 32, 50, 42, 122, 32, 45, 32, 50, 42, 120, 32, 45, 32, 112, 105, 41, > 92, 10, 41, 32, 45, 32, 48, 46, 54, 57, 39, 34, 44, 48, 44, 123, > 45, 36, 50, 125, 44, 123, 45, 36, 50, 125, 44, 123, 45, 36, 50, 125, > 44, 36, 50, 44, 36, 50, 44, 36, 50, 44, 36, 49, 44, 36, 49, 44, > 36, 49, 10, 45, 99, 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, > 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 103, 121, 114, 111, 105, 100, 93, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 51, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 116, 32, 51, > 100, 32, 99, 111, 108, 111, 114, 32, 104, 105, 115, 116, 111, 103, 114, 97, > 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 51, 100, 32, 45, 99, 111, 108, 111, 114, 99, 117, > 98, 101, 51, 100, 32, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, > 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 97, 100, 100, 51, 100, 10, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 51, 100, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 71, 101, 116, 32, 51, 100, 32, 99, 111, > 108, 111, 114, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 32, 123, 119, 42, > 104, 125, 44, 51, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 111, 105, > 110, 116, 99, 108, 111, 117, 100, 32, 49, 32, 45, 110, 32, 48, 44, 50, > 53, 53, 32, 45, 109, 97, 112, 32, 51, 32, 45, 112, 111, 105, 110, 116, > 99, 108, 111, 117, 100, 51, 100, 32, 45, 110, 109, 32, 34, 91, 51, 100, > 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 93, 34, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 105, 109, 97, 103, 101, 54, 99, 117, 98, 101, 51, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, > 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, 99, 117, > 98, 101, 115, 32, 102, 114, 111, 109, 32, 54, 45, 115, 101, 116, 115, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 97, 110, 105, 109, 97, 116, > 101, 32, 102, 108, 111, 119, 101, 114, 44, 34, 51, 48, 44, 48, 34, 44, > 34, 51, 48, 44, 53, 34, 44, 54, 32, 45, 105, 109, 97, 103, 101, 54, > 99, 117, 98, 101, 51, 100, 10, 105, 109, 97, 103, 101, 54, 99, 117, 98, > 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, > 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, > 100, 32, 99, 117, 98, 101, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 77, 61, 123, 109, > 97, 120, 40, 64, 123, 45, 109, 97, 120, 95, 119, 104, 125, 41, 125, 32, > 45, 114, 32, 36, 77, 44, 36, 77, 44, 49, 44, 51, 32, 45, 105, 109, > 97, 103, 101, 112, 108, 97, 110, 101, 51, 100, 32, 45, 110, 51, 100, 32, > 45, 99, 51, 100, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, > 116, 40, 64, 35, 47, 54, 41, 125, 10, 45, 43, 51, 100, 91, 45, 54, > 93, 32, 48, 44, 48, 44, 45, 48, 46, 53, 10, 45, 114, 51, 100, 91, > 45, 53, 93, 32, 49, 44, 48, 44, 48, 44, 49, 56, 48, 32, 45, 43, > 51, 100, 91, 45, 53, 93, 32, 48, 44, 48, 44, 48, 46, 53, 10, 45, > 114, 51, 100, 91, 45, 52, 93, 32, 48, 44, 49, 44, 48, 44, 45, 57, > 48, 32, 45, 43, 51, 100, 91, 45, 52, 93, 32, 45, 48, 46, 53, 44, > 48, 44, 48, 10, 45, 114, 51, 100, 91, 45, 51, 93, 32, 48, 44, 49, > 44, 48, 44, 57, 48, 32, 45, 43, 51, 100, 91, 45, 51, 93, 32, 48, > 46, 53, 44, 48, 44, 48, 10, 45, 114, 51, 100, 91, 45, 50, 93, 32, > 49, 44, 48, 44, 48, 44, 57, 48, 32, 45, 43, 51, 100, 91, 45, 50, > 93, 32, 48, 44, 45, 48, 46, 53, 44, 48, 10, 45, 114, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 45, 57, 48, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 46, 53, 44, 48, 10, 45, > 43, 51, 100, 91, 45, 54, 45, 45, 49, 93, 32, 45, 110, 109, 91, 45, > 49, 93, 32, 34, 91, 51, 100, 32, 105, 109, 97, 103, 101, 32, 99, 117, > 98, 101, 93, 34, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 105, 109, 97, 103, 101, 98, 108, 111, 99, 107, 115, 51, 100, 32, 58, > 32, 95, 109, 97, 120, 105, 109, 117, 109, 95, 101, 108, 101, 118, 97, 116, > 105, 111, 110, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, > 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, > 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 98, 108, 111, 99, 107, > 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 84, 114, 97, 110, 115, 112, 97, 114, 101, 110, 99, 121, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 105, 115, 32, 116, 97, 107, 101, 110, 32, 105, 110, 116, 111, 32, 97, > 99, 99, 111, 117, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 109, 97, 120, 105, 109, 117, 109, 95, 101, 108, 101, 118, 97, 116, > 105, 111, 110, 61, 49, 48, 39, 32, 97, 110, 100, 32, 39, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 51, 50, 32, 45, > 105, 109, 97, 103, 101, 98, 108, 111, 99, 107, 115, 51, 100, 32, 45, 50, > 48, 32, 45, 109, 51, 100, 32, 51, 10, 105, 109, 97, 103, 101, 98, 108, > 111, 99, 107, 115, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 36, 123, 50, 61, 48, 125, 62, 61, 48, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 49, 48, 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, > 32, 51, 100, 32, 98, 108, 111, 99, 107, 115, 32, 102, 114, 111, 109, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 109, 97, > 120, 105, 109, 117, 109, 32, 101, 108, 101, 118, 97, 116, 105, 111, 110, 32, > 36, 49, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, > 91, 48, 93, 32, 105, 115, 95, 111, 112, 97, 99, 105, 116, 121, 61, 123, > 64, 35, 61, 61, 50, 125, 10, 45, 108, 91, 93, 32, 45, 98, 111, 120, > 51, 100, 32, 49, 44, 49, 44, 48, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 36, 119, 45, 49, 125, 32, 45, 45, 43, 51, 100, 91, 45, 49, > 93, 32, 49, 44, 48, 44, 48, 32, 45, 100, 111, 110, 101, 32, 45, 43, > 51, 100, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 104, 45, 49, > 125, 32, 45, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, > 48, 32, 45, 100, 111, 110, 101, 32, 45, 43, 51, 100, 10, 45, 101, 110, > 100, 108, 10, 45, 115, 51, 100, 91, 45, 49, 93, 10, 45, 45, 110, 111, > 114, 109, 91, 48, 93, 32, 45, 98, 91, 45, 49, 93, 32, 36, 50, 10, > 45, 121, 91, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 36, 49, 10, 45, 114, 91, 45, 53, 93, 32, 50, 52, 44, 64, 123, 45, > 53, 44, 114, 111, 117, 110, 100, 40, 119, 42, 104, 47, 50, 52, 41, 125, > 44, 49, 44, 49, 44, 45, 49, 10, 45, 105, 102, 32, 123, 36, 49, 60, > 48, 125, 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 50, > 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 53, 32, 45, > 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 56, 32, 45, 106, 91, > 45, 53, 93, 32, 91, 45, 49, 93, 44, 49, 49, 10, 45, 101, 108, 115, > 101, 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 49, 52, > 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 49, 55, 32, > 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 50, 48, 32, 45, > 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 50, 51, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 121, 91, > 45, 52, 93, 10, 45, 114, 109, 91, 45, 50, 93, 32, 45, 114, 91, 48, > 93, 32, 64, 123, 48, 44, 119, 42, 104, 125, 44, 49, 44, 49, 44, 49, > 48, 48, 37, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, > 48, 93, 32, 99, 120, 121, 122, 32, 45, 114, 91, 48, 93, 32, 54, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 44, 50, 32, > 45, 121, 91, 48, 93, 32, 45, 109, 118, 91, 48, 93, 32, 45, 49, 10, > 45, 105, 102, 32, 36, 105, 115, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 109, 118, 91, 48, 93, 32, 64, > 35, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 121, 91, > 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 54, 44, 49, 48, 48, > 37, 44, 49, 44, 49, 32, 45, 121, 91, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 105, 109, 97, 103, 101, 99, 117, 98, 101, 51, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 51, > 100, 32, 109, 97, 112, 112, 101, 100, 32, 99, 117, 98, 101, 115, 32, 102, > 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 105, 109, 97, 103, 101, > 99, 117, 98, 101, 51, 100, 10, 105, 109, 97, 103, 101, 99, 117, 98, 101, > 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, > 32, 99, 117, 98, 101, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 115, 108, 105, 99, > 101, 115, 32, 53, 48, 37, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 49, 61, 123, 119, > 45, 49, 125, 32, 104, 49, 61, 123, 104, 45, 49, 125, 10, 45, 105, 91, > 45, 50, 93, 32, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, > 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, > 49, 48, 48, 46, 53, 59, 92, 10, 56, 59, 54, 59, 92, 10, 45, 48, > 46, 53, 59, 45, 48, 46, 53, 59, 45, 48, 46, 53, 59, 92, 10, 48, > 46, 53, 59, 45, 48, 46, 53, 59, 45, 48, 46, 53, 59, 92, 10, 48, > 46, 53, 59, 48, 46, 53, 59, 45, 48, 46, 53, 59, 92, 10, 45, 48, > 46, 53, 59, 48, 46, 53, 59, 45, 48, 46, 53, 59, 92, 10, 45, 48, > 46, 53, 59, 45, 48, 46, 53, 59, 48, 46, 53, 59, 92, 10, 48, 46, > 53, 59, 45, 48, 46, 53, 59, 48, 46, 53, 59, 92, 10, 48, 46, 53, > 59, 48, 46, 53, 59, 48, 46, 53, 59, 92, 10, 45, 48, 46, 53, 59, > 48, 46, 53, 59, 48, 46, 53, 59, 92, 10, 49, 50, 59, 48, 59, 51, > 59, 50, 59, 49, 59, 48, 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, > 119, 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, 59, 92, 10, 49, > 50, 59, 49, 59, 50, 59, 54, 59, 53, 59, 48, 59, 48, 59, 48, 59, > 36, 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, > 48, 59, 92, 10, 49, 50, 59, 53, 59, 54, 59, 55, 59, 52, 59, 48, > 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, > 59, 36, 119, 49, 59, 48, 59, 92, 10, 49, 50, 59, 52, 59, 55, 59, > 51, 59, 48, 59, 48, 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, 119, > 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, 59, 92, 10, 49, 50, > 59, 52, 59, 48, 59, 49, 59, 53, 59, 48, 59, 48, 59, 48, 59, 36, > 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, > 59, 92, 10, 49, 50, 59, 51, 59, 55, 59, 54, 59, 50, 59, 48, 59, > 48, 59, 48, 59, 36, 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, 59, > 36, 119, 49, 59, 48, 59, 92, 10, 45, 49, 50, 56, 59, 123, 119, 125, > 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 121, 91, 45, 49, 93, > 10, 40, 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, 59, 45, 49, 50, > 56, 59, 48, 59, 48, 59, 48, 59, 45, 49, 50, 56, 59, 48, 59, 48, > 59, 48, 59, 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, 59, 45, 49, > 50, 56, 59, 48, 59, 48, 59, 48, 59, 49, 59, 49, 59, 49, 59, 49, > 59, 49, 59, 49, 41, 10, 45, 97, 32, 121, 10, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 97, > 103, 101, 112, 108, 97, 110, 101, 51, 100, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, > 97, 112, 112, 101, 100, 32, 112, 108, 97, 110, 101, 115, 32, 102, 114, 111, > 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 105, 109, 97, 103, 101, 112, 108, > 97, 110, 101, 51, 100, 10, 105, 109, 97, 103, 101, 112, 108, 97, 110, 101, > 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, > 32, 112, 108, 97, 110, 101, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 115, 108, 105, > 99, 101, 115, 32, 53, 48, 37, 32, 45, 116, 111, 95, 114, 103, 98, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 49, 61, 123, > 119, 45, 49, 125, 32, 104, 49, 61, 123, 104, 45, 49, 125, 10, 45, 105, > 91, 45, 50, 93, 32, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, > 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, > 59, 49, 48, 48, 46, 53, 59, 92, 10, 52, 59, 49, 59, 92, 10, 48, > 59, 48, 59, 48, 59, 92, 10, 123, 119, 125, 59, 48, 59, 48, 59, 92, > 10, 123, 119, 125, 59, 123, 104, 125, 59, 48, 59, 92, 10, 123, 48, 125, > 59, 123, 104, 125, 59, 48, 59, 92, 10, 49, 50, 59, 48, 59, 51, 59, > 50, 59, 49, 59, 48, 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, 119, > 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, 59, 92, 10, 45, 49, > 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, > 45, 121, 91, 45, 49, 93, 10, 40, 49, 41, 10, 45, 97, 32, 121, 10, > 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 105, 109, 97, 103, 101, 112, 121, 114, 97, 109, 105, 100, 51, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, 97, > 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, 112, 121, 114, > 97, 109, 105, 100, 101, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 105, 109, 97, 103, 101, 112, 121, 114, 97, 109, 105, 100, 51, > 100, 10, 105, 109, 97, 103, 101, 112, 121, 114, 97, 109, 105, 100, 51, 100, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 110, 101, > 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, 112, > 121, 114, 97, 109, 105, 100, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, > 61, 64, 123, 48, 44, 110, 125, 10, 119, 49, 61, 123, 119, 45, 49, 125, > 32, 104, 49, 61, 123, 104, 45, 49, 125, 32, 119, 50, 61, 123, 119, 47, > 50, 125, 10, 45, 105, 91, 45, 50, 93, 32, 40, 54, 55, 46, 53, 59, > 55, 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, > 59, 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 92, 10, 53, 59, > 53, 59, 92, 10, 45, 48, 46, 53, 59, 45, 48, 46, 53, 59, 45, 48, > 46, 53, 59, 92, 10, 48, 46, 53, 59, 45, 48, 46, 53, 59, 45, 48, > 46, 53, 59, 92, 10, 48, 46, 53, 59, 48, 46, 53, 59, 45, 48, 46, > 53, 59, 92, 10, 45, 48, 46, 53, 59, 48, 46, 53, 59, 45, 48, 46, > 53, 59, 92, 10, 48, 59, 48, 59, 48, 46, 53, 59, 92, 10, 49, 50, > 59, 48, 59, 51, 59, 50, 59, 49, 59, 48, 59, 48, 59, 48, 59, 36, > 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, > 59, 92, 10, 57, 59, 48, 59, 52, 59, 51, 59, 48, 59, 36, 104, 49, > 59, 36, 119, 50, 59, 48, 59, 36, 119, 49, 59, 36, 104, 49, 59, 92, > 10, 57, 59, 49, 59, 52, 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, > 119, 50, 59, 48, 59, 36, 119, 49, 59, 36, 104, 49, 59, 92, 10, 57, > 59, 50, 59, 52, 59, 49, 59, 48, 59, 36, 104, 49, 59, 36, 119, 50, > 59, 48, 59, 36, 119, 49, 59, 36, 104, 49, 59, 92, 10, 57, 59, 51, > 59, 52, 59, 50, 59, 48, 59, 36, 104, 49, 59, 36, 119, 50, 59, 48, > 59, 36, 119, 49, 59, 36, 104, 49, 59, 92, 10, 45, 49, 50, 56, 59, > 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 121, 91, > 45, 49, 93, 10, 40, 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, 59, > 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, 59, 45, 49, 50, 56, 59, > 48, 59, 48, 59, 48, 59, 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, > 59, 49, 59, 49, 59, 49, 59, 49, 59, 49, 41, 10, 45, 97, 32, 121, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 109, 97, 103, 101, 114, 117, 98, 105, 107, 51, 100, 32, > 58, 32, 95, 120, 121, 95, 116, 105, 108, 101, 115, 62, 61, 49, 44, 48, > 60, 61, 120, 121, 95, 115, 104, 105, 102, 116, 60, 61, 49, 48, 48, 44, > 48, 60, 61, 122, 95, 115, 104, 105, 102, 116, 60, 61, 49, 48, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, 97, 116, > 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, 114, 117, 98, 105, > 107, 39, 115, 32, 99, 117, 98, 101, 115, 32, 102, 114, 111, 109, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 120, 121, 95, 116, 105, 108, > 101, 115, 61, 51, 39, 44, 32, 39, 120, 121, 95, 115, 104, 105, 102, 116, > 61, 53, 39, 32, 97, 110, 100, 32, 39, 122, 95, 115, 104, 105, 102, 116, > 61, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 105, 109, 97, 103, 101, > 114, 117, 98, 105, 107, 51, 100, 32, 44, 10, 105, 109, 97, 103, 101, 114, > 117, 98, 105, 107, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 51, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, > 50, 61, 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, > 48, 48, 32, 38, 38, 32, 36, 123, 51, 61, 53, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 51, 60, 61, 49, 48, 48, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, > 32, 109, 97, 112, 112, 101, 100, 32, 114, 117, 98, 105, 107, 92, 52, 55, > 115, 32, 99, 117, 98, 101, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 36, 49, 32, 120, 121, 45, > 116, 105, 108, 101, 115, 44, 32, 120, 121, 45, 115, 104, 105, 102, 116, 32, > 36, 50, 32, 97, 110, 100, 32, 122, 45, 115, 104, 105, 102, 116, 32, 36, > 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, > 48, 44, 110, 125, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, > 41, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 53, 10, 40, 56, 44, > 53, 41, 10, 40, 48, 44, 48, 44, 48, 59, 92, 10, 49, 48, 48, 44, > 48, 44, 48, 59, 92, 10, 49, 48, 48, 44, 49, 48, 48, 44, 48, 59, > 92, 10, 48, 44, 49, 48, 48, 44, 48, 59, 92, 10, 36, 50, 44, 36, > 50, 44, 123, 45, 36, 51, 125, 59, 92, 10, 123, 49, 48, 48, 45, 36, > 50, 125, 44, 36, 50, 44, 123, 45, 36, 51, 125, 59, 92, 10, 123, 49, > 48, 48, 45, 36, 50, 125, 44, 123, 49, 48, 48, 45, 36, 50, 125, 44, > 123, 45, 36, 51, 125, 59, 92, 10, 36, 50, 44, 123, 49, 48, 48, 45, > 36, 50, 125, 44, 123, 45, 36, 51, 125, 41, 10, 40, 52, 44, 52, 44, > 55, 44, 54, 44, 53, 59, 92, 10, 52, 44, 48, 44, 52, 44, 53, 44, > 49, 59, 92, 10, 52, 44, 51, 44, 50, 44, 54, 44, 55, 59, 92, 10, > 52, 44, 48, 44, 51, 44, 55, 44, 52, 59, 92, 10, 52, 44, 49, 44, > 53, 44, 54, 44, 50, 41, 10, 51, 44, 53, 44, 49, 44, 49, 44, 50, > 48, 48, 10, 49, 44, 53, 44, 49, 44, 49, 44, 49, 10, 45, 121, 91, > 45, 54, 45, 45, 49, 93, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, > 32, 121, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, > 125, 32, 45, 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 48, 48, 32, > 45, 100, 111, 110, 101, 32, 45, 43, 51, 100, 91, 45, 36, 49, 45, 45, > 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, > 125, 32, 45, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 48, > 48, 32, 45, 100, 111, 110, 101, 32, 45, 43, 51, 100, 91, 45, 36, 49, > 45, 45, 49, 93, 10, 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 47, 51, 100, 91, > 45, 49, 93, 32, 36, 49, 32, 45, 45, 51, 100, 91, 45, 49, 93, 32, > 53, 48, 44, 53, 48, 44, 53, 48, 10, 45, 45, 114, 51, 100, 91, 45, > 49, 93, 32, 48, 44, 49, 44, 48, 44, 45, 57, 48, 32, 45, 45, 114, > 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 45, 57, 48, > 32, 45, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, > 44, 45, 57, 48, 10, 45, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, > 44, 48, 44, 49, 44, 45, 57, 48, 32, 45, 45, 114, 51, 100, 91, 45, > 49, 93, 32, 48, 44, 48, 44, 49, 44, 49, 56, 48, 10, 45, 43, 51, > 100, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 105, 109, 97, 103, 101, 115, 112, 104, 101, 114, 101, 51, > 100, 32, 58, 32, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 49, > 62, 61, 51, 44, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 50, > 62, 61, 51, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, > 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, > 115, 112, 104, 101, 114, 101, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 114, 101, 115, 111, 108, 117, 116, 105, 111, > 110, 49, 61, 51, 50, 39, 32, 97, 110, 100, 32, 39, 114, 101, 115, 111, > 108, 117, 116, 105, 111, 110, 115, 50, 61, 49, 54, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 105, 109, 97, 103, 101, 115, 112, 104, 101, 114, 101, 51, > 100, 32, 51, 50, 44, 49, 54, 10, 105, 109, 97, 103, 101, 115, 112, 104, > 101, 114, 101, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 51, 50, 125, 62, 61, 51, 32, 38, 38, 32, 36, 123, > 50, 61, 49, 54, 125, 62, 61, 51, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, > 97, 112, 112, 101, 100, 32, 115, 112, 104, 101, 114, 101, 32, 102, 114, 111, > 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, > 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 115, 32, 40, 36, 49, 44, > 36, 50, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, > 103, 98, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 116, > 119, 61, 123, 119, 45, 49, 125, 32, 116, 104, 61, 123, 104, 45, 49, 125, > 10, 110, 98, 118, 61, 123, 50, 43, 36, 49, 42, 40, 36, 50, 45, 50, > 41, 125, 10, 110, 98, 112, 61, 123, 36, 49, 42, 40, 36, 50, 45, 49, > 41, 125, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, > 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, > 48, 48, 46, 53, 59, 92, 10, 36, 110, 98, 118, 59, 36, 110, 98, 112, > 41, 10, 40, 48, 59, 48, 59, 49, 41, 32, 40, 48, 59, 48, 59, 45, > 49, 41, 32, 40, 48, 44, 123, 50, 42, 112, 105, 125, 59, 48, 44, 123, > 50, 42, 112, 105, 125, 94, 48, 44, 48, 59, 123, 112, 105, 125, 44, 123, > 112, 105, 125, 41, 10, 45, 114, 91, 45, 49, 93, 32, 123, 36, 49, 43, > 49, 125, 44, 36, 50, 44, 49, 44, 50, 44, 51, 32, 45, 122, 91, 45, > 49, 93, 32, 48, 44, 49, 44, 123, 119, 45, 50, 125, 44, 123, 104, 45, > 50, 125, 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, 45, 45, 115, 105, > 110, 91, 45, 49, 93, 32, 45, 45, 115, 105, 110, 91, 45, 51, 93, 32, > 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 45, 99, 111, 115, 91, > 45, 50, 93, 32, 45, 115, 105, 110, 91, 45, 51, 93, 32, 45, 99, 111, > 115, 91, 45, 52, 93, 32, 45, 42, 91, 45, 52, 44, 45, 51, 93, 10, > 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 112, 101, 114, > 109, 117, 116, 101, 91, 45, 49, 93, 32, 99, 120, 121, 122, 32, 45, 121, > 91, 45, 49, 93, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 121, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 116, 120, 48, 61, > 123, 36, 62, 42, 36, 116, 119, 47, 36, 49, 125, 32, 116, 120, 49, 61, > 123, 40, 36, 62, 43, 49, 41, 42, 36, 116, 119, 47, 36, 49, 125, 32, > 116, 121, 49, 61, 123, 36, 116, 104, 47, 40, 36, 50, 45, 49, 41, 125, > 10, 40, 57, 59, 48, 59, 123, 50, 43, 36, 62, 125, 59, 123, 50, 43, > 40, 36, 62, 43, 49, 41, 37, 36, 49, 125, 59, 123, 36, 116, 119, 47, > 50, 125, 59, 48, 59, 36, 116, 120, 48, 59, 36, 116, 121, 49, 59, 36, > 116, 120, 49, 59, 36, 116, 121, 49, 41, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 36, 50, 45, 51, 125, 10, 116, 121, 48, 61, 36, 116, 121, > 49, 32, 116, 121, 49, 61, 123, 40, 36, 62, 43, 50, 41, 42, 36, 116, > 104, 47, 40, 36, 50, 45, 49, 41, 125, 32, 105, 48, 61, 123, 50, 43, > 36, 62, 42, 36, 49, 43, 64, 123, 62, 44, 45, 50, 125, 125, 32, 105, > 49, 61, 123, 50, 43, 36, 62, 42, 36, 49, 43, 40, 64, 123, 62, 44, > 45, 50, 125, 43, 49, 41, 37, 36, 49, 125, 10, 40, 49, 50, 59, 36, > 105, 48, 59, 123, 36, 105, 48, 43, 36, 49, 125, 59, 123, 36, 105, 49, > 43, 36, 49, 125, 59, 36, 105, 49, 59, 36, 116, 120, 48, 59, 36, 116, > 121, 48, 59, 36, 116, 120, 48, 59, 36, 116, 121, 49, 59, 36, 116, 120, > 49, 59, 36, 116, 121, 49, 59, 36, 116, 120, 49, 59, 36, 116, 121, 48, > 41, 10, 45, 100, 111, 110, 101, 10, 40, 57, 59, 49, 59, 123, 50, 43, > 36, 49, 42, 40, 36, 50, 45, 51, 41, 43, 40, 36, 62, 43, 49, 41, > 37, 36, 49, 125, 59, 123, 50, 43, 36, 49, 42, 40, 36, 50, 45, 51, > 41, 43, 36, 62, 125, 59, 123, 36, 116, 119, 47, 50, 125, 59, 36, 116, > 104, 59, 36, 116, 120, 49, 59, 36, 116, 121, 49, 59, 36, 116, 120, 48, > 59, 36, 116, 121, 49, 41, 10, 45, 100, 111, 110, 101, 10, 45, 97, 91, > 45, 36, 110, 98, 112, 45, 45, 49, 93, 32, 121, 10, 45, 109, 118, 91, > 45, 52, 93, 32, 64, 35, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, > 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 51, 41, 32, 45, > 121, 91, 45, 49, 93, 32, 49, 44, 123, 52, 42, 40, 36, 110, 98, 112, > 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, > 48, 44, 48, 32, 49, 44, 36, 110, 98, 112, 44, 49, 44, 49, 44, 49, > 32, 45, 97, 32, 121, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 105, 115, 111, 108, 105, 110, 101, 51, > 100, 32, 58, 32, 105, 115, 111, 118, 97, 108, 117, 101, 91, 37, 93, 32, > 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 44, 118, 97, 108, 117, > 101, 44, 95, 120, 48, 44, 95, 121, 48, 44, 95, 120, 49, 44, 95, 121, > 49, 44, 95, 115, 105, 122, 101, 95, 120, 62, 48, 91, 37, 93, 44, 95, > 115, 105, 122, 101, 95, 121, 62, 48, 91, 37, 93, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, 116, 114, 97, > 99, 116, 32, 51, 100, 32, 105, 115, 111, 108, 105, 110, 101, 115, 32, 119, > 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, > 108, 117, 101, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 111, 114, 32, 102, 114, 111, 109, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, 111, 114, 109, 117, > 108, 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 120, 48, > 61, 121, 48, 61, 45, 51, 39, 44, 32, 39, 120, 49, 61, 121, 49, 61, > 51, 39, 32, 97, 110, 100, 32, 39, 115, 105, 122, 101, 95, 120, 61, 115, > 105, 122, 101, 95, 121, 61, 50, 53, 54, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 98, 108, 117, 114, 32, 49, 32, 45, 105, 115, 111, 108, 105, 110, > 101, 51, 100, 32, 53, 48, 37, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 45, 105, 115, 111, 108, 105, 110, 101, 51, 100, 32, 39, 88, > 61, 120, 45, 119, 47, 50, 59, 89, 61, 121, 45, 104, 47, 50, 59, 40, > 88, 94, 50, 43, 89, 94, 50, 41, 37, 50, 48, 39, 44, 49, 48, 44, > 45, 49, 48, 44, 45, 49, 48, 44, 49, 48, 44, 49, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, > 100, 32, 58, 32, 105, 115, 111, 118, 97, 108, 117, 101, 91, 37, 93, 32, > 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 44, 118, 97, 108, 117, > 101, 44, 95, 120, 48, 44, 95, 121, 48, 44, 95, 122, 48, 44, 95, 120, > 49, 44, 95, 121, 49, 44, 95, 122, 49, 44, 95, 115, 105, 122, 101, 95, > 120, 62, 48, 91, 37, 93, 44, 95, 115, 105, 122, 101, 95, 121, 62, 48, > 91, 37, 93, 44, 95, 115, 105, 122, 101, 95, 122, 62, 48, 91, 37, 93, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 69, 120, 116, 114, 97, 99, 116, 32, 51, 100, 32, 105, 115, 111, 115, 117, > 114, 102, 97, 99, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 111, 114, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 102, 111, 114, 109, 117, 108, 97, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 120, 48, 61, 121, 48, 61, 122, 48, 61, 45, > 51, 39, 44, 32, 39, 120, 49, 61, 121, 49, 61, 122, 49, 61, 51, 39, > 32, 97, 110, 100, 32, 39, 115, 105, 122, 101, 95, 120, 61, 115, 105, 122, > 101, 95, 121, 61, 115, 105, 122, 101, 95, 122, 61, 51, 50, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, > 49, 50, 56, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, 101, > 120, 112, 97, 110, 100, 95, 122, 32, 50, 44, 48, 32, 45, 98, 108, 117, > 114, 32, 49, 32, 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, > 100, 32, 53, 48, 37, 32, 45, 109, 117, 108, 51, 100, 32, 49, 44, 49, > 44, 51, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 39, 120, 94, > 50, 43, 121, 94, 50, 43, 97, 98, 115, 40, 122, 41, 94, 97, 98, 115, > 40, 52, 42, 99, 111, 115, 40, 120, 42, 121, 42, 122, 42, 51, 41, 41, > 39, 44, 51, 10, 35, 64, 103, 109, 105, 99, 32, 108, 97, 98, 101, 108, > 95, 112, 111, 105, 110, 116, 115, 51, 100, 32, 58, 32, 95, 108, 97, 98, > 101, 108, 95, 115, 105, 122, 101, 62, 48, 44, 95, 111, 112, 97, 99, 105, > 116, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, > 97, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 108, 97, 98, 101, 108, > 32, 116, 111, 32, 97, 108, 108, 32, 118, 101, 114, 116, 105, 99, 101, 115, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, > 111, 98, 106, 101, 99, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 49, 51, > 39, 32, 97, 110, 100, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, > 46, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 52, 48, 44, > 54, 44, 54, 32, 45, 108, 97, 98, 101, 108, 95, 112, 111, 105, 110, 116, > 115, 51, 100, 32, 50, 51, 44, 49, 32, 45, 109, 111, 100, 101, 51, 100, > 32, 49, 10, 108, 97, 98, 101, 108, 95, 112, 111, 105, 110, 116, 115, 51, > 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 49, > 51, 125, 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, > 46, 56, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 76, 97, 98, > 101, 108, 32, 118, 101, 114, 116, 105, 99, 101, 115, 32, 111, 102, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 112, > 51, 100, 91, 36, 62, 93, 32, 48, 32, 45, 108, 91, 45, 49, 93, 32, > 45, 115, 51, 100, 32, 45, 114, 109, 91, 45, 51, 45, 45, 49, 93, 10, > 110, 98, 112, 61, 64, 123, 45, 50, 44, 48, 125, 32, 45, 61, 91, 45, > 50, 93, 32, 36, 110, 98, 112, 44, 48, 44, 49, 10, 40, 49, 44, 48, > 59, 49, 44, 123, 36, 110, 98, 112, 45, 49, 125, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 50, 44, 36, 110, 98, 112, 44, 49, 44, 49, 44, 51, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 50, 42, 104, 125, 44, > 49, 44, 49, 44, 45, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 110, 98, 112, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 62, 44, > 48, 44, 48, 44, 36, 49, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, > 49, 93, 32, 48, 10, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, > 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 51, 41, 32, 45, 121, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 110, 98, 112, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, > 36, 62, 44, 48, 44, 48, 44, 36, 49, 44, 49, 44, 36, 50, 32, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 48, 10, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 49, 41, 32, 45, 121, 91, 45, 49, 93, 10, 45, 100, > 111, 110, 101, 10, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 10, 45, > 43, 51, 100, 91, 36, 62, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 97, 116, > 104, 101, 51, 100, 32, 58, 32, 95, 114, 101, 115, 111, 108, 117, 116, 105, > 111, 110, 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 91, 37, 93, 62, 61, 48, 44, 95, 109, 97, 120, 95, 97, 110, 103, 108, > 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 98, > 105, 110, 97, 114, 121, 32, 88, 89, 45, 112, 114, 111, 102, 105, 108, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 101, 115, > 111, 108, 117, 116, 105, 111, 110, 61, 49, 50, 56, 39, 44, 32, 39, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 53, 37, 39, 32, > 97, 110, 100, 32, 39, 109, 97, 120, 95, 97, 110, 103, 108, 101, 61, 51, > 54, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 51, 48, 48, 44, 51, 48, 48, 32, 45, 114, 97, 110, 100, 32, 45, 49, > 44, 49, 32, 45, 98, 108, 117, 114, 32, 52, 48, 32, 45, 115, 105, 103, > 110, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, > 53, 53, 32, 45, 108, 97, 116, 104, 101, 51, 100, 32, 44, 10, 108, 97, > 116, 104, 101, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 49, 50, 56, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 48, 46, 53, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 51, 61, 51, 54, 49, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 108, 97, 116, > 104, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, > 111, 109, 32, 88, 89, 45, 112, 114, 111, 102, 105, 108, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, > 32, 36, 49, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, > 36, 50, 32, 97, 110, 100, 32, 109, 97, 120, 105, 109, 117, 109, 32, 97, > 110, 103, 108, 101, 32, 36, 51, 32, 100, 101, 103, 46, 34, 10, 45, 118, > 32, 45, 32, 116, 109, 97, 120, 61, 123, 40, 36, 51, 45, 49, 56, 48, > 41, 42, 112, 105, 47, 49, 56, 48, 125, 32, 45, 110, 111, 114, 109, 32, > 45, 110, 32, 48, 44, 49, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 119, 114, 61, 123, 109, 97, 120, 40, 49, 44, 119, > 50, 61, 50, 42, 119, 59, 105, 102, 40, 119, 50, 62, 104, 44, 109, 105, > 110, 40, 36, 49, 44, 119, 50, 41, 44, 109, 105, 110, 40, 36, 49, 44, > 104, 41, 42, 119, 50, 47, 104, 41, 41, 125, 10, 104, 114, 61, 123, 109, > 97, 120, 40, 49, 44, 119, 50, 61, 50, 42, 119, 59, 105, 102, 40, 119, > 50, 62, 104, 44, 109, 105, 110, 40, 36, 49, 44, 119, 50, 41, 42, 104, > 47, 119, 50, 44, 109, 105, 110, 40, 36, 49, 44, 104, 41, 41, 41, 125, > 10, 114, 109, 97, 120, 61, 123, 115, 113, 114, 116, 40, 40, 36, 119, 114, > 41, 94, 50, 43, 40, 36, 104, 114, 41, 94, 50, 41, 47, 50, 125, 10, > 36, 119, 114, 44, 49, 44, 36, 119, 114, 44, 49, 44, 34, 120, 99, 61, > 120, 45, 119, 47, 50, 59, 32, 122, 99, 61, 122, 45, 100, 47, 50, 59, > 32, 116, 61, 97, 116, 97, 110, 50, 40, 122, 99, 44, 120, 99, 41, 59, > 32, 105, 102, 40, 116, 62, 34, 36, 116, 109, 97, 120, 34, 44, 34, 36, > 114, 109, 97, 120, 34, 44, 115, 113, 114, 116, 40, 120, 99, 42, 120, 99, > 43, 122, 99, 42, 122, 99, 41, 41, 34, 10, 45, 42, 91, 45, 49, 93, > 32, 123, 50, 42, 40, 64, 123, 45, 50, 44, 119, 125, 45, 49, 41, 47, > 40, 119, 45, 49, 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, > 114, 44, 36, 104, 114, 44, 36, 119, 114, 10, 40, 48, 59, 123, 64, 123, > 45, 50, 44, 104, 125, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 36, 119, 114, 44, 36, 104, 114, 44, 36, 119, 114, 44, 49, 44, 51, > 32, 45, 97, 91, 45, 50, 45, 45, 49, 93, 32, 99, 10, 45, 119, 97, > 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 120, 112, 97, 110, > 100, 95, 120, 121, 122, 32, 49, 48, 44, 48, 32, 45, 98, 32, 36, 50, > 32, 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 53, > 48, 37, 32, 45, 114, 118, 51, 100, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 108, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 108, 105, 103, 104, 116, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 108, 105, 103, 104, 116, 51, 100, 32, 58, > 32, 112, 111, 115, 105, 116, 105, 111, 110, 95, 120, 44, 112, 111, 115, 105, > 116, 105, 111, 110, 95, 121, 44, 112, 111, 115, 105, 116, 105, 111, 110, 95, > 122, 32, 58, 32, 91, 116, 101, 120, 116, 117, 114, 101, 93, 32, 58, 32, > 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 116, 104, 101, > 32, 108, 105, 103, 104, 116, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, > 101, 115, 32, 111, 114, 32, 116, 104, 101, 32, 108, 105, 103, 104, 116, 32, > 116, 101, 120, 116, 117, 114, 101, 32, 102, 111, 114, 32, 51, 100, 32, 114, > 101, 110, 100, 101, 114, 105, 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 108, 51, 100, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 110, 111, > 97, 114, 103, 115, 41, 32, 114, 101, 115, 101, 116, 115, 32, 116, 104, 101, > 32, 51, 100, 32, 108, 105, 103, 104, 116, 32, 116, 111, 32, 100, 101, 102, > 97, 117, 108, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, > 32, 45, 100, 111, 117, 98, 108, 101, 51, 100, 32, 48, 32, 45, 115, 112, > 101, 99, 115, 51, 100, 32, 49, 46, 50, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 53, 32, 45, 108, 105, 103, 104, 116, 51, 100, 32, 123, 36, 62, > 42, 49, 48, 48, 125, 44, 48, 44, 45, 51, 48, 48, 32, 45, 45, 115, > 110, 97, 112, 115, 104, 111, 116, 51, 100, 91, 48, 93, 32, 52, 48, 48, > 32, 45, 100, 111, 110, 101, 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, > 93, 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, 110, 101, 51, 100, 32, > 58, 32, 120, 48, 44, 121, 48, 44, 122, 48, 44, 120, 49, 44, 121, 49, > 44, 122, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, > 117, 116, 32, 51, 100, 32, 108, 105, 110, 101, 32, 97, 116, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, > 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 48, 32, 97, 61, 123, 36, > 62, 42, 112, 105, 47, 53, 48, 125, 32, 45, 108, 105, 110, 101, 51, 100, > 32, 48, 44, 48, 44, 48, 44, 123, 99, 111, 115, 40, 51, 42, 36, 97, > 41, 125, 44, 123, 115, 105, 110, 40, 50, 42, 36, 97, 41, 125, 44, 48, > 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, > 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, > 51, 100, 10, 108, 105, 110, 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 108, 105, > 110, 101, 32, 40, 36, 123, 49, 45, 51, 125, 41, 45, 40, 36, 123, 52, > 45, 54, 125, 41, 46, 34, 10, 45, 118, 32, 45, 32, 49, 44, 50, 49, > 44, 49, 44, 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, > 48, 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, > 49, 48, 48, 46, 53, 44, 50, 44, 49, 44, 36, 123, 49, 45, 54, 125, > 44, 50, 44, 48, 44, 49, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, > 48, 48, 44, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 108, 105, 110, 101, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 108, 105, 115, 115, 97, 106, 111, 117, 115, 51, 100, 32, > 58, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 62, 49, 44, 97, > 44, 65, 44, 98, 44, 66, 44, 99, 44, 67, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 108, 105, 115, > 115, 97, 106, 111, 117, 115, 32, 99, 117, 114, 118, 101, 115, 32, 40, 120, > 40, 116, 41, 61, 115, 105, 110, 40, 97, 42, 116, 43, 65, 42, 50, 42, > 112, 105, 41, 44, 121, 40, 116, 41, 61, 115, 105, 110, 40, 98, 42, 116, > 43, 66, 42, 50, 42, 112, 105, 41, 44, 122, 40, 116, 41, 61, 115, 105, > 110, 40, 99, 42, 116, 43, 67, 42, 50, 42, 112, 105, 41, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 101, 115, 111, 108, 117, > 116, 105, 111, 110, 61, 49, 48, 50, 52, 39, 44, 32, 39, 97, 61, 50, > 39, 44, 32, 39, 65, 61, 48, 39, 44, 32, 39, 98, 61, 49, 39, 44, > 32, 39, 66, 61, 48, 39, 44, 32, 39, 99, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 67, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 108, 105, 115, 115, 97, 106, 111, 117, 115, 51, 100, > 32, 44, 10, 108, 105, 115, 115, 97, 106, 111, 117, 115, 51, 100, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 49, 48, 50, 52, > 125, 62, 49, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 125, > 44, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 49, 125, 44, 36, > 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, 55, > 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, > 117, 116, 32, 51, 100, 32, 108, 105, 115, 115, 97, 106, 111, 117, 115, 32, > 99, 117, 114, 118, 101, 44, 32, 119, 105, 116, 104, 32, 114, 101, 115, 111, > 108, 117, 116, 105, 111, 110, 32, 36, 49, 44, 32, 40, 97, 44, 65, 41, > 61, 40, 36, 50, 44, 36, 51, 41, 44, 32, 40, 98, 44, 66, 41, 61, > 40, 36, 52, 44, 36, 53, 41, 32, 97, 110, 100, 32, 40, 99, 44, 67, > 41, 61, 40, 36, 54, 44, 36, 55, 41, 46, 34, 10, 45, 118, 32, 45, > 10, 114, 101, 115, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, > 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, > 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, > 46, 53, 59, 36, 114, 101, 115, 59, 123, 36, 114, 101, 115, 45, 49, 125, > 41, 10, 40, 48, 44, 123, 50, 42, 112, 105, 125, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 36, 114, 101, 115, 44, 49, 44, 49, 44, 49, 44, 51, > 32, 91, 45, 49, 93, 120, 50, 10, 45, 42, 91, 45, 51, 93, 32, 36, > 50, 32, 45, 43, 91, 45, 51, 93, 32, 123, 36, 51, 42, 50, 42, 112, > 105, 125, 32, 45, 42, 91, 45, 50, 93, 32, 36, 52, 32, 45, 43, 91, > 45, 50, 93, 32, 123, 36, 53, 42, 50, 42, 112, 105, 125, 32, 45, 42, > 91, 45, 49, 93, 32, 36, 54, 32, 45, 43, 91, 45, 49, 93, 32, 123, > 36, 55, 42, 50, 42, 112, 105, 125, 10, 45, 97, 91, 45, 51, 45, 45, > 49, 93, 32, 121, 32, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 114, 91, > 45, 49, 93, 32, 49, 44, 123, 119, 42, 104, 125, 44, 49, 44, 49, 44, > 45, 49, 10, 49, 44, 123, 36, 114, 101, 115, 45, 49, 125, 44, 49, 44, > 49, 44, 50, 32, 40, 48, 59, 123, 36, 114, 101, 115, 45, 50, 125, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 36, 114, 101, 115, 45, > 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 45, 43, 91, 45, 49, 93, > 32, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, 32, 45, > 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 44, 123, 119, 42, 104, 125, 44, 49, 44, 49, 44, 45, > 49, 10, 49, 44, 123, 51, 42, 40, 36, 114, 101, 115, 45, 49, 41, 125, > 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 123, 36, 114, 101, 115, > 45, 49, 125, 44, 49, 44, 49, 44, 49, 32, 45, 97, 91, 45, 53, 45, > 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, > 100, 92, 32, 108, 105, 115, 115, 97, 106, 111, 117, 93, 10, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 51, 100, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 109, 111, 100, 101, 51, 100, 39, 46, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 109, 111, > 100, 101, 51, 100, 32, 58, 32, 95, 109, 111, 100, 101, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, > 115, 116, 97, 116, 105, 99, 32, 51, 100, 32, 114, 101, 110, 100, 101, 114, > 105, 110, 103, 32, 109, 111, 100, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 51, 100, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 109, 111, > 100, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, > 98, 111, 117, 110, 100, 105, 110, 103, 45, 98, 111, 120, 32, 124, 32, 48, > 61, 100, 111, 116, 115, 32, 124, 32, 49, 61, 119, 105, 114, 101, 102, 114, > 97, 109, 101, 32, 124, 32, 50, 61, 102, 108, 97, 116, 32, 124, 32, 51, > 61, 102, 108, 97, 116, 45, 115, 104, 97, 100, 101, 100, 32, 124, 32, 52, > 61, 103, 111, 117, 114, 97, 117, 100, 45, 115, 104, 97, 100, 101, 100, 32, > 124, 32, 53, 61, 112, 104, 111, 110, 103, 45, 115, 104, 97, 100, 101, 100, > 32, 125, 46, 34, 41, 59, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 66, 111, 117, 110, 100, 105, 110, 103, 45, 98, 111, 120, 32, 109, 111, 100, > 101, 32, 40, 39, 109, 111, 100, 101, 61, 61, 45, 49, 39, 41, 32, 105, > 115, 32, 97, 99, 116, 105, 118, 101, 32, 111, 110, 108, 121, 32, 102, 111, > 114, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, > 101, 32, 51, 100, 32, 118, 105, 101, 119, 101, 114, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 109, 111, 100, 101, 61, 52, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 49, 44, 50, > 44, 51, 44, 52, 44, 53, 41, 32, 45, 100, 111, 117, 98, 108, 101, 51, > 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 32, > 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, 32, > 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 49, 44, > 49, 44, 48, 44, 54, 48, 32, 45, 109, 111, 100, 101, 51, 100, 32, 64, > 123, 48, 44, 36, 62, 125, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, > 51, 100, 91, 45, 49, 93, 32, 51, 48, 48, 32, 45, 100, 111, 110, 101, > 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 109, 100, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 109, 111, 100, 101, 100, 51, 100, 39, 46, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 109, 111, 100, 101, 100, 51, > 100, 32, 58, 32, 95, 109, 111, 100, 101, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 100, 121, 110, > 97, 109, 105, 99, 32, 51, 100, 32, 114, 101, 110, 100, 101, 114, 105, 110, > 103, 32, 109, 111, 100, 101, 32, 102, 111, 114, 32, 105, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 32, 51, 100, 32, 118, 105, 101, 119, 101, 114, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 109, 100, 51, 100, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 109, 111, 100, 101, 39, 32, 99, 97, 110, > 32, 98, 101, 32, 123, 32, 45, 49, 61, 98, 111, 117, 110, 100, 105, 110, > 103, 45, 98, 111, 120, 32, 124, 32, 48, 61, 100, 111, 116, 115, 32, 124, > 32, 49, 61, 119, 105, 114, 101, 102, 114, 97, 109, 101, 32, 124, 32, 50, > 61, 102, 108, 97, 116, 32, 124, 32, 51, 61, 102, 108, 97, 116, 45, 115, > 104, 97, 100, 101, 100, 32, 124, 32, 52, 61, 103, 111, 117, 114, 97, 117, > 100, 45, 115, 104, 97, 100, 101, 100, 32, 124, 32, 53, 61, 112, 104, 111, > 110, 103, 45, 115, 104, 97, 100, 101, 100, 32, 125, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 109, 111, 100, 101, 61, 45, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 42, 51, 100, 32, 58, 32, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 109, 117, 108, 51, 100, 39, 46, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 109, 117, 108, 51, 100, > 32, 58, 32, 102, 97, 99, 116, 111, 114, 32, 58, 32, 102, 97, 99, 116, > 111, 114, 95, 120, 44, 102, 97, 99, 116, 111, 114, 95, 121, 44, 95, 102, > 97, 99, 116, 111, 114, 95, 122, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 99, 97, 108, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, > 32, 105, 115, 111, 116, 114, 111, 112, 105, 99, 97, 108, 108, 121, 32, 111, > 114, 32, 97, 110, 105, 115, 111, 116, 114, 111, 112, 105, 99, 97, 108, 108, > 121, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 102, 97, 99, 116, 111, 114, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 42, 51, > 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 102, 97, > 99, 116, 111, 114, 95, 122, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 53, > 44, 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, 32, 45, 45, 97, > 100, 100, 51, 100, 91, 45, 49, 93, 32, 49, 48, 44, 48, 44, 48, 32, > 45, 109, 117, 108, 51, 100, 91, 45, 49, 93, 32, 49, 46, 50, 32, 45, > 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, > 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 110, 51, 100, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 51, 100, 39, 46, 10, 110, 51, 100, 32, 58, 10, 45, 95, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 51, 100, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 78, 111, 114, 109, 97, 108, 105, 122, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 115, 32, 116, 111, 32, 117, 110, 105, 116, 32, 115, 105, 122, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 110, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, > 48, 32, 45, 99, 105, 114, 99, 108, 101, 51, 100, 32, 123, 63, 40, 51, > 41, 125, 44, 123, 63, 40, 51, 41, 125, 44, 123, 63, 40, 51, 41, 125, > 44, 48, 46, 49, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, > 100, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, > 53, 53, 44, 48, 44, 48, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 51, 100, 91, 45, 49, 93, 32, 45, 99, 111, 108, 111, 114, 51, > 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 44, 48, 32, 45, 97, > 100, 100, 51, 100, 10, 110, 111, 114, 109, 97, 108, 105, 122, 101, 51, 100, > 32, 58, 10, 45, 95, 36, 48, 10, 95, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 51, 100, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, > 34, 78, 111, 114, 109, 97, 108, 105, 122, 101, 32, 115, 105, 122, 101, 32, > 111, 102, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 99, 104, 101, 99, 107, 51, 100, 32, 48, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 110, 61, 123, 105, 91, 54, 93, 125, 10, 45, 105, 102, 32, > 123, 36, 110, 62, 48, 125, 10, 45, 115, 104, 32, 56, 44, 123, 55, 43, > 51, 42, 36, 110, 125, 44, 48, 44, 48, 32, 45, 114, 91, 45, 49, 93, > 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, > 45, 115, 91, 45, 49, 93, 32, 120, 10, 45, 115, 104, 91, 45, 52, 93, > 32, 56, 44, 123, 55, 43, 51, 42, 36, 110, 125, 44, 48, 44, 48, 32, > 45, 47, 91, 45, 49, 93, 32, 123, 118, 97, 108, 61, 109, 97, 120, 40, > 64, 123, 45, 51, 44, 105, 77, 125, 45, 64, 123, 45, 51, 44, 105, 109, > 125, 44, 64, 123, 45, 50, 44, 105, 77, 125, 45, 64, 123, 45, 50, 44, > 105, 109, 125, 44, 105, 77, 45, 105, 109, 41, 59, 105, 102, 40, 118, 97, > 108, 44, 118, 97, 108, 44, 49, 41, 125, 10, 45, 114, 109, 91, 45, 52, > 45, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 32, > 64, 123, 48, 44, 110, 125, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 111, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 111, 112, 97, 99, 105, 116, 121, 51, 100, 39, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 111, 112, 97, 99, 105, 116, 121, > 51, 100, 32, 58, 32, 95, 111, 112, 97, 99, 105, 116, 121, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, > 32, 111, 112, 97, 99, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 111, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, > 115, 51, 100, 32, 49, 48, 48, 44, 49, 48, 32, 45, 100, 111, 117, 98, > 108, 101, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 55, > 32, 45, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 48, 44, 48, 44, 50, 48, 32, 45, 111, 112, 97, 99, 105, 116, > 121, 51, 100, 91, 45, 49, 93, 32, 123, 63, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 97, 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 51, 100, 32, 58, 32, 95, > 120, 40, 97, 44, 98, 41, 44, 95, 121, 40, 97, 44, 98, 41, 44, 95, > 122, 40, 97, 44, 98, 41, 44, 95, 97, 109, 105, 110, 44, 95, 97, 109, > 97, 120, 44, 95, 98, 109, 105, 110, 44, 95, 98, 109, 97, 120, 44, 95, > 114, 101, 115, 95, 97, 62, 48, 44, 95, 114, 101, 115, 95, 98, 62, 48, > 44, 95, 114, 101, 115, 95, 120, 62, 48, 44, 95, 114, 101, 115, 95, 121, > 62, 48, 44, 95, 114, 101, 115, 95, 122, 62, 48, 44, 95, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, 105, 115, 111, 118, > 97, 108, 117, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 115, 117, 114, 102, 97, > 99, 101, 32, 40, 120, 40, 97, 44, 98, 41, 44, 121, 40, 97, 44, 98, > 41, 44, 122, 40, 97, 44, 98, 41, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 120, 61, 40, 50, 43, 99, 111, 115, 40, 98, 41, > 41, 42, 115, 105, 110, 40, 97, 41, 39, 44, 32, 39, 121, 61, 40, 50, > 43, 99, 111, 115, 40, 98, 41, 41, 42, 99, 111, 115, 40, 97, 41, 39, > 44, 32, 39, 99, 61, 115, 105, 110, 40, 98, 41, 39, 44, 32, 39, 97, > 109, 105, 110, 61, 45, 112, 105, 39, 44, 32, 39, 97, 109, 97, 120, 61, > 39, 112, 105, 39, 44, 32, 39, 98, 109, 105, 110, 61, 45, 112, 105, 39, > 44, 32, 39, 98, 109, 97, 120, 61, 39, 112, 105, 39, 44, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 114, 101, 115, 95, 97, 61, 53, 49, > 50, 39, 44, 32, 39, 114, 101, 115, 95, 98, 61, 114, 101, 115, 95, 97, > 39, 44, 32, 39, 114, 101, 115, 95, 120, 61, 54, 52, 39, 44, 32, 39, > 114, 101, 115, 95, 121, 61, 114, 101, 115, 95, 120, 39, 44, 32, 39, 114, > 101, 115, 95, 122, 61, 114, 101, 115, 95, 121, 39, 44, 32, 39, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 61, 50, 37, 39, 32, 97, 110, 100, > 32, 39, 105, 115, 111, 118, 97, 108, 117, 101, 61, 49, 48, 37, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 112, 97, 114, > 97, 109, 101, 116, 114, 105, 99, 51, 100, 32, 44, 10, 112, 97, 114, 97, > 109, 101, 116, 114, 105, 99, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 34, 36, 123, 49, 61, 40, 50, 43, 99, 111, 115, 40, 98, 41, 41, > 42, 115, 105, 110, 40, 97, 41, 125, 34, 44, 34, 36, 123, 50, 61, 40, > 50, 43, 99, 111, 115, 40, 98, 41, 41, 42, 99, 111, 115, 40, 97, 41, > 125, 34, 44, 34, 36, 123, 51, 61, 115, 105, 110, 40, 98, 41, 125, 34, > 10, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 123, 45, 112, 105, 125, > 125, 44, 36, 123, 53, 61, 123, 112, 105, 125, 125, 44, 36, 123, 54, 61, > 123, 45, 112, 105, 125, 125, 44, 36, 123, 55, 61, 123, 112, 105, 125, 125, > 10, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 56, 61, 53, 49, 50, > 125, 62, 48, 32, 38, 38, 32, 36, 123, 57, 61, 36, 56, 125, 62, 48, > 32, 38, 38, 32, 36, 123, 49, 48, 61, 54, 52, 125, 62, 48, 32, 38, > 38, 32, 36, 123, 49, 49, 61, 36, 49, 48, 125, 62, 48, 32, 38, 38, > 32, 36, 123, 49, 50, 61, 36, 49, 49, 125, 62, 48, 32, 38, 38, 32, > 92, 10, 36, 123, 49, 51, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 49, 52, 61, 49, 48, 37, 125, 62, 61, 48, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, > 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, 111, 109, 32, 112, 97, 114, > 97, 109, 101, 116, 114, 105, 99, 32, 115, 117, 114, 102, 97, 99, 101, 32, > 40, 36, 49, 44, 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, > 45, 10, 40, 36, 52, 44, 36, 53, 59, 36, 52, 44, 36, 53, 94, 36, > 54, 44, 36, 54, 59, 36, 55, 44, 36, 55, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 36, 56, 44, 36, 57, 44, 49, 44, 50, 44, 51, 32, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 50, > 10, 45, 102, 91, 45, 49, 93, 32, 34, 97, 61, 105, 40, 120, 44, 121, > 44, 48, 44, 48, 41, 59, 98, 61, 105, 40, 120, 44, 121, 44, 48, 44, > 49, 41, 59, 105, 102, 40, 99, 61, 61, 48, 44, 36, 49, 44, 105, 102, > 40, 99, 61, 61, 49, 44, 36, 50, 44, 36, 51, 41, 41, 34, 10, 45, > 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, 120, 109, 105, 110, 61, > 123, 105, 109, 125, 32, 120, 109, 97, 120, 61, 123, 105, 77, 125, 32, 45, > 110, 91, 45, 49, 93, 32, 49, 54, 44, 123, 36, 49, 48, 45, 49, 55, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, > 93, 32, 49, 44, 49, 32, 121, 109, 105, 110, 61, 123, 105, 109, 125, 32, > 121, 109, 97, 120, 61, 123, 105, 77, 125, 32, 45, 110, 91, 45, 49, 93, > 32, 49, 54, 44, 123, 36, 49, 49, 45, 49, 55, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, > 32, 122, 109, 105, 110, 61, 123, 105, 109, 125, 32, 122, 109, 97, 120, 61, > 123, 105, 77, 125, 32, 45, 110, 91, 45, 49, 93, 32, 49, 54, 44, 123, > 36, 49, 50, 45, 49, 55, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 104, 125, 44, 51, 44, 49, > 44, 49, 44, 45, 49, 10, 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, > 100, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, 93, 32, 36, > 49, 48, 44, 36, 49, 49, 44, 36, 49, 50, 44, 49, 44, 48, 32, 45, > 98, 91, 45, 49, 93, 32, 36, 49, 51, 44, 48, 10, 45, 105, 115, 111, > 115, 117, 114, 102, 97, 99, 101, 51, 100, 91, 45, 49, 93, 32, 36, 49, > 52, 10, 45, 99, 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, 91, > 45, 49, 93, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 123, 36, 120, > 109, 97, 120, 45, 36, 120, 109, 105, 110, 125, 44, 123, 36, 121, 109, 97, > 120, 45, 36, 121, 109, 105, 110, 125, 44, 123, 36, 122, 109, 97, 120, 45, > 36, 122, 109, 105, 110, 125, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 93, 10, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 99, 97, 95, > 112, 97, 116, 99, 104, 51, 100, 32, 58, 32, 95, 112, 97, 116, 99, 104, > 95, 115, 105, 122, 101, 62, 48, 44, 95, 77, 62, 48, 44, 95, 78, 62, > 48, 44, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 105, 110, 112, > 117, 116, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 95, 111, 117, 116, 112, 117, 116, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 108, 97, 109, 98, 100, 97, > 95, 120, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 116, > 32, 51, 100, 32, 112, 97, 116, 99, 104, 45, 112, 99, 97, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 101, 32, 51, 100, > 32, 112, 97, 116, 99, 104, 45, 112, 99, 97, 32, 105, 115, 32, 101, 115, > 116, 105, 109, 97, 116, 101, 100, 32, 102, 114, 111, 109, 32, 77, 32, 112, > 97, 116, 99, 104, 101, 115, 32, 111, 110, 32, 116, 104, 101, 32, 105, 110, > 112, 117, 116, 32, 105, 109, 97, 103, 101, 44, 32, 97, 110, 100, 32, 100, > 105, 115, 112, 108, 97, 121, 101, 100, 32, 97, 115, 32, 97, 32, 99, 108, > 111, 117, 100, 32, 111, 102, 32, 78, 32, 51, 100, 32, 112, 111, 105, 110, > 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 112, 97, > 116, 99, 104, 95, 115, 105, 122, 101, 61, 55, 39, 44, 32, 39, 77, 61, > 49, 48, 48, 48, 39, 44, 32, 39, 78, 61, 51, 48, 48, 48, 39, 44, > 32, 39, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 105, 110, 112, 117, > 116, 61, 49, 39, 44, 32, 39, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 95, 111, 117, 116, 112, 117, 116, 61, 48, 39, 44, 32, 97, 110, 100, 32, > 39, 108, 97, 109, 98, 100, 97, 95, 120, 121, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 112, 99, 97, 95, 112, 97, 116, 99, 104, 51, 100, > 32, 55, 10, 112, 99, 97, 95, 112, 97, 116, 99, 104, 51, 100, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, > 123, 49, 61, 55, 125, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 49, 48, 48, 48, > 125, 41, 32, 38, 38, 32, 36, 50, 62, 48, 32, 38, 38, 32, 105, 115, > 105, 110, 116, 40, 36, 123, 51, 61, 51, 48, 48, 48, 125, 41, 32, 38, > 38, 32, 36, 51, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 52, 61, 49, 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 116, 32, > 51, 100, 32, 112, 97, 116, 99, 104, 45, 112, 99, 97, 32, 114, 101, 112, > 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 34, 64, 123, 45, 97, > 114, 103, 92, 32, 49, 43, 40, 64, 35, 62, 49, 41, 44, 115, 44, 34, > 34, 125, 34, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 102, 114, 111, 109, 32, 36, 50, 32, 36, 49, 120, 36, 49, 32, 105, 110, > 112, 117, 116, 32, 112, 97, 116, 99, 104, 115, 44, 32, 34, 92, 10, 34, > 119, 105, 116, 104, 32, 36, 51, 32, 111, 117, 116, 112, 117, 116, 32, 112, > 97, 116, 99, 104, 115, 44, 32, 105, 110, 112, 117, 116, 32, 110, 111, 114, > 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, 32, 34, 64, 123, 45, 97, > 114, 103, 92, 32, 49, 43, 33, 36, 52, 44, 101, 110, 97, 98, 108, 101, > 100, 44, 100, 105, 115, 97, 98, 108, 101, 100, 125, 34, 44, 32, 111, 117, > 116, 112, 117, 116, 32, 110, 111, 114, 109, 97, 108, 105, 122, 97, 116, 105, > 111, 110, 32, 34, 92, 10, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 33, 36, 53, 44, 101, 110, 97, 98, 108, 101, 100, 44, 100, 105, 115, 97, > 98, 108, 101, 100, 125, 34, 32, 97, 110, 100, 32, 108, 97, 109, 98, 100, > 97, 95, 120, 121, 32, 36, 54, 46, 34, 10, 45, 118, 32, 45, 10, 80, > 49, 61, 123, 105, 110, 116, 40, 36, 49, 47, 50, 41, 125, 10, 80, 50, > 61, 123, 36, 49, 45, 36, 80, 49, 45, 49, 125, 10, 45, 110, 32, 48, > 44, 50, 53, 53, 32, 45, 114, 111, 117, 110, 100, 32, 49, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 115, 61, 123, 115, 125, 10, > 49, 44, 36, 50, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, > 44, 64, 123, 48, 44, 119, 45, 49, 125, 32, 45, 45, 114, 97, 110, 100, > 91, 45, 49, 93, 32, 48, 44, 64, 123, 48, 44, 104, 45, 49, 125, 32, > 45, 45, 102, 91, 45, 49, 93, 32, 48, 32, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 120, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, > 32, 49, 32, 45, 45, 112, 97, 116, 99, 104, 101, 115, 91, 48, 93, 32, > 36, 49, 44, 36, 49, 44, 49, 44, 64, 45, 49, 32, 45, 121, 91, 50, > 45, 45, 49, 93, 32, 45, 97, 91, 50, 45, 45, 49, 93, 32, 120, 10, > 45, 122, 91, 49, 93, 32, 48, 44, 49, 32, 45, 116, 114, 97, 110, 115, > 112, 111, 115, 101, 91, 49, 93, 32, 45, 42, 91, 49, 93, 32, 36, 54, > 32, 45, 97, 91, 49, 44, 50, 93, 32, 121, 32, 45, 115, 91, 94, 48, > 93, 32, 120, 10, 45, 45, 43, 91, 94, 48, 93, 32, 45, 47, 91, 45, > 49, 93, 32, 36, 50, 32, 45, 45, 91, 49, 45, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 97, 91, 94, > 48, 93, 32, 120, 10, 45, 105, 102, 32, 36, 52, 32, 45, 108, 91, 45, > 49, 93, 32, 45, 115, 32, 121, 32, 45, 47, 32, 39, 115, 113, 114, 116, > 40, 49, 101, 45, 56, 43, 105, 118, 41, 39, 32, 45, 97, 32, 121, 32, > 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 42, 42, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 105, 103, 101, 110, 91, 45, > 49, 93, 32, 45, 114, 111, 119, 115, 91, 45, 50, 93, 32, 48, 44, 50, > 32, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 48, 44, > 50, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 36, 53, 32, 45, 115, 113, 114, 116, 91, 45, 50, > 93, 32, 45, 47, 91, 45, 50, 93, 32, 64, 123, 45, 50, 44, 77, 125, > 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 47, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 109, 91, 45, 50, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 51, 10, 120, 61, 123, 114, 111, 117, 110, 100, 40, 63, 40, 64, 123, > 48, 44, 119, 125, 41, 41, 125, 10, 121, 61, 123, 114, 111, 117, 110, 100, > 40, 63, 40, 64, 123, 48, 44, 104, 125, 41, 41, 125, 10, 40, 123, 36, > 54, 42, 36, 120, 125, 59, 123, 36, 54, 42, 36, 121, 125, 41, 10, 45, > 45, 122, 91, 48, 93, 32, 123, 36, 120, 45, 36, 80, 49, 125, 44, 123, > 36, 121, 45, 36, 80, 49, 125, 44, 123, 36, 120, 43, 36, 80, 50, 125, > 44, 123, 36, 121, 43, 36, 80, 50, 125, 44, 49, 10, 45, 121, 91, 45, > 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 45, > 100, 111, 110, 101, 10, 45, 45, 97, 91, 50, 45, 45, 49, 93, 32, 120, > 32, 45, 42, 42, 91, 49, 44, 45, 49, 93, 32, 45, 116, 114, 97, 110, > 115, 112, 111, 115, 101, 91, 49, 93, 10, 45, 114, 111, 119, 115, 91, 50, > 45, 45, 49, 93, 32, 50, 44, 49, 48, 48, 37, 10, 45, 105, 102, 32, > 123, 36, 115, 33, 61, 51, 125, 10, 45, 114, 91, 50, 45, 45, 49, 93, > 32, 36, 49, 44, 36, 49, 44, 49, 44, 123, 109, 105, 110, 40, 51, 44, > 36, 115, 41, 125, 44, 45, 49, 10, 45, 114, 91, 50, 45, 45, 49, 93, > 32, 36, 49, 44, 36, 49, 44, 49, 44, 51, 44, 123, 105, 102, 40, 36, > 115, 33, 61, 49, 44, 48, 44, 49, 41, 125, 10, 45, 121, 91, 50, 45, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 50, 45, > 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 36, 49, 59, 36, 49, 59, > 51, 41, 32, 45, 97, 91, 50, 45, 45, 49, 93, 32, 121, 10, 45, 114, > 109, 91, 48, 93, 10, 45, 105, 91, 48, 93, 32, 40, 123, 39, 67, 73, > 109, 103, 51, 100, 39, 125, 41, 10, 45, 105, 91, 49, 93, 32, 40, 36, > 51, 59, 36, 51, 41, 10, 45, 105, 91, 51, 93, 32, 50, 44, 36, 51, > 44, 49, 44, 49, 44, 105, 102, 40, 120, 61, 61, 48, 44, 49, 44, 121, > 41, 10, 49, 44, 36, 51, 44, 49, 44, 49, 44, 49, 10, 45, 121, 32, > 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 110, 109, 32, > 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 108, > 97, 110, 101, 51, 100, 32, 58, 32, 95, 115, 105, 122, 101, 95, 120, 44, > 95, 115, 105, 122, 101, 95, 121, 44, 95, 110, 98, 95, 115, 117, 98, 100, > 105, 118, 105, 115, 105, 111, 110, 115, 95, 120, 62, 48, 44, 95, 110, 98, > 95, 115, 117, 98, 100, 105, 115, 105, 118, 105, 111, 110, 115, 95, 121, 62, > 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 51, 100, 32, 112, 108, 97, 110, 101, 32, 97, 116, 32, 40, 48, 44, > 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 120, 61, > 49, 39, 44, 32, 39, 115, 105, 122, 101, 95, 121, 61, 115, 105, 122, 101, > 95, 120, 39, 32, 97, 110, 100, 32, 39, 110, 98, 95, 115, 117, 98, 100, > 105, 118, 105, 115, 105, 111, 110, 115, 95, 120, 61, 110, 98, 95, 115, 117, > 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 95, 121, 61, 50, 52, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 112, 108, > 97, 110, 101, 51, 100, 32, 53, 48, 44, 51, 48, 32, 45, 45, 112, 114, > 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, 45, 99, 111, > 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, 82, 71, 66, > 125, 10, 112, 108, 97, 110, 101, 51, 100, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 51, 61, 50, 52, 125, 62, 48, 32, 38, 38, > 32, 36, 123, 52, 61, 50, 52, 125, 62, 48, 34, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 49, 61, 49, 125, 44, 36, 123, 50, 61, 36, 49, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 51, 100, 32, 112, 108, 97, 110, 101, 44, 32, 119, 105, 116, 104, 32, 115, > 105, 122, 101, 32, 40, 36, 123, 49, 44, 50, 125, 41, 32, 97, 110, 100, > 32, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 32, 40, 36, > 123, 51, 44, 52, 125, 41, 46, 34, 10, 45, 118, 32, 45, 32, 123, 36, > 51, 43, 49, 125, 44, 123, 36, 52, 43, 49, 125, 32, 45, 101, 108, 101, > 118, 97, 116, 105, 111, 110, 51, 100, 91, 45, 49, 93, 32, 48, 32, 45, > 42, 51, 100, 91, 45, 49, 93, 32, 123, 36, 49, 47, 36, 51, 125, 44, > 123, 36, 50, 47, 36, 52, 125, 32, 45, 99, 111, 108, 51, 100, 91, 45, > 49, 93, 32, 50, 48, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 112, 108, 97, 110, 101, 93, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 112, 111, 105, 110, 116, 51, 100, 32, 58, > 32, 120, 48, 44, 121, 48, 44, 122, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 112, 111, 105, 110, > 116, 32, 97, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, > 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 48, 48, 48, 32, 97, 61, 123, 36, 62, 42, 112, 105, 47, 53, 48, 48, > 125, 32, 45, 112, 111, 105, 110, 116, 51, 100, 32, 123, 99, 111, 115, 40, > 51, 42, 36, 97, 41, 125, 44, 123, 115, 105, 110, 40, 50, 42, 36, 97, > 41, 125, 44, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, > 45, 97, 100, 100, 51, 100, 10, 112, 111, 105, 110, 116, 51, 100, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 51, 100, 32, 112, 111, 105, 110, 116, 32, 40, 36, 49, 44, 36, 50, 44, > 36, 51, 41, 46, 34, 10, 45, 118, 32, 45, 32, 49, 44, 49, 55, 44, > 49, 44, 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, 48, > 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, 49, > 48, 48, 46, 53, 44, 49, 44, 49, 44, 36, 123, 49, 45, 51, 125, 44, > 49, 44, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, > 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 112, > 111, 105, 110, 116, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 112, 108, 97, 110, 97, 114, 32, > 111, 114, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, 109, > 97, 103, 101, 115, 32, 116, 111, 32, 51, 100, 32, 112, 111, 105, 110, 116, > 32, 99, 108, 111, 117, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, > 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 115, 105, 122, 101, > 50, 100, 121, 32, 49, 48, 48, 32, 45, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 53, 48, 37, 32, 45, 42, 32, 50, 53, 53, 32, 45, 112, > 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 45, 99, 111, 108, > 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 10, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, > 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, > 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, > 51, 100, 32, 112, 111, 105, 110, 116, 32, 99, 108, 111, 117, 100, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, > 110, 125, 10, 45, 115, 32, 122, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 110, 111, 114, 109, > 32, 45, 33, 61, 91, 45, 49, 93, 32, 48, 10, 45, 105, 91, 45, 50, > 93, 32, 40, 49, 44, 123, 119, 125, 59, 49, 44, 123, 119, 125, 94, 49, > 44, 49, 59, 123, 104, 125, 44, 123, 104, 125, 41, 32, 45, 114, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, 50, > 44, 51, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 111, > 117, 110, 100, 91, 45, 49, 93, 32, 45, 112, 101, 114, 109, 117, 116, 101, > 91, 45, 49, 93, 32, 99, 120, 121, 122, 10, 45, 108, 91, 45, 49, 93, > 32, 45, 115, 32, 45, 44, 48, 32, 45, 97, 32, 121, 32, 105, 115, 95, > 112, 111, 105, 110, 116, 115, 61, 64, 35, 32, 45, 101, 110, 100, 108, 10, > 45, 105, 102, 32, 36, 105, 115, 95, 112, 111, 105, 110, 116, 115, 10, 45, > 45, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, 93, 32, 50, > 44, 123, 104, 47, 50, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, > 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 99, 121, 122, 120, 32, > 45, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 32, 45, 114, 109, 91, 45, 51, 93, 10, 45, 112, 101, 114, > 109, 117, 116, 101, 91, 45, 50, 93, 32, 99, 121, 122, 120, 32, 45, 105, > 91, 45, 50, 93, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 36, > 62, 32, 45, 97, 91, 45, 51, 44, 45, 50, 93, 32, 120, 10, 45, 105, > 91, 45, 51, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, > 41, 32, 45, 105, 91, 45, 51, 93, 32, 40, 123, 104, 125, 44, 123, 104, > 125, 41, 10, 45, 105, 91, 45, 50, 93, 32, 49, 44, 123, 104, 125, 44, > 49, 44, 49, 44, 49, 32, 45, 105, 91, 45, 50, 93, 32, 49, 44, 123, > 104, 125, 44, 49, 44, 49, 44, 121, 32, 45, 97, 91, 45, 51, 44, 45, > 50, 93, 32, 120, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, > 93, 32, 99, 121, 122, 120, 10, 45, 105, 102, 32, 123, 119, 61, 61, 49, > 125, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 125, 44, 49, > 44, 49, 10, 45, 101, 108, 105, 102, 32, 123, 119, 62, 51, 125, 32, 45, > 105, 91, 45, 50, 93, 32, 52, 44, 123, 104, 125, 44, 49, 44, 49, 44, > 45, 49, 50, 56, 44, 49, 44, 49, 44, 123, 119, 125, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 101, 108, 115, 101, 32, 45, > 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, > 48, 10, 45, 101, 110, 100, 105, 102, 10, 49, 44, 123, 104, 125, 44, 49, > 44, 49, 44, 49, 10, 45, 121, 91, 45, 54, 45, 45, 49, 93, 32, 45, > 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 101, 108, 115, 101, > 32, 45, 114, 109, 32, 45, 101, 109, 112, 116, 121, 51, 100, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 45, 43, 51, 100, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 115, 101, 51, 100, 32, 58, > 32, 118, 97, 108, 117, 101, 49, 44, 46, 46, 44, 118, 97, 108, 117, 101, > 49, 54, 32, 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, > 32, 116, 104, 101, 32, 99, 111, 101, 102, 102, 105, 99, 105, 101, 110, 116, > 115, 32, 111, 102, 32, 116, 104, 101, 32, 51, 100, 32, 112, 111, 115, 101, > 32, 109, 97, 116, 114, 105, 120, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 114, 101, 115, 101, 116, > 115, 32, 116, 104, 101, 32, 51, 100, 32, 112, 111, 115, 101, 32, 109, 97, > 116, 114, 105, 120, 32, 116, 111, 32, 100, 101, 102, 97, 117, 108, 116, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 51, 100, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, > 115, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, > 58, 32, 109, 111, 100, 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 112, 114, > 105, 109, 105, 116, 105, 118, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 112, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 109, 111, 100, 101, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 48, 61, 112, 111, 105, 110, 116, 115, 32, 124, 32, 49, > 61, 115, 101, 103, 109, 101, 110, 116, 115, 32, 124, 32, 50, 61, 110, 111, > 110, 45, 116, 101, 120, 116, 117, 114, 101, 100, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 115, 112, 104, 101, 114, 101, > 51, 100, 32, 51, 48, 32, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, > 115, 51, 100, 32, 49, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 53, > 48, 44, 49, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 97, 100, 100, 51, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 114, 111, 106, 101, 99, 116, 105, > 111, 110, 115, 51, 100, 32, 58, 32, 95, 120, 91, 37, 93, 44, 95, 121, > 91, 37, 93, 44, 95, 122, 91, 37, 93, 44, 95, 105, 115, 95, 98, 111, > 117, 110, 100, 105, 110, 103, 95, 98, 111, 120, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 120, 121, 44, 120, 122, 44, > 121, 122, 32, 112, 114, 111, 106, 101, 99, 116, 105, 111, 110, 32, 112, 108, > 97, 110, 101, 115, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 112, 114, 111, 106, 101, 99, 116, 105, 111, > 110, 115, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 53, 48, 37, 125, 44, 36, 123, 50, 61, 53, 48, 37, 125, 44, 36, > 123, 51, 61, 53, 48, 37, 125, 44, 36, 123, 52, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, > 32, 51, 100, 32, 120, 121, 44, 120, 122, 44, 121, 122, 32, 112, 114, 111, > 106, 101, 99, 116, 105, 111, 110, 32, 112, 108, 97, 110, 101, 115, 32, 102, > 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, 10, > 120, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, 119, 44, 36, 49, > 41, 125, 10, 121, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 104, > 44, 36, 50, 41, 125, 10, 122, 61, 123, 105, 102, 40, 64, 123, 45, 105, > 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, 125, 44, 36, > 51, 42, 100, 44, 36, 51, 41, 125, 10, 45, 45, 114, 111, 119, 115, 32, > 36, 50, 44, 36, 50, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 125, > 44, 123, 100, 125, 44, 49, 44, 49, 48, 48, 37, 44, 45, 49, 10, 45, > 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 50, 93, 32, 36, 49, 44, > 36, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, > 122, 121, 120, 99, 10, 45, 115, 108, 105, 99, 101, 115, 91, 45, 51, 93, > 32, 36, 51, 44, 36, 51, 32, 45, 114, 91, 45, 51, 45, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, > 105, 109, 97, 103, 101, 112, 108, 97, 110, 101, 51, 100, 91, 45, 51, 45, > 45, 49, 93, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, > 44, 48, 44, 57, 48, 32, 45, 114, 51, 100, 91, 45, 50, 93, 32, 49, > 44, 48, 44, 48, 44, 45, 57, 48, 10, 45, 43, 51, 100, 91, 45, 51, > 93, 32, 48, 44, 48, 44, 36, 122, 32, 45, 43, 51, 100, 91, 45, 50, > 93, 32, 48, 44, 36, 121, 44, 48, 32, 45, 43, 51, 100, 91, 45, 49, > 93, 32, 36, 120, 44, 48, 44, 48, 10, 45, 43, 51, 100, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 111, 51, 100, 91, 45, 49, 93, 32, 48, 46, > 56, 10, 45, 105, 102, 32, 36, 52, 32, 45, 98, 111, 120, 51, 100, 32, > 36, 119, 44, 36, 104, 44, 36, 100, 32, 45, 112, 51, 100, 91, 45, 49, > 93, 32, 49, 32, 45, 111, 51, 100, 91, 45, 49, 93, 32, 48, 46, 52, > 32, 45, 43, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 121, 114, 97, > 109, 105, 100, 51, 100, 32, 58, 32, 119, 105, 100, 116, 104, 44, 104, 101, > 105, 103, 104, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 112, 121, 114, 97, 109, 105, 100, 32, 97, > 116, 32, 40, 48, 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, > 114, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 112, 121, 114, 97, 109, 105, 100, 51, 100, 32, 49, 48, 48, 44, 49, 48, > 48, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, > 32, 49, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, > 64, 123, 45, 82, 71, 66, 125, 10, 112, 121, 114, 97, 109, 105, 100, 51, > 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, > 117, 116, 32, 110, 101, 119, 32, 51, 100, 32, 112, 121, 114, 97, 109, 105, > 100, 44, 32, 119, 105, 116, 104, 32, 119, 105, 100, 116, 104, 32, 36, 49, > 32, 97, 110, 100, 32, 104, 101, 105, 103, 104, 116, 32, 36, 50, 46, 34, > 10, 45, 118, 32, 45, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, > 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, > 53, 59, 49, 48, 48, 46, 53, 59, 92, 10, 53, 59, 53, 59, 92, 10, > 123, 45, 36, 49, 47, 50, 125, 59, 123, 45, 36, 49, 47, 50, 125, 59, > 123, 45, 36, 50, 47, 50, 125, 59, 92, 10, 123, 36, 49, 47, 50, 125, > 59, 123, 45, 36, 49, 47, 50, 125, 59, 123, 45, 36, 50, 47, 50, 125, > 59, 92, 10, 123, 36, 49, 47, 50, 125, 59, 123, 36, 49, 47, 50, 125, > 59, 123, 45, 36, 50, 47, 50, 125, 59, 92, 10, 123, 45, 36, 49, 47, > 50, 125, 59, 123, 36, 49, 47, 50, 125, 59, 123, 45, 36, 50, 47, 50, > 125, 59, 92, 10, 48, 59, 48, 59, 123, 36, 50, 47, 50, 125, 59, 92, > 10, 52, 59, 48, 59, 51, 59, 50, 59, 49, 59, 92, 10, 51, 59, 48, > 59, 52, 59, 51, 59, 92, 10, 51, 59, 49, 59, 52, 59, 48, 59, 92, > 10, 51, 59, 50, 59, 52, 59, 49, 59, 92, 10, 51, 59, 51, 59, 52, > 59, 50, 41, 10, 49, 44, 49, 53, 44, 49, 44, 49, 44, 50, 48, 48, > 32, 49, 44, 53, 44, 49, 44, 49, 44, 49, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 112, 121, 114, 97, 109, 105, 100, 93, 10, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 113, 117, 97, 100, 114, 97, 110, > 103, 108, 101, 51, 100, 32, 58, 32, 120, 48, 44, 121, 48, 44, 122, 48, > 44, 120, 49, 44, 121, 49, 44, 122, 49, 44, 120, 50, 44, 121, 50, 44, > 122, 50, 44, 120, 51, 44, 121, 51, 44, 122, 51, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 113, 117, > 97, 100, 114, 97, 110, 103, 108, 101, 32, 97, 116, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 113, > 117, 97, 100, 114, 97, 110, 103, 108, 101, 51, 100, 32, 45, 49, 48, 44, > 45, 49, 48, 44, 49, 48, 44, 49, 48, 44, 45, 49, 48, 44, 49, 48, > 44, 49, 48, 44, 49, 48, 44, 49, 48, 44, 45, 49, 48, 44, 49, 48, > 44, 49, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 32, 45, > 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 48, 44, > 49, 44, 48, 44, 51, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, > 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, 125, 44, 48, 46, 54, 32, > 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, 32, 45, 109, 111, > 100, 101, 51, 100, 32, 50, 10, 113, 117, 97, 100, 114, 97, 110, 103, 108, > 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, > 110, 112, 117, 116, 32, 51, 100, 32, 113, 117, 97, 100, 114, 97, 110, 103, > 108, 101, 32, 40, 36, 49, 44, 36, 50, 44, 36, 51, 41, 45, 40, 36, > 52, 44, 36, 53, 44, 36, 54, 41, 45, 40, 36, 55, 44, 36, 56, 44, > 36, 57, 41, 45, 40, 36, 49, 48, 44, 36, 49, 49, 44, 36, 49, 50, > 41, 46, 34, 10, 45, 118, 32, 45, 32, 49, 44, 50, 57, 44, 49, 44, > 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, 48, 57, 46, > 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, 49, 48, 48, > 46, 53, 44, 52, 44, 49, 44, 36, 123, 49, 45, 49, 50, 125, 44, 52, > 44, 48, 44, 49, 44, 50, 44, 51, 44, 50, 48, 48, 44, 50, 48, 48, > 44, 50, 48, 48, 44, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 113, 117, 97, 100, 114, 97, 110, 103, 108, 101, 93, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 118, 51, 100, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, 118, 101, > 114, 115, 101, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 101, 118, 101, 114, 115, 101, 51, 100, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 118, 101, 114, 115, 101, 32, 112, 114, 105, 109, 105, 116, 105, 118, 101, 32, > 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 114, 118, 51, 100, 39, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, > 115, 51, 100, 32, 49, 48, 48, 44, 52, 48, 32, 45, 100, 111, 117, 98, > 108, 101, 51, 100, 32, 48, 32, 45, 45, 114, 101, 118, 101, 114, 115, 101, > 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 114, 51, 100, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 111, 116, 97, 116, 101, 51, > 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 111, 116, 97, 116, 101, 51, 100, 32, 58, 32, 117, 44, 118, 44, > 119, 44, 97, 110, 103, 108, 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 111, 116, 97, 116, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 115, 32, 97, 114, 111, 117, 110, 100, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 97, 120, 105, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 110, 103, 108, 101, 32, 40, 105, 110, > 32, 100, 101, 103, 46, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 51, 100, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, > 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 49, 48, 32, 45, 100, 111, > 117, 98, 108, 101, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 55, 32, 45, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, > 93, 32, 49, 44, 48, 44, 48, 44, 50, 48, 32, 45, 100, 111, 110, 101, > 32, 45, 97, 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 111, 116, 97, 116, 105, 111, 110, 51, 100, 32, 58, 32, 117, 44, 118, 44, > 119, 44, 97, 110, 103, 108, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 110, 112, 117, 116, 32, 51, 120, 51, 32, 114, 111, 116, 97, 116, > 105, 111, 110, 32, 109, 97, 116, 114, 105, 120, 32, 119, 105, 116, 104, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 120, 105, 115, 32, 97, > 110, 100, 32, 97, 110, 103, 108, 101, 32, 40, 105, 110, 32, 100, 101, 103, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, > 111, 116, 97, 116, 105, 111, 110, 51, 100, 32, 49, 44, 48, 44, 48, 44, > 48, 32, 45, 114, 111, 116, 97, 116, 105, 111, 110, 51, 100, 32, 49, 44, > 48, 44, 48, 44, 57, 48, 32, 45, 114, 111, 116, 97, 116, 105, 111, 110, > 51, 100, 32, 49, 44, 48, 44, 48, 44, 49, 56, 48, 10, 114, 111, 116, > 97, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 114, 111, 116, 97, > 116, 105, 111, 110, 32, 109, 97, 116, 114, 105, 120, 32, 97, 114, 111, 117, > 110, 100, 32, 97, 120, 105, 115, 32, 40, 36, 49, 44, 36, 50, 44, 36, > 51, 41, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 32, 36, 52, > 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, 45, 10, 40, 36, 49, 94, > 36, 50, 94, 36, 51, 94, 48, 41, 32, 45, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 91, 45, 49, 93, 32, 45, 121, 91, 45, 49, 93, > 32, 120, 32, 45, 42, 91, 45, 49, 93, 32, 123, 115, 105, 110, 40, 36, > 52, 42, 112, 105, 47, 51, 54, 48, 41, 125, 32, 45, 61, 91, 45, 49, > 93, 32, 123, 99, 111, 115, 40, 36, 52, 42, 112, 105, 47, 51, 54, 48, > 41, 125, 44, 51, 10, 120, 120, 61, 123, 105, 40, 48, 41, 42, 105, 40, > 48, 41, 125, 32, 120, 121, 61, 123, 105, 40, 48, 41, 42, 105, 40, 49, > 41, 125, 32, 120, 122, 61, 123, 105, 40, 48, 41, 42, 105, 40, 50, 41, > 125, 32, 120, 119, 61, 123, 105, 40, 48, 41, 42, 105, 40, 51, 41, 125, > 10, 121, 121, 61, 123, 105, 40, 49, 41, 42, 105, 40, 49, 41, 125, 32, > 121, 122, 61, 123, 105, 40, 49, 41, 42, 105, 40, 50, 41, 125, 32, 121, > 119, 61, 123, 105, 40, 49, 41, 42, 105, 40, 51, 41, 125, 10, 122, 122, > 61, 123, 105, 40, 50, 41, 42, 105, 40, 50, 41, 125, 32, 122, 119, 61, > 123, 105, 40, 50, 41, 42, 105, 40, 51, 41, 125, 10, 45, 114, 109, 91, > 45, 49, 93, 10, 40, 123, 49, 45, 50, 42, 40, 36, 121, 121, 43, 36, > 122, 122, 41, 125, 44, 123, 50, 42, 40, 36, 120, 121, 43, 36, 122, 119, > 41, 125, 44, 123, 50, 42, 40, 36, 120, 122, 45, 36, 121, 119, 41, 125, > 59, 92, 10, 123, 50, 42, 40, 36, 120, 121, 45, 36, 122, 119, 41, 125, > 44, 123, 49, 45, 50, 42, 40, 36, 120, 120, 43, 36, 122, 122, 41, 125, > 44, 123, 50, 42, 40, 36, 121, 122, 43, 36, 120, 119, 41, 125, 59, 92, > 10, 123, 50, 42, 40, 36, 120, 122, 43, 36, 121, 119, 41, 125, 44, 123, > 50, 42, 40, 36, 121, 122, 45, 36, 120, 119, 41, 125, 44, 123, 49, 45, > 50, 42, 40, 36, 120, 120, 43, 36, 121, 121, 41, 125, 41, 10, 45, 110, > 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 114, 111, 116, 97, 116, > 105, 111, 110, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 51, 100, 32, 58, 32, > 95, 114, 101, 99, 117, 114, 115, 105, 111, 110, 95, 108, 101, 118, 101, 108, > 62, 61, 48, 44, 95, 119, 105, 100, 116, 104, 44, 95, 104, 101, 105, 103, > 104, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 83, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, > 112, 121, 114, 97, 109, 105, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 51, > 100, 32, 51, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, > 51, 100, 32, 49, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 10, 115, 105, 101, 114, 112, 105, > 110, 115, 107, 105, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 36, 123, 49, 61, 52, 125, 62, 61, 48, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 50, 61, 49, 125, 44, 36, 123, 51, 61, 49, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, > 83, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 112, 121, 114, 97, 109, > 105, 100, 32, 111, 102, 32, 100, 101, 103, 114, 101, 101, 32, 36, 49, 44, > 32, 119, 105, 116, 104, 32, 119, 105, 100, 116, 104, 32, 36, 50, 32, 97, > 110, 100, 32, 104, 101, 105, 103, 104, 116, 32, 36, 51, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 108, 91, 93, 32, 45, 95, 115, 105, 101, 114, 112, > 105, 110, 115, 107, 105, 51, 100, 32, 123, 45, 36, 50, 47, 50, 125, 44, > 123, 45, 36, 50, 47, 50, 125, 44, 123, 45, 36, 51, 47, 50, 125, 44, > 123, 36, 50, 47, 50, 125, 44, 123, 45, 36, 50, 47, 50, 125, 44, 123, > 45, 36, 51, 47, 50, 125, 44, 123, 36, 50, 47, 50, 125, 44, 123, 36, > 50, 47, 50, 125, 44, 123, 45, 36, 51, 47, 50, 125, 44, 123, 45, 36, > 50, 47, 50, 125, 44, 123, 36, 50, 47, 50, 125, 44, 123, 45, 36, 51, > 47, 50, 125, 44, 48, 44, 48, 44, 123, 36, 51, 47, 50, 125, 44, 36, > 49, 32, 45, 43, 51, 100, 32, 45, 101, 110, 100, 108, 10, 45, 110, 109, > 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 115, 105, 101, 114, 112, 105, > 110, 115, 107, 105, 93, 32, 45, 118, 32, 43, 10, 95, 115, 105, 101, 114, > 112, 105, 110, 115, 107, 105, 51, 100, 32, 58, 10, 45, 105, 102, 32, 123, > 36, 49, 54, 60, 61, 48, 125, 10, 40, 54, 55, 46, 53, 59, 55, 51, > 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, > 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 92, 10, 53, 59, 53, 59, > 92, 10, 36, 49, 59, 36, 50, 59, 36, 51, 59, 92, 10, 36, 52, 59, > 36, 53, 59, 36, 54, 59, 92, 10, 36, 55, 59, 36, 56, 59, 36, 57, > 59, 92, 10, 36, 49, 48, 59, 36, 49, 49, 59, 36, 49, 50, 59, 92, > 10, 36, 49, 51, 59, 36, 49, 52, 59, 36, 49, 53, 59, 92, 10, 52, > 59, 48, 59, 51, 59, 50, 59, 49, 59, 92, 10, 51, 59, 48, 59, 52, > 59, 51, 59, 92, 10, 51, 59, 49, 59, 52, 59, 48, 59, 92, 10, 51, > 59, 50, 59, 52, 59, 49, 59, 92, 10, 51, 59, 51, 59, 52, 59, 50, > 41, 10, 49, 44, 49, 53, 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, > 44, 53, 44, 49, 44, 49, 44, 49, 32, 45, 97, 91, 45, 51, 45, 45, > 49, 93, 32, 121, 10, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 95, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, > 51, 100, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 92, 10, 123, 40, > 36, 49, 43, 36, 52, 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, > 53, 41, 47, 50, 125, 44, 123, 40, 36, 51, 43, 36, 54, 41, 47, 50, > 125, 44, 92, 10, 123, 40, 36, 49, 43, 36, 52, 43, 36, 55, 43, 36, > 49, 48, 41, 47, 52, 125, 44, 123, 40, 36, 50, 43, 36, 53, 43, 36, > 56, 43, 36, 49, 49, 41, 47, 52, 125, 44, 123, 40, 36, 51, 43, 36, > 54, 43, 36, 57, 43, 36, 49, 50, 41, 47, 52, 125, 44, 92, 10, 123, > 40, 36, 49, 43, 36, 49, 48, 41, 47, 50, 125, 44, 123, 40, 36, 50, > 43, 36, 49, 49, 41, 47, 50, 125, 44, 123, 40, 36, 51, 43, 36, 49, > 50, 41, 47, 50, 125, 44, 92, 10, 123, 40, 36, 49, 43, 36, 49, 51, > 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, 49, 52, 41, 47, 50, > 125, 44, 123, 40, 36, 51, 43, 36, 49, 53, 41, 47, 50, 125, 44, 92, > 10, 123, 36, 49, 54, 45, 49, 125, 10, 45, 95, 115, 105, 101, 114, 112, > 105, 110, 115, 107, 105, 51, 100, 32, 123, 40, 36, 49, 43, 36, 52, 41, > 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, 53, 41, 47, 50, 125, 44, > 123, 40, 36, 51, 43, 36, 54, 41, 47, 50, 125, 44, 92, 10, 36, 52, > 44, 36, 53, 44, 36, 54, 44, 92, 10, 123, 40, 36, 52, 43, 36, 55, > 41, 47, 50, 125, 44, 123, 40, 36, 53, 43, 36, 56, 41, 47, 50, 125, > 44, 123, 40, 36, 54, 43, 36, 57, 41, 47, 50, 125, 44, 92, 10, 123, > 40, 36, 49, 43, 36, 52, 43, 36, 55, 43, 36, 49, 48, 41, 47, 52, > 125, 44, 123, 40, 36, 50, 43, 36, 53, 43, 36, 56, 43, 36, 49, 49, > 41, 47, 52, 125, 44, 123, 40, 36, 51, 43, 36, 54, 43, 36, 57, 43, > 36, 49, 50, 41, 47, 52, 125, 44, 92, 10, 123, 40, 36, 52, 43, 36, > 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 53, 43, 36, 49, 52, 41, > 47, 50, 125, 44, 123, 40, 36, 54, 43, 36, 49, 53, 41, 47, 50, 125, > 44, 92, 10, 123, 36, 49, 54, 45, 49, 125, 10, 45, 95, 115, 105, 101, > 114, 112, 105, 110, 115, 107, 105, 51, 100, 32, 123, 40, 36, 49, 43, 36, > 52, 43, 36, 55, 43, 36, 49, 48, 41, 47, 52, 125, 44, 123, 40, 36, > 50, 43, 36, 53, 43, 36, 56, 43, 36, 49, 49, 41, 47, 52, 125, 44, > 123, 40, 36, 51, 43, 36, 54, 43, 36, 57, 43, 36, 49, 50, 41, 47, > 52, 125, 44, 92, 10, 123, 40, 36, 52, 43, 36, 55, 41, 47, 50, 125, > 44, 123, 40, 36, 53, 43, 36, 56, 41, 47, 50, 125, 44, 123, 40, 36, > 54, 43, 36, 57, 41, 47, 50, 125, 44, 92, 10, 36, 55, 44, 36, 56, > 44, 36, 57, 44, 92, 10, 123, 40, 36, 55, 43, 36, 49, 48, 41, 47, > 50, 125, 44, 123, 40, 36, 56, 43, 36, 49, 49, 41, 47, 50, 125, 44, > 123, 40, 36, 57, 43, 36, 49, 50, 41, 47, 50, 125, 44, 92, 10, 123, > 40, 36, 55, 43, 36, 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 56, > 43, 36, 49, 52, 41, 47, 50, 125, 44, 123, 40, 36, 57, 43, 36, 49, > 53, 41, 47, 50, 125, 44, 92, 10, 123, 36, 49, 54, 45, 49, 125, 10, > 45, 95, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 51, 100, 32, 123, > 40, 36, 49, 43, 36, 49, 48, 41, 47, 50, 125, 44, 123, 40, 36, 50, > 43, 36, 49, 49, 41, 47, 50, 125, 44, 123, 40, 36, 51, 43, 36, 49, > 50, 41, 47, 50, 125, 44, 92, 10, 123, 40, 36, 49, 43, 36, 52, 43, > 36, 55, 43, 36, 49, 48, 41, 47, 52, 125, 44, 123, 40, 36, 50, 43, > 36, 53, 43, 36, 56, 43, 36, 49, 49, 41, 47, 52, 125, 44, 123, 40, > 36, 51, 43, 36, 54, 43, 36, 57, 43, 36, 49, 50, 41, 47, 52, 125, > 44, 92, 10, 123, 40, 36, 55, 43, 36, 49, 48, 41, 47, 50, 125, 44, > 123, 40, 36, 56, 43, 36, 49, 49, 41, 47, 50, 125, 44, 123, 40, 36, > 57, 43, 36, 49, 50, 41, 47, 50, 125, 44, 92, 10, 36, 49, 48, 44, > 36, 49, 49, 44, 36, 49, 50, 44, 92, 10, 123, 40, 36, 49, 48, 43, > 36, 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 49, 49, 43, 36, 49, > 52, 41, 47, 50, 125, 44, 123, 40, 36, 49, 50, 43, 36, 49, 53, 41, > 47, 50, 125, 44, 92, 10, 123, 36, 49, 54, 45, 49, 125, 10, 45, 95, > 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 51, 100, 32, 123, 40, 36, > 49, 43, 36, 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, > 49, 52, 41, 47, 50, 125, 44, 123, 40, 36, 51, 43, 36, 49, 53, 41, > 47, 50, 125, 44, 92, 10, 123, 40, 36, 52, 43, 36, 49, 51, 41, 47, > 50, 125, 44, 123, 40, 36, 53, 43, 36, 49, 52, 41, 47, 50, 125, 44, > 123, 40, 36, 54, 43, 36, 49, 53, 41, 47, 50, 125, 44, 92, 10, 123, > 40, 36, 55, 43, 36, 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 56, > 43, 36, 49, 52, 41, 47, 50, 125, 44, 123, 40, 36, 57, 43, 36, 49, > 53, 41, 47, 50, 125, 44, 92, 10, 123, 40, 36, 49, 48, 43, 36, 49, > 51, 41, 47, 50, 125, 44, 123, 40, 36, 49, 49, 43, 36, 49, 52, 41, > 47, 50, 125, 44, 123, 40, 36, 49, 50, 43, 36, 49, 53, 41, 47, 50, > 125, 44, 92, 10, 36, 49, 51, 44, 36, 49, 52, 44, 36, 49, 53, 44, > 92, 10, 123, 36, 49, 54, 45, 49, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 51, 100, 32, 58, 32, 95, 109, > 101, 116, 114, 105, 99, 44, 95, 102, 114, 97, 109, 101, 95, 116, 121, 112, > 101, 61, 123, 32, 48, 61, 115, 113, 117, 97, 114, 101, 115, 32, 124, 32, > 49, 61, 100, 105, 97, 109, 111, 110, 100, 115, 32, 124, 32, 50, 61, 99, > 105, 114, 99, 108, 101, 115, 32, 124, 32, 51, 61, 97, 117, 116, 111, 32, > 125, 44, 95, 115, 107, 101, 108, 101, 116, 111, 110, 95, 111, 112, 97, 99, > 105, 116, 121, 44, 95, 102, 114, 97, 109, 101, 95, 111, 112, 97, 99, 105, > 116, 121, 44, 95, 105, 115, 95, 102, 114, 97, 109, 101, 95, 119, 105, 114, > 101, 102, 114, 97, 109, 101, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 117, 105, 108, 100, 32, > 51, 100, 32, 115, 107, 101, 108, 101, 116, 97, 108, 32, 115, 116, 114, 117, > 99, 116, 117, 114, 101, 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, 111, > 109, 32, 50, 100, 32, 98, 105, 110, 97, 114, 121, 32, 115, 104, 97, 112, > 101, 115, 32, 108, 111, 99, 97, 116, 101, 100, 32, 105, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 109, 101, 116, 114, 105, 99, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 99, 104, 101, 98, > 121, 115, 104, 101, 118, 32, 124, 32, 49, 61, 109, 97, 110, 104, 97, 116, > 116, 97, 110, 32, 124, 32, 50, 61, 101, 117, 99, 108, 105, 100, 101, 97, > 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 109, > 101, 116, 114, 105, 99, 61, 50, 39, 44, 32, 39, 98, 111, 110, 101, 115, > 95, 116, 121, 112, 101, 61, 51, 39, 44, 32, 39, 115, 107, 101, 108, 101, > 116, 111, 110, 95, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 102, 114, 97, 109, 101, 95, 111, 112, 97, 99, 105, 116, > 121, 61, 48, 46, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 45, 99, 117, 112, 105, 100, 32, 52, 56, 48, 32, 45, 45, > 115, 107, 101, 108, 101, 116, 111, 110, 51, 100, 32, 44, 10, 115, 107, 101, > 108, 101, 116, 111, 110, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 50, 125, 41, 32, > 38, 38, 32, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 49, 60, 61, > 50, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 51, > 125, 41, 32, 38, 38, 32, 36, 50, 62, 61, 48, 32, 38, 38, 32, 36, > 50, 60, 61, 51, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 49, 125, 44, 36, 123, 52, 61, 48, 46, 49, 125, 44, 36, 123, 53, 61, > 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, 117, 105, 108, > 100, 32, 51, 100, 32, 115, 107, 101, 108, 101, 116, 97, 108, 32, 115, 116, > 114, 117, 99, 116, 117, 114, 101, 32, 111, 98, 106, 101, 99, 116, 32, 102, > 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 49, 44, > 99, 104, 101, 98, 121, 115, 104, 101, 118, 44, 109, 97, 110, 104, 97, 116, > 116, 97, 110, 44, 101, 117, 99, 108, 105, 100, 101, 97, 110, 125, 34, 32, > 109, 101, 116, 114, 105, 99, 44, 32, 34, 92, 10, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 36, 50, 44, 115, 113, 117, 97, 114, 101, 115, 44, > 100, 105, 97, 109, 111, 110, 100, 115, 44, 99, 105, 114, 99, 108, 101, 115, > 44, 97, 117, 116, 111, 125, 34, 32, 98, 111, 110, 101, 115, 44, 32, 115, > 107, 101, 108, 101, 116, 111, 110, 32, 111, 112, 97, 99, 105, 116, 121, 32, > 36, 51, 32, 97, 110, 100, 32, 102, 114, 97, 109, 101, 32, 111, 112, 97, > 99, 105, 116, 121, 32, 36, 52, 32, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 10, 45, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 32, 48, 44, 36, 49, 10, 45, 45, > 102, 91, 45, 49, 93, 32, 34, 40, 105, 62, 106, 40, 45, 49, 41, 38, > 38, 105, 62, 106, 40, 49, 41, 41, 32, 124, 124, 32, 40, 105, 62, 106, > 40, 48, 44, 45, 49, 41, 38, 38, 105, 62, 106, 40, 48, 44, 49, 41, > 41, 32, 124, 124, 32, 40, 105, 62, 106, 40, 45, 49, 44, 45, 49, 41, > 38, 38, 105, 62, 106, 40, 49, 44, 49, 41, 41, 32, 124, 124, 32, 40, > 105, 62, 106, 40, 45, 49, 44, 49, 41, 38, 38, 105, 62, 106, 40, 49, > 44, 45, 49, 41, 41, 34, 10, 45, 105, 102, 32, 36, 51, 32, 45, 45, > 115, 108, 105, 99, 101, 115, 91, 45, 49, 93, 32, 45, 49, 44, 48, 32, > 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 91, 45, 49, > 93, 32, 48, 46, 53, 32, 45, 111, 51, 100, 91, 45, 49, 93, 32, 36, > 51, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, > 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 42, 91, 48, > 45, 50, 93, 32, 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, > 100, 91, 48, 93, 10, 45, 105, 102, 32, 36, 52, 32, 45, 108, 91, 48, > 93, 32, 45, 115, 51, 100, 32, 49, 10, 110, 61, 64, 123, 49, 44, 48, > 125, 10, 45, 114, 91, 50, 93, 32, 51, 44, 36, 110, 44, 49, 44, 49, > 44, 45, 49, 32, 45, 114, 91, 51, 93, 32, 50, 44, 36, 110, 44, 49, > 44, 49, 44, 45, 49, 32, 45, 114, 91, 52, 93, 32, 51, 44, 36, 110, > 44, 49, 44, 49, 44, 45, 49, 10, 45, 105, 102, 32, 123, 36, 50, 61, > 61, 48, 34, 32, 124, 124, 32, 34, 40, 36, 50, 61, 61, 51, 34, 32, > 38, 38, 32, 34, 36, 49, 61, 61, 48, 41, 125, 10, 45, 61, 91, 49, > 93, 32, 123, 52, 42, 36, 110, 125, 10, 45, 105, 91, 51, 93, 32, 91, > 50, 93, 120, 51, 32, 45, 45, 122, 91, 45, 50, 93, 32, 48, 44, 49, > 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 45, 91, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, 52, 93, 32, 91, 45, 49, > 93, 10, 45, 115, 91, 45, 49, 93, 32, 120, 32, 45, 42, 91, 45, 50, > 93, 32, 45, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, > 32, 45, 43, 91, 51, 93, 32, 91, 45, 49, 93, 32, 45, 45, 91, 53, > 44, 45, 49, 93, 32, 45, 97, 91, 50, 45, 53, 93, 32, 120, 10, 45, > 114, 109, 91, 51, 93, 32, 49, 44, 36, 110, 44, 49, 44, 49, 44, 52, > 32, 45, 45, 102, 91, 45, 49, 93, 32, 52, 42, 121, 32, 45, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 114, 118, 91, 45, > 51, 44, 45, 49, 93, 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, > 120, 32, 45, 109, 118, 91, 45, 49, 93, 32, 51, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 50, 61, 61, 49, 34, 32, 124, 124, 32, 34, 40, 36, > 50, 61, 61, 51, 34, 32, 38, 38, 32, 34, 36, 49, 61, 61, 49, 41, > 125, 10, 45, 61, 91, 49, 93, 32, 123, 52, 42, 36, 110, 125, 10, 45, > 105, 91, 51, 93, 32, 91, 50, 93, 120, 51, 32, 45, 45, 122, 91, 45, > 50, 93, 32, 48, 44, 48, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, > 50, 32, 45, 45, 91, 50, 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, > 52, 93, 32, 91, 45, 49, 93, 10, 45, 115, 104, 105, 102, 116, 91, 45, > 49, 93, 32, 49, 44, 48, 32, 45, 45, 91, 51, 93, 32, 91, 45, 49, > 93, 32, 45, 43, 91, 53, 44, 45, 49, 93, 32, 45, 97, 91, 50, 45, > 53, 93, 32, 120, 10, 45, 114, 109, 91, 51, 93, 32, 49, 44, 36, 110, > 44, 49, 44, 49, 44, 52, 32, 45, 45, 102, 91, 45, 49, 93, 32, 52, > 42, 121, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 114, 118, 91, 45, 51, 44, 45, 49, 93, 32, 45, 97, 91, 45, > 53, 45, 45, 49, 93, 32, 120, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 51, 10, 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 50, 34, 32, > 124, 124, 32, 34, 40, 36, 50, 61, 61, 51, 34, 32, 38, 38, 32, 34, > 36, 49, 61, 61, 50, 41, 125, 10, 45, 61, 91, 49, 93, 32, 123, 50, > 42, 36, 110, 125, 10, 45, 45, 122, 91, 52, 93, 32, 48, 44, 48, 32, > 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 45, 43, 91, 50, > 44, 45, 49, 93, 32, 45, 45, 91, 50, 44, 45, 50, 93, 32, 45, 97, > 91, 50, 44, 45, 49, 93, 32, 120, 10, 45, 114, 109, 91, 51, 93, 32, > 49, 44, 36, 110, 44, 49, 44, 49, 44, 53, 32, 45, 45, 102, 91, 45, > 49, 93, 32, 50, 42, 121, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 51, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, 52, 45, 45, 49, > 93, 32, 120, 32, 45, 109, 118, 91, 45, 49, 93, 32, 51, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 121, 32, 45, 97, 32, 121, 32, 45, 111, 51, > 100, 32, 36, 52, 32, 45, 105, 102, 32, 36, 53, 32, 45, 112, 51, 100, > 32, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 99, 111, 108, 51, 100, > 32, 50, 48, 48, 10, 45, 101, 110, 100, 108, 32, 45, 101, 108, 115, 101, > 32, 45, 114, 109, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 43, 51, 100, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 110, 97, 112, > 115, 104, 111, 116, 51, 100, 32, 58, 32, 95, 115, 105, 122, 101, 62, 48, > 44, 95, 122, 111, 111, 109, 62, 61, 48, 44, 95, 98, 97, 99, 107, 103, > 114, 111, 117, 110, 100, 82, 44, 95, 98, 97, 99, 107, 103, 114, 111, 117, > 110, 100, 71, 44, 95, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 66, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 97, 107, 101, 32, 50, > 100, 32, 115, 110, 97, 112, 115, 104, 111, 116, 115, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, > 32, 39, 122, 111, 111, 109, 39, 32, 116, 111, 32, 48, 32, 116, 111, 32, > 100, 105, 115, 97, 98, 108, 101, 32, 111, 98, 106, 101, 99, 116, 32, 97, > 117, 116, 111, 45, 115, 99, 97, 108, 105, 110, 103, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 61, 53, 49, 50, 39, > 44, 32, 39, 122, 111, 111, 109, 61, 49, 39, 32, 97, 110, 100, 32, 39, > 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 82, 61, 98, 97, 99, 107, > 103, 114, 111, 117, 110, 100, 71, 61, 98, 97, 99, 107, 103, 114, 111, 117, > 110, 100, 66, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, > 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 50, 48, 32, 45, 115, 110, > 97, 112, 115, 104, 111, 116, 51, 100, 32, 52, 48, 48, 44, 49, 46, 50, > 44, 49, 50, 56, 44, 54, 52, 44, 51, 50, 10, 115, 110, 97, 112, 115, > 104, 111, 116, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 49, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 51, 61, 34, 34, 125, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, > 40, 36, 51, 41, 125, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 84, 97, 107, 101, 32, 36, 49, 120, 36, 49, 32, 115, 110, 97, 112, 115, > 104, 111, 116, 36, 63, 32, 111, 102, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 36, 63, 44, 32, 119, 105, 116, 104, 32, 122, 111, 111, 109, 32, > 102, 97, 99, 116, 111, 114, 32, 36, 50, 32, 97, 110, 100, 32, 98, 97, > 99, 107, 103, 114, 111, 117, 110, 100, 32, 99, 111, 108, 111, 114, 32, 36, > 123, 51, 45, 45, 49, 125, 46, 34, 10, 45, 101, 108, 115, 101, 10, 45, > 101, 91, 48, 45, 45, 51, 93, 32, 34, 84, 97, 107, 101, 32, 36, 49, > 120, 36, 49, 32, 115, 110, 97, 112, 115, 104, 111, 116, 36, 63, 32, 111, > 102, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 122, 111, 111, 109, 32, 102, 97, 99, 116, 111, 114, 32, > 36, 50, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 105, 102, 32, 123, 36, 50, 33, 61, 48, 125, 32, 45, > 99, 51, 100, 32, 45, 110, 51, 100, 32, 45, 42, 51, 100, 32, 123, 51, > 42, 36, 49, 42, 36, 50, 47, 52, 125, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 51, 41, 125, 32, > 40, 36, 123, 51, 45, 45, 49, 125, 41, 32, 45, 121, 91, 45, 49, 93, > 32, 99, 32, 45, 101, 108, 115, 101, 32, 49, 44, 50, 44, 49, 44, 51, > 44, 51, 50, 44, 54, 52, 44, 51, 50, 44, 49, 49, 54, 44, 54, 52, > 44, 57, 54, 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 49, 44, 49, 44, 51, 44, 51, 10, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 110, 125, 44, 49, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 108, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, > 112, 101, 99, 108, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 115, 112, 101, 99, 108, 51, 100, 32, 58, 32, > 118, 97, 108, 117, 101, 62, 61, 48, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 108, 105, 103, 104, > 116, 110, 101, 115, 115, 32, 111, 102, 32, 51, 100, 32, 115, 112, 101, 99, > 117, 108, 97, 114, 32, 108, 105, 103, 104, 116, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, > 108, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 118, 97, 108, 117, 101, 61, 48, 46, 49, 53, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 48, 46, 51, 44, 48, > 46, 54, 44, 48, 46, 57, 44, 49, 46, 50, 41, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 119, 125, 32, 45, 116, 111, 114, 117, 115, 51, 100, > 32, 49, 48, 48, 44, 51, 48, 32, 45, 114, 111, 116, 97, 116, 101, 51, > 100, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, 54, 48, 32, 45, > 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, > 48, 44, 48, 32, 45, 115, 112, 101, 99, 108, 51, 100, 32, 64, 123, 48, > 44, 36, 62, 125, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, 51, 100, > 91, 45, 49, 93, 32, 52, 48, 48, 32, 45, 100, 111, 110, 101, 32, 45, > 114, 101, 109, 111, 118, 101, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 115, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 115, 112, 101, 99, 115, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 101, 99, 115, 51, 100, 32, > 58, 32, 118, 97, 108, 117, 101, 62, 61, 48, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 115, 104, > 105, 110, 105, 110, 101, 115, 115, 32, 111, 102, 32, 51, 100, 32, 115, 112, > 101, 99, 117, 108, 97, 114, 32, 108, 105, 103, 104, 116, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 115, 115, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 118, 97, 108, 117, 101, 61, 48, 46, 56, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 48, 46, 51, 44, > 48, 46, 54, 44, 48, 46, 57, 44, 49, 46, 50, 41, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 119, 125, 32, 45, 116, 111, 114, 117, 115, 51, > 100, 32, 49, 48, 48, 44, 51, 48, 32, 45, 114, 111, 116, 97, 116, 101, > 51, 100, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, 54, 48, 32, > 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, > 44, 48, 44, 48, 32, 45, 115, 112, 101, 99, 115, 51, 100, 32, 64, 123, > 48, 44, 36, 62, 125, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, 51, > 100, 91, 45, 49, 93, 32, 52, 48, 48, 32, 45, 100, 111, 110, 101, 32, > 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, 10, 35, 64, 103, 109, 105, > 99, 32, 115, 112, 104, 101, 114, 101, 51, 100, 32, 58, 32, 114, 97, 100, > 105, 117, 115, 44, 95, 110, 98, 95, 114, 101, 99, 117, 114, 115, 105, 111, > 110, 115, 62, 61, 48, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 115, 112, > 104, 101, 114, 101, 32, 97, 116, 32, 40, 48, 44, 48, 44, 48, 41, 44, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 58, 32, 39, 110, 98, 95, 114, 101, 99, 117, 114, 115, 105, 111, 110, 115, > 61, 51, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, 49, 48, 48, 32, 45, 45, > 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, 32, > 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, > 82, 71, 66, 125, 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 104, 101, > 114, 105, 99, 97, 108, 51, 100, 32, 58, 32, 95, 110, 98, 95, 97, 122, > 105, 109, 117, 116, 104, 62, 61, 51, 44, 95, 110, 98, 95, 122, 101, 110, > 105, 116, 104, 62, 61, 51, 44, 95, 114, 97, 100, 105, 117, 115, 95, 102, > 117, 110, 99, 116, 105, 111, 110, 40, 112, 104, 105, 44, 116, 104, 101, 116, > 97, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 115, 112, 104, 101, 114, 105, 99, 97, 108, 32, 111, > 98, 106, 101, 99, 116, 32, 97, 116, 32, 40, 48, 44, 48, 44, 48, 41, > 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 110, 98, 95, 122, 101, 110, 105, 116, 104, 61, 110, > 98, 95, 97, 122, 105, 109, 117, 116, 61, 54, 52, 39, 32, 97, 110, 100, > 32, 39, 114, 97, 100, 105, 117, 115, 95, 102, 117, 110, 99, 116, 105, 111, > 110, 61, 34, 97, 98, 115, 40, 49, 43, 48, 46, 53, 42, 99, 111, 115, > 40, 51, 42, 112, 104, 105, 41, 42, 115, 105, 110, 40, 52, 42, 116, 104, > 101, 116, 97, 41, 41, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 115, 112, 104, 101, 114, 105, 99, 97, 108, 51, 100, > 32, 54, 52, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, > 51, 100, 32, 49, 10, 115, 112, 104, 101, 114, 105, 99, 97, 108, 51, 100, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 54, > 52, 125, 62, 61, 51, 32, 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, > 62, 61, 51, 34, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 51, 61, > 97, 98, 115, 40, 49, 43, 48, 46, 53, 42, 99, 111, 115, 40, 51, 42, > 112, 104, 105, 41, 42, 115, 105, 110, 40, 52, 42, 116, 104, 101, 116, 97, > 41, 41, 125, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 115, 112, 104, 101, 114, 105, 99, 97, 108, > 32, 111, 98, 106, 101, 99, 116, 44, 32, 119, 105, 116, 104, 32, 115, 117, > 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 32, 40, 36, 49, 44, 36, > 50, 41, 32, 97, 110, 100, 32, 104, 101, 105, 103, 104, 116, 32, 102, 117, > 110, 99, 116, 105, 111, 110, 32, 39, 36, 51, 39, 46, 34, 10, 45, 118, > 32, 45, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, > 45, 121, 91, 45, 49, 93, 10, 110, 49, 61, 123, 114, 111, 117, 110, 100, > 40, 36, 49, 41, 125, 32, 110, 50, 61, 123, 114, 111, 117, 110, 100, 40, > 36, 50, 41, 125, 10, 36, 110, 49, 44, 123, 36, 110, 50, 45, 49, 125, > 44, 49, 44, 51, 44, 34, 112, 104, 105, 61, 50, 42, 112, 105, 42, 40, > 120, 43, 48, 46, 53, 41, 47, 119, 59, 92, 10, 116, 104, 101, 116, 97, > 61, 45, 112, 105, 47, 50, 43, 112, 105, 42, 40, 121, 43, 48, 46, 53, > 41, 47, 104, 59, 92, 10, 99, 112, 61, 99, 111, 115, 40, 112, 104, 105, > 41, 59, 92, 10, 115, 112, 61, 115, 105, 110, 40, 112, 104, 105, 41, 59, > 92, 10, 99, 116, 61, 99, 111, 115, 40, 116, 104, 101, 116, 97, 41, 59, > 92, 10, 40, 36, 51, 41, 42, 105, 102, 40, 99, 61, 61, 48, 44, 99, > 116, 42, 99, 112, 44, 105, 102, 40, 99, 61, 61, 49, 44, 99, 116, 42, > 115, 112, 44, 115, 105, 110, 40, 116, 104, 101, 116, 97, 41, 41, 41, 34, > 10, 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 104, 125, 44, 51, 44, > 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, > 45, 49, 93, 32, 121, 120, 122, 99, 10, 45, 105, 91, 45, 50, 93, 32, > 40, 48, 44, 48, 44, 123, 112, 104, 105, 61, 48, 59, 116, 104, 101, 116, > 97, 61, 45, 112, 105, 47, 50, 59, 45, 36, 51, 125, 59, 48, 44, 48, > 44, 123, 112, 104, 105, 61, 48, 59, 116, 104, 101, 116, 97, 61, 112, 105, > 47, 50, 59, 36, 51, 125, 41, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 10, 110, 98, 118, 61, 123, 104, 125, 32, 45, 121, 91, 45, > 49, 93, 10, 36, 110, 49, 44, 123, 36, 110, 50, 45, 50, 125, 44, 49, > 44, 52, 44, 34, 110, 120, 61, 40, 120, 43, 49, 41, 37, 119, 59, 110, > 121, 61, 40, 121, 43, 49, 41, 59, 50, 43, 105, 102, 40, 99, 61, 61, > 48, 44, 120, 43, 121, 42, 34, 36, 110, 49, 34, 44, 105, 102, 40, 99, > 61, 61, 49, 44, 110, 120, 43, 121, 42, 34, 36, 110, 49, 34, 44, 105, > 102, 40, 99, 61, 61, 50, 44, 110, 120, 43, 110, 121, 42, 34, 36, 110, > 49, 34, 44, 120, 43, 110, 121, 42, 34, 36, 110, 49, 34, 41, 41, 41, > 34, 10, 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 104, 125, 44, 52, > 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, > 91, 45, 49, 93, 32, 121, 120, 122, 99, 32, 45, 105, 91, 45, 50, 93, > 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 52, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 120, 10, 50, 44, 36, 110, 49, 44, 49, > 44, 49, 44, 51, 44, 48, 32, 49, 44, 36, 110, 49, 44, 49, 44, 49, > 44, 39, 121, 39, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, > 37, 91, 45, 49, 93, 32, 123, 104, 125, 32, 50, 44, 36, 110, 49, 44, > 49, 44, 49, 44, 51, 44, 49, 32, 91, 45, 51, 44, 45, 50, 93, 10, > 45, 43, 91, 45, 53, 44, 45, 52, 93, 32, 50, 32, 45, 114, 118, 91, > 45, 53, 44, 45, 52, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 32, 123, 36, 110, 98, 118, 45, 36, 110, 49, 125, 32, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 120, 32, 45, 97, 91, 45, 52, 45, 45, 50, > 93, 32, 120, 10, 110, 98, 112, 61, 123, 104, 43, 64, 123, 45, 50, 44, > 104, 125, 43, 64, 123, 45, 51, 44, 104, 125, 125, 10, 45, 121, 91, 45, > 51, 45, 45, 49, 93, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, > 121, 10, 45, 105, 91, 45, 51, 93, 32, 40, 36, 110, 98, 118, 59, 36, > 110, 98, 112, 41, 10, 49, 44, 123, 51, 42, 36, 110, 98, 112, 125, 44, > 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 36, 110, 98, 112, 44, 49, > 44, 49, 44, 49, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, > 10, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, 121, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 34, 91, 51, 100, 32, 115, 112, 104, 101, 114, 105, > 99, 97, 108, 32, 115, 117, 114, 102, 97, 99, 101, 32, 39, 36, 51, 39, > 93, 34, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 112, 108, 105, 110, 101, 51, 100, 32, 58, 32, 120, 48, 91, 37, 93, 44, > 121, 48, 91, 37, 93, 44, 122, 48, 91, 37, 93, 44, 117, 48, 91, 37, > 93, 44, 118, 48, 91, 37, 93, 44, 119, 48, 91, 37, 93, 44, 120, 49, > 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 122, 49, 91, 37, 93, 44, > 117, 49, 91, 37, 93, 44, 118, 49, 91, 37, 93, 44, 119, 49, 91, 37, > 93, 44, 95, 110, 98, 95, 118, 101, 114, 116, 105, 99, 101, 115, 62, 61, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 51, 100, 32, 115, 112, 108, 105, 110, 101, 32, 119, 105, 116, 104, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, > 114, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, > 95, 118, 101, 114, 116, 105, 99, 101, 115, 61, 49, 50, 56, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 49, 48, 48, 32, 45, 115, 112, 108, 105, 110, 101, 51, 100, > 32, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, > 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, > 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, > 44, 49, 50, 56, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, > 45, 98, 111, 120, 51, 100, 32, 49, 32, 45, 112, 114, 105, 109, 105, 116, > 105, 118, 101, 115, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 43, 51, > 100, 10, 115, 112, 108, 105, 110, 101, 51, 100, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 36, 123, 49, 51, 61, 49, 50, 56, 125, 62, 61, 50, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 110, 101, 119, 32, 51, 100, 32, 115, 112, 108, 105, 110, 101, 32, 102, 114, > 111, 109, 32, 40, 36, 123, 49, 45, 51, 125, 41, 32, 91, 36, 123, 52, > 45, 54, 125, 93, 32, 116, 111, 32, 40, 36, 123, 55, 45, 57, 125, 41, > 32, 91, 36, 123, 49, 48, 45, 49, 50, 125, 93, 32, 119, 105, 116, 104, > 32, 36, 49, 51, 32, 118, 101, 114, 116, 105, 99, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, > 41, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 53, 10, 40, 36, 49, > 51, 59, 123, 36, 49, 51, 45, 49, 125, 41, 10, 49, 44, 36, 49, 51, > 44, 49, 44, 49, 44, 49, 32, 40, 48, 59, 49, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 49, 44, 36, 49, 51, 44, 49, 44, 49, 44, 51, 32, > 45, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 120, > 10, 45, 45, 42, 91, 45, 49, 93, 32, 39, 36, 50, 44, 36, 53, 44, > 123, 51, 42, 40, 40, 36, 56, 41, 45, 40, 36, 50, 41, 41, 45, 50, > 42, 40, 36, 53, 41, 45, 40, 36, 49, 49, 41, 125, 44, 123, 40, 36, > 53, 41, 43, 40, 36, 49, 49, 41, 43, 50, 42, 40, 40, 36, 50, 41, > 45, 40, 36, 56, 41, 41, 125, 39, 32, 45, 108, 91, 45, 49, 93, 32, > 45, 115, 32, 120, 32, 45, 43, 32, 45, 101, 110, 100, 108, 10, 45, 45, > 42, 91, 45, 50, 93, 32, 39, 36, 51, 44, 36, 54, 44, 123, 51, 42, > 40, 40, 36, 57, 41, 45, 40, 36, 51, 41, 41, 45, 50, 42, 40, 36, > 54, 41, 45, 40, 36, 49, 50, 41, 125, 44, 123, 40, 36, 54, 41, 43, > 40, 36, 49, 50, 41, 43, 50, 42, 40, 40, 36, 51, 41, 45, 40, 36, > 57, 41, 41, 125, 39, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 32, > 120, 32, 45, 43, 32, 45, 101, 110, 100, 108, 10, 45, 42, 91, 45, 51, > 93, 32, 39, 36, 49, 44, 36, 52, 44, 123, 51, 42, 40, 40, 36, 55, > 41, 45, 40, 36, 49, 41, 41, 45, 50, 42, 40, 36, 52, 41, 45, 40, > 36, 49, 48, 41, 125, 44, 123, 40, 36, 52, 41, 43, 40, 36, 49, 48, > 41, 43, 50, 42, 40, 40, 36, 49, 41, 45, 40, 36, 55, 41, 41, 125, > 39, 32, 45, 108, 91, 45, 51, 93, 32, 45, 115, 32, 120, 32, 45, 43, > 32, 45, 101, 110, 100, 108, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, > 32, 120, 10, 49, 44, 123, 36, 49, 51, 45, 49, 125, 44, 49, 44, 49, > 44, 50, 32, 40, 48, 44, 49, 59, 123, 36, 49, 51, 45, 50, 125, 44, > 123, 36, 49, 51, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 50, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, > 117, 110, 100, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 49, 44, 123, 51, 42, 40, 36, 49, 51, 45, 49, 41, > 125, 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 123, 36, 49, 51, > 45, 49, 125, 44, 49, 44, 49, 44, 49, 10, 45, 121, 91, 45, 51, 44, > 45, 52, 44, 45, 54, 93, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, > 32, 121, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, 112, > 108, 105, 116, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 115, 112, 108, 105, 116, 51, 100, 32, 58, 32, 95, > 107, 101, 101, 112, 95, 115, 104, 97, 114, 101, 100, 95, 100, 97, 116, 97, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 112, 108, 105, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 115, 32, 105, 110, 116, 111, 32, 54, 32, 102, 101, 97, 116, 117, > 114, 101, 32, 118, 101, 99, 116, 111, 114, 115, 32, 58, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 123, 32, 104, 101, 97, 100, 101, 114, 44, 32, > 115, 105, 122, 101, 115, 44, 32, 118, 101, 114, 116, 105, 99, 101, 115, 44, > 32, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 44, 32, 99, 111, 108, > 111, 114, 115, 44, 32, 111, 112, 97, 99, 105, 116, 105, 101, 115, 32, 125, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 115, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 84, 111, 32, 114, 101, 99, 114, 101, 97, 116, 101, > 32, 116, 104, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 44, 32, > 97, 112, 112, 101, 110, 100, 32, 116, 104, 101, 115, 101, 32, 54, 32, 105, > 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, > 121, 45, 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 107, 101, 101, 112, 95, 115, 104, 97, 114, 101, 100, 95, 100, 97, 116, > 97, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 98, 111, 120, 51, 100, 32, 49, 48, 48, 32, 45, 45, 115, 112, > 108, 105, 116, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 114, > 105, 116, 101, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 51, 100, 32, 115, 112, 114, > 105, 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 119, 105, > 116, 104, 32, 97, 108, 112, 104, 97, 32, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 97, 114, 101, 32, 109, 97, 110, 97, 103, 101, 100, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 115, 112, 114, 105, 116, 101, 51, 100, 10, 115, 112, > 114, 105, 116, 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 97, 115, 32, 51, 100, 32, 115, 112, 114, 105, 116, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, > 110, 125, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 10, 45, 105, 91, 48, 93, 32, 40, 54, 55, 46, 53, 59, 55, 51, > 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, > 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 49, 59, 49, 59, 48, 59, > 48, 59, 48, 59, 49, 59, 48, 59, 45, 49, 50, 56, 59, 123, 119, 125, > 59, 123, 104, 125, 59, 64, 123, 48, 44, 115, 125, 41, 32, 45, 121, 91, > 49, 93, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 40, > 49, 41, 32, 45, 97, 32, 121, 10, 45, 101, 108, 115, 101, 32, 45, 47, > 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 105, 91, 45, 50, 93, 32, > 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, > 125, 41, 32, 45, 121, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 97, 32, 121, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 114, 105, 116, 101, 115, 51, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, > 98, 106, 101, 99, 116, 115, 32, 97, 115, 32, 115, 112, 114, 105, 116, 101, > 115, 32, 99, 108, 111, 117, 100, 115, 44, 32, 119, 104, 101, 114, 101, 32, > 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 50, 100, > 32, 115, 112, 114, 105, 116, 101, 32, 105, 115, 32, 116, 104, 101, 32, 108, > 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, > 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 115, 112, 114, > 105, 116, 101, 32, 104, 97, 115, 32, 97, 32, 52, 116, 104, 32, 99, 104, > 97, 110, 110, 101, 108, 44, 32, 105, 116, 32, 115, 116, 97, 110, 100, 115, > 32, 102, 111, 114, 32, 116, 104, 101, 32, 115, 112, 114, 105, 116, 101, 32, > 97, 108, 112, 104, 97, 45, 99, 104, 97, 110, 110, 101, 108, 32, 40, 105, > 110, 32, 91, 48, 44, 50, 53, 53, 93, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, > 49, 48, 48, 44, 50, 48, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 91, 45, 49, 93, 32, > 54, 52, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 103, 97, > 117, 115, 115, 105, 97, 110, 91, 45, 49, 93, 32, 51, 48, 37, 44, 51, > 48, 37, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, > 112, 112, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, > 45, 115, 112, 114, 105, 116, 101, 115, 51, 100, 32, 45, 100, 114, 103, 98, > 97, 91, 45, 50, 93, 10, 115, 112, 114, 105, 116, 101, 115, 51, 100, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, > 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 115, 32, 51, 100, > 32, 115, 112, 114, 105, 116, 101, 115, 32, 99, 108, 111, 117, 100, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 64, 35, 45, 49, 125, 10, 45, 105, 102, 32, 123, 33, 64, 123, 36, 62, > 44, 40, 48, 44, 55, 41, 125, 125, 32, 45, 99, 111, 110, 116, 105, 110, > 117, 101, 32, 45, 101, 110, 100, 105, 102, 10, 91, 45, 49, 93, 32, 45, > 108, 91, 36, 62, 44, 45, 49, 93, 10, 45, 115, 51, 100, 91, 48, 93, > 32, 78, 61, 64, 123, 49, 44, 48, 125, 32, 45, 61, 91, 49, 93, 32, > 36, 78, 44, 48, 44, 49, 10, 45, 114, 109, 91, 51, 45, 53, 93, 32, > 45, 105, 91, 51, 93, 32, 40, 49, 44, 48, 59, 49, 44, 123, 36, 78, > 45, 49, 125, 41, 32, 45, 114, 91, 51, 93, 32, 50, 44, 36, 78, 44, > 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 51, 93, 10, > 45, 105, 102, 32, 123, 115, 61, 61, 52, 125, 10, 45, 115, 91, 45, 49, > 93, 32, 99, 44, 45, 51, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, > 53, 10, 45, 105, 91, 45, 51, 93, 32, 40, 45, 49, 50, 56, 59, 123, > 119, 125, 59, 123, 104, 125, 59, 51, 41, 10, 45, 105, 102, 32, 123, 36, > 78, 62, 49, 125, 32, 45, 105, 91, 45, 50, 93, 32, 49, 44, 123, 52, > 42, 40, 36, 78, 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, 49, 50, > 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 49, 41, 10, 45, 105, 102, 32, 123, 36, 78, 62, 49, > 125, 32, 49, 44, 123, 52, 42, 40, 36, 78, 45, 49, 41, 125, 44, 49, > 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 105, 91, 45, 50, > 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, > 123, 115, 125, 41, 32, 45, 121, 91, 45, 51, 44, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 36, 78, 62, 49, 125, 32, 49, 44, 123, 52, 42, 40, > 36, 78, 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, > 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 49, 44, 36, > 78, 44, 49, 44, 49, 44, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 121, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 116, 97, 114, 51, 100, 32, 58, 32, > 95, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, 62, 48, 44, 48, > 60, 61, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 60, 61, 49, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, > 100, 32, 115, 116, 97, 114, 32, 97, 116, 32, 40, 48, 44, 48, 44, 48, > 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, > 115, 61, 53, 39, 32, 97, 110, 100, 32, 39, 116, 104, 105, 99, 107, 110, > 101, 115, 115, 61, 48, 46, 51, 56, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 115, 116, 97, 114, 51, 100, 32, 44, 32, > 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, > 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, > 45, 82, 71, 66, 125, 10, 115, 116, 97, 114, 51, 100, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, 125, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 48, 46, 51, 56, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 50, 60, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 115, 116, 97, 114, > 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 98, 114, 97, 110, 99, 104, > 101, 115, 32, 97, 110, 100, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, > 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 10, 78, 61, 123, 50, 42, > 36, 49, 125, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, > 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 53, 32, 40, 123, 36, 78, > 43, 49, 125, 59, 36, 78, 41, 10, 40, 123, 45, 112, 105, 47, 50, 125, > 59, 123, 51, 42, 112, 105, 47, 50, 125, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 44, 123, 36, 78, 43, 49, 125, 44, 49, 44, 49, 44, 51, > 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 48, 44, 123, 104, 45, > 50, 125, 32, 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, > 115, 91, 45, 50, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 120, 10, 40, 49, 44, 49, 59, 36, 50, 44, 36, 50, 41, 32, 45, 42, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 122, 91, 45, 49, 93, 32, 48, > 44, 50, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 43, 49, > 125, 44, 49, 44, 49, 44, 48, 10, 40, 51, 44, 36, 78, 44, 49, 44, > 48, 59, 51, 44, 36, 78, 44, 36, 78, 44, 123, 36, 78, 45, 49, 125, > 41, 32, 45, 114, 91, 45, 49, 93, 32, 52, 44, 36, 78, 44, 49, 44, > 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 45, > 61, 91, 45, 49, 93, 32, 48, 44, 50, 44, 49, 48, 48, 37, 10, 51, > 44, 36, 78, 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 36, 78, > 44, 49, 44, 49, 44, 49, 32, 45, 121, 91, 45, 54, 44, 45, 52, 45, > 45, 50, 93, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 115, 116, 97, > 114, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 116, 114, 101, 97, 109, 108, 105, 110, 101, 51, 100, 32, 58, 32, 120, 91, > 37, 93, 44, 121, 91, 37, 93, 44, 122, 91, 37, 93, 44, 95, 76, 62, > 61, 48, 44, 95, 100, 108, 62, 48, 44, 95, 105, 110, 116, 101, 114, 112, > 111, 108, 97, 116, 105, 111, 110, 44, 95, 105, 115, 95, 98, 97, 99, 107, > 119, 97, 114, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, > 105, 115, 95, 111, 114, 105, 101, 110, 116, 101, 100, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 44, 120, 44, 121, 44, 122, 44, 95, 76, 62, 61, 48, 44, 95, 100, > 108, 62, 48, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, > 111, 110, 44, 95, 105, 115, 95, 98, 97, 99, 107, 119, 97, 114, 100, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 105, 115, 95, 111, 114, > 105, 101, 110, 116, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 69, 120, 116, 114, 97, 99, 116, 32, 51, 100, 32, 115, 116, 114, 101, 97, > 109, 108, 105, 110, 101, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 32, 102, 105, 101, 108, > 100, 115, 32, 111, 114, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 102, 111, 114, 109, 117, 108, 97, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 48, 61, 110, 101, 97, 114, 101, 115, 116, 32, 105, 110, 116, 101, 103, 101, > 114, 32, 124, 32, 49, 61, 49, 115, 116, 45, 111, 114, 100, 101, 114, 32, > 124, 32, 50, 61, 50, 110, 100, 45, 111, 114, 100, 101, 114, 32, 124, 32, > 51, 61, 52, 116, 104, 45, 111, 114, 100, 101, 114, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 108, 61, 48, 46, 49, 39, > 44, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 50, 39, 44, 32, 39, 105, 115, 95, 98, 97, 99, 107, 119, 97, 114, > 100, 61, 48, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 111, 114, 105, > 101, 110, 116, 101, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 49, 48, 48, 44, 49, 48, 48, 44, 49, 48, 48, > 44, 51, 32, 45, 114, 97, 110, 100, 32, 45, 49, 48, 44, 49, 48, 32, > 45, 98, 108, 117, 114, 32, 51, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 51, 48, 48, 32, 45, 45, 115, 116, 114, 101, 97, 109, 108, 105, 110, 101, > 51, 100, 91, 48, 93, 32, 123, 63, 40, 49, 48, 48, 41, 125, 44, 123, > 63, 40, 49, 48, 48, 41, 125, 44, 123, 63, 40, 49, 48, 48, 41, 125, > 44, 49, 48, 48, 48, 44, 49, 44, 49, 32, 45, 99, 111, 108, 111, 114, > 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, > 100, 111, 110, 101, 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, 32, > 45, 98, 111, 120, 51, 100, 32, 49, 48, 48, 32, 45, 112, 114, 105, 109, > 105, 116, 105, 118, 101, 115, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, > 97, 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 45, 51, 100, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, 117, 98, 51, > 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 117, 98, 51, 100, 32, 58, 32, 116, 120, 44, 95, 116, 121, 44, > 95, 116, 122, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 83, 104, 105, 102, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 119, 105, 116, > 104, 32, 116, 104, 101, 32, 111, 112, 112, 111, 115, 105, 116, 101, 32, 111, > 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, 105, 115, 112, > 108, 97, 99, 101, 109, 101, 110, 116, 32, 118, 101, 99, 116, 111, 114, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 45, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 116, 121, 61, 116, 122, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 115, 112, 104, 101, 114, > 101, 51, 100, 32, 49, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, > 32, 45, 45, 115, 117, 98, 51, 100, 91, 45, 49, 93, 32, 49, 48, 44, > 123, 63, 40, 45, 49, 48, 44, 49, 48, 41, 125, 44, 48, 32, 45, 99, > 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, > 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 117, 112, 101, 114, 102, 111, 114, 109, > 117, 108, 97, 51, 100, 32, 58, 32, 114, 101, 115, 111, 108, 117, 116, 105, > 111, 110, 62, 49, 44, 109, 62, 61, 49, 44, 110, 49, 44, 110, 50, 44, > 110, 51, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 50, 100, 32, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, > 97, 32, 99, 117, 114, 118, 101, 32, 97, 115, 32, 97, 32, 51, 100, 32, > 111, 98, 106, 101, 99, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 61, 49, 48, 50, > 52, 39, 44, 32, 39, 109, 61, 56, 39, 44, 32, 39, 110, 49, 61, 49, > 39, 44, 32, 39, 110, 50, 61, 53, 39, 32, 97, 110, 100, 32, 39, 110, > 51, 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, 97, 51, 100, > 32, 44, 10, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, 97, 51, > 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 49, 48, 50, 52, 125, 62, 49, 32, 38, 38, 32, 36, 123, 50, 61, 56, > 125, 62, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 49, 125, 44, 36, 123, 52, 61, 53, 125, 44, 36, 123, 53, 61, 56, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 50, 100, 32, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, 97, 32, > 99, 117, 114, 118, 101, 44, 32, 119, 105, 116, 104, 32, 114, 101, 115, 111, > 108, 117, 116, 105, 111, 110, 32, 36, 49, 44, 32, 109, 61, 36, 50, 32, > 97, 110, 100, 32, 40, 110, 49, 44, 110, 50, 44, 110, 51, 41, 61, 40, > 36, 51, 44, 36, 52, 44, 36, 53, 41, 46, 34, 10, 45, 118, 32, 45, > 10, 114, 101, 115, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, > 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, > 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, > 46, 53, 59, 36, 114, 101, 115, 59, 123, 36, 114, 101, 115, 45, 49, 125, > 41, 10, 40, 48, 44, 123, 50, 42, 112, 105, 125, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 36, 114, 101, 115, 44, 49, 44, 49, 44, 49, 44, 51, > 32, 91, 45, 49, 93, 10, 45, 42, 91, 45, 49, 93, 32, 123, 36, 50, > 47, 52, 125, 32, 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, > 111, 115, 91, 45, 50, 93, 32, 45, 97, 98, 115, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 94, 91, 45, 50, 93, 32, 36, 52, 32, 45, 94, 91, > 45, 49, 93, 32, 36, 53, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 94, 91, 45, 49, 93, 32, 123, 45, 49, 47, 36, 51, 125, 10, > 45, 45, 115, 105, 110, 91, 45, 50, 93, 32, 45, 99, 111, 115, 91, 45, > 51, 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 51, 44, 45, 50, 93, 32, 45, 110, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 49, 44, 49, 10, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 48, 44, > 50, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 119, 42, 104, 125, 44, > 49, 44, 49, 44, 45, 49, 10, 49, 44, 123, 36, 114, 101, 115, 45, 49, > 125, 44, 49, 44, 49, 44, 50, 32, 40, 48, 59, 123, 36, 114, 101, 115, > 45, 50, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 36, > 114, 101, 115, 45, 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, > 32, 120, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, > 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 119, 42, 104, 125, 44, 49, > 44, 49, 44, 45, 49, 10, 49, 44, 123, 51, 42, 40, 36, 114, 101, 115, > 45, 49, 41, 125, 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 123, > 36, 114, 101, 115, 45, 49, 125, 44, 49, 44, 49, 44, 49, 32, 45, 97, > 91, 45, 53, 45, 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 91, 51, 100, 92, 32, 115, 117, 112, 101, 114, 102, 111, 114, 109, > 117, 108, 97, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 116, 101, 120, 116, 95, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, > 51, 100, 32, 58, 32, 95, 34, 116, 101, 120, 116, 49, 34, 44, 95, 34, > 116, 101, 120, 116, 50, 34, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 116, 101, 120, 116, 32, 112, 111, 105, 110, 116, 99, > 108, 111, 117, 100, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 116, 119, > 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, > 110, 103, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, > 101, 120, 116, 49, 61, 34, 116, 101, 120, 116, 49, 34, 39, 44, 32, 39, > 116, 101, 120, 116, 50, 61, 34, 116, 101, 120, 116, 50, 34, 39, 32, 97, > 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, > 101, 120, 116, 95, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, > 32, 34, 71, 39, 77, 73, 67, 34, 44, 34, 82, 111, 99, 107, 115, 33, > 34, 10, 116, 101, 120, 116, 95, 112, 111, 105, 110, 116, 99, 108, 111, 117, > 100, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 34, 116, 101, 120, 116, 49, 34, 125, 44, 36, 123, 50, 61, 34, 116, 101, > 120, 116, 50, 34, 125, 44, 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 112, > 111, 105, 110, 116, 99, 108, 111, 117, 100, 32, 116, 101, 120, 116, 32, 111, > 98, 106, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, 116, 114, 105, 110, > 103, 115, 32, 39, 36, 49, 39, 32, 97, 110, 100, 32, 39, 36, 50, 39, > 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 32, 36, 51, 46, 34, 10, 45, 118, 32, 45, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 48, 44, 48, 44, 53, 51, > 44, 49, 44, 49, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, > 50, 34, 44, 48, 44, 48, 44, 53, 51, 44, 49, 44, 49, 32, 45, 109, > 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 10, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 91, 45, 50, 44, 45, 49, 93, 32, 48, 10, 45, > 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 50, 44, 45, 49, 93, > 32, 50, 44, 48, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 44, > 45, 49, 93, 32, 50, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 49, 93, 32, 122, 121, 120, 99, 32, 45, 114, 91, 45, 50, 44, 45, 49, > 93, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, 100, 125, 32, 45, 97, > 110, 100, 91, 45, 50, 44, 45, 49, 93, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, > 123, 64, 123, 45, 50, 44, 100, 125, 45, 49, 125, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 122, 61, > 61, 105, 44, 49, 44, 48, 41, 39, 10, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 43, 91, 45, 49, 93, 32, > 49, 32, 45, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 114, 118, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 123, 100, > 125, 32, 45, 61, 61, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 10, 49, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, > 44, 123, 64, 123, 45, 50, 44, 119, 125, 45, 49, 125, 32, 45, 114, 111, > 117, 110, 100, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 120, > 61, 61, 105, 44, 49, 44, 48, 41, 39, 10, 45, 100, 105, 115, 116, 97, > 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 43, 91, 45, 49, 93, > 32, 49, 32, 45, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 114, 118, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 10, 45, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 123, > 100, 125, 32, 45, 61, 61, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, > 91, 45, 51, 44, 45, 49, 93, 10, 45, 111, 114, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 98, 91, 45, 49, 93, 32, 36, 51, 32, 45, 105, 115, > 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 91, 45, 49, 93, 32, 50, > 53, 37, 10, 45, 99, 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, > 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 34, 91, 51, > 100, 32, 116, 101, 120, 116, 32, 112, 111, 105, 110, 116, 99, 108, 111, 117, > 100, 93, 34, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 116, 101, 120, 116, 51, 100, 32, 58, 32, 116, 101, 120, 116, 44, 95, 102, > 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 100, 101, > 112, 116, 104, 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 97, 32, 51, 100, 32, 116, 101, 120, 116, 32, 111, 98, 106, 101, 99, > 116, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 116, 101, 120, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 102, 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 61, 53, 51, 39, > 44, 32, 39, 100, 101, 112, 116, 104, 61, 49, 48, 39, 32, 97, 110, 100, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, 46, 53, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, > 101, 120, 116, 51, 100, 32, 34, 71, 39, 77, 73, 67, 32, 97, 115, 32, > 97, 92, 110, 51, 68, 32, 108, 111, 103, 111, 33, 34, 10, 116, 101, 120, > 116, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, > 53, 51, 125, 44, 36, 123, 51, 61, 49, 48, 125, 44, 36, 123, 52, 61, > 49, 46, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 116, 101, 120, 116, 32, 111, 98, 106, 101, > 99, 116, 32, 39, 36, 49, 39, 32, 119, 105, 116, 104, 32, 115, 105, 122, > 101, 32, 36, 50, 44, 32, 100, 101, 112, 116, 104, 32, 36, 51, 32, 97, > 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 52, > 46, 34, 10, 45, 118, 32, 45, 32, 48, 32, 45, 116, 91, 45, 49, 93, > 32, 34, 36, 49, 34, 44, 48, 44, 48, 44, 36, 50, 44, 49, 44, 49, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 48, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 36, 51, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 122, > 91, 45, 49, 93, 32, 49, 48, 44, 48, 10, 45, 98, 91, 45, 49, 93, > 32, 36, 52, 32, 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, > 100, 91, 45, 49, 93, 32, 52, 48, 37, 32, 45, 114, 118, 51, 100, 91, > 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 34, 91, 51, 100, > 32, 116, 101, 120, 116, 32, 39, 36, 49, 39, 93, 34, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 51, 100, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 116, 101, 120, 116, 117, 114, 105, 122, > 101, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 116, 101, 120, 116, 117, 114, 105, 122, 101, 51, 100, 32, 58, > 32, 91, 105, 110, 100, 95, 116, 101, 120, 116, 117, 114, 101, 93, 44, 95, > 91, 105, 110, 100, 95, 99, 111, 111, 114, 100, 115, 93, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 101, 120, 116, > 117, 114, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 116, 101, 120, 116, 117, 114, 101, > 32, 97, 110, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 116, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 87, 104, 101, 110, 32, 39, 91, 105, 110, 100, 95, > 99, 111, 111, 114, 100, 115, 93, 39, 32, 105, 115, 32, 111, 109, 105, 116, > 116, 101, 100, 44, 32, 100, 101, 102, 97, 117, 108, 116, 32, 88, 89, 32, > 116, 101, 120, 116, 117, 114, 101, 32, 112, 114, 111, 106, 101, 99, 116, 105, > 111, 110, 32, 105, 115, 32, 112, 101, 114, 102, 111, 114, 109, 101, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 105, 110, 100, 95, 99, 111, > 111, 114, 100, 115, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 111, 114, 117, 115, 51, 100, > 32, 49, 48, 48, 44, 51, 48, 32, 45, 116, 101, 120, 116, 117, 114, 105, > 122, 101, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 107, > 101, 101, 112, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 116, > 111, 114, 117, 115, 51, 100, 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, > 49, 44, 95, 114, 97, 100, 105, 117, 115, 50, 44, 95, 110, 98, 95, 115, > 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 49, 62, 50, 44, 95, > 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 50, > 62, 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 116, 111, 114, 117, 115, 32, 97, 116, 32, 40, 48, > 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 97, 100, 105, 117, 115, > 49, 61, 49, 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, 50, 61, 48, > 46, 51, 39, 44, 32, 39, 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, > 115, 105, 111, 110, 115, 49, 61, 50, 52, 39, 32, 97, 110, 100, 32, 39, > 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 50, > 61, 49, 50, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 44, 51, 32, 45, > 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, > 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, > 82, 71, 66, 125, 10, 116, 111, 114, 117, 115, 51, 100, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 51, 61, 50, 52, 125, 62, 50, > 32, 38, 38, 32, 36, 123, 52, 61, 49, 50, 125, 62, 50, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 125, 44, 36, 123, 50, 61, > 48, 46, 51, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 116, 111, 114, 117, 115, 44, 32, 119, 105, > 116, 104, 32, 114, 97, 100, 105, 105, 32, 40, 36, 49, 44, 36, 50, 41, > 32, 97, 110, 100, 32, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, > 115, 32, 40, 36, 51, 44, 36, 52, 41, 46, 34, 10, 45, 118, 32, 45, > 10, 110, 98, 112, 61, 123, 36, 51, 42, 36, 52, 125, 10, 49, 44, 56, > 44, 49, 44, 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, > 48, 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, > 49, 48, 48, 46, 53, 44, 36, 110, 98, 112, 44, 123, 36, 52, 42, 36, > 51, 125, 10, 40, 48, 59, 123, 50, 42, 112, 105, 125, 41, 32, 45, 45, > 121, 91, 45, 49, 93, 32, 120, 10, 45, 114, 91, 45, 50, 93, 32, 49, > 44, 123, 36, 51, 43, 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 122, > 91, 45, 50, 93, 32, 48, 44, 48, 44, 48, 44, 123, 36, 51, 45, 49, > 125, 10, 45, 114, 91, 45, 49, 93, 32, 123, 36, 52, 43, 49, 125, 44, > 49, 44, 49, 44, 49, 44, 51, 32, 45, 122, 91, 45, 49, 93, 32, 48, > 44, 123, 36, 52, 45, 49, 125, 10, 45, 45, 115, 105, 110, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 52, 44, 45, 51, 93, > 32, 45, 114, 91, 45, 52, 45, 45, 49, 93, 32, 36, 52, 44, 36, 51, > 10, 45, 42, 91, 45, 51, 93, 32, 36, 50, 32, 45, 43, 91, 45, 51, > 93, 32, 36, 49, 32, 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, > 42, 91, 45, 52, 93, 32, 91, 45, 51, 93, 32, 45, 42, 91, 45, 51, > 44, 45, 50, 93, 10, 45, 121, 91, 45, 51, 45, 45, 49, 93, 32, 45, > 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, 10, 49, 44, 36, 51, 44, > 49, 44, 49, 44, 39, 121, 39, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 52, 32, 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 48, 44, > 45, 49, 32, 36, 52, 44, 49, 44, 49, 44, 49, 44, 39, 120, 39, 32, > 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 45, 49, 32, 45, > 114, 91, 45, 52, 45, 45, 49, 93, 32, 36, 52, 44, 36, 51, 10, 45, > 45, 43, 91, 45, 52, 44, 45, 49, 93, 32, 45, 43, 91, 45, 50, 93, > 32, 91, 45, 52, 93, 32, 45, 43, 91, 45, 53, 93, 32, 91, 45, 51, > 93, 32, 45, 43, 91, 45, 52, 44, 45, 51, 93, 32, 45, 121, 91, 45, > 52, 45, 45, 49, 93, 32, 45, 105, 91, 45, 53, 93, 32, 49, 44, 123, > 104, 125, 44, 49, 44, 49, 44, 52, 32, 45, 97, 91, 45, 53, 45, 45, > 49, 93, 32, 120, 10, 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, 50, > 48, 48, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 49, 32, 45, > 121, 91, 45, 52, 45, 45, 50, 93, 32, 45, 97, 91, 45, 53, 45, 45, > 49, 93, 32, 121, 10, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 116, 111, 114, 117, 115, 93, 10, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 114, 105, 97, 110, 103, 108, 101, 51, 100, 32, > 58, 32, 120, 48, 44, 121, 48, 44, 122, 48, 44, 120, 49, 44, 121, 49, > 44, 122, 49, 44, 120, 50, 44, 121, 50, 44, 122, 50, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 116, > 114, 105, 97, 110, 103, 108, 101, 32, 97, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 49, 48, 48, 32, 97, 61, 123, 36, 62, 42, 112, > 105, 47, 53, 48, 125, 32, 45, 116, 114, 105, 97, 110, 103, 108, 101, 51, > 100, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 51, 44, 123, 99, > 111, 115, 40, 51, 42, 36, 97, 41, 125, 44, 123, 115, 105, 110, 40, 50, > 42, 36, 97, 41, 125, 44, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, > 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, > 110, 101, 32, 45, 97, 100, 100, 51, 100, 10, 116, 114, 105, 97, 110, 103, > 108, 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 73, 110, 112, 117, 116, 32, 51, 100, 32, 116, 114, 105, 97, 110, 103, 108, > 101, 32, 40, 36, 49, 44, 36, 50, 44, 36, 51, 41, 45, 40, 36, 52, > 44, 36, 53, 44, 36, 54, 41, 45, 40, 36, 55, 44, 36, 56, 44, 36, > 57, 41, 46, 34, 10, 45, 118, 32, 45, 32, 49, 44, 50, 53, 44, 49, > 44, 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, 48, 57, > 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, 49, 48, > 48, 46, 53, 44, 51, 44, 49, 44, 36, 123, 49, 45, 57, 125, 44, 51, > 44, 48, 44, 49, 44, 50, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, > 48, 48, 44, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 116, 114, 105, 97, 110, 103, 108, 101, 93, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 118, 111, 108, 117, 109, 101, 51, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, 97, 110, 115, 102, > 111, 114, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, > 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, 109, 97, 103, 101, > 115, 32, 97, 115, 32, 51, 100, 32, 112, 97, 114, 97, 108, 108, 101, 108, > 101, 112, 105, 112, 101, 100, 105, 99, 32, 111, 98, 106, 101, 99, 116, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 97, 110, 105, 109, 97, 116, 101, 32, > 98, 108, 117, 114, 44, 48, 44, 53, 44, 51, 48, 32, 45, 97, 32, 122, > 32, 45, 118, 111, 108, 117, 109, 101, 51, 100, 10, 118, 111, 108, 117, 109, > 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 84, > 114, 97, 110, 115, 102, 111, 114, 109, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 97, 115, 32, 51, 100, 32, 112, 97, 114, 97, 108, 108, 101, 108, 101, > 112, 105, 112, 101, 100, 105, 99, 32, 111, 98, 106, 101, 99, 116, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, > 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, 10, 45, 45, 115, 108, 105, > 99, 101, 115, 32, 48, 32, 45, 45, 115, 108, 105, 99, 101, 115, 91, 48, > 93, 32, 49, 48, 48, 37, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 49, 93, 32, 121, 10, 45, 45, 99, 111, 108, 117, 109, 110, 115, 91, 48, > 93, 32, 48, 32, 45, 45, 99, 111, 108, 117, 109, 110, 115, 91, 48, 93, > 32, 49, 48, 48, 37, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 50, 44, 45, 49, 93, 32, 122, 121, 120, 99, 32, 45, 109, 105, 114, 114, > 111, 114, 91, 45, 50, 93, 32, 120, 10, 45, 45, 114, 111, 119, 115, 91, > 48, 93, 32, 48, 32, 45, 45, 114, 111, 119, 115, 91, 48, 93, 32, 49, > 48, 48, 37, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 50, 44, > 45, 49, 93, 32, 120, 122, 121, 99, 32, 45, 109, 105, 114, 114, 111, 114, > 91, 45, 50, 93, 32, 121, 10, 45, 114, 109, 91, 48, 93, 32, 45, 105, > 109, 97, 103, 101, 54, 99, 117, 98, 101, 51, 100, 32, 45, 42, 51, 100, > 32, 36, 119, 44, 36, 104, 44, 36, 100, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 119, 101, 105, 114, 100, 51, 100, 32, 58, 32, 95, 114, 101, 115, > 111, 108, 117, 116, 105, 111, 110, 62, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 119, 101, 105, 114, > 100, 32, 111, 98, 106, 101, 99, 116, 32, 97, 116, 32, 40, 48, 44, 48, > 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 101, 115, 111, 108, 117, 116, > 105, 111, 110, 61, 51, 50, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 119, 101, 105, 114, 100, 51, 100, 32, 52, 56, 32, > 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, > 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, > 45, 82, 71, 66, 125, 10, 119, 101, 105, 114, 100, 51, 100, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 50, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, > 119, 101, 105, 114, 100, 32, 111, 98, 106, 101, 99, 116, 44, 32, 119, 105, > 116, 104, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 115, 111, 115, 117, 114, 102, > 97, 99, 101, 51, 100, 32, 34, 39, 92, 10, 84, 32, 61, 32, 49, 46, > 54, 49, 56, 48, 51, 51, 57, 57, 59, 92, 10, 50, 32, 45, 32, 40, > 99, 111, 115, 40, 120, 32, 43, 32, 84, 42, 121, 41, 32, 43, 32, 99, > 111, 115, 40, 120, 32, 45, 32, 84, 42, 121, 41, 32, 43, 32, 99, 111, > 115, 40, 121, 32, 43, 32, 84, 42, 122, 41, 32, 43, 32, 99, 111, 115, > 40, 121, 32, 45, 32, 84, 42, 122, 41, 32, 43, 32, 99, 111, 115, 40, > 122, 32, 45, 32, 84, 42, 120, 41, 32, 43, 32, 99, 111, 115, 40, 122, > 32, 43, 32, 84, 42, 120, 41, 41, 92, 10, 39, 34, 44, 48, 44, 45, > 52, 46, 55, 44, 45, 52, 46, 55, 44, 45, 52, 46, 55, 44, 52, 46, > 55, 44, 52, 46, 55, 44, 52, 46, 55, 44, 36, 49, 44, 36, 49, 44, > 36, 49, 10, 45, 99, 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, > 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 119, 101, 105, 114, 100, 93, 10, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 58, 32, 80, 114, 111, 103, 114, 97, 109, 32, > 99, 111, 110, 116, 114, 111, 108, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 32, 58, > 32, 34, 99, 111, 109, 109, 97, 110, 100, 34, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 111, 110, 32, 101, 97, 99, 104, 32, 111, 102, 32, 116, 104, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 44, 32, 98, 121, 32, 112, 97, 114, 97, 108, 108, 101, 108, 105, 122, 105, > 110, 103, 32, 105, 116, 32, 102, 111, 114, 32, 97, 108, 108, 32, 105, 109, > 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, 108, 105, 115, 116, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, > 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 97, 112, 112, > 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 32, 34, 45, 98, 108, > 117, 114, 32, 51, 34, 10, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, > 108, 108, 101, 108, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 69, 120, 101, 99, 117, 116, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 39, 36, 42, 39, 32, 111, 110, 32, 97, 108, 108, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 105, 110, 32, 112, 97, 114, 97, 108, 108, 101, 108, 44, > 32, 117, 115, 105, 110, 103, 32, 34, 64, 42, 34, 32, 116, 104, 114, 101, > 97, 100, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 109, 32, 34, 95, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 32, 58, > 32, 36, 42, 34, 10, 99, 111, 109, 109, 97, 110, 100, 49, 61, 34, 34, > 32, 99, 111, 109, 109, 97, 110, 100, 50, 61, 34, 34, 10, 45, 105, 102, > 32, 123, 64, 35, 62, 61, 64, 42, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 42, 32, 45, 105, 102, 32, 36, 62, 32, 99, 111, 109, 109, > 97, 110, 100, 49, 61, 36, 99, 111, 109, 109, 97, 110, 100, 49, 44, 45, > 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 91, > 36, 62, 93, 32, 45, 101, 108, 115, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 49, 61, 45, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, > 108, 101, 108, 91, 36, 62, 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 37, 64, 42, 125, 32, 45, 105, 102, 32, > 36, 62, 32, 99, 111, 109, 109, 97, 110, 100, 50, 61, 36, 99, 111, 109, > 109, 97, 110, 100, 50, 44, 45, 95, 97, 112, 112, 108, 121, 95, 112, 97, > 114, 97, 108, 108, 101, 108, 91, 36, 62, 93, 32, 45, 101, 108, 115, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 50, 61, 45, 95, 97, 112, 112, 108, > 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 91, 36, 62, 93, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 78, 61, 123, 105, > 110, 116, 40, 64, 35, 47, 64, 42, 41, 125, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 78, 32, 45, 108, 91, 123, 64, 42, 42, 36, 62, 125, > 45, 123, 64, 42, 42, 40, 36, 62, 43, 49, 41, 45, 49, 125, 93, 32, > 45, 112, 97, 114, 97, 108, 108, 101, 108, 32, 36, 99, 111, 109, 109, 97, > 110, 100, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 78, 61, 123, 64, 35, 37, 64, 42, 125, 32, 45, 105, 102, 32, 36, 78, > 32, 45, 108, 91, 45, 36, 78, 45, 45, 49, 93, 32, 45, 112, 97, 114, > 97, 108, 108, 101, 108, 32, 36, 99, 111, 109, 109, 97, 110, 100, 50, 32, > 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 45, 117, 110, > 99, 111, 109, 109, 97, 110, 100, 32, 95, 97, 112, 112, 108, 121, 95, 112, > 97, 114, 97, 108, 108, 101, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, > 101, 108, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 32, 34, 99, > 111, 109, 109, 97, 110, 100, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, 110, 32, 101, 97, 99, 104, > 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 44, 32, 98, 121, 32, 112, 97, 114, 97, > 108, 108, 101, 108, 105, 122, 105, 110, 103, 32, 105, 116, 32, 102, 111, 114, > 32, 97, 108, 108, 32, 99, 104, 97, 110, 110, 101, 108, 32, 111, 102, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 100, 101, 112, > 101, 110, 100, 101, 110, 116, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 98, 108, 117, 114, 32, 51, > 34, 10, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 69, 120, 101, 99, 117, 116, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 39, 36, 42, 39, 32, 111, 110, 32, 97, 108, 108, > 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 105, 110, 32, 112, 97, 114, 97, 108, 108, 101, 108, > 44, 32, 117, 115, 105, 110, 103, 32, 34, 64, 42, 34, 32, 116, 104, 114, > 101, 97, 100, 115, 46, 34, 10, 45, 118, 32, 45, 32, 78, 61, 64, 35, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 32, 115, 36, 62, 61, > 64, 123, 36, 62, 44, 115, 125, 32, 45, 100, 111, 110, 101, 32, 45, 115, > 32, 99, 10, 45, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, > 101, 108, 32, 34, 36, 49, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 78, 32, 45, 97, 91, 36, 62, 45, 123, 36, 62, 43, 36, 123, 115, > 36, 62, 125, 45, 49, 125, 93, 32, 99, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, > 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, > 97, 112, 32, 58, 32, 34, 99, 111, 109, 109, 97, 110, 100, 34, 44, 111, > 118, 101, 114, 108, 97, 112, 91, 37, 93, 44, 110, 98, 95, 116, 104, 114, > 101, 97, 100, 115, 61, 123, 32, 48, 61, 97, 117, 116, 111, 32, 124, 32, > 49, 32, 124, 32, 50, 32, 124, 32, 52, 32, 124, 32, 56, 32, 124, 32, > 49, 54, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 111, 110, 32, 101, 97, 99, 104, 32, 111, 102, > 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 44, 32, 98, 121, 32, 112, 97, 114, 97, 108, 108, 101, > 108, 105, 122, 105, 110, 103, 32, 105, 116, 32, 111, 110, 32, 39, 110, 98, > 95, 116, 104, 114, 101, 97, 100, 115, 39, 32, 111, 118, 101, 114, 108, 97, > 112, 112, 101, 100, 32, 115, 117, 98, 45, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 110, 98, 95, 116, 104, > 114, 101, 97, 100, 115, 39, 32, 109, 117, 115, 116, 32, 98, 101, 32, 97, > 32, 112, 111, 119, 101, 114, 32, 111, 102, 32, 50, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 111, 118, 101, 114, 108, 97, 112, 61, 48, > 39, 44, 39, 110, 98, 95, 116, 104, 114, 101, 97, 100, 115, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 97, 112, 112, 108, 121, 95, 112, > 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, > 34, 45, 115, 109, 111, 111, 116, 104, 32, 53, 48, 48, 44, 48, 44, 49, > 34, 44, 49, 54, 10, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, > 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 48, 125, 62, 61, 48, 32, > 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 51, 61, 48, 125, 41, > 32, 38, 38, 32, 36, 51, 62, 61, 48, 34, 10, 45, 118, 32, 45, 32, > 78, 61, 123, 105, 102, 40, 36, 51, 44, 109, 97, 120, 40, 49, 44, 114, > 111, 117, 110, 100, 40, 36, 51, 41, 41, 44, 64, 42, 41, 125, 32, 78, > 61, 123, 50, 94, 105, 110, 116, 40, 108, 111, 103, 50, 40, 109, 105, 110, > 40, 49, 54, 44, 36, 78, 41, 41, 41, 125, 32, 45, 118, 32, 43, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 112, > 97, 114, 97, 108, 108, 101, 108, 105, 122, 101, 100, 32, 99, 111, 109, 109, > 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, 118, 101, 114, 108, 97, > 112, 32, 36, 50, 32, 97, 110, 100, 32, 34, 36, 78, 34, 32, 116, 104, > 114, 101, 97, 100, 115, 46, 34, 10, 45, 118, 32, 45, 10, 45, 109, 32, > 34, 95, 99, 104, 101, 99, 107, 49, 32, 58, 32, 45, 105, 102, 32, 123, > 64, 35, 33, 61, 49, 125, 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, > 45, 57, 93, 32, 92, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 39, 58, > 32, 83, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 39, 36, 49, 39, 32, 99, 104, 97, 110, 103, 101, 115, 32, > 116, 104, 101, 32, 115, 105, 122, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 105, 109, 97, 103, 101, 32, 115, 116, 97, 99, 107, 46, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 95, 97, 112, 112, 108, 121, > 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, > 112, 36, 78, 32, 34, 36, 49, 34, 44, 36, 50, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 117, 110, 99, 111, 109, 109, 97, > 110, 100, 32, 95, 99, 104, 101, 99, 107, 49, 10, 45, 118, 32, 43, 10, > 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, > 111, 118, 101, 114, 108, 97, 112, 49, 32, 58, 10, 36, 49, 10, 95, 97, > 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, > 101, 114, 108, 97, 112, 50, 32, 58, 10, 45, 105, 102, 32, 123, 119, 62, > 61, 104, 125, 10, 111, 118, 120, 61, 123, 114, 111, 117, 110, 100, 40, 105, > 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, > 32, 36, 50, 34, 125, 44, 119, 42, 36, 50, 44, 36, 50, 41, 41, 125, > 32, 119, 50, 61, 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, 10, 45, > 45, 122, 91, 48, 93, 32, 123, 36, 119, 50, 45, 36, 111, 118, 120, 125, > 44, 49, 48, 48, 37, 32, 45, 122, 91, 48, 93, 32, 48, 44, 123, 36, > 119, 50, 43, 36, 111, 118, 120, 45, 49, 125, 10, 45, 112, 97, 114, 97, > 108, 108, 101, 108, 32, 34, 45, 108, 91, 48, 93, 32, 36, 49, 32, 45, > 95, 99, 104, 101, 99, 107, 49, 32, 45, 101, 110, 100, 108, 34, 44, 34, > 45, 108, 91, 49, 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, 99, 107, > 49, 32, 45, 101, 110, 100, 108, 34, 10, 45, 122, 91, 48, 93, 32, 48, > 44, 64, 123, 48, 44, 119, 45, 49, 45, 36, 111, 118, 120, 125, 32, 45, > 122, 91, 49, 93, 32, 36, 111, 118, 120, 44, 49, 48, 48, 37, 32, 45, > 97, 32, 120, 10, 45, 101, 108, 115, 101, 10, 111, 118, 121, 61, 123, 114, > 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 32, 36, 50, 34, 125, 44, 104, 42, 36, 50, > 44, 36, 50, 41, 41, 125, 32, 104, 50, 61, 123, 105, 110, 116, 40, 104, > 47, 50, 41, 125, 10, 45, 45, 114, 111, 119, 115, 91, 48, 93, 32, 123, > 36, 104, 50, 45, 36, 111, 118, 121, 125, 44, 49, 48, 48, 37, 32, 45, > 114, 111, 119, 115, 91, 48, 93, 32, 48, 44, 123, 36, 104, 50, 43, 36, > 111, 118, 121, 45, 49, 125, 10, 45, 112, 97, 114, 97, 108, 108, 101, 108, > 32, 34, 45, 108, 91, 48, 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, > 99, 107, 49, 32, 45, 101, 110, 100, 108, 34, 44, 34, 45, 108, 91, 49, > 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, 99, 107, 49, 32, 45, 101, > 110, 100, 108, 34, 10, 45, 114, 111, 119, 115, 91, 48, 93, 32, 48, 44, > 64, 123, 48, 44, 104, 45, 49, 45, 36, 111, 118, 121, 125, 32, 45, 114, > 111, 119, 115, 91, 49, 93, 32, 36, 111, 118, 121, 44, 49, 48, 48, 37, > 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 105, 102, 10, 95, 97, 112, > 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, > 114, 108, 97, 112, 52, 32, 58, 10, 45, 105, 102, 32, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 47, 109, 105, 110, 40, 119, 44, 104, 41, 62, 61, > 51, 125, 10, 45, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, > 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 50, 32, 34, 45, 95, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, > 118, 101, 114, 108, 97, 112, 50, 32, 34, 64, 123, 34, 45, 113, 117, 111, > 116, 101, 32, 36, 49, 34, 125, 34, 44, 36, 50, 34, 44, 36, 50, 10, > 45, 101, 108, 115, 101, 10, 111, 118, 120, 61, 123, 114, 111, 117, 110, 100, > 40, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, > 110, 116, 32, 36, 50, 34, 125, 44, 119, 42, 36, 50, 44, 36, 50, 41, > 41, 125, 32, 119, 50, 61, 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, > 10, 111, 118, 121, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, > 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 50, > 34, 125, 44, 104, 42, 36, 50, 44, 36, 50, 41, 41, 125, 32, 104, 50, > 61, 123, 105, 110, 116, 40, 104, 47, 50, 41, 125, 10, 45, 45, 122, 91, > 48, 93, 32, 123, 36, 119, 50, 45, 36, 111, 118, 120, 125, 44, 48, 44, > 49, 48, 48, 37, 44, 123, 36, 104, 50, 43, 36, 111, 118, 121, 45, 49, > 125, 32, 45, 45, 122, 91, 48, 93, 32, 48, 44, 123, 36, 104, 50, 45, > 36, 111, 118, 121, 125, 44, 123, 36, 119, 50, 43, 36, 111, 118, 120, 45, > 49, 125, 44, 49, 48, 48, 37, 10, 45, 45, 122, 91, 48, 93, 32, 123, > 36, 119, 50, 45, 36, 111, 118, 120, 125, 44, 123, 36, 104, 50, 45, 36, > 111, 118, 121, 125, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 122, 91, 48, 93, 32, 48, 44, 48, 44, 123, 36, 119, 50, 43, 36, 111, > 118, 120, 45, 49, 125, 44, 123, 36, 104, 50, 43, 36, 111, 118, 121, 45, > 49, 125, 10, 45, 112, 97, 114, 97, 108, 108, 101, 108, 32, 34, 45, 108, > 91, 48, 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, 99, 107, 49, 32, > 45, 101, 110, 100, 108, 34, 44, 34, 45, 108, 91, 49, 93, 32, 36, 49, > 32, 45, 95, 99, 104, 101, 99, 107, 49, 32, 45, 101, 110, 100, 108, 34, > 44, 34, 45, 108, 91, 50, 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, > 99, 107, 49, 32, 45, 101, 110, 100, 108, 34, 44, 34, 45, 108, 91, 51, > 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, 99, 107, 49, 32, 45, 101, > 110, 100, 108, 34, 10, 45, 122, 91, 48, 93, 32, 48, 44, 48, 44, 64, > 123, 48, 44, 119, 45, 49, 45, 36, 111, 118, 120, 125, 44, 64, 123, 48, > 44, 104, 45, 49, 45, 36, 111, 118, 121, 125, 32, 45, 122, 91, 49, 93, > 32, 36, 111, 118, 120, 44, 48, 44, 49, 48, 48, 37, 44, 64, 123, 49, > 44, 104, 45, 49, 45, 36, 111, 118, 121, 125, 10, 45, 122, 91, 50, 93, > 32, 48, 44, 36, 111, 118, 121, 44, 64, 123, 50, 44, 119, 45, 49, 45, > 36, 111, 118, 120, 125, 44, 49, 48, 48, 37, 32, 45, 122, 91, 51, 93, > 32, 36, 111, 118, 120, 44, 36, 111, 118, 121, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 10, 45, 97, 91, 48, 44, 49, 93, 32, 120, 32, 45, > 97, 91, 49, 44, 50, 93, 32, 120, 32, 45, 97, 32, 121, 10, 45, 101, > 110, 100, 105, 102, 10, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, > 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 56, 32, 58, 10, > 45, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, > 95, 111, 118, 101, 114, 108, 97, 112, 50, 32, 34, 45, 95, 97, 112, 112, > 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, > 108, 97, 112, 52, 32, 92, 34, 36, 49, 92, 34, 44, 36, 50, 34, 44, > 36, 50, 10, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, > 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 49, 54, 32, 58, 10, 45, > 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, > 111, 118, 101, 114, 108, 97, 112, 50, 32, 34, 45, 95, 97, 112, 112, 108, > 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, > 97, 112, 56, 32, 92, 34, 36, 49, 92, 34, 44, 36, 50, 34, 44, 36, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 99, 104, 101, 99, 107, 32, 58, > 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 118, 97, 108, 117, > 97, 116, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 32, 97, 110, 100, 32, 100, 105, 115, > 112, 108, 97, 121, 32, 97, 110, 32, 101, 114, 114, 111, 114, 32, 109, 101, > 115, 115, 97, 103, 101, 32, 105, 102, 32, 101, 118, 97, 108, 117, 97, 116, > 101, 100, 32, 116, 111, 32, 102, 97, 108, 115, 101, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 39, 32, 105, 115, 32, 110, 111, 116, 32, 101, 118, 97, > 108, 117, 97, 98, 108, 101, 44, 32, 105, 116, 32, 105, 115, 32, 114, 101, > 103, 97, 114, 100, 101, 100, 32, 97, 115, 32, 97, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 32, 97, 110, 100, 32, 99, 104, 101, 99, 107, 101, 100, > 32, 105, 102, 32, 105, 116, 32, 101, 120, 105, 115, 116, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 104, 101, 99, 107, 51, 100, 32, 58, 32, > 95, 105, 115, 95, 102, 117, 108, 108, 95, 99, 104, 101, 99, 107, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 104, 101, 99, 107, 32, 118, 97, > 108, 105, 100, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 51, 100, 32, 118, 101, 99, 116, 111, 114, 32, 111, 98, 106, > 101, 99, 116, 115, 44, 32, 97, 110, 100, 32, 100, 105, 115, 112, 108, 97, > 121, 32, 97, 110, 32, 101, 114, 114, 111, 114, 32, 109, 101, 115, 115, 97, > 103, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 105, 102, 32, 111, > 110, 101, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 110, 111, 116, 32, > 97, 32, 118, 97, 108, 105, 100, 32, 51, 100, 32, 118, 101, 99, 116, 111, > 114, 32, 111, 98, 106, 101, 99, 116, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 70, 117, 108, 108, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 32, 99, 104, 101, 99, 107, 32, 105, 115, 32, 115, 108, 111, 119, 101, > 114, 32, 98, 117, 116, 32, 109, 111, 114, 101, 32, 112, 114, 101, 99, 105, > 115, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 105, 115, 95, > 102, 117, 108, 108, 95, 99, 104, 101, 99, 107, 61, 49, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 111, 110, 116, 105, 110, 117, 101, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 111, > 32, 116, 111, 32, 101, 110, 100, 32, 111, 102, 32, 99, 117, 114, 114, 101, > 110, 116, 32, 98, 108, 111, 99, 107, 32, 39, 114, 101, 112, 101, 97, 116, > 46, 46, 100, 111, 110, 101, 39, 44, 32, 39, 100, 111, 46, 46, 119, 104, > 105, 108, 101, 39, 32, 111, 114, 32, 39, 108, 111, 99, 97, 108, 46, 46, > 101, 110, 100, 108, 111, 99, 97, 108, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 32, 45, 98, 108, 117, 114, > 32, 49, 32, 45, 105, 102, 32, 123, 49, 61, 61, 49, 125, 32, 45, 99, > 111, 110, 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, 32, 45, > 100, 101, 102, 111, 114, 109, 32, 49, 48, 32, 45, 100, 111, 110, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 98, 114, 101, 97, 107, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 114, 101, 97, > 107, 32, 99, 117, 114, 114, 101, 110, 116, 32, 39, 114, 101, 112, 101, 97, > 116, 46, 46, 100, 111, 110, 101, 39, 44, 32, 39, 100, 111, 46, 46, 119, > 104, 105, 108, 101, 39, 32, 111, 114, 32, 39, 108, 111, 99, 97, 108, 46, > 46, 101, 110, 100, 108, 111, 99, 97, 108, 39, 32, 98, 108, 111, 99, 107, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 48, 32, 45, 98, 108, 117, 114, 32, 49, 32, 45, 105, 102, 32, 123, 49, > 61, 61, 49, 125, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 100, 101, 102, 111, 114, 109, 32, 49, 48, 32, 45, 100, > 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 100, 111, 32, 58, 32, > 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 116, 97, > 114, 116, 32, 97, 32, 39, 100, 111, 46, 46, 119, 104, 105, 108, 101, 39, > 32, 98, 108, 111, 99, 107, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, > 109, 105, 110, 97, 110, 99, 101, 32, 105, 61, 123, 105, 97, 43, 50, 125, > 32, 45, 100, 111, 32, 45, 115, 101, 116, 32, 50, 53, 53, 44, 123, 63, > 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 49, 48, 48, 41, 125, > 37, 32, 45, 119, 104, 105, 108, 101, 32, 123, 105, 97, 60, 36, 105, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 100, 111, 110, 101, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 110, 100, 32, > 97, 32, 39, 114, 101, 112, 101, 97, 116, 46, 46, 100, 111, 110, 101, 39, > 32, 98, 108, 111, 99, 107, 44, 32, 97, 110, 100, 32, 103, 111, 32, 116, > 111, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 39, 45, 114, > 101, 112, 101, 97, 116, 39, 32, 112, 111, 115, 105, 116, 105, 111, 110, 44, > 32, 105, 102, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 114, > 101, 109, 97, 105, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, > 105, 102, 32, 58, 32, 98, 111, 111, 108, 101, 97, 110, 32, 58, 32, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 116, 97, 114, 116, 32, 97, 32, 39, > 101, 108, 105, 102, 46, 46, 91, 101, 108, 115, 101, 93, 46, 46, 101, 110, > 100, 105, 102, 39, 32, 98, 108, 111, 99, 107, 32, 105, 102, 32, 112, 114, > 101, 118, 105, 111, 117, 115, 32, 39, 45, 105, 102, 39, 32, 119, 97, 115, > 32, 110, 111, 116, 32, 118, 101, 114, 105, 102, 105, 101, 100, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 97, 110, 100, 32, 116, 101, 115, 116, 32, > 105, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 111, 111, > 108, 101, 97, 110, 32, 105, 115, 32, 116, 114, 117, 101, 44, 32, 111, 114, > 32, 105, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 32, 101, 120, 105, 115, 116, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 111, 108, 101, 97, 110, > 39, 32, 99, 97, 110, 32, 98, 101, 32, 97, 32, 102, 108, 111, 97, 116, > 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 110, 100, 105, 110, 103, > 32, 102, 111, 114, 32, 123, 32, 48, 61, 102, 97, 108, 115, 101, 32, 124, > 32, 111, 116, 104, 101, 114, 61, 116, 114, 117, 101, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 101, 108, 115, 101, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, 101, 99, 117, 116, > 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 32, 105, 102, 32, 112, 114, 101, 118, 105, 111, 117, 115, > 32, 39, 45, 105, 102, 39, 32, 111, 114, 32, 39, 45, 101, 108, 105, 102, > 39, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, 102, 97, 105, > 108, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 101, 110, 100, 105, > 102, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 69, 110, 100, 32, 97, 32, 39, 105, 102, 46, 46, 91, 101, 108, 105, > 102, 93, 46, 46, 91, 101, 108, 115, 101, 93, 46, 46, 101, 110, 100, 105, > 102, 39, 32, 98, 108, 111, 99, 107, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 101, 110, 100, 108, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 101, 110, 100, 108, 111, 99, 97, 108, 39, 46, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 101, 110, 100, 108, 111, 99, 97, > 108, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 69, 110, 100, 32, 97, 32, 39, 108, 111, 99, 97, 108, 46, 46, 101, > 110, 100, 108, 111, 99, 97, 108, 39, 32, 98, 108, 111, 99, 107, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 101, 110, 100, 108, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 101, 114, 114, 111, 114, 32, 58, 32, 109, 101, 115, 115, 97, 103, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 80, 114, 105, 110, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 101, 114, 114, 111, 114, 32, 109, 101, 115, 115, 97, 103, 101, 32, 111, > 110, 32, 116, 104, 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 101, > 114, 114, 111, 114, 32, 40, 115, 116, 100, 101, 114, 114, 41, 32, 97, 110, > 100, 32, 101, 120, 105, 116, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, > 101, 114, 44, 32, 101, 120, 99, 101, 112, 116, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 105, 102, 32, 101, 114, 114, 111, 114, 32, 105, 115, 32, > 99, 97, 117, 103, 104, 116, 32, 98, 121, 32, 97, 32, 39, 45, 111, 110, > 102, 97, 105, 108, 39, 32, 99, 111, 109, 109, 97, 110, 100, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 109, 97, 110, 100, 32, > 115, 117, 98, 115, 101, 116, 32, 40, 105, 102, 32, 97, 110, 121, 41, 32, > 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 100, 105, 115, 112, 108, > 97, 121, 101, 100, 32, 115, 99, 111, 112, 101, 32, 105, 110, 100, 105, 99, > 101, 115, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, 105, 109, > 97, 103, 101, 32, 105, 110, 100, 105, 99, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 101, 120, 101, 99, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 101, 120, 101, 99, 32, 58, 32, 99, 111, 109, 109, > 97, 110, 100, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 120, 101, 99, 117, 116, 101, 32, 101, 120, 116, 101, 114, > 110, 97, 108, 32, 99, 111, 109, 109, 97, 110, 100, 32, 117, 115, 105, 110, > 103, 32, 97, 32, 115, 121, 115, 116, 101, 109, 32, 99, 97, 108, 108, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 101, 32, 115, 116, > 97, 116, 117, 115, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 116, 104, > 101, 110, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 101, 114, > 114, 111, 114, 32, 99, 111, 100, 101, 32, 114, 101, 116, 117, 114, 110, 101, > 100, 32, 98, 121, 32, 116, 104, 101, 32, 115, 121, 115, 116, 101, 109, 32, > 99, 97, 108, 108, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 120, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 105, 102, 32, 58, 32, 98, 111, 111, 108, 101, 97, > 110, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 116, 97, 114, > 116, 32, 97, 32, 39, 105, 102, 46, 46, 91, 101, 108, 105, 102, 93, 46, > 46, 91, 101, 108, 115, 101, 93, 46, 46, 101, 110, 100, 105, 102, 39, 32, > 98, 108, 111, 99, 107, 32, 97, 110, 100, 32, 116, 101, 115, 116, 32, 105, > 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 111, 111, 108, > 101, 97, 110, 32, 105, 115, 32, 116, 114, 117, 101, 44, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 111, 114, 32, 105, 102, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 101, > 120, 105, 115, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 98, 111, 111, 108, 101, 97, 110, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 97, 32, 102, 108, 111, 97, 116, 32, 110, 117, 109, 98, 101, 114, 32, > 115, 116, 97, 110, 100, 105, 110, 103, 32, 102, 111, 114, 32, 123, 32, 48, > 61, 102, 97, 108, 115, 101, 32, 124, 32, 111, 116, 104, 101, 114, 61, 116, > 114, 117, 101, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 105, 102, 32, > 123, 105, 97, 60, 54, 52, 125, 32, 45, 97, 100, 100, 32, 53, 48, 37, > 32, 45, 101, 108, 105, 102, 32, 123, 105, 97, 60, 49, 50, 56, 125, 32, > 45, 97, 100, 100, 32, 50, 53, 37, 32, 45, 101, 108, 105, 102, 32, 123, > 105, 97, 60, 49, 57, 50, 125, 32, 45, 115, 117, 98, 32, 50, 53, 37, > 32, 45, 101, 108, 115, 101, 32, 45, 115, 117, 98, 32, 53, 48, 37, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, > 53, 10, 35, 64, 103, 109, 105, 99, 32, 108, 32, 58, 32, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 108, 111, 99, 97, 108, 39, 46, 32, 58, 32, > 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 108, 111, 99, 97, 108, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 83, 116, 97, 114, 116, 32, 97, 32, 39, 108, 111, 99, 97, 108, 46, 46, > 91, 111, 110, 102, 97, 105, 108, 93, 46, 46, 101, 110, 100, 108, 111, 99, > 97, 108, 39, 32, 98, 108, 111, 99, 107, 44, 32, 119, 105, 116, 104, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 108, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, > 111, 99, 97, 108, 91, 93, 32, 51, 48, 48, 44, 51, 48, 48, 44, 49, > 44, 51, 32, 45, 114, 97, 110, 100, 91, 48, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 98, 108, 117, 114, 32, 52, 32, 45, 115, 104, 97, 114, 112, > 101, 110, 32, 49, 48, 48, 48, 32, 45, 101, 110, 100, 108, 111, 99, 97, > 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 108, 111, 99, 97, 108, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 51, 32, 45, 100, 101, 102, 111, 114, 109, > 32, 50, 48, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, 111, > 99, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 109, 117, 116, 101, 120, > 32, 58, 32, 105, 110, 100, 105, 99, 101, 44, 95, 97, 99, 116, 105, 111, > 110, 61, 123, 32, 48, 61, 117, 110, 108, 111, 99, 107, 32, 124, 32, 49, > 61, 108, 111, 99, 107, 32, 125, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 76, 111, 99, 107, 32, 111, 114, 32, 117, > 110, 108, 111, 99, 107, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 109, 117, 116, 101, 120, 32, 102, 111, 114, 32, 109, 117, 108, 116, 105, 45, > 116, 104, 114, 101, 97, 100, 101, 100, 32, 112, 114, 111, 103, 114, 97, 109, > 109, 105, 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 32, 108, 111, 99, 107, 101, 100, 32, 109, 117, 116, 101, 120, 32, 99, 97, > 110, 32, 98, 101, 32, 117, 110, 108, 111, 99, 107, 101, 100, 32, 111, 110, > 108, 121, 32, 98, 121, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 116, > 104, 114, 101, 97, 100, 46, 32, 65, 108, 108, 32, 109, 117, 116, 101, 120, > 101, 115, 32, 97, 114, 101, 32, 117, 110, 108, 111, 99, 107, 101, 100, 32, > 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 105, 110, 100, 105, 99, 101, 39, 32, 100, 101, > 115, 105, 103, 110, 97, 116, 101, 115, 32, 116, 104, 101, 32, 109, 117, 116, > 101, 120, 32, 105, 110, 100, 105, 99, 101, 44, 32, 105, 110, 32, 91, 48, > 44, 50, 53, 53, 93, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 97, 99, 116, 105, 111, 110, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 111, 110, 102, 97, 105, 108, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, 101, 99, 117, 116, 101, 32, > 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 99, 111, 109, 109, 97, 110, > 100, 115, 32, 119, 104, 101, 110, 32, 97, 110, 32, 101, 114, 114, 111, 114, > 32, 105, 115, 32, 101, 110, 99, 111, 117, 110, 116, 101, 114, 101, 100, 32, > 105, 110, 32, 116, 104, 101, 32, 98, 111, 100, 121, 32, 111, 102, 32, 116, > 104, 101, 32, 39, 108, 111, 99, 97, 108, 46, 46, 101, 110, 100, 108, 111, > 99, 97, 108, 39, 32, 98, 108, 111, 99, 107, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 84, 104, 101, 32, 115, 116, 97, 116, 117, 115, 32, > 118, 97, 108, 117, 101, 32, 105, 115, 32, 115, 101, 116, 32, 119, 105, 116, > 104, 32, 116, 104, 101, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, > 105, 110, 103, 32, 101, 114, 114, 111, 114, 32, 109, 101, 115, 115, 97, 103, > 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 108, 111, 99, 97, 108, 32, > 45, 98, 108, 117, 114, 32, 45, 51, 32, 45, 111, 110, 102, 97, 105, 108, > 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 108, > 111, 99, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 112, 97, 114, 97, > 108, 108, 101, 108, 32, 58, 32, 95, 119, 97, 105, 116, 95, 116, 104, 114, > 101, 97, 100, 115, 44, 34, 99, 111, 109, 109, 97, 110, 100, 49, 34, 44, > 34, 99, 111, 109, 109, 97, 110, 100, 50, 34, 44, 46, 46, 46, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, > 101, 99, 117, 116, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 32, 105, 110, 32, 112, 97, 114, 97, > 108, 108, 101, 108, 44, 32, 101, 97, 99, 104, 32, 105, 110, 32, 97, 32, > 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 116, 104, 114, 101, 97, 100, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 108, 108, 32, 114, > 117, 110, 110, 105, 110, 103, 32, 116, 104, 114, 101, 97, 100, 115, 32, 115, > 104, 97, 114, 101, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, > 32, 108, 105, 115, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 110, 100, 32, 116, 104, 101, 32, 103, 108, 111, 98, 97, 108, 32, 118, > 97, 114, 105, 97, 98, 108, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 39, 119, 97, 105, 116, 95, 116, 104, 114, 101, 97, 100, 115, > 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, 101, 118, > 101, 114, 32, 124, 32, 49, 61, 119, 104, 101, 110, 32, 112, 114, 111, 99, > 101, 115, 115, 32, 114, 101, 116, 117, 114, 110, 115, 32, 124, 32, 50, 61, > 119, 104, 101, 110, 32, 99, 111, 109, 109, 97, 110, 100, 32, 114, 101, 116, > 117, 114, 110, 115, 32, 124, 32, 51, 61, 105, 109, 109, 101, 100, 105, 97, > 116, 101, 108, 121, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 119, 97, 105, 116, 95, 116, 104, 114, 101, 97, 100, 115, 61, 51, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 91, 48, 93, 32, 45, 112, 97, 114, 97, > 108, 108, 101, 108, 32, 34, 45, 98, 108, 117, 114, 91, 48, 93, 32, 51, > 34, 44, 34, 45, 109, 105, 114, 114, 111, 114, 91, 49, 93, 32, 99, 34, > 10, 112, 97, 114, 97, 108, 108, 101, 108, 32, 58, 10, 45, 105, 102, 32, > 123, 36, 49, 61, 61, 48, 124, 124, 36, 49, 61, 61, 49, 124, 124, 36, > 49, 61, 61, 50, 125, 32, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 69, 120, 101, 99, 117, 116, 101, 32, 34, 123, 36, 35, 45, 49, 125, 34, > 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 39, 36, 123, 50, 45, 45, > 49, 125, 39, 32, 105, 110, 32, 112, 97, 114, 97, 108, 108, 101, 108, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 101, 108, > 115, 101, 32, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 69, 120, 101, > 99, 117, 116, 101, 32, 34, 36, 35, 34, 32, 99, 111, 109, 109, 97, 110, > 100, 115, 32, 39, 36, 42, 39, 32, 105, 110, 32, 112, 97, 114, 97, 108, > 108, 101, 108, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 112, 97, > 114, 97, 108, 108, 101, 108, 32, 36, 34, 42, 34, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 114, 111, 103, 114, 101, 115, 115, > 32, 58, 32, 48, 60, 61, 118, 97, 108, 117, 101, 60, 61, 49, 48, 48, > 32, 58, 32, 45, 49, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 83, 101, 116, 32, 116, 104, 101, 32, 112, 114, 111, > 103, 114, 101, 115, 115, 32, 105, 110, 100, 105, 99, 101, 32, 111, 102, 32, > 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, 110, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 105, 115, 32, 99, > 111, 109, 109, 97, 110, 100, 32, 105, 115, 32, 117, 115, 101, 102, 117, 108, > 32, 111, 110, 108, 121, 32, 119, 104, 101, 110, 32, 71, 39, 77, 73, 67, > 32, 105, 115, 32, 117, 115, 101, 100, 32, 98, 121, 32, 97, 110, 32, 101, > 109, 98, 101, 100, 100, 105, 110, 103, 32, 97, 112, 112, 108, 105, 99, 97, > 116, 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 113, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 113, 117, 105, 116, 39, 46, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 113, 117, > 105, 116, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 81, 117, 105, 116, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, > 101, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 113, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 114, 101, 112, 101, 97, 116, 32, 58, 32, 110, 98, 95, 105, > 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 116, 97, 114, 116, 32, 105, > 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 97, 32, 39, > 114, 101, 112, 101, 97, 116, 46, 46, 100, 111, 110, 101, 39, 32, 98, 108, > 111, 99, 107, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, > 32, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, > 104, 105, 102, 116, 91, 36, 62, 93, 32, 36, 60, 44, 48, 44, 48, 44, > 48, 44, 50, 32, 45, 100, 111, 110, 101, 32, 45, 97, 112, 112, 101, 110, > 100, 32, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 111, 100, 101, 51, 100, > 32, 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 52, 32, 45, 105, 109, > 97, 103, 101, 99, 117, 98, 101, 51, 100, 32, 45, 114, 111, 116, 97, 116, > 101, 51, 100, 32, 49, 44, 49, 44, 48, 44, 52, 48, 32, 45, 115, 110, > 97, 112, 115, 104, 111, 116, 51, 100, 32, 52, 48, 48, 44, 49, 46, 52, > 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, > 116, 117, 114, 110, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 102, 114, 111, 109, 32, > 99, 117, 114, 114, 101, 110, 116, 32, 99, 117, 115, 116, 111, 109, 32, 99, > 111, 109, 109, 97, 110, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 112, 114, 111, 103, 114, 101, 115, 115, 32, 58, 32, 48, 60, 61, 118, 97, > 108, 117, 101, 60, 61, 49, 48, 48, 32, 124, 32, 45, 49, 32, 124, 32, > 34, 99, 111, 109, 109, 97, 110, 100, 34, 44, 48, 60, 61, 118, 97, 108, > 117, 101, 95, 109, 105, 110, 60, 61, 49, 48, 48, 44, 48, 60, 61, 118, > 97, 108, 117, 101, 95, 109, 97, 120, 60, 61, 49, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 116, 104, 101, 32, 112, > 114, 111, 103, 114, 101, 115, 115, 32, 105, 110, 100, 105, 99, 101, 32, 111, > 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, > 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, 110, > 101, 32, 40, 114, 101, 108, 97, 116, 105, 118, 101, 108, 121, 32, 116, 111, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 112, 114, 101, 118, 105, 111, > 117, 115, 108, 121, 32, 100, 101, 102, 105, 110, 101, 100, 32, 112, 114, 111, > 103, 114, 101, 115, 115, 32, 98, 111, 117, 110, 100, 115, 41, 44, 32, 111, > 114, 32, 99, 97, 108, 108, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 99, 111, 109, 109, 97, 110, 100, 32, 119, 105, 116, > 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 112, 114, 111, 103, 114, 101, 115, 115, 32, 98, 111, > 117, 110, 100, 115, 46, 10, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 34, 34, 125, 10, > 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, > 36, 95, 112, 114, 111, 103, 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, > 115, 41, 125, 32, 95, 112, 114, 111, 103, 114, 101, 115, 115, 95, 98, 111, > 117, 110, 100, 115, 61, 48, 44, 49, 48, 48, 32, 45, 101, 110, 100, 105, > 102, 10, 109, 61, 123, 97, 114, 103, 40, 45, 50, 44, 36, 95, 112, 114, > 111, 103, 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 41, 125, 32, > 77, 61, 123, 97, 114, 103, 40, 45, 49, 44, 36, 95, 112, 114, 111, 103, > 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 41, 125, 10, 45, 105, > 102, 32, 123, 36, 35, 61, 61, 50, 38, 38, 33, 110, 97, 114, 103, 40, > 36, 50, 41, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 83, 101, 116, 32, 114, 101, 108, 97, 116, 105, 118, 101, > 32, 112, 114, 111, 103, 114, 101, 115, 115, 32, 105, 110, 100, 105, 99, 101, > 32, 116, 111, 32, 36, 49, 37, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 105, 102, 40, 36, 49, 60, > 48, 44, 45, 49, 44, 109, 105, 110, 40, 49, 48, 48, 44, 109, 97, 120, > 40, 48, 44, 36, 109, 43, 40, 36, 77, 45, 36, 109, 41, 42, 36, 49, > 37, 41, 41, 41, 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 35, 61, > 61, 51, 125, 10, 110, 109, 61, 123, 109, 105, 110, 40, 36, 50, 44, 36, > 45, 49, 41, 125, 32, 110, 77, 61, 123, 109, 97, 120, 40, 36, 50, 44, > 36, 45, 49, 41, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, > 45, 51, 93, 32, 34, 67, 97, 108, 108, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 39, 36, 49, 39, 32, 119, 105, 116, 104, 32, 112, 114, 111, 103, > 114, 101, 115, 115, 32, 98, 111, 117, 110, 100, 115, 32, 91, 34, 36, 110, > 109, 44, 36, 110, 77, 34, 93, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 112, 114, 111, 103, 114, 101, 115, 115, 32, 36, 109, 32, 95, 112, 114, 111, > 103, 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 61, 36, 95, 112, > 114, 111, 103, 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 44, 123, > 36, 109, 43, 36, 110, 109, 42, 40, 36, 77, 45, 36, 109, 41, 47, 49, > 48, 48, 125, 44, 123, 36, 109, 43, 36, 110, 77, 42, 40, 36, 77, 45, > 36, 109, 41, 47, 49, 48, 48, 125, 10, 45, 95, 114, 112, 114, 111, 103, > 114, 101, 115, 115, 32, 34, 36, 49, 34, 10, 45, 112, 114, 111, 103, 114, > 101, 115, 115, 32, 36, 77, 32, 40, 36, 95, 112, 114, 111, 103, 114, 101, > 115, 115, 95, 98, 111, 117, 110, 100, 115, 41, 32, 95, 112, 114, 111, 103, > 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 61, 64, 123, 45, 49, > 44, 48, 45, 45, 51, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 108, 115, 101, 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, 51, > 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 114, 112, 114, > 111, 103, 114, 101, 115, 115, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, > 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 39, 36, 42, 39, 46, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, 114, 112, > 114, 111, 103, 114, 101, 115, 115, 32, 58, 32, 36, 42, 10, 35, 64, 103, > 109, 105, 99, 32, 115, 107, 105, 112, 32, 58, 32, 105, 116, 101, 109, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 111, 32, 110, 111, 116, 104, 105, 110, 103, 32, 98, 117, 116, 32, 115, 107, > 105, 112, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 116, 101, > 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 117, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 115, 116, 97, 116, 117, 115, 39, 46, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 97, > 116, 117, 115, 32, 58, 32, 118, 97, 108, 117, 101, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 99, > 117, 114, 114, 101, 110, 116, 32, 115, 116, 97, 116, 117, 115, 32, 118, 97, > 108, 117, 101, 46, 32, 85, 115, 101, 100, 32, 116, 111, 32, 100, 101, 102, > 105, 110, 101, 32, 97, 32, 114, 101, 116, 117, 114, 110, 105, 110, 103, 32, > 118, 97, 108, 117, 101, 32, 105, 110, 32, 97, 32, 102, 117, 110, 99, 116, > 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 117, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 99, 111, 109, 109, 97, 110, 100, 32, 34, 102, 111, 111, 32, > 58, 32, 117, 48, 61, 68, 97, 114, 107, 32, 117, 49, 61, 66, 114, 105, > 103, 104, 116, 32, 45, 115, 116, 97, 116, 117, 115, 32, 36, 123, 117, 123, > 105, 97, 62, 61, 49, 50, 56, 125, 125, 34, 32, 45, 116, 101, 120, 116, > 95, 111, 117, 116, 108, 105, 110, 101, 32, 64, 123, 45, 102, 111, 111, 125, > 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, 49, 44, 50, 53, 53, 10, > 35, 64, 103, 109, 105, 99, 32, 119, 104, 105, 108, 101, 32, 58, 32, 98, > 111, 111, 108, 101, 97, 110, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 69, 110, 100, 32, 97, 32, 39, 100, 111, 46, 46, 119, 104, 105, 108, > 101, 39, 32, 98, 108, 111, 99, 107, 32, 97, 110, 100, 32, 103, 111, 32, > 98, 97, 99, 107, 32, 116, 111, 32, 97, 115, 115, 111, 99, 105, 97, 116, > 101, 100, 32, 39, 45, 100, 111, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 105, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, > 111, 111, 108, 101, 97, 110, 32, 105, 115, 32, 116, 114, 117, 101, 32, 111, > 114, 32, 105, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 101, 120, 105, 115, 116, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 111, 108, 101, 97, > 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 97, 32, 102, 108, 111, 97, > 116, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 110, 100, 105, 110, > 103, 32, 102, 111, 114, 32, 123, 32, 48, 61, 102, 97, 108, 115, 101, 32, > 124, 32, 111, 116, 104, 101, 114, 61, 116, 114, 117, 101, 32, 125, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 65, 114, 114, 97, 121, 115, > 44, 32, 116, 105, 108, 101, 115, 32, 97, 110, 100, 32, 102, 114, 97, 109, > 101, 115, 10, 35, 64, 103, 109, 105, 99, 32, 97, 114, 114, 97, 121, 32, > 58, 32, 77, 62, 48, 44, 95, 78, 62, 48, 44, 95, 101, 120, 112, 97, > 110, 100, 95, 116, 121, 112, 101, 61, 123, 32, 48, 61, 109, 105, 110, 32, > 124, 32, 49, 61, 109, 97, 120, 32, 124, 32, 50, 61, 97, 108, 108, 32, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, > 101, 32, 77, 120, 78, 32, 97, 114, 114, 97, 121, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 78, 61, 77, 39, > 32, 97, 110, 100, 32, 39, 101, 120, 112, 97, 110, 100, 95, 116, 121, 112, > 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 97, 114, 114, 97, > 121, 32, 51, 44, 50, 44, 50, 10, 97, 114, 114, 97, 121, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 49, > 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, 38, 38, 32, 105, 115, 105, > 110, 116, 40, 36, 123, 50, 61, 36, 49, 125, 41, 32, 38, 38, 32, 36, > 50, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, > 101, 32, 36, 49, 120, 36, 50, 32, 97, 114, 114, 97, 121, 32, 102, 114, > 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 101, 120, 112, 97, 110, 100, 32, 116, 121, 112, 101, 32, 36, 51, 46, > 34, 10, 45, 118, 32, 45, 32, 114, 48, 61, 123, 49, 48, 48, 47, 109, > 97, 120, 40, 36, 49, 44, 36, 50, 41, 125, 32, 114, 49, 61, 123, 49, > 48, 48, 47, 109, 105, 110, 40, 36, 49, 44, 36, 50, 41, 125, 32, 114, > 50, 61, 49, 48, 48, 10, 45, 114, 32, 36, 123, 114, 36, 51, 125, 37, > 44, 36, 123, 114, 36, 51, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 50, 32, 45, 114, 32, 123, 36, 49, 42, 49, 48, 48, 125, 37, 44, 123, > 36, 50, 42, 49, 48, 48, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 50, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 97, 114, 114, 97, 121, 95, 102, 97, 100, 101, 32, 58, 32, 77, 62, 48, > 44, 95, 78, 62, 48, 44, 48, 60, 61, 95, 102, 97, 100, 101, 95, 115, > 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, 48, 60, 61, 95, 102, 97, > 100, 101, 95, 101, 110, 100, 60, 61, 49, 48, 48, 44, 95, 101, 120, 112, > 97, 110, 100, 95, 116, 121, 112, 101, 61, 123, 48, 61, 109, 105, 110, 32, > 124, 32, 49, 61, 109, 97, 120, 32, 124, 32, 50, 61, 97, 108, 108, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, > 32, 77, 120, 78, 32, 97, 114, 114, 97, 121, 32, 102, 114, 111, 109, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 78, 61, 77, 39, 44, > 32, 39, 102, 97, 100, 101, 95, 115, 116, 97, 114, 116, 61, 54, 48, 39, > 44, 32, 39, 102, 97, 100, 101, 95, 101, 110, 100, 61, 57, 48, 39, 32, > 97, 110, 100, 32, 39, 101, 120, 112, 97, 110, 100, 95, 116, 121, 112, 101, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 97, 114, 114, 97, 121, > 95, 102, 97, 100, 101, 32, 51, 44, 50, 10, 97, 114, 114, 97, 121, 95, > 102, 97, 100, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, > 61, 36, 49, 125, 44, 36, 123, 51, 61, 54, 48, 125, 44, 36, 123, 52, > 61, 57, 48, 125, 44, 36, 123, 53, 61, 49, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 36, 49, 120, 36, > 50, 32, 97, 114, 114, 97, 121, 32, 111, 102, 32, 40, 36, 51, 37, 44, > 36, 52, 37, 41, 32, 102, 97, 100, 101, 100, 32, 116, 105, 108, 101, 115, > 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 101, 120, 112, 97, 110, 100, 32, 116, 121, 112, 101, 32, > 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 91, 45, 49, 93, > 32, 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, 53, 48, 37, 44, > 53, 48, 37, 44, 49, 44, 49, 44, 50, 32, 45, 102, 97, 100, 101, 95, > 100, 105, 97, 109, 111, 110, 100, 32, 36, 51, 44, 36, 52, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 97, 114, 114, 97, 121, > 32, 36, 49, 44, 36, 50, 44, 36, 53, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, > 111, 114, 32, 58, 32, 78, 62, 61, 48, 44, 95, 100, 105, 114, 61, 123, > 32, 48, 61, 120, 32, 124, 32, 49, 61, 121, 32, 124, 32, 50, 61, 120, > 121, 32, 124, 32, 51, 61, 116, 114, 105, 45, 120, 121, 32, 125, 44, 95, > 101, 120, 112, 97, 110, 100, 95, 116, 121, 112, 101, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 114, 101, 97, 116, 101, 32, 50, 94, 78, 120, 50, 94, 78, 32, 97, 114, > 114, 97, 121, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 100, 105, 114, 61, 50, 39, 32, 97, 110, 100, 32, 39, > 101, 120, 112, 97, 110, 100, 95, 116, 121, 112, 101, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, > 111, 114, 32, 50, 10, 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, 111, > 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 125, > 44, 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 114, 101, 97, 116, 101, 32, 97, 32, 50, 94, 36, 49, 120, 50, > 94, 36, 49, 32, 109, 105, 114, 114, 111, 114, 101, 100, 45, 97, 114, 114, > 97, 121, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 101, 120, 112, 97, 110, 100, 32, 116, 121, 112, > 101, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 49, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, > 48, 125, 10, 45, 105, 102, 32, 123, 36, 50, 62, 61, 51, 125, 32, 45, > 114, 32, 51, 51, 37, 44, 51, 51, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 50, 10, 45, 101, 108, 115, 101, 32, 45, 114, 32, 53, > 48, 37, 44, 53, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 50, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 48, 125, 32, 45, > 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 97, 32, 120, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 49, 125, 32, 45, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 97, 32, 121, 10, 45, 101, 108, > 115, 101, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 97, > 32, 120, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 97, > 32, 121, 32, 45, 105, 102, 32, 123, 36, 50, 61, 61, 51, 125, 32, 45, > 114, 32, 49, 53, 48, 37, 44, 49, 53, 48, 37, 44, 49, 44, 49, 48, > 48, 37, 44, 48, 44, 50, 44, 49, 44, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 97, 114, 114, 97, 121, 95, 114, 97, 110, > 100, 111, 109, 32, 58, 32, 77, 115, 62, 48, 44, 95, 78, 115, 62, 48, > 44, 95, 77, 100, 62, 48, 44, 95, 78, 100, 62, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 77, 100, 120, > 78, 100, 32, 97, 114, 114, 97, 121, 32, 111, 102, 32, 116, 105, 108, 101, > 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 77, 115, 120, 78, 115, 32, 115, 111, 117, 114, 99, 101, 32, 97, 114, 114, > 97, 121, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 78, > 115, 61, 77, 115, 39, 44, 32, 39, 77, 100, 61, 77, 115, 39, 32, 97, > 110, 100, 32, 39, 78, 100, 61, 78, 115, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 97, 114, 114, 97, 121, 95, 114, 97, 110, 100, 111, 109, 32, > 56, 44, 56, 44, 49, 53, 44, 49, 48, 10, 97, 114, 114, 97, 121, 95, > 114, 97, 110, 100, 111, 109, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 36, 49, 125, 44, 36, > 123, 52, 61, 36, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 114, 101, 97, 116, 101, 32, 36, 51, 120, 36, 52, 32, 97, 114, 114, > 97, 121, 32, 111, 102, 32, 116, 105, 108, 101, 115, 32, 102, 114, 111, 109, > 32, 36, 49, 120, 36, 50, 32, 97, 114, 114, 97, 121, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, > 125, 10, 45, 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, > 49, 44, 36, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 51, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 52, 32, 91, 123, 63, 40, 36, > 49, 42, 36, 50, 45, 49, 41, 125, 93, 32, 45, 100, 111, 110, 101, 32, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 45, 123, 36, 49, 42, > 36, 50, 45, 49, 125, 93, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, > 105, 108, 101, 115, 32, 36, 51, 44, 36, 52, 10, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, > 109, 101, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 114, > 97, 109, 101, 95, 120, 121, 39, 46, 10, 102, 114, 97, 109, 101, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 61, 48, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 51, 61, 50, 53, 53, 125, 44, 36, 123, 52, > 61, 36, 51, 125, 44, 36, 123, 53, 61, 36, 52, 125, 44, 36, 123, 54, > 61, 50, 53, 53, 125, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, > 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 102, 114, 97, 109, 101, 95, > 120, 121, 32, 36, 123, 49, 45, 45, 49, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 102, 114, 97, 109, 101, 95, 98, 108, 117, 114, 32, 58, 32, 95, > 115, 104, 97, 114, 112, 110, 101, 115, 115, 62, 48, 44, 95, 115, 105, 122, > 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 44, 95, 115, 104, 97, 100, 105, 110, 103, 44, 95, 98, 108, 117, 114, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 82, 71, > 66, 65, 45, 99, 111, 108, 111, 114, 101, 100, 32, 114, 111, 117, 110, 100, > 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, 49, > 48, 39, 44, 32, 39, 115, 105, 122, 101, 61, 51, 48, 39, 44, 32, 39, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 39, 44, 32, 39, > 115, 104, 97, 100, 105, 110, 103, 61, 49, 39, 32, 97, 110, 100, 32, 39, > 98, 108, 117, 114, 61, 51, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 102, 114, 97, 109, 101, 95, 98, 108, 117, 114, 32, 51, 44, 51, 48, 44, > 56, 44, 49, 48, 37, 10, 102, 114, 97, 109, 101, 95, 98, 108, 117, 114, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, > 44, 36, 123, 50, 61, 51, 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, > 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 51, 37, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 114, 111, 117, > 110, 100, 32, 102, 114, 97, 109, 101, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 104, 97, 114, 112, 110, > 101, 115, 115, 32, 36, 49, 44, 32, 115, 105, 122, 101, 32, 36, 50, 44, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, > 115, 104, 97, 100, 105, 110, 103, 32, 36, 52, 32, 97, 110, 100, 32, 98, > 108, 117, 114, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, > 110, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 44, 34, 45, 40, 97, 98, 115, 40, 120, 47, 119, 45, 48, 46, 53, 41, > 94, 36, 49, 32, 43, 32, 97, 98, 115, 40, 121, 47, 104, 45, 48, 46, > 53, 41, 94, 36, 49, 41, 94, 40, 49, 47, 36, 49, 41, 34, 32, 45, > 103, 101, 91, 45, 49, 93, 32, 36, 50, 37, 10, 45, 105, 102, 32, 36, > 52, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, > 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, > 45, 94, 91, 45, 49, 93, 32, 123, 49, 47, 36, 52, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 98, 91, 45, 49, 93, 32, 36, 51, 32, 45, > 45, 98, 91, 45, 50, 93, 32, 36, 53, 32, 45, 109, 118, 91, 45, 49, > 93, 32, 45, 51, 32, 45, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, 32, 58, 32, > 95, 100, 101, 112, 116, 104, 62, 61, 48, 44, 95, 120, 95, 99, 101, 110, > 116, 101, 114, 44, 95, 121, 95, 99, 101, 110, 116, 101, 114, 44, 95, 108, > 101, 102, 116, 95, 115, 105, 100, 101, 61, 123, 48, 61, 110, 111, 114, 109, > 97, 108, 32, 124, 32, 49, 61, 109, 105, 114, 114, 111, 114, 45, 120, 32, > 124, 32, 50, 61, 109, 105, 114, 114, 111, 114, 45, 121, 32, 124, 32, 51, > 61, 109, 105, 114, 114, 111, 114, 45, 120, 121, 125, 44, 95, 114, 105, 103, > 104, 116, 95, 115, 105, 100, 101, 44, 95, 108, 111, 119, 101, 114, 95, 115, > 105, 100, 101, 44, 95, 117, 112, 112, 101, 114, 95, 115, 105, 100, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 115, 101, 114, 116, 32, > 51, 100, 32, 102, 114, 97, 109, 101, 115, 32, 105, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, 112, 116, 104, 61, 49, 39, > 44, 32, 39, 120, 95, 99, 101, 110, 116, 101, 114, 61, 121, 95, 99, 101, > 110, 116, 101, 114, 61, 48, 39, 32, 97, 110, 100, 32, 39, 108, 101, 102, > 116, 95, 115, 105, 100, 101, 61, 114, 105, 103, 104, 116, 95, 115, 105, 100, > 101, 44, 108, 111, 119, 101, 114, 95, 115, 105, 100, 101, 61, 117, 112, 112, > 101, 114, 95, 115, 105, 100, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, 32, 44, 10, 102, > 114, 97, 109, 101, 95, 99, 117, 98, 101, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 49, 125, 62, 61, 48, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, > 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, > 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, 55, 61, 48, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 115, 101, 114, 116, 32, 51, > 100, 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 112, 116, 104, 32, 36, > 49, 44, 32, 99, 101, 110, 116, 101, 114, 32, 40, 36, 50, 44, 36, 51, > 41, 32, 97, 110, 100, 32, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 115, 32, 40, 36, 123, 52, 45, 45, 49, 125, 41, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 32, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, > 105, 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 45, 102, 114, 97, 109, > 101, 95, 99, 117, 98, 101, 32, 36, 123, 49, 45, 45, 49, 125, 32, 45, > 97, 32, 99, 10, 45, 101, 108, 115, 101, 10, 109, 61, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 125, 32, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 32, 115, 61, 123, 115, 125, 10, 45, 105, 109, 97, 103, 101, 112, > 108, 97, 110, 101, 51, 100, 32, 45, 99, 51, 100, 32, 45, 47, 51, 100, > 91, 45, 49, 93, 32, 36, 119, 44, 36, 104, 44, 49, 10, 45, 45, 95, > 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, 91, 48, 93, 32, 36, 52, > 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, > 57, 48, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 45, 48, 46, 53, > 44, 48, 44, 45, 48, 46, 53, 10, 45, 45, 95, 102, 114, 97, 109, 101, > 95, 99, 117, 98, 101, 91, 48, 93, 32, 36, 53, 32, 45, 114, 51, 100, > 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 45, 57, 48, 32, 45, > 43, 51, 100, 91, 45, 49, 93, 32, 48, 46, 53, 44, 48, 44, 45, 48, > 46, 53, 10, 45, 45, 95, 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, > 91, 48, 93, 32, 36, 54, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 48, 44, 48, 44, 57, 48, 32, 45, 43, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 48, 46, 53, 44, 45, 48, 46, 53, 10, 45, 45, 95, > 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, 91, 48, 93, 32, 36, 55, > 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, > 45, 57, 48, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, 45, > 48, 46, 53, 44, 45, 48, 46, 53, 10, 45, 43, 51, 100, 32, 48, 44, > 48, 44, 49, 32, 45, 43, 51, 100, 32, 45, 42, 51, 100, 32, 36, 119, > 44, 36, 104, 44, 36, 109, 10, 102, 61, 49, 48, 48, 48, 10, 99, 120, > 61, 36, 50, 42, 36, 119, 47, 50, 42, 40, 36, 102, 43, 36, 109, 42, > 36, 49, 41, 47, 36, 102, 10, 99, 121, 61, 36, 51, 42, 36, 104, 47, > 50, 42, 40, 36, 102, 43, 36, 109, 42, 36, 49, 41, 47, 36, 102, 10, > 45, 115, 51, 100, 32, 45, 114, 91, 50, 93, 32, 51, 44, 123, 64, 123, > 50, 44, 104, 125, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 10, 45, > 102, 91, 50, 93, 32, 34, 105, 102, 40, 105, 40, 50, 44, 121, 41, 60, > 48, 46, 53, 44, 105, 44, 105, 43, 105, 102, 40, 120, 61, 61, 48, 44, > 34, 36, 99, 120, 34, 44, 105, 102, 40, 120, 61, 61, 49, 44, 34, 36, > 99, 121, 34, 44, 40, 36, 49, 45, 49, 41, 42, 34, 36, 109, 34, 41, > 41, 41, 34, 10, 45, 121, 91, 50, 93, 32, 45, 97, 32, 121, 10, 45, > 42, 51, 100, 32, 50, 32, 123, 50, 42, 36, 119, 125, 44, 123, 50, 42, > 36, 104, 125, 44, 49, 44, 36, 115, 32, 45, 102, 51, 100, 32, 123, 50, > 42, 36, 102, 125, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, > 48, 44, 49, 44, 50, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, 48, > 37, 44, 50, 10, 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 45, 118, 32, 43, 10, 95, 102, 114, 97, 109, 101, 95, 99, 117, 98, > 101, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, > 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 49, > 56, 48, 32, 45, 114, 118, 51, 100, 91, 45, 49, 93, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 114, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 49, 56, 48, 32, 45, 114, > 118, 51, 100, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 49, 61, 61, 51, 125, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, > 44, 48, 44, 49, 44, 49, 56, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, 102, 117, 122, > 122, 121, 32, 58, 32, 115, 105, 122, 101, 95, 120, 62, 61, 48, 44, 95, > 115, 105, 122, 101, 95, 121, 62, 61, 48, 44, 95, 102, 117, 122, 122, 121, > 110, 101, 115, 115, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 62, 61, 48, 44, 95, 82, 44, 95, 71, 44, 95, 66, 44, > 95, 65, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, > 32, 82, 71, 66, 65, 45, 99, 111, 108, 111, 114, 101, 100, 32, 102, 117, > 122, 122, 121, 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 121, 61, 115, > 105, 122, 101, 95, 120, 39, 44, 32, 39, 102, 117, 122, 122, 121, 110, 101, > 115, 115, 61, 53, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 61, 49, 39, 32, 97, 110, 100, 32, 39, 82, 61, 71, 61, 66, > 61, 65, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, > 114, 97, 109, 101, 95, 102, 117, 122, 122, 121, 32, 50, 48, 10, 102, 114, > 97, 109, 101, 95, 102, 117, 122, 122, 121, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 53, 125, > 44, 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 50, 53, 53, 125, > 44, 36, 123, 54, 61, 36, 53, 125, 44, 36, 123, 55, 61, 36, 54, 125, > 44, 36, 123, 56, 61, 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 68, 114, 97, 119, 32, 36, 49, 120, 36, 50, 32, 102, 117, > 122, 122, 121, 32, 102, 114, 97, 109, 101, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 102, 117, 122, 122, 121, > 110, 101, 115, 115, 32, 36, 51, 44, 32, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 32, 36, 52, 32, 97, 110, 100, 32, 82, 71, 66, 65, 32, > 99, 111, 108, 111, 114, 32, 40, 36, 53, 44, 36, 54, 44, 36, 55, 44, > 36, 56, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, > 103, 98, 97, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, > 45, 105, 91, 48, 93, 32, 40, 36, 49, 59, 36, 50, 41, 32, 45, 42, > 91, 48, 93, 32, 50, 32, 40, 36, 53, 94, 36, 54, 94, 36, 55, 94, > 36, 56, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 45, 114, 101, 99, 116, 97, > 110, 103, 108, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 48, 48, > 37, 44, 64, 123, 48, 44, 49, 125, 44, 49, 44, 49, 10, 45, 114, 101, > 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 64, 123, 48, 44, 48, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 10, > 45, 114, 109, 91, 48, 93, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, > 93, 32, 45, 36, 49, 44, 45, 36, 50, 44, 48, 44, 48, 44, 50, 32, > 45, 115, 112, 114, 101, 97, 100, 91, 45, 49, 93, 32, 36, 51, 32, 45, > 98, 91, 45, 49, 93, 32, 36, 52, 32, 45, 95, 102, 97, 100, 101, 32, > 53, 48, 44, 56, 48, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, 112, 97, > 105, 110, 116, 105, 110, 103, 32, 58, 32, 95, 115, 105, 122, 101, 91, 37, > 93, 62, 61, 48, 44, 48, 60, 61, 95, 99, 111, 110, 116, 114, 97, 115, > 116, 60, 61, 49, 44, 95, 112, 114, 111, 102, 105, 108, 101, 95, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, 95, > 82, 44, 95, 71, 44, 95, 66, 44, 95, 118, 105, 103, 110, 101, 116, 116, > 101, 95, 115, 105, 122, 101, 91, 37, 93, 62, 61, 48, 44, 95, 118, 105, > 103, 110, 101, 116, 116, 101, 95, 99, 111, 110, 116, 114, 97, 115, 116, 62, > 61, 48, 44, 95, 100, 101, 102, 101, 99, 116, 115, 95, 99, 111, 110, 116, > 114, 97, 115, 116, 62, 61, 48, 44, 48, 60, 61, 95, 100, 101, 102, 101, > 99, 116, 115, 95, 100, 101, 110, 115, 105, 116, 121, 60, 61, 49, 48, 48, > 44, 95, 100, 101, 102, 101, 99, 116, 115, 95, 115, 105, 122, 101, 62, 61, > 48, 44, 95, 100, 101, 102, 101, 99, 116, 115, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, 95, 115, 101, 114, > 105, 97, 108, 95, 110, 117, 109, 98, 101, 114, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 100, 100, 32, 97, 32, 112, 97, 105, 110, 116, 105, > 110, 103, 32, 102, 114, 97, 109, 101, 32, 116, 111, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 61, 49, 48, 37, 39, > 44, 32, 39, 99, 111, 110, 116, 114, 97, 115, 116, 61, 48, 46, 52, 39, > 44, 32, 39, 112, 114, 111, 102, 105, 108, 101, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 61, 54, 37, 39, 44, 32, 39, 82, 61, 50, 50, > 53, 39, 44, 32, 39, 71, 61, 50, 48, 48, 39, 44, 32, 39, 66, 61, > 49, 50, 48, 39, 44, 32, 39, 118, 105, 103, 110, 101, 116, 116, 101, 95, > 115, 105, 122, 101, 61, 50, 37, 39, 44, 32, 39, 118, 105, 103, 110, 101, > 116, 116, 101, 95, 99, 111, 110, 116, 114, 97, 115, 116, 61, 52, 48, 48, > 39, 44, 32, 39, 100, 101, 102, 101, 99, 116, 115, 95, 99, 111, 110, 116, > 114, 97, 115, 116, 61, 53, 48, 39, 44, 32, 39, 100, 101, 102, 101, 99, > 116, 115, 95, 100, 101, 110, 115, 105, 116, 121, 61, 49, 48, 39, 44, 32, > 39, 100, 101, 102, 101, 99, 116, 115, 95, 115, 105, 122, 101, 61, 49, 39, > 44, 32, 39, 100, 101, 102, 101, 99, 116, 115, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 61, 48, 46, 53, 37, 39, 32, 97, 110, 100, 32, > 39, 115, 101, 114, 105, 97, 108, 95, 110, 117, 109, 98, 101, 114, 61, 49, > 50, 51, 52, 53, 54, 55, 56, 57, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, > 44, 10, 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, > 32, 58, 10, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, > 48, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 48, 46, > 52, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 32, 38, > 38, 32, 36, 123, 51, 61, 54, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 55, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 56, 61, 52, 48, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 57, > 61, 53, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 49, 48, 61, > 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 49, 48, 60, 61, 49, > 48, 48, 32, 38, 38, 32, 36, 123, 49, 49, 61, 49, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 49, 50, 61, 48, 46, 53, 37, 125, 62, 61, > 48, 34, 10, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 50, 50, 53, > 125, 44, 36, 123, 53, 61, 50, 48, 48, 125, 44, 36, 123, 54, 61, 49, > 50, 48, 125, 44, 36, 123, 49, 51, 61, 49, 50, 51, 52, 53, 54, 55, > 56, 57, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, > 32, 112, 97, 105, 110, 116, 105, 110, 103, 32, 102, 114, 97, 109, 101, 32, > 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, 99, 111, 110, 116, 114, 97, > 115, 116, 32, 36, 50, 44, 32, 112, 114, 111, 102, 105, 108, 101, 32, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, 99, 111, > 108, 111, 114, 32, 40, 36, 123, 52, 45, 54, 125, 41, 44, 32, 118, 105, > 103, 110, 101, 116, 116, 101, 32, 115, 105, 122, 101, 32, 36, 55, 44, 32, > 34, 92, 10, 34, 118, 105, 103, 110, 101, 116, 116, 101, 32, 115, 116, 114, > 101, 110, 103, 116, 104, 32, 36, 56, 44, 32, 100, 101, 102, 101, 99, 116, > 115, 32, 99, 111, 110, 116, 114, 97, 115, 116, 32, 36, 57, 44, 32, 100, > 101, 102, 101, 99, 116, 115, 32, 100, 101, 110, 115, 105, 116, 121, 32, 36, > 49, 48, 44, 32, 100, 101, 102, 101, 99, 116, 115, 32, 115, 105, 122, 101, > 32, 36, 49, 49, 44, 32, 100, 101, 102, 101, 99, 116, 115, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 50, 32, 97, 110, 100, > 32, 115, 101, 114, 105, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 36, > 49, 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, > 123, 33, 36, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, > 110, 100, 105, 102, 10, 36, 49, 44, 36, 49, 32, 115, 61, 123, 109, 97, > 120, 40, 119, 44, 104, 41, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 40, 123, 39, 64, 123, 45, 100, 101, 99, 50, 98, 105, 110, 92, 32, 36, > 49, 51, 125, 39, 125, 41, 32, 45, 45, 91, 45, 49, 93, 32, 123, 39, > 48, 39, 125, 32, 45, 114, 91, 45, 49, 93, 32, 36, 115, 10, 45, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 98, 91, > 45, 49, 93, 32, 36, 51, 32, 45, 110, 91, 45, 49, 93, 32, 123, 49, > 45, 36, 50, 125, 44, 123, 49, 43, 36, 50, 125, 10, 45, 45, 114, 91, > 45, 49, 93, 32, 123, 64, 123, 45, 50, 44, 119, 125, 43, 50, 42, 36, > 115, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 10, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 10, 45, 109, 118, 91, 45, > 51, 93, 32, 64, 35, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, > 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, > 44, 123, 64, 123, 45, 52, 44, 104, 125, 43, 50, 42, 36, 115, 125, 44, > 49, 44, 49, 10, 45, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, > 32, 120, 10, 91, 45, 51, 93, 44, 91, 45, 51, 93, 44, 49, 44, 49, > 44, 49, 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, > 51, 44, 48, 44, 48, 44, 123, 36, 115, 45, 49, 125, 44, 123, 36, 115, > 45, 49, 125, 44, 48, 44, 123, 36, 115, 45, 49, 125, 44, 49, 44, 48, > 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 51, 44, > 49, 48, 48, 37, 44, 48, 44, 123, 119, 45, 36, 115, 125, 44, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, > 10, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 49, > 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 51, 44, > 49, 44, 48, 44, 49, 48, 48, 37, 44, 123, 36, 115, 45, 50, 125, 44, > 49, 48, 48, 37, 44, 48, 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, > 45, 49, 93, 32, 51, 44, 49, 44, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 123, 104, 45, 36, 115, 43, 49, 125, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 48, 10, 45, 95, 102, 114, 97, 109, 101, > 95, 112, 97, 105, 110, 116, 105, 110, 103, 91, 45, 54, 45, 45, 51, 93, > 32, 36, 123, 52, 45, 54, 125, 44, 36, 123, 57, 45, 49, 50, 125, 10, > 123, 64, 123, 45, 55, 44, 119, 125, 43, 50, 42, 36, 115, 125, 44, 123, > 64, 123, 45, 55, 44, 104, 125, 43, 50, 42, 36, 115, 125, 44, 49, 44, > 51, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 55, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 51, 93, 44, 49, 32, 45, > 114, 109, 91, 45, 55, 93, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 51, 93, 32, 121, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 54, 93, > 44, 48, 44, 123, 104, 45, 36, 115, 125, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 51, 93, 44, 49, 32, 45, 114, 109, 91, 45, 54, 44, 45, 51, > 93, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 52, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 50, 93, 44, 49, 32, 45, > 114, 109, 91, 45, 52, 93, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 50, 93, 32, 120, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 123, 119, 45, 36, 115, 125, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 50, 93, 44, 49, 32, 45, 114, 109, 91, 45, 51, 44, 45, 50, > 93, 10, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, > 45, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 32, 45, 43, 91, 45, 49, 93, 32, 50, 53, 53, > 32, 45, 45, 98, 91, 45, 49, 93, 32, 36, 55, 32, 45, 110, 91, 45, > 49, 93, 32, 48, 44, 36, 56, 32, 45, 109, 97, 120, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 10, 45, 97, 91, 45, 50, 45, 45, 49, 93, 32, 99, 10, 45, 114, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 95, > 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 45, > 42, 91, 45, 50, 93, 32, 36, 51, 32, 45, 42, 91, 45, 51, 93, 32, > 36, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 10, 105, 61, 48, 32, 45, 100, 111, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, > 114, 101, 109, 111, 118, 101, 95, 112, 105, 120, 101, 108, 115, 91, 45, 49, > 93, 32, 123, 49, 48, 48, 45, 36, 53, 125, 32, 45, 98, 91, 45, 49, > 93, 32, 36, 54, 32, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 37, > 32, 105, 61, 123, 36, 105, 43, 49, 125, 32, 45, 119, 104, 105, 108, 101, > 32, 123, 34, 109, 61, 36, 53, 47, 50, 48, 48, 59, 40, 105, 97, 60, > 109, 45, 48, 46, 50, 32, 124, 124, 32, 105, 97, 62, 109, 43, 48, 46, > 50, 41, 32, 38, 38, 32, 34, 36, 105, 34, 60, 49, 48, 34, 125, 10, > 45, 98, 91, 45, 49, 93, 32, 36, 55, 32, 45, 103, 91, 45, 49, 93, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, 45, 49, > 93, 32, 45, 36, 52, 44, 36, 52, 10, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, 101, 114, 110, > 32, 58, 32, 77, 62, 61, 51, 44, 95, 112, 97, 116, 116, 101, 114, 110, > 32, 61, 32, 123, 32, 48, 61, 102, 105, 114, 115, 116, 32, 105, 109, 97, > 103, 101, 32, 124, 32, 49, 61, 115, 101, 108, 102, 32, 125, 44, 95, 99, > 111, 110, 115, 116, 114, 97, 105, 110, 95, 115, 105, 122, 101, 32, 61, 32, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 115, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 112, 97, 116, 116, 101, 114, 110, 32, 102, 114, 97, 109, 101, > 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 112, > 97, 116, 116, 101, 114, 110, 61, 48, 39, 32, 97, 110, 100, 32, 39, 99, > 111, 110, 115, 116, 114, 97, 105, 110, 95, 115, 105, 122, 101, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 102, 114, 97, 109, 101, 95, 112, 97, > 116, 116, 101, 114, 110, 32, 56, 10, 102, 114, 97, 109, 101, 95, 112, 97, > 116, 116, 101, 114, 110, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, > 49, 62, 61, 51, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, > 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, 118, 32, 45, 32, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 32, 48, 10, 45, 105, > 102, 32, 123, 64, 35, 61, 61, 49, 124, 124, 36, 50, 125, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 115, 101, > 114, 116, 32, 36, 49, 120, 36, 49, 32, 115, 101, 108, 102, 45, 112, 97, > 116, 116, 101, 114, 110, 32, 102, 114, 97, 109, 101, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 10, 45, 45, 114, 32, 123, > 119, 47, 40, 36, 49, 45, 50, 41, 125, 44, 123, 104, 47, 40, 36, 49, > 45, 50, 41, 125, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 114, > 91, 45, 50, 93, 32, 123, 36, 49, 42, 119, 125, 44, 123, 36, 49, 42, > 104, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 10, 91, 45, 49, 93, 120, 123, 36, 49, 43, 50, > 125, 32, 45, 97, 91, 123, 45, 36, 49, 45, 50, 125, 45, 45, 49, 93, > 32, 120, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, 48, > 44, 48, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, 48, > 44, 123, 64, 123, 45, 51, 44, 104, 125, 45, 49, 45, 104, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 91, 45, 49, 93, 120, 123, 36, 49, 43, > 49, 125, 32, 45, 97, 91, 123, 45, 36, 49, 45, 50, 125, 45, 45, 49, > 93, 32, 121, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 123, 64, 123, 45, 50, 44, 119, 125, 45, 49, 45, 119, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 51, 32, 45, 114, 32, > 36, 119, 104, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 115, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 73, 110, 115, 101, 114, 116, 32, 36, 49, 120, 36, 49, > 32, 112, 97, 116, 116, 101, 114, 110, 32, 102, 114, 97, 109, 101, 32, 111, > 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, > 32, 102, 105, 114, 115, 116, 32, 105, 109, 97, 103, 101, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 49, 125, 10, 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 10, 45, 45, > 114, 91, 48, 93, 32, 123, 119, 47, 40, 36, 49, 45, 50, 41, 125, 44, > 123, 104, 47, 40, 36, 49, 45, 50, 41, 125, 44, 49, 44, 49, 48, 48, > 37, 44, 50, 10, 45, 114, 91, 45, 50, 93, 32, 123, 64, 123, 45, 50, > 44, 119, 125, 43, 50, 42, 119, 125, 44, 123, 64, 123, 45, 50, 44, 104, > 125, 43, 50, 42, 104, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 91, 45, 49, 93, 120, 123, > 36, 49, 43, 50, 125, 32, 45, 97, 91, 123, 45, 36, 49, 45, 50, 125, > 45, 45, 49, 93, 32, 120, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 48, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 123, 64, 123, 45, 51, 44, 104, 125, 45, 49, 45, > 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 91, 45, 49, 93, 120, > 123, 36, 49, 43, 49, 125, 32, 45, 97, 91, 123, 45, 36, 49, 45, 50, > 125, 45, 45, 49, 93, 32, 121, 32, 45, 106, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 123, 64, 123, 45, 50, 44, 119, 125, 45, 49, 45, 119, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 51, > 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, 104, 44, 49, 44, 49, 48, > 48, 37, 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, > 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, > 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, 114, 111, 117, 110, > 100, 32, 58, 32, 95, 115, 104, 97, 114, 112, 110, 101, 115, 115, 62, 48, > 44, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 44, 95, 115, 104, 97, 100, 105, 110, 103, 44, 95, > 82, 44, 95, 71, 44, 95, 66, 44, 95, 65, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 114, 97, 119, 32, 82, 71, 66, 65, 45, 99, 111, > 108, 111, 114, 101, 100, 32, 114, 111, 117, 110, 100, 32, 102, 114, 97, 109, > 101, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, 49, 48, 39, 44, 32, 39, > 115, 105, 122, 101, 61, 49, 48, 39, 44, 32, 39, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 61, 48, 39, 44, 32, 39, 115, 104, 97, 100, 105, > 110, 103, 61, 48, 39, 32, 97, 110, 100, 32, 39, 82, 61, 71, 61, 66, > 61, 65, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, > 114, 97, 109, 101, 95, 114, 111, 117, 110, 100, 32, 49, 48, 10, 102, 114, > 97, 109, 101, 95, 114, 111, 117, 110, 100, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 49, 61, 49, 48, 125, 44, 36, 123, 50, 61, 49, 48, > 125, 44, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, > 36, 123, 53, 61, 50, 53, 53, 125, 44, 36, 123, 54, 61, 36, 53, 125, > 44, 36, 123, 55, 61, 36, 54, 125, 44, 36, 123, 56, 61, 50, 53, 53, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, > 114, 111, 117, 110, 100, 32, 102, 114, 97, 109, 101, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 104, 97, > 114, 112, 110, 101, 115, 115, 32, 36, 49, 44, 32, 115, 105, 122, 101, 32, > 36, 50, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, > 51, 44, 32, 115, 104, 97, 100, 105, 110, 103, 32, 36, 52, 32, 97, 110, > 100, 32, 82, 71, 66, 65, 32, 99, 111, 108, 111, 114, 32, 40, 36, 53, > 44, 36, 54, 44, 36, 55, 44, 36, 56, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, > 64, 123, 48, 44, 110, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 44, 34, 45, 40, 97, 98, 115, 40, 120, 47, 119, 45, > 48, 46, 53, 41, 94, 36, 49, 32, 43, 32, 97, 98, 115, 40, 121, 47, > 104, 45, 48, 46, 53, 41, 94, 36, 49, 41, 94, 40, 49, 47, 36, 49, > 41, 34, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 50, 37, 10, 45, > 105, 102, 32, 36, 52, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 45, 49, 93, 32, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, > 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, > 93, 32, 49, 32, 45, 94, 91, 45, 49, 93, 32, 123, 49, 47, 36, 52, > 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 98, 91, 45, 49, 93, 32, > 36, 51, 32, 45, 105, 91, 45, 51, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 52, 32, 45, 102, 99, 91, 45, 51, 93, 32, > 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, 32, 45, 98, 108, 101, > 110, 100, 95, 102, 97, 100, 101, 10, 45, 110, 109, 32, 36, 110, 109, 44, > 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, > 120, 32, 58, 32, 115, 105, 122, 101, 95, 120, 91, 37, 93, 62, 61, 48, > 44, 95, 99, 111, 108, 49, 44, 46, 46, 46, 44, 95, 99, 111, 108, 78, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 115, 101, 114, 116, > 32, 99, 111, 108, 111, 114, 101, 100, 32, 102, 114, 97, 109, 101, 32, 97, > 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 32, > 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, > 108, 49, 61, 99, 111, 108, 50, 61, 99, 111, 108, 51, 61, 50, 53, 53, > 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 52, 61, 50, 53, 53, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 102, 114, 97, 109, 101, 95, 120, 32, > 50, 48, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 10, 102, 114, 97, > 109, 101, 95, 120, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 49, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, > 50, 53, 53, 125, 44, 36, 123, 51, 61, 36, 50, 125, 44, 36, 123, 52, > 61, 36, 51, 125, 44, 36, 123, 53, 61, 50, 53, 53, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 73, 110, 115, 101, 114, 116, 32, 36, 49, > 32, 111, 117, 116, 101, 114, 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, > 101, 32, 120, 45, 97, 120, 105, 115, 44, 32, 119, 105, 116, 104, 32, 99, > 111, 108, 111, 114, 32, 40, 36, 123, 50, 45, 45, 49, 125, 41, 46, 34, > 10, 45, 95, 102, 114, 97, 109, 101, 32, 36, 49, 44, 48, 44, 48, 44, > 36, 123, 50, 45, 45, 49, 125, 10, 35, 64, 103, 109, 105, 99, 32, 102, > 114, 97, 109, 101, 95, 120, 121, 32, 58, 32, 115, 105, 122, 101, 95, 120, > 91, 37, 93, 62, 61, 48, 44, 95, 115, 105, 122, 101, 95, 121, 91, 37, > 93, 62, 61, 48, 44, 95, 99, 111, 108, 49, 44, 46, 46, 46, 44, 95, > 99, 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 115, 101, 114, 116, 32, 99, 111, 108, 111, 114, 101, 100, 32, 102, 114, 97, > 109, 101, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, > 120, 105, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 105, 122, 101, 95, 121, 61, 115, 105, 122, 101, 95, 120, 39, > 44, 32, 39, 99, 111, 108, 49, 61, 99, 111, 108, 50, 61, 99, 111, 108, > 51, 61, 50, 53, 53, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 52, > 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 114, 97, 109, 101, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 114, 97, 109, 101, 95, 120, > 121, 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, 109, 101, 95, 120, > 121, 32, 50, 48, 44, 49, 48, 44, 50, 53, 53, 44, 48, 44, 50, 53, > 53, 10, 102, 114, 97, 109, 101, 95, 120, 121, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 36, 49, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 51, 61, 50, 53, 53, 125, 44, 36, 123, 52, 61, 36, 51, 125, > 44, 36, 123, 53, 61, 36, 52, 125, 44, 36, 123, 54, 61, 50, 53, 53, > 125, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, > 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 123, 49, 45, 45, 49, > 125, 10, 95, 102, 114, 97, 109, 101, 95, 120, 121, 32, 58, 10, 45, 101, > 91, 48, 45, 45, 51, 93, 32, 34, 73, 110, 115, 101, 114, 116, 32, 36, > 49, 120, 36, 50, 32, 111, 117, 116, 101, 114, 32, 102, 114, 97, 109, 101, > 32, 105, 110, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 121, 45, 97, 120, 101, > 115, 44, 32, 119, 105, 116, 104, 32, 99, 111, 108, 111, 114, 32, 40, 36, > 123, 51, 45, 45, 49, 125, 41, 46, 34, 10, 45, 95, 102, 114, 97, 109, > 101, 32, 36, 49, 44, 36, 50, 44, 48, 44, 36, 123, 51, 45, 45, 49, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, 120, > 121, 122, 32, 58, 32, 115, 105, 122, 101, 95, 120, 91, 37, 93, 62, 61, > 48, 44, 95, 115, 105, 122, 101, 95, 121, 91, 37, 93, 62, 61, 48, 44, > 95, 115, 105, 122, 101, 95, 122, 91, 37, 93, 62, 61, 48, 95, 99, 111, > 108, 49, 44, 46, 46, 46, 44, 95, 99, 111, 108, 78, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 73, 110, 115, 101, 114, 116, 32, 99, 111, 108, > 111, 114, 101, 100, 32, 102, 114, 97, 109, 101, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 32, 105, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 121, > 61, 115, 105, 122, 101, 95, 120, 61, 115, 105, 122, 101, 95, 122, 39, 44, > 32, 39, 99, 111, 108, 49, 61, 99, 111, 108, 50, 61, 99, 111, 108, 51, > 61, 50, 53, 53, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 52, 61, > 50, 53, 53, 39, 46, 10, 102, 114, 97, 109, 101, 95, 120, 121, 122, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 51, 61, 36, 50, 125, 62, 61, 48, 34, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 52, 61, 50, 53, 53, 125, 44, 36, 123, 53, 61, > 36, 52, 125, 44, 36, 123, 54, 61, 36, 53, 125, 44, 36, 123, 55, 61, > 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 115, 101, 114, 116, 32, 36, 49, 120, 36, 50, 120, 36, 51, 32, 111, 117, > 116, 101, 114, 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, > 121, 122, 45, 97, 120, 101, 115, 44, 32, 119, 105, 116, 104, 32, 99, 111, > 108, 111, 114, 32, 40, 36, 123, 52, 45, 45, 49, 125, 41, 46, 34, 10, > 45, 95, 102, 114, 97, 109, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, > 44, 36, 123, 52, 45, 45, 49, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 114, 97, 109, 101, 95, 121, 32, 58, 32, 115, 105, 122, 101, 95, 121, > 91, 37, 93, 62, 61, 48, 44, 95, 99, 111, 108, 49, 44, 46, 46, 46, > 44, 95, 99, 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 110, 115, 101, 114, 116, 32, 99, 111, 108, 111, 114, 101, 100, 32, 102, > 114, 97, 109, 101, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, > 45, 97, 120, 105, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 99, 111, 108, 49, 61, 99, 111, 108, 50, 61, 99, 111, > 108, 51, 61, 50, 53, 53, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, > 52, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 114, > 97, 109, 101, 95, 121, 32, 50, 48, 44, 50, 53, 53, 44, 48, 44, 50, > 53, 53, 10, 102, 114, 97, 109, 101, 95, 121, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 50, 53, 53, 125, 44, 36, 123, 51, 61, 36, > 50, 125, 44, 36, 123, 52, 61, 36, 51, 125, 44, 36, 123, 53, 61, 50, > 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 115, > 101, 114, 116, 32, 36, 49, 32, 111, 117, 116, 101, 114, 32, 102, 114, 97, > 109, 101, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, 120, 105, 115, 44, 32, > 119, 105, 116, 104, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 50, 45, > 45, 49, 125, 41, 46, 34, 10, 45, 95, 102, 114, 97, 109, 101, 32, 48, > 44, 36, 49, 44, 48, 44, 36, 123, 50, 45, 45, 49, 125, 10, 95, 102, > 114, 97, 109, 101, 32, 58, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, > 123, 114, 111, 117, 110, 100, 40, 36, 49, 42, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, > 119, 44, 49, 41, 41, 125, 10, 104, 61, 123, 114, 111, 117, 110, 100, 40, > 36, 50, 42, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 50, 125, 44, 104, 44, 49, 41, 41, 125, 10, > 100, 61, 123, 114, 111, 117, 110, 100, 40, 36, 51, 42, 105, 102, 40, 64, > 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, > 125, 44, 100, 44, 49, 41, 41, 125, 10, 123, 119, 43, 50, 42, 36, 119, > 125, 44, 123, 104, 43, 50, 42, 36, 104, 125, 44, 123, 100, 43, 50, 42, > 36, 100, 125, 44, 49, 48, 48, 37, 32, 45, 102, 99, 91, 49, 93, 32, > 36, 123, 52, 45, 45, 49, 125, 10, 45, 106, 91, 49, 93, 32, 91, 48, > 93, 44, 36, 119, 44, 36, 104, 44, 36, 100, 32, 45, 114, 109, 91, 48, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 103, 50, 97, 115, > 99, 105, 105, 32, 58, 32, 95, 99, 104, 97, 114, 115, 101, 116, 44, 95, > 97, 110, 97, 108, 121, 115, 105, 115, 95, 115, 99, 97, 108, 101, 62, 48, > 44, 95, 97, 110, 97, 108, 121, 115, 105, 115, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, 95, 115, 121, 110, > 116, 104, 101, 115, 105, 115, 95, 115, 99, 97, 108, 101, 62, 48, 44, 95, > 111, 117, 116, 112, 117, 116, 95, 97, 115, 99, 105, 105, 95, 102, 105, 108, > 101, 110, 97, 109, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 110, 100, 101, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 97, 115, 32, 98, 105, 110, 97, 114, 121, 32, > 97, 115, 99, 105, 105, 32, 97, 114, 116, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 84, 104, 105, 115, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 114, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 111, 114, > 114, 101, 115, 112, 111, 110, 100, 105, 110, 103, 32, 116, 104, 101, 32, 108, > 105, 115, 116, 32, 111, 102, 32, 119, 105, 100, 116, 104, 115, 32, 97, 110, > 100, 32, 104, 101, 105, 103, 104, 116, 115, 32, 40, 101, 120, 112, 114, 101, > 115, 115, 101, 100, 32, 97, 115, 32, 97, 32, 110, 117, 109, 98, 101, 114, > 32, 111, 102, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 41, 32, > 102, 111, 114, 32, 101, 97, 99, 104, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 99, 104, 97, 114, 115, 101, 116, 61, 91, 97, 115, 99, 105, > 105, 32, 99, 104, 97, 114, 115, 101, 116, 93, 39, 44, 32, 39, 97, 110, > 97, 108, 121, 115, 105, 115, 95, 115, 99, 97, 108, 101, 61, 49, 54, 39, > 44, 32, 39, 97, 110, 97, 108, 121, 115, 105, 115, 95, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 61, 50, 48, 37, 39, 44, 32, 39, 115, 121, > 110, 116, 104, 101, 115, 105, 115, 95, 115, 99, 97, 108, 101, 61, 49, 54, > 39, 32, 97, 110, 100, 32, 39, 95, 111, 117, 116, 112, 117, 116, 95, 97, > 115, 99, 105, 105, 95, 102, 105, 108, 101, 110, 97, 109, 101, 61, 91, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 93, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 105, 109, 103, 50, 97, 115, 99, 105, 105, 32, 44, 32, 45, > 114, 91, 48, 93, 32, 91, 49, 93, 44, 91, 49, 93, 44, 49, 44, 51, > 32, 45, 45, 109, 117, 108, 10, 105, 109, 103, 50, 97, 115, 99, 105, 105, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 32, 33, > 92, 48, 52, 50, 92, 35, 36, 37, 38, 92, 48, 52, 55, 40, 41, 42, > 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, > 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, > 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, > 92, 49, 51, 51, 92, 92, 92, 49, 51, 53, 94, 95, 92, 49, 52, 48, > 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, > 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 92, 49, 55, 51, 124, 92, > 49, 55, 52, 126, 125, 34, 44, 34, 36, 123, 53, 61, 125, 34, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 49, 54, 125, 62, 48, > 32, 38, 38, 32, 36, 123, 51, 61, 50, 48, 37, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 52, 61, 49, 54, 125, 62, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 97, 115, 32, 98, 105, 110, 97, 114, 121, 32, > 97, 115, 99, 105, 105, 32, 97, 114, 116, 44, 32, 119, 105, 116, 104, 32, > 99, 104, 97, 114, 115, 101, 116, 32, 39, 36, 49, 39, 44, 32, 97, 110, > 97, 108, 121, 115, 105, 115, 32, 115, 99, 97, 108, 101, 32, 36, 50, 44, > 32, 97, 110, 97, 108, 121, 115, 105, 115, 32, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 32, 36, 51, 44, 32, 115, 121, 110, 116, 104, 101, 115, > 105, 115, 32, 115, 99, 97, 108, 101, 32, 36, 52, 32, 97, 110, 100, 32, > 111, 117, 116, 112, 117, 116, 32, 97, 115, 99, 105, 105, 32, 102, 105, 108, > 101, 110, 97, 109, 101, 32, 39, 36, 53, 39, 46, 34, 10, 45, 118, 32, > 45, 10, 105, 115, 95, 109, 117, 108, 116, 105, 61, 123, 64, 35, 62, 49, > 125, 10, 45, 108, 91, 93, 10, 40, 123, 39, 34, 36, 49, 34, 39, 125, > 41, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 10, 67, 61, > 123, 96, 57, 50, 96, 125, 64, 123, 45, 100, 101, 99, 50, 111, 99, 116, > 92, 32, 64, 123, 48, 44, 36, 62, 125, 125, 10, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 36, 67, 44, 48, 44, 48, 44, 36, 50, 44, 49, 44, > 49, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 67, 44, 48, 44, > 48, 44, 36, 52, 44, 49, 44, 49, 10, 45, 100, 111, 110, 101, 32, 45, > 114, 109, 91, 48, 93, 10, 45, 61, 32, 45, 49, 32, 45, 61, 32, 45, > 49, 44, 48, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 32, 45, 61, 32, 48, 32, 45, 61, 32, 48, 44, 48, 44, 49, > 48, 48, 37, 10, 45, 108, 91, 48, 45, 45, 50, 58, 50, 93, 32, 45, > 114, 32, 123, 64, 123, 45, 109, 97, 120, 95, 119, 125, 43, 49, 125, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, > 32, 45, 98, 32, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, > 45, 97, 32, 122, 32, 45, 101, 110, 100, 108, 10, 45, 108, 91, 49, 45, > 45, 49, 93, 32, 45, 114, 32, 123, 64, 123, 45, 109, 97, 120, 95, 119, > 125, 43, 49, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 46, 53, 32, 45, 97, 32, 122, 32, 45, 101, 110, 100, 108, > 10, 45, 101, 110, 100, 108, 10, 119, 61, 64, 123, 45, 50, 44, 119, 125, > 32, 104, 61, 64, 123, 45, 50, 44, 104, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 50, 125, 32, 45, 108, 91, 36, 62, 44, > 45, 50, 44, 45, 49, 93, 10, 45, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 91, 48, 93, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, > 10, 110, 119, 61, 64, 123, 48, 44, 114, 111, 117, 110, 100, 40, 119, 47, > 36, 119, 44, 49, 44, 49, 41, 125, 10, 110, 104, 61, 64, 123, 48, 44, > 114, 111, 117, 110, 100, 40, 104, 47, 36, 104, 44, 49, 44, 49, 41, 125, > 10, 45, 105, 102, 32, 36, 62, 32, 108, 105, 115, 116, 95, 119, 104, 61, > 36, 108, 105, 115, 116, 95, 119, 104, 44, 36, 110, 119, 44, 36, 110, 104, > 32, 45, 101, 108, 115, 101, 32, 108, 105, 115, 116, 95, 119, 104, 61, 36, > 110, 119, 44, 36, 110, 104, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, > 91, 48, 93, 32, 121, 44, 45, 36, 104, 32, 45, 115, 91, 48, 45, 45, > 51, 93, 32, 120, 44, 45, 36, 119, 32, 45, 114, 91, 48, 45, 45, 51, > 93, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 44, 48, 44, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 32, 45, > 108, 91, 36, 62, 44, 45, 50, 44, 45, 49, 93, 10, 45, 114, 112, 114, > 111, 103, 114, 101, 115, 115, 32, 123, 36, 62, 42, 49, 48, 48, 47, 40, > 64, 35, 45, 50, 41, 125, 10, 45, 114, 91, 48, 93, 32, 91, 49, 93, > 32, 45, 45, 91, 48, 93, 32, 91, 49, 93, 32, 45, 115, 113, 114, 91, > 48, 93, 32, 45, 114, 91, 48, 93, 32, 49, 44, 49, 44, 49, 48, 48, > 37, 44, 49, 44, 50, 32, 45, 121, 91, 48, 93, 10, 67, 61, 64, 123, > 48, 44, 121, 109, 125, 32, 45, 114, 109, 91, 48, 93, 10, 45, 45, 115, > 108, 105, 99, 101, 115, 91, 49, 93, 32, 36, 67, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, > 34, 36, 53, 34, 41, 125, 32, 45, 45, 102, 91, 48, 93, 32, 36, 67, > 32, 45, 97, 91, 48, 44, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 91, 48, 45, 45, > 50, 93, 32, 36, 110, 119, 44, 36, 110, 104, 10, 45, 105, 102, 32, 123, > 110, 97, 114, 103, 40, 34, 36, 53, 34, 41, 125, 32, 45, 115, 91, 48, > 93, 32, 99, 32, 45, 108, 91, 49, 93, 10, 45, 114, 32, 36, 110, 119, > 44, 36, 110, 104, 44, 49, 44, 49, 44, 49, 10, 40, 123, 39, 34, 36, > 49, 34, 39, 125, 41, 32, 45, 109, 97, 112, 91, 48, 93, 32, 91, 45, > 49, 93, 32, 45, 107, 91, 48, 93, 10, 45, 115, 32, 121, 32, 45, 105, > 91, 49, 45, 64, 35, 93, 32, 40, 123, 39, 92, 110, 39, 125, 41, 10, > 45, 97, 32, 120, 10, 45, 105, 102, 32, 36, 105, 115, 95, 109, 117, 108, > 116, 105, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 102, > 105, 108, 101, 110, 97, 109, 101, 92, 32, 34, 36, 53, 34, 44, 36, 62, > 125, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 61, 34, 36, 53, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 111, 32, > 114, 97, 119, 58, 36, 102, 105, 108, 101, 110, 97, 109, 101, 44, 99, 104, > 97, 114, 32, 45, 114, 109, 10, 45, 101, 110, 100, 108, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 117, 32, 36, 108, > 105, 115, 116, 95, 119, 104, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 109, 97, 103, 101, 103, 114, 105, 100, 32, 58, 32, 77, > 62, 48, 44, 95, 78, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 114, 101, 97, 116, 101, 32, 77, 120, 78, 32, 105, 109, 97, 103, > 101, 32, 103, 114, 105, 100, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 78, 61, 77, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 105, 109, 97, 103, 101, 103, 114, 105, 100, 32, 49, 54, 10, 105, > 109, 97, 103, 101, 103, 114, 105, 100, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 36, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 114, 101, 97, 116, 101, 32, 36, 49, 120, 36, 50, 32, 105, > 109, 97, 103, 101, 32, 103, 114, 105, 100, 32, 102, 114, 111, 109, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 40, 123, 119, 125, 44, 123, 104, 125, 41, 32, 40, 36, 49, 44, 36, 50, > 41, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 50, 93, 32, > 64, 45, 49, 44, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 50, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 40, 123, 119, 125, 44, 123, 104, 125, > 41, 32, 40, 36, 49, 44, 36, 50, 41, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 114, 91, 45, 50, 93, 32, 64, 45, 49, 44, 91, > 45, 50, 93, 44, 91, 45, 50, 93, 44, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 36, 49, 44, 36, 50, 44, 49, 44, 91, 45, 49, 93, 44, > 49, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 49, 44, 49, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, > 32, 45, 42, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, 110, 101, > 97, 114, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 58, 32, 77, 62, > 48, 44, 95, 78, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 76, 105, 110, 101, 97, 114, 105, 122, 101, 32, 77, 120, 78, 32, 116, 105, > 108, 101, 115, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 78, 61, 77, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 108, 105, > 110, 101, 97, 114, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 49, 54, > 10, 108, 105, 110, 101, 97, 114, 105, 122, 101, 95, 116, 105, 108, 101, 115, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 76, 105, 110, 101, 97, 114, 105, 122, 101, > 32, 36, 49, 120, 36, 50, 32, 116, 105, 108, 101, 115, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 115, 61, 123, 115, 125, > 32, 45, 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, 49, > 44, 36, 50, 32, 45, 115, 32, 99, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 104, 61, 123, 119, > 125, 44, 123, 104, 125, 10, 45, 45, 102, 32, 120, 32, 45, 45, 102, 91, > 45, 49, 93, 32, 121, 32, 45, 45, 102, 91, 45, 49, 93, 32, 49, 32, > 45, 121, 32, 45, 97, 91, 94, 48, 93, 32, 120, 32, 45, 115, 111, 108, > 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 36, 119, 104, 44, 49, 44, 49, 44, 64, 123, 45, 49, > 44, 48, 125, 34, 42, 120, 32, 43, 32, 34, 64, 123, 45, 49, 44, 49, > 125, 34, 42, 121, 32, 43, 32, 34, 64, 123, 45, 49, 44, 50, 125, 32, > 45, 114, 109, 91, 45, 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, > 40, 64, 35, 47, 36, 115, 41, 125, 32, 45, 97, 91, 45, 36, 115, 45, > 45, 49, 93, 32, 99, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, > 45, 100, 111, 110, 101, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, > 108, 101, 115, 32, 36, 49, 44, 36, 50, 10, 45, 110, 109, 32, 36, 110, > 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 112, 95, > 115, 112, 114, 105, 116, 101, 115, 32, 58, 32, 95, 110, 98, 95, 115, 112, > 114, 105, 116, 101, 115, 62, 61, 49, 44, 95, 97, 108, 108, 111, 119, 95, > 114, 111, 116, 97, 116, 105, 111, 110, 61, 123, 32, 48, 61, 110, 111, 110, > 101, 32, 124, 32, 49, 61, 57, 48, 32, 100, 101, 103, 46, 32, 124, 32, > 50, 61, 49, 56, 48, 32, 100, 101, 103, 46, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 77, 97, 112, 32, 115, 101, 116, 32, 111, 102, > 32, 115, 112, 114, 105, 116, 101, 115, 32, 40, 100, 101, 102, 105, 110, 101, > 100, 32, 97, 115, 32, 116, 104, 101, 32, 39, 110, 98, 95, 115, 112, 114, > 105, 116, 101, 115, 39, 32, 108, 97, 116, 101, 115, 116, 32, 105, 109, 97, > 103, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, > 116, 105, 111, 110, 41, 32, 116, 111, 32, 111, 116, 104, 101, 114, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 97, 99, 99, 111, 114, 100, 105, > 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 108, 117, 109, 105, 110, 111, > 115, 105, 116, 121, 32, 111, 102, 32, 116, 104, 101, 105, 114, 32, 112, 105, > 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 50, 100, 121, 32, 52, 56, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 49, 54, 32, 45, 98, 97, 108, 108, 32, 123, 56, 43, 50, 42, > 36, 62, 125, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 42, 91, 45, > 49, 93, 32, 123, 40, 49, 43, 36, 62, 41, 47, 49, 54, 125, 32, 45, > 100, 111, 110, 101, 32, 45, 109, 97, 112, 95, 115, 112, 114, 105, 116, 101, > 115, 32, 49, 54, 10, 109, 97, 112, 95, 115, 112, 114, 105, 116, 101, 115, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, > 40, 36, 49, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, 38, 38, 32, > 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 48, 125, 41, 32, 38, 38, > 32, 36, 50, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 50, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 77, 97, 112, 32, 115, 101, > 116, 32, 111, 102, 32, 36, 49, 32, 115, 112, 114, 105, 116, 101, 115, 32, > 116, 111, 32, 105, 109, 97, 103, 101, 32, 115, 101, 108, 101, 99, 116, 105, > 111, 110, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, 114, > 109, 91, 48, 45, 45, 123, 36, 49, 43, 49, 125, 93, 32, 45, 113, 117, > 97, 110, 116, 105, 122, 101, 91, 48, 45, 45, 123, 36, 49, 43, 49, 125, > 93, 32, 36, 49, 44, 48, 44, 49, 10, 45, 115, 108, 105, 99, 101, 115, > 91, 45, 36, 49, 45, 45, 49, 93, 32, 48, 32, 45, 114, 91, 45, 36, > 49, 45, 45, 49, 93, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, 91, > 45, 36, 49, 45, 45, 49, 93, 125, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 102, 32, > 123, 36, 50, 61, 61, 49, 125, 10, 78, 61, 123, 52, 42, 36, 49, 125, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 36, 49, 125, > 32, 45, 42, 91, 36, 62, 93, 32, 52, 32, 45, 45, 114, 97, 110, 100, > 91, 36, 62, 93, 32, 48, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, > 45, 49, 93, 32, 45, 43, 91, 36, 62, 44, 45, 49, 93, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, > 108, 91, 123, 49, 43, 36, 60, 125, 93, 32, 45, 45, 109, 105, 114, 114, > 111, 114, 32, 120, 121, 32, 45, 45, 114, 111, 116, 97, 116, 101, 32, 57, > 48, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 50, 61, 61, 50, 125, 10, 78, 61, 123, 50, > 42, 36, 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, > 45, 36, 49, 125, 32, 45, 42, 91, 36, 62, 93, 32, 50, 32, 45, 45, > 114, 97, 110, 100, 91, 36, 62, 93, 32, 48, 44, 49, 32, 45, 114, 111, > 117, 110, 100, 91, 45, 49, 93, 32, 45, 43, 91, 36, 62, 44, 45, 49, > 93, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 32, 45, 108, 91, 123, 49, 43, 36, 60, 125, 93, 32, 45, 45, > 109, 105, 114, 114, 111, 114, 32, 120, 121, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 78, 61, 36, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, 45, 36, 78, 45, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 64, > 123, 45, 109, 97, 120, 95, 115, 91, 45, 36, 78, 45, 45, 49, 93, 125, > 32, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 97, 91, > 45, 36, 78, 45, 45, 49, 93, 32, 120, 10, 45, 114, 91, 94, 45, 49, > 93, 32, 36, 123, 119, 125, 48, 48, 37, 44, 36, 123, 104, 125, 48, 48, > 37, 44, 49, 44, 49, 32, 45, 42, 91, 94, 45, 49, 93, 32, 36, 119, > 10, 40, 48, 44, 123, 36, 119, 45, 49, 125, 59, 48, 44, 123, 36, 119, > 45, 49, 125, 94, 48, 44, 48, 59, 123, 36, 104, 45, 49, 125, 44, 123, > 36, 104, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, > 44, 36, 104, 44, 49, 44, 50, 44, 51, 32, 45, 114, 111, 117, 110, 100, > 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, > 45, 50, 125, 32, 45, 45, 114, 91, 45, 49, 93, 32, 91, 36, 62, 93, > 44, 91, 36, 62, 93, 44, 49, 44, 50, 44, 48, 44, 50, 32, 45, 114, > 91, 36, 62, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 50, 44, 48, 32, 45, 43, 91, 36, 62, 44, 45, 49, 93, 32, 45, > 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 36, 62, 93, 44, 48, > 44, 48, 32, 45, 114, 118, 91, 36, 62, 44, 45, 49, 93, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 117, 122, 122, 108, 101, 32, 58, 32, 95, 119, 105, 100, > 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, > 77, 62, 61, 49, 44, 95, 78, 62, 61, 49, 44, 95, 99, 117, 114, 118, > 97, 116, 117, 114, 101, 44, 95, 99, 101, 110, 116, 101, 114, 105, 110, 103, > 44, 95, 99, 111, 110, 110, 101, 99, 116, 111, 114, 115, 95, 118, 97, 114, > 105, 97, 98, 105, 108, 105, 116, 121, 44, 95, 114, 101, 115, 111, 108, 117, > 116, 105, 111, 110, 62, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 110, 112, 117, 116, 32, 112, 117, 122, 122, 108, 101, 32, 98, 105, > 110, 97, 114, 121, 32, 109, 97, 115, 107, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, 32, 97, 110, > 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 119, 105, 100, 116, 104, 61, 104, 101, 105, 103, > 104, 116, 61, 53, 49, 50, 39, 44, 32, 39, 77, 61, 78, 61, 53, 39, > 44, 32, 39, 99, 117, 114, 118, 97, 116, 117, 114, 101, 61, 48, 46, 53, > 39, 44, 32, 39, 99, 101, 110, 116, 101, 114, 105, 110, 103, 61, 48, 46, > 53, 39, 44, 32, 39, 99, 111, 110, 110, 101, 99, 116, 111, 114, 115, 95, > 118, 97, 114, 105, 97, 98, 105, 108, 105, 116, 121, 61, 48, 46, 53, 39, > 32, 97, 110, 100, 32, 39, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, > 61, 54, 52, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 112, 117, 122, 122, 108, 101, 32, 44, 10, 112, 117, 122, 122, 108, > 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, > 116, 40, 36, 123, 49, 61, 53, 49, 50, 125, 41, 32, 38, 38, 32, 36, > 49, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, > 61, 36, 49, 125, 41, 32, 38, 38, 32, 36, 50, 62, 48, 32, 38, 38, > 32, 105, 115, 105, 110, 116, 40, 36, 123, 51, 61, 53, 125, 41, 32, 38, > 38, 32, 36, 51, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, > 36, 123, 52, 61, 36, 51, 125, 41, 32, 38, 38, 32, 36, 52, 62, 48, > 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 56, 61, 54, 52, > 125, 41, 32, 38, 38, 32, 36, 56, 62, 48, 34, 10, 45, 115, 107, 105, > 112, 32, 36, 123, 53, 61, 48, 46, 53, 125, 44, 36, 123, 54, 61, 48, > 46, 53, 125, 44, 36, 123, 55, 61, 48, 46, 53, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 36, 51, 120, 36, 52, > 32, 112, 117, 122, 122, 108, 101, 32, 112, 97, 116, 116, 101, 114, 110, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 99, 117, 114, 118, 97, 116, 117, 114, 101, 32, 36, 53, 44, 32, 99, > 101, 110, 116, 101, 114, 105, 110, 103, 32, 36, 54, 44, 32, 99, 111, 110, > 110, 101, 99, 116, 111, 114, 115, 32, 118, 97, 114, 105, 97, 98, 105, 108, > 105, 116, 121, 32, 36, 55, 32, 97, 110, 100, 32, 114, 101, 115, 111, 108, > 117, 116, 105, 111, 110, 32, 36, 56, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 108, 91, 93, 10, 45, 105, 102, 32, 123, 36, 52, 62, 61, 50, 125, > 32, 45, 95, 112, 117, 122, 122, 108, 101, 91, 93, 32, 36, 51, 44, 123, > 36, 52, 45, 49, 125, 44, 36, 123, 53, 45, 56, 125, 32, 45, 43, 51, > 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 51, 62, 61, 50, 125, 32, 45, 95, 112, > 117, 122, 122, 108, 101, 91, 93, 32, 36, 52, 44, 123, 36, 51, 45, 49, > 125, 44, 36, 123, 53, 45, 56, 125, 32, 45, 114, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 49, 44, 57, 48, 32, 45, 43, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 36, 52, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 42, 51, 100, 32, 123, 36, 49, 47, 36, 51, 125, 44, 123, 36, 50, > 47, 36, 52, 125, 32, 45, 113, 117, 97, 100, 114, 97, 110, 103, 108, 101, > 51, 100, 32, 48, 44, 48, 44, 48, 44, 123, 36, 49, 45, 49, 125, 44, > 48, 44, 48, 44, 123, 36, 49, 45, 49, 125, 44, 123, 36, 50, 45, 49, > 125, 44, 48, 44, 48, 44, 123, 36, 50, 45, 49, 125, 44, 48, 32, 45, > 112, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 43, 51, 100, 32, 45, > 99, 111, 108, 51, 100, 32, 49, 10, 36, 49, 44, 36, 50, 32, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 44, 48, 44, 48, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, > 43, 10, 95, 112, 117, 122, 122, 108, 101, 32, 58, 10, 82, 61, 123, 36, > 54, 42, 36, 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, > 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 44, 36, 82, 44, > 123, 36, 82, 45, 49, 125, 41, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 10, 115, 105, 103, 110, 61, 123, 105, 102, 40, 63, 60, 61, 48, > 46, 53, 44, 45, 49, 44, 49, 41, 125, 10, 99, 101, 110, 116, 101, 114, > 61, 123, 36, 52, 42, 63, 40, 45, 48, 46, 50, 53, 44, 48, 46, 50, > 53, 41, 125, 10, 107, 110, 111, 98, 61, 123, 36, 53, 42, 63, 40, 45, > 48, 46, 48, 53, 44, 48, 46, 49, 50, 41, 125, 10, 40, 36, 62, 44, > 48, 59, 92, 10, 123, 48, 46, 50, 43, 36, 99, 101, 110, 116, 101, 114, > 43, 36, 62, 125, 44, 123, 45, 36, 115, 105, 103, 110, 42, 36, 51, 42, > 48, 46, 49, 125, 59, 92, 10, 123, 48, 46, 52, 43, 36, 99, 101, 110, > 116, 101, 114, 43, 36, 62, 125, 44, 48, 59, 92, 10, 123, 48, 46, 51, > 53, 43, 36, 99, 101, 110, 116, 101, 114, 43, 36, 62, 125, 44, 123, 48, > 46, 49, 42, 36, 115, 105, 103, 110, 125, 59, 92, 10, 123, 48, 46, 52, > 53, 43, 36, 99, 101, 110, 116, 101, 114, 43, 36, 62, 125, 44, 123, 40, > 48, 46, 49, 53, 43, 36, 107, 110, 111, 98, 41, 42, 36, 115, 105, 103, > 110, 125, 59, 92, 10, 123, 48, 46, 53, 53, 43, 36, 99, 101, 110, 116, > 101, 114, 43, 36, 62, 125, 44, 123, 40, 48, 46, 49, 53, 43, 36, 107, > 110, 111, 98, 41, 42, 36, 115, 105, 103, 110, 125, 59, 92, 10, 123, 48, > 46, 54, 53, 43, 36, 99, 101, 110, 116, 101, 114, 43, 36, 62, 125, 44, > 123, 48, 46, 49, 42, 36, 115, 105, 103, 110, 125, 59, 92, 10, 123, 48, > 46, 54, 43, 36, 99, 101, 110, 116, 101, 114, 43, 36, 62, 125, 44, 48, > 59, 92, 10, 123, 48, 46, 56, 43, 36, 99, 101, 110, 116, 101, 114, 43, > 36, 62, 125, 44, 123, 45, 36, 115, 105, 103, 110, 42, 36, 51, 42, 48, > 46, 49, 125, 41, 10, 45, 100, 111, 110, 101, 10, 40, 36, 49, 44, 48, > 41, 32, 45, 97, 91, 45, 123, 36, 49, 43, 49, 125, 45, 45, 49, 93, > 32, 121, 32, 45, 114, 91, 45, 49, 93, 32, 50, 44, 36, 82, 44, 49, > 44, 49, 44, 53, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 10, > 40, 50, 44, 48, 44, 49, 59, 50, 44, 123, 36, 82, 45, 50, 125, 44, > 123, 36, 82, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 51, > 44, 123, 36, 82, 45, 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, > 111, 117, 110, 100, 91, 45, 49, 93, 10, 51, 44, 123, 104, 125, 44, 49, > 44, 49, 44, 50, 53, 53, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, > 44, 50, 53, 53, 32, 45, 121, 91, 45, 53, 45, 45, 49, 93, 32, 121, > 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, 121, 32, 45, 43, 51, > 100, 91, 45, 49, 93, 32, 48, 44, 36, 62, 10, 45, 100, 111, 110, 101, > 32, 45, 43, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 113, 117, 97, > 100, 114, 97, 116, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 58, 32, > 77, 62, 48, 44, 95, 78, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 81, 117, 97, 100, 114, 97, 116, 105, 122, 101, 32, 77, 120, 78, > 32, 116, 105, 108, 101, 115, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 78, 61, 77, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 113, 117, 97, 100, 114, 97, 116, 105, 122, 101, 95, 116, 105, 108, 101, > 115, 32, 49, 54, 10, 113, 117, 97, 100, 114, 97, 116, 105, 122, 101, 95, > 116, 105, 108, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, > 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 81, 117, 97, 100, > 114, 97, 116, 105, 122, 101, 32, 36, 49, 120, 36, 50, 32, 116, 105, 108, > 101, 115, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, > 10, 115, 61, 123, 115, 125, 32, 45, 115, 112, 108, 105, 116, 95, 116, 105, > 108, 101, 115, 32, 36, 49, 44, 36, 50, 32, 45, 115, 32, 99, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 10, 45, 45, 102, 32, > 120, 94, 50, 32, 45, 45, 102, 91, 45, 49, 93, 32, 121, 94, 50, 32, > 45, 45, 102, 91, 45, 49, 93, 32, 120, 42, 121, 32, 45, 45, 102, 91, > 45, 49, 93, 32, 120, 32, 45, 45, 102, 91, 45, 49, 93, 32, 121, 32, > 45, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 121, 32, 45, 97, 91, > 94, 48, 93, 32, 120, 10, 45, 115, 111, 108, 118, 101, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 36, 119, > 104, 44, 49, 44, 49, 44, 64, 123, 45, 49, 44, 48, 125, 34, 42, 120, > 94, 50, 32, 43, 32, 34, 64, 123, 45, 49, 44, 49, 125, 34, 42, 121, > 94, 50, 32, 43, 32, 34, 64, 123, 45, 49, 44, 50, 125, 34, 42, 120, > 42, 121, 32, 43, 34, 64, 123, 45, 49, 44, 51, 125, 34, 42, 120, 32, > 43, 32, 34, 64, 123, 45, 49, 44, 52, 125, 34, 42, 121, 32, 43, 32, > 34, 64, 123, 45, 49, 44, 53, 125, 32, 45, 114, 109, 91, 45, 50, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 115, 41, > 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, 93, 32, 99, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, 45, > 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, > 36, 50, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 111, 116, 97, 116, 101, 95, 116, 105, 108, 101, > 115, 32, 58, 32, 97, 110, 103, 108, 101, 44, 95, 77, 62, 48, 44, 78, > 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 77, 120, 78, 32, 116, 105, 108, 101, 100, 45, 114, 111, 116, 97, > 116, 105, 111, 110, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 77, 61, 56, 39, 32, 97, > 110, 100, 32, 39, 78, 61, 77, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 111, 116, 97, 116, 101, 95, > 116, 105, 108, 101, 115, 32, 49, 48, 44, 56, 32, 45, 100, 114, 111, 112, > 95, 115, 104, 97, 100, 111, 119, 32, 49, 48, 44, 49, 48, 32, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, 10, 114, 111, 116, 97, > 116, 101, 95, 116, 105, 108, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 56, 125, 44, 36, 123, 51, 61, 36, 50, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 36, > 50, 120, 36, 51, 32, 116, 105, 108, 101, 100, 45, 114, 111, 116, 97, 116, > 105, 111, 110, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, > 101, 32, 36, 49, 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, 50, 44, > 36, 51, 44, 49, 32, 45, 114, 111, 116, 97, 116, 101, 32, 36, 49, 32, > 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 36, 50, > 44, 36, 51, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 104, 105, 102, 116, 95, 116, 105, 108, 101, 115, 32, 58, 32, 77, 62, > 48, 44, 95, 78, 62, 48, 44, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, > 32, 77, 120, 78, 32, 116, 105, 108, 101, 100, 45, 115, 104, 105, 102, 116, > 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 78, 61, 77, 39, 32, 97, 110, 100, 32, 39, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 50, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 115, 104, 105, 102, 116, 95, 116, 105, 108, 101, > 115, 32, 56, 44, 56, 44, 49, 48, 10, 115, 104, 105, 102, 116, 95, 116, > 105, 108, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 123, 50, 61, 36, 49, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 51, 61, 50, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 65, 112, 112, 108, 121, 32, 36, 49, 120, 36, 50, 32, 116, 105, > 108, 101, 100, 45, 115, 104, 105, 102, 116, 32, 101, 102, 102, 101, 99, 116, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 51, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 36, 49, 44, 36, 50, 44, 49, 44, > 50, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 36, 51, 32, > 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, > 44, 49, 44, 50, 32, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 49, 44, 48, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 97, 113, 117, 105, 110, > 32, 58, 32, 77, 62, 48, 44, 95, 78, 62, 48, 44, 95, 114, 101, 109, > 111, 118, 101, 95, 116, 105, 108, 101, 61, 123, 32, 48, 61, 110, 111, 110, > 101, 32, 124, 32, 49, 61, 102, 105, 114, 115, 116, 32, 124, 32, 50, 61, > 108, 97, 115, 116, 32, 124, 32, 51, 61, 114, 97, 110, 100, 111, 109, 32, > 125, 44, 95, 114, 101, 108, 105, 101, 102, 44, 95, 98, 111, 114, 100, 101, > 114, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 91, 37, 93, 44, 95, > 98, 111, 114, 100, 101, 114, 95, 111, 117, 116, 108, 105, 110, 101, 91, 37, > 93, 44, 95, 111, 117, 116, 108, 105, 110, 101, 95, 99, 111, 108, 111, 114, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, > 32, 77, 120, 78, 32, 116, 97, 113, 117, 105, 110, 32, 112, 117, 122, 122, > 108, 101, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 78, 61, 77, 39, 44, 32, 39, 114, 101, 108, 105, 101, 102, 61, > 53, 48, 39, 44, 32, 39, 98, 111, 114, 100, 101, 114, 95, 116, 104, 105, > 99, 107, 110, 101, 115, 115, 61, 53, 39, 44, 32, 39, 98, 111, 114, 100, > 101, 114, 95, 111, 117, 116, 108, 105, 110, 101, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 114, 101, 109, 111, 118, 101, 95, 116, 105, 108, 101, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, 97, 113, 117, 105, 110, > 32, 56, 10, 116, 97, 113, 117, 105, 110, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 49, 41, 32, 38, 38, > 32, 36, 49, 62, 48, 32, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, > 50, 61, 36, 49, 125, 41, 32, 38, 38, 32, 36, 50, 62, 48, 34, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, > 61, 53, 48, 125, 44, 36, 123, 53, 61, 53, 37, 125, 44, 36, 123, 54, > 61, 48, 125, 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, 36, > 55, 125, 44, 36, 123, 57, 61, 36, 56, 125, 44, 36, 123, 49, 48, 61, > 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, > 101, 97, 116, 101, 32, 36, 49, 120, 36, 50, 32, 116, 97, 113, 117, 105, > 110, 32, 112, 117, 122, 122, 108, 101, 32, 102, 114, 111, 109, 32, 105, 109, > 97, 103, 101, 32, 36, 63, 44, 32, 119, 105, 116, 104, 32, 114, 101, 108, > 105, 101, 102, 32, 36, 52, 44, 32, 98, 111, 114, 100, 101, 114, 32, 116, > 104, 105, 99, 107, 110, 101, 115, 115, 32, 36, 53, 44, 32, 98, 111, 114, > 100, 101, 114, 32, 111, 117, 116, 108, 105, 110, 101, 32, 36, 54, 32, 97, > 110, 100, 32, 111, 117, 116, 108, 105, 110, 101, 32, 99, 111, 108, 111, 114, > 32, 40, 36, 123, 55, 45, 45, 49, 125, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 115, > 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, > 32, 45, 114, 32, 64, 123, 45, 109, 105, 110, 95, 119, 104, 125, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 10, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 10, 45, 105, 102, 32, 64, > 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 53, > 34, 125, 32, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, > 93, 32, 123, 49, 48, 48, 42, 36, 53, 47, 50, 125, 37, 44, 123, 49, > 48, 48, 42, 36, 53, 47, 50, 125, 37, 44, 123, 49, 48, 48, 45, 53, > 48, 42, 36, 53, 125, 37, 44, 123, 49, 48, 48, 45, 53, 48, 42, 36, > 53, 125, 37, 44, 49, 44, 48, 10, 45, 101, 108, 115, 101, 32, 45, 114, > 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 36, 53, 44, > 36, 53, 44, 123, 119, 45, 49, 45, 36, 53, 125, 44, 123, 104, 45, 49, > 45, 36, 53, 125, 44, 49, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 42, 91, 45, 49, 93, 32, 39, 49, 45, 50, 42, 40, 120, 60, 121, > 41, 39, 32, 45, 42, 91, 45, 49, 93, 32, 36, 52, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, > 62, 44, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 91, 48, 93, 32, 45, 43, 91, 48, 93, 32, 91, 45, > 49, 93, 32, 45, 97, 91, 94, 45, 49, 93, 32, 99, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 102, 114, 97, 109, 101, > 32, 36, 54, 44, 36, 54, 44, 36, 123, 55, 45, 49, 48, 125, 10, 45, > 105, 102, 32, 123, 36, 51, 61, 61, 51, 125, 32, 45, 102, 91, 45, 49, > 93, 32, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 109, 118, 91, 36, 62, 93, 32, 123, 63, > 40, 64, 35, 41, 125, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, > 123, 36, 51, 61, 61, 49, 125, 32, 45, 102, 91, 48, 93, 32, 48, 32, > 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 50, 125, 32, 45, 102, > 91, 45, 49, 93, 32, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, > 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, > 50, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 116, 117, 110, 110, 101, 108, 32, 58, 32, 95, 108, 101, > 118, 101, 108, 62, 61, 48, 44, 95, 102, 97, 99, 116, 111, 114, 62, 48, > 44, 95, 99, 120, 44, 95, 99, 121, 44, 95, 111, 112, 97, 99, 105, 116, > 121, 44, 95, 97, 110, 103, 108, 101, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 116, 117, 110, 110, 101, 108, 32, 101, > 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 108, 101, 118, 101, 108, 61, 57, 39, 44, 32, 39, 102, > 97, 99, 116, 111, 114, 61, 56, 48, 37, 39, 44, 32, 39, 99, 120, 61, > 99, 121, 61, 48, 46, 53, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, > 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 97, 110, 103, 108, 101, 61, > 48, 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, 117, 110, 110, 101, 108, > 32, 50, 48, 10, 116, 117, 110, 110, 101, 108, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 57, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 56, 48, 37, 125, 62, 48, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 51, 61, 48, 46, 53, 125, 44, 36, 123, 52, > 61, 48, 46, 53, 125, 44, 36, 123, 53, 61, 48, 46, 49, 125, 44, 36, > 123, 54, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 116, 117, 110, 110, 101, 108, 32, 101, 102, 102, 101, > 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 100, 101, 112, 116, 104, 32, 36, 49, 44, 32, 102, 97, > 99, 116, 111, 114, 32, 36, 50, 44, 32, 99, 101, 110, 116, 101, 114, 105, > 110, 103, 32, 40, 36, 51, 44, 36, 52, 41, 44, 32, 111, 112, 97, 99, > 105, 116, 121, 32, 36, 53, 32, 97, 110, 100, 32, 97, 110, 103, 108, 101, > 32, 36, 54, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 49, 32, 45, 45, 114, 91, 45, 49, 93, 32, > 36, 50, 44, 36, 50, 44, 49, 44, 49, 48, 48, 37, 44, 53, 10, 45, > 105, 102, 32, 36, 54, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 49, 44, 49, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 50, > 44, 45, 49, 93, 32, 36, 54, 44, 49, 44, 48, 32, 45, 101, 114, 111, > 100, 101, 91, 45, 49, 93, 32, 51, 32, 45, 106, 91, 45, 51, 93, 32, > 91, 45, 50, 93, 44, 123, 40, 64, 123, 45, 51, 44, 119, 125, 45, 119, > 41, 42, 36, 51, 125, 44, 123, 40, 64, 123, 45, 51, 44, 104, 125, 45, > 104, 41, 42, 36, 52, 125, 44, 48, 44, 48, 44, 36, 53, 44, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, > 108, 115, 101, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 123, 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 42, 36, 51, 125, > 44, 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 104, 41, 42, 36, 52, > 125, 44, 48, 44, 48, 44, 36, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, 50, > 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 58, 32, 65, 114, 116, 105, 115, 116, 105, 99, 10, 35, 64, 103, 109, 105, > 99, 32, 98, 111, 120, 102, 105, 116, 116, 105, 110, 103, 32, 58, 32, 95, > 109, 105, 110, 95, 98, 111, 120, 95, 115, 105, 122, 101, 62, 61, 49, 44, > 95, 109, 97, 120, 95, 98, 111, 120, 95, 115, 105, 122, 101, 62, 61, 48, > 44, 95, 105, 110, 105, 116, 105, 97, 108, 95, 100, 101, 110, 115, 105, 116, > 121, 62, 61, 48, 44, 95, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, > 115, 62, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 98, 111, 120, 32, 102, 105, 116, 116, 105, 110, 103, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 97, 115, 32, 100, 105, > 115, 112, 108, 97, 121, 101, 100, 32, 116, 104, 101, 32, 119, 101, 98, 32, > 112, 97, 103, 101, 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 91, > 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 99, 111, 109, 112, 108, > 101, 120, 105, 102, 105, 99, 97, 116, 105, 111, 110, 46, 110, 101, 116, 47, > 103, 97, 108, 108, 101, 114, 121, 47, 109, 97, 99, 104, 105, 110, 101, 115, > 47, 98, 111, 120, 70, 105, 116, 116, 105, 110, 103, 73, 109, 103, 47, 93, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 109, 105, 110, 95, 98, > 111, 120, 95, 115, 105, 122, 101, 61, 49, 39, 44, 32, 39, 109, 97, 120, > 95, 98, 111, 120, 95, 115, 105, 122, 101, 61, 48, 39, 44, 32, 39, 105, > 110, 105, 116, 105, 97, 108, 95, 100, 101, 110, 115, 105, 116, 121, 61, 48, > 46, 49, 39, 32, 97, 110, 100, 32, 39, 110, 98, 95, 116, 114, 105, 101, > 115, 61, 51, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 111, 120, > 102, 105, 116, 116, 105, 110, 103, 32, 44, 10, 98, 111, 120, 102, 105, 116, > 116, 105, 110, 103, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, > 115, 105, 110, 116, 40, 36, 123, 49, 61, 51, 125, 41, 32, 38, 38, 32, > 36, 49, 62, 61, 49, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, > 123, 50, 61, 48, 125, 41, 32, 38, 38, 32, 36, 50, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 51, 61, 48, 46, 49, 125, 62, 61, 48, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 52, 61, 51, 125, 41, 32, > 38, 38, 32, 36, 52, 62, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 98, 111, 120, 32, 102, 105, 116, > 116, 105, 110, 103, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 98, 111, 120, > 32, 115, 105, 122, 101, 115, 32, 40, 36, 49, 44, 36, 50, 41, 44, 32, > 100, 101, 110, 115, 105, 116, 121, 32, 36, 51, 32, 97, 110, 100, 32, 36, > 52, 32, 97, 116, 116, 101, 109, 112, 116, 115, 46, 34, 10, 45, 118, 32, > 45, 10, 109, 105, 110, 95, 115, 105, 122, 101, 61, 36, 49, 10, 109, 97, > 120, 95, 115, 105, 122, 101, 61, 123, 105, 102, 40, 36, 50, 44, 36, 50, > 44, 109, 97, 120, 40, 119, 44, 104, 41, 41, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, 98, > 95, 97, 116, 116, 101, 109, 112, 116, 115, 61, 48, 32, 112, 114, 101, 99, > 61, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 49, 101, 56, 10, 45, 105, 102, 32, 123, 36, 62, > 60, 49, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, > 111, 105, 115, 101, 91, 45, 49, 93, 32, 123, 109, 97, 120, 40, 49, 101, > 45, 51, 44, 36, 51, 41, 125, 44, 50, 10, 45, 101, 108, 115, 101, 10, > 45, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, > 32, 45, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 109, 97, 120, 95, 112, > 97, 116, 99, 104, 91, 45, 49, 93, 32, 123, 114, 111, 117, 110, 100, 40, > 36, 112, 114, 101, 99, 42, 36, 109, 105, 110, 95, 115, 105, 122, 101, 41, > 125, 10, 112, 114, 101, 99, 61, 123, 109, 97, 120, 40, 49, 44, 36, 112, > 114, 101, 99, 42, 48, 46, 57, 41, 125, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 36, 109, 105, > 110, 95, 115, 105, 122, 101, 32, 45, 97, 114, 101, 97, 95, 102, 103, 91, > 45, 49, 93, 32, 48, 44, 49, 32, 45, 101, 113, 91, 45, 49, 93, 32, > 123, 40, 36, 109, 105, 110, 95, 115, 105, 122, 101, 41, 94, 50, 125, 10, > 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, 32, 51, 32, 45, > 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 97, 114, 101, 97, 95, 102, 103, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 101, 113, 91, 45, 49, 93, 32, 123, 40, 36, 109, > 105, 110, 95, 115, 105, 122, 101, 41, 94, 50, 125, 10, 45, 105, 102, 32, > 123, 33, 105, 77, 125, 32, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, > 115, 61, 123, 36, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, 115, 43, > 49, 125, 32, 45, 105, 102, 32, 123, 36, 110, 98, 95, 97, 116, 116, 101, > 109, 112, 116, 115, 62, 36, 52, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 108, 115, 101, 32, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, 115, > 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, > 40, 40, 36, 109, 97, 120, 95, 115, 105, 122, 101, 45, 36, 109, 105, 110, > 95, 115, 105, 122, 101, 41, 47, 50, 41, 125, 10, 45, 45, 100, 105, 108, > 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 97, 114, 101, 97, 95, > 102, 103, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 101, 113, 91, 45, > 49, 93, 32, 123, 40, 36, 109, 105, 110, 95, 115, 105, 122, 101, 43, 50, > 42, 36, 62, 43, 50, 41, 94, 50, 125, 10, 45, 105, 102, 32, 123, 33, > 105, 77, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 98, 114, 101, > 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, 45, 111, 114, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, > 10, 45, 98, 108, 101, 110, 100, 32, 115, 104, 97, 112, 101, 97, 118, 101, > 114, 97, 103, 101, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 97, > 114, 116, 111, 111, 110, 32, 58, 32, 95, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 44, 95, 115, 104, 97, 114, 112, 101, 110, 105, 110, 103, 44, > 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, 61, 48, 44, 95, 116, > 104, 105, 99, 107, 110, 101, 115, 115, 62, 61, 48, 44, 95, 99, 111, 108, > 111, 114, 62, 61, 48, 44, 113, 117, 97, 110, 116, 105, 122, 97, 116, 105, > 111, 110, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 99, 97, 114, 116, 111, 111, 110, 32, 101, 102, 102, 101, > 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 51, 39, 44, 32, > 39, 115, 104, 97, 114, 112, 101, 110, 105, 110, 103, 61, 49, 53, 48, 39, > 44, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 50, 48, 39, > 44, 32, 39, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, 48, 46, 50, > 53, 39, 44, 32, 39, 99, 111, 108, 111, 114, 61, 49, 46, 53, 39, 32, > 97, 110, 100, 32, 39, 113, 117, 97, 110, 116, 105, 122, 97, 116, 105, 111, > 110, 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 97, 114, > 116, 111, 111, 110, 32, 51, 44, 56, 48, 44, 49, 53, 10, 99, 97, 114, > 116, 111, 111, 110, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 51, 125, 44, 36, 123, 50, 61, 49, 53, 48, 125, 44, 36, 123, 51, > 61, 50, 48, 125, 44, 36, 123, 52, 61, 48, 46, 50, 53, 125, 44, 36, > 123, 53, 61, 49, 46, 53, 125, 44, 36, 123, 54, 61, 56, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 97, > 114, 116, 111, 111, 110, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 44, 32, 115, 104, 97, > 114, 112, 101, 110, 105, 110, 103, 32, 36, 50, 44, 32, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 32, 36, 51, 44, 32, 116, 104, 105, 99, 107, 110, > 101, 115, 115, 32, 36, 52, 44, 32, 99, 111, 108, 111, 114, 32, 36, 53, > 32, 97, 110, 100, 32, 113, 117, 97, 110, 116, 105, 122, 97, 116, 105, 111, > 110, 32, 36, 54, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, > 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 98, 32, 36, 49, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, 50, 44, 49, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 32, 45, 110, 32, 48, 44, 50, 53, 53, > 10, 45, 45, 101, 100, 103, 101, 115, 32, 36, 51, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 52, 32, 45, 103, 101, 91, 45, 49, 93, 32, 48, 46, > 57, 10, 45, 114, 103, 98, 50, 108, 97, 98, 91, 45, 50, 93, 32, 45, > 115, 91, 45, 50, 93, 32, 99, 32, 45, 42, 91, 45, 51, 44, 45, 50, > 93, 32, 36, 53, 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, > 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 45, 50, 93, 32, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 45, 50, 93, 32, 36, 54, 44, 49, > 44, 48, 32, 45, 110, 91, 45, 50, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 42, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 105, 114, 99, 108, 105, 115, 109, 32, 58, > 32, 95, 114, 97, 100, 105, 117, 115, 95, 109, 105, 110, 62, 48, 44, 95, > 114, 97, 100, 105, 117, 115, 95, 109, 97, 120, 62, 48, 44, 95, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, 95, > 114, 97, 100, 105, 117, 115, 95, 108, 105, 110, 101, 97, 114, 105, 116, 121, > 62, 61, 48, 44, 95, 108, 111, 99, 97, 116, 105, 111, 110, 95, 108, 105, > 110, 101, 97, 114, 105, 116, 121, 62, 61, 48, 44, 95, 115, 104, 97, 112, > 101, 61, 123, 48, 61, 115, 113, 117, 97, 114, 101, 115, 32, 124, 32, 49, > 61, 100, 105, 97, 109, 111, 110, 100, 115, 32, 124, 32, 50, 61, 99, 105, > 114, 99, 108, 101, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 99, 105, 114, 99, 108, 105, 115, 109, 32, 101, > 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, 101, 102, 102, 101, 99, 116, > 32, 105, 110, 115, 112, 105, 114, 101, 100, 32, 98, 121, 32, 66, 101, 110, > 32, 72, 101, 105, 110, 101, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 114, 97, 100, 105, 117, 115, 95, 109, 105, 110, 61, 50, 39, > 44, 32, 39, 114, 97, 100, 105, 117, 115, 95, 109, 97, 120, 61, 50, 48, > 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, > 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, 95, 108, 105, 110, 101, 97, > 114, 105, 116, 121, 61, 48, 46, 52, 39, 44, 32, 39, 108, 111, 99, 97, > 116, 105, 111, 110, 95, 108, 105, 110, 101, 97, 114, 105, 116, 121, 61, 51, > 39, 32, 97, 110, 100, 32, 39, 115, 104, 97, 112, 101, 61, 49, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 99, 105, 114, 99, 108, 105, 115, 109, > 32, 44, 10, 99, 105, 114, 99, 108, 105, 115, 109, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 50, 125, 62, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 50, 48, 125, 62, 48, 32, 38, 38, 32, 36, > 123, 51, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 52, 61, > 48, 46, 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 53, 61, 51, 125, > 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 54, 61, 50, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, > 32, 99, 105, 114, 99, 108, 105, 115, 109, 32, 101, 102, 102, 101, 99, 116, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 114, 97, 100, 105, 105, 32, 40, 36, 49, 44, 36, 50, 41, 44, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, > 114, 97, 100, 105, 117, 115, 32, 108, 105, 110, 101, 97, 114, 105, 116, 121, > 32, 36, 52, 32, 97, 110, 100, 32, 108, 111, 99, 97, 116, 105, 111, 110, > 32, 108, 105, 110, 101, 97, 114, 105, 116, 121, 32, 36, 53, 46, 92, 110, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 103, 114, 97, 100, 105, > 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 98, 91, 45, 49, 93, 32, > 36, 51, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 45, > 94, 91, 45, 49, 93, 32, 36, 53, 32, 45, 94, 91, 45, 50, 93, 32, > 36, 52, 32, 115, 117, 109, 103, 48, 61, 64, 123, 45, 49, 44, 43, 125, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 105, 116, 61, 48, 32, > 102, 97, 105, 108, 101, 100, 61, 48, 32, 110, 111, 101, 100, 103, 101, 115, > 61, 48, 32, 115, 118, 103, 61, 34, 45, 49, 44, 45, 49, 34, 10, 45, > 100, 111, 10, 45, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, > 93, 32, 49, 44, 51, 10, 45, 105, 102, 32, 36, 110, 111, 101, 100, 103, > 101, 115, 32, 120, 121, 122, 99, 61, 64, 123, 45, 49, 44, 67, 125, 32, > 45, 101, 108, 115, 101, 32, 45, 45, 42, 91, 45, 51, 44, 45, 49, 93, > 32, 120, 121, 122, 99, 61, 64, 123, 45, 49, 44, 67, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 110, 61, 64, > 123, 45, 52, 44, 40, 36, 120, 121, 122, 99, 41, 125, 10, 120, 61, 123, > 97, 114, 103, 40, 49, 44, 36, 120, 121, 122, 99, 41, 125, 10, 121, 61, > 123, 97, 114, 103, 40, 50, 44, 36, 120, 121, 122, 99, 41, 125, 10, 114, > 61, 123, 109, 105, 110, 40, 109, 97, 120, 40, 36, 49, 44, 36, 50, 42, > 40, 49, 45, 36, 110, 41, 41, 44, 115, 113, 114, 116, 40, 64, 123, 45, > 49, 44, 40, 36, 120, 121, 122, 99, 41, 125, 41, 45, 50, 41, 125, 10, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, 114, 62, > 61, 36, 49, 125, 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, 50, 125, > 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 36, 120, > 44, 36, 121, 44, 36, 114, 44, 36, 114, 44, 48, 44, 49, 44, 49, 32, > 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 50, 93, 32, 36, 120, 44, > 36, 121, 44, 123, 36, 114, 43, 36, 49, 125, 44, 123, 36, 114, 43, 36, > 49, 125, 44, 48, 44, 49, 44, 45, 49, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 54, 61, 61, 49, 125, 10, 120, 48, 61, 123, 36, 120, 45, 36, > 114, 47, 50, 125, 32, 121, 48, 61, 123, 36, 121, 45, 36, 114, 47, 50, > 125, 32, 120, 49, 61, 123, 36, 120, 43, 36, 114, 47, 50, 125, 32, 121, > 49, 61, 123, 36, 121, 43, 36, 114, 47, 50, 125, 10, 45, 114, 101, 99, > 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 36, 120, 48, 44, 36, > 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, 49, 44, 49, 10, 120, > 48, 61, 123, 36, 120, 45, 40, 36, 114, 43, 36, 49, 41, 47, 50, 125, > 32, 121, 48, 61, 123, 36, 121, 45, 40, 36, 114, 43, 36, 49, 41, 47, > 50, 125, 32, 120, 49, 61, 123, 36, 120, 43, 40, 36, 114, 43, 36, 49, > 41, 47, 50, 125, 32, 121, 49, 61, 123, 36, 121, 43, 40, 36, 114, 43, > 36, 49, 41, 47, 50, 125, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, > 101, 91, 45, 50, 93, 32, 36, 120, 48, 44, 36, 121, 48, 44, 36, 120, > 49, 44, 36, 121, 49, 44, 49, 44, 45, 49, 10, 45, 101, 108, 115, 101, > 10, 120, 48, 61, 123, 114, 111, 117, 110, 100, 40, 36, 120, 45, 36, 114, > 47, 50, 41, 125, 32, 121, 48, 61, 123, 114, 111, 117, 110, 100, 40, 36, > 121, 45, 36, 114, 47, 50, 41, 125, 32, 120, 49, 61, 123, 114, 111, 117, > 110, 100, 40, 36, 120, 43, 36, 114, 47, 50, 41, 125, 32, 121, 49, 61, > 123, 114, 111, 117, 110, 100, 40, 36, 121, 43, 36, 114, 47, 50, 41, 125, > 10, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 52, 44, > 36, 120, 48, 44, 36, 121, 44, 36, 120, 44, 36, 121, 48, 44, 36, 120, > 49, 44, 36, 121, 44, 36, 120, 44, 36, 121, 49, 44, 49, 44, 49, 10, > 120, 48, 61, 123, 114, 111, 117, 110, 100, 40, 36, 120, 45, 40, 36, 114, > 43, 36, 49, 41, 47, 50, 41, 125, 32, 121, 48, 61, 123, 114, 111, 117, > 110, 100, 40, 36, 121, 45, 40, 36, 114, 43, 36, 49, 41, 47, 50, 41, > 125, 32, 120, 49, 61, 123, 114, 111, 117, 110, 100, 40, 36, 120, 43, 40, > 36, 114, 43, 36, 49, 41, 47, 50, 41, 125, 32, 121, 49, 61, 123, 114, > 111, 117, 110, 100, 40, 36, 121, 43, 40, 36, 114, 43, 36, 49, 41, 47, > 50, 41, 125, 10, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 50, 93, > 32, 52, 44, 36, 120, 48, 44, 36, 121, 44, 36, 120, 44, 36, 121, 48, > 44, 36, 120, 49, 44, 36, 121, 44, 36, 120, 44, 36, 121, 49, 44, 49, > 44, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 102, 97, 105, 108, 101, > 100, 61, 48, 10, 45, 101, 108, 115, 101, 10, 45, 61, 91, 45, 50, 93, > 32, 45, 49, 44, 36, 120, 44, 36, 121, 10, 102, 97, 105, 108, 101, 100, > 61, 123, 36, 102, 97, 105, 108, 101, 100, 43, 49, 125, 10, 45, 105, 102, > 32, 123, 36, 102, 97, 105, 108, 101, 100, 61, 61, 49, 48, 48, 125, 32, > 102, 97, 105, 108, 101, 100, 61, 48, 32, 45, 105, 102, 32, 36, 110, 111, > 101, 100, 103, 101, 115, 32, 110, 61, 45, 49, 32, 45, 101, 108, 115, 101, > 32, 110, 111, 101, 100, 103, 101, 115, 61, 49, 32, 45, 101, 110, 100, 105, > 102, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 105, 116, 61, 123, 36, 105, 116, 43, 49, 125, 10, 45, 105, 102, 32, 123, > 33, 40, 36, 105, 116, 37, 53, 48, 41, 125, 10, 112, 61, 123, 114, 111, > 117, 110, 100, 40, 49, 48, 48, 42, 40, 40, 36, 115, 117, 109, 103, 48, > 45, 64, 123, 45, 50, 44, 43, 125, 41, 47, 64, 123, 45, 50, 44, 119, > 104, 125, 41, 94, 51, 41, 125, 10, 45, 114, 112, 114, 111, 103, 114, 101, > 115, 115, 32, 36, 112, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 34, 92, 114, 32, 32, 34, 36, 112, 37, 32, 45, 118, 32, 45, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 110, > 62, 61, 48, 125, 10, 45, 114, 109, 91, 45, 51, 44, 45, 50, 93, 32, > 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 45, 49, 10, 45, 98, > 108, 101, 110, 100, 32, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, > 101, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, > 95, 101, 108, 108, 105, 112, 115, 101, 115, 32, 58, 32, 95, 99, 111, 117, > 110, 116, 62, 48, 44, 95, 114, 97, 100, 105, 117, 115, 62, 61, 48, 44, > 95, 111, 112, 97, 99, 105, 116, 121, 62, 61, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 65, 100, 100, 32, 114, 97, 110, 100, 111, 109, 32, > 99, 111, 108, 111, 114, 32, 101, 108, 108, 105, 112, 115, 101, 115, 32, 116, > 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, 117, > 110, 116, 61, 52, 48, 48, 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, > 61, 53, 39, 32, 97, 110, 100, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 48, 46, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 111, > 108, 111, 114, 95, 101, 108, 108, 105, 112, 115, 101, 115, 32, 44, 44, 48, > 46, 49, 53, 10, 99, 111, 108, 111, 114, 95, 101, 108, 108, 105, 112, 115, > 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, > 52, 48, 48, 125, 44, 36, 123, 50, 61, 53, 125, 44, 36, 123, 51, 61, > 48, 46, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, > 100, 32, 36, 49, 32, 114, 97, 110, 100, 111, 109, 32, 99, 111, 108, 111, > 114, 32, 101, 108, 108, 105, 112, 115, 101, 115, 32, 116, 111, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 109, 97, 120, 105, > 109, 117, 109, 32, 114, 97, 100, 105, 117, 115, 32, 36, 50, 32, 97, 110, > 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 49, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, > 101, 108, 108, 105, 112, 115, 101, 32, 123, 63, 40, 48, 44, 49, 48, 48, > 41, 125, 37, 44, 123, 63, 40, 48, 44, 49, 48, 48, 41, 125, 37, 44, > 123, 63, 40, 48, 44, 36, 50, 41, 125, 37, 44, 123, 63, 40, 48, 44, > 36, 50, 41, 125, 37, 44, 123, 63, 40, 48, 44, 51, 54, 48, 41, 125, > 44, 36, 51, 44, 123, 63, 40, 54, 48, 44, 50, 53, 53, 41, 125, 44, > 123, 63, 40, 54, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 54, > 48, 44, 50, 53, 53, 41, 125, 44, 50, 53, 53, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 117, > 98, 105, 115, 109, 32, 58, 32, 95, 100, 101, 110, 115, 105, 116, 121, 62, > 61, 48, 44, 48, 60, 61, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, > 60, 61, 53, 48, 44, 95, 109, 97, 120, 95, 97, 110, 103, 108, 101, 44, > 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 99, 117, 98, 105, 115, 109, 32, 101, 102, > 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, 53, 48, 39, 44, 32, > 39, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, 49, 48, 39, 44, 32, > 39, 109, 97, 120, 95, 97, 110, 103, 108, 101, 61, 55, 53, 39, 44, 32, > 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, 46, 55, 39, 32, 97, 110, > 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 117, 98, 105, 115, 109, 32, > 44, 10, 99, 117, 98, 105, 115, 109, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 53, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 50, 61, 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 50, 60, 61, 53, 48, 32, 38, 38, 32, 36, 123, 53, 61, 48, 125, 62, > 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 55, 53, > 125, 44, 36, 123, 52, 61, 48, 46, 55, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 117, 98, 105, 115, 109, > 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, 115, 105, 116, 121, > 32, 36, 49, 44, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, 32, 36, > 50, 44, 32, 109, 97, 120, 105, 109, 117, 109, 32, 97, 110, 103, 108, 101, > 32, 36, 51, 32, 100, 101, 103, 46, 44, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 52, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 32, 36, 53, 46, 34, 10, 45, 105, 102, 32, 123, 34, 33, > 36, 49, 32, 124, 124, 32, 33, 36, 50, 32, 124, 124, 32, 33, 36, 51, > 32, 124, 124, 32, 33, 36, 52, 34, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 115, 61, 123, 115, > 125, 10, 80, 61, 123, 114, 111, 117, 110, 100, 40, 36, 50, 42, 109, 97, > 120, 40, 119, 44, 104, 41, 47, 50, 48, 48, 41, 125, 10, 78, 61, 123, > 114, 111, 117, 110, 100, 40, 49, 46, 53, 42, 36, 49, 42, 119, 42, 104, > 47, 40, 52, 42, 36, 80, 41, 47, 49, 48, 48, 41, 125, 10, 40, 123, > 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, 43, 91, 45, 49, > 93, 32, 48, 46, 53, 32, 40, 123, 52, 42, 36, 78, 125, 59, 36, 78, > 41, 10, 49, 44, 36, 78, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 36, 80, 44, 123, 36, 119, 45, 49, 45, 36, 80, 125, 32, 45, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 36, 80, 44, 123, 36, 104, 45, > 49, 45, 36, 80, 125, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 120, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 10, 45, 45, 43, > 91, 45, 49, 93, 32, 39, 45, 36, 80, 44, 45, 36, 80, 39, 32, 45, > 45, 43, 91, 45, 50, 93, 32, 39, 36, 80, 44, 45, 36, 80, 39, 32, > 45, 45, 43, 91, 45, 51, 93, 32, 39, 36, 80, 44, 36, 80, 39, 32, > 45, 45, 43, 91, 45, 52, 93, 32, 39, 45, 36, 80, 44, 36, 80, 39, > 10, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 120, 32, 45, 105, 91, > 45, 50, 93, 32, 40, 49, 50, 44, 48, 44, 49, 44, 50, 44, 51, 59, > 49, 50, 44, 123, 52, 42, 40, 36, 78, 45, 49, 41, 125, 44, 123, 52, > 42, 40, 36, 78, 45, 49, 41, 43, 49, 125, 44, 123, 52, 42, 40, 36, > 78, 45, 49, 41, 43, 50, 125, 44, 123, 52, 42, 40, 36, 78, 45, 49, > 41, 43, 51, 125, 41, 10, 45, 114, 91, 45, 50, 93, 32, 53, 44, 36, > 78, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 50, 93, 32, 49, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, > 10, 49, 44, 36, 78, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, > 123, 50, 50, 53, 45, 36, 51, 125, 44, 123, 50, 50, 53, 43, 36, 51, > 125, 32, 45, 42, 91, 45, 49, 93, 32, 123, 112, 105, 47, 49, 56, 48, > 125, 10, 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, > 91, 45, 50, 93, 32, 45, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, > 91, 45, 51, 93, 32, 45, 97, 91, 45, 52, 45, 45, 51, 93, 32, 120, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, 122, 91, > 45, 52, 44, 45, 50, 44, 45, 49, 93, 32, 48, 44, 50, 32, 45, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 49, 32, 45, 97, 91, 45, > 52, 45, 45, 49, 93, 32, 120, 32, 45, 42, 91, 45, 49, 93, 32, 123, > 115, 113, 114, 116, 40, 50, 41, 42, 36, 80, 125, 10, 45, 114, 91, 45, > 51, 93, 32, 52, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 44, 48, 44, 50, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, 10, 40, > 45, 49, 50, 56, 59, 36, 119, 59, 36, 104, 59, 36, 115, 41, 32, 45, > 45, 98, 91, 48, 93, 32, 36, 53, 10, 45, 105, 102, 32, 123, 36, 78, > 62, 49, 125, 32, 52, 44, 123, 36, 78, 45, 49, 125, 44, 49, 44, 49, > 44, 45, 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 49, 44, 36, 78, 44, 49, 44, 49, 44, 49, 10, 45, 121, > 91, 49, 45, 45, 49, 93, 32, 45, 97, 91, 49, 45, 45, 49, 93, 32, > 121, 32, 45, 114, 118, 51, 100, 91, 45, 49, 93, 10, 45, 105, 102, 32, > 123, 36, 52, 62, 61, 49, 125, 32, 45, 111, 98, 106, 101, 99, 116, 51, > 100, 91, 48, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 49, > 44, 50, 44, 48, 44, 48, 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, > 108, 115, 101, 32, 45, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, > 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 50, 44, > 48, 44, 48, 32, 45, 114, 109, 91, 49, 93, 32, 45, 98, 108, 101, 110, > 100, 32, 97, 108, 112, 104, 97, 44, 36, 52, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 114, 97, 119, 95, 119, > 104, 105, 114, 108, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 119, 104, 105, 114, 108, 32, 100, 114, 97, 119, 105, 110, > 103, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, > 49, 48, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 114, 97, > 119, 95, 119, 104, 105, 114, 108, 32, 44, 10, 100, 114, 97, 119, 95, 119, > 104, 105, 114, 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 49, 48, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 119, 104, 105, 114, 108, 32, 100, 114, 97, 119, 105, > 110, 103, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, > 91, 45, 49, 93, 32, 55, 48, 44, 50, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 32, 45, 97, 110, 100, 91, 45, 49, 44, 45, 50, 93, 32, 45, 115, 109, > 111, 111, 116, 104, 91, 45, 49, 93, 32, 36, 49, 44, 48, 44, 49, 44, > 50, 44, 50, 10, 45, 115, 113, 114, 116, 91, 45, 49, 93, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 113, 117, 97, > 108, 105, 122, 101, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 114, 97, 119, 105, 110, 103, 32, 58, 32, 95, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 100, 114, 97, 119, 105, 110, 103, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 50, 48, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 114, 97, 119, 105, > 110, 103, 32, 44, 10, 100, 114, 97, 119, 105, 110, 103, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 50, 48, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 100, 114, 97, > 119, 105, 110, 103, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 108, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, > 115, 109, 111, 111, 116, 104, 32, 36, 49, 44, 48, 46, 50, 44, 49, 44, > 51, 44, 51, 32, 45, 98, 32, 50, 32, 45, 115, 104, 97, 114, 112, 101, > 110, 32, 49, 48, 48, 48, 32, 91, 48, 93, 10, 45, 114, 91, 48, 93, > 32, 50, 48, 44, 50, 48, 44, 49, 44, 51, 44, 50, 32, 45, 101, 113, > 117, 97, 108, 105, 122, 101, 91, 48, 93, 32, 45, 105, 110, 100, 101, 120, > 91, 49, 93, 32, 91, 48, 93, 44, 49, 44, 49, 10, 45, 110, 109, 91, > 49, 93, 32, 64, 123, 48, 44, 110, 125, 44, 49, 32, 45, 114, 109, 91, > 48, 93, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, > 119, 32, 58, 32, 95, 111, 102, 102, 115, 101, 116, 95, 120, 91, 37, 93, > 44, 95, 111, 102, 102, 115, 101, 116, 95, 121, 91, 37, 93, 44, 95, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, > 48, 60, 61, 95, 99, 117, 114, 118, 97, 116, 117, 114, 101, 60, 61, 49, > 44, 95, 101, 120, 112, 97, 110, 100, 95, 115, 105, 122, 101, 61, 123, 32, > 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 114, 111, 112, 32, 115, 104, 97, 100, 111, 119, 32, 98, 101, 104, > 105, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, > 102, 102, 115, 101, 116, 95, 120, 61, 50, 48, 39, 44, 32, 39, 111, 102, > 102, 115, 101, 116, 95, 121, 61, 111, 102, 102, 115, 101, 116, 95, 120, 39, > 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 53, 39, > 44, 32, 39, 99, 117, 114, 118, 97, 116, 117, 114, 101, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 101, 120, 112, 97, 110, 100, 95, 115, 105, 122, 101, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 114, 111, 112, 95, > 115, 104, 97, 100, 111, 119, 32, 49, 48, 44, 50, 48, 44, 53, 44, 48, > 46, 53, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 50, 48, > 44, 48, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, > 10, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 51, 61, 53, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 52, 61, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 52, 60, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 50, 48, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, > 53, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, > 111, 112, 32, 115, 104, 97, 100, 111, 119, 32, 98, 101, 104, 105, 110, 100, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, > 102, 102, 115, 101, 116, 115, 32, 40, 36, 49, 44, 36, 50, 41, 44, 32, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 32, 97, 110, > 100, 32, 99, 117, 114, 118, 97, 116, 117, 114, 101, 32, 36, 52, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 97, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 100, 120, > 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, > 110, 116, 92, 32, 36, 49, 125, 44, 119, 42, 36, 49, 44, 36, 49, 41, > 125, 10, 100, 121, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, 104, 42, 36, 50, > 44, 36, 50, 41, 125, 10, 115, 105, 103, 109, 97, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 51, 125, 44, 109, 97, 120, 40, 119, 44, 104, 41, 42, 36, 51, 44, 36, > 51, 41, 125, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, > 115, 61, 123, 115, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 49, 48, 48, 37, 32, 99, 111, 111, 114, 100, 115, 61, 64, 123, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, 100, 115, 91, > 45, 49, 93, 92, 32, 48, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 122, 32, 36, 99, 111, 111, 114, 100, 115, 10, 45, 114, 32, 123, 119, > 43, 97, 98, 115, 40, 36, 100, 120, 41, 125, 44, 123, 104, 43, 97, 98, > 115, 40, 36, 100, 121, 41, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 123, 105, 102, 40, 36, 100, 120, 62, 48, 44, 48, 44, 49, > 41, 125, 44, 123, 105, 102, 40, 36, 100, 121, 62, 48, 44, 48, 44, 49, > 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 43, 52, 42, 36, > 115, 105, 103, 109, 97, 125, 44, 123, 104, 43, 52, 42, 36, 115, 105, 103, > 109, 97, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 45, 49, 93, 32, 49, 48, 48, 37, 10, 45, 105, 102, 32, 123, > 33, 36, 52, 125, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, > 36, 100, 120, 44, 36, 100, 121, 10, 45, 101, 108, 115, 101, 10, 40, 48, > 59, 123, 112, 105, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 51, 32, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 45, 36, 52, 32, 45, 43, 91, 45, 49, 93, 32, > 49, 32, 45, 42, 91, 45, 49, 93, 32, 36, 100, 120, 10, 40, 48, 44, > 123, 112, 105, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 51, 32, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 36, 52, 32, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 42, 91, 45, 49, 93, 32, 36, 100, 121, 10, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 48, 44, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 98, 91, 45, > 49, 93, 32, 36, 115, 105, 103, 109, 97, 44, 48, 10, 45, 114, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 50, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 109, 118, > 91, 45, 49, 93, 32, 48, 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, > 112, 104, 97, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 32, 45, 103, 101, 91, 45, 49, 93, 32, > 49, 32, 45, 42, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 48, > 10, 45, 105, 102, 32, 123, 33, 36, 53, 125, 32, 36, 119, 44, 36, 104, > 44, 49, 44, 36, 115, 32, 45, 106, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 123, 97, 114, 103, 40, 49, 44, 36, 99, 111, 111, 114, 100, 115, > 41, 125, 44, 123, 97, 114, 103, 40, 50, 44, 36, 99, 111, 111, 114, 100, > 115, 41, 125, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, 108, 105, 112, > 115, 105, 111, 110, 105, 115, 109, 32, 58, 32, 95, 82, 62, 48, 91, 37, > 93, 44, 95, 114, 62, 48, 91, 37, 93, 44, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 62, 61, 48, 91, 37, 93, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 44, 95, 111, 117, 116, 108, 105, 110, 101, 62, 48, 44, > 95, 100, 101, 110, 115, 105, 116, 121, 62, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 101, 108, 108, 105, 112, 115, > 105, 111, 110, 105, 115, 109, 32, 102, 105, 108, 116, 101, 114, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 82, 61, 49, 48, > 39, 44, 32, 39, 114, 61, 51, 39, 44, 32, 39, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 61, 49, 37, 39, 44, 32, 39, 111, 112, 97, 99, > 105, 116, 121, 61, 48, 46, 55, 39, 44, 32, 39, 111, 117, 116, 108, 105, > 115, 101, 61, 56, 39, 32, 97, 110, 100, 32, 39, 100, 101, 110, 115, 105, > 116, 121, 61, 48, 46, 54, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 101, 108, 108, 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, 44, 10, 101, > 108, 108, 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 48, 125, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 48, 32, 38, 38, 32, 36, > 123, 53, 61, 56, 125, 62, 48, 32, 38, 38, 32, 36, 123, 54, 61, 48, > 46, 54, 125, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, > 61, 49, 37, 125, 44, 36, 123, 52, 61, 48, 46, 55, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 101, 108, 108, > 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, 102, 105, 108, 116, 101, 114, > 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 114, 97, 100, 105, 105, 32, 40, 36, 49, 44, 36, 50, 41, 44, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, > 111, 112, 97, 99, 105, 116, 121, 32, 36, 52, 32, 97, 110, 100, 32, 111, > 117, 116, 108, 105, 110, 101, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 108, 117, > 109, 105, 110, 97, 110, 99, 101, 32, 45, 103, 91, 45, 49, 93, 32, 120, > 121, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 98, > 91, 45, 49, 93, 32, 36, 51, 32, 45, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, > 32, 48, 44, 48, 32, 45, 115, 104, 91, 45, 50, 93, 32, 49, 44, 49, > 32, 45, 97, 116, 97, 110, 50, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 123, 49, 56, 48, 47, 112, 105, 125, > 32, 45, 43, 91, 45, 49, 93, 32, 57, 48, 32, 45, 114, 109, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 49, 44, 49, 10, 91, 45, 50, 93, 44, 91, 45, 50, > 93, 44, 49, 44, 91, 45, 50, 93, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 36, 54, 42, 119, 42, 104, 47, 109, 97, 120, 40, 36, 49, 44, > 36, 50, 41, 125, 10, 120, 121, 61, 123, 63, 40, 119, 41, 125, 44, 123, > 63, 40, 104, 41, 125, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, > 49, 93, 32, 36, 120, 121, 44, 36, 49, 44, 36, 50, 44, 64, 123, 45, > 50, 44, 40, 36, 120, 121, 41, 125, 44, 36, 52, 44, 92, 10, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 48, 41, 125, 44, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 49, 41, 125, 44, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 50, 41, 125, 44, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 51, 41, 125, 10, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 36, 120, 121, 44, 36, > 49, 44, 36, 50, 44, 64, 123, 45, 50, 44, 40, 36, 120, 121, 41, 125, > 44, 36, 52, 44, 48, 120, 49, 44, 92, 10, 123, 64, 123, 45, 51, 44, > 40, 36, 120, 121, 44, 48, 44, 48, 41, 125, 47, 36, 53, 125, 44, 123, > 64, 123, 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 49, 41, 125, 47, > 36, 53, 125, 44, 123, 64, 123, 45, 51, 44, 40, 36, 120, 121, 44, 48, > 44, 50, 41, 125, 47, 36, 53, 125, 44, 123, 64, 123, 45, 51, 44, 40, > 36, 120, 121, 44, 48, 44, 51, 41, 125, 47, 36, 53, 125, 10, 45, 100, > 111, 110, 101, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 110, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 32, 45, 98, 108, 101, 110, 100, 91, 45, > 50, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 102, 105, 114, 101, 95, 101, 100, 103, 101, 115, 32, 58, > 32, 95, 101, 100, 103, 101, 115, 62, 61, 48, 44, 48, 60, 61, 95, 97, > 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 60, 61, 49, 44, 95, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 62, 61, 48, 44, 95, 110, 98, 95, 102, > 114, 97, 109, 101, 115, 62, 48, 44, 95, 115, 116, 97, 114, 116, 105, 110, > 103, 95, 102, 114, 97, 109, 101, 62, 61, 48, 44, 102, 114, 97, 109, 101, > 95, 115, 107, 105, 112, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 102, 105, 114, 101, 32, > 101, 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 101, 100, 103, 101, > 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 101, 100, 103, 101, 115, 61, 48, 46, 55, 39, 44, 32, 39, 97, 116, 116, > 101, 110, 117, 97, 116, 105, 111, 110, 61, 48, 46, 50, 53, 39, 44, 32, > 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 53, 39, > 44, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 50, 53, 39, > 44, 32, 39, 110, 98, 95, 102, 114, 97, 109, 101, 115, 61, 49, 39, 44, > 32, 39, 115, 116, 97, 114, 116, 105, 110, 103, 95, 102, 114, 97, 109, 101, > 61, 50, 48, 39, 32, 97, 110, 100, 32, 39, 102, 114, 97, 109, 101, 95, > 115, 107, 105, 112, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, > 105, 114, 101, 95, 101, 100, 103, 101, 115, 32, 44, 10, 102, 105, 114, 101, > 95, 101, 100, 103, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 48, 46, 55, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 48, 46, 50, 53, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 50, 60, 61, 49, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 53, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 52, 61, 50, 53, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 123, 53, 61, 49, 125, 62, 48, 32, 38, > 38, 32, 36, 123, 54, 61, 50, 48, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 55, 61, 48, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 102, 105, 114, > 101, 32, 101, 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 101, 100, > 103, 101, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 119, 105, 116, 104, 32, 101, 100, 103, 101, 115, 32, 36, 49, 44, 32, 97, > 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 32, 36, 50, 44, 32, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 32, 36, 52, 44, 32, 34, 92, 10, 34, > 36, 53, 32, 102, 114, 97, 109, 101, 115, 44, 32, 115, 116, 97, 114, 116, > 105, 110, 103, 32, 102, 114, 97, 109, 101, 32, 36, 54, 32, 97, 110, 100, > 32, 102, 114, 97, 109, 101, 32, 115, 107, 105, 112, 32, 36, 55, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, > 125, 10, 45, 110, 111, 114, 109, 32, 45, 45, 103, 114, 97, 100, 105, 101, > 110, 116, 95, 110, 111, 114, 109, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 49, 32, 45, 114, 111, 117, 110, 100, 105, 102, 121, 91, 45, 49, 93, > 32, 36, 49, 32, 45, 102, 91, 48, 93, 32, 48, 10, 40, 48, 44, 48, > 44, 48, 59, 48, 44, 48, 44, 48, 59, 49, 44, 49, 44, 49, 59, 48, > 44, 49, 44, 48, 41, 32, 45, 42, 91, 45, 49, 93, 32, 123, 40, 49, > 45, 36, 50, 94, 52, 41, 47, 52, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 36, 53, 42, 40, 49, 43, 36, 55, 41, 43, 36, 54, 125, > 10, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, 32, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 42, 91, 45, 49, 93, 32, 91, 49, 93, 10, 45, 98, 91, 45, 49, 93, > 32, 36, 51, 10, 45, 105, 102, 32, 36, 52, 32, 45, 103, 101, 91, 45, > 49, 93, 32, 36, 52, 37, 32, 45, 101, 108, 115, 101, 32, 45, 101, 113, > 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 106, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 91, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 48, 93, 32, > 91, 50, 93, 10, 45, 105, 102, 32, 123, 36, 62, 62, 61, 36, 54, 34, > 32, 38, 38, 32, 34, 40, 36, 62, 45, 36, 54, 41, 37, 40, 36, 55, > 43, 49, 41, 61, 61, 48, 125, 32, 91, 48, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 45, 50, > 93, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 40, 48, 44, 50, 53, 53, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, > 44, 49, 50, 56, 44, 50, 53, 53, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 50, 53, 54, 44, 49, 44, 49, 44, 51, 44, 51, 10, 45, 109, 97, > 112, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 114, 97, 99, 116, 97, 108, 105, 122, 101, 32, 58, 32, 48, 60, 61, > 100, 101, 116, 97, 105, 108, 95, 108, 101, 118, 101, 108, 60, 61, 49, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 97, 110, 100, 111, 109, 108, > 121, 32, 102, 114, 97, 99, 116, 97, 108, 105, 122, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 100, 101, 116, 97, 105, 108, 95, 108, 101, > 118, 101, 108, 61, 48, 46, 56, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 102, 114, 97, 99, 116, 97, 108, 105, 122, 101, 32, 44, 10, 102, 114, 97, > 99, 116, 97, 108, 105, 122, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 123, 49, 61, 48, 46, 56, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 49, 60, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 82, 97, 110, 100, 111, 109, 108, 121, 32, 102, 114, 97, 99, 116, 97, > 108, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 100, 101, 116, 97, 105, 108, 32, 108, 101, 118, 101, 108, 32, > 36, 49, 46, 34, 10, 45, 118, 32, 45, 10, 120, 99, 61, 48, 46, 52, > 52, 51, 51, 10, 121, 99, 61, 48, 46, 50, 54, 52, 53, 10, 100, 101, > 108, 116, 97, 61, 48, 46, 49, 10, 99, 48, 114, 61, 48, 46, 51, 49, > 55, 10, 99, 48, 105, 61, 48, 46, 48, 51, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 108, 117, > 109, 105, 110, 97, 110, 99, 101, 32, 45, 101, 113, 117, 97, 108, 105, 122, > 101, 32, 50, 53, 54, 32, 45, 98, 32, 48, 46, 50, 53, 37, 32, 45, > 110, 32, 48, 44, 50, 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 10, 100, 120, 61, 123, 36, 100, 101, 108, 116, 97, 42, 119, 47, 109, > 97, 120, 40, 119, 44, 104, 41, 125, 10, 100, 121, 61, 123, 36, 100, 101, > 108, 116, 97, 42, 104, 47, 109, 97, 120, 40, 119, 44, 104, 41, 125, 10, > 120, 48, 61, 123, 36, 120, 99, 45, 36, 100, 120, 47, 50, 125, 10, 121, > 48, 61, 123, 36, 121, 99, 45, 36, 100, 121, 47, 50, 125, 10, 120, 49, > 61, 123, 36, 120, 99, 43, 36, 100, 120, 47, 50, 125, 10, 121, 49, 61, > 123, 36, 121, 99, 43, 36, 100, 121, 47, 50, 125, 10, 45, 109, 97, 110, > 100, 101, 108, 98, 114, 111, 116, 91, 45, 49, 93, 32, 36, 120, 48, 44, > 36, 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, 50, 53, 54, 44, > 49, 44, 36, 99, 48, 114, 44, 36, 99, 48, 105, 10, 45, 45, 101, 113, > 91, 45, 49, 93, 32, 48, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 54, 10, 49, 54, > 44, 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 50, 53, > 54, 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, 109, 97, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 91, 45, 49, 93, 32, 99, 10, 45, 105, 91, 50, 44, 51, 93, > 32, 91, 48, 93, 10, 115, 61, 123, 48, 46, 49, 42, 40, 49, 45, 36, > 49, 41, 125, 10, 45, 112, 97, 114, 97, 108, 108, 101, 108, 32, 34, 45, > 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, 110, 114, 105, 103, 105, > 100, 91, 48, 44, 49, 93, 32, 34, 36, 115, 34, 44, 53, 34, 44, 34, > 45, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, 110, 114, 105, 103, > 105, 100, 91, 50, 44, 51, 93, 32, 34, 36, 115, 34, 44, 53, 34, 44, > 34, 45, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, 110, 114, 105, > 103, 105, 100, 91, 52, 44, 53, 93, 32, 34, 36, 115, 34, 44, 53, 34, > 10, 45, 114, 109, 91, 48, 44, 50, 44, 52, 93, 32, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 103, 108, 111, 119, 32, 58, 32, > 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 115, 111, 102, 116, 32, > 103, 108, 111, 119, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 37, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 103, 108, 111, 119, 32, 44, 10, 103, > 108, 111, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 37, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, > 32, 115, 111, 102, 116, 32, 103, 108, 111, 119, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 45, 98, 91, 48, 93, 32, 36, 49, 32, 45, 110, 91, 45, 49, > 93, 32, 91, 48, 93, 32, 45, 98, 108, 101, 110, 100, 95, 101, 100, 103, > 101, 115, 91, 48, 44, 45, 49, 93, 32, 49, 32, 45, 97, 32, 99, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 104, 97, 108, 102, 116, 111, 110, 101, > 32, 58, 32, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 61, 50, 44, > 95, 115, 105, 122, 101, 95, 100, 97, 114, 107, 62, 61, 50, 44, 95, 115, > 105, 122, 101, 95, 98, 114, 105, 103, 104, 116, 62, 61, 50, 44, 95, 115, > 104, 97, 112, 101, 61, 123, 32, 48, 61, 115, 113, 117, 97, 114, 101, 32, > 124, 32, 49, 61, 100, 105, 97, 109, 111, 110, 100, 32, 124, 32, 50, 61, > 99, 105, 114, 99, 108, 101, 32, 124, 32, 51, 61, 105, 110, 118, 45, 115, > 113, 117, 97, 114, 101, 32, 124, 32, 52, 61, 105, 110, 118, 45, 100, 105, > 97, 109, 111, 110, 100, 32, 124, 32, 53, 61, 105, 110, 118, 45, 99, 105, > 114, 99, 108, 101, 32, 125, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 104, 97, 108, 102, 116, 111, 110, 101, > 32, 100, 105, 116, 104, 101, 114, 105, 110, 103, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 108, 101, 118, 101, > 108, 115, 61, 53, 39, 44, 32, 39, 115, 105, 122, 101, 95, 100, 97, 114, > 107, 61, 56, 39, 44, 32, 39, 115, 105, 122, 101, 95, 98, 114, 105, 103, > 104, 116, 61, 56, 39, 44, 32, 39, 115, 104, 97, 112, 101, 61, 53, 39, > 32, 97, 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 104, 97, 108, > 102, 116, 111, 110, 101, 32, 44, 10, 104, 97, 108, 102, 116, 111, 110, 101, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, > 125, 62, 61, 50, 32, 38, 38, 32, 36, 123, 50, 61, 56, 125, 62, 61, > 50, 32, 38, 38, 32, 36, 123, 51, 61, 56, 125, 62, 61, 50, 32, 38, > 38, 32, 36, 123, 53, 61, 48, 125, 62, 61, 48, 34, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 52, 61, 53, 125, 10, 45, 118, 32, 45, 32, 115, > 48, 61, 34, 115, 113, 117, 97, 114, 101, 34, 32, 115, 49, 61, 34, 100, > 105, 97, 109, 111, 110, 100, 34, 32, 115, 50, 61, 34, 99, 105, 114, 99, > 108, 101, 34, 32, 115, 51, 61, 34, 105, 110, 118, 45, 115, 113, 117, 97, > 114, 101, 34, 32, 115, 52, 61, 34, 105, 110, 118, 45, 100, 105, 97, 109, > 111, 110, 100, 34, 32, 115, 53, 61, 34, 105, 110, 118, 45, 99, 105, 114, > 99, 108, 101, 34, 32, 45, 118, 32, 43, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 104, 97, 108, 102, 116, 111, 110, > 101, 32, 100, 105, 116, 104, 101, 114, 105, 110, 103, 32, 116, 111, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, > 108, 101, 118, 101, 108, 115, 44, 32, 100, 97, 114, 107, 32, 115, 105, 122, > 101, 32, 36, 51, 44, 32, 98, 114, 105, 103, 104, 116, 32, 115, 105, 122, > 101, 32, 36, 52, 44, 32, 34, 36, 123, 115, 36, 52, 125, 34, 32, 115, > 104, 97, 112, 101, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 32, 99, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 40, 48, 44, 50, 53, 53, 41, 32, 45, > 97, 32, 121, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 36, 49, > 44, 48, 32, 45, 114, 111, 119, 115, 32, 48, 44, 123, 104, 45, 50, 125, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 115, 61, 123, 114, > 111, 117, 110, 100, 40, 40, 36, 50, 42, 36, 60, 43, 36, 51, 42, 36, > 62, 41, 47, 40, 36, 49, 45, 49, 41, 41, 125, 10, 36, 115, 44, 36, > 115, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, > 32, 49, 44, 123, 36, 52, 37, 51, 125, 32, 45, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 48, 44, 50, 32, 45, 109, 105, 110, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 36, 52, 62, 61, 51, 125, 32, 45, 108, 116, 91, > 45, 49, 93, 32, 123, 49, 48, 48, 42, 36, 60, 47, 40, 36, 49, 45, > 49, 46, 49, 41, 125, 37, 32, 45, 42, 91, 45, 49, 93, 32, 123, 45, > 50, 53, 53, 125, 32, 45, 43, 91, 45, 49, 93, 32, 123, 50, 53, 53, > 45, 36, 62, 125, 10, 45, 101, 108, 115, 101, 32, 45, 108, 116, 91, 45, > 49, 93, 32, 123, 49, 48, 48, 42, 36, 62, 47, 40, 36, 49, 45, 49, > 46, 49, 41, 125, 37, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, > 32, 45, 45, 91, 45, 49, 93, 32, 36, 62, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, > 50, 32, 45, 98, 91, 45, 49, 93, 32, 36, 53, 32, 45, 45, 101, 113, > 91, 45, 50, 93, 32, 36, 62, 32, 45, 42, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, > 101, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 97, > 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 97, 114, 100, 115, > 107, 101, 116, 99, 104, 98, 119, 32, 58, 32, 95, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 62, 61, 48, 44, 95, 100, 101, 110, 115, 105, 116, 121, > 62, 61, 48, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 48, 60, 61, > 95, 101, 100, 103, 101, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 60, > 61, 49, 48, 48, 44, 95, 105, 115, 95, 102, 97, 115, 116, 61, 123, 32, > 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 104, 97, 114, 100, 32, 66, 38, 87, 32, > 115, 107, 101, 116, 99, 104, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 61, 49, 48, 48, 48, 39, 44, 32, 39, 115, 97, > 109, 112, 108, 105, 110, 103, 61, 51, 39, 44, 32, 39, 111, 112, 97, 99, > 105, 116, 121, 61, 48, 46, 49, 39, 44, 32, 39, 101, 100, 103, 101, 95, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 50, 48, 39, 32, 97, 110, > 100, 32, 39, 105, 115, 95, 102, 97, 115, 116, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, > 98, 119, 32, 50, 48, 48, 44, 55, 48, 44, 48, 46, 49, 44, 49, 48, > 32, 45, 109, 101, 100, 105, 97, 110, 91, 45, 49, 93, 32, 50, 32, 45, > 45, 108, 111, 99, 97, 108, 32, 45, 114, 101, 118, 101, 114, 115, 101, 32, > 45, 98, 108, 117, 114, 91, 45, 49, 93, 32, 51, 32, 45, 98, 108, 101, > 110, 100, 32, 111, 118, 101, 114, 108, 97, 121, 32, 45, 101, 110, 100, 108, > 111, 99, 97, 108, 10, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, > 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, > 48, 125, 44, 36, 123, 50, 61, 53, 48, 125, 44, 36, 123, 51, 61, 48, > 46, 49, 125, 44, 36, 123, 52, 61, 50, 48, 125, 44, 36, 123, 53, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 104, 97, 114, 100, 32, 66, 38, 87, 32, 115, 107, 101, 116, 99, > 104, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 32, 36, 49, 44, 32, 100, 101, 110, 115, 105, 116, 121, 32, > 36, 50, 44, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 51, 32, 97, > 110, 100, 32, 101, 100, 103, 101, 32, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 32, 36, 52, 46, 34, 10, 45, 105, 102, 32, 123, 33, 36, 50, 125, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 32, 45, 102, 32, > 50, 53, 53, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 45, 32, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 45, 110, 32, 48, 44, 49, 10, 45, 105, 102, 32, 36, 53, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 103, 32, > 120, 121, 32, 45, 114, 118, 32, 45, 42, 91, 45, 50, 93, 32, 45, 49, > 32, 45, 97, 32, 99, 10, 45, 105, 102, 32, 36, 52, 32, 45, 45, 110, > 111, 114, 109, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 52, 37, 32, > 45, 42, 32, 45, 101, 110, 100, 105, 102, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 113, 117, 105, > 118, 101, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 123, 109, 97, > 120, 40, 49, 44, 49, 48, 45, 36, 50, 47, 54, 41, 125, 44, 36, 49, > 44, 48, 44, 36, 51, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 110, > 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, > 123, 48, 44, 110, 125, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, > 125, 32, 45, 103, 32, 120, 121, 32, 45, 114, 118, 32, 45, 42, 91, 45, > 50, 93, 32, 45, 49, 32, 45, 97, 32, 99, 32, 45, 42, 32, 36, 49, > 10, 45, 45, 110, 111, 114, 109, 32, 45, 103, 101, 91, 45, 49, 93, 32, > 36, 52, 37, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, > 111, 105, 115, 101, 91, 45, 49, 93, 32, 36, 50, 44, 50, 32, 45, 42, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 112, 111, 105, 110, 116, 99, 108, > 111, 117, 100, 51, 100, 91, 45, 49, 93, 32, 45, 115, 51, 100, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 54, 45, 45, 53, 44, 45, 51, 45, > 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 47, > 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 115, 91, 45, 49, 93, > 32, 120, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 99, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 48, 32, 45, 45, 45, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 43, 91, 45, 51, 44, 45, 50, 93, > 32, 45, 115, 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 105, 91, > 45, 51, 93, 32, 49, 44, 123, 104, 125, 32, 49, 44, 123, 104, 125, 32, > 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 120, 10, 45, 105, 91, 45, > 50, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, > 45, 105, 91, 45, 50, 93, 32, 40, 123, 50, 42, 104, 125, 44, 123, 104, > 125, 41, 10, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 50, 32, 49, > 44, 123, 104, 125, 44, 49, 44, 49, 44, 50, 42, 121, 32, 45, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, > 32, 120, 10, 51, 44, 123, 104, 125, 32, 49, 44, 123, 104, 125, 44, 49, > 44, 49, 44, 36, 51, 32, 45, 121, 91, 45, 54, 45, 45, 49, 93, 32, > 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 36, 119, 44, 36, > 104, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, > 44, 48, 44, 49, 44, 49, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, > 50, 93, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 101, 97, 114, > 116, 115, 32, 58, 32, 95, 100, 101, 110, 115, 105, 116, 121, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 104, 101, 97, 114, 116, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 100, 101, 110, 115, 105, 116, > 121, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 104, 101, > 97, 114, 116, 115, 32, 44, 10, 104, 101, 97, 114, 116, 115, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 104, 101, 97, > 114, 116, 32, 102, 105, 108, 116, 101, 114, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, 115, 105, > 116, 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 32, 45, 110, 111, 105, 115, > 101, 91, 45, 49, 93, 32, 36, 49, 44, 50, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 49, 32, 45, 42, 91, 45, 49, 44, 45, 50, 93, 32, 45, 95, 104, 101, > 97, 114, 116, 57, 120, 55, 10, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 49, 93, 32, 121, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 95, > 104, 101, 97, 114, 116, 57, 120, 55, 32, 58, 10, 40, 48, 44, 49, 44, > 49, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 44, 48, 59, 49, 44, > 49, 44, 49, 44, 49, 44, 48, 44, 49, 44, 49, 44, 49, 44, 49, 59, > 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, > 49, 59, 48, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, > 49, 44, 48, 59, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, 49, 44, > 49, 44, 48, 44, 48, 59, 48, 44, 48, 44, 48, 44, 49, 44, 49, 44, > 49, 44, 48, 44, 48, 44, 48, 59, 48, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 44, 48, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, > 58, 32, 95, 100, 101, 110, 115, 105, 116, 121, 62, 61, 48, 44, 95, 114, > 97, 100, 105, 117, 115, 62, 48, 44, 48, 60, 61, 95, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 60, 61, 49, 48, 48, 44, 48, 60, 61, 95, 111, > 112, 97, 99, 105, 116, 121, 60, 61, 49, 44, 95, 118, 111, 116, 101, 115, > 105, 122, 101, 91, 37, 93, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 104, 111, 117, 103, 104, 32, 66, 38, > 87, 32, 115, 107, 101, 116, 99, 104, 32, 101, 102, 102, 101, 99, 116, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, > 110, 115, 105, 116, 121, 61, 56, 39, 44, 32, 39, 114, 97, 100, 105, 117, > 115, 61, 53, 39, 44, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, > 61, 56, 48, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, > 46, 49, 39, 32, 97, 110, 100, 32, 39, 118, 111, 116, 101, 115, 105, 122, > 101, 61, 49, 48, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 44, 10, > 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 56, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 50, 61, 53, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 51, 61, 56, 48, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 51, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, 123, 52, 61, 48, > 46, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, 61, 49, 32, > 38, 38, 32, 36, 123, 53, 61, 49, 48, 48, 37, 125, 62, 48, 34, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 104, > 111, 117, 103, 104, 32, 66, 38, 87, 32, 115, 107, 101, 116, 99, 104, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, 115, 105, 116, 121, 32, > 36, 49, 44, 32, 114, 97, 100, 105, 117, 115, 32, 36, 50, 44, 32, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 32, 36, 51, 44, 32, 111, 112, 97, > 99, 105, 116, 121, 32, 36, 52, 32, 97, 110, 100, 32, 118, 111, 116, 101, > 115, 105, 122, 101, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, > 123, 48, 44, 110, 125, 10, 114, 101, 115, 61, 123, 114, 111, 117, 110, 100, > 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 92, 32, 36, 53, 125, 44, 36, 53, 42, 109, 97, 120, 40, 119, 44, > 104, 41, 44, 36, 53, 41, 41, 125, 32, 119, 61, 123, 119, 125, 32, 104, > 61, 123, 104, 125, 32, 114, 104, 111, 109, 97, 120, 61, 123, 115, 113, 114, > 116, 40, 119, 94, 50, 43, 104, 94, 50, 41, 47, 50, 125, 10, 45, 104, > 111, 117, 103, 104, 32, 36, 114, 101, 115, 44, 36, 114, 101, 115, 32, 45, > 110, 32, 48, 44, 50, 53, 53, 10, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 51, 37, 32, 45, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 91, 45, 49, 93, > 10, 45, 115, 51, 100, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 54, > 45, 45, 53, 44, 45, 51, 45, 45, 49, 93, 32, 45, 114, 91, 45, 49, > 93, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, > 32, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 48, 44, > 49, 10, 45, 115, 91, 45, 49, 93, 32, 120, 44, 50, 10, 45, 42, 91, > 45, 50, 93, 32, 123, 50, 42, 112, 105, 47, 36, 114, 101, 115, 125, 10, > 45, 42, 91, 45, 49, 93, 32, 123, 36, 114, 104, 111, 109, 97, 120, 47, > 36, 114, 101, 115, 125, 10, 45, 45, 99, 111, 115, 91, 45, 50, 93, 32, > 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 43, 91, 45, > 49, 93, 32, 123, 36, 119, 47, 50, 125, 10, 45, 45, 115, 105, 110, 91, > 45, 51, 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, > 45, 43, 91, 45, 49, 93, 32, 123, 36, 104, 47, 50, 125, 10, 45, 114, > 109, 91, 45, 51, 93, 10, 45, 105, 91, 45, 51, 93, 32, 91, 45, 51, > 93, 10, 45, 99, 111, 115, 91, 45, 52, 93, 32, 45, 115, 105, 110, 91, > 45, 51, 93, 32, 45, 42, 91, 45, 52, 44, 45, 51, 93, 32, 49, 48, > 48, 48, 48, 10, 45, 45, 43, 91, 45, 50, 93, 32, 91, 45, 51, 93, > 10, 45, 45, 45, 91, 45, 50, 93, 32, 91, 45, 53, 93, 10, 45, 45, > 91, 45, 52, 93, 32, 91, 45, 53, 93, 10, 45, 43, 91, 45, 51, 93, > 32, 91, 45, 54, 93, 10, 45, 114, 109, 91, 45, 54, 44, 45, 53, 93, > 10, 45, 105, 91, 45, 51, 93, 32, 49, 44, 123, 104, 125, 32, 49, 44, > 123, 104, 125, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 120, 10, > 45, 105, 91, 45, 50, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, > 39, 125, 41, 32, 45, 105, 91, 45, 50, 93, 32, 40, 123, 50, 42, 104, > 125, 44, 123, 104, 125, 41, 10, 49, 44, 123, 104, 125, 44, 49, 44, 49, > 44, 50, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 50, 42, 121, > 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 120, 10, 51, 44, 123, 104, 125, 44, 49, 44, 49, > 44, 48, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 36, 52, 10, > 45, 121, 91, 45, 54, 45, 45, 49, 93, 32, 45, 97, 91, 45, 54, 45, > 45, 49, 93, 32, 121, 10, 36, 119, 44, 36, 104, 44, 49, 44, 49, 44, > 50, 53, 53, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, > 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 110, 109, > 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, > 105, 103, 104, 116, 114, 97, 121, 115, 32, 58, 32, 49, 48, 48, 60, 61, > 95, 100, 101, 110, 115, 105, 116, 121, 60, 61, 48, 44, 95, 99, 120, 44, > 95, 99, 121, 44, 95, 114, 97, 121, 95, 108, 101, 110, 103, 116, 104, 62, > 61, 48, 44, 95, 114, 97, 121, 95, 97, 116, 116, 101, 110, 117, 97, 116, > 105, 111, 110, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 71, 101, 110, 101, 114, 97, 116, 101, 32, 114, 97, 121, 32, 108, 105, 103, > 104, 116, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 101, 100, 103, > 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 115, 32, 118, 97, 108, 117, 101, 115, 32, > 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, 53, 48, 37, 39, 44, > 32, 39, 99, 120, 61, 48, 46, 53, 39, 44, 32, 39, 99, 121, 61, 48, > 46, 53, 39, 44, 32, 39, 114, 97, 121, 95, 108, 101, 110, 103, 116, 104, > 61, 48, 46, 57, 39, 32, 97, 110, 100, 32, 39, 114, 97, 121, 95, 97, > 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 61, 48, 46, 53, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 108, 105, 103, 104, 116, 114, 97, 121, > 115, 32, 44, 32, 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, > 108, 105, 103, 104, 116, 114, 97, 121, 115, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 53, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 49, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, 123, 52, > 61, 49, 125, 32, 38, 38, 32, 36, 123, 53, 61, 49, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 46, 53, 125, > 44, 36, 123, 51, 61, 48, 46, 53, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 114, 97, 121, 32, > 108, 105, 103, 104, 116, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, 115, 105, 116, > 121, 32, 36, 49, 44, 32, 99, 101, 110, 116, 101, 114, 32, 40, 36, 50, > 44, 36, 51, 41, 44, 32, 114, 97, 121, 32, 108, 101, 110, 103, 116, 104, > 32, 36, 52, 32, 97, 110, 100, 32, 97, 116, 116, 101, 110, 117, 97, 116, > 105, 111, 110, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, > 42, 32, 45, 49, 32, 45, 108, 116, 32, 36, 49, 37, 32, 45, 101, 117, > 99, 108, 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 50, > 44, 36, 51, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 108, 111, 103, > 50, 40, 119, 41, 125, 32, 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, > 93, 32, 123, 50, 94, 36, 62, 125, 32, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 102, 117, 110, 99, 116, 105, > 111, 110, 49, 100, 32, 48, 46, 53, 44, 48, 44, 49, 44, 123, 36, 52, > 42, 119, 125, 44, 49, 44, 123, 49, 43, 40, 36, 52, 43, 49, 45, 36, > 53, 41, 42, 119, 125, 44, 48, 32, 45, 114, 91, 45, 49, 93, 32, 64, > 123, 45, 50, 44, 119, 125, 44, 49, 44, 49, 44, 49, 44, 48, 10, 40, > 49, 44, 123, 119, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 119, 125, 44, 49, 44, 49, 44, 49, 44, 51, 32, 45, 47, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 112, > 111, 108, 97, 114, 50, 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 36, > 50, 44, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 108, 105, 103, 104, 116, 95, 114, 101, 108, 105, > 101, 102, 32, 58, 32, 95, 97, 109, 98, 105, 101, 110, 116, 95, 108, 105, > 103, 104, 116, 44, 95, 115, 112, 101, 99, 117, 108, 97, 114, 95, 108, 105, > 103, 104, 116, 110, 101, 115, 115, 44, 95, 115, 112, 101, 99, 117, 108, 97, > 114, 95, 115, 105, 122, 101, 44, 95, 108, 105, 103, 104, 116, 95, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 44, 95, 100, 97, 114, 107, 110, 101, > 115, 115, 44, 95, 120, 108, 44, 95, 121, 108, 44, 95, 122, 108, 44, 95, > 122, 115, 99, 97, 108, 101, 44, 95, 111, 112, 97, 99, 105, 116, 121, 95, > 98, 117, 109, 112, 109, 97, 112, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, > 32, 114, 101, 108, 105, 101, 102, 32, 108, 105, 103, 104, 116, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 40, 115, 41, 32, 58, 32, 39, > 97, 109, 98, 105, 101, 110, 116, 95, 108, 105, 103, 104, 116, 61, 48, 46, > 51, 39, 44, 32, 39, 115, 112, 101, 99, 117, 108, 97, 114, 95, 108, 105, > 103, 104, 116, 110, 101, 115, 115, 61, 48, 46, 53, 39, 44, 32, 39, 115, > 112, 101, 99, 117, 108, 97, 114, 95, 115, 105, 122, 101, 61, 48, 46, 50, > 39, 44, 32, 39, 100, 97, 114, 107, 110, 101, 115, 115, 61, 48, 39, 44, > 32, 39, 120, 108, 61, 48, 46, 50, 39, 44, 32, 39, 121, 108, 61, 122, > 108, 61, 48, 46, 53, 39, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 122, 115, 99, 97, 108, 101, 61, 49, 39, 44, 32, 39, 111, 112, > 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 111, 112, > 97, 99, 105, 116, 121, 95, 98, 117, 109, 112, 109, 97, 112, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, > 45, 108, 105, 103, 104, 116, 95, 114, 101, 108, 105, 101, 102, 91, 45, 49, > 93, 32, 48, 46, 51, 44, 52, 44, 48, 46, 49, 44, 48, 10, 108, 105, > 103, 104, 116, 95, 114, 101, 108, 105, 101, 102, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 48, 46, 51, 125, 44, 36, 123, 50, 61, > 48, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, 50, 125, 44, 36, 123, > 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 46, 50, 125, 44, 36, 123, > 54, 61, 48, 46, 53, 125, 44, 36, 123, 55, 61, 48, 46, 53, 125, 44, > 36, 123, 56, 61, 49, 125, 44, 36, 123, 57, 61, 49, 125, 44, 36, 123, > 49, 48, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 114, 101, 108, 105, 101, 102, 32, 108, 105, 103, 104, > 116, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 40, 123, 45, 36, 54, 125, 44, 123, 49, 45, > 36, 54, 125, 59, 123, 45, 36, 54, 125, 44, 123, 49, 45, 36, 54, 125, > 94, 123, 45, 36, 55, 125, 44, 123, 45, 36, 55, 125, 59, 123, 49, 45, > 36, 55, 125, 44, 123, 49, 45, 36, 55, 125, 94, 36, 56, 44, 36, 56, > 59, 36, 56, 44, 36, 56, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 51, 44, 51, 10, 45, > 105, 102, 32, 36, 49, 48, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 45, 50, 93, 32, 51, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 45, 51, 93, 32, 45, 101, 108, 115, 101, 32, 45, 45, 116, 111, 95, 114, > 103, 98, 91, 45, 50, 93, 32, 45, 110, 111, 114, 109, 91, 45, 49, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 98, 91, 45, 49, 93, 32, 36, > 53, 37, 32, 45, 103, 91, 45, 49, 93, 32, 120, 121, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 36, 57, 32, 32, 45, > 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 45, 111, 114, 105, 101, > 110, 116, 97, 116, 105, 111, 110, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, 32, > 99, 32, 45, 43, 91, 45, 51, 45, 45, 49, 93, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 123, > 36, 54, 42, 49, 48, 48, 125, 37, 44, 123, 36, 55, 42, 49, 48, 48, > 125, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, > 32, 49, 32, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 45, 49, 10, 45, 47, 91, 45, 49, 93, 32, 123, 40, 36, > 51, 42, 109, 97, 120, 40, 119, 44, 104, 41, 41, 94, 50, 125, 32, 45, > 101, 120, 112, 91, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 50, 32, 45, 43, 91, 45, 49, 93, 32, 36, 49, 10, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 36, 52, 32, > 45, 42, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 77, 125, 10, 45, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 91, 48, 93, > 32, 45, 43, 91, 48, 44, 45, 49, 93, 32, 45, 97, 32, 99, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 111, 115, 97, 105, 99, 32, 58, 32, 95, 100, 101, 110, 115, 105, 116, > 121, 62, 61, 48, 44, 95, 101, 100, 103, 101, 115, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 114, 101, 97, 116, 101, 32, 114, 97, 110, 100, 111, 109, 32, 109, 111, 115, > 97, 105, 99, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, 48, 46, 56, 39, > 32, 97, 110, 100, 32, 39, 101, 100, 103, 101, 115, 61, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 109, 111, 115, 97, 105, 99, 32, 44, 10, > 109, 111, 115, 97, 105, 99, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 48, 46, 56, 125, 44, 36, 123, 50, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 109, 111, > 115, 97, 105, 99, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, > 115, 105, 116, 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 108, 97, 98, 101, 108, 48, 61, 123, 49, 43, 105, 109, 125, 32, 45, > 43, 32, 36, 108, 97, 98, 101, 108, 48, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 123, > 36, 49, 42, 50, 125, 44, 50, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, > 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 119, > 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 123, 105, 102, 40, 36, 50, 44, 48, 44, 49, 41, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 50, 32, 45, 45, > 108, 91, 45, 49, 93, 32, 45, 103, 116, 32, 48, 32, 45, 115, 32, 99, > 32, 45, 97, 110, 100, 32, 45, 101, 110, 100, 108, 32, 45, 45, 91, 45, > 50, 93, 32, 36, 108, 97, 98, 101, 108, 48, 32, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 101, 108, 115, 101, 32, 45, 45, 91, 45, 49, > 93, 32, 36, 108, 97, 98, 101, 108, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 108, 100, 95, 112, 104, 111, > 116, 111, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 111, 108, 100, 32, 112, 104, 111, 116, 111, 32, 101, 102, 102, 101, > 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 111, 108, > 100, 95, 112, 104, 111, 116, 111, 10, 111, 108, 100, 95, 112, 104, 111, 116, > 111, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 111, 108, 100, 32, 112, 104, 111, 116, 111, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 110, 111, 105, 115, 101, 32, 50, 48, 32, > 45, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, 51, 48, 44, 54, 48, > 32, 45, 98, 32, 50, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, > 48, 48, 32, 45, 102, 114, 97, 109, 101, 95, 102, 117, 122, 122, 121, 32, > 50, 48, 44, 50, 48, 44, 54, 44, 51, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 115, 104, 97, 100, 111, 119, 95, 112, 97, 116, 99, 104, 32, > 48, 46, 55, 53, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 115, > 101, 112, 105, 97, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 112, 101, 110, 99, 105, 108, 98, 119, 32, 58, 32, 95, 115, 105, 122, > 101, 62, 61, 48, 44, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, > 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 66, 38, 87, 32, 112, 101, 110, 99, 105, 108, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 105, 122, 101, 61, 48, 46, 51, 39, 32, 97, 110, 100, 32, > 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 54, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 112, 101, 110, 99, 105, 108, 98, 119, 32, > 44, 10, 112, 101, 110, 99, 105, 108, 98, 119, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 48, 46, 51, 125, 44, 36, 123, 50, 61, > 54, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 66, 38, 87, 32, 112, 101, 110, 99, 105, 108, 32, 101, 102, > 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, > 100, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 50, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 32, 45, 110, 111, > 114, 109, 32, 45, 98, 32, 36, 49, 32, 45, 115, 104, 97, 114, 112, 101, > 110, 32, 52, 48, 48, 48, 32, 45, 115, 109, 111, 111, 116, 104, 32, 36, > 50, 44, 48, 44, 49, 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, > 45, 115, 113, 114, 116, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, > 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 112, 111, 108, 97, 114, 111, 105, 100, 32, 58, 32, 95, 115, 105, > 122, 101, 49, 62, 61, 48, 44, 95, 115, 105, 122, 101, 50, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, > 32, 112, 111, 108, 97, 114, 111, 105, 100, 32, 101, 102, 102, 101, 99, 116, > 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, > 105, 122, 101, 49, 61, 49, 48, 39, 32, 97, 110, 100, 32, 39, 115, 105, > 122, 101, 50, 61, 50, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 112, 111, 108, 97, 114, 111, 105, 100, > 32, 53, 44, 51, 48, 32, 45, 114, 111, 116, 97, 116, 101, 32, 50, 48, > 32, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, 44, 32, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, 10, 112, 111, > 108, 97, 114, 111, 105, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 50, 61, 50, 48, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 112, 111, 108, 97, 114, > 111, 105, 100, 32, 101, 102, 102, 101, 99, 116, 32, 105, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 98, 111, 114, 100, > 101, 114, 115, 32, 115, 105, 122, 101, 115, 32, 36, 49, 32, 97, 110, 100, > 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 45, 32, 50, 53, > 53, 32, 45, 114, 32, 123, 49, 48, 48, 43, 36, 49, 125, 37, 44, 123, > 49, 48, 48, 43, 36, 49, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 114, 32, 49, > 48, 48, 37, 44, 123, 49, 48, 48, 43, 36, 50, 125, 37, 44, 49, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 32, 45, 43, 32, 50, 53, > 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, > 108, 121, 103, 111, 110, 105, 122, 101, 32, 58, 32, 95, 119, 97, 114, 112, > 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, > 95, 109, 105, 110, 95, 97, 114, 101, 97, 91, 37, 93, 62, 61, 48, 44, > 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 95, 120, 91, 37, 93, > 62, 48, 44, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 95, 121, > 91, 37, 93, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 112, 111, 108, 121, 103, 111, 110, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 119, 97, 114, 112, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 61, 51, 48, 48, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 61, 50, 37, 39, 44, 32, 39, 109, 105, 110, 95, 97, 114, 101, > 97, 61, 48, 46, 49, 37, 39, 44, 32, 39, 114, 101, 115, 111, 108, 117, > 116, 105, 111, 110, 95, 120, 61, 114, 101, 115, 111, 108, 117, 116, 105, 111, > 110, 95, 121, 61, 49, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 112, 111, 108, 121, 103, 111, 110, 105, 122, 101, 32, 44, 10, 112, 111, > 108, 121, 103, 111, 110, 105, 122, 101, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 51, 48, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 51, 61, 48, 46, 49, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 52, 61, 49, 48, 37, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 53, 61, 36, 52, 125, 62, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 80, 111, 108, 121, 103, 111, 110, 105, 122, 101, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 119, 97, 114, 112, 32, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 44, 32, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 44, 32, 109, 105, 110, 105, > 109, 97, 108, 32, 97, 114, 101, 97, 32, 36, 51, 32, 97, 110, 100, 32, > 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 115, 32, 40, 36, 52, 44, > 36, 53, 41, 46, 34, 10, 45, 118, 32, 45, 32, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, > 98, 32, 36, 50, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, > 111, 114, 109, 91, 45, 49, 93, 32, 45, 103, 91, 45, 49, 93, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 42, 91, > 45, 49, 93, 32, 123, 49, 47, 48, 46, 49, 43, 109, 97, 120, 40, 97, > 98, 115, 40, 105, 109, 41, 44, 97, 98, 115, 40, 105, 77, 41, 41, 125, > 10, 114, 101, 115, 120, 61, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, > 110, 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 52, 125, 44, 119, 42, 36, 52, 44, 119, 47, > 36, 52, 41, 45, 49, 41, 41, 125, 10, 114, 101, 115, 121, 61, 123, 109, > 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 53, 125, > 44, 104, 42, 36, 53, 44, 104, 47, 36, 53, 41, 45, 49, 41, 41, 125, > 10, 45, 112, 108, 97, 110, 101, 51, 100, 32, 49, 44, 49, 44, 36, 114, > 101, 115, 120, 44, 36, 114, 101, 115, 121, 32, 45, 42, 51, 100, 91, 45, > 49, 93, 32, 64, 123, 48, 44, 119, 45, 49, 125, 44, 64, 123, 48, 44, > 104, 45, 49, 125, 44, 49, 10, 45, 115, 51, 100, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 50, 93, 32, 45, 105, 91, 45, 50, 93, 32, 40, > 48, 59, 123, 104, 45, 49, 125, 41, 32, 45, 114, 91, 45, 50, 93, 32, > 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 50, 93, 32, 45, 121, 91, 45, 50, 93, 10, 91, 45, > 52, 93, 32, 45, 97, 91, 45, 55, 45, 45, 50, 93, 32, 121, 32, 45, > 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, > 49, 44, 45, 49, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, > 120, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 45, 119, > 97, 114, 112, 91, 49, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 32, > 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, > 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 99, 120, 121, > 122, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 121, 91, > 45, 49, 93, 32, 45, 106, 91, 50, 93, 32, 91, 45, 49, 93, 44, 48, > 44, 56, 32, 45, 114, 109, 91, 45, 51, 44, 45, 49, 93, 10, 91, 48, > 93, 44, 91, 48, 93, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 45, 49, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 50, 32, 45, 114, 109, 91, 49, 93, 10, 45, 105, 102, 32, 123, 36, 51, > 62, 48, 125, 10, 109, 105, 110, 95, 97, 114, 101, 97, 61, 64, 123, 48, > 44, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 92, 32, 36, 51, 125, 44, 36, 51, 42, 119, 42, 104, 44, 36, 51, > 41, 125, 10, 45, 45, 97, 114, 101, 97, 91, 45, 49, 93, 32, 48, 44, > 49, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 109, 105, 110, 95, 97, > 114, 101, 97, 32, 45, 43, 91, 45, 50, 93, 32, 49, 32, 45, 42, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, > 45, 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 98, 108, 101, 110, 100, 91, 48, 44, 45, > 49, 93, 32, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 115, 116, 101, 114, 95, 101, > 100, 103, 101, 115, 32, 58, 32, 48, 60, 61, 95, 101, 100, 103, 101, 95, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 60, 61, 49, 48, 48, 44, 48, > 60, 61, 95, 101, 100, 103, 101, 95, 115, 104, 97, 100, 101, 60, 61, 49, > 48, 48, 44, 95, 101, 100, 103, 101, 95, 116, 104, 105, 99, 107, 110, 101, > 115, 115, 62, 61, 48, 44, 95, 101, 100, 103, 101, 95, 97, 110, 116, 105, > 97, 108, 105, 97, 115, 105, 110, 103, 62, 61, 48, 44, 48, 60, 61, 95, > 112, 111, 115, 116, 101, 114, 105, 122, 97, 116, 105, 111, 110, 95, 108, 101, > 118, 101, 108, 60, 61, 49, 53, 44, 95, 112, 111, 115, 116, 101, 114, 105, > 122, 97, 116, 105, 111, 110, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, > 105, 110, 103, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 112, 111, 115, 116, 101, 114, 32, 101, 100, 103, > 101, 115, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 101, 100, 103, 101, 95, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 61, 52, 48, 39, 44, 32, 39, 101, 100, 103, > 101, 95, 115, 104, 97, 100, 101, 61, 53, 39, 44, 32, 39, 101, 100, 103, > 101, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, 48, 46, 53, 39, > 44, 32, 39, 101, 100, 103, 101, 95, 97, 110, 116, 105, 97, 108, 105, 97, > 115, 105, 110, 103, 61, 49, 48, 39, 44, 32, 39, 112, 111, 115, 116, 101, > 114, 105, 122, 97, 116, 105, 111, 110, 95, 108, 101, 118, 101, 108, 61, 49, > 50, 39, 32, 97, 110, 100, 32, 39, 112, 111, 115, 116, 101, 114, 105, 122, > 97, 116, 105, 111, 110, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, 105, > 110, 103, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 112, 111, > 115, 116, 101, 114, 95, 101, 100, 103, 101, 115, 32, 44, 10, 112, 111, 115, > 116, 101, 114, 95, 101, 100, 103, 101, 115, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 52, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 49, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 48, > 48, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 53, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 52, 61, 49, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 53, 61, 49, 50, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 53, 60, 61, 49, 53, 32, 38, 38, 32, 36, 123, 54, 61, 48, 125, > 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 112, 111, 115, 116, 101, 114, 32, 101, 100, 103, 101, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 101, 100, 103, 101, 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, > 36, 49, 44, 32, 101, 100, 103, 101, 32, 115, 104, 97, 100, 101, 32, 36, > 50, 44, 32, 101, 100, 103, 101, 32, 116, 104, 105, 99, 107, 110, 101, 115, > 115, 32, 36, 51, 44, 32, 101, 100, 103, 101, 32, 97, 110, 116, 105, 97, > 108, 105, 97, 115, 105, 110, 103, 32, 36, 52, 44, 32, 36, 53, 32, 108, > 101, 118, 101, 108, 32, 111, 102, 32, 112, 111, 115, 116, 101, 114, 105, 122, > 97, 116, 105, 111, 110, 32, 97, 110, 100, 32, 112, 111, 115, 116, 101, 114, > 105, 122, 97, 116, 105, 111, 110, 32, 97, 110, 116, 105, 97, 108, 105, 97, > 115, 105, 110, 103, 32, 36, 54, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 108, 91, 48, 93, 10, 45, 45, 103, 32, 120, 121, 44, 49, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 110, 111, 114, 109, > 91, 45, 49, 93, 32, 45, 98, 91, 45, 49, 93, 32, 36, 51, 32, 45, > 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, 49, 44, 48, > 44, 49, 44, 123, 109, 97, 120, 40, 48, 44, 40, 49, 48, 48, 45, 40, > 36, 49, 37, 41, 94, 48, 46, 49, 42, 49, 48, 48, 41, 42, 50, 53, > 53, 37, 41, 125, 44, 48, 46, 57, 57, 44, 123, 109, 105, 110, 40, 50, > 53, 53, 44, 40, 49, 48, 49, 45, 40, 36, 49, 37, 41, 94, 48, 46, > 49, 42, 49, 48, 48, 43, 36, 50, 41, 42, 50, 53, 53, 37, 41, 125, > 44, 48, 46, 48, 49, 44, 50, 53, 53, 44, 48, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 49, 10, 45, 105, 102, 32, 36, 52, 32, 45, 115, > 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 123, 109, 105, 110, 40, 53, > 48, 44, 36, 52, 41, 125, 44, 48, 44, 49, 44, 123, 36, 52, 47, 52, > 48, 125, 44, 123, 36, 52, 47, 52, 48, 125, 44, 48, 46, 56, 44, 57, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 53, 32, > 45, 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, 32, 123, 114, > 111, 117, 110, 100, 40, 40, 52, 45, 115, 113, 114, 116, 40, 36, 53, 43, > 49, 41, 41, 42, 51, 50, 43, 50, 41, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 54, 32, 45, 115, 109, 111, 111, 116, 104, > 91, 48, 93, 32, 123, 109, 105, 110, 40, 53, 48, 44, 36, 54, 41, 125, > 44, 48, 44, 49, 44, 123, 36, 54, 47, 52, 48, 125, 44, 123, 36, 54, > 47, 52, 48, 125, 44, 48, 46, 56, 44, 57, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 42, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 115, 116, 101, 114, 95, > 104, 111, 112, 101, 32, 58, 32, 95, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 72, 111, 112, 101, 32, 115, 116, 101, 110, 99, 105, > 108, 32, 112, 111, 115, 116, 101, 114, 32, 101, 102, 102, 101, 99, 116, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 61, 51, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 112, 111, 115, 116, 101, 114, 95, 104, 111, 112, 101, 32, 44, > 10, 112, 111, 115, 116, 101, 114, 95, 104, 111, 112, 101, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 51, 125, 62, 61, 48, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, > 32, 72, 111, 112, 101, 32, 115, 116, 101, 110, 99, 105, 108, 32, 112, 111, > 115, 116, 101, 114, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 97, 112, 112, > 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 115, 109, 111, 111, 116, 104, 32, 50, 48, > 48, 44, 48, 44, 49, 44, 36, 49, 44, 49, 34, 10, 45, 113, 117, 97, > 110, 116, 105, 122, 101, 32, 55, 44, 48, 32, 45, 102, 32, 39, 105, 102, > 40, 105, 33, 61, 53, 44, 105, 44, 105, 43, 49, 45, 50, 42, 40, 121, > 37, 50, 41, 41, 39, 10, 40, 48, 44, 51, 50, 44, 52, 55, 59, 48, > 44, 51, 50, 44, 52, 55, 59, 50, 48, 57, 44, 49, 44, 50, 51, 59, > 50, 48, 57, 44, 49, 44, 50, 51, 59, 57, 48, 44, 49, 52, 49, 44, > 49, 52, 53, 59, 45, 49, 44, 45, 49, 44, 45, 49, 59, 50, 53, 51, > 44, 50, 50, 49, 44, 49, 51, 56, 41, 32, 45, 112, 101, 114, 109, 117, > 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 10, 45, 109, 97, 112, > 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, 91, 49, 93, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 111, 100, 105, 108, 105, 117, 115, 32, > 58, 32, 48, 60, 61, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 60, > 61, 49, 48, 48, 44, 95, 48, 60, 61, 116, 104, 105, 99, 107, 110, 101, > 115, 115, 60, 61, 49, 48, 48, 44, 95, 115, 104, 97, 114, 112, 110, 101, > 115, 115, 62, 61, 48, 44, 95, 110, 98, 95, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 115, 62, 48, 44, 95, 111, 102, 102, 115, 101, 116, > 44, 95, 99, 111, 108, 111, 114, 95, 109, 111, 100, 101, 61, 123, 32, 48, > 61, 100, 97, 114, 107, 101, 114, 32, 124, 32, 49, 61, 98, 114, 105, 103, > 104, 116, 101, 114, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 114, 111, 100, 105, 108, 105, 117, 115, 32, 40, > 102, 114, 97, 99, 116, 97, 108, 105, 117, 115, 45, 108, 105, 107, 101, 41, > 32, 102, 105, 108, 116, 101, 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, > 49, 48, 39, 44, 32, 39, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, > 49, 48, 39, 44, 32, 39, 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, > 52, 48, 48, 39, 44, 32, 39, 110, 98, 95, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 115, 61, 55, 39, 44, 32, 39, 111, 102, 102, 115, > 101, 116, 61, 48, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, 114, > 95, 109, 111, 100, 101, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 114, 111, 100, 105, 108, 105, 117, 115, 32, 49, 50, 44, 49, 48, 44, > 51, 48, 48, 44, 49, 48, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, 49, 48, 44, 54, > 10, 114, 111, 100, 105, 108, 105, 117, 115, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 49, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 49, 60, 61, 50, 48, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, > 48, 48, 32, 38, 38, 32, 36, 123, 51, 61, 52, 48, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 52, 61, 55, 125, 62, 48, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, > 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 114, 111, 100, 105, 108, 105, 117, 115, 32, 102, 105, 108, 116, 101, > 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, > 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 44, 32, > 116, 104, 105, 99, 107, 110, 101, 115, 115, 32, 36, 50, 44, 32, 115, 104, > 97, 114, 112, 110, 101, 115, 115, 32, 36, 51, 44, 32, 36, 52, 32, 111, > 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 115, 44, 32, 111, 102, 102, > 115, 101, 116, 32, 36, 53, 32, 97, 110, 100, 32, 34, 92, 10, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 54, 44, 98, 114, 105, 103, > 104, 116, 101, 114, 44, 100, 97, 114, 107, 101, 114, 125, 34, 32, 99, 111, > 108, 111, 114, 32, 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 114, 118, 10, 45, 105, 102, 32, 123, 33, 36, 54, 125, 32, 45, > 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 45, 102, 91, 45, 49, 93, 32, 48, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 110, 125, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 114, 111, 117, 110, 100, 40, 36, 52, 41, > 125, 10, 97, 110, 103, 108, 101, 61, 123, 36, 53, 43, 36, 62, 42, 49, > 56, 48, 47, 114, 111, 117, 110, 100, 40, 36, 52, 41, 125, 10, 45, 45, > 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 91, 45, 50, 93, 32, > 36, 49, 37, 44, 123, 36, 49, 42, 36, 50, 47, 49, 48, 48, 125, 37, > 44, 36, 97, 110, 103, 108, 101, 44, 49, 32, 45, 98, 91, 45, 49, 93, > 32, 48, 46, 55, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, > 93, 32, 36, 51, 32, 45, 109, 97, 120, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, > 105, 102, 32, 123, 33, 36, 54, 125, 32, 45, 110, 101, 103, 97, 116, 105, > 118, 101, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 118, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 116, 97, 105, 110, 101, 100, 95, 103, 108, 97, 115, 115, 32, 58, 32, 95, > 101, 100, 103, 101, 115, 91, 37, 93, 62, 61, 48, 44, 32, 115, 104, 97, > 100, 105, 110, 103, 62, 61, 48, 44, 32, 105, 115, 95, 116, 104, 105, 110, > 95, 115, 101, 112, 97, 114, 97, 116, 111, 114, 115, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, > 101, 110, 101, 114, 97, 116, 101, 32, 115, 116, 97, 105, 110, 101, 100, 32, > 103, 108, 97, 115, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 101, 100, 103, 101, 115, 61, 52, 48, 37, 39, > 44, 32, 39, 115, 104, 97, 100, 105, 110, 103, 61, 48, 46, 50, 39, 32, > 97, 110, 100, 32, 39, 105, 115, 95, 112, 114, 101, 99, 105, 115, 101, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 116, 97, 105, 110, > 101, 100, 95, 103, 108, 97, 115, 115, 32, 44, 10, 115, 116, 97, 105, 110, > 101, 100, 95, 103, 108, 97, 115, 115, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 52, 48, 37, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 48, 46, 50, 125, 62, 61, 48, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 115, 116, 97, 105, 110, > 101, 100, 32, 103, 108, 97, 115, 115, 32, 101, 102, 102, 101, 99, 116, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 101, 100, 103, 101, 115, 32, 36, 49, 44, 32, 115, 104, 97, 100, 105, > 110, 103, 32, 36, 50, 32, 97, 110, 100, 32, 116, 104, 105, 110, 45, 115, > 101, 112, 97, 114, 97, 116, 111, 114, 115, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 51, 44, 101, 110, 97, 98, 108, 101, 100, > 44, 100, 105, 115, 97, 98, 108, 101, 100, 125, 34, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 105, 109, 61, 123, 105, 109, 45, 49, 125, 32, 45, > 45, 32, 36, 105, 109, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, > 95, 110, 111, 114, 109, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 49, > 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, 10, 45, 100, 105, > 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 115, 104, > 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 49, 101, 49, 48, 32, 45, > 110, 101, 113, 91, 45, 49, 93, 32, 48, 10, 45, 105, 102, 32, 36, 51, > 32, 45, 115, 107, 101, 108, 101, 116, 111, 110, 91, 45, 49, 93, 32, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 105, 115, 116, 97, 110, 99, > 101, 91, 45, 49, 93, 32, 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, 45, > 50, 93, 32, 36, 105, 109, 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 49, 32, 32, 45, 94, 91, 45, 49, 93, 32, 36, 50, 32, 45, 42, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 97, 114, 32, 58, 32, 95, > 119, 105, 100, 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, > 48, 44, 95, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, 62, 48, > 44, 48, 60, 61, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 60, 61, > 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 115, 116, 97, 114, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, > 107, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 119, 105, 100, 116, 104, 61, 104, 101, 105, 103, 104, 116, 61, 53, 49, > 50, 39, 44, 32, 39, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, > 61, 53, 39, 32, 97, 110, 100, 32, 39, 116, 104, 105, 99, 107, 110, 101, > 115, 115, 61, 48, 46, 51, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 45, 115, 116, 97, 114, 32, 44, 10, 115, 116, 97, > 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 53, 49, 50, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 50, 61, 36, > 49, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 51, 61, 53, 125, 62, > 48, 32, 38, 38, 32, 36, 123, 52, 61, 48, 46, 53, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 52, 60, 61, 49, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 36, 49, 120, 36, 50, 32, > 115, 116, 97, 114, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, > 44, 32, 119, 105, 116, 104, 32, 36, 51, 32, 98, 114, 97, 110, 99, 104, > 101, 115, 32, 97, 110, 100, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, > 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 10, > 45, 115, 116, 97, 114, 51, 100, 32, 36, 51, 44, 36, 52, 32, 45, 99, > 111, 108, 51, 100, 32, 49, 32, 45, 99, 51, 100, 32, 45, 110, 51, 100, > 32, 45, 42, 51, 100, 32, 36, 49, 44, 36, 50, 10, 36, 49, 44, 36, > 50, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, > 44, 50, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 110, 109, 32, 34, > 91, 72, 101, 97, 114, 116, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, > 115, 107, 93, 34, 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 116, 97, 114, 115, 32, 58, 32, 95, > 100, 101, 110, 115, 105, 116, 121, 91, 37, 93, 62, 61, 48, 44, 95, 100, > 101, 112, 116, 104, 62, 61, 48, 44, 95, 115, 105, 122, 101, 62, 48, 44, > 95, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, 62, 61, 49, 44, > 48, 60, 61, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 60, 61, 49, > 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, > 61, 48, 44, 95, 82, 44, 95, 71, 44, 95, 66, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, > 100, 32, 114, 97, 110, 100, 111, 109, 32, 115, 116, 97, 114, 115, 32, 116, > 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, 110, > 115, 105, 116, 121, 61, 49, 48, 37, 39, 44, 32, 39, 100, 101, 112, 116, > 104, 61, 49, 39, 44, 32, 39, 115, 105, 122, 101, 61, 51, 50, 39, 44, > 32, 39, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, 61, 53, 39, > 44, 32, 39, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, 48, 46, 51, > 56, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, > 48, 46, 53, 39, 44, 32, 39, 82, 61, 71, 61, 66, 61, 50, 48, 48, > 39, 32, 97, 110, 100, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 116, 97, 114, 115, 32, 44, > 10, 115, 116, 97, 114, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 49, 48, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, > 61, 51, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, 52, 61, 53, 125, > 62, 61, 49, 32, 38, 38, 32, 36, 123, 53, 61, 48, 46, 51, 56, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, 32, 38, 38, 32, > 36, 123, 54, 61, 48, 46, 53, 125, 62, 61, 48, 34, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 55, 61, 50, 48, 48, 125, 44, 36, 123, 56, 61, > 36, 55, 125, 44, 36, 123, 57, 61, 36, 56, 125, 44, 36, 123, 49, 48, > 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, > 32, 36, 49, 32, 114, 97, 110, 100, 111, 109, 32, 115, 116, 97, 114, 115, > 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 100, 101, 112, 116, 104, 32, 36, 50, 44, 32, 115, 105, 122, 101, > 32, 36, 51, 44, 32, 36, 52, 32, 98, 114, 97, 110, 99, 104, 101, 115, > 44, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, 32, 36, 53, 44, 32, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 54, 44, 32, 99, > 111, 108, 111, 114, 32, 40, 36, 55, 44, 36, 56, 44, 36, 57, 41, 32, > 97, 110, 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 49, 48, 46, > 34, 10, 45, 118, 32, 45, 10, 45, 115, 116, 97, 114, 51, 100, 32, 36, > 52, 44, 36, 53, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, > 50, 53, 53, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 51, 10, > 45, 108, 91, 45, 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 52, > 32, 123, 114, 111, 117, 110, 100, 40, 50, 42, 36, 51, 41, 125, 44, 123, > 114, 111, 117, 110, 100, 40, 50, 42, 36, 51, 41, 125, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 48, 93, 44, 53, > 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 44, 48, > 32, 45, 114, 51, 100, 91, 48, 93, 32, 48, 44, 48, 44, 49, 44, 57, > 48, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 32, 45, > 101, 110, 100, 108, 10, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, > 52, 45, 45, 49, 93, 32, 48, 32, 45, 114, 50, 100, 121, 91, 45, 52, > 45, 45, 49, 93, 32, 36, 51, 32, 45, 98, 91, 45, 52, 45, 45, 49, > 93, 32, 36, 54, 44, 48, 32, 45, 114, 91, 45, 52, 45, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 52, 32, 45, 115, 104, 91, 123, 45, 49, > 45, 36, 62, 125, 93, 32, 48, 44, 50, 32, 45, 102, 99, 91, 45, 49, > 93, 32, 36, 55, 44, 36, 56, 44, 36, 57, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 32, 91, 45, 52, 45, 45, 49, 93, 32, > 45, 108, 91, 36, 62, 44, 45, 52, 45, 45, 49, 93, 10, 78, 61, 123, > 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 119, 42, 104, 42, > 36, 49, 44, 36, 49, 41, 47, 52, 44, 49, 44, 49, 41, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 52, 10, 50, 44, 36, 78, 32, 45, 114, > 97, 110, 100, 91, 45, 49, 93, 32, 45, 49, 44, 49, 32, 49, 44, 36, > 78, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 105, 91, 45, > 50, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, > 45, 43, 91, 45, 50, 93, 32, 48, 46, 53, 32, 45, 105, 91, 45, 50, > 93, 32, 40, 36, 78, 59, 36, 78, 41, 10, 40, 49, 44, 48, 59, 49, > 44, 123, 36, 78, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 50, 44, 36, 78, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, > 100, 91, 45, 49, 93, 32, 52, 44, 36, 78, 44, 49, 44, 49, 44, 49, > 32, 45, 121, 91, 45, 53, 44, 45, 51, 45, 45, 49, 93, 32, 45, 97, > 91, 45, 53, 45, 45, 49, 93, 32, 121, 10, 45, 114, 118, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 115, 112, 114, 105, 116, 101, 115, 51, 100, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, > 123, 48, 46, 55, 53, 42, 64, 123, 48, 44, 119, 125, 125, 44, 123, 48, > 46, 55, 53, 42, 64, 123, 48, 44, 104, 125, 125, 44, 123, 49, 48, 48, > 48, 42, 36, 50, 125, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, > 48, 44, 36, 49, 48, 44, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 52, 45, 45, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 107, 101, > 116, 99, 104, 98, 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 95, > 110, 98, 95, 111, 114, 105, 101, 110, 116, 115, 62, 48, 44, 95, 115, 116, > 97, 114, 116, 95, 97, 110, 103, 108, 101, 44, 95, 97, 110, 103, 108, 101, > 95, 114, 97, 110, 103, 101, 62, 61, 48, 44, 95, 108, 101, 110, 103, 116, > 104, 62, 61, 48, 44, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, > 61, 48, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 95, 111, 112, > 97, 99, 105, 116, 121, 44, 95, 98, 103, 102, 97, 99, 116, 111, 114, 62, > 61, 48, 44, 95, 100, 101, 110, 115, 105, 116, 121, 62, 48, 44, 95, 115, > 104, 97, 114, 112, 110, 101, 115, 115, 62, 61, 48, 44, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, > 121, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 62, 61, 48, 44, 95, 99, 111, 104, 101, 114, 101, 110, 99, 101, 62, 61, > 48, 44, 95, 105, 115, 95, 98, 111, 111, 115, 116, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 44, 95, 105, 115, 95, 99, 117, 114, 118, 101, 100, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 92, 110, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, 107, 101, 116, > 99, 104, 32, 101, 102, 102, 101, 99, 116, 32, 116, 111, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 111, 114, 105, 101, 110, > 116, 115, 61, 50, 39, 44, 32, 39, 115, 116, 97, 114, 116, 95, 97, 110, > 103, 108, 101, 61, 52, 53, 39, 44, 32, 39, 97, 110, 103, 108, 101, 95, > 114, 97, 110, 103, 101, 61, 49, 56, 48, 39, 44, 32, 39, 108, 101, 110, > 103, 116, 104, 61, 51, 48, 39, 44, 32, 39, 116, 104, 114, 101, 115, 104, > 111, 108, 100, 61, 49, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 48, 46, 48, 51, 39, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 98, 103, 102, 97, 99, 116, 111, 114, 61, 48, 39, 44, 32, 39, > 100, 101, 110, 115, 105, 116, 121, 61, 48, 46, 54, 39, 44, 32, 39, 115, > 104, 97, 114, 112, 110, 101, 115, 115, 61, 48, 46, 49, 39, 44, 32, 39, > 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 61, 48, 46, 54, 39, 44, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 50, > 53, 39, 44, 32, 39, 99, 111, 104, 101, 114, 101, 110, 99, 101, 61, 49, > 39, 44, 32, 39, 105, 115, 95, 98, 111, 111, 115, 116, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 105, 115, 95, 99, 117, 114, 118, 101, 100, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 107, 101, 116, 99, 104, > 98, 119, 32, 49, 32, 45, 45, 108, 111, 99, 97, 108, 32, 45, 114, 101, > 118, 101, 114, 115, 101, 32, 45, 98, 108, 117, 114, 91, 45, 49, 93, 32, > 51, 32, 45, 98, 108, 101, 110, 100, 32, 111, 118, 101, 114, 108, 97, 121, > 32, 45, 101, 110, 100, 108, 111, 99, 97, 108, 10, 115, 107, 101, 116, 99, > 104, 98, 119, 32, 58, 10, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, 51, 61, 49, 56, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 52, 61, 51, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 123, 53, 61, 49, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 55, 61, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 56, 61, 48, 46, 54, 125, 62, 48, 32, 38, 38, 32, 36, > 123, 57, 61, 48, 46, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 49, 48, 61, 48, 46, 54, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 49, 49, 61, 48, 46, 50, 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 49, 50, 61, 49, 125, 62, 61, 48, 34, 10, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 52, 53, 125, 44, 36, 123, 54, 61, 48, 46, 48, > 51, 125, 44, 36, 123, 49, 51, 61, 48, 125, 44, 36, 123, 49, 52, 61, > 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 66, 38, 87, 32, 115, 107, 101, 116, 99, 104, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 100, 105, 102, 102, 117, 115, 105, 111, 110, > 116, 101, 110, 115, 111, 114, 115, 32, 36, 57, 44, 36, 49, 48, 44, 36, > 49, 49, 44, 36, 49, 50, 10, 119, 61, 49, 32, 104, 61, 49, 32, 45, > 105, 91, 48, 93, 32, 49, 32, 45, 109, 51, 100, 32, 48, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 47, 91, > 45, 49, 93, 32, 123, 109, 97, 120, 40, 105, 77, 44, 105, 109, 41, 125, > 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 110, 109, 91, > 45, 49, 93, 32, 64, 123, 45, 52, 44, 110, 125, 44, 49, 10, 45, 105, > 102, 32, 123, 36, 119, 33, 61, 119, 124, 124, 36, 104, 33, 61, 104, 125, > 10, 45, 114, 109, 91, 48, 93, 32, 123, 36, 56, 42, 119, 42, 104, 47, > 40, 36, 49, 42, 115, 113, 114, 116, 40, 36, 52, 41, 41, 125, 10, 45, > 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 123, 64, 123, 45, > 50, 44, 104, 125, 45, 49, 125, 32, 45, 114, 97, 110, 100, 91, 45, 50, > 93, 32, 48, 44, 123, 64, 123, 45, 51, 44, 119, 125, 45, 49, 125, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 49, 52, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 97, 108, 112, 104, > 97, 61, 123, 40, 36, 50, 43, 36, 62, 42, 36, 51, 47, 36, 49, 41, > 42, 112, 105, 47, 49, 56, 48, 125, 10, 45, 45, 42, 91, 45, 52, 93, > 32, 123, 99, 111, 115, 40, 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, > 45, 42, 91, 45, 52, 93, 32, 123, 115, 105, 110, 40, 36, 97, 108, 112, > 104, 97, 41, 125, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 45, 42, 91, 45, 52, 93, 32, 123, 99, 111, 115, 40, 36, 97, 108, 112, > 104, 97, 41, 125, 32, 45, 45, 42, 91, 45, 52, 93, 32, 123, 115, 105, > 110, 40, 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, 43, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 44, 50, 10, 45, 105, 102, 32, 36, 49, 51, 32, 45, 111, 114, 105, 101, > 110, 116, 97, 116, 105, 111, 110, 91, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, 44, 119, > 125, 10, 120, 121, 61, 64, 123, 48, 44, 40, 36, 62, 44, 48, 41, 125, > 44, 64, 123, 48, 44, 40, 36, 62, 44, 49, 41, 125, 10, 45, 105, 102, > 32, 123, 64, 123, 45, 53, 44, 40, 36, 120, 121, 41, 125, 43, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 41, 125, 60, 36, 53, 125, 32, 111, 112, > 97, 99, 61, 36, 54, 32, 45, 101, 108, 115, 101, 32, 111, 112, 97, 99, > 61, 123, 36, 55, 42, 36, 54, 125, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 36, 111, 112, 97, 99, 10, 45, 45, 115, 116, 114, 101, > 97, 109, 108, 105, 110, 101, 51, 100, 91, 45, 49, 93, 32, 36, 120, 121, > 44, 48, 44, 36, 52, 44, 48, 46, 56, 44, 48, 44, 48, 44, 49, 32, > 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 48, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 36, 111, 112, 97, 99, 44, 49, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 115, 116, 114, 101, > 97, 109, 108, 105, 110, 101, 51, 100, 91, 45, 49, 93, 32, 36, 120, 121, > 44, 48, 44, 36, 52, 44, 48, 46, 56, 44, 48, 44, 49, 44, 49, 32, > 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 48, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 36, 111, 112, 97, 99, 44, 49, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 49, 10, 97, 108, 112, 104, 97, 61, 123, 40, 36, 50, > 43, 36, 62, 42, 36, 51, 47, 36, 49, 41, 42, 112, 105, 47, 49, 56, > 48, 125, 10, 45, 45, 42, 91, 45, 52, 93, 32, 123, 99, 111, 115, 40, > 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, 45, 42, 91, 45, 52, 93, > 32, 123, 115, 105, 110, 40, 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 45, 42, 91, 45, 52, 93, > 32, 123, 99, 111, 115, 40, 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, > 45, 42, 91, 45, 52, 93, 32, 123, 115, 105, 110, 40, 36, 97, 108, 112, > 104, 97, 41, 125, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 105, 102, 32, 36, > 49, 51, 32, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 91, > 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 123, 48, 44, 119, 125, 10, 120, 61, 64, 123, 48, 44, > 40, 36, 62, 44, 48, 41, 125, 32, 121, 61, 64, 123, 48, 44, 40, 36, > 62, 44, 49, 41, 125, 10, 45, 105, 102, 32, 123, 64, 123, 45, 53, 44, > 40, 36, 120, 44, 36, 121, 41, 125, 43, 64, 123, 45, 51, 44, 40, 36, > 120, 44, 36, 121, 41, 125, 60, 36, 53, 125, 32, 111, 112, 97, 99, 61, > 36, 54, 32, 45, 101, 108, 115, 101, 32, 111, 112, 97, 99, 61, 123, 36, > 55, 42, 36, 54, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 36, 111, 112, 97, 99, 10, 45, 108, 105, 110, 101, 91, 45, 50, 93, > 32, 123, 36, 120, 45, 36, 52, 42, 64, 123, 45, 49, 44, 40, 36, 120, > 44, 36, 121, 44, 48, 44, 48, 41, 125, 125, 44, 123, 36, 121, 45, 36, > 52, 42, 64, 123, 45, 49, 44, 40, 36, 120, 44, 36, 121, 44, 48, 44, > 49, 41, 125, 125, 44, 92, 10, 123, 36, 120, 43, 36, 52, 42, 64, 123, > 45, 49, 44, 40, 36, 120, 44, 36, 121, 44, 48, 44, 48, 41, 125, 125, > 44, 123, 36, 121, 43, 36, 52, 42, 64, 123, 45, 49, 44, 40, 36, 120, > 44, 36, 121, 44, 48, 44, 49, 41, 125, 125, 44, 92, 10, 123, 51, 42, > 36, 111, 112, 97, 99, 125, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, > 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, > 52, 45, 45, 50, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, > 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 111, 110, 103, 101, 32, > 58, 32, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, 112, 111, 110, 103, 101, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 115, 105, 122, 101, 61, 49, 51, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 115, 112, 111, 110, 103, 101, 32, 44, 10, 115, 112, > 111, 110, 103, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 49, 51, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 115, 112, 111, 110, 103, 101, 32, 102, 105, 108, 116, 101, > 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 98, 114, 117, 115, 104, 32, 115, 105, 122, 101, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 32, 45, 110, 111, 105, 115, 101, 91, 45, > 49, 93, 32, 50, 48, 44, 50, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, > 42, 91, 45, 49, 44, 45, 50, 93, 10, 45, 95, 99, 105, 114, 99, 108, > 101, 32, 36, 49, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 95, > 99, 105, 114, 99, 108, 101, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, > 37, 50, 61, 61, 48, 125, 32, 45, 105, 32, 50, 44, 50, 32, 45, 101, > 108, 115, 101, 32, 45, 105, 32, 49, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, 93, 32, > 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 45, 49, 93, 32, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, > 32, 45, 115, 113, 114, 116, 91, 45, 49, 93, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 46, 56, 53, 44, 48, 46, 56, 54, 32, 45, 42, 91, 45, > 49, 93, 32, 45, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 101, 110, 99, 105, 108, 32, > 58, 32, 95, 114, 97, 100, 105, 117, 115, 91, 37, 93, 62, 61, 48, 44, > 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, 116, 101, > 110, 99, 105, 108, 32, 102, 105, 108, 116, 101, 114, 32, 111, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 97, 100, 105, 117, 115, > 61, 51, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, 116, 101, 114, 97, 116, 105, > 111, 110, 115, 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, > 116, 101, 110, 99, 105, 108, 32, 49, 44, 49, 48, 44, 51, 10, 115, 116, > 101, 110, 99, 105, 108, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 51, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 56, 125, > 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 115, 116, 101, 110, 99, 105, 108, 32, 102, 105, 108, 116, > 101, 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 44, 32, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 32, 97, 110, 100, > 32, 36, 51, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 110, 32, 48, 44, 49, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 51, 32, 45, 98, 32, 36, 49, 32, 45, 117, > 110, 115, 104, 97, 114, 112, 32, 123, 36, 49, 43, 36, 50, 125, 44, 49, > 48, 48, 48, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 116, 101, 110, 99, 105, 108, 98, 119, 32, 58, 32, 95, 101, 100, 103, 101, > 115, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 66, 38, 87, 32, 115, 116, 101, 110, 99, 105, 108, 32, 101, > 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 101, 100, 103, 101, 115, 61, 49, 53, 39, 32, 97, 110, > 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 116, 101, 110, 99, 105, > 108, 98, 119, 32, 52, 48, 44, 52, 10, 115, 116, 101, 110, 99, 105, 108, > 98, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, > 53, 125, 44, 36, 123, 50, 61, 49, 48, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 66, 38, 87, 32, 115, 116, > 101, 110, 99, 105, 108, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 101, 100, > 103, 101, 115, 32, 36, 49, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, > 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, 101, 100, 103, > 101, 115, 91, 48, 93, 32, 36, 49, 32, 45, 113, 117, 97, 110, 116, 105, > 122, 101, 91, 48, 93, 32, 51, 44, 48, 44, 49, 32, 45, 98, 91, 48, > 93, 32, 36, 50, 10, 45, 115, 104, 97, 114, 112, 101, 110, 91, 48, 93, > 32, 49, 48, 48, 48, 48, 48, 48, 32, 45, 110, 91, 48, 93, 32, 48, > 44, 49, 32, 45, 42, 91, 48, 44, 45, 49, 93, 32, 45, 110, 91, 48, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 97, 32, 99, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 101, 116, 114, 105, 115, 32, 58, 32, 95, 115, > 99, 97, 108, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 116, 101, 116, 114, 105, 115, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 115, 99, 97, 108, 101, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 116, 101, 116, 114, 105, 115, 32, 49, 48, 10, 116, 101, 116, > 114, 105, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 116, 101, 116, 114, 105, 115, 32, 101, 102, 102, 101, 99, 116, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 115, 99, 97, 108, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 44, 49, > 44, 123, 115, 125, 32, 45, 114, 32, 36, 49, 37, 44, 36, 49, 37, 44, > 36, 49, 37, 44, 49, 48, 48, 37, 44, 50, 32, 45, 110, 32, 48, 44, > 50, 53, 53, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 49, 48, > 44, 49, 44, 48, 32, 45, 114, 32, 36, 119, 104, 32, 45, 98, 32, 50, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 51, 48, 48, 44, 49, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 114, 104, 111, 108, 32, 58, > 32, 95, 77, 62, 48, 44, 95, 78, 62, 48, 44, 95, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, 99, 111, 108, 111, 114, > 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, > 97, 116, 101, 32, 77, 120, 78, 32, 65, 110, 100, 121, 32, 87, 97, 114, > 104, 111, 108, 45, 108, 105, 107, 101, 32, 97, 114, 116, 119, 111, 114, 107, > 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 77, 61, 51, 39, 44, 32, 39, 78, 61, 77, 39, 44, 32, 39, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 50, 39, 32, 97, 110, 100, > 32, 39, 99, 111, 108, 111, 114, 61, 50, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 119, 97, 114, 104, 111, 108, 32, 53, 44, 51, 44, 51, > 44, 52, 48, 10, 119, 97, 114, 104, 111, 108, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 51, 125, 44, 36, 123, 50, 61, 36, 49, > 125, 44, 36, 123, 51, 61, 50, 125, 44, 36, 123, 52, 61, 50, 48, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, > 32, 36, 49, 120, 36, 50, 32, 65, 110, 100, 121, 32, 87, 97, 114, 104, > 111, 108, 45, 108, 105, 107, 101, 32, 97, 114, 116, 119, 111, 114, 107, 32, > 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 114, 48, 61, 123, 49, 48, 48, 47, 109, 97, 120, 40, > 36, 49, 44, 36, 50, 41, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 110, 111, 114, 109, 32, > 45, 98, 32, 36, 51, 32, 45, 114, 32, 36, 114, 48, 37, 44, 36, 114, > 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 113, 117, 97, > 110, 116, 105, 122, 101, 32, 54, 32, 45, 110, 32, 48, 44, 53, 32, 45, > 114, 111, 117, 110, 100, 32, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 10, 40, 48, > 44, 49, 44, 50, 44, 51, 44, 52, 44, 53, 41, 32, 45, 110, 91, 45, > 49, 93, 32, 51, 50, 44, 50, 50, 52, 32, 54, 44, 49, 44, 49, 44, > 50, 44, 49, 50, 56, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, > 32, 36, 52, 44, 48, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, > 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 45, > 109, 97, 112, 91, 48, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 50, 93, 10, 45, 100, 111, 110, 101, 32, 45, 100, 111, 110, 101, 32, > 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 91, 94, 48, > 93, 32, 36, 49, 44, 36, 50, 32, 45, 110, 109, 91, 49, 93, 32, 64, > 123, 48, 44, 110, 125, 44, 49, 32, 45, 114, 109, 91, 48, 93, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 119, 101, 97, 118, 101, 32, 58, 32, 95, > 100, 101, 110, 115, 105, 116, 121, 62, 61, 48, 44, 48, 60, 61, 95, 116, > 104, 105, 99, 107, 110, 101, 115, 115, 60, 61, 49, 48, 48, 44, 48, 60, > 61, 95, 115, 104, 97, 100, 111, 119, 60, 61, 49, 48, 48, 44, 95, 115, > 104, 97, 100, 105, 110, 103, 62, 61, 48, 44, 95, 102, 105, 98, 101, 114, > 115, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, > 102, 105, 98, 101, 114, 115, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 62, 61, 48, 44, 95, 97, 110, 103, 108, 101, 44, 45, 49, 60, 61, > 95, 120, 95, 99, 117, 114, 118, 97, 116, 117, 114, 101, 60, 61, 49, 44, > 45, 49, 60, 61, 95, 121, 95, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 60, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 119, 101, 97, 118, 101, 32, 101, 102, 102, 101, 99, 116, 32, > 116, 111, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 97, 110, 103, 108, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 123, 32, 48, 61, 48, 32, 100, 101, 103, 46, 32, 124, 32, 49, 61, 50, > 50, 46, 53, 32, 100, 101, 103, 46, 32, 124, 32, 50, 61, 52, 53, 32, > 100, 101, 103, 46, 32, 124, 32, 51, 61, 54, 55, 46, 53, 32, 100, 101, > 103, 46, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 100, 101, 110, 115, 105, 116, 121, 61, 54, 39, 44, 32, 39, 116, 104, 105, > 99, 107, 110, 101, 115, 115, 61, 54, 53, 39, 44, 32, 39, 115, 104, 97, > 100, 111, 119, 61, 52, 48, 39, 44, 32, 39, 115, 104, 97, 100, 105, 110, > 103, 61, 48, 46, 53, 39, 44, 32, 39, 102, 105, 98, 101, 114, 115, 95, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 48, 39, 44, 32, 39, 102, > 105, 98, 101, 114, 115, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 61, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, 32, 97, > 110, 100, 32, 39, 99, 117, 114, 118, 97, 116, 117, 114, 101, 95, 120, 61, > 99, 117, 114, 118, 97, 116, 117, 114, 101, 95, 121, 61, 48, 39, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 119, 101, 97, 118, 101, 32, 44, 10, 119, 101, > 97, 118, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 54, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 54, > 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 48, 48, > 32, 38, 38, 32, 36, 123, 51, 61, 52, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 51, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, 123, 52, > 61, 48, 46, 53, 125, 62, 61, 48, 34, 10, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 123, 53, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 54, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 55, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 55, 60, 61, 51, 32, 38, > 38, 32, 36, 123, 56, 61, 48, 125, 62, 61, 45, 49, 32, 38, 38, 32, > 36, 56, 60, 61, 49, 32, 38, 38, 32, 36, 123, 57, 61, 48, 125, 62, > 61, 45, 49, 32, 38, 38, 32, 36, 57, 60, 61, 49, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 119, 101, 97, > 118, 101, 32, 101, 102, 102, 101, 99, 116, 32, 116, 111, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 115, 116, > 114, 105, 112, 115, 44, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, 32, > 36, 50, 44, 32, 115, 104, 97, 100, 111, 119, 32, 36, 51, 44, 32, 115, > 104, 97, 100, 105, 110, 103, 32, 36, 52, 44, 32, 34, 92, 10, 34, 102, > 105, 98, 101, 114, 115, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, > 36, 53, 32, 97, 110, 100, 32, 102, 105, 98, 101, 114, 115, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 54, 44, 32, 97, 110, 103, > 108, 101, 32, 34, 123, 36, 55, 42, 50, 50, 46, 53, 125, 34, 32, 100, > 101, 103, 46, 32, 97, 110, 100, 32, 99, 117, 114, 118, 97, 116, 117, 114, > 101, 115, 32, 40, 36, 56, 44, 36, 57, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 108, 91, 48, 93, 10, 119, 61, 123, 114, 111, 117, 110, > 100, 40, 109, 97, 120, 40, 119, 44, 104, 41, 47, 36, 49, 44, 49, 44, > 49, 41, 125, 32, 104, 61, 36, 119, 32, 115, 61, 123, 40, 49, 48, 48, > 45, 36, 51, 41, 42, 50, 53, 53, 37, 125, 32, 112, 61, 123, 109, 97, > 120, 40, 48, 46, 48, 49, 44, 36, 52, 41, 125, 10, 49, 44, 36, 104, > 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 48, 44, 53, 48, 37, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, > 45, 94, 91, 45, 49, 93, 32, 36, 112, 32, 45, 99, 91, 45, 49, 93, > 32, 53, 48, 37, 44, 49, 48, 48, 37, 32, 45, 114, 91, 45, 49, 93, > 32, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 36, 50, > 42, 36, 119, 37, 41, 41, 125, 44, 49, 48, 48, 37, 10, 36, 119, 44, > 49, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 53, 48, 37, 32, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, > 94, 91, 45, 49, 93, 32, 36, 112, 32, 45, 99, 91, 45, 49, 93, 32, > 53, 48, 37, 44, 49, 48, 48, 37, 32, 45, 42, 91, 45, 49, 93, 32, > 45, 49, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 123, > 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 36, 50, 42, 36, > 104, 37, 41, 41, 125, 10, 45, 45, 42, 91, 45, 49, 93, 32, 45, 49, > 32, 45, 45, 42, 91, 45, 51, 93, 32, 45, 49, 32, 45, 110, 91, 45, > 52, 44, 45, 50, 93, 32, 48, 44, 36, 115, 32, 45, 110, 91, 45, 51, > 44, 45, 49, 93, 32, 36, 115, 44, 50, 53, 53, 10, 123, 119, 125, 44, > 49, 32, 49, 44, 91, 45, 51, 93, 32, 45, 114, 97, 110, 100, 91, 45, > 50, 44, 45, 49, 93, 32, 48, 44, 49, 32, 45, 98, 91, 45, 50, 44, > 45, 49, 93, 32, 36, 54, 37, 32, 45, 110, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 36, 53, 44, 36, 53, 32, 45, 114, 91, 45, 49, 93, 32, > 91, 45, 52, 93, 32, 45, 43, 91, 45, 53, 93, 32, 91, 45, 49, 93, > 32, 45, 43, 91, 45, 52, 44, 45, 49, 93, 32, 45, 43, 91, 45, 53, > 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 45, 102, 91, 45, 51, 93, 32, 50, 53, 53, 32, 45, 97, 91, > 45, 52, 44, 45, 49, 93, 32, 99, 32, 45, 45, 102, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 97, 109, 112, 95, 120, 61, 123, 36, 56, 42, 40, 36, 119, 45, 119, > 41, 47, 50, 125, 32, 97, 109, 112, 95, 121, 61, 123, 36, 57, 42, 40, > 36, 119, 45, 119, 41, 47, 50, 125, 10, 45, 114, 91, 45, 52, 45, 45, > 49, 93, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 102, 91, 45, > 52, 93, 32, 39, 105, 40, 120, 43, 36, 97, 109, 112, 95, 120, 42, 115, > 105, 110, 40, 121, 47, 104, 42, 112, 105, 41, 44, 121, 44, 48, 44, 99, > 44, 49, 44, 50, 41, 39, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, > 40, 120, 45, 36, 97, 109, 112, 95, 120, 42, 115, 105, 110, 40, 121, 47, > 104, 42, 112, 105, 41, 44, 121, 44, 48, 44, 99, 44, 49, 44, 50, 41, > 39, 10, 45, 102, 91, 45, 51, 93, 32, 39, 105, 40, 120, 44, 121, 43, > 36, 97, 109, 112, 95, 121, 42, 115, 105, 110, 40, 120, 47, 119, 42, 112, > 105, 41, 44, 48, 44, 99, 44, 49, 44, 50, 41, 39, 32, 45, 102, 91, > 45, 50, 93, 32, 39, 105, 40, 120, 44, 121, 45, 36, 97, 109, 112, 95, > 121, 42, 115, 105, 110, 40, 120, 47, 119, 42, 112, 105, 41, 44, 48, 44, > 99, 44, 49, 44, 50, 41, 39, 10, 45, 98, 108, 101, 110, 100, 91, 45, > 52, 44, 45, 51, 93, 32, 97, 108, 112, 104, 97, 32, 45, 98, 108, 101, > 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, 32, > 45, 99, 91, 45, 50, 44, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 47, 91, 45, 50, 44, 45, 49, 93, 32, 50, 53, 53, 32, 91, 45, > 49, 93, 32, 91, 45, 51, 93, 32, 45, 97, 91, 45, 52, 44, 45, 50, > 93, 32, 120, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, 114, 111, 116, > 97, 116, 101, 95, 116, 105, 108, 101, 97, 98, 108, 101, 91, 45, 49, 93, > 32, 123, 36, 55, 42, 50, 50, 46, 53, 125, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, > 48, 44, 50, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 119, 104, 105, 114, 108, 115, 32, 58, 32, 95, 116, 101, 120, 116, 117, > 114, 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 62, 61, 48, 44, 95, 100, 97, 114, 107, 110, 101, 115, 115, 62, 61, > 48, 44, 95, 108, 105, 103, 104, 116, 110, 101, 115, 115, 62, 61, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 114, 97, 110, > 100, 111, 109, 32, 119, 104, 105, 114, 108, 32, 116, 101, 120, 116, 117, 114, > 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 116, 101, 120, 116, 117, 114, 101, 61, 51, 39, 44, 32, 39, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 61, 54, 39, 44, 32, 39, 100, 97, 114, > 107, 110, 101, 115, 115, 61, 48, 46, 53, 39, 32, 97, 110, 100, 32, 39, > 108, 105, 103, 104, 116, 110, 101, 115, 115, 61, 49, 46, 56, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 119, 104, 105, 114, 108, 115, 32, 44, 10, > 119, 104, 105, 114, 108, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 51, 125, 44, 36, 123, 50, 61, 54, 125, 44, 36, 123, 51, > 61, 48, 46, 53, 125, 44, 36, 123, 52, 61, 49, 46, 56, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, 114, 97, 110, 100, > 111, 109, 32, 119, 104, 105, 114, 108, 32, 116, 101, 120, 116, 117, 114, 101, > 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 116, 101, 120, 116, 117, 114, 101, 32, 36, 49, 44, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 44, 32, 100, 97, 114, > 107, 110, 101, 115, 115, 32, 36, 51, 32, 97, 110, 100, 32, 108, 105, 103, > 104, 116, 110, 101, 115, 115, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, > 105, 115, 101, 91, 45, 49, 93, 32, 48, 46, 51, 44, 50, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 98, 91, 45, 49, 93, 32, > 36, 50, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, > 109, 91, 45, 49, 93, 32, 45, 94, 91, 45, 49, 93, 32, 48, 46, 50, > 32, 45, 100, 111, 110, 101, 10, 45, 110, 91, 45, 49, 93, 32, 36, 51, > 44, 36, 52, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 45, 42, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 58, 32, 87, 97, 114, 112, 105, 110, 103, 115, 10, > 35, 64, 103, 109, 105, 99, 32, 101, 117, 99, 108, 105, 100, 101, 97, 110, > 50, 112, 111, 108, 97, 114, 32, 58, 32, 95, 99, 120, 44, 95, 99, 121, > 44, 95, 110, 62, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, > 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, > 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 101, 117, 99, 108, 105, 100, 101, 97, > 110, 32, 116, 111, 32, 112, 111, 108, 97, 114, 32, 116, 114, 97, 110, 115, > 102, 111, 114, 109, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, 39, 44, 32, 39, > 110, 61, 49, 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 101, 117, > 99, 108, 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 44, 10, > 101, 117, 99, 108, 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 46, 53, 125, > 44, 36, 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 49, 125, > 44, 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 101, 117, 99, 108, 105, 100, 101, 97, 110, > 32, 116, 111, 32, 112, 111, 108, 97, 114, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 40, 123, 119, 125, 44, 123, 104, 125, > 41, 32, 40, 36, 49, 44, 36, 50, 41, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 32, 40, 123, 34, 115, 113, 114, 116, 40, 109, 97, 120, 40, > 34, 64, 123, 45, 49, 44, 48, 125, 34, 44, 34, 64, 123, 45, 50, 44, > 119, 125, 34, 45, 34, 64, 123, 45, 49, 44, 48, 125, 34, 41, 94, 50, > 32, 43, 32, 109, 97, 120, 40, 34, 64, 123, 45, 49, 44, 49, 125, 34, > 44, 34, 64, 123, 45, 50, 44, 104, 125, 34, 45, 34, 64, 123, 45, 49, > 44, 49, 125, 34, 41, 94, 50, 41, 34, 125, 41, 10, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 120, 10, 91, 45, 50, 93, 44, 91, 45, 50, > 93, 44, 49, 44, 49, 44, 64, 123, 45, 49, 44, 50, 125, 34, 42, 40, > 120, 47, 119, 41, 94, 36, 51, 42, 99, 111, 115, 40, 121, 42, 50, 42, > 112, 105, 47, 104, 41, 34, 32, 45, 43, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 48, 125, 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, > 49, 44, 49, 44, 64, 123, 45, 50, 44, 50, 125, 34, 42, 40, 120, 47, > 119, 41, 94, 36, 51, 42, 115, 105, 110, 40, 121, 42, 50, 42, 112, 105, > 47, 104, 41, 34, 32, 45, 43, 91, 45, 49, 93, 32, 64, 123, 45, 51, > 44, 49, 125, 10, 45, 114, 109, 91, 45, 51, 93, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, 36, 52, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, > 102, 111, 114, 109, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 114, 97, 110, 100, 111, 109, 32, 115, 109, 111, 111, 116, > 104, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 100, 101, 102, 111, 114, 109, 91, 48, 93, 32, 49, 48, 32, 45, 45, > 100, 101, 102, 111, 114, 109, 91, 48, 93, 32, 50, 48, 10, 100, 101, 102, > 111, 114, 109, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 114, 97, 110, 100, 111, 109, 32, 115, 109, 111, 111, 116, 104, > 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 50, 37, 44, 50, 37, 44, 49, 44, 50, 32, 45, 110, > 111, 105, 115, 101, 91, 45, 49, 93, 32, 36, 49, 32, 45, 114, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 50, > 44, 53, 32, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 44, 49, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 115, 104, 101, 121, 101, 32, > 58, 32, 95, 120, 44, 95, 121, 44, 48, 60, 61, 95, 114, 97, 100, 105, > 117, 115, 60, 61, 49, 48, 48, 44, 95, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 102, 105, 115, 104, 45, 101, 121, 101, 32, 100, 101, > 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 120, 61, 121, 61, 53, 48, 39, 44, > 32, 39, 114, 97, 100, 105, 117, 115, 61, 53, 48, 39, 32, 97, 110, 100, > 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 46, 50, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 102, 105, 115, 104, 101, 121, 101, > 32, 44, 10, 102, 105, 115, 104, 101, 121, 101, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 53, 48, 125, 44, 36, 123, 50, 61, 53, > 48, 125, 44, 36, 123, 51, 61, 53, 48, 125, 44, 36, 123, 52, 61, 49, > 46, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 70, 105, 115, 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, > 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 99, > 101, 110, 116, 101, 114, 101, 100, 32, 97, 116, 32, 40, 36, 49, 37, 44, > 36, 50, 37, 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, > 32, 36, 51, 37, 32, 97, 110, 100, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 32, 36, 52, 46, 34, 10, 45, 105, 102, 32, 123, 36, 52, 61, > 61, 48, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 32, 45, 61, 91, 45, 49, 93, 32, 49, > 44, 36, 49, 37, 44, 36, 50, 37, 32, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 99, 91, 45, 49, 93, 32, > 48, 44, 36, 51, 37, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, > 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 94, 91, 45, 49, > 93, 32, 123, 49, 47, 36, 52, 125, 10, 45, 105, 91, 45, 50, 93, 32, > 40, 123, 45, 36, 49, 47, 49, 48, 48, 125, 44, 123, 49, 45, 36, 49, > 47, 49, 48, 48, 125, 59, 123, 45, 36, 49, 47, 49, 48, 48, 125, 44, > 123, 49, 45, 36, 49, 47, 49, 48, 48, 125, 94, 123, 45, 36, 50, 47, > 49, 48, 48, 125, 44, 123, 45, 36, 50, 47, 49, 48, 48, 125, 59, 123, > 49, 45, 36, 50, 47, 49, 48, 48, 125, 44, 123, 49, 45, 36, 50, 47, > 49, 48, 48, 125, 41, 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 91, 45, 49, 93, 44, 49, 44, 50, 44, 51, 10, 45, 110, 91, > 45, 49, 93, 32, 48, 44, 123, 109, 97, 120, 40, 119, 44, 104, 41, 125, > 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 119, 97, 114, 112, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 108, 111, 119, 101, 114, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 44, 95, 102, 114, 101, 113, 117, 101, 110, 99, 121, 44, 95, > 111, 102, 102, 115, 101, 116, 95, 114, 91, 37, 93, 44, 95, 97, 110, 103, > 108, 101, 44, 95, 99, 120, 44, 95, 99, 121, 44, 95, 98, 111, 117, 110, > 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, > 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, > 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 102, 108, 111, > 119, 101, 114, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 61, 51, 48, 39, 44, 32, 39, 102, 114, > 101, 113, 117, 101, 110, 99, 121, 61, 54, 39, 44, 32, 39, 111, 102, 102, > 115, 101, 116, 95, 114, 61, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, > 61, 48, 39, 44, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, 39, > 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 50, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 108, 111, 119, 101, 114, 32, > 44, 10, 102, 108, 111, 119, 101, 114, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, 61, 54, 125, 44, > 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, > 53, 61, 48, 46, 53, 125, 44, 36, 123, 54, 61, 48, 46, 53, 125, 44, > 36, 123, 55, 61, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 102, 108, 111, 119, 101, 114, 32, 100, 101, 102, > 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 32, 36, 49, 44, 32, 102, 114, 101, 113, 117, 101, 110, 99, > 121, 32, 36, 50, 44, 32, 111, 102, 102, 115, 101, 116, 32, 36, 51, 44, > 32, 97, 110, 103, 108, 101, 32, 36, 52, 32, 100, 101, 103, 46, 32, 97, > 110, 100, 32, 99, 101, 110, 116, 101, 114, 32, 40, 36, 49, 44, 36, 50, > 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, 117, 99, 108, > 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 53, 44, 36, > 54, 44, 49, 44, 36, 55, 32, 45, 115, 104, 105, 102, 116, 32, 36, 51, > 44, 48, 44, 48, 44, 48, 44, 50, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 49, 44, 121, 32, 45, 47, 91, 45, 49, 93, 32, > 123, 104, 125, 32, 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 40, 123, > 36, 52, 47, 51, 54, 48, 125, 41, 32, 45, 43, 91, 45, 50, 93, 32, > 64, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 54, 46, 50, 56, 51, 49, 56, 53, 51, 32, 45, 115, 105, > 110, 91, 45, 49, 93, 10, 45, 42, 91, 45, 49, 93, 32, 36, 49, 32, > 45, 42, 91, 45, 49, 93, 32, 123, 119, 125, 32, 45, 47, 91, 45, 49, > 93, 32, 49, 48, 48, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 48, 44, 49, 32, 45, 119, 97, 114, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 36, 55, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 112, 111, 108, 97, 114, 50, 101, 117, 99, > 108, 105, 100, 101, 97, 110, 32, 36, 53, 44, 36, 54, 44, 49, 44, 49, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 107, 97, 108, 101, 105, 100, 111, > 115, 99, 111, 112, 101, 32, 58, 32, 95, 99, 120, 44, 95, 99, 121, 44, > 95, 114, 97, 100, 105, 117, 115, 44, 95, 97, 110, 103, 108, 101, 44, 95, > 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, > 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, > 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, > 101, 32, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 101, > 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, 39, > 44, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, 48, 48, 39, 44, 32, > 39, 97, 110, 103, 108, 101, 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, > 32, 44, 10, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 46, 53, 125, > 44, 36, 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 49, 48, > 48, 125, 44, 36, 123, 52, 61, 51, 48, 125, 44, 36, 123, 53, 61, 49, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, > 101, 32, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 101, > 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 99, 101, 110, 116, 101, 114, 32, > 40, 36, 49, 44, 36, 50, 41, 44, 32, 114, 97, 100, 105, 117, 115, 32, > 36, 51, 44, 32, 97, 110, 103, 108, 101, 32, 36, 52, 32, 100, 101, 103, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 49, 44, 36, 50, 44, 49, > 44, 36, 53, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 45, 99, 111, 108, 117, 109, 110, 115, 32, > 48, 44, 36, 51, 37, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, > 48, 44, 36, 52, 37, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 48, 44, 50, 32, 45, 110, 109, 91, 49, 93, 32, 64, 123, 48, > 44, 110, 125, 32, 45, 114, 109, 91, 48, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 112, 111, 108, 97, 114, 50, 101, 117, > 99, 108, 105, 100, 101, 97, 110, 32, 36, 49, 44, 36, 50, 44, 49, 44, > 36, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 97, 112, 95, 115, 112, 104, 101, 114, 101, 32, 58, 32, 95, 119, 105, 100, > 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, > 114, 97, 100, 105, 117, 115, 44, 95, 100, 105, 108, 97, 116, 105, 111, 110, > 62, 48, 44, 95, 102, 97, 100, 105, 110, 103, 62, 61, 48, 44, 95, 102, > 97, 100, 105, 110, 103, 95, 112, 111, 119, 101, 114, 62, 61, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 77, 97, 112, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 111, 110, 32, 97, > 32, 115, 112, 104, 101, 114, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 119, 105, 100, 116, 104, 61, 104, 101, 105, 103, 104, 116, 61, > 53, 49, 50, 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, 48, > 48, 39, 44, 32, 39, 100, 105, 108, 97, 116, 105, 111, 110, 61, 48, 46, > 53, 39, 44, 32, 39, 102, 97, 100, 105, 110, 103, 61, 48, 39, 32, 97, > 110, 100, 32, 39, 102, 97, 100, 105, 110, 103, 95, 112, 111, 119, 101, 114, > 61, 48, 46, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 97, > 112, 95, 115, 112, 104, 101, 114, 101, 32, 44, 10, 109, 97, 112, 95, 115, > 112, 104, 101, 114, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, 53, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 54, 61, 48, 46, 53, > 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 49, 48, 48, 125, 44, 36, 123, 52, 61, 48, 46, 53, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 77, 97, 112, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 111, 110, 32, 115, 112, 104, 101, 114, 101, 115, 32, 105, 110, > 32, 36, 49, 120, 36, 50, 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, > 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 51, 44, 32, 100, > 105, 108, 97, 116, 105, 111, 110, 32, 36, 52, 32, 97, 110, 100, 32, 102, > 97, 100, 105, 110, 103, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, > 114, 50, 61, 123, 40, 36, 51, 42, 109, 105, 110, 40, 36, 49, 44, 36, > 50, 41, 47, 50, 48, 48, 41, 94, 50, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 91, > 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 48, 48, > 37, 44, 48, 32, 45, 110, 109, 91, 48, 93, 32, 64, 123, 49, 44, 110, > 125, 32, 45, 97, 32, 121, 10, 40, 123, 45, 36, 49, 47, 50, 125, 44, > 123, 36, 49, 47, 50, 125, 41, 32, 40, 123, 45, 36, 50, 47, 50, 125, > 59, 123, 36, 50, 47, 50, 125, 41, 32, 45, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 36, 49, 44, 36, 50, 44, 49, 44, 49, 44, 51, 32, 45, > 97, 116, 97, 110, 50, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 36, 49, 44, 36, 50, 32, 45, 61, 91, > 45, 49, 93, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, > 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 44, 51, 32, > 45, 47, 91, 45, 49, 93, 32, 36, 114, 50, 32, 45, 115, 113, 114, 116, > 91, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 49, 10, > 45, 97, 115, 105, 110, 91, 45, 49, 93, 10, 45, 43, 91, 45, 50, 93, > 32, 123, 112, 105, 125, 32, 45, 42, 91, 45, 50, 93, 32, 123, 40, 64, > 123, 45, 51, 44, 119, 125, 45, 49, 41, 47, 40, 50, 42, 112, 105, 41, > 125, 10, 45, 42, 91, 45, 49, 93, 32, 123, 50, 47, 112, 105, 125, 32, > 45, 94, 91, 45, 49, 93, 32, 36, 52, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 64, 123, 45, 51, 44, 104, 125, 45, 49, 125, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, 32, 123, 64, > 123, 45, 51, 44, 104, 125, 45, 49, 125, 10, 45, 105, 102, 32, 36, 53, > 32, 45, 45, 103, 101, 91, 45, 49, 93, 32, 49, 32, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 36, 53, 37, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 94, 91, 45, 49, 93, 32, 36, 54, 32, 45, 99, > 91, 45, 50, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 45, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, > 45, 49, 44, 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 64, 123, 45, 51, 44, 100, 125, 10, 45, 45, 102, 91, 45, 49, 93, > 32, 122, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 45, > 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 49, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 112, 111, 108, 97, 114, 50, 101, 117, 99, 108, 105, 100, > 101, 97, 110, 32, 58, 32, 95, 99, 120, 44, 95, 99, 121, 44, 95, 110, > 62, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, > 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, > 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, > 100, 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 112, 111, 108, 97, 114, 32, 116, 111, 32, 101, 117, > 99, 108, 105, 100, 101, 97, 110, 32, 116, 114, 97, 110, 115, 102, 111, 114, > 109, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 99, 120, 61, 99, 121, 61, 48, 46, 53, 39, 44, 32, 39, 110, 61, 49, > 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 101, 117, 99, 108, 105, > 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 44, 32, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 112, 111, 108, 97, > 114, 50, 101, 117, 99, 108, 105, 100, 101, 97, 110, 91, 45, 49, 93, 32, > 44, 10, 112, 111, 108, 97, 114, 50, 101, 117, 99, 108, 105, 100, 101, 97, > 110, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 46, > 53, 125, 44, 36, 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, > 49, 125, 44, 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 112, 111, 108, 97, 114, 32, 116, > 111, 32, 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 40, 123, 119, 125, 44, 123, > 104, 125, 41, 32, 40, 36, 49, 44, 36, 50, 41, 32, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 32, 40, 123, 34, 115, 113, 114, 116, 40, 109, 97, > 120, 40, 34, 64, 123, 45, 49, 44, 48, 125, 34, 44, 34, 64, 123, 45, > 50, 44, 119, 125, 34, 45, 34, 64, 123, 45, 49, 44, 48, 125, 34, 41, > 94, 50, 32, 43, 32, 109, 97, 120, 40, 34, 64, 123, 45, 49, 44, 49, > 125, 34, 44, 34, 64, 123, 45, 50, 44, 104, 125, 34, 45, 34, 64, 123, > 45, 49, 44, 49, 125, 34, 41, 94, 50, 41, 34, 125, 41, 10, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 91, 45, 50, 93, 44, 91, > 45, 50, 93, 44, 49, 44, 49, 44, 34, 119, 42, 40, 115, 113, 114, 116, > 40, 40, 120, 45, 34, 64, 123, 45, 49, 44, 48, 125, 34, 41, 94, 50, > 32, 43, 32, 40, 121, 45, 34, 64, 123, 45, 49, 44, 49, 125, 34, 41, > 94, 50, 41, 47, 34, 64, 123, 45, 49, 44, 50, 125, 34, 41, 94, 40, > 49, 47, 36, 51, 41, 34, 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, > 44, 49, 44, 49, 44, 34, 40, 97, 116, 97, 110, 50, 40, 121, 45, 34, > 64, 123, 45, 50, 44, 49, 125, 34, 44, 120, 45, 34, 64, 123, 45, 50, > 44, 48, 125, 34, 41, 42, 104, 47, 40, 50, 42, 112, 105, 41, 43, 104, > 41, 37, 104, 34, 10, 45, 114, 109, 91, 45, 51, 93, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, 36, 52, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 97, 105, 110, 100, 114, 111, 112, 115, 32, 58, 32, 95, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 44, 95, 100, 101, 110, 115, 105, 116, 121, 62, 61, > 48, 44, 95, 119, 97, 118, 101, 108, 101, 110, 103, 116, 104, 62, 61, 48, > 44, 95, 109, 101, 114, 103, 105, 110, 103, 95, 115, 116, 101, 112, 115, 62, > 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 114, 97, 105, 110, 100, 114, 111, 112, 115, 32, 100, 101, 102, 111, > 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 32, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 61, 56, 48, 39, 44, 39, 100, 101, 110, 115, 105, 116, 121, 61, 48, 46, > 49, 39, 44, 32, 39, 119, 97, 118, 101, 108, 101, 110, 103, 116, 104, 61, > 49, 39, 32, 97, 110, 100, 32, 39, 109, 101, 114, 103, 105, 110, 103, 95, > 115, 116, 101, 112, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 114, 97, 105, 110, 100, 114, 111, 112, 115, 32, 44, 10, 114, 97, 105, > 110, 100, 114, 111, 112, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 50, 61, 48, 46, 49, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 51, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, > 110, 116, 40, 36, 123, 52, 61, 48, 125, 41, 32, 38, 38, 32, 36, 52, > 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 56, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 114, 97, 105, 110, 100, 114, 111, 112, 115, 32, 100, 101, 102, 111, > 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 32, 36, 49, 44, 32, 100, 101, 110, 115, 105, 116, 121, 32, 36, > 50, 44, 32, 119, 97, 118, 101, 108, 101, 110, 103, 116, 104, 32, 36, 51, > 32, 97, 110, 100, 32, 36, 52, 32, 109, 101, 114, 103, 105, 110, 103, 32, > 115, 116, 101, 112, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, 91, > 45, 49, 93, 32, 36, 50, 44, 50, 32, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 102, 91, 45, 49, 93, 32, > 39, 99, 111, 115, 40, 105, 41, 47, 40, 49, 43, 105, 47, 36, 51, 41, > 39, 10, 45, 105, 102, 32, 36, 52, 10, 45, 105, 91, 45, 50, 93, 32, > 40, 48, 44, 49, 44, 48, 59, 49, 44, 48, 44, 49, 59, 48, 44, 49, > 44, 48, 41, 32, 45, 47, 91, 45, 50, 93, 32, 50, 32, 91, 45, 49, > 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 52, 32, 45, 45, 99, > 111, 110, 118, 111, 108, 118, 101, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 49, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, > 114, 109, 91, 45, 51, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, > 91, 45, 51, 44, 45, 50, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 103, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 99, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 49, 47, 40, 49, 101, > 45, 53, 43, 109, 97, 120, 40, 97, 98, 115, 40, 105, 109, 41, 44, 97, > 98, 115, 40, 105, 77, 41, 41, 41, 125, 10, 45, 119, 97, 114, 112, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 105, 112, 112, 108, > 101, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 44, 95, > 102, 114, 101, 113, 117, 101, 110, 99, 121, 44, 95, 115, 104, 97, 112, 101, > 61, 123, 32, 48, 61, 98, 108, 111, 99, 32, 124, 32, 49, 61, 116, 114, > 105, 97, 110, 103, 108, 101, 32, 124, 32, 50, 61, 115, 105, 110, 101, 32, > 124, 32, 51, 61, 115, 105, 110, 101, 43, 32, 124, 32, 52, 61, 114, 97, > 110, 100, 111, 109, 32, 125, 44, 95, 97, 110, 103, 108, 101, 44, 95, 111, > 102, 102, 115, 101, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 114, 105, 112, 112, 108, 101, 32, 100, 101, 102, 111, > 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, > 49, 48, 39, 44, 32, 39, 102, 114, 101, 113, 117, 101, 110, 99, 121, 61, > 49, 48, 39, 44, 32, 39, 115, 104, 97, 112, 101, 61, 50, 39, 44, 32, > 39, 97, 110, 103, 108, 101, 61, 48, 39, 32, 97, 110, 100, 32, 39, 111, > 102, 102, 115, 101, 116, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 114, 105, 112, 112, 108, 101, 32, 44, 10, 114, 105, 112, 112, 108, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, > 44, 36, 123, 50, 61, 50, 48, 125, 44, 36, 123, 51, 61, 50, 125, 44, > 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 114, 105, 112, > 112, 108, 101, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 44, 32, 102, > 114, 101, 113, 117, 101, 110, 99, 121, 32, 36, 50, 44, 32, 115, 104, 97, > 112, 101, 32, 36, 51, 44, 32, 97, 110, 103, 108, 101, 32, 36, 52, 32, > 100, 101, 103, 46, 32, 97, 110, 100, 32, 111, 102, 102, 115, 101, 116, 32, > 36, 53, 46, 34, 10, 45, 118, 32, 45, 10, 116, 104, 101, 116, 97, 61, > 123, 36, 52, 42, 112, 105, 47, 49, 56, 48, 125, 32, 67, 61, 123, 99, > 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 32, 83, 61, 123, 45, > 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 34, 120, 34, > 32, 45, 45, 91, 45, 49, 93, 32, 123, 119, 47, 50, 125, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, 121, 39, 10, > 45, 45, 91, 45, 49, 93, 32, 123, 104, 47, 50, 45, 36, 53, 125, 32, > 45, 42, 91, 45, 50, 93, 32, 36, 83, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 67, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 95, > 114, 105, 112, 112, 108, 101, 36, 51, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 10, 45, 45, 42, 91, 45, 49, 93, 32, 123, 45, 36, 83, 125, > 32, 45, 42, 91, 45, 50, 93, 32, 36, 67, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 99, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 95, 114, 105, 112, 112, 108, 101, 48, 32, 58, 32, 45, 102, 32, 123, > 36, 49, 47, 50, 125, 42, 34, 40, 49, 45, 50, 42, 40, 105, 37, 34, > 123, 50, 42, 36, 50, 125, 34, 60, 36, 50, 41, 41, 34, 10, 95, 114, > 105, 112, 112, 108, 101, 49, 32, 58, 32, 45, 102, 32, 34, 73, 61, 40, > 105, 37, 36, 50, 41, 47, 36, 50, 59, 36, 49, 42, 40, 50, 42, 105, > 102, 40, 73, 60, 48, 46, 53, 44, 73, 44, 49, 45, 73, 41, 45, 48, > 46, 53, 41, 34, 10, 95, 114, 105, 112, 112, 108, 101, 50, 32, 58, 32, > 45, 102, 32, 123, 45, 36, 49, 47, 50, 125, 42, 34, 99, 111, 115, 40, > 105, 42, 34, 123, 50, 42, 112, 105, 47, 36, 50, 125, 34, 41, 34, 10, > 95, 114, 105, 112, 112, 108, 101, 51, 32, 58, 32, 45, 102, 32, 123, 45, > 36, 49, 47, 50, 125, 42, 34, 97, 98, 115, 40, 99, 111, 115, 40, 105, > 42, 34, 123, 50, 42, 112, 105, 47, 36, 50, 125, 34, 41, 41, 34, 10, > 95, 114, 105, 112, 112, 108, 101, 52, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 42, 32, 45, 110, 32, 48, 44, 123, 104, 45, 49, 125, 32, 49, > 44, 123, 104, 125, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, > 45, 36, 49, 47, 50, 125, 44, 123, 36, 49, 47, 50, 125, 32, 109, 61, > 123, 105, 109, 125, 32, 77, 61, 123, 105, 77, 125, 32, 45, 98, 91, 45, > 49, 93, 32, 123, 36, 50, 47, 49, 48, 125, 32, 45, 110, 91, 45, 49, > 93, 32, 36, 109, 44, 36, 77, 32, 45, 109, 97, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 111, 116, 111, 105, 100, 111, 115, 99, 111, 112, > 101, 32, 58, 32, 95, 99, 120, 44, 95, 99, 121, 44, 95, 116, 105, 108, > 101, 115, 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 91, 37, 93, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, > 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 114, 111, 116, 97, 116, 105, > 111, 110, 97, 108, 32, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, > 101, 32, 101, 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 120, 61, 99, 121, 61, 53, > 48, 37, 39, 44, 32, 39, 116, 105, 108, 101, 115, 61, 49, 48, 39, 44, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 111, 116, 111, 105, 100, 111, > 115, 99, 111, 112, 101, 32, 44, 10, 114, 111, 116, 111, 105, 100, 111, 115, > 99, 111, 112, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 53, 48, 37, 125, 44, 36, 123, 50, 61, 53, 48, 37, 125, 44, 36, > 123, 53, 61, 49, 125, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 51, 61, 49, 48, 125, 62, 48, 32, 38, 38, 32, 36, 123, 52, 61, 49, > 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 114, 101, 97, 116, 101, 32, 114, 111, 116, 97, 116, 105, 111, 110, 97, 108, > 32, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 101, 102, > 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 99, 101, 110, 116, 101, 114, 32, 40, > 36, 49, 44, 36, 50, 41, 44, 32, 36, 51, 32, 116, 105, 108, 101, 115, > 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, > 36, 52, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 51, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, > 48, 93, 32, 123, 51, 54, 48, 47, 36, 51, 125, 44, 49, 44, 36, 53, > 44, 36, 49, 44, 36, 50, 32, 45, 98, 108, 101, 110, 100, 95, 101, 100, > 103, 101, 115, 32, 36, 52, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, > 58, 32, 95, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, 44, 95, 97, > 110, 103, 108, 101, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 44, 95, 105, 115, 95, 97, 110, 116, 105, > 115, 121, 109, 109, 101, 116, 114, 121, 61, 123, 32, 48, 32, 124, 32, 49, > 32, 125, 44, 95, 115, 119, 97, 112, 95, 115, 105, 100, 101, 115, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 83, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 114, 101, 103, 97, > 114, 100, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 120, 61, 121, 61, 53, 48, 37, 39, 44, 32, 39, 97, 110, 103, 108, 101, > 61, 57, 48, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 49, 39, 44, 32, 39, 105, 115, 95, 97, 110, 116, 105, 115, 121, 109, 109, > 101, 116, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, 115, 119, 97, > 112, 95, 115, 105, 100, 101, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 53, 48, > 37, 44, 53, 48, 37, 44, 52, 53, 32, 45, 45, 115, 121, 109, 109, 101, > 116, 114, 105, 122, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, > 37, 44, 45, 52, 53, 10, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 53, 48, 37, > 125, 44, 36, 123, 50, 61, 53, 48, 37, 125, 44, 36, 123, 51, 61, 57, > 48, 125, 44, 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 48, 125, > 44, 36, 123, 54, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 83, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 114, 101, 103, 97, 114, 100, 105, 110, 103, 32, 97, > 120, 105, 115, 32, 40, 36, 49, 44, 36, 50, 44, 36, 51, 32, 100, 101, > 103, 46, 41, 46, 34, 10, 45, 118, 32, 45, 10, 116, 104, 101, 116, 97, > 61, 123, 36, 51, 42, 112, 105, 47, 49, 56, 48, 125, 32, 117, 61, 123, > 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 32, 118, 61, 123, > 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, 45, 105, 102, > 32, 36, 54, 32, 115, 121, 109, 109, 101, 116, 114, 121, 95, 99, 111, 110, > 100, 61, 65, 60, 48, 32, 45, 101, 108, 115, 101, 32, 115, 121, 109, 109, > 101, 116, 114, 121, 95, 99, 111, 110, 100, 61, 65, 62, 48, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 120, 48, 61, 123, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, > 44, 119, 42, 36, 49, 44, 36, 49, 41, 125, 10, 121, 48, 61, 123, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 50, 125, 44, 104, 42, 36, 50, 44, 36, 50, 41, 125, 10, 45, > 105, 102, 32, 36, 53, 32, 45, 102, 32, 39, 65, 61, 40, 36, 121, 48, > 45, 121, 41, 42, 36, 117, 45, 40, 36, 120, 48, 45, 120, 41, 42, 36, > 118, 59, 88, 61, 120, 43, 50, 42, 40, 36, 120, 48, 45, 120, 41, 59, > 89, 61, 121, 43, 50, 42, 40, 36, 121, 48, 45, 121, 41, 59, 105, 102, > 40, 36, 115, 121, 109, 109, 101, 116, 114, 121, 95, 99, 111, 110, 100, 44, > 105, 40, 88, 44, 89, 44, 122, 44, 99, 44, 49, 44, 36, 52, 41, 44, > 105, 41, 39, 10, 45, 101, 108, 115, 101, 32, 45, 102, 32, 39, 65, 61, > 40, 36, 121, 48, 45, 121, 41, 42, 36, 117, 45, 40, 36, 120, 48, 45, > 120, 41, 42, 36, 118, 59, 88, 61, 120, 45, 50, 42, 36, 118, 42, 65, > 59, 89, 61, 121, 43, 50, 42, 36, 117, 42, 65, 59, 105, 102, 40, 36, > 115, 121, 109, 109, 101, 116, 114, 121, 95, 99, 111, 110, 100, 44, 105, 40, > 88, 44, 89, 44, 122, 44, 99, 44, 49, 44, 36, 52, 41, 44, 105, 41, > 39, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, 108, 97, 114, > 32, 58, 32, 34, 101, 120, 112, 114, 95, 114, 97, 100, 105, 117, 115, 34, > 44, 95, 34, 101, 120, 112, 114, 95, 97, 110, 103, 108, 101, 34, 44, 95, > 120, 95, 99, 101, 110, 116, 101, 114, 44, 95, 121, 95, 99, 101, 110, 116, > 101, 114, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, > 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, > 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 117, 115, 101, 114, 45, 100, 101, 102, > 105, 110, 101, 100, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, > 110, 32, 112, 111, 108, 97, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 101, 120, 112, 114, 95, 114, 97, 100, 105, 117, 115, > 61, 82, 45, 114, 39, 44, 32, 39, 101, 120, 112, 114, 95, 114, 97, 110, > 103, 108, 101, 61, 97, 39, 44, 32, 39, 120, 95, 99, 101, 110, 116, 101, > 114, 61, 121, 95, 99, 101, 110, 116, 101, 114, 61, 53, 48, 39, 32, 97, > 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 116, 114, 97, 110, 115, 102, 111, 114, > 109, 95, 112, 111, 108, 97, 114, 91, 48, 93, 32, 82, 42, 40, 114, 47, > 82, 41, 94, 50, 44, 97, 32, 45, 45, 116, 114, 97, 110, 115, 102, 111, > 114, 109, 95, 112, 111, 108, 97, 114, 91, 48, 93, 32, 114, 44, 50, 42, > 97, 10, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, 108, 97, > 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 82, > 45, 114, 125, 34, 44, 34, 36, 123, 50, 61, 97, 125, 34, 44, 36, 123, > 51, 61, 53, 48, 125, 44, 36, 123, 52, 61, 53, 48, 125, 44, 36, 123, > 53, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 99, 117, 115, 116, 111, 109, 32, 112, 111, 108, 97, 114, > 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 119, 105, 116, 104, 32, > 39, 110, 101, 119, 95, 114, 32, 61, 32, 36, 49, 39, 44, 32, 39, 110, > 101, 119, 95, 97, 32, 61, 32, 36, 50, 39, 44, 32, 99, 101, 110, 116, > 101, 114, 101, 100, 32, 97, 116, 32, 40, 36, 51, 37, 44, 36, 52, 37, > 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 82, 61, 123, 34, 115, > 113, 114, 116, 40, 40, 109, 97, 120, 40, 36, 51, 44, 49, 48, 48, 45, > 36, 51, 41, 42, 119, 47, 49, 48, 48, 41, 94, 50, 32, 43, 32, 40, > 109, 97, 120, 40, 36, 52, 44, 49, 48, 48, 45, 36, 52, 41, 42, 104, > 47, 49, 48, 48, 41, 94, 50, 41, 34, 125, 10, 119, 61, 123, 34, 36, > 51, 42, 119, 47, 49, 48, 48, 34, 125, 10, 104, 61, 123, 34, 36, 52, > 42, 104, 47, 49, 48, 48, 34, 125, 10, 45, 102, 32, 34, 82, 32, 61, > 34, 36, 82, 34, 59, 10, 114, 32, 61, 32, 115, 113, 114, 116, 40, 40, > 120, 45, 34, 36, 119, 34, 41, 94, 50, 32, 43, 32, 40, 121, 45, 34, > 36, 104, 34, 41, 94, 50, 41, 59, 10, 97, 32, 61, 32, 97, 116, 97, > 110, 50, 40, 121, 45, 34, 36, 104, 34, 44, 120, 45, 34, 36, 119, 34, > 41, 59, 10, 110, 114, 32, 61, 32, 36, 49, 59, 10, 110, 97, 32, 61, > 32, 36, 50, 59, 10, 105, 40, 34, 36, 119, 34, 32, 43, 32, 110, 114, > 42, 99, 111, 115, 40, 110, 97, 41, 44, 32, 34, 36, 104, 34, 32, 43, > 32, 110, 114, 42, 115, 105, 110, 40, 110, 97, 41, 44, 32, 122, 44, 32, > 99, 44, 32, 49, 44, 36, 53, 41, 34, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 119, 105, 114, 108, 32, 58, 32, 95, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 44, 95, 99, 120, 44, 95, 99, 121, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 116, > 119, 105, 114, 108, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 39, 44, 32, 39, 99, 120, > 61, 99, 121, 61, 48, 46, 53, 39, 32, 97, 110, 100, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 116, 119, 105, 114, 108, 32, 48, 46, 54, 10, 116, 119, 105, 114, > 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 125, > 44, 36, 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, > 53, 125, 44, 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 116, 119, 105, 114, 108, 32, 100, > 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 32, 36, 49, 32, 97, 110, 100, 32, 99, 101, 110, > 116, 101, 114, 32, 97, 116, 32, 40, 36, 50, 37, 44, 36, 51, 37, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 50, 44, 36, 51, 44, 49, > 44, 36, 52, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 91, > 36, 62, 93, 44, 91, 36, 62, 93, 44, 49, 44, 49, 44, 36, 49, 42, > 120, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, > 45, 49, 44, 48, 32, 45, 119, 97, 114, 112, 91, 36, 62, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 49, 44, 50, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 100, 111, 110, 101, 32, 45, 112, 111, 108, 97, 114, 50, 101, > 117, 99, 108, 105, 100, 101, 97, 110, 32, 36, 50, 44, 36, 51, 44, 49, > 44, 49, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 119, > 97, 114, 112, 95, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, 101, 32, > 58, 32, 95, 120, 45, 97, 110, 103, 108, 101, 44, 95, 121, 45, 97, 110, > 103, 108, 101, 44, 95, 122, 111, 111, 109, 62, 48, 44, 95, 120, 45, 99, > 101, 110, 116, 101, 114, 44, 95, 121, 45, 99, 101, 110, 116, 101, 114, 44, > 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, > 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, > 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, > 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 87, 97, 114, 112, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, > 101, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 120, 45, 97, 110, 103, 108, 101, > 61, 49, 46, 53, 39, 44, 32, 39, 121, 45, 97, 110, 103, 108, 101, 61, > 48, 39, 44, 32, 39, 122, 111, 111, 109, 61, 49, 39, 44, 32, 39, 120, > 45, 99, 101, 110, 116, 101, 114, 61, 121, 45, 99, 101, 110, 116, 101, 114, > 61, 53, 48, 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 61, 50, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 119, 97, > 114, 112, 95, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, 101, 32, 44, > 10, 119, 97, 114, 112, 95, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, > 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 46, > 53, 125, 44, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 49, 125, > 44, 36, 123, 52, 61, 53, 48, 125, 44, 36, 123, 53, 61, 53, 48, 125, > 44, 36, 123, 54, 61, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 112, 101, 114, 115, 112, 101, 99, 116, 105, > 118, 101, 32, 119, 97, 114, 112, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 115, 32, > 40, 36, 49, 32, 100, 101, 103, 46, 44, 36, 50, 32, 100, 101, 103, 46, > 41, 44, 32, 122, 111, 111, 109, 32, 36, 51, 32, 97, 110, 100, 32, 111, > 102, 102, 115, 101, 116, 115, 32, 40, 36, 52, 44, 36, 53, 41, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 40, 48, 44, 49, 48, 48, 41, 32, > 45, 45, 91, 45, 49, 93, 32, 36, 52, 32, 45, 47, 91, 45, 49, 93, > 32, 49, 48, 48, 32, 40, 48, 59, 49, 48, 48, 41, 32, 45, 45, 91, > 45, 49, 93, 32, 36, 53, 32, 45, 47, 91, 45, 49, 93, 32, 49, 48, > 48, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 91, 45, 51, 93, 44, 91, 45, 51, 93, 44, 49, 44, 51, 10, 45, > 45, 42, 91, 45, 50, 93, 32, 36, 50, 32, 45, 45, 42, 91, 45, 50, > 93, 32, 36, 49, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 43, 91, 45, 49, 93, 32, 36, 51, 32, 45, 47, 91, 45, 51, 93, 32, > 91, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 42, 91, 45, 50, 93, 32, 49, 48, 48, 32, 45, 43, 91, 45, 50, 93, > 32, 36, 52, 32, 45, 47, 91, 45, 50, 93, 32, 49, 48, 48, 32, 45, > 42, 91, 45, 50, 93, 32, 64, 123, 45, 51, 44, 119, 125, 10, 45, 42, > 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, 43, 91, 45, 49, 93, 32, > 36, 53, 32, 45, 47, 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, 42, > 91, 45, 49, 93, 32, 64, 123, 45, 51, 44, 104, 125, 10, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, 36, 54, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 119, > 97, 116, 101, 114, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 119, 97, 116, 101, 114, 32, 100, 101, 102, 111, 114, 109, 97, > 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 51, 48, 39, > 32, 97, 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 61, 49, 46, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 119, 97, > 116, 101, 114, 32, 44, 10, 119, 97, 116, 101, 114, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, 61, > 49, 46, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 119, 97, 116, 101, 114, 32, 100, 101, 102, 111, 114, 109, > 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 32, 36, 49, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 50, > 53, 37, 44, 50, 53, 37, 44, 50, 53, 37, 44, 49, 32, 45, 110, 111, > 105, 115, 101, 91, 45, 49, 93, 32, 36, 49, 32, 45, 103, 91, 45, 49, > 93, 32, 120, 121, 122, 32, 45, 43, 91, 45, 49, 44, 45, 50, 44, 45, > 51, 93, 32, 45, 98, 91, 45, 49, 93, 32, 36, 50, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 91, 45, 50, 93, 44, 49, 44, 50, 44, 51, 32, 45, 119, 97, > 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, > 118, 101, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, > 61, 48, 44, 95, 102, 114, 101, 113, 117, 101, 110, 99, 121, 62, 61, 48, > 44, 95, 99, 101, 110, 116, 101, 114, 95, 120, 44, 95, 99, 101, 110, 116, > 101, 114, 95, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 119, 97, 118, 101, 32, 100, 101, 102, 111, 114, 109, 97, > 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 52, 39, 44, > 32, 39, 102, 114, 101, 113, 117, 101, 110, 99, 121, 61, 48, 46, 52, 39, > 32, 97, 110, 100, 32, 39, 99, 101, 110, 116, 101, 114, 95, 120, 61, 99, > 101, 110, 116, 101, 114, 95, 121, 61, 53, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 119, 97, 118, 101, 32, 44, 10, 119, 97, 118, 101, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 52, 125, 44, 36, > 123, 50, 61, 48, 46, 52, 125, 44, 36, 123, 51, 61, 53, 48, 125, 44, > 36, 123, 52, 61, 53, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 119, 97, 118, 101, 32, 100, 101, 102, 111, > 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 32, 36, 49, 44, 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, > 32, 36, 50, 32, 97, 110, 100, 32, 99, 101, 110, 116, 101, 114, 32, 97, > 116, 32, 40, 36, 51, 37, 44, 36, 52, 37, 41, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 61, 91, 45, 49, 93, 32, 49, 44, 36, 51, 37, 44, 36, 52, 37, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 10, > 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 45, 115, 105, 110, 91, > 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 42, 91, 45, 49, 93, 32, > 36, 49, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 119, 105, 110, 100, 32, 58, 32, 95, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, 97, 110, 103, 108, 101, 44, > 48, 60, 61, 95, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 60, > 61, 49, 44, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 119, 105, 110, > 100, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 61, 50, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, 44, > 32, 39, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 61, 48, 46, > 55, 39, 32, 97, 110, 100, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 61, 50, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 119, 105, > 110, 100, 32, 44, 10, 119, 105, 110, 100, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 50, 48, > 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 51, 61, 48, 46, 55, 125, 62, 61, 48, 32, 38, 38, 32, 36, 51, > 60, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, > 48, 125, 44, 36, 123, 52, 61, 50, 48, 125, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 119, 105, 110, 100, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 32, 36, 49, 44, 32, 97, 110, 103, 108, 101, 32, 34, 123, 114, 111, > 117, 110, 100, 40, 36, 50, 47, 52, 53, 41, 42, 52, 53, 125, 34, 32, > 100, 101, 103, 46, 44, 32, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, > 110, 32, 36, 51, 32, 97, 110, 100, 32, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, > 32, 123, 33, 36, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 100, 120, 100, 121, 61, 64, 123, 45, 95, 119, > 105, 110, 100, 123, 114, 111, 117, 110, 100, 40, 36, 50, 47, 52, 53, 41, > 37, 56, 125, 125, 10, 102, 97, 99, 116, 61, 123, 40, 49, 45, 36, 51, > 41, 94, 40, 49, 47, 36, 49, 41, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 103, 101, 91, > 45, 49, 93, 32, 36, 52, 37, 10, 115, 117, 109, 61, 64, 123, 45, 49, > 44, 43, 125, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 91, 45, 50, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 10, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 36, 100, > 120, 100, 121, 44, 48, 44, 48, 44, 48, 32, 45, 109, 97, 120, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 102, 97, 99, 116, 10, 45, 114, 101, 109, 111, 118, 101, 95, 112, 105, 120, > 101, 108, 115, 91, 45, 49, 93, 32, 123, 49, 48, 48, 47, 36, 49, 125, > 44, 36, 115, 117, 109, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 95, 119, 105, 110, 100, 48, 32, 58, 32, 45, 117, > 32, 49, 44, 48, 10, 95, 119, 105, 110, 100, 49, 32, 58, 32, 45, 117, > 32, 49, 44, 49, 10, 95, 119, 105, 110, 100, 50, 32, 58, 32, 45, 117, > 32, 48, 44, 49, 10, 95, 119, 105, 110, 100, 51, 32, 58, 32, 45, 117, > 32, 45, 49, 44, 49, 10, 95, 119, 105, 110, 100, 52, 32, 58, 32, 45, > 117, 32, 45, 49, 44, 48, 10, 95, 119, 105, 110, 100, 53, 32, 58, 32, > 45, 117, 32, 45, 49, 44, 45, 49, 10, 95, 119, 105, 110, 100, 54, 32, > 58, 32, 45, 117, 32, 48, 44, 45, 49, 10, 95, 119, 105, 110, 100, 55, > 32, 58, 32, 45, 117, 32, 49, 44, 45, 49, 10, 35, 64, 103, 109, 105, > 99, 32, 122, 111, 111, 109, 32, 58, 32, 95, 102, 97, 99, 116, 111, 114, > 44, 95, 99, 120, 44, 95, 99, 121, 44, 95, 99, 122, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 122, > 111, 111, 109, 32, 102, 97, 99, 116, 111, 114, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 102, 97, 99, 116, 111, 114, 61, > 49, 39, 44, 32, 39, 99, 120, 61, 99, 121, 61, 99, 122, 61, 48, 46, > 53, 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 122, 111, 111, 109, > 91, 48, 93, 32, 48, 46, 54, 32, 45, 45, 122, 111, 111, 109, 91, 48, > 93, 32, 49, 46, 53, 10, 122, 111, 111, 109, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 50, 125, 44, 36, 123, 50, 61, 48, 46, > 53, 125, 44, 36, 123, 51, 61, 48, 46, 53, 125, 44, 36, 123, 52, 61, > 48, 46, 53, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 122, 111, 111, 109, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 102, 97, 99, 116, 111, 114, 32, 36, > 49, 32, 97, 110, 100, 32, 99, 101, 110, 116, 101, 114, 32, 40, 36, 50, > 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 123, 100, 61, 61, 49, 125, 10, 40, 123, 40, 119, 45, 49, 41, > 42, 36, 50, 42, 40, 49, 45, 49, 47, 36, 49, 41, 125, 44, 123, 40, > 119, 45, 49, 41, 42, 40, 36, 50, 43, 40, 49, 45, 36, 50, 41, 47, > 36, 49, 41, 125, 41, 10, 40, 123, 40, 64, 123, 45, 50, 44, 104, 125, > 45, 49, 41, 42, 36, 51, 42, 40, 49, 45, 49, 47, 36, 49, 41, 125, > 59, 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 49, 41, 42, 40, 36, > 51, 43, 40, 49, 45, 36, 51, 41, 47, 36, 49, 41, 125, 41, 10, 45, > 114, 91, 45, 50, 45, 45, 49, 93, 32, 91, 45, 51, 93, 44, 91, 45, > 51, 93, 44, 49, 44, 49, 44, 51, 32, 45, 97, 91, 45, 50, 45, 45, > 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 49, 44, 36, 53, 10, 45, 101, 108, 115, 101, > 10, 40, 123, 40, 119, 45, 49, 41, 42, 36, 50, 42, 40, 49, 45, 49, > 47, 36, 49, 41, 125, 44, 123, 40, 119, 45, 49, 41, 42, 40, 36, 50, > 43, 40, 49, 45, 36, 50, 41, 47, 36, 49, 41, 125, 41, 10, 40, 123, > 40, 64, 123, 45, 50, 44, 104, 125, 45, 49, 41, 42, 36, 51, 42, 40, > 49, 45, 49, 47, 36, 49, 41, 125, 59, 123, 40, 64, 123, 45, 50, 44, > 104, 125, 45, 49, 41, 42, 40, 36, 51, 43, 40, 49, 45, 36, 51, 41, > 47, 36, 49, 41, 125, 41, 10, 40, 123, 40, 64, 123, 45, 51, 44, 100, > 125, 45, 49, 41, 42, 36, 52, 42, 40, 49, 45, 49, 47, 36, 49, 41, > 125, 47, 123, 40, 64, 123, 45, 51, 44, 100, 125, 45, 49, 41, 42, 40, > 36, 52, 43, 40, 49, 45, 36, 52, 41, 47, 36, 49, 41, 125, 41, 10, > 45, 114, 91, 45, 51, 45, 45, 49, 93, 32, 91, 45, 52, 93, 44, 91, > 45, 52, 93, 44, 91, 45, 52, 93, 44, 49, 44, 51, 32, 45, 97, 91, > 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, 36, 53, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 58, 32, 68, 101, 103, 114, 97, 100, 97, > 116, 105, 111, 110, 115, 10, 35, 64, 103, 109, 105, 99, 32, 99, 114, 97, > 99, 107, 115, 32, 58, 32, 95, 100, 101, 110, 115, 105, 116, 121, 62, 61, > 48, 44, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 44, 95, 114, 101, > 108, 105, 101, 102, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 114, 97, 110, 100, > 111, 109, 32, 99, 114, 97, 99, 107, 115, 32, 116, 111, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, > 48, 46, 50, 39, 44, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 61, 52, 48, 39, 32, 97, 110, 100, 32, 39, 114, 101, 108, 105, 101, 102, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 114, 97, 99, > 107, 115, 32, 48, 46, 50, 44, 54, 48, 44, 49, 10, 99, 114, 97, 99, > 107, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, > 46, 50, 125, 44, 36, 123, 50, 61, 52, 48, 125, 44, 36, 123, 51, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, > 114, 97, 110, 100, 111, 109, 32, 99, 114, 97, 99, 107, 115, 32, 116, 111, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, > 101, 110, 115, 105, 116, 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 40, 123, 105, 109, 125, 44, 123, 105, 77, 125, 41, 32, 91, > 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 32, 45, 110, 111, > 105, 115, 101, 91, 45, 49, 93, 32, 36, 49, 44, 50, 32, 45, 100, 105, > 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 115, 104, > 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 49, 48, 48, 48, 48, 10, > 45, 105, 102, 32, 36, 51, 32, 45, 103, 91, 45, 49, 93, 32, 120, 121, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, 45, 49, > 93, 32, 45, 49, 44, 49, 32, 45, 101, 108, 115, 101, 32, 45, 110, 91, > 45, 49, 93, 32, 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 43, 91, 45, 51, 44, 45, > 49, 93, 32, 45, 99, 91, 45, 50, 93, 32, 64, 45, 49, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, > 103, 104, 116, 95, 112, 97, 116, 99, 104, 32, 58, 32, 95, 100, 101, 110, > 115, 105, 116, 121, 62, 48, 44, 95, 100, 97, 114, 107, 110, 101, 115, 115, > 62, 61, 48, 44, 95, 108, 105, 103, 104, 116, 110, 101, 115, 115, 62, 61, > 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 108, > 105, 103, 104, 116, 32, 112, 97, 116, 99, 104, 101, 115, 32, 116, 111, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, 110, 115, 105, > 116, 121, 61, 49, 48, 39, 44, 32, 39, 100, 97, 114, 107, 110, 101, 115, > 115, 61, 48, 46, 57, 39, 32, 97, 110, 100, 32, 39, 108, 105, 103, 104, > 116, 110, 101, 115, 115, 61, 49, 46, 55, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 108, 105, 103, 104, 116, 95, 112, 97, 116, 99, 104, 32, 50, > 48, 44, 48, 46, 57, 44, 52, 10, 108, 105, 103, 104, 116, 95, 112, 97, > 116, 99, 104, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 48, 125, 44, 36, 123, 50, 61, 48, 46, 57, 125, 44, 36, 123, 51, > 61, 49, 46, 55, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 108, 105, 103, 104, 116, 32, 112, 97, 116, 99, 104, > 101, 115, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 100, 101, 110, 115, 105, 116, 121, 32, 36, 49, 44, 32, > 100, 97, 114, 107, 110, 101, 115, 115, 32, 36, 50, 32, 97, 110, 100, 32, > 108, 105, 103, 104, 116, 110, 101, 115, 115, 32, 36, 51, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 110, 32, 48, 44, 50, 53, 53, 32, 36, > 49, 44, 36, 49, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, > 52, 48, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, > 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 110, > 91, 45, 49, 93, 32, 36, 50, 44, 36, 51, 32, 45, 42, 32, 45, 99, > 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 110, > 111, 105, 115, 101, 95, 104, 117, 114, 108, 32, 58, 32, 95, 97, 109, 112, > 108, 105, 116, 117, 100, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 100, 100, 32, 104, 117, 114, 108, 32, 110, 111, 105, 115, > 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 110, 111, 105, 115, 101, 95, 104, 117, 114, 108, 32, > 44, 10, 110, 111, 105, 115, 101, 95, 104, 117, 114, 108, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, 104, 117, 114, 108, 32, 110, > 111, 105, 115, 101, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, > 36, 49, 37, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 102, > 32, 48, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 49, 48, > 32, 45, 110, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 109, 125, 44, > 64, 123, 45, 50, 44, 77, 125, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 44, 49, 44, 45, 50, 10, 45, 110, 111, 105, 115, 101, 91, > 45, 49, 93, 32, 36, 49, 44, 50, 32, 45, 103, 101, 91, 45, 49, 93, > 32, 48, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, > 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 49, > 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 42, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 43, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 105, 120, 101, 108, 105, 122, 101, 32, 58, 32, 95, 115, > 99, 97, 108, 101, 95, 120, 62, 48, 44, 95, 115, 99, 97, 108, 101, 95, > 121, 62, 48, 44, 95, 115, 99, 97, 108, 101, 95, 122, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 80, 105, 120, 101, 108, 105, 122, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 115, 99, 97, 108, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 99, 97, 108, 101, 95, 120, 61, 50, 48, 39, 32, 97, 110, > 100, 32, 39, 115, 99, 97, 108, 101, 95, 121, 61, 115, 99, 97, 108, 101, > 95, 122, 61, 115, 99, 97, 108, 101, 95, 120, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 112, 105, 120, 101, 108, 105, 122, 101, 32, 44, 10, 112, > 105, 120, 101, 108, 105, 122, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 50, 48, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, > 36, 123, 51, 61, 36, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 80, 105, 120, 101, 108, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 119, 105, 116, 104, 32, 115, 99, 97, 108, 101, 115, 32, 40, 36, > 49, 37, 44, 36, 50, 37, 44, 36, 51, 37, 41, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 32, 119, 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, > 44, 123, 100, 125, 32, 45, 114, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 36, 51, 37, 44, 49, 48, 48, 37, 44, 50, 32, 45, 114, 32, 36, 119, > 104, 100, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 104, 97, 100, 101, > 95, 115, 116, 114, 105, 112, 101, 115, 32, 58, 32, 95, 102, 114, 101, 113, > 117, 101, 110, 99, 121, 62, 61, 48, 44, 95, 100, 105, 114, 101, 99, 116, > 105, 111, 110, 61, 123, 32, 48, 61, 104, 111, 114, 105, 122, 111, 110, 116, > 97, 108, 32, 124, 32, 49, 61, 118, 101, 114, 116, 105, 99, 97, 108, 32, > 125, 44, 95, 100, 97, 114, 107, 110, 101, 115, 115, 62, 61, 48, 44, 95, > 108, 105, 103, 104, 116, 110, 101, 115, 115, 62, 61, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 115, 104, 97, 100, 101, 32, > 115, 116, 114, 105, 112, 101, 115, 32, 116, 111, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 102, 114, 101, 113, 117, 101, 110, 99, 121, 61, > 53, 39, 44, 32, 39, 100, 105, 114, 101, 99, 116, 105, 111, 110, 61, 49, > 39, 44, 32, 39, 100, 97, 114, 107, 110, 101, 115, 115, 61, 48, 46, 56, > 39, 32, 97, 110, 100, 32, 39, 108, 105, 103, 104, 116, 110, 101, 115, 115, > 61, 50, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 104, 97, 100, > 101, 95, 115, 116, 114, 105, 112, 101, 115, 32, 51, 48, 10, 115, 104, 97, > 100, 101, 95, 115, 116, 114, 105, 112, 101, 115, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 53, 125, 44, 36, 123, 50, 61, 49, 125, > 44, 36, 123, 51, 61, 48, 46, 56, 125, 44, 36, 123, 52, 61, 50, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, 34, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 118, 101, 114, > 116, 105, 99, 97, 108, 44, 104, 111, 114, 105, 122, 111, 110, 116, 97, 108, > 125, 34, 32, 115, 104, 97, 100, 101, 100, 32, 115, 116, 114, 105, 112, 101, > 115, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 36, 49, 44, > 32, 100, 97, 114, 107, 110, 101, 115, 115, 32, 36, 51, 32, 97, 110, 100, > 32, 108, 105, 103, 104, 116, 110, 101, 115, 115, 32, 36, 52, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 123, 109, 97, 120, 40, 49, 44, 119, 42, 40, 36, 50, 33, 61, 48, 41, > 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 104, 42, 40, 36, 50, 61, > 61, 48, 41, 41, 125, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, > 32, 36, 49, 44, 50, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 110, 91, 45, 49, 93, 32, 36, 51, 44, 36, 52, 32, 45, > 42, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 104, 97, 100, 111, 119, 95, 112, 97, 116, 99, 104, 32, > 58, 32, 95, 111, 112, 97, 99, 105, 116, 121, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 115, 104, 97, 100, 111, > 119, 32, 112, 97, 116, 99, 104, 101, 115, 32, 116, 111, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, > 46, 55, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 104, 97, 100, > 111, 119, 95, 112, 97, 116, 99, 104, 32, 48, 46, 52, 10, 115, 104, 97, > 100, 111, 119, 95, 112, 97, 116, 99, 104, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 49, 61, 48, 46, 55, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 115, 104, 97, 100, 111, 119, > 32, 112, 97, 116, 99, 104, 101, 115, 32, 116, 111, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 32, 45, 115, 104, 105, > 102, 116, 91, 45, 49, 93, 32, 45, 50, 44, 45, 50, 32, 45, 115, 104, > 105, 102, 116, 91, 45, 49, 93, 32, 49, 44, 49, 10, 45, 112, 108, 97, > 115, 109, 97, 91, 45, 49, 93, 32, 51, 44, 48, 46, 51, 44, 56, 32, > 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 98, 91, 45, 49, 93, 32, > 49, 32, 45, 99, 91, 45, 49, 93, 32, 51, 37, 44, 49, 53, 37, 32, > 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 110, 91, 45, > 49, 93, 32, 36, 49, 44, 49, 32, 45, 42, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 112, 114, 101, 97, 100, 32, 58, 32, 95, 100, 120, 62, > 61, 48, 44, 95, 100, 121, 62, 61, 48, 44, 95, 100, 122, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 112, 114, 101, 97, 100, > 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 114, 97, 110, 100, 111, 109, 108, 121, 32, 97, 108, 111, 110, 103, 32, > 120, 44, 121, 32, 97, 110, 100, 32, 122, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 100, 120, 61, 51, 39, 44, 32, 39, 100, 121, 61, > 100, 120, 39, 32, 97, 110, 100, 32, 39, 100, 122, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 115, 112, 114, 101, 97, 100, 32, 51, 10, > 115, 112, 114, 101, 97, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 51, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, > 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 83, 112, > 114, 101, 97, 100, 32, 112, 105, 120, 101, 108, 32, 111, 102, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 114, 97, 110, 100, 111, 109, 108, 121, 44, 32, > 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 115, 32, > 40, 36, 49, 44, 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 51, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, 45, 36, 49, 125, > 44, 36, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, > 45, 49, 93, 32, 49, 44, 49, 32, 45, 114, 97, 110, 100, 91, 45, 49, > 93, 32, 123, 45, 36, 50, 125, 44, 36, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, 45, 36, 51, 125, 44, 36, > 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 97, 114, 112, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, 105, 112, > 101, 115, 95, 121, 32, 58, 32, 95, 102, 114, 101, 113, 117, 101, 110, 99, > 121, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, > 100, 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 115, 116, 114, 105, 112, > 101, 115, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 102, 114, 101, 113, 117, 101, 110, 99, 121, 61, 49, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 115, 116, 114, 105, 112, 101, 115, 95, 121, 32, > 44, 10, 115, 116, 114, 105, 112, 101, 115, 95, 121, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 100, 100, 32, 118, 101, 114, 116, 105, 99, 97, > 108, 32, 115, 116, 114, 105, 112, 101, 115, 32, 116, 111, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 102, 114, 101, 113, 117, > 101, 110, 99, 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, > 32, 36, 49, 44, 50, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 42, 91, > 45, 49, 93, 32, 48, 46, 49, 53, 32, 45, 43, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 101, 120, > 116, 117, 114, 105, 122, 101, 95, 99, 97, 110, 118, 97, 115, 32, 58, 32, > 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, 102, > 105, 98, 114, 111, 117, 115, 110, 101, 115, 115, 62, 61, 48, 44, 95, 101, > 109, 98, 111, 115, 115, 95, 108, 101, 118, 101, 108, 62, 61, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 112, 97, 105, 110, > 116, 32, 99, 97, 110, 118, 97, 115, 32, 116, 101, 120, 116, 117, 114, 101, > 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 61, 50, 48, 39, 44, 32, 39, 102, > 105, 98, 114, 111, 117, 115, 110, 101, 115, 115, 61, 51, 39, 32, 97, 110, > 100, 32, 39, 101, 109, 98, 111, 115, 115, 95, 108, 101, 118, 101, 108, 61, > 48, 46, 54, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, 101, 120, > 116, 117, 114, 105, 122, 101, 95, 99, 97, 110, 118, 97, 115, 32, 44, 10, > 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, 99, 97, 110, 118, 97, 115, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 50, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 54, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 52, 61, 56, 48, 125, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, 99, 97, 110, 118, 97, > 115, 32, 116, 101, 120, 116, 117, 114, 101, 32, 116, 111, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 32, 36, 49, 44, 32, 102, 105, 98, 114, 111, 117, 115, > 110, 101, 115, 115, 32, 36, 50, 32, 97, 110, 100, 32, 101, 109, 98, 111, > 115, 115, 32, 108, 101, 118, 101, 108, 32, 36, 51, 46, 34, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 123, 119, 125, 44, 123, 104, 125, 32, 45, 114, 97, 110, 100, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 45, 98, 108, 117, 114, 95, 120, > 91, 45, 49, 93, 32, 36, 50, 32, 45, 98, 108, 117, 114, 95, 121, 91, > 45, 50, 93, 32, 36, 50, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 103, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 10, 45, 45, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 43, 32, 45, 111, 114, > 105, 101, 110, 116, 97, 116, 105, 111, 110, 91, 45, 50, 93, 32, 45, 99, > 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 50, 93, 32, 43, 32, 45, 110, 91, 45, 50, 93, 32, 36, 51, 44, > 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 56, 48, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, > 45, 36, 49, 44, 36, 49, 32, 45, 43, 32, 45, 99, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 101, 120, 116, 117, > 114, 105, 122, 101, 95, 112, 97, 112, 101, 114, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 100, 100, 32, 112, 97, 112, 101, 114, 32, 116, 101, > 120, 116, 117, 114, 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, 112, 97, 112, 101, 114, > 10, 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, 112, 97, 112, 101, 114, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, > 112, 97, 112, 101, 114, 32, 116, 101, 120, 116, 117, 114, 101, 32, 116, 111, > 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 91, 45, 49, 93, 32, 51, 48, 37, 44, 51, 48, 37, 32, 45, > 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 49, 44, 50, 32, 45, 114, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 91, > 45, 50, 93, 44, 49, 44, 48, 32, 45, 105, 102, 102, 116, 91, 45, 49, > 93, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 105, 102, 116, > 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 48, 44, 50, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, > 93, 32, 49, 32, 45, 110, 91, 45, 49, 93, 32, 49, 44, 49, 46, 50, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 42, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 118, 105, 103, 110, 101, 116, 116, 101, > 32, 58, 32, 95, 115, 116, 114, 101, 110, 103, 116, 104, 62, 61, 48, 44, > 48, 60, 61, 95, 114, 97, 100, 105, 117, 115, 95, 109, 105, 110, 60, 61, > 49, 48, 48, 44, 48, 60, 61, 95, 114, 97, 100, 105, 117, 115, 95, 109, > 97, 120, 60, 61, 49, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 100, 100, 32, 118, 105, 103, 110, 101, 116, 116, 101, 32, 101, 102, > 102, 101, 99, 116, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 115, 116, 114, 101, 110, 103, 116, 104, 61, 49, 48, 48, 39, > 44, 32, 39, 114, 97, 100, 105, 117, 115, 95, 109, 105, 110, 61, 55, 48, > 39, 32, 97, 110, 100, 32, 39, 114, 97, 100, 105, 117, 115, 95, 109, 97, > 120, 61, 57, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 118, 105, > 103, 110, 101, 116, 116, 101, 32, 44, 10, 118, 105, 103, 110, 101, 116, 116, > 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 49, 48, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 55, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 48, 48, > 32, 38, 38, 32, 36, 123, 51, 61, 57, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 51, 60, 61, 49, 48, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 100, 100, 32, 118, 105, 103, 110, 101, 116, 116, 101, > 32, 101, 102, 102, 101, 99, 116, 32, 116, 111, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 116, 114, 101, 110, 103, 116, > 104, 32, 36, 49, 32, 97, 110, 100, 32, 115, 105, 122, 101, 32, 36, 50, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 109, 77, 61, 123, 105, 109, > 125, 44, 123, 105, 77, 125, 32, 100, 61, 123, 109, 97, 120, 40, 119, 44, > 104, 41, 125, 10, 36, 100, 44, 36, 100, 32, 45, 61, 91, 45, 49, 93, > 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 50, 10, 45, 99, 91, 45, 49, 93, 32, > 36, 50, 37, 44, 36, 51, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 36, 49, 32, 45, 45, 32, 45, 99, 32, 36, 109, 77, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, > 118, 105, 115, 105, 98, 108, 101, 32, 58, 32, 95, 116, 101, 120, 116, 44, > 48, 60, 95, 111, 112, 97, 99, 105, 116, 121, 60, 49, 44, 95, 115, 105, > 122, 101, 62, 48, 44, 95, 97, 110, 103, 108, 101, 44, 95, 109, 111, 100, > 101, 61, 123, 32, 48, 61, 114, 101, 109, 111, 118, 101, 32, 124, 32, 49, > 61, 97, 100, 100, 32, 125, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 100, 100, 32, 111, 114, 32, 114, 101, 109, 111, 118, 101, 32, 97, 32, 118, > 105, 115, 105, 98, 108, 101, 32, 119, 97, 116, 101, 114, 109, 97, 114, 107, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 40, 118, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 91, 48, 44, 50, 53, 53, 93, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 101, 120, > 116, 61, 40, 99, 41, 32, 71, 39, 77, 73, 67, 39, 44, 32, 39, 111, > 112, 97, 99, 105, 116, 121, 61, 48, 46, 51, 39, 44, 32, 39, 115, 105, > 122, 101, 61, 53, 51, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 50, > 53, 39, 44, 32, 39, 109, 111, 100, 101, 61, 49, 39, 32, 97, 110, 100, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 119, 97, 116, 101, 114, 109, 97, 114, > 107, 95, 118, 105, 115, 105, 98, 108, 101, 32, 44, 48, 46, 55, 10, 119, > 97, 116, 101, 114, 109, 97, 114, 107, 95, 118, 105, 115, 105, 98, 108, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 92, 50, > 53, 49, 92, 32, 71, 92, 52, 55, 77, 73, 67, 125, 34, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 48, 46, 51, 125, 62, 48, > 32, 38, 38, 32, 36, 50, 60, 49, 32, 38, 38, 32, 36, 123, 51, 61, > 53, 51, 125, 62, 48, 32, 38, 38, 32, 36, 123, 54, 61, 48, 46, 53, > 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, > 50, 53, 125, 44, 36, 123, 53, 61, 49, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 53, > 44, 65, 100, 100, 44, 82, 101, 109, 111, 118, 101, 125, 34, 32, 118, 105, > 115, 105, 98, 108, 101, 32, 119, 97, 116, 101, 114, 109, 97, 114, 107, 32, > 39, 36, 49, 39, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 50, > 44, 32, 115, 105, 122, 101, 32, 36, 51, 44, 32, 97, 110, 103, 108, 101, > 32, 36, 52, 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 48, > 44, 48, 44, 36, 51, 44, 49, 44, 50, 53, 53, 32, 45, 114, 111, 116, > 97, 116, 101, 91, 45, 49, 93, 32, 36, 52, 44, 48, 44, 48, 32, 45, > 98, 91, 45, 49, 93, 32, 36, 54, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 53, 53, 10, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 48, 44, 50, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 105, 102, 32, 36, 53, 32, 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, > 45, 42, 91, 45, 50, 93, 32, 123, 49, 45, 36, 50, 125, 32, 45, 43, > 10, 45, 101, 108, 115, 101, 32, 45, 42, 91, 45, 49, 93, 32, 36, 50, > 32, 45, 45, 32, 45, 47, 32, 123, 49, 45, 36, 50, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 58, 32, 66, 108, 101, 110, 100, 105, 110, > 103, 32, 97, 110, 100, 32, 102, 97, 100, 105, 110, 103, 10, 35, 64, 103, > 109, 105, 99, 32, 98, 108, 101, 110, 100, 32, 58, 32, 98, 108, 101, 110, > 100, 105, 110, 103, 95, 109, 111, 100, 101, 44, 48, 60, 61, 95, 111, 112, > 97, 99, 105, 116, 121, 60, 61, 49, 44, 95, 114, 101, 118, 101, 114, 116, > 95, 108, 97, 121, 101, 114, 95, 111, 114, 100, 101, 114, 61, 123, 32, 48, > 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 66, 108, 101, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 71, > 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, 71, 66, 65, 32, > 105, 109, 97, 103, 101, 115, 44, 32, 116, 119, 111, 45, 98, 121, 45, 116, > 119, 111, 44, 32, 117, 115, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 109, 111, 100, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 39, 98, 108, 101, 110, 100, 105, 110, 103, 95, 109, 111, 100, > 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 97, 100, 100, 32, > 124, 32, 97, 108, 112, 104, 97, 32, 124, 32, 97, 110, 100, 32, 124, 32, > 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, 98, 108, 117, 101, 32, 124, > 32, 98, 117, 114, 110, 32, 124, 32, 100, 97, 114, 107, 101, 110, 32, 124, > 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 32, 124, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 100, 105, 118, 105, 100, 101, 32, 124, 32, > 100, 111, 100, 103, 101, 32, 124, 32, 101, 100, 103, 101, 115, 32, 124, 32, > 101, 120, 99, 108, 117, 115, 105, 111, 110, 32, 124, 32, 102, 114, 101, 101, > 122, 101, 32, 124, 32, 103, 114, 97, 105, 110, 101, 120, 116, 114, 97, 99, > 116, 32, 124, 32, 103, 114, 97, 105, 110, 109, 101, 114, 103, 101, 32, 124, > 32, 103, 114, 101, 101, 110, 32, 124, 32, 104, 97, 114, 100, 108, 105, 103, > 104, 116, 32, 124, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 104, 97, > 114, 100, 109, 105, 120, 32, 124, 32, 104, 117, 101, 32, 124, 32, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 32, 124, 32, 108, 105, > 103, 104, 116, 101, 110, 32, 124, 32, 108, 105, 103, 104, 116, 110, 101, 115, > 115, 32, 124, 32, 108, 105, 110, 101, 97, 114, 98, 117, 114, 110, 32, 124, > 32, 108, 105, 110, 101, 97, 114, 108, 105, 103, 104, 116, 32, 124, 32, 108, > 117, 109, 105, 110, 97, 110, 99, 101, 32, 124, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 109, 117, 108, 116, 105, 112, 108, 121, 32, 124, 32, 110, > 101, 103, 97, 116, 105, 111, 110, 32, 124, 32, 111, 114, 32, 124, 32, 111, > 118, 101, 114, 108, 97, 121, 32, 124, 32, 112, 105, 110, 108, 105, 103, 104, > 116, 32, 124, 32, 114, 101, 100, 32, 124, 32, 114, 101, 102, 108, 101, 99, > 116, 32, 124, 32, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 32, 124, > 32, 115, 101, 97, 109, 108, 101, 115, 115, 32, 124, 32, 115, 101, 97, 109, > 108, 101, 115, 115, 95, 109, 105, 120, 101, 100, 32, 124, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 115, 99, 114, 101, 101, 110, 32, 124, 32, 115, > 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, 115, 104, > 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, 32, 124, 32, 115, 111, > 102, 116, 98, 117, 114, 110, 32, 124, 32, 115, 111, 102, 116, 100, 111, 100, > 103, 101, 32, 124, 32, 115, 111, 102, 116, 108, 105, 103, 104, 116, 32, 124, > 32, 115, 116, 97, 109, 112, 32, 124, 32, 115, 117, 98, 116, 114, 97, 99, > 116, 32, 124, 32, 118, 97, 108, 117, 101, 32, 124, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 118, 105, 118, 105, 100, 108, 105, 103, 104, 116, 32, > 124, 32, 120, 111, 114, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 98, 108, 101, 110, 100, 105, 110, 103, 95, 109, 111, 100, 101, > 61, 97, 108, 112, 104, 97, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, > 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 114, 101, 118, 101, 114, 116, > 95, 108, 97, 121, 101, 114, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, 44, > 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 91, 45, 49, 93, 32, > 50, 48, 48, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, > 50, 48, 32, 45, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, > 32, 45, 100, 114, 103, 98, 97, 91, 45, 50, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, > 125, 44, 123, 104, 125, 32, 45, 98, 108, 101, 110, 100, 32, 111, 118, 101, > 114, 108, 97, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 109, 32, 34, 101, 120, 32, 58, 32, 36, 34, 34, 61, 97, 114, 103, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 34, 34, 35, 32, 45, 45, > 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 36, 123, 97, 114, 103, > 123, 36, 62, 43, 49, 125, 125, 32, 45, 116, 101, 120, 116, 95, 111, 117, > 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 77, 111, 100, 101, 58, 92, > 34, 32, 92, 34, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, > 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, 49, 44, 50, 53, 53, 32, > 45, 100, 111, 110, 101, 34, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, > 125, 44, 123, 104, 125, 32, 45, 101, 120, 32, 97, 100, 100, 44, 97, 108, > 112, 104, 97, 44, 97, 110, 100, 44, 97, 118, 101, 114, 97, 103, 101, 44, > 98, 108, 117, 101, 44, 98, 117, 114, 110, 44, 100, 97, 114, 107, 101, 110, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 109, 32, 34, > 101, 120, 32, 58, 32, 36, 34, 34, 61, 97, 114, 103, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 34, 34, 35, 32, 45, 45, 98, 108, 101, 110, > 100, 91, 48, 44, 49, 93, 32, 36, 123, 97, 114, 103, 123, 36, 62, 43, > 49, 125, 125, 32, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 77, 111, 100, 101, 58, 92, 34, 32, 92, 34, > 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, 44, 50, 44, 50, > 44, 50, 51, 44, 50, 44, 49, 44, 50, 53, 53, 32, 45, 100, 111, 110, > 101, 34, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, > 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, > 125, 32, 45, 101, 120, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, > 44, 100, 105, 118, 105, 100, 101, 44, 100, 111, 100, 103, 101, 44, 101, 120, > 99, 108, 117, 115, 105, 111, 110, 44, 102, 114, 101, 101, 122, 101, 44, 103, > 114, 97, 105, 110, 101, 120, 116, 114, 97, 99, 116, 44, 103, 114, 97, 105, > 110, 109, 101, 114, 103, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 45, 109, 32, 34, 101, 120, 32, 58, 32, 36, 34, 34, 61, 97, > 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 34, 34, 35, 32, > 45, 45, 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 36, 123, 97, > 114, 103, 123, 36, 62, 43, 49, 125, 125, 32, 45, 116, 101, 120, 116, 95, > 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 77, 111, 100, 101, > 58, 92, 34, 32, 92, 34, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, > 125, 125, 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, 49, 44, 50, 53, > 53, 32, 45, 100, 111, 110, 101, 34, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, > 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 120, 32, 103, 114, 101, 101, > 110, 44, 104, 97, 114, 100, 108, 105, 103, 104, 116, 44, 104, 97, 114, 100, > 109, 105, 120, 44, 104, 117, 101, 44, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 108, 105, 103, 104, 116, 101, 110, 44, 108, 105, > 103, 104, 116, 110, 101, 115, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 45, 109, 32, 34, 101, 120, 32, 58, 32, 36, 34, 34, 61, > 97, 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 34, 34, 35, > 32, 45, 45, 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 36, 123, > 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, 32, 45, 116, 101, 120, 116, > 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 77, 111, 100, > 101, 58, 92, 34, 32, 92, 34, 36, 123, 97, 114, 103, 123, 36, 62, 43, > 49, 125, 125, 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, 49, 44, 50, > 53, 53, 32, 45, 100, 111, 110, 101, 34, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, > 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 120, 32, 108, 105, 110, > 101, 97, 114, 98, 117, 114, 110, 44, 108, 105, 110, 101, 97, 114, 108, 105, > 103, 104, 116, 44, 108, 117, 109, 105, 110, 97, 110, 99, 101, 44, 109, 117, > 108, 116, 105, 112, 108, 121, 44, 110, 101, 103, 97, 116, 105, 111, 110, 44, > 111, 114, 44, 111, 118, 101, 114, 108, 97, 121, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 109, 32, 34, 101, 120, 32, 58, 32, 36, > 34, 34, 61, 97, 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 34, 34, 35, 32, 45, 45, 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, > 32, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, 32, 45, 116, > 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 77, 111, 100, 101, 58, 92, 34, 32, 92, 34, 36, 123, 97, 114, 103, 123, > 36, 62, 43, 49, 125, 125, 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, > 49, 44, 50, 53, 53, 32, 45, 100, 111, 110, 101, 34, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, > 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 120, 32, > 112, 105, 110, 108, 105, 103, 104, 116, 44, 114, 101, 100, 44, 114, 101, 102, > 108, 101, 99, 116, 44, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 44, > 115, 99, 114, 101, 101, 110, 44, 115, 104, 97, 112, 101, 97, 118, 101, 114, > 97, 103, 101, 44, 115, 111, 102, 116, 98, 117, 114, 110, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 45, 109, 32, 34, 101, 120, 32, 58, > 32, 36, 34, 34, 61, 97, 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 36, 34, 34, 35, 32, 45, 45, 98, 108, 101, 110, 100, 91, 48, 44, > 49, 93, 32, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, 32, > 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 77, 111, 100, 101, 58, 92, 34, 32, 92, 34, 36, 123, 97, 114, > 103, 123, 36, 62, 43, 49, 125, 125, 44, 50, 44, 50, 44, 50, 51, 44, > 50, 44, 49, 44, 50, 53, 53, 32, 45, 100, 111, 110, 101, 34, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, > 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, > 120, 32, 115, 111, 102, 116, 100, 111, 100, 103, 101, 44, 115, 111, 102, 116, > 108, 105, 103, 104, 116, 44, 115, 116, 97, 109, 112, 44, 115, 117, 98, 116, > 114, 97, 99, 116, 44, 118, 97, 108, 117, 101, 44, 118, 105, 118, 105, 100, > 108, 105, 103, 104, 116, 44, 120, 111, 114, 10, 98, 108, 101, 110, 100, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 97, 108, 112, 104, > 97, 125, 44, 36, 123, 50, 61, 49, 125, 44, 36, 123, 51, 61, 48, 125, > 44, 36, 123, 52, 61, 49, 125, 10, 45, 118, 32, 45, 32, 115, 48, 61, > 34, 34, 32, 115, 49, 61, 34, 40, 114, 101, 118, 101, 114, 116, 101, 100, > 32, 108, 97, 121, 101, 114, 115, 41, 32, 34, 32, 45, 118, 32, 43, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, 108, 101, 110, 100, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, > 111, 44, 32, 117, 115, 105, 110, 103, 32, 39, 36, 49, 39, 32, 109, 111, > 100, 101, 32, 34, 36, 123, 115, 123, 36, 51, 33, 61, 48, 125, 125, 34, > 97, 110, 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 50, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 32, 99, 111, 100, 101, 61, > 64, 123, 45, 95, 98, 108, 101, 110, 100, 95, 36, 49, 91, 93, 125, 10, > 45, 111, 110, 102, 97, 105, 108, 32, 45, 118, 32, 43, 32, 45, 101, 114, > 114, 111, 114, 91, 48, 45, 45, 50, 93, 32, 34, 67, 111, 109, 109, 97, > 110, 100, 32, 39, 45, 98, 108, 101, 110, 100, 39, 58, 32, 85, 110, 107, > 110, 111, 119, 110, 32, 98, 108, 101, 110, 100, 105, 110, 103, 32, 109, 111, > 100, 101, 32, 39, 36, 49, 39, 32, 114, 101, 113, 117, 101, 115, 116, 101, > 100, 46, 34, 10, 45, 101, 110, 100, 108, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 45, 105, 102, 32, > 36, 51, 32, 45, 114, 118, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 91, 49, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, 91, 48, 93, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 10, 115, 61, 123, 115, 48, 61, 105, 102, 40, 64, 123, 48, 44, 115, 125, > 60, 51, 44, 49, 44, 51, 41, 59, 115, 49, 61, 105, 102, 40, 115, 60, > 51, 44, 49, 44, 51, 41, 59, 109, 97, 120, 40, 115, 48, 44, 115, 49, > 41, 125, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, > 91, 48, 93, 32, 123, 36, 115, 43, 49, 45, 40, 64, 123, 48, 44, 115, > 125, 37, 50, 41, 125, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, > 111, 100, 101, 91, 49, 93, 32, 123, 36, 115, 43, 49, 45, 40, 115, 37, > 50, 41, 125, 10, 45, 105, 102, 32, 123, 64, 123, 48, 44, 115, 125, 61, > 61, 50, 124, 124, 64, 123, 48, 44, 115, 125, 61, 61, 52, 125, 10, 45, > 105, 102, 32, 123, 115, 61, 61, 50, 124, 124, 115, 61, 61, 52, 125, 10, > 45, 115, 104, 91, 48, 44, 49, 93, 32, 48, 44, 123, 115, 45, 50, 125, > 32, 45, 95, 98, 108, 101, 110, 100, 91, 50, 44, 51, 93, 32, 36, 99, > 111, 100, 101, 32, 45, 114, 109, 91, 50, 44, 51, 93, 10, 45, 105, 102, > 32, 123, 36, 49, 39, 61, 61, 39, 97, 108, 112, 104, 97, 125, 10, 45, > 115, 104, 91, 48, 44, 49, 93, 32, 48, 44, 123, 64, 123, 48, 44, 115, > 125, 45, 50, 125, 32, 45, 115, 104, 91, 48, 44, 49, 93, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 42, 91, 50, 44, 52, 93, 32, > 45, 42, 91, 51, 44, 52, 93, 32, 45, 114, 109, 91, 50, 44, 51, 93, > 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 49, > 48, 48, 37, 32, 45, 115, 104, 91, 49, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 102, 91, 51, 93, 32, 50, 53, 53, 32, 45, > 114, 109, 91, 51, 93, 10, 45, 106, 91, 48, 93, 32, 91, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 123, 109, 97, 120, 40, 48, 44, 109, > 105, 110, 40, 49, 44, 36, 50, 41, 41, 125, 44, 91, 50, 93, 44, 50, > 53, 53, 32, 45, 114, 109, 91, 49, 44, 50, 93, 10, 45, 115, 104, 91, > 48, 93, 32, 48, 44, 123, 115, 45, 50, 125, 32, 45, 115, 104, 91, 48, > 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 43, 91, 50, > 93, 32, 49, 101, 45, 49, 48, 32, 45, 47, 91, 49, 44, 50, 93, 32, > 45, 114, 109, 91, 49, 93, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, > 45, 101, 108, 115, 101, 10, 45, 115, 104, 91, 49, 93, 32, 48, 44, 123, > 115, 45, 50, 125, 32, 45, 115, 104, 91, 49, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 106, 91, 48, 93, 32, 91, 50, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 123, 109, 97, 120, 40, 48, 44, 109, > 105, 110, 40, 49, 44, 36, 50, 41, 41, 125, 44, 91, 51, 93, 44, 50, > 53, 53, 32, 45, 114, 109, 91, 94, 48, 93, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 108, 115, 101, 10, 45, 115, 104, 91, 48, 93, 32, 48, > 44, 123, 64, 123, 48, 44, 115, 125, 45, 50, 125, 32, 45, 114, 118, 91, > 49, 44, 50, 93, 32, 45, 95, 98, 108, 101, 110, 100, 91, 49, 44, 50, > 93, 32, 36, 99, 111, 100, 101, 32, 45, 106, 91, 49, 93, 32, 91, 50, > 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 123, 109, 97, 120, 40, 48, > 44, 109, 105, 110, 40, 49, 44, 36, 50, 41, 41, 125, 32, 45, 114, 109, > 91, 94, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, > 101, 10, 45, 105, 102, 32, 123, 115, 61, 61, 50, 124, 124, 115, 61, 61, > 52, 125, 10, 45, 115, 104, 91, 49, 93, 32, 48, 44, 123, 115, 45, 50, > 125, 32, 45, 95, 98, 108, 101, 110, 100, 91, 48, 44, 50, 93, 32, 36, > 99, 111, 100, 101, 32, 45, 114, 109, 91, 50, 93, 10, 45, 115, 104, 91, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 106, 91, > 48, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 123, > 109, 97, 120, 40, 48, 44, 109, 105, 110, 40, 49, 44, 36, 50, 41, 41, > 125, 44, 91, 50, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 94, 48, > 93, 10, 45, 101, 108, 115, 101, 10, 45, 95, 98, 108, 101, 110, 100, 32, > 36, 99, 111, 100, 101, 32, 45, 106, 91, 48, 93, 32, 91, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 123, 109, 97, 120, 40, 48, 44, 109, > 105, 110, 40, 49, 44, 36, 50, 41, 41, 125, 32, 45, 114, 109, 91, 49, > 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 95, 98, 108, 101, 110, 100, 32, 58, 32, 36, 42, 10, 95, 98, 108, > 101, 110, 100, 95, 97, 108, 112, 104, 97, 32, 58, 10, 45, 117, 32, 34, > 34, 10, 95, 98, 108, 101, 110, 100, 95, 97, 110, 100, 32, 58, 10, 45, > 117, 32, 34, 45, 97, 110, 100, 91, 49, 93, 32, 91, 48, 93, 34, 10, > 95, 98, 108, 101, 110, 100, 95, 97, 100, 100, 32, 58, 10, 45, 117, 32, > 34, 45, 43, 91, 49, 93, 32, 91, 48, 93, 32, 45, 99, 91, 49, 93, > 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 97, > 118, 101, 114, 97, 103, 101, 32, 58, 10, 45, 117, 32, 34, 45, 43, 91, > 49, 93, 32, 91, 48, 93, 32, 45, 47, 91, 49, 93, 32, 50, 34, 10, > 95, 98, 108, 101, 110, 100, 95, 98, 108, 117, 101, 32, 58, 10, 45, 117, > 32, 34, 45, 115, 104, 91, 48, 93, 32, 48, 44, 49, 32, 45, 106, 91, > 49, 93, 32, 91, 50, 93, 32, 45, 114, 109, 91, 50, 93, 34, 10, 95, > 98, 108, 101, 110, 100, 95, 98, 117, 114, 110, 32, 58, 10, 45, 117, 32, > 34, 45, 45, 45, 91, 48, 93, 32, 50, 53, 53, 32, 45, 43, 91, 49, > 93, 32, 48, 46, 49, 32, 45, 47, 91, 50, 93, 32, 91, 49, 93, 32, > 45, 114, 109, 91, 49, 93, 32, 45, 43, 91, 49, 93, 32, 49, 32, 45, > 42, 91, 49, 93, 32, 50, 53, 53, 32, 45, 99, 91, 49, 93, 32, 48, > 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 100, 97, 114, > 107, 101, 110, 32, 58, 10, 45, 117, 32, 34, 45, 109, 105, 110, 91, 49, > 93, 32, 91, 48, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, 100, 105, > 102, 102, 101, 114, 101, 110, 99, 101, 32, 58, 10, 45, 117, 32, 34, 45, > 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 97, 98, 115, 91, 49, 93, > 34, 10, 95, 98, 108, 101, 110, 100, 95, 100, 105, 118, 105, 100, 101, 32, > 58, 10, 45, 117, 32, 34, 45, 43, 91, 49, 93, 32, 48, 46, 49, 32, > 45, 94, 91, 49, 93, 32, 45, 49, 32, 45, 42, 91, 49, 93, 32, 91, > 48, 93, 32, 45, 42, 91, 49, 93, 32, 50, 53, 53, 32, 45, 99, 91, > 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, > 95, 100, 111, 100, 103, 101, 32, 58, 10, 45, 117, 32, 34, 45, 45, 91, > 49, 93, 32, 50, 53, 53, 46, 49, 32, 45, 94, 91, 49, 93, 32, 45, > 49, 32, 45, 42, 91, 49, 93, 32, 91, 48, 93, 32, 45, 42, 91, 49, > 93, 32, 45, 50, 53, 53, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, > 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 101, 100, 103, 101, 115, > 32, 58, 10, 45, 117, 32, 34, 45, 45, 98, 108, 101, 110, 100, 95, 101, > 100, 103, 101, 115, 32, 48, 46, 53, 32, 45, 114, 109, 91, 49, 93, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 101, 120, 99, 108, 117, 115, 105, 111, > 110, 32, 58, 10, 45, 117, 32, 34, 45, 45, 42, 91, 48, 44, 49, 93, > 32, 45, 47, 91, 50, 93, 32, 45, 49, 50, 55, 46, 53, 32, 45, 43, > 91, 49, 44, 50, 93, 32, 45, 43, 91, 49, 93, 32, 91, 48, 93, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 102, 114, 101, 101, 122, 101, 32, 58, > 10, 45, 117, 32, 34, 45, 42, 91, 49, 93, 32, 45, 50, 53, 53, 32, > 45, 45, 91, 49, 93, 32, 48, 46, 49, 32, 45, 45, 45, 91, 48, 93, > 32, 50, 53, 53, 32, 45, 115, 113, 114, 91, 50, 93, 32, 45, 47, 91, > 50, 93, 32, 91, 49, 93, 32, 45, 114, 109, 91, 49, 93, 32, 45, 43, > 91, 49, 93, 32, 49, 32, 45, 42, 91, 49, 93, 32, 50, 53, 53, 32, > 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, > 101, 110, 100, 95, 103, 114, 97, 105, 110, 101, 120, 116, 114, 97, 99, 116, > 32, 58, 10, 45, 117, 32, 34, 45, 45, 91, 49, 93, 32, 91, 48, 93, > 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 43, 91, 49, 93, 32, > 49, 50, 56, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 103, 114, 97, 105, 110, 109, 101, 114, > 103, 101, 32, 58, 10, 45, 117, 32, 34, 45, 43, 91, 49, 93, 32, 91, > 48, 93, 32, 45, 45, 91, 49, 93, 32, 49, 50, 56, 32, 45, 99, 91, > 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, > 95, 103, 114, 101, 101, 110, 32, 58, 10, 45, 117, 32, 34, 45, 115, 104, > 91, 48, 93, 32, 48, 44, 48, 32, 45, 115, 104, 91, 48, 93, 32, 50, > 44, 50, 32, 45, 106, 91, 49, 93, 32, 91, 50, 93, 32, 45, 106, 91, > 49, 93, 32, 91, 51, 93, 44, 48, 44, 48, 44, 48, 44, 50, 32, 45, > 114, 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, > 104, 97, 114, 100, 108, 105, 103, 104, 116, 32, 58, 10, 45, 117, 32, 34, > 45, 45, 42, 91, 48, 44, 49, 93, 32, 45, 47, 91, 50, 93, 32, 49, > 50, 55, 46, 53, 32, 45, 45, 43, 91, 48, 44, 49, 93, 32, 45, 42, > 91, 51, 93, 32, 50, 32, 45, 45, 91, 51, 93, 32, 50, 53, 53, 32, > 45, 45, 91, 51, 93, 32, 91, 50, 93, 32, 45, 103, 116, 91, 49, 93, > 32, 49, 50, 56, 32, 34, 92, 10, 34, 45, 106, 91, 50, 93, 32, 91, > 51, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 49, 93, > 32, 45, 114, 109, 91, 49, 44, 51, 93, 32, 45, 99, 91, 49, 93, 32, > 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 104, 97, > 114, 100, 109, 105, 120, 32, 58, 10, 45, 117, 32, 34, 45, 43, 91, 49, > 93, 32, 91, 48, 93, 32, 45, 103, 101, 91, 49, 93, 32, 50, 53, 53, > 32, 45, 42, 91, 49, 93, 32, 50, 53, 53, 34, 10, 95, 98, 108, 101, > 110, 100, 95, 104, 117, 101, 32, 58, 10, 45, 117, 32, 34, 45, 116, 111, > 95, 99, 111, 108, 111, 114, 32, 45, 115, 104, 32, 48, 44, 50, 32, 45, > 114, 103, 98, 50, 104, 115, 118, 91, 50, 44, 51, 93, 32, 45, 115, 104, > 91, 50, 93, 32, 49, 44, 50, 32, 45, 106, 91, 49, 93, 32, 91, 52, > 93, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 114, 109, 91, 52, 93, > 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 50, 44, 51, 93, 32, 45, > 114, 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, > 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 32, 58, 10, > 45, 117, 32, 34, 45, 45, 42, 91, 48, 93, 32, 123, 112, 105, 47, 50, > 53, 53, 125, 32, 45, 42, 91, 49, 93, 32, 123, 112, 105, 47, 50, 53, > 53, 125, 32, 45, 99, 111, 115, 91, 49, 44, 50, 93, 32, 45, 43, 91, > 49, 44, 50, 93, 32, 45, 45, 91, 49, 93, 32, 50, 32, 45, 42, 91, > 49, 93, 32, 45, 54, 51, 46, 55, 53, 32, 45, 99, 91, 49, 93, 32, > 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 108, 105, > 103, 104, 116, 101, 110, 32, 58, 10, 45, 117, 32, 34, 45, 109, 97, 120, > 91, 49, 93, 32, 91, 48, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, > 108, 105, 103, 104, 116, 110, 101, 115, 115, 32, 58, 10, 45, 117, 32, 34, > 45, 116, 111, 95, 99, 111, 108, 111, 114, 32, 45, 115, 104, 32, 48, 44, > 50, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, 50, 44, 51, 93, 32, > 45, 115, 104, 91, 50, 93, 32, 49, 44, 50, 32, 45, 106, 91, 49, 93, > 32, 91, 52, 93, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 114, 109, > 91, 52, 93, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 50, 44, 51, > 93, 32, 45, 114, 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, > 110, 100, 95, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 58, 10, 45, > 117, 32, 34, 45, 116, 111, 95, 99, 111, 108, 111, 114, 32, 45, 115, 104, > 32, 48, 44, 50, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, > 50, 44, 51, 93, 32, 45, 115, 104, 91, 50, 93, 32, 49, 44, 50, 32, > 45, 106, 91, 49, 93, 32, 91, 52, 93, 44, 48, 44, 48, 44, 48, 44, > 49, 32, 45, 114, 109, 91, 52, 93, 32, 45, 121, 99, 98, 99, 114, 50, > 114, 103, 98, 91, 50, 44, 51, 93, 32, 45, 114, 109, 91, 50, 44, 51, > 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, 108, 105, 110, 101, 97, 114, > 98, 117, 114, 110, 32, 58, 10, 45, 117, 32, 34, 45, 43, 91, 49, 93, > 32, 91, 48, 93, 32, 45, 45, 91, 49, 93, 32, 50, 53, 53, 32, 45, > 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, > 101, 110, 100, 95, 108, 105, 110, 101, 97, 114, 108, 105, 103, 104, 116, 32, > 58, 10, 45, 117, 32, 34, 45, 42, 91, 49, 93, 32, 50, 32, 45, 43, > 91, 49, 93, 32, 91, 48, 93, 32, 45, 45, 91, 49, 93, 32, 50, 53, > 53, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, > 98, 108, 101, 110, 100, 95, 109, 117, 108, 116, 105, 112, 108, 121, 32, 58, > 10, 45, 117, 32, 34, 45, 42, 91, 49, 93, 32, 91, 48, 93, 32, 45, > 47, 91, 49, 93, 32, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, > 95, 110, 101, 103, 97, 116, 105, 111, 110, 32, 58, 10, 45, 117, 32, 34, > 45, 43, 91, 49, 93, 32, 91, 48, 93, 32, 45, 45, 91, 49, 93, 32, > 50, 53, 53, 32, 45, 97, 98, 115, 91, 49, 93, 32, 45, 42, 91, 49, > 93, 32, 45, 49, 32, 45, 43, 91, 49, 93, 32, 50, 53, 53, 34, 10, > 95, 98, 108, 101, 110, 100, 95, 111, 114, 32, 58, 10, 45, 117, 32, 34, > 45, 111, 114, 91, 49, 93, 32, 91, 48, 93, 34, 10, 95, 98, 108, 101, > 110, 100, 95, 111, 118, 101, 114, 108, 97, 121, 32, 58, 10, 45, 117, 32, > 34, 45, 45, 42, 91, 48, 44, 49, 93, 32, 45, 47, 91, 50, 93, 32, > 49, 50, 55, 46, 53, 32, 45, 43, 91, 49, 93, 32, 91, 48, 93, 32, > 45, 42, 91, 49, 93, 32, 50, 32, 45, 45, 91, 49, 93, 32, 50, 53, > 53, 32, 45, 45, 91, 49, 93, 32, 91, 50, 93, 32, 45, 45, 108, 116, > 91, 48, 93, 32, 49, 50, 56, 32, 45, 106, 91, 49, 93, 32, 91, 50, > 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 51, 93, 32, > 45, 114, 109, 91, 50, 44, 51, 93, 32, 45, 99, 91, 49, 93, 32, 48, > 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 112, 105, 110, > 108, 105, 103, 104, 116, 32, 58, 10, 45, 117, 32, 34, 45, 42, 91, 49, > 93, 32, 50, 32, 45, 45, 98, 108, 101, 110, 100, 32, 100, 97, 114, 107, > 101, 110, 32, 45, 45, 91, 49, 93, 32, 50, 53, 54, 32, 45, 45, 98, > 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 108, 105, 103, 104, 116, 101, > 110, 32, 45, 103, 101, 91, 49, 93, 32, 48, 32, 34, 92, 10, 34, 45, > 106, 91, 50, 93, 32, 91, 51, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 91, 49, 93, 32, 45, 114, 109, 91, 49, 44, 51, 93, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 114, 101, 102, 108, 101, 99, 116, 32, > 58, 10, 45, 117, 32, 34, 45, 45, 91, 49, 93, 32, 50, 53, 53, 46, > 49, 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 45, 115, 113, 114, > 91, 48, 93, 32, 45, 47, 91, 50, 93, 32, 91, 49, 93, 32, 45, 114, > 109, 91, 49, 93, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, > 34, 10, 95, 98, 108, 101, 110, 100, 95, 114, 101, 100, 32, 58, 10, 45, > 117, 32, 34, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 48, 48, 37, > 32, 45, 106, 91, 49, 93, 32, 91, 50, 93, 44, 48, 44, 48, 44, 48, > 44, 49, 32, 45, 114, 109, 91, 50, 93, 34, 10, 95, 98, 108, 101, 110, > 100, 95, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 32, 58, 10, 45, > 117, 32, 34, 45, 116, 111, 95, 99, 111, 108, 111, 114, 32, 45, 115, 104, > 32, 48, 44, 50, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 50, 44, > 51, 93, 32, 45, 115, 104, 105, 102, 116, 91, 50, 44, 51, 93, 32, 48, > 44, 48, 44, 48, 44, 45, 49, 44, 50, 32, 45, 115, 104, 91, 50, 93, > 32, 49, 44, 50, 32, 45, 106, 91, 49, 93, 32, 91, 52, 93, 44, 48, > 44, 48, 44, 48, 44, 49, 32, 45, 114, 109, 91, 52, 93, 32, 45, 115, > 104, 105, 102, 116, 91, 50, 44, 51, 93, 32, 48, 44, 48, 44, 48, 44, > 49, 44, 50, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 50, 44, 51, > 93, 32, 45, 114, 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, > 110, 100, 95, 115, 99, 114, 101, 101, 110, 32, 58, 10, 45, 117, 32, 34, > 45, 45, 45, 91, 48, 93, 32, 50, 53, 53, 32, 45, 45, 91, 49, 93, > 32, 50, 53, 53, 32, 45, 42, 91, 49, 44, 50, 93, 32, 45, 47, 91, > 49, 93, 32, 50, 53, 53, 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, > 45, 43, 91, 49, 93, 32, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, > 100, 95, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 32, 58, > 10, 45, 117, 32, 34, 45, 110, 111, 114, 109, 91, 49, 93, 32, 45, 108, > 97, 98, 101, 108, 91, 49, 93, 32, 78, 61, 123, 105, 77, 43, 49, 125, > 32, 34, 92, 10, 34, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, > 44, 115, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, > 93, 32, 36, 62, 32, 109, 61, 123, 105, 109, 125, 32, 77, 61, 123, 105, > 77, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 123, 49, 45, 49, > 47, 50, 53, 54, 125, 32, 45, 43, 91, 45, 49, 93, 32, 91, 49, 93, > 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, > 123, 36, 78, 42, 50, 53, 54, 125, 44, 48, 44, 123, 36, 78, 45, 49, > 47, 50, 53, 54, 125, 32, 34, 92, 10, 34, 45, 105, 91, 45, 50, 93, > 32, 50, 53, 54, 44, 49, 44, 49, 44, 49, 44, 39, 120, 42, 40, 36, > 77, 45, 36, 109, 41, 47, 50, 53, 53, 43, 36, 109, 39, 32, 45, 114, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 50, 32, 45, 42, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 91, 45, 50, 44, > 45, 49, 93, 32, 36, 78, 44, 49, 44, 49, 44, 49, 44, 50, 32, 45, > 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, 45, 47, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 34, 92, 10, 34, 45, > 97, 91, 50, 45, 45, 49, 93, 32, 99, 32, 45, 109, 97, 112, 91, 49, > 93, 32, 91, 50, 93, 32, 45, 114, 109, 91, 50, 93, 34, 10, 95, 98, > 108, 101, 110, 100, 95, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, > 101, 48, 32, 58, 10, 45, 117, 32, 34, 45, 110, 111, 114, 109, 91, 49, > 93, 32, 45, 45, 110, 101, 113, 91, 49, 93, 32, 48, 32, 45, 108, 97, > 98, 101, 108, 91, 49, 93, 32, 78, 61, 64, 123, 49, 44, 105, 77, 43, > 49, 125, 32, 34, 92, 10, 34, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 123, 48, 44, 115, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 91, 48, 93, 32, 36, 62, 32, 109, 61, 123, 105, 109, 125, 32, 77, 61, > 123, 105, 77, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 123, 49, > 45, 49, 47, 50, 53, 54, 125, 32, 45, 43, 91, 45, 49, 93, 32, 91, > 49, 93, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, > 93, 32, 123, 36, 78, 42, 50, 53, 54, 125, 44, 48, 44, 123, 36, 78, > 45, 49, 47, 50, 53, 54, 125, 32, 34, 92, 10, 34, 45, 105, 91, 45, > 50, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 49, 44, 39, 120, 42, > 40, 36, 77, 45, 36, 109, 41, 47, 50, 53, 53, 43, 36, 109, 39, 32, > 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 50, 32, > 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 91, 45, > 50, 44, 45, 49, 93, 32, 36, 78, 44, 49, 44, 49, 44, 49, 44, 50, > 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, 45, 47, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 34, 92, 10, > 34, 45, 97, 91, 51, 45, 45, 49, 93, 32, 99, 32, 45, 109, 97, 112, > 91, 49, 93, 32, 91, 51, 93, 32, 45, 114, 109, 91, 51, 93, 32, 45, > 42, 91, 49, 44, 50, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, 115, > 111, 102, 116, 98, 117, 114, 110, 32, 58, 10, 45, 117, 32, 34, 45, 45, > 45, 91, 48, 93, 32, 50, 53, 53, 46, 49, 32, 45, 94, 91, 50, 93, > 32, 45, 49, 32, 45, 42, 91, 50, 93, 32, 91, 49, 93, 32, 45, 42, > 91, 50, 93, 32, 45, 49, 50, 55, 46, 53, 32, 45, 45, 45, 91, 48, > 93, 32, 50, 53, 53, 32, 45, 45, 43, 91, 49, 93, 32, 48, 46, 49, > 32, 45, 47, 91, 51, 44, 52, 93, 32, 45, 42, 91, 51, 93, 32, 49, > 50, 55, 46, 53, 32, 45, 43, 91, 51, 93, 32, 50, 53, 53, 32, 45, > 43, 91, 49, 93, 32, 91, 48, 93, 32, 45, 103, 116, 91, 49, 93, 32, > 50, 53, 53, 32, 34, 92, 10, 34, 45, 106, 91, 50, 93, 32, 91, 51, > 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 49, 93, 32, > 45, 114, 109, 91, 49, 44, 51, 93, 32, 45, 99, 91, 49, 93, 32, 48, > 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 115, 111, 102, > 116, 100, 111, 100, 103, 101, 32, 58, 10, 45, 117, 32, 34, 45, 45, 45, > 91, 49, 93, 32, 50, 53, 53, 46, 49, 32, 45, 94, 91, 50, 93, 32, > 45, 49, 32, 45, 42, 91, 50, 93, 32, 91, 48, 93, 32, 45, 42, 91, > 50, 93, 32, 45, 49, 50, 55, 46, 53, 32, 45, 45, 45, 91, 49, 93, > 32, 50, 53, 53, 32, 45, 45, 43, 91, 48, 93, 32, 48, 46, 49, 32, > 45, 47, 91, 51, 44, 52, 93, 32, 45, 42, 91, 51, 93, 32, 49, 50, > 55, 46, 53, 32, 45, 43, 91, 51, 93, 32, 50, 53, 53, 32, 45, 43, > 91, 49, 93, 32, 91, 48, 93, 32, 45, 103, 116, 91, 49, 93, 32, 50, > 53, 53, 32, 34, 92, 10, 34, 45, 106, 91, 50, 93, 32, 91, 51, 93, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 49, 93, 32, 45, > 114, 109, 91, 49, 44, 51, 93, 32, 45, 99, 91, 49, 93, 32, 48, 44, > 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 115, 111, 102, 116, > 108, 105, 103, 104, 116, 32, 58, 10, 45, 117, 32, 34, 45, 45, 47, 91, > 48, 93, 32, 50, 53, 53, 32, 45, 47, 91, 49, 93, 32, 50, 53, 53, > 32, 45, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 42, 91, 50, 93, > 32, 91, 49, 93, 32, 45, 42, 91, 49, 93, 32, 91, 51, 93, 32, 45, > 42, 91, 49, 93, 32, 45, 50, 32, 45, 42, 91, 50, 93, 32, 50, 32, > 45, 43, 91, 49, 45, 51, 93, 32, 45, 42, 91, 49, 93, 32, 50, 53, > 53, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, > 98, 108, 101, 110, 100, 95, 115, 116, 97, 109, 112, 32, 58, 10, 45, 117, > 32, 34, 45, 42, 91, 49, 93, 32, 50, 32, 45, 43, 91, 49, 93, 32, > 91, 48, 93, 32, 45, 45, 91, 49, 93, 32, 50, 53, 53, 32, 45, 99, > 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, > 100, 95, 115, 117, 98, 116, 114, 97, 99, 116, 32, 58, 10, 45, 117, 32, > 34, 45, 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 42, 91, 49, 93, > 32, 45, 49, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 118, 97, 108, 117, 101, 32, 58, 10, > 45, 117, 32, 34, 45, 116, 111, 95, 99, 111, 108, 111, 114, 32, 45, 115, > 104, 32, 48, 44, 50, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 50, > 44, 51, 93, 32, 45, 115, 104, 91, 50, 93, 32, 48, 44, 49, 32, 45, > 106, 91, 49, 93, 32, 91, 52, 93, 32, 45, 114, 109, 91, 52, 93, 32, > 45, 104, 115, 118, 50, 114, 103, 98, 91, 50, 44, 51, 93, 32, 45, 114, > 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, 118, > 105, 118, 105, 100, 108, 105, 103, 104, 116, 32, 58, 10, 45, 117, 32, 34, > 45, 42, 91, 49, 93, 32, 50, 32, 45, 45, 98, 108, 101, 110, 100, 32, > 98, 117, 114, 110, 32, 45, 45, 91, 49, 93, 32, 50, 53, 54, 32, 45, > 45, 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 100, 111, 100, 103, > 101, 32, 45, 103, 101, 91, 49, 93, 32, 48, 32, 34, 92, 10, 34, 45, > 106, 91, 50, 93, 32, 91, 51, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 91, 49, 93, 32, 45, 114, 109, 91, 49, 44, 51, 93, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 120, 111, 114, 32, 58, 10, 45, 117, > 32, 34, 45, 120, 111, 114, 91, 49, 93, 32, 91, 48, 93, 34, 10, 35, > 64, 103, 109, 105, 99, 32, 98, 108, 101, 110, 100, 95, 101, 100, 103, 101, > 115, 32, 58, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, > 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, > 101, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 116, 111, 103, 101, 116, 104, 101, 114, 115, 32, 117, 115, > 105, 110, 103, 32, 39, 101, 100, 103, 101, 115, 39, 32, 109, 111, 100, 101, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, > 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 98, 108, > 101, 110, 100, 95, 101, 100, 103, 101, 115, 32, 48, 46, 56, 10, 98, 108, > 101, 110, 100, 95, 101, 100, 103, 101, 115, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 123, 36, 49, 62, 61, 48, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 66, 108, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 117, 115, 105, 110, 103, 32, 39, 101, 100, 103, 101, 115, 39, 32, > 109, 111, 100, 101, 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 32, 36, 49, 46, 34, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 49, 125, 32, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, > 103, 98, 32, 45, 114, 91, 94, 48, 93, 32, 91, 48, 93, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 43, 91, 45, > 49, 93, 32, 49, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 32, 45, > 110, 91, 45, 49, 93, 32, 49, 44, 49, 48, 32, 45, 115, 113, 114, 91, > 45, 49, 93, 32, 45, 115, 91, 45, 50, 93, 32, 99, 32, 45, 42, 91, > 45, 52, 45, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 97, 91, 45, > 52, 45, 45, 49, 93, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 114, 91, 94, 48, 93, 32, 91, 48, 93, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 43, 32, 45, 115, > 91, 45, 49, 93, 32, 99, 32, 45, 47, 91, 45, 52, 45, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 118, 32, 43, 32, 45, > 101, 110, 100, 105, 102, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 101, > 110, 100, 95, 102, 97, 100, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 66, 108, 101, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 116, 111, 103, 101, 116, 104, 101, 114, 32, > 117, 115, 105, 110, 103, 32, 97, 32, 103, 105, 118, 101, 110, 32, 102, 97, > 100, 105, 110, 103, 32, 112, 97, 116, 116, 101, 114, 110, 32, 40, 100, 101, > 102, 105, 110, 101, 100, 32, 97, 115, 32, 116, 104, 101, 32, 108, 97, 116, > 101, 115, 116, 32, 105, 109, 97, 103, 101, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, > 125, 44, 123, 104, 125, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 49, 44, 39, 99, 111, 115, 40, 121, 47, 49, 48, 41, 39, 32, > 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 48, > 44, 49, 32, 45, 45, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, 10, > 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 66, 108, 101, 110, 100, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 39, 102, 97, 100, 101, 39, > 32, 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 91, > 94, 45, 49, 93, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, 100, 115, > 91, 94, 45, 49, 93, 125, 44, 48, 10, 45, 114, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, > 48, 48, 37, 44, 49, 32, 45, 109, 97, 120, 91, 45, 49, 93, 32, 48, > 32, 45, 109, 105, 110, 91, 45, 49, 93, 32, 123, 64, 35, 45, 50, 125, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, > 45, 45, 45, 91, 45, 49, 93, 32, 36, 62, 32, 45, 97, 98, 115, 91, > 45, 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 49, 32, 45, 109, 97, 120, 91, 45, 49, 93, 32, > 48, 32, 45, 42, 91, 36, 62, 44, 45, 49, 93, 32, 45, 100, 111, 110, > 101, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 43, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 101, 110, 100, 95, 109, > 101, 100, 105, 97, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, > 108, 101, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 116, 111, 103, 101, 116, 104, 101, 114, 32, 117, 115, > 105, 110, 103, 32, 39, 109, 101, 100, 105, 97, 110, 39, 32, 109, 111, 100, > 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, > 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 109, > 105, 114, 114, 111, 114, 91, 48, 93, 32, 121, 32, 45, 45, 98, 108, 101, > 110, 100, 95, 109, 101, 100, 105, 97, 110, 10, 98, 108, 101, 110, 100, 95, > 109, 101, 100, 105, 97, 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 66, 108, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 117, 115, 105, 110, 103, 32, 39, 109, 101, 100, 105, 97, 110, 39, 32, 109, > 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 99, > 111, 108, 111, 114, 109, 111, 100, 101, 32, 48, 32, 45, 114, 32, 64, 123, > 45, 109, 97, 120, 95, 119, 104, 100, 125, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, 119, > 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, 100, 125, 32, 45, > 114, 32, 49, 48, 48, 37, 44, 123, 104, 42, 100, 125, 44, 49, 44, 49, > 48, 48, 37, 44, 45, 49, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, > 50, 125, 32, 45, 43, 32, 45, 47, 32, 50, 10, 45, 101, 108, 105, 102, > 32, 123, 64, 35, 62, 50, 125, 10, 45, 112, 101, 114, 109, 117, 116, 101, > 32, 120, 121, 99, 122, 32, 45, 97, 32, 99, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 115, 45, 49, 45, 36, 62, 125, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 36, 62, 44, 36, 62, 32, 45, 115, 104, 91, 45, 50, 93, 32, 123, 36, > 62, 43, 49, 125, 44, 123, 36, 62, 43, 49, 125, 32, 45, 45, 103, 116, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 45, 106, 91, 45, 51, 93, 32, > 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 52, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 50, 93, 32, 45, > 106, 91, 45, 52, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, > 52, 45, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 123, 115, 37, 50, 125, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 53, 48, 37, 32, 45, 101, 108, 115, 101, 32, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 123, 115, 47, 50, 45, 49, > 125, 44, 123, 115, 47, 50, 125, 32, 45, 99, 111, 109, 112, 111, 115, 101, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 43, 32, 45, 47, 32, 50, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 112, 101, 114, 109, 117, 116, 101, > 32, 120, 121, 99, 122, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, > 45, 49, 93, 32, 36, 119, 104, 100, 44, 49, 48, 48, 37, 44, 45, 49, > 32, 45, 118, 32, 43, 10, 95, 102, 97, 100, 101, 32, 58, 10, 45, 114, > 91, 45, 50, 93, 32, 91, 45, 51, 93, 44, 53, 32, 45, 114, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 51, 32, 45, 99, 91, 45, 49, 93, > 32, 36, 49, 37, 44, 36, 50, 37, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, > 32, 98, 108, 101, 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, 115, 32, > 58, 32, 95, 105, 115, 95, 109, 105, 120, 101, 100, 95, 109, 111, 100, 101, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 105, 110, 110, 101, > 114, 95, 102, 97, 100, 105, 110, 103, 91, 37, 93, 62, 61, 48, 44, 95, > 111, 117, 116, 101, 114, 95, 102, 97, 100, 105, 110, 103, 91, 37, 93, 62, > 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, 101, 110, > 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 117, 115, 105, 110, 103, 32, 97, 32, 115, 101, 97, 109, 108, 101, > 115, 115, 32, 98, 108, 101, 110, 100, 105, 110, 103, 32, 109, 111, 100, 101, > 32, 40, 80, 111, 105, 115, 115, 111, 110, 45, 98, 97, 115, 101, 100, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 115, 95, 109, > 105, 120, 101, 100, 61, 48, 39, 44, 32, 39, 105, 110, 110, 101, 114, 95, > 102, 97, 100, 105, 110, 103, 61, 48, 39, 32, 97, 110, 100, 32, 39, 111, > 117, 116, 101, 114, 95, 102, 97, 100, 105, 110, 103, 61, 49, 48, 48, 37, > 39, 46, 10, 98, 108, 101, 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, > 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 49, 48, 48, > 37, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 48, 125, 10, 45, 118, 32, 45, 32, 115, 48, 61, 34, 110, 111, 110, > 45, 109, 105, 120, 101, 100, 34, 32, 115, 49, 61, 34, 109, 105, 120, 101, > 100, 34, 10, 45, 118, 32, 43, 32, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 66, 108, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 117, > 115, 105, 110, 103, 32, 115, 101, 97, 109, 108, 101, 115, 115, 32, 109, 111, > 100, 101, 32, 40, 80, 111, 105, 115, 115, 111, 110, 45, 98, 97, 115, 101, > 100, 41, 44, 32, 105, 110, 32, 34, 36, 123, 115, 123, 36, 49, 33, 61, > 48, 125, 125, 34, 32, 109, 111, 100, 101, 32, 119, 105, 116, 104, 32, 105, > 110, 110, 101, 114, 32, 102, 97, 100, 105, 110, 103, 32, 36, 50, 32, 97, > 110, 100, 32, 111, 117, 116, 101, 114, 32, 102, 97, 100, 105, 110, 103, 32, > 36, 51, 46, 34, 32, 45, 118, 32, 45, 10, 45, 116, 111, 95, 97, 91, > 94, 48, 93, 32, 45, 114, 32, 64, 123, 48, 44, 119, 43, 51, 50, 125, > 44, 64, 123, 48, 44, 104, 43, 51, 50, 125, 44, 49, 44, 49, 48, 48, > 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, > 102, 32, 123, 36, 51, 39, 33, 61, 39, 49, 48, 48, 37, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, > 91, 48, 44, 49, 93, 10, 45, 45, 98, 108, 101, 110, 100, 95, 115, 101, > 97, 109, 108, 101, 115, 115, 32, 36, 49, 44, 36, 50, 44, 49, 48, 48, > 37, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 50, 93, 32, > 49, 48, 48, 37, 32, 45, 110, 101, 113, 91, 45, 50, 93, 32, 48, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 50, 93, 32, 49, 10, > 105, 77, 61, 64, 123, 45, 50, 44, 105, 77, 125, 32, 105, 99, 61, 123, > 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, > 92, 32, 36, 51, 125, 44, 50, 42, 36, 51, 42, 36, 105, 77, 44, 49, > 43, 36, 51, 41, 125, 10, 45, 105, 102, 32, 123, 36, 105, 99, 60, 61, > 36, 105, 77, 125, 32, 45, 99, 91, 45, 50, 93, 32, 48, 44, 123, 109, > 97, 120, 40, 49, 44, 36, 105, 99, 41, 125, 32, 45, 110, 91, 45, 50, > 93, 32, 48, 44, 49, 10, 45, 101, 108, 115, 101, 32, 45, 110, 91, 45, > 50, 93, 32, 48, 44, 123, 109, 97, 120, 40, 48, 44, 50, 45, 36, 105, > 99, 47, 36, 105, 77, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 42, 91, 45, 50, 93, 32, 45, 49, 32, 45, 43, 91, 45, 50, 93, 32, > 49, 10, 45, 106, 91, 48, 93, 32, 91, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 91, 49, 93, 32, 45, 114, 109, 91, 49, 44, > 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 101, 108, 115, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, > 45, 49, 125, 32, 45, 108, 91, 48, 44, 49, 93, 10, 45, 45, 114, 91, > 48, 93, 32, 49, 44, 49, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, > 97, 118, 103, 61, 64, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 91, 45, > 49, 93, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 42, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 101, 114, 111, 100, 101, > 91, 45, 49, 93, 32, 51, 10, 45, 103, 91, 48, 44, 49, 93, 32, 120, > 121, 44, 49, 10, 45, 42, 91, 45, 51, 44, 45, 50, 93, 32, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 36, 49, 10, 45, 45, 97, 91, 48, 44, > 49, 93, 32, 99, 32, 45, 45, 97, 91, 50, 44, 51, 93, 32, 99, 32, > 45, 110, 111, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 60, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 50, 125, > 10, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 48, > 10, 105, 77, 61, 123, 105, 77, 125, 32, 105, 99, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 50, 125, 44, 50, 42, 36, 50, 42, 36, 105, 77, 44, 49, 43, 36, 50, > 41, 125, 10, 45, 105, 102, 32, 123, 36, 105, 99, 60, 61, 36, 105, 77, > 125, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 123, 109, 97, 120, 40, > 49, 44, 36, 105, 99, 41, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 49, 10, 45, 101, 108, 115, 101, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 123, 109, 97, 120, 40, 48, 44, 50, 45, 36, 105, 99, 47, 36, > 105, 77, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 106, 91, 45, 53, 93, 32, 91, 45, 51, 93, 44, 48, > 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 10, 45, 106, > 91, 45, 52, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 49, 93, 10, 45, 114, 109, 91, 45, 51, 45, > 45, 49, 93, 10, 45, 103, 91, 48, 93, 32, 120, 44, 45, 49, 32, 45, > 103, 91, 49, 93, 32, 121, 44, 45, 49, 32, 45, 43, 10, 45, 102, 102, > 116, 91, 48, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 49, 44, 39, 45, 40, 52, 45, 50, 42, 99, 111, 115, 40, 50, 42, > 120, 42, 112, 105, 47, 119, 41, 45, 50, 42, 99, 111, 115, 40, 50, 42, > 121, 42, 112, 105, 47, 104, 41, 41, 39, 10, 45, 61, 91, 45, 49, 93, > 32, 49, 32, 45, 47, 91, 45, 51, 44, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 61, 91, 45, 50, 93, > 32, 48, 32, 45, 61, 91, 45, 49, 93, 32, 48, 10, 45, 105, 102, 102, > 116, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 45, 102, 99, 91, 45, 49, 93, 32, 36, 97, 118, 103, 10, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 99, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 122, 32, 49, 54, 44, 49, 54, 44, 123, 119, > 45, 49, 55, 125, 44, 123, 104, 45, 49, 55, 125, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 102, 97, 100, 101, 95, 100, 105, 97, > 109, 111, 110, 100, 32, 58, 32, 48, 60, 61, 95, 115, 116, 97, 114, 116, > 60, 61, 49, 48, 48, 44, 48, 60, 61, 95, 101, 110, 100, 60, 61, 49, > 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, > 116, 101, 32, 100, 105, 97, 109, 111, 110, 100, 32, 102, 97, 100, 105, 110, > 103, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 116, 97, 114, 116, 61, 56, 48, 39, 32, 97, 110, 100, 32, > 39, 101, 110, 100, 61, 57, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, > 123, 104, 125, 32, 45, 45, 102, 97, 100, 101, 95, 100, 105, 97, 109, 111, > 110, 100, 32, 56, 48, 44, 56, 53, 10, 102, 97, 100, 101, 95, 100, 105, > 97, 109, 111, 110, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 55, 48, 125, 44, 36, 123, 50, 61, 57, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 40, 36, > 49, 37, 44, 36, 50, 37, 41, 32, 100, 105, 97, 109, 111, 110, 100, 45, > 115, 104, 97, 112, 101, 100, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, > 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, > 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, > 49, 125, 93, 10, 40, 48, 44, 49, 44, 48, 59, 49, 44, 49, 44, 49, > 59, 48, 44, 49, 44, 48, 41, 32, 45, 95, 102, 97, 100, 101, 32, 36, > 49, 44, 36, 50, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 97, 100, > 101, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, 95, 97, 110, 103, 108, > 101, 44, 48, 60, 61, 95, 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, > 44, 48, 60, 61, 95, 101, 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 108, 105, > 110, 101, 97, 114, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 110, 103, 108, > 101, 61, 52, 53, 39, 44, 32, 39, 115, 116, 97, 114, 116, 61, 51, 48, > 39, 32, 97, 110, 100, 32, 39, 101, 110, 100, 61, 55, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, > 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 102, 97, 100, 101, > 95, 108, 105, 110, 101, 97, 114, 32, 52, 53, 44, 52, 56, 44, 53, 50, > 10, 102, 97, 100, 101, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 52, 53, 125, 44, 36, 123, 50, > 61, 51, 48, 125, 44, 36, 123, 51, 61, 55, 48, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 40, 36, 50, > 37, 44, 36, 51, 37, 41, 32, 108, 105, 110, 101, 97, 114, 32, 102, 97, > 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 32, 36, 49, > 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, > 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 10, 54, 52, > 44, 54, 52, 44, 49, 44, 49, 44, 34, 120, 42, 99, 111, 115, 40, 36, > 49, 42, 112, 105, 47, 49, 56, 48, 41, 32, 43, 32, 121, 42, 115, 105, > 110, 40, 36, 49, 42, 112, 105, 47, 49, 56, 48, 41, 34, 32, 45, 95, > 102, 97, 100, 101, 32, 36, 50, 44, 36, 51, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 97, 100, 101, 95, 114, 97, 100, 105, 97, 108, 32, 58, > 32, 48, 60, 61, 95, 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, > 48, 60, 61, 95, 101, 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 114, 97, 100, > 105, 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 97, 114, 116, > 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, 101, 110, 100, 61, 55, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, > 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 102, > 97, 100, 101, 95, 114, 97, 100, 105, 97, 108, 32, 51, 48, 44, 55, 48, > 10, 102, 97, 100, 101, 95, 114, 97, 100, 105, 97, 108, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, > 61, 55, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, > 101, 97, 116, 101, 32, 40, 36, 49, 37, 44, 36, 50, 37, 41, 32, 114, > 97, 100, 105, 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, > 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, > 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, > 125, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 61, 91, > 45, 49, 93, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, > 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 95, > 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 97, 100, 101, 95, 120, 32, 58, 32, 48, 60, 61, 95, > 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, 48, 60, 61, 95, 101, > 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 114, 101, 97, 116, 101, 32, 104, 111, 114, 105, 122, 111, 110, 116, > 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 97, 114, 116, 61, > 51, 48, 39, 32, 97, 110, 100, 32, 39, 101, 110, 100, 61, 55, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, > 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 102, 97, > 100, 101, 95, 120, 32, 51, 48, 44, 55, 48, 10, 102, 97, 100, 101, 95, > 120, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, > 125, 44, 36, 123, 50, 61, 55, 48, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 40, 36, 49, 37, 44, 36, > 50, 37, 41, 32, 104, 111, 114, 105, 122, 111, 110, 116, 97, 108, 32, 102, > 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 40, 48, 44, 49, > 41, 32, 45, 95, 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 102, 97, 100, 101, 95, 121, 32, 58, 32, > 48, 60, 61, 95, 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, 48, > 60, 61, 95, 101, 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 118, 101, 114, 116, > 105, 99, 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 97, 114, > 116, 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, 101, 110, 100, 61, 55, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, > 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, > 102, 97, 100, 101, 95, 121, 32, 51, 48, 44, 55, 48, 10, 102, 97, 100, > 101, 95, 121, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 51, 48, 125, 44, 36, 123, 50, 61, 55, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 40, 36, 49, 37, > 44, 36, 50, 37, 41, 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 102, > 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 40, 48, 59, 49, > 41, 32, 45, 95, 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 102, 97, 100, 101, 95, 122, 32, 58, 32, > 48, 60, 61, 95, 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, 48, > 60, 61, 95, 101, 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 116, 114, 97, 110, > 115, 118, 101, 114, 115, 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, > 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, > 116, 97, 114, 116, 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, 101, 110, > 100, 61, 55, 48, 39, 46, 10, 102, 97, 100, 101, 95, 122, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, > 50, 61, 55, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 114, 101, 97, 116, 101, 32, 40, 36, 49, 37, 44, 36, 50, 37, 41, 32, > 116, 114, 97, 110, 115, 118, 101, 114, 115, 97, 108, 32, 102, 97, 100, 105, > 110, 103, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, > 44, 123, 36, 62, 43, 49, 125, 93, 32, 40, 48, 47, 49, 41, 32, 45, > 95, 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 115, 117, 98, 95, 97, 108, 112, 104, 97, 32, 58, 32, > 95, 111, 112, 97, 99, 105, 116, 121, 95, 103, 97, 105, 110, 62, 61, 49, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 97, 108, > 112, 104, 97, 45, 99, 104, 97, 110, 110, 101, 108, 32, 100, 105, 102, 102, > 101, 114, 101, 110, 99, 101, 32, 40, 111, 112, 112, 111, 115, 105, 116, 101, > 32, 111, 102, 32, 97, 108, 112, 104, 97, 32, 98, 108, 101, 110, 100, 105, > 110, 103, 41, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 119, 111, 32, > 99, 111, 110, 115, 101, 99, 117, 116, 105, 118, 101, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 101, > 32, 97, 108, 112, 104, 97, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, > 101, 32, 65, 45, 66, 32, 105, 115, 32, 100, 101, 102, 105, 110, 101, 100, > 32, 97, 115, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 104, 97, > 118, 105, 110, 103, 32, 109, 105, 110, 105, 109, 97, 108, 32, 111, 112, 97, > 99, 105, 116, 121, 44, 32, 115, 117, 99, 104, 32, 116, 104, 97, 116, 32, > 97, 108, 112, 104, 97, 95, 98, 108, 101, 110, 100, 40, 66, 44, 65, 45, > 66, 41, 32, 61, 32, 66, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, > 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, > 125, 32, 45, 45, 115, 117, 98, 95, 97, 108, 112, 104, 97, 32, 44, 10, > 115, 117, 98, 95, 97, 108, 112, 104, 97, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 36, 123, 49, 61, 49, 125, 62, 61, 49, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 109, 105, > 110, 105, 109, 97, 108, 32, 97, 108, 112, 104, 97, 45, 99, 104, 97, 110, > 110, 101, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 32, 98, > 101, 116, 119, 101, 101, 110, 32, 99, 111, 110, 115, 101, 99, 117, 116, 105, > 118, 101, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 111, 112, 97, 99, 105, 116, 121, 32, 103, 97, 105, 110, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 109, 111, 118, 101, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, > 62, 44, 123, 49, 43, 36, 62, 125, 93, 10, 45, 116, 111, 95, 99, 111, > 108, 111, 114, 109, 111, 100, 101, 32, 48, 32, 45, 114, 32, 64, 123, 45, > 109, 97, 120, 95, 119, 104, 100, 125, 44, 49, 48, 48, 37, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 45, 62, 91, 48, 44, > 49, 93, 32, 45, 42, 91, 50, 93, 32, 50, 53, 53, 10, 45, 45, 91, > 48, 44, 50, 93, 32, 91, 49, 93, 32, 45, 114, 101, 112, 108, 97, 99, > 101, 91, 50, 93, 32, 48, 44, 49, 10, 45, 105, 91, 50, 93, 32, 91, > 48, 93, 32, 45, 47, 91, 50, 44, 51, 93, 10, 45, 99, 111, 109, 112, > 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 50, 93, 32, > 109, 97, 120, 10, 45, 42, 91, 50, 93, 32, 36, 49, 32, 45, 99, 91, > 50, 93, 32, 48, 44, 49, 10, 45, 45, 114, 101, 112, 108, 97, 99, 101, > 91, 50, 93, 32, 48, 44, 49, 32, 45, 47, 91, 48, 44, 51, 93, 32, > 45, 43, 91, 48, 44, 49, 93, 32, 45, 42, 91, 49, 93, 32, 50, 53, > 53, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 58, 32, 73, 109, 97, 103, 101, 32, 115, 101, 113, 117, 101, 110, 99, 101, > 115, 10, 35, 64, 103, 109, 105, 99, 32, 97, 110, 105, 109, 97, 116, 101, > 32, 58, 32, 102, 105, 108, 116, 101, 114, 95, 110, 97, 109, 101, 44, 34, > 112, 97, 114, 97, 109, 49, 95, 115, 116, 97, 114, 116, 44, 46, 46, 44, > 112, 97, 114, 97, 109, 78, 95, 115, 116, 97, 114, 116, 34, 44, 34, 112, > 97, 114, 97, 109, 49, 95, 101, 110, 100, 44, 46, 46, 44, 112, 97, 114, > 97, 109, 78, 95, 101, 110, 100, 34, 44, 110, 98, 95, 102, 114, 97, 109, > 101, 115, 62, 61, 48, 44, 95, 111, 117, 116, 112, 117, 116, 95, 102, 114, > 97, 109, 101, 115, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, > 111, 117, 116, 112, 117, 116, 95, 102, 105, 108, 101, 110, 97, 109, 101, 32, > 58, 32, 100, 101, 108, 97, 121, 62, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 110, 105, 109, 97, 116, 101, 32, 102, 105, 108, 116, 101, > 114, 32, 102, 114, 111, 109, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, > 112, 97, 114, 97, 109, 101, 116, 101, 114, 115, 32, 116, 111, 32, 101, 110, > 100, 105, 110, 103, 32, 112, 97, 114, 97, 109, 101, 116, 101, 114, 115, 32, > 111, 114, 32, 97, 110, 105, 109, 97, 116, 101, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 105, 110, 32, 97, 32, 100, 105, 115, 112, 108, 97, 121, > 32, 119, 105, 110, 100, 111, 119, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 100, 101, 108, 97, 121, 61, 51, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 97, 110, 105, 109, 97, 116, 101, 32, 102, 108, 111, 119, 101, > 114, 44, 34, 48, 44, 51, 34, 44, 34, 50, 48, 44, 56, 34, 44, 57, > 10, 97, 110, 105, 109, 97, 116, 101, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, 61, 48, 125, 44, > 36, 123, 51, 61, 34, 34, 125, 44, 36, 123, 52, 61, 49, 48, 125, 44, > 36, 123, 53, 61, 49, 125, 44, 34, 36, 123, 54, 61, 125, 34, 10, 45, > 105, 102, 32, 123, 105, 115, 118, 97, 108, 40, 36, 49, 41, 125, 10, 45, > 105, 102, 32, 36, 50, 32, 45, 101, 91, 48, 45, 45, 52, 93, 32, 34, > 65, 110, 105, 109, 97, 116, 101, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 97, 32, 100, 101, 108, 97, 121, 32, 111, 102, > 32, 36, 49, 32, 109, 115, 44, 32, 97, 110, 100, 32, 112, 105, 110, 103, > 45, 112, 111, 110, 103, 32, 109, 111, 100, 101, 46, 34, 10, 45, 101, 108, > 115, 101, 32, 45, 101, 91, 48, 45, 45, 52, 93, 32, 34, 65, 110, 105, > 109, 97, 116, 101, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 97, 32, 100, 101, 108, 97, 121, 32, 111, 102, 32, 36, 49, > 32, 109, 115, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 33, 64, 35, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 10, 115, 112, 101, 101, 100, > 61, 36, 49, 10, 112, 97, 117, 115, 101, 61, 45, 49, 10, 100, 105, 114, > 101, 99, 116, 105, 111, 110, 61, 49, 10, 102, 114, 97, 109, 101, 61, 48, > 10, 45, 100, 111, 10, 45, 119, 91, 36, 102, 114, 97, 109, 101, 93, 32, > 45, 49, 44, 45, 49, 44, 49, 44, 48, 44, 45, 49, 44, 45, 49, 44, > 64, 123, 36, 102, 114, 97, 109, 101, 44, 98, 125, 46, 64, 123, 36, 102, > 114, 97, 109, 101, 44, 120, 125, 10, 102, 114, 97, 109, 101, 61, 123, 36, > 102, 114, 97, 109, 101, 43, 36, 100, 105, 114, 101, 99, 116, 105, 111, 110, > 125, 10, 45, 105, 102, 32, 36, 50, 10, 45, 105, 102, 32, 123, 36, 102, > 114, 97, 109, 101, 61, 61, 45, 49, 125, 32, 102, 114, 97, 109, 101, 61, > 48, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 61, 49, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 102, 114, 97, 109, 101, 61, 61, 64, 35, 125, > 32, 102, 114, 97, 109, 101, 61, 123, 64, 35, 45, 49, 125, 32, 100, 105, > 114, 101, 99, 116, 105, 111, 110, 61, 45, 49, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 108, 115, 101, 32, 102, 114, 97, 109, 101, 61, 123, 36, > 102, 114, 97, 109, 101, 37, 64, 35, 125, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 119, 97, 105, 116, 32, 36, 115, 112, 101, 101, 100, 10, 45, 105, > 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, > 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, > 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, > 42, 49, 46, 53, 125, 44, 123, 64, 123, 33, 44, 104, 125, 42, 49, 46, > 53, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, > 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, > 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, > 34, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 64, > 123, 33, 44, 119, 125, 47, 49, 46, 53, 125, 44, 123, 64, 123, 33, 44, > 104, 125, 47, 49, 46, 53, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, > 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, > 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 82, 125, 125, 32, 45, 119, > 91, 93, 32, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, > 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 64, 123, 33, 44, 111, 125, 32, 115, 112, 101, 101, > 100, 61, 123, 109, 105, 110, 40, 53, 48, 48, 44, 109, 97, 120, 40, 49, > 48, 44, 36, 115, 112, 101, 101, 100, 45, 49, 48, 42, 64, 123, 33, 44, > 111, 125, 41, 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 83, 80, > 65, 67, 69, 125, 10, 45, 105, 102, 32, 123, 36, 112, 97, 117, 115, 101, > 62, 61, 48, 125, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 61, 36, > 112, 97, 117, 115, 101, 32, 112, 97, 117, 115, 101, 61, 45, 49, 10, 45, > 101, 108, 115, 101, 32, 112, 97, 117, 115, 101, 61, 36, 100, 105, 114, 101, > 99, 116, 105, 111, 110, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 61, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 97, 105, 116, 32, 45, > 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 125, > 32, 45, 118, 32, 43, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, > 45, 45, 51, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 97, 110, > 105, 109, 97, 116, 101, 100, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, > 102, 32, 102, 105, 108, 116, 101, 114, 32, 39, 36, 49, 39, 44, 32, 102, > 114, 111, 109, 32, 112, 97, 114, 97, 109, 101, 116, 101, 114, 115, 32, 36, > 50, 32, 116, 111, 32, 36, 51, 32, 119, 105, 116, 104, 32, 36, 52, 32, > 102, 114, 97, 109, 101, 115, 46, 34, 10, 45, 105, 102, 32, 123, 33, 40, > 36, 53, 124, 124, 110, 97, 114, 103, 40, 34, 36, 54, 34, 41, 41, 125, > 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 118, 32, 45, 32, 40, 36, 50, 41, 32, 40, 36, 51, 41, 32, 45, > 121, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 121, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, > 48, 37, 44, 36, 52, 44, 49, 44, 49, 44, 51, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 32, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, > 32, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 62, 32, > 65, 110, 105, 109, 97, 116, 101, 32, 105, 109, 97, 103, 101, 32, 91, 34, > 36, 62, 34, 93, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 52, 32, 45, 45, 108, 91, 48, 44, 49, 93, 10, 45, > 36, 49, 91, 45, 49, 93, 32, 64, 123, 48, 44, 123, 36, 62, 42, 64, > 123, 48, 44, 119, 125, 125, 45, 123, 40, 36, 62, 43, 49, 41, 42, 64, > 123, 48, 44, 119, 125, 45, 49, 125, 125, 32, 45, 114, 109, 91, 48, 93, > 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 54, 34, 41, > 125, 32, 45, 111, 32, 64, 123, 45, 102, 105, 108, 101, 110, 97, 109, 101, > 92, 32, 34, 36, 54, 34, 44, 64, 123, 62, 44, 45, 50, 125, 44, 36, > 62, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, > 36, 53, 125, 32, 45, 114, 109, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 49, 48, 48, 42, 40, > 36, 62, 43, 49, 41, 47, 36, 52, 125, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 93, 32, 34, 92, 114, 32, 62, 32, 65, 110, 105, 109, 97, 116, > 101, 32, 105, 109, 97, 103, 101, 32, 91, 34, 64, 123, 62, 44, 45, 50, > 125, 34, 93, 32, 58, 32, 70, 114, 97, 109, 101, 32, 34, 123, 36, 62, > 43, 49, 125, 34, 47, 36, 52, 32, 32, 32, 32, 34, 32, 45, 118, 32, > 45, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, > 109, 91, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, > 93, 32, 45, 118, 32, 43, 10, 45, 101, 110, 100, 105, 102, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 111, 114, 112, 104, 32, 58, 32, 110, 98, 95, > 102, 114, 97, 109, 101, 115, 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 62, 61, 48, 44, 95, 112, 114, 101, 99, 105, 115, 105, > 111, 110, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, > 101, 97, 116, 101, 32, 109, 111, 114, 112, 104, 105, 110, 103, 32, 115, 101, > 113, 117, 101, 110, 99, 101, 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 61, 48, 46, 49, 39, 32, 97, 110, 100, 32, 39, 112, > 114, 101, 99, 105, 115, 105, 111, 110, 61, 53, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 114, 111, 116, 97, 116, 101, 32, 50, 48, 44, 49, 44, > 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 109, 111, 114, 112, 104, > 32, 57, 10, 109, 111, 114, 112, 104, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 48, 46, 49, 125, 44, 36, 123, 51, 61, 53, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, > 32, 109, 111, 114, 112, 104, 105, 110, 103, 32, 115, 101, 113, 117, 101, 110, > 99, 101, 32, 98, 101, 116, 119, 101, 101, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 105, 110, 116, 114, > 97, 45, 102, 114, 97, 109, 101, 115, 44, 32, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 32, 36, 50, 32, 97, 110, 100, 32, 112, 114, 101, 99, > 105, 115, 105, 111, 110, 32, 36, 51, 46, 92, 110, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 91, 94, 48, 93, 32, 91, 48, 93, 44, 51, 32, 45, > 105, 91, 48, 93, 32, 40, 64, 35, 41, 32, 45, 45, 91, 48, 93, 32, > 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 48, 10, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 62, 32, 77, 111, 114, > 112, 104, 32, 105, 109, 97, 103, 101, 32, 34, 36, 62, 34, 32, 116, 111, > 32, 105, 109, 97, 103, 101, 32, 34, 123, 36, 62, 43, 49, 125, 34, 46, > 32, 32, 32, 32, 34, 32, 45, 118, 32, 45, 10, 45, 45, 101, 113, 117, > 97, 108, 105, 122, 101, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, > 45, 50, 44, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, 100, > 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 36, 50, 44, 36, 51, 32, 45, 45, 119, 97, 114, > 112, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, > 44, 36, 49, 32, 45, 97, 91, 45, 36, 49, 45, 45, 49, 93, 32, 122, > 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 45, 100, 105, 115, 112, 108, > 97, 99, 101, 109, 101, 110, 116, 91, 45, 51, 93, 32, 91, 45, 50, 93, > 44, 36, 50, 44, 36, 51, 32, 45, 45, 119, 97, 114, 112, 91, 45, 53, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, 44, 36, 49, 32, > 45, 97, 91, 45, 36, 49, 45, 45, 49, 93, 32, 122, 32, 45, 114, 109, > 91, 45, 55, 45, 45, 52, 44, 45, 50, 93, 10, 40, 49, 47, 48, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 51, 32, 45, > 42, 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, > 32, 122, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, 91, > 45, 49, 93, 32, 122, 10, 45, 109, 118, 91, 45, 36, 49, 45, 45, 49, > 93, 32, 49, 32, 45, 109, 118, 91, 49, 93, 32, 64, 35, 10, 45, 100, > 111, 110, 101, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 114, > 109, 91, 48, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, 110, 114, 105, 103, > 105, 100, 32, 58, 32, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 62, 61, 48, 44, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 62, 48, > 44, 95, 110, 98, 95, 115, 99, 97, 108, 101, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 103, 105, 115, 116, 101, 114, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 110, 111, 110, 45, 114, 105, 103, 105, 100, 32, 119, > 97, 114, 112, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 50, 39, 44, 32, > 39, 112, 114, 101, 99, 105, 115, 105, 111, 110, 61, 54, 39, 32, 97, 110, > 100, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 61, 48, 40, 97, 117, > 116, 111, 41, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 111, 116, > 97, 116, 101, 32, 50, 48, 44, 49, 44, 49, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 45, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, > 110, 114, 105, 103, 105, 100, 32, 44, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 50, 93, 10, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, > 110, 114, 105, 103, 105, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 48, 46, 50, 125, 44, 36, 123, 50, 61, 53, 125, 44, 36, > 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, > 101, 103, 105, 115, 116, 101, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 119, 105, 116, 104, 32, 110, 111, 110, 45, 114, 105, 103, 105, 100, 32, 119, > 97, 114, 112, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, > 36, 49, 44, 32, 112, 114, 101, 99, 105, 115, 105, 111, 110, 32, 36, 50, > 32, 97, 110, 100, 32, 36, 51, 32, 115, 99, 97, 108, 101, 40, 115, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 45, 101, 113, 117, 97, 108, 105, > 122, 101, 91, 48, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 36, 62, 62, > 49, 125, 10, 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, > 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 45, 100, 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 91, 49, 93, > 32, 91, 45, 49, 93, 44, 36, 49, 44, 36, 50, 44, 36, 51, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 50, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 49, > 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, > 103, 105, 115, 116, 101, 114, 95, 114, 105, 103, 105, 100, 32, 58, 32, 95, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 103, 105, 115, 116, 101, 114, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 114, 105, 103, 105, 100, 32, 119, 97, 114, 112, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 115, 104, 105, 102, 116, 32, 51, 48, 44, 50, 48, 32, 45, 45, 114, 101, > 103, 105, 115, 116, 101, 114, 95, 114, 105, 103, 105, 100, 32, 44, 32, 45, > 114, 101, 109, 111, 118, 101, 91, 45, 50, 93, 10, 114, 101, 103, 105, 115, > 116, 101, 114, 95, 114, 105, 103, 105, 100, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 49, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 82, 101, 103, 105, 115, 116, 101, 114, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 119, 105, 116, 104, 32, 114, 105, 103, 105, 100, 32, 119, 97, > 114, 112, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 45, 101, 113, > 117, 97, 108, 105, 122, 101, 91, 48, 93, 32, 45, 98, 91, 45, 49, 93, > 32, 36, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 36, 62, 62, 49, 125, > 10, 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, > 45, 98, 91, 45, 49, 93, 32, 36, 49, 32, 45, 110, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 45, 112, 104, 97, 115, 101, 95, 99, > 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 91, 49, 44, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, > 45, 49, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 10, > 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, 64, 45, 49, 44, 48, > 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 118, 91, 45, > 49, 93, 32, 50, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, > 112, 108, 97, 115, 109, 97, 32, 58, 32, 95, 110, 98, 95, 102, 114, 97, > 109, 101, 115, 62, 61, 50, 44, 95, 115, 99, 97, 108, 101, 62, 61, 48, > 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, > 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, > 116, 101, 32, 112, 108, 97, 115, 109, 97, 32, 116, 114, 97, 110, 115, 105, > 116, 105, 111, 110, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 98, 101, > 116, 119, 101, 101, 110, 32, 99, 111, 110, 115, 101, 99, 117, 116, 105, 118, > 101, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 110, 98, 95, 102, 114, 97, 109, 101, 115, 61, 49, 48, > 39, 44, 32, 39, 115, 99, 97, 108, 101, 61, 53, 39, 32, 97, 110, 100, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 53, > 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, > 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 116, > 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, 112, 108, 97, 115, 109, 97, > 32, 57, 10, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, 112, 108, > 97, 115, 109, 97, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, > 115, 105, 110, 116, 40, 36, 123, 49, 61, 49, 48, 125, 41, 32, 38, 38, > 32, 36, 49, 62, 61, 50, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, > 36, 123, 50, 61, 53, 125, 41, 32, 38, 38, 32, 36, 50, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 53, 37, 125, 62, 61, 48, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, > 101, 32, 112, 108, 97, 115, 109, 97, 32, 116, 114, 97, 110, 115, 105, 116, > 105, 111, 110, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 98, 101, 116, > 119, 101, 101, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 36, 49, 32, 102, 114, 97, 109, 101, 115, 44, 32, 115, 99, > 97, 108, 101, 32, 36, 50, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 32, 36, 51, 46, 92, 110, 34, 10, 45, 118, 32, 45, 10, 45, > 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, 108, 105, 99, 101, 115, > 32, 48, 32, 45, 114, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, 100, > 115, 125, 44, 51, 10, 111, 102, 102, 61, 48, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 123, 36, 62, > 43, 36, 111, 102, 102, 125, 44, 123, 36, 62, 43, 36, 111, 102, 102, 43, > 49, 125, 93, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, > 114, 32, 62, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 116, 114, 97, > 110, 115, 105, 116, 105, 111, 110, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 32, 34, 36, 62, 34, 32, 116, 111, 32, 105, 109, 97, 103, 101, > 32, 34, 123, 36, 62, 43, 49, 125, 34, 46, 32, 32, 32, 32, 34, 32, > 45, 118, 32, 45, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 112, 108, 97, 115, 109, 97, 91, 45, 49, 93, 32, 49, 44, 48, 44, 36, > 50, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 36, 49, 45, 50, 125, 32, 45, 45, 108, 101, > 91, 50, 93, 32, 123, 40, 36, 62, 43, 49, 41, 47, 36, 49, 125, 32, > 45, 98, 91, 45, 49, 93, 32, 36, 51, 32, 91, 48, 93, 32, 45, 106, > 91, 45, 49, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, > 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 36, 62, 42, 49, > 48, 48, 47, 40, 36, 49, 45, 50, 41, 125, 32, 45, 100, 111, 110, 101, > 10, 45, 114, 109, 91, 50, 93, 32, 45, 109, 118, 91, 50, 45, 45, 49, > 93, 32, 49, 32, 111, 102, 102, 61, 123, 36, 111, 102, 102, 43, 36, 49, > 45, 50, 125, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 114, 97, 110, > 115, 105, 116, 105, 111, 110, 51, 100, 32, 58, 32, 95, 110, 98, 95, 102, > 114, 97, 109, 101, 115, 62, 61, 50, 44, 95, 110, 98, 95, 120, 116, 105, > 108, 101, 115, 62, 48, 44, 95, 110, 98, 95, 121, 116, 105, 108, 101, 115, > 62, 48, 44, 95, 97, 120, 105, 115, 95, 120, 44, 95, 97, 120, 105, 115, > 95, 121, 44, 95, 97, 120, 105, 115, 95, 122, 44, 95, 105, 115, 95, 97, > 110, 116, 105, 97, 108, 105, 97, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 114, 101, 97, 116, 101, 32, 51, 100, 32, 116, 114, 97, 110, > 115, 105, 116, 105, 111, 110, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, > 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 99, 111, 110, 115, 101, 99, 117, 116, 105, 118, 101, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, > 120, 105, 115, 95, 120, 39, 44, 32, 39, 97, 120, 105, 115, 95, 121, 39, > 32, 97, 110, 100, 32, 39, 97, 120, 105, 115, 95, 122, 39, 32, 99, 97, > 110, 32, 98, 101, 32, 115, 101, 116, 32, 97, 115, 32, 109, 97, 116, 104, > 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, > 105, 111, 110, 115, 44, 32, 100, 101, 112, 101, 110, 100, 105, 110, 103, 32, > 111, 110, 32, 39, 120, 39, 32, 97, 110, 100, 32, 39, 121, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 102, 114, 97, > 109, 101, 115, 61, 49, 48, 39, 44, 32, 39, 110, 98, 95, 120, 116, 105, > 108, 101, 115, 61, 110, 98, 95, 121, 116, 105, 108, 101, 115, 61, 51, 39, > 44, 32, 39, 97, 120, 105, 115, 95, 120, 61, 49, 39, 44, 32, 39, 97, > 120, 105, 115, 95, 121, 61, 49, 39, 44, 32, 39, 97, 120, 105, 115, 95, > 122, 61, 48, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 97, 110, 116, > 105, 97, 108, 105, 97, 115, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 98, 108, 117, 114, 32, 53, 32, 45, 116, 114, 97, 110, 115, 105, > 116, 105, 111, 110, 51, 100, 32, 57, 32, 45, 100, 114, 103, 98, 97, 10, > 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 51, 100, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, > 61, 49, 48, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 50, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 51, 125, 41, 32, > 38, 38, 32, 36, 50, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, > 40, 36, 123, 51, 61, 36, 50, 125, 41, 32, 38, 38, 32, 36, 51, 62, > 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 49, 125, 44, > 36, 123, 53, 61, 49, 125, 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, > 55, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, > 101, 97, 116, 101, 32, 51, 100, 32, 116, 114, 97, 110, 115, 105, 116, 105, > 111, 110, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 98, 101, 116, 119, > 101, 101, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 36, 49, 32, 102, 114, 97, 109, 101, 115, 44, 32, 36, 50, 120, > 36, 51, 32, 116, 105, 108, 101, 115, 32, 97, 110, 100, 32, 114, 111, 116, > 97, 116, 105, 111, 110, 32, 97, 120, 105, 115, 32, 40, 36, 52, 44, 36, > 53, 44, 36, 54, 41, 46, 92, 110, 34, 10, 45, 118, 32, 45, 10, 45, > 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, 108, 105, 99, 101, 115, > 32, 48, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 32, 64, 123, > 45, 109, 97, 120, 95, 119, 104, 100, 115, 125, 44, 51, 10, 111, 102, 102, > 61, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 32, 45, 108, 91, 123, 36, 62, 43, 36, 111, 102, 102, 125, 44, 123, > 36, 62, 43, 36, 111, 102, 102, 43, 49, 125, 93, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 62, 32, 71, 101, 110, 101, > 114, 97, 116, 101, 32, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 32, > 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 32, 34, 36, 62, 34, 32, > 116, 111, 32, 105, 109, 97, 103, 101, 32, 34, 123, 36, 62, 43, 49, 125, > 34, 46, 32, 32, 32, 32, 34, 32, 45, 118, 32, 45, 10, 36, 50, 44, > 36, 51, 44, 49, 44, 49, 44, 39, 36, 52, 39, 10, 36, 50, 44, 36, > 51, 44, 49, 44, 49, 44, 39, 36, 53, 39, 10, 36, 50, 44, 36, 51, > 44, 49, 44, 49, 44, 39, 36, 54, 39, 10, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 122, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 49, 93, 32, 122, 120, 121, 99, 32, 45, 114, 91, 45, 49, 93, 32, 51, > 44, 123, 36, 50, 42, 36, 51, 125, 44, 49, 44, 49, 44, 45, 49, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, 114, 111, 116, 36, > 62, 61, 64, 123, 45, 49, 44, 48, 45, 50, 125, 32, 45, 115, 104, 105, > 102, 116, 91, 45, 49, 93, 32, 48, 44, 45, 49, 44, 48, 44, 48, 32, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, > 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 91, 45, 50, 44, 45, > 49, 93, 32, 36, 50, 44, 36, 51, 32, 45, 109, 118, 91, 48, 44, 49, > 93, 32, 64, 35, 10, 78, 61, 123, 36, 50, 42, 36, 51, 125, 32, 105, > 61, 48, 32, 121, 61, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 51, 10, 120, 61, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, > 10, 108, 119, 61, 64, 123, 36, 105, 44, 119, 125, 32, 108, 104, 61, 64, > 123, 36, 105, 44, 104, 125, 10, 45, 105, 109, 97, 103, 101, 112, 108, 97, > 110, 101, 51, 100, 91, 36, 105, 93, 32, 45, 105, 109, 97, 103, 101, 112, > 108, 97, 110, 101, 51, 100, 91, 36, 78, 93, 32, 45, 114, 51, 100, 91, > 36, 78, 93, 32, 36, 123, 114, 111, 116, 36, 105, 125, 44, 45, 49, 56, > 48, 32, 45, 99, 51, 100, 91, 36, 105, 44, 36, 78, 93, 32, 45, 43, > 51, 100, 91, 36, 105, 44, 36, 78, 93, 10, 120, 36, 105, 61, 36, 120, > 32, 121, 36, 105, 61, 36, 121, 32, 120, 61, 123, 36, 120, 43, 36, 108, > 119, 125, 32, 105, 61, 123, 36, 105, 43, 49, 125, 10, 45, 100, 111, 110, > 101, 10, 121, 61, 123, 36, 121, 43, 36, 108, 104, 125, 10, 45, 100, 111, > 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 50, > 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 32, 45, 114, 51, > 100, 91, 36, 62, 93, 32, 36, 123, 114, 111, 116, 36, 62, 125, 44, 123, > 49, 56, 48, 47, 40, 36, 49, 45, 49, 41, 125, 32, 45, 45, 43, 51, > 100, 91, 36, 62, 93, 32, 36, 123, 120, 36, 62, 125, 44, 36, 123, 121, > 36, 62, 125, 44, 48, 32, 45, 100, 111, 110, 101, 10, 45, 43, 51, 100, > 91, 45, 36, 78, 45, 45, 49, 93, 32, 45, 99, 51, 100, 91, 45, 49, > 93, 10, 45, 105, 102, 32, 36, 55, 10, 45, 105, 91, 45, 51, 93, 32, > 123, 50, 42, 64, 123, 45, 50, 44, 119, 125, 125, 44, 123, 50, 42, 64, > 123, 45, 50, 44, 104, 125, 125, 44, 49, 44, 51, 44, 45, 49, 10, 45, > 42, 51, 100, 91, 45, 49, 93, 32, 50, 32, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, > 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 44, 48, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 116, 111, 95, 114, 103, 98, 97, 91, > 45, 50, 93, 32, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, > 111, 114, 91, 45, 50, 93, 32, 48, 44, 48, 44, 45, 49, 44, 45, 49, > 44, 45, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, 48, 44, 48, 10, > 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, > 44, 49, 44, 49, 48, 48, 37, 44, 50, 10, 45, 101, 108, 115, 101, 10, > 45, 105, 91, 45, 51, 93, 32, 64, 123, 45, 50, 44, 119, 125, 44, 64, > 123, 45, 50, 44, 104, 125, 44, 49, 44, 51, 44, 45, 49, 32, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 116, 111, 95, 114, > 103, 98, 97, 91, 45, 50, 93, 32, 45, 114, 101, 112, 108, 97, 99, 101, > 95, 99, 111, 108, 111, 114, 91, 45, 50, 93, 32, 48, 44, 48, 44, 45, > 49, 44, 45, 49, 44, 45, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, > 48, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, > 10, 45, 114, 109, 91, 48, 45, 123, 36, 78, 45, 49, 125, 93, 10, 45, > 110, 109, 91, 49, 45, 45, 50, 93, 32, 64, 123, 48, 44, 110, 125, 10, > 111, 102, 102, 61, 123, 36, 111, 102, 102, 43, 36, 49, 45, 50, 125, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 73, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 32, 100, 101, 109, 111, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 101, 109, 111, 32, 58, 32, 95, 114, 117, 110, 95, > 105, 110, 95, 112, 97, 114, 97, 108, 108, 101, 108, 61, 123, 32, 48, 61, > 110, 111, 32, 124, 32, 49, 61, 121, 101, 115, 32, 124, 32, 50, 61, 97, > 117, 116, 111, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, > 104, 111, 119, 32, 97, 32, 109, 101, 110, 117, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 32, 97, 110, 100, 32, 118, 105, 101, 119, 32, 97, 108, > 108, 32, 71, 39, 77, 73, 67, 32, 105, 110, 116, 101, 114, 97, 99, 116, > 105, 118, 101, 32, 100, 101, 109, 111, 115, 46, 10, 100, 101, 109, 111, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, > 36, 123, 49, 61, 50, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 48, > 32, 38, 38, 32, 36, 49, 60, 61, 50, 34, 10, 45, 101, 91, 93, 32, > 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 71, 92, 52, 55, 77, > 73, 67, 32, 100, 101, 109, 111, 115, 32, 109, 101, 110, 117, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, > 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 77, 111, > 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 32, 97, 32, 100, 101, 109, 111, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, > 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, > 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, > 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, > 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, > 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, > 108, 91, 93, 10, 112, 97, 114, 97, 108, 108, 101, 108, 95, 109, 111, 100, > 101, 61, 123, 51, 45, 105, 102, 40, 36, 49, 33, 61, 50, 44, 36, 49, > 44, 64, 42, 62, 50, 41, 125, 10, 51, 56, 48, 44, 53, 56, 48, 44, > 49, 44, 51, 32, 45, 45, 112, 108, 97, 115, 109, 97, 91, 45, 49, 93, > 32, 49, 44, 49, 44, 53, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 50, 51, 48, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 47, 91, 45, 49, 93, 32, 50, 46, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 119, 97, 116, 101, 114, 91, 45, 49, 93, 32, 49, 48, > 48, 32, 45, 42, 91, 45, 49, 93, 32, 48, 46, 49, 53, 10, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 34, 49, 45, 32, 50, 48, 52, 56, 32, 103, 97, > 109, 101, 92, 110, 34, 92, 10, 34, 50, 45, 32, 66, 108, 111, 98, 115, > 32, 101, 100, 105, 116, 111, 114, 92, 110, 34, 92, 10, 34, 51, 45, 32, > 66, 111, 117, 110, 99, 105, 110, 103, 32, 98, 97, 108, 108, 115, 92, 110, > 34, 92, 10, 34, 52, 45, 32, 70, 105, 114, 101, 32, 101, 102, 102, 101, > 99, 116, 92, 110, 34, 92, 10, 34, 53, 45, 32, 70, 105, 114, 101, 119, > 111, 114, 107, 115, 92, 110, 34, 92, 10, 34, 54, 45, 32, 70, 105, 115, > 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, 99, 116, 92, 110, 34, 92, > 10, 34, 55, 45, 32, 70, 111, 117, 114, 105, 101, 114, 32, 102, 105, 108, > 116, 101, 114, 105, 110, 103, 92, 110, 34, 92, 10, 34, 56, 45, 32, 72, > 105, 115, 116, 111, 103, 114, 97, 109, 32, 100, 101, 109, 111, 92, 110, 34, > 92, 10, 34, 57, 45, 32, 72, 111, 117, 103, 104, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 92, 110, 34, 92, 10, 34, 49, 48, 45, 32, 74, > 97, 119, 98, 114, 101, 97, 107, 101, 114, 92, 110, 34, 92, 10, 34, 49, > 49, 45, 32, 84, 104, 101, 32, 103, 97, 109, 101, 32, 111, 102, 32, 108, > 105, 102, 101, 92, 110, 34, 92, 10, 34, 49, 50, 45, 32, 76, 105, 103, > 104, 116, 32, 101, 102, 102, 101, 99, 116, 92, 110, 34, 92, 10, 34, 49, > 51, 45, 32, 77, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 101, 120, > 112, 108, 111, 114, 101, 114, 92, 110, 34, 92, 10, 34, 49, 52, 45, 32, > 51, 100, 32, 109, 101, 116, 97, 98, 97, 108, 108, 115, 92, 110, 34, 92, > 10, 34, 49, 53, 45, 32, 77, 105, 110, 101, 115, 119, 101, 101, 112, 101, > 114, 92, 110, 34, 92, 10, 34, 49, 54, 45, 32, 77, 105, 110, 105, 109, > 97, 108, 32, 112, 97, 116, 104, 92, 110, 34, 92, 10, 34, 49, 55, 45, > 32, 80, 97, 99, 109, 97, 110, 92, 110, 34, 92, 10, 34, 49, 56, 45, > 32, 80, 97, 105, 110, 116, 92, 110, 34, 92, 10, 34, 49, 57, 45, 32, > 80, 108, 97, 115, 109, 97, 32, 101, 102, 102, 101, 99, 116, 92, 110, 34, > 92, 10, 34, 50, 48, 45, 32, 82, 71, 66, 32, 113, 117, 97, 110, 116, > 105, 122, 97, 116, 105, 111, 110, 92, 110, 34, 92, 10, 34, 50, 49, 45, > 32, 51, 100, 32, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 92, 110, > 34, 92, 10, 34, 50, 50, 45, 32, 51, 100, 32, 114, 117, 98, 98, 101, > 114, 32, 111, 98, 106, 101, 99, 116, 92, 110, 34, 92, 10, 34, 50, 51, > 45, 32, 83, 104, 97, 100, 101, 32, 98, 111, 98, 115, 92, 110, 34, 92, > 10, 34, 50, 52, 45, 32, 83, 112, 108, 105, 110, 101, 32, 101, 100, 105, > 116, 111, 114, 92, 110, 34, 92, 10, 34, 50, 53, 45, 32, 84, 101, 116, > 114, 105, 115, 92, 110, 34, 92, 10, 34, 50, 54, 45, 32, 84, 105, 99, > 45, 116, 97, 99, 45, 116, 111, 101, 92, 110, 34, 92, 10, 34, 50, 55, > 45, 32, 73, 109, 97, 103, 101, 32, 119, 97, 118, 101, 115, 92, 110, 34, > 92, 10, 34, 50, 56, 45, 32, 70, 114, 97, 99, 116, 97, 108, 32, 119, > 104, 105, 114, 108, 115, 34, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, > 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 10, 99, 111, 109, 109, > 97, 110, 100, 115, 61, 45, 120, 95, 50, 48, 52, 56, 44, 45, 120, 95, > 98, 108, 111, 98, 115, 44, 45, 120, 95, 98, 111, 117, 110, 99, 105, 110, > 103, 44, 45, 120, 95, 102, 105, 114, 101, 44, 45, 120, 95, 102, 105, 114, > 101, 119, 111, 114, 107, 115, 44, 45, 120, 95, 102, 105, 115, 104, 101, 121, > 101, 44, 45, 120, 95, 102, 111, 117, 114, 105, 101, 114, 44, 45, 120, 95, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 44, 45, 120, 95, 104, 111, 117, > 103, 104, 44, 92, 10, 45, 120, 95, 106, 97, 119, 98, 114, 101, 97, 107, > 101, 114, 44, 45, 120, 95, 108, 105, 102, 101, 44, 45, 120, 95, 108, 105, > 103, 104, 116, 44, 45, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, > 116, 44, 45, 120, 95, 109, 101, 116, 97, 98, 97, 108, 108, 115, 51, 100, > 44, 45, 120, 95, 109, 105, 110, 101, 115, 119, 101, 101, 112, 101, 114, 44, > 45, 120, 95, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, 104, 44, > 92, 10, 45, 120, 95, 112, 97, 99, 109, 97, 110, 44, 45, 120, 95, 112, > 97, 105, 110, 116, 44, 45, 120, 95, 112, 108, 97, 115, 109, 97, 44, 45, > 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, 44, 45, > 120, 95, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 51, 100, 44, 45, > 120, 95, 114, 117, 98, 98, 101, 114, 51, 100, 44, 45, 120, 95, 115, 104, > 97, 100, 101, 98, 111, 98, 115, 44, 92, 10, 45, 120, 95, 115, 112, 108, > 105, 110, 101, 44, 45, 120, 95, 116, 101, 116, 114, 105, 115, 44, 45, 120, > 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 44, 45, 120, 95, 119, 97, > 118, 101, 115, 44, 45, 120, 95, 119, 104, 105, 114, 108, 10, 121, 48, 61, > 53, 57, 10, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 50, > 48, 44, 36, 121, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, > 32, 48, 44, 49, 54, 44, 49, 48, 48, 37, 44, 52, 52, 44, 49, 44, > 49, 50, 48, 44, 49, 50, 48, 44, 51, 50, 10, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 34, 71, 92, 52, 55, 77, 73, 67, 32, 34, 64, 123, > 45, 115, 116, 114, 118, 101, 114, 125, 34, 32, 100, 101, 109, 111, 115, 34, > 44, 50, 44, 50, 44, 50, 56, 44, 49, 44, 49, 44, 49, 44, 49, 32, > 45, 98, 91, 45, 49, 93, 32, 48, 46, 53, 32, 45, 110, 91, 45, 49, > 93, 32, 48, 44, 49, 10, 40, 51, 50, 59, 50, 53, 53, 94, 50, 53, > 53, 59, 50, 53, 53, 94, 48, 59, 48, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 51, 44, > 51, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 49, 93, 32, 49, 44, 45, 49, 32, 45, 45, 110, 101, > 113, 91, 45, 49, 93, 32, 48, 32, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 45, 49, 93, 32, 49, 10, 45, 106, 91, 45, 51, 93, 32, 91, > 45, 50, 93, 44, 50, 48, 44, 49, 54, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 49, > 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 53, 10, 40, > 56, 48, 59, 50, 53, 53, 59, 56, 48, 94, 48, 59, 50, 53, 53, 59, > 48, 94, 48, 59, 48, 59, 48, 41, 32, 40, 49, 48, 59, 50, 53, 53, > 59, 49, 48, 94, 48, 59, 49, 48, 48, 59, 48, 94, 48, 59, 48, 59, > 48, 41, 10, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 91, 45, 51, > 93, 44, 49, 56, 44, 49, 44, 51, 44, 51, 32, 45, 112, 111, 108, 121, > 103, 111, 110, 91, 45, 50, 44, 45, 49, 93, 32, 51, 44, 49, 44, 49, > 44, 49, 44, 49, 54, 44, 49, 48, 44, 56, 44, 49, 44, 50, 53, 53, > 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 45, 109, 105, 114, 114, 111, > 114, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 109, 97, 120, 91, > 45, 52, 44, 45, 50, 93, 32, 45, 109, 97, 120, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 98, 97, 108, 108, 91, 93, 32, 54, 52, 44, 50, 48, > 48, 44, 49, 48, 48, 44, 54, 52, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 51, 48, 32, 45, 115, 91, 45, 49, 93, 32, 99, 44, 45, > 51, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 49, 93, 32, 48, 46, 53, 32, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 54, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 102, 91, 45, > 49, 93, 32, 123, 36, 62, 42, 51, 54, 48, 47, 54, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 45, 115, 91, 45, 49, 93, 32, 99, 44, > 45, 51, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 45, 50, 93, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 40, 123, 39, 67, > 73, 109, 103, 51, 100, 39, 125, 41, 32, 40, 53, 44, 53, 41, 32, 51, > 44, 53, 32, 40, 49, 44, 48, 59, 49, 44, 52, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 50, 44, 53, 44, 49, 44, 49, 44, 51, 32, 45, 114, > 111, 117, 110, 100, 91, 45, 49, 93, 32, 52, 44, 53, 32, 45, 121, 91, > 45, 53, 45, 45, 49, 93, 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, > 32, 121, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, > 112, 114, 105, 116, 101, 115, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 43, 51, 100, 91, 45, 54, > 45, 45, 49, 93, 10, 99, 102, 120, 61, 123, 48, 125, 32, 99, 102, 121, > 61, 123, 48, 125, 32, 99, 102, 122, 61, 123, 48, 125, 32, 110, 102, 120, > 61, 123, 103, 125, 32, 110, 102, 121, 61, 123, 103, 125, 32, 110, 102, 122, > 61, 123, 103, 125, 32, 97, 108, 112, 104, 97, 61, 48, 32, 116, 105, 109, > 101, 48, 61, 123, 64, 124, 45, 52, 125, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 61, 45, 49, 32, 45, 102, 51, 100, 32, 52, 48, 48, 10, 45, > 119, 91, 48, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, 48, 44, 53, > 48, 37, 44, 53, 48, 37, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 68, 101, 109, 111, 115, 32, 109, 101, 110, 117, 34, 10, 45, 100, > 111, 10, 116, 61, 123, 49, 46, 53, 42, 64, 124, 125, 10, 49, 44, 51, > 48, 44, 49, 44, 49, 44, 39, 40, 49, 45, 36, 97, 108, 112, 104, 97, > 41, 42, 99, 111, 115, 40, 36, 99, 102, 120, 42, 121, 43, 36, 116, 41, > 43, 36, 97, 108, 112, 104, 97, 42, 99, 111, 115, 40, 36, 110, 102, 120, > 42, 121, 43, 36, 116, 41, 39, 10, 49, 44, 51, 48, 44, 49, 44, 49, > 44, 39, 40, 49, 45, 36, 97, 108, 112, 104, 97, 41, 42, 115, 105, 110, > 40, 36, 99, 102, 121, 42, 121, 43, 36, 116, 41, 43, 36, 97, 108, 112, > 104, 97, 42, 115, 105, 110, 40, 36, 110, 102, 121, 42, 121, 43, 36, 116, > 41, 39, 10, 49, 44, 51, 48, 44, 49, 44, 49, 44, 39, 40, 49, 45, > 36, 97, 108, 112, 104, 97, 41, 42, 115, 105, 110, 40, 36, 99, 102, 122, > 42, 121, 43, 36, 116, 41, 43, 36, 97, 108, 112, 104, 97, 42, 115, 105, > 110, 40, 36, 110, 102, 122, 42, 121, 43, 36, 116, 41, 39, 10, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 120, 32, 45, 115, 91, 45, 49, 93, > 32, 121, 44, 53, 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, 120, > 32, 45, 121, 91, 45, 49, 93, 10, 45, 106, 91, 54, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 56, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 42, 51, 100, 91, 54, 93, 32, 64, 123, 48, 44, 119, 47, 50, 45, 51, > 48, 125, 44, 64, 123, 48, 44, 104, 47, 50, 45, 51, 48, 125, 44, 51, > 48, 48, 32, 45, 43, 51, 100, 91, 54, 93, 32, 48, 44, 48, 44, 50, > 48, 48, 10, 45, 42, 91, 48, 93, 32, 48, 46, 56, 53, 32, 45, 43, > 91, 48, 93, 32, 91, 49, 93, 32, 45, 111, 98, 106, 101, 99, 116, 51, > 100, 91, 48, 93, 32, 91, 54, 93, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 32, 45, 106, 91, 48, 93, > 32, 91, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 51, 93, 44, 50, 53, 53, 10, 121, 61, 123, 64, 123, 33, 44, 121, 125, > 42, 64, 123, 48, 44, 104, 125, 47, 64, 123, 33, 44, 104, 125, 125, 10, > 45, 105, 102, 32, 123, 36, 121, 62, 61, 48, 125, 32, 121, 61, 123, 109, > 97, 120, 40, 48, 44, 109, 105, 110, 40, 50, 55, 44, 105, 110, 116, 40, > 40, 36, 121, 45, 36, 121, 48, 41, 47, 49, 56, 41, 41, 41, 125, 32, > 45, 106, 91, 48, 93, 32, 91, 123, 105, 102, 40, 36, 115, 101, 108, 101, > 99, 116, 101, 100, 62, 61, 48, 44, 53, 44, 52, 41, 125, 93, 44, 48, > 44, 123, 36, 121, 48, 43, 49, 56, 42, 36, 121, 125, 44, 48, 44, 48, > 44, 48, 46, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 91, 48, > 93, 32, 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 105, 102, 32, 123, > 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, > 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 48, 93, 32, 50, 48, 48, > 37, 44, 50, 48, 48, 37, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 67, 125, 125, 32, 45, 119, 91, 48, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 40, 64, 123, 33, 44, 98, 125, 38, 49, 41, 38, 38, 36, 115, 101, > 108, 101, 99, 116, 101, 100, 60, 48, 125, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 61, 36, 121, 10, 45, 101, 108, 105, 102, 32, 123, 33, 64, 123, > 33, 44, 98, 125, 125, 10, 45, 105, 102, 32, 123, 36, 115, 101, 108, 101, > 99, 116, 101, 100, 62, 61, 48, 38, 38, 36, 121, 61, 61, 36, 115, 101, > 108, 101, 99, 116, 101, 100, 125, 10, 45, 109, 32, 34, 99, 111, 109, 32, > 58, 32, 45, 118, 32, 48, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, > 123, 49, 43, 36, 121, 125, 44, 36, 99, 111, 109, 109, 97, 110, 100, 115, > 125, 32, 45, 112, 97, 114, 97, 108, 108, 101, 108, 32, 36, 112, 97, 114, > 97, 108, 108, 101, 108, 95, 109, 111, 100, 101, 44, 34, 45, 108, 91, 93, > 32, 45, 99, 111, 109, 32, 45, 118, 32, 45, 49, 32, 45, 114, 109, 32, > 45, 101, 110, 100, 108, 34, 32, 45, 117, 110, 99, 111, 109, 109, 97, 110, > 100, 32, 99, 111, 109, 10, 45, 101, 110, 100, 105, 102, 10, 115, 101, 108, > 101, 99, 116, 101, 100, 61, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 64, 124, 45, 36, 116, 105, 109, 101, 48, 62, 53, > 125, 32, 97, 108, 112, 104, 97, 61, 123, 36, 97, 108, 112, 104, 97, 43, > 48, 46, 48, 51, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 36, 97, 108, 112, 104, 97, 62, 49, 125, 32, 97, 108, 112, 104, > 97, 61, 123, 36, 97, 108, 112, 104, 97, 45, 49, 125, 32, 99, 102, 120, > 61, 36, 110, 102, 120, 32, 99, 102, 121, 61, 36, 110, 102, 121, 32, 99, > 102, 122, 61, 36, 110, 102, 122, 32, 110, 102, 120, 61, 123, 103, 125, 32, > 110, 102, 121, 61, 123, 103, 125, 32, 110, 102, 122, 61, 123, 103, 125, 32, > 116, 105, 109, 101, 48, 61, 123, 64, 124, 45, 63, 42, 51, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, > 109, 32, 45, 119, 32, 48, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, > 48, 32, 45, 101, 91, 93, 32, 34, 34, 10, 35, 64, 103, 109, 105, 99, > 32, 120, 95, 50, 48, 52, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 50, 48, 52, 56, > 32, 103, 97, 109, 101, 46, 10, 120, 95, 50, 48, 52, 56, 32, 58, 10, > 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, > 50, 48, 52, 56, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 32, 74, 111, 105, 110, 32, 116, 104, 101, 32, 110, 117, 109, 98, > 101, 114, 115, 32, 97, 110, 100, 32, 103, 101, 116, 32, 116, 111, 32, 116, > 104, 101, 32, 50, 48, 52, 56, 32, 116, 105, 116, 108, 101, 33, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 85, 115, 101, > 32, 121, 111, 117, 114, 32, 97, 114, 114, 111, 119, 32, 107, 101, 121, 115, > 32, 116, 111, 32, 109, 111, 118, 101, 32, 116, 104, 101, 32, 116, 105, 108, > 101, 115, 46, 32, 87, 104, 101, 110, 32, 116, 119, 111, 32, 116, 105, 108, > 101, 115, 92, 110, 10, 45, 45, 45, 45, 32, 119, 105, 116, 104, 32, 116, > 104, 101, 32, 115, 97, 109, 101, 32, 110, 117, 109, 98, 101, 114, 32, 116, > 111, 117, 99, 104, 44, 32, 116, 104, 101, 121, 32, 109, 101, 114, 103, 101, > 32, 105, 110, 116, 111, 32, 111, 110, 101, 33, 92, 110, 10, 45, 45, 45, > 45, 32, 84, 104, 105, 115, 32, 99, 111, 109, 109, 97, 110, 100, 32, 105, > 115, 32, 97, 32, 112, 111, 114, 116, 32, 111, 102, 32, 116, 104, 101, 32, > 39, 50, 48, 52, 56, 39, 32, 103, 97, 109, 101, 32, 111, 114, 105, 103, > 105, 110, 97, 108, 108, 121, 92, 110, 10, 45, 45, 45, 45, 32, 100, 101, > 115, 105, 103, 110, 101, 100, 32, 98, 121, 32, 71, 97, 98, 114, 105, 101, > 108, 101, 32, 67, 105, 114, 117, 108, 108, 105, 44, 32, 97, 110, 100, 32, > 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 97, 116, 58, 92, 110, 10, > 45, 45, 45, 45, 32, 104, 116, 116, 112, 58, 47, 47, 103, 97, 98, 114, > 105, 101, 108, 101, 99, 105, 114, 117, 108, 108, 105, 46, 103, 105, 116, 104, > 117, 98, 46, 105, 111, 47, 50, 48, 52, 56, 47, 92, 110, 10, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, > 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, > 32, 45, 32, 45, 108, 91, 93, 10, 115, 99, 111, 114, 101, 61, 48, 32, > 45, 102, 51, 100, 32, 53, 48, 32, 45, 109, 51, 100, 32, 48, 10, 45, > 109, 32, 34, 95, 120, 95, 50, 48, 52, 56, 95, 115, 101, 116, 114, 97, > 110, 100, 111, 109, 32, 58, 32, 45, 45, 61, 61, 91, 48, 93, 32, 48, > 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 44, 52, 42, > 121, 43, 120, 44, 45, 49, 41, 39, 32, 45, 100, 105, 115, 99, 97, 114, > 100, 91, 45, 49, 93, 32, 45, 49, 10, 111, 102, 102, 61, 123, 105, 91, > 114, 111, 117, 110, 100, 40, 63, 40, 104, 45, 49, 41, 41, 93, 125, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 120, 61, 123, 36, 111, 102, 102, 38, > 51, 125, 32, 121, 61, 123, 36, 111, 102, 102, 62, 62, 50, 125, 32, 110, > 61, 123, 105, 102, 40, 63, 60, 48, 46, 55, 53, 44, 49, 44, 50, 41, > 125, 10, 45, 61, 91, 48, 93, 32, 36, 110, 44, 36, 120, 44, 36, 121, > 32, 91, 123, 50, 43, 36, 110, 125, 93, 32, 45, 99, 51, 100, 91, 45, > 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 54, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, 45, 49, 93, 44, 123, > 55, 56, 43, 36, 120, 42, 49, 50, 49, 125, 44, 123, 49, 57, 48, 43, > 36, 121, 42, 49, 50, 49, 125, 44, 123, 49, 48, 42, 36, 60, 125, 44, > 123, 40, 49, 43, 36, 62, 41, 47, 54, 125, 32, 45, 119, 91, 49, 93, > 32, 45, 119, 97, 105, 116, 32, 50, 48, 32, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 49, 93, 34, 10, 45, 109, 32, 34, 95, 120, 95, > 50, 48, 52, 56, 95, 111, 98, 106, 101, 99, 116, 51, 100, 32, 58, 32, > 45, 45, 102, 91, 48, 93, 32, 39, 105, 102, 40, 105, 44, 105, 42, 49, > 54, 43, 52, 42, 121, 43, 120, 44, 45, 49, 41, 39, 32, 45, 100, 105, > 115, 99, 97, 114, 100, 91, 45, 49, 93, 32, 45, 49, 10, 78, 61, 123, > 104, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, 118, > 61, 64, 123, 45, 123, 49, 43, 36, 62, 125, 44, 36, 62, 125, 32, 45, > 45, 43, 51, 100, 91, 123, 50, 43, 40, 36, 118, 62, 62, 52, 41, 125, > 93, 32, 123, 36, 118, 38, 51, 125, 44, 123, 40, 36, 118, 62, 62, 50, > 41, 38, 51, 125, 32, 45, 100, 111, 110, 101, 10, 45, 43, 51, 100, 91, > 45, 36, 78, 45, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 34, > 10, 45, 105, 91, 48, 93, 32, 52, 44, 52, 10, 98, 48, 61, 50, 48, > 52, 44, 49, 57, 50, 44, 49, 55, 57, 32, 98, 49, 61, 50, 51, 56, > 44, 50, 50, 56, 44, 50, 49, 56, 32, 98, 50, 61, 50, 51, 55, 44, > 50, 50, 52, 44, 50, 48, 48, 32, 98, 51, 61, 50, 52, 50, 44, 49, > 55, 55, 44, 49, 50, 49, 10, 98, 52, 61, 50, 52, 53, 44, 49, 52, > 57, 44, 57, 57, 32, 98, 53, 61, 50, 52, 54, 44, 49, 50, 52, 44, > 57, 53, 32, 98, 54, 61, 50, 52, 54, 44, 57, 52, 44, 53, 57, 32, > 98, 55, 61, 50, 51, 55, 44, 50, 48, 55, 44, 49, 49, 52, 10, 99, > 48, 61, 49, 49, 57, 44, 49, 49, 48, 44, 49, 48, 49, 32, 99, 49, > 61, 50, 52, 57, 44, 50, 52, 54, 44, 50, 52, 50, 32, 115, 48, 61, > 34, 32, 34, 10, 53, 50, 48, 44, 54, 51, 48, 44, 49, 44, 51, 32, > 45, 102, 99, 91, 45, 49, 93, 32, 50, 53, 48, 44, 50, 52, 56, 44, > 50, 51, 57, 10, 45, 116, 91, 45, 49, 93, 32, 34, 50, 48, 52, 56, > 34, 44, 50, 48, 44, 49, 48, 44, 56, 54, 44, 49, 44, 36, 99, 48, > 10, 45, 116, 91, 45, 49, 93, 32, 34, 74, 111, 105, 110, 32, 116, 104, > 101, 32, 110, 117, 109, 98, 101, 114, 115, 32, 97, 110, 100, 32, 103, 101, > 116, 32, 116, 111, 32, 116, 104, 101, 32, 50, 48, 52, 56, 32, 116, 105, > 116, 108, 101, 33, 34, 44, 50, 48, 44, 57, 48, 44, 50, 48, 44, 49, > 44, 36, 99, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, > 45, 49, 93, 32, 52, 50, 50, 44, 50, 48, 44, 53, 48, 49, 44, 55, > 53, 44, 49, 44, 49, 56, 55, 44, 49, 55, 51, 44, 49, 54, 48, 32, > 45, 116, 91, 45, 49, 93, 32, 34, 83, 67, 79, 82, 69, 34, 44, 52, > 51, 57, 44, 50, 53, 44, 49, 53, 44, 49, 44, 50, 51, 56, 44, 50, > 50, 56, 44, 50, 49, 56, 10, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 50, 10, 49, 48, 55, 44, 49, 48, 55, 44, 49, 44, 51, 32, 45, 102, > 99, 91, 45, 49, 93, 32, 36, 123, 98, 123, 109, 105, 110, 40, 36, 62, > 44, 55, 41, 125, 125, 32, 45, 45, 102, 99, 91, 45, 49, 93, 32, 36, > 123, 99, 123, 36, 62, 62, 50, 125, 125, 10, 115, 49, 61, 123, 50, 94, > 36, 62, 125, 32, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 123, 115, > 123, 36, 62, 62, 48, 125, 125, 44, 48, 44, 48, 44, 53, 50, 44, 49, > 44, 49, 10, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, > 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 32, 45, 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, > 91, 45, 49, 93, 32, 51, 32, 45, 98, 91, 45, 49, 93, 32, 48, 46, > 53, 10, 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 49, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, > 45, 102, 114, 97, 109, 101, 95, 114, 111, 117, 110, 100, 91, 50, 45, 45, > 49, 93, 32, 49, 48, 44, 53, 44, 49, 44, 48, 46, 53, 44, 49, 56, > 55, 44, 49, 55, 51, 44, 49, 54, 48, 32, 45, 102, 114, 97, 109, 101, > 91, 50, 45, 45, 49, 93, 32, 55, 44, 55, 44, 49, 56, 55, 44, 49, > 55, 51, 44, 49, 54, 48, 32, 45, 116, 111, 95, 114, 103, 98, 91, 50, > 45, 45, 49, 93, 10, 45, 114, 91, 50, 93, 32, 52, 48, 48, 37, 44, > 52, 48, 48, 37, 44, 49, 44, 51, 44, 48, 44, 50, 32, 45, 106, 91, > 49, 93, 32, 91, 50, 93, 44, 49, 56, 44, 49, 51, 48, 10, 45, 115, > 112, 114, 105, 116, 101, 51, 100, 91, 51, 45, 45, 49, 93, 10, 45, 119, > 91, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 50, 48, 52, 56, 34, > 32, 105, 110, 115, 101, 114, 116, 95, 110, 101, 119, 61, 49, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 50, 32, 45, 95, 120, 95, 50, 48, 52, 56, > 95, 115, 101, 116, 114, 97, 110, 100, 111, 109, 32, 45, 100, 111, 110, 101, > 10, 45, 100, 111, 10, 45, 105, 102, 32, 36, 105, 110, 115, 101, 114, 116, > 95, 110, 101, 119, 10, 45, 95, 120, 95, 50, 48, 52, 56, 95, 111, 98, > 106, 101, 99, 116, 51, 100, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, > 49, 50, 49, 32, 45, 106, 91, 49, 93, 32, 91, 50, 93, 44, 49, 56, > 44, 49, 51, 48, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, > 93, 32, 91, 45, 49, 93, 44, 55, 56, 44, 49, 57, 48, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 56, 48, 44, 50, 53, 44, 49, 44, 51, 32, > 45, 102, 99, 91, 45, 49, 93, 32, 36, 99, 49, 32, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 36, 115, 99, 111, 114, 101, 44, 48, 44, 48, 44, > 50, 53, 44, 49, 44, 49, 44, 49, 44, 49, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, > 46, 56, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 49, 93, > 32, 52, 50, 50, 44, 52, 53, 44, 53, 48, 49, 44, 54, 57, 44, 49, > 44, 49, 56, 55, 44, 49, 55, 51, 44, 49, 54, 48, 32, 45, 106, 91, > 49, 93, 32, 91, 45, 50, 93, 44, 52, 50, 50, 44, 52, 53, 44, 48, > 44, 48, 44, 49, 44, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 119, 91, 49, 93, 32, 105, 110, 115, 101, 114, > 116, 95, 110, 101, 119, 61, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 43, 91, 48, 93, 32, 49, 32, 45, 102, 91, 45, 49, 93, 32, 39, > 106, 40, 45, 49, 41, 61, 61, 105, 124, 124, 106, 40, 49, 41, 61, 61, > 105, 124, 124, 106, 40, 48, 44, 45, 49, 41, 61, 61, 105, 124, 124, 106, > 40, 49, 44, 48, 41, 61, 61, 105, 124, 124, 105, 61, 61, 49, 39, 10, > 45, 105, 102, 32, 64, 123, 48, 44, 105, 77, 61, 61, 49, 49, 125, 10, > 45, 97, 108, 101, 114, 116, 32, 34, 71, 97, 109, 101, 32, 79, 118, 101, > 114, 34, 44, 34, 92, 110, 67, 111, 110, 103, 114, 97, 116, 117, 108, 97, > 116, 105, 111, 110, 115, 33, 32, 89, 111, 117, 32, 103, 111, 116, 32, 116, > 104, 101, 32, 50, 48, 52, 56, 32, 116, 105, 116, 108, 101, 33, 92, 110, > 92, 110, 32, 32, 32, 89, 111, 117, 114, 32, 115, 99, 111, 114, 101, 58, > 32, 34, 36, 115, 99, 111, 114, 101, 44, 34, 79, 75, 34, 10, 45, 98, > 114, 101, 97, 107, 10, 45, 101, 108, 105, 102, 32, 123, 33, 105, 77, 125, > 10, 45, 97, 108, 101, 114, 116, 32, 34, 71, 97, 109, 101, 32, 79, 118, > 101, 114, 34, 44, 34, 92, 110, 66, 97, 100, 32, 108, 117, 99, 107, 33, > 32, 89, 111, 117, 32, 108, 111, 115, 116, 32, 116, 104, 101, 32, 103, 97, > 109, 101, 33, 92, 110, 92, 110, 32, 32, 32, 89, 111, 117, 114, 32, 115, > 99, 111, 114, 101, 58, 32, 34, 36, 115, 99, 111, 114, 101, 44, 34, 79, > 75, 34, 10, 45, 98, 114, 101, 97, 107, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 97, 105, 116, 10, 105, > 115, 95, 115, 104, 105, 102, 116, 61, 48, 32, 45, 117, 110, 99, 111, 109, > 109, 97, 110, 100, 32, 115, 104, 105, 102, 116, 50, 48, 52, 56, 44, 105, > 115, 104, 105, 102, 116, 50, 48, 52, 56, 44, 118, 115, 104, 105, 102, 116, > 50, 48, 52, 56, 10, 45, 105, 102, 32, 64, 123, 33, 44, 65, 82, 82, > 79, 87, 76, 69, 70, 84, 125, 10, 45, 109, 32, 34, 115, 104, 105, 102, > 116, 50, 48, 52, 56, 58, 34, 32, 45, 109, 32, 34, 105, 115, 104, 105, > 102, 116, 50, 48, 52, 56, 58, 34, 32, 45, 109, 32, 34, 118, 115, 104, > 105, 102, 116, 50, 48, 52, 56, 58, 34, 10, 105, 115, 95, 115, 104, 105, > 102, 116, 61, 49, 10, 45, 101, 108, 105, 102, 32, 64, 123, 33, 44, 65, > 82, 82, 79, 87, 82, 73, 71, 72, 84, 125, 10, 45, 109, 32, 34, 115, > 104, 105, 102, 116, 50, 48, 52, 56, 58, 32, 45, 114, 111, 116, 97, 116, > 101, 32, 49, 56, 48, 34, 32, 45, 109, 32, 34, 105, 115, 104, 105, 102, > 116, 50, 48, 52, 56, 58, 32, 45, 114, 111, 116, 97, 116, 101, 32, 49, > 56, 48, 34, 10, 45, 109, 32, 34, 118, 115, 104, 105, 102, 116, 50, 48, > 52, 56, 58, 32, 45, 115, 51, 100, 32, 45, 108, 91, 50, 93, 32, 45, > 114, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, > 32, 45, 115, 32, 120, 32, 45, 45, 91, 48, 44, 49, 93, 32, 51, 32, > 45, 42, 91, 48, 44, 49, 93, 32, 45, 49, 32, 45, 97, 32, 120, 32, > 45, 121, 32, 45, 101, 110, 100, 108, 32, 45, 97, 32, 121, 34, 10, 105, > 115, 95, 115, 104, 105, 102, 116, 61, 49, 10, 45, 101, 108, 105, 102, 32, > 64, 123, 33, 44, 65, 82, 82, 79, 87, 85, 80, 125, 10, 45, 109, 32, > 34, 115, 104, 105, 102, 116, 50, 48, 52, 56, 58, 32, 45, 114, 111, 116, > 97, 116, 101, 32, 45, 57, 48, 34, 32, 45, 109, 32, 34, 105, 115, 104, > 105, 102, 116, 50, 48, 52, 56, 58, 32, 45, 114, 111, 116, 97, 116, 101, > 32, 57, 48, 34, 10, 45, 109, 32, 34, 118, 115, 104, 105, 102, 116, 50, > 48, 52, 56, 58, 32, 45, 115, 51, 100, 32, 45, 108, 91, 50, 93, 32, > 45, 114, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, > 49, 32, 45, 115, 32, 120, 32, 45, 114, 118, 91, 48, 44, 49, 93, 32, > 45, 45, 91, 48, 93, 32, 51, 32, 45, 42, 91, 48, 93, 32, 45, 49, > 32, 32, 45, 97, 32, 120, 32, 45, 121, 32, 45, 101, 110, 100, 108, 32, > 45, 97, 32, 121, 34, 10, 105, 115, 95, 115, 104, 105, 102, 116, 61, 49, > 10, 45, 101, 108, 105, 102, 32, 64, 123, 33, 44, 65, 82, 82, 79, 87, > 68, 79, 87, 78, 125, 10, 45, 109, 32, 34, 115, 104, 105, 102, 116, 50, > 48, 52, 56, 58, 32, 45, 114, 111, 116, 97, 116, 101, 32, 57, 48, 34, > 32, 45, 109, 32, 34, 105, 115, 104, 105, 102, 116, 50, 48, 52, 56, 58, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 45, 57, 48, 34, 10, 45, 109, > 32, 34, 118, 115, 104, 105, 102, 116, 50, 48, 52, 56, 58, 32, 45, 115, > 51, 100, 32, 45, 108, 91, 50, 93, 32, 45, 114, 32, 51, 44, 123, 104, > 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 115, 32, 120, 32, > 45, 114, 118, 91, 48, 44, 49, 93, 32, 45, 45, 91, 49, 93, 32, 51, > 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 32, 45, 97, 32, 120, 32, > 45, 121, 32, 45, 101, 110, 100, 108, 32, 45, 97, 32, 121, 34, 10, 105, > 115, 95, 115, 104, 105, 102, 116, 61, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 105, 115, 95, 115, 104, 105, 102, 116, 10, 45, > 119, 97, 105, 116, 32, 45, 49, 10, 45, 115, 104, 105, 102, 116, 50, 48, > 52, 56, 91, 48, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 50, 10, > 45, 95, 120, 95, 50, 48, 52, 56, 95, 111, 98, 106, 101, 99, 116, 51, > 100, 10, 45, 45, 115, 91, 48, 93, 32, 121, 32, 45, 100, 105, 115, 99, > 97, 114, 100, 91, 45, 52, 45, 45, 49, 93, 32, 48, 32, 45, 121, 91, > 45, 52, 45, 45, 49, 93, 32, 120, 32, 45, 114, 91, 45, 52, 45, 45, > 49, 93, 32, 52, 44, 49, 44, 49, 44, 49, 44, 48, 44, 48, 32, 45, > 97, 91, 45, 52, 45, 45, 49, 93, 32, 121, 10, 45, 45, 61, 61, 91, > 48, 44, 45, 49, 93, 32, 105, 110, 115, 101, 114, 116, 95, 110, 101, 119, > 61, 123, 36, 105, 110, 115, 101, 114, 116, 95, 110, 101, 119, 124, 124, 33, > 105, 109, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 102, 91, > 48, 44, 45, 49, 93, 32, 39, 105, 102, 40, 105, 44, 120, 44, 45, 49, > 41, 39, 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 49, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 118, 91, 48, > 44, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 105, 102, > 32, 123, 40, 105, 109, 124, 124, 105, 77, 41, 38, 38, 33, 64, 123, 33, > 44, 107, 125, 125, 10, 45, 47, 91, 45, 49, 93, 32, 53, 32, 45, 122, > 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 121, 91, 45, 49, 93, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 53, 10, 45, 106, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 56, 44, 48, 44, 48, 44, 45, 49, > 10, 45, 106, 91, 49, 93, 32, 91, 50, 93, 44, 49, 56, 44, 49, 51, > 48, 32, 45, 45, 118, 115, 104, 105, 102, 116, 50, 48, 52, 56, 91, 45, > 50, 93, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 49, 50, 49, 32, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, 45, 49, > 93, 44, 55, 56, 44, 49, 57, 48, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 119, 91, 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 48, 10, > 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 123, 33, 36, 62, > 125, 32, 100, 115, 99, 111, 114, 101, 61, 48, 10, 91, 48, 93, 32, 45, > 45, 102, 91, 48, 93, 32, 39, 105, 102, 40, 105, 44, 105, 42, 49, 54, > 43, 52, 42, 121, 43, 120, 44, 45, 49, 41, 39, 32, 45, 100, 105, 115, > 99, 97, 114, 100, 91, 45, 49, 93, 32, 45, 49, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 104, 125, 10, 120, 61, 123, 105, 91, 36, 62, 93, > 38, 51, 125, 32, 121, 61, 123, 40, 105, 91, 36, 62, 93, 62, 62, 50, > 41, 38, 51, 125, 32, 110, 61, 123, 105, 91, 36, 62, 93, 62, 62, 52, > 125, 10, 45, 105, 102, 32, 123, 36, 120, 62, 48, 38, 38, 64, 123, 48, > 44, 105, 40, 36, 120, 45, 49, 44, 36, 121, 41, 125, 61, 61, 36, 110, > 125, 10, 45, 61, 91, 48, 93, 32, 48, 44, 36, 120, 44, 36, 121, 32, > 45, 61, 91, 48, 93, 32, 123, 36, 110, 43, 49, 125, 44, 123, 36, 120, > 45, 49, 125, 44, 36, 121, 32, 45, 61, 91, 45, 50, 93, 32, 48, 44, > 36, 120, 44, 36, 121, 32, 105, 110, 115, 101, 114, 116, 95, 110, 101, 119, > 61, 49, 32, 100, 115, 99, 111, 114, 101, 61, 123, 36, 100, 115, 99, 111, > 114, 101, 43, 50, 94, 40, 36, 110, 43, 49, 41, 125, 10, 45, 101, 108, > 115, 101, 32, 45, 61, 91, 45, 49, 93, 32, 45, 49, 44, 48, 44, 36, > 62, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 115, > 99, 111, 114, 101, 61, 123, 36, 115, 99, 111, 114, 101, 43, 36, 100, 115, > 99, 111, 114, 101, 125, 10, 45, 105, 102, 32, 123, 105, 77, 60, 48, 125, > 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 108, 115, > 101, 10, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 49, 93, 32, 45, > 49, 10, 45, 114, 118, 91, 48, 44, 45, 50, 93, 32, 45, 95, 120, 95, > 50, 48, 52, 56, 95, 111, 98, 106, 101, 99, 116, 51, 100, 32, 45, 114, > 118, 91, 48, 44, 45, 51, 93, 32, 45, 118, 115, 104, 105, 102, 116, 50, > 48, 52, 56, 91, 45, 49, 93, 32, 45, 42, 51, 100, 91, 45, 49, 93, > 32, 49, 50, 49, 10, 45, 106, 91, 49, 93, 32, 91, 50, 93, 44, 49, > 56, 44, 49, 51, 48, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 49, 93, 32, 91, 45, 49, 93, 44, 55, 56, 44, 49, 57, 48, 32, 45, > 114, 109, 91, 45, 51, 44, 45, 49, 93, 10, 78, 61, 123, 104, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, 118, 61, 64, 123, > 45, 123, 49, 43, 36, 62, 125, 44, 36, 62, 125, 32, 45, 45, 43, 51, > 100, 91, 123, 50, 43, 40, 36, 118, 62, 62, 52, 41, 125, 93, 32, 123, > 36, 118, 38, 51, 125, 44, 123, 40, 36, 118, 62, 62, 50, 41, 38, 51, > 125, 32, 45, 100, 111, 110, 101, 10, 45, 43, 51, 100, 91, 45, 36, 78, > 45, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 43, 36, 100, 115, 99, 111, 114, 101, 44, 48, > 44, 48, 44, 51, 51, 44, 49, 44, 49, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 51, 32, 45, 102, 99, 91, 45, 49, 93, 32, > 36, 99, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 54, 10, 45, 45, > 118, 115, 104, 105, 102, 116, 50, 48, 52, 56, 91, 45, 51, 93, 32, 45, > 42, 51, 100, 91, 45, 49, 93, 32, 49, 50, 49, 32, 45, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, 45, 49, 93, 44, 55, > 56, 44, 49, 57, 48, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 51, > 93, 44, 52, 51, 48, 44, 123, 56, 48, 45, 36, 62, 125, 44, 48, 44, > 48, 44, 123, 109, 105, 110, 40, 49, 44, 36, 60, 47, 54, 41, 125, 44, > 91, 45, 52, 93, 10, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 45, 51, 100, 91, 45, 51, 93, 32, > 123, 49, 47, 54, 125, 44, 48, 44, 48, 32, 45, 119, 97, 105, 116, 32, > 50, 48, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 51, 45, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 10, 45, 105, 115, 104, 105, 102, 116, 50, > 48, 52, 56, 91, 48, 93, 10, 45, 105, 102, 32, 36, 105, 110, 115, 101, > 114, 116, 95, 110, 101, 119, 32, 45, 95, 120, 95, 50, 48, 52, 56, 95, > 115, 101, 116, 114, 97, 110, 100, 111, 109, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, > 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, > 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, > 45, 114, 109, 32, 45, 119, 32, 48, 32, 45, 101, 110, 100, 108, 32, 45, > 117, 110, 99, 111, 109, 109, 97, 110, 100, 32, 95, 120, 95, 50, 48, 52, > 56, 95, 115, 101, 116, 114, 97, 110, 100, 111, 109, 44, 95, 120, 95, 50, > 48, 52, 56, 95, 111, 98, 106, 101, 99, 116, 51, 100, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 98, 108, 111, 98, 115, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, > 32, 116, 104, 101, 32, 98, 108, 111, 98, 115, 32, 101, 100, 105, 116, 111, > 114, 46, 10, 120, 95, 98, 108, 111, 98, 115, 32, 58, 10, 45, 101, 91, > 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 66, 108, 111, > 98, 115, 32, 101, 100, 105, 116, 111, 114, 32, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 32, 77, 111, 117, 115, 101, 32, 116, 111, 32, 105, 110, 115, 101, > 114, 116, 47, 109, 111, 118, 101, 47, 100, 101, 108, 101, 116, 101, 32, 98, > 108, 111, 98, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, > 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, > 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, > 118, 32, 45, 10, 45, 114, 109, 32, 40, 48, 59, 48, 94, 48, 59, 49, > 50, 56, 94, 48, 59, 50, 53, 53, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 51, 53, 48, 44, 51, 53, 48, 44, 49, 44, 51, 44, 51, 32, 45, > 102, 108, 111, 119, 101, 114, 91, 45, 49, 93, 32, 51, 48, 44, 56, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 44, 49, 32, 45, 119, > 97, 116, 101, 114, 91, 45, 49, 93, 32, 50, 48, 10, 45, 119, 32, 123, > 119, 125, 44, 123, 104, 125, 44, 48, 44, 48, 44, 34, 91, 71, 92, 52, > 55, 77, 73, 67, 93, 32, 66, 108, 111, 98, 115, 32, 101, 100, 105, 116, > 111, 114, 34, 10, 109, 111, 118, 105, 110, 103, 61, 45, 49, 10, 45, 100, > 111, 10, 120, 61, 123, 64, 123, 33, 44, 120, 125, 42, 64, 123, 48, 44, > 119, 125, 47, 64, 123, 33, 44, 119, 125, 125, 10, 121, 61, 123, 64, 123, > 33, 44, 121, 125, 42, 64, 123, 48, 44, 104, 125, 47, 64, 123, 33, 44, > 104, 125, 125, 10, 98, 61, 64, 123, 33, 44, 98, 125, 32, 110, 101, 97, > 114, 101, 115, 116, 61, 45, 49, 10, 45, 105, 102, 32, 123, 64, 35, 62, > 49, 125, 10, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, > 44, 49, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 49, > 44, 104, 125, 10, 114, 61, 123, 64, 123, 49, 44, 50, 125, 42, 40, 49, > 43, 64, 123, 49, 44, 51, 125, 42, 99, 111, 115, 40, 64, 123, 49, 44, > 52, 125, 43, 64, 123, 49, 44, 53, 125, 42, 64, 124, 42, 49, 48, 48, > 48, 41, 41, 125, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 64, 123, 49, 44, 48, 44, 49, 125, 44, 36, 114, 44, 36, 114, > 44, 48, 44, 49, 44, 64, 123, 49, 44, 54, 45, 55, 125, 10, 100, 61, > 123, 115, 113, 114, 116, 40, 40, 36, 120, 45, 64, 123, 49, 44, 48, 125, > 41, 94, 50, 43, 40, 36, 121, 45, 64, 123, 49, 44, 49, 125, 41, 94, > 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, 100, 60, 36, 114, 125, 32, > 110, 101, 97, 114, 101, 115, 116, 61, 36, 62, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 115, 104, 105, 102, 116, 91, 49, 93, 32, 48, 44, 45, 49, > 44, 48, 44, 48, 44, 50, 32, 45, 100, 111, 110, 101, 10, 45, 98, 91, > 45, 49, 93, 32, 49, 53, 10, 45, 45, 110, 111, 114, 109, 91, 45, 49, > 93, 32, 45, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 32, 45, 108, > 101, 91, 45, 50, 93, 32, 52, 48, 32, 45, 42, 91, 45, 51, 44, 45, > 49, 93, 10, 45, 45, 42, 91, 48, 44, 45, 49, 93, 32, 45, 114, 109, > 91, 45, 50, 93, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 42, 91, 45, 49, 93, 32, 49, 46, 54, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, > 123, 50, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, > 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, > 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 108, 115, 101, 10, 45, 45, 116, 101, 120, 116, 95, 111, 117, 116, > 108, 105, 110, 101, 91, 48, 93, 32, 34, 71, 92, 52, 55, 77, 73, 67, > 32, 66, 108, 111, 98, 115, 32, 69, 100, 105, 116, 111, 114, 34, 44, 54, > 53, 44, 52, 48, 44, 50, 51, 44, 51, 44, 49, 44, 50, 48, 48, 44, > 49, 50, 56, 44, 50, 53, 53, 10, 45, 116, 91, 45, 49, 93, 32, 34, > 42, 32, 76, 101, 102, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, > 116, 111, 110, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 97, 110, 100, > 32, 109, 111, 118, 101, 32, 98, 108, 111, 98, 115, 46, 92, 110, 92, 110, > 92, 10, 42, 32, 82, 105, 103, 104, 116, 32, 109, 111, 117, 115, 101, 32, > 98, 117, 116, 116, 111, 110, 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, > 98, 108, 111, 98, 46, 92, 110, 92, 110, 92, 10, 42, 32, 77, 105, 100, > 100, 108, 101, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, > 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, 97, 108, 108, 32, 98, 108, > 111, 98, 115, 46, 92, 110, 92, 110, 92, 10, 42, 32, 75, 101, 121, 32, > 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 58, 32, 81, > 117, 105, 116, 46, 92, 110, 92, 110, 92, 10, 42, 32, 67, 111, 108, 111, > 114, 115, 32, 97, 110, 100, 32, 115, 105, 122, 101, 115, 32, 111, 102, 32, > 97, 112, 112, 101, 97, 114, 105, 110, 103, 32, 98, 108, 111, 98, 115, 32, > 97, 114, 101, 92, 110, 32, 32, 32, 99, 104, 111, 115, 101, 110, 32, 114, > 97, 110, 100, 111, 109, 108, 121, 34, 44, 92, 10, 54, 48, 44, 49, 50, > 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 10, 45, 119, 91, 45, 49, > 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, > 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, > 91, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, 45, > 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, > 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, > 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 105, 102, 32, 123, 36, 120, > 60, 48, 124, 124, 36, 121, 60, 48, 125, 32, 45, 99, 111, 110, 116, 105, > 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 36, 98, 38, 49, 125, 10, 45, 105, 102, 32, 123, 36, 110, 101, 97, 114, > 101, 115, 116, 62, 61, 48, 34, 32, 124, 124, 32, 34, 36, 109, 111, 118, > 105, 110, 103, 62, 61, 48, 125, 10, 45, 105, 102, 32, 123, 36, 109, 111, > 118, 105, 110, 103, 60, 48, 125, 32, 109, 111, 118, 105, 110, 103, 61, 36, > 110, 101, 97, 114, 101, 115, 116, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 61, 91, 49, 93, 32, 36, 120, 44, 48, 44, 36, 109, 111, 118, 105, 110, > 103, 32, 45, 61, 91, 49, 93, 32, 36, 121, 44, 49, 44, 36, 109, 111, > 118, 105, 110, 103, 10, 45, 101, 108, 115, 101, 10, 40, 36, 120, 44, 36, > 121, 44, 123, 63, 40, 50, 48, 44, 53, 48, 41, 125, 44, 123, 63, 40, > 45, 48, 46, 51, 44, 48, 46, 51, 41, 125, 44, 123, 63, 40, 48, 44, > 112, 105, 47, 50, 41, 125, 44, 123, 63, 40, 48, 44, 48, 46, 48, 48, > 57, 41, 125, 44, 123, 63, 40, 54, 52, 44, 50, 53, 53, 41, 125, 44, > 123, 63, 40, 54, 52, 44, 50, 53, 53, 41, 125, 41, 32, 45, 97, 91, > 94, 48, 93, 32, 121, 10, 109, 111, 118, 105, 110, 103, 61, 123, 104, 45, > 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 98, 38, 50, 125, 10, 45, 105, 102, 32, 123, 36, 110, 101, 97, > 114, 101, 115, 116, 62, 61, 48, 125, 32, 45, 108, 91, 49, 93, 32, 45, > 115, 32, 121, 32, 45, 114, 109, 91, 36, 110, 101, 97, 114, 101, 115, 116, > 93, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, 108, 32, 110, 101, 97, > 114, 101, 115, 116, 61, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 98, 38, 52, 125, 10, 45, 107, 91, 48, > 93, 10, 45, 101, 108, 115, 101, 10, 109, 111, 118, 105, 110, 103, 61, 45, > 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, > 10, 45, 114, 109, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 120, 95, 98, 111, 117, 110, 99, 105, 110, 103, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, > 32, 116, 104, 101, 32, 98, 111, 117, 110, 99, 105, 110, 103, 32, 98, 97, > 108, 108, 115, 32, 100, 101, 109, 111, 46, 10, 120, 95, 98, 111, 117, 110, > 99, 105, 110, 103, 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, > 45, 45, 45, 45, 45, 45, 32, 66, 111, 117, 110, 99, 105, 110, 103, 32, > 98, 97, 108, 108, 115, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, > 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, > 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, > 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, > 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 10, 53, > 48, 48, 44, 51, 50, 48, 44, 49, 44, 51, 32, 45, 112, 108, 97, 115, > 109, 97, 32, 49, 44, 49, 44, 57, 32, 45, 110, 32, 48, 44, 50, 50, > 48, 10, 78, 61, 49, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 78, 10, 45, 98, 97, 108, 108, 91, 93, 32, 123, 114, 111, 117, 110, 100, > 40, 63, 40, 51, 50, 44, 56, 48, 41, 41, 125, 44, 64, 123, 45, 82, > 71, 66, 125, 10, 116, 36, 62, 61, 123, 63, 40, 50, 48, 48, 41, 125, > 32, 120, 36, 62, 61, 64, 123, 48, 44, 63, 40, 49, 48, 44, 119, 45, > 49, 48, 41, 125, 32, 104, 36, 62, 61, 123, 63, 40, 49, 53, 48, 44, > 51, 48, 48, 41, 125, 32, 118, 120, 36, 62, 61, 123, 105, 102, 40, 63, > 60, 48, 46, 53, 44, 49, 44, 45, 49, 41, 42, 63, 40, 49, 44, 56, > 41, 125, 10, 45, 100, 111, 110, 101, 10, 45, 109, 118, 91, 48, 93, 32, > 64, 35, 32, 45, 119, 91, 45, 49, 93, 32, 45, 49, 44, 45, 49, 44, > 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 66, 111, 117, > 110, 99, 105, 110, 103, 32, 98, 97, 108, 108, 115, 34, 10, 40, 48, 59, > 48, 46, 55, 59, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 119, 125, 44, 55, 48, 44, 49, 44, 49, 44, 51, 10, 45, > 100, 111, 10, 91, 36, 78, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 78, 10, 98, 119, 61, 64, 123, 36, 62, 44, 119, 125, 32, 98, 104, > 61, 64, 123, 36, 62, 44, 104, 125, 10, 121, 61, 123, 36, 123, 104, 36, > 62, 125, 42, 97, 98, 115, 40, 99, 111, 115, 40, 36, 123, 116, 36, 62, > 125, 42, 112, 105, 47, 54, 48, 41, 41, 45, 36, 98, 104, 47, 50, 125, > 10, 100, 116, 61, 49, 10, 45, 105, 102, 32, 123, 36, 121, 60, 48, 125, > 32, 100, 61, 123, 45, 36, 121, 125, 32, 121, 61, 48, 32, 98, 104, 61, > 123, 36, 98, 104, 45, 36, 100, 125, 32, 98, 119, 61, 123, 36, 98, 119, > 43, 36, 100, 125, 32, 100, 116, 61, 123, 109, 97, 120, 40, 48, 46, 50, > 44, 49, 45, 40, 36, 100, 47, 36, 98, 104, 41, 94, 50, 41, 125, 32, > 45, 101, 108, 115, 101, 32, 100, 116, 61, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 36, 123, 120, 36, 62, 125, 43, 36, 98, > 119, 47, 50, 62, 119, 125, 10, 100, 61, 123, 36, 123, 120, 36, 62, 125, > 43, 36, 98, 119, 47, 50, 45, 119, 125, 32, 98, 119, 61, 123, 36, 98, > 119, 45, 36, 100, 125, 32, 98, 104, 61, 123, 36, 98, 104, 43, 48, 46, > 53, 42, 36, 100, 125, 10, 45, 105, 102, 32, 123, 36, 123, 120, 36, 62, > 125, 43, 36, 98, 119, 47, 52, 62, 119, 125, 32, 118, 120, 36, 62, 61, > 123, 45, 36, 123, 118, 120, 36, 62, 125, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 123, > 120, 36, 62, 125, 45, 36, 98, 119, 47, 50, 60, 48, 125, 10, 100, 61, > 123, 36, 98, 119, 47, 50, 45, 36, 123, 120, 36, 62, 125, 125, 32, 98, > 119, 61, 123, 36, 98, 119, 45, 36, 100, 125, 32, 98, 104, 61, 123, 36, > 98, 104, 43, 48, 46, 53, 42, 36, 100, 125, 10, 45, 105, 102, 32, 123, > 36, 123, 120, 36, 62, 125, 45, 36, 98, 119, 47, 52, 60, 48, 125, 32, > 118, 120, 36, 62, 61, 123, 45, 36, 123, 118, 120, 36, 62, 125, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, > 114, 91, 36, 62, 93, 32, 36, 98, 119, 44, 36, 98, 104, 44, 49, 44, > 52, 44, 51, 32, 45, 115, 91, 45, 49, 93, 32, 99, 44, 45, 51, 10, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 123, 109, 97, 120, > 40, 48, 44, 109, 105, 110, 40, 64, 123, 36, 78, 44, 119, 45, 36, 98, > 119, 125, 44, 36, 123, 120, 36, 62, 125, 45, 36, 98, 119, 47, 50, 41, > 41, 125, 44, 123, 64, 123, 36, 78, 44, 104, 125, 45, 64, 123, 45, 49, > 44, 104, 125, 45, 36, 121, 45, 55, 48, 125, 44, 48, 44, 48, 44, 49, > 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, > 44, 45, 49, 93, 10, 116, 36, 62, 61, 123, 36, 123, 116, 36, 62, 125, > 43, 36, 100, 116, 125, 10, 120, 36, 62, 61, 123, 36, 123, 120, 36, 62, > 125, 43, 36, 100, 116, 42, 36, 123, 118, 120, 36, 62, 125, 125, 10, 45, > 100, 111, 110, 101, 10, 45, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, > 123, 104, 45, 50, 42, 55, 48, 125, 44, 123, 104, 45, 49, 45, 55, 48, > 125, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 32, > 45, 42, 91, 45, 49, 93, 32, 91, 123, 36, 78, 43, 49, 125, 93, 10, > 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 64, 123, > 45, 50, 44, 104, 45, 55, 49, 125, 44, 48, 44, 48, 44, 48, 46, 53, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 91, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, > 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, > 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, 45, 101, 108, > 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, > 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 48, 10, > 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, > 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, > 64, 123, 33, 44, 81, 125, 125, 10, 45, 119, 32, 48, 32, 45, 114, 109, > 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 120, 95, 102, 105, 114, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 102, 105, > 114, 101, 32, 101, 102, 102, 101, 99, 116, 32, 100, 101, 109, 111, 46, 10, > 120, 95, 102, 105, 114, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, > 36, 123, 49, 61, 71, 92, 52, 55, 77, 73, 67, 125, 34, 10, 45, 101, > 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 70, 105, > 114, 101, 32, 101, 102, 102, 101, 99, 116, 32, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, > 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, > 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, > 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, > 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, > 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 45, 105, 91, 48, 93, 32, > 49, 48, 48, 44, 51, 50, 32, 45, 119, 91, 48, 93, 32, 52, 53, 48, > 44, 50, 48, 48, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 70, 105, 114, 101, 32, 101, 102, 102, 101, 99, 116, 34, 10, 45, > 105, 91, 49, 93, 32, 40, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, > 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 44, 50, 53, 53, 44, > 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, 44, 49, 50, > 56, 44, 50, 53, 53, 41, 32, 45, 114, 91, 49, 93, 32, 50, 53, 54, > 44, 49, 44, 49, 44, 51, 44, 51, 10, 45, 105, 91, 50, 93, 32, 40, > 48, 44, 48, 44, 48, 59, 48, 44, 48, 44, 48, 59, 49, 44, 49, 44, > 49, 59, 48, 44, 49, 44, 48, 41, 32, 45, 42, 91, 50, 93, 32, 48, > 46, 50, 49, 10, 45, 116, 101, 120, 116, 51, 100, 32, 34, 36, 49, 34, > 44, 51, 51, 44, 51, 44, 49, 10, 45, 109, 118, 91, 45, 49, 93, 32, > 51, 32, 45, 99, 51, 100, 91, 51, 93, 32, 45, 110, 51, 100, 91, 51, > 93, 32, 45, 42, 51, 100, 91, 51, 93, 32, 51, 50, 48, 32, 45, 99, > 111, 108, 51, 100, 91, 51, 93, 32, 50, 53, 53, 44, 50, 48, 53, 44, > 49, 51, 48, 32, 45, 100, 98, 51, 100, 32, 48, 32, 45, 102, 51, 100, > 32, 51, 48, 48, 10, 49, 48, 48, 44, 49, 48, 48, 32, 45, 114, 97, > 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, > 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, > 37, 44, 53, 44, 53, 44, 48, 44, 49, 44, 51, 48, 48, 32, 45, 98, > 91, 45, 49, 93, 32, 49, 48, 10, 45, 115, 104, 97, 114, 112, 101, 110, > 91, 45, 49, 93, 32, 49, 48, 48, 48, 32, 45, 115, 104, 114, 105, 110, > 107, 95, 120, 121, 91, 45, 49, 93, 32, 49, 32, 45, 110, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 45, 49, 93, 32, 45, 108, 105, 103, 104, 116, 51, 100, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 97, 110, 103, 108, 101, 61, > 48, 10, 45, 100, 111, 10, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, > 91, 48, 93, 32, 91, 50, 93, 10, 64, 123, 48, 44, 119, 125, 44, 49, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 49, 50, 56, 44, 50, > 53, 54, 32, 45, 106, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 123, 64, 123, 48, 44, 104, 125, 45, 49, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 45, 114, 91, 48, 93, 32, 52, 48, 48, 44, 50, 48, > 48, 44, 49, 44, 49, 44, 51, 32, 45, 109, 97, 112, 91, 45, 49, 93, > 32, 91, 49, 93, 10, 45, 45, 114, 51, 100, 91, 51, 93, 32, 48, 44, > 49, 44, 48, 44, 36, 97, 110, 103, 108, 101, 32, 45, 111, 98, 106, 101, > 99, 116, 51, 100, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 53, 48, > 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 53, 44, 48, 44, 48, 10, > 45, 42, 51, 100, 91, 45, 49, 93, 32, 48, 46, 50, 53, 44, 48, 46, > 49, 54, 44, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, > 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, > 44, 49, 44, 51, 44, 48, 44, 48, 10, 45, 114, 109, 91, 45, 49, 93, > 10, 97, 110, 103, 108, 101, 61, 123, 36, 97, 110, 103, 108, 101, 43, 51, > 125, 10, 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, > 123, 50, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, > 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, > 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 119, 97, 105, 116, 32, 52, 48, 10, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, > 10, 45, 114, 109, 91, 48, 45, 51, 93, 32, 45, 119, 32, 48, 10, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 102, 105, 114, > 101, 119, 111, 114, 107, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 102, 105, 114, 101, 119, > 111, 114, 107, 115, 32, 100, 101, 109, 111, 46, 10, 120, 95, 102, 105, 114, > 101, 119, 111, 114, 107, 115, 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, > 110, 10, 45, 45, 45, 45, 45, 45, 32, 70, 105, 114, 101, 119, 111, 114, > 107, 115, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, > 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, > 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, > 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, > 118, 32, 45, 32, 45, 108, 91, 93, 10, 116, 105, 109, 101, 61, 48, 10, > 40, 48, 59, 54, 52, 94, 48, 59, 51, 50, 94, 49, 50, 56, 59, 48, > 41, 32, 45, 114, 32, 50, 53, 54, 44, 49, 50, 56, 44, 49, 44, 51, > 44, 51, 10, 91, 45, 49, 93, 10, 45, 119, 91, 45, 49, 93, 32, 123, > 49, 46, 53, 42, 119, 125, 44, 123, 49, 46, 53, 42, 104, 125, 44, 48, > 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 70, 105, 114, 101, > 119, 111, 114, 107, 115, 34, 10, 45, 100, 111, 10, 116, 105, 109, 101, 61, > 123, 36, 116, 105, 109, 101, 45, 49, 125, 10, 45, 105, 102, 32, 123, 64, > 35, 61, 61, 50, 92, 32, 124, 124, 92, 32, 36, 116, 105, 109, 101, 60, > 48, 125, 10, 45, 105, 91, 48, 93, 32, 40, 123, 63, 40, 119, 41, 125, > 44, 92, 10, 123, 104, 125, 44, 92, 10, 123, 63, 40, 45, 51, 44, 51, > 41, 125, 44, 92, 10, 123, 63, 40, 50, 41, 45, 53, 125, 44, 92, 10, > 123, 51, 48, 43, 63, 40, 50, 48, 41, 125, 44, 92, 10, 49, 46, 53, > 44, 92, 10, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 41, 10, > 116, 105, 109, 101, 61, 123, 63, 40, 52, 48, 41, 125, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 42, 91, 45, 49, 93, 32, 48, 46, 57, 57, 10, > 45, 106, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 46, 50, 10, 105, 61, 48, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 10, 116, 111, 95, 98, 101, > 95, 114, 101, 109, 111, 118, 101, 100, 61, 48, 10, 114, 97, 100, 105, 117, > 115, 61, 123, 105, 102, 40, 64, 123, 36, 105, 44, 52, 125, 62, 48, 44, > 64, 123, 36, 105, 44, 53, 125, 47, 51, 44, 64, 123, 36, 105, 44, 53, > 125, 42, 40, 49, 43, 50, 42, 40, 64, 123, 36, 105, 44, 52, 125, 43, > 50, 41, 47, 49, 50, 48, 41, 41, 125, 10, 45, 101, 108, 108, 105, 112, > 115, 101, 91, 45, 49, 93, 32, 64, 123, 36, 105, 44, 48, 125, 44, 64, > 123, 36, 105, 44, 49, 125, 44, 64, 123, 36, 105, 44, 53, 125, 44, 123, > 109, 97, 120, 40, 48, 46, 53, 44, 36, 114, 97, 100, 105, 117, 115, 41, > 125, 44, 123, 97, 116, 97, 110, 50, 40, 64, 123, 36, 105, 44, 51, 125, > 44, 64, 123, 36, 105, 44, 50, 125, 41, 42, 49, 56, 48, 47, 112, 105, > 125, 44, 48, 46, 54, 44, 64, 123, 36, 105, 44, 54, 45, 56, 125, 10, > 40, 64, 123, 36, 105, 44, 50, 125, 44, 64, 123, 36, 105, 44, 51, 125, > 44, 48, 44, 48, 46, 48, 57, 44, 45, 49, 44, 48, 44, 48, 44, 48, > 44, 48, 41, 32, 45, 43, 91, 36, 105, 44, 45, 49, 93, 10, 45, 105, > 102, 32, 123, 64, 123, 36, 105, 44, 48, 125, 60, 48, 92, 32, 124, 124, > 92, 32, 64, 123, 36, 105, 44, 48, 125, 62, 61, 119, 92, 32, 124, 124, > 92, 32, 64, 123, 36, 105, 44, 49, 125, 62, 61, 104, 92, 32, 124, 124, > 92, 32, 36, 114, 97, 100, 105, 117, 115, 60, 48, 125, 32, 116, 111, 95, > 98, 101, 95, 114, 101, 109, 111, 118, 101, 100, 61, 49, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 36, 105, 44, 52, 125, > 60, 48, 92, 32, 38, 38, 92, 32, 64, 123, 36, 105, 44, 52, 125, 62, > 61, 45, 49, 125, 10, 99, 111, 108, 111, 114, 61, 123, 109, 105, 110, 40, > 50, 53, 53, 44, 56, 48, 43, 63, 40, 50, 48, 48, 41, 41, 125, 44, > 123, 109, 105, 110, 40, 50, 53, 53, 44, 56, 48, 43, 63, 40, 50, 48, > 48, 41, 41, 125, 44, 123, 109, 105, 110, 40, 50, 53, 53, 44, 56, 48, > 43, 63, 40, 50, 48, 48, 41, 41, 125, 10, 114, 97, 100, 105, 117, 115, > 61, 123, 63, 40, 49, 48, 41, 125, 10, 78, 61, 123, 53, 43, 63, 40, > 49, 48, 41, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 10, > 97, 110, 103, 108, 101, 61, 123, 36, 62, 42, 50, 42, 112, 105, 47, 36, > 78, 125, 10, 45, 105, 91, 45, 51, 93, 32, 40, 64, 123, 36, 105, 44, > 48, 44, 49, 125, 44, 123, 50, 42, 99, 111, 115, 40, 36, 97, 110, 103, > 108, 101, 41, 43, 64, 123, 36, 105, 44, 50, 125, 47, 49, 46, 53, 125, > 44, 123, 50, 42, 115, 105, 110, 40, 36, 97, 110, 103, 108, 101, 41, 43, > 64, 123, 36, 105, 44, 51, 125, 47, 49, 46, 53, 125, 44, 45, 50, 44, > 36, 114, 97, 100, 105, 117, 115, 44, 36, 99, 111, 108, 111, 114, 41, 10, > 45, 100, 111, 110, 101, 10, 116, 111, 95, 98, 101, 95, 114, 101, 109, 111, > 118, 101, 100, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 36, 116, 111, 95, 98, 101, 95, 114, 101, 109, 111, 118, 101, 100, 32, > 45, 114, 109, 91, 36, 105, 93, 32, 45, 101, 108, 115, 101, 32, 105, 61, > 123, 36, 105, 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, > 111, 110, 101, 10, 45, 119, 91, 45, 49, 93, 32, 45, 119, 97, 105, 116, > 32, 50, 48, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, > 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, > 45, 119, 91, 93, 32, 123, 51, 42, 119, 125, 44, 123, 51, 42, 104, 125, > 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, > 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, > 119, 91, 93, 32, 123, 49, 46, 53, 42, 119, 125, 44, 123, 49, 46, 53, > 42, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, > 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, > 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, > 125, 125, 10, 45, 101, 110, 100, 108, 32, 45, 107, 91, 45, 49, 93, 32, > 45, 119, 91, 93, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 120, 95, 102, 105, 115, 104, 101, 121, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, > 32, 102, 105, 115, 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, 99, 116, > 32, 100, 101, 109, 111, 46, 10, 120, 95, 102, 105, 115, 104, 101, 121, 101, > 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 32, 70, 105, 115, 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, > 99, 116, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, 112, 111, 105, 110, 116, 101, > 114, 32, 109, 111, 118, 101, 115, 32, 102, 105, 115, 104, 45, 101, 121, 101, > 32, 99, 101, 110, 116, 101, 114, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 77, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 115, 32, 115, 101, > 116, 32, 102, 105, 115, 104, 45, 101, 121, 101, 32, 115, 105, 122, 101, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, > 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, > 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, > 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, > 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, > 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, > 32, 45, 10, 45, 105, 102, 32, 123, 64, 35, 62, 48, 125, 32, 45, 97, > 32, 120, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 114, 50, 100, > 121, 32, 50, 50, 48, 32, 45, 101, 108, 115, 101, 10, 49, 50, 48, 44, > 57, 48, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 112, 108, 97, 115, 109, 97, 91, 45, > 49, 93, 32, 48, 46, 51, 44, 51, 32, 45, 110, 32, 48, 44, 50, 53, > 53, 10, 45, 116, 32, 34, 32, 32, 71, 92, 52, 55, 77, 73, 67, 92, > 110, 70, 73, 83, 72, 45, 69, 89, 69, 92, 110, 32, 69, 70, 70, 69, > 67, 84, 34, 44, 49, 53, 44, 49, 51, 44, 50, 51, 44, 49, 44, 50, > 53, 53, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, 45, 98, 32, 53, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, 48, 48, 48, 10, 45, > 102, 32, 105, 43, 49, 53, 48, 45, 52, 42, 97, 98, 115, 40, 121, 45, > 104, 47, 50, 41, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 102, 114, 97, 109, 101, 95, 102, 117, 122, 122, 121, 91, 45, > 49, 93, 32, 49, 53, 44, 49, 48, 44, 49, 53, 44, 49, 46, 53, 44, > 48, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 116, 111, 114, 117, 115, 51, 100, 32, 50, 48, > 44, 54, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 123, 63, > 40, 51, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 51, 48, 44, > 50, 53, 53, 41, 125, 44, 123, 63, 40, 51, 48, 44, 50, 53, 53, 41, > 125, 32, 45, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, 48, 44, > 48, 44, 57, 48, 10, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, > 123, 63, 40, 51, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 51, > 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 51, 48, 44, 50, 53, > 53, 41, 125, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 53, 32, > 45, 43, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, 45, 100, 98, 51, > 100, 32, 48, 32, 45, 99, 51, 100, 91, 45, 49, 93, 10, 82, 61, 51, > 48, 10, 45, 119, 91, 45, 50, 93, 32, 123, 49, 46, 53, 42, 64, 123, > 45, 50, 44, 119, 125, 125, 44, 123, 49, 46, 53, 42, 64, 123, 45, 50, > 44, 104, 125, 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 70, 105, 115, 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, 99, > 116, 34, 10, 45, 100, 111, 10, 45, 119, 97, 105, 116, 32, 52, 48, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 61, 61, 49, 125, 32, > 82, 61, 123, 109, 105, 110, 40, 56, 48, 44, 36, 82, 43, 56, 41, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, > 44, 98, 125, 61, 61, 50, 125, 32, 82, 61, 123, 109, 97, 120, 40, 51, > 44, 36, 82, 45, 56, 41, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 123, 53, 48, 43, 51, 48, 42, 99, 111, 115, 40, 64, 124, > 42, 50, 46, 53, 41, 125, 37, 44, 123, 53, 48, 43, 51, 48, 42, 115, > 105, 110, 40, 64, 124, 42, 49, 46, 54, 41, 125, 37, 44, 123, 53, 48, > 43, 51, 51, 48, 42, 115, 105, 110, 40, 64, 124, 42, 50, 46, 54, 41, > 125, 44, 48, 46, 55, 44, 51, 44, 48, 44, 48, 32, 45, 114, 51, 100, > 91, 45, 50, 93, 32, 49, 44, 48, 46, 50, 44, 48, 46, 54, 44, 51, > 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 120, 125, 62, 61, 48, 125, > 10, 45, 102, 105, 115, 104, 101, 121, 101, 91, 45, 49, 93, 32, 123, 64, > 123, 33, 44, 120, 125, 42, 49, 48, 48, 47, 64, 123, 33, 44, 119, 125, > 125, 44, 123, 64, 123, 33, 44, 121, 125, 42, 49, 48, 48, 47, 64, 123, > 33, 44, 104, 125, 125, 44, 36, 82, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, > 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, > 125, 125, 32, 45, 119, 91, 93, 32, 123, 51, 42, 119, 125, 44, 123, 51, > 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, > 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, > 125, 32, 45, 119, 91, 93, 32, 123, 49, 46, 53, 42, 119, 125, 44, 123, > 49, 46, 53, 42, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 33, 61, 61, 48, > 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, > 124, 124, 32, 34, 64, 123, 33, 44, 81, 125, 125, 32, 45, 114, 109, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, > 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 104, 105, 108, 101, 32, 49, 10, 35, 64, 103, 109, 105, 99, 32, > 120, 95, 102, 111, 117, 114, 105, 101, 114, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 102, 111, > 117, 114, 105, 101, 114, 32, 102, 105, 108, 116, 101, 114, 105, 110, 103, 32, > 100, 101, 109, 111, 46, 10, 120, 95, 102, 111, 117, 114, 105, 101, 114, 32, > 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, > 45, 32, 70, 111, 117, 114, 105, 101, 114, 45, 102, 105, 108, 116, 101, 114, > 105, 110, 103, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 115, 32, 111, 110, 32, 116, 104, 101, 32, > 114, 105, 103, 104, 116, 32, 105, 109, 97, 103, 101, 32, 116, 111, 32, 115, > 101, 116, 32, 109, 105, 110, 47, 109, 97, 120, 32, 102, 114, 101, 113, 117, > 101, 110, 99, 105, 101, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, > 105, 110, 99, 114, 101, 97, 115, 101, 32, 119, 105, 110, 100, 111, 119, 32, > 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 100, 101, > 99, 114, 101, 97, 115, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, > 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, > 39, 67, 84, 82, 76, 43, 82, 39, 32, 116, 111, 32, 114, 101, 115, 101, > 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, > 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 116, 101, 115, > 116, 105, 109, 97, 103, 101, 50, 100, 32, 50, 53, 54, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 110, 101, 101, 100, 95, 117, 112, 100, 97, 116, > 101, 61, 49, 10, 102, 114, 101, 113, 109, 105, 110, 61, 48, 10, 102, 114, > 101, 113, 109, 97, 120, 61, 49, 48, 48, 10, 45, 105, 102, 32, 123, 119, > 62, 51, 42, 64, 123, 33, 44, 117, 125, 47, 53, 125, 32, 45, 114, 50, > 100, 120, 91, 45, 49, 93, 32, 123, 51, 42, 64, 123, 33, 44, 117, 125, > 47, 49, 48, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 104, 62, 51, 42, 64, 123, 33, 44, 118, 125, 47, 53, 125, 32, 45, > 114, 50, 100, 121, 91, 45, 49, 93, 32, 123, 51, 42, 64, 123, 33, 44, > 118, 125, 47, 53, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 102, > 102, 116, 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 50, 93, 32, 114, > 101, 97, 108, 32, 45, 110, 109, 91, 45, 49, 93, 32, 105, 109, 97, 103, > 10, 45, 45, 115, 113, 114, 91, 114, 101, 97, 108, 44, 105, 109, 97, 103, > 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, 113, 114, > 116, 91, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, > 108, 111, 103, 91, 45, 49, 93, 10, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, > 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 48, 44, 50, 32, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 49, 93, 32, > 64, 123, 45, 50, 44, 115, 125, 10, 45, 110, 109, 91, 45, 49, 93, 32, > 108, 111, 103, 109, 97, 103, 10, 45, 119, 91, 48, 44, 45, 49, 93, 32, > 45, 49, 44, 45, 49, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, > 67, 93, 32, 70, 111, 117, 114, 105, 101, 114, 32, 102, 105, 108, 116, 101, > 114, 105, 110, 103, 34, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, > 40, 36, 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 41, 125, 32, 45, > 45, 108, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, 32, 49, 50, 56, > 32, 45, 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 48, 10, 45, 97, > 108, 101, 114, 116, 32, 34, 91, 71, 92, 52, 55, 77, 73, 67, 32, 70, > 111, 117, 114, 105, 101, 114, 32, 102, 105, 108, 116, 101, 114, 105, 110, 103, > 93, 34, 44, 92, 10, 34, 84, 104, 101, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 70, 111, 117, 114, 105, 101, 114, 32, 102, 105, 108, 116, 101, 114, > 105, 110, 103, 32, 100, 101, 109, 111, 32, 105, 108, 108, 117, 115, 116, 114, > 97, 116, 101, 115, 32, 116, 104, 101, 32, 101, 102, 102, 101, 99, 116, 92, > 110, 34, 92, 10, 34, 111, 102, 32, 98, 97, 110, 100, 112, 97, 115, 115, > 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 102, 105, 108, 116, 101, > 114, 105, 110, 103, 32, 111, 110, 32, 97, 110, 32, 105, 109, 97, 103, 101, > 46, 32, 85, 115, 101, 32, 121, 111, 117, 114, 32, 109, 111, 117, 115, 101, > 92, 110, 34, 92, 10, 34, 98, 117, 116, 116, 111, 110, 115, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 32, 108, 111, 119, 32, 97, 110, 100, 32, > 104, 105, 103, 104, 32, 98, 111, 117, 110, 100, 115, 32, 102, 111, 114, 32, > 116, 104, 101, 32, 102, 114, 101, 113, 117, 101, 110, 99, 105, 101, 115, 92, > 110, 34, 92, 10, 34, 100, 105, 115, 112, 108, 97, 121, 101, 100, 32, 111, > 110, 32, 116, 104, 101, 32, 70, 111, 117, 114, 105, 101, 114, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 92, 110, 34, 92, 10, 34, 40, > 114, 105, 103, 104, 116, 32, 105, 109, 97, 103, 101, 41, 46, 34, 44, 92, > 10, 34, 83, 116, 97, 114, 116, 32, 100, 101, 109, 111, 34, 10, 45, 114, > 109, 32, 45, 101, 110, 100, 108, 32, 102, 105, 114, 115, 116, 95, 116, 105, > 109, 101, 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 10, > 45, 105, 102, 32, 36, 110, 101, 101, 100, 95, 117, 112, 100, 97, 116, 101, > 10, 45, 105, 91, 109, 97, 115, 107, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 10, 114, 61, 123, 115, 113, 114, 116, 40, 119, 94, 50, 43, > 104, 94, 50, 41, 42, 36, 102, 114, 101, 113, 109, 97, 120, 47, 50, 48, > 48, 125, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 109, 97, 115, 107, > 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 36, 114, 44, 36, 114, 44, > 48, 44, 49, 44, 49, 10, 114, 61, 123, 109, 97, 120, 40, 48, 44, 115, > 113, 114, 116, 40, 119, 94, 50, 43, 104, 94, 50, 41, 42, 36, 102, 114, > 101, 113, 109, 105, 110, 47, 50, 48, 48, 45, 49, 41, 125, 32, 45, 105, > 102, 32, 36, 114, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 109, 97, > 115, 107, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 36, 114, 44, 36, > 114, 44, 48, 44, 49, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 42, 91, 108, 111, 103, 109, 97, 103, 93, 32, 91, 109, 97, 115, 107, > 93, 32, 45, 43, 91, 45, 49, 93, 32, 91, 109, 97, 115, 107, 93, 32, > 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 53, 53, 10, 45, 115, 104, 105, 102, 116, 91, 109, 97, 115, > 107, 93, 32, 45, 53, 48, 37, 44, 45, 53, 48, 37, 44, 48, 44, 48, > 44, 50, 10, 45, 45, 42, 91, 114, 101, 97, 108, 44, 105, 109, 97, 103, > 93, 32, 91, 109, 97, 115, 107, 93, 10, 45, 114, 109, 91, 45, 52, 93, > 10, 45, 105, 102, 102, 116, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, > 102, 32, 64, 33, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 123, > 64, 123, 33, 44, 119, 125, 47, 50, 125, 44, 64, 123, 33, 44, 104, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 91, 45, 49, 93, 32, 34, > 70, 114, 101, 113, 46, 32, 77, 105, 110, 47, 77, 97, 120, 32, 61, 32, > 34, 123, 105, 110, 116, 40, 36, 102, 114, 101, 113, 109, 105, 110, 41, 125, > 34, 37, 32, 47, 32, 34, 123, 105, 110, 116, 40, 36, 102, 114, 101, 113, > 109, 97, 120, 41, 125, 34, 37, 34, 44, 53, 44, 53, 44, 49, 51, 44, > 49, 44, 50, 53, 53, 10, 45, 119, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 110, 101, 101, 100, 95, > 117, 112, 100, 97, 116, 101, 61, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 97, 105, 116, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, > 125, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 120, 125, 62, 61, 64, > 123, 33, 44, 119, 125, 47, 50, 125, 10, 114, 61, 123, 50, 48, 48, 42, > 115, 113, 114, 116, 40, 40, 64, 123, 33, 44, 120, 125, 45, 51, 42, 64, > 123, 33, 44, 119, 125, 47, 52, 41, 94, 50, 43, 40, 64, 123, 33, 44, > 121, 125, 45, 64, 123, 33, 44, 104, 125, 47, 50, 41, 94, 50, 41, 47, > 92, 10, 115, 113, 114, 116, 40, 40, 64, 123, 33, 44, 119, 125, 47, 50, > 41, 94, 50, 43, 64, 123, 33, 44, 104, 125, 94, 50, 41, 125, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 38, 49, 125, 32, 102, 114, > 101, 113, 109, 97, 120, 61, 36, 114, 10, 45, 101, 108, 115, 101, 32, 102, > 114, 101, 113, 109, 105, 110, 61, 123, 109, 97, 120, 40, 48, 44, 36, 114, > 45, 51, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 102, 114, 101, 113, 109, 105, 110, 62, 61, 36, 102, 114, 101, 113, > 109, 97, 120, 125, 32, 102, 114, 101, 113, 109, 105, 110, 61, 36, 102, 114, > 101, 113, 109, 97, 120, 32, 45, 101, 110, 100, 105, 102, 10, 110, 101, 101, > 100, 95, 117, 112, 100, 97, 116, 101, 61, 49, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 114, 125, 32, 110, 101, 101, > 100, 95, 117, 112, 100, 97, 116, 101, 61, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, > 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, > 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, > 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 64, 123, > 33, 44, 119, 125, 42, 49, 46, 53, 125, 44, 123, 64, 123, 33, 44, 104, > 125, 42, 49, 46, 53, 125, 32, 110, 101, 101, 100, 95, 117, 112, 100, 97, > 116, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, > 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, > 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 67, 125, > 125, 32, 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, 47, 49, > 46, 53, 125, 44, 123, 64, 123, 33, 44, 104, 125, 47, 49, 46, 53, 125, > 32, 110, 101, 101, 100, 95, 117, 112, 100, 97, 116, 101, 61, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, > 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, > 38, 38, 32, 34, 64, 123, 33, 44, 82, 125, 125, 32, 45, 119, 91, 93, > 32, 123, 50, 42, 64, 123, 48, 44, 119, 125, 125, 44, 64, 123, 48, 44, > 104, 125, 32, 110, 101, 101, 100, 95, 117, 112, 100, 97, 116, 101, 61, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, > 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, > 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, > 45, 114, 109, 91, 45, 51, 45, 45, 49, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 119, 32, 48, 32, 45, 114, 109, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 104, 105, > 115, 116, 111, 103, 114, 97, 109, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 32, 100, 101, 109, 111, 46, 10, 120, 95, 104, 105, > 115, 116, 111, 103, 114, 97, 109, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 72, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 100, 101, 109, 111, 32, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, > 110, 10, 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, 116, 111, 32, > 115, 101, 116, 32, 112, 97, 114, 97, 109, 101, 116, 101, 114, 115, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, 32, 98, 117, 116, > 116, 111, 110, 32, 111, 114, 32, 107, 101, 121, 32, 39, 83, 80, 65, 67, > 69, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, > 118, 32, 45, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 116, > 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 51, 48, 48, 44, 51, > 48, 48, 32, 45, 101, 108, 115, 101, 32, 45, 107, 91, 48, 93, 32, 45, > 116, 111, 95, 114, 103, 98, 32, 45, 114, 50, 100, 121, 32, 51, 48, 48, > 44, 50, 32, 45, 105, 102, 32, 123, 119, 62, 56, 48, 48, 125, 32, 45, > 114, 32, 56, 48, 48, 44, 49, 48, 48, 37, 44, 49, 44, 51, 44, 50, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 110, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 102, 114, 97, 109, 101, 91, > 45, 49, 93, 32, 49, 44, 49, 44, 48, 10, 51, 48, 48, 44, 123, 104, > 125, 44, 49, 44, 51, 44, 50, 50, 48, 10, 45, 116, 91, 45, 49, 93, > 32, 34, 71, 97, 109, 109, 97, 32, 58, 34, 44, 53, 44, 48, 44, 49, > 54, 44, 49, 44, 48, 10, 45, 116, 91, 45, 49, 93, 32, 34, 67, 111, > 110, 116, 114, 97, 115, 116, 32, 58, 34, 44, 53, 44, 53, 48, 44, 49, > 54, 44, 49, 44, 48, 10, 45, 116, 91, 45, 49, 93, 32, 34, 66, 114, > 105, 103, 104, 116, 110, 101, 115, 115, 32, 58, 34, 44, 53, 44, 49, 48, > 48, 44, 49, 54, 44, 49, 44, 48, 10, 45, 116, 91, 45, 49, 93, 32, > 34, 83, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 58, 34, 44, 53, > 44, 49, 53, 48, 44, 49, 54, 44, 49, 44, 48, 10, 45, 116, 91, 45, > 49, 93, 32, 34, 83, 104, 97, 114, 112, 110, 101, 115, 115, 32, 58, 34, > 44, 53, 44, 50, 48, 48, 44, 49, 54, 44, 49, 44, 48, 10, 45, 116, > 91, 45, 49, 93, 32, 34, 67, 108, 117, 115, 116, 101, 114, 115, 32, 58, > 34, 44, 53, 44, 50, 53, 48, 44, 49, 54, 44, 49, 44, 48, 10, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 123, 119, 125, 44, 50, > 48, 48, 44, 49, 44, 51, 44, 50, 53, 53, 10, 45, 103, 114, 105, 100, > 91, 45, 49, 93, 32, 49, 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, > 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, > 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, > 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 97, > 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 44, 49, 44, > 48, 44, 49, 51, 44, 49, 44, 48, 10, 45, 102, 114, 97, 109, 101, 91, > 45, 50, 44, 45, 49, 93, 32, 53, 44, 53, 44, 50, 50, 48, 10, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 99, 108, 117, 115, 116, > 101, 114, 115, 61, 54, 52, 32, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 61, 48, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 32, > 99, 111, 110, 116, 114, 97, 115, 116, 61, 49, 32, 98, 114, 105, 103, 104, > 116, 110, 101, 115, 115, 61, 48, 32, 103, 97, 109, 109, 97, 61, 49, 10, > 45, 100, 111, 10, 91, 48, 93, 10, 105, 97, 61, 123, 105, 97, 125, 10, > 45, 105, 102, 32, 36, 103, 97, 109, 109, 97, 32, 45, 47, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 94, 91, 45, 49, 93, 32, 123, 49, 47, > 36, 103, 97, 109, 109, 97, 125, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 91, 45, 49, 93, > 32, 36, 105, 97, 32, 45, 42, 91, 45, 49, 93, 32, 36, 99, 111, 110, > 116, 114, 97, 115, 116, 32, 45, 43, 91, 45, 49, 93, 32, 36, 98, 114, > 105, 103, 104, 116, 110, 101, 115, 115, 32, 45, 43, 91, 45, 49, 93, 32, > 36, 105, 97, 10, 45, 98, 91, 45, 49, 93, 32, 36, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 10, 45, 115, 104, 97, 114, 112, 101, 110, 91, > 45, 49, 93, 32, 36, 115, 104, 97, 114, 112, 110, 101, 115, 115, 10, 45, > 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, 106, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 54, 44, 54, 10, 115, 120, 61, > 123, 64, 123, 48, 44, 119, 125, 43, 49, 50, 125, 10, 45, 95, 120, 95, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 36, > 103, 97, 109, 109, 97, 42, 49, 48, 48, 47, 52, 125, 32, 45, 106, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 115, 120, 44, 50, 53, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 95, 120, 95, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 36, 99, 111, 110, 116, > 114, 97, 115, 116, 42, 49, 48, 48, 47, 52, 125, 32, 45, 106, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 36, 115, 120, 44, 55, 53, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 95, 120, 95, 104, 105, 115, 116, 111, > 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 40, 36, 98, 114, 105, 103, > 104, 116, 110, 101, 115, 115, 43, 49, 50, 56, 41, 42, 49, 48, 48, 47, > 50, 53, 54, 125, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 36, 115, 120, 44, 49, 50, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 95, 120, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, > 49, 93, 32, 123, 36, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 42, > 49, 48, 48, 47, 49, 48, 125, 32, 45, 106, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 36, 115, 120, 44, 49, 55, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 95, 120, 95, 104, 105, 115, 116, 111, 103, 114, 97, > 109, 91, 45, 49, 93, 32, 123, 36, 115, 104, 97, 114, 112, 110, 101, 115, > 115, 42, 49, 48, 48, 47, 50, 48, 48, 48, 125, 32, 45, 106, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 36, 115, 120, 44, 50, 50, 53, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 95, 120, 95, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 36, 99, 108, 117, 115, > 116, 101, 114, 115, 42, 49, 48, 48, 47, 50, 53, 54, 125, 32, 45, 106, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 115, 120, 44, 50, 55, > 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 115, 91, 45, 50, > 93, 32, 99, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, > 51, 45, 45, 49, 93, 32, 36, 99, 108, 117, 115, 116, 101, 114, 115, 44, > 48, 44, 50, 53, 53, 32, 45, 47, 91, 45, 51, 45, 45, 49, 93, 32, > 123, 51, 42, 64, 123, 48, 44, 119, 104, 125, 47, 36, 99, 108, 117, 115, > 116, 101, 114, 115, 125, 32, 45, 114, 109, 91, 45, 53, 93, 10, 45, 45, > 122, 91, 45, 52, 93, 32, 53, 44, 51, 49, 55, 44, 123, 64, 123, 45, > 52, 44, 119, 125, 45, 53, 125, 44, 123, 64, 123, 45, 52, 44, 104, 125, > 45, 54, 125, 10, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, > 45, 52, 93, 44, 51, 44, 48, 44, 49, 44, 48, 44, 48, 46, 50, 44, > 50, 53, 53, 44, 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, > 49, 93, 32, 91, 45, 51, 93, 44, 51, 44, 48, 44, 49, 44, 48, 44, > 48, 46, 50, 44, 48, 44, 50, 53, 53, 44, 48, 10, 45, 103, 114, 97, > 112, 104, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 51, 44, 48, 44, > 49, 44, 48, 44, 48, 46, 50, 44, 48, 44, 48, 44, 50, 53, 53, 10, > 45, 114, 109, 91, 45, 52, 45, 45, 50, 93, 10, 45, 106, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 53, 44, 51, 49, 55, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 119, 91, 45, 49, 93, 32, 123, 119, 125, 44, > 123, 104, 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, > 32, 72, 105, 115, 116, 111, 103, 114, 97, 109, 32, 100, 101, 109, 111, 34, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 97, 105, 116, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 38, 49, 92, 32, 38, 38, > 92, 32, 64, 123, 33, 44, 120, 125, 62, 61, 64, 123, 48, 44, 119, 125, > 45, 49, 48, 125, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 121, 125, > 62, 61, 50, 53, 92, 32, 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, > 60, 61, 52, 50, 125, 10, 103, 97, 109, 109, 97, 61, 123, 109, 97, 120, > 40, 48, 44, 109, 105, 110, 40, 52, 44, 40, 64, 123, 33, 44, 120, 125, > 45, 36, 115, 120, 41, 42, 52, 47, 50, 56, 48, 41, 41, 125, 10, 45, > 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 121, 125, 62, 61, 55, 53, > 92, 32, 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, 60, 61, 57, 50, > 125, 10, 99, 111, 110, 116, 114, 97, 115, 116, 61, 123, 109, 97, 120, 40, > 48, 44, 109, 105, 110, 40, 52, 44, 40, 64, 123, 33, 44, 120, 125, 45, > 36, 115, 120, 41, 42, 52, 47, 50, 56, 48, 41, 41, 125, 10, 45, 101, > 108, 105, 102, 32, 123, 64, 123, 33, 44, 121, 125, 62, 61, 49, 50, 53, > 92, 32, 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, 60, 61, 49, 52, > 50, 125, 10, 98, 114, 105, 103, 104, 116, 110, 101, 115, 115, 61, 123, 109, > 97, 120, 40, 45, 49, 50, 56, 44, 109, 105, 110, 40, 49, 50, 56, 44, > 40, 64, 123, 33, 44, 120, 125, 45, 36, 115, 120, 41, 42, 50, 53, 54, > 47, 50, 56, 48, 45, 49, 50, 56, 41, 41, 125, 10, 45, 101, 108, 105, > 102, 32, 123, 64, 123, 33, 44, 121, 125, 62, 61, 49, 55, 53, 92, 32, > 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, 60, 61, 49, 57, 50, 125, > 10, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 123, 109, 97, 120, > 40, 48, 44, 109, 105, 110, 40, 49, 48, 44, 40, 64, 123, 33, 44, 120, > 125, 45, 36, 115, 120, 41, 42, 49, 48, 47, 50, 56, 48, 41, 41, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 121, 125, 62, 61, > 50, 50, 53, 92, 32, 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, 60, > 61, 50, 52, 50, 125, 10, 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, > 123, 109, 97, 120, 40, 48, 44, 109, 105, 110, 40, 50, 48, 48, 48, 44, > 40, 64, 123, 33, 44, 120, 125, 45, 36, 115, 120, 41, 42, 50, 48, 48, > 48, 47, 50, 56, 48, 41, 41, 125, 10, 45, 101, 108, 105, 102, 32, 123, > 64, 123, 33, 44, 121, 125, 62, 61, 50, 55, 53, 92, 32, 38, 38, 92, > 32, 64, 123, 33, 44, 121, 125, 60, 61, 50, 57, 50, 125, 10, 99, 108, > 117, 115, 116, 101, 114, 115, 61, 123, 109, 97, 120, 40, 50, 44, 109, 105, > 110, 40, 50, 53, 54, 44, 40, 64, 123, 33, 44, 120, 125, 45, 36, 115, > 120, 41, 42, 50, 53, 54, 47, 50, 56, 48, 41, 41, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 64, 123, 33, 44, 98, 125, 38, 50, 92, 32, 124, 124, 92, 32, 64, > 123, 33, 44, 83, 80, 65, 67, 69, 125, 125, 32, 99, 108, 117, 115, 116, > 101, 114, 115, 61, 54, 52, 32, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 61, 48, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 32, > 99, 111, 110, 116, 114, 97, 115, 116, 61, 49, 32, 98, 114, 105, 103, 104, > 116, 110, 101, 115, 115, 61, 48, 32, 103, 97, 109, 109, 97, 61, 49, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, > 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, > 119, 32, 48, 32, 45, 114, 109, 32, 45, 118, 32, 43, 10, 95, 120, 95, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 58, 10, 118, 97, 108, 61, > 123, 109, 97, 120, 40, 48, 44, 109, 105, 110, 40, 49, 48, 48, 44, 36, > 49, 41, 41, 125, 10, 50, 56, 48, 44, 50, 44, 49, 44, 51, 44, 50, > 53, 53, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 48, > 44, 36, 118, 97, 108, 37, 44, 48, 44, 49, 44, 48, 44, 50, 53, 53, > 44, 48, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 49, > 44, 36, 118, 97, 108, 37, 44, 49, 44, 49, 44, 50, 52, 48, 44, 50, > 53, 53, 44, 54, 50, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 54, 44, 49, 44, 51, 44, 51, 10, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 123, 114, 111, 117, 110, 100, 40, 36, 118, 97, 108, 41, > 125, 37, 44, 48, 44, 48, 44, 49, 52, 44, 49, 44, 49, 32, 45, 45, > 42, 91, 45, 49, 93, 32, 45, 50, 53, 53, 32, 45, 43, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 106, 91, 45, 51, > 93, 32, 91, 45, 49, 93, 44, 123, 40, 50, 56, 48, 45, 119, 41, 47, > 50, 125, 44, 123, 40, 49, 54, 45, 104, 41, 47, 50, 125, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 114, 91, 45, 49, 93, 32, 123, 119, 43, 50, 125, > 44, 123, 104, 43, 50, 125, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, > 104, 111, 117, 103, 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, > 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 104, 111, 117, 103, 104, 32, > 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 100, 101, 109, 111, 46, 10, > 120, 95, 104, 111, 117, 103, 104, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 72, 111, 117, 103, 104, 45, > 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 32, 77, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 115, 32, > 111, 110, 32, 116, 104, 101, 32, 118, 111, 116, 101, 32, 105, 109, 97, 103, > 101, 32, 116, 111, 32, 100, 114, 97, 119, 32, 99, 111, 114, 114, 101, 115, > 112, 111, 110, 100, 105, 110, 103, 32, 108, 105, 110, 101, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, > 110, 115, 32, 111, 110, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, > 116, 111, 32, 118, 111, 116, 101, 32, 102, 111, 114, 32, 97, 108, 108, 32, > 108, 105, 110, 101, 115, 32, 99, 114, 111, 115, 115, 105, 110, 103, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 116, 104, 101, 32, 99, 108, 105, 99, 107, > 101, 100, 32, 112, 111, 105, 110, 116, 46, 92, 110, 10, 45, 45, 45, 45, > 32, 75, 101, 121, 32, 39, 83, 80, 65, 67, 69, 39, 32, 116, 111, 32, > 114, 101, 115, 101, 116, 32, 116, 104, 101, 32, 104, 111, 117, 103, 104, 32, > 119, 105, 110, 100, 111, 119, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, > 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, > 33, 64, 35, 125, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, > 100, 32, 52, 48, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 32, > 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 91, 45, 49, 93, 32, 64, > 123, 45, 102, 105, 116, 115, 99, 114, 101, 101, 110, 92, 32, 123, 119, 125, > 44, 123, 104, 125, 125, 44, 49, 44, 49, 48, 48, 37, 44, 51, 10, 114, > 104, 111, 109, 97, 120, 61, 123, 115, 113, 114, 116, 40, 119, 94, 50, 43, > 104, 94, 50, 41, 47, 50, 125, 10, 45, 45, 98, 91, 45, 49, 93, 32, > 49, 46, 53, 32, 45, 104, 111, 117, 103, 104, 91, 45, 49, 93, 32, 53, > 49, 50, 44, 52, 48, 48, 32, 45, 98, 91, 45, 49, 93, 32, 48, 46, > 53, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 108, 111, 103, 91, > 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 10, 45, 119, 91, 45, 50, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 73, 109, 97, 103, 101, > 34, 32, 45, 119, 49, 91, 45, 49, 93, 32, 45, 49, 44, 45, 49, 44, > 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 72, 111, 117, > 103, 104, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 34, 10, 45, 105, > 102, 32, 123, 33, 110, 97, 114, 103, 40, 36, 102, 105, 114, 115, 116, 95, > 116, 105, 109, 101, 41, 125, 32, 45, 45, 108, 91, 48, 93, 32, 45, 114, > 50, 100, 121, 32, 49, 50, 56, 32, 45, 102, 114, 97, 109, 101, 32, 49, > 44, 49, 44, 48, 10, 45, 97, 108, 101, 114, 116, 32, 34, 91, 71, 92, > 52, 55, 77, 73, 67, 32, 72, 111, 117, 103, 104, 32, 84, 114, 97, 110, > 115, 102, 111, 114, 109, 93, 34, 44, 92, 10, 34, 84, 104, 101, 32, 71, > 92, 52, 55, 77, 73, 67, 32, 72, 111, 117, 103, 104, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 32, 100, 101, 109, 111, 32, 105, 108, 108, 117, > 115, 116, 114, 97, 116, 101, 115, 32, 116, 104, 101, 32, 97, 112, 112, 108, > 105, 99, 97, 116, 105, 111, 110, 92, 110, 34, 92, 10, 34, 111, 102, 32, > 116, 104, 101, 32, 72, 111, 117, 103, 104, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 32, 116, 111, 32, 100, 101, 116, 101, 99, 116, 32, 108, 105, > 110, 101, 115, 32, 105, 110, 32, 97, 110, 32, 105, 109, 97, 103, 101, 46, > 32, 85, 115, 101, 32, 121, 111, 117, 114, 92, 110, 34, 92, 10, 34, 109, > 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 115, 32, 116, 111, 32, > 101, 120, 112, 108, 111, 114, 101, 32, 116, 104, 101, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 32, 105, 109, 97, 103, 101, 32, 97, 110, 100, 32, > 115, 101, 101, 32, 104, 111, 119, 92, 110, 34, 92, 10, 34, 108, 105, 110, > 101, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, 115, 32, 97, 114, 101, > 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 101, 100, 32, 98, 121, 32, > 112, 111, 105, 110, 116, 115, 32, 105, 110, 32, 116, 104, 101, 32, 116, 114, > 97, 110, 115, 102, 111, 114, 109, 46, 34, 44, 92, 10, 34, 83, 116, 97, > 114, 116, 32, 100, 101, 109, 111, 34, 10, 45, 114, 109, 32, 45, 101, 110, > 100, 108, 32, 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 61, 48, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 10, 45, 119, 97, 105, 116, > 10, 45, 105, 102, 32, 64, 123, 33, 44, 98, 125, 10, 120, 48, 61, 123, > 64, 123, 33, 44, 120, 125, 45, 64, 123, 33, 44, 119, 125, 47, 50, 125, > 10, 121, 48, 61, 123, 64, 123, 33, 44, 121, 125, 45, 64, 123, 33, 44, > 104, 125, 47, 50, 125, 10, 114, 104, 111, 48, 61, 123, 115, 113, 114, 116, > 40, 40, 36, 120, 48, 41, 94, 50, 43, 40, 36, 121, 48, 41, 94, 50, > 41, 125, 10, 116, 104, 101, 116, 97, 48, 61, 123, 97, 116, 97, 110, 50, > 40, 36, 121, 48, 44, 36, 120, 48, 41, 125, 10, 40, 48, 44, 123, 50, > 42, 112, 105, 125, 41, 32, 40, 36, 116, 104, 101, 116, 97, 48, 44, 123, > 36, 116, 104, 101, 116, 97, 48, 45, 50, 42, 112, 105, 125, 41, 10, 45, > 114, 91, 45, 50, 44, 45, 49, 93, 32, 64, 123, 45, 51, 44, 119, 125, > 44, 49, 44, 49, 44, 49, 44, 51, 10, 45, 99, 111, 115, 91, 45, 49, > 93, 32, 45, 42, 91, 45, 49, 93, 32, 36, 114, 104, 111, 48, 32, 45, > 45, 108, 116, 91, 45, 49, 93, 32, 48, 32, 45, 97, 98, 115, 91, 45, > 50, 93, 10, 45, 42, 91, 45, 49, 93, 32, 123, 112, 105, 125, 32, 45, > 43, 91, 45, 51, 44, 45, 49, 93, 32, 45, 37, 91, 45, 50, 93, 32, > 123, 50, 42, 112, 105, 125, 10, 45, 42, 91, 45, 50, 93, 32, 123, 48, > 46, 53, 42, 64, 123, 45, 51, 44, 119, 125, 47, 112, 105, 125, 32, 45, > 42, 91, 45, 49, 93, 32, 123, 64, 123, 45, 51, 44, 104, 125, 47, 36, > 114, 104, 111, 109, 97, 120, 125, 10, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 32, > 45, 112, 111, 105, 110, 116, 91, 45, 50, 93, 32, 64, 123, 45, 49, 44, > 40, 36, 62, 44, 48, 41, 125, 44, 64, 123, 45, 49, 44, 40, 36, 62, > 44, 49, 41, 125, 44, 48, 44, 48, 46, 51, 44, 50, 53, 53, 32, 45, > 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 119, 49, > 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 49, > 44, 120, 125, 62, 61, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 49, > 44, 98, 125, 125, 10, 116, 104, 101, 116, 97, 61, 123, 64, 123, 33, 49, > 44, 120, 125, 42, 50, 42, 112, 105, 47, 64, 123, 33, 49, 44, 119, 125, > 125, 10, 114, 104, 111, 61, 123, 64, 123, 33, 49, 44, 121, 125, 42, 36, > 114, 104, 111, 109, 97, 120, 47, 64, 123, 33, 49, 44, 104, 125, 125, 10, > 120, 61, 123, 64, 123, 45, 50, 44, 119, 125, 47, 50, 43, 36, 114, 104, > 111, 42, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, 121, > 61, 123, 64, 123, 45, 50, 44, 104, 125, 47, 50, 43, 36, 114, 104, 111, > 42, 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, 120, 48, > 61, 123, 36, 120, 43, 49, 48, 48, 48, 42, 115, 105, 110, 40, 36, 116, > 104, 101, 116, 97, 41, 125, 10, 121, 48, 61, 123, 36, 121, 45, 49, 48, > 48, 48, 42, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, > 120, 49, 61, 123, 36, 120, 45, 49, 48, 48, 48, 42, 115, 105, 110, 40, > 36, 116, 104, 101, 116, 97, 41, 125, 10, 121, 49, 61, 123, 36, 121, 43, > 49, 48, 48, 48, 42, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, > 125, 10, 91, 45, 50, 93, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, > 32, 36, 120, 48, 44, 36, 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, > 44, 49, 44, 48, 120, 48, 70, 48, 70, 48, 70, 48, 70, 44, 50, 53, > 53, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 123, 36, 120, 48, > 43, 49, 125, 44, 36, 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, > 49, 44, 48, 120, 48, 70, 48, 70, 48, 70, 48, 70, 44, 50, 53, 53, > 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 36, 120, 48, 44, 123, > 36, 121, 48, 43, 49, 125, 44, 36, 120, 49, 44, 36, 121, 49, 44, 49, > 44, 48, 120, 48, 70, 48, 70, 48, 70, 48, 70, 44, 50, 53, 53, 10, > 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 36, 120, 48, 44, 36, 121, > 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, 49, 44, 48, 120, 70, 48, > 70, 48, 70, 48, 70, 48, 44, 48, 10, 45, 108, 105, 110, 101, 91, 45, > 49, 93, 32, 123, 36, 120, 48, 43, 49, 125, 44, 36, 121, 48, 44, 36, > 120, 49, 44, 36, 121, 49, 44, 49, 44, 48, 120, 70, 48, 70, 48, 70, > 48, 70, 48, 44, 48, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 36, 120, 48, 44, 123, 36, 121, 48, 43, 49, 125, 44, 36, 120, 49, 44, > 36, 121, 49, 44, 49, 44, 48, 120, 70, 48, 70, 48, 70, 48, 70, 48, > 44, 48, 10, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 83, 80, 65, > 67, 69, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 49, 44, 83, 80, > 65, 67, 69, 125, 125, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, > 98, 91, 45, 49, 93, 32, 49, 46, 53, 32, 45, 104, 111, 117, 103, 104, > 91, 45, 49, 93, 32, 53, 49, 50, 44, 52, 48, 48, 32, 45, 98, 91, > 45, 49, 93, 32, 48, 46, 53, 32, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 108, 111, 103, 91, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 10, 45, 119, 49, 91, 45, 49, 93, 32, 45, > 49, 44, 45, 49, 44, 48, 44, 34, 72, 111, 117, 103, 104, 32, 84, 114, > 97, 110, 115, 102, 111, 114, 109, 34, 10, 45, 101, 108, 105, 102, 32, 64, > 123, 33, 44, 114, 125, 32, 45, 119, 91, 45, 50, 93, 10, 45, 101, 108, > 105, 102, 32, 64, 123, 33, 49, 44, 114, 125, 32, 45, 119, 49, 91, 45, > 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, > 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 64, 123, 33, 49, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, > 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 49, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 49, 44, 81, 125, 125, 10, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 101, 110, 100, 108, 10, 45, 105, 102, 32, 123, 33, 64, > 33, 34, 32, 124, 124, 32, 34, 33, 64, 123, 33, 49, 125, 125, 32, 45, > 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 48, > 32, 48, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 106, 97, 119, 98, 114, > 101, 97, 107, 101, 114, 32, 58, 32, 48, 60, 95, 119, 105, 100, 116, 104, > 60, 50, 48, 44, 48, 60, 95, 104, 101, 105, 103, 104, 116, 60, 50, 48, > 44, 48, 60, 95, 98, 97, 108, 108, 115, 60, 61, 56, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, > 32, 74, 97, 119, 98, 114, 101, 97, 107, 101, 114, 32, 103, 97, 109, 101, > 46, 10, 120, 95, 106, 97, 119, 98, 114, 101, 97, 107, 101, 114, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 50, 125, > 62, 48, 32, 38, 38, 32, 36, 49, 60, 50, 48, 32, 38, 38, 32, 36, > 123, 50, 61, 49, 51, 125, 62, 48, 32, 38, 38, 32, 36, 50, 60, 50, > 48, 32, 38, 38, 32, 36, 123, 51, 61, 53, 125, 62, 48, 32, 38, 38, > 32, 36, 51, 60, 61, 56, 34, 10, 45, 101, 91, 93, 32, 34, 92, 110, > 10, 45, 45, 45, 45, 45, 45, 32, 74, 97, 119, 98, 114, 101, 97, 107, > 101, 114, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, > 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 84, 104, > 101, 32, 103, 111, 97, 108, 32, 111, 102, 32, 116, 104, 101, 32, 103, 97, > 109, 101, 32, 105, 115, 32, 116, 111, 32, 114, 101, 109, 111, 118, 101, 32, > 116, 104, 101, 32, 109, 97, 120, 105, 109, 117, 109, 32, 110, 117, 109, 98, > 101, 114, 32, 111, 102, 92, 110, 10, 45, 45, 45, 45, 32, 98, 97, 108, > 108, 115, 32, 111, 110, 32, 116, 104, 101, 32, 98, 111, 97, 114, 100, 44, > 32, 115, 105, 109, 112, 108, 121, 32, 98, 121, 32, 99, 108, 105, 99, 107, > 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 109, 46, 32, 66, 117, 116, > 32, 97, 92, 110, 10, 45, 45, 45, 45, 32, 99, 111, 108, 111, 114, 101, > 100, 32, 98, 97, 108, 108, 32, 99, 97, 110, 32, 100, 105, 115, 97, 112, > 112, 101, 97, 114, 32, 111, 110, 108, 121, 32, 105, 102, 32, 105, 116, 32, > 105, 115, 32, 103, 114, 111, 117, 112, 101, 100, 32, 119, 105, 116, 104, 32, > 97, 116, 92, 110, 10, 45, 45, 45, 45, 32, 108, 101, 97, 115, 116, 32, > 111, 110, 101, 32, 98, 97, 108, 108, 32, 111, 102, 32, 116, 104, 101, 32, > 115, 97, 109, 101, 32, 99, 111, 108, 111, 114, 46, 32, 84, 104, 101, 32, > 115, 99, 111, 114, 101, 32, 105, 115, 32, 104, 105, 103, 104, 101, 114, 32, > 105, 102, 92, 110, 10, 45, 45, 45, 45, 32, 121, 111, 117, 32, 100, 101, > 115, 116, 114, 111, 121, 32, 108, 97, 114, 103, 101, 114, 32, 115, 101, 116, > 115, 32, 111, 102, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, > 111, 108, 111, 114, 101, 100, 32, 98, 97, 108, 108, 115, 46, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 76, 101, 102, 116, > 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 47, 100, 101, 115, 116, 114, 111, 121, 32, > 98, 97, 108, 108, 115, 32, 111, 110, 32, 98, 111, 97, 114, 100, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 66, 65, 67, 75, > 83, 80, 65, 67, 69, 39, 32, 111, 114, 32, 39, 83, 80, 65, 67, 69, > 39, 32, 116, 111, 32, 117, 110, 100, 111, 32, 116, 104, 101, 32, 108, 97, > 115, 116, 32, 109, 111, 118, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 32, 39, 83, 39, 32, 116, 111, 32, 115, 97, 118, 101, 32, > 115, 110, 97, 112, 115, 104, 111, 116, 32, 111, 102, 32, 116, 104, 101, 32, > 99, 117, 114, 114, 101, 110, 116, 32, 118, 105, 101, 119, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, > 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, > 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 45, 105, > 91, 98, 111, 97, 114, 100, 93, 32, 36, 49, 44, 36, 50, 32, 45, 114, > 97, 110, 100, 91, 98, 111, 97, 114, 100, 93, 32, 49, 44, 36, 51, 32, > 45, 114, 111, 117, 110, 100, 91, 98, 111, 97, 114, 100, 93, 32, 49, 10, > 45, 105, 91, 117, 110, 100, 111, 93, 32, 91, 45, 49, 93, 10, 45, 105, > 91, 98, 97, 108, 108, 115, 93, 32, 51, 50, 44, 51, 50, 44, 49, 44, > 52, 32, 45, 95, 120, 95, 106, 97, 119, 98, 114, 101, 97, 107, 101, 114, > 95, 98, 97, 108, 108, 91, 45, 49, 93, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 45, 49, 93, 32, 48, 32, 45, 101, 120, 112, 97, 110, > 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, 44, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 49, 46, 53, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 123, 64, 123, 98, > 111, 97, 114, 100, 44, 119, 125, 42, 119, 125, 44, 123, 64, 123, 98, 111, > 97, 114, 100, 44, 104, 125, 42, 104, 125, 44, 49, 44, 49, 44, 48, 44, > 50, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 105, 91, > 98, 97, 99, 107, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, > 51, 32, 45, 108, 91, 45, 49, 93, 10, 45, 114, 97, 110, 100, 32, 48, > 44, 50, 53, 53, 32, 45, 98, 108, 117, 114, 95, 120, 121, 32, 54, 44, > 50, 48, 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, 49, 48, 48, > 44, 48, 44, 50, 53, 53, 32, 45, 98, 108, 117, 114, 95, 120, 121, 32, > 50, 44, 52, 10, 45, 115, 104, 32, 48, 44, 48, 32, 45, 115, 104, 91, > 45, 50, 93, 32, 49, 44, 49, 32, 45, 115, 104, 91, 45, 51, 93, 32, > 50, 44, 50, 32, 45, 47, 91, 45, 51, 93, 32, 52, 32, 45, 47, 91, > 45, 50, 93, 32, 56, 32, 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, > 114, 109, 91, 45, 51, 45, 45, 49, 93, 10, 45, 101, 110, 100, 108, 10, > 45, 105, 91, 118, 105, 115, 117, 93, 32, 91, 98, 97, 99, 107, 93, 10, > 115, 99, 111, 114, 101, 61, 48, 10, 117, 110, 100, 111, 115, 99, 111, 114, > 101, 61, 48, 10, 114, 101, 110, 100, 101, 114, 95, 98, 111, 97, 114, 100, > 61, 49, 10, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, 121, 61, 48, > 10, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, 61, 48, 10, 45, 100, > 111, 10, 45, 105, 102, 32, 36, 114, 101, 110, 100, 101, 114, 95, 98, 111, > 97, 114, 100, 10, 45, 45, 97, 98, 115, 91, 98, 111, 97, 114, 100, 93, > 32, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 51, 54, 48, 47, 36, 51, 125, 32, 45, 45, 103, 101, 91, 98, > 111, 97, 114, 100, 93, 32, 48, 32, 45, 42, 91, 45, 49, 93, 32, 48, > 46, 57, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 91, 98, 97, > 108, 108, 115, 93, 32, 91, 98, 97, 108, 108, 115, 93, 32, 45, 97, 91, > 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, > 98, 91, 45, 49, 93, 10, 45, 45, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 43, 32, 45, > 103, 116, 91, 45, 49, 93, 32, 48, 32, 45, 100, 105, 108, 97, 116, 101, > 91, 45, 49, 93, 32, 51, 10, 45, 106, 91, 118, 105, 115, 117, 93, 32, > 91, 98, 97, 99, 107, 93, 32, 45, 106, 91, 118, 105, 115, 117, 93, 32, > 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 33, 36, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, > 121, 125, 32, 45, 119, 91, 118, 105, 115, 117, 93, 32, 64, 123, 98, 97, > 99, 107, 44, 119, 125, 44, 64, 123, 98, 97, 99, 107, 44, 104, 125, 44, > 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 74, 97, 119, > 98, 114, 101, 97, 107, 101, 114, 32, 40, 115, 99, 111, 114, 101, 32, 58, > 32, 34, 36, 115, 99, 111, 114, 101, 34, 41, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 114, 101, 110, 100, 101, 114, 95, 98, 111, 97, 114, 100, 61, > 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 115, 104, > 97, 112, 101, 115, 99, 111, 114, 101, 121, 10, 45, 45, 116, 91, 118, 105, > 115, 117, 93, 32, 34, 43, 34, 36, 115, 104, 97, 112, 101, 115, 99, 111, > 114, 101, 44, 64, 123, 33, 44, 120, 125, 44, 123, 64, 123, 33, 44, 121, > 125, 45, 54, 52, 43, 36, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, > 121, 125, 44, 51, 50, 44, 123, 40, 36, 115, 104, 97, 112, 101, 115, 99, > 111, 114, 101, 121, 45, 49, 41, 47, 51, 49, 125, 44, 50, 53, 53, 10, > 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, 121, 61, 123, 109, 97, 120, > 40, 48, 44, 36, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, 121, 45, > 49, 41, 125, 10, 45, 119, 91, 45, 49, 93, 32, 64, 123, 98, 97, 99, > 107, 44, 119, 125, 44, 64, 123, 98, 97, 99, 107, 44, 104, 125, 44, 48, > 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 74, 97, 119, 98, > 114, 101, 97, 107, 101, 114, 32, 40, 115, 99, 111, 114, 101, 32, 58, 32, > 34, 36, 115, 99, 111, 114, 101, 34, 41, 34, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 53, 10, 45, 101, 108, 115, > 101, 32, 45, 119, 97, 105, 116, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 102, 91, 98, 111, 97, 114, 100, 93, 32, 34, 105, 102, 40, 105, 44, > 106, 40, 45, 49, 41, 61, 61, 105, 32, 124, 124, 32, 106, 40, 49, 41, > 61, 61, 105, 32, 124, 124, 32, 106, 40, 48, 44, 49, 41, 61, 61, 105, > 32, 124, 124, 32, 106, 40, 48, 44, 45, 49, 41, 61, 61, 105, 44, 48, > 41, 34, 10, 45, 105, 102, 32, 123, 33, 64, 123, 45, 49, 44, 43, 125, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 98, 114, 101, 97, 107, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 105, 102, 32, 64, 123, 33, 44, 114, 125, 32, 114, 101, 110, 100, 101, > 114, 95, 98, 111, 97, 114, 100, 61, 49, 10, 45, 101, 108, 105, 102, 32, > 64, 123, 33, 44, 83, 125, 32, 45, 111, 91, 118, 105, 115, 117, 93, 32, > 103, 109, 105, 99, 95, 106, 97, 119, 98, 114, 101, 97, 107, 101, 114, 46, > 112, 110, 103, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 66, > 65, 67, 75, 83, 80, 65, 67, 69, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 83, 80, 65, 67, 69, 125, 125, 10, 45, 97, 98, 115, 91, > 117, 110, 100, 111, 93, 32, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, > 91, 117, 110, 100, 111, 93, 10, 115, 99, 111, 114, 101, 61, 36, 117, 110, > 100, 111, 115, 99, 111, 114, 101, 10, 114, 101, 110, 100, 101, 114, 95, 98, > 111, 97, 114, 100, 61, 49, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 33, 44, 120, 125, 34, 62, 61, 48, 32, 38, 38, 32, 34, 64, 123, 33, > 44, 98, 125, 125, 10, 45, 119, 97, 105, 116, 32, 45, 49, 10, 120, 61, > 123, 34, 105, 110, 116, 40, 34, 64, 123, 33, 44, 120, 125, 34, 42, 34, > 64, 123, 98, 111, 97, 114, 100, 44, 119, 125, 34, 47, 34, 64, 123, 33, > 44, 119, 125, 34, 41, 34, 125, 10, 121, 61, 123, 34, 105, 110, 116, 40, > 34, 64, 123, 33, 44, 121, 125, 34, 42, 34, 64, 123, 98, 111, 97, 114, > 100, 44, 104, 125, 34, 47, 34, 64, 123, 33, 44, 104, 125, 34, 41, 34, > 125, 10, 45, 105, 102, 32, 123, 64, 123, 98, 111, 97, 114, 100, 44, 40, > 36, 120, 44, 36, 121, 41, 125, 62, 48, 125, 10, 45, 97, 98, 115, 91, > 98, 111, 97, 114, 100, 93, 32, 45, 102, 108, 111, 111, 100, 91, 98, 111, > 97, 114, 100, 93, 32, 36, 120, 44, 36, 121, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 45, 64, 123, 98, 111, 97, 114, 100, 44, 40, 36, 120, 44, > 36, 121, 41, 125, 10, 45, 45, 103, 101, 91, 98, 111, 97, 114, 100, 93, > 32, 48, 32, 45, 45, 91, 45, 49, 93, 32, 49, 10, 115, 104, 97, 112, > 101, 115, 99, 111, 114, 101, 61, 123, 40, 64, 123, 45, 49, 44, 43, 125, > 43, 49, 41, 94, 50, 125, 32, 115, 104, 97, 112, 101, 115, 99, 111, 114, > 101, 121, 61, 123, 105, 102, 40, 36, 115, 104, 97, 112, 101, 115, 99, 111, > 114, 101, 44, 51, 50, 44, 48, 41, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 108, 105, 102, 32, 64, 123, 98, 111, 97, 114, 100, 44, > 40, 36, 120, 44, 36, 121, 41, 125, 10, 45, 45, 102, 108, 111, 111, 100, > 91, 98, 111, 97, 114, 100, 93, 32, 36, 120, 44, 36, 121, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 45, 49, 32, 45, 61, 61, 91, 45, 49, 93, > 32, 45, 49, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 43, 125, > 62, 49, 125, 10, 45, 106, 91, 117, 110, 100, 111, 93, 32, 91, 98, 111, > 97, 114, 100, 93, 10, 117, 110, 100, 111, 115, 99, 111, 114, 101, 61, 36, > 115, 99, 111, 114, 101, 10, 45, 102, 108, 111, 111, 100, 91, 98, 111, 97, > 114, 100, 93, 32, 36, 120, 44, 36, 121, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 98, 111, > 97, 114, 100, 44, 119, 125, 10, 45, 45, 99, 111, 108, 117, 109, 110, 115, > 91, 98, 111, 97, 114, 100, 93, 32, 36, 62, 32, 45, 109, 105, 114, 114, > 111, 114, 91, 45, 49, 93, 32, 121, 10, 104, 61, 64, 123, 98, 111, 97, > 114, 100, 44, 104, 125, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 32, > 45, 44, 48, 32, 45, 97, 32, 121, 32, 45, 105, 102, 32, 64, 35, 32, > 45, 114, 32, 49, 44, 36, 104, 44, 49, 44, 49, 44, 48, 32, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 108, 115, 101, 32, 45, 105, > 32, 49, 44, 36, 104, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, > 100, 108, 10, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, 91, 45, 49, > 93, 44, 36, 62, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, > 110, 101, 10, 45, 114, 111, 119, 115, 91, 98, 111, 97, 114, 100, 93, 32, > 45, 49, 44, 49, 48, 48, 37, 32, 45, 102, 91, 98, 111, 97, 114, 100, > 93, 32, 34, 105, 102, 40, 121, 61, 61, 48, 44, 105, 102, 40, 105, 40, > 120, 44, 104, 45, 49, 41, 44, 120, 44, 119, 41, 44, 105, 41, 34, 32, > 45, 115, 111, 114, 116, 91, 98, 111, 97, 114, 100, 93, 32, 43, 44, 120, > 32, 45, 114, 111, 119, 115, 91, 98, 111, 97, 114, 100, 93, 32, 49, 44, > 49, 48, 48, 37, 10, 115, 99, 111, 114, 101, 61, 123, 36, 115, 99, 111, > 114, 101, 43, 105, 110, 116, 40, 40, 64, 123, 45, 49, 44, 43, 125, 45, > 49, 41, 94, 50, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 97, 98, 115, > 91, 98, 111, 97, 114, 100, 93, 10, 45, 101, 110, 100, 105, 102, 10, 114, > 101, 110, 100, 101, 114, 95, 98, 111, 97, 114, 100, 61, 49, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 34, 32, 38, 38, > 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 125, 10, 45, 105, 102, > 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 125, 10, 45, 119, 91, 93, 32, 64, 123, 118, 105, 115, 117, > 44, 119, 125, 44, 64, 123, 118, 105, 115, 117, 44, 104, 125, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 74, 97, 119, 98, 114, > 101, 97, 107, 101, 114, 32, 40, 102, 105, 110, 97, 108, 32, 115, 99, 111, > 114, 101, 32, 58, 32, 34, 36, 115, 99, 111, 114, 101, 34, 41, 34, 10, > 45, 105, 91, 103, 97, 109, 101, 111, 118, 101, 114, 93, 32, 50, 54, 48, > 44, 56, 53, 32, 45, 116, 91, 45, 49, 93, 32, 34, 71, 97, 109, 101, > 32, 79, 118, 101, 114, 33, 34, 44, 51, 44, 48, 44, 53, 51, 44, 49, > 44, 49, 32, 45, 116, 91, 45, 49, 93, 32, 34, 83, 99, 111, 114, 101, > 32, 58, 32, 34, 36, 115, 99, 111, 114, 101, 44, 50, 51, 44, 53, 51, > 44, 51, 50, 44, 49, 44, 49, 10, 45, 45, 100, 105, 108, 97, 116, 101, > 91, 45, 49, 93, 32, 53, 32, 45, 110, 109, 91, 45, 49, 93, 32, 34, > 109, 103, 97, 109, 101, 111, 118, 101, 114, 34, 32, 45, 42, 91, 45, 50, > 93, 32, 50, 53, 53, 32, 45, 114, 91, 45, 50, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 50, 53, 10, 45, 45, 114, 91, 103, 97, 109, 101, 111, 118, > 101, 114, 44, 109, 103, 97, 109, 101, 111, 118, 101, 114, 93, 32, 123, 52, > 48, 48, 45, 49, 50, 42, 40, 36, 62, 43, 49, 41, 125, 37, 44, 123, > 52, 48, 48, 45, 49, 50, 42, 40, 36, 62, 43, 49, 41, 125, 37, 10, > 45, 45, 106, 91, 118, 105, 115, 117, 93, 32, 91, 45, 50, 93, 44, 123, > 40, 64, 123, 118, 105, 115, 117, 44, 119, 125, 45, 119, 41, 47, 50, 125, > 44, 123, 40, 64, 123, 118, 105, 115, 117, 44, 104, 125, 45, 104, 41, 47, > 50, 125, 44, 48, 44, 48, 44, 123, 36, 62, 47, 50, 53, 125, 44, 91, > 45, 49, 93, 10, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, > 51, 45, 45, 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 53, 10, 45, > 100, 111, 110, 101, 10, 45, 100, 111, 10, 45, 119, 97, 105, 116, 32, 45, > 105, 102, 32, 64, 123, 33, 44, 114, 125, 32, 45, 119, 91, 93, 32, 64, > 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, 32, 45, 119, 97, > 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, > 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, > 33, 44, 81, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 98, 125, > 125, 10, 45, 114, 109, 91, 103, 97, 109, 101, 111, 118, 101, 114, 44, 109, > 103, 97, 109, 101, 111, 118, 101, 114, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 98, 111, 97, 114, 100, 44, 117, 110, 100, 111, 44, > 98, 97, 108, 108, 115, 44, 98, 97, 99, 107, 44, 118, 105, 115, 117, 93, > 10, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 95, 120, 95, 106, 97, > 119, 98, 114, 101, 97, 107, 101, 114, 95, 98, 97, 108, 108, 32, 58, 10, > 109, 119, 104, 61, 123, 109, 105, 110, 40, 119, 44, 104, 41, 125, 10, 45, > 115, 104, 32, 51, 44, 51, 32, 45, 102, 91, 45, 49, 93, 32, 48, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 108, 105, 112, 115, 101, > 32, 123, 48, 46, 53, 42, 36, 109, 119, 104, 125, 44, 123, 48, 46, 53, > 42, 36, 109, 119, 104, 125, 44, 123, 48, 46, 53, 42, 36, 109, 119, 104, > 45, 52, 125, 44, 123, 48, 46, 53, 42, 36, 109, 119, 104, 45, 52, 125, > 44, 48, 44, 49, 44, 50, 52, 48, 44, 50, 52, 48, 44, 50, 52, 48, > 44, 49, 10, 45, 115, 104, 32, 48, 44, 50, 32, 45, 42, 91, 45, 49, > 93, 32, 39, 40, 36, 109, 119, 104, 43, 121, 45, 120, 41, 47, 40, 50, > 42, 119, 41, 39, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, > 108, 105, 112, 115, 101, 32, 123, 36, 109, 119, 104, 42, 48, 46, 55, 125, > 44, 123, 36, 109, 119, 104, 42, 48, 46, 51, 125, 44, 123, 109, 105, 110, > 40, 51, 48, 44, 36, 109, 119, 104, 42, 36, 109, 119, 104, 47, 53, 49, > 50, 41, 125, 44, 123, 109, 105, 110, 40, 51, 48, 44, 36, 109, 119, 104, > 42, 36, 109, 119, 104, 47, 53, 49, 50, 41, 125, 44, 48, 44, 123, 109, > 105, 110, 40, 36, 109, 119, 104, 47, 54, 52, 44, 49, 41, 125, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 49, 10, 45, 115, 104, > 32, 48, 44, 50, 32, 45, 98, 91, 45, 49, 93, 32, 123, 48, 46, 48, > 50, 42, 36, 109, 119, 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 32, 51, 44, 51, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, > 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 32, 48, 44, > 50, 32, 45, 43, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 38, 38, > 40, 33, 106, 40, 45, 49, 41, 124, 124, 33, 106, 40, 49, 41, 124, 124, > 33, 106, 40, 48, 44, 45, 49, 41, 124, 124, 33, 106, 40, 48, 44, 49, > 41, 41, 44, 50, 52, 48, 47, 54, 44, 48, 41, 39, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 108, 105, > 102, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, > 99, 104, 32, 116, 104, 101, 32, 103, 97, 109, 101, 32, 111, 102, 32, 108, > 105, 102, 101, 46, 10, 120, 95, 108, 105, 102, 101, 32, 58, 10, 45, 101, > 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 84, 104, > 101, 32, 103, 97, 109, 101, 32, 111, 102, 32, 108, 105, 102, 101, 32, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 32, 84, 104, 101, 32, 103, 111, 97, 108, 32, 105, 115, 32, > 116, 111, 32, 99, 114, 101, 97, 116, 101, 32, 116, 104, 101, 32, 98, 105, > 103, 103, 101, 115, 116, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, 98, > 105, 111, 108, 111, 103, 105, 99, 97, 108, 92, 110, 10, 45, 45, 45, 45, > 32, 115, 121, 115, 116, 101, 109, 46, 32, 89, 111, 117, 32, 115, 116, 97, > 114, 116, 32, 119, 105, 116, 104, 32, 97, 32, 115, 116, 111, 99, 107, 32, > 111, 102, 32, 99, 101, 108, 108, 115, 32, 119, 104, 105, 99, 104, 32, 121, > 111, 117, 32, 99, 97, 110, 92, 110, 10, 45, 45, 45, 45, 32, 115, 112, > 114, 101, 97, 100, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 98, 111, > 97, 114, 100, 46, 32, 70, 111, 114, 32, 101, 97, 99, 104, 32, 110, 101, > 119, 32, 99, 101, 108, 108, 115, 32, 99, 114, 101, 97, 116, 101, 100, 92, > 110, 10, 45, 45, 45, 45, 32, 115, 105, 109, 117, 108, 116, 97, 110, 101, > 111, 117, 115, 108, 121, 32, 97, 110, 100, 32, 115, 112, 111, 110, 116, 97, > 110, 101, 111, 117, 115, 108, 121, 32, 98, 121, 32, 121, 111, 117, 114, 32, > 115, 121, 115, 116, 101, 109, 44, 32, 121, 111, 117, 92, 110, 10, 45, 45, > 45, 45, 32, 103, 97, 105, 110, 32, 109, 111, 114, 101, 32, 110, 101, 119, > 32, 99, 101, 108, 108, 115, 32, 116, 111, 32, 115, 99, 97, 116, 116, 101, > 114, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 32, 76, 101, 102, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, > 111, 110, 32, 116, 111, 32, 115, 99, 97, 116, 116, 101, 114, 32, 99, 101, > 108, 108, 115, 32, 105, 110, 32, 115, 116, 111, 99, 107, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, 32, 109, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 114, 101, 115, 101, 116, > 32, 103, 97, 109, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 32, 39, 83, 39, 32, 116, 111, 32, 115, 97, 118, 101, 32, 115, 110, > 97, 112, 115, 104, 111, 116, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, > 114, 114, 101, 110, 116, 32, 118, 105, 101, 119, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, > 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 45, 105, 91, 48, > 93, 32, 57, 48, 44, 57, 48, 44, 49, 44, 49, 44, 48, 10, 45, 105, > 91, 49, 93, 32, 91, 48, 93, 32, 45, 102, 91, 49, 93, 32, 48, 10, > 45, 105, 91, 50, 93, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, > 51, 10, 45, 105, 91, 51, 93, 32, 49, 10, 105, 116, 101, 114, 97, 116, > 105, 111, 110, 61, 48, 10, 115, 99, 111, 114, 101, 61, 48, 10, 98, 101, > 115, 116, 115, 99, 111, 114, 101, 61, 48, 10, 115, 116, 111, 99, 107, 61, > 53, 48, 48, 10, 45, 119, 91, 48, 93, 32, 52, 48, 48, 44, 52, 48, > 48, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 84, > 104, 101, 32, 103, 97, 109, 101, 32, 111, 102, 32, 108, 105, 102, 101, 34, > 10, 45, 99, 117, 114, 115, 111, 114, 91, 48, 93, 32, 48, 10, 45, 100, > 111, 10, 40, 49, 44, 49, 44, 49, 59, 49, 44, 48, 44, 49, 59, 49, > 44, 49, 44, 49, 41, 32, 45, 45, 99, 111, 114, 114, 101, 108, 97, 116, > 101, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 32, 45, 114, 109, 91, > 45, 50, 93, 10, 45, 45, 116, 50, 91, 45, 49, 93, 32, 50, 44, 50, > 32, 45, 97, 110, 100, 91, 45, 49, 93, 32, 91, 48, 93, 32, 45, 116, > 50, 91, 45, 50, 93, 32, 51, 44, 51, 32, 45, 111, 114, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 114, 118, 91, 48, 44, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 44, 120, 125, 62, 48, 34, 32, 38, 38, > 32, 34, 64, 123, 33, 44, 98, 125, 61, 61, 49, 34, 32, 38, 38, 32, > 34, 36, 115, 116, 111, 99, 107, 62, 48, 125, 10, 110, 98, 61, 123, 63, > 42, 55, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 110, 98, 10, > 120, 61, 123, 64, 123, 33, 44, 120, 125, 47, 64, 123, 33, 44, 119, 125, > 42, 64, 123, 48, 44, 119, 125, 43, 63, 40, 45, 52, 44, 52, 41, 125, > 10, 121, 61, 123, 64, 123, 33, 44, 121, 125, 47, 64, 123, 33, 44, 104, > 125, 42, 64, 123, 48, 44, 104, 125, 43, 63, 40, 45, 51, 44, 51, 41, > 125, 10, 45, 61, 91, 48, 93, 32, 49, 44, 36, 120, 44, 36, 121, 10, > 45, 61, 91, 49, 93, 32, 36, 105, 116, 101, 114, 97, 116, 105, 111, 110, > 44, 36, 120, 44, 36, 121, 10, 45, 112, 111, 105, 110, 116, 91, 50, 93, > 32, 123, 36, 120, 42, 64, 123, 50, 44, 119, 125, 47, 64, 123, 48, 44, > 119, 125, 125, 44, 123, 36, 121, 42, 64, 123, 50, 44, 104, 125, 47, 64, > 123, 48, 44, 104, 125, 125, 44, 48, 44, 48, 46, 56, 44, 50, 53, 53, > 10, 45, 100, 111, 110, 101, 10, 115, 116, 111, 99, 107, 61, 123, 114, 111, > 117, 110, 100, 40, 109, 97, 120, 40, 48, 44, 36, 115, 116, 111, 99, 107, > 45, 36, 110, 98, 41, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 91, 45, 49, 93, 32, 91, 48, 93, 32, 45, 42, 91, 45, 49, 93, > 32, 45, 49, 10, 115, 116, 111, 99, 107, 61, 123, 36, 115, 116, 111, 99, > 107, 45, 50, 42, 40, 109, 105, 110, 40, 48, 44, 105, 110, 116, 40, 64, > 123, 45, 49, 44, 43, 125, 47, 49, 54, 42, 36, 115, 99, 111, 114, 101, > 47, 49, 53, 48, 41, 41, 41, 125, 10, 45, 43, 91, 49, 93, 32, 91, > 48, 93, 10, 45, 109, 105, 110, 91, 45, 49, 93, 32, 48, 32, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 49, 44, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 61, 61, 50, 125, 10, > 45, 102, 91, 48, 45, 50, 93, 32, 48, 32, 105, 116, 101, 114, 97, 116, > 105, 111, 110, 61, 48, 32, 115, 99, 111, 114, 101, 61, 48, 32, 98, 101, > 115, 116, 115, 99, 111, 114, 101, 61, 48, 32, 115, 116, 111, 99, 107, 61, > 53, 48, 48, 32, 45, 114, 109, 91, 51, 93, 32, 45, 105, 91, 51, 93, > 32, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, > 123, 51, 44, 119, 125, 61, 61, 49, 125, 10, 45, 114, 109, 91, 51, 93, > 32, 45, 105, 91, 51, 93, 32, 123, 63, 40, 51, 44, 49, 50, 41, 125, > 44, 49, 44, 49, 44, 51, 44, 63, 40, 49, 48, 48, 44, 50, 53, 53, > 41, 10, 45, 114, 91, 51, 93, 32, 123, 63, 40, 49, 48, 48, 44, 51, > 48, 48, 41, 125, 37, 44, 49, 44, 49, 44, 51, 44, 52, 10, 45, 112, > 111, 105, 110, 116, 91, 51, 93, 32, 48, 44, 48, 44, 48, 44, 49, 44, > 48, 10, 45, 114, 91, 51, 93, 32, 123, 63, 40, 49, 48, 48, 44, 54, > 48, 48, 41, 125, 37, 44, 49, 44, 49, 44, 51, 44, 53, 32, 45, 99, > 91, 51, 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 45, 114, 91, 49, 93, 32, 64, 123, 50, 44, 119, 125, 44, 64, > 123, 50, 44, 104, 125, 32, 45, 97, 110, 100, 91, 45, 49, 93, 32, 55, > 32, 45, 98, 91, 45, 49, 93, 32, 123, 49, 43, 36, 115, 99, 111, 114, > 101, 42, 48, 46, 48, 53, 125, 10, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 64, 123, 51, 44, 119, 125, 32, 45, 109, 97, 112, 91, 45, 49, 93, > 32, 91, 51, 93, 32, 45, 42, 91, 45, 49, 93, 32, 48, 46, 49, 32, > 45, 43, 91, 50, 44, 45, 49, 93, 32, 45, 47, 91, 50, 93, 32, 49, > 46, 49, 10, 91, 50, 93, 32, 45, 105, 102, 32, 123, 64, 123, 33, 44, > 120, 125, 62, 48, 125, 10, 111, 112, 97, 99, 61, 123, 48, 46, 55, 42, > 109, 105, 110, 40, 49, 44, 36, 115, 116, 111, 99, 107, 47, 53, 48, 48, > 41, 125, 32, 114, 61, 123, 109, 105, 110, 40, 53, 48, 48, 44, 36, 115, > 116, 111, 99, 107, 41, 42, 99, 111, 115, 40, 36, 105, 116, 101, 114, 97, > 116, 105, 111, 110, 41, 47, 49, 48, 48, 125, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 64, 123, 33, 44, 120, 125, 44, 64, > 123, 33, 44, 121, 125, 44, 123, 49, 53, 43, 36, 114, 125, 44, 123, 49, > 53, 43, 36, 114, 125, 44, 48, 44, 36, 111, 112, 97, 99, 44, 48, 44, > 49, 57, 54, 44, 48, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, > 49, 93, 32, 64, 123, 33, 44, 120, 125, 44, 64, 123, 33, 44, 121, 125, > 44, 123, 49, 48, 43, 36, 114, 125, 44, 123, 49, 48, 43, 36, 114, 125, > 44, 48, 44, 36, 111, 112, 97, 99, 44, 51, 50, 44, 54, 52, 44, 49, > 54, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 64, > 123, 33, 44, 120, 125, 44, 64, 123, 33, 44, 121, 125, 44, 123, 53, 43, > 36, 114, 125, 44, 123, 53, 43, 36, 114, 125, 44, 48, 44, 36, 111, 112, > 97, 99, 44, 50, 53, 53, 44, 50, 51, 48, 44, 48, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 116, 91, 45, 49, 93, 32, 34, 76, 105, 118, 105, > 110, 103, 32, 99, 101, 108, 108, 115, 32, 58, 32, 34, 36, 115, 99, 111, > 114, 101, 34, 92, 110, 34, 92, 10, 34, 83, 116, 111, 99, 107, 32, 58, > 32, 34, 36, 115, 116, 111, 99, 107, 34, 92, 110, 34, 92, 10, 34, 83, > 99, 111, 114, 101, 32, 58, 32, 34, 36, 98, 101, 115, 116, 115, 99, 111, > 114, 101, 44, 53, 44, 51, 44, 50, 50, 44, 48, 46, 55, 44, 50, 53, > 53, 10, 45, 119, 91, 45, 49, 93, 32, 64, 123, 33, 44, 119, 125, 44, > 64, 123, 33, 44, 104, 125, 10, 45, 105, 102, 32, 64, 123, 33, 44, 83, > 125, 32, 45, 111, 91, 45, 49, 93, 32, 103, 109, 105, 99, 95, 108, 105, > 102, 101, 46, 112, 110, 103, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 33, 40, 36, 105, 116, > 101, 114, 97, 116, 105, 111, 110, 37, 49, 48, 41, 125, 32, 115, 99, 111, > 114, 101, 61, 64, 123, 48, 44, 43, 125, 32, 98, 101, 115, 116, 115, 99, > 111, 114, 101, 61, 123, 109, 97, 120, 40, 36, 115, 99, 111, 114, 101, 44, > 36, 98, 101, 115, 116, 115, 99, 111, 114, 101, 41, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 119, 97, 105, 116, 32, 54, 48, 10, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 61, 123, 36, 105, 116, 101, 114, 97, 116, 105, > 111, 110, 43, 49, 125, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, > 109, 91, 48, 45, 51, 93, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 108, 105, 103, 104, 116, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, > 116, 104, 101, 32, 108, 105, 103, 104, 116, 32, 101, 102, 102, 101, 99, 116, > 32, 100, 101, 109, 111, 46, 10, 120, 95, 108, 105, 103, 104, 116, 32, 58, > 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, > 32, 76, 105, 103, 104, 116, 32, 101, 102, 102, 101, 99, 116, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 32, 77, 111, 118, 101, 32, 108, 105, 103, 104, 116, 32, 112, 111, > 115, 105, 116, 105, 111, 110, 32, 119, 105, 116, 104, 32, 109, 111, 117, 115, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, > 98, 117, 116, 116, 111, 110, 115, 32, 102, 97, 100, 101, 32, 108, 105, 103, > 104, 116, 32, 105, 110, 47, 111, 117, 116, 46, 92, 110, 10, 45, 45, 45, > 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, > 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, > 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, > 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, > 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, > 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 32, 32, 32, 32, 71, 92, 52, 55, 77, > 73, 67, 92, 110, 76, 105, 103, 104, 116, 32, 101, 102, 102, 101, 99, 116, > 34, 44, 48, 44, 48, 44, 53, 51, 44, 49, 44, 50, 53, 53, 32, 45, > 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, 53, > 44, 48, 32, 45, 98, 91, 45, 49, 93, 32, 51, 10, 91, 45, 49, 93, > 32, 45, 110, 91, 45, 50, 93, 32, 48, 44, 49, 32, 45, 114, 91, 45, > 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, > 10, 45, 115, 104, 91, 45, 50, 93, 32, 48, 44, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 49, 50, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 45, 50, 93, 32, 49, 44, 49, 32, 45, 42, 91, 45, > 49, 93, 32, 55, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, > 104, 91, 45, 50, 93, 32, 48, 44, 53, 48, 37, 44, 48, 44, 50, 32, > 45, 42, 91, 45, 49, 93, 32, 49, 50, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 50, 53, 37, 44, 50, 53, 37, 44, 49, 44, 49, 32, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 45, 50, 48, 44, 50, 48, 32, > 45, 115, 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 49, 48, 44, 48, > 44, 49, 44, 49, 44, 52, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 51, 32, 45, 98, 91, 45, 49, 93, 32, 51, 32, 45, 110, > 91, 45, 49, 93, 32, 45, 54, 48, 44, 54, 48, 10, 45, 43, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 103, 91, 45, 49, 93, 32, 120, 121, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 110, 91, 45, > 49, 93, 32, 45, 49, 53, 48, 44, 49, 53, 48, 10, 45, 119, 91, 93, > 32, 123, 49, 46, 53, 42, 64, 123, 45, 50, 44, 119, 125, 125, 44, 123, > 49, 46, 53, 42, 64, 123, 45, 50, 44, 104, 125, 125, 44, 48, 44, 34, > 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 76, 105, 103, 104, 116, 32, > 101, 102, 102, 101, 99, 116, 34, 10, 45, 99, 117, 114, 115, 111, 114, 91, > 48, 93, 32, 48, 10, 108, 105, 103, 104, 116, 61, 55, 48, 10, 53, 49, > 50, 44, 53, 49, 50, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, > 45, 49, 93, 32, 36, 108, 105, 103, 104, 116, 32, 45, 110, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 116, 61, 48, 10, 45, 100, 111, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 120, 125, 62, 61, 48, 125, 10, > 88, 61, 123, 114, 111, 117, 110, 100, 40, 40, 119, 45, 64, 123, 33, 44, > 120, 125, 41, 47, 50, 41, 125, 10, 89, 61, 123, 114, 111, 117, 110, 100, > 40, 40, 104, 45, 64, 123, 33, 44, 121, 125, 41, 47, 50, 41, 125, 10, > 45, 101, 108, 115, 101, 10, 88, 61, 123, 114, 111, 117, 110, 100, 40, 40, > 119, 45, 64, 123, 45, 50, 44, 119, 125, 42, 40, 49, 43, 99, 111, 115, > 40, 50, 42, 36, 116, 41, 41, 41, 47, 50, 41, 125, 10, 89, 61, 123, > 114, 111, 117, 110, 100, 40, 40, 104, 45, 64, 123, 45, 50, 44, 104, 125, > 42, 40, 49, 43, 115, 105, 110, 40, 50, 46, 53, 42, 36, 116, 41, 41, > 41, 47, 50, 41, 125, 10, 116, 61, 123, 36, 116, 43, 48, 46, 48, 50, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 98, 125, 38, 49, 125, 32, 108, 105, 103, 104, 116, 61, 123, 109, > 105, 110, 40, 50, 48, 48, 44, 36, 108, 105, 103, 104, 116, 43, 49, 48, > 41, 125, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, 45, 49, 93, > 32, 36, 108, 105, 103, 104, 116, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 64, 123, 33, 44, 98, 125, 38, 50, 125, 32, 108, 105, 103, 104, 116, > 61, 123, 109, 97, 120, 40, 49, 48, 44, 36, 108, 105, 103, 104, 116, 45, > 49, 48, 41, 125, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, 45, > 49, 93, 32, 36, 108, 105, 103, 104, 116, 32, 45, 110, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, > 122, 91, 45, 49, 93, 32, 36, 88, 44, 36, 89, 44, 123, 36, 88, 43, > 64, 123, 45, 50, 44, 119, 125, 45, 49, 125, 44, 123, 36, 89, 43, 64, > 123, 45, 50, 44, 104, 125, 45, 49, 125, 10, 45, 119, 97, 114, 112, 91, > 45, 49, 93, 32, 91, 45, 51, 93, 44, 49, 44, 48, 44, 49, 10, 45, > 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 51, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 52, 93, 32, > 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 119, 91, > 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, > 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, > 45, 119, 91, 93, 32, 123, 51, 42, 119, 125, 44, 123, 51, 42, 104, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, > 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, > 119, 91, 93, 32, 123, 49, 46, 53, 42, 119, 125, 44, 123, 49, 46, 53, > 42, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 105, 102, 32, 123, 64, 123, 33, 44, 120, 125, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 98, 125, 125, 32, > 45, 119, 97, 105, 116, 32, 45, 101, 108, 115, 101, 32, 45, 119, 97, 105, > 116, 32, 50, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, > 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, > 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, > 81, 125, 125, 10, 45, 119, 91, 93, 32, 48, 32, 45, 114, 109, 91, 45, > 51, 45, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 58, > 32, 95, 106, 117, 108, 105, 97, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 44, 95, 99, 48, 114, 44, 95, 99, 48, 105, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 77, 97, 110, 100, > 101, 108, 98, 114, 111, 116, 47, 74, 117, 108, 105, 97, 32, 101, 120, 112, > 108, 111, 114, 101, 114, 46, 10, 120, 95, 109, 97, 110, 100, 101, 108, 98, > 114, 111, 116, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 48, 125, 44, 36, 123, 50, 61, 48, 46, 51, 49, 55, 125, 44, 36, 123, > 51, 61, 48, 46, 48, 51, 125, 10, 45, 101, 91, 93, 32, 34, 92, 110, > 10, 45, 45, 45, 45, 45, 45, 32, 77, 97, 110, 100, 101, 108, 98, 114, > 111, 116, 47, 74, 117, 108, 105, 97, 32, 101, 120, 112, 108, 111, 114, 101, > 114, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 32, 83, 101, 108, 101, 99, 116, 32, 122, 111, 111, 109, 105, 110, 103, > 32, 114, 101, 103, 105, 111, 110, 32, 119, 105, 116, 104, 32, 109, 111, 117, > 115, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 67, 108, 105, 99, 107, > 32, 111, 110, 99, 101, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 122, > 111, 111, 109, 32, 102, 97, 99, 116, 111, 114, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, > 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 67, 39, 32, 116, 111, 32, > 112, 114, 105, 110, 116, 32, 99, 117, 114, 114, 101, 110, 116, 32, 102, 114, > 97, 99, 116, 97, 108, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, > 115, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, > 45, 118, 32, 45, 10, 45, 114, 109, 32, 45, 119, 32, 53, 49, 50, 44, > 53, 49, 50, 44, 48, 32, 45, 95, 120, 95, 109, 97, 110, 100, 101, 108, > 98, 114, 111, 116, 95, 99, 111, 111, 114, 100, 115, 32, 36, 49, 32, 45, > 95, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 95, 112, 97, > 108, 101, 116, 116, 101, 10, 45, 100, 111, 10, 115, 105, 122, 61, 123, 109, > 105, 110, 40, 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, > 41, 125, 10, 36, 115, 105, 122, 44, 36, 115, 105, 122, 32, 45, 109, 97, > 110, 100, 101, 108, 98, 114, 111, 116, 91, 45, 49, 93, 32, 64, 48, 44, > 50, 53, 54, 44, 36, 49, 44, 123, 105, 102, 40, 36, 49, 44, 36, 50, > 44, 48, 41, 125, 44, 123, 105, 102, 40, 36, 49, 44, 36, 51, 44, 48, > 41, 125, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 49, 93, 10, > 45, 105, 102, 32, 36, 49, 32, 45, 119, 91, 45, 49, 93, 32, 36, 115, > 105, 122, 44, 36, 115, 105, 122, 44, 48, 44, 34, 91, 71, 92, 52, 55, > 77, 73, 67, 93, 32, 74, 117, 108, 105, 97, 32, 115, 101, 116, 32, 99, > 61, 40, 34, 64, 123, 48, 44, 48, 125, 34, 44, 34, 64, 123, 48, 44, > 49, 125, 34, 41, 45, 40, 34, 64, 123, 48, 44, 50, 125, 34, 44, 34, > 64, 123, 48, 44, 51, 125, 34, 41, 44, 32, 99, 48, 61, 40, 36, 50, > 44, 36, 51, 41, 34, 10, 45, 101, 108, 115, 101, 32, 45, 119, 91, 45, > 49, 93, 32, 36, 115, 105, 122, 44, 36, 115, 105, 122, 44, 48, 44, 34, > 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 77, 97, 110, 100, 101, 108, > 98, 114, 111, 116, 32, 115, 101, 116, 32, 99, 61, 40, 34, 64, 123, 48, > 44, 48, 125, 34, 44, 34, 64, 123, 48, 44, 49, 125, 34, 41, 45, 40, > 34, 64, 123, 48, 44, 50, 125, 34, 44, 34, 64, 123, 48, 44, 51, 125, > 34, 41, 34, 32, 45, 101, 110, 100, 105, 102, 10, 119, 61, 123, 119, 125, > 32, 104, 61, 123, 104, 125, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, > 93, 32, 45, 115, 101, 108, 101, 99, 116, 91, 45, 49, 93, 32, 50, 10, > 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 125, 62, 48, 125, 10, > 77, 61, 123, 109, 97, 120, 40, 64, 123, 45, 49, 44, 51, 125, 45, 64, > 123, 45, 49, 44, 48, 125, 44, 64, 123, 45, 49, 44, 52, 125, 45, 64, > 123, 45, 49, 44, 49, 125, 41, 125, 10, 45, 105, 102, 32, 123, 36, 77, > 60, 53, 125, 32, 45, 95, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, > 111, 116, 95, 99, 111, 111, 114, 100, 115, 32, 36, 49, 32, 45, 114, 109, > 91, 49, 93, 32, 45, 95, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, > 111, 116, 95, 112, 97, 108, 101, 116, 116, 101, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 49, 10, 45, 101, 108, 115, 101, 32, 40, 123, 64, 123, 48, > 44, 48, 125, 43, 64, 123, 45, 49, 44, 48, 125, 42, 40, 64, 123, 48, > 44, 50, 125, 45, 64, 123, 48, 44, 48, 125, 41, 47, 36, 119, 125, 59, > 92, 10, 123, 64, 123, 48, 44, 49, 125, 43, 64, 123, 45, 49, 44, 49, > 125, 42, 40, 64, 123, 48, 44, 51, 125, 45, 64, 123, 48, 44, 49, 125, > 41, 47, 36, 104, 125, 59, 92, 10, 123, 64, 123, 48, 44, 48, 125, 43, > 40, 64, 123, 45, 49, 44, 48, 125, 43, 36, 77, 41, 42, 40, 64, 123, > 48, 44, 50, 125, 45, 64, 123, 48, 44, 48, 125, 41, 47, 36, 119, 125, > 59, 92, 10, 123, 64, 123, 48, 44, 49, 125, 43, 40, 64, 123, 45, 49, > 44, 49, 125, 43, 36, 77, 41, 42, 40, 64, 123, 48, 44, 51, 125, 45, > 64, 123, 48, 44, 49, 125, 41, 47, 36, 104, 125, 41, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 125, 125, > 10, 45, 105, 102, 32, 36, 49, 32, 45, 118, 32, 43, 32, 45, 101, 91, > 48, 45, 45, 52, 93, 32, 34, 74, 117, 108, 105, 97, 32, 115, 101, 116, > 44, 32, 97, 116, 32, 99, 32, 61, 32, 40, 34, 64, 123, 48, 44, 48, > 45, 49, 125, 34, 41, 45, 40, 34, 64, 123, 48, 44, 50, 45, 51, 125, > 34, 41, 44, 32, 119, 105, 116, 104, 32, 99, 48, 32, 61, 32, 40, 36, > 50, 44, 36, 51, 41, 46, 34, 32, 45, 118, 32, 45, 10, 45, 101, 108, > 115, 101, 32, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, 45, 52, 93, > 32, 34, 77, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 115, 101, 116, > 44, 32, 97, 116, 32, 99, 32, 61, 32, 40, 34, 64, 123, 48, 44, 48, > 45, 49, 125, 34, 41, 45, 40, 34, 64, 123, 48, 44, 50, 45, 51, 125, > 34, 41, 46, 34, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 64, 33, > 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, > 124, 124, 32, 34, 64, 123, 33, 44, 81, 125, 125, 32, 45, 114, 109, 32, > 45, 119, 32, 48, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 97, 105, 116, 32, 45, > 49, 10, 45, 119, 104, 105, 108, 101, 32, 49, 10, 95, 120, 95, 109, 97, > 110, 100, 101, 108, 98, 114, 111, 116, 95, 99, 111, 111, 114, 100, 115, 32, > 58, 10, 45, 105, 102, 32, 36, 49, 32, 40, 45, 50, 59, 45, 50, 59, > 50, 59, 50, 41, 32, 45, 101, 108, 115, 101, 32, 40, 45, 50, 46, 49, > 59, 45, 49, 46, 53, 59, 49, 46, 50, 59, 49, 46, 53, 41, 32, 45, > 101, 110, 100, 105, 102, 10, 95, 120, 95, 109, 97, 110, 100, 101, 108, 98, > 114, 111, 116, 95, 112, 97, 108, 101, 116, 116, 101, 32, 58, 10, 54, 44, > 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, > 50, 48, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 51, 50, > 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, 114, 91, 45, 49, 93, 32, > 49, 48, 50, 52, 44, 49, 44, 49, 44, 51, 44, 48, 44, 50, 32, 45, > 61, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 32, > 45, 61, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 49, > 32, 45, 61, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 109, 101, 116, 97, 98, > 97, 108, 108, 115, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 51, 100, 32, 109, 101, > 116, 97, 98, 97, 108, 108, 115, 32, 100, 101, 109, 111, 46, 10, 120, 95, > 109, 101, 116, 97, 98, 97, 108, 108, 115, 51, 100, 32, 58, 10, 45, 101, > 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 51, 100, > 32, 109, 101, 116, 97, 98, 97, 108, 108, 115, 32, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 32, 77, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 111, 114, > 32, 39, 83, 80, 65, 67, 69, 39, 32, 107, 101, 121, 32, 116, 111, 32, > 115, 119, 105, 116, 99, 104, 32, 114, 101, 110, 100, 101, 114, 105, 110, 103, > 32, 109, 111, 100, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, > 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, > 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, > 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, > 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 10, > 49, 48, 48, 44, 49, 48, 48, 32, 45, 110, 111, 105, 115, 101, 91, 45, > 49, 93, 32, 49, 48, 48, 44, 49, 32, 45, 112, 108, 97, 115, 109, 97, > 91, 45, 49, 93, 32, 49, 44, 48, 44, 49, 48, 32, 45, 114, 91, 45, > 49, 93, 32, 53, 49, 50, 44, 51, 50, 48, 44, 49, 44, 51, 32, 45, > 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 98, 91, 45, 49, 93, > 32, 52, 44, 48, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, > 53, 10, 45, 109, 105, 120, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 40, 48, 46, 55, 44, 48, 44, 48, 59, 48, 44, 48, > 46, 57, 44, 48, 59, 48, 44, 48, 44, 49, 46, 50, 41, 32, 45, 99, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 108, 51, 100, 10, > 48, 10, 50, 52, 44, 50, 52, 44, 50, 52, 44, 49, 44, 39, 88, 61, > 120, 45, 119, 47, 50, 59, 89, 61, 121, 45, 104, 47, 50, 59, 90, 61, > 122, 45, 100, 47, 50, 59, 101, 120, 112, 40, 45, 40, 88, 42, 88, 43, > 89, 42, 89, 43, 90, 42, 90, 41, 47, 49, 48, 48, 41, 39, 10, 55, > 50, 44, 55, 50, 44, 55, 50, 32, 77, 61, 56, 32, 109, 111, 100, 101, > 61, 53, 10, 115, 48, 61, 68, 111, 116, 115, 32, 115, 49, 61, 87, 105, > 114, 101, 102, 114, 97, 109, 101, 32, 115, 50, 61, 70, 108, 97, 116, 32, > 115, 51, 61, 70, 108, 97, 116, 45, 115, 104, 97, 100, 101, 100, 32, 115, > 52, 61, 71, 111, 117, 114, 97, 117, 100, 45, 115, 104, 97, 100, 101, 100, > 32, 115, 53, 61, 80, 104, 111, 110, 103, 45, 115, 104, 97, 100, 101, 100, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 77, 32, 102, 120, 36, 62, > 61, 123, 103, 42, 49, 46, 53, 125, 32, 102, 121, 36, 62, 61, 123, 103, > 42, 49, 46, 53, 125, 32, 102, 122, 36, 62, 61, 123, 103, 42, 49, 46, > 53, 125, 32, 45, 100, 111, 110, 101, 10, 45, 119, 91, 48, 93, 32, 45, > 49, 44, 45, 49, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 51, 100, 32, 109, 101, 116, 97, 98, 97, 108, 108, 115, 34, 10, > 45, 100, 111, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 77, 10, 120, > 36, 62, 61, 123, 119, 47, 50, 43, 48, 46, 53, 42, 40, 119, 45, 64, > 123, 50, 44, 119, 125, 45, 52, 41, 42, 99, 111, 115, 40, 36, 123, 102, > 120, 36, 62, 125, 42, 64, 124, 41, 125, 10, 121, 36, 62, 61, 123, 104, > 47, 50, 43, 48, 46, 53, 42, 40, 104, 45, 64, 123, 50, 44, 104, 125, > 45, 52, 41, 42, 115, 105, 110, 40, 36, 123, 102, 121, 36, 62, 125, 42, > 64, 124, 41, 125, 10, 122, 36, 62, 61, 123, 100, 47, 50, 43, 48, 46, > 53, 42, 40, 100, 45, 64, 123, 50, 44, 100, 125, 45, 52, 41, 42, 115, > 105, 110, 40, 36, 123, 102, 122, 36, 62, 125, 42, 64, 124, 41, 125, 10, > 45, 100, 111, 110, 101, 10, 45, 102, 91, 51, 93, 32, 48, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 77, 32, 45, 106, 91, 51, 93, 32, 91, > 50, 93, 44, 123, 36, 123, 120, 36, 62, 125, 45, 64, 123, 50, 44, 119, > 47, 50, 125, 125, 44, 123, 36, 123, 121, 36, 62, 125, 45, 64, 123, 50, > 44, 104, 47, 50, 125, 125, 44, 123, 36, 123, 122, 36, 62, 125, 45, 64, > 123, 50, 44, 100, 47, 50, 125, 125, 44, 48, 44, 45, 49, 32, 45, 100, > 111, 110, 101, 10, 45, 45, 114, 91, 51, 93, 32, 50, 52, 44, 50, 52, > 44, 50, 52, 44, 49, 44, 50, 32, 45, 105, 115, 111, 115, 117, 114, 102, > 97, 99, 101, 51, 100, 91, 45, 49, 93, 32, 48, 46, 52, 32, 45, 45, > 51, 100, 91, 45, 49, 93, 32, 49, 50, 44, 49, 50, 44, 49, 50, 32, > 45, 42, 51, 100, 91, 45, 49, 93, 32, 49, 51, 32, 45, 114, 118, 51, > 100, 91, 45, 49, 93, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, > 44, 50, 44, 49, 44, 123, 49, 48, 48, 42, 64, 124, 125, 10, 78, 61, > 123, 105, 91, 55, 93, 125, 32, 40, 50, 53, 53, 44, 50, 53, 53, 44, > 49, 53, 48, 59, 50, 48, 48, 44, 57, 54, 44, 49, 54, 52, 59, 53, > 48, 44, 49, 53, 48, 44, 50, 51, 48, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 51, 44, 36, 78, 44, 49, 44, 49, 44, 51, 32, 45, 121, 91, > 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 52, 42, 36, 78, 125, > 10, 45, 105, 102, 32, 123, 33, 36, 109, 111, 100, 101, 125, 32, 45, 99, > 105, 114, 99, 108, 101, 115, 51, 100, 91, 45, 50, 93, 32, 52, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 64, 123, 49, 44, > 119, 125, 125, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 123, 115, > 36, 109, 111, 100, 101, 125, 44, 53, 44, 53, 44, 50, 51, 44, 48, 46, > 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 98, > 91, 45, 49, 93, 32, 48, 46, 55, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 53, 53, 10, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, > 49, 93, 32, 51, 32, 45, 45, 106, 91, 48, 93, 32, 91, 45, 50, 93, > 44, 53, 44, 51, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, > 50, 53, 53, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 114, > 109, 91, 50, 44, 45, 50, 44, 45, 49, 93, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, > 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, > 44, 123, 105, 102, 40, 33, 36, 109, 111, 100, 101, 44, 51, 44, 36, 109, > 111, 100, 101, 41, 125, 44, 48, 44, 48, 44, 51, 48, 48, 44, 48, 44, > 48, 44, 45, 53, 48, 48, 44, 48, 46, 49, 44, 49, 46, 53, 10, 45, > 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, > 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, > 125, 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, > 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, > 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, > 32, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 51, 45, 45, 49, 93, 32, > 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 98, 125, 124, 124, 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, > 125, 32, 109, 111, 100, 101, 61, 123, 40, 36, 109, 111, 100, 101, 43, 105, > 102, 40, 64, 123, 33, 44, 98, 125, 38, 50, 44, 45, 49, 44, 49, 41, > 41, 37, 54, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 114, > 109, 91, 49, 93, 32, 45, 105, 91, 49, 93, 32, 48, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, > 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, > 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, 109, 32, > 45, 119, 32, 48, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 120, 95, 109, 105, 110, 101, 115, 119, 101, > 101, 112, 101, 114, 32, 58, 32, 56, 60, 61, 95, 119, 105, 100, 116, 104, > 61, 60, 50, 48, 44, 56, 60, 61, 95, 104, 101, 105, 103, 104, 116, 60, > 61, 50, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, > 110, 99, 104, 32, 116, 104, 101, 32, 77, 105, 110, 101, 115, 119, 101, 101, > 112, 101, 114, 32, 103, 97, 109, 101, 46, 10, 120, 95, 109, 105, 110, 101, > 115, 119, 101, 101, 112, 101, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 123, 49, 61, 50, 48, 125, 62, 61, 56, 32, 38, 38, 32, > 36, 49, 60, 61, 51, 48, 32, 38, 38, 32, 36, 123, 50, 61, 36, 49, > 125, 62, 61, 56, 32, 38, 38, 32, 36, 50, 60, 61, 51, 48, 34, 10, > 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, > 77, 105, 110, 101, 115, 119, 101, 101, 112, 101, 114, 32, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, > 10, 45, 45, 45, 45, 32, 84, 104, 101, 32, 103, 111, 97, 108, 32, 105, > 115, 32, 116, 111, 32, 99, 108, 101, 97, 114, 32, 116, 104, 101, 32, 109, > 105, 110, 101, 102, 105, 101, 108, 100, 32, 119, 105, 116, 104, 111, 117, 116, > 32, 100, 101, 116, 111, 110, 97, 116, 105, 110, 103, 32, 97, 92, 110, 10, > 45, 45, 45, 45, 32, 109, 105, 110, 101, 46, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 32, 76, 101, 102, 116, 32, 109, 111, > 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 116, 114, > 121, 32, 99, 108, 101, 97, 114, 105, 110, 103, 32, 111, 110, 101, 32, 115, > 113, 117, 97, 114, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 82, 105, > 103, 104, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, > 32, 116, 111, 32, 102, 108, 97, 103, 32, 111, 114, 32, 117, 110, 102, 108, > 97, 103, 32, 97, 32, 115, 113, 117, 97, 114, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 77, 105, 100, 100, 108, 101, 32, 109, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 114, 101, 115, 101, 116, > 32, 109, 105, 110, 101, 32, 102, 105, 101, 108, 100, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 92, 110, 34, 10, 45, 118, 32, 45, 10, 36, > 49, 44, 36, 50, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, > 51, 48, 44, 50, 32, 110, 98, 95, 109, 105, 110, 101, 115, 61, 64, 123, > 45, 49, 44, 43, 125, 32, 40, 49, 44, 49, 44, 49, 59, 49, 44, 48, > 44, 49, 59, 49, 44, 49, 44, 49, 41, 32, 45, 45, 99, 111, 110, 118, > 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 32, > 45, 114, 109, 91, 45, 50, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 61, 61, 91, 45, 50, 93, 32, 48, 32, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 102, 105, 101, > 108, 100, 10, 45, 100, 111, 32, 120, 61, 123, 114, 111, 117, 110, 100, 40, > 63, 40, 119, 45, 49, 41, 41, 125, 32, 121, 61, 123, 114, 111, 117, 110, > 100, 40, 63, 40, 104, 45, 49, 41, 41, 125, 32, 45, 119, 104, 105, 108, > 101, 32, 123, 105, 40, 36, 120, 44, 36, 121, 41, 33, 61, 49, 125, 10, > 45, 45, 102, 91, 102, 105, 101, 108, 100, 93, 32, 49, 49, 32, 45, 61, > 91, 45, 49, 93, 32, 49, 50, 44, 36, 120, 44, 36, 121, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 98, 111, 97, 114, 100, 10, 50, 52, 44, 50, > 52, 44, 49, 44, 51, 44, 50, 48, 48, 32, 45, 102, 99, 91, 45, 49, > 93, 32, 50, 53, 53, 44, 49, 56, 48, 44, 49, 51, 48, 10, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 49, 50, 44, 49, 50, > 44, 52, 44, 52, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 54, > 44, 49, 50, 44, 49, 56, 44, 49, 50, 32, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 49, 50, 44, 54, 44, 49, 50, 44, 49, 56, 32, 45, > 108, 105, 110, 101, 91, 45, 49, 93, 32, 49, 51, 44, 49, 48, 44, 49, > 52, 44, 49, 48, 44, 49, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 49, 51, 44, 49, 49, 44, 49, 52, 44, 49, 49, > 44, 49, 44, 50, 53, 53, 10, 45, 122, 91, 45, 49, 93, 32, 49, 44, > 49, 44, 123, 119, 45, 50, 125, 44, 123, 104, 45, 50, 125, 32, 45, 102, > 114, 97, 109, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 10, 45, > 45, 102, 99, 91, 45, 49, 93, 32, 50, 51, 48, 44, 50, 53, 48, 44, > 50, 53, 53, 10, 45, 45, 116, 91, 45, 49, 93, 32, 34, 49, 34, 44, > 49, 48, 44, 53, 44, 49, 51, 44, 49, 44, 48, 44, 49, 57, 54, 44, > 48, 32, 45, 45, 116, 91, 45, 50, 93, 32, 34, 50, 34, 44, 57, 44, > 53, 44, 49, 51, 44, 49, 44, 48, 44, 49, 50, 56, 44, 48, 32, 45, > 45, 116, 91, 45, 51, 93, 32, 34, 51, 34, 44, 57, 44, 53, 44, 49, > 51, 44, 49, 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, 45, 116, 91, > 45, 52, 93, 32, 34, 52, 34, 44, 57, 44, 53, 44, 49, 51, 44, 49, > 44, 50, 53, 53, 44, 48, 44, 48, 32, 45, 45, 116, 91, 45, 53, 93, > 32, 34, 53, 34, 44, 57, 44, 53, 44, 49, 51, 44, 49, 44, 50, 48, > 48, 44, 48, 44, 48, 32, 45, 45, 116, 91, 45, 54, 93, 32, 34, 54, > 34, 44, 57, 44, 53, 44, 49, 51, 44, 49, 44, 49, 53, 48, 44, 48, > 44, 48, 10, 45, 45, 116, 91, 45, 55, 93, 32, 34, 55, 34, 44, 57, > 44, 53, 44, 49, 51, 44, 49, 44, 49, 50, 56, 44, 48, 44, 48, 32, > 45, 45, 116, 91, 45, 56, 93, 32, 34, 56, 34, 44, 57, 44, 53, 44, > 49, 51, 44, 49, 44, 54, 52, 44, 48, 44, 48, 10, 45, 45, 102, 91, > 45, 49, 93, 32, 39, 105, 102, 40, 120, 60, 61, 49, 124, 124, 121, 60, > 61, 49, 124, 124, 120, 62, 61, 119, 45, 50, 124, 124, 121, 62, 61, 104, > 45, 50, 44, 105, 102, 40, 120, 60, 121, 44, 49, 50, 56, 44, 50, 53, > 53, 41, 44, 49, 54, 48, 43, 50, 42, 40, 121, 43, 120, 41, 41, 39, > 10, 45, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 52, > 44, 49, 51, 44, 49, 53, 44, 49, 49, 44, 49, 53, 44, 54, 44, 49, > 56, 44, 49, 55, 44, 49, 56, 44, 49, 44, 48, 32, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 49, 50, 44, 49, 53, 44, 49, 50, 44, 54, > 44, 49, 44, 50, 53, 53, 44, 48, 44, 48, 32, 45, 112, 111, 108, 121, > 103, 111, 110, 91, 45, 49, 93, 32, 51, 44, 49, 50, 44, 54, 44, 54, > 44, 57, 44, 49, 50, 44, 49, 50, 44, 49, 44, 50, 50, 48, 44, 48, > 44, 48, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, > 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 54, 44, 49, 52, 44, > 49, 48, 44, 49, 56, 44, 49, 44, 48, 44, 50, 48, 48, 44, 48, 32, > 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 49, 48, 44, 49, 56, 44, > 49, 54, 44, 54, 44, 49, 44, 48, 44, 50, 48, 48, 44, 48, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 50, 10, 45, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 49, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 48, 46, 55, 32, 45, 100, 105, 108, 97, > 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 106, 91, 45, 51, 93, 32, > 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 97, 91, 45, 49, 51, 45, 45, 49, 93, 32, 120, 32, 45, 110, 109, 91, > 45, 49, 93, 32, 115, 112, 114, 105, 116, 101, 115, 10, 40, 48, 44, 50, > 51, 59, 48, 44, 50, 51, 94, 48, 44, 48, 59, 50, 51, 44, 50, 51, > 41, 32, 45, 114, 91, 45, 49, 93, 32, 50, 52, 44, 50, 52, 44, 49, > 44, 50, 44, 51, 32, 45, 114, 91, 45, 49, 93, 32, 123, 64, 123, 98, > 111, 97, 114, 100, 44, 119, 125, 42, 50, 52, 125, 44, 123, 64, 123, 98, > 111, 97, 114, 100, 44, 104, 125, 42, 50, 52, 125, 44, 49, 44, 50, 44, > 48, 44, 50, 32, 45, 110, 109, 91, 45, 49, 93, 32, 111, 102, 102, 115, > 101, 116, 115, 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, > 51, 44, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, > 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, > 93, 32, 50, 51, 44, 50, 51, 44, 50, 53, 53, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 34, 78, 117, 109, 98, 101, 114, 32, 111, 102, 32, > 109, 105, 110, 101, 115, 32, 58, 32, 34, 36, 110, 98, 95, 109, 105, 110, > 101, 115, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, 49, 48, 48, 44, > 50, 48, 48, 44, 50, 53, 53, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 91, 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 123, 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 47, 50, > 125, 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 104, 45, 50, 125, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 110, 109, 91, 45, 49, 93, 32, > 99, 97, 110, 118, 97, 115, 10, 102, 97, 105, 108, 101, 100, 61, 48, 32, > 115, 117, 99, 99, 101, 101, 100, 101, 100, 61, 48, 32, 110, 98, 95, 102, > 108, 97, 103, 115, 61, 48, 32, 115, 116, 97, 114, 116, 101, 100, 61, 48, > 10, 45, 100, 111, 10, 45, 45, 42, 91, 98, 111, 97, 114, 100, 93, 32, > 50, 52, 32, 45, 114, 91, 45, 49, 93, 32, 91, 111, 102, 102, 115, 101, > 116, 115, 93, 44, 91, 111, 102, 102, 115, 101, 116, 115, 93, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 43, 91, 45, 49, 93, 32, 91, 111, 102, 102, 115, 101, 116, 115, 93, > 32, 45, 45, 119, 97, 114, 112, 91, 115, 112, 114, 105, 116, 101, 115, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 106, 91, 99, 97, 110, 118, 97, 115, 93, 32, 91, 45, 49, > 93, 44, 50, 52, 44, 50, 52, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 119, 97, 105, 116, 32, 45, 49, 10, 45, 105, 102, 32, 36, 102, 97, > 105, 108, 101, 100, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 71, > 97, 109, 101, 92, 110, 79, 118, 101, 114, 33, 34, 44, 51, 44, 51, 44, > 51, 56, 44, 49, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 115, > 104, 91, 45, 49, 93, 32, 51, 44, 51, 32, 45, 100, 105, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 53, 32, 45, 47, 91, 45, 49, 93, 32, 50, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 114, 111, 112, 95, 115, > 104, 97, 100, 111, 119, 91, 45, 49, 93, 32, 53, 44, 53, 44, 49, 32, > 45, 98, 108, 101, 110, 100, 91, 99, 97, 110, 118, 97, 115, 44, 45, 49, > 93, 32, 97, 108, 112, 104, 97, 10, 48, 32, 45, 116, 91, 45, 49, 93, > 32, 34, 66, 111, 111, 109, 33, 32, 89, 111, 117, 32, 102, 97, 105, 108, > 101, 100, 33, 34, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, 49, 48, > 48, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, > 32, 64, 123, 99, 97, 110, 118, 97, 115, 44, 119, 125, 44, 49, 48, 48, > 37, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, > 45, 106, 91, 99, 97, 110, 118, 97, 115, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 32, > 45, 119, 91, 99, 97, 110, 118, 97, 115, 93, 32, 123, 119, 125, 44, 123, > 104, 125, 32, 45, 119, 97, 105, 116, 32, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, > 10, 45, 101, 108, 105, 102, 32, 36, 115, 117, 99, 99, 101, 101, 100, 101, > 100, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 83, 117, 99, 99, > 101, 115, 115, 33, 34, 44, 51, 44, 51, 44, 51, 56, 44, 49, 44, 50, > 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 52, 32, 45, 115, 104, 91, 45, 49, 93, 32, > 51, 44, 51, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, > 53, 32, 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 91, > 45, 49, 93, 32, 53, 44, 53, 44, 49, 32, 45, 98, 108, 101, 110, 100, > 91, 99, 97, 110, 118, 97, 115, 44, 45, 49, 93, 32, 97, 108, 112, 104, > 97, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 67, 111, 110, 103, > 114, 97, 116, 117, 108, 97, 116, 105, 111, 110, 115, 33, 32, 40, 34, 123, > 114, 111, 117, 110, 100, 40, 64, 124, 45, 36, 116, 105, 99, 41, 125, 34, > 32, 115, 41, 34, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, 50, 53, > 53, 44, 49, 48, 48, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, > 32, 64, 123, 99, 97, 110, 118, 97, 115, 44, 119, 125, 44, 49, 48, 48, > 37, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 10, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, > 45, 106, 91, 99, 97, 110, 118, 97, 115, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 32, > 45, 119, 91, 99, 97, 110, 118, 97, 115, 93, 32, 123, 119, 125, 44, 123, > 104, 125, 32, 45, 119, 97, 105, 116, 32, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, > 10, 45, 101, 108, 115, 101, 10, 45, 45, 61, 61, 91, 98, 111, 97, 114, > 100, 93, 32, 49, 48, 32, 110, 98, 95, 102, 108, 97, 103, 115, 61, 64, > 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 10, 45, 105, 102, 32, 123, 33, 36, 115, 116, 97, 114, 116, 101, > 100, 125, 32, 116, 105, 99, 61, 64, 124, 32, 45, 101, 110, 100, 105, 102, > 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 69, 108, 97, 112, 115, > 101, 100, 32, 116, 105, 109, 101, 32, 58, 32, 34, 123, 114, 111, 117, 110, > 100, 40, 64, 124, 45, 36, 116, 105, 99, 41, 125, 34, 32, 115, 32, 47, > 32, 70, 108, 97, 103, 115, 32, 58, 32, 34, 36, 110, 98, 95, 102, 108, > 97, 103, 115, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, 50, 53, 53, > 44, 50, 48, 48, 44, 48, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, > 99, 97, 110, 118, 97, 115, 44, 119, 125, 44, 49, 48, 48, 37, 44, 49, > 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, > 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, 45, 106, 91, > 99, 97, 110, 118, 97, 115, 93, 32, 91, 45, 49, 93, 44, 48, 44, 51, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 97, 105, 116, 32, 53, > 48, 10, 120, 61, 123, 105, 110, 116, 40, 40, 64, 123, 33, 44, 120, 125, > 45, 50, 52, 41, 47, 50, 52, 41, 125, 32, 121, 61, 123, 105, 110, 116, > 40, 40, 64, 123, 33, 44, 121, 125, 45, 50, 52, 41, 47, 50, 52, 41, > 125, 32, 98, 61, 64, 123, 33, 44, 98, 125, 10, 45, 119, 91, 99, 97, > 110, 118, 97, 115, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 77, 105, 110, 101, 115, > 119, 101, 101, 112, 101, 114, 34, 10, 45, 119, 104, 105, 108, 101, 32, 123, > 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, > 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 34, 32, > 38, 38, 32, 34, 33, 36, 98, 125, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 120, 62, 61, 48, 92, 32, 38, 38, 92, 32, > 36, 121, 62, 61, 48, 92, 32, 38, 38, 92, 32, 36, 120, 60, 64, 123, > 98, 111, 97, 114, 100, 44, 119, 125, 92, 32, 38, 38, 92, 32, 36, 121, > 60, 64, 123, 98, 111, 97, 114, 100, 44, 104, 125, 125, 10, 45, 105, 102, > 32, 123, 36, 98, 38, 49, 125, 10, 115, 116, 97, 114, 116, 101, 100, 61, > 49, 32, 118, 97, 108, 61, 64, 123, 102, 105, 101, 108, 100, 44, 40, 36, > 120, 44, 36, 121, 41, 125, 10, 45, 105, 102, 32, 123, 36, 118, 97, 108, > 61, 61, 48, 125, 32, 45, 45, 61, 61, 91, 102, 105, 101, 108, 100, 93, > 32, 48, 32, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, 91, 102, 105, > 101, 108, 100, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 102, 97, 105, 108, > 101, 100, 61, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 118, 97, 108, > 61, 61, 49, 125, 32, 45, 45, 102, 108, 111, 111, 100, 91, 102, 105, 101, > 108, 100, 93, 32, 36, 120, 44, 36, 121, 44, 48, 44, 48, 44, 49, 44, > 49, 44, 45, 49, 32, 45, 61, 61, 91, 45, 49, 93, 32, 45, 49, 32, > 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 106, > 91, 98, 111, 97, 114, 100, 93, 32, 91, 102, 105, 101, 108, 100, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 61, 91, > 98, 111, 97, 114, 100, 93, 32, 36, 118, 97, 108, 44, 36, 120, 44, 36, > 121, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, > 110, 61, 64, 123, 98, 111, 97, 114, 100, 44, 40, 36, 120, 44, 36, 121, > 41, 125, 59, 36, 98, 38, 50, 34, 32, 38, 38, 32, 34, 110, 62, 61, > 49, 48, 34, 32, 38, 38, 32, 34, 110, 60, 61, 49, 49, 125, 10, 45, > 61, 91, 98, 111, 97, 114, 100, 93, 32, 123, 105, 102, 40, 64, 123, 98, > 111, 97, 114, 100, 44, 40, 36, 120, 44, 36, 121, 41, 125, 61, 61, 49, > 49, 44, 49, 48, 44, 49, 49, 41, 125, 44, 36, 120, 44, 36, 121, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 98, 38, 52, 125, 32, 45, 102, 91, > 98, 111, 97, 114, 100, 93, 32, 49, 48, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 98, > 95, 109, 105, 110, 101, 115, 61, 61, 36, 110, 98, 95, 102, 108, 97, 103, > 115, 92, 32, 38, 38, 92, 32, 64, 123, 98, 111, 97, 114, 100, 44, 77, > 125, 33, 61, 49, 49, 125, 32, 115, 117, 99, 99, 101, 101, 100, 101, 100, > 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, > 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, > 125, 10, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 120, 95, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, > 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, > 104, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 112, 97, > 116, 104, 32, 100, 101, 109, 111, 46, 10, 120, 95, 109, 105, 110, 105, 109, > 97, 108, 95, 112, 97, 116, 104, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 77, 105, 110, 105, 109, 97, > 108, 32, 112, 97, 116, 104, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, > 67, 108, 105, 99, 107, 32, 111, 110, 32, 116, 119, 111, 32, 112, 111, 105, > 110, 116, 115, 32, 116, 111, 32, 99, 111, 109, 112, 117, 116, 101, 32, 97, > 110, 100, 32, 100, 105, 115, 112, 108, 97, 121, 32, 116, 104, 101, 32, 109, > 105, 110, 105, 109, 97, 108, 92, 110, 10, 45, 45, 45, 45, 32, 112, 97, > 116, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 104, 111, 115, 101, > 32, 112, 111, 105, 110, 116, 115, 46, 32, 84, 104, 101, 32, 101, 110, 100, > 105, 110, 103, 32, 112, 111, 105, 110, 116, 32, 105, 115, 32, 116, 104, 101, > 110, 92, 110, 10, 45, 45, 45, 45, 32, 99, 104, 111, 115, 101, 110, 32, > 97, 115, 32, 116, 104, 101, 32, 110, 101, 120, 116, 32, 115, 116, 97, 114, > 116, 105, 110, 103, 32, 112, 111, 105, 110, 116, 32, 102, 111, 114, 32, 97, > 110, 111, 116, 104, 101, 114, 32, 112, 97, 116, 104, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 32, 39, 83, 39, 32, 116, 111, 32, 115, > 97, 118, 101, 32, 115, 110, 97, 112, 115, 104, 111, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 118, 105, 101, 119, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, > 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, > 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 116, 101, 115, > 116, 105, 109, 97, 103, 101, 50, 100, 32, 52, 48, 48, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 110, 32, 48, 44, 50, 48, 48, 32, 45, 114, 111, > 117, 110, 100, 32, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 119, 91, 48, 93, 32, 45, 49, > 44, 45, 49, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, > 32, 83, 101, 108, 101, 99, 116, 32, 115, 116, 97, 114, 116, 105, 110, 103, > 32, 112, 111, 105, 110, 116, 32, 80, 48, 34, 10, 45, 105, 102, 32, 123, > 33, 110, 97, 114, 103, 40, 36, 102, 105, 114, 115, 116, 95, 116, 105, 109, > 101, 41, 125, 32, 45, 45, 108, 91, 48, 93, 32, 45, 114, 50, 100, 121, > 32, 49, 50, 56, 32, 45, 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, > 48, 10, 45, 97, 108, 101, 114, 116, 32, 34, 91, 71, 92, 52, 55, 77, > 73, 67, 32, 77, 105, 110, 105, 109, 97, 108, 32, 112, 97, 116, 104, 93, > 34, 44, 92, 10, 34, 84, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, > 32, 109, 105, 110, 105, 109, 97, 108, 32, 112, 97, 116, 104, 32, 100, 101, > 109, 111, 32, 105, 108, 108, 117, 115, 116, 114, 97, 116, 101, 115, 32, 104, > 111, 119, 32, 109, 105, 110, 105, 109, 97, 108, 32, 112, 97, 116, 104, 115, > 92, 110, 34, 92, 10, 34, 99, 97, 110, 32, 98, 101, 32, 99, 111, 109, > 112, 117, 116, 101, 100, 32, 105, 110, 32, 105, 109, 97, 103, 101, 115, 32, > 116, 111, 32, 100, 101, 116, 101, 99, 116, 32, 97, 110, 100, 32, 116, 114, > 97, 99, 107, 32, 101, 100, 103, 101, 32, 112, 111, 105, 110, 116, 115, 46, > 92, 110, 34, 92, 10, 34, 85, 115, 101, 32, 121, 111, 117, 114, 32, 109, > 111, 117, 115, 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 32, 100, > 101, 115, 105, 114, 101, 100, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, > 97, 110, 100, 32, 101, 110, 100, 105, 110, 103, 32, 112, 111, 105, 110, 116, > 115, 44, 92, 110, 34, 92, 10, 34, 97, 110, 100, 32, 115, 101, 101, 32, > 119, 104, 97, 116, 32, 105, 115, 32, 116, 104, 101, 32, 109, 105, 110, 105, > 109, 97, 108, 32, 112, 97, 116, 104, 32, 99, 111, 109, 112, 117, 116, 101, > 100, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 104, 101, 115, 101, 32, > 112, 111, 105, 110, 116, 115, 46, 34, 44, 92, 10, 34, 83, 116, 97, 114, > 116, 32, 100, 101, 109, 111, 34, 10, 45, 114, 109, 32, 45, 101, 110, 100, > 108, 32, 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 61, 48, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, > 95, 110, 111, 114, 109, 32, 45, 98, 91, 45, 49, 93, 32, 49, 32, 45, > 102, 91, 45, 49, 93, 32, 101, 120, 112, 40, 45, 105, 47, 49, 48, 41, > 10, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 45, 115, 101, > 108, 101, 99, 116, 91, 48, 93, 32, 48, 32, 80, 48, 61, 64, 45, 49, > 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 48, 93, 32, 64, 123, 45, > 49, 44, 48, 44, 49, 125, 44, 51, 44, 51, 44, 48, 44, 49, 44, 50, > 53, 53, 44, 48, 44, 50, 53, 53, 10, 45, 101, 108, 108, 105, 112, 115, > 101, 91, 48, 93, 32, 64, 123, 45, 49, 44, 48, 44, 49, 125, 44, 51, > 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, > 70, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 109, 105, 110, 40, 36, > 80, 48, 41, 62, 61, 48, 125, 10, 112, 61, 49, 10, 45, 100, 111, 10, > 45, 119, 91, 48, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, 34, 91, > 71, 92, 52, 55, 77, 73, 67, 93, 32, 83, 101, 108, 101, 99, 116, 32, > 101, 110, 100, 105, 110, 103, 32, 112, 111, 105, 110, 116, 32, 80, 34, 36, > 112, 10, 45, 45, 115, 101, 108, 101, 99, 116, 91, 48, 93, 32, 48, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 83, 125, 125, 10, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, > 105, 110, 101, 91, 48, 93, 32, 34, 83, 97, 118, 105, 110, 103, 32, 115, > 110, 97, 112, 115, 104, 111, 116, 46, 46, 46, 34, 44, 53, 44, 53, 44, > 49, 51, 44, 49, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, > 53, 53, 32, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 111, 91, 48, 93, 32, 103, 109, 105, 99, 95, 109, 105, 110, > 105, 109, 97, 108, 95, 112, 97, 116, 104, 46, 112, 110, 103, 10, 45, 119, > 97, 105, 116, 32, 45, 49, 10, 45, 101, 108, 115, 101, 10, 80, 49, 61, > 64, 45, 49, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 48, 93, 32, > 64, 123, 45, 49, 44, 48, 44, 49, 125, 44, 51, 44, 51, 44, 48, 44, > 49, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 48, 93, 32, 64, 123, 45, 49, 44, 48, 44, 49, > 125, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, > 70, 70, 70, 70, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, > 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 109, 105, > 110, 40, 36, 80, 49, 41, 62, 61, 48, 125, 10, 45, 45, 116, 101, 120, > 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 48, 93, 32, 34, 80, 114, > 111, 99, 101, 115, 115, 105, 110, 103, 46, 46, 46, 34, 44, 53, 44, 53, > 44, 49, 51, 44, 49, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, > 50, 53, 53, 32, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 45, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, > 104, 91, 49, 93, 32, 36, 80, 48, 44, 36, 80, 49, 44, 49, 10, 45, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 91, 45, 49, 93, 32, 48, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 91, > 48, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 46, 53, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 48, 93, 44, 48, 32, 45, 111, > 114, 91, 48, 44, 45, 49, 93, 10, 80, 48, 61, 36, 80, 49, 32, 112, > 61, 123, 36, 112, 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 49, 93, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 119, 32, 48, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 112, 97, 99, 109, 97, > 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, > 104, 32, 112, 97, 99, 109, 97, 110, 32, 103, 97, 109, 101, 46, 10, 120, > 95, 112, 97, 99, 109, 97, 110, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 80, 97, 99, 109, 97, 110, > 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 84, > 104, 105, 115, 32, 105, 115, 32, 97, 32, 71, 92, 52, 55, 77, 73, 67, > 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, > 111, 102, 32, 116, 104, 101, 32, 112, 97, 99, 109, 97, 110, 32, 103, 97, > 109, 101, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 32, 77, 111, 118, 101, 32, 116, 104, 101, 32, 112, 97, 99, 109, 97, > 110, 32, 116, 111, 32, 101, 97, 116, 32, 97, 108, 108, 32, 112, 97, 99, > 100, 111, 116, 115, 32, 111, 110, 32, 116, 104, 101, 32, 100, 105, 102, 102, > 101, 114, 101, 110, 116, 32, 108, 101, 118, 101, 108, 115, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 69, 97, 116, 105, 110, 103, 32, 97, 32, 112, 97, > 99, 103, 117, 109, 32, 109, 97, 107, 101, 115, 32, 112, 97, 99, 109, 97, > 110, 32, 105, 110, 118, 105, 110, 99, 105, 98, 108, 101, 32, 102, 111, 114, > 32, 49, 48, 32, 115, 101, 99, 111, 110, 100, 115, 44, 92, 110, 10, 45, > 45, 45, 45, 32, 119, 104, 105, 99, 104, 32, 109, 101, 97, 110, 32, 112, > 97, 99, 109, 97, 110, 32, 99, 97, 110, 32, 101, 97, 116, 32, 103, 104, > 111, 115, 116, 115, 32, 100, 117, 114, 105, 110, 103, 32, 116, 104, 105, 115, > 32, 116, 105, 109, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 69, 97, > 116, 105, 110, 103, 32, 97, 32, 103, 104, 111, 115, 116, 32, 101, 97, 114, > 110, 115, 32, 49, 48, 48, 32, 112, 116, 115, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 69, 97, 116, 105, 110, 103, 32, 97, 32, 99, 104, 101, 114, > 114, 121, 32, 101, 97, 114, 110, 115, 32, 49, 48, 32, 112, 116, 115, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 69, 97, 116, 105, 110, 103, 32, 97, > 32, 115, 116, 114, 97, 119, 98, 101, 114, 114, 121, 32, 101, 97, 114, 110, > 115, 32, 49, 48, 48, 32, 112, 116, 115, 46, 92, 110, 10, 45, 45, 45, > 45, 32, 69, 97, 116, 105, 110, 103, 32, 97, 110, 32, 111, 114, 97, 110, > 103, 101, 32, 101, 97, 114, 110, 115, 32, 49, 48, 48, 48, 32, 112, 116, > 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 69, 97, 116, 105, 110, 103, > 32, 97, 32, 98, 97, 110, 97, 110, 97, 32, 101, 97, 114, 110, 115, 32, > 53, 48, 48, 48, 32, 112, 116, 115, 46, 92, 110, 10, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 32, 65, 114, 114, 111, 119, 32, 107, 101, > 121, 115, 32, 116, 111, 32, 99, 111, 110, 116, 114, 111, 108, 32, 112, 97, > 99, 109, 97, 110, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, > 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, > 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, 114, 109, > 10, 45, 109, 32, 34, 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, > 115, 116, 95, 98, 97, 115, 101, 95, 103, 102, 120, 32, 58, 32, 51, 49, > 44, 49, 57, 32, 45, 99, 105, 114, 99, 108, 101, 91, 45, 49, 93, 32, > 49, 53, 44, 49, 53, 44, 49, 53, 44, 49, 44, 49, 32, 51, 49, 44, > 49, 50, 44, 49, 44, 49, 44, 39, 121, 60, 52, 43, 56, 42, 97, 98, > 115, 40, 99, 111, 115, 40, 120, 42, 48, 46, 51, 43, 48, 46, 50, 53, > 42, 112, 105, 42, 36, 34, 34, 49, 41, 41, 39, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 121, 34, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 52, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, 115, > 116, 95, 115, 116, 97, 110, 100, 97, 114, 100, 95, 103, 102, 120, 32, 50, > 53, 53, 44, 48, 44, 48, 44, 36, 62, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 103, 104, 111, 115, 116, 48, 95, 36, 62, 10, 45, 95, 112, 97, > 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 115, 116, 97, 110, 100, > 97, 114, 100, 95, 103, 102, 120, 32, 48, 44, 50, 53, 53, 44, 50, 50, > 50, 44, 36, 62, 32, 45, 110, 109, 91, 45, 49, 93, 32, 103, 104, 111, > 115, 116, 49, 95, 36, 62, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, > 103, 104, 111, 115, 116, 95, 115, 116, 97, 110, 100, 97, 114, 100, 95, 103, > 102, 120, 32, 50, 53, 53, 44, 49, 56, 52, 44, 50, 50, 50, 44, 36, > 62, 32, 45, 110, 109, 91, 45, 49, 93, 32, 103, 104, 111, 115, 116, 50, > 95, 36, 62, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, > 115, 116, 95, 115, 116, 97, 110, 100, 97, 114, 100, 95, 103, 102, 120, 32, > 50, 53, 53, 44, 49, 56, 52, 44, 55, 49, 44, 36, 62, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 103, 104, 111, 115, 116, 51, 95, 36, 62, 10, > 45, 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 97, > 102, 114, 97, 105, 100, 95, 103, 102, 120, 32, 36, 62, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 103, 104, 111, 115, 116, 97, 95, 36, 62, 10, 45, > 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 98, 97, > 115, 101, 95, 103, 102, 120, 32, 36, 62, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 54, 44, 49, 54, 44, 49, 44, 49, 44, 50, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 103, 104, 111, 115, 116, 109, 95, 36, 62, 10, 45, > 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 115, 116, > 97, 110, 100, 97, 114, 100, 95, 103, 102, 120, 32, 48, 44, 48, 44, 48, > 44, 36, 62, 32, 45, 110, 109, 91, 45, 49, 93, 32, 103, 104, 111, 115, > 116, 100, 95, 36, 62, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, 112, > 97, 99, 109, 97, 110, 95, 103, 102, 120, 32, 36, 62, 32, 45, 110, 109, > 91, 45, 50, 93, 32, 112, 97, 99, 109, 97, 110, 95, 36, 62, 32, 45, > 110, 109, 91, 45, 49, 93, 32, 112, 97, 99, 109, 97, 110, 109, 95, 36, > 62, 10, 45, 100, 111, 110, 101, 10, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 103, 104, 111, 115, 116, 100, 95, 48, 93, 32, 48, 32, 45, > 33, 61, 91, 45, 49, 93, 32, 48, 32, 45, 110, 109, 91, 45, 49, 93, > 32, 103, 104, 111, 115, 116, 100, 109, 10, 45, 95, 112, 97, 99, 109, 97, > 110, 95, 99, 104, 101, 114, 114, 121, 95, 103, 102, 120, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 102, 114, 117, 105, 116, 48, 32, 45, 95, 112, 97, > 99, 109, 97, 110, 95, 115, 116, 114, 97, 119, 98, 101, 114, 114, 121, 95, > 103, 102, 120, 32, 45, 110, 109, 91, 45, 49, 93, 32, 102, 114, 117, 105, > 116, 49, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, 111, 114, 97, 110, > 103, 101, 95, 103, 102, 120, 32, 45, 110, 109, 91, 45, 49, 93, 32, 102, > 114, 117, 105, 116, 50, 32, 45, 95, 112, 97, 99, 109, 97, 110, 95, 98, > 97, 110, 97, 110, 97, 95, 103, 102, 120, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 102, 114, 117, 105, 116, 51, 10, 50, 48, 44, 50, 44, 49, 44, > 51, 44, 50, 48, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 103, 97, > 116, 101, 10, 115, 99, 111, 114, 101, 48, 61, 34, 49, 48, 34, 32, 115, > 99, 111, 114, 101, 49, 61, 34, 49, 48, 48, 34, 32, 115, 99, 111, 114, > 101, 50, 61, 34, 49, 48, 48, 48, 34, 32, 115, 99, 111, 114, 101, 51, > 61, 34, 53, 48, 48, 48, 34, 32, 115, 99, 111, 114, 101, 52, 61, 34, > 65, 114, 103, 104, 33, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 53, > 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 123, 115, 99, 111, 114, > 101, 36, 62, 125, 44, 48, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, > 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 45, 49, 93, 32, 48, 32, 45, 101, 120, 112, 97, 110, > 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, 44, 48, 32, 45, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 45, 110, 109, 91, > 45, 49, 93, 32, 115, 99, 111, 114, 101, 109, 36, 62, 32, 45, 110, 109, > 91, 45, 50, 93, 32, 115, 99, 111, 114, 101, 36, 62, 10, 45, 100, 111, > 110, 101, 10, 116, 105, 109, 101, 52, 61, 50, 53, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 32, 116, 105, 109, 101, 51, 61, 50, 53, 53, 44, 50, > 53, 53, 44, 51, 50, 32, 116, 105, 109, 101, 50, 61, 50, 53, 53, 44, > 49, 50, 56, 44, 51, 50, 32, 116, 105, 109, 101, 49, 61, 50, 53, 53, > 44, 51, 50, 44, 51, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 49, 32, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 60, 34, 32, 115, > 34, 44, 48, 44, 48, 44, 50, 51, 44, 49, 44, 36, 123, 116, 105, 109, > 101, 123, 109, 105, 110, 40, 52, 44, 114, 111, 117, 110, 100, 40, 40, 36, > 60, 43, 49, 41, 47, 50, 41, 41, 125, 125, 32, 45, 110, 109, 91, 45, > 49, 93, 32, 116, 105, 109, 101, 36, 60, 32, 45, 100, 111, 110, 101, 10, > 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 71, 101, 116, 32, 82, 101, > 97, 100, 121, 33, 34, 44, 48, 44, 48, 44, 51, 50, 44, 49, 44, 50, > 53, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 48, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, > 93, 32, 52, 44, 48, 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, > 49, 93, 32, 56, 32, 45, 114, 91, 45, 50, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 110, 109, 91, 45, 50, > 93, 32, 103, 101, 116, 95, 114, 101, 97, 100, 121, 32, 45, 110, 109, 91, > 45, 49, 93, 32, 103, 101, 116, 95, 114, 101, 97, 100, 121, 109, 10, 48, > 32, 45, 116, 91, 45, 49, 93, 32, 34, 71, 97, 109, 101, 92, 110, 79, > 118, 101, 114, 33, 34, 44, 48, 44, 48, 44, 53, 51, 44, 49, 44, 50, > 53, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 48, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, > 93, 32, 52, 44, 48, 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, > 49, 93, 32, 56, 32, 45, 114, 91, 45, 50, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 110, 109, 91, 45, 50, > 93, 32, 103, 97, 109, 101, 95, 111, 118, 101, 114, 32, 45, 110, 109, 91, > 45, 49, 93, 32, 103, 97, 109, 101, 95, 111, 118, 101, 114, 109, 10, 115, > 99, 111, 114, 101, 61, 48, 32, 108, 101, 118, 101, 108, 61, 45, 49, 32, > 108, 105, 118, 101, 115, 61, 51, 32, 105, 115, 95, 113, 117, 105, 116, 61, > 48, 10, 45, 100, 111, 10, 45, 105, 102, 32, 123, 36, 108, 101, 118, 101, > 108, 60, 48, 125, 10, 95, 114, 108, 101, 118, 101, 108, 61, 51, 51, 32, > 95, 103, 108, 101, 118, 101, 108, 61, 51, 51, 32, 95, 98, 108, 101, 118, > 101, 108, 61, 50, 53, 53, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, > 109, 97, 112, 95, 108, 101, 118, 101, 108, 123, 40, 40, 45, 36, 108, 101, > 118, 101, 108, 45, 49, 41, 37, 54, 41, 43, 49, 125, 32, 109, 119, 61, > 123, 119, 125, 32, 109, 104, 61, 123, 104, 125, 32, 109, 119, 50, 61, 123, > 105, 110, 116, 40, 119, 47, 50, 41, 125, 32, 109, 104, 50, 61, 123, 105, > 110, 116, 40, 104, 47, 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, 108, > 101, 118, 101, 108, 60, 45, 54, 125, 32, 45, 114, 101, 112, 108, 97, 99, > 101, 91, 45, 49, 93, 32, 51, 44, 50, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 110, 109, 91, 45, 49, 93, 32, 109, 97, 112, 48, 32, 45, 105, > 91, 109, 97, 112, 93, 32, 91, 45, 49, 93, 10, 45, 45, 115, 104, 105, > 102, 116, 91, 109, 97, 112, 93, 32, 45, 49, 44, 48, 32, 45, 45, 115, > 104, 105, 102, 116, 91, 109, 97, 112, 93, 32, 48, 44, 45, 49, 32, 45, > 45, 115, 104, 105, 102, 116, 91, 109, 97, 112, 93, 32, 49, 44, 48, 32, > 45, 45, 115, 104, 105, 102, 116, 91, 109, 97, 112, 93, 32, 48, 44, 49, > 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 122, 32, 45, 33, 61, > 91, 45, 49, 93, 32, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, > 97, 110, 95, 103, 111, 10, 45, 45, 61, 61, 91, 109, 97, 112, 93, 32, > 49, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 61, 91, 45, > 49, 93, 32, 49, 44, 36, 109, 119, 50, 44, 36, 109, 104, 50, 32, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 44, 91, > 45, 50, 93, 44, 51, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 102, > 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 50, 44, 48, 44, > 105, 102, 40, 105, 61, 61, 56, 44, 49, 44, 105, 102, 40, 105, 61, 61, > 49, 44, 50, 44, 105, 102, 40, 105, 61, 61, 52, 44, 51, 44, 105, 41, > 41, 41, 41, 39, 32, 45, 110, 109, 91, 45, 49, 93, 32, 112, 97, 116, > 104, 10, 45, 45, 61, 61, 91, 109, 97, 112, 93, 32, 50, 32, 112, 97, > 99, 100, 111, 116, 115, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 108, 101, 118, 101, 108, 61, 123, 45, 36, 108, > 101, 118, 101, 108, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 102, 91, > 109, 97, 112, 93, 32, 39, 105, 102, 40, 105, 62, 61, 52, 44, 48, 44, > 105, 41, 39, 32, 45, 45, 61, 61, 91, 109, 97, 112, 93, 32, 49, 32, > 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, > 44, 48, 32, 45, 114, 91, 45, 49, 93, 32, 49, 54, 48, 48, 37, 44, > 49, 54, 48, 48, 37, 32, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, > 32, 57, 32, 45, 98, 91, 45, 49, 93, 32, 50, 10, 45, 103, 91, 45, > 49, 93, 32, 120, 121, 32, 45, 97, 98, 115, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 103, 101, 91, > 45, 49, 93, 32, 56, 48, 37, 32, 45, 98, 91, 45, 49, 93, 32, 50, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 115, 104, 114, > 105, 110, 107, 95, 120, 121, 91, 45, 49, 93, 32, 49, 54, 10, 45, 45, > 42, 91, 45, 49, 93, 32, 36, 95, 103, 108, 101, 118, 101, 108, 32, 45, > 45, 42, 91, 45, 50, 93, 32, 36, 95, 98, 108, 101, 118, 101, 108, 32, > 45, 42, 91, 45, 51, 93, 32, 36, 95, 114, 108, 101, 118, 101, 108, 32, > 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 49, 54, 44, 49, > 54, 44, 49, 44, 49, 44, 39, 120, 39, 32, 45, 45, 45, 91, 109, 97, > 112, 93, 32, 49, 32, 45, 109, 97, 120, 91, 45, 49, 93, 32, 48, 32, > 45, 42, 91, 45, 49, 93, 32, 49, 54, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 54, 48, 48, 37, 44, 49, 54, 48, 48, 37, 10, 49, 54, 44, > 49, 54, 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 114, 91, 45, 51, > 44, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 10, 49, 54, 44, 49, 54, 44, 49, 44, 51, 32, 45, 95, > 112, 97, 99, 109, 97, 110, 95, 112, 97, 99, 100, 111, 116, 115, 95, 103, > 102, 120, 32, 45, 95, 112, 97, 99, 109, 97, 110, 95, 112, 97, 99, 103, > 117, 109, 95, 103, 102, 120, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, > 32, 121, 10, 45, 119, 97, 114, 112, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 111, > 114, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, > 49, 48, 48, 37, 44, 123, 104, 43, 50, 52, 125, 44, 49, 44, 51, 44, > 48, 44, 48, 44, 48, 44, 49, 10, 45, 116, 91, 45, 49, 93, 32, 34, > 76, 105, 118, 101, 115, 32, 58, 34, 44, 49, 48, 44, 48, 44, 50, 51, > 44, 49, 44, 50, 53, 53, 32, 45, 116, 91, 45, 49, 93, 32, 34, 83, > 99, 111, 114, 101, 32, 58, 34, 44, 123, 119, 45, 49, 52, 48, 125, 44, > 48, 44, 50, 51, 44, 49, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, > 108, 105, 118, 101, 115, 32, 45, 45, 114, 91, 112, 97, 99, 109, 97, 110, > 95, 50, 93, 32, 49, 50, 44, 49, 50, 44, 49, 44, 52, 44, 50, 32, > 45, 114, 91, 45, 49, 93, 32, 123, 49, 48, 48, 42, 36, 108, 105, 118, > 101, 115, 125, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 44, 48, 44, > 50, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 57, 48, > 44, 55, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 109, 91, 45, 49, 93, 32, 118, 105, 115, 117, 10, 45, > 119, 91, 118, 105, 115, 117, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 80, 97, 99, 109, 97, > 110, 34, 32, 45, 99, 117, 114, 115, 111, 114, 91, 48, 93, 32, 48, 10, > 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 76, 101, 118, 101, 108, 32, > 34, 36, 108, 101, 118, 101, 108, 44, 48, 44, 48, 44, 53, 51, 44, 49, > 44, 49, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 48, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, > 93, 32, 52, 44, 48, 32, 40, 48, 44, 50, 53, 53, 94, 48, 44, 50, > 53, 53, 94, 48, 44, 48, 41, 32, 45, 45, 109, 97, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, 32, 56, 10, 45, 110, 109, > 91, 45, 49, 93, 32, 108, 101, 118, 101, 108, 95, 78, 32, 45, 110, 109, > 91, 45, 50, 93, 32, 108, 101, 118, 101, 108, 109, 95, 78, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 52, 32, 120, 103, 36, 62, 61, 123, 49, 54, > 42, 36, 109, 119, 50, 125, 32, 121, 103, 36, 62, 61, 123, 49, 54, 42, > 36, 109, 104, 50, 43, 52, 42, 36, 62, 125, 32, 100, 103, 36, 62, 61, > 51, 32, 109, 103, 36, 62, 61, 48, 32, 45, 100, 111, 110, 101, 10, 120, > 112, 61, 123, 49, 54, 42, 49, 48, 125, 32, 121, 112, 61, 123, 49, 54, > 42, 50, 49, 125, 32, 100, 112, 61, 45, 49, 32, 112, 97, 99, 103, 117, > 109, 95, 116, 105, 109, 101, 114, 61, 45, 49, 32, 102, 114, 117, 105, 116, > 95, 116, 105, 109, 101, 114, 61, 64, 124, 32, 100, 121, 105, 110, 103, 95, > 112, 97, 99, 109, 97, 110, 61, 48, 32, 105, 115, 95, 103, 101, 116, 95, > 114, 101, 97, 100, 121, 61, 49, 10, 120, 115, 99, 111, 114, 101, 61, 48, > 32, 121, 115, 99, 111, 114, 101, 61, 48, 32, 110, 115, 99, 111, 114, 101, > 61, 48, 32, 111, 115, 99, 111, 114, 101, 61, 48, 10, 45, 100, 111, 10, > 116, 61, 123, 105, 110, 116, 40, 54, 42, 64, 124, 41, 37, 52, 125, 32, > 108, 101, 102, 116, 61, 123, 105, 102, 40, 36, 112, 97, 99, 103, 117, 109, > 95, 116, 105, 109, 101, 114, 62, 61, 48, 44, 49, 48, 45, 64, 124, 43, > 36, 112, 97, 99, 103, 117, 109, 95, 116, 105, 109, 101, 114, 44, 45, 49, > 41, 125, 10, 91, 118, 105, 115, 117, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 52, 10, 109, 103, 61, 36, 123, 109, 103, 36, 62, 125, 32, 120, > 103, 61, 36, 123, 120, 103, 36, 62, 125, 32, 121, 103, 61, 123, 36, 123, > 121, 103, 36, 62, 125, 43, 50, 52, 125, 10, 45, 105, 102, 32, 123, 36, > 109, 103, 61, 61, 48, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 103, > 104, 111, 115, 116, 36, 62, 95, 36, 116, 93, 44, 36, 120, 103, 44, 36, > 121, 103, 44, 48, 44, 48, 44, 49, 44, 91, 103, 104, 111, 115, 116, 109, > 95, 36, 116, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 109, 103, 61, > 61, 49, 125, 32, 116, 50, 61, 123, 105, 102, 40, 36, 108, 101, 102, 116, > 62, 55, 44, 36, 116, 44, 105, 102, 40, 36, 108, 101, 102, 116, 62, 51, > 44, 105, 110, 116, 40, 49, 50, 42, 64, 124, 41, 37, 52, 44, 105, 110, > 116, 40, 50, 52, 42, 64, 124, 41, 37, 52, 41, 41, 125, 32, 45, 106, > 91, 45, 49, 93, 32, 91, 103, 104, 111, 115, 116, 97, 95, 36, 116, 50, > 93, 44, 36, 120, 103, 44, 36, 121, 103, 44, 48, 44, 48, 44, 49, 44, > 91, 103, 104, 111, 115, 116, 109, 95, 36, 116, 93, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 109, 103, 61, 61, 50, 125, 32, 45, 106, 91, 45, 49, > 93, 32, 91, 103, 104, 111, 115, 116, 100, 95, 36, 116, 93, 44, 36, 120, > 103, 44, 36, 121, 103, 44, 48, 44, 48, 44, 48, 46, 56, 44, 91, 103, > 104, 111, 115, 116, 100, 109, 93, 10, 45, 101, 108, 115, 101, 32, 45, 106, > 91, 45, 49, 93, 32, 91, 103, 104, 111, 115, 116, 36, 62, 95, 36, 116, > 93, 44, 36, 120, 103, 44, 36, 121, 103, 44, 48, 44, 48, 44, 123, 36, > 109, 103, 45, 50, 125, 44, 91, 103, 104, 111, 115, 116, 109, 95, 36, 116, > 93, 32, 45, 106, 91, 45, 49, 93, 32, 91, 103, 104, 111, 115, 116, 100, > 95, 36, 116, 93, 44, 36, 120, 103, 44, 36, 121, 103, 44, 48, 44, 48, > 44, 49, 44, 91, 103, 104, 111, 115, 116, 100, 109, 93, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 36, 100, > 121, 105, 110, 103, 95, 112, 97, 99, 109, 97, 110, 10, 45, 95, 112, 97, > 99, 109, 97, 110, 95, 112, 97, 99, 109, 97, 110, 95, 103, 102, 120, 32, > 123, 36, 100, 121, 105, 110, 103, 95, 112, 97, 99, 109, 97, 110, 47, 50, > 125, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 50, 44, 45, 49, 93, > 32, 123, 57, 48, 42, 40, 97, 98, 115, 40, 36, 100, 112, 41, 45, 49, > 41, 125, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 36, > 120, 112, 44, 123, 50, 52, 43, 36, 121, 112, 125, 44, 48, 44, 48, 44, > 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, > 50, 44, 45, 49, 93, 10, 100, 121, 105, 110, 103, 95, 112, 97, 99, 109, > 97, 110, 61, 123, 36, 100, 121, 105, 110, 103, 95, 112, 97, 99, 109, 97, > 110, 43, 49, 125, 10, 45, 105, 102, 32, 123, 36, 100, 121, 105, 110, 103, > 95, 112, 97, 99, 109, 97, 110, 62, 54, 52, 125, 10, 45, 105, 102, 32, > 123, 36, 108, 105, 118, 101, 115, 33, 61, 49, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 106, 91, 45, 49, 93, 32, 91, 103, 97, 109, 101, 95, 111, > 118, 101, 114, 93, 44, 123, 40, 119, 45, 64, 123, 103, 97, 109, 101, 95, > 111, 118, 101, 114, 44, 119, 125, 41, 47, 50, 125, 44, 123, 49, 50, 43, > 40, 104, 45, 64, 123, 103, 97, 109, 101, 95, 111, 118, 101, 114, 44, 104, > 125, 41, 47, 50, 125, 44, 48, 44, 48, 44, 123, 109, 105, 110, 40, 49, > 44, 40, 36, 100, 121, 105, 110, 103, 95, 112, 97, 99, 109, 97, 110, 45, > 54, 52, 41, 47, 53, 48, 41, 125, 44, 91, 103, 97, 109, 101, 95, 111, > 118, 101, 114, 109, 93, 44, 50, 53, 53, 10, 45, 114, 101, 99, 116, 97, > 110, 103, 108, 101, 91, 45, 49, 93, 32, 57, 48, 44, 55, 44, 49, 48, > 49, 44, 49, 56, 44, 49, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 108, 115, 101, 10, 45, 45, 114, 111, 116, 97, 116, 101, 91, 112, > 97, 99, 109, 97, 110, 95, 36, 116, 44, 112, 97, 99, 109, 97, 110, 109, > 95, 36, 116, 93, 32, 123, 57, 48, 42, 40, 97, 98, 115, 40, 36, 100, > 112, 41, 45, 49, 41, 125, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, > 50, 93, 44, 36, 120, 112, 44, 123, 50, 52, 43, 36, 121, 112, 125, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, > 108, 101, 102, 116, 62, 61, 48, 34, 32, 38, 38, 32, 34, 40, 36, 108, > 101, 102, 116, 62, 61, 53, 34, 32, 124, 124, 32, 34, 36, 116, 60, 61, > 50, 41, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 116, 105, 109, 101, > 123, 114, 111, 117, 110, 100, 40, 36, 108, 101, 102, 116, 41, 125, 93, 44, > 123, 40, 119, 45, 64, 123, 116, 105, 109, 101, 48, 44, 119, 125, 41, 47, > 50, 45, 49, 48, 125, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 116, 91, 45, 49, 93, 32, 36, 115, 99, > 111, 114, 101, 44, 123, 119, 45, 54, 53, 125, 44, 49, 44, 50, 50, 44, > 49, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 105, 115, 95, 103, > 101, 116, 95, 114, 101, 97, 100, 121, 125, 10, 45, 106, 91, 45, 49, 93, > 32, 91, 108, 101, 118, 101, 108, 95, 78, 93, 44, 123, 40, 119, 45, 64, > 123, 108, 101, 118, 101, 108, 95, 78, 44, 119, 125, 41, 47, 50, 125, 44, > 123, 49, 50, 43, 40, 104, 45, 49, 46, 53, 42, 64, 123, 108, 101, 118, > 101, 108, 95, 78, 44, 104, 125, 41, 47, 50, 125, 44, 48, 44, 48, 44, > 49, 44, 91, 108, 101, 118, 101, 108, 109, 95, 78, 93, 10, 45, 105, 102, > 32, 123, 105, 110, 116, 40, 64, 124, 42, 52, 41, 37, 50, 125, 32, 45, > 106, 91, 45, 49, 93, 32, 91, 103, 101, 116, 95, 114, 101, 97, 100, 121, > 93, 44, 123, 40, 119, 45, 64, 123, 103, 101, 116, 95, 114, 101, 97, 100, > 121, 44, 119, 125, 41, 47, 50, 125, 44, 123, 50, 52, 43, 40, 104, 43, > 64, 123, 103, 101, 116, 95, 114, 101, 97, 100, 121, 44, 104, 125, 41, 47, > 50, 125, 44, 48, 44, 48, 44, 49, 44, 91, 103, 101, 116, 95, 114, 101, > 97, 100, 121, 109, 93, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 111, 115, > 99, 111, 114, 101, 62, 48, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, > 115, 99, 111, 114, 101, 36, 110, 115, 99, 111, 114, 101, 93, 44, 36, 120, > 115, 99, 111, 114, 101, 44, 36, 121, 115, 99, 111, 114, 101, 44, 48, 44, > 48, 44, 36, 111, 115, 99, 111, 114, 101, 44, 91, 115, 99, 111, 114, 101, > 109, 36, 110, 115, 99, 111, 114, 101, 93, 44, 50, 53, 53, 32, 111, 115, > 99, 111, 114, 101, 61, 123, 36, 111, 115, 99, 111, 114, 101, 45, 48, 46, > 48, 52, 125, 32, 121, 115, 99, 111, 114, 101, 61, 123, 36, 121, 115, 99, > 111, 114, 101, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 106, > 91, 45, 49, 93, 32, 91, 103, 97, 116, 101, 93, 44, 49, 53, 56, 44, > 50, 50, 51, 44, 48, 44, 48, 44, 48, 46, 54, 10, 45, 119, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, > 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, > 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, > 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, > 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, > 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 52, 10, 120, 103, 61, 36, 123, 120, 103, 36, 62, 125, 32, 121, > 103, 61, 36, 123, 121, 103, 36, 62, 125, 32, 100, 103, 61, 36, 123, 100, > 103, 36, 62, 125, 32, 109, 103, 61, 36, 123, 109, 103, 36, 62, 125, 10, > 45, 105, 102, 32, 123, 109, 97, 120, 40, 97, 98, 115, 40, 36, 120, 103, > 45, 36, 120, 112, 41, 44, 97, 98, 115, 40, 36, 121, 103, 45, 36, 121, > 112, 41, 41, 60, 61, 56, 125, 10, 45, 105, 102, 32, 123, 36, 109, 103, > 61, 61, 48, 34, 32, 38, 38, 32, 34, 33, 36, 100, 121, 105, 110, 103, > 95, 112, 97, 99, 109, 97, 110, 125, 32, 100, 121, 105, 110, 103, 95, 112, > 97, 99, 109, 97, 110, 61, 49, 10, 120, 115, 99, 111, 114, 101, 61, 36, > 120, 112, 32, 121, 115, 99, 111, 114, 101, 61, 123, 36, 121, 112, 43, 49, > 50, 125, 32, 111, 115, 99, 111, 114, 101, 61, 49, 32, 110, 115, 99, 111, > 114, 101, 61, 52, 10, 45, 101, 108, 105, 102, 32, 123, 36, 109, 103, 61, > 61, 49, 125, 32, 109, 103, 61, 50, 32, 109, 103, 36, 62, 61, 36, 109, > 103, 32, 115, 99, 111, 114, 101, 61, 123, 36, 115, 99, 111, 114, 101, 43, > 49, 48, 48, 125, 10, 120, 115, 99, 111, 114, 101, 61, 36, 120, 112, 32, > 121, 115, 99, 111, 114, 101, 61, 123, 36, 121, 112, 43, 49, 50, 125, 32, > 111, 115, 99, 111, 114, 101, 61, 49, 32, 110, 115, 99, 111, 114, 101, 61, > 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 109, 103, 62, 61, 50, 34, 32, 38, 38, 32, > 34, 40, 36, 120, 103, 62, 62, 52, 41, 61, 61, 36, 109, 119, 50, 34, > 32, 38, 38, 32, 34, 40, 36, 121, 103, 62, 62, 52, 41, 61, 61, 36, > 109, 104, 50, 125, 10, 109, 103, 61, 123, 36, 109, 103, 43, 48, 46, 48, > 49, 125, 10, 45, 105, 102, 32, 123, 36, 109, 103, 62, 61, 51, 125, 32, > 109, 103, 61, 48, 32, 120, 103, 61, 123, 36, 120, 103, 38, 45, 50, 125, > 32, 121, 103, 61, 123, 36, 121, 103, 38, 45, 50, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 109, 103, 36, 62, 61, 36, 109, 103, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 40, 36, 120, 103, 38, 49, > 53, 41, 34, 32, 38, 38, 32, 34, 33, 40, 36, 121, 103, 38, 49, 53, > 41, 125, 10, 40, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, 44, > 123, 63, 125, 59, 48, 44, 49, 44, 50, 44, 51, 41, 10, 45, 105, 102, > 32, 123, 36, 109, 103, 60, 50, 125, 10, 45, 61, 91, 45, 49, 93, 32, > 123, 63, 40, 48, 46, 54, 44, 49, 41, 125, 44, 123, 105, 102, 40, 36, > 109, 103, 61, 61, 48, 44, 100, 88, 48, 61, 36, 120, 112, 45, 36, 120, > 103, 59, 100, 89, 48, 61, 36, 121, 112, 45, 36, 121, 103, 59, 105, 102, > 40, 97, 98, 115, 40, 100, 88, 48, 41, 62, 97, 98, 115, 40, 100, 89, > 48, 41, 44, 105, 102, 40, 100, 88, 48, 62, 48, 44, 48, 44, 50, 41, > 44, 105, 102, 40, 100, 89, 48, 62, 48, 44, 49, 44, 51, 41, 41, 44, > 92, 10, 100, 88, 49, 61, 36, 120, 112, 45, 36, 120, 103, 59, 100, 89, > 49, 61, 36, 121, 112, 45, 36, 121, 103, 59, 105, 102, 40, 97, 98, 115, > 40, 100, 88, 49, 41, 60, 97, 98, 115, 40, 100, 89, 49, 41, 44, 105, > 102, 40, 100, 88, 49, 62, 48, 44, 50, 44, 48, 41, 44, 105, 102, 40, > 100, 89, 49, 62, 48, 44, 51, 44, 49, 41, 41, 41, 125, 10, 45, 61, > 91, 45, 49, 93, 32, 48, 44, 123, 40, 36, 100, 103, 43, 50, 41, 37, > 52, 125, 10, 45, 105, 102, 32, 36, 105, 115, 95, 103, 101, 116, 95, 114, > 101, 97, 100, 121, 32, 45, 61, 91, 45, 49, 93, 32, 48, 46, 56, 44, > 64, 123, 112, 97, 116, 104, 44, 40, 123, 36, 120, 103, 62, 62, 52, 125, > 44, 123, 36, 121, 103, 62, 62, 52, 125, 41, 125, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, 61, 91, 45, 49, 93, 32, > 49, 44, 64, 123, 112, 97, 116, 104, 44, 40, 123, 36, 120, 103, 62, 62, > 52, 125, 44, 123, 36, 121, 103, 62, 62, 52, 125, 41, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 115, 111, 114, 116, 91, 45, 49, 93, 32, 45, > 44, 120, 32, 45, 114, 101, 112, 101, 97, 116, 32, 52, 32, 100, 61, 123, > 105, 40, 36, 62, 44, 49, 41, 125, 32, 45, 105, 102, 32, 64, 123, 99, > 97, 110, 95, 103, 111, 44, 40, 123, 36, 120, 103, 62, 62, 52, 125, 44, > 123, 36, 121, 103, 62, 62, 52, 125, 44, 36, 100, 41, 125, 32, 100, 103, > 61, 36, 100, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, > 102, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 100, 103, 36, 62, 61, 36, 100, 10, 45, 101, 110, 100, 105, 102, 10, 117, > 61, 123, 68, 61, 36, 123, 100, 103, 36, 62, 125, 59, 40, 68, 61, 61, > 48, 41, 45, 40, 68, 61, 61, 50, 41, 125, 10, 118, 61, 123, 68, 61, > 36, 123, 100, 103, 36, 62, 125, 59, 40, 68, 61, 61, 49, 41, 45, 40, > 68, 61, 61, 51, 41, 125, 10, 120, 103, 36, 62, 61, 123, 40, 36, 120, > 103, 43, 36, 117, 42, 40, 49, 43, 40, 36, 109, 103, 61, 61, 48, 41, > 41, 41, 37, 40, 49, 54, 42, 36, 109, 119, 41, 125, 10, 121, 103, 36, > 62, 61, 123, 40, 36, 121, 103, 43, 36, 118, 42, 40, 49, 43, 40, 36, > 109, 103, 61, 61, 48, 41, 41, 41, 37, 40, 49, 54, 42, 36, 109, 104, > 41, 125, 10, 45, 100, 111, 110, 101, 10, 45, 119, 97, 105, 116, 32, 50, > 50, 10, 45, 105, 102, 32, 123, 33, 36, 100, 121, 105, 110, 103, 95, 112, > 97, 99, 109, 97, 110, 125, 10, 100, 61, 123, 105, 102, 40, 64, 123, 33, > 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, 125, 44, 49, 44, 105, > 102, 40, 64, 123, 33, 44, 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, > 44, 50, 44, 105, 102, 40, 64, 123, 33, 44, 65, 82, 82, 79, 87, 76, > 69, 70, 84, 125, 44, 51, 44, 105, 102, 40, 64, 123, 33, 44, 65, 82, > 82, 79, 87, 85, 80, 125, 44, 52, 44, 36, 100, 112, 41, 41, 41, 41, > 125, 10, 45, 105, 102, 32, 123, 33, 40, 36, 120, 112, 38, 49, 53, 41, > 34, 32, 38, 38, 32, 34, 33, 40, 36, 121, 112, 38, 49, 53, 41, 125, > 10, 105, 61, 64, 123, 109, 97, 112, 44, 40, 123, 36, 120, 112, 62, 62, > 52, 125, 44, 123, 36, 121, 112, 62, 62, 52, 125, 41, 125, 10, 45, 105, > 102, 32, 123, 36, 105, 61, 61, 50, 125, 32, 115, 99, 111, 114, 101, 61, > 123, 36, 115, 99, 111, 114, 101, 43, 49, 48, 125, 32, 112, 97, 99, 100, > 111, 116, 115, 61, 123, 36, 112, 97, 99, 100, 111, 116, 115, 45, 49, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 105, 61, 61, 51, 125, 32, 112, > 97, 99, 103, 117, 109, 95, 116, 105, 109, 101, 114, 61, 64, 124, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 52, 32, 45, 105, 102, 32, 123, 33, 36, > 123, 109, 103, 36, 62, 125, 125, 32, 109, 103, 36, 62, 61, 49, 32, 100, > 103, 36, 62, 61, 123, 40, 36, 123, 100, 103, 36, 62, 125, 43, 50, 41, > 37, 52, 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 105, 62, 61, 52, 125, 32, 115, > 99, 111, 114, 101, 61, 123, 36, 115, 99, 111, 114, 101, 43, 36, 123, 115, > 99, 111, 114, 101, 123, 36, 105, 45, 52, 125, 125, 125, 32, 120, 115, 99, > 111, 114, 101, 61, 36, 120, 112, 32, 121, 115, 99, 111, 114, 101, 61, 123, > 36, 121, 112, 43, 49, 50, 125, 32, 111, 115, 99, 111, 114, 101, 61, 49, > 32, 110, 115, 99, 111, 114, 101, 61, 123, 36, 105, 45, 52, 125, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 61, 91, 109, 97, 112, 93, 32, 48, 44, > 123, 36, 120, 112, 62, 62, 52, 125, 44, 123, 36, 121, 112, 62, 62, 52, > 125, 10, 49, 54, 44, 49, 54, 44, 49, 44, 51, 32, 45, 106, 91, 118, > 105, 115, 117, 93, 32, 91, 45, 49, 93, 44, 36, 120, 112, 44, 123, 50, > 52, 43, 36, 121, 112, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 100, > 61, 123, 105, 102, 40, 64, 123, 99, 97, 110, 95, 103, 111, 44, 40, 123, > 36, 120, 112, 62, 62, 52, 125, 44, 123, 36, 121, 112, 62, 62, 52, 125, > 44, 123, 97, 98, 115, 40, 36, 100, 41, 45, 49, 125, 41, 125, 44, 36, > 100, 44, 36, 100, 112, 41, 125, 10, 100, 61, 123, 105, 102, 40, 64, 123, > 99, 97, 110, 95, 103, 111, 44, 40, 123, 36, 120, 112, 62, 62, 52, 125, > 44, 123, 36, 121, 112, 62, 62, 52, 125, 44, 123, 97, 98, 115, 40, 36, > 100, 41, 45, 49, 125, 41, 125, 44, 36, 100, 44, 45, 97, 98, 115, 40, > 36, 100, 112, 41, 41, 125, 10, 100, 112, 61, 36, 100, 10, 45, 101, 108, > 115, 101, 32, 100, 112, 61, 123, 105, 102, 40, 97, 98, 115, 40, 36, 100, > 45, 36, 100, 112, 41, 61, 61, 50, 44, 36, 100, 44, 36, 100, 112, 41, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 105, 115, 95, 103, 101, 116, 95, > 114, 101, 97, 100, 121, 61, 123, 105, 102, 40, 36, 100, 112, 62, 48, 44, > 48, 44, 36, 105, 115, 95, 103, 101, 116, 95, 114, 101, 97, 100, 121, 41, > 125, 10, 117, 61, 123, 40, 36, 100, 112, 61, 61, 49, 41, 45, 40, 36, > 100, 112, 61, 61, 51, 41, 125, 10, 118, 61, 123, 40, 36, 100, 112, 61, > 61, 50, 41, 45, 40, 36, 100, 112, 61, 61, 52, 41, 125, 10, 120, 112, > 61, 123, 40, 36, 120, 112, 43, 50, 42, 36, 117, 41, 37, 40, 49, 54, > 42, 36, 109, 119, 41, 125, 10, 121, 112, 61, 123, 40, 36, 121, 112, 43, > 50, 42, 36, 118, 41, 37, 40, 49, 54, 42, 36, 109, 104, 41, 125, 10, > 45, 105, 102, 32, 123, 36, 112, 97, 99, 103, 117, 109, 95, 116, 105, 109, > 101, 114, 62, 61, 48, 34, 32, 38, 38, 32, 34, 64, 124, 62, 36, 112, > 97, 99, 103, 117, 109, 95, 116, 105, 109, 101, 114, 43, 49, 48, 125, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 52, 32, 120, 103, 36, 62, 61, 123, > 36, 123, 120, 103, 36, 62, 125, 38, 45, 50, 125, 32, 121, 103, 36, 62, > 61, 123, 36, 123, 121, 103, 36, 62, 125, 38, 45, 50, 125, 32, 109, 103, > 36, 62, 61, 123, 105, 102, 40, 36, 123, 109, 103, 36, 62, 125, 61, 61, > 49, 44, 48, 44, 36, 123, 109, 103, 36, 62, 125, 41, 125, 32, 45, 100, > 111, 110, 101, 10, 112, 97, 99, 103, 117, 109, 95, 116, 105, 109, 101, 114, > 61, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 33, 36, 105, 115, 95, 103, 101, 116, 95, 114, 101, 97, 100, 121, 34, 32, > 38, 38, 32, 34, 40, 64, 124, 45, 36, 102, 114, 117, 105, 116, 95, 116, > 105, 109, 101, 114, 41, 62, 61, 49, 48, 125, 10, 120, 61, 123, 114, 111, > 117, 110, 100, 40, 63, 40, 48, 44, 64, 123, 109, 97, 112, 48, 44, 119, > 125, 41, 41, 125, 10, 121, 61, 123, 114, 111, 117, 110, 100, 40, 63, 40, > 48, 44, 64, 123, 109, 97, 112, 48, 44, 104, 125, 41, 41, 125, 10, 45, > 105, 102, 32, 123, 33, 64, 123, 109, 97, 112, 44, 40, 36, 120, 44, 36, > 121, 41, 125, 34, 32, 38, 38, 32, 34, 64, 123, 109, 97, 112, 48, 44, > 40, 36, 120, 44, 36, 121, 41, 125, 61, 61, 50, 125, 10, 110, 61, 123, > 109, 105, 110, 40, 51, 44, 105, 110, 116, 40, 97, 98, 115, 40, 103, 42, > 49, 46, 55, 41, 41, 41, 125, 32, 45, 61, 91, 109, 97, 112, 93, 32, > 123, 52, 43, 36, 110, 125, 44, 36, 120, 44, 36, 121, 32, 45, 106, 91, > 118, 105, 115, 117, 93, 32, 91, 102, 114, 117, 105, 116, 36, 110, 93, 44, > 123, 49, 54, 42, 36, 120, 125, 44, 123, 49, 54, 42, 36, 121, 43, 50, > 52, 125, 32, 102, 114, 117, 105, 116, 95, 116, 105, 109, 101, 114, 61, 64, > 124, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 64, 33, 34, > 32, 124, 124, 32, 34, 64, 123, 33, 44, 81, 125, 34, 32, 124, 124, 32, > 34, 64, 123, 33, 44, 69, 83, 67, 125, 125, 32, 105, 115, 95, 113, 117, > 105, 116, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, > 108, 101, 32, 123, 33, 36, 105, 115, 95, 113, 117, 105, 116, 34, 32, 38, > 38, 32, 34, 36, 112, 97, 99, 100, 111, 116, 115, 125, 10, 45, 105, 102, > 32, 36, 105, 115, 95, 113, 117, 105, 116, 32, 45, 98, 114, 101, 97, 107, > 10, 45, 101, 108, 105, 102, 32, 36, 112, 97, 99, 100, 111, 116, 115, 10, > 108, 105, 118, 101, 115, 61, 123, 36, 108, 105, 118, 101, 115, 45, 49, 125, > 10, 45, 101, 108, 115, 101, 10, 108, 101, 118, 101, 108, 61, 123, 45, 36, > 108, 101, 118, 101, 108, 45, 49, 125, 32, 45, 119, 97, 105, 116, 91, 48, > 93, 32, 45, 49, 10, 45, 114, 109, 91, 109, 97, 112, 48, 44, 109, 97, > 112, 44, 99, 97, 110, 95, 103, 111, 44, 112, 97, 116, 104, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 118, 105, 115, 117, 44, 108, > 101, 118, 101, 108, 95, 78, 44, 108, 101, 118, 101, 108, 109, 95, 78, 93, > 10, 45, 119, 104, 105, 108, 101, 32, 36, 108, 105, 118, 101, 115, 10, 45, > 114, 109, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 95, 112, 97, > 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 115, 116, 97, 110, 100, > 97, 114, 100, 95, 103, 102, 120, 32, 58, 10, 45, 95, 112, 97, 99, 109, > 97, 110, 95, 103, 104, 111, 115, 116, 95, 98, 97, 115, 101, 95, 103, 102, > 120, 32, 36, 52, 32, 40, 48, 44, 36, 49, 94, 48, 44, 36, 50, 94, > 48, 44, 36, 51, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 49, 48, 44, 49, 49, 44, 51, > 44, 52, 44, 48, 44, 49, 44, 50, 53, 53, 32, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 50, 48, 44, 49, 49, 44, 51, 44, > 52, 44, 48, 44, 49, 44, 50, 53, 53, 10, 45, 114, 91, 45, 49, 93, > 32, 49, 54, 44, 49, 54, 44, 49, 44, 51, 44, 50, 32, 45, 112, 111, > 105, 110, 116, 91, 45, 49, 93, 32, 53, 44, 123, 55, 45, 40, 36, 52, > 62, 61, 50, 41, 125, 44, 48, 44, 49, 44, 49, 32, 45, 112, 111, 105, > 110, 116, 91, 45, 49, 93, 32, 49, 48, 44, 123, 55, 45, 40, 36, 52, > 62, 61, 50, 41, 125, 44, 48, 44, 49, 44, 49, 10, 95, 112, 97, 99, > 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 97, 102, 114, 97, 105, 100, > 95, 103, 102, 120, 32, 58, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, > 103, 104, 111, 115, 116, 95, 98, 97, 115, 101, 95, 103, 102, 120, 32, 36, > 49, 10, 45, 105, 102, 32, 123, 36, 49, 60, 50, 125, 32, 99, 111, 108, > 61, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 40, 48, 44, > 48, 94, 48, 44, 48, 94, 48, 44, 50, 48, 56, 41, 32, 45, 101, 108, > 115, 101, 32, 99, 111, 108, 61, 50, 53, 53, 44, 48, 44, 48, 32, 40, > 48, 44, 50, 52, 56, 94, 48, 44, 50, 52, 56, 94, 48, 44, 50, 52, > 56, 41, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 97, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 114, 91, 45, 49, 93, 32, 49, 54, 44, 49, 54, 44, 49, 44, 51, > 44, 50, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 52, 44, 52, > 44, 54, 44, 54, 44, 49, 44, 36, 99, 111, 108, 44, 50, 53, 53, 32, > 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 52, 44, 54, 44, 54, 44, > 52, 44, 49, 44, 36, 99, 111, 108, 44, 50, 53, 53, 10, 45, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 57, 44, 52, 44, 49, 49, 44, 54, 44, > 49, 44, 36, 99, 111, 108, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 57, 44, 54, 44, 49, 49, 44, 52, 44, 49, 44, > 36, 99, 111, 108, 44, 50, 53, 53, 10, 45, 102, 91, 45, 49, 93, 32, > 39, 105, 102, 40, 121, 62, 61, 57, 38, 38, 121, 60, 61, 49, 48, 38, > 38, 120, 62, 61, 50, 38, 38, 120, 60, 61, 49, 51, 38, 38, 40, 40, > 105, 110, 116, 40, 40, 120, 43, 49, 41, 47, 50, 41, 43, 121, 41, 37, > 50, 41, 44, 97, 114, 103, 40, 99, 43, 49, 44, 36, 99, 111, 108, 41, > 44, 105, 41, 39, 10, 95, 112, 97, 99, 109, 97, 110, 95, 112, 97, 99, > 109, 97, 110, 95, 103, 102, 120, 32, 58, 10, 51, 50, 44, 51, 50, 44, > 49, 44, 49, 44, 39, 88, 61, 120, 45, 49, 53, 59, 89, 61, 121, 45, > 49, 53, 59, 65, 61, 97, 116, 97, 110, 50, 40, 89, 44, 88, 41, 59, > 82, 61, 115, 113, 114, 116, 40, 88, 94, 50, 43, 89, 94, 50, 41, 59, > 82, 60, 49, 53, 46, 53, 38, 38, 97, 98, 115, 40, 65, 41, 62, 48, > 46, 56, 42, 48, 46, 51, 51, 42, 36, 49, 39, 10, 40, 48, 44, 50, > 53, 53, 94, 48, 44, 50, 53, 53, 94, 48, 44, 48, 94, 48, 44, 50, > 53, 53, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 54, 44, 49, 54, 44, 49, 44, 52, 44, 50, 32, 45, 115, 91, > 45, 49, 93, 32, 99, 44, 45, 51, 10, 95, 112, 97, 99, 109, 97, 110, > 95, 112, 97, 99, 100, 111, 116, 115, 95, 103, 102, 120, 32, 58, 10, 40, > 50, 53, 53, 94, 49, 56, 52, 94, 49, 53, 49, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 52, 44, 52, 44, 49, 44, 51, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 54, 44, 49, 54, 44, 49, 44, 51, 44, 48, 44, 48, > 44, 48, 46, 53, 44, 48, 46, 53, 10, 95, 112, 97, 99, 109, 97, 110, > 95, 112, 97, 99, 103, 117, 109, 95, 103, 102, 120, 32, 58, 10, 49, 54, > 44, 49, 54, 44, 49, 44, 51, 32, 45, 99, 105, 114, 99, 108, 101, 91, > 45, 49, 93, 32, 55, 44, 55, 44, 55, 44, 49, 44, 50, 53, 53, 44, > 49, 50, 56, 44, 54, 52, 10, 95, 112, 97, 99, 109, 97, 110, 95, 99, > 104, 101, 114, 114, 121, 95, 103, 102, 120, 32, 58, 10, 40, 49, 50, 44, > 49, 50, 44, 49, 44, 49, 44, 48, 44, 48, 44, 45, 49, 48, 44, 45, > 50, 44, 49, 44, 45, 56, 44, 45, 52, 44, 49, 44, 45, 54, 44, 45, > 50, 44, 49, 44, 48, 44, 49, 44, 45, 55, 44, 48, 44, 49, 44, 45, > 51, 44, 48, 44, 49, 44, 45, 51, 44, 45, 52, 44, 50, 44, 45, 51, > 44, 48, 44, 49, 44, 45, 51, 44, 45, 54, 44, 50, 44, 48, 44, 49, > 44, 45, 52, 44, 45, 53, 44, 50, 44, 48, 44, 45, 52, 44, 50, 44, > 45, 50, 44, 92, 10, 48, 44, 50, 44, 51, 44, 45, 50, 44, 50, 44, > 48, 44, 45, 54, 44, 50, 44, 48, 44, 45, 50, 44, 50, 44, 51, 44, > 50, 44, 48, 44, 45, 54, 44, 50, 44, 45, 50, 44, 45, 51, 44, 50, > 44, 48, 44, 50, 44, 51, 44, 45, 52, 44, 50, 44, 45, 54, 44, 45, > 50, 44, 50, 44, 51, 44, 45, 51, 44, 50, 44, 45, 55, 44, 45, 52, > 44, 50, 44, 45, 50, 44, 48, 41, 10, 45, 117, 110, 99, 111, 109, 112, > 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 40, 48, 44, > 48, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 49, 55, 51, 44, > 48, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, 44, 50, 53, 53, 41, > 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, 91, 45, 49, 93, > 32, 49, 52, 32, 45, 114, 91, 45, 49, 93, 32, 49, 54, 44, 49, 54, > 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 10, 95, 112, 97, 99, 109, 97, 110, 95, 115, 116, 114, 97, 119, 98, 101, > 114, 114, 121, 95, 103, 102, 120, 32, 58, 10, 40, 49, 49, 44, 49, 50, > 44, 49, 44, 49, 44, 48, 44, 48, 44, 45, 53, 44, 48, 44, 51, 44, > 45, 55, 44, 45, 51, 44, 49, 44, 51, 44, 45, 51, 44, 49, 44, 45, > 51, 44, 45, 50, 44, 50, 44, 45, 53, 44, 49, 44, 45, 50, 44, 50, > 44, 48, 44, 45, 52, 44, 50, 44, 45, 51, 44, 49, 44, 45, 50, 44, > 50, 44, 51, 44, 45, 50, 44, 50, 44, 51, 44, 45, 53, 44, 50, 44, > 51, 44, 45, 54, 44, 50, 44, 51, 44, 92, 10, 50, 44, 51, 44, 45, > 49, 51, 44, 50, 44, 51, 44, 45, 50, 44, 50, 44, 48, 44, 50, 44, > 51, 44, 45, 50, 44, 50, 44, 51, 44, 45, 52, 44, 50, 44, 45, 50, > 44, 45, 57, 44, 50, 44, 45, 51, 44, 45, 50, 44, 50, 44, 51, 44, > 45, 50, 44, 50, 44, 51, 44, 45, 54, 44, 45, 53, 44, 50, 44, 45, > 56, 44, 48, 44, 50, 44, 45, 53, 44, 48, 41, 10, 45, 117, 110, 99, > 111, 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, > 40, 48, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 49, > 55, 51, 44, 48, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, 44, 50, > 53, 53, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, 91, > 45, 49, 93, 32, 49, 52, 32, 45, 114, 91, 45, 49, 93, 32, 49, 54, > 44, 49, 54, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 10, 95, 112, 97, 99, 109, 97, 110, 95, 111, 114, 97, 110, > 103, 101, 95, 103, 102, 120, 32, 58, 10, 40, 49, 50, 44, 49, 51, 44, > 49, 44, 49, 44, 48, 44, 48, 44, 45, 53, 44, 48, 44, 49, 44, 48, > 44, 45, 50, 44, 49, 44, 45, 56, 44, 45, 54, 44, 49, 44, 45, 54, > 44, 48, 44, 49, 44, 51, 44, 45, 51, 44, 49, 44, 45, 52, 44, 45, > 51, 44, 50, 44, 49, 44, 45, 52, 44, 50, 44, 45, 51, 44, 45, 49, > 48, 44, 50, 44, 48, 44, 45, 54, 48, 44, 50, 44, 48, 44, 45, 49, > 48, 44, 50, 44, 45, 50, 44, 45, 49, 48, 44, 50, 44, 45, 52, 44, > 45, 54, 44, 50, 44, 45, 51, 44, 48, 41, 10, 45, 117, 110, 99, 111, > 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 40, > 48, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 49, 55, > 51, 44, 49, 55, 51, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, > 91, 45, 49, 93, 32, 49, 52, 32, 45, 114, 91, 45, 49, 93, 32, 49, > 54, 44, 49, 54, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, > 44, 48, 46, 53, 10, 95, 112, 97, 99, 109, 97, 110, 95, 98, 97, 110, > 97, 110, 97, 95, 103, 102, 120, 32, 58, 10, 40, 57, 44, 49, 50, 44, > 49, 44, 49, 44, 48, 44, 48, 44, 45, 55, 44, 48, 44, 49, 44, 45, > 55, 44, 45, 50, 44, 49, 44, 45, 55, 44, 45, 51, 44, 49, 44, 45, > 53, 44, 48, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 45, 53, 44, > 48, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 45, 52, 44, 48, 44, > 49, 44, 48, 44, 45, 51, 44, 49, 44, 45, 52, 44, 48, 44, 49, 44, > 48, 44, 45, 51, 44, 92, 10, 49, 44, 45, 51, 44, 48, 44, 49, 44, > 48, 44, 49, 44, 50, 44, 49, 44, 45, 51, 44, 48, 44, 49, 44, 48, > 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 50, 44, 45, > 54, 44, 49, 44, 45, 51, 44, 45, 52, 44, 49, 44, 45, 53, 44, 48, > 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, 114, 108, > 101, 91, 45, 49, 93, 32, 40, 48, 44, 50, 53, 53, 44, 50, 53, 53, > 94, 48, 44, 49, 55, 51, 44, 50, 53, 53, 94, 48, 44, 48, 44, 50, > 53, 53, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, 91, > 45, 49, 93, 32, 49, 52, 32, 45, 114, 91, 45, 49, 93, 32, 49, 54, > 44, 49, 54, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 10, 95, 112, 97, 99, 109, 97, 110, 95, 109, 97, 112, 95, > 108, 101, 118, 101, 108, 49, 32, 58, 10, 40, 49, 49, 44, 50, 56, 44, > 49, 44, 49, 44, 48, 44, 48, 44, 45, 49, 50, 44, 49, 44, 45, 53, > 44, 50, 44, 49, 44, 45, 52, 44, 50, 44, 49, 44, 51, 44, 45, 51, > 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, > 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, > 45, 49, 48, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, > 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 52, > 44, 49, 44, 92, 10, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, > 50, 44, 49, 44, 45, 51, 44, 48, 44, 50, 44, 49, 44, 45, 53, 44, > 50, 44, 45, 52, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 48, 44, > 45, 51, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 45, 51, > 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 45, 57, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, > 44, 48, 44, 45, 50, 44, 49, 44, 45, 51, 44, 48, 44, 49, 44, 50, > 44, 49, 44, 45, 51, 44, 48, 44, 49, 44, 45, 52, 44, 92, 10, 48, > 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 48, 44, 49, 44, 45, > 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 48, > 44, 45, 51, 44, 49, 44, 45, 51, 44, 48, 44, 50, 44, 45, 50, 44, > 48, 44, 49, 44, 45, 52, 44, 45, 51, 44, 49, 44, 50, 44, 45, 53, > 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 45, 53, > 44, 50, 44, 45, 50, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 54, 44, 49, 44, 50, > 44, 45, 51, 44, 49, 44, 50, 44, 92, 10, 45, 52, 44, 49, 44, 45, > 57, 44, 50, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, > 44, 45, 51, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, > 51, 44, 49, 44, 50, 44, 49, 44, 45, 51, 44, 50, 44, 45, 50, 44, > 49, 44, 51, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, > 52, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, > 44, 45, 52, 44, 49, 44, 45, 49, 48, 44, 50, 44, 45, 49, 49, 44, > 49, 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, 114, > 108, 101, 91, 45, 49, 93, 32, 45, 45, 109, 105, 114, 114, 111, 114, 91, > 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, 32, 49, 44, 49, > 48, 48, 37, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, > 95, 114, 108, 101, 118, 101, 108, 61, 51, 51, 32, 95, 103, 108, 101, 118, > 101, 108, 61, 51, 51, 32, 95, 98, 108, 101, 118, 101, 108, 61, 50, 53, > 53, 10, 95, 112, 97, 99, 109, 97, 110, 95, 109, 97, 112, 95, 108, 101, > 118, 101, 108, 50, 32, 58, 10, 40, 49, 49, 44, 50, 56, 44, 49, 44, > 49, 44, 48, 44, 48, 44, 45, 49, 50, 44, 49, 44, 45, 49, 48, 44, > 50, 44, 49, 44, 51, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, > 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, > 44, 50, 44, 49, 44, 45, 50, 44, 50, 44, 49, 44, 50, 44, 49, 44, > 45, 53, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, > 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, > 44, 49, 44, 92, 10, 50, 44, 45, 50, 44, 49, 44, 45, 53, 44, 50, > 44, 49, 44, 45, 51, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, 45, > 53, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, > 44, 45, 53, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 45, 53, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, > 44, 49, 44, 45, 51, 44, 50, 44, 49, 44, 45, 52, 44, 45, 51, 44, > 49, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, 45, 50, 44, 49, > 44, 45, 53, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, > 92, 10, 45, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 50, 44, 48, > 44, 49, 44, 45, 50, 44, 45, 53, 44, 49, 44, 50, 44, 49, 44, 48, > 44, 45, 51, 44, 49, 44, 45, 52, 44, 48, 44, 49, 44, 50, 44, 49, > 44, 45, 52, 44, 45, 51, 44, 49, 44, 45, 51, 44, 50, 44, 45, 51, > 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, > 49, 44, 45, 51, 44, 50, 44, 45, 50, 44, 48, 44, 49, 44, 45, 50, > 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 45, 52, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 92, 10, > 50, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 45, 55, 44, 50, 44, > 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, > 50, 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 45, > 51, 44, 50, 44, 49, 44, 45, 52, 44, 50, 44, 49, 44, 51, 44, 49, > 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, > 44, 49, 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 45, 57, 44, 50, 44, 45, 49, 50, 44, 49, 41, 10, 45, 117, 110, > 99, 111, 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, > 32, 45, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, > 45, 122, 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 95, 114, 108, 101, 118, 101, > 108, 61, 50, 48, 48, 32, 95, 103, 108, 101, 118, 101, 108, 61, 51, 51, > 32, 95, 98, 108, 101, 118, 101, 108, 61, 51, 51, 10, 95, 112, 97, 99, > 109, 97, 110, 95, 109, 97, 112, 95, 108, 101, 118, 101, 108, 51, 32, 58, > 10, 40, 49, 49, 44, 50, 56, 44, 49, 44, 49, 44, 48, 44, 48, 44, > 45, 49, 49, 44, 49, 44, 45, 54, 44, 48, 44, 49, 44, 45, 52, 44, > 50, 44, 45, 53, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, 56, 44, > 49, 44, 48, 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, 51, 44, 45, > 56, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 53, 44, 49, 44, > 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 53, 44, > 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 49, > 44, 45, 53, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, > 44, 92, 10, 49, 44, 50, 44, 45, 51, 44, 49, 44, 48, 44, 49, 44, > 50, 44, 45, 50, 44, 49, 44, 45, 53, 44, 50, 44, 49, 44, 48, 44, > 49, 44, 45, 50, 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 45, 52, 44, 49, 44, 45, 53, 44, 50, 44, 49, 44, 45, 52, > 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 45, 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, > 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 45, 51, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 48, 44, 49, > 44, 92, 10, 45, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, > 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 49, 44, 50, 44, 49, 44, 45, 54, 44, 48, 44, 49, 44, > 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 48, 44, 45, 50, 44, > 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 45, 50, 44, 48, 44, > 49, 44, 45, 54, 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 52, > 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 51, 44, 45, 51, 44, > 50, 44, 92, 10, 49, 44, 45, 51, 44, 50, 44, 48, 44, 45, 51, 44, > 49, 44, 50, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 52, 44, 49, > 44, 51, 44, 45, 50, 44, 50, 44, 49, 44, 45, 53, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 51, 44, > 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, > 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 49, > 48, 44, 50, 44, 45, 49, 49, 44, 49, 41, 10, 45, 117, 110, 99, 111, > 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 45, > 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 122, > 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 120, 10, 95, 114, 108, 101, 118, 101, 108, 61, > 51, 51, 32, 95, 103, 108, 101, 118, 101, 108, 61, 50, 48, 48, 32, 95, > 98, 108, 101, 118, 101, 108, 61, 50, 53, 53, 10, 95, 112, 97, 99, 109, > 97, 110, 95, 109, 97, 112, 95, 108, 101, 118, 101, 108, 52, 32, 58, 10, > 40, 49, 49, 44, 50, 56, 44, 49, 44, 49, 44, 48, 44, 48, 44, 45, > 57, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 45, 55, 44, 50, 44, > 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, > 50, 44, 45, 50, 44, 49, 44, 50, 44, 49, 44, 45, 50, 44, 48, 44, > 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, > 50, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 45, 51, 44, 50, 44, > 51, 44, 45, 51, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, 45, 50, > 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 52, 44, 50, 44, 49, > 44, 50, 44, 92, 10, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 49, 44, 45, 55, 44, 50, > 44, 45, 50, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 45, 52, 44, 50, 44, 49, 44, 50, > 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 49, 44, 45, 55, 44, 50, 44, 45, 50, 44, > 49, 44, 50, 44, 45, 51, 44, 49, 44, 45, 49, 48, 44, 48, 44, 49, > 44, 45, 53, 44, 45, 50, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, > 45, 53, 44, 48, 44, 49, 44, 92, 10, 45, 49, 48, 44, 48, 44, 49, > 44, 45, 50, 44, 45, 51, 44, 49, 44, 45, 53, 44, 45, 54, 44, 49, > 44, 45, 56, 44, 48, 44, 49, 44, 50, 44, 45, 57, 44, 48, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, > 44, 45, 50, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, > 44, 49, 44, 45, 49, 48, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, > 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 51, 44, 48, 44, > 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 92, 10, 45, 50, 44, > 49, 44, 50, 44, 48, 44, 45, 51, 44, 49, 44, 45, 51, 44, 50, 44, > 51, 44, 45, 52, 44, 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, > 49, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 45, > 55, 44, 50, 44, 49, 44, 45, 50, 44, 45, 57, 44, 49, 44, 45, 50, > 44, 48, 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, > 114, 108, 101, 91, 45, 49, 93, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 91, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, 32, 49, 44, > 49, 48, 48, 37, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, > 10, 95, 114, 108, 101, 118, 101, 108, 61, 50, 48, 48, 32, 95, 103, 108, > 101, 118, 101, 108, 61, 50, 48, 48, 32, 95, 98, 108, 101, 118, 101, 108, > 61, 51, 51, 10, 95, 112, 97, 99, 109, 97, 110, 95, 109, 97, 112, 95, > 108, 101, 118, 101, 108, 53, 32, 58, 10, 40, 49, 49, 44, 50, 56, 44, > 49, 44, 49, 44, 48, 44, 48, 44, 45, 49, 50, 44, 49, 44, 45, 55, > 44, 50, 44, 49, 44, 45, 50, 44, 50, 44, 49, 44, 51, 44, 45, 53, > 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, > 45, 53, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, > 50, 44, 49, 44, 45, 55, 44, 50, 44, 45, 50, 44, 49, 44, 45, 51, > 44, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 52, > 44, 49, 44, 50, 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 50, > 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 50, 44, 92, 10, 45, 51, > 44, 49, 44, 50, 44, 49, 44, 45, 52, 44, 48, 44, 49, 44, 45, 54, > 44, 50, 44, 49, 44, 50, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, > 48, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 48, 44, 45, 51, 44, > 49, 44, 48, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 45, 56, 44, > 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 48, 44, 49, 44, 48, > 44, 45, 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, > 44, 48, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, > 50, 44, 45, 52, 44, 48, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, > 92, 10, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, 45, 51, 44, 49, > 44, 48, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 45, 56, 44, 48, > 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 48, 44, 45, 51, 44, 49, > 44, 48, 44, 45, 50, 44, 49, 44, 45, 53, 44, 50, 44, 49, 44, 45, > 51, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 50, 44, 49, > 44, 50, 44, 45, 54, 44, 49, 44, 50, 44, 49, 44, 50, 44, 49, 44, > 50, 44, 45, 52, 44, 49, 44, 51, 44, 45, 50, 44, 50, 44, 49, 44, > 45, 53, 44, 50, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, > 50, 44, 45, 51, 44, 92, 10, 49, 44, 50, 44, 45, 50, 44, 49, 44, > 45, 53, 44, 50, 44, 49, 44, 45, 51, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 52, > 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, > 45, 52, 44, 49, 44, 45, 53, 44, 50, 44, 49, 44, 45, 52, 44, 50, > 44, 45, 49, 49, 44, 49, 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, > 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, > 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, 50, 44, 45, > 49, 93, 32, 120, 10, 95, 114, 108, 101, 118, 101, 108, 61, 50, 48, 48, > 32, 95, 103, 108, 101, 118, 101, 108, 61, 50, 53, 53, 32, 95, 98, 108, > 101, 118, 101, 108, 61, 51, 51, 10, 95, 112, 97, 99, 109, 97, 110, 95, > 109, 97, 112, 95, 108, 101, 118, 101, 108, 54, 32, 58, 10, 40, 49, 49, > 44, 50, 56, 44, 49, 44, 49, 44, 48, 44, 48, 44, 45, 49, 50, 44, > 49, 44, 45, 49, 48, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 55, 44, 49, 44, 51, 44, 45, 57, 44, 50, 44, 45, > 53, 44, 49, 44, 50, 44, 45, 54, 44, 49, 44, 45, 49, 48, 44, 50, > 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, 48, 44, 45, 53, 44, 49, > 44, 50, 44, 49, 44, 45, 56, 44, 48, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 45, 51, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 48, 44, > 50, 44, 49, 44, 48, 44, 49, 44, 45, 54, 44, 50, 44, 49, 44, 50, > 44, 92, 10, 45, 50, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 48, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 45, 50, 44, 48, > 44, 50, 44, 49, 44, 45, 52, 44, 48, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 49, 44, 50, 44, 45, 50, 44, 45, 50, 44, 49, 44, 48, 44, > 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, > 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, > 44, 50, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, > 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 45, 52, 44, > 49, 44, 50, 44, 92, 10, 49, 44, 45, 50, 44, 48, 44, 50, 44, 49, > 44, 45, 52, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 48, > 44, 50, 44, 49, 44, 48, 44, 49, 44, 45, 54, 44, 50, 44, 49, 44, > 50, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 48, 44, 45, 52, 44, > 49, 44, 50, 44, 49, 44, 45, 56, 44, 48, 44, 49, 44, 50, 44, 45, > 52, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 48, 44, 49, 44, 45, > 49, 48, 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 54, 44, 49, > 44, 51, 44, 45, 57, 44, 92, 10, 50, 44, 49, 44, 50, 44, 45, 50, > 44, 49, 44, 50, 44, 45, 55, 44, 49, 44, 45, 49, 48, 44, 50, 44, > 45, 49, 49, 44, 49, 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, 101, > 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 45, 45, 109, 105, 114, > 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, > 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 95, 114, 108, 101, 118, 101, 108, 61, 50, 53, 53, 32, > 95, 103, 108, 101, 118, 101, 108, 61, 49, 51, 48, 32, 95, 98, 108, 101, > 118, 101, 108, 61, 50, 51, 51, 10, 35, 64, 103, 109, 105, 99, 32, 120, > 95, 112, 97, 105, 110, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 32, 112, 97, 105, 110, 116, 101, 114, 46, 10, > 120, 95, 112, 97, 105, 110, 116, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 73, 110, 116, 101, 114, 97, > 99, 116, 105, 118, 101, 32, 112, 97, 105, 110, 116, 101, 114, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 32, 85, 115, 101, 32, 109, 111, 117, 115, 101, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 32, 99, 111, 108, 111, 114, 32, 97, 110, > 100, 32, 98, 114, 117, 115, 104, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 76, 101, 102, 116, 32, 98, 117, 116, 116, 111, 110, 32, 100, 114, 97, 119, > 115, 32, 97, 32, 99, 111, 108, 111, 114, 101, 100, 32, 115, 116, 114, 111, > 107, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, > 32, 98, 117, 116, 116, 111, 110, 32, 102, 105, 108, 108, 115, 32, 97, 32, > 99, 111, 108, 111, 114, 101, 100, 32, 114, 101, 103, 105, 111, 110, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 65, 114, 114, 111, 119, 32, 107, 101, 121, > 115, 32, 111, 114, 32, 83, 80, 65, 67, 69, 32, 97, 110, 100, 32, 66, > 65, 67, 75, 83, 80, 65, 67, 69, 32, 116, 111, 32, 115, 119, 97, 112, > 92, 110, 10, 45, 45, 45, 45, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 105, 109, 97, 103, 101, 115, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 83, 39, > 32, 116, 111, 32, 115, 97, 118, 101, 32, 115, 110, 97, 112, 115, 104, 111, > 116, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, > 32, 118, 105, 101, 119, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, > 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, > 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, > 103, 98, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 105, 91, > 48, 93, 32, 53, 49, 50, 44, 53, 49, 50, 44, 49, 44, 51, 44, 50, > 53, 53, 32, 45, 110, 109, 91, 48, 93, 32, 34, 91, 78, 101, 119, 32, > 105, 109, 97, 103, 101, 93, 34, 32, 45, 101, 110, 100, 105, 102, 10, 99, > 111, 108, 111, 114, 61, 48, 44, 48, 44, 48, 10, 115, 97, 116, 117, 114, > 97, 116, 105, 111, 110, 61, 49, 10, 98, 114, 117, 115, 104, 115, 105, 122, > 101, 61, 51, 10, 98, 114, 117, 115, 104, 111, 112, 97, 99, 105, 116, 121, > 61, 48, 10, 98, 114, 117, 115, 104, 97, 110, 103, 108, 101, 61, 57, 48, > 10, 98, 114, 117, 115, 104, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, > 49, 10, 105, 109, 97, 103, 101, 61, 48, 10, 114, 101, 102, 114, 101, 115, > 104, 95, 112, 97, 108, 101, 116, 116, 101, 61, 49, 10, 114, 101, 102, 114, > 101, 115, 104, 95, 105, 109, 97, 103, 101, 61, 49, 10, 114, 101, 102, 114, > 101, 115, 104, 95, 98, 114, 117, 115, 104, 61, 49, 10, 111, 120, 49, 61, > 45, 49, 10, 111, 121, 49, 61, 45, 49, 10, 49, 32, 49, 10, 45, 100, > 111, 10, 45, 105, 102, 32, 36, 114, 101, 102, 114, 101, 115, 104, 95, 112, > 97, 108, 101, 116, 116, 101, 10, 45, 114, 109, 91, 45, 50, 93, 32, 40, > 48, 44, 51, 53, 57, 59, 48, 44, 51, 53, 57, 94, 36, 115, 97, 116, > 117, 114, 97, 116, 105, 111, 110, 44, 36, 115, 97, 116, 117, 114, 97, 116, > 105, 111, 110, 59, 36, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 44, > 36, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 94, 49, 44, 49, 59, > 48, 44, 48, 41, 32, 45, 114, 91, 45, 49, 93, 32, 50, 53, 54, 44, > 54, 52, 44, 49, 44, 51, 44, 51, 32, 45, 104, 115, 118, 50, 114, 103, > 98, 91, 45, 49, 93, 10, 40, 50, 53, 53, 59, 48, 41, 32, 45, 114, > 91, 45, 49, 93, 32, 49, 54, 44, 64, 123, 45, 50, 44, 104, 125, 44, > 49, 44, 51, 44, 51, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 44, 48, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 123, 119, 125, 44, 49, > 54, 44, 49, 44, 51, 32, 45, 116, 91, 45, 49, 93, 32, 34, 83, 101, > 108, 101, 99, 116, 101, 100, 32, 99, 111, 108, 111, 114, 34, 44, 52, 44, > 50, 44, 49, 51, 44, 49, 44, 50, 53, 53, 10, 45, 114, 101, 99, 116, > 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 56, 48, 44, 51, 44, 49, > 48, 48, 44, 49, 51, 44, 49, 44, 36, 99, 111, 108, 111, 114, 10, 45, > 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 56, 48, > 44, 51, 44, 49, 48, 48, 44, 49, 51, 44, 49, 44, 48, 120, 70, 70, > 70, 70, 70, 70, 70, 70, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, > 53, 53, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, > 119, 50, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, > 44, 34, 80, 97, 108, 101, 116, 116, 101, 34, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 45, 50, 10, 114, 101, 102, 114, 101, 115, 104, 95, 112, 97, > 108, 101, 116, 116, 101, 61, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 36, 114, 101, 102, 114, 101, 115, 104, 95, 98, 114, 117, 115, > 104, 10, 45, 114, 109, 91, 45, 49, 93, 32, 40, 51, 50, 44, 54, 52, > 59, 54, 52, 44, 51, 50, 41, 32, 45, 114, 91, 45, 49, 93, 32, 49, > 54, 44, 49, 54, 44, 49, 44, 51, 44, 49, 32, 45, 114, 91, 45, 49, > 93, 32, 123, 56, 42, 52, 56, 125, 44, 123, 52, 42, 52, 56, 125, 44, > 49, 44, 51, 44, 48, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 52, 32, 45, 114, 101, 112, 101, 97, 116, 32, 56, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 123, 52, 56, 42, 36, 62, 43, > 50, 52, 125, 44, 123, 52, 56, 42, 64, 123, 62, 44, 45, 50, 125, 43, > 50, 52, 125, 44, 123, 50, 42, 36, 62, 43, 49, 125, 44, 123, 40, 50, > 42, 36, 62, 43, 49, 41, 42, 36, 98, 114, 117, 115, 104, 116, 104, 105, > 99, 107, 110, 101, 115, 115, 125, 44, 36, 98, 114, 117, 115, 104, 97, 110, > 103, 108, 101, 44, 123, 49, 45, 64, 123, 62, 44, 45, 50, 125, 47, 52, > 125, 44, 50, 53, 53, 10, 45, 100, 111, 110, 101, 32, 45, 100, 111, 110, > 101, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, > 32, 123, 36, 98, 114, 117, 115, 104, 115, 105, 122, 101, 42, 52, 56, 125, > 44, 123, 36, 98, 114, 117, 115, 104, 111, 112, 97, 99, 105, 116, 121, 42, > 52, 56, 125, 44, 92, 10, 123, 36, 98, 114, 117, 115, 104, 115, 105, 122, > 101, 42, 52, 56, 43, 52, 55, 125, 44, 123, 36, 98, 114, 117, 115, 104, > 111, 112, 97, 99, 105, 116, 121, 42, 52, 56, 43, 52, 55, 125, 44, 92, > 10, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 50, 53, > 53, 44, 49, 50, 56, 44, 49, 50, 56, 10, 123, 119, 125, 44, 49, 54, > 44, 49, 44, 51, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, > 44, 53, 48, 37, 44, 49, 48, 48, 37, 44, 53, 48, 37, 44, 49, 44, > 48, 120, 53, 53, 53, 53, 53, 53, 53, 53, 44, 49, 50, 56, 44, 54, > 52, 44, 49, 50, 56, 10, 98, 120, 61, 123, 36, 98, 114, 117, 115, 104, > 97, 110, 103, 108, 101, 42, 119, 47, 49, 56, 48, 125, 10, 45, 114, 101, > 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 123, 36, 98, 120, > 45, 49, 54, 125, 44, 50, 48, 37, 44, 123, 36, 98, 120, 43, 49, 54, > 125, 44, 56, 48, 37, 44, 49, 44, 49, 50, 56, 10, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 123, 36, 98, 120, 45, 49, 54, 125, 44, 50, > 48, 37, 44, 123, 36, 98, 120, 43, 49, 54, 125, 44, 50, 48, 37, 44, > 49, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 123, 36, 98, 120, 43, 49, 54, 125, 44, 50, 48, 37, 44, 123, 36, 98, > 120, 43, 49, 54, 125, 44, 56, 48, 37, 44, 49, 44, 50, 53, 53, 10, > 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 123, 36, 98, 120, 45, 49, > 54, 125, 44, 56, 48, 37, 44, 123, 36, 98, 120, 43, 49, 54, 125, 44, > 56, 48, 37, 44, 49, 44, 54, 52, 32, 45, 108, 105, 110, 101, 91, 45, > 49, 93, 32, 123, 36, 98, 120, 45, 49, 54, 125, 44, 50, 48, 37, 44, > 123, 36, 98, 120, 45, 49, 54, 125, 44, 56, 48, 37, 44, 49, 44, 54, > 52, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 49, 54, > 44, 123, 104, 45, 49, 54, 125, 44, 49, 44, 51, 32, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 48, 44, 53, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 48, 120, 53, 53, 53, 53, 53, 53, 53, > 53, 44, 49, 50, 56, 44, 54, 52, 44, 49, 50, 56, 10, 98, 121, 61, > 123, 36, 98, 114, 117, 115, 104, 116, 104, 105, 99, 107, 110, 101, 115, 115, > 42, 40, 104, 45, 49, 54, 41, 125, 10, 45, 114, 101, 99, 116, 97, 110, > 103, 108, 101, 91, 45, 49, 93, 32, 50, 48, 37, 44, 123, 36, 98, 121, > 45, 49, 54, 125, 44, 56, 48, 37, 44, 123, 36, 98, 121, 43, 49, 54, > 125, 44, 49, 44, 49, 50, 56, 10, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 50, 48, 37, 44, 123, 36, 98, 121, 45, 49, 54, 125, 44, 56, > 48, 37, 44, 123, 36, 98, 121, 45, 49, 54, 125, 44, 49, 44, 50, 53, > 53, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 56, 48, 37, 44, > 123, 36, 98, 121, 45, 49, 54, 125, 44, 56, 48, 37, 44, 123, 36, 98, > 121, 43, 49, 54, 125, 44, 49, 44, 50, 53, 53, 10, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 50, 48, 37, 44, 123, 36, 98, 121, 45, 49, > 54, 125, 44, 50, 48, 37, 44, 123, 36, 98, 121, 43, 49, 54, 125, 44, > 49, 44, 54, 52, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 50, > 48, 37, 44, 123, 36, 98, 121, 43, 49, 54, 125, 44, 56, 48, 37, 44, > 123, 36, 98, 121, 43, 49, 54, 125, 44, 49, 44, 54, 52, 10, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 119, 51, 91, 45, 49, > 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, 34, 66, 114, 117, > 115, 104, 34, 10, 114, 101, 102, 114, 101, 115, 104, 95, 98, 114, 117, 115, > 104, 61, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, > 114, 101, 102, 114, 101, 115, 104, 95, 105, 109, 97, 103, 101, 10, 45, 119, > 49, 91, 36, 105, 109, 97, 103, 101, 93, 32, 64, 123, 36, 105, 109, 97, > 103, 101, 44, 119, 125, 44, 64, 123, 36, 105, 109, 97, 103, 101, 44, 104, > 125, 44, 48, 44, 34, 73, 109, 97, 103, 101, 32, 34, 35, 36, 105, 109, > 97, 103, 101, 34, 32, 58, 32, 34, 64, 123, 36, 105, 109, 97, 103, 101, > 44, 98, 125, 46, 64, 123, 36, 105, 109, 97, 103, 101, 44, 120, 125, 10, > 114, 101, 102, 114, 101, 115, 104, 95, 105, 109, 97, 103, 101, 61, 48, 10, > 45, 101, 110, 100, 105, 102, 10, 120, 49, 61, 64, 123, 33, 49, 44, 120, > 125, 32, 121, 49, 61, 64, 123, 33, 49, 44, 121, 125, 10, 120, 50, 61, > 64, 123, 33, 50, 44, 120, 125, 32, 121, 50, 61, 64, 123, 33, 50, 44, > 121, 125, 10, 120, 51, 61, 64, 123, 33, 51, 44, 120, 125, 32, 121, 51, > 61, 64, 123, 33, 51, 44, 121, 125, 10, 45, 105, 102, 32, 123, 36, 120, > 49, 62, 61, 48, 125, 10, 45, 105, 102, 32, 123, 64, 123, 33, 49, 44, > 98, 125, 38, 49, 125, 10, 111, 120, 49, 61, 123, 105, 102, 40, 36, 111, > 120, 49, 60, 48, 44, 36, 120, 49, 44, 36, 111, 120, 49, 41, 125, 10, > 111, 121, 49, 61, 123, 105, 102, 40, 36, 111, 121, 49, 60, 48, 44, 36, > 121, 49, 44, 36, 111, 121, 49, 41, 125, 10, 100, 101, 108, 116, 97, 61, > 123, 109, 97, 120, 40, 97, 98, 115, 40, 36, 120, 49, 45, 36, 111, 120, > 49, 41, 44, 97, 98, 115, 40, 36, 121, 49, 45, 36, 111, 121, 49, 41, > 41, 125, 10, 114, 49, 61, 123, 50, 42, 36, 98, 114, 117, 115, 104, 115, > 105, 122, 101, 43, 49, 125, 10, 114, 50, 61, 123, 36, 114, 49, 42, 36, > 98, 114, 117, 115, 104, 116, 104, 105, 99, 107, 110, 101, 115, 115, 125, 10, > 100, 120, 61, 123, 50, 42, 40, 36, 120, 49, 45, 36, 111, 120, 49, 41, > 47, 109, 97, 120, 40, 49, 44, 36, 100, 101, 108, 116, 97, 41, 125, 10, > 100, 121, 61, 123, 50, 42, 40, 36, 121, 49, 45, 36, 111, 121, 49, 41, > 47, 109, 97, 120, 40, 49, 44, 36, 100, 101, 108, 116, 97, 41, 125, 10, > 111, 61, 123, 49, 45, 40, 36, 98, 114, 117, 115, 104, 111, 112, 97, 99, > 105, 116, 121, 47, 52, 41, 94, 48, 46, 48, 52, 125, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 109, 97, 120, 40, 49, 44, 40, 36, 100, 101, > 108, 116, 97, 43, 49, 41, 47, 50, 41, 125, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 36, 105, 109, 97, 103, 101, 93, 32, 123, 36, 111, 120, > 49, 43, 36, 62, 42, 36, 100, 120, 125, 44, 123, 36, 111, 121, 49, 43, > 36, 62, 42, 36, 100, 121, 125, 44, 36, 114, 49, 44, 36, 114, 50, 44, > 36, 98, 114, 117, 115, 104, 97, 110, 103, 108, 101, 44, 36, 111, 44, 36, > 99, 111, 108, 111, 114, 10, 45, 100, 111, 110, 101, 10, 111, 120, 49, 61, > 36, 120, 49, 32, 111, 121, 49, 61, 36, 121, 49, 10, 114, 101, 102, 114, > 101, 115, 104, 95, 105, 109, 97, 103, 101, 61, 49, 10, 45, 101, 108, 115, > 101, 10, 111, 120, 49, 61, 45, 49, 32, 111, 121, 49, 61, 45, 49, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 49, 44, 98, 125, 38, 50, 125, 10, > 45, 102, 108, 111, 111, 100, 91, 36, 105, 109, 97, 103, 101, 93, 32, 36, > 120, 49, 44, 36, 121, 49, 44, 48, 44, 49, 48, 44, 48, 44, 49, 44, > 36, 99, 111, 108, 111, 114, 10, 114, 101, 102, 114, 101, 115, 104, 95, 105, > 109, 97, 103, 101, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 64, 123, 33, 49, 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, > 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 65, 82, 82, 79, > 87, 82, 73, 71, 72, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, > 51, 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, 125, 34, 32, 124, > 124, 32, 34, 92, 10, 64, 123, 33, 49, 44, 65, 82, 82, 79, 87, 85, > 80, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 65, 82, 82, > 79, 87, 85, 80, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 51, 44, > 65, 82, 82, 79, 87, 85, 80, 125, 34, 32, 124, 124, 32, 34, 92, 10, > 64, 123, 33, 49, 44, 83, 80, 65, 67, 69, 125, 34, 32, 124, 124, 32, > 34, 64, 123, 33, 50, 44, 83, 80, 65, 67, 69, 125, 34, 32, 124, 124, > 32, 34, 64, 123, 33, 51, 44, 83, 80, 65, 67, 69, 125, 125, 10, 105, > 109, 97, 103, 101, 61, 123, 40, 36, 105, 109, 97, 103, 101, 43, 49, 41, > 37, 40, 64, 35, 45, 50, 41, 125, 32, 114, 101, 102, 114, 101, 115, 104, > 95, 105, 109, 97, 103, 101, 61, 49, 10, 45, 101, 108, 105, 102, 32, 123, > 64, 123, 33, 49, 44, 65, 82, 82, 79, 87, 76, 69, 70, 84, 125, 34, > 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 65, 82, 82, 79, 87, 76, > 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 51, 44, 65, > 82, 82, 79, 87, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 92, > 10, 64, 123, 33, 49, 44, 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, > 34, 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 65, 82, 82, 79, 87, > 68, 79, 87, 78, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 51, 44, > 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, 34, 32, 124, 124, 32, 34, > 92, 10, 64, 123, 33, 49, 44, 66, 65, 67, 75, 83, 80, 65, 67, 69, > 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 66, 65, 67, 75, > 83, 80, 65, 67, 69, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 51, > 44, 66, 65, 67, 75, 83, 80, 65, 67, 69, 125, 125, 10, 105, 109, 97, > 103, 101, 61, 123, 40, 36, 105, 109, 97, 103, 101, 45, 49, 41, 37, 40, > 64, 35, 45, 50, 41, 125, 32, 114, 101, 102, 114, 101, 115, 104, 95, 105, > 109, 97, 103, 101, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 64, 123, 33, 49, 44, 83, 125, 32, 45, 111, 91, 36, 105, 109, > 97, 103, 101, 93, 32, 103, 109, 105, 99, 95, 112, 97, 105, 110, 116, 46, > 112, 110, 103, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 64, 123, 33, 50, 44, 98, 125, 34, 32, 38, 38, 32, 34, 36, 120, 50, > 62, 61, 48, 34, 32, 38, 38, 32, 34, 36, 121, 50, 60, 54, 52, 125, > 10, 45, 105, 102, 32, 123, 36, 120, 50, 62, 61, 50, 53, 54, 125, 32, > 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 61, 123, 49, 45, 36, 121, > 50, 47, 54, 51, 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 120, 50, > 62, 61, 48, 125, 32, 99, 111, 108, 111, 114, 61, 64, 123, 45, 50, 44, > 40, 36, 120, 50, 44, 36, 121, 50, 44, 48, 44, 48, 41, 125, 44, 64, > 123, 45, 50, 44, 40, 36, 120, 50, 44, 36, 121, 50, 44, 48, 44, 49, > 41, 125, 44, 64, 123, 45, 50, 44, 40, 36, 120, 50, 44, 36, 121, 50, > 44, 48, 44, 50, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 114, 101, > 102, 114, 101, 115, 104, 95, 112, 97, 108, 101, 116, 116, 101, 61, 49, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, 51, > 44, 98, 125, 34, 32, 38, 38, 32, 34, 36, 120, 51, 62, 61, 48, 125, > 10, 45, 105, 102, 32, 123, 36, 120, 51, 60, 51, 56, 52, 34, 32, 38, > 38, 32, 34, 36, 121, 51, 62, 61, 49, 57, 50, 125, 32, 98, 114, 117, > 115, 104, 97, 110, 103, 108, 101, 61, 123, 36, 120, 51, 42, 49, 56, 48, > 47, 40, 119, 45, 49, 54, 41, 125, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 120, 51, 62, 61, 51, 56, 52, 34, 32, 38, 38, 32, 34, 36, 121, > 51, 60, 49, 57, 50, 125, 32, 98, 114, 117, 115, 104, 116, 104, 105, 99, > 107, 110, 101, 115, 115, 61, 123, 36, 121, 51, 47, 40, 104, 45, 49, 54, > 41, 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 120, 51, 60, 51, 56, > 52, 34, 32, 38, 38, 32, 34, 36, 121, 51, 60, 49, 57, 50, 125, 32, > 98, 114, 117, 115, 104, 115, 105, 122, 101, 61, 123, 105, 110, 116, 40, 36, > 120, 51, 42, 56, 47, 40, 119, 45, 49, 54, 41, 41, 125, 32, 98, 114, > 117, 115, 104, 111, 112, 97, 99, 105, 116, 121, 61, 123, 105, 110, 116, 40, > 36, 121, 51, 42, 52, 47, 40, 104, 45, 49, 54, 41, 41, 125, 10, 45, > 101, 110, 100, 105, 102, 10, 114, 101, 102, 114, 101, 115, 104, 95, 98, 114, > 117, 115, 104, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 97, > 105, 116, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 123, 33, 49, 125, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 49, 44, 81, 125, 34, 32, > 38, 38, 32, 34, 33, 64, 123, 33, 49, 44, 69, 83, 67, 125, 125, 10, > 45, 119, 49, 91, 93, 32, 48, 32, 45, 119, 50, 91, 93, 32, 48, 32, > 45, 119, 51, 91, 93, 32, 48, 32, 45, 114, 109, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, > 95, 112, 108, 97, 115, 109, 97, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 112, 108, 97, 115, > 109, 97, 32, 101, 102, 102, 101, 99, 116, 32, 100, 101, 109, 111, 46, 10, > 120, 95, 112, 108, 97, 115, 109, 97, 32, 58, 10, 45, 101, 91, 93, 32, > 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 80, 108, 97, 115, 109, > 97, 32, 101, 102, 102, 101, 99, 116, 32, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, > 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, 117, > 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, > 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 119, > 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, > 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 34, 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 10, 78, 61, 56, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 10, 50, 53, 54, 44, 49, > 53, 48, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 112, 108, 97, 115, 109, 97, 91, 45, > 49, 93, 32, 49, 44, 48, 44, 55, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 53, 53, 10, 97, 109, 112, 61, 123, 63, 40, 45, 52, 48, > 44, 52, 48, 41, 125, 32, 102, 114, 101, 113, 61, 123, 114, 111, 117, 110, > 100, 40, 63, 40, 50, 44, 54, 41, 41, 125, 32, 100, 105, 114, 36, 62, > 61, 123, 105, 102, 40, 63, 60, 48, 46, 53, 44, 45, 49, 44, 49, 41, > 42, 114, 111, 117, 110, 100, 40, 63, 40, 49, 44, 50, 41, 41, 125, 10, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, 36, > 97, 109, 112, 42, 99, 111, 115, 40, 121, 42, 50, 42, 112, 105, 42, 36, > 102, 114, 101, 113, 47, 104, 41, 39, 10, 45, 100, 111, 110, 101, 10, 123, > 119, 43, 50, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, 120, > 39, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, > 39, 89, 61, 40, 121, 45, 54, 48, 43, 53, 42, 99, 111, 115, 40, 120, > 47, 51, 48, 41, 43, 49, 48, 42, 115, 105, 110, 40, 120, 47, 49, 53, > 41, 41, 59, 105, 102, 40, 89, 60, 48, 124, 124, 89, 62, 61, 51, 50, > 44, 45, 49, 44, 89, 41, 39, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 42, 42, > 32, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 71, 92, 52, 55, > 77, 73, 67, 44, 32, 97, 32, 112, 111, 119, 101, 114, 102, 117, 108, 32, > 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, > 32, 102, 114, 97, 109, 101, 119, 111, 114, 107, 32, 42, 42, 34, 44, 48, > 44, 48, 44, 51, 51, 44, 49, 44, 50, 53, 53, 10, 45, 98, 91, 45, > 49, 93, 32, 48, 46, 54, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 77, 61, 123, 119, 125, 10, 45, 119, 91, 93, 32, 123, > 49, 46, 53, 42, 64, 123, 48, 44, 119, 125, 125, 44, 123, 49, 46, 53, > 42, 64, 123, 48, 44, 104, 125, 125, 44, 48, 44, 34, 91, 71, 92, 52, > 55, 77, 73, 67, 93, 32, 80, 108, 97, 115, 109, 97, 32, 101, 102, 102, > 101, 99, 116, 34, 10, 116, 61, 48, 32, 116, 116, 61, 123, 45, 49, 46, > 53, 42, 64, 123, 48, 44, 119, 125, 125, 10, 45, 100, 111, 10, 116, 105, > 99, 61, 64, 124, 10, 97, 61, 123, 105, 110, 116, 40, 36, 116, 41, 125, > 32, 32, 32, 97, 50, 61, 123, 50, 42, 36, 97, 125, 32, 97, 50, 49, > 61, 123, 36, 97, 50, 43, 49, 125, 10, 98, 61, 123, 40, 36, 97, 43, > 49, 41, 37, 36, 78, 125, 32, 98, 50, 61, 123, 50, 42, 36, 98, 125, > 32, 98, 50, 49, 61, 123, 36, 98, 50, 43, 49, 125, 10, 45, 45, 119, > 97, 114, 112, 91, 36, 97, 50, 93, 32, 91, 36, 97, 50, 49, 93, 44, > 49, 44, 48, 44, 50, 10, 45, 45, 119, 97, 114, 112, 91, 36, 98, 50, > 93, 32, 91, 36, 98, 50, 49, 93, 44, 49, 44, 48, 44, 50, 10, 45, > 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, > 44, 48, 44, 123, 36, 116, 45, 36, 97, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 105, 102, 116, 91, 36, 97, 50, 49, 93, 32, > 48, 44, 36, 123, 100, 105, 114, 36, 97, 125, 44, 48, 44, 48, 44, 50, > 10, 45, 115, 104, 105, 102, 116, 91, 36, 98, 50, 49, 93, 32, 48, 44, > 36, 123, 100, 105, 114, 36, 98, 125, 44, 48, 44, 48, 44, 50, 10, 45, > 105, 102, 32, 123, 105, 110, 116, 40, 36, 116, 43, 48, 46, 48, 48, 53, > 41, 62, 105, 110, 116, 40, 36, 116, 41, 125, 32, 100, 105, 114, 36, 97, > 61, 123, 105, 102, 40, 63, 60, 48, 46, 53, 44, 45, 49, 44, 49, 41, > 42, 114, 111, 117, 110, 100, 40, 63, 40, 49, 44, 51, 41, 41, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 116, 61, 123, 40, 36, 116, 43, 40, 64, > 124, 45, 36, 116, 105, 99, 41, 41, 37, 36, 78, 125, 10, 45, 45, 122, > 91, 45, 50, 93, 32, 36, 116, 116, 44, 123, 36, 116, 116, 43, 119, 45, > 49, 43, 50, 125, 10, 45, 119, 97, 114, 112, 91, 45, 49, 93, 32, 91, > 45, 52, 93, 44, 48, 44, 48, 44, 48, 10, 45, 114, 91, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, > 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, > 32, 50, 53, 53, 10, 45, 106, 91, 45, 51, 93, 32, 91, 45, 49, 93, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 50, 93, 44, > 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 106, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 45, 50, 44, 45, 50, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 116, 116, 61, 123, 36, 116, 116, 43, 40, 64, 124, > 45, 36, 116, 105, 99, 41, 42, 50, 53, 48, 125, 10, 45, 105, 102, 32, > 123, 36, 116, 116, 62, 61, 36, 77, 125, 32, 116, 116, 61, 123, 45, 49, > 46, 53, 42, 64, 123, 48, 44, 119, 125, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 51, 42, 119, 125, 44, > 123, 51, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, > 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, > 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 49, 46, 53, 42, 119, 125, > 44, 123, 49, 46, 53, 42, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 48, > 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, > 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, 109, 91, 123, 45, 50, > 42, 36, 78, 45, 50, 125, 45, 45, 49, 93, 32, 45, 119, 91, 93, 32, > 48, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, > 103, 98, 32, 58, 32, 95, 110, 98, 99, 111, 108, 111, 114, 115, 62, 61, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, > 104, 32, 116, 104, 101, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, > 113, 117, 97, 110, 116, 105, 122, 97, 116, 105, 111, 110, 32, 100, 101, 109, > 111, 46, 10, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, > 98, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, > 116, 40, 36, 123, 49, 61, 49, 54, 125, 41, 32, 38, 38, 32, 36, 49, > 62, 49, 34, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, > 45, 45, 45, 32, 82, 71, 66, 32, 81, 117, 97, 110, 116, 105, 122, 97, > 116, 105, 111, 110, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 84, 104, 105, 115, 32, 100, > 101, 109, 111, 32, 115, 104, 111, 119, 115, 32, 104, 111, 119, 32, 82, 71, > 66, 32, 99, 111, 108, 111, 114, 115, 32, 99, 97, 110, 32, 98, 101, 32, > 113, 117, 97, 110, 116, 105, 102, 105, 101, 100, 32, 117, 115, 105, 110, 103, > 92, 110, 10, 45, 45, 45, 45, 32, 116, 104, 101, 32, 107, 45, 109, 101, > 97, 110, 115, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 76, 101, 102, > 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 111, > 110, 32, 51, 100, 32, 118, 105, 101, 119, 32, 114, 111, 116, 97, 116, 101, > 115, 32, 116, 104, 101, 32, 99, 111, 108, 111, 114, 32, 99, 117, 98, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, 32, 109, > 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 111, 110, 32, 51, > 100, 32, 118, 105, 101, 119, 32, 116, 111, 103, 103, 108, 101, 115, 32, 99, > 111, 108, 111, 114, 115, 47, 99, 108, 117, 115, 116, 101, 114, 115, 32, 109, > 111, 100, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 76, 101, 102, 116, > 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 111, 110, > 32, 105, 109, 97, 103, 101, 32, 116, 111, 103, 103, 108, 101, 115, 32, 100, > 105, 116, 104, 101, 114, 105, 110, 103, 32, 109, 111, 100, 101, 44, 92, 110, > 10, 45, 45, 45, 45, 32, 76, 101, 102, 116, 32, 109, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 32, 111, 110, 32, 99, 111, 108, 111, 114, > 109, 97, 112, 32, 97, 100, 100, 115, 32, 97, 32, 114, 97, 110, 100, 111, > 109, 32, 99, 111, 108, 111, 114, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 82, 105, 103, 104, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, > 111, 110, 32, 111, 110, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 114, > 101, 109, 111, 118, 101, 115, 32, 97, 32, 99, 111, 108, 111, 114, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 82, 39, 32, 105, > 110, 105, 116, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, 116, > 104, 32, 114, 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 115, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 85, 39, 32, > 105, 110, 105, 116, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, > 116, 104, 32, 117, 110, 105, 102, 111, 114, 109, 32, 115, 97, 109, 112, 108, > 105, 110, 103, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, > 39, 77, 39, 32, 105, 110, 105, 116, 32, 99, 111, 108, 111, 114, 109, 97, > 112, 32, 119, 105, 116, 104, 32, 109, 101, 100, 105, 97, 110, 45, 99, 117, > 116, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 32, 39, 83, 80, 65, 67, 69, 39, 32, > 100, 111, 101, 115, 32, 97, 32, 115, 105, 110, 103, 108, 101, 32, 105, 116, > 101, 114, 97, 116, 105, 111, 110, 32, 111, 102, 32, 107, 45, 109, 101, 97, > 110, 115, 32, 97, 110, 100, 32, 112, 97, 117, 115, 101, 115, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 69, 78, 84, 69, 82, > 39, 32, 114, 117, 110, 115, 32, 107, 45, 109, 101, 97, 110, 115, 32, 97, > 108, 103, 111, 114, 105, 116, 104, 109, 46, 92, 110, 10, 45, 45, 45, 45, > 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, > 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, > 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, > 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, > 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, > 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, > 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 116, 101, 115, 116, > 105, 109, 97, 103, 101, 50, 100, 32, 51, 48, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, > 32, 45, 105, 102, 32, 123, 104, 62, 51, 48, 48, 125, 32, 45, 114, 50, > 100, 121, 32, 51, 48, 48, 32, 45, 114, 111, 117, 110, 100, 32, 49, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 110, 109, 91, 45, 49, 93, 32, 105, > 109, 103, 10, 45, 45, 114, 32, 123, 119, 42, 104, 125, 44, 49, 44, 49, > 44, 51, 44, 45, 49, 32, 45, 114, 91, 45, 49, 93, 32, 123, 109, 105, > 110, 40, 119, 44, 56, 49, 57, 50, 41, 125, 44, 49, 44, 49, 44, 51, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 111, 108, 111, 114, 115, 10, > 36, 49, 44, 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 111, 117, 110, 100, 91, > 45, 49, 93, 32, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 101, > 110, 116, 114, 111, 105, 100, 115, 10, 45, 95, 120, 95, 113, 117, 97, 110, > 116, 105, 122, 101, 95, 114, 103, 98, 95, 51, 100, 32, 40, 49, 44, 48, > 44, 48, 44, 48, 59, 48, 44, 49, 44, 48, 44, 48, 59, 48, 44, 48, > 44, 49, 44, 48, 41, 32, 45, 110, 109, 91, 45, 49, 93, 32, 112, 111, > 115, 101, 51, 100, 10, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, > 101, 95, 114, 103, 98, 95, 116, 101, 120, 116, 32, 34, 67, 111, 108, 111, > 114, 115, 34, 44, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 48, 10, > 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, > 95, 116, 101, 120, 116, 32, 34, 67, 108, 117, 115, 116, 101, 114, 115, 34, > 44, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 49, 10, 45, 95, 120, > 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, 95, 116, 101, > 120, 116, 32, 34, 68, 105, 116, 104, 101, 114, 105, 110, 103, 58, 32, 111, > 102, 102, 34, 44, 100, 105, 116, 104, 101, 114, 105, 110, 103, 48, 10, 45, > 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, 95, > 116, 101, 120, 116, 32, 34, 68, 105, 116, 104, 101, 114, 105, 110, 103, 58, > 32, 111, 110, 34, 44, 100, 105, 116, 104, 101, 114, 105, 110, 103, 49, 10, > 45, 105, 102, 32, 123, 64, 123, 105, 109, 103, 44, 104, 125, 60, 51, 48, > 48, 125, 32, 45, 45, 114, 50, 100, 121, 91, 105, 109, 103, 93, 32, 51, > 48, 48, 44, 49, 32, 45, 101, 108, 115, 101, 32, 91, 105, 109, 103, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 123, 119, 43, 51, 49, 53, 125, 44, > 51, 54, 53, 44, 49, 44, 51, 44, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 50, 93, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, > 49, 93, 32, 52, 44, 52, 44, 51, 48, 53, 44, 51, 48, 53, 44, 49, > 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 114, > 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 51, 48, 57, > 44, 52, 44, 123, 119, 45, 53, 125, 44, 51, 48, 53, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 114, 101, 99, > 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 52, 44, 51, 48, 57, > 44, 123, 119, 45, 53, 125, 44, 51, 54, 48, 44, 49, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 91, 45, 49, 93, 44, 91, > 45, 49, 93, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, > 49, 93, 32, 51, 49, 48, 44, 53, 44, 123, 119, 45, 54, 125, 44, 51, > 48, 53, 44, 49, 44, 49, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, > 101, 91, 45, 49, 93, 32, 53, 44, 51, 49, 48, 44, 123, 119, 45, 54, > 125, 44, 51, 54, 48, 44, 49, 44, 50, 10, 51, 48, 48, 44, 51, 48, > 48, 44, 49, 44, 49, 44, 39, 40, 121, 60, 60, 49, 49, 41, 43, 40, > 120, 60, 60, 50, 41, 43, 51, 39, 32, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 53, 44, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 118, 105, 115, 117, 10, 100, 105, 116, 104, 101, > 114, 105, 110, 103, 61, 48, 32, 99, 108, 117, 115, 116, 101, 114, 105, 110, > 103, 61, 48, 32, 112, 97, 117, 115, 101, 61, 49, 32, 115, 48, 61, 111, > 102, 102, 32, 115, 49, 61, 111, 110, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 49, 101, 49, 48, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, > 40, 36, 118, 105, 115, 117, 95, 51, 100, 41, 125, 10, 45, 45, 45, 91, > 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 50, 32, 45, 45, 43, > 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 50, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, 112, 101, 114, 109, 117, > 116, 101, 91, 45, 49, 93, 32, 99, 120, 121, 122, 32, 45, 121, 91, 45, > 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 10, 45, 106, > 91, 111, 98, 106, 51, 100, 93, 32, 91, 45, 49, 93, 44, 48, 44, 56, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 91, 111, 98, 106, 51, 100, 93, > 10, 45, 105, 102, 32, 36, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, > 10, 45, 105, 102, 32, 123, 64, 123, 99, 111, 108, 111, 114, 115, 44, 77, > 125, 60, 50, 53, 54, 125, 32, 45, 45, 105, 110, 100, 101, 120, 91, 99, > 111, 108, 111, 114, 115, 93, 32, 91, 99, 101, 110, 116, 114, 111, 105, 100, > 115, 93, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 54, 32, 45, 43, > 91, 99, 111, 108, 111, 114, 115, 44, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 99, 111, > 108, 111, 114, 115, 93, 32, 48, 32, 45, 62, 62, 91, 45, 49, 93, 32, > 56, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 50, 32, 45, 112, 101, > 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 99, 120, 121, 122, 32, 45, > 121, 91, 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 48, 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 36, 95, 78, > 45, 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 97, 112, 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, > 91, 45, 49, 93, 32, 64, 112, 111, 115, 101, 51, 100, 32, 51, 48, 48, > 44, 51, 48, 48, 44, 49, 44, 51, 32, 45, 111, 98, 106, 101, 99, 116, > 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, > 53, 48, 37, 44, 49, 48, 48, 44, 49, 44, 50, 44, 48, 44, 48, 44, > 51, 48, 48, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 106, 91, 45, > 49, 93, 32, 91, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 36, 99, > 108, 117, 115, 116, 101, 114, 105, 110, 103, 93, 44, 50, 44, 48, 44, 48, > 44, 48, 44, 49, 44, 91, 109, 99, 108, 117, 115, 116, 101, 114, 105, 110, > 103, 36, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 93, 44, 50, 53, > 53, 10, 45, 110, 109, 91, 45, 49, 93, 32, 118, 105, 115, 117, 95, 51, > 100, 32, 45, 106, 91, 118, 105, 115, 117, 93, 32, 91, 118, 105, 115, 117, > 95, 51, 100, 93, 44, 53, 44, 53, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, 36, 118, 105, 115, 117, > 95, 105, 109, 103, 41, 125, 10, 45, 45, 105, 110, 100, 101, 120, 91, 105, > 109, 103, 93, 32, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 44, > 123, 48, 46, 55, 42, 36, 100, 105, 116, 104, 101, 114, 105, 110, 103, 125, > 44, 49, 32, 45, 105, 102, 32, 123, 104, 60, 51, 48, 48, 125, 32, 45, > 114, 50, 100, 121, 91, 45, 49, 93, 32, 51, 48, 48, 44, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 106, 91, 45, 49, 93, 32, 91, 100, 105, > 116, 104, 101, 114, 105, 110, 103, 36, 100, 105, 116, 104, 101, 114, 105, 110, > 103, 93, 44, 50, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 109, 100, > 105, 116, 104, 101, 114, 105, 110, 103, 36, 100, 105, 116, 104, 101, 114, 105, > 110, 103, 93, 44, 50, 53, 53, 10, 45, 110, 109, 91, 45, 49, 93, 32, > 118, 105, 115, 117, 95, 105, 109, 103, 32, 45, 106, 91, 118, 105, 115, 117, > 93, 32, 91, 118, 105, 115, 117, 95, 105, 109, 103, 93, 44, 51, 49, 48, > 44, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, > 110, 97, 114, 103, 40, 36, 118, 105, 115, 117, 95, 99, 101, 110, 116, 114, > 111, 105, 100, 115, 41, 125, 10, 45, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 97, > 91, 45, 49, 93, 32, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, > 44, 121, 32, 45, 115, 111, 114, 116, 91, 45, 49, 93, 32, 43, 44, 120, > 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, > 45, 49, 93, 32, 123, 64, 123, 118, 105, 115, 117, 44, 119, 125, 45, 49, > 48, 125, 44, 53, 48, 44, 49, 44, 51, 10, 48, 32, 45, 116, 91, 45, > 49, 93, 32, 34, 67, 111, 108, 111, 114, 115, 58, 32, 34, 64, 123, 99, > 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 44, 50, 44, 48, 44, > 49, 54, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, > 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 50, 44, 50, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 10, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 118, 105, 115, 117, 95, 99, 101, 110, 116, 114, 111, 105, 100, 115, > 32, 45, 106, 91, 118, 105, 115, 117, 93, 32, 91, 118, 105, 115, 117, 95, > 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 44, 53, 44, 51, 49, 48, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 108, 91, 118, 105, 115, 117, 93, > 10, 45, 119, 32, 45, 49, 44, 45, 49, 44, 48, 44, 34, 91, 71, 92, > 52, 55, 77, 73, 67, 93, 32, 82, 71, 66, 32, 113, 117, 97, 110, 116, > 105, 122, 97, 116, 105, 111, 110, 34, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, > 123, 50, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, > 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, > 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 10, 120, 61, > 123, 105, 110, 116, 40, 64, 123, 33, 44, 120, 125, 42, 64, 123, 118, 105, > 115, 117, 44, 119, 125, 47, 64, 123, 33, 44, 119, 125, 41, 125, 10, 121, > 61, 123, 105, 110, 116, 40, 64, 123, 33, 44, 121, 125, 42, 64, 123, 118, > 105, 115, 117, 44, 104, 125, 47, 64, 123, 33, 44, 104, 125, 41, 125, 10, > 98, 61, 64, 123, 33, 44, 98, 125, 10, 105, 61, 64, 123, 118, 105, 115, > 117, 44, 40, 36, 120, 44, 36, 121, 44, 48, 44, 51, 41, 125, 10, 45, > 105, 102, 32, 123, 36, 98, 38, 49, 34, 32, 38, 38, 32, 34, 36, 105, > 61, 61, 49, 125, 10, 100, 105, 116, 104, 101, 114, 105, 110, 103, 61, 123, > 33, 36, 100, 105, 116, 104, 101, 114, 105, 110, 103, 125, 32, 45, 114, 109, > 91, 118, 105, 115, 117, 95, 105, 109, 103, 93, 32, 45, 119, 97, 105, 116, > 32, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 98, 38, 49, 34, > 32, 38, 38, 32, 34, 36, 105, 61, 61, 50, 125, 10, 40, 64, 123, 45, > 82, 71, 66, 125, 41, 32, 45, 121, 91, 45, 49, 93, 32, 99, 32, 45, > 97, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 45, 49, 93, 32, > 120, 32, 32, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, > 114, 103, 98, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, > 51, 100, 44, 118, 105, 115, 117, 95, 105, 109, 103, 44, 118, 105, 115, 117, > 95, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 97, 110, 100, > 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, 112, 97, 117, > 115, 101, 61, 49, 32, 45, 119, 97, 105, 116, 32, 49, 48, 48, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 98, 38, 50, 34, 32, 38, 38, 32, 34, > 36, 105, 61, 61, 50, 34, 32, 38, 38, 32, 34, 64, 123, 99, 101, 110, > 116, 114, 111, 105, 100, 115, 44, 119, 125, 62, 50, 125, 10, 45, 114, 91, > 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 123, 64, 123, 99, 101, > 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 45, 49, 125, 32, 45, 95, > 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, 95, 51, > 100, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, 51, 100, 44, 118, 105, > 115, 117, 95, 105, 109, 103, 44, 118, 105, 115, 117, 95, 99, 101, 110, 116, > 114, 111, 105, 100, 115, 93, 32, 45, 97, 110, 100, 91, 99, 111, 108, 111, > 114, 115, 93, 32, 50, 53, 53, 32, 112, 97, 117, 115, 101, 61, 49, 32, > 45, 119, 97, 105, 116, 32, 49, 48, 48, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 98, 38, 50, 34, 32, 38, 38, 32, 34, 36, 105, 62, 61, 51, > 125, 10, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 61, 123, 33, 36, > 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 125, 32, 45, 114, 109, 91, > 118, 105, 115, 117, 95, 51, 100, 93, 32, 45, 119, 97, 105, 116, 32, 45, > 49, 10, 45, 101, 108, 105, 102, 32, 64, 123, 33, 44, 77, 125, 10, 45, > 45, 97, 110, 100, 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, > 32, 45, 99, 111, 108, 111, 114, 109, 97, 112, 91, 45, 49, 93, 32, 64, > 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 101, 110, 116, 114, 111, 105, > 100, 115, 10, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, > 114, 103, 98, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, > 51, 100, 44, 118, 105, 115, 117, 95, 105, 109, 103, 44, 118, 105, 115, 117, > 95, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 97, 110, 100, > 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, 112, 97, 117, > 115, 101, 61, 49, 32, 45, 119, 97, 105, 116, 32, 45, 49, 10, 45, 101, > 108, 105, 102, 32, 64, 123, 33, 44, 82, 125, 10, 45, 114, 97, 110, 100, > 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 114, 111, 117, 110, 100, 91, 99, 101, 110, 116, 114, 111, 105, > 100, 115, 93, 32, 49, 10, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, > 122, 101, 95, 114, 103, 98, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, > 115, 117, 95, 51, 100, 44, 118, 105, 115, 117, 95, 105, 109, 103, 44, 118, > 105, 115, 117, 95, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, > 97, 110, 100, 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, > 112, 97, 117, 115, 101, 61, 49, 32, 45, 119, 97, 105, 116, 32, 45, 49, > 10, 45, 101, 108, 105, 102, 32, 64, 123, 33, 44, 85, 125, 10, 45, 117, > 110, 105, 102, 111, 114, 109, 95, 100, 105, 115, 116, 114, 105, 98, 117, 116, > 105, 111, 110, 32, 64, 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, > 119, 125, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, > 45, 114, 109, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, > 110, 109, 91, 45, 49, 93, 32, 99, 101, 110, 116, 114, 111, 105, 100, 115, > 10, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, > 98, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, 51, 100, > 44, 118, 105, 115, 117, 95, 105, 109, 103, 44, 118, 105, 115, 117, 95, 99, > 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 97, 110, 100, 91, 99, > 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, 112, 97, 117, 115, 101, > 61, 49, 32, 45, 119, 97, 105, 116, 32, 45, 49, 10, 45, 101, 108, 105, > 102, 32, 64, 123, 33, 44, 69, 78, 84, 69, 82, 125, 10, 112, 97, 117, > 115, 101, 61, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 98, 38, 49, > 34, 32, 38, 38, 32, 34, 36, 105, 62, 61, 51, 125, 10, 99, 111, 111, > 114, 100, 115, 61, 123, 64, 123, 118, 105, 115, 117, 44, 40, 36, 120, 44, > 36, 121, 44, 48, 44, 51, 41, 125, 45, 51, 125, 32, 117, 49, 61, 123, > 40, 40, 36, 99, 111, 111, 114, 100, 115, 62, 62, 50, 41, 38, 53, 49, > 49, 41, 45, 49, 53, 48, 125, 32, 118, 49, 61, 123, 40, 36, 99, 111, > 111, 114, 100, 115, 62, 62, 49, 49, 41, 45, 49, 53, 48, 125, 10, 45, > 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, 36, 117, 48, 41, 125, 32, > 117, 48, 61, 36, 117, 49, 32, 118, 48, 61, 36, 118, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 117, 48, 33, 61, 36, > 117, 49, 34, 32, 38, 38, 32, 34, 36, 118, 48, 33, 61, 36, 118, 49, > 125, 10, 110, 48, 61, 123, 115, 113, 114, 116, 40, 40, 36, 117, 48, 41, > 94, 50, 43, 40, 36, 118, 48, 41, 94, 50, 41, 125, 10, 110, 117, 48, > 61, 123, 105, 102, 40, 36, 110, 48, 62, 49, 51, 53, 44, 36, 117, 48, > 42, 49, 51, 53, 47, 36, 110, 48, 44, 36, 117, 48, 41, 125, 32, 110, > 118, 48, 61, 123, 105, 102, 40, 36, 110, 48, 62, 49, 51, 53, 44, 36, > 118, 48, 42, 49, 51, 53, 47, 36, 110, 48, 44, 36, 118, 48, 41, 125, > 32, 110, 119, 48, 61, 123, 115, 113, 114, 116, 40, 109, 97, 120, 40, 48, > 44, 49, 56, 50, 50, 53, 45, 40, 36, 110, 117, 48, 41, 94, 50, 45, > 40, 36, 110, 118, 48, 41, 94, 50, 41, 41, 125, 10, 110, 49, 61, 123, > 115, 113, 114, 116, 40, 40, 36, 117, 49, 41, 94, 50, 43, 40, 36, 118, > 49, 41, 94, 50, 41, 125, 10, 110, 117, 49, 61, 123, 105, 102, 40, 36, > 110, 49, 62, 49, 51, 53, 44, 36, 117, 49, 42, 49, 51, 53, 47, 36, > 110, 49, 44, 36, 117, 49, 41, 125, 32, 110, 118, 49, 61, 123, 105, 102, > 40, 36, 110, 49, 62, 49, 51, 53, 44, 36, 118, 49, 42, 49, 51, 53, > 47, 36, 110, 49, 44, 36, 118, 49, 41, 125, 32, 110, 119, 49, 61, 123, > 115, 113, 114, 116, 40, 109, 97, 120, 40, 48, 44, 49, 56, 50, 50, 53, > 45, 40, 36, 110, 117, 49, 41, 94, 50, 45, 40, 36, 110, 118, 49, 41, > 94, 50, 41, 41, 125, 10, 117, 61, 123, 36, 110, 118, 48, 42, 36, 110, > 119, 49, 45, 36, 110, 119, 48, 42, 36, 110, 118, 49, 125, 32, 118, 61, > 123, 36, 110, 119, 48, 42, 36, 110, 117, 49, 45, 36, 110, 117, 48, 42, > 36, 110, 119, 49, 125, 32, 119, 61, 123, 36, 110, 118, 48, 42, 36, 110, > 117, 49, 45, 36, 110, 117, 48, 42, 36, 110, 118, 49, 125, 32, 110, 61, > 123, 115, 113, 114, 116, 40, 40, 36, 117, 41, 94, 50, 43, 40, 36, 118, > 41, 94, 50, 43, 40, 36, 119, 41, 94, 50, 41, 125, 10, 45, 114, 111, > 116, 97, 116, 105, 111, 110, 51, 100, 91, 93, 32, 36, 117, 44, 36, 118, > 44, 36, 119, 44, 123, 97, 115, 105, 110, 40, 36, 110, 47, 49, 56, 50, > 50, 53, 41, 42, 49, 56, 48, 47, 112, 105, 125, 32, 45, 109, 118, 91, > 112, 111, 115, 101, 51, 100, 93, 32, 64, 35, 32, 45, 42, 42, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 112, 111, > 115, 101, 51, 100, 10, 117, 48, 61, 36, 117, 49, 32, 118, 48, 61, 36, > 118, 49, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, 51, 100, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 33, 40, > 36, 98, 38, 49, 41, 125, 32, 117, 48, 61, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 33, 36, 112, 97, 117, 115, 101, 34, 32, > 124, 124, 32, 34, 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, 125, 10, > 112, 97, 117, 115, 101, 61, 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, > 10, 45, 97, 110, 100, 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, > 53, 32, 45, 45, 105, 110, 100, 101, 120, 91, 99, 111, 108, 111, 114, 115, > 93, 32, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 53, 54, 32, 45, 43, 91, 99, 111, 108, 111, > 114, 115, 44, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 123, 99, 111, 108, 111, 114, 115, 44, 115, 125, 10, 45, 115, 104, 91, 99, > 111, 108, 111, 114, 115, 93, 32, 36, 62, 44, 36, 62, 32, 45, 45, 104, > 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 64, 123, > 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 42, 50, 53, 54, > 125, 44, 48, 44, 123, 64, 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, > 44, 119, 125, 42, 50, 53, 54, 45, 49, 125, 32, 45, 114, 109, 91, 45, > 50, 93, 10, 45, 105, 91, 45, 50, 93, 32, 50, 53, 54, 44, 49, 44, > 49, 44, 49, 44, 39, 120, 39, 32, 45, 114, 91, 45, 50, 93, 32, 123, > 119, 125, 44, 49, 44, 49, 44, 49, 44, 48, 44, 50, 32, 45, 42, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 64, 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, > 125, 44, 49, 44, 49, 44, 49, 44, 50, 32, 45, 109, 97, 120, 91, 45, > 49, 93, 32, 48, 46, 48, 49, 32, 45, 47, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 100, 111, 110, 101, 32, 45, 97, 91, 45, 64, 123, 99, 111, > 108, 111, 114, 115, 44, 115, 125, 45, 45, 49, 93, 32, 99, 10, 45, 114, > 109, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 99, 101, 110, 116, 114, 111, 105, 100, 115, 10, 45, > 45, 62, 62, 91, 99, 111, 108, 111, 114, 115, 93, 32, 56, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 104, > 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 64, 123, 99, > 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 44, 48, 44, 123, 64, > 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 45, 49, 125, > 10, 99, 109, 97, 120, 61, 64, 123, 45, 49, 44, 120, 77, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 32, 45, 105, 102, 32, 123, > 33, 105, 40, 36, 62, 41, 125, 32, 45, 112, 111, 105, 110, 116, 91, 99, > 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 36, 62, 44, 48, 44, 48, > 44, 49, 44, 64, 123, 45, 97, 116, 91, 99, 101, 110, 116, 114, 111, 105, > 100, 115, 93, 92, 32, 36, 99, 109, 97, 120, 125, 32, 45, 112, 111, 105, > 110, 116, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 36, 62, > 44, 48, 44, 48, 44, 45, 48, 46, 48, 48, 49, 44, 64, 123, 45, 82, > 71, 66, 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, > 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 99, 91, 99, 101, 110, 116, > 114, 111, 105, 100, 115, 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 36, 118, 105, 115, 117, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, > 115, 117, 95, 51, 100, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 36, 118, 105, 115, 117, 95, 105, 109, 103, 32, 45, 114, 109, 91, > 118, 105, 115, 117, 95, 105, 109, 103, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 118, 105, 115, 117, 95, 99, 101, 110, 116, 114, > 111, 105, 100, 115, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, 99, 101, > 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 101, 108, 115, 101, 32, 45, > 105, 102, 32, 36, 118, 105, 115, 117, 95, 105, 109, 103, 32, 45, 119, 97, > 105, 116, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 33, 64, 33, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 81, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 69, > 83, 67, 125, 125, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 32, 45, 119, 32, > 48, 32, 45, 118, 32, 43, 10, 95, 120, 95, 113, 117, 97, 110, 116, 105, > 122, 101, 95, 114, 103, 98, 95, 51, 100, 32, 58, 10, 45, 105, 102, 32, > 36, 111, 98, 106, 51, 100, 32, 45, 114, 109, 91, 111, 98, 106, 51, 100, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 100, 105, 115, 116, 114, > 105, 98, 117, 116, 105, 111, 110, 51, 100, 91, 99, 101, 110, 116, 114, 111, > 105, 100, 115, 93, 32, 45, 99, 105, 114, 99, 108, 101, 115, 51, 100, 91, > 45, 49, 93, 32, 53, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, > 32, 50, 53, 53, 10, 45, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, > 100, 32, 45, 112, 51, 100, 91, 45, 49, 93, 32, 49, 10, 45, 45, 97, > 110, 100, 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, 45, > 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, 100, 91, 45, > 49, 93, 32, 45, 111, 51, 100, 91, 45, 49, 93, 32, 48, 46, 56, 32, > 45, 43, 51, 100, 91, 45, 51, 45, 45, 49, 93, 10, 45, 45, 51, 100, > 91, 45, 49, 93, 32, 49, 50, 56, 44, 49, 50, 56, 44, 49, 50, 56, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 111, 98, 106, 51, 100, 32, 95, > 78, 61, 123, 105, 91, 55, 93, 125, 10, 95, 120, 95, 113, 117, 97, 110, > 116, 105, 122, 101, 95, 114, 103, 98, 95, 116, 101, 120, 116, 32, 58, 10, > 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 48, 44, > 48, 44, 49, 54, 44, 49, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, > 93, 32, 123, 119, 43, 50, 125, 44, 49, 53, 44, 49, 44, 49, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 45, 100, 105, 108, > 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 116, 111, 95, 114, 103, > 98, 91, 45, 50, 93, 10, 45, 110, 109, 91, 45, 50, 93, 32, 36, 50, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 109, 36, 50, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 95, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, > 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, > 99, 104, 32, 116, 104, 101, 32, 51, 100, 32, 114, 101, 102, 108, 101, 99, > 116, 105, 111, 110, 32, 100, 101, 109, 111, 46, 10, 120, 95, 114, 101, 102, > 108, 101, 99, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 101, 91, 93, > 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 51, 100, 32, 114, > 101, 102, 108, 101, 99, 116, 105, 111, 110, 32, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, > 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, > 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 34, 10, 45, 118, 32, 45, 10, 49, 50, 56, 44, 50, 53, 54, 44, > 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 32, 45, 112, 108, 97, 115, 109, 97, 91, 45, 49, 93, 32, > 49, 44, 49, 48, 48, 32, 45, 98, 108, 117, 114, 95, 120, 121, 91, 45, > 49, 93, 32, 51, 48, 44, 50, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 48, 44, 48, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 57, 48, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, > 49, 44, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 54, 48, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, > 50, 44, 50, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 56, 48, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 109, 105, 114, 114, 111, > 114, 91, 45, 49, 93, 32, 120, 32, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 120, 10, 45, 45, 108, 117, > 109, 105, 110, 97, 110, 99, 101, 91, 45, 49, 93, 32, 45, 109, 105, 114, > 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 98, 91, 45, 49, 93, > 32, 50, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 116, 111, 114, 117, 115, 51, 100, 32, 51, 48, 44, 49, 48, 32, 45, > 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 50, 48, > 48, 44, 48, 10, 45, 115, 112, 104, 101, 114, 105, 99, 97, 108, 51, 100, > 32, 52, 55, 44, 51, 52, 44, 34, 56, 48, 43, 50, 48, 42, 97, 98, > 115, 40, 99, 111, 115, 40, 50, 42, 116, 104, 101, 116, 97, 41, 41, 34, > 32, 45, 115, 51, 100, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, > 93, 32, 45, 105, 91, 45, 50, 93, 32, 51, 44, 123, 104, 125, 44, 49, > 44, 49, 44, 49, 53, 48, 44, 50, 50, 48, 44, 50, 53, 53, 44, 50, > 48, 48, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 121, 91, 45, 50, > 93, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 115, > 112, 104, 101, 114, 105, 99, 97, 108, 51, 100, 32, 52, 55, 44, 51, 52, > 44, 34, 49, 48, 48, 42, 97, 98, 115, 40, 49, 43, 48, 46, 54, 42, > 99, 111, 115, 40, 51, 42, 112, 104, 105, 41, 42, 115, 105, 110, 40, 52, > 42, 116, 104, 101, 116, 97, 41, 41, 34, 10, 45, 114, 51, 100, 91, 45, > 50, 44, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 57, 48, 32, 45, > 100, 98, 51, 100, 32, 48, 10, 120, 98, 61, 48, 32, 120, 108, 61, 48, > 32, 97, 110, 105, 109, 61, 48, 10, 45, 119, 91, 93, 32, 50, 53, 54, > 44, 50, 53, 54, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 51, 100, 32, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 34, > 10, 45, 100, 111, 10, 116, 105, 99, 61, 64, 124, 10, 45, 45, 114, 111, > 119, 115, 91, 45, 49, 93, 32, 56, 44, 123, 56, 43, 51, 42, 105, 91, > 54, 93, 45, 49, 125, 32, 45, 45, 106, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 56, 44, 48, 44, 48, 44, 123, 105, 102, 40, 36, > 97, 110, 105, 109, 60, 50, 53, 48, 44, 48, 44, 48, 46, 53, 45, 48, > 46, 53, 42, 99, 111, 115, 40, 40, 36, 97, 110, 105, 109, 45, 50, 53, > 48, 41, 47, 49, 48, 48, 41, 41, 125, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 45, 122, 91, 45, 54, 93, 32, 36, 120, 98, 44, 48, 44, > 123, 36, 120, 98, 43, 50, 53, 53, 125, 44, 50, 53, 53, 32, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 55, 53, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 51, 44, 48, > 44, 48, 10, 45, 45, 122, 91, 45, 54, 93, 32, 36, 120, 108, 44, 48, > 44, 123, 36, 120, 108, 43, 50, 53, 53, 125, 44, 50, 53, 53, 10, 120, > 102, 61, 123, 109, 105, 110, 40, 51, 48, 44, 36, 97, 110, 105, 109, 45, > 55, 48, 41, 43, 50, 48, 42, 99, 111, 115, 40, 49, 46, 56, 42, 64, > 124, 41, 125, 10, 121, 102, 61, 123, 53, 48, 43, 50, 48, 42, 115, 105, > 110, 40, 50, 46, 55, 42, 64, 124, 41, 125, 10, 45, 111, 98, 106, 101, > 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 54, 93, 44, 123, 50, > 48, 43, 36, 120, 102, 125, 37, 44, 36, 121, 102, 37, 44, 48, 44, 49, > 44, 52, 44, 48, 44, 48, 10, 45, 108, 51, 100, 32, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 55, 53, 37, > 44, 53, 48, 37, 44, 48, 44, 49, 44, 53, 44, 48, 44, 48, 32, 45, > 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, > 44, 48, 44, 48, 46, 54, 32, 45, 114, 109, 91, 45, 51, 44, 45, 49, > 93, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, > 91, 45, 52, 93, 44, 36, 120, 102, 37, 44, 36, 121, 102, 37, 44, 48, > 44, 49, 44, 52, 44, 48, 44, 48, 10, 45, 119, 91, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, > 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, > 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, 45, 101, 108, > 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, > 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 120, 98, 61, 123, 40, 36, 120, 98, 43, > 54, 41, 38, 50, 53, 53, 125, 10, 120, 108, 61, 123, 40, 36, 120, 108, > 45, 54, 41, 38, 50, 53, 53, 125, 10, 97, 110, 105, 109, 61, 123, 36, > 97, 110, 105, 109, 43, 49, 125, 10, 45, 114, 51, 100, 91, 45, 50, 44, > 45, 49, 93, 32, 123, 115, 105, 110, 40, 48, 46, 53, 42, 64, 124, 41, > 125, 44, 123, 99, 111, 115, 40, 64, 124, 41, 125, 44, 49, 44, 123, 40, > 64, 124, 45, 36, 116, 105, 99, 41, 42, 51, 51, 125, 10, 45, 114, 51, > 100, 91, 45, 51, 93, 32, 45, 49, 44, 48, 46, 51, 44, 48, 46, 56, > 44, 123, 40, 64, 124, 45, 36, 116, 105, 99, 41, 42, 49, 48, 48, 125, > 10, 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 119, 104, 105, 108, 101, > 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, > 125, 10, 45, 114, 109, 91, 45, 53, 45, 45, 49, 93, 32, 45, 119, 91, > 93, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 120, 95, 114, 117, 98, 98, 101, 114, 51, 100, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 51, > 100, 32, 114, 117, 98, 98, 101, 114, 32, 111, 98, 106, 101, 99, 116, 32, > 100, 101, 109, 111, 46, 10, 120, 95, 114, 117, 98, 98, 101, 114, 51, 100, > 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 32, 51, 100, 32, 114, 117, 98, 98, 101, 114, 32, 111, 98, 106, > 101, 99, 116, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, > 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, > 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, > 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, > 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, > 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 109, 10, 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, 49, 53, 48, > 44, 48, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 55, 48, 44, 49, > 53, 32, 45, 99, 121, 108, 105, 110, 100, 101, 114, 51, 100, 32, 50, 48, > 44, 52, 48, 10, 45, 99, 111, 108, 51, 100, 91, 45, 51, 93, 32, 50, > 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 48, 46, 51, 32, 45, > 99, 111, 108, 51, 100, 91, 45, 50, 93, 32, 49, 50, 56, 44, 50, 48, > 48, 44, 55, 54, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, > 50, 48, 48, 44, 49, 50, 56, 44, 55, 54, 10, 45, 99, 51, 100, 91, > 45, 51, 45, 45, 49, 93, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 48, 44, 48, 44, 55, 48, 32, 45, 43, 51, 100, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 48, > 44, 45, 56, 44, 50, 48, 10, 50, 53, 54, 44, 50, 53, 54, 44, 54, > 52, 44, 51, 10, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, 51, 44, > 39, 105, 102, 40, 99, 61, 61, 48, 44, 120, 44, 105, 102, 40, 99, 61, > 61, 49, 44, 121, 44, 121, 42, 64, 123, 49, 44, 100, 125, 47, 104, 41, > 41, 39, 10, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, 51, 10, 45, > 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, 34, 91, > 71, 92, 52, 55, 77, 73, 67, 93, 32, 51, 100, 32, 114, 117, 98, 98, > 101, 114, 32, 111, 98, 106, 101, 99, 116, 34, 10, 102, 114, 97, 109, 101, > 61, 48, 10, 45, 100, 111, 10, 123, 119, 125, 44, 123, 104, 125, 44, 49, > 44, 51, 32, 45, 102, 99, 91, 45, 49, 93, 32, 49, 54, 44, 51, 50, > 44, 51, 50, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, > 93, 32, 91, 48, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 49, 44, 51, 44, 48, 44, 48, 32, 45, 106, 91, 49, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 48, 44, 36, 102, 114, 97, 109, 101, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 114, 51, 100, 91, 48, 93, 32, 48, 46, > 49, 44, 49, 44, 48, 46, 54, 44, 123, 51, 42, 99, 111, 115, 40, 64, > 124, 42, 49, 46, 50, 53, 41, 125, 32, 45, 114, 51, 100, 91, 48, 93, > 32, 49, 44, 48, 46, 50, 44, 48, 46, 54, 44, 45, 49, 10, 45, 45, > 119, 97, 114, 112, 91, 49, 93, 32, 91, 50, 93, 44, 48, 44, 48, 32, > 45, 42, 91, 51, 93, 32, 48, 46, 56, 32, 45, 42, 91, 45, 49, 93, > 32, 48, 46, 50, 32, 45, 43, 91, 51, 44, 45, 49, 93, 10, 45, 119, > 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, > 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, > 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, > 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, > 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, > 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 115, 104, > 91, 50, 93, 32, 50, 44, 50, 32, 45, 45, 91, 45, 49, 93, 32, 49, > 32, 45, 97, 110, 100, 91, 45, 49, 93, 32, 123, 64, 123, 49, 44, 100, > 125, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 102, 114, 97, > 109, 101, 61, 123, 40, 36, 102, 114, 97, 109, 101, 45, 49, 41, 37, 64, > 123, 49, 44, 100, 125, 125, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, > 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, > 114, 109, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 95, 115, 104, 97, 100, 101, 98, 111, 98, 115, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, > 116, 104, 101, 32, 115, 104, 97, 100, 101, 32, 98, 111, 98, 115, 32, 100, > 101, 109, 111, 46, 10, 120, 95, 115, 104, 97, 100, 101, 98, 111, 98, 115, > 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 32, 83, 104, 97, 100, 101, 32, 98, 111, 98, 115, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, > 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, > 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 34, 10, 45, 118, 32, 45, 32, 45, 114, 109, 32, 116, 61, 49, 48, > 48, 32, 45, 119, 32, 53, 49, 50, 44, 53, 49, 50, 44, 48, 44, 34, > 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 83, 104, 97, 100, 101, 32, > 98, 111, 98, 115, 34, 10, 45, 100, 111, 10, 116, 61, 123, 36, 116, 43, > 48, 46, 48, 49, 53, 125, 10, 45, 105, 102, 32, 123, 36, 116, 62, 52, > 42, 112, 105, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 98, 125, 125, > 10, 114, 120, 61, 123, 63, 40, 45, 49, 44, 49, 41, 125, 32, 114, 121, > 61, 123, 63, 40, 45, 49, 44, 49, 41, 125, 32, 114, 122, 61, 123, 63, > 40, 45, 49, 44, 49, 41, 125, 32, 114, 116, 61, 123, 63, 40, 45, 49, > 44, 49, 41, 125, 32, 114, 99, 120, 61, 123, 63, 40, 45, 48, 46, 54, > 42, 48, 46, 54, 41, 125, 32, 116, 61, 48, 10, 78, 61, 123, 50, 48, > 43, 114, 111, 117, 110, 100, 40, 63, 40, 56, 48, 41, 41, 125, 32, 82, > 61, 123, 40, 50, 43, 114, 111, 117, 110, 100, 40, 63, 40, 52, 48, 41, > 41, 41, 42, 109, 105, 110, 40, 64, 123, 33, 44, 119, 125, 44, 64, 123, > 33, 44, 104, 125, 41, 47, 51, 48, 48, 125, 10, 45, 105, 102, 32, 36, > 111, 98, 106, 51, 100, 32, 45, 114, 109, 91, 99, 111, 108, 111, 114, 109, > 97, 112, 44, 105, 109, 103, 44, 111, 98, 106, 51, 100, 93, 32, 45, 101, > 110, 100, 105, 102, 10, 123, 52, 43, 114, 111, 117, 110, 100, 40, 63, 40, > 49, 50, 41, 41, 125, 44, 49, 44, 49, 44, 51, 32, 45, 110, 111, 105, > 115, 101, 91, 48, 93, 32, 50, 53, 53, 44, 50, 32, 45, 114, 91, 48, > 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, 42, > 91, 48, 93, 32, 50, 53, 53, 32, 45, 115, 104, 105, 102, 116, 91, 48, > 93, 32, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 111, 108, 111, > 114, 109, 97, 112, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, > 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, > 59, 49, 48, 48, 46, 53, 59, 123, 50, 42, 36, 78, 125, 59, 36, 78, > 41, 32, 51, 44, 123, 50, 42, 36, 78, 125, 44, 49, 44, 49, 44, 48, > 10, 49, 44, 36, 78, 44, 49, 44, 49, 44, 53, 32, 50, 44, 36, 78, > 44, 49, 44, 49, 44, 39, 121, 43, 120, 42, 36, 78, 39, 32, 45, 97, > 91, 45, 50, 45, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, > 32, 48, 44, 53, 10, 52, 44, 36, 78, 44, 49, 44, 49, 44, 49, 32, > 45, 121, 91, 45, 51, 45, 45, 49, 93, 32, 45, 97, 91, 45, 52, 45, > 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 111, 98, > 106, 51, 100, 10, 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, > 125, 32, 45, 110, 109, 91, 45, 49, 93, 32, 105, 109, 103, 10, 45, 119, > 97, 105, 116, 32, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 114, 61, > 123, 36, 114, 121, 43, 36, 114, 120, 42, 99, 111, 115, 40, 54, 42, 36, > 114, 122, 42, 36, 116, 41, 43, 40, 49, 45, 36, 114, 120, 41, 42, 115, > 105, 110, 40, 54, 42, 36, 114, 116, 42, 36, 116, 41, 125, 10, 40, 48, > 59, 123, 51, 48, 42, 36, 114, 121, 42, 40, 36, 78, 45, 49, 41, 125, > 41, 32, 40, 36, 116, 59, 123, 50, 42, 112, 105, 42, 40, 36, 78, 45, > 49, 41, 47, 36, 78, 43, 36, 116, 125, 41, 32, 45, 114, 91, 45, 50, > 44, 45, 49, 93, 32, 49, 44, 36, 78, 44, 49, 44, 49, 44, 51, 10, > 45, 43, 91, 45, 50, 93, 32, 123, 51, 54, 48, 42, 115, 105, 110, 40, > 36, 114, 122, 42, 36, 116, 41, 125, 32, 45, 42, 91, 45, 50, 93, 32, > 123, 112, 105, 47, 49, 56, 48, 125, 10, 45, 45, 115, 105, 110, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 52, 44, 45, 51, > 93, 32, 45, 42, 91, 45, 52, 44, 45, 50, 93, 32, 36, 114, 32, 45, > 42, 91, 45, 51, 44, 45, 49, 93, 32, 36, 114, 99, 120, 32, 45, 43, > 91, 45, 52, 44, 45, 51, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 42, 91, 45, 50, 93, 32, 123, 64, 123, 33, 44, 119, 125, > 47, 50, 125, 32, 45, 42, 91, 45, 49, 93, 32, 123, 64, 123, 33, 44, > 104, 125, 47, 50, 125, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 120, 10, 45, 45, 43, 91, 45, 49, 93, 32, 36, 82, 32, 45, 45, 91, > 45, 50, 93, 32, 36, 82, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, > 32, 121, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 121, > 91, 45, 49, 93, 32, 45, 106, 91, 111, 98, 106, 51, 100, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 56, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 105, 109, 103, 93, 32, 91, > 111, 98, 106, 51, 100, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, > 44, 45, 49, 44, 50, 44, 48, 44, 48, 10, 45, 97, 110, 100, 91, 105, > 109, 103, 93, 32, 50, 53, 53, 32, 45, 45, 109, 97, 112, 91, 105, 109, > 103, 93, 32, 91, 99, 111, 108, 111, 114, 109, 97, 112, 93, 32, 45, 119, > 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 119, 97, > 105, 116, 32, 50, 48, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, > 109, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 120, 95, 115, 112, 108, 105, 110, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 115, 112, 108, 105, > 110, 101, 32, 99, 117, 114, 118, 101, 32, 101, 100, 105, 116, 111, 114, 46, > 10, 120, 95, 115, 112, 108, 105, 110, 101, 32, 58, 10, 45, 101, 91, 93, > 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 83, 112, 108, 105, > 110, 101, 32, 99, 117, 114, 118, 101, 32, 101, 100, 105, 116, 111, 114, 32, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, 116, > 111, 32, 105, 110, 115, 101, 114, 116, 47, 109, 111, 118, 101, 47, 100, 101, > 108, 101, 116, 101, 32, 112, 111, 105, 110, 116, 115, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 32, 39, 82, 39, 32, 116, 111, 32, 114, > 101, 115, 101, 116, 32, 116, 104, 101, 32, 99, 117, 114, 118, 101, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 83, 80, 65, 67, > 69, 39, 32, 116, 111, 32, 115, 104, 111, 119, 115, 47, 104, 105, 100, 101, > 32, 115, 112, 108, 105, 110, 101, 32, 99, 117, 114, 118, 101, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 80, 39, 32, 116, 111, > 32, 115, 104, 111, 119, 115, 47, 104, 105, 100, 101, 32, 99, 111, 110, 116, > 114, 111, 108, 32, 112, 111, 105, 110, 116, 115, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 32, 39, 69, 78, 84, 69, 82, 39, 32, 116, > 111, 32, 115, 104, 111, 119, 115, 47, 104, 105, 100, 101, 32, 99, 111, 110, > 116, 114, 111, 108, 32, 112, 111, 108, 121, 103, 111, 110, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 84, 39, 32, 116, 111, 32, > 115, 104, 111, 119, 115, 47, 104, 105, 100, 101, 32, 112, 111, 105, 110, 116, > 32, 116, 97, 110, 103, 101, 110, 116, 115, 46, 92, 110, 10, 45, 45, 45, > 45, 32, 75, 101, 121, 32, 39, 73, 39, 32, 116, 111, 32, 115, 104, 111, > 119, 115, 47, 104, 105, 100, 101, 32, 112, 111, 105, 110, 116, 32, 105, 110, > 100, 105, 99, 101, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 32, 39, 67, 39, 32, 116, 111, 32, 115, 104, 111, 119, 115, 47, 104, > 105, 100, 101, 32, 112, 111, 105, 110, 116, 32, 99, 111, 111, 114, 100, 105, > 110, 97, 116, 101, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 115, 32, 39, 43, 39, 32, 97, 110, 100, 32, 39, 45, 39, 32, 116, > 111, 32, 105, 110, 99, 114, 101, 97, 115, 101, 47, 100, 101, 99, 114, 101, > 97, 115, 101, 32, 114, 111, 117, 110, 100, 110, 101, 115, 115, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, > 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, > 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 64, 35, 32, 45, 97, 32, > 120, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 114, > 103, 98, 32, 45, 101, 108, 115, 101, 32, 40, 48, 59, 48, 94, 48, 59, > 49, 50, 56, 94, 48, 59, 48, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 53, 49, 50, 44, 53, 49, 50, 44, 49, 44, 51, 44, 51, 32, 45, 110, > 97, 109, 101, 91, 45, 49, 93, 32, 34, 91, 71, 92, 52, 55, 77, 73, > 67, 93, 32, 83, 112, 108, 105, 110, 101, 32, 69, 100, 105, 116, 111, 114, > 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 91, 48, 93, 32, 64, > 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, 44, 48, 44, 48, > 44, 45, 49, 44, 45, 49, 44, 64, 123, 45, 49, 44, 110, 125, 32, 45, > 114, 91, 48, 93, 32, 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, > 104, 125, 44, 49, 44, 51, 44, 49, 10, 45, 105, 91, 49, 93, 32, 49, > 10, 114, 111, 117, 110, 100, 110, 101, 115, 115, 61, 48, 46, 53, 10, 118, > 105, 115, 117, 102, 108, 97, 103, 115, 61, 50, 51, 10, 110, 101, 97, 114, > 101, 115, 116, 61, 45, 49, 10, 97, 99, 116, 105, 118, 101, 61, 45, 49, > 10, 45, 100, 111, 10, 45, 105, 102, 32, 123, 64, 123, 49, 44, 35, 125, > 61, 61, 49, 125, 10, 45, 114, 109, 91, 49, 93, 32, 114, 111, 117, 110, > 100, 110, 101, 115, 115, 61, 48, 46, 53, 32, 110, 101, 97, 114, 101, 115, > 116, 61, 45, 49, 32, 97, 99, 116, 105, 118, 101, 61, 45, 49, 10, 45, > 105, 91, 49, 93, 32, 40, 123, 48, 46, 50, 42, 119, 125, 44, 123, 48, > 46, 50, 42, 104, 125, 59, 92, 10, 123, 48, 46, 50, 42, 119, 125, 44, > 123, 48, 46, 56, 42, 104, 125, 59, 92, 10, 123, 48, 46, 56, 42, 119, > 125, 44, 123, 48, 46, 56, 42, 104, 125, 59, 92, 10, 123, 48, 46, 56, > 42, 119, 125, 44, 123, 48, 46, 50, 42, 104, 125, 41, 10, 45, 101, 110, > 100, 105, 102, 10, 91, 49, 93, 32, 40, 123, 64, 123, 33, 44, 119, 125, > 47, 64, 123, 48, 44, 119, 125, 125, 44, 123, 64, 123, 33, 44, 104, 125, > 47, 64, 123, 48, 44, 104, 125, 125, 41, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 45, 115, 104, 105, 102, 116, 91, 50, 93, 32, 48, > 44, 45, 49, 44, 48, 44, 48, 44, 50, 32, 45, 45, 115, 104, 105, 102, > 116, 91, 50, 93, 32, 48, 44, 49, 44, 48, 44, 48, 44, 50, 32, 45, > 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, > 36, 114, 111, 117, 110, 100, 110, 101, 115, 115, 10, 45, 45, 115, 91, 45, > 49, 93, 32, 120, 32, 45, 115, 113, 114, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, 113, 114, 116, > 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 50, 32, 45, 45, > 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, > 10, 45, 45, 114, 91, 48, 93, 32, 64, 123, 33, 44, 119, 125, 44, 64, > 123, 33, 44, 104, 125, 44, 49, 44, 51, 10, 45, 105, 102, 32, 123, 36, > 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 52, 125, 32, 45, 112, 111, > 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 64, 123, 50, 44, 104, 125, > 44, 64, 50, 44, 48, 46, 51, 44, 49, 50, 56, 44, 50, 48, 48, 44, > 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 123, 49, 44, 104, 125, 10, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 64, 123, 50, 44, 48, 45, 51, 125, 44, 48, 46, 51, > 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 10, 45, 105, 102, 32, 123, > 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 49, 125, 32, 45, 115, > 112, 108, 105, 110, 101, 91, 45, 49, 93, 32, 64, 123, 50, 44, 48, 45, > 49, 125, 44, 64, 123, 51, 44, 48, 45, 49, 125, 44, 64, 123, 50, 44, > 50, 45, 51, 125, 44, 64, 123, 51, 44, 50, 45, 51, 125, 44, 51, 50, > 44, 49, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 56, 125, > 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 123, 64, 123, 50, 44, > 48, 125, 45, 64, 123, 52, 44, 48, 125, 42, 50, 48, 125, 44, 123, 64, > 123, 50, 44, 49, 125, 45, 64, 123, 52, 44, 49, 125, 42, 50, 48, 125, > 44, 123, 64, 123, 50, 44, 48, 125, 43, 64, 123, 52, 44, 48, 125, 42, > 50, 48, 125, 44, 123, 64, 123, 50, 44, 49, 125, 43, 64, 123, 52, 44, > 49, 125, 42, 50, 48, 125, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 118, 105, > 115, 117, 102, 108, 97, 103, 115, 38, 49, 54, 125, 32, 45, 116, 91, 45, > 49, 93, 32, 36, 62, 44, 123, 64, 123, 50, 44, 48, 125, 45, 51, 125, > 44, 123, 64, 123, 50, 44, 49, 125, 45, 49, 56, 125, 44, 49, 51, 44, > 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 118, 105, 115, 117, 102, 108, 97, > 103, 115, 38, 51, 50, 125, 32, 45, 116, 91, 45, 49, 93, 32, 34, 40, > 34, 123, 114, 111, 117, 110, 100, 40, 64, 123, 49, 44, 48, 125, 41, 125, > 34, 44, 34, 123, 114, 111, 117, 110, 100, 40, 64, 123, 49, 44, 49, 125, > 41, 125, 34, 41, 34, 44, 123, 64, 123, 50, 44, 48, 125, 45, 49, 54, > 125, 44, 123, 64, 123, 50, 44, 49, 125, 43, 49, 48, 125, 44, 49, 51, > 44, 49, 44, 49, 48, 48, 44, 50, 48, 48, 44, 50, 53, 53, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 115, 104, 105, 102, 116, 91, 49, 45, 52, > 93, 32, 48, 44, 45, 49, 44, 48, 44, 48, 44, 50, 10, 45, 100, 111, > 110, 101, 10, 45, 105, 102, 32, 123, 36, 118, 105, 115, 117, 102, 108, 97, > 103, 115, 34, 38, 50, 34, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 123, 49, 44, 104, 125, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, > 45, 49, 93, 32, 64, 123, 50, 44, 48, 45, 49, 125, 44, 52, 44, 52, > 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 32, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 64, 123, 50, 44, 48, 45, 49, 125, > 44, 50, 44, 50, 44, 48, 44, 49, 44, 50, 53, 53, 44, 49, 48, 48, > 44, 49, 53, 53, 32, 45, 115, 104, 105, 102, 116, 91, 50, 93, 32, 48, > 44, 49, 44, 48, 44, 48, 44, 50, 10, 45, 100, 111, 110, 101, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, > 91, 51, 44, 52, 44, 45, 49, 93, 32, 45, 119, 97, 105, 116, 10, 45, > 105, 102, 32, 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, 32, 118, 105, > 115, 117, 102, 108, 97, 103, 115, 61, 123, 36, 118, 105, 115, 117, 102, 108, > 97, 103, 115, 43, 105, 102, 40, 36, 118, 105, 115, 117, 102, 108, 97, 103, > 115, 38, 49, 44, 45, 49, 44, 49, 41, 125, 32, 45, 119, 97, 105, 116, > 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, > 123, 33, 44, 80, 125, 32, 118, 105, 115, 117, 102, 108, 97, 103, 115, 61, > 123, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 43, 105, 102, 40, 36, > 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 50, 44, 45, 50, 44, 50, > 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 69, 78, 84, 69, 82, > 125, 32, 118, 105, 115, 117, 102, 108, 97, 103, 115, 61, 123, 36, 118, 105, > 115, 117, 102, 108, 97, 103, 115, 43, 105, 102, 40, 36, 118, 105, 115, 117, > 102, 108, 97, 103, 115, 38, 52, 44, 45, 52, 44, 52, 41, 125, 32, 45, > 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 64, 123, 33, 44, 84, 125, 32, 118, 105, 115, 117, 102, 108, > 97, 103, 115, 61, 123, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 43, > 105, 102, 40, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 56, 44, > 45, 56, 44, 56, 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 73, > 125, 32, 118, 105, 115, 117, 102, 108, 97, 103, 115, 61, 123, 36, 118, 105, > 115, 117, 102, 108, 97, 103, 115, 43, 105, 102, 40, 36, 118, 105, 115, 117, > 102, 108, 97, 103, 115, 38, 49, 54, 44, 45, 49, 54, 44, 49, 54, 41, > 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 125, 34, 32, 38, > 38, 32, 34, 33, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 67, 84, 82, 76, > 82, 73, 71, 72, 84, 125, 125, 32, 118, 105, 115, 117, 102, 108, 97, 103, > 115, 61, 123, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 43, 105, 102, > 40, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 51, 50, 44, 45, > 51, 50, 44, 51, 50, 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, > 44, 80, 65, 68, 65, 68, 68, 125, 34, 32, 38, 38, 32, 34, 36, 114, > 111, 117, 110, 100, 110, 101, 115, 115, 60, 49, 125, 32, 114, 111, 117, 110, > 100, 110, 101, 115, 115, 61, 123, 36, 114, 111, 117, 110, 100, 110, 101, 115, > 115, 42, 49, 46, 49, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, > 80, 65, 68, 83, 85, 66, 125, 34, 32, 38, 38, 32, 34, 36, 114, 111, > 117, 110, 100, 110, 101, 115, 115, 62, 48, 46, 49, 125, 32, 114, 111, 117, > 110, 100, 110, 101, 115, 115, 61, 123, 36, 114, 111, 117, 110, 100, 110, 101, > 115, 115, 42, 48, 46, 57, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, > 44, 82, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 67, 84, > 82, 76, 76, 69, 70, 84, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, > 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 105, 91, 49, 93, 32, 49, 32, 45, 119, > 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, > 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, > 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, > 42, 49, 46, 53, 125, 44, 123, 64, 123, 33, 44, 104, 125, 42, 49, 46, > 53, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, > 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, > 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, > 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 67, 125, 125, 32, > 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, 47, 49, 46, 53, > 125, 44, 123, 64, 123, 33, 44, 104, 125, 47, 49, 46, 53, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, > 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, > 38, 38, 32, 34, 64, 123, 33, 44, 82, 125, 125, 32, 45, 119, 91, 93, > 32, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 114, 125, > 32, 45, 119, 91, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 64, 123, 33, 44, 98, 125, 61, 61, 48, 125, 32, 97, 99, 116, > 105, 118, 101, 61, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 33, 44, 120, 125, 62, 61, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, > 44, 98, 125, 34, 32, 38, 38, 32, 34, 36, 97, 99, 116, 105, 118, 101, > 61, 61, 45, 49, 125, 10, 91, 50, 93, 32, 40, 64, 123, 33, 44, 120, > 125, 44, 64, 123, 33, 44, 121, 125, 41, 32, 45, 45, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 115, 91, > 45, 49, 93, 32, 120, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, > 40, 64, 123, 45, 49, 44, 99, 125, 41, 32, 110, 101, 97, 114, 101, 115, > 116, 61, 64, 123, 45, 49, 44, 49, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 109, 125, 60, 54, > 52, 125, 32, 97, 99, 116, 105, 118, 101, 61, 36, 110, 101, 97, 114, 101, > 115, 116, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 50, 93, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 38, 49, 34, 32, 38, > 38, 32, 34, 64, 123, 33, 44, 120, 125, 62, 61, 48, 34, 32, 38, 38, > 32, 34, 36, 97, 99, 116, 105, 118, 101, 33, 61, 45, 49, 125, 10, 45, > 61, 91, 49, 93, 32, 123, 64, 123, 33, 44, 120, 125, 42, 64, 123, 48, > 44, 119, 125, 47, 64, 123, 33, 44, 119, 125, 125, 44, 48, 44, 36, 97, > 99, 116, 105, 118, 101, 10, 45, 61, 91, 49, 93, 32, 123, 64, 123, 33, > 44, 121, 125, 42, 64, 123, 48, 44, 104, 125, 47, 64, 123, 33, 44, 104, > 125, 125, 44, 49, 44, 36, 97, 99, 116, 105, 118, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 38, 50, 34, 32, 38, 38, > 32, 34, 64, 123, 33, 44, 120, 125, 62, 61, 48, 34, 32, 38, 38, 32, > 34, 64, 123, 49, 44, 104, 125, 62, 51, 125, 10, 45, 108, 91, 49, 93, > 32, 45, 115, 32, 121, 32, 45, 114, 109, 91, 36, 110, 101, 97, 114, 101, > 115, 116, 93, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, 108, 32, 45, > 119, 97, 105, 116, 32, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 64, > 123, 33, 44, 98, 125, 38, 49, 34, 32, 38, 38, 32, 34, 64, 123, 33, > 44, 120, 125, 62, 61, 48, 125, 10, 120, 121, 61, 40, 123, 64, 123, 33, > 44, 120, 125, 42, 64, 123, 48, 44, 119, 125, 47, 64, 123, 33, 44, 119, > 125, 125, 44, 123, 64, 123, 33, 44, 121, 125, 42, 64, 123, 48, 44, 104, > 125, 47, 64, 123, 33, 44, 104, 125, 125, 41, 10, 45, 45, 115, 104, 105, > 102, 116, 91, 49, 93, 32, 48, 44, 45, 49, 44, 48, 44, 48, 44, 50, > 32, 45, 43, 91, 45, 49, 93, 32, 91, 49, 93, 32, 45, 47, 91, 45, > 49, 93, 32, 50, 10, 36, 120, 121, 32, 45, 45, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 115, 91, 45, > 49, 93, 32, 120, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 40, > 64, 123, 45, 49, 44, 99, 125, 41, 32, 110, 115, 61, 64, 123, 45, 49, > 44, 49, 125, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 108, 91, 49, 93, 32, 45, 115, 32, 121, 32, 45, 105, 91, 123, 36, 110, > 115, 43, 49, 125, 93, 32, 36, 120, 121, 32, 45, 97, 32, 121, 32, 45, > 101, 110, 100, 108, 10, 97, 99, 116, 105, 118, 101, 61, 123, 36, 110, 115, > 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, > 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, > 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, > 125, 125, 10, 45, 45, 115, 104, 105, 102, 116, 91, 49, 93, 32, 48, 44, > 45, 49, 44, 48, 44, 48, 44, 50, 32, 45, 45, 115, 104, 105, 102, 116, > 91, 49, 93, 32, 48, 44, 49, 44, 48, 44, 48, 44, 50, 32, 45, 45, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 114, 111, 117, 110, 100, 110, 101, 115, 115, 10, 91, 48, 93, 44, 91, 48, > 93, 44, 49, 44, 49, 44, 50, 32, 45, 114, 109, 91, 48, 93, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 123, 49, 44, 104, 125, 32, 45, 115, > 112, 108, 105, 110, 101, 91, 45, 49, 93, 32, 64, 123, 48, 44, 48, 45, > 49, 125, 44, 64, 123, 49, 44, 48, 45, 49, 125, 44, 64, 123, 48, 44, > 50, 45, 51, 125, 44, 64, 123, 49, 44, 50, 45, 51, 125, 44, 49, 50, > 56, 44, 49, 44, 49, 32, 45, 115, 104, 105, 102, 116, 91, 48, 93, 32, > 48, 44, 45, 49, 44, 48, 44, 48, 44, 50, 32, 45, 115, 104, 105, 102, > 116, 91, 49, 93, 32, 48, 44, 45, 49, 44, 48, 44, 48, 44, 50, 32, > 45, 100, 111, 110, 101, 10, 45, 102, 108, 111, 111, 100, 91, 45, 49, 93, > 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 10, 45, > 114, 109, 91, 48, 44, 49, 93, 32, 45, 119, 32, 48, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 116, 101, 116, 114, 105, > 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, > 104, 32, 116, 101, 116, 114, 105, 115, 32, 103, 97, 109, 101, 46, 10, 120, > 95, 116, 101, 116, 114, 105, 115, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 84, 101, 116, 114, 105, 115, > 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 84, 104, 105, 115, > 32, 105, 115, 32, 97, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 109, > 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, > 116, 104, 101, 32, 84, 101, 116, 114, 105, 115, 32, 103, 97, 109, 101, 46, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 65, > 114, 114, 111, 119, 32, 107, 101, 121, 115, 32, 116, 111, 32, 109, 111, 118, > 101, 47, 114, 111, 116, 97, 116, 101, 32, 116, 104, 101, 32, 116, 114, 105, > 111, 109, 105, 110, 111, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 32, 39, 83, 80, 65, 67, 69, 39, 32, 116, 111, 32, 109, 97, > 107, 101, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 116, > 114, 105, 111, 109, 105, 110, 111, 32, 102, 97, 108, 108, 105, 110, 103, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, > 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, > 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 109, 10, 45, 105, 91, 109, 48, 93, 32, 52, 44, 49, 44, > 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, 105, 91, 109, > 52, 93, 32, 51, 44, 50, 44, 49, 44, 49, 44, 49, 44, 48, 44, 48, > 44, 49, 44, 49, 44, 49, 10, 45, 105, 91, 109, 56, 93, 32, 51, 44, > 50, 44, 49, 44, 49, 44, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, > 49, 10, 45, 105, 91, 109, 49, 50, 93, 32, 50, 44, 50, 44, 49, 44, > 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, 105, 91, 109, 49, 54, > 93, 32, 51, 44, 50, 44, 49, 44, 49, 44, 48, 44, 49, 44, 49, 44, > 49, 44, 49, 44, 48, 10, 45, 105, 91, 109, 50, 48, 93, 32, 51, 44, > 50, 44, 49, 44, 49, 44, 48, 44, 49, 44, 48, 44, 49, 44, 49, 44, > 49, 10, 45, 105, 91, 109, 50, 52, 93, 32, 51, 44, 50, 44, 49, 44, > 49, 44, 49, 44, 49, 44, 48, 44, 48, 44, 49, 44, 49, 10, 45, 105, > 102, 32, 123, 63, 60, 48, 46, 50, 53, 125, 10, 45, 105, 91, 109, 50, > 56, 93, 32, 50, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, > 105, 91, 109, 51, 50, 93, 32, 50, 44, 50, 44, 49, 44, 49, 44, 49, > 44, 49, 44, 48, 44, 49, 10, 45, 105, 91, 109, 51, 54, 93, 32, 51, > 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, 105, 91, > 109, 52, 48, 93, 32, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, > 105, 91, 109, 52, 52, 93, 32, 51, 44, 50, 44, 49, 44, 49, 44, 49, > 44, 49, 44, 49, 44, 49, 44, 48, 44, 49, 10, 45, 105, 91, 109, 52, > 56, 93, 32, 51, 44, 51, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, > 44, 49, 44, 48, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 105, > 61, 123, 52, 42, 36, 62, 125, 32, 45, 108, 91, 109, 36, 105, 93, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 51, 32, 45, 45, 114, 111, 116, 97, > 116, 101, 91, 48, 93, 32, 123, 57, 48, 42, 40, 36, 62, 43, 49, 41, > 125, 32, 45, 110, 109, 91, 45, 49, 93, 32, 109, 123, 36, 105, 43, 36, > 62, 43, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 78, 61, 64, 35, 10, 45, 105, 91, 99, > 111, 108, 111, 114, 115, 93, 32, 51, 44, 36, 78, 44, 49, 44, 49, 44, > 39, 63, 40, 49, 54, 44, 50, 50, 52, 41, 39, 32, 45, 114, 91, 45, > 49, 93, 32, 51, 44, 52, 48, 48, 37, 32, 45, 105, 91, 109, 97, 115, > 107, 93, 32, 40, 48, 44, 45, 49, 44, 48, 59, 49, 44, 48, 44, 45, > 49, 59, 48, 44, 49, 44, 48, 41, 32, 45, 42, 91, 45, 49, 93, 32, > 49, 50, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 10, 45, > 45, 114, 91, 109, 36, 62, 93, 32, 53, 48, 48, 37, 44, 53, 48, 48, > 37, 44, 49, 44, 51, 32, 45, 45, 99, 111, 114, 114, 101, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 91, 109, 97, 115, 107, 93, 44, 48, 32, 45, > 114, 91, 45, 49, 93, 32, 50, 48, 48, 37, 44, 50, 48, 48, 37, 44, > 49, 44, 49, 44, 51, 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, > 49, 93, 32, 51, 48, 37, 44, 49, 48, 48, 37, 10, 45, 45, 114, 91, > 109, 36, 62, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, > 44, 51, 32, 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, > 111, 114, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, 49, 44, 49, > 44, 64, 123, 99, 111, 108, 111, 114, 115, 44, 123, 51, 42, 36, 62, 125, > 45, 123, 51, 42, 36, 62, 43, 50, 125, 125, 32, 45, 114, 118, 91, 45, > 51, 44, 45, 49, 93, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, 32, > 45, 99, 91, 45, 50, 93, 32, 48, 44, 50, 53, 53, 10, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 32, 45, 110, 109, 91, 45, 49, 93, 32, 115, 36, 62, 10, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 99, 111, 108, 111, 114, 115, > 44, 109, 97, 115, 107, 93, 10, 102, 97, 99, 116, 61, 123, 64, 123, 115, > 48, 44, 119, 125, 47, 64, 123, 109, 48, 44, 119, 125, 125, 10, 87, 61, > 49, 50, 32, 72, 61, 50, 48, 10, 45, 105, 91, 98, 111, 97, 114, 100, > 93, 32, 36, 87, 44, 36, 72, 32, 45, 105, 91, 99, 117, 114, 114, 95, > 98, 111, 97, 114, 100, 93, 32, 91, 98, 111, 97, 114, 100, 93, 10, 45, > 105, 91, 114, 101, 110, 100, 101, 114, 93, 32, 123, 36, 102, 97, 99, 116, > 42, 36, 87, 125, 44, 123, 36, 102, 97, 99, 116, 42, 36, 72, 125, 44, > 49, 44, 51, 32, 45, 105, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, > 101, 114, 93, 32, 91, 114, 101, 110, 100, 101, 114, 93, 32, 45, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, > 114, 95, 109, 97, 115, 107, 10, 45, 45, 114, 111, 119, 115, 91, 114, 101, > 110, 100, 101, 114, 93, 32, 48, 44, 53, 48, 37, 32, 45, 112, 108, 97, > 115, 109, 97, 91, 45, 49, 93, 32, 49, 44, 50, 32, 45, 110, 111, 105, > 115, 101, 91, 45, 49, 93, 32, 50, 48, 32, 45, 98, 108, 117, 114, 95, > 121, 91, 45, 49, 93, 32, 52, 48, 37, 44, 49, 32, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 121, 32, 45, 114, 91, 45, 49, 93, 32, 91, 114, > 101, 110, 100, 101, 114, 93, 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 54, 52, 32, 45, 98, 108, 117, 114, 95, 120, 91, 45, 49, 93, 32, 49, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, > 101, 91, 45, 49, 93, 32, 48, 46, 53, 44, 50, 32, 45, 98, 91, 45, > 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 51, 48, 48, 32, > 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 110, 109, 91, 45, 49, 93, 32, 98, > 97, 99, 107, 103, 114, 111, 117, 110, 100, 10, 116, 105, 109, 101, 61, 64, > 124, 32, 115, 99, 111, 114, 101, 61, 48, 32, 102, 97, 108, 108, 95, 109, > 111, 100, 101, 61, 48, 32, 103, 97, 109, 101, 111, 118, 101, 114, 61, 48, > 32, 110, 61, 45, 49, 32, 110, 110, 61, 123, 114, 111, 117, 110, 100, 40, > 63, 40, 48, 44, 36, 78, 45, 49, 41, 41, 125, 10, 45, 100, 111, 10, > 45, 119, 97, 105, 116, 32, 123, 105, 102, 40, 36, 102, 97, 108, 108, 95, > 109, 111, 100, 101, 44, 45, 49, 44, 45, 50, 48, 41, 125, 10, 45, 105, > 102, 32, 36, 103, 97, 109, 101, 111, 118, 101, 114, 10, 45, 45, 106, 91, > 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 93, 32, 91, 99, 117, 114, > 114, 95, 114, 101, 110, 100, 101, 114, 93, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 46, 55, 44, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, > 101, 114, 95, 109, 97, 115, 107, 93, 44, 50, 53, 53, 10, 45, 116, 101, > 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 34, > 71, 97, 109, 101, 92, 110, 79, 118, 101, 114, 33, 34, 44, 51, 48, 44, > 51, 48, 37, 44, 51, 50, 44, 50, 44, 49, 44, 50, 53, 53, 32, 45, > 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 99, > 111, 110, 116, 105, 110, 117, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 123, 36, 110, 60, 48, 125, 10, 45, 108, 91, 98, 111, 97, > 114, 100, 93, 32, 45, 115, 32, 121, 32, 105, 61, 45, 49, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 64, 123, 36, > 60, 44, 109, 125, 32, 105, 61, 36, 60, 44, 36, 105, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 48, 32, 45, 114, 109, 91, > 36, 105, 93, 32, 45, 97, 32, 121, 32, 115, 99, 111, 114, 101, 61, 123, > 36, 115, 99, 111, 114, 101, 43, 50, 94, 40, 110, 97, 114, 103, 40, 36, > 105, 41, 45, 49, 41, 45, 49, 125, 32, 45, 114, 32, 36, 87, 44, 36, > 72, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 110, > 109, 32, 98, 111, 97, 114, 100, 32, 45, 101, 110, 100, 108, 10, 45, 105, > 102, 32, 123, 110, 97, 114, 103, 40, 36, 105, 41, 62, 49, 125, 32, 45, > 108, 91, 114, 101, 110, 100, 101, 114, 93, 32, 45, 115, 32, 121, 44, 36, > 72, 32, 48, 32, 45, 114, 109, 91, 36, 105, 93, 32, 45, 97, 32, 121, > 32, 45, 114, 32, 123, 36, 102, 97, 99, 116, 42, 36, 87, 125, 44, 123, > 36, 102, 97, 99, 116, 42, 36, 72, 125, 44, 49, 44, 51, 44, 48, 44, > 48, 44, 48, 44, 49, 32, 45, 110, 109, 32, 114, 101, 110, 100, 101, 114, > 32, 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 110, 61, > 36, 110, 110, 32, 110, 110, 61, 123, 114, 111, 117, 110, 100, 40, 63, 40, > 48, 44, 36, 78, 45, 49, 41, 41, 125, 32, 120, 61, 123, 36, 87, 47, > 50, 125, 32, 121, 61, 48, 32, 100, 111, 95, 114, 101, 110, 100, 101, 114, > 61, 49, 32, 102, 97, 108, 108, 95, 109, 111, 100, 101, 61, 48, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 100, 111, 95, 114, 101, > 110, 100, 101, 114, 10, 45, 114, 109, 91, 99, 117, 114, 114, 95, 98, 111, > 97, 114, 100, 44, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 44, > 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 115, 107, > 93, 10, 45, 105, 91, 99, 117, 114, 114, 95, 98, 111, 97, 114, 100, 93, > 32, 91, 98, 111, 97, 114, 100, 93, 32, 45, 106, 91, 99, 117, 114, 114, > 95, 98, 111, 97, 114, 100, 93, 32, 91, 109, 36, 110, 93, 44, 123, 36, > 120, 45, 105, 110, 116, 40, 64, 123, 109, 36, 110, 44, 119, 125, 47, 50, > 41, 125, 44, 36, 121, 44, 48, 44, 48, 44, 49, 44, 91, 109, 36, 110, > 93, 10, 45, 105, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, > 93, 32, 91, 114, 101, 110, 100, 101, 114, 93, 32, 45, 115, 104, 91, 115, > 36, 110, 93, 32, 51, 44, 51, 32, 45, 106, 91, 99, 117, 114, 114, 95, > 114, 101, 110, 100, 101, 114, 93, 32, 91, 115, 36, 110, 93, 44, 123, 36, > 102, 97, 99, 116, 42, 40, 36, 120, 45, 105, 110, 116, 40, 64, 123, 109, > 36, 110, 44, 119, 125, 47, 50, 41, 41, 125, 44, 123, 36, 102, 97, 99, > 116, 42, 36, 121, 125, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, > 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 42, > 91, 99, 117, 114, 114, 95, 98, 111, 97, 114, 100, 93, 32, 50, 53, 53, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 99, 117, 114, 114, 95, 114, 101, > 110, 100, 101, 114, 93, 44, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, > 101, 114, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 117, 114, 114, > 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 115, 107, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 83, 99, 111, 114, 101, 32, 58, 32, 34, > 36, 115, 99, 111, 114, 101, 34, 32, 32, 32, 32, 78, 101, 120, 116, 32, > 58, 34, 44, 52, 44, 48, 44, 51, 50, 44, 49, 44, 49, 54, 52, 32, > 45, 114, 91, 45, 49, 93, 32, 52, 48, 37, 44, 52, 48, 37, 44, 49, > 44, 51, 44, 50, 32, 45, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 106, 91, 99, > 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 93, 32, 91, 45, 50, 93, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, > 50, 53, 53, 32, 45, 106, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, > 101, 114, 95, 109, 97, 115, 107, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, > 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 45, 42, 91, > 109, 36, 110, 110, 93, 32, 49, 57, 54, 32, 45, 114, 91, 45, 49, 93, > 32, 51, 48, 48, 37, 44, 51, 48, 48, 37, 44, 49, 44, 51, 32, 45, > 106, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 44, 99, 117, > 114, 114, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 115, 107, 93, 32, > 91, 45, 49, 93, 44, 123, 64, 123, 99, 117, 114, 114, 95, 114, 101, 110, > 100, 101, 114, 44, 119, 125, 45, 119, 45, 52, 125, 44, 51, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 49, 93, 44, 49, 57, 54, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 100, 111, 95, 114, 101, 110, 100, 101, 114, 61, 48, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 115, 104, 105, 102, 116, 91, > 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 93, 32, 48, 44, 123, 45, > 49, 51, 42, 64, 124, 42, 49, 46, 48, 52, 94, 36, 115, 99, 111, 114, > 101, 125, 44, 48, 44, 48, 44, 50, 10, 45, 106, 91, 45, 49, 93, 32, > 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 99, 117, 114, 114, 95, 114, 101, > 110, 100, 101, 114, 95, 109, 97, 115, 107, 93, 44, 50, 53, 53, 10, 45, > 119, 91, 45, 49, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, > 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 84, > 101, 116, 114, 105, 115, 34, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 99, 117, 114, 115, 111, 114, 91, 48, 93, 32, 48, 10, 45, 105, 102, 32, > 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, 32, 102, 97, 108, 108, 95, > 109, 111, 100, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 64, 123, 33, 44, 65, 82, 82, 79, 87, 85, 80, 125, 34, > 32, 124, 124, 32, 34, 64, 123, 33, 44, 65, 82, 82, 79, 87, 76, 69, > 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 65, 82, 82, > 79, 87, 82, 73, 71, 72, 84, 125, 125, 10, 97, 110, 61, 123, 105, 102, > 40, 64, 123, 33, 44, 65, 82, 82, 79, 87, 85, 80, 125, 44, 110, 61, > 36, 110, 43, 49, 59, 105, 102, 40, 110, 37, 52, 44, 110, 44, 110, 45, > 52, 41, 44, 36, 110, 41, 125, 10, 110, 120, 61, 123, 119, 50, 61, 105, > 110, 116, 40, 64, 123, 109, 36, 97, 110, 44, 119, 125, 47, 50, 41, 59, > 109, 97, 120, 40, 119, 50, 44, 109, 105, 110, 40, 36, 120, 45, 64, 123, > 33, 44, 65, 82, 82, 79, 87, 76, 69, 70, 84, 125, 43, 64, 123, 33, > 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, 125, 44, 36, 87, 45, > 40, 64, 123, 109, 36, 97, 110, 44, 119, 125, 37, 50, 41, 45, 119, 50, > 41, 41, 125, 10, 45, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, 91, > 109, 36, 97, 110, 93, 44, 123, 36, 110, 120, 45, 105, 110, 116, 40, 64, > 123, 109, 36, 97, 110, 44, 119, 125, 47, 50, 41, 125, 44, 36, 121, 44, > 48, 44, 48, 44, 45, 49, 44, 91, 109, 36, 97, 110, 93, 10, 45, 105, > 102, 32, 123, 64, 123, 45, 49, 44, 77, 125, 61, 61, 49, 125, 32, 120, > 61, 36, 110, 120, 32, 110, 61, 36, 97, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 100, 111, 95, 114, 101, 110, > 100, 101, 114, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 64, 123, 33, 44, 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, > 34, 32, 124, 124, 32, 34, 64, 124, 45, 36, 116, 105, 109, 101, 62, 48, > 46, 57, 94, 105, 110, 116, 40, 36, 115, 99, 111, 114, 101, 47, 50, 41, > 34, 32, 124, 124, 32, 34, 36, 102, 97, 108, 108, 95, 109, 111, 100, 101, > 125, 10, 121, 61, 123, 36, 121, 43, 49, 125, 10, 45, 45, 106, 91, 98, > 111, 97, 114, 100, 93, 32, 91, 109, 36, 110, 93, 44, 123, 36, 120, 45, > 105, 110, 116, 40, 64, 123, 109, 36, 110, 44, 119, 125, 47, 50, 41, 125, > 44, 36, 121, 44, 48, 44, 48, 44, 45, 49, 44, 91, 109, 36, 110, 93, > 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 77, 125, 62, 49, 34, > 32, 124, 124, 32, 34, 36, 121, 43, 64, 123, 109, 36, 110, 44, 104, 125, > 62, 36, 72, 125, 10, 45, 105, 102, 32, 123, 36, 121, 60, 61, 49, 125, > 32, 103, 97, 109, 101, 111, 118, 101, 114, 61, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, 91, 99, 117, > 114, 114, 95, 98, 111, 97, 114, 100, 93, 32, 45, 106, 91, 114, 101, 110, > 100, 101, 114, 93, 32, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, > 114, 93, 32, 110, 61, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 116, 105, 109, 101, 61, 64, 124, 32, 100, > 111, 95, 114, 101, 110, 100, 101, 114, 61, 49, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, > 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, 109, 32, 45, 119, > 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, > 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 105, 99, 45, 116, > 97, 99, 45, 116, 111, 101, 32, 103, 97, 109, 101, 46, 10, 120, 95, 116, > 105, 99, 116, 97, 99, 116, 111, 101, 32, 58, 10, 45, 101, 91, 93, 32, > 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 84, 105, 99, 45, 84, > 97, 99, 45, 84, 111, 101, 32, 103, 97, 109, 101, 32, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 85, 115, 101, 32, > 109, 111, 117, 115, 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 32, > 112, 111, 115, 105, 116, 105, 111, 110, 115, 32, 111, 102, 32, 116, 104, 101, > 92, 110, 10, 45, 45, 45, 45, 32, 115, 121, 109, 98, 111, 108, 115, 46, > 32, 67, 108, 111, 115, 101, 32, 119, 105, 110, 100, 111, 119, 32, 116, 111, > 32, 101, 120, 105, 116, 32, 103, 97, 109, 101, 46, 92, 110, 10, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, > 45, 118, 32, 45, 10, 109, 101, 115, 115, 97, 103, 101, 61, 48, 10, 99, > 111, 117, 110, 116, 101, 114, 61, 48, 10, 112, 108, 97, 121, 101, 114, 61, > 48, 10, 115, 116, 97, 116, 101, 61, 48, 10, 116, 109, 112, 51, 61, 48, > 10, 116, 109, 112, 50, 61, 48, 10, 116, 109, 112, 49, 61, 48, 10, 45, > 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 50, 10, 45, 119, > 91, 45, 49, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, 34, 32, 34, > 10, 45, 100, 111, 10, 45, 105, 102, 32, 36, 112, 108, 97, 121, 101, 114, > 32, 109, 101, 115, 115, 97, 103, 101, 61, 34, 84, 105, 99, 45, 84, 97, > 99, 45, 84, 111, 101, 32, 40, 79, 32, 116, 111, 32, 112, 108, 97, 121, > 41, 34, 10, 45, 101, 108, 115, 101, 32, 109, 101, 115, 115, 97, 103, 101, > 61, 34, 84, 105, 99, 45, 84, 97, 99, 45, 84, 111, 101, 32, 40, 88, > 32, 116, 111, 32, 112, 108, 97, 121, 41, 34, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 10, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, > 104, 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, > 34, 36, 109, 101, 115, 115, 97, 103, 101, 32, 45, 119, 97, 105, 116, 10, > 45, 105, 102, 32, 123, 33, 64, 33, 125, 32, 45, 119, 91, 93, 32, 48, > 32, 45, 114, 109, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 98, 125, 38, 49, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, > 120, 125, 62, 50, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 121, > 125, 62, 50, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 120, 125, > 60, 52, 48, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 121, 125, > 60, 52, 48, 48, 125, 10, 116, 109, 112, 51, 61, 123, 105, 110, 116, 40, > 40, 64, 123, 33, 44, 120, 125, 45, 49, 53, 41, 47, 49, 51, 48, 41, > 125, 10, 116, 109, 112, 50, 61, 123, 105, 110, 116, 40, 40, 64, 123, 33, > 44, 121, 125, 45, 49, 53, 41, 47, 49, 51, 48, 41, 125, 10, 116, 109, > 112, 49, 61, 123, 52, 94, 40, 36, 116, 109, 112, 50, 42, 51, 43, 36, > 116, 109, 112, 51, 41, 125, 10, 45, 105, 102, 32, 123, 105, 110, 116, 40, > 36, 115, 116, 97, 116, 101, 47, 36, 116, 109, 112, 49, 41, 37, 52, 125, > 32, 116, 109, 112, 49, 61, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 108, 115, 101, 32, 116, 109, 112, 49, 61, 45, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 116, 109, > 112, 49, 60, 48, 125, 10, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, > 116, 111, 101, 123, 36, 112, 108, 97, 121, 101, 114, 37, 50, 125, 10, 45, > 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 123, 34, 49, 51, 48, > 42, 34, 36, 116, 109, 112, 51, 34, 32, 43, 32, 49, 53, 43, 63, 40, > 45, 53, 44, 53, 41, 34, 125, 44, 92, 10, 123, 34, 49, 51, 48, 42, > 34, 36, 116, 109, 112, 50, 34, 32, 43, 32, 49, 53, 43, 63, 40, 45, > 53, 44, 53, 41, 34, 125, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, > 93, 10, 45, 114, 109, 91, 45, 50, 45, 45, 49, 93, 10, 45, 119, 91, > 45, 49, 93, 10, 115, 116, 97, 116, 101, 61, 123, 36, 115, 116, 97, 116, > 101, 43, 40, 49, 43, 36, 112, 108, 97, 121, 101, 114, 41, 42, 36, 116, > 109, 112, 49, 125, 10, 40, 50, 49, 44, 49, 51, 52, 52, 44, 56, 54, > 48, 49, 54, 44, 52, 49, 54, 49, 44, 49, 54, 54, 52, 52, 44, 54, > 54, 53, 55, 54, 44, 54, 53, 55, 57, 51, 44, 52, 51, 54, 56, 59, > 92, 10, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 50, 44, 48, 44, > 48, 59, 92, 10, 48, 44, 49, 44, 50, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 59, 92, 10, 51, 44, 51, 44, 51, 44, 52, 44, 52, 44, > 52, 44, 53, 44, 54, 41, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 119, 125, 10, 116, 109, 112, 49, 61, 64, 123, 45, 49, 44, 36, 62, 125, > 10, 45, 105, 102, 32, 123, 40, 36, 115, 116, 97, 116, 101, 38, 36, 116, > 109, 112, 49, 41, 61, 61, 36, 116, 109, 112, 49, 124, 124, 40, 36, 115, > 116, 97, 116, 101, 38, 40, 50, 42, 36, 116, 109, 112, 49, 41, 41, 61, > 61, 50, 42, 36, 116, 109, 112, 49, 125, 10, 45, 95, 120, 95, 116, 105, > 99, 116, 97, 99, 116, 111, 101, 64, 123, 45, 49, 44, 40, 36, 62, 44, > 51, 41, 125, 10, 45, 106, 91, 45, 52, 93, 32, 91, 45, 50, 93, 44, > 123, 49, 51, 48, 42, 64, 123, 45, 51, 44, 40, 36, 62, 44, 49, 41, > 125, 43, 63, 40, 45, 53, 44, 53, 41, 125, 44, 92, 10, 123, 49, 51, > 48, 42, 64, 123, 45, 51, 44, 40, 36, 62, 44, 50, 41, 125, 43, 63, > 40, 45, 53, 44, 53, 41, 125, 44, 48, 44, 48, 44, 49, 44, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 50, 45, 45, 49, 93, 10, 45, 105, > 102, 32, 123, 40, 36, 115, 116, 97, 116, 101, 38, 36, 116, 109, 112, 49, > 41, 61, 61, 36, 116, 109, 112, 49, 125, 32, 45, 119, 91, 45, 50, 93, > 32, 45, 49, 44, 45, 49, 44, 48, 44, 34, 84, 105, 99, 45, 84, 97, > 99, 45, 84, 111, 101, 32, 40, 88, 32, 119, 111, 110, 33, 41, 34, 10, > 45, 101, 108, 115, 101, 32, 45, 119, 91, 45, 50, 93, 32, 45, 49, 44, > 45, 49, 44, 48, 44, 34, 84, 105, 99, 45, 84, 97, 99, 45, 84, 111, > 101, 32, 40, 79, 32, 119, 111, 110, 33, 41, 34, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 100, 111, 32, 45, 119, 97, 105, 116, 32, 45, 119, 91, > 93, 32, 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, 32, > 45, 119, 104, 105, 108, 101, 32, 64, 33, 10, 45, 114, 109, 32, 45, 119, > 91, 93, 32, 48, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, > 110, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 112, 108, 97, 121, 101, 114, 61, 123, 40, > 36, 112, 108, 97, 121, 101, 114, 43, 49, 41, 37, 50, 125, 10, 99, 111, > 117, 110, 116, 101, 114, 61, 123, 36, 99, 111, 117, 110, 116, 101, 114, 43, > 49, 125, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 99, 111, 117, 110, > 116, 101, 114, 60, 57, 125, 10, 45, 119, 91, 93, 32, 45, 49, 44, 45, > 49, 44, 48, 44, 48, 44, 34, 84, 105, 99, 45, 84, 97, 99, 45, 84, > 111, 101, 32, 40, 84, 105, 101, 100, 32, 103, 97, 109, 101, 33, 41, 34, > 10, 45, 100, 111, 32, 45, 119, 97, 105, 116, 32, 45, 119, 91, 93, 32, > 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, 32, 45, 119, > 104, 105, 108, 101, 32, 64, 33, 10, 45, 119, 91, 93, 32, 48, 32, 45, > 114, 109, 32, 45, 118, 32, 43, 10, 95, 120, 95, 116, 105, 99, 116, 97, > 99, 116, 111, 101, 32, 58, 10, 45, 115, 112, 114, 101, 97, 100, 91, 45, > 49, 93, 32, 52, 32, 45, 98, 91, 45, 49, 93, 32, 54, 32, 45, 115, > 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 48, 46, 56, 32, 45, > 110, 91, 45, 49, 93, 32, 48, 44, 49, 10, 95, 95, 120, 95, 116, 105, > 99, 116, 97, 99, 116, 111, 101, 32, 58, 10, 45, 45, 102, 91, 45, 49, > 93, 32, 49, 45, 105, 32, 45, 45, 110, 91, 45, 50, 93, 32, 36, 50, > 44, 50, 53, 53, 32, 45, 45, 110, 91, 45, 51, 93, 32, 36, 51, 44, > 50, 53, 53, 32, 45, 110, 91, 45, 52, 93, 32, 36, 49, 44, 50, 53, > 53, 32, 45, 97, 91, 45, 52, 44, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 48, 32, 58, > 10, 49, 50, 56, 44, 49, 50, 56, 44, 49, 44, 49, 44, 49, 32, 45, > 108, 105, 110, 101, 91, 45, 49, 93, 32, 49, 53, 37, 44, 49, 53, 37, > 44, 56, 53, 37, 44, 56, 53, 37, 44, 49, 44, 48, 32, 45, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 49, 53, 37, 44, 56, 53, 37, 44, 56, > 53, 37, 44, 49, 53, 37, 44, 49, 44, 48, 32, 45, 101, 114, 111, 100, > 101, 91, 45, 49, 93, 32, 49, 50, 32, 45, 95, 120, 95, 116, 105, 99, > 116, 97, 99, 116, 111, 101, 32, 45, 100, 101, 102, 111, 114, 109, 91, 45, > 49, 93, 32, 52, 32, 45, 95, 95, 120, 95, 116, 105, 99, 116, 97, 99, > 116, 111, 101, 32, 52, 48, 44, 52, 48, 44, 49, 54, 48, 10, 95, 120, > 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 49, 32, 58, 10, 49, 50, > 56, 44, 49, 50, 56, 44, 49, 44, 49, 44, 49, 32, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, > 44, 50, 50, 37, 44, 50, 50, 37, 44, 48, 44, 49, 44, 48, 32, 45, > 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, > 53, 48, 37, 44, 49, 53, 37, 44, 49, 53, 37, 44, 48, 44, 49, 44, > 49, 32, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 32, > 45, 100, 101, 102, 111, 114, 109, 91, 45, 49, 93, 32, 52, 32, 45, 95, > 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 32, 49, 54, 48, > 44, 52, 48, 44, 49, 54, 48, 10, 95, 120, 95, 116, 105, 99, 116, 97, > 99, 116, 111, 101, 50, 32, 58, 10, 51, 57, 49, 44, 51, 57, 49, 44, > 49, 44, 49, 44, 34, 33, 40, 120, 37, 49, 51, 48, 41, 32, 124, 124, > 32, 33, 40, 121, 37, 49, 51, 48, 41, 34, 32, 45, 114, 91, 45, 49, > 93, 32, 52, 50, 49, 44, 52, 50, 49, 44, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 105, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 51, 32, 45, 95, 120, 95, 116, 105, 99, 116, > 97, 99, 116, 111, 101, 32, 45, 102, 91, 45, 49, 93, 32, 49, 45, 105, > 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, > 101, 91, 45, 49, 93, 32, 49, 48, 32, 45, 98, 91, 45, 49, 93, 32, > 56, 44, 48, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, > 32, 49, 46, 53, 32, 45, 110, 91, 45, 49, 93, 32, 50, 50, 48, 44, > 50, 53, 53, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 116, > 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 95, 120, 95, 116, 105, 99, > 116, 97, 99, 116, 111, 101, 51, 32, 58, 10, 52, 50, 49, 44, 49, 51, > 48, 44, 49, 44, 49, 44, 49, 32, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 49, 48, 37, 44, 54, 48, 37, 44, 57, 48, 37, 44, 54, 48, > 37, 44, 49, 44, 48, 32, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, > 32, 54, 32, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, > 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, 123, 63, 40, > 45, 54, 44, 54, 41, 125, 44, 49, 44, 49, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 95, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, > 101, 32, 49, 56, 48, 44, 49, 48, 44, 49, 48, 10, 95, 120, 95, 116, > 105, 99, 116, 97, 99, 116, 111, 101, 52, 32, 58, 10, 45, 95, 120, 95, > 116, 105, 99, 116, 97, 99, 116, 111, 101, 51, 32, 45, 116, 114, 97, 110, > 115, 112, 111, 115, 101, 91, 45, 50, 45, 45, 49, 93, 10, 95, 120, 95, > 116, 105, 99, 116, 97, 99, 116, 111, 101, 53, 32, 58, 10, 52, 50, 49, > 44, 52, 50, 49, 44, 49, 44, 49, 44, 49, 32, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 49, 48, 37, 44, 49, 48, 37, 44, 57, 48, 37, > 44, 57, 48, 37, 44, 49, 44, 48, 32, 45, 101, 114, 111, 100, 101, 91, > 45, 49, 93, 32, 54, 32, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, > 116, 111, 101, 32, 45, 95, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, > 111, 101, 32, 49, 56, 48, 44, 49, 48, 44, 49, 48, 10, 95, 120, 95, > 116, 105, 99, 116, 97, 99, 116, 111, 101, 54, 32, 58, 10, 52, 50, 49, > 44, 52, 50, 49, 44, 49, 44, 49, 44, 49, 32, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 49, 48, 37, 44, 57, 48, 37, 44, 57, 48, 37, > 44, 49, 48, 37, 44, 49, 44, 48, 32, 45, 101, 114, 111, 100, 101, 91, > 45, 49, 93, 32, 54, 32, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, > 116, 111, 101, 32, 45, 95, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, > 111, 101, 32, 49, 56, 48, 44, 49, 48, 44, 49, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 95, 119, 97, 118, 101, 115, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, > 105, 109, 97, 103, 101, 32, 119, 97, 118, 101, 115, 32, 100, 101, 109, 111, > 46, 10, 120, 95, 119, 97, 118, 101, 115, 32, 58, 10, 45, 101, 91, 93, > 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 73, 109, 97, 103, > 101, 32, 119, 97, 118, 101, 115, 32, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 32, 76, 101, 102, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, > 111, 110, 32, 116, 111, 32, 100, 114, 111, 112, 32, 98, 97, 108, 108, 115, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, 32, 109, > 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 114, > 111, 116, 97, 116, 101, 32, 118, 105, 101, 119, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, > 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, > 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, > 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 67, 84, 82, 76, 43, 70, 39, 32, 116, 111, 32, 115, 119, 105, 116, 99, > 104, 32, 102, 117, 108, 108, 115, 99, 114, 101, 101, 110, 32, 109, 111, 100, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, > 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 108, 91, 93, > 10, 50, 48, 48, 44, 50, 48, 48, 32, 120, 61, 123, 45, 49, 46, 48, > 54, 45, 63, 42, 48, 46, 49, 125, 32, 121, 61, 123, 45, 48, 46, 50, > 54, 45, 63, 42, 48, 46, 49, 125, 10, 45, 109, 97, 110, 100, 101, 108, > 98, 114, 111, 116, 32, 36, 120, 44, 36, 121, 44, 123, 36, 120, 43, 48, > 46, 49, 125, 44, 123, 36, 121, 43, 48, 46, 49, 125, 44, 50, 53, 54, > 10, 49, 54, 44, 49, 44, 49, 44, 51, 44, 63, 32, 45, 114, 91, 45, > 49, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, > 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 49, 10, 45, 109, 97, 112, > 91, 48, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 114, 50, 100, 120, 32, 49, 48, 48, 10, 45, 45, 109, 105, 114, > 114, 111, 114, 32, 121, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, > 32, 45, 43, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, > 100, 108, 32, 45, 101, 108, 115, 101, 32, 45, 107, 91, 48, 93, 32, 45, > 114, 91, 48, 93, 32, 49, 48, 48, 44, 49, 48, 48, 44, 49, 44, 51, > 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 48, 93, 32, > 40, 50, 48, 59, 56, 48, 59, 48, 94, 50, 48, 59, 56, 48, 59, 48, > 94, 50, 48, 59, 56, 48, 59, 48, 41, 32, 45, 114, 91, 48, 93, 32, > 52, 48, 48, 44, 51, 48, 48, 44, 49, 44, 51, 44, 51, 32, 45, 119, > 97, 116, 101, 114, 91, 48, 93, 32, 49, 48, 48, 44, 50, 10, 45, 119, > 91, 48, 93, 32, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, > 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 73, > 109, 97, 103, 101, 32, 119, 97, 118, 101, 115, 34, 10, 119, 61, 123, 119, > 125, 32, 45, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 91, 45, > 49, 93, 32, 48, 32, 45, 114, 118, 51, 100, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 45, 49, 93, 32, 56, 44, 123, 55, 43, 51, 42, 105, 91, > 54, 93, 125, 44, 48, 44, 48, 32, 45, 114, 91, 45, 49, 93, 32, 51, > 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 10, 40, 48, > 44, 49, 44, 48, 59, 49, 44, 48, 44, 49, 59, 48, 44, 49, 44, 48, > 41, 32, 45, 47, 91, 45, 49, 93, 32, 50, 10, 45, 98, 97, 108, 108, > 91, 93, 32, 50, 48, 44, 50, 48, 48, 44, 50, 53, 53, 44, 49, 50, > 56, 44, 49, 44, 48, 46, 55, 44, 51, 46, 53, 10, 48, 32, 36, 119, > 44, 36, 119, 32, 91, 45, 49, 93, 10, 45, 108, 51, 100, 32, 123, 36, > 119, 47, 50, 125, 44, 45, 50, 48, 48, 44, 45, 49, 48, 48, 48, 32, > 45, 115, 108, 51, 100, 32, 48, 46, 52, 32, 45, 115, 115, 51, 100, 32, > 48, 46, 56, 32, 45, 102, 51, 100, 32, 53, 48, 48, 32, 116, 105, 109, > 101, 48, 61, 64, 124, 10, 45, 100, 111, 10, 45, 45, 99, 111, 110, 118, > 111, 108, 118, 101, 91, 45, 49, 93, 32, 91, 51, 93, 44, 49, 32, 45, > 45, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 114, 109, 91, 45, > 51, 93, 32, 45, 98, 91, 45, 49, 93, 32, 48, 46, 56, 32, 45, 45, > 91, 45, 49, 93, 32, 123, 105, 97, 125, 10, 45, 114, 91, 45, 49, 93, > 32, 49, 44, 123, 36, 119, 42, 36, 119, 125, 44, 49, 44, 49, 44, 45, > 49, 32, 45, 106, 91, 50, 93, 32, 91, 45, 49, 93, 44, 50, 44, 48, > 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, 44, 36, 119, 44, 49, 44, > 49, 44, 45, 49, 10, 91, 49, 93, 10, 45, 105, 102, 32, 64, 123, 53, > 44, 104, 125, 32, 45, 45, 108, 91, 53, 93, 32, 45, 114, 111, 119, 115, > 32, 48, 44, 50, 10, 110, 98, 61, 123, 119, 125, 10, 45, 105, 91, 48, > 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, > 105, 91, 49, 93, 32, 40, 36, 110, 98, 44, 36, 110, 98, 41, 32, 45, > 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 50, 93, 10, 40, 49, 44, > 48, 59, 49, 44, 123, 36, 110, 98, 45, 49, 125, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 50, 44, 36, 110, 98, 44, 49, 44, 49, 44, 51, 32, > 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 10, 49, 44, 123, 52, 42, > 36, 110, 98, 125, 44, 49, 44, 49, 44, 49, 32, 45, 121, 32, 45, 97, > 32, 121, 10, 45, 101, 110, 100, 108, 32, 91, 52, 93, 32, 45, 115, 112, > 114, 105, 116, 101, 115, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 43, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 51, 100, 91, 45, 49, 93, 32, 123, 36, 119, 47, 50, > 125, 44, 123, 36, 119, 47, 50, 125, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 48, 44, 48, 46, 57, 42, 109, 97, 120, 40, 119, 44, > 104, 41, 47, 36, 119, 125, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 48, 44, 48, 44, 49, 44, 123, 105, 102, 40, 64, 123, 33, 44, 98, 125, > 38, 50, 44, 45, 64, 123, 33, 44, 120, 125, 42, 51, 54, 48, 47, 64, > 123, 33, 44, 119, 125, 44, 64, 124, 42, 51, 48, 41, 125, 32, 45, 114, > 51, 100, 91, 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 45, 49, 50, > 48, 10, 45, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, 93, 32, > 91, 45, 49, 93, 44, 53, 48, 37, 44, 54, 53, 37, 44, 51, 48, 44, > 49, 44, 51, 44, 48, 44, 48, 32, 45, 119, 91, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, > 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, 45, 101, 108, 105, > 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, > 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, > 119, 125, 44, 123, 104, 125, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 70, 125, 125, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, > 36, 105, 115, 95, 102, 115, 41, 125, 32, 105, 115, 95, 102, 115, 61, 64, > 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, 32, 102, 119, 61, > 123, 109, 105, 110, 40, 64, 123, 33, 44, 117, 125, 42, 104, 47, 119, 44, > 64, 123, 33, 44, 118, 125, 42, 119, 47, 104, 41, 125, 32, 45, 119, 91, > 93, 32, 36, 102, 119, 44, 123, 36, 102, 119, 42, 104, 47, 119, 125, 44, > 48, 44, 49, 10, 45, 101, 108, 115, 101, 32, 45, 119, 91, 93, 32, 36, > 105, 115, 95, 102, 115, 44, 48, 44, 48, 32, 105, 115, 95, 102, 115, 61, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 119, 97, 105, > 116, 32, 50, 48, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, > 38, 49, 124, 124, 40, 64, 124, 45, 36, 116, 105, 109, 101, 48, 41, 62, > 49, 125, 32, 40, 123, 63, 42, 36, 119, 125, 59, 123, 63, 42, 36, 119, > 125, 59, 55, 48, 59, 48, 41, 32, 45, 97, 91, 53, 44, 45, 49, 93, > 32, 120, 32, 116, 105, 109, 101, 48, 61, 123, 64, 124, 45, 63, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 53, 44, 104, > 125, 32, 45, 108, 91, 53, 44, 45, 49, 93, 10, 45, 115, 104, 91, 48, > 93, 32, 50, 44, 50, 44, 48, 44, 48, 32, 45, 115, 104, 91, 48, 93, > 32, 51, 44, 51, 44, 48, 44, 48, 32, 45, 45, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 50, 32, > 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 115, 91, 48, 93, > 32, 120, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 32, 99, 111, 111, 114, 100, 115, 61, 64, 123, 36, 60, 44, 48, 45, > 49, 125, 32, 45, 105, 102, 32, 123, 64, 123, 36, 60, 44, 50, 125, 60, > 105, 40, 36, 99, 111, 111, 114, 100, 115, 41, 125, 32, 45, 61, 91, 45, > 49, 93, 32, 123, 56, 48, 43, 64, 123, 45, 49, 44, 40, 36, 99, 111, > 111, 114, 100, 115, 41, 125, 125, 44, 36, 99, 111, 111, 114, 100, 115, 32, > 45, 114, 109, 91, 36, 60, 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, > 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, > 32, 45, 105, 91, 48, 93, 32, 48, 32, 45, 101, 108, 115, 101, 32, 45, > 97, 91, 48, 45, 45, 50, 93, 32, 120, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, > 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, > 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, > 33, 44, 81, 125, 125, 10, 45, 114, 109, 32, 45, 119, 32, 48, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 119, 104, 105, > 114, 108, 32, 58, 32, 95, 111, 112, 97, 99, 105, 116, 121, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, > 32, 116, 104, 101, 32, 102, 114, 97, 99, 116, 97, 108, 32, 119, 104, 105, > 114, 108, 115, 32, 100, 101, 109, 111, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, 46, 50, 39, > 46, 10, 120, 95, 119, 104, 105, 114, 108, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 36, 123, 49, 61, 48, 46, 50, 125, 62, 61, 48, 10, 45, > 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 70, > 114, 97, 99, 116, 97, 108, 32, 119, 104, 105, 114, 108, 115, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, > 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, > 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, > 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 53, 44, 53, > 44, 49, 44, 51, 32, 50, 53, 54, 44, 50, 53, 54, 44, 49, 44, 51, > 32, 91, 45, 49, 93, 32, 45, 119, 91, 45, 49, 93, 32, 51, 56, 52, > 44, 51, 56, 52, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 70, 114, 97, 99, 116, 97, 108, 32, 119, 104, 105, 114, 108, 115, > 34, 10, 116, 97, 110, 103, 108, 101, 61, 48, 32, 116, 122, 111, 111, 109, > 61, 48, 32, 120, 99, 61, 123, 40, 119, 45, 64, 123, 45, 51, 44, 119, > 125, 41, 47, 50, 125, 32, 121, 99, 61, 123, 40, 104, 45, 64, 123, 45, > 51, 44, 104, 125, 41, 47, 50, 125, 10, 45, 100, 111, 10, 45, 114, 97, > 110, 100, 91, 45, 51, 93, 32, 48, 44, 50, 53, 53, 32, 45, 106, 91, > 45, 50, 93, 32, 91, 45, 51, 93, 44, 36, 120, 99, 44, 36, 121, 99, > 44, 48, 44, 48, 10, 45, 114, 111, 116, 97, 116, 101, 91, 45, 50, 93, > 32, 123, 56, 42, 115, 105, 110, 40, 36, 116, 97, 110, 103, 108, 101, 41, > 125, 44, 48, 44, 48, 44, 123, 119, 47, 50, 43, 63, 40, 45, 50, 44, > 50, 41, 125, 44, 123, 104, 47, 50, 125, 44, 123, 49, 46, 48, 51, 43, > 48, 46, 48, 50, 42, 115, 105, 110, 40, 36, 116, 122, 111, 111, 109, 41, > 125, 10, 116, 97, 110, 103, 108, 101, 61, 123, 36, 116, 97, 110, 103, 108, > 101, 43, 48, 46, 48, 48, 49, 125, 32, 116, 122, 111, 111, 109, 61, 123, > 36, 116, 122, 111, 111, 109, 43, 48, 46, 48, 50, 125, 10, 45, 106, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 36, 49, 32, 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, > 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, > 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 51, 42, 119, > 125, 44, 123, 51, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, > 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, > 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 49, 46, 53, 42, > 119, 125, 44, 123, 49, 46, 53, 42, 104, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 119, 104, 105, 108, > 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, > 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, > 125, 125, 10, 45, 114, 109, 91, 45, 51, 44, 45, 50, 93, 32, 45, 119, > 91, 93, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 58, 32, 80, 73, 78, 75, 45, 108, 105, 98, 114, 97, 114, 121, > 32, 111, 112, 101, 114, 97, 116, 111, 114, 115, 10, 95, 119, 114, 98, 121, > 116, 101, 112, 110, 107, 32, 58, 10, 45, 111, 117, 116, 112, 117, 116, 95, > 112, 105, 110, 107, 51, 100, 32, 36, 123, 49, 125, 46, 112, 110, 107, 10, > 95, 120, 112, 105, 110, 107, 32, 58, 10, 102, 105, 108, 101, 110, 97, 109, > 101, 61, 64, 123, 45, 102, 105, 108, 101, 95, 114, 97, 110, 100, 125, 10, > 112, 114, 101, 102, 105, 120, 61, 112, 105, 110, 107, 46, 10, 45, 105, 102, > 32, 123, 33, 64, 123, 45, 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, > 125, 125, 10, 45, 120, 32, 34, 119, 104, 105, 99, 104, 32, 34, 36, 123, > 112, 114, 101, 102, 105, 120, 125, 36, 123, 49, 125, 34, 32, 62, 47, 100, > 101, 118, 47, 110, 117, 108, 108, 32, 50, 62, 38, 49, 34, 10, 45, 105, > 102, 32, 123, 64, 123, 125, 33, 61, 48, 125, 32, 112, 114, 101, 102, 105, > 120, 61, 34, 34, 32, 45, 120, 32, 34, 119, 104, 105, 99, 104, 32, 34, > 36, 49, 34, 32, 62, 47, 100, 101, 118, 47, 110, 117, 108, 108, 32, 50, > 62, 38, 49, 34, 10, 9, 32, 32, 45, 105, 102, 32, 123, 64, 123, 125, > 33, 61, 48, 125, 32, 45, 101, 114, 114, 111, 114, 32, 34, 69, 120, 101, > 99, 117, 116, 97, 98, 108, 101, 32, 40, 112, 105, 110, 107, 46, 41, 34, > 36, 49, 34, 32, 110, 111, 116, 32, 102, 111, 117, 110, 100, 32, 105, 110, > 32, 80, 65, 84, 72, 44, 32, 115, 116, 97, 116, 117, 115, 32, 61, 32, > 34, 64, 123, 125, 34, 33, 33, 32, 82, 101, 116, 117, 114, 110, 105, 110, > 103, 33, 33, 92, 110, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 9, 45, 101, 110, 100, 105, 102, 10, 45, 111, > 117, 116, 112, 117, 116, 95, 112, 105, 110, 107, 51, 100, 32, 36, 123, 102, > 105, 108, 101, 110, 97, 109, 101, 125, 46, 112, 110, 107, 32, 45, 120, 32, > 36, 123, 112, 114, 101, 102, 105, 120, 125, 36, 123, 49, 125, 34, 32, 34, > 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, 125, 34, 46, 112, 110, 107, > 32, 36, 50, 32, 34, 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, 125, > 34, 95, 111, 46, 112, 110, 107, 32, 62, 47, 100, 101, 118, 47, 110, 117, > 108, 108, 32, 50, 62, 38, 49, 34, 10, 45, 101, 108, 115, 101, 10, 45, > 111, 117, 116, 112, 117, 116, 95, 112, 105, 110, 107, 51, 100, 32, 36, 123, > 102, 105, 108, 101, 110, 97, 109, 101, 125, 46, 112, 110, 107, 32, 45, 120, > 32, 36, 49, 34, 32, 34, 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, > 125, 34, 46, 112, 110, 107, 32, 36, 50, 32, 34, 36, 123, 102, 105, 108, > 101, 110, 97, 109, 101, 125, 34, 95, 111, 46, 112, 110, 107, 34, 10, 45, > 101, 110, 100, 105, 102, 10, 115, 116, 97, 116, 117, 115, 61, 64, 123, 125, > 10, 45, 102, 105, 108, 101, 95, 114, 109, 32, 36, 123, 102, 105, 108, 101, > 110, 97, 109, 101, 125, 46, 112, 110, 107, 10, 45, 105, 102, 32, 123, 36, > 115, 116, 97, 116, 117, 115, 33, 61, 48, 92, 32, 38, 38, 92, 32, 123, > 36, 49, 39, 33, 61, 39, 115, 101, 117, 105, 108, 97, 117, 116, 111, 125, > 125, 32, 45, 101, 114, 114, 111, 114, 32, 34, 69, 120, 101, 99, 32, 115, > 116, 97, 116, 117, 115, 32, 105, 115, 32, 34, 36, 123, 115, 116, 97, 116, > 117, 115, 125, 34, 46, 34, 32, 45, 114, 101, 116, 117, 114, 110, 10, 45, > 101, 108, 105, 102, 32, 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, 125, > 95, 111, 46, 112, 110, 107, 32, 45, 105, 32, 36, 123, 102, 105, 108, 101, > 110, 97, 109, 101, 125, 95, 111, 46, 112, 110, 107, 32, 45, 102, 105, 108, > 101, 95, 114, 109, 32, 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, 125, > 95, 111, 46, 112, 110, 107, 32, 45, 107, 91, 45, 49, 93, 10, 45, 101, > 108, 115, 101, 32, 45, 101, 114, 114, 111, 114, 32, 34, 69, 120, 101, 99, > 32, 101, 114, 114, 111, 114, 33, 33, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 95, 120, 112, 105, 110, 107, 115, 32, 58, 10, 115, 61, 64, 123, 45, > 49, 44, 115, 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, > 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, > 62, 44, 45, 49, 125, 93, 32, 32, 45, 95, 120, 112, 105, 110, 107, 32, > 36, 49, 44, 34, 36, 50, 34, 32, 45, 107, 91, 45, 49, 93, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, > 36, 115, 62, 49, 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, 93, > 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 95, 120, 102, 114, 97, 109, > 101, 32, 58, 10, 45, 108, 105, 110, 101, 32, 48, 37, 44, 48, 37, 44, > 49, 48, 48, 37, 44, 48, 37, 32, 45, 108, 105, 110, 101, 32, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 108, 105, 110, 101, 32, 48, 37, 44, 48, 37, 44, 48, 37, 44, 49, > 48, 48, 37, 32, 45, 108, 105, 110, 101, 32, 49, 48, 48, 37, 44, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 35, 64, 103, 109, > 105, 99, 32, 111, 117, 116, 112, 117, 116, 95, 112, 105, 110, 107, 51, 100, > 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 83, 97, 118, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 80, 53, 45, > 99, 111, 100, 101, 100, 32, 80, 80, 77, 32, 102, 105, 108, 101, 115, 32, > 40, 80, 73, 78, 75, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 32, > 102, 111, 114, 32, 51, 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, > 99, 32, 105, 109, 97, 103, 101, 115, 41, 46, 10, 111, 117, 116, 112, 117, > 116, 95, 112, 105, 110, 107, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 79, 117, 116, 112, 117, 116, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 97, 115, 32, 102, 105, 108, 101, 32, 39, 36, 49, 39, 32, > 40, 105, 110, 32, 51, 100, 32, 112, 105, 110, 107, 32, 101, 120, 116, 101, > 110, 115, 105, 111, 110, 32, 111, 102, 32, 80, 53, 45, 99, 111, 100, 101, > 100, 32, 80, 80, 77, 32, 102, 111, 114, 109, 97, 116, 41, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 48, 61, 34, 36, 49, 34, 10, > 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 36, 62, 61, 64, 123, 45, 102, > 105, 108, 101, 110, 97, 109, 101, 92, 32, 34, 92, 34, 36, 49, 92, 34, > 34, 44, 36, 62, 125, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 100, 61, 61, 49, 125, 32, > 45, 111, 91, 45, 49, 93, 32, 112, 112, 109, 58, 36, 123, 102, 105, 108, > 101, 110, 97, 109, 101, 36, 62, 125, 10, 45, 101, 108, 115, 101, 10, 40, > 123, 39, 80, 53, 92, 110, 123, 119, 125, 92, 32, 123, 104, 125, 92, 32, > 123, 100, 125, 92, 110, 50, 53, 53, 92, 110, 39, 125, 41, 10, 45, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 50, 93, 32, 48, 32, 45, > 121, 91, 45, 49, 93, 32, 120, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 45, 111, 91, 45, 49, 93, 32, 114, 97, 119, 58, 36, > 123, 102, 105, 108, 101, 110, 97, 109, 101, 36, 62, 125, 44, 99, 104, 97, > 114, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, 107, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 80, 105, 110, 107, 32, 119, 114, 97, 112, > 112, 101, 114, 32, 110, 97, 109, 101, 44, 112, 49, 44, 32, 46, 46, 32, > 44, 112, 110, 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, > 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, > 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, > 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 112, 114, 101, 112, 97, 114, 101, 115, > 32, 105, 110, 112, 117, 116, 44, 32, 99, 97, 108, 108, 115, 32, 101, 120, > 116, 101, 114, 110, 97, 108, 32, 34, 110, 97, 109, 101, 32, 105, 110, 112, > 117, 116, 32, 112, 49, 32, 46, 46, 46, 32, 112, 110, 32, 111, 117, 116, > 112, 117, 116, 34, 32, 97, 110, 100, 32, 114, 101, 97, 100, 115, 32, 111, > 117, 116, 112, 117, 116, 32, 40, 47, 116, 109, 112, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 112, 105, 110, 107, 32, 97, 115, 102, 114, 44, 53, 32, > 45, 112, 105, 110, 107, 91, 48, 93, 32, 97, 115, 102, 44, 53, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, 45, 112, 105, > 110, 107, 32, 109, 97, 120, 105, 109, 97, 44, 52, 10, 112, 105, 110, 107, > 32, 58, 32, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 35, 62, > 49, 125, 32, 40, 123, 34, 39, 36, 123, 50, 45, 45, 49, 125, 39, 34, > 125, 41, 32, 45, 114, 101, 112, 108, 97, 99, 101, 91, 45, 49, 93, 32, > 123, 39, 44, 39, 125, 44, 123, 34, 39, 32, 39, 34, 125, 32, 112, 61, > 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 101, 108, 115, 101, 32, 112, 61, 34, 32, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 43, 32, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 97, 108, 108, 32, 112, 105, 110, 107, 32, 112, 97, 99, 107, 97, > 103, 101, 32, 119, 105, 116, 104, 32, 99, 109, 100, 58, 32, 92, 34, 36, > 49, 36, 63, 32, 34, 36, 112, 34, 36, 63, 92, 34, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, > 110, 107, 115, 32, 36, 49, 44, 36, 112, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 112, 105, 110, 107, 95, 103, 114, 97, 121, 115, 107, 101, 108, 32, > 58, 32, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, > 123, 32, 52, 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, 54, > 32, 125, 44, 32, 95, 108, 97, 109, 98, 100, 97, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, > 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, > 110, 47, 103, 114, 97, 121, 115, 107, 101, 108, 95, 56, 99, 46, 104, 116, > 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 114, 97, > 121, 115, 99, 97, 108, 101, 32, 104, 111, 109, 111, 116, 111, 112, 105, 99, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 40, 114, 101, 113, 117, 105, > 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, > 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, > 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, > 32, 97, 110, 100, 32, 39, 108, 97, 109, 98, 100, 97, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 112, 105, 110, 107, 95, 103, 114, 97, > 121, 115, 107, 101, 108, 32, 44, 32, 45, 45, 112, 105, 110, 107, 95, 103, > 114, 97, 121, 115, 107, 101, 108, 91, 48, 93, 32, 44, 49, 48, 32, 45, > 45, 112, 105, 110, 107, 95, 103, 114, 97, 121, 115, 107, 101, 108, 91, 48, > 93, 32, 44, 49, 48, 48, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, > 105, 108, 101, 115, 32, 50, 10, 112, 105, 110, 107, 95, 103, 114, 97, 121, > 115, 107, 101, 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 52, 125, 44, 36, 123, 50, 61, 48, 125, 10, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, 124, 32, > 36, 49, 61, 61, 56, 32, 124, 124, 32, 36, 49, 61, 61, 54, 32, 124, > 124, 32, 36, 49, 61, 61, 50, 54, 34, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, > 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 34, 103, 114, 97, 121, 115, > 107, 101, 108, 34, 44, 34, 110, 117, 108, 108, 32, 36, 49, 32, 36, 50, > 34, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, > 103, 109, 105, 99, 32, 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, > 109, 97, 120, 105, 109, 97, 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, > 32, 54, 32, 124, 32, 50, 54, 32, 125, 44, 95, 104, 101, 105, 103, 104, > 116, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, > 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, > 100, 111, 120, 121, 103, 101, 110, 47, 104, 101, 105, 103, 104, 116, 109, 97, > 120, 105, 109, 97, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 72, 101, 105, 103, 104, 116, 109, 97, 120, > 105, 109, 97, 32, 102, 105, 108, 116, 101, 114, 105, 110, 103, 32, 40, 114, > 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, > 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, > 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 61, 52, 39, 32, 97, 110, 100, 32, 39, 104, 101, 105, 103, 104, 116, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, > 32, 50, 32, 45, 45, 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, > 109, 105, 110, 105, 109, 97, 32, 44, 49, 53, 32, 45, 45, 112, 105, 110, > 107, 95, 104, 101, 105, 103, 104, 116, 109, 97, 120, 105, 109, 97, 91, 48, > 44, 49, 93, 32, 44, 49, 53, 32, 45, 45, 91, 45, 51, 44, 45, 49, > 93, 32, 45, 45, 91, 45, 51, 44, 45, 49, 93, 32, 45, 107, 101, 101, > 112, 91, 45, 49, 44, 45, 50, 93, 10, 112, 105, 110, 107, 95, 104, 101, > 105, 103, 104, 116, 109, 97, 120, 105, 109, 97, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, > 124, 32, 36, 49, 61, 61, 56, 32, 124, 124, 32, 36, 49, 61, 61, 54, > 32, 124, 124, 32, 36, 49, 61, 61, 50, 54, 34, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 70, 105, 108, 116, 101, 114, 32, 98, 121, 32, 104, 101, 105, 103, > 104, 116, 109, 97, 120, 105, 109, 97, 32, 101, 120, 101, 99, 32, 119, 105, > 116, 104, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 32, > 36, 49, 32, 104, 101, 105, 103, 104, 116, 32, 36, 50, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 115, 61, 64, 123, 45, > 49, 44, 115, 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, > 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, > 62, 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, 110, 107, 32, 34, > 104, 101, 105, 103, 104, 116, 109, 97, 120, 105, 109, 97, 34, 44, 34, 36, > 49, 32, 36, 50, 34, 32, 45, 107, 91, 45, 49, 93, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 115, > 62, 49, 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, 93, 32, 99, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, > 97, 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, > 50, 54, 32, 125, 44, 95, 104, 101, 105, 103, 104, 116, 61, 49, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, > 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, > 101, 110, 47, 104, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 95, > 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 72, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 32, 102, > 105, 108, 116, 101, 114, 105, 110, 103, 32, 40, 114, 101, 113, 117, 105, 114, > 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, 114, > 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, 108, > 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, 32, > 97, 110, 100, 32, 39, 104, 101, 105, 103, 104, 116, 61, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, 45, 45, > 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, > 97, 32, 44, 49, 53, 32, 45, 45, 112, 105, 110, 107, 95, 104, 101, 105, > 103, 104, 116, 109, 97, 120, 105, 109, 97, 91, 48, 44, 49, 93, 32, 44, > 49, 53, 32, 45, 45, 91, 45, 51, 44, 45, 49, 93, 32, 45, 45, 91, > 45, 51, 44, 45, 49, 93, 32, 45, 107, 101, 101, 112, 91, 45, 49, 44, > 45, 50, 93, 10, 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, 109, > 105, 110, 105, 109, 97, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, 124, 32, 36, 49, 61, > 61, 56, 32, 124, 124, 32, 36, 49, 61, 61, 54, 32, 124, 124, 32, 36, > 49, 61, 61, 50, 54, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, > 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 102, 105, 108, 116, 101, 114, 32, 98, 121, 32, 104, 101, 105, > 103, 104, 116, 109, 105, 110, 105, 109, 97, 32, 101, 120, 101, 99, 32, 119, > 105, 116, 104, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, > 32, 36, 49, 32, 104, 101, 105, 103, 104, 116, 32, 36, 50, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 115, 61, 64, 123, > 45, 49, 44, 115, 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, > 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, > 123, 62, 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, 110, 107, 32, > 34, 104, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 34, 44, 34, > 36, 49, 32, 36, 50, 34, 32, 45, 107, 91, 45, 49, 93, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, > 115, 62, 49, 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, 93, 32, > 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 112, 105, 110, 107, 95, 104, 116, 107, 101, 114, 110, 32, 58, 32, 95, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, > 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, 54, 32, 125, 44, > 32, 95, 116, 121, 112, 101, 61, 123, 34, 34, 124, 117, 125, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, > 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, > 110, 47, 104, 116, 107, 101, 114, 110, 95, 56, 99, 46, 104, 116, 109, 108, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, > 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, > 120, 121, 103, 101, 110, 47, 104, 116, 107, 101, 114, 110, 117, 95, 56, 99, > 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 71, 114, 97, 121, 115, 99, 97, 108, 101, 32, 117, 108, 116, 105, 109, 97, > 116, 101, 32, 104, 111, 109, 111, 116, 111, 112, 105, 99, 32, 116, 104, 105, > 110, 110, 105, 110, 103, 47, 116, 104, 105, 99, 107, 101, 110, 105, 110, 103, > 32, 119, 105, 116, 104, 111, 117, 116, 32, 99, 111, 110, 100, 105, 116, 105, > 111, 110, 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, > 32, 80, 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, > 32, 98, 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 61, 52, 39, 32, 97, 110, 100, 32, 39, 116, > 121, 112, 101, 61, 34, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 112, 105, 110, 107, 95, 104, 116, 107, 101, 114, 110, 32, 44, 117, 32, 45, > 45, 112, 105, 110, 107, 95, 104, 116, 107, 101, 114, 110, 91, 48, 93, 32, > 44, 32, 45, 45, 45, 91, 45, 49, 44, 45, 50, 93, 32, 45, 114, 101, > 109, 111, 118, 101, 91, 48, 93, 10, 112, 105, 110, 107, 95, 104, 116, 107, > 101, 114, 110, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 52, 125, 44, 36, 123, 50, 61, 34, 34, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, > 93, 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 104, 116, 107, 101, 114, > 110, 36, 50, 44, 34, 110, 117, 108, 108, 32, 36, 49, 34, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 112, 105, 110, 107, 95, 108, 118, 107, 101, 114, 110, 32, 58, 32, 95, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, > 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, 54, 32, 125, 44, > 32, 95, 116, 121, 112, 101, 61, 123, 34, 34, 124, 117, 125, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, > 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, > 110, 47, 108, 118, 107, 101, 114, 110, 95, 56, 99, 46, 104, 116, 109, 108, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, > 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, > 120, 121, 103, 101, 110, 47, 108, 118, 107, 101, 114, 110, 117, 95, 56, 99, > 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 71, 114, 97, 121, 115, 99, 97, 108, 101, 32, 117, 108, 116, 105, 109, 97, > 116, 101, 32, 108, 101, 118, 101, 108, 105, 110, 103, 32, 116, 104, 105, 110, > 110, 105, 110, 103, 47, 116, 104, 105, 99, 107, 101, 110, 105, 110, 103, 32, > 119, 105, 116, 104, 111, 117, 116, 32, 99, 111, 110, 100, 105, 116, 105, 111, > 110, 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, > 80, 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, > 98, 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, 110, 110, 101, 99, 116, > 105, 118, 105, 116, 121, 61, 52, 39, 32, 97, 110, 100, 32, 39, 116, 121, > 112, 101, 61, 34, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 112, 105, > 110, 107, 95, 108, 118, 107, 101, 114, 110, 32, 44, 117, 10, 112, 105, 110, > 107, 95, 108, 118, 107, 101, 114, 110, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 52, 125, 44, 36, 123, 50, 61, 34, 34, 125, 10, > 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 52, 125, 61, 61, > 52, 32, 124, 124, 32, 36, 49, 61, 61, 56, 32, 124, 124, 32, 36, 49, > 61, 61, 54, 32, 124, 124, 32, 36, 49, 61, 61, 50, 54, 34, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, > 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 108, > 118, 107, 101, 114, 110, 36, 123, 50, 125, 44, 34, 110, 117, 108, 108, 32, > 36, 49, 34, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, 107, 95, 114, 101, 103, 95, > 109, 105, 110, 105, 109, 97, 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, > 32, 54, 32, 124, 32, 50, 54, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, > 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 109, 105, > 110, 105, 109, 97, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 103, 105, 111, 110, 97, 108, 32, > 109, 105, 110, 105, 109, 97, 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, > 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, > 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, > 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, > 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, 45, 112, 105, > 110, 107, 95, 114, 101, 103, 95, 109, 105, 110, 105, 109, 97, 32, 44, 10, > 112, 105, 110, 107, 95, 114, 101, 103, 95, 109, 105, 110, 105, 109, 97, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 52, 125, > 61, 61, 52, 32, 124, 124, 32, 36, 49, 61, 61, 56, 32, 124, 124, 32, > 36, 49, 61, 61, 54, 32, 124, 124, 32, 36, 49, 61, 61, 50, 54, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, > 101, 32, 114, 101, 103, 105, 111, 110, 97, 108, 32, 109, 105, 110, 105, 109, > 97, 32, 101, 120, 101, 99, 32, 119, 105, 116, 104, 32, 99, 111, 110, 110, > 101, 99, 116, 105, 118, 105, 116, 121, 32, 36, 49, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 115, 61, 64, 123, 45, 49, > 44, 115, 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, 45, > 115, 91, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, > 44, 45, 49, 125, 93, 32, 32, 45, 95, 120, 112, 105, 110, 107, 32, 34, > 109, 105, 110, 105, 109, 97, 34, 44, 34, 36, 49, 34, 32, 45, 107, 91, > 45, 49, 93, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, 45, 97, 91, 45, 36, > 115, 45, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, 107, 95, 115, 107, 101, 108, > 99, 117, 114, 118, 32, 58, 32, 95, 112, 114, 105, 111, 61, 123, 48, 124, > 49, 124, 50, 124, 51, 124, 52, 124, 56, 124, 54, 124, 50, 54, 125, 44, > 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, > 52, 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, 54, 32, 125, > 44, 95, 105, 110, 104, 105, 98, 105, 116, 61, 123, 34, 34, 125, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, > 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, > 101, 110, 47, 115, 107, 101, 108, 99, 117, 114, 118, 95, 56, 99, 46, 104, > 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 117, > 114, 118, 105, 108, 105, 110, 101, 97, 114, 32, 98, 105, 110, 97, 114, 121, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 103, 117, 105, 100, 101, 100, > 32, 98, 121, 32, 97, 32, 112, 114, 105, 111, 114, 105, 116, 121, 32, 102, > 117, 110, 99, 116, 105, 111, 110, 32, 111, 114, 32, 105, 109, 97, 103, 101, > 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, > 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, > 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 112, 114, 105, 111, 61, 48, 39, 44, > 32, 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, > 39, 32, 97, 110, 100, 32, 39, 105, 110, 104, 105, 98, 105, 116, 61, 34, > 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, > 111, 108, 100, 32, 53, 48, 37, 32, 123, 119, 125, 44, 123, 104, 125, 32, > 45, 102, 105, 108, 108, 91, 45, 49, 93, 32, 39, 105, 102, 40, 120, 62, > 119, 47, 50, 44, 50, 53, 53, 44, 48, 41, 39, 32, 116, 112, 61, 64, > 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 32, 45, 111, 117, 116, > 112, 117, 116, 91, 45, 49, 93, 32, 36, 123, 116, 112, 125, 47, 105, 110, > 104, 105, 98, 105, 116, 46, 112, 103, 109, 32, 45, 114, 101, 109, 111, 118, > 101, 91, 45, 49, 93, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, > 108, 99, 117, 114, 118, 91, 48, 93, 32, 44, 32, 45, 45, 112, 105, 110, > 107, 95, 115, 107, 101, 108, 99, 117, 114, 118, 91, 48, 93, 32, 44, 44, > 36, 123, 116, 112, 125, 47, 105, 110, 104, 105, 98, 105, 116, 46, 112, 103, > 109, 32, 45, 101, 120, 101, 99, 32, 34, 114, 109, 32, 34, 36, 123, 116, > 112, 125, 34, 47, 105, 110, 104, 105, 98, 105, 116, 46, 112, 103, 109, 34, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, > 32, 53, 48, 37, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, > 99, 117, 114, 118, 32, 44, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, > 101, 108, 99, 117, 114, 118, 91, 45, 50, 93, 32, 44, 56, 10, 112, 105, > 110, 107, 95, 115, 107, 101, 108, 99, 117, 114, 118, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 48, 125, 44, 36, 123, 50, 61, 52, > 125, 44, 36, 123, 51, 61, 34, 34, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 117, 114, 118, 105, 108, 105, 110, 101, 97, 114, 32, 98, > 105, 110, 97, 114, 121, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 103, > 117, 105, 100, 101, 100, 32, 98, 121, 32, 97, 32, 112, 114, 105, 111, 114, > 105, 116, 121, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 111, 114, 32, > 105, 109, 97, 103, 101, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 112, 114, 105, 111, 61, 36, 49, 44, 32, 99, 111, 110, > 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 36, 50, 44, 32, 105, 110, > 104, 105, 98, 105, 116, 61, 36, 51, 46, 34, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, > 93, 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 34, 115, 107, 101, 108, > 99, 117, 114, 118, 34, 44, 34, 36, 49, 32, 36, 50, 32, 36, 51, 34, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 110, 100, > 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, > 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, > 54, 32, 125, 44, 95, 110, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, > 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 115, 107, 101, > 108, 101, 110, 100, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 72, 111, 109, 111, 116, 111, 112, 105, 99, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 111, 102, 32, 97, 32, 50, > 100, 32, 111, 114, 32, 51, 100, 32, 98, 105, 110, 97, 114, 121, 32, 105, > 109, 97, 103, 101, 32, 119, 105, 116, 104, 32, 100, 121, 110, 97, 109, 105, > 99, 32, 100, 101, 116, 101, 99, 116, 105, 111, 110, 32, 111, 102, 32, 101, > 110, 100, 32, 112, 111, 105, 110, 116, 115, 32, 40, 114, 101, 113, 117, 105, > 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, > 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, > 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, > 32, 97, 110, 100, 32, 39, 110, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, > 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 110, 100, 32, 44, > 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 110, 100, 91, > 45, 50, 93, 32, 44, 45, 49, 10, 112, 105, 110, 107, 95, 115, 107, 101, > 108, 101, 110, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 52, 125, 44, 36, 123, 50, 61, 48, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, > 93, 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 34, 115, 107, 101, 108, > 101, 110, 100, 34, 44, 34, 36, 49, 32, 36, 50, 34, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 116, 111, 110, 32, 58, 32, > 95, 112, 114, 105, 111, 61, 123, 48, 124, 49, 124, 50, 124, 51, 124, 52, > 124, 56, 124, 54, 124, 50, 54, 125, 44, 95, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, > 32, 54, 32, 124, 32, 50, 54, 32, 125, 44, 95, 105, 110, 104, 105, 98, > 105, 116, 61, 123, 34, 34, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, > 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 115, 107, 101, 108, > 101, 116, 111, 110, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 85, 108, 116, 105, 109, 97, 116, 101, 32, > 98, 105, 110, 97, 114, 121, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, > 103, 117, 105, 100, 101, 100, 32, 98, 121, 32, 97, 32, 112, 114, 105, 111, > 114, 105, 116, 121, 32, 105, 109, 97, 103, 101, 32, 40, 114, 101, 113, 117, > 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, > 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, > 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 112, 114, 105, 111, 61, 48, 39, 44, 32, 39, 99, 111, 110, 110, > 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, 32, 97, 110, 100, 32, > 39, 105, 110, 104, 105, 98, 105, 116, 61, 34, 34, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, > 37, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 116, 111, > 110, 91, 45, 49, 93, 32, 44, 10, 112, 105, 110, 107, 95, 115, 107, 101, > 108, 101, 116, 111, 110, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 48, 125, 44, 36, 123, 50, 61, 52, 125, 44, 36, 123, 51, 61, > 34, 34, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, > 110, 107, 115, 32, 34, 115, 107, 101, 108, 101, 116, 111, 110, 34, 44, 34, > 36, 49, 32, 36, 50, 32, 36, 51, 34, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, > 107, 95, 115, 107, 101, 108, 112, 97, 114, 32, 58, 32, 95, 97, 108, 103, > 111, 114, 105, 116, 104, 109, 61, 123, 48, 46, 46, 50, 57, 125, 44, 95, > 110, 115, 116, 101, 112, 115, 61, 95, 49, 44, 95, 105, 110, 104, 105, 98, > 105, 116, 61, 34, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, > 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 115, 107, 101, 108, 112, 97, > 114, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 80, 97, 114, 97, 108, 108, 101, 108, 32, 98, 105, 110, > 97, 114, 121, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 40, 114, 101, > 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, > 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, > 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 97, 108, 103, 111, 114, 105, 116, 104, 109, 61, 52, 39, > 44, 32, 39, 110, 115, 116, 101, 112, 115, 61, 45, 49, 39, 32, 97, 110, > 100, 32, 39, 105, 110, 104, 105, 98, 105, 116, 61, 34, 34, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, > 53, 48, 37, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, 112, > 97, 114, 91, 45, 49, 93, 32, 48, 32, 45, 45, 112, 105, 110, 107, 95, > 115, 107, 101, 108, 112, 97, 114, 91, 45, 49, 93, 32, 50, 10, 112, 105, > 110, 107, 95, 115, 107, 101, 108, 112, 97, 114, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 52, 125, 44, 36, 123, 50, 61, 45, 49, > 125, 44, 36, 123, 51, 61, 34, 34, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, > 32, 45, 95, 120, 102, 114, 97, 109, 101, 32, 45, 95, 120, 112, 105, 110, > 107, 115, 32, 34, 115, 107, 101, 108, 112, 97, 114, 34, 44, 34, 36, 49, > 32, 36, 50, 32, 36, 51, 34, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, 107, 95, > 119, 115, 104, 101, 100, 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, 116, > 105, 118, 105, 116, 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, 32, > 54, 32, 124, 32, 50, 54, 32, 125, 44, 95, 105, 110, 118, 101, 114, 115, > 101, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 104, 101, 105, > 103, 104, 116, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, > 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 119, 115, 104, 101, 100, 116, > 111, 112, 111, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 87, 97, 116, 101, 114, 115, 104, 101, 100, 32, > 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, > 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, > 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, > 105, 116, 121, 61, 52, 39, 44, 32, 39, 105, 110, 118, 101, 114, 115, 101, > 61, 48, 39, 32, 97, 110, 100, 32, 39, 104, 101, 105, 103, 104, 116, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 112, 105, 110, 107, 95, > 119, 115, 104, 101, 100, 32, 44, 49, 44, 53, 32, 45, 112, 105, 110, 107, > 95, 119, 115, 104, 101, 100, 91, 48, 93, 32, 44, 44, 53, 10, 112, 105, > 110, 107, 95, 119, 115, 104, 101, 100, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, 124, 32, > 36, 49, 61, 61, 56, 32, 124, 124, 32, 36, 49, 61, 61, 54, 32, 124, > 124, 32, 36, 49, 61, 61, 50, 54, 34, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 119, > 115, 104, 101, 100, 116, 111, 112, 111, 32, 101, 120, 101, 99, 32, 119, 105, > 116, 104, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 32, > 36, 49, 32, 105, 110, 118, 101, 114, 115, 105, 111, 110, 32, 36, 50, 32, > 104, 101, 105, 103, 104, 116, 32, 36, 51, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, > 123, 62, 44, 45, 49, 125, 93, 10, 115, 61, 64, 123, 45, 49, 44, 115, > 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, 45, 115, 91, > 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 100, 61, 61, 49, 125, 10, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, 124, 32, 36, 49, 61, > 61, 56, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 45, 105, 102, 32, 123, > 36, 50, 33, 61, 48, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 32, 109, 97, 120, 40, 109, > 105, 110, 40, 105, 44, 50, 53, 53, 41, 44, 48, 41, 10, 45, 105, 102, > 32, 123, 36, 51, 62, 61, 48, 125, 32, 45, 112, 105, 110, 107, 32, 104, > 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 44, 36, 49, 44, 36, > 51, 32, 45, 101, 110, 100, 105, 102, 10, 45, 112, 105, 110, 107, 32, 119, > 115, 104, 101, 100, 116, 111, 112, 111, 44, 36, 49, 10, 45, 105, 102, 32, > 123, 36, 50, 33, 61, 48, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 49, 61, 61, 54, 32, 124, 124, 32, 36, 49, 61, 61, > 50, 54, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 45, 105, 102, 32, 123, > 36, 50, 33, 61, 48, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 32, 109, 97, 120, 40, 109, > 105, 110, 40, 105, 44, 50, 53, 53, 41, 44, 48, 41, 10, 45, 105, 102, > 32, 123, 36, 51, 62, 61, 48, 125, 10, 45, 112, 105, 110, 107, 32, 104, > 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 44, 36, 49, 44, 36, > 51, 10, 45, 101, 110, 100, 105, 102, 10, 45, 112, 105, 110, 107, 32, 119, > 115, 104, 101, 100, 116, 111, 112, 111, 44, 36, 49, 10, 45, 105, 102, 32, > 123, 36, 50, 33, 61, 48, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 115, 62, 49, 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, > 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 58, 32, 67, 111, 110, 118, 101, 110, 105, 101, 110, 99, > 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 10, 35, 64, 103, 109, > 105, 99, 32, 97, 108, 101, 114, 116, 32, 58, 32, 95, 116, 105, 116, 108, > 101, 44, 95, 109, 101, 115, 115, 97, 103, 101, 44, 95, 108, 97, 98, 101, > 108, 95, 98, 117, 116, 116, 111, 110, 49, 44, 95, 108, 97, 98, 101, 108, > 95, 98, 117, 116, 116, 111, 110, 50, 44, 46, 46, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, 121, 32, 97, 110, > 32, 97, 108, 101, 114, 116, 32, 98, 111, 120, 32, 97, 110, 100, 32, 119, > 97, 105, 116, 32, 102, 111, 114, 32, 117, 115, 101, 114, 39, 115, 32, 99, > 104, 111, 105, 99, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 102, 32, 97, 32, 115, 105, 110, 103, 108, 101, 32, 105, 109, 97, 103, > 101, 32, 105, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 101, 108, 101, > 99, 116, 105, 111, 110, 44, 32, 105, 116, 32, 105, 115, 32, 117, 115, 101, > 100, 32, 97, 115, 32, 97, 110, 32, 105, 99, 111, 110, 32, 102, 111, 114, > 32, 116, 104, 101, 32, 97, 108, 101, 114, 116, 32, 98, 111, 120, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 105, 116, 108, 101, 61, > 91, 71, 39, 77, 73, 67, 32, 65, 108, 101, 114, 116, 93, 39, 32, 97, > 110, 100, 32, 39, 109, 101, 115, 115, 97, 103, 101, 61, 84, 104, 105, 115, > 32, 105, 115, 32, 97, 110, 32, 97, 108, 101, 114, 116, 32, 98, 111, 120, > 46, 39, 46, 10, 97, 108, 101, 114, 116, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 34, 36, 123, 49, 61, 91, 71, 92, 52, 55, 77, 73, 67, 32, > 65, 108, 101, 114, 116, 93, 125, 44, 36, 123, 50, 61, 84, 104, 105, 115, > 32, 105, 115, 32, 97, 110, 32, 97, 108, 101, 114, 116, 32, 98, 111, 120, > 46, 125, 44, 36, 123, 51, 61, 79, 75, 125, 34, 10, 45, 105, 102, 32, > 123, 64, 35, 61, 61, 49, 125, 10, 45, 101, 91, 48, 45, 45, 51, 93, > 32, 34, 68, 105, 115, 112, 108, 97, 121, 32, 97, 108, 101, 114, 116, 32, > 98, 111, 120, 44, 32, 119, 105, 116, 104, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 116, 105, 116, 108, 101, 32, 39, 36, 49, 39, 44, 32, 109, > 101, 115, 115, 97, 103, 101, 32, 39, 36, 50, 39, 32, 97, 110, 100, 32, > 98, 117, 116, 116, 111, 110, 115, 32, 39, 36, 123, 51, 45, 45, 49, 125, > 39, 46, 34, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 68, 105, 115, 112, 108, 97, 121, 32, 97, 108, 101, 114, > 116, 32, 98, 111, 120, 44, 32, 119, 105, 116, 104, 32, 116, 105, 116, 108, > 101, 32, 39, 36, 49, 39, 44, 32, 109, 101, 115, 115, 97, 103, 101, 32, > 39, 36, 50, 39, 32, 97, 110, 100, 32, 98, 117, 116, 116, 111, 110, 115, > 32, 39, 36, 123, 51, 45, 45, 49, 125, 39, 46, 34, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 64, 35, > 61, 61, 49, 125, 32, 108, 111, 103, 111, 61, 32, 45, 101, 108, 115, 101, > 32, 108, 111, 103, 111, 61, 91, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 45, 108, 36, 108, 111, 103, 111, 10, 45, 105, 102, 32, 123, 64, 35, > 61, 61, 49, 125, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 101, 108, > 115, 101, 10, 54, 52, 44, 54, 52, 32, 45, 112, 111, 108, 121, 103, 111, > 110, 32, 51, 44, 53, 48, 37, 44, 49, 48, 37, 44, 49, 48, 37, 44, > 57, 48, 37, 44, 57, 48, 37, 44, 57, 48, 37, 44, 49, 44, 49, 32, > 45, 98, 32, 51, 32, 45, 103, 101, 32, 53, 48, 37, 10, 45, 45, 101, > 114, 111, 100, 101, 91, 45, 49, 93, 32, 53, 32, 45, 45, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 61, 61, 91, 45, 49, 93, 32, 48, > 10, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 52, 44, > 52, 55, 37, 44, 52, 51, 37, 44, 53, 51, 37, 44, 52, 51, 37, 44, > 53, 51, 37, 44, 54, 54, 37, 44, 52, 55, 37, 44, 54, 54, 37, 44, > 49, 44, 48, 32, 45, 99, 105, 114, 99, 108, 101, 91, 45, 49, 93, 32, > 53, 48, 37, 44, 55, 54, 37, 44, 50, 44, 49, 44, 48, 10, 45, 45, > 42, 91, 48, 93, 32, 50, 53, 53, 32, 91, 45, 49, 93, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, 51, 45, 45, 49, > 93, 32, 99, 32, 45, 45, 91, 45, 49, 93, 32, 39, 51, 42, 40, 121, > 45, 104, 47, 50, 41, 39, 10, 45, 42, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 42, 91, 48, 93, > 32, 50, 53, 53, 32, 45, 114, 118, 32, 45, 97, 32, 99, 10, 45, 100, > 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, 51, 44, 51, 44, 49, > 32, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 51, 44, 50, 48, 48, 32, 45, 98, 108, 101, 110, 100, 32, > 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, 105, 102, 10, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 45, 49, 44, 50, 10, 36, 61, 97, 114, > 103, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 50, 125, > 32, 108, 97, 98, 101, 108, 61, 36, 123, 97, 114, 103, 123, 36, 62, 43, > 51, 125, 125, 32, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 108, 97, > 98, 101, 108, 44, 48, 44, 48, 44, 49, 54, 44, 49, 44, 45, 50, 48, > 48, 32, 45, 100, 111, 110, 101, 10, 45, 114, 91, 94, 48, 93, 32, 123, > 109, 105, 110, 40, 49, 50, 56, 44, 109, 97, 120, 40, 54, 52, 44, 64, > 123, 45, 109, 97, 120, 95, 119, 91, 94, 48, 93, 125, 43, 49, 50, 41, > 41, 125, 44, 123, 109, 105, 110, 40, 52, 56, 44, 109, 97, 120, 40, 50, > 52, 44, 64, 123, 45, 109, 97, 120, 95, 104, 91, 94, 48, 93, 125, 43, > 49, 50, 41, 41, 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 10, 45, 43, 91, 94, 48, 93, 32, 50, 48, 48, > 32, 45, 116, 111, 95, 114, 103, 98, 91, 94, 48, 93, 10, 45, 109, 118, > 91, 48, 93, 32, 64, 35, 10, 91, 48, 93, 44, 91, 48, 93, 44, 49, > 44, 49, 44, 39, 40, 121, 45, 104, 47, 50, 41, 39, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 50, 32, 45, 99, 91, 45, 49, 93, 32, 45, 51, > 48, 44, 51, 48, 32, 45, 43, 91, 48, 45, 45, 51, 93, 32, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 99, 91, 94, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 60, 93, 10, 45, > 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 48, 44, 48, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, 120, 70, 70, 70, > 70, 70, 70, 70, 70, 44, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, > 108, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 123, 119, 45, 50, 125, > 44, 123, 104, 45, 50, 125, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, > 70, 70, 70, 44, 48, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 50, 44, 123, 104, 45, 51, 125, 44, 123, 119, 45, 51, 125, 44, 123, 104, > 45, 51, 125, 44, 49, 44, 49, 53, 48, 32, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 123, 119, 45, 51, 125, 44, 123, 104, 45, 51, 125, 44, > 123, 119, 45, 51, 125, 44, 50, 44, 49, 44, 49, 53, 48, 10, 45, 108, > 105, 110, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 123, 119, 45, 51, > 125, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 49, 44, 49, 44, 49, 44, 123, 104, 45, 51, 125, 44, > 49, 44, 50, 53, 53, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 52, 44, 52, 44, 123, 119, 45, 53, 125, 44, 123, > 104, 45, 53, 125, 44, 49, 44, 48, 120, 65, 65, 65, 65, 65, 65, 65, > 65, 44, 48, 10, 45, 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, > 49, 44, 49, 44, 48, 44, 48, 44, 50, 10, 45, 114, 101, 99, 116, 97, > 110, 103, 108, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, > 70, 70, 70, 44, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 49, 44, 49, 44, 123, 119, 45, 50, 125, 44, 123, > 104, 45, 50, 125, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, > 70, 44, 49, 53, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 52, 44, 52, 44, 123, 119, 45, 53, 125, 44, 123, > 104, 45, 53, 125, 44, 49, 44, 48, 120, 65, 65, 65, 65, 65, 65, 65, > 65, 44, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, > 51, 93, 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, > 45, 108, 105, 110, 101, 91, 45, 51, 93, 32, 49, 44, 123, 104, 45, 50, > 125, 44, 123, 119, 45, 50, 125, 44, 123, 104, 45, 50, 125, 44, 49, 44, > 49, 53, 48, 32, 45, 108, 105, 110, 101, 91, 45, 51, 93, 32, 123, 119, > 45, 50, 125, 44, 123, 104, 45, 50, 125, 44, 123, 119, 45, 50, 125, 44, > 49, 44, 49, 44, 49, 53, 48, 10, 45, 108, 105, 110, 101, 91, 45, 51, > 93, 32, 48, 44, 48, 44, 123, 119, 45, 50, 125, 44, 48, 44, 49, 44, > 50, 53, 53, 32, 45, 108, 105, 110, 101, 91, 45, 51, 93, 32, 48, 44, > 48, 44, 48, 44, 123, 104, 45, 50, 125, 44, 49, 44, 50, 53, 53, 10, > 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 61, 91, 48, 93, 32, 49, 44, 48, 44, 48, 10, 45, 97, 32, 99, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 45, 108, > 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 51, 32, 45, > 115, 104, 32, 49, 44, 49, 48, 48, 37, 32, 45, 45, 91, 53, 48, 37, > 45, 45, 49, 93, 32, 50, 48, 48, 32, 45, 114, 109, 91, 53, 48, 37, > 45, 45, 49, 93, 32, 45, 102, 114, 97, 109, 101, 32, 56, 44, 56, 44, > 48, 10, 45, 105, 102, 32, 123, 64, 35, 60, 54, 125, 32, 45, 97, 91, > 94, 45, 49, 93, 32, 120, 32, 45, 101, 108, 115, 101, 32, 45, 97, 112, > 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 91, 94, 45, 49, 93, 32, > 44, 32, 45, 101, 110, 100, 105, 102, 10, 48, 32, 45, 116, 91, 45, 49, > 93, 32, 34, 36, 50, 34, 44, 48, 44, 48, 44, 49, 54, 44, 49, 44, > 48, 44, 45, 50, 48, 48, 44, 45, 50, 48, 48, 44, 45, 50, 48, 48, > 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 43, 49, 54, 125, 44, 123, > 104, 43, 56, 125, 44, 49, 44, 52, 44, 48, 10, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 120, 44, 48, 46, 53, 32, 45, 114, 118, 32, 45, > 97, 32, 121, 44, 48, 46, 53, 10, 45, 115, 104, 32, 49, 44, 49, 48, > 48, 37, 32, 45, 43, 91, 45, 49, 93, 32, 50, 48, 48, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 108, > 105, 110, 101, 32, 48, 44, 48, 44, 123, 119, 45, 50, 125, 44, 48, 44, > 49, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, > 45, 108, 105, 110, 101, 32, 48, 44, 48, 44, 48, 44, 123, 104, 45, 50, > 125, 44, 49, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 10, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 10, 40, 48, 44, 123, 119, 45, 49, 125, 41, 32, 40, 48, 59, 64, 123, > 45, 50, 44, 104, 45, 49, 125, 41, 32, 45, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 91, 45, 51, 93, 44, 51, 32, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 99, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, > 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, > 49, 93, 32, 48, 32, 45, 114, 91, 45, 49, 93, 32, 123, 104, 47, 50, > 125, 44, 50, 44, 49, 44, 49, 44, 45, 49, 10, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 50, 93, 32, 49, 44, 51, 32, 45, 114, 118, > 91, 45, 50, 44, 45, 49, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 45, 51, 44, 119, > 125, 32, 120, 48, 61, 64, 123, 45, 51, 44, 40, 36, 62, 44, 48, 41, > 125, 32, 121, 48, 61, 64, 123, 45, 51, 44, 40, 36, 62, 44, 49, 41, > 125, 32, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, > 32, 36, 120, 48, 44, 36, 121, 48, 44, 123, 36, 120, 48, 43, 64, 123, > 48, 44, 119, 125, 45, 49, 125, 44, 123, 36, 121, 48, 43, 64, 123, 48, > 44, 104, 125, 45, 49, 125, 44, 49, 44, 123, 49, 43, 36, 62, 125, 32, > 45, 100, 111, 110, 101, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 57, 32, 45, 105, 102, 32, > 123, 33, 64, 123, 33, 36, 62, 125, 125, 32, 100, 105, 115, 112, 61, 36, > 62, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, > 40, 36, 100, 105, 115, 112, 41, 125, 32, 45, 101, 114, 114, 111, 114, 91, > 48, 45, 45, 52, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, > 45, 97, 108, 101, 114, 116, 39, 58, 32, 67, 97, 110, 110, 111, 116, 32, > 111, 112, 101, 110, 32, 100, 105, 115, 112, 108, 97, 121, 32, 119, 105, 110, > 100, 111, 119, 32, 102, 111, 114, 32, 97, 108, 101, 114, 116, 32, 98, 111, > 120, 46, 34, 32, 45, 101, 110, 100, 105, 102, 10, 115, 101, 108, 101, 99, > 116, 101, 100, 61, 123, 105, 102, 40, 36, 35, 61, 61, 51, 44, 48, 44, > 45, 49, 41, 125, 32, 99, 108, 105, 99, 107, 101, 100, 61, 45, 49, 10, > 45, 100, 111, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, > 49, 93, 32, 48, 44, 50, 10, 45, 105, 102, 32, 123, 36, 99, 108, 105, > 99, 107, 101, 100, 62, 61, 48, 125, 10, 120, 48, 61, 64, 123, 45, 51, > 44, 40, 36, 99, 108, 105, 99, 107, 101, 100, 44, 48, 41, 125, 32, 121, > 48, 61, 64, 123, 45, 51, 44, 40, 36, 99, 108, 105, 99, 107, 101, 100, > 44, 49, 41, 125, 10, 45, 115, 104, 91, 36, 99, 108, 105, 99, 107, 101, > 100, 93, 32, 55, 44, 57, 10, 45, 106, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 36, 120, 48, 44, 36, 121, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 115, 101, 108, 101, 99, > 116, 101, 100, 62, 61, 48, 125, 10, 120, 48, 61, 64, 123, 45, 51, 44, > 40, 36, 115, 101, 108, 101, 99, 116, 101, 100, 44, 48, 41, 125, 32, 121, > 48, 61, 64, 123, 45, 51, 44, 40, 36, 115, 101, 108, 101, 99, 116, 101, > 100, 44, 49, 41, 125, 10, 45, 115, 104, 91, 36, 115, 101, 108, 101, 99, > 116, 101, 100, 93, 32, 52, 44, 54, 10, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 36, 120, 48, 44, 36, 121, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 36, 100, > 105, 115, 112, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 48, 44, 34, 36, 49, 34, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 119, 97, 105, 116, 10, 120, 109, 61, 64, 123, 33, 36, 100, 105, > 115, 112, 44, 120, 125, 32, 121, 109, 61, 64, 123, 33, 36, 100, 105, 115, > 112, 44, 121, 125, 32, 98, 109, 61, 123, 64, 123, 33, 36, 100, 105, 115, > 112, 44, 98, 125, 38, 49, 125, 32, 118, 97, 108, 61, 123, 105, 40, 36, > 120, 109, 44, 36, 121, 109, 44, 48, 44, 51, 41, 125, 10, 45, 105, 102, > 32, 123, 36, 98, 109, 34, 32, 38, 38, 32, 34, 36, 118, 97, 108, 125, > 32, 99, 108, 105, 99, 107, 101, 100, 61, 123, 36, 118, 97, 108, 45, 49, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 98, 109, 34, 32, 38, 38, > 32, 34, 33, 36, 118, 97, 108, 34, 32, 38, 38, 32, 34, 36, 99, 108, > 105, 99, 107, 101, 100, 62, 61, 48, 125, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 61, 36, 99, 108, 105, 99, 107, 101, 100, 32, 99, 108, 105, 99, > 107, 101, 100, 61, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 33, 36, > 98, 109, 34, 32, 38, 38, 32, 34, 36, 99, 108, 105, 99, 107, 101, 100, > 62, 61, 48, 34, 32, 38, 38, 32, 34, 36, 99, 108, 105, 99, 107, 101, > 100, 61, 61, 36, 118, 97, 108, 45, 49, 125, 32, 45, 98, 114, 101, 97, > 107, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, > 36, 100, 105, 115, 112, 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, > 125, 32, 115, 101, 108, 101, 99, 116, 101, 100, 61, 123, 40, 36, 115, 101, > 108, 101, 99, 116, 101, 100, 43, 49, 41, 37, 64, 123, 45, 50, 44, 119, > 125, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 10, 45, 101, 108, 105, > 102, 32, 64, 123, 33, 36, 100, 105, 115, 112, 44, 65, 82, 82, 79, 87, > 76, 69, 70, 84, 125, 32, 115, 101, 108, 101, 99, 116, 101, 100, 61, 123, > 40, 36, 115, 101, 108, 101, 99, 116, 101, 100, 45, 49, 41, 37, 64, 123, > 45, 50, 44, 119, 125, 43, 40, 36, 115, 101, 108, 101, 99, 116, 101, 100, > 61, 61, 45, 49, 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 115, 101, 108, 101, 99, 116, 101, 100, > 62, 61, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 36, 100, 105, 115, > 112, 44, 69, 78, 84, 69, 82, 125, 125, 32, 99, 108, 105, 99, 107, 101, > 100, 61, 36, 115, 101, 108, 101, 99, 116, 101, 100, 32, 45, 98, 114, 101, > 97, 107, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, > 32, 123, 64, 123, 33, 36, 100, 105, 115, 112, 125, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 36, 100, 105, 115, 112, 44, 69, 83, 67, 125, 125, > 10, 45, 119, 36, 100, 105, 115, 112, 32, 48, 32, 45, 114, 109, 32, 45, > 117, 32, 36, 99, 108, 105, 99, 107, 101, 100, 10, 45, 101, 110, 100, 108, > 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 114, 103, > 32, 58, 32, 110, 44, 95, 97, 114, 103, 49, 44, 46, 46, 46, 44, 95, > 97, 114, 103, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 116, 104, 101, 32, 110, 45, 116, 104, 32, 97, 114, > 103, 117, 109, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 32, 108, 105, 115, 116, 46, 10, 97, 114, 103, 32, 58, 10, 45, 118, 32, > 45, 32, 36, 61, 97, 114, 103, 32, 45, 117, 32, 36, 123, 97, 114, 103, > 123, 49, 43, 40, 36, 49, 41, 125, 125, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 97, 116, 32, 58, 32, 95, 120, 44, 95, 121, > 44, 95, 122, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, > 117, 114, 110, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, 101, 100, 32, 112, 111, > 105, 110, 116, 32, 40, 120, 44, 121, 44, 122, 41, 32, 102, 114, 111, 109, > 32, 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, 32, 111, 102, 32, 116, > 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 97, 116, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 48, 125, 44, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, > 61, 48, 125, 10, 45, 118, 32, 45, 32, 45, 45, 122, 91, 45, 49, 93, > 32, 36, 123, 49, 45, 51, 125, 44, 36, 123, 49, 45, 51, 125, 32, 45, > 117, 32, 64, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 117, 116, 111, 99, 114, > 111, 112, 95, 99, 111, 111, 114, 100, 115, 32, 58, 32, 118, 97, 108, 117, > 101, 49, 44, 118, 97, 108, 117, 101, 50, 44, 46, 46, 46, 32, 124, 32, > 97, 117, 116, 111, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, > 32, 40, 120, 48, 44, 121, 48, 44, 122, 48, 44, 120, 49, 44, 121, 49, > 44, 122, 49, 41, 32, 111, 102, 32, 116, 104, 101, 32, 97, 117, 116, 111, > 99, 114, 111, 112, 32, 116, 104, 97, 116, 32, 99, 111, 117, 108, 100, 32, > 98, 101, 32, 112, 101, 114, 102, 111, 114, 109, 101, 100, 32, 111, 110, 32, > 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, 32, 111, 102, 32, 116, 104, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, 117, 116, 111, > 39, 10, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, 100, > 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 97, 117, > 116, 111, 125, 10, 45, 118, 32, 45, 10, 105, 115, 95, 97, 117, 116, 111, > 61, 123, 36, 49, 39, 61, 61, 39, 97, 117, 116, 111, 125, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, 10, > 118, 97, 108, 117, 101, 61, 123, 105, 40, 119, 45, 49, 44, 104, 45, 49, > 44, 100, 45, 49, 41, 125, 32, 45, 45, 61, 91, 45, 49, 93, 32, 123, > 49, 43, 36, 118, 97, 108, 117, 101, 125, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 95, 97, 117, 116, 111, 99, > 114, 111, 112, 36, 105, 115, 95, 97, 117, 116, 111, 91, 45, 49, 93, 32, > 36, 123, 49, 45, 45, 49, 125, 32, 45, 61, 91, 45, 49, 93, 32, 36, > 118, 97, 108, 117, 101, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 10, 120, 48, 61, 123, 36, 119, 45, 119, 125, 32, 121, > 48, 61, 123, 36, 104, 45, 104, 125, 32, 122, 48, 61, 123, 36, 100, 45, > 100, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 95, 97, 117, > 116, 111, 99, 114, 111, 112, 36, 105, 115, 95, 97, 117, 116, 111, 91, 45, > 49, 93, 32, 36, 123, 49, 45, 45, 49, 125, 10, 120, 49, 61, 123, 36, > 120, 48, 43, 119, 45, 49, 125, 32, 121, 49, 61, 123, 36, 121, 48, 43, > 104, 45, 49, 125, 32, 122, 49, 61, 123, 36, 122, 48, 43, 100, 45, 49, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 117, 32, 36, 120, 48, > 44, 36, 121, 48, 44, 36, 122, 48, 44, 36, 120, 49, 44, 36, 121, 49, > 44, 36, 122, 49, 10, 45, 118, 32, 43, 10, 95, 97, 117, 116, 111, 99, > 114, 111, 112, 48, 32, 58, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 36, 42, 10, 95, 97, 117, 116, 111, 99, 114, 111, 112, 49, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 42, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 10, 35, 64, 103, 109, 105, 99, 32, 97, 118, 101, 114, 97, > 103, 101, 95, 99, 111, 108, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 97, 118, 101, > 114, 97, 103, 101, 32, 99, 111, 108, 111, 114, 32, 111, 102, 32, 116, 104, > 101, 32, 108, 97, 116, 101, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 97, 118, 101, 114, 97, 103, 101, 95, 99, 111, 108, 111, 114, 32, 58, > 10, 45, 118, 32, 45, 10, 114, 101, 115, 61, 34, 34, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 115, 45, 49, 125, 32, 45, 115, 104, 91, 45, > 49, 93, 32, 123, 49, 43, 36, 62, 125, 44, 123, 49, 43, 36, 62, 125, > 32, 114, 101, 115, 61, 36, 114, 101, 115, 44, 123, 105, 97, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 117, 32, 123, 105, 97, 125, > 36, 114, 101, 115, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 97, 115, 101, 110, 97, 109, > 101, 32, 58, 32, 102, 105, 108, 101, 95, 112, 97, 116, 104, 44, 95, 118, > 97, 114, 105, 97, 98, 108, 101, 95, 110, 97, 109, 101, 95, 102, 111, 114, > 95, 102, 111, 108, 100, 101, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 98, 97, 115, 101, > 110, 97, 109, 101, 32, 111, 102, 32, 97, 32, 102, 105, 108, 101, 32, 112, > 97, 116, 104, 44, 32, 97, 110, 100, 32, 111, 112, 116, 46, 32, 105, 116, > 115, 32, 102, 111, 108, 100, 101, 114, 32, 108, 111, 99, 97, 116, 105, 111, > 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 87, 104, 101, 110, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 39, 118, 97, 114, 105, > 97, 98, 108, 101, 95, 110, 97, 109, 101, 95, 102, 111, 114, 95, 102, 111, > 108, 100, 101, 114, 39, 32, 109, 117, 115, 116, 32, 115, 116, 97, 114, 116, > 115, 32, 98, 121, 32, 97, 110, 32, 117, 110, 100, 101, 114, 115, 99, 111, > 114, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 103, 108, 111, > 98, 97, 108, 32, 118, 97, 114, 105, 97, 98, 108, 101, 32, 97, 99, 99, > 101, 115, 115, 105, 98, 108, 101, 32, 102, 114, 111, 109, 32, 99, 97, 108, > 108, 105, 110, 103, 32, 102, 117, 110, 99, 116, 105, 111, 110, 41, 46, 10, > 98, 97, 115, 101, 110, 97, 109, 101, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 117, 110, 117, 115, 101, 100, 125, 10, 45, 118, 32, > 45, 10, 45, 108, 91, 93, 32, 40, 123, 34, 39, 36, 49, 39, 34, 125, > 41, 32, 45, 114, 101, 112, 108, 97, 99, 101, 32, 57, 50, 44, 52, 55, > 32, 45, 115, 32, 43, 44, 52, 55, 10, 45, 105, 102, 32, 123, 105, 61, > 61, 52, 55, 125, 32, 45, 97, 32, 121, 32, 36, 50, 61, 64, 123, 45, > 49, 44, 116, 125, 32, 45, 117, 32, 34, 34, 10, 45, 101, 108, 105, 102, > 32, 123, 64, 35, 61, 61, 49, 125, 32, 45, 117, 32, 64, 123, 45, 49, > 44, 116, 125, 32, 36, 50, 61, 34, 34, 10, 45, 101, 108, 115, 101, 32, > 45, 97, 91, 94, 45, 49, 93, 32, 121, 32, 45, 117, 32, 64, 123, 45, > 49, 44, 116, 125, 32, 36, 50, 61, 64, 123, 45, 50, 44, 116, 125, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 32, 45, 101, 110, 100, 108, > 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 105, 110, > 32, 58, 32, 98, 105, 110, 97, 114, 121, 95, 105, 110, 116, 49, 44, 46, > 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 114, 105, 110, > 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 105, 110, 97, > 114, 121, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, > 32, 116, 104, 101, 105, 114, 32, 111, 99, 116, 97, 108, 44, 32, 100, 101, > 99, 105, 109, 97, 108, 44, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 97, 110, 100, 32, 115, 116, 114, 105, 110, 103, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 98, > 105, 110, 32, 58, 10, 45, 118, 32, 45, 32, 100, 101, 99, 61, 64, 123, > 45, 98, 105, 110, 50, 100, 101, 99, 92, 32, 36, 123, 94, 48, 125, 125, > 32, 45, 118, 32, 43, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 110, 118, 101, 114, 116, 32, 98, 105, 110, 97, 114, 121, 32, 105, 110, > 116, 101, 103, 101, 114, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 40, 36, 35, 62, 49, 41, 44, 34, 34, 44, 115, 125, 34, 32, 39, 36, > 123, 94, 48, 125, 39, 32, 116, 111, 32, 111, 99, 116, 97, 108, 32, 39, > 34, 64, 123, 45, 100, 101, 99, 50, 111, 99, 116, 92, 32, 36, 100, 101, > 99, 125, 34, 39, 44, 10, 100, 101, 99, 105, 109, 97, 108, 32, 39, 34, > 36, 100, 101, 99, 34, 39, 44, 32, 104, 101, 120, 97, 100, 101, 99, 105, > 109, 97, 108, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 104, 101, 120, > 92, 32, 36, 100, 101, 99, 125, 34, 39, 32, 97, 110, 100, 32, 115, 116, > 114, 105, 110, 103, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 115, 116, > 114, 92, 32, 36, 100, 101, 99, 125, 34, 39, 46, 34, 10, 35, 64, 103, > 109, 105, 99, 32, 98, 105, 110, 50, 100, 101, 99, 32, 58, 32, 98, 105, > 110, 97, 114, 121, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 105, 110, 97, 114, 121, 32, > 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, 116, 104, > 101, 105, 114, 32, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, 114, > 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 98, 105, 110, > 50, 100, 101, 99, 32, 58, 10, 45, 118, 32, 45, 32, 114, 101, 115, 61, > 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, 125, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, 114, 101, 115, 61, 36, > 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, 92, 32, 64, 123, 45, 97, > 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, 123, 94, 48, 125, 125, 125, > 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, 114, 101, 115, 32, 45, > 118, 32, 43, 10, 95, 98, 105, 110, 50, 100, 101, 99, 32, 58, 10, 40, > 123, 39, 64, 123, 45, 115, 116, 114, 117, 110, 99, 97, 115, 101, 92, 32, > 36, 49, 125, 39, 125, 41, 10, 105, 115, 95, 110, 101, 103, 97, 116, 105, > 118, 101, 61, 48, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, > 125, 61, 61, 52, 53, 125, 32, 45, 122, 91, 45, 49, 93, 32, 49, 44, > 49, 48, 48, 37, 32, 105, 115, 95, 110, 101, 103, 97, 116, 105, 118, 101, > 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 91, 45, 49, 93, > 32, 34, 105, 102, 40, 105, 62, 61, 52, 56, 32, 38, 38, 32, 105, 60, > 61, 52, 57, 44, 40, 105, 45, 52, 56, 41, 42, 50, 94, 40, 119, 45, > 49, 45, 120, 41, 44, 110, 97, 110, 41, 34, 10, 45, 117, 32, 123, 105, > 102, 40, 36, 105, 115, 95, 110, 101, 103, 97, 116, 105, 118, 101, 44, 45, > 49, 44, 49, 41, 42, 64, 123, 45, 49, 44, 43, 125, 125, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 99, 111, 109, 112, 114, 101, 115, 115, 95, 103, > 109, 105, 99, 32, 58, 10, 45, 101, 91, 93, 32, 34, 34, 32, 45, 118, > 32, 45, 10, 104, 101, 97, 100, 95, 115, 116, 100, 61, 123, 39, 34, 35, > 64, 103, 109, 105, 99, 34, 39, 125, 10, 45, 115, 32, 45, 44, 49, 48, > 32, 78, 61, 64, 35, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 60, 93, 10, 45, 105, 102, 32, 123, 33, 40, 36, > 62, 37, 49, 48, 48, 41, 125, 32, 45, 118, 32, 43, 32, 45, 101, 91, > 93, 32, 34, 92, 114, 32, 32, 80, 114, 111, 99, 101, 115, 115, 32, 58, > 32, 34, 123, 114, 111, 117, 110, 100, 40, 36, 62, 47, 36, 78, 42, 49, > 48, 48, 41, 125, 37, 32, 45, 118, 32, 45, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 35, 39, 125, 125, > 10, 104, 101, 97, 100, 61, 64, 123, 45, 49, 44, 48, 45, 123, 109, 105, > 110, 40, 53, 44, 104, 45, 49, 41, 125, 125, 10, 45, 105, 102, 32, 123, > 123, 36, 104, 101, 97, 100, 39, 33, 61, 39, 36, 104, 101, 97, 100, 95, > 115, 116, 100, 125, 34, 32, 124, 124, 32, 34, 40, 105, 91, 54, 93, 33, > 61, 123, 39, 34, 32, 34, 39, 125, 34, 32, 38, 38, 32, 34, 105, 91, > 54, 93, 33, 61, 123, 39, 58, 39, 125, 41, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 99, 111, 110, 116, 105, 110, 117, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 108, 91, 45, 49, > 93, 32, 45, 115, 32, 43, 44, 51, 50, 44, 51, 53, 32, 45, 105, 102, > 32, 123, 64, 35, 62, 50, 125, 32, 45, 107, 91, 48, 93, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, 108, 10, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 50, > 32, 45, 105, 102, 32, 123, 33, 119, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 99, 111, 110, 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 105, 91, 49, 45, 45, 50, 93, 32, 40, > 49, 48, 41, 32, 45, 97, 32, 121, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 92, 114, 32, 80, 114, 111, 99, 101, 115, 115, 32, 58, > 32, 49, 48, 48, 37, 34, 10, 99, 111, 109, 112, 114, 101, 115, 115, 95, > 103, 109, 105, 99, 95, 103, 105, 109, 112, 32, 58, 10, 45, 101, 91, 93, > 32, 34, 34, 32, 45, 118, 32, 45, 10, 104, 101, 97, 100, 95, 115, 116, > 100, 61, 123, 39, 34, 35, 64, 103, 105, 109, 112, 34, 39, 125, 10, 45, > 115, 32, 45, 44, 49, 48, 32, 78, 61, 64, 35, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 105, > 102, 32, 123, 33, 40, 36, 62, 37, 49, 48, 48, 41, 125, 32, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 32, 80, 114, 111, > 99, 101, 115, 115, 32, 58, 32, 34, 123, 114, 111, 117, 110, 100, 40, 36, > 62, 47, 36, 78, 42, 49, 48, 48, 41, 125, 37, 32, 45, 118, 32, 45, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 105, 61, 61, > 123, 39, 35, 39, 125, 125, 10, 104, 101, 97, 100, 61, 64, 123, 45, 49, > 44, 48, 45, 123, 109, 105, 110, 40, 53, 44, 104, 45, 49, 41, 125, 125, > 10, 45, 105, 102, 32, 123, 36, 104, 101, 97, 100, 39, 33, 61, 39, 36, > 104, 101, 97, 100, 95, 115, 116, 100, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 99, 111, 110, 116, 105, 110, 117, 101, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 108, 91, 45, 49, 93, 32, > 45, 115, 32, 43, 44, 51, 50, 44, 51, 53, 32, 45, 105, 102, 32, 123, > 64, 35, 62, 50, 125, 32, 45, 107, 91, 48, 93, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, 108, 10, 45, 97, > 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 50, 32, 45, > 105, 102, 32, 123, 33, 119, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 99, 111, 110, 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 105, 91, 49, 45, 45, 50, 93, 32, 40, 49, 48, > 41, 32, 45, 97, 32, 121, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, > 32, 34, 92, 114, 32, 80, 114, 111, 99, 101, 115, 115, 32, 58, 32, 49, > 48, 48, 37, 34, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, 99, 32, > 58, 32, 100, 101, 99, 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, > 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 114, 105, 110, > 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, 101, 99, 105, > 109, 97, 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, > 111, 32, 116, 104, 101, 105, 114, 32, 98, 105, 110, 97, 114, 121, 44, 32, > 111, 99, 116, 97, 108, 44, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 97, 110, 100, 32, 115, 116, 114, 105, 110, 103, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 100, > 101, 99, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, > 110, 118, 101, 114, 116, 32, 100, 101, 99, 105, 109, 97, 108, 32, 105, 110, > 116, 101, 103, 101, 114, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 40, 36, 35, 62, 49, 41, 44, 34, 34, 44, 115, 125, 34, 32, 39, 36, > 123, 94, 48, 125, 39, 32, 116, 111, 32, 98, 105, 110, 97, 114, 121, 32, > 39, 34, 64, 123, 45, 100, 101, 99, 50, 98, 105, 110, 92, 32, 36, 123, > 94, 48, 125, 125, 34, 39, 44, 10, 111, 99, 116, 97, 108, 32, 39, 34, > 64, 123, 45, 100, 101, 99, 50, 111, 99, 116, 92, 32, 36, 123, 94, 48, > 125, 125, 34, 39, 44, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, > 108, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 104, 101, 120, 92, 32, > 36, 123, 94, 48, 125, 125, 34, 39, 32, 97, 110, 100, 32, 115, 116, 114, > 105, 110, 103, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 115, 116, 114, > 92, 32, 36, 123, 94, 48, 125, 125, 34, 39, 46, 34, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 101, 99, 50, 115, 116, 114, 32, 58, 32, 100, 101, > 99, 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 112, 101, 99, 105, 102, 105, 97, 108, 32, 100, 101, 99, 105, 109, 97, > 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, > 105, 116, 115, 32, 115, 116, 114, 105, 110, 103, 32, 114, 101, 112, 114, 101, > 115, 101, 110, 116, 97, 116, 105, 111, 110, 46, 10, 100, 101, 99, 50, 115, > 116, 114, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 96, 36, > 123, 94, 48, 125, 96, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 100, 101, 99, 50, 98, 105, 110, 32, 58, 32, 100, 101, 99, > 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, 101, 99, 105, 109, 97, 108, > 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, 116, > 104, 101, 105, 114, 32, 98, 105, 110, 97, 114, 121, 32, 114, 101, 112, 114, > 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 100, 101, 99, > 50, 98, 105, 110, 32, 58, 10, 45, 118, 32, 45, 32, 114, 101, 115, 61, > 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, 125, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, 114, 101, 115, 61, 36, > 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, 92, 32, 64, 123, 45, 97, > 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, 123, 94, 48, 125, 125, 125, > 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, 114, 101, 115, 32, 45, > 118, 32, 43, 10, 95, 100, 101, 99, 50, 98, 105, 110, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 105, 115, 105, 110, 116, 40, 36, 49, 41, 10, > 114, 101, 115, 61, 34, 34, 32, 114, 61, 123, 97, 98, 115, 40, 36, 49, > 41, 125, 10, 45, 100, 111, 32, 114, 101, 115, 61, 123, 36, 114, 37, 50, > 125, 36, 114, 101, 115, 32, 114, 61, 123, 105, 110, 116, 40, 36, 114, 47, > 50, 41, 125, 32, 45, 119, 104, 105, 108, 101, 32, 36, 114, 10, 45, 117, > 32, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 40, 36, 49, 62, 61, > 48, 41, 44, 45, 44, 34, 34, 125, 36, 114, 101, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 101, 99, 50, 104, 101, 120, 32, 58, 32, 100, 101, > 99, 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, 101, 99, 105, 109, 97, > 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, > 116, 104, 101, 105, 114, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, > 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, > 115, 46, 10, 100, 101, 99, 50, 104, 101, 120, 32, 58, 10, 45, 118, 32, > 45, 32, 114, 101, 115, 61, 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, > 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, > 32, 114, 101, 115, 61, 36, 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, > 92, 32, 64, 123, 45, 97, 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, > 123, 94, 48, 125, 125, 125, 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, > 36, 114, 101, 115, 32, 45, 118, 32, 43, 10, 95, 100, 101, 99, 50, 104, > 101, 120, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 105, 115, 105, 110, > 116, 40, 36, 49, 41, 10, 114, 101, 115, 61, 34, 34, 32, 114, 61, 123, > 97, 98, 115, 40, 36, 49, 41, 125, 10, 45, 100, 111, 32, 114, 101, 115, > 61, 64, 123, 45, 95, 100, 101, 99, 50, 104, 101, 120, 95, 123, 36, 114, > 37, 49, 54, 125, 125, 36, 114, 101, 115, 32, 114, 61, 123, 105, 110, 116, > 40, 36, 114, 47, 49, 54, 41, 125, 32, 45, 119, 104, 105, 108, 101, 32, > 36, 114, 10, 45, 117, 32, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 40, 36, 49, 62, 61, 48, 41, 44, 45, 44, 34, 34, 125, 36, 114, 101, > 115, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 48, 32, 58, 32, 45, > 117, 32, 48, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 49, 32, 58, > 32, 45, 117, 32, 49, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 50, > 32, 58, 32, 45, 117, 32, 50, 10, 95, 100, 101, 99, 50, 104, 101, 120, > 95, 51, 32, 58, 32, 45, 117, 32, 51, 10, 95, 100, 101, 99, 50, 104, > 101, 120, 95, 52, 32, 58, 32, 45, 117, 32, 52, 10, 95, 100, 101, 99, > 50, 104, 101, 120, 95, 53, 32, 58, 32, 45, 117, 32, 53, 10, 95, 100, > 101, 99, 50, 104, 101, 120, 95, 54, 32, 58, 32, 45, 117, 32, 54, 10, > 95, 100, 101, 99, 50, 104, 101, 120, 95, 55, 32, 58, 32, 45, 117, 32, > 55, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 56, 32, 58, 32, 45, > 117, 32, 56, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 57, 32, 58, > 32, 45, 117, 32, 57, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 49, > 48, 32, 58, 32, 45, 117, 32, 97, 10, 95, 100, 101, 99, 50, 104, 101, > 120, 95, 49, 49, 32, 58, 32, 45, 117, 32, 98, 10, 95, 100, 101, 99, > 50, 104, 101, 120, 95, 49, 50, 32, 58, 32, 45, 117, 32, 99, 10, 95, > 100, 101, 99, 50, 104, 101, 120, 95, 49, 51, 32, 58, 32, 45, 117, 32, > 100, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 49, 52, 32, 58, 32, > 45, 117, 32, 101, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 49, 53, > 32, 58, 32, 45, 117, 32, 102, 10, 35, 64, 103, 109, 105, 99, 32, 100, > 101, 99, 50, 111, 99, 116, 32, 58, 32, 100, 101, 99, 105, 109, 97, 108, > 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 100, 101, 99, 105, 109, 97, 108, 32, 105, 110, 116, > 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 105, 114, > 32, 111, 99, 116, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, > 97, 116, 105, 111, 110, 115, 46, 10, 100, 101, 99, 50, 111, 99, 116, 32, > 58, 10, 45, 118, 32, 45, 32, 114, 101, 115, 61, 64, 123, 45, 95, 36, > 48, 92, 32, 36, 49, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 36, 35, 45, 49, 125, 32, 114, 101, 115, 61, 36, 114, 101, 115, 44, 64, > 123, 45, 95, 36, 48, 92, 32, 64, 123, 45, 97, 114, 103, 92, 32, 36, > 62, 43, 50, 44, 36, 123, 94, 48, 125, 125, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 117, 32, 36, 114, 101, 115, 32, 45, 118, 32, 43, 10, 95, > 100, 101, 99, 50, 111, 99, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 105, 115, 105, 110, 116, 40, 36, 49, 41, 10, 114, 101, 115, 61, 34, > 34, 32, 114, 61, 123, 97, 98, 115, 40, 36, 49, 41, 125, 10, 45, 100, > 111, 32, 114, 101, 115, 61, 123, 36, 114, 37, 56, 125, 36, 114, 101, 115, > 32, 114, 61, 123, 105, 110, 116, 40, 36, 114, 47, 56, 41, 125, 32, 45, > 119, 104, 105, 108, 101, 32, 36, 114, 10, 45, 117, 32, 64, 123, 45, 97, > 114, 103, 92, 32, 49, 43, 40, 36, 49, 62, 61, 48, 41, 44, 45, 44, > 34, 34, 125, 36, 114, 101, 115, 10, 35, 64, 103, 109, 105, 99, 32, 102, > 97, 99, 116, 32, 58, 32, 118, 97, 108, 117, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, > 102, 97, 99, 116, 111, 114, 105, 97, 108, 32, 111, 102, 32, 116, 104, 101, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, > 46, 10, 102, 97, 99, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 105, 115, 105, 110, 116, 40, 36, 49, 41, 10, 45, 118, 32, 45, 32, 114, > 101, 115, 61, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, > 114, 101, 115, 61, 123, 36, 114, 101, 115, 42, 40, 36, 62, 43, 49, 41, > 125, 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, 114, 101, 115, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 108, 101, > 95, 109, 118, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, 95, 115, > 114, 99, 44, 102, 105, 108, 101, 110, 97, 109, 101, 95, 100, 101, 115, 116, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 97, 109, 101, > 32, 111, 114, 32, 109, 111, 118, 101, 32, 97, 32, 102, 105, 108, 101, 32, > 102, 114, 111, 109, 32, 97, 32, 108, 111, 99, 97, 116, 105, 111, 110, 32, > 36, 49, 32, 116, 111, 32, 97, 110, 111, 116, 104, 101, 114, 32, 108, 111, > 99, 97, 116, 105, 111, 110, 32, 36, 50, 46, 10, 102, 105, 108, 101, 95, > 109, 118, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 77, 111, > 118, 101, 32, 102, 105, 108, 101, 32, 39, 36, 49, 39, 32, 116, 111, 32, > 108, 111, 99, 97, 116, 105, 111, 110, 32, 39, 36, 50, 39, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 119, > 105, 110, 100, 111, 119, 115, 125, 32, 45, 120, 32, 34, 109, 111, 118, 101, > 32, 34, 36, 49, 34, 32, 34, 36, 50, 32, 45, 101, 108, 115, 101, 32, > 45, 120, 32, 34, 109, 118, 32, 34, 36, 49, 34, 32, 34, 36, 50, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 105, 108, 101, 95, 114, 97, 110, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 97, 32, 114, > 97, 110, 100, 111, 109, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 102, > 111, 114, 32, 115, 116, 111, 114, 105, 110, 103, 32, 116, 101, 109, 112, 111, > 114, 97, 114, 121, 32, 100, 97, 116, 97, 46, 10, 102, 105, 108, 101, 95, > 114, 97, 110, 100, 32, 58, 10, 45, 118, 32, 45, 10, 45, 100, 111, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, > 95, 116, 109, 112, 125, 64, 123, 45, 102, 105, 108, 101, 95, 115, 108, 97, > 115, 104, 125, 103, 109, 105, 99, 64, 37, 123, 114, 111, 117, 110, 100, 40, > 63, 40, 48, 44, 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, > 40, 48, 44, 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, 40, > 48, 44, 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, > 44, 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, 44, > 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, 44, 57, > 41, 41, 125, 10, 45, 119, 104, 105, 108, 101, 32, 36, 102, 105, 108, 101, > 110, 97, 109, 101, 10, 45, 117, 32, 36, 102, 105, 108, 101, 110, 97, 109, > 101, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, > 108, 101, 95, 114, 109, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 108, 101, 116, 101, > 32, 97, 32, 102, 105, 108, 101, 46, 10, 102, 105, 108, 101, 95, 114, 109, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, > 118, 101, 32, 102, 105, 108, 101, 32, 39, 36, 49, 39, 46, 34, 10, 45, > 118, 32, 45, 10, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 119, 105, > 110, 100, 111, 119, 115, 125, 10, 49, 32, 45, 110, 109, 91, 45, 49, 93, > 32, 34, 36, 49, 34, 32, 100, 105, 114, 61, 64, 123, 45, 49, 44, 102, > 125, 32, 98, 97, 115, 101, 61, 64, 123, 45, 49, 44, 98, 125, 32, 101, > 120, 116, 61, 64, 123, 45, 49, 44, 120, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 99, 111, 109, 61, 34, 34, 10, 45, 105, 102, 32, 123, 110, > 97, 114, 103, 40, 36, 100, 105, 114, 41, 125, 32, 99, 111, 109, 61, 34, > 99, 100, 32, 92, 34, 34, 36, 100, 105, 114, 34, 92, 92, 92, 34, 32, > 38, 38, 32, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 110, 97, 114, 103, 40, 36, 101, 120, 116, 41, 125, 32, 99, 111, 109, > 61, 36, 123, 99, 111, 109, 125, 34, 100, 101, 108, 32, 92, 34, 34, 36, > 98, 97, 115, 101, 46, 36, 101, 120, 116, 34, 92, 34, 34, 32, 45, 101, > 108, 115, 101, 32, 99, 111, 109, 61, 36, 123, 99, 111, 109, 125, 34, 100, > 101, 108, 32, 92, 34, 34, 36, 98, 97, 115, 101, 34, 92, 34, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 120, 32, 36, 99, 111, 109, 10, 45, > 101, 108, 115, 101, 10, 45, 120, 32, 34, 114, 109, 32, 45, 102, 32, 92, > 34, 36, 49, 92, 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 108, 101, 95, 115, > 108, 97, 115, 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 39, 47, 39, 32, 111, 114, 32, 39, 92, 39, 32, > 97, 115, 32, 97, 32, 112, 97, 116, 104, 32, 115, 101, 112, 97, 114, 97, > 116, 111, 114, 32, 102, 111, 114, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 115, 46, 10, 102, 105, 108, 101, 95, 115, 108, 97, 115, 104, 32, 58, 10, > 45, 118, 32, 45, 32, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 119, > 105, 110, 100, 111, 119, 115, 125, 32, 45, 117, 32, 34, 92, 92, 34, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 34, 47, 34, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 102, 105, 108, 101, 110, > 97, 109, 101, 44, 95, 110, 117, 109, 98, 101, 114, 49, 44, 95, 110, 117, > 109, 98, 101, 114, 50, 44, 46, 46, 46, 44, 95, 110, 117, 109, 98, 101, > 114, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, > 114, 110, 32, 97, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 110, 117, > 109, 98, 101, 114, 101, 100, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 105, 110, 100, 105, 99, 101, 115, 46, 10, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 34, 36, 123, 49, 61, 100, 101, 102, 97, 117, 108, 116, 125, 34, 10, 45, > 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 35, 61, 61, 49, 125, 32, > 45, 117, 32, 34, 36, 49, 34, 10, 45, 101, 108, 115, 101, 10, 40, 36, > 123, 50, 45, 45, 49, 125, 41, 32, 45, 110, 97, 109, 101, 91, 45, 49, > 93, 32, 34, 36, 49, 34, 32, 45, 117, 32, 64, 123, 45, 49, 44, 102, > 125, 64, 123, 45, 49, 44, 98, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 119, 125, 10, 45, 117, 32, 64, 123, 125, 95, 123, 105, 110, 116, > 40, 105, 47, 49, 48, 48, 48, 48, 48, 41, 37, 49, 48, 125, 123, 105, > 110, 116, 40, 105, 47, 49, 48, 48, 48, 48, 41, 37, 49, 48, 125, 123, > 105, 110, 116, 40, 105, 47, 49, 48, 48, 48, 41, 37, 49, 48, 125, 123, > 105, 110, 116, 40, 105, 47, 49, 48, 48, 41, 37, 49, 48, 125, 123, 105, > 110, 116, 40, 105, 47, 49, 48, 41, 37, 49, 48, 125, 123, 105, 37, 49, > 48, 125, 10, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 45, 49, > 10, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, > 40, 123, 39, 64, 123, 45, 49, 44, 120, 125, 39, 125, 41, 125, 32, 45, > 117, 32, 64, 123, 125, 46, 64, 123, 45, 49, 44, 120, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 105, 116, 114, 97, 116, 105, 111, 95, 119, 104, 32, 58, 32, 109, 105, > 110, 95, 119, 105, 100, 116, 104, 44, 109, 105, 110, 95, 104, 101, 105, 103, > 104, 116, 44, 114, 97, 116, 105, 111, 95, 119, 104, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 97, 32, 50, 100, > 32, 115, 105, 122, 101, 32, 39, 119, 105, 100, 116, 104, 44, 104, 101, 105, > 103, 104, 116, 39, 32, 119, 104, 105, 99, 104, 32, 105, 115, 32, 98, 105, > 103, 103, 101, 114, 32, 116, 104, 97, 110, 32, 39, 109, 105, 110, 95, 119, > 105, 100, 116, 104, 44, 109, 105, 110, 95, 104, 101, 105, 103, 104, 116, 39, > 32, 97, 110, 100, 32, 104, 97, 115, 32, 116, 104, 101, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 119, 47, 104, 32, 114, 97, 116, 105, 111, > 46, 10, 102, 105, 116, 114, 97, 116, 105, 111, 95, 119, 104, 32, 58, 10, > 45, 118, 32, 45, 32, 45, 105, 102, 32, 123, 36, 51, 42, 36, 50, 62, > 36, 49, 125, 32, 45, 117, 32, 123, 105, 110, 116, 40, 36, 51, 42, 36, > 50, 41, 125, 44, 36, 50, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 36, 49, 44, 123, 105, 110, 116, 40, 36, 49, 47, 36, 51, 41, 125, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 105, 116, 115, 99, 114, 101, 101, 110, 32, 58, 32, 119, > 105, 100, 116, 104, 44, 104, 101, 105, 103, 104, 116, 44, 95, 100, 101, 112, > 116, 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, > 114, 110, 32, 116, 104, 101, 32, 39, 105, 100, 101, 97, 108, 39, 32, 115, > 105, 122, 101, 32, 87, 120, 72, 32, 102, 111, 114, 32, 97, 32, 119, 105, > 110, 100, 111, 119, 32, 105, 110, 116, 101, 110, 100, 101, 100, 32, 116, 111, > 32, 100, 105, 115, 112, 108, 97, 121, 32, 97, 110, 32, 105, 109, 97, 103, > 101, 32, 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, > 105, 122, 101, 32, 111, 110, 32, 115, 99, 114, 101, 101, 110, 46, 10, 102, > 105, 116, 115, 99, 114, 101, 101, 110, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 49, 62, 48, 32, 38, 38, 32, 36, 50, 62, 48, 32, > 38, 38, 32, 36, 123, 51, 61, 49, 125, 62, 48, 34, 10, 45, 118, 32, > 45, 10, 119, 61, 123, 105, 102, 40, 36, 51, 62, 49, 44, 36, 49, 43, > 36, 51, 44, 36, 49, 41, 125, 10, 104, 61, 123, 105, 102, 40, 36, 51, > 62, 49, 44, 36, 50, 43, 36, 51, 44, 36, 50, 41, 125, 10, 77, 119, > 61, 123, 105, 110, 116, 40, 48, 46, 56, 53, 42, 64, 123, 33, 44, 117, > 125, 41, 125, 10, 77, 104, 61, 123, 105, 110, 116, 40, 48, 46, 56, 53, > 42, 64, 123, 33, 44, 118, 125, 41, 125, 10, 45, 105, 102, 32, 123, 36, > 119, 60, 49, 50, 56, 125, 32, 104, 61, 123, 105, 110, 116, 40, 36, 104, > 42, 49, 50, 56, 47, 36, 119, 41, 125, 32, 119, 61, 49, 50, 56, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 104, 60, 49, > 50, 56, 125, 32, 119, 61, 123, 105, 110, 116, 40, 36, 119, 42, 49, 50, > 56, 47, 36, 104, 41, 125, 32, 104, 61, 49, 50, 56, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 119, 62, 36, 77, 119, 125, > 32, 104, 61, 123, 109, 97, 120, 40, 49, 44, 105, 110, 116, 40, 36, 104, > 42, 36, 77, 119, 47, 36, 119, 41, 41, 125, 32, 119, 61, 36, 77, 119, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 104, 62, > 36, 77, 104, 125, 32, 119, 61, 123, 109, 97, 120, 40, 49, 44, 105, 110, > 116, 40, 36, 119, 42, 36, 77, 104, 47, 36, 104, 41, 41, 125, 32, 104, > 61, 36, 77, 119, 32, 45, 101, 110, 100, 105, 102, 10, 119, 61, 123, 109, > 97, 120, 40, 36, 119, 44, 49, 50, 56, 41, 125, 10, 104, 61, 123, 109, > 97, 120, 40, 36, 104, 44, 49, 50, 56, 41, 125, 10, 45, 117, 32, 36, > 119, 44, 36, 104, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 103, 99, 100, 32, 58, 32, 97, 44, 98, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 71, > 67, 68, 32, 40, 103, 114, 101, 97, 116, 101, 115, 116, 32, 99, 111, 109, > 109, 111, 110, 32, 100, 105, 118, 105, 115, 111, 114, 41, 32, 98, 101, 116, > 119, 101, 101, 110, 32, 97, 32, 97, 110, 100, 32, 98, 46, 10, 103, 99, > 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, > 116, 40, 36, 49, 41, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, > 50, 41, 32, 38, 38, 32, 36, 49, 42, 36, 50, 33, 61, 48, 34, 10, > 45, 118, 32, 45, 32, 45, 95, 103, 99, 100, 32, 123, 109, 97, 120, 40, > 97, 98, 115, 40, 36, 49, 41, 44, 97, 98, 115, 40, 36, 50, 41, 41, > 125, 44, 123, 109, 105, 110, 40, 97, 98, 115, 40, 36, 49, 41, 44, 97, > 98, 115, 40, 36, 50, 41, 41, 125, 32, 45, 118, 32, 43, 10, 95, 103, > 99, 100, 32, 58, 10, 114, 61, 123, 36, 49, 37, 36, 50, 125, 32, 45, > 105, 102, 32, 36, 114, 32, 45, 117, 32, 64, 123, 45, 95, 103, 99, 100, > 92, 32, 36, 50, 44, 36, 114, 125, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 36, 50, 32, 45, 101, 110, 100, 105, 102, 10, 35, 64, 103, 109, > 105, 99, 32, 104, 101, 120, 32, 58, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 80, 114, 105, 110, 116, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, > 32, 116, 104, 101, 105, 114, 32, 98, 105, 110, 97, 114, 121, 44, 32, 111, > 99, 116, 97, 108, 44, 32, 100, 101, 99, 105, 109, 97, 108, 32, 97, 110, > 100, 32, 115, 116, 114, 105, 110, 103, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 104, 101, 120, 32, 58, 10, > 45, 118, 32, 45, 32, 100, 101, 99, 61, 64, 123, 45, 104, 101, 120, 50, > 100, 101, 99, 92, 32, 36, 123, 94, 48, 125, 125, 32, 45, 118, 32, 43, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, > 116, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 105, 110, > 116, 101, 103, 101, 114, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 40, 36, 35, 62, 49, 41, 44, 115, 44, 34, 34, 125, 34, 32, 39, 36, > 123, 94, 48, 125, 39, 32, 116, 111, 32, 98, 105, 110, 97, 114, 121, 32, > 39, 34, 64, 123, 45, 100, 101, 99, 50, 98, 105, 110, 92, 32, 36, 100, > 101, 99, 125, 34, 39, 44, 10, 111, 99, 116, 97, 108, 32, 39, 34, 64, > 123, 45, 100, 101, 99, 50, 111, 99, 116, 92, 32, 36, 100, 101, 99, 125, > 34, 39, 44, 32, 100, 101, 99, 105, 109, 97, 108, 32, 39, 34, 36, 100, > 101, 99, 34, 39, 32, 97, 110, 100, 32, 115, 116, 114, 105, 110, 103, 32, > 39, 34, 64, 123, 45, 100, 101, 99, 50, 115, 116, 114, 92, 32, 36, 100, > 101, 99, 125, 34, 39, 46, 34, 10, 35, 64, 103, 109, 105, 99, 32, 104, > 101, 120, 50, 100, 101, 99, 32, 58, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, > 116, 111, 32, 116, 104, 101, 105, 114, 32, 100, 101, 99, 105, 109, 97, 108, > 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, > 46, 10, 104, 101, 120, 50, 100, 101, 99, 32, 58, 10, 45, 118, 32, 45, > 32, 114, 101, 115, 61, 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, 125, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, > 114, 101, 115, 61, 36, 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, 92, > 32, 64, 123, 45, 97, 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, 123, > 94, 48, 125, 125, 125, 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, > 114, 101, 115, 32, 45, 118, 32, 43, 10, 95, 104, 101, 120, 50, 100, 101, > 99, 32, 58, 10, 40, 123, 39, 64, 123, 45, 115, 116, 114, 117, 110, 99, > 97, 115, 101, 92, 32, 36, 49, 125, 39, 125, 41, 10, 105, 115, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 61, 48, 10, 45, 105, 102, 32, 123, 64, > 123, 45, 49, 44, 48, 125, 61, 61, 52, 53, 125, 32, 45, 122, 91, 45, > 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, 105, 115, 95, 110, 101, 103, > 97, 116, 105, 118, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 102, 91, 45, 49, 93, 32, 34, 105, 102, 40, 105, 62, 61, 52, 56, 32, > 38, 38, 32, 105, 60, 61, 53, 55, 44, 105, 45, 52, 56, 44, 105, 102, > 40, 105, 62, 61, 57, 55, 32, 38, 38, 32, 105, 60, 61, 49, 48, 50, > 44, 105, 45, 56, 55, 44, 110, 97, 110, 41, 41, 42, 49, 54, 94, 40, > 119, 45, 49, 45, 120, 41, 34, 10, 45, 117, 32, 123, 105, 102, 40, 36, > 105, 115, 95, 110, 101, 103, 97, 116, 105, 118, 101, 44, 45, 49, 44, 49, > 41, 42, 64, 123, 45, 49, 44, 43, 125, 125, 10, 45, 114, 109, 91, 45, > 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 104, 101, 120, 50, 115, 116, > 114, 32, 58, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 95, > 115, 116, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 115, 116, > 114, 105, 110, 103, 32, 105, 110, 116, 111, 32, 97, 32, 115, 116, 114, 105, > 110, 103, 46, 10, 104, 101, 120, 50, 115, 116, 114, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 34, 34, 125, 10, 45, 118, 32, 45, > 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, 34, 36, 49, 34, > 41, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 40, 123, 39, 36, 42, 39, 125, 41, 10, 45, 105, 102, 32, 123, > 119, 60, 50, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 117, 32, > 34, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 91, 45, 49, 93, 32, 50, 44, 123, 119, 47, 50, 125, > 44, 49, 44, 49, 44, 45, 49, 32, 45, 102, 91, 45, 49, 93, 32, 39, > 105, 102, 40, 105, 62, 61, 57, 55, 44, 105, 45, 56, 55, 44, 105, 45, > 52, 56, 41, 39, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, > 120, 61, 61, 48, 44, 105, 42, 49, 54, 43, 105, 40, 120, 43, 49, 41, > 44, 48, 41, 39, 32, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, > 93, 32, 48, 10, 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 109, 103, 50, 115, 116, 114, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 99, > 111, 110, 116, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 108, 97, > 116, 101, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 97, 115, 32, 97, 32, > 115, 112, 101, 99, 105, 97, 108, 32, 71, 39, 77, 73, 67, 32, 105, 110, > 112, 117, 116, 32, 115, 116, 114, 105, 110, 103, 46, 10, 105, 109, 103, 50, > 115, 116, 114, 32, 58, 10, 45, 118, 32, 45, 10, 45, 117, 32, 34, 40, > 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 115, 125, 32, 99, 61, > 36, 62, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 100, 125, 32, 122, > 61, 36, 62, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, > 121, 61, 36, 62, 10, 45, 45, 122, 91, 45, 49, 93, 32, 48, 44, 36, > 121, 44, 36, 122, 44, 36, 99, 44, 49, 48, 48, 37, 44, 36, 121, 44, > 36, 122, 44, 36, 99, 10, 45, 117, 32, 64, 123, 125, 64, 45, 49, 10, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, 121, 33, > 61, 104, 45, 49, 125, 32, 45, 117, 32, 64, 123, 125, 59, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 32, 64, 123, 125, 10, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 123, 36, 122, 33, 61, 100, 45, 49, 125, 32, > 45, 117, 32, 64, 123, 125, 47, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 99, 33, 61, 115, 45, > 49, 125, 32, 45, 117, 32, 64, 123, 125, 94, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 10, 45, 117, 32, 64, 123, 125, 34, 41, > 34, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, > 103, 50, 116, 101, 120, 116, 32, 58, 32, 95, 108, 105, 110, 101, 95, 115, > 101, 112, 97, 114, 97, 116, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 101, 120, 116, 32, 99, 111, > 110, 116, 97, 105, 110, 101, 100, 32, 105, 110, 32, 97, 32, 109, 117, 108, > 116, 105, 45, 108, 105, 110, 101, 32, 105, 109, 97, 103, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 108, 105, 110, 101, 95, 115, 101, 112, > 97, 114, 97, 116, 111, 114, 61, 32, 39, 46, 10, 105, 109, 103, 50, 116, > 101, 120, 116, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, > 61, 32, 125, 34, 10, 45, 118, 32, 45, 32, 45, 45, 108, 32, 45, 115, > 32, 121, 32, 45, 115, 32, 45, 44, 48, 32, 45, 121, 32, 120, 32, 45, > 105, 102, 32, 123, 64, 35, 62, 49, 125, 32, 45, 105, 91, 49, 45, 45, > 50, 93, 32, 40, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 97, 32, 120, 32, 45, 117, 32, 64, 123, 48, > 44, 116, 125, 32, 45, 114, 109, 32, 45, 101, 110, 100, 108, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 103, 56, 50, 104, > 101, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, > 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 56, 98, 105, > 116, 115, 45, 118, 97, 108, 117, 101, 100, 32, 118, 101, 99, 116, 111, 114, > 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 105, 114, 32, 104, 101, 120, > 97, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 32, 40, 97, 115, 99, 105, 105, 45, > 101, 110, 99, 111, 100, 101, 100, 41, 46, 10, 105, 109, 103, 56, 50, 104, > 101, 120, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, > 110, 118, 101, 114, 116, 32, 56, 98, 105, 116, 115, 45, 118, 97, 108, 117, > 101, 100, 32, 118, 101, 99, 116, 111, 114, 36, 63, 32, 105, 110, 116, 111, > 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, > 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 32, 40, 97, 115, > 99, 105, 105, 45, 101, 110, 99, 111, 100, 101, 100, 41, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 109, 111, 100, 32, 50, 53, 54, 32, 45, 121, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 102, 91, 36, > 62, 93, 32, 39, 118, 61, 105, 110, 116, 40, 105, 41, 38, 49, 53, 59, > 118, 43, 105, 102, 40, 118, 60, 49, 48, 44, 52, 56, 44, 56, 55, 41, > 39, 10, 45, 102, 91, 36, 62, 93, 32, 39, 118, 61, 105, 110, 116, 40, > 105, 41, 62, 62, 52, 59, 118, 43, 105, 102, 40, 118, 60, 49, 48, 44, > 52, 56, 44, 56, 55, 41, 39, 10, 45, 97, 91, 36, 62, 44, 45, 49, > 93, 32, 120, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 104, 101, 120, 50, 105, 109, 103, 56, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, > 105, 111, 110, 115, 32, 40, 97, 115, 99, 105, 105, 45, 101, 110, 99, 111, > 100, 101, 100, 41, 32, 105, 110, 116, 111, 32, 56, 98, 105, 116, 115, 45, > 118, 97, 108, 117, 101, 100, 32, 118, 101, 99, 116, 111, 114, 115, 46, 10, > 104, 101, 120, 50, 105, 109, 103, 56, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 104, 101, 120, 97, > 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 97, 116, 105, 111, 110, 36, 63, 32, 40, 97, 115, 99, 105, 105, 45, > 101, 110, 99, 111, 100, 101, 100, 41, 32, 105, 110, 116, 111, 32, 56, 98, > 105, 116, 115, 45, 118, 97, 108, 117, 101, 100, 32, 118, 101, 99, 116, 111, > 114, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 10, 45, 115, 91, 45, 49, 93, 32, 120, 44, 50, 32, > 45, 102, 91, 45, 50, 44, 45, 49, 93, 32, 39, 105, 102, 40, 105, 62, > 61, 57, 55, 44, 105, 45, 56, 55, 44, 105, 45, 52, 56, 41, 39, 32, > 45, 42, 91, 45, 50, 93, 32, 49, 54, 32, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 105, 115, 95, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 49, 32, 105, 102, 32, 97, 108, 108, 32, 111, > 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 32, 97, 114, 101, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 115, 44, 32, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, > 46, 10, 105, 115, 95, 51, 100, 32, 58, 10, 45, 118, 32, 45, 32, 45, > 117, 32, 49, 32, 45, 108, 32, 45, 99, 104, 101, 99, 107, 51, 100, 32, > 49, 32, 45, 111, 110, 102, 97, 105, 108, 32, 45, 117, 32, 48, 32, 45, > 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 58, 32, 115, 116, > 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 49, 32, 105, 102, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 101, 110, 100, 115, 32, > 119, 105, 116, 104, 32, 97, 32, 39, 37, 39, 44, 32, 48, 32, 111, 116, > 104, 101, 114, 119, 105, 115, 101, 46, 10, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 97, > 114, 103, 40, 45, 49, 44, 123, 39, 34, 36, 49, 34, 39, 125, 41, 61, > 61, 51, 55, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 49, 32, 105, 102, > 32, 99, 117, 114, 114, 101, 110, 116, 32, 99, 111, 109, 112, 117, 116, 101, > 114, 32, 79, 83, 32, 105, 115, 32, 87, 105, 110, 100, 111, 119, 115, 44, > 32, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 46, 10, 105, 115, > 95, 119, 105, 110, 100, 111, 119, 115, 32, 58, 10, 45, 118, 32, 45, 32, > 45, 117, 32, 123, 110, 97, 114, 103, 40, 36, 79, 83, 41, 61, 61, 49, > 34, 32, 38, 38, 32, 34, 110, 97, 114, 103, 40, 36, 87, 73, 78, 68, > 73, 82, 41, 61, 61, 49, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 109, 97, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 77, 65, 68, 32, > 40, 77, 97, 120, 105, 109, 117, 109, 32, 65, 98, 115, 111, 108, 117, 116, > 101, 32, 68, 101, 118, 105, 97, 116, 105, 111, 110, 41, 32, 111, 102, 32, > 116, 104, 101, 32, 108, 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 84, 104, 101, 32, 77, 65, 68, 32, 105, 115, 32, 100, 101, 102, > 105, 110, 101, 100, 32, 97, 115, 32, 77, 65, 68, 32, 61, 32, 109, 101, > 100, 95, 105, 124, 120, 95, 105, 45, 109, 101, 100, 95, 106, 40, 120, 95, > 106, 41, 124, 10, 109, 97, 100, 32, 58, 10, 45, 118, 32, 45, 32, 45, > 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 109, 101, 100, 91, 45, 49, > 93, 125, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 109, 101, 100, > 91, 45, 49, 93, 32, 45, 117, 32, 123, 49, 46, 52, 56, 50, 54, 42, > 64, 123, 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 95, 119, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, > 104, 101, 32, 109, 97, 120, 105, 109, 97, 108, 32, 119, 105, 100, 116, 104, > 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 97, 120, 95, 119, 32, > 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 97, 114, 103, 40, 49, > 44, 64, 123, 45, 95, 109, 97, 120, 95, 119, 104, 100, 115, 92, 32, 52, > 125, 41, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 97, 120, 95, 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 97, > 108, 32, 104, 101, 105, 103, 104, 116, 32, 98, 101, 116, 119, 101, 101, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 109, 97, 120, 95, 104, 32, 58, 10, 45, 118, 32, 45, 32, 45, > 117, 32, 123, 97, 114, 103, 40, 50, 44, 64, 123, 45, 95, 109, 97, 120, > 95, 119, 104, 100, 115, 92, 32, 52, 125, 41, 125, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 95, 100, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, > 101, 32, 109, 97, 120, 105, 109, 97, 108, 32, 100, 101, 112, 116, 104, 32, > 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 97, 120, 95, 100, 32, 58, > 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 97, 114, 103, 40, 51, 44, > 64, 123, 45, 95, 109, 97, 120, 95, 119, 104, 100, 115, 92, 32, 52, 125, > 41, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 97, 120, 95, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 97, 108, > 32, 115, 112, 101, 99, 116, 114, 117, 109, 32, 98, 101, 116, 119, 101, 101, > 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 109, 97, 120, 95, 115, 32, 58, 10, 45, 118, 32, 45, 32, > 45, 117, 32, 123, 97, 114, 103, 40, 52, 44, 64, 123, 45, 95, 109, 97, > 120, 95, 119, 104, 100, 115, 92, 32, 52, 125, 41, 125, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 95, 119, 104, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, > 116, 104, 101, 32, 109, 97, 120, 105, 109, 97, 108, 32, 119, 120, 104, 32, > 115, 105, 122, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 97, 120, 95, 119, 104, 32, > 58, 10, 45, 118, 32, 45, 32, 45, 95, 109, 97, 120, 95, 119, 104, 100, > 115, 32, 50, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 97, 120, 95, 119, 104, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 97, 120, 105, > 109, 97, 108, 32, 119, 120, 104, 120, 100, 32, 115, 105, 122, 101, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 109, 97, 120, 95, 119, 104, 100, 32, 58, 10, 45, 118, 32, > 45, 32, 45, 95, 109, 97, 120, 95, 119, 104, 100, 115, 32, 51, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 95, 119, > 104, 100, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, > 117, 114, 110, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 97, 108, 32, > 119, 120, 104, 120, 100, 120, 115, 32, 115, 105, 122, 101, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 109, 97, 120, 95, 119, 104, 100, 115, 32, 58, 10, 45, 118, 32, 45, > 32, 45, 95, 109, 97, 120, 95, 119, 104, 100, 115, 32, 52, 32, 45, 118, > 32, 43, 10, 95, 109, 97, 120, 95, 119, 104, 100, 115, 32, 58, 10, 119, > 61, 48, 32, 104, 61, 48, 32, 100, 61, 48, 32, 115, 61, 48, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 119, 61, 123, 109, 97, 120, > 40, 36, 119, 44, 119, 41, 125, 10, 104, 61, 123, 109, 97, 120, 40, 36, > 104, 44, 104, 41, 125, 10, 100, 61, 123, 109, 97, 120, 40, 36, 100, 44, > 100, 41, 125, 10, 115, 61, 123, 109, 97, 120, 40, 36, 115, 44, 115, 41, > 125, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 123, 36, 49, 62, 61, 52, 125, 32, 45, 117, > 32, 36, 119, 44, 36, 104, 44, 36, 100, 44, 36, 115, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 117, 32, 36, 119, > 44, 36, 104, 44, 36, 100, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 50, 125, 32, 45, 117, 32, 36, 119, 44, 36, 104, 10, 45, 101, > 108, 115, 101, 32, 45, 117, 32, 36, 119, 10, 45, 101, 110, 100, 105, 102, > 10, 35, 64, 103, 109, 105, 99, 32, 109, 101, 100, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, > 109, 101, 100, 105, 97, 110, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, > 116, 104, 101, 32, 108, 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 46, 10, 109, 101, 100, 32, 58, 10, 45, > 118, 32, 45, 32, 45, 45, 115, 111, 114, 116, 91, 45, 49, 93, 32, 45, > 117, 32, 64, 123, 45, 49, 44, 123, 119, 42, 104, 42, 100, 42, 115, 47, > 50, 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, 95, 109, 101, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, > 110, 32, 116, 104, 101, 32, 109, 101, 100, 105, 97, 110, 32, 99, 111, 108, > 111, 114, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 108, 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 46, 10, 99, 111, 108, 111, 114, 95, 109, 101, 100, 32, 58, > 10, 45, 118, 32, 45, 32, 45, 117, 32, 34, 34, 32, 115, 61, 34, 34, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 115, 125, 32, 45, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 36, 62, 32, 45, > 117, 32, 64, 123, 125, 36, 115, 64, 123, 45, 109, 101, 100, 91, 45, 49, > 93, 125, 32, 115, 61, 44, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 109, 105, 110, 95, 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, > 97, 108, 32, 119, 105, 100, 116, 104, 32, 98, 101, 116, 119, 101, 101, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 109, 105, 110, 95, 119, 32, 58, 10, 45, 118, 32, 45, 32, 45, > 117, 32, 123, 97, 114, 103, 40, 49, 44, 64, 123, 45, 95, 109, 105, 110, > 95, 119, 104, 100, 115, 92, 32, 52, 125, 41, 125, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, 104, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, > 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 104, 101, 105, 103, 104, 116, > 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 105, 110, 95, 104, 32, > 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 97, 114, 103, 40, 50, > 44, 64, 123, 45, 95, 109, 105, 110, 95, 119, 104, 100, 115, 92, 32, 52, > 125, 41, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 105, 110, 95, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, > 108, 32, 100, 101, 112, 116, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 109, 105, 110, 95, 100, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, > 32, 123, 97, 114, 103, 40, 51, 44, 64, 123, 45, 95, 109, 105, 110, 95, > 119, 104, 100, 115, 92, 32, 52, 125, 41, 125, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, > 32, 109, 105, 110, 105, 109, 97, 108, 32, 115, 32, 115, 105, 122, 101, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 109, 105, 110, 95, 115, 32, 58, 10, 45, 118, 32, 45, > 32, 45, 95, 109, 105, 110, 95, 115, 32, 64, 123, 45, 95, 109, 105, 110, > 95, 119, 104, 100, 115, 92, 32, 52, 125, 32, 45, 118, 32, 43, 10, 95, > 109, 105, 110, 95, 115, 32, 58, 10, 45, 117, 32, 36, 52, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 105, 110, 95, 119, 104, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, > 109, 105, 110, 105, 109, 97, 108, 32, 119, 120, 104, 32, 115, 105, 122, 101, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 109, 105, 110, 95, 119, 104, 32, 58, 10, 45, 118, > 32, 45, 32, 45, 95, 109, 105, 110, 95, 119, 104, 100, 115, 32, 50, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, > 119, 104, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, > 117, 114, 110, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, > 119, 120, 104, 120, 100, 32, 115, 105, 122, 101, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, > 105, 110, 95, 119, 104, 100, 32, 58, 10, 45, 118, 32, 45, 32, 45, 95, > 109, 105, 110, 95, 119, 104, 100, 115, 32, 51, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, 119, 104, 100, 115, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, > 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 119, 120, 104, 120, > 100, 120, 115, 32, 115, 105, 122, 101, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 105, 110, > 95, 119, 104, 100, 115, 32, 58, 10, 45, 118, 32, 45, 32, 45, 95, 109, > 105, 110, 95, 119, 104, 100, 115, 32, 52, 32, 45, 118, 32, 43, 10, 95, > 109, 105, 110, 95, 119, 104, 100, 115, 32, 58, 10, 119, 61, 123, 119, 125, > 32, 104, 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, 32, 115, 61, 123, > 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 119, 61, > 123, 109, 105, 110, 40, 36, 119, 44, 119, 41, 125, 10, 104, 61, 123, 109, > 105, 110, 40, 36, 104, 44, 104, 41, 125, 10, 100, 61, 123, 109, 105, 110, > 40, 36, 100, 44, 100, 41, 125, 10, 115, 61, 123, 109, 105, 110, 40, 36, > 115, 44, 115, 41, 125, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, > 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 49, 62, 61, 52, > 125, 32, 45, 117, 32, 36, 119, 44, 36, 104, 44, 36, 100, 44, 36, 115, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, > 117, 32, 36, 119, 44, 36, 104, 44, 36, 100, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 117, 32, 36, 119, 44, 36, > 104, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, 36, 119, 10, 45, 101, > 110, 100, 105, 102, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 95, 102, 105, 108, 101, 110, 97, 109, 101, 32, 58, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 97, 32, 34, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 100, 34, 32, 118, 101, 114, 115, 105, 111, 110, > 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 102, 105, 108, 101, 110, 97, 109, 101, 44, 32, 119, 105, 116, 104, > 111, 117, 116, 32, 115, 112, 97, 99, 101, 115, 32, 97, 110, 100, 32, 99, > 97, 112, 105, 116, 97, 108, 32, 108, 101, 116, 116, 101, 114, 115, 46, 10, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 102, 105, 108, 101, 110, 97, > 109, 101, 32, 58, 10, 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 49, > 34, 39, 125, 41, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, > 105, 62, 61, 54, 53, 38, 38, 105, 60, 61, 57, 48, 44, 105, 43, 51, > 50, 44, 105, 102, 40, 105, 61, 61, 51, 50, 44, 57, 53, 44, 105, 41, > 41, 39, 32, 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 111, 99, 116, 32, 58, 32, 111, 99, 116, 97, 108, 95, 105, 110, > 116, 49, 44, 46, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 80, 114, 105, 110, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 111, 99, 116, 97, 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, > 110, 116, 111, 32, 116, 104, 101, 105, 114, 32, 98, 105, 110, 97, 114, 121, > 44, 32, 100, 101, 99, 105, 109, 97, 108, 44, 32, 104, 101, 120, 97, 100, > 101, 99, 105, 109, 97, 108, 32, 97, 110, 100, 32, 115, 116, 114, 105, 110, > 103, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, > 115, 46, 10, 111, 99, 116, 32, 58, 10, 45, 118, 32, 45, 32, 100, 101, > 99, 61, 64, 123, 45, 111, 99, 116, 50, 100, 101, 99, 92, 32, 36, 123, > 94, 48, 125, 125, 32, 45, 118, 32, 43, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 111, 99, 116, 97, 108, > 32, 105, 110, 116, 101, 103, 101, 114, 34, 64, 123, 45, 97, 114, 103, 92, > 32, 49, 43, 40, 36, 35, 62, 49, 41, 44, 34, 34, 44, 115, 125, 34, > 32, 39, 36, 123, 94, 48, 125, 39, 32, 116, 111, 32, 98, 105, 110, 97, > 114, 121, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 98, 105, 110, 92, > 32, 36, 100, 101, 99, 125, 34, 39, 44, 32, 100, 101, 99, 105, 109, 97, > 108, 32, 39, 34, 36, 100, 101, 99, 34, 39, 44, 10, 104, 101, 120, 97, > 100, 101, 99, 105, 109, 97, 108, 32, 39, 34, 64, 123, 45, 100, 101, 99, > 50, 104, 101, 120, 92, 32, 36, 100, 101, 99, 125, 34, 39, 32, 97, 110, > 100, 32, 115, 116, 114, 105, 110, 103, 32, 39, 34, 64, 123, 45, 100, 101, > 99, 50, 115, 116, 114, 92, 32, 36, 100, 101, 99, 125, 34, 39, 46, 34, > 10, 35, 64, 103, 109, 105, 99, 32, 111, 99, 116, 50, 100, 101, 99, 32, > 58, 32, 111, 99, 116, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, > 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 111, 99, 116, 97, > 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, > 116, 104, 101, 105, 114, 32, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 111, > 99, 116, 50, 100, 101, 99, 32, 58, 10, 45, 118, 32, 45, 32, 114, 101, > 115, 61, 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, 114, 101, 115, > 61, 36, 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, 92, 32, 64, 123, > 45, 97, 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, 123, 94, 48, 125, > 125, 125, 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, 114, 101, 115, > 32, 45, 118, 32, 43, 10, 95, 111, 99, 116, 50, 100, 101, 99, 32, 58, > 10, 40, 123, 39, 64, 123, 45, 115, 116, 114, 117, 110, 99, 97, 115, 101, > 92, 32, 36, 49, 125, 39, 125, 41, 10, 105, 115, 95, 110, 101, 103, 97, > 116, 105, 118, 101, 61, 48, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, > 44, 48, 125, 61, 61, 52, 53, 125, 32, 45, 122, 91, 45, 49, 93, 32, > 49, 44, 49, 48, 48, 37, 32, 105, 115, 95, 110, 101, 103, 97, 116, 105, > 118, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 91, 45, > 49, 93, 32, 34, 105, 102, 40, 105, 62, 61, 52, 56, 32, 38, 38, 32, > 105, 60, 61, 53, 53, 44, 40, 105, 45, 52, 56, 41, 42, 56, 94, 40, > 119, 45, 49, 45, 120, 41, 44, 110, 97, 110, 41, 34, 10, 45, 117, 32, > 123, 105, 102, 40, 36, 105, 115, 95, 110, 101, 103, 97, 116, 105, 118, 101, > 44, 45, 49, 44, 49, 41, 42, 64, 123, 45, 49, 44, 43, 125, 125, 10, > 45, 114, 109, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 112, > 97, 100, 105, 110, 116, 32, 58, 32, 110, 117, 109, 98, 101, 114, 44, 95, > 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 116, 117, 114, 110, 32, 97, 32, 105, 110, 116, 101, 103, 101, 114, > 32, 119, 105, 116, 104, 32, 39, 115, 105, 122, 101, 39, 32, 100, 105, 103, > 105, 116, 115, 32, 40, 101, 118, 101, 110, 116, 117, 97, 108, 108, 121, 32, > 108, 101, 102, 116, 45, 112, 97, 100, 100, 101, 100, 32, 119, 105, 116, 104, > 32, 39, 48, 39, 41, 46, 10, 112, 97, 100, 105, 110, 116, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 52, 125, 10, 45, 118, 32, > 45, 32, 45, 117, 32, 34, 34, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 50, 32, 45, 117, 32, 64, 123, 125, 123, 105, 110, 116, 40, 36, 49, > 47, 49, 48, 94, 36, 60, 41, 37, 49, 48, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 97, > 116, 104, 95, 103, 105, 109, 112, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 116, 117, 114, 110, 32, 97, 32, 112, 97, 116, 104, 32, 116, > 111, 32, 115, 116, 111, 114, 101, 32, 71, 73, 77, 80, 32, 99, 111, 110, > 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 32, 102, 105, 108, 101, 115, > 32, 102, 111, 114, 32, 111, 110, 101, 32, 117, 115, 101, 114, 32, 40, 119, > 104, 111, 115, 101, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 79, 83, > 45, 100, 101, 112, 101, 110, 100, 101, 110, 116, 41, 46, 10, 112, 97, 116, > 104, 95, 103, 105, 109, 112, 32, 58, 10, 45, 105, 102, 32, 123, 110, 97, > 114, 103, 40, 123, 39, 36, 123, 71, 73, 77, 80, 50, 95, 68, 73, 82, > 69, 67, 84, 79, 82, 89, 125, 39, 125, 41, 125, 32, 45, 117, 32, 36, > 123, 71, 73, 77, 80, 50, 95, 68, 73, 82, 69, 67, 84, 79, 82, 89, > 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, 36, 123, 85, > 83, 69, 82, 80, 82, 79, 70, 73, 76, 69, 125, 39, 125, 41, 125, 32, > 45, 117, 32, 36, 123, 85, 83, 69, 82, 80, 82, 79, 70, 73, 76, 69, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, > 36, 123, 72, 79, 77, 69, 125, 39, 125, 41, 125, 32, 45, 117, 32, 36, > 123, 72, 79, 77, 69, 125, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, > 125, 47, 46, 103, 105, 109, 112, 45, 50, 46, 56, 47, 112, 108, 117, 103, > 105, 110, 114, 99, 32, 45, 117, 32, 64, 123, 125, 47, 46, 103, 105, 109, > 112, 45, 50, 46, 56, 10, 45, 101, 108, 105, 102, 32, 64, 123, 125, 47, > 46, 103, 105, 109, 112, 45, 50, 46, 54, 47, 112, 108, 117, 103, 105, 110, > 114, 99, 32, 45, 117, 32, 64, 123, 125, 47, 46, 103, 105, 109, 112, 45, > 50, 46, 54, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, 64, 123, 45, > 112, 97, 116, 104, 95, 116, 109, 112, 125, 10, 45, 101, 110, 100, 105, 102, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 97, 116, > 104, 95, 116, 109, 112, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 97, 32, 112, 97, 116, 104, 32, 116, 111, 32, > 115, 116, 111, 114, 101, 32, 116, 101, 109, 112, 111, 114, 97, 114, 121, 32, > 102, 105, 108, 101, 115, 32, 40, 119, 104, 111, 115, 101, 32, 118, 97, 108, > 117, 101, 32, 105, 115, 32, 79, 83, 45, 100, 101, 112, 101, 110, 100, 101, > 110, 116, 41, 46, 10, 112, 97, 116, 104, 95, 116, 109, 112, 32, 58, 10, > 45, 118, 32, 45, 32, 45, 117, 32, 34, 34, 10, 45, 105, 102, 32, 123, > 110, 97, 114, 103, 40, 123, 39, 36, 123, 84, 77, 80, 125, 39, 125, 41, > 125, 32, 45, 117, 32, 36, 123, 84, 77, 80, 125, 10, 45, 101, 108, 105, > 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, 36, 123, 84, 69, 77, 80, > 125, 39, 125, 41, 125, 32, 45, 117, 32, 36, 123, 84, 69, 77, 80, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, 36, > 123, 84, 77, 80, 68, 73, 82, 125, 39, 125, 41, 125, 32, 45, 117, 32, > 36, 123, 84, 77, 80, 68, 73, 82, 125, 10, 45, 101, 108, 105, 102, 32, > 123, 110, 97, 114, 103, 40, 123, 39, 36, 123, 72, 79, 77, 69, 125, 39, > 125, 41, 125, 32, 45, 117, 32, 34, 47, 116, 109, 112, 34, 10, 45, 101, > 108, 115, 101, 32, 45, 117, 32, 34, 34, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 97, 116, > 104, 95, 117, 115, 101, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 116, 117, 114, 110, 32, 97, 32, 112, 97, 116, 104, 32, 116, 111, > 32, 115, 116, 111, 114, 101, 32, 112, 101, 114, 115, 105, 115, 116, 101, 110, > 116, 32, 99, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 32, > 102, 105, 108, 101, 115, 32, 102, 111, 114, 32, 111, 110, 101, 32, 117, 115, > 101, 114, 32, 40, 119, 104, 111, 115, 101, 32, 118, 97, 108, 117, 101, 32, > 105, 115, 32, 79, 83, 45, 100, 101, 112, 101, 110, 100, 101, 110, 116, 41, > 46, 10, 112, 97, 116, 104, 95, 117, 115, 101, 114, 32, 58, 10, 45, 118, > 32, 45, 32, 45, 117, 32, 34, 34, 10, 45, 105, 102, 32, 123, 110, 97, > 114, 103, 40, 123, 39, 36, 123, 65, 80, 80, 68, 65, 84, 65, 125, 39, > 125, 41, 125, 32, 45, 117, 32, 36, 123, 65, 80, 80, 68, 65, 84, 65, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, > 36, 123, 72, 79, 77, 69, 125, 39, 125, 41, 125, 32, 45, 117, 32, 36, > 123, 72, 79, 77, 69, 125, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 113, 117, 111, 116, 101, 32, 58, 32, 115, 116, > 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 97, 32, 34, 113, 117, 111, 116, 105, 102, 105, 101, > 100, 34, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, 116, 104, > 101, 32, 115, 116, 114, 105, 110, 103, 46, 10, 113, 117, 111, 116, 101, 32, > 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 34, 36, 42, 34, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 103, 105, 111, > 110, 95, 102, 101, 97, 116, 117, 114, 101, 32, 58, 32, 114, 101, 103, 105, > 111, 110, 95, 108, 97, 98, 101, 108, 44, 102, 101, 97, 116, 117, 114, 101, > 44, 95, 100, 101, 102, 97, 117, 108, 116, 95, 118, 97, 108, 117, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, > 102, 101, 97, 116, 117, 114, 101, 32, 102, 111, 114, 32, 97, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 114, 101, 103, 105, 111, 110, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 105, 115, 32, 102, 117, > 110, 99, 116, 105, 111, 110, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, > 116, 119, 111, 32, 105, 109, 97, 103, 101, 115, 32, 91, 105, 109, 103, 44, > 114, 101, 103, 105, 111, 110, 95, 108, 97, 98, 101, 108, 93, 32, 105, 110, > 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 105, 111, 110, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 114, 103, 117, 109, 101, 110, > 116, 32, 39, 102, 101, 97, 116, 117, 114, 101, 39, 32, 105, 115, 32, 97, > 32, 115, 116, 114, 105, 110, 103, 32, 116, 104, 97, 116, 32, 99, 111, 114, > 114, 101, 115, 112, 111, 110, 100, 115, 32, 116, 111, 32, 116, 104, 101, 32, > 119, 97, 121, 32, 116, 104, 101, 32, 102, 101, 97, 116, 117, 114, 101, 32, > 119, 111, 117, 108, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 98, > 101, 32, 97, 115, 107, 101, 100, 32, 102, 111, 114, 32, 116, 104, 101, 32, > 101, 110, 116, 105, 114, 101, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 100, 101, 102, 97, 117, 108, 116, 95, 118, > 97, 108, 117, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 113, 117, 97, 110, 116, > 105, 122, 101, 91, 45, 49, 93, 32, 50, 32, 45, 108, 97, 98, 101, 108, > 91, 45, 49, 93, 32, 48, 44, 49, 32, 109, 101, 97, 110, 61, 64, 123, > 34, 45, 114, 101, 103, 105, 111, 110, 95, 102, 101, 97, 116, 117, 114, 101, > 91, 48, 44, 49, 93, 32, 49, 48, 44, 92, 34, 123, 105, 97, 125, 92, > 34, 34, 125, 32, 115, 117, 109, 61, 64, 123, 34, 45, 114, 101, 103, 105, > 111, 110, 95, 102, 101, 97, 116, 117, 114, 101, 91, 48, 44, 49, 93, 32, > 49, 48, 44, 92, 34, 64, 123, 45, 49, 44, 43, 125, 92, 34, 34, 125, > 10, 114, 101, 103, 105, 111, 110, 95, 102, 101, 97, 116, 117, 114, 101, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 51, 61, 48, 125, 34, > 10, 45, 118, 32, 45, 10, 115, 61, 64, 123, 45, 50, 44, 115, 125, 32, > 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 32, 45, 61, 61, 91, 45, 49, 93, 32, 36, 49, 32, 45, 94, 91, 45, > 49, 93, 32, 45, 49, 32, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, > 114, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, > 93, 32, 91, 45, 51, 93, 10, 45, 108, 91, 45, 49, 93, 10, 45, 115, > 91, 45, 49, 93, 32, 45, 44, 105, 110, 102, 32, 45, 97, 32, 121, 10, > 45, 105, 102, 32, 64, 35, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, > 123, 104, 47, 36, 115, 125, 44, 49, 44, 36, 115, 44, 45, 49, 32, 45, > 117, 32, 36, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 36, 51, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 108, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 101, 115, 101, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 115, 101, 116, 32, 103, 108, 111, 98, 97, 108, 32, 112, 97, > 114, 97, 109, 101, 116, 101, 114, 115, 32, 111, 102, 32, 116, 104, 101, 32, > 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 32, 101, 110, 118, 105, > 114, 111, 110, 109, 101, 110, 116, 46, 10, 114, 101, 115, 101, 116, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 115, 101, 116, 32, > 103, 108, 111, 98, 97, 108, 32, 112, 97, 114, 97, 109, 101, 116, 101, 114, > 115, 32, 111, 102, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 112, 114, > 101, 116, 101, 114, 32, 101, 110, 118, 105, 114, 111, 110, 109, 101, 110, 116, > 46, 34, 10, 45, 118, 32, 45, 49, 32, 45, 100, 98, 51, 100, 32, 45, > 98, 51, 100, 32, 45, 109, 51, 100, 32, 45, 109, 100, 51, 100, 32, 45, > 102, 51, 100, 32, 45, 108, 51, 100, 32, 45, 115, 108, 51, 100, 32, 45, > 115, 115, 51, 100, 32, 45, 118, 10, 35, 64, 103, 109, 105, 99, 32, 82, > 71, 66, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, > 114, 110, 32, 97, 32, 114, 97, 110, 100, 111, 109, 32, 105, 110, 116, 45, > 118, 97, 108, 117, 101, 100, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 46, 10, 82, 71, 66, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 82, 71, 66, 65, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, > 32, 97, 32, 114, 97, 110, 100, 111, 109, 32, 105, 110, 116, 45, 118, 97, > 108, 117, 101, 100, 32, 82, 71, 66, 65, 32, 99, 111, 108, 111, 114, 46, > 10, 82, 71, 66, 65, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, 32, > 58, 32, 115, 116, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 80, 114, 105, 110, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 115, 116, 114, 105, 110, 103, 32, 105, 110, 116, 111, 32, 105, 116, > 115, 32, 98, 105, 110, 97, 114, 121, 44, 32, 111, 99, 116, 97, 108, 44, > 32, 100, 101, 99, 105, 109, 97, 108, 32, 97, 110, 100, 32, 104, 101, 120, > 97, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 115, 116, 114, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 49, 10, 45, 118, 32, 45, 32, 100, 101, > 99, 61, 123, 39, 36, 42, 39, 125, 32, 45, 118, 32, 43, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 116, 114, 105, 110, 103, 32, 39, 36, 42, 39, 32, 116, 111, 32, 98, 105, > 110, 97, 114, 121, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 98, 105, > 110, 92, 32, 36, 100, 101, 99, 125, 34, 39, 44, 32, 111, 99, 116, 97, > 108, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 111, 99, 116, 92, 32, > 36, 100, 101, 99, 125, 34, 39, 44, 32, 100, 101, 99, 105, 109, 97, 108, > 32, 39, 34, 36, 100, 101, 99, 34, 39, 32, 97, 110, 100, 10, 104, 101, > 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 39, 34, 64, 123, 45, 100, > 101, 99, 50, 104, 101, 120, 92, 32, 36, 100, 101, 99, 125, 34, 39, 46, > 34, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, 50, 104, 101, 120, > 32, 58, 32, 115, 116, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 105, 110, 116, 111, > 32, 97, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 111, 102, 32, 104, > 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 118, 97, 108, 117, 101, > 115, 46, 10, 115, 116, 114, 50, 104, 101, 120, 32, 58, 10, 45, 118, 32, > 45, 32, 40, 123, 39, 34, 36, 42, 34, 39, 125, 41, 32, 45, 114, 111, > 119, 115, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 102, 91, 45, 49, > 93, 32, 39, 105, 102, 40, 121, 61, 61, 48, 44, 105, 110, 116, 40, 105, > 47, 49, 54, 41, 44, 105, 40, 120, 44, 121, 45, 49, 41, 37, 49, 54, > 41, 39, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 60, > 61, 57, 44, 52, 56, 43, 105, 44, 56, 55, 43, 105, 41, 39, 32, 45, > 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 117, > 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, > 101, 115, 99, 32, 58, 32, 118, 97, 108, 49, 44, 46, 46, 46, 44, 118, > 97, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, > 117, 114, 110, 32, 101, 115, 99, 97, 112, 101, 100, 32, 115, 116, 114, 105, > 110, 103, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 97, 115, 99, 105, 105, 32, 99, 111, 100, 101, 115, 46, 10, 115, > 116, 114, 101, 115, 99, 32, 58, 10, 45, 118, 32, 45, 32, 40, 36, 42, > 41, 32, 45, 99, 91, 45, 49, 93, 32, 51, 50, 44, 50, 53, 53, 32, > 45, 121, 91, 45, 49, 93, 32, 91, 45, 49, 93, 10, 45, 102, 91, 45, > 50, 93, 32, 39, 105, 102, 40, 105, 61, 61, 51, 50, 124, 124, 105, 61, > 61, 51, 52, 124, 124, 105, 61, 61, 51, 54, 124, 124, 105, 61, 61, 52, > 52, 124, 124, 105, 61, 61, 54, 52, 124, 124, 105, 61, 61, 57, 50, 124, > 124, 105, 61, 61, 49, 50, 51, 124, 124, 105, 61, 61, 49, 50, 53, 44, > 57, 50, 44, 45, 49, 41, 39, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 49, 93, > 32, 45, 49, 32, 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 116, 114, 99, 97, 116, 32, 58, 32, 115, 116, 114, 105, > 110, 103, 49, 44, 115, 116, 114, 105, 110, 103, 50, 44, 46, 46, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, > 116, 104, 101, 32, 99, 111, 110, 99, 97, 116, 101, 110, 97, 116, 105, 111, > 110, 32, 111, 102, 32, 97, 108, 108, 32, 115, 116, 114, 105, 110, 103, 115, > 32, 112, 97, 115, 115, 101, 100, 32, 97, 115, 32, 97, 114, 103, 117, 109, > 101, 110, 116, 115, 46, 10, 115, 116, 114, 99, 97, 116, 32, 58, 10, 45, > 118, 32, 45, 32, 36, 61, 115, 32, 114, 101, 115, 61, 34, 36, 49, 34, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, > 114, 101, 115, 61, 36, 114, 101, 115, 36, 123, 115, 123, 36, 62, 43, 50, > 125, 125, 32, 45, 100, 111, 110, 101, 10, 45, 117, 32, 36, 114, 101, 115, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, > 99, 109, 112, 32, 58, 32, 115, 116, 114, 105, 110, 103, 49, 44, 115, 116, > 114, 105, 110, 103, 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 49, 32, 105, 102, 32, 116, 104, 101, 32, 116, > 119, 111, 32, 115, 116, 114, 105, 110, 103, 115, 32, 97, 114, 101, 32, 101, > 113, 117, 97, 108, 44, 32, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, > 101, 46, 10, 115, 116, 114, 99, 109, 112, 32, 58, 10, 45, 118, 32, 45, > 32, 40, 48, 44, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, 40, 123, > 119, 125, 44, 123, 39, 34, 36, 50, 34, 39, 125, 41, 32, 45, 61, 91, > 45, 50, 93, 32, 123, 119, 125, 32, 45, 45, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 117, 32, 123, 33, > 64, 123, 45, 49, 44, 43, 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, > 108, 101, 110, 32, 58, 32, 115, 116, 114, 105, 110, 103, 49, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, > 101, 32, 108, 101, 110, 103, 116, 104, 32, 111, 102, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 46, 10, 115, 116, 114, 108, 101, 110, 32, 58, 10, > 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, > 45, 117, 32, 123, 119, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, 114, 101, > 112, 108, 97, 99, 101, 32, 58, 32, 115, 116, 114, 105, 110, 103, 44, 115, > 101, 97, 114, 99, 104, 44, 114, 101, 112, 108, 97, 99, 101, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 101, 97, 114, 99, 104, 32, 97, 110, > 100, 32, 114, 101, 112, 108, 97, 99, 101, 32, 115, 117, 98, 115, 116, 114, > 105, 110, 103, 115, 32, 105, 110, 32, 97, 110, 32, 105, 110, 112, 117, 116, > 32, 115, 116, 114, 105, 110, 103, 46, 10, 115, 116, 114, 114, 101, 112, 108, > 97, 99, 101, 32, 58, 10, 45, 118, 32, 45, 10, 108, 115, 61, 64, 123, > 45, 115, 116, 114, 108, 101, 110, 92, 32, 34, 36, 50, 34, 125, 10, 108, > 114, 61, 123, 64, 123, 45, 115, 116, 114, 108, 101, 110, 92, 32, 34, 36, > 51, 34, 125, 45, 49, 125, 10, 45, 108, 91, 93, 32, 40, 123, 39, 34, > 36, 49, 34, 39, 125, 41, 32, 45, 115, 32, 43, 44, 123, 39, 34, 36, > 50, 34, 39, 125, 32, 45, 115, 32, 121, 44, 45, 36, 108, 115, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 64, > 123, 36, 62, 44, 116, 125, 39, 61, 61, 39, 34, 36, 50, 34, 125, 32, > 45, 114, 111, 119, 115, 91, 36, 62, 93, 32, 48, 44, 36, 108, 114, 32, > 45, 102, 91, 36, 62, 93, 32, 123, 39, 34, 36, 51, 34, 39, 125, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, > 121, 32, 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 32, 45, 101, 110, 100, 108, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 116, 114, 117, 110, 99, 97, 115, 101, 32, 58, 32, 115, > 116, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 97, 32, 108, 111, 119, 101, 114, 45, 99, 97, > 115, 101, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, 116, 104, > 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, > 110, 103, 46, 10, 115, 116, 114, 117, 110, 99, 97, 115, 101, 32, 58, 10, > 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 42, 34, 39, 125, 41, 32, > 45, 43, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 62, 61, 54, 53, > 38, 38, 105, 60, 61, 57, 48, 44, 51, 50, 44, 48, 41, 39, 32, 45, > 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, > 114, 118, 101, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, > 32, 118, 101, 114, 115, 105, 111, 110, 32, 110, 117, 109, 98, 101, 114, 32, > 111, 102, 32, 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 105, 110, 116, > 101, 114, 112, 114, 101, 116, 101, 114, 44, 32, 97, 115, 32, 97, 32, 115, > 116, 114, 105, 110, 103, 46, 10, 115, 116, 114, 118, 101, 114, 32, 58, 10, > 45, 118, 32, 45, 32, 40, 123, 39, 64, 46, 39, 125, 41, 32, 45, 114, > 91, 45, 49, 93, 32, 55, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, > 102, 40, 120, 37, 50, 44, 123, 39, 46, 39, 125, 44, 105, 41, 39, 32, > 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, > 105, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 105, 116, > 105, 97, 108, 105, 122, 101, 32, 116, 105, 99, 45, 116, 111, 99, 32, 116, > 105, 109, 101, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 85, > 115, 101, 32, 105, 116, 32, 105, 110, 32, 99, 111, 110, 106, 117, 110, 99, > 116, 105, 111, 110, 32, 119, 105, 116, 104, 32, 39, 45, 116, 111, 99, 39, > 46, 10, 116, 105, 99, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 73, 110, 105, 116, 105, 97, 108, 105, 122, 101, 32, 116, 105, 109, 101, > 114, 46, 34, 10, 45, 118, 32, 45, 32, 45, 105, 102, 32, 123, 33, 110, > 97, 114, 103, 40, 36, 95, 95, 116, 105, 99, 112, 111, 115, 41, 125, 32, > 95, 95, 116, 105, 99, 112, 111, 115, 61, 48, 32, 45, 101, 110, 100, 105, > 102, 32, 95, 95, 116, 105, 99, 36, 95, 95, 116, 105, 99, 112, 111, 115, > 61, 64, 124, 32, 95, 95, 116, 105, 99, 112, 111, 115, 61, 123, 36, 95, > 95, 116, 105, 99, 112, 111, 115, 43, 49, 125, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 111, 99, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, 121, 32, 101, 108, 97, 112, > 115, 101, 100, 32, 116, 105, 109, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 116, 105, 99, 45, 116, 111, 99, 32, 116, 105, 109, 101, 114, 32, 115, 105, > 110, 99, 101, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 99, 97, 108, > 108, 32, 116, 111, 32, 39, 45, 116, 105, 99, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 85, 115, 101, 32, 105, 116, 32, 105, 110, 32, > 99, 111, 110, 106, 117, 110, 99, 116, 105, 111, 110, 32, 119, 105, 116, 104, > 32, 39, 45, 116, 105, 99, 39, 46, 10, 116, 111, 99, 32, 58, 10, 45, > 118, 32, 45, 32, 95, 95, 116, 105, 99, 112, 111, 115, 61, 123, 36, 95, > 95, 116, 105, 99, 112, 111, 115, 45, 49, 125, 32, 45, 118, 32, 43, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 108, 97, 112, 115, 101, 100, > 32, 116, 105, 109, 101, 32, 58, 32, 34, 123, 95, 64, 124, 45, 36, 123, > 95, 95, 116, 105, 99, 36, 95, 95, 116, 105, 99, 112, 111, 115, 125, 125, > 34, 32, 115, 34, 46, 10, 35, 64, 103, 109, 105, 99, 32, 118, 97, 114, > 105, 97, 110, 99, 101, 95, 110, 111, 105, 115, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, > 101, 115, 116, 105, 109, 97, 116, 101, 100, 32, 110, 111, 105, 115, 101, 32, > 118, 97, 114, 105, 97, 110, 99, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 108, 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 46, 10, 118, 97, 114, 105, 97, 110, 99, 101, 95, 110, 111, > 105, 115, 101, 32, 58, 10, 45, 118, 32, 45, 32, 45, 45, 108, 97, 112, > 108, 97, 99, 105, 97, 110, 91, 45, 49, 93, 32, 45, 117, 32, 123, 64, > 123, 45, 109, 97, 100, 91, 45, 49, 93, 125, 47, 115, 113, 114, 116, 40, > 105, 102, 40, 100, 61, 61, 49, 44, 50, 48, 44, 52, 50, 41, 41, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 103, 105, > 109, 112, 95, 102, 105, 108, 116, 101, 114, 95, 115, 111, 117, 114, 99, 101, > 115, 32, 58, 10, 40, 123, 39, 103, 109, 105, 99, 39, 125, 41, 10, 40, > 123, 39, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, > 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, 117, 112, > 100, 97, 116, 101, 64, 46, 46, 103, 109, 105, 99, 39, 125, 44, 49, 41, > 10, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, > 118, 101, 114, 108, 97, 112, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, > 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, > 32, 34, 36, 49, 34, 44, 36, 51, 44, 123, 105, 102, 40, 36, 50, 44, > 50, 94, 40, 36, 50, 45, 49, 41, 44, 48, 41, 125, 10, 117, 112, 100, > 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 64, 46, 125, 44, 36, 123, > 50, 61, 49, 125, 10, 45, 118, 32, 45, 10, 45, 95, 117, 112, 100, 97, > 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, > 101, 32, 34, 47, 65, 114, 116, 105, 115, 116, 105, 99, 47, 80, 97, 115, > 116, 101, 108, 108, 126, 97, 114, 116, 34, 44, 34, 47, 84, 101, 115, 116, > 105, 110, 103, 47, 78, 97, 103, 103, 111, 98, 111, 116, 34, 10, 45, 95, > 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, > 95, 109, 111, 118, 101, 32, 34, 47, 65, 114, 116, 105, 115, 116, 105, 99, > 47, 83, 105, 109, 112, 108, 101, 126, 110, 111, 105, 115, 101, 126, 99, 97, > 110, 118, 97, 115, 34, 44, 34, 47, 80, 97, 116, 116, 101, 114, 110, 115, > 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, > 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, 84, 101, 115, 116, > 105, 110, 103, 47, 74, 38, 35, 50, 51, 51, 59, 74, 38, 35, 50, 51, > 51, 59, 47, 82, 97, 121, 115, 34, 44, 34, 47, 80, 97, 116, 116, 101, > 114, 110, 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, > 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, 84, > 101, 115, 116, 105, 110, 103, 47, 73, 97, 105, 110, 126, 102, 101, 114, 103, > 117, 115, 115, 111, 110, 47, 72, 97, 108, 102, 116, 111, 110, 101, 126, 115, > 104, 97, 112, 101, 115, 34, 44, 34, 47, 80, 97, 116, 116, 101, 114, 110, > 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, > 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, 84, 101, 115, > 116, 105, 110, 103, 47, 73, 97, 105, 110, 126, 102, 101, 114, 103, 117, 115, > 115, 111, 110, 47, 83, 105, 109, 112, 108, 101, 126, 108, 111, 99, 97, 108, > 126, 99, 111, 110, 116, 114, 97, 115, 116, 34, 44, 34, 47, 68, 101, 116, > 97, 105, 108, 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, > 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, > 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, 99, 111, > 100, 101, 114, 47, 65, 117, 114, 111, 114, 97, 34, 44, 34, 47, 65, 114, > 116, 105, 115, 116, 105, 99, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, > 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, > 34, 47, 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, > 99, 111, 100, 101, 114, 47, 68, 101, 115, 112, 101, 99, 107, 108, 101, 34, > 44, 34, 47, 82, 101, 112, 97, 105, 114, 34, 10, 45, 95, 117, 112, 100, > 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, > 118, 101, 32, 34, 47, 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, > 97, 103, 101, 99, 111, 100, 101, 114, 47, 72, 83, 76, 126, 97, 100, 106, > 117, 115, 116, 109, 101, 110, 116, 34, 44, 34, 47, 67, 111, 108, 111, 114, > 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, > 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, 84, 101, 115, > 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, 99, 111, 100, 101, 114, > 47, 72, 83, 86, 126, 115, 101, 108, 101, 99, 116, 34, 44, 34, 47, 67, > 111, 108, 111, 114, 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, > 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, > 47, 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, 99, > 111, 100, 101, 114, 47, 83, 116, 101, 114, 101, 111, 126, 105, 109, 97, 103, > 101, 34, 44, 34, 47, 83, 116, 101, 114, 101, 111, 115, 99, 111, 112, 105, > 99, 126, 51, 100, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, > 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, > 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, 99, 111, > 100, 101, 114, 47, 85, 110, 100, 111, 126, 97, 110, 97, 103, 108, 121, 112, > 104, 34, 44, 34, 47, 83, 116, 101, 114, 101, 111, 115, 99, 111, 112, 105, > 99, 126, 51, 100, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, > 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, > 84, 101, 115, 116, 105, 110, 103, 47, 78, 97, 103, 103, 111, 98, 111, 116, > 47, 66, 108, 111, 99, 107, 105, 115, 109, 34, 44, 34, 47, 65, 114, 116, > 105, 115, 116, 105, 99, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, > 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, > 47, 84, 101, 115, 116, 105, 110, 103, 47, 83, 97, 109, 106, 47, 67, 104, > 97, 108, 107, 126, 105, 116, 126, 117, 112, 34, 44, 34, 47, 65, 114, 116, > 105, 115, 116, 105, 99, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, > 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, > 47, 84, 101, 115, 116, 105, 110, 103, 47, 83, 97, 109, 106, 47, 68, 101, > 110, 105, 109, 126, 116, 101, 120, 116, 117, 114, 101, 34, 44, 34, 47, 80, > 97, 116, 116, 101, 114, 110, 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, > 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, > 32, 34, 47, 84, 101, 115, 116, 105, 110, 103, 47, 90, 111, 110, 100, 101, > 114, 114, 47, 83, 112, 105, 114, 97, 108, 34, 44, 34, 47, 82, 101, 110, > 100, 101, 114, 105, 110, 103, 34, 10, 45, 109, 32, 34, 112, 97, 114, 101, > 110, 116, 32, 58, 32, 45, 108, 91, 93, 32, 40, 123, 39, 36, 34, 34, > 49, 39, 125, 41, 32, 45, 115, 32, 45, 44, 123, 39, 47, 39, 125, 32, > 45, 105, 102, 32, 64, 35, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 105, 91, 48, 45, 45, 49, 93, 32, 40, > 52, 55, 41, 32, 45, 97, 32, 121, 32, 45, 117, 32, 64, 123, 48, 44, > 116, 125, 32, 45, 114, 109, 32, 45, 101, 110, 100, 108, 34, 10, 45, 109, > 32, 34, 95, 109, 97, 120, 32, 58, 32, 40, 123, 39, 92, 34, 36, 34, > 34, 49, 92, 34, 39, 125, 41, 32, 40, 123, 39, 92, 34, 36, 34, 34, > 50, 92, 34, 39, 125, 41, 32, 45, 102, 91, 45, 50, 44, 45, 49, 93, > 32, 39, 105, 102, 40, 105, 62, 61, 57, 55, 38, 38, 105, 60, 61, 49, > 50, 50, 44, 105, 45, 51, 50, 44, 105, 41, 39, 32, 45, 114, 91, 45, > 50, 44, 45, 49, 93, 32, 123, 109, 97, 120, 40, 119, 44, 64, 123, 45, > 50, 44, 119, 125, 41, 125, 44, 49, 44, 49, 44, 49, 44, 48, 32, 45, > 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 91, 45, 49, 93, 32, 48, 32, 34, 92, 10, 34, 45, 117, 32, > 123, 105, 62, 48, 125, 32, 45, 114, 109, 91, 45, 49, 93, 34, 10, 45, > 109, 32, 34, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, 58, 32, 34, > 92, 10, 34, 95, 110, 98, 95, 115, 111, 117, 114, 99, 101, 115, 61, 123, > 36, 95, 110, 98, 95, 115, 111, 117, 114, 99, 101, 115, 43, 49, 125, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 92, 34, 45, 98, 97, > 115, 101, 110, 97, 109, 101, 32, 36, 34, 34, 49, 92, 34, 125, 32, 34, > 92, 10, 34, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 92, 34, 32, > 32, 92, 34, 36, 95, 110, 98, 95, 115, 111, 117, 114, 99, 101, 115, 92, > 34, 46, 32, 92, 34, 36, 102, 105, 108, 101, 110, 97, 109, 101, 92, 34, > 32, 32, 92, 34, 32, 45, 118, 32, 45, 32, 34, 92, 10, 34, 45, 108, > 91, 93, 32, 34, 92, 10, 34, 32, 32, 45, 105, 32, 114, 97, 119, 58, > 36, 34, 34, 49, 44, 99, 104, 97, 114, 32, 45, 118, 32, 43, 32, 45, > 101, 91, 93, 32, 92, 34, 32, 32, 32, 32, 32, 32, 91, 114, 101, 116, > 114, 105, 101, 118, 101, 100, 32, 102, 114, 111, 109, 32, 115, 111, 117, 114, > 99, 101, 32, 39, 36, 34, 34, 49, 39, 93, 92, 110, 92, 34, 32, 45, > 118, 32, 45, 32, 34, 92, 10, 34, 32, 32, 45, 108, 32, 34, 92, 10, > 34, 32, 32, 32, 32, 45, 111, 32, 114, 97, 119, 58, 47, 116, 109, 112, > 47, 36, 102, 105, 108, 101, 110, 97, 109, 101, 44, 99, 104, 97, 114, 32, > 34, 92, 10, 34, 32, 32, 32, 32, 45, 120, 32, 92, 34, 115, 99, 112, > 32, 47, 116, 109, 112, 47, 92, 34, 36, 102, 105, 108, 101, 110, 97, 109, > 101, 92, 34, 32, 114, 111, 110, 111, 117, 110, 111, 117, 114, 115, 44, 103, > 109, 105, 99, 64, 119, 101, 98, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 58, 104, 116, 100, 111, 99, 115, 47, 105, > 110, 99, 108, 117, 100, 101, 47, 92, 34, 32, 34, 92, 10, 34, 32, 32, > 32, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 92, 34, 32, 32, > 32, 32, 32, 32, 91, 97, 114, 99, 104, 105, 118, 101, 100, 93, 92, 110, > 92, 34, 32, 45, 118, 32, 45, 32, 34, 92, 10, 34, 32, 32, 45, 111, > 110, 102, 97, 105, 108, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 92, 34, 32, 32, 32, 32, 32, 32, 91, 99, 111, 117, 108, 100, 32, 110, > 111, 116, 32, 98, 101, 32, 97, 114, 99, 104, 105, 118, 101, 100, 33, 93, > 92, 110, 92, 34, 32, 45, 118, 32, 45, 32, 45, 101, 110, 100, 108, 32, > 34, 92, 10, 34, 45, 111, 110, 102, 97, 105, 108, 32, 45, 108, 91, 93, > 32, 34, 92, 10, 34, 32, 32, 115, 111, 117, 114, 99, 101, 61, 104, 116, > 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, > 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, 105, 110, 99, 108, 117, 100, > 101, 47, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 34, 92, 10, 34, > 32, 32, 45, 105, 32, 114, 97, 119, 58, 36, 115, 111, 117, 114, 99, 101, > 44, 99, 104, 97, 114, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 92, 34, 32, 32, 32, 32, 32, 32, 91, 114, 101, 116, 114, 105, 101, 118, > 101, 100, 32, 102, 114, 111, 109, 32, 97, 114, 99, 104, 105, 118, 101, 32, > 39, 92, 34, 36, 115, 111, 117, 114, 99, 101, 92, 34, 39, 93, 92, 110, > 92, 34, 32, 45, 118, 32, 45, 32, 34, 92, 10, 34, 32, 32, 45, 111, > 110, 102, 97, 105, 108, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 92, 34, 32, 32, 32, 32, 32, 32, 91, 101, 114, 114, 111, 114, 44, 32, > 110, 111, 116, 32, 114, 101, 97, 99, 104, 97, 98, 108, 101, 33, 93, 92, > 110, 92, 34, 32, 45, 118, 32, 45, 34, 92, 10, 34, 32, 32, 45, 101, > 110, 100, 108, 32, 45, 101, 110, 100, 108, 34, 10, 45, 109, 32, 34, 99, > 97, 108, 105, 98, 114, 97, 116, 101, 95, 110, 97, 109, 101, 32, 58, 32, > 34, 92, 10, 34, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 51, 50, > 32, 34, 92, 10, 34, 45, 102, 32, 39, 105, 102, 40, 105, 62, 61, 54, > 53, 38, 38, 105, 60, 61, 57, 48, 44, 105, 43, 51, 50, 44, 105, 41, > 39, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 32, 123, > 39, 95, 39, 125, 44, 51, 50, 32, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 32, 51, 50, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 70, 102, 116, 44, 70, 70, 84, 32, 34, 92, > 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 114, > 103, 98, 44, 82, 71, 66, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 116, 114, 32, 108, 97, 98, 44, 76, 97, 98, 32, > 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 32, 104, 115, 118, 44, 72, 83, 86, 32, 34, 92, 10, 34, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 104, 115, 108, 44, 72, 83, > 76, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, > 116, 114, 32, 121, 99, 98, 99, 114, 44, 89, 67, 98, 67, 114, 32, 34, > 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, > 99, 109, 121, 107, 44, 67, 77, 89, 75, 32, 34, 92, 10, 34, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 98, 38, 97, 109, 112, > 59, 119, 44, 66, 38, 97, 109, 112, 59, 87, 32, 34, 92, 10, 34, 45, > 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 103, 105, 109, 112, > 44, 71, 73, 77, 80, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 115, 116, 114, 32, 114, 111, 100, 100, 121, 44, 82, 111, 100, > 100, 121, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 115, 116, 114, 32, 99, 114, 116, 44, 67, 82, 84, 32, 34, 92, 10, 34, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 99, 111, 108, > 111, 114, 97, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 112, 97, 105, > 110, 116, 44, 92, 34, 67, 111, 108, 111, 114, 32, 97, 98, 115, 116, 114, > 97, 99, 116, 105, 111, 110, 32, 112, 97, 105, 110, 116, 92, 34, 32, 34, > 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, > 103, 92, 52, 55, 109, 105, 99, 44, 71, 92, 52, 55, 77, 73, 67, 32, > 34, 92, 10, 34, 45, 102, 32, 39, 105, 102, 40, 121, 61, 61, 48, 38, > 38, 105, 62, 61, 57, 55, 38, 38, 105, 60, 61, 49, 50, 50, 44, 105, > 45, 51, 50, 44, 105, 41, 39, 32, 34, 10, 45, 105, 102, 32, 123, 36, > 49, 61, 61, 64, 46, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, > 32, 34, 62, 32, 85, 112, 108, 111, 97, 100, 32, 108, 97, 116, 101, 115, > 116, 32, 118, 101, 114, 115, 105, 111, 110, 32, 40, 34, 64, 123, 45, 115, > 116, 114, 118, 101, 114, 125, 34, 41, 32, 111, 102, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 32, 111, 110, 32, 83, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 32, 115, 101, 114, 118, 101, 114, 46, 92, 110, 34, 32, 45, > 118, 32, 45, 10, 45, 120, 32, 34, 115, 99, 112, 32, 34, 36, 72, 79, > 77, 69, 47, 119, 111, 114, 107, 47, 115, 114, 99, 47, 103, 109, 105, 99, > 47, 115, 114, 99, 47, 103, 109, 105, 99, 95, 100, 101, 102, 46, 103, 109, > 105, 99, 34, 32, 114, 111, 110, 111, 117, 110, 111, 117, 114, 115, 44, 103, > 109, 105, 99, 64, 119, 101, 98, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 58, 104, 116, 100, 111, 99, 115, 47, 103, > 109, 105, 99, 95, 100, 101, 102, 46, 34, 36, 49, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 62, 32, > 76, 111, 97, 100, 32, 97, 110, 100, 32, 97, 114, 99, 104, 105, 118, 101, > 32, 46, 103, 109, 105, 99, 32, 115, 111, 117, 114, 99, 101, 32, 102, 105, > 108, 101, 115, 46, 92, 110, 34, 32, 45, 118, 32, 45, 10, 95, 110, 98, > 95, 115, 111, 117, 114, 99, 101, 115, 61, 48, 10, 45, 108, 111, 97, 100, > 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, > 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, > 116, 47, 103, 109, 105, 99, 95, 100, 101, 102, 46, 36, 49, 10, 45, 108, > 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, > 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, > 46, 110, 101, 116, 47, 99, 111, 109, 112, 97, 116, 105, 98, 105, 108, 105, > 116, 121, 46, 103, 109, 105, 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, > 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, 115, 52, 48, 54, 56, 51, > 51, 50, 52, 55, 46, 119, 101, 98, 115, 105, 116, 101, 104, 111, 109, 101, > 46, 99, 111, 46, 117, 107, 47, 103, 109, 105, 99, 47, 103, 97, 114, 97, > 103, 101, 99, 111, 100, 101, 114, 46, 103, 109, 105, 99, 10, 45, 108, 111, > 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, 103, > 101, 110, 116, 108, 101, 109, 97, 110, 98, 101, 103, 103, 97, 114, 46, 98, > 112, 108, 97, 99, 101, 100, 46, 110, 101, 116, 47, 103, 101, 110, 116, 108, > 101, 109, 97, 110, 98, 101, 103, 103, 97, 114, 95, 103, 109, 105, 99, 46, > 103, 109, 105, 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, > 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 105, 97, 105, 110, 46, > 98, 112, 108, 97, 99, 101, 100, 46, 110, 101, 116, 47, 105, 97, 105, 110, > 95, 102, 101, 114, 103, 117, 115, 115, 111, 110, 46, 103, 109, 105, 99, 10, > 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, > 47, 47, 119, 119, 119, 46, 104, 45, 112, 115, 46, 100, 101, 109, 111, 110, > 46, 99, 111, 46, 117, 107, 47, 71, 77, 73, 67, 47, 106, 97, 121, 112, > 114, 105, 99, 104, 46, 103, 109, 105, 99, 10, 45, 108, 111, 97, 100, 95, > 103, 109, 105, 99, 32, 104, 116, 116, 112, 115, 58, 47, 47, 114, 97, 119, > 46, 103, 105, 116, 104, 117, 98, 46, 99, 111, 109, 47, 106, 98, 111, 117, > 108, 97, 110, 103, 101, 114, 47, 106, 98, 111, 117, 108, 97, 110, 103, 101, > 114, 45, 103, 109, 105, 99, 47, 109, 97, 115, 116, 101, 114, 47, 106, 98, > 111, 117, 108, 97, 110, 103, 101, 114, 46, 103, 109, 105, 99, 10, 45, 108, > 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, > 107, 97, 114, 111, 48, 51, 46, 98, 112, 108, 97, 99, 101, 100, 46, 110, > 101, 116, 47, 103, 109, 105, 99, 47, 107, 97, 114, 111, 115, 46, 103, 109, > 105, 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, > 116, 112, 58, 47, 47, 119, 119, 119, 46, 115, 97, 117, 110, 97, 108, 97, > 104, 116, 105, 46, 102, 105, 47, 110, 97, 103, 103, 111, 98, 111, 116, 47, > 110, 97, 103, 103, 111, 98, 111, 116, 46, 103, 109, 105, 99, 10, 45, 108, > 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, > 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, > 46, 110, 101, 116, 47, 112, 104, 111, 116, 111, 99, 111, 109, 105, 120, 46, > 103, 109, 105, 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, > 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, > 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, 114, 111, 110, 111, > 117, 110, 111, 117, 114, 115, 46, 103, 109, 105, 99, 10, 45, 108, 111, 97, > 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, 119, 119, > 119, 46, 97, 108, 106, 97, 99, 111, 109, 46, 99, 111, 109, 47, 126, 103, > 109, 105, 99, 47, 115, 97, 109, 106, 46, 103, 109, 105, 99, 10, 45, 108, > 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, > 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, > 46, 110, 101, 116, 47, 116, 111, 109, 107, 101, 105, 108, 46, 103, 109, 105, > 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, > 112, 58, 47, 47, 100, 111, 99, 103, 109, 105, 99, 46, 116, 117, 120, 102, > 97, 109, 105, 108, 121, 46, 111, 114, 103, 47, 122, 111, 110, 100, 101, 114, > 114, 46, 103, 109, 105, 99, 10, 45, 105, 91, 48, 93, 32, 40, 49, 48, > 41, 32, 45, 105, 91, 50, 45, 45, 49, 93, 32, 40, 123, 34, 39, 92, > 110, 35, 64, 103, 105, 109, 112, 32, 95, 95, 95, 95, 95, 95, 95, 95, > 95, 95, 95, 95, 95, 95, 95, 95, 92, 110, 39, 34, 125, 41, 32, 45, > 121, 32, 45, 97, 32, 121, 32, 45, 100, 105, 115, 99, 97, 114, 100, 32, > 49, 51, 32, 45, 114, 101, 112, 108, 97, 99, 101, 32, 57, 44, 51, 50, > 10, 45, 115, 32, 43, 44, 123, 39, 34, 35, 64, 103, 105, 109, 112, 34, > 39, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, > 40, 64, 35, 45, 49, 41, 47, 50, 41, 125, 32, 45, 97, 91, 123, 36, > 62, 43, 49, 125, 44, 123, 36, 62, 43, 50, 125, 93, 32, 121, 32, 45, > 100, 111, 110, 101, 10, 45, 110, 109, 91, 48, 93, 32, 33, 104, 101, 97, > 100, 101, 114, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 62, > 32, 83, 116, 97, 114, 116, 32, 115, 111, 117, 114, 99, 101, 32, 112, 97, > 114, 115, 105, 110, 103, 46, 92, 110, 34, 32, 45, 118, 32, 45, 10, 112, > 114, 111, 103, 114, 101, 115, 115, 95, 102, 97, 99, 116, 111, 114, 61, 123, > 49, 48, 48, 47, 40, 64, 35, 45, 49, 41, 125, 10, 109, 101, 114, 103, > 101, 95, 114, 101, 113, 117, 101, 115, 116, 61, 48, 10, 109, 101, 114, 103, > 101, 95, 115, 116, 97, 114, 116, 61, 48, 10, 110, 98, 95, 102, 105, 108, > 116, 101, 114, 115, 61, 48, 10, 111, 102, 102, 115, 101, 116, 61, 48, 10, > 112, 97, 116, 104, 61, 47, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 10, 105, 110, 100, 61, 123, 36, 62, 45, 36, 111, 102, 102, 115, 101, > 116, 125, 10, 45, 105, 102, 32, 123, 64, 123, 123, 36, 105, 110, 100, 45, > 49, 125, 44, 45, 49, 125, 61, 61, 49, 48, 34, 32, 38, 38, 32, 34, > 123, 123, 96, 64, 123, 36, 105, 110, 100, 44, 48, 45, 53, 125, 96, 125, > 39, 61, 61, 39, 34, 35, 64, 103, 105, 109, 112, 34, 125, 34, 32, 38, > 38, 32, 34, 40, 64, 123, 36, 105, 110, 100, 44, 54, 125, 61, 61, 51, > 50, 34, 32, 124, 124, 32, 34, 64, 123, 36, 105, 110, 100, 44, 54, 125, > 61, 61, 123, 39, 95, 39, 125, 41, 125, 32, 45, 108, 91, 36, 105, 110, > 100, 93, 10, 105, 115, 95, 102, 111, 108, 100, 101, 114, 61, 48, 10, 45, > 115, 32, 43, 44, 49, 48, 10, 45, 105, 102, 32, 123, 64, 123, 48, 44, > 54, 125, 61, 61, 123, 39, 95, 39, 125, 125, 32, 45, 45, 114, 111, 119, > 115, 91, 48, 93, 32, 57, 44, 49, 48, 48, 37, 32, 45, 114, 111, 119, > 115, 91, 48, 93, 32, 48, 44, 56, 10, 45, 101, 108, 115, 101, 32, 45, > 45, 114, 111, 119, 115, 91, 48, 93, 32, 54, 44, 49, 48, 48, 37, 32, > 45, 114, 111, 119, 115, 91, 48, 93, 32, 48, 44, 53, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, > 93, 32, 51, 50, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 10, 45, > 105, 102, 32, 123, 64, 123, 49, 44, 48, 125, 33, 61, 123, 39, 58, 39, > 125, 125, 10, 45, 108, 91, 49, 93, 10, 45, 115, 32, 43, 44, 123, 39, > 58, 39, 125, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 91, 48, 93, 32, 34, 60, 98, 62, 34, 10, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 115, 116, 114, 91, 48, 93, 32, 34, 60, 47, 98, 62, 34, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 48, 93, > 32, 34, 60, 105, 62, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 115, 116, 114, 91, 48, 93, 32, 34, 60, 47, 105, 62, 34, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 91, 48, 93, 32, 123, 39, 47, 39, 125, 44, > 123, 39, 45, 39, 125, 10, 45, 114, 101, 112, 108, 97, 99, 101, 91, 48, > 93, 32, 123, 39, 44, 39, 125, 44, 123, 39, 59, 39, 125, 10, 45, 97, > 117, 116, 111, 99, 114, 111, 112, 91, 48, 93, 32, 51, 50, 10, 45, 105, > 102, 32, 123, 64, 35, 62, 49, 125, 10, 45, 99, 97, 108, 105, 98, 114, > 97, 116, 101, 95, 110, 97, 109, 101, 91, 48, 93, 32, 45, 45, 114, 101, > 112, 108, 97, 99, 101, 91, 48, 93, 32, 51, 50, 44, 123, 39, 126, 39, > 125, 10, 110, 97, 109, 101, 61, 36, 112, 97, 116, 104, 64, 123, 45, 49, > 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 109, 101, 114, 103, > 101, 95, 114, 101, 113, 117, 101, 115, 116, 61, 49, 10, 110, 98, 95, 102, > 105, 108, 116, 101, 114, 115, 61, 123, 36, 110, 98, 95, 102, 105, 108, 116, > 101, 114, 115, 43, 49, 125, 10, 45, 105, 91, 48, 44, 49, 93, 32, 40, > 51, 50, 41, 32, 45, 97, 32, 121, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 32, 32, 34, 36, 110, 98, 95, 102, 105, 108, 116, 101, > 114, 115, 34, 46, 32, 34, 36, 110, 97, 109, 101, 34, 32, 40, 34, 123, > 114, 111, 117, 110, 100, 40, 36, 62, 42, 36, 112, 114, 111, 103, 114, 101, > 115, 115, 95, 102, 97, 99, 116, 111, 114, 41, 125, 34, 37, 41, 46, 34, > 32, 45, 118, 32, 45, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, > 123, 105, 61, 61, 123, 39, 95, 39, 125, 125, 10, 45, 100, 111, 32, 112, > 97, 116, 104, 61, 64, 123, 34, 45, 112, 97, 114, 101, 110, 116, 91, 93, > 32, 34, 36, 112, 97, 116, 104, 125, 32, 45, 115, 104, 105, 102, 116, 32, > 48, 44, 45, 49, 44, 48, 44, 48, 32, 45, 119, 104, 105, 108, 101, 32, > 123, 105, 61, 61, 123, 39, 95, 39, 125, 125, 10, 45, 97, 117, 116, 111, > 99, 114, 111, 112, 32, 48, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 51, 50, 10, 45, 105, 102, 32, 123, 119, 125, 32, 45, 99, 97, 108, > 105, 98, 114, 97, 116, 101, 95, 110, 97, 109, 101, 32, 45, 114, 101, 112, > 108, 97, 99, 101, 32, 51, 50, 44, 123, 39, 126, 39, 125, 32, 112, 97, > 116, 104, 61, 36, 112, 97, 116, 104, 64, 123, 48, 44, 116, 125, 47, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 32, 51, 50, 32, 45, 99, 97, 108, 105, 98, > 114, 97, 116, 101, 95, 110, 97, 109, 101, 32, 45, 114, 101, 112, 108, 97, > 99, 101, 32, 51, 50, 44, 123, 39, 126, 39, 125, 32, 112, 97, 116, 104, > 61, 36, 112, 97, 116, 104, 64, 123, 48, 44, 116, 125, 47, 10, 45, 101, > 110, 100, 105, 102, 10, 105, 115, 95, 102, 111, 108, 100, 101, 114, 61, 49, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 10, 45, 105, > 102, 32, 36, 105, 115, 95, 102, 111, 108, 100, 101, 114, 32, 45, 114, 109, > 91, 48, 44, 49, 93, 32, 45, 105, 91, 48, 93, 32, 40, 49, 48, 41, > 10, 45, 101, 108, 115, 101, 32, 45, 110, 109, 91, 48, 93, 32, 36, 110, > 97, 109, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, > 10, 45, 105, 102, 32, 123, 64, 35, 62, 61, 51, 125, 32, 45, 108, 91, > 49, 93, 10, 45, 115, 32, 43, 44, 123, 39, 61, 39, 125, 10, 45, 105, > 102, 32, 123, 64, 35, 62, 61, 51, 125, 32, 45, 105, 102, 32, 123, 64, > 123, 49, 44, 48, 125, 61, 61, 123, 39, 61, 39, 125, 125, 10, 45, 114, > 111, 119, 115, 91, 48, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 99, > 97, 108, 105, 98, 114, 97, 116, 101, 95, 110, 97, 109, 101, 91, 48, 93, > 10, 45, 105, 91, 48, 93, 32, 40, 123, 39, 58, 39, 125, 59, 51, 50, > 41, 32, 45, 105, 91, 50, 93, 32, 40, 51, 50, 41, 10, 45, 101, 110, > 100, 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 49, 93, 32, 40, 51, > 50, 41, 10, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 121, 10, 45, > 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 109, 101, 114, 103, 101, 95, 114, 101, 113, 117, 101, 115, 116, 34, > 32, 38, 38, 32, 34, 36, 105, 110, 100, 62, 48, 125, 10, 45, 97, 91, > 36, 109, 101, 114, 103, 101, 95, 115, 116, 97, 114, 116, 45, 123, 36, 105, > 110, 100, 45, 49, 125, 93, 32, 121, 10, 111, 102, 102, 115, 101, 116, 61, > 123, 36, 111, 102, 102, 115, 101, 116, 43, 36, 105, 110, 100, 45, 36, 109, > 101, 114, 103, 101, 95, 115, 116, 97, 114, 116, 45, 49, 125, 10, 109, 101, > 114, 103, 101, 95, 115, 116, 97, 114, 116, 61, 123, 36, 109, 101, 114, 103, > 101, 95, 115, 116, 97, 114, 116, 43, 49, 125, 10, 109, 101, 114, 103, 101, > 95, 114, 101, 113, 117, 101, 115, 116, 61, 48, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 10, 45, 97, 91, 36, 109, 101, 114, 103, > 101, 95, 115, 116, 97, 114, 116, 45, 45, 49, 93, 32, 121, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 62, 32, 70, 111, 114, > 99, 101, 32, 102, 105, 108, 116, 101, 114, 115, 32, 116, 111, 32, 109, 111, > 118, 101, 44, 32, 105, 102, 32, 110, 101, 99, 101, 115, 115, 97, 114, 121, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 105, 110, 100, 61, 36, 62, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 95, 110, 98, 109, 32, 45, 105, 102, 32, 123, 64, 123, 36, > 105, 110, 100, 44, 110, 125, 39, 61, 61, 39, 36, 123, 95, 116, 111, 95, > 109, 111, 118, 101, 36, 62, 125, 125, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 32, 32, 34, 36, 105, 110, 100, 34, 46, 32, 77, 111, > 118, 101, 32, 39, 34, 64, 123, 36, 105, 110, 100, 44, 110, 125, 34, 39, > 32, 116, 111, 32, 39, 34, 36, 123, 95, 109, 111, 118, 101, 95, 116, 111, > 36, 62, 125, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 110, 97, > 109, 101, 91, 36, 105, 110, 100, 93, 32, 36, 123, 95, 109, 111, 118, 101, > 95, 116, 111, 36, 62, 125, 47, 64, 123, 36, 105, 110, 100, 44, 98, 125, > 10, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 32, 45, 100, > 111, 110, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, > 110, 62, 32, 83, 111, 114, 116, 32, 102, 105, 108, 116, 101, 114, 115, 32, > 98, 121, 32, 108, 101, 120, 105, 99, 111, 103, 114, 97, 112, 104, 105, 99, > 32, 111, 114, 100, 101, 114, 46, 34, 32, 45, 118, 32, 45, 10, 45, 95, > 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, > 95, 115, 111, 114, 116, 32, 48, 44, 123, 64, 35, 45, 49, 125, 10, 45, > 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 62, 32, 82, 101, > 109, 111, 118, 101, 32, 100, 117, 112, 108, 105, 99, 97, 116, 101, 32, 102, > 105, 108, 116, 101, 114, 115, 46, 34, 32, 45, 118, 32, 45, 10, 112, 110, > 97, 109, 101, 61, 64, 123, 45, 49, 44, 110, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 99, 110, 97, 109, 101, > 61, 64, 123, 36, 60, 44, 110, 125, 10, 45, 105, 102, 32, 123, 36, 99, > 110, 97, 109, 101, 39, 61, 61, 39, 36, 112, 110, 97, 109, 101, 125, 10, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 34, 36, 60, > 34, 46, 32, 82, 101, 109, 111, 118, 101, 32, 100, 117, 112, 108, 105, 99, > 97, 116, 101, 32, 39, 34, 36, 99, 110, 97, 109, 101, 34, 39, 46, 34, > 32, 45, 118, 32, 45, 10, 45, 114, 109, 91, 36, 60, 93, 10, 45, 101, > 108, 115, 101, 32, 112, 110, 97, 109, 101, 61, 36, 99, 110, 97, 109, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 62, 32, 82, 101, 98, > 117, 105, 108, 100, 32, 102, 111, 108, 100, 101, 114, 32, 115, 116, 114, 117, > 99, 116, 117, 114, 101, 46, 34, 32, 45, 118, 32, 45, 10, 45, 109, 32, > 34, 110, 98, 95, 108, 101, 118, 101, 108, 115, 32, 58, 32, 45, 108, 91, > 93, 32, 40, 123, 39, 36, 34, 34, 49, 39, 125, 41, 32, 45, 115, 32, > 45, 44, 123, 39, 47, 39, 125, 32, 45, 117, 32, 64, 35, 32, 45, 114, > 109, 32, 45, 101, 110, 100, 108, 34, 10, 112, 97, 116, 104, 61, 47, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 110, 112, 97, 116, 104, 61, 64, 123, 34, 45, 112, 97, 114, 101, > 110, 116, 32, 34, 64, 123, 48, 44, 110, 125, 125, 10, 45, 105, 102, 32, > 123, 36, 112, 97, 116, 104, 39, 33, 61, 39, 36, 110, 112, 97, 116, 104, > 125, 10, 110, 99, 61, 64, 123, 34, 45, 110, 98, 95, 108, 101, 118, 101, > 108, 115, 91, 93, 32, 34, 36, 112, 97, 116, 104, 125, 10, 110, 110, 61, > 64, 123, 34, 45, 110, 98, 95, 108, 101, 118, 101, 108, 115, 91, 93, 32, > 34, 36, 110, 112, 97, 116, 104, 125, 10, 110, 98, 95, 117, 112, 61, 48, > 10, 110, 98, 95, 100, 111, 119, 110, 61, 48, 10, 98, 97, 115, 105, 115, > 61, 36, 112, 97, 116, 104, 32, 110, 98, 97, 115, 105, 115, 61, 36, 110, > 112, 97, 116, 104, 10, 45, 100, 111, 10, 110, 99, 61, 64, 123, 34, 45, > 110, 98, 95, 108, 101, 118, 101, 108, 115, 91, 93, 32, 34, 36, 98, 97, > 115, 105, 115, 125, 10, 110, 110, 61, 64, 123, 34, 45, 110, 98, 95, 108, > 101, 118, 101, 108, 115, 91, 93, 32, 34, 36, 110, 98, 97, 115, 105, 115, > 125, 10, 45, 105, 102, 32, 123, 36, 110, 99, 62, 36, 110, 110, 125, 32, > 98, 97, 115, 105, 115, 61, 64, 123, 34, 45, 112, 97, 114, 101, 110, 116, > 91, 93, 32, 34, 36, 98, 97, 115, 105, 115, 125, 32, 110, 98, 95, 117, > 112, 61, 123, 36, 110, 98, 95, 117, 112, 43, 49, 125, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 110, 110, 62, 36, 110, 99, 125, 32, 110, 98, 97, > 115, 105, 115, 61, 64, 123, 34, 45, 112, 97, 114, 101, 110, 116, 91, 93, > 32, 34, 36, 110, 98, 97, 115, 105, 115, 125, 32, 110, 98, 95, 100, 111, > 119, 110, 61, 123, 36, 110, 98, 95, 100, 111, 119, 110, 43, 49, 125, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 110, 98, 97, 115, 105, 115, 39, 33, > 61, 39, 36, 98, 97, 115, 105, 115, 125, 32, 98, 97, 115, 105, 115, 61, > 64, 123, 34, 45, 112, 97, 114, 101, 110, 116, 91, 93, 32, 34, 36, 98, > 97, 115, 105, 115, 125, 32, 110, 98, 95, 117, 112, 61, 123, 36, 110, 98, > 95, 117, 112, 43, 49, 125, 32, 110, 98, 97, 115, 105, 115, 61, 64, 123, > 34, 45, 112, 97, 114, 101, 110, 116, 91, 93, 32, 34, 36, 110, 98, 97, > 115, 105, 115, 125, 32, 110, 98, 95, 100, 111, 119, 110, 61, 123, 36, 110, > 98, 95, 100, 111, 119, 110, 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 110, 98, 97, 115, 105, 115, > 39, 33, 61, 39, 36, 98, 97, 115, 105, 115, 125, 10, 99, 111, 109, 109, > 97, 110, 100, 61, 10, 45, 105, 102, 32, 36, 110, 98, 95, 117, 112, 32, > 49, 44, 36, 110, 98, 95, 117, 112, 44, 49, 44, 49, 44, 123, 39, 95, > 39, 125, 32, 99, 111, 109, 109, 97, 110, 100, 61, 34, 35, 64, 103, 105, > 109, 112, 32, 34, 64, 123, 45, 49, 44, 116, 125, 34, 92, 110, 34, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 36, 110, 98, 95, 100, 111, 119, 110, 32, 45, 108, 91, 93, > 10, 40, 123, 39, 36, 110, 112, 97, 116, 104, 39, 125, 41, 32, 45, 115, > 32, 45, 44, 123, 39, 47, 39, 125, 32, 45, 107, 91, 45, 36, 110, 98, > 95, 100, 111, 119, 110, 45, 45, 49, 93, 32, 45, 114, 101, 112, 108, 97, > 99, 101, 32, 123, 39, 126, 39, 125, 44, 51, 50, 10, 108, 101, 118, 101, > 108, 61, 123, 64, 123, 34, 45, 110, 98, 95, 108, 101, 118, 101, 108, 115, > 32, 34, 36, 112, 97, 116, 104, 125, 45, 36, 110, 98, 95, 117, 112, 125, > 10, 98, 97, 108, 105, 115, 101, 61, 64, 123, 34, 45, 105, 102, 32, 34, > 123, 36, 108, 101, 118, 101, 108, 60, 61, 48, 34, 32, 38, 38, 32, 34, > 123, 36, 110, 112, 97, 116, 104, 39, 33, 61, 39, 47, 65, 98, 111, 117, > 116, 47, 125, 125, 34, 32, 45, 117, 32, 98, 32, 45, 101, 108, 115, 101, > 32, 45, 117, 32, 105, 32, 45, 101, 110, 100, 105, 102, 34, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 99, 111, 109, 109, 97, 110, > 100, 61, 36, 99, 111, 109, 109, 97, 110, 100, 34, 35, 64, 103, 105, 109, > 112, 32, 60, 34, 36, 98, 97, 108, 105, 115, 101, 34, 62, 34, 64, 123, > 36, 62, 44, 116, 125, 34, 60, 47, 34, 36, 98, 97, 108, 105, 115, 101, > 34, 62, 92, 110, 34, 10, 98, 97, 108, 105, 115, 101, 61, 34, 105, 34, > 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 10, 45, 101, 110, 100, 108, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, > 103, 40, 36, 99, 111, 109, 109, 97, 110, 100, 41, 125, 32, 110, 97, 109, > 101, 61, 64, 123, 48, 44, 110, 125, 32, 45, 105, 91, 48, 93, 32, 40, > 123, 39, 36, 99, 111, 109, 109, 97, 110, 100, 39, 125, 41, 32, 45, 121, > 91, 48, 93, 32, 45, 97, 32, 121, 32, 45, 110, 109, 32, 36, 110, 97, > 109, 101, 10, 45, 101, 110, 100, 105, 102, 10, 112, 97, 116, 104, 61, 36, > 110, 112, 97, 116, 104, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 62, 32, 83, 101, 97, 114, 99, 104, 32, 97, 110, 100, > 32, 114, 101, 112, 108, 97, 99, 101, 32, 115, 116, 114, 105, 110, 103, 115, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 108, 97, 99, 101, > 95, 115, 116, 114, 32, 34, 83, 97, 116, 117, 114, 97, 116, 105, 111, 110, > 32, 101, 113, 32, 112, 34, 44, 34, 83, 97, 116, 117, 114, 97, 116, 105, > 111, 110, 32, 101, 113, 117, 97, 108, 105, 122, 101, 114, 34, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 67, 77, 89, 75, > 32, 116, 111, 110, 101, 32, 112, 34, 44, 34, 67, 77, 89, 75, 32, 116, > 111, 110, 101, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, > 114, 32, 34, 84, 101, 120, 116, 117, 114, 101, 32, 101, 110, 104, 97, 110, > 99, 101, 32, 112, 34, 44, 34, 84, 101, 120, 116, 117, 114, 101, 32, 101, > 110, 104, 97, 110, 99, 101, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 45, 108, 91, 36, 62, 93, 32, 99, 111, 109, 109, 97, > 110, 100, 95, 110, 97, 109, 101, 36, 62, 61, 34, 34, 10, 45, 45, 114, > 111, 119, 115, 32, 48, 44, 54, 32, 104, 101, 97, 100, 61, 64, 123, 45, > 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, > 32, 123, 36, 104, 101, 97, 100, 39, 61, 61, 39, 34, 35, 64, 103, 105, > 109, 112, 32, 34, 125, 32, 45, 115, 32, 45, 44, 123, 39, 58, 39, 125, > 10, 45, 105, 102, 32, 123, 64, 35, 62, 61, 49, 125, 32, 45, 108, 91, > 49, 93, 32, 45, 115, 32, 45, 44, 123, 39, 44, 39, 125, 10, 45, 105, > 102, 32, 64, 35, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 48, > 93, 32, 51, 50, 32, 99, 111, 109, 109, 97, 110, 100, 95, 110, 97, 109, > 101, 36, 62, 61, 64, 123, 48, 44, 116, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 34, 62, 32, 83, 97, 118, 101, 32, 111, 117, 116, 112, 117, 116, 32, 46, > 103, 109, 105, 99, 32, 102, 105, 108, 101, 46, 92, 110, 34, 32, 45, 118, > 32, 45, 10, 45, 45, 97, 32, 121, 32, 45, 105, 102, 32, 123, 104, 62, > 49, 125, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 104, 45, 49, > 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 111, 91, 45, 49, 93, 32, 114, 97, 119, 58, > 36, 72, 79, 77, 69, 47, 46, 117, 112, 100, 97, 116, 101, 36, 49, 46, > 103, 109, 105, 99, 44, 99, 104, 97, 114, 10, 45, 111, 91, 45, 49, 93, > 32, 47, 116, 109, 112, 47, 46, 117, 112, 100, 97, 116, 101, 36, 49, 46, > 99, 105, 109, 103, 122, 44, 99, 104, 97, 114, 10, 45, 120, 32, 34, 115, > 99, 112, 32, 34, 36, 72, 79, 77, 69, 47, 46, 117, 112, 100, 97, 116, > 101, 36, 49, 46, 103, 109, 105, 99, 34, 32, 114, 111, 110, 111, 117, 110, > 111, 117, 114, 115, 44, 103, 109, 105, 99, 64, 119, 101, 98, 46, 115, 111, > 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 58, 104, 116, > 100, 111, 99, 115, 47, 34, 117, 112, 100, 97, 116, 101, 49, 53, 56, 53, > 46, 103, 109, 105, 99, 10, 45, 120, 32, 34, 115, 99, 112, 32, 34, 47, > 116, 109, 112, 47, 46, 117, 112, 100, 97, 116, 101, 36, 49, 46, 99, 105, > 109, 103, 122, 34, 32, 114, 111, 110, 111, 117, 110, 111, 117, 114, 115, 44, > 103, 109, 105, 99, 64, 119, 101, 98, 46, 115, 111, 117, 114, 99, 101, 102, > 111, 114, 103, 101, 46, 110, 101, 116, 58, 104, 116, 100, 111, 99, 115, 47, > 34, 117, 112, 100, 97, 116, 101, 36, 49, 46, 103, 109, 105, 99, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 50, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 62, 32, 79, 117, 116, 112, 117, > 116, 32, 108, 105, 115, 116, 32, 111, 102, 32, 102, 105, 108, 116, 101, 114, > 115, 32, 105, 110, 32, 115, 116, 100, 111, 117, 116, 46, 92, 110, 34, 32, > 45, 118, 32, 45, 10, 45, 120, 32, 34, 100, 97, 116, 101, 32, 43, 37, > 89, 44, 37, 109, 44, 37, 100, 32, 62, 34, 64, 123, 45, 112, 97, 116, > 104, 95, 116, 109, 112, 125, 47, 100, 97, 116, 101, 46, 100, 108, 109, 10, > 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, 100, 97, 116, > 101, 46, 100, 108, 109, 10, 45, 101, 99, 104, 111, 95, 115, 116, 100, 111, > 117, 116, 32, 34, 42, 42, 42, 32, 76, 105, 115, 116, 32, 111, 102, 32, > 102, 105, 108, 116, 101, 114, 115, 32, 105, 110, 32, 116, 104, 101, 32, 71, > 92, 52, 55, 77, 73, 67, 32, 112, 108, 117, 103, 45, 105, 110, 32, 102, > 111, 114, 32, 71, 73, 77, 80, 32, 40, 34, 36, 110, 98, 95, 102, 105, > 108, 116, 101, 114, 115, 34, 32, 102, 105, 108, 116, 101, 114, 115, 44, 32, > 111, 110, 32, 34, 123, 105, 125, 47, 123, 105, 40, 49, 41, 125, 47, 123, > 105, 40, 50, 41, 125, 34, 41, 32, 42, 42, 42, 92, 110, 34, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 99, 104, 111, 95, 115, 116, 100, > 111, 117, 116, 32, 34, 42, 32, 76, 105, 115, 116, 32, 111, 102, 32, 102, > 105, 108, 116, 101, 114, 115, 44, 32, 115, 111, 114, 116, 101, 100, 32, 98, > 121, 32, 112, 97, 116, 104, 58, 92, 110, 34, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 40, 123, 39, > 64, 123, 48, 44, 110, 125, 39, 125, 41, 32, 45, 105, 102, 32, 123, 105, > 33, 61, 123, 39, 33, 39, 125, 125, 10, 45, 114, 91, 45, 49, 93, 32, > 123, 119, 45, 49, 125, 44, 49, 44, 49, 44, 49, 44, 48, 44, 48, 44, > 49, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 45, > 49, 93, 32, 34, 38, 97, 109, 112, 59, 34, 44, 34, 38, 34, 10, 45, > 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 45, 49, 93, 32, > 34, 38, 35, 50, 51, 51, 59, 34, 44, 34, 101, 34, 10, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 45, 49, 93, 32, 34, 47, > 34, 44, 34, 126, 47, 126, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, > 91, 45, 49, 93, 32, 123, 39, 126, 39, 125, 44, 51, 50, 10, 45, 105, > 102, 32, 123, 110, 97, 114, 103, 40, 36, 123, 99, 111, 109, 109, 97, 110, > 100, 95, 110, 97, 109, 101, 36, 62, 125, 41, 125, 32, 45, 101, 99, 104, > 111, 95, 115, 116, 100, 111, 117, 116, 91, 93, 32, 34, 32, 32, 34, 64, > 123, 45, 49, 44, 116, 125, 34, 32, 40, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 45, 34, 36, 123, 99, 111, 109, 109, 97, 110, 100, 95, 110, 97, > 109, 101, 36, 62, 125, 34, 39, 41, 34, 10, 45, 101, 108, 115, 101, 32, > 45, 101, 99, 104, 111, 95, 115, 116, 100, 111, 117, 116, 91, 93, 32, 34, > 32, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 99, > 104, 111, 95, 115, 116, 100, 111, 117, 116, 32, 34, 92, 110, 42, 32, 76, > 105, 115, 116, 32, 111, 102, 32, 102, 105, 108, 116, 101, 114, 115, 44, 32, > 115, 111, 114, 116, 101, 100, 32, 97, 108, 112, 104, 97, 98, 101, 116, 105, > 99, 97, 108, 108, 121, 58, 92, 110, 34, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 10, 110, 97, 109, 101, 61, 64, 123, 36, 62, 44, 98, > 125, 10, 112, 97, 116, 104, 61, 64, 123, 36, 62, 44, 102, 125, 10, 45, > 110, 109, 91, 36, 62, 93, 32, 36, 110, 97, 109, 101, 34, 126, 40, 105, > 110, 126, 39, 34, 36, 112, 97, 116, 104, 34, 39, 41, 34, 10, 45, 100, > 111, 110, 101, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, > 99, 95, 103, 105, 109, 112, 95, 115, 111, 114, 116, 32, 48, 44, 123, 64, > 35, 45, 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 40, 123, 39, 64, 123, 48, 44, 110, 125, > 39, 125, 41, 32, 45, 105, 102, 32, 123, 105, 33, 61, 123, 39, 33, 39, > 125, 125, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, > 45, 49, 93, 32, 34, 38, 97, 109, 112, 59, 34, 44, 34, 38, 34, 10, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 45, 49, 93, > 32, 34, 38, 35, 50, 51, 51, 59, 34, 44, 34, 101, 34, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 91, 45, 49, 93, 32, 123, 39, 126, 39, 125, > 44, 51, 50, 10, 45, 101, 99, 104, 111, 95, 115, 116, 100, 111, 117, 116, > 91, 93, 32, 34, 32, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, > 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 99, 104, 111, 95, > 115, 116, 100, 111, 117, 116, 32, 34, 92, 110, 42, 42, 42, 32, 69, 110, > 100, 32, 111, 102, 32, 108, 105, 115, 116, 32, 42, 42, 42, 92, 110, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 32, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 62, 32, 65, 108, 108, 32, 100, 111, 110, > 101, 32, 33, 92, 110, 34, 10, 95, 117, 112, 100, 97, 116, 101, 95, 103, > 109, 105, 99, 95, 103, 105, 109, 112, 95, 115, 111, 114, 116, 32, 58, 10, > 109, 105, 100, 61, 123, 105, 110, 116, 40, 40, 36, 49, 43, 36, 50, 41, > 47, 50, 41, 125, 10, 45, 105, 102, 32, 64, 123, 34, 45, 95, 109, 97, > 120, 91, 93, 32, 34, 64, 123, 36, 49, 44, 110, 125, 44, 64, 123, 36, > 109, 105, 100, 44, 110, 125, 125, 32, 45, 114, 118, 91, 36, 49, 44, 36, > 109, 105, 100, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 64, 123, 34, 45, 95, 109, 97, 120, 91, 93, 32, 34, 64, 123, 36, 109, > 105, 100, 44, 110, 125, 44, 64, 123, 36, 50, 44, 110, 125, 125, 32, 45, > 114, 118, 91, 36, 50, 44, 36, 109, 105, 100, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 64, 123, 34, 45, 95, 109, 97, 120, 91, > 93, 32, 34, 64, 123, 36, 49, 44, 110, 125, 44, 64, 123, 36, 109, 105, > 100, 44, 110, 125, 125, 32, 45, 114, 118, 91, 36, 49, 44, 36, 109, 105, > 100, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 50, 45, 36, 49, 62, 61, 51, 125, 10, 112, 105, 118, 111, 116, 61, 64, > 123, 36, 109, 105, 100, 44, 110, 125, 10, 105, 61, 36, 49, 32, 106, 61, > 36, 50, 10, 45, 100, 111, 10, 45, 105, 102, 32, 64, 123, 34, 45, 95, > 109, 97, 120, 91, 93, 32, 34, 36, 112, 105, 118, 111, 116, 44, 64, 123, > 36, 105, 44, 110, 125, 125, 32, 45, 100, 111, 32, 105, 61, 123, 36, 105, > 43, 49, 125, 32, 45, 119, 104, 105, 108, 101, 32, 64, 123, 34, 45, 95, > 109, 97, 120, 91, 93, 32, 34, 36, 112, 105, 118, 111, 116, 44, 64, 123, > 36, 105, 44, 110, 125, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 64, 123, 34, 45, 95, 109, 97, 120, 91, 93, 32, 34, 64, 123, > 36, 106, 44, 110, 125, 44, 36, 112, 105, 118, 111, 116, 125, 32, 45, 100, > 111, 32, 106, 61, 123, 36, 106, 45, 49, 125, 32, 45, 119, 104, 105, 108, > 101, 32, 64, 123, 34, 45, 95, 109, 97, 120, 91, 93, 32, 34, 64, 123, > 36, 106, 44, 110, 125, 44, 36, 112, 105, 118, 111, 116, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 105, 60, 61, 36, 106, > 125, 32, 45, 114, 118, 91, 36, 105, 44, 36, 106, 93, 32, 105, 61, 123, > 36, 105, 43, 49, 125, 32, 106, 61, 123, 36, 106, 45, 49, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 105, > 60, 61, 36, 106, 125, 10, 45, 105, 102, 32, 123, 36, 49, 60, 36, 106, > 125, 32, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, > 103, 105, 109, 112, 95, 115, 111, 114, 116, 32, 36, 49, 44, 36, 106, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 105, 60, 36, > 50, 125, 32, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, > 95, 103, 105, 109, 112, 95, 115, 111, 114, 116, 32, 36, 105, 44, 36, 50, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 95, > 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, > 95, 109, 111, 118, 101, 32, 58, 10, 45, 105, 102, 32, 123, 33, 110, 97, > 114, 103, 40, 36, 95, 110, 98, 109, 41, 125, 32, 95, 110, 98, 109, 61, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 95, 116, 111, 95, 109, 111, 118, > 101, 36, 123, 95, 110, 98, 109, 125, 61, 34, 36, 49, 34, 32, 95, 109, > 111, 118, 101, 95, 116, 111, 36, 123, 95, 110, 98, 109, 125, 61, 34, 36, > 50, 34, 32, 95, 110, 98, 109, 61, 123, 36, 95, 110, 98, 109, 43, 49, > 125, 10, 95, 98, 101, 102, 111, 114, 101, 32, 58, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 34, 66, 101, 102, 111, 114, 101, 34, 44, 49, 44, > 45, 49, 44, 49, 51, 44, 49, 44, 49, 32, 45, 114, 91, 45, 49, 93, > 32, 123, 119, 43, 52, 125, 44, 123, 104, 43, 52, 125, 44, 49, 44, 49, > 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 95, 97, 102, > 116, 101, 114, 32, 58, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, > 65, 102, 116, 101, 114, 34, 44, 49, 44, 45, 49, 44, 49, 51, 44, 49, > 44, 49, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 43, 52, 125, 44, > 123, 104, 43, 52, 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 10, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 48, > 125, 32, 45, 108, 91, 45, 49, 93, 32, 36, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 99, 111, 110, > 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 33, 40, 36, 50, 37, 50, 41, 125, 10, 45, 115, 91, 45, 49, > 93, 32, 120, 44, 50, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 50, > 125, 32, 45, 108, 91, 45, 49, 93, 32, 36, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, > 45, 50, 44, 45, 49, 93, 32, 48, 32, 45, 95, 98, 101, 102, 111, 114, > 101, 32, 45, 95, 97, 102, 116, 101, 114, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 50, 61, 61, 52, 125, 32, 45, 108, 91, 45, 50, 93, 32, 36, > 49, 32, 45, 101, 110, 100, 108, 32, 45, 116, 111, 95, 99, 111, 108, 111, > 114, 109, 111, 100, 101, 91, 45, 50, 44, 45, 49, 93, 32, 48, 32, 45, > 95, 97, 102, 116, 101, 114, 32, 45, 95, 98, 101, 102, 111, 114, 101, 10, > 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, > 108, 91, 45, 49, 93, 32, 36, 49, 32, 45, 101, 110, 100, 108, 32, 45, > 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 50, 44, > 45, 49, 93, 32, 48, 32, 45, 95, 98, 101, 102, 111, 114, 101, 32, 45, > 95, 97, 102, 116, 101, 114, 10, 45, 101, 110, 100, 105, 102, 10, 45, 108, > 105, 110, 101, 91, 45, 51, 93, 32, 48, 44, 48, 44, 48, 44, 64, 123, > 45, 51, 44, 104, 125, 44, 49, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 32, 45, 97, 91, 45, 52, 44, 45, 51, 93, 32, 120, 10, 45, 101, > 108, 115, 101, 10, 45, 115, 91, 45, 49, 93, 32, 121, 44, 50, 10, 45, > 105, 102, 32, 123, 36, 50, 61, 61, 49, 125, 32, 45, 108, 91, 45, 49, > 93, 32, 36, 49, 32, 45, 101, 110, 100, 108, 32, 45, 116, 111, 95, 99, > 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 50, 44, 45, 49, 93, 32, > 123, 109, 97, 120, 40, 64, 123, 45, 50, 44, 115, 125, 44, 115, 41, 125, > 32, 45, 95, 98, 101, 102, 111, 114, 101, 32, 45, 95, 97, 102, 116, 101, > 114, 10, 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 51, 125, 32, > 45, 108, 91, 45, 50, 93, 32, 36, 49, 32, 45, 101, 110, 100, 108, 32, > 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 50, > 44, 45, 49, 93, 32, 123, 109, 97, 120, 40, 64, 123, 45, 50, 44, 115, > 125, 44, 115, 41, 125, 32, 45, 95, 97, 102, 116, 101, 114, 32, 45, 95, > 98, 101, 102, 111, 114, 101, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 45, 108, 91, 45, 49, 93, 32, 36, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, > 111, 100, 101, 91, 45, 50, 44, 45, 49, 93, 32, 48, 32, 45, 95, 98, > 101, 102, 111, 114, 101, 32, 45, 95, 97, 102, 116, 101, 114, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 108, 105, 110, 101, 91, 45, 51, 93, 32, 48, > 44, 48, 44, 64, 123, 45, 51, 44, 119, 125, 44, 48, 44, 49, 44, 48, > 44, 48, 44, 48, 44, 50, 53, 53, 32, 45, 97, 91, 45, 52, 44, 45, > 51, 93, 32, 121, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 100, 105, > 108, 97, 116, 101, 91, 45, 50, 44, 45, 49, 93, 32, 53, 32, 45, 42, > 91, 45, 52, 44, 45, 51, 93, 32, 50, 53, 53, 32, 45, 116, 111, 95, > 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 52, 44, 45, 51, 93, > 32, 64, 123, 45, 53, 44, 115, 125, 10, 45, 106, 91, 45, 53, 93, 32, > 91, 45, 52, 93, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, 56, > 44, 91, 45, 50, 93, 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 51, > 93, 44, 123, 64, 123, 45, 53, 44, 119, 125, 45, 119, 45, 49, 125, 44, > 123, 64, 123, 45, 53, 44, 104, 125, 45, 104, 45, 49, 125, 44, 48, 44, > 48, 44, 48, 46, 56, 44, 91, 45, 49, 93, 10, 45, 114, 109, 91, 45, > 52, 45, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 110, 111, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 110, > 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 78, 111, 32, 112, 114, > 101, 118, 105, 101, 119, 92, 110, 32, 97, 118, 97, 105, 108, 97, 98, 108, > 101, 34, 44, 34, 36, 42, 34, 10, 95, 103, 105, 109, 112, 95, 110, 111, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 48, 125, 32, 45, 107, 91, 48, 93, 32, 45, 101, 108, 115, > 101, 32, 50, 53, 54, 44, 50, 53, 54, 44, 49, 44, 49, 44, 49, 50, > 56, 32, 45, 101, 110, 100, 105, 102, 10, 49, 49, 56, 44, 53, 48, 32, > 45, 116, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 50, 44, 49, 44, > 50, 53, 44, 49, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 116, 111, 95, 99, 111, > 108, 111, 114, 109, 111, 100, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, > 44, 115, 125, 10, 40, 49, 46, 53, 44, 48, 44, 49, 46, 53, 59, 48, > 44, 48, 44, 48, 59, 49, 46, 53, 44, 48, 44, 49, 46, 53, 41, 32, > 45, 114, 91, 45, 49, 93, 32, 91, 45, 51, 93, 44, 51, 32, 45, 42, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 99, 91, 45, 50, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 111, 114, 10, 45, 115, 107, 105, 112, 32, 34, > 36, 42, 34, 10, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 118, 101, > 114, 115, 105, 111, 110, 51, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, > 36, 123, 49, 61, 80, 108, 117, 103, 45, 105, 110, 32, 102, 111, 114, 32, > 71, 73, 77, 80, 125, 34, 10, 45, 114, 109, 32, 115, 61, 34, 71, 92, > 52, 55, 77, 73, 67, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 110, 97, 114, 103, 40, 123, 39, 36, 115, 39, 125, 41, 125, 10, 48, 32, > 45, 116, 91, 45, 49, 93, 32, 123, 96, 123, 97, 114, 103, 40, 49, 43, > 36, 62, 44, 123, 39, 36, 115, 39, 125, 41, 125, 96, 125, 44, 48, 44, > 48, 44, 53, 51, 44, 49, 44, 49, 32, 45, 102, 114, 97, 109, 101, 91, > 45, 49, 93, 32, 51, 44, 48, 44, 48, 10, 45, 114, 91, 45, 49, 93, > 32, 53, 48, 48, 37, 44, 53, 48, 48, 37, 44, 49, 44, 49, 44, 51, > 32, 45, 98, 91, 45, 49, 93, 32, 51, 37, 32, 45, 103, 101, 91, 45, > 49, 93, 32, 53, 48, 37, 10, 45, 100, 105, 115, 116, 97, 110, 99, 101, > 91, 45, 49, 93, 32, 49, 32, 45, 108, 101, 91, 45, 49, 93, 32, 49, > 48, 10, 91, 45, 49, 93, 120, 51, 32, 45, 119, 104, 105, 114, 108, 115, > 91, 45, 52, 45, 45, 50, 93, 32, 44, 10, 114, 36, 62, 61, 123, 63, > 40, 48, 46, 52, 44, 49, 41, 125, 32, 103, 36, 62, 61, 123, 63, 40, > 48, 46, 50, 44, 49, 41, 125, 32, 98, 36, 62, 61, 123, 63, 40, 48, > 46, 54, 44, 49, 41, 125, 10, 45, 42, 91, 45, 52, 93, 32, 36, 123, > 114, 36, 62, 125, 32, 45, 42, 91, 45, 51, 93, 32, 36, 123, 103, 36, > 62, 125, 32, 45, 42, 91, 45, 50, 93, 32, 36, 123, 98, 36, 62, 125, > 10, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 32, 45, 110, 91, > 45, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 45, 100, 111, 110, 101, 10, 45, 97, 91, 45, 53, 45, 45, 49, 93, > 32, 120, 10, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 50, 48, 37, 44, 49, 44, 52, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 49, 10, 45, 98, 97, 108, 108, 32, 54, 52, 44, 123, 50, 53, 53, 42, > 36, 114, 51, 125, 44, 123, 50, 53, 53, 42, 36, 103, 51, 125, 44, 123, > 50, 53, 53, 42, 36, 98, 51, 125, 32, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 52, 53, 48, 44, 53, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, > 32, 55, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 97, 117, 116, 111, > 99, 114, 111, 112, 91, 45, 49, 93, 10, 45, 100, 114, 111, 112, 95, 115, > 104, 97, 100, 111, 119, 91, 45, 49, 93, 32, 49, 48, 44, 49, 48, 44, > 49, 37, 44, 48, 46, 53, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, > 34, 36, 49, 34, 44, 48, 44, 48, 44, 53, 51, 44, 49, 44, 50, 53, > 53, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 52, 44, 52, > 44, 48, 32, 91, 45, 49, 93, 120, 51, 32, 45, 100, 105, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 55, 32, 45, 97, 91, 45, 52, 45, 45, 49, > 93, 32, 99, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 44, > 48, 46, 53, 10, 45, 114, 50, 100, 121, 91, 45, 49, 93, 32, 53, 48, > 37, 10, 45, 105, 91, 45, 50, 93, 32, 49, 50, 48, 37, 44, 49, 50, > 48, 37, 44, 49, 44, 51, 44, 50, 53, 53, 32, 45, 112, 108, 97, 115, > 109, 97, 91, 45, 50, 93, 32, 49, 44, 49, 32, 45, 115, 91, 45, 50, > 93, 32, 99, 10, 45, 110, 91, 45, 52, 93, 32, 49, 53, 48, 44, 50, > 53, 53, 32, 45, 110, 91, 45, 51, 93, 32, 49, 56, 48, 44, 50, 53, > 53, 32, 45, 110, 91, 45, 50, 93, 32, 50, 48, 48, 44, 50, 53, 53, > 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 10, 45, 98, 108, > 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, > 10, 45, 102, 114, 97, 109, 101, 32, 48, 44, 49, 44, 48, 44, 48, 44, > 48, 32, 45, 102, 114, 97, 109, 101, 32, 48, 44, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 108, 111, > 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 50, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 34, 36, 123, 49, 61, 80, 108, 117, 103, 45, 105, 110, > 32, 102, 111, 114, 32, 71, 73, 77, 80, 125, 34, 10, 45, 105, 102, 32, > 64, 35, 32, 45, 107, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 116, 111, 95, 114, 103, 98, 32, 48, 32, 45, 116, 91, 45, 49, 93, > 32, 34, 71, 92, 52, 55, 77, 73, 67, 34, 44, 48, 44, 48, 44, 53, > 51, 44, 49, 44, 49, 32, 45, 108, 97, 98, 101, 108, 91, 45, 49, 93, > 10, 54, 44, 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, > 49, 93, 32, 49, 53, 48, 44, 50, 53, 53, 32, 45, 112, 111, 105, 110, > 116, 91, 45, 49, 93, 32, 48, 32, 45, 109, 97, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, 48, 44, > 48, 32, 45, 98, 91, 45, 49, 93, 32, 50, 32, 45, 114, 91, 45, 49, > 93, 32, 50, 48, 48, 37, 44, 50, 48, 48, 37, 44, 49, 44, 51, 44, > 54, 32, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 54, 48, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 119, 97, 114, 112, 95, 112, 101, 114, 115, 112, > 101, 99, 116, 105, 118, 101, 91, 45, 49, 93, 32, 48, 46, 53, 44, 48, > 44, 49, 44, 53, 48, 44, 53, 48, 44, 48, 32, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 48, 44, 45, 49, 48, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, > 32, 48, 46, 56, 44, 50, 32, 45, 42, 91, 45, 49, 93, 32, 49, 56, > 48, 32, 45, 45, 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 91, > 45, 49, 93, 32, 50, 48, 44, 48, 44, 52, 53, 44, 48, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 48, 32, 45, 109, 97, 120, 91, 45, 51, 45, > 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, > 40, 48, 59, 49, 50, 56, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 44, 51, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 109, 105, 110, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 51, 50, 37, 44, > 55, 53, 37, 44, 49, 51, 44, 51, 44, 49, 44, 50, 53, 53, 32, 45, > 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 49, 50, > 56, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 10, 45, 105, 102, 32, > 123, 64, 35, 62, 49, 125, 32, 45, 42, 91, 94, 48, 93, 32, 48, 46, > 52, 53, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, 93, 44, 123, 40, 119, > 45, 64, 123, 48, 44, 119, 125, 41, 47, 50, 125, 44, 123, 40, 104, 45, > 64, 123, 48, 44, 104, 125, 41, 47, 50, 125, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 108, 111, > 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 49, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 34, 36, 123, 49, 61, 80, 108, 117, 103, 45, 105, 110, > 32, 102, 111, 114, 32, 71, 73, 77, 80, 125, 34, 10, 45, 105, 102, 32, > 64, 35, 32, 114, 97, 116, 105, 111, 61, 123, 119, 47, 104, 125, 32, 45, > 101, 108, 115, 101, 32, 114, 97, 116, 105, 111, 61, 49, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 109, 32, 49, 49, 56, 44, 52, 52, 44, 49, > 44, 49, 32, 45, 116, 32, 34, 71, 92, 52, 55, 77, 73, 67, 34, 44, > 51, 44, 45, 54, 44, 53, 51, 44, 49, 44, 50, 53, 53, 32, 45, 114, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 44, 49, 32, > 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 50, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 44, 48, 46, > 53, 32, 45, 98, 32, 49, 46, 53, 10, 45, 105, 115, 111, 115, 117, 114, > 102, 97, 99, 101, 51, 100, 32, 53, 48, 37, 10, 45, 99, 111, 108, 51, > 100, 32, 123, 63, 40, 49, 53, 48, 44, 50, 53, 53, 41, 125, 44, 123, > 63, 40, 49, 53, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 49, > 53, 48, 44, 50, 53, 53, 41, 125, 10, 45, 115, 112, 104, 101, 114, 101, > 51, 100, 32, 56, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, > 123, 63, 40, 49, 53, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, > 49, 53, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 49, 53, 48, > 44, 50, 53, 53, 41, 125, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, > 55, 50, 44, 45, 54, 32, 45, 43, 51, 100, 32, 45, 99, 51, 100, 91, > 45, 49, 93, 32, 45, 114, 118, 51, 100, 10, 45, 100, 98, 51, 100, 32, > 48, 32, 45, 115, 108, 51, 100, 32, 48, 46, 50, 32, 45, 115, 115, 51, > 100, 32, 49, 46, 51, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, > 44, 48, 44, 48, 44, 51, 48, 32, 45, 102, 51, 100, 32, 49, 50, 48, > 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 49, 46, 53, 10, 50, 51, > 48, 44, 49, 50, 48, 44, 49, 44, 51, 32, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, > 44, 51, 48, 37, 44, 48, 44, 49, 44, 52, 32, 45, 114, 109, 91, 45, > 50, 93, 32, 45, 116, 32, 34, 36, 49, 34, 44, 51, 54, 37, 44, 55, > 53, 37, 44, 49, 51, 44, 49, 44, 50, 53, 53, 10, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, > 108, 111, 114, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 100, 114, 111, 112, 95, > 115, 104, 97, 100, 111, 119, 32, 54, 44, 54, 44, 50, 10, 45, 105, 91, > 45, 50, 93, 32, 64, 123, 45, 102, 105, 116, 114, 97, 116, 105, 111, 95, > 119, 104, 92, 32, 50, 51, 48, 44, 49, 50, 48, 44, 36, 114, 97, 116, > 105, 111, 125, 44, 49, 44, 51, 10, 45, 114, 97, 110, 100, 91, 45, 50, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 115, 104, 91, 45, 50, 93, 32, > 48, 44, 48, 32, 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 98, 108, 117, 114, 95, 114, 97, 100, 105, 97, > 108, 91, 45, 50, 93, 32, 49, 48, 32, 45, 115, 104, 97, 114, 112, 101, > 110, 91, 45, 50, 93, 32, 54, 48, 48, 10, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 52, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 98, 108, 101, 110, > 100, 32, 97, 108, 112, 104, 97, 10, 103, 105, 109, 112, 95, 108, 111, 103, > 111, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 80, > 108, 117, 103, 45, 105, 110, 32, 102, 111, 114, 32, 71, 73, 77, 80, 92, > 110, 32, 32, 32, 32, 91, 32, 34, 64, 123, 45, 115, 116, 114, 118, 101, > 114, 125, 34, 32, 93, 125, 34, 10, 45, 103, 105, 109, 112, 95, 108, 111, > 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, 117, 110, 100, > 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, 125, 32, 34, > 36, 49, 34, 10, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 101, 110, > 32, 58, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, > 109, 105, 99, 95, 105, 115, 95, 98, 101, 116, 97, 41, 125, 10, 45, 103, > 105, 109, 112, 95, 108, 111, 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, > 57, 41, 41, 125, 32, 34, 80, 108, 117, 103, 45, 105, 110, 32, 102, 111, > 114, 32, 71, 73, 77, 80, 92, 110, 32, 34, 91, 34, 32, 34, 64, 123, > 45, 115, 116, 114, 118, 101, 114, 125, 34, 32, 98, 101, 116, 97, 32, 34, > 93, 10, 45, 101, 108, 115, 101, 10, 45, 103, 105, 109, 112, 95, 108, 111, > 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, 117, 110, 100, > 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, 125, 32, 34, > 80, 108, 117, 103, 45, 105, 110, 32, 102, 111, 114, 32, 71, 73, 77, 80, > 92, 110, 32, 32, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, 115, 116, > 114, 118, 101, 114, 125, 34, 32, 34, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 102, 114, 32, 58, 10, > 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, > 95, 105, 115, 95, 98, 101, 116, 97, 41, 125, 10, 45, 103, 105, 109, 112, > 95, 108, 111, 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, > 117, 110, 100, 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, > 125, 32, 34, 71, 114, 101, 102, 102, 111, 110, 32, 112, 111, 117, 114, 32, > 71, 73, 77, 80, 92, 110, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, > 115, 116, 114, 118, 101, 114, 125, 34, 32, 98, 101, 116, 97, 32, 34, 93, > 10, 45, 101, 108, 115, 101, 10, 45, 103, 105, 109, 112, 95, 108, 111, 103, > 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, 117, 110, 100, 40, > 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, 125, 32, 34, 71, > 114, 101, 102, 102, 111, 110, 32, 112, 111, 117, 114, 32, 71, 73, 77, 80, > 92, 110, 32, 32, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, 115, 116, > 114, 118, 101, 114, 125, 34, 32, 34, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 99, 97, 32, 58, 10, > 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, > 95, 105, 115, 95, 98, 101, 116, 97, 41, 125, 10, 45, 103, 105, 109, 112, > 95, 108, 111, 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, > 117, 110, 100, 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, > 125, 32, 34, 32, 32, 112, 101, 114, 32, 97, 108, 32, 71, 73, 77, 80, > 92, 110, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, 115, 116, 114, 118, > 101, 114, 125, 34, 32, 98, 101, 116, 97, 32, 34, 93, 10, 45, 101, 108, > 115, 101, 10, 45, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 118, 101, > 114, 115, 105, 111, 110, 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, 46, > 53, 44, 51, 46, 52, 57, 41, 41, 125, 32, 34, 32, 32, 112, 101, 114, > 32, 97, 108, 32, 71, 73, 77, 80, 92, 110, 32, 32, 32, 32, 34, 91, > 34, 32, 34, 64, 123, 45, 115, 116, 114, 118, 101, 114, 125, 34, 32, 34, > 93, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 100, 105, > 115, 112, 108, 97, 121, 95, 102, 105, 108, 116, 101, 114, 95, 115, 111, 117, > 114, 99, 101, 115, 32, 58, 10, 45, 105, 102, 32, 64, 35, 32, 45, 107, > 91, 48, 93, 32, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, > 105, 116, 121, 32, 45, 102, 32, 48, 32, 45, 101, 108, 115, 101, 32, 50, > 53, 54, 44, 50, 53, 54, 32, 45, 101, 110, 100, 105, 102, 10, 45, 108, > 91, 93, 32, 45, 103, 105, 109, 112, 95, 102, 105, 108, 116, 101, 114, 95, > 115, 111, 117, 114, 99, 101, 115, 32, 45, 121, 32, 120, 32, 45, 97, 32, > 121, 32, 45, 111, 110, 102, 97, 105, 108, 32, 40, 48, 41, 32, 45, 101, > 110, 100, 108, 10, 45, 102, 91, 48, 93, 32, 54, 52, 10, 45, 116, 101, > 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 48, 93, 32, 34, 69, > 110, 97, 98, 108, 101, 100, 32, 101, 120, 116, 101, 114, 110, 97, 108, 32, > 115, 111, 117, 114, 99, 101, 115, 58, 92, 110, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 44, 53, 44, > 53, 44, 49, 51, 44, 49, 44, 49, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 64, 123, 45, 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, 125, 32, > 112, 97, 116, 104, 61, 64, 123, 45, 112, 97, 116, 104, 95, 117, 115, 101, > 114, 125, 47, 32, 45, 101, 108, 115, 101, 32, 112, 97, 116, 104, 61, 64, > 123, 45, 112, 97, 116, 104, 95, 117, 115, 101, 114, 125, 47, 46, 32, 45, > 101, 110, 100, 105, 102, 10, 105, 61, 49, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 104, 125, 10, 45, 45, 114, 111, 119, 115, 91, 45, 49, 93, > 32, 36, 62, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 45, > 51, 125, 39, 61, 61, 39, 123, 39, 104, 116, 116, 112, 39, 125, 125, 32, > 45, 114, 101, 112, 108, 97, 99, 101, 91, 45, 49, 93, 32, 49, 44, 51, > 50, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, > 48, 93, 32, 91, 36, 105, 93, 34, 32, 34, 64, 123, 45, 49, 44, 116, > 125, 44, 53, 44, 123, 51, 50, 43, 49, 53, 42, 36, 105, 125, 44, 49, > 51, 44, 49, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 32, > 105, 61, 123, 36, 105, 43, 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, > 105, 102, 32, 36, 112, 97, 116, 104, 64, 123, 45, 49, 44, 116, 125, 32, > 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 48, 93, > 32, 91, 36, 105, 93, 34, 32, 34, 64, 123, 45, 49, 44, 116, 125, 34, > 32, 40, 108, 111, 99, 97, 108, 32, 102, 105, 108, 101, 41, 34, 44, 53, > 44, 123, 51, 50, 43, 49, 53, 42, 36, 105, 125, 44, 49, 51, 44, 49, > 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 32, 105, 61, 123, 36, 105, > 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 102, 114, 105, > 101, 110, 100, 115, 32, 58, 10, 45, 105, 102, 32, 64, 35, 32, 114, 97, > 116, 105, 111, 61, 123, 119, 47, 104, 125, 32, 45, 101, 108, 115, 101, 32, > 114, 97, 116, 105, 111, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 32, 45, 95, 104, 101, 97, 114, 116, 56, 48, 120, 55, 51, 32, > 45, 115, 99, 97, 108, 101, 51, 120, 32, 45, 114, 32, 49, 53, 48, 37, > 44, 49, 53, 48, 37, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 10, 45, 45, 42, 91, 45, 49, 93, 32, 55, 48, > 32, 45, 45, 42, 91, 45, 50, 93, 32, 49, 49, 48, 32, 45, 45, 42, > 91, 45, 51, 93, 32, 50, 53, 53, 32, 45, 42, 91, 45, 52, 93, 32, > 50, 53, 53, 32, 45, 97, 32, 99, 10, 45, 98, 108, 117, 114, 95, 114, > 97, 100, 105, 97, 108, 32, 52, 32, 45, 115, 104, 97, 114, 112, 101, 110, > 32, 51, 48, 48, 10, 45, 105, 91, 45, 50, 93, 32, 64, 123, 45, 102, > 105, 116, 114, 97, 116, 105, 111, 95, 119, 104, 92, 32, 123, 119, 125, 44, > 123, 104, 125, 44, 36, 114, 97, 116, 105, 111, 125, 44, 49, 44, 51, 10, > 45, 114, 97, 110, 100, 91, 45, 50, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 115, 104, 91, 45, 50, 93, 32, 49, 44, 50, 32, 45, 47, 91, 45, > 49, 93, 32, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 108, > 117, 114, 95, 114, 97, 100, 105, 97, 108, 91, 45, 50, 93, 32, 49, 48, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 50, 93, 32, 54, 48, > 48, 10, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, > 50, 93, 44, 49, 44, 52, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, > 46, 53, 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, > 49, 49, 51, 44, 54, 55, 44, 49, 44, 49, 44, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 34, 71, 114, 101, 101, 116, 105, 110, 103, 115, 32, 116, > 111, 92, 110, 32, 32, 97, 108, 108, 32, 71, 92, 52, 55, 77, 73, 67, > 92, 110, 32, 32, 102, 114, 105, 101, 110, 100, 115, 33, 34, 44, 50, 44, > 45, 50, 44, 50, 51, 44, 49, 44, 49, 10, 45, 45, 100, 105, 108, 97, > 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 42, 91, 45, 50, 93, 32, > 50, 53, 53, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 50, 93, 32, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 123, 40, 64, 123, > 45, 51, 44, 119, 125, 45, 64, 123, 45, 50, 44, 119, 125, 41, 47, 50, > 125, 44, 123, 40, 64, 123, 45, 51, 44, 104, 125, 45, 64, 123, 45, 50, > 44, 104, 125, 41, 47, 50, 46, 50, 125, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 49, 93, 10, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, > 95, 104, 101, 97, 114, 116, 56, 48, 120, 55, 51, 32, 58, 10, 52, 48, > 44, 55, 51, 44, 49, 44, 49, 44, 48, 32, 45, 101, 108, 108, 105, 112, > 115, 101, 32, 50, 50, 44, 50, 50, 44, 50, 48, 44, 50, 48, 44, 48, > 44, 49, 44, 49, 32, 45, 112, 111, 108, 121, 103, 111, 110, 32, 51, 44, > 55, 44, 51, 55, 44, 52, 50, 44, 55, 50, 44, 52, 50, 44, 50, 55, > 44, 49, 44, 49, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, > 45, 97, 32, 120, 10, 103, 105, 109, 112, 95, 103, 109, 105, 99, 107, 121, > 32, 58, 10, 45, 114, 109, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 48, 125, 32, 45, 103, 109, 105, 99, 107, 121, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 103, 109, 105, 99, 107, 121, > 95, 119, 105, 108, 98, 101, 114, 10, 45, 101, 108, 115, 101, 32, 45, 114, > 111, 100, 100, 121, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 103, 109, 105, 99, 107, 121, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 114, > 109, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 10, 102, 105, > 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, 95, 116, > 109, 112, 125, 47, 103, 109, 105, 99, 107, 121, 95, 115, 109, 97, 108, 108, > 46, 99, 105, 109, 103, 122, 10, 117, 114, 108, 61, 104, 116, 116, 112, 58, > 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, > 103, 101, 46, 110, 101, 116, 47, 105, 109, 103, 47, 103, 109, 105, 99, 107, > 121, 95, 115, 109, 97, 108, 108, 46, 99, 105, 109, 103, 122, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 10, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, > 125, 47, 103, 109, 105, 99, 107, 121, 95, 119, 105, 108, 98, 101, 114, 95, > 115, 109, 97, 108, 108, 46, 99, 105, 109, 103, 122, 10, 117, 114, 108, 61, > 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, > 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, 105, 109, 103, 47, > 103, 109, 105, 99, 107, 121, 95, 119, 105, 108, 98, 101, 114, 95, 115, 109, > 97, 108, 108, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, 101, 10, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, > 95, 116, 109, 112, 125, 47, 114, 111, 100, 100, 121, 95, 115, 109, 97, 108, > 108, 46, 99, 105, 109, 103, 122, 10, 117, 114, 108, 61, 104, 116, 116, 112, > 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 47, 105, 109, 103, 47, 114, 111, 100, 100, > 121, 95, 115, 109, 97, 108, 108, 46, 99, 105, 109, 103, 122, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 102, 105, 108, 101, 110, 97, > 109, 101, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, > 115, 101, 32, 45, 105, 32, 36, 117, 114, 108, 32, 45, 111, 32, 36, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 50, 100, 121, 32, 36, 104, 32, 45, 45, 32, 50, 53, 53, 32, 45, > 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 51, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 32, 45, 43, 32, 50, 53, 53, 10, 103, > 105, 109, 112, 95, 97, 114, 114, 97, 121, 95, 102, 97, 100, 101, 32, 58, > 10, 45, 105, 102, 32, 123, 36, 55, 38, 49, 125, 32, 45, 109, 105, 114, > 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 105, 102, 32, 45, 105, 102, > 32, 123, 36, 55, 62, 49, 125, 32, 45, 109, 105, 114, 114, 111, 114, 32, > 121, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 114, 114, 97, 121, 95, > 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 44, 36, 53, 44, 36, 54, > 44, 36, 56, 10, 45, 115, 104, 105, 102, 116, 32, 45, 36, 51, 37, 44, > 45, 36, 52, 37, 44, 48, 44, 48, 44, 50, 10, 103, 105, 109, 112, 95, > 97, 114, 114, 97, 121, 95, 102, 97, 100, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, > 95, 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, > 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 48, 10, 103, 105, 109, > 112, 95, 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, 111, 114, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 55, 61, 48, 125, 10, 45, 105, > 102, 32, 123, 36, 53, 61, 61, 49, 125, 32, 45, 109, 105, 114, 114, 111, > 114, 32, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 50, > 125, 32, 45, 109, 105, 114, 114, 111, 114, 32, 121, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 53, 61, 61, 51, 125, 32, 45, 114, 111, 116, 97, 116, > 101, 32, 57, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, > 52, 125, 32, 45, 114, 111, 116, 97, 116, 101, 32, 49, 56, 48, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 53, 125, 32, 45, 114, 111, > 116, 97, 116, 101, 32, 50, 55, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 36, 55, 10, 45, 105, 102, 32, 123, 36, 52, 61, 61, > 48, 125, 32, 45, 99, 111, 108, 117, 109, 110, 115, 32, 48, 44, 123, 49, > 48, 48, 45, 36, 55, 125, 37, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 52, 61, 61, 49, 125, 32, 45, 114, 111, 119, 115, 32, 48, 44, 123, 49, > 48, 48, 45, 36, 55, 125, 37, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 52, 61, 61, 50, 125, 32, 45, 122, 32, 48, 44, 48, 44, 123, 49, 48, > 48, 45, 36, 55, 125, 37, 44, 123, 49, 48, 48, 45, 36, 55, 125, 37, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 52, 61, 61, 51, 125, 32, 45, > 122, 32, 123, 36, 55, 47, 50, 125, 37, 44, 123, 36, 55, 47, 50, 125, > 37, 44, 123, 49, 48, 48, 45, 36, 55, 47, 50, 125, 37, 44, 123, 49, > 48, 48, 45, 36, 55, 47, 50, 125, 37, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 115, 104, 105, 102, 116, 32, 45, > 36, 50, 37, 44, 45, 36, 51, 37, 44, 48, 44, 48, 44, 50, 10, 45, > 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, 111, 114, 32, 36, 49, 44, > 36, 52, 44, 36, 54, 10, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, > 95, 109, 105, 114, 114, 111, 114, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, 95, 109, 105, > 114, 114, 111, 114, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, > 44, 36, 53, 44, 48, 44, 36, 55, 10, 103, 105, 109, 112, 95, 97, 114, > 114, 97, 121, 95, 99, 111, 108, 111, 114, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 10, 36, 49, > 44, 36, 50, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 99, 111, 108, 111, > 114, 109, 111, 100, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 115, > 125, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 36, 51, 32, 45, 42, 91, 45, 50, 93, 32, 123, > 49, 45, 36, 51, 125, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, > 32, 58, 10, 45, 115, 104, 105, 102, 116, 32, 45, 36, 51, 37, 44, 45, > 36, 52, 37, 44, 48, 44, 48, 44, 50, 10, 45, 105, 102, 32, 123, 36, > 53, 38, 49, 125, 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 105, 102, 32, 123, 36, 53, 62, 49, 125, > 32, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 97, 114, 114, 97, 121, 32, 36, 49, 44, 36, 50, 44, 36, > 54, 10, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 114, 114, > 97, 121, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, > 53, 44, 48, 10, 103, 105, 109, 112, 95, 97, 115, 99, 105, 105, 97, 114, > 116, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 97, > 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 123, 49, 48, 94, 36, > 55, 125, 32, 45, 98, 32, 36, 56, 37, 32, 45, 110, 32, 48, 44, 50, > 53, 53, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 32, 100, > 105, 99, 116, 61, 34, 36, 50, 34, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 49, 125, 32, 100, 105, 99, 116, 61, 34, 32, 48, 49, > 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, > 100, 105, 99, 116, 61, 34, 32, 48, 49, 50, 51, 52, 53, 54, 55, 56, > 57, 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, > 32, 100, 105, 99, 116, 61, 34, 32, 97, 98, 99, 100, 101, 102, 103, 104, > 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, > 121, 122, 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 52, > 125, 32, 100, 105, 99, 116, 61, 34, 32, 65, 66, 67, 68, 69, 70, 71, > 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, > 88, 89, 90, 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 53, 125, 32, 100, 105, 99, 116, 61, 34, 32, 33, 92, 48, 52, 50, 92, > 35, 36, 37, 38, 92, 48, 52, 55, 40, 41, 42, 43, 44, 45, 46, 47, > 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, > 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, > 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 49, 51, 51, 92, > 92, 92, 49, 51, 53, 94, 95, 92, 49, 52, 48, 97, 98, 99, 100, 101, > 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, > 118, 119, 120, 121, 122, 92, 49, 55, 51, 124, 92, 49, 55, 52, 126, 34, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 54, 125, 32, 100, > 105, 99, 116, 61, 34, 32, 92, 49, 54, 92, 49, 55, 92, 50, 48, 92, > 50, 49, 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 55, > 125, 32, 100, 105, 99, 116, 61, 34, 32, 92, 50, 48, 48, 92, 50, 48, > 49, 92, 50, 48, 50, 92, 50, 48, 51, 92, 50, 48, 52, 92, 50, 48, > 53, 92, 50, 48, 54, 92, 50, 48, 55, 92, 50, 49, 48, 92, 50, 49, > 49, 92, 50, 49, 50, 92, 50, 49, 51, 92, 50, 49, 52, 92, 50, 49, > 53, 92, 50, 49, 54, 92, 50, 49, 55, 92, 50, 50, 48, 92, 50, 50, > 49, 92, 50, 50, 50, 92, 50, 50, 51, 92, 50, 50, 52, 92, 50, 50, > 53, 92, 50, 50, 54, 92, 50, 50, 55, 92, 50, 51, 48, 92, 50, 51, > 49, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 54, 61, 61, 49, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 45, 51, 32, 45, > 45, 105, 109, 103, 50, 97, 115, 99, 105, 105, 32, 36, 100, 105, 99, 116, > 44, 36, 51, 44, 36, 52, 37, 44, 36, 53, 44, 34, 36, 45, 50, 34, > 47, 34, 36, 45, 49, 34, 10, 45, 101, 108, 115, 101, 32, 45, 45, 105, > 109, 103, 50, 97, 115, 99, 105, 105, 32, 36, 100, 105, 99, 116, 44, 36, > 51, 44, 36, 52, 37, 44, 36, 53, 10, 45, 101, 110, 100, 105, 102, 10, > 119, 104, 61, 64, 123, 125, 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, > 48, 125, 32, 45, 107, 91, 45, 49, 93, 32, 45, 110, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 108, 105, 102, 32, 123, 36, 54, 61, 61, 49, 125, > 32, 45, 107, 91, 45, 49, 93, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 54, 61, 61, 50, 124, 124, 36, 54, 61, 61, 51, 125, 10, > 45, 114, 91, 48, 93, 32, 36, 119, 104, 44, 49, 44, 49, 48, 48, 37, > 44, 49, 10, 45, 105, 102, 32, 123, 36, 57, 62, 61, 55, 125, 32, 45, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 57, 37, 55, 125, 32, 45, > 113, 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 123, 97, 114, 103, > 40, 36, 57, 37, 55, 44, 50, 44, 51, 44, 52, 44, 56, 44, 49, 50, > 44, 49, 54, 41, 45, 49, 125, 44, 49, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 91, 48, 93, 32, 91, 49, 93, 44, 91, 49, 93, > 44, 49, 44, 49, 48, 48, 37, 32, 45, 42, 91, 48, 93, 32, 91, 49, > 93, 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, 50, 125, 32, 45, 114, > 109, 91, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 42, 91, 49, 93, > 32, 50, 53, 53, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 97, 115, 99, 105, 105, 97, 114, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 103, 105, 109, 112, 95, > 97, 115, 99, 105, 105, 97, 114, 116, 32, 36, 49, 44, 34, 36, 50, 34, > 44, 36, 123, 51, 45, 45, 52, 125, 44, 48, 44, 102, 111, 111, 44, 102, > 111, 111, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, > 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 99, 104, 101, 115, 115, 98, 111, 97, 114, 100, 32, 58, 10, 45, 116, 111, > 95, 114, 103, 98, 97, 32, 45, 99, 104, 101, 115, 115, 98, 111, 97, 114, > 100, 32, 36, 123, 49, 45, 49, 52, 125, 10, 103, 105, 109, 112, 95, 99, > 104, 101, 115, 115, 98, 111, 97, 114, 100, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, > 104, 101, 115, 115, 98, 111, 97, 114, 100, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 100, 105, 99, 101, 115, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 54, 32, 123, 50, 42, 36, 50, 125, 44, > 123, 50, 42, 36, 50, 125, 32, 45, 95, 100, 105, 99, 101, 36, 62, 32, > 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 51, 37, 50, 125, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 54, 45, 45, 49, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 114, 97, 109, 101, 95, > 114, 111, 117, 110, 100, 91, 45, 54, 45, 45, 49, 93, 32, 49, 48, 44, > 49, 48, 44, 48, 44, 48, 44, 49, 50, 56, 44, 49, 50, 56, 44, 49, > 50, 56, 44, 48, 10, 45, 114, 50, 100, 121, 91, 45, 54, 45, 45, 49, > 93, 32, 36, 50, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 120, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, > 45, 108, 91, 36, 62, 44, 45, 49, 93, 10, 45, 45, 108, 117, 109, 105, > 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, 114, 118, 91, 49, 44, 50, > 93, 32, 45, 114, 91, 48, 44, 49, 93, 32, 123, 49, 48, 48, 42, 36, > 49, 47, 36, 50, 125, 37, 44, 123, 49, 48, 48, 42, 36, 49, 47, 36, > 50, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 113, 117, > 97, 110, 116, 105, 122, 101, 91, 49, 93, 32, 54, 44, 48, 10, 45, 42, > 91, 45, 50, 93, 32, 36, 50, 32, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 45, 50, 93, 32, 48, 44, 49, 32, 45, 114, 91, 45, 50, 93, > 32, 123, 36, 50, 42, 49, 48, 48, 125, 37, 44, 123, 36, 50, 42, 49, > 48, 48, 125, 37, 10, 36, 50, 44, 36, 50, 44, 49, 44, 50, 44, 39, > 105, 102, 40, 99, 44, 121, 44, 120, 41, 39, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 51, 93, 44, 91, 45, 51, 93, 44, 49, 44, 50, 44, > 48, 44, 50, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, 32, 45, 45, > 119, 97, 114, 112, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 51, 93, 10, 45, 105, 102, 32, 123, 36, > 51, 60, 50, 125, 32, 45, 114, 109, 91, 48, 93, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 10, 45, 101, 108, 115, 101, 32, 45, 114, 91, 48, > 93, 32, 91, 50, 93, 44, 91, 50, 93, 44, 49, 44, 49, 48, 48, 37, > 32, 45, 114, 118, 91, 48, 44, 45, 49, 93, 32, 45, 98, 108, 101, 110, > 100, 91, 48, 44, 45, 49, 93, 32, 109, 117, 108, 116, 105, 112, 108, 121, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, 95, 100, 105, 99, > 101, 48, 32, 58, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 53, 46, 50, 37, 44, 53, > 46, 50, 37, 44, 48, 44, 49, 44, 50, 53, 53, 10, 95, 100, 105, 99, > 101, 49, 32, 58, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 50, 53, 37, 44, 50, 53, 37, 44, 53, 46, 50, 37, 44, 53, > 46, 50, 37, 44, 48, 44, 49, 44, 50, 53, 53, 32, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 55, 53, 37, 44, 55, 53, 37, > 44, 53, 46, 50, 37, 44, 53, 46, 50, 37, 44, 48, 44, 49, 44, 50, > 53, 53, 10, 95, 100, 105, 99, 101, 50, 32, 58, 32, 45, 95, 100, 105, > 99, 101, 49, 32, 45, 95, 100, 105, 99, 101, 48, 10, 95, 100, 105, 99, > 101, 51, 32, 58, 32, 45, 95, 100, 105, 99, 101, 49, 32, 45, 101, 108, > 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 50, 53, 37, 44, 55, 53, > 37, 44, 53, 46, 50, 37, 44, 53, 46, 50, 37, 44, 48, 44, 49, 44, > 50, 53, 53, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, > 32, 55, 53, 37, 44, 50, 53, 37, 44, 53, 46, 50, 37, 44, 53, 46, > 50, 37, 44, 48, 44, 49, 44, 50, 53, 53, 10, 95, 100, 105, 99, 101, > 52, 32, 58, 32, 45, 95, 100, 105, 99, 101, 51, 32, 45, 95, 100, 105, > 99, 101, 48, 10, 95, 100, 105, 99, 101, 53, 32, 58, 32, 45, 95, 100, > 105, 99, 101, 51, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 50, 53, 37, 44, 53, 48, 37, 44, 53, 46, 50, 37, 44, 53, > 46, 50, 37, 44, 48, 44, 49, 44, 50, 53, 53, 32, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 55, 53, 37, 44, 53, 48, 37, > 44, 53, 46, 50, 37, 44, 53, 46, 50, 37, 44, 48, 44, 49, 44, 50, > 53, 53, 10, 103, 105, 109, 112, 95, 101, 120, 116, 114, 97, 99, 116, 95, > 111, 98, 106, 101, 99, 116, 115, 32, 58, 10, 45, 105, 102, 32, 36, 53, > 32, 109, 105, 110, 95, 97, 114, 101, 97, 61, 36, 53, 37, 32, 45, 101, > 108, 115, 101, 32, 109, 105, 110, 95, 97, 114, 101, 97, 61, 53, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 60, 93, 32, 45, 116, 111, 95, 114, 103, 98, 97, > 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 120, 61, 123, > 36, 49, 37, 42, 40, 119, 45, 49, 41, 125, 10, 121, 61, 123, 36, 50, > 37, 42, 40, 104, 45, 49, 41, 125, 10, 99, 111, 108, 111, 114, 61, 64, > 123, 45, 97, 116, 92, 32, 36, 120, 44, 36, 121, 125, 10, 45, 105, 102, > 32, 123, 36, 55, 61, 61, 48, 125, 10, 45, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 99, 111, 108, 111, 114, 32, 36, 51, 44, 48, 44, 36, 99, > 111, 108, 111, 114, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, > 115, 91, 45, 49, 93, 32, 36, 52, 37, 44, 36, 109, 105, 110, 95, 97, > 114, 101, 97, 44, 36, 54, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 119, 125, 32, 45, 45, 122, 91, 48, 93, 32, 64, 123, 49, 44, > 105, 40, 36, 62, 44, 48, 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, > 62, 44, 49, 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 51, > 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 52, 41, 125, 32, > 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 44, 49, 93, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 10, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 36, 51, 44, 48, > 44, 36, 99, 111, 108, 111, 114, 44, 48, 44, 48, 44, 48, 44, 48, 32, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, 112, 111, 110, > 101, 110, 116, 115, 32, 36, 52, 37, 44, 36, 109, 105, 110, 95, 97, 114, > 101, 97, 44, 36, 54, 44, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 55, 61, 61, 50, 125, 10, 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 99, 111, 108, 111, 114, 32, 36, 51, 44, 48, 44, 36, 99, 111, 108, 111, > 114, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 91, 45, > 49, 93, 32, 36, 52, 37, 44, 36, 109, 105, 110, 95, 97, 114, 101, 97, > 44, 36, 54, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, > 125, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 52, 32, 45, 45, > 122, 91, 48, 93, 32, 64, 123, 49, 44, 105, 40, 36, 62, 44, 48, 41, > 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 49, 41, 125, 44, 64, > 123, 49, 44, 105, 40, 36, 62, 44, 51, 41, 125, 44, 64, 123, 49, 44, > 105, 40, 36, 62, 44, 52, 41, 125, 32, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 48, 41, > 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 49, 41, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, > 91, 48, 44, 49, 93, 10, 36, 119, 44, 36, 104, 44, 49, 44, 52, 32, > 45, 102, 99, 91, 45, 49, 93, 32, 36, 99, 111, 108, 111, 114, 10, 45, > 101, 108, 115, 101, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, > 108, 111, 114, 32, 36, 51, 44, 48, 44, 36, 99, 111, 108, 111, 114, 44, > 48, 44, 48, 44, 48, 44, 48, 32, 45, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 36, 52, > 37, 44, 36, 109, 105, 110, 95, 97, 114, 101, 97, 44, 36, 54, 44, 50, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, 112, 111, > 110, 101, 110, 116, 115, 91, 48, 93, 32, 36, 52, 37, 44, 36, 109, 105, > 110, 95, 97, 114, 101, 97, 44, 36, 54, 44, 49, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 119, 125, 32, 120, 61, 123, 105, 40, 36, 62, 44, > 48, 41, 125, 32, 121, 61, 123, 105, 40, 36, 62, 44, 49, 41, 125, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 105, 91, 48, 93, 32, 36, 119, 44, > 36, 104, 44, 49, 44, 52, 32, 45, 106, 91, 48, 93, 32, 91, 49, 93, > 44, 36, 120, 44, 36, 121, 32, 45, 114, 109, 91, 49, 93, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 36, 119, 44, 36, 104, 44, 49, 44, 52, 32, 45, 102, 99, 91, > 45, 49, 93, 32, 36, 99, 111, 108, 111, 114, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 101, 120, 116, 114, 97, 99, 116, 95, 111, 98, 106, 101, 99, > 116, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, > 32, 36, 53, 32, 109, 105, 110, 95, 97, 114, 101, 97, 61, 36, 53, 37, > 32, 45, 101, 108, 115, 101, 32, 109, 105, 110, 95, 97, 114, 101, 97, 61, > 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, > 103, 98, 97, 10, 120, 61, 123, 36, 49, 37, 42, 40, 119, 45, 49, 41, > 125, 10, 121, 61, 123, 36, 50, 37, 42, 40, 104, 45, 49, 41, 125, 10, > 99, 111, 108, 111, 114, 61, 64, 123, 45, 97, 116, 92, 32, 36, 120, 44, > 36, 121, 125, 10, 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, > 108, 111, 114, 32, 36, 51, 44, 48, 44, 36, 99, 111, 108, 111, 114, 44, > 48, 44, 48, 44, 48, 44, 48, 10, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 91, 45, 49, 93, > 32, 36, 52, 37, 44, 36, 109, 105, 110, 95, 97, 114, 101, 97, 44, 36, > 54, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 10, > 120, 121, 99, 111, 111, 114, 100, 115, 61, 64, 123, 49, 44, 105, 40, 36, > 62, 44, 48, 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 49, > 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 51, 41, 125, 44, > 64, 123, 49, 44, 105, 40, 36, 62, 44, 52, 41, 125, 10, 45, 114, 101, > 99, 116, 97, 110, 103, 108, 101, 91, 48, 93, 32, 36, 120, 121, 99, 111, > 111, 114, 100, 115, 44, 48, 46, 51, 44, 48, 44, 48, 44, 50, 53, 53, > 44, 50, 53, 53, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, > 48, 93, 32, 36, 120, 121, 99, 111, 111, 114, 100, 115, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 10, 45, 100, 111, 110, 101, 10, 45, 100, 114, 103, 98, 97, > 91, 48, 93, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, > 101, 91, 48, 93, 32, 123, 119, 125, 34, 32, 111, 98, 106, 101, 99, 116, > 115, 34, 44, 50, 44, 50, 44, 49, 51, 44, 50, 44, 48, 46, 51, 44, > 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 10, > 45, 107, 91, 48, 93, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 120, > 44, 36, 121, 44, 51, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 10, > 45, 99, 105, 114, 99, 108, 101, 32, 36, 120, 44, 36, 121, 44, 51, 44, > 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 105, 109, 97, 103, 101, 103, 114, 105, 100, 32, 58, 10, 45, 105, 109, 97, > 103, 101, 103, 114, 105, 100, 32, 36, 49, 44, 36, 50, 10, 103, 105, 109, > 112, 95, 109, 111, 110, 116, 97, 103, 101, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 34, 36, 123, 50, 61, 65, 125, 34, 10, 99, 111, 100, 101, 48, > 61, 34, 36, 50, 34, 32, 99, 111, 100, 101, 49, 61, 72, 32, 99, 111, > 100, 101, 50, 61, 86, 32, 99, 111, 100, 101, 51, 61, 65, 32, 99, 111, > 100, 101, 52, 61, 66, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, 49, > 38, 38, 36, 52, 60, 48, 46, 53, 125, 32, 45, 114, 32, 123, 109, 97, > 120, 40, 49, 48, 44, 36, 52, 42, 50, 48, 48, 41, 125, 37, 44, 123, > 109, 97, 120, 40, 49, 48, 44, 36, 52, 42, 50, 48, 48, 41, 125, 37, > 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 105, 102, 32, 123, 36, > 49, 51, 37, 64, 35, 125, 32, 45, 109, 118, 91, 123, 36, 49, 51, 37, > 64, 35, 125, 45, 45, 49, 93, 32, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 49, 124, 124, 36, 49, 50, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 114, 111, 116, 97, > 116, 101, 91, 36, 62, 93, 32, 123, 36, 49, 49, 43, 63, 40, 45, 36, > 49, 50, 44, 36, 49, 50, 41, 125, 44, 49, 44, 48, 32, 45, 100, 111, > 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 111, 110, 116, 97, > 103, 101, 32, 36, 123, 99, 111, 100, 101, 36, 49, 125, 44, 123, 105, 102, > 40, 36, 51, 61, 61, 48, 44, 36, 52, 44, 50, 43, 109, 97, 120, 40, > 48, 44, 36, 52, 45, 48, 46, 53, 41, 41, 125, 44, 36, 49, 52, 44, > 92, 10, 34, 45, 105, 102, 32, 123, 36, 34, 34, 55, 37, 50, 125, 32, > 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 105, 102, 32, 123, 36, 34, 34, 56, 37, 50, 125, 32, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, 102, 32, 34, > 92, 10, 34, 45, 114, 111, 116, 97, 116, 101, 32, 123, 57, 48, 42, 36, > 34, 34, 54, 125, 32, 34, 92, 10, 34, 45, 105, 102, 32, 123, 36, 53, > 124, 124, 36, 54, 125, 32, 34, 92, 10, 34, 45, 114, 32, 123, 109, 97, > 120, 40, 49, 44, 36, 34, 34, 52, 45, 50, 42, 40, 36, 53, 43, 36, > 54, 41, 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 36, 34, 34, 53, > 45, 50, 42, 40, 36, 53, 43, 36, 54, 41, 41, 125, 44, 49, 44, 49, > 48, 48, 37, 44, 50, 32, 34, 92, 10, 34, 45, 102, 114, 97, 109, 101, > 32, 36, 54, 44, 36, 54, 44, 36, 123, 55, 45, 49, 48, 125, 32, 34, > 92, 10, 34, 45, 114, 32, 123, 119, 43, 50, 42, 36, 53, 125, 44, 123, > 104, 43, 50, 42, 36, 53, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 34, 92, 10, 34, 45, > 101, 108, 115, 101, 32, 45, 114, 32, 36, 34, 34, 52, 44, 36, 34, 34, > 53, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 101, 110, 100, 105, > 102, 32, 34, 10, 103, 105, 109, 112, 95, 109, 111, 110, 116, 97, 103, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 34, 36, 123, 50, 61, 65, 125, 34, 10, 119, 61, 123, 119, 125, 32, > 104, 61, 123, 104, 125, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, 49, > 38, 38, 36, 52, 60, 48, 46, 53, 125, 32, 45, 114, 32, 123, 109, 97, > 120, 40, 49, 48, 44, 36, 52, 42, 50, 48, 48, 41, 125, 37, 44, 123, > 109, 97, 120, 40, 49, 48, 44, 36, 52, 42, 50, 48, 48, 41, 125, 37, > 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 100, 114, 103, 98, 97, 10, 99, 111, 100, 101, 48, 61, 34, 36, > 50, 34, 32, 99, 111, 100, 101, 49, 61, 72, 32, 99, 111, 100, 101, 50, > 61, 86, 32, 99, 111, 100, 101, 51, 61, 65, 32, 99, 111, 100, 101, 52, > 61, 66, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 105, 102, 32, > 123, 36, 49, 51, 37, 64, 35, 125, 32, 45, 109, 118, 91, 123, 36, 49, > 51, 37, 64, 35, 125, 45, 45, 49, 93, 32, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 49, 124, 124, 36, 49, 50, > 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 114, 111, > 116, 97, 116, 101, 91, 36, 62, 93, 32, 123, 36, 49, 49, 43, 63, 40, > 45, 36, 49, 50, 44, 36, 49, 50, 41, 125, 44, 49, 44, 48, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 111, 110, > 116, 97, 103, 101, 32, 36, 123, 99, 111, 100, 101, 36, 49, 125, 44, 123, > 105, 102, 40, 36, 51, 61, 61, 48, 44, 36, 52, 44, 50, 43, 109, 97, > 120, 40, 48, 44, 36, 52, 45, 48, 46, 53, 41, 41, 125, 44, 48, 44, > 92, 10, 34, 45, 105, 102, 32, 123, 36, 34, 34, 55, 37, 50, 125, 32, > 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 105, 102, 32, 123, 36, 34, 34, 56, 37, 50, 125, 32, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, 102, 32, 34, > 92, 10, 34, 45, 114, 111, 116, 97, 116, 101, 32, 123, 57, 48, 42, 36, > 34, 34, 54, 125, 32, 34, 92, 10, 34, 45, 105, 102, 32, 123, 36, 53, > 124, 124, 36, 54, 125, 32, 34, 92, 10, 34, 32, 32, 45, 114, 32, 123, > 109, 97, 120, 40, 49, 44, 36, 34, 34, 52, 45, 50, 42, 40, 36, 53, > 43, 36, 54, 41, 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 36, 34, > 34, 53, 45, 50, 42, 40, 36, 53, 43, 36, 54, 41, 41, 125, 44, 49, > 44, 49, 48, 48, 37, 44, 50, 32, 102, 115, 61, 123, 109, 105, 110, 40, > 53, 51, 44, 109, 97, 120, 40, 119, 44, 104, 41, 47, 51, 41, 125, 32, > 34, 92, 10, 34, 32, 32, 45, 102, 114, 97, 109, 101, 32, 36, 54, 44, > 36, 54, 44, 36, 123, 55, 45, 49, 48, 125, 32, 34, 92, 10, 34, 32, > 32, 45, 114, 32, 123, 119, 43, 50, 42, 36, 53, 125, 44, 123, 104, 43, > 50, 42, 36, 53, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, > 44, 48, 46, 53, 44, 48, 46, 53, 32, 34, 92, 10, 34, 32, 32, 48, > 32, 45, 116, 91, 45, 49, 93, 32, 36, 34, 34, 49, 44, 48, 44, 48, > 44, 36, 102, 115, 44, 49, 44, 50, 53, 53, 32, 45, 101, 120, 112, 97, > 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 51, 44, 48, 32, 91, 45, > 49, 93, 120, 51, 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, > 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 123, 51, 43, > 50, 42, 36, 102, 115, 47, 50, 48, 125, 32, 45, 97, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 99, 32, 45, 106, 91, 48, 93, 32, 91, 49, > 93, 44, 123, 53, 43, 36, 53, 43, 36, 54, 125, 44, 123, 36, 53, 43, > 36, 54, 125, 44, 48, 44, 48, 44, 49, 44, 91, 50, 93, 44, 50, 53, > 53, 32, 45, 107, 91, 48, 93, 32, 34, 92, 10, 34, 45, 101, 108, 115, > 101, 32, 34, 92, 10, 34, 32, 32, 45, 114, 32, 36, 34, 34, 52, 44, > 36, 34, 34, 53, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 102, 115, > 61, 123, 109, 105, 110, 40, 53, 51, 44, 109, 97, 120, 40, 119, 44, 104, > 41, 47, 51, 41, 125, 32, 34, 92, 10, 34, 32, 32, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 36, 34, 34, 49, 44, 48, 44, 48, 44, 36, 102, > 115, 44, 49, 44, 50, 53, 53, 32, 45, 101, 120, 112, 97, 110, 100, 95, > 120, 121, 91, 45, 49, 93, 32, 51, 44, 48, 32, 91, 45, 49, 93, 120, > 51, 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 32, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 123, 51, 43, 50, 42, 36, > 102, 115, 47, 50, 48, 125, 32, 45, 97, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 99, 32, 45, 106, 91, 48, 93, 32, 91, 49, 93, 44, 53, > 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 50, 93, 44, 50, 53, 53, > 32, 45, 107, 91, 48, 93, 32, 34, 92, 10, 34, 45, 101, 110, 100, 105, > 102, 32, 34, 10, 110, 119, 61, 123, 119, 125, 32, 110, 104, 61, 123, 104, > 125, 10, 45, 114, 101, 115, 105, 122, 101, 95, 114, 97, 116, 105, 111, 50, > 100, 32, 36, 119, 44, 123, 36, 104, 45, 49, 54, 125, 44, 50, 44, 50, > 10, 45, 100, 114, 103, 98, 97, 10, 45, 105, 91, 48, 93, 32, 49, 48, > 48, 37, 44, 49, 53, 44, 49, 44, 51, 44, 50, 52, 48, 32, 45, 116, > 91, 48, 93, 32, 34, 69, 115, 116, 105, 109, 97, 116, 101, 100, 32, 115, > 105, 122, 101, 32, 58, 32, 34, 123, 114, 111, 117, 110, 100, 40, 49, 48, > 48, 42, 36, 110, 119, 47, 36, 119, 41, 125, 37, 34, 32, 120, 32, 34, > 123, 114, 111, 117, 110, 100, 40, 49, 48, 48, 42, 36, 110, 104, 47, 36, > 104, 41, 125, 37, 44, 50, 44, 48, 44, 49, 54, 32, 45, 114, 91, 48, > 93, 32, 49, 48, 48, 37, 44, 49, 54, 44, 49, 44, 51, 44, 48, 10, > 45, 97, 32, 121, 10, 103, 105, 109, 112, 95, 112, 117, 122, 122, 108, 101, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 60, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, > 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 112, 117, 122, 122, 108, 101, > 32, 36, 119, 44, 36, 104, 44, 36, 49, 44, 36, 50, 44, 36, 51, 44, > 36, 52, 44, 36, 53, 10, 45, 45, 98, 91, 45, 49, 93, 32, 36, 54, > 37, 44, 48, 32, 45, 103, 91, 45, 49, 93, 32, 120, 121, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 45, > 36, 55, 44, 36, 55, 32, 45, 43, 91, 48, 44, 45, 49, 93, 10, 45, > 45, 98, 91, 45, 49, 93, 32, 36, 56, 37, 44, 48, 32, 45, 110, 91, > 45, 49, 93, 32, 48, 44, 49, 32, 45, 42, 91, 45, 49, 93, 32, 45, > 49, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 110, 91, 45, 49, > 93, 32, 123, 40, 50, 53, 53, 45, 36, 57, 41, 47, 50, 53, 53, 125, > 44, 49, 32, 45, 42, 91, 48, 44, 45, 49, 93, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 49, 48, 33, 61, 49, > 48, 48, 124, 124, 36, 49, 49, 124, 124, 36, 49, 50, 124, 124, 36, 49, > 51, 124, 124, 36, 49, 52, 124, 124, 36, 49, 53, 124, 124, 36, 49, 54, > 125, 10, 45, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, 108, 97, 98, > 101, 108, 95, 102, 103, 91, 45, 49, 93, 32, 48, 10, 45, 45, 97, 114, > 101, 97, 95, 102, 103, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 108, > 116, 91, 45, 49, 93, 32, 53, 48, 37, 32, 45, 111, 114, 91, 45, 51, > 93, 32, 91, 45, 49, 93, 32, 45, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 91, 45, 50, 93, 32, 48, 32, 45, 42, 91, 45, 50, > 93, 32, 45, 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, > 32, 45, 108, 97, 98, 101, 108, 91, 45, 49, 93, 32, 48, 44, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 77, 43, 49, 125, 10, 45, > 45, 61, 61, 91, 49, 93, 32, 36, 62, 10, 99, 111, 111, 114, 100, 115, > 61, 64, 123, 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, > 114, 100, 115, 91, 45, 49, 93, 92, 32, 48, 125, 10, 45, 45, 122, 91, > 48, 93, 32, 36, 99, 111, 111, 114, 100, 115, 32, 45, 122, 91, 45, 50, > 93, 32, 36, 99, 111, 111, 114, 100, 115, 32, 45, 114, 118, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 10, 120, 36, 62, 61, 123, 97, 114, 103, > 40, 49, 44, 36, 99, 111, 111, 114, 100, 115, 41, 43, 114, 111, 117, 110, > 100, 40, 119, 47, 50, 41, 125, 32, 121, 36, 62, 61, 123, 97, 114, 103, > 40, 50, 44, 36, 99, 111, 111, 114, 100, 115, 41, 43, 114, 111, 117, 110, > 100, 40, 104, 47, 50, 41, 125, 10, 45, 100, 111, 110, 101, 10, 45, 114, > 109, 91, 48, 44, 49, 93, 10, 45, 105, 102, 32, 36, 49, 52, 32, 45, > 115, 111, 114, 116, 95, 108, 105, 115, 116, 32, 43, 44, 63, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 49, 54, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, > 114, 50, 100, 121, 32, 123, 109, 97, 120, 40, 48, 46, 49, 44, 36, 49, > 48, 43, 36, 49, 49, 42, 63, 40, 45, 49, 44, 49, 41, 41, 125, 37, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 123, 36, 49, 50, 43, 36, 49, > 51, 42, 63, 40, 45, 49, 44, 49, 41, 125, 10, 45, 105, 102, 32, 36, > 49, 53, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 99, 120, 61, 123, 114, 111, 117, > 110, 100, 40, 119, 47, 50, 41, 125, 32, 99, 121, 61, 123, 114, 111, 117, > 110, 100, 40, 104, 47, 50, 41, 125, 10, 45, 115, 104, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 32, 45, 105, 102, 32, 36, 49, 53, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 91, 48, 93, 32, 36, 119, 44, 36, 104, 44, > 49, 44, 52, 10, 45, 106, 91, 48, 93, 32, 91, 45, 50, 93, 44, 123, > 36, 123, 120, 36, 60, 125, 45, 36, 99, 120, 125, 44, 123, 36, 123, 121, > 36, 60, 125, 45, 36, 99, 121, 125, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 101, 108, 115, 101, 10, 45, 105, 91, 48, 93, 32, 36, 119, 44, 36, 104, > 44, 49, 44, 123, 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 64, 35, 45, 49, 125, 10, 45, 114, 50, 100, 121, 91, 45, 49, 93, 32, > 123, 109, 97, 120, 40, 48, 46, 49, 44, 36, 49, 48, 43, 36, 49, 49, > 42, 63, 40, 45, 49, 44, 49, 41, 41, 125, 37, 32, 45, 114, 111, 116, > 97, 116, 101, 91, 45, 49, 93, 32, 123, 36, 49, 50, 43, 36, 49, 51, > 42, 63, 40, 45, 49, 44, 49, 41, 125, 10, 45, 105, 102, 32, 36, 49, > 53, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, > 32, 49, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 99, 120, 61, 123, > 114, 111, 117, 110, 100, 40, 119, 47, 50, 41, 125, 32, 99, 121, 61, 123, > 114, 111, 117, 110, 100, 40, 104, 47, 50, 41, 125, 10, 45, 115, 104, 91, > 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 105, > 102, 32, 36, 49, 53, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, > 93, 32, 51, 32, 45, 101, 110, 100, 105, 102, 10, 45, 106, 91, 48, 93, > 32, 91, 45, 50, 93, 44, 123, 36, 123, 120, 36, 60, 125, 45, 36, 99, > 120, 125, 44, 123, 36, 123, 121, 36, 60, 125, 45, 36, 99, 121, 125, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 112, 117, 122, > 122, 108, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 112, 117, 122, 122, 108, 101, 32, 36, 123, 49, 45, 49, > 53, 125, 44, 48, 10, 103, 105, 109, 112, 95, 116, 97, 113, 117, 105, 110, > 32, 58, 10, 45, 116, 111, 95, 97, 32, 45, 116, 97, 113, 117, 105, 110, > 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 37, > 44, 36, 54, 44, 36, 123, 55, 45, 49, 48, 125, 10, 103, 105, 109, 112, > 95, 114, 111, 116, 97, 116, 101, 95, 116, 105, 108, 101, 97, 98, 108, 101, > 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 45, 97, 114, 114, 97, 121, > 95, 109, 105, 114, 114, 111, 114, 32, 49, 44, 123, 36, 51, 45, 49, 125, > 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 111, 116, 97, 116, > 101, 95, 116, 105, 108, 101, 97, 98, 108, 101, 32, 36, 49, 44, 123, 105, > 102, 40, 36, 51, 61, 61, 48, 44, 36, 50, 44, 36, 50, 47, 50, 41, > 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 105, 102, > 32, 123, 64, 123, 36, 62, 44, 119, 125, 61, 61, 49, 34, 32, 38, 38, > 32, 34, 64, 123, 36, 62, 44, 104, 125, 61, 61, 49, 125, 32, 45, 114, > 109, 32, 45, 95, 103, 105, 109, 112, 95, 110, 111, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 32, 32, 73, 110, 118, 97, 108, 105, 100, 92, 110, > 105, 109, 97, 103, 101, 32, 115, 105, 122, 101, 34, 32, 45, 114, 101, 116, > 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 114, 111, 116, 97, 116, 101, 95, 116, 105, 108, > 101, 115, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, > 111, 116, 97, 116, 101, 95, 116, 105, 108, 101, 115, 32, 36, 51, 44, 36, > 49, 44, 36, 50, 32, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, > 119, 32, 36, 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, 10, 95, 103, > 105, 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 116, 105, > 108, 101, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 116, > 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, 32, 45, 110, 32, 36, 51, > 44, 36, 52, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, > 115, 32, 36, 49, 44, 36, 50, 32, 45, 101, 110, 100, 108, 32, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 116, 105, 108, > 101, 115, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 36, 123, 49, > 45, 52, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 104, > 105, 102, 116, 95, 116, 105, 108, 101, 115, 32, 58, 10, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 115, 104, 105, 102, 116, 95, 116, 105, 108, 101, > 115, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 45, 105, 102, 32, 123, > 36, 52, 60, 49, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 52, 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 99, 32, > 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, > 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 112, 97, 114, 97, > 109, 101, 116, 101, 114, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 58, > 10, 45, 105, 102, 32, 36, 51, 10, 45, 113, 117, 97, 100, 114, 97, 116, > 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, 10, > 45, 101, 108, 115, 101, 10, 45, 108, 105, 110, 101, 97, 114, 105, 122, 101, > 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, > 112, 95, 105, 115, 111, 108, 97, 116, 101, 95, 116, 105, 108, 101, 115, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 97, 10, 45, 105, 102, > 32, 36, 53, 32, 115, 120, 61, 123, 114, 111, 117, 110, 100, 40, 109, 105, > 110, 40, 119, 44, 104, 41, 42, 109, 97, 120, 40, 36, 49, 44, 36, 50, > 41, 47, 49, 48, 48, 41, 125, 32, 115, 121, 61, 36, 115, 120, 32, 45, > 101, 108, 115, 101, 32, 115, 120, 61, 123, 114, 111, 117, 110, 100, 40, 119, > 42, 36, 49, 47, 49, 48, 48, 41, 125, 32, 115, 121, 61, 123, 114, 111, > 117, 110, 100, 40, 104, 42, 36, 50, 47, 49, 48, 48, 41, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 54, 32, 98, 120, 61, > 123, 109, 97, 120, 40, 36, 51, 44, 36, 52, 41, 125, 32, 98, 121, 61, > 36, 98, 120, 32, 45, 101, 108, 115, 101, 32, 98, 120, 61, 36, 51, 32, > 98, 121, 61, 36, 52, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, 32, > 120, 44, 45, 36, 115, 120, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 32, 121, 44, 45, 36, > 115, 121, 32, 45, 114, 32, 49, 48, 48, 37, 44, 123, 49, 48, 48, 43, > 36, 98, 121, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, > 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 97, 32, 121, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 32, 123, 49, 48, > 48, 43, 36, 98, 120, 125, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, > 45, 97, 32, 120, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 98, 111, 107, 101, 104, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 98, 111, 107, 101, > 104, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, > 97, 114, 116, 111, 111, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 99, 97, 114, 116, 111, 111, 110, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, 105, 114, 99, > 108, 101, 95, 97, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 98, 32, 36, 52, 37, 10, 45, 45, 99, 111, 108, 111, > 114, 109, 97, 112, 32, 36, 49, 32, 45, 105, 110, 100, 101, 120, 91, 48, > 93, 32, 91, 49, 93, 44, 48, 44, 48, 10, 91, 48, 93, 44, 91, 48, > 93, 44, 49, 44, 52, 44, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 10, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 36, > 62, 42, 49, 48, 48, 47, 36, 49, 125, 10, 45, 45, 61, 61, 91, 48, > 93, 32, 36, 62, 10, 45, 115, 107, 101, 108, 101, 116, 111, 110, 51, 100, > 91, 45, 49, 93, 32, 50, 44, 50, 44, 48, 44, 49, 44, 48, 10, 45, > 115, 51, 100, 91, 45, 49, 93, 32, 45, 108, 91, 45, 54, 45, 45, 49, > 93, 10, 45, 114, 91, 50, 93, 32, 51, 44, 64, 123, 50, 44, 104, 47, > 51, 125, 44, 49, 44, 49, 44, 45, 49, 10, 49, 44, 64, 123, 50, 44, > 104, 47, 50, 42, 36, 50, 37, 125, 44, 49, 44, 49, 44, 49, 32, 45, > 114, 91, 45, 49, 93, 32, 49, 44, 64, 123, 50, 44, 104, 47, 50, 125, > 44, 49, 44, 49, 44, 52, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, > 50, 48, 48, 37, 32, 45, 42, 91, 50, 44, 45, 49, 93, 32, 45, 121, > 10, 45, 101, 110, 100, 108, 10, 45, 97, 91, 45, 54, 45, 45, 49, 93, > 32, 121, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 64, 123, > 45, 97, 116, 91, 49, 93, 92, 32, 36, 62, 125, 10, 91, 48, 93, 44, > 91, 48, 93, 44, 49, 44, 52, 44, 48, 10, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, > 44, 48, 44, 49, 44, 123, 49, 43, 36, 53, 125, 44, 48, 44, 48, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 51, 44, 51, 32, 45, 99, 111, 108, > 51, 100, 91, 45, 51, 93, 32, 50, 53, 53, 32, 45, 111, 98, 106, 101, > 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 51, 93, 44, 48, 44, > 48, 44, 48, 44, 36, 51, 44, 123, 49, 43, 36, 53, 125, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 98, 108, 101, 110, 100, 91, 50, 44, 45, 49, 93, 32, 97, > 108, 112, 104, 97, 10, 45, 100, 111, 110, 101, 10, 45, 107, 91, 50, 93, > 10, 45, 105, 102, 32, 36, 54, 32, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 51, 32, 45, 108, 116, 91, 45, 49, 93, 32, 49, 32, 45, > 105, 110, 112, 97, 105, 110, 116, 91, 48, 93, 32, 91, 49, 93, 44, 48, > 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 36, 55, 32, 45, 110, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 112, 114, 111, > 103, 114, 101, 115, 115, 32, 49, 48, 48, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 105, 114, 99, 108, > 101, 95, 97, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 99, 105, 114, 99, 108, 101, 95, 97, 98, 115, 116, 114, 97, > 99, 116, 105, 111, 110, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 99, 117, 98, 105, 115, 109, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 49, 32, 45, 99, 117, 98, 105, 115, 109, 32, 36, > 123, 50, 45, 45, 49, 125, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 99, 117, 98, 105, 115, 109, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 117, > 98, 105, 115, 109, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, > 112, 95, 99, 117, 116, 111, 117, 116, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, > 93, 10, 45, 109, 101, 100, 105, 97, 110, 32, 123, 49, 48, 45, 36, 51, > 125, 10, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 36, 49, 10, 45, > 45, 97, 114, 101, 97, 91, 45, 49, 93, 32, 48, 44, 49, 32, 109, 101, > 100, 61, 64, 123, 45, 109, 101, 100, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 105, 110, 112, 97, 105, 110, 116, 95, 104, 111, 108, 101, 115, > 32, 123, 36, 109, 101, 100, 42, 36, 50, 37, 125, 44, 48, 44, 49, 10, > 45, 105, 102, 32, 36, 52, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 99, 117, 116, 111, 117, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, > 117, 116, 111, 117, 116, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 101, 108, 108, 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, > 58, 10, 45, 101, 108, 108, 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, > 36, 123, 94, 48, 125, 10, 103, 105, 109, 112, 95, 101, 108, 108, 105, 112, > 115, 105, 111, 110, 105, 115, 109, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 108, 108, > 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 102, 101, 108, 116, 112, 101, 110, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 45, 103, 105, 109, 112, 95, 104, 97, 114, 100, 115, 107, > 101, 116, 99, 104, 98, 119, 32, 36, 123, 49, 45, 53, 125, 44, 48, 44, > 48, 32, 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, 100, 108, 105, 103, > 104, 116, 32, 45, 101, 114, 111, 100, 101, 95, 111, 99, 116, 32, 36, 54, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 102, 101, 108, 116, 112, 101, 110, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 102, > 101, 108, 116, 112, 101, 110, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 112, 111, 115, 116, 101, 114, 95, 104, 111, 112, 101, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 123, > 49, 48, 94, 36, 49, 125, 32, 45, 112, 111, 115, 116, 101, 114, 95, 104, > 111, 112, 101, 32, 36, 50, 10, 103, 105, 109, 112, 95, 112, 111, 115, 116, > 101, 114, 95, 104, 111, 112, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 112, 111, 115, > 116, 101, 114, 95, 104, 111, 112, 101, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 107, 117, 119, 97, 104, 97, 114, 97, 32, 58, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 107, 117, > 119, 97, 104, 97, 114, 97, 32, 36, 50, 32, 45, 100, 111, 110, 101, 34, > 44, 36, 51, 44, 48, 10, 103, 105, 109, 112, 95, 107, 117, 119, 97, 104, > 97, 114, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 107, 117, 119, 97, 104, 97, 114, > 97, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 108, > 121, 108, 101, 106, 107, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 95, 103, > 105, 109, 112, 95, 108, 121, 108, 101, 106, 107, 95, 112, 97, 105, 110, 116, > 105, 110, 103, 91, 45, 49, 93, 32, 49, 48, 44, 49, 48, 46, 52, 57, > 44, 48, 46, 55, 53, 44, 48, 10, 45, 115, 109, 111, 111, 116, 104, 91, > 45, 49, 93, 32, 51, 48, 48, 44, 48, 46, 50, 54, 44, 49, 44, 48, > 44, 55, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, > 36, 51, 10, 91, 45, 49, 93, 32, 45, 114, 118, 91, 45, 51, 45, 45, > 49, 93, 10, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, > 32, 108, 105, 103, 104, 116, 101, 110, 44, 48, 46, 53, 10, 45, 98, 108, > 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 103, 114, 97, 105, 110, > 109, 101, 114, 103, 101, 44, 49, 10, 45, 103, 105, 109, 112, 95, 107, 117, > 119, 97, 104, 97, 114, 97, 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, > 44, 48, 10, 45, 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, 99, 97, > 110, 118, 97, 115, 91, 45, 49, 93, 32, 36, 51, 44, 52, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 108, 121, 108, 101, 106, 107, 95, 112, 97, 105, 110, 116, 105, > 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 108, 121, 108, 101, 106, 107, 95, 112, > 97, 105, 110, 116, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 95, 103, 105, 109, 112, 95, 108, 121, 108, 101, 106, 107, 95, 112, 97, 105, > 110, 116, 105, 110, 103, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 114, 101, 112, 101, 97, 116, > 32, 36, 49, 32, 45, 98, 32, 36, 51, 32, 45, 117, 110, 115, 104, 97, > 114, 112, 32, 36, 51, 44, 36, 50, 32, 45, 99, 32, 48, 44, 50, 53, > 53, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, > 101, 34, 44, 36, 52, 44, 48, 10, 103, 105, 109, 112, 95, 112, 97, 105, > 110, 116, 105, 110, 103, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 32, 123, 109, 97, 120, > 40, 51, 44, 115, 41, 125, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 114, 118, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 49, 32, 45, 103, 105, 109, 112, 95, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, 49, > 48, 44, 54, 44, 53, 44, 50, 48, 44, 49, 44, 51, 32, 45, 100, 111, > 110, 101, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 115, 111, 116, 114, > 111, 112, 105, 99, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 91, 45, > 49, 93, 32, 123, 49, 48, 48, 42, 36, 50, 125, 44, 48, 46, 50, 44, > 49, 44, 36, 50, 44, 123, 50, 42, 36, 50, 125, 44, 48, 46, 56, 44, > 57, 48, 44, 50, 44, 48, 44, 49, 44, 49, 44, 50, 44, 49, 44, 49, > 54, 10, 45, 103, 105, 109, 112, 95, 109, 105, 120, 95, 108, 97, 98, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 36, 51, 44, 48, 44, 48, > 46, 53, 44, 36, 51, 44, 48, 44, 48, 46, 53, 44, 48, 44, 50, 44, > 48, 10, 45, 105, 102, 32, 36, 53, 32, 45, 103, 105, 109, 112, 95, 115, > 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, 101, 114, 115, 104, 101, 100, > 91, 45, 49, 93, 32, 49, 48, 44, 49, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 115, 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 36, > 52, 44, 48, 44, 49, 44, 49, 44, 49, 10, 45, 114, 118, 32, 45, 97, > 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 112, 97, 105, 110, 116, 105, 110, 103, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, 36, 42, 34, 44, 36, > 45, 49, 10, 103, 105, 109, 112, 95, 112, 101, 110, 95, 100, 114, 97, 119, > 105, 110, 103, 32, 58, 10, 45, 100, 114, 97, 119, 105, 110, 103, 32, 36, > 49, 10, 103, 105, 109, 112, 95, 112, 101, 110, 95, 100, 114, 97, 119, 105, > 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 112, 101, 110, 95, 100, 114, 97, 119, > 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, > 95, 112, 111, 108, 121, 103, 111, 110, 105, 122, 101, 32, 58, 10, 45, 112, > 111, 108, 121, 103, 111, 110, 105, 122, 101, 32, 36, 49, 44, 36, 50, 44, > 123, 36, 51, 94, 50, 125, 44, 36, 52, 44, 36, 53, 10, 45, 105, 102, > 32, 36, 57, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 45, 110, 111, 114, 109, 32, 45, 103, 91, > 45, 49, 93, 32, 120, 121, 44, 49, 32, 45, 110, 101, 113, 91, 45, 50, > 44, 45, 49, 93, 32, 48, 32, 45, 111, 114, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 52, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 99, 111, 108, 111, 114, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, > 49, 44, 49, 44, 49, 44, 36, 54, 44, 36, 55, 44, 36, 56, 44, 36, > 57, 10, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 112, 111, 108, 121, 103, 111, 110, 105, 122, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 112, 111, 108, 121, 103, 111, 110, 105, 122, > 101, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 112, > 111, 115, 116, 101, 114, 95, 101, 100, 103, 101, 115, 32, 58, 10, 45, 105, > 102, 32, 36, 49, 32, 45, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, > 49, 48, 44, 36, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 112, 111, > 115, 116, 101, 114, 95, 101, 100, 103, 101, 115, 32, 36, 123, 50, 45, 55, > 125, 10, 103, 105, 109, 112, 95, 112, 111, 115, 116, 101, 114, 95, 101, 100, > 103, 101, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 112, 111, 115, 116, 101, 114, 95, > 101, 100, 103, 101, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 114, 111, 100, 105, 108, 105, 117, 115, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 114, 111, 100, 105, 108, 105, 117, 115, 32, 36, 123, 49, 45, 53, 44, 55, > 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 54, 32, 45, 115, 109, > 111, 111, 116, 104, 32, 49, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, > 48, 46, 56, 44, 52, 53, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, > 51, 48, 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, 50, 53, > 53, 34, 44, 36, 56, 44, 48, 10, 103, 105, 109, 112, 95, 114, 111, 100, > 105, 108, 105, 117, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 114, 111, 100, 105, 108, > 105, 117, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 105, 115, 109, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, > 111, 95, 114, 103, 98, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, > 95, 110, 111, 114, 109, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 51, > 37, 32, 45, 94, 91, 45, 49, 93, 32, 36, 49, 50, 32, 45, 113, 117, > 97, 110, 116, 105, 122, 101, 91, 45, 49, 93, 32, 36, 54, 44, 48, 44, > 48, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 50, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 54, 10, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 50, 93, 32, 49, 48, 48, 37, 32, 45, 45, > 103, 116, 91, 49, 93, 32, 36, 62, 32, 45, 110, 101, 113, 91, 45, 50, > 93, 32, 48, 32, 45, 111, 114, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 97, 91, 50, 44, 45, 49, 93, 32, 99, 10, 115, 105, 122, 101, 61, 123, > 105, 102, 40, 36, 54, 60, 61, 49, 44, 36, 55, 44, 36, 55, 43, 40, > 36, 56, 45, 36, 55, 41, 42, 36, 62, 47, 40, 36, 54, 45, 49, 41, > 41, 125, 10, 45, 105, 102, 32, 123, 36, 115, 105, 122, 101, 60, 49, 125, > 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 36, 53, 32, 123, 50, 42, 36, 115, 105, 122, 101, 125, 44, > 123, 50, 42, 36, 115, 105, 122, 101, 125, 32, 45, 95, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 105, 115, 109, 36, 49, 91, 45, 49, 93, 32, > 36, 123, 50, 45, 52, 125, 32, 45, 114, 50, 100, 121, 91, 45, 49, 93, > 32, 36, 115, 105, 122, 101, 10, 45, 101, 108, 115, 101, 32, 36, 115, 105, > 122, 101, 44, 36, 115, 105, 122, 101, 32, 45, 95, 103, 105, 109, 112, 95, > 115, 104, 97, 112, 101, 105, 115, 109, 36, 49, 91, 45, 49, 93, 32, 36, > 123, 50, 45, 52, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 110, > 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 101, 120, 112, 97, 110, 100, > 95, 120, 121, 91, 45, 50, 44, 45, 49, 93, 32, 49, 44, 48, 32, 45, > 110, 91, 45, 50, 44, 45, 49, 93, 32, 48, 44, 49, 10, 45, 105, 102, > 32, 123, 36, 49, 48, 60, 49, 125, 32, 45, 100, 105, 108, 97, 116, 101, > 91, 45, 49, 93, 32, 51, 32, 45, 101, 110, 100, 105, 102, 10, 91, 45, > 49, 93, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 45, > 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 34, 45, 112, 97, 99, 107, > 95, 115, 112, 114, 105, 116, 101, 115, 91, 45, 50, 44, 45, 49, 93, 32, > 49, 44, 49, 48, 48, 44, 36, 57, 44, 36, 49, 48, 44, 36, 49, 49, > 34, 44, 123, 36, 62, 42, 49, 48, 48, 47, 36, 54, 125, 44, 123, 40, > 36, 62, 43, 49, 41, 42, 49, 48, 48, 47, 36, 54, 125, 10, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 49, 10, > 45, 100, 111, 110, 101, 10, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, > 32, 57, 55, 10, 45, 114, 109, 91, 49, 93, 10, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 45, 110, 101, 113, > 91, 45, 49, 93, 32, 48, 32, 45, 98, 108, 101, 110, 100, 91, 48, 44, > 45, 49, 93, 32, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, > 48, 32, 45, 42, 91, 49, 93, 32, 50, 53, 53, 32, 45, 97, 32, 99, > 10, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 52, 32, 45, 102, 99, 91, 48, 93, 32, 36, 49, 52, 44, > 36, 49, 53, 44, 36, 49, 54, 44, 36, 49, 55, 10, 45, 98, 108, 101, > 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 114, 112, 114, 111, 103, 114, > 101, 115, 115, 32, 49, 48, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, > 109, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, > 64, 35, 62, 61, 49, 32, 45, 107, 91, 48, 93, 32, 45, 101, 108, 115, > 101, 32, 50, 53, 54, 44, 50, 53, 54, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 95, 103, 105, 109, 112, 95, 110, 111, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 32, 34, 44, 34, 36, 42, 34, 10, 53, 48, 37, 44, > 53, 48, 37, 32, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, > 105, 115, 109, 36, 49, 91, 45, 49, 93, 32, 36, 123, 50, 45, 52, 125, > 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, > 48, 32, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 37, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 10, > 45, 114, 91, 45, 49, 93, 32, 91, 48, 93, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 32, 45, 111, 114, 10, 95, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 105, 115, 109, 48, 32, 58, 10, 45, 102, 32, > 50, 53, 53, 32, 45, 115, 107, 105, 112, 32, 36, 42, 10, 95, 103, 105, > 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, 109, 49, 32, 58, 10, 45, > 112, 111, 108, 121, 103, 111, 110, 32, 51, 44, 53, 48, 37, 44, 48, 44, > 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 32, 45, 115, 107, 105, 112, 32, 36, 42, 10, 95, 103, > 105, 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, 109, 50, 32, 58, 10, > 45, 95, 100, 116, 95, 99, 105, 114, 99, 108, 101, 32, 123, 119, 125, 32, > 45, 114, 109, 91, 45, 50, 93, 32, 45, 115, 107, 105, 112, 32, 36, 42, > 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, 109, 51, > 32, 58, 10, 45, 95, 100, 116, 95, 100, 105, 97, 109, 111, 110, 100, 32, > 123, 119, 125, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 115, 107, 105, > 112, 32, 36, 42, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, > 105, 115, 109, 52, 32, 58, 10, 45, 115, 116, 97, 114, 51, 100, 32, 51, > 44, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 64, 123, 48, 44, > 109, 105, 110, 40, 119, 44, 104, 41, 47, 50, 125, 32, 45, 111, 98, 106, > 101, 99, 116, 51, 100, 91, 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, > 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 32, 45, 107, > 91, 48, 93, 32, 45, 115, 107, 105, 112, 32, 36, 42, 10, 95, 103, 105, > 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, 109, 53, 32, 58, 10, 45, > 115, 116, 97, 114, 51, 100, 32, 52, 44, 49, 32, 45, 42, 51, 100, 91, > 45, 49, 93, 32, 64, 123, 48, 44, 109, 105, 110, 40, 119, 44, 104, 41, > 47, 50, 125, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, 93, > 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 49, 44, 50, 44, 48, 32, 45, 107, 91, 48, 93, 32, 45, 115, 107, 105, > 112, 32, 36, 42, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, > 105, 115, 109, 54, 32, 58, 10, 45, 115, 116, 97, 114, 51, 100, 32, 53, > 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 64, 123, 48, 44, 109, 105, > 110, 40, 119, 44, 104, 41, 47, 50, 125, 32, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, > 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 32, 45, 107, 91, 48, > 93, 32, 45, 115, 107, 105, 112, 32, 36, 42, 10, 95, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 105, 115, 109, 55, 32, 58, 10, 45, 115, 116, > 97, 114, 51, 100, 32, 36, 49, 44, 36, 50, 32, 45, 42, 51, 100, 91, > 45, 49, 93, 32, 64, 123, 48, 44, 109, 105, 110, 40, 119, 44, 104, 41, > 47, 50, 125, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, > 44, 49, 44, 36, 51, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, > 48, 44, 49, 44, 50, 44, 48, 32, 45, 107, 91, 48, 93, 10, 103, 105, > 109, 112, 95, 100, 114, 97, 119, 95, 119, 104, 105, 114, 108, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 100, 114, > 97, 119, 95, 119, 104, 105, 114, 108, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 98, 108, 97, 99, 107, 97, 110, 100, 119, 104, > 105, 116, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 108, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 45, 114, 118, 32, 45, 116, 111, 95, 114, > 103, 98, 91, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, > 45, 42, 91, 45, 51, 93, 32, 36, 49, 32, 45, 98, 91, 45, 51, 93, > 32, 36, 50, 37, 10, 45, 42, 91, 45, 50, 93, 32, 36, 51, 32, 45, > 98, 91, 45, 50, 93, 32, 36, 52, 37, 10, 45, 42, 91, 45, 49, 93, > 32, 36, 53, 32, 45, 98, 91, 45, 49, 93, 32, 36, 54, 37, 10, 45, > 43, 91, 45, 51, 45, 45, 49, 93, 32, 45, 47, 91, 45, 49, 93, 32, > 123, 36, 49, 43, 36, 51, 43, 36, 53, 125, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 97, 112, 112, 108, 121, 95, 103, > 97, 109, 109, 97, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 55, 125, > 10, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 42, 91, 45, > 49, 93, 32, 36, 56, 32, 45, 43, 91, 45, 49, 93, 32, 49, 50, 56, > 32, 45, 43, 91, 45, 49, 93, 32, 36, 57, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 49, 50, > 124, 124, 36, 49, 51, 124, 124, 36, 49, 52, 125, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 91, 45, 49, 93, 120, 50, 10, 45, 110, 111, > 105, 115, 101, 91, 45, 51, 93, 32, 49, 48, 48, 44, 36, 49, 55, 32, > 45, 98, 91, 45, 51, 93, 32, 36, 49, 54, 37, 32, 45, 110, 91, 45, > 51, 93, 32, 45, 36, 49, 50, 44, 36, 49, 50, 10, 45, 110, 111, 105, > 115, 101, 91, 45, 50, 93, 32, 49, 48, 48, 44, 36, 49, 55, 32, 45, > 98, 91, 45, 50, 93, 32, 36, 49, 54, 37, 32, 45, 110, 91, 45, 50, > 93, 32, 45, 36, 49, 51, 44, 36, 49, 51, 10, 45, 110, 111, 105, 115, > 101, 91, 45, 49, 93, 32, 49, 48, 48, 44, 36, 49, 55, 32, 45, 98, > 91, 45, 49, 93, 32, 36, 49, 54, 37, 32, 45, 110, 91, 45, 49, 93, > 32, 45, 36, 49, 52, 44, 36, 49, 52, 10, 45, 45, 116, 111, 110, 101, > 115, 91, 45, 52, 93, 32, 51, 32, 45, 98, 91, 45, 51, 45, 45, 49, > 93, 32, 36, 49, 53, 37, 10, 45, 42, 91, 45, 54, 44, 45, 51, 93, > 32, 45, 42, 91, 45, 52, 44, 45, 50, 93, 32, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 43, 91, 45, 52, 45, 45, 49, 93, 32, 45, > 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 48, 124, 124, 36, 49, 49, > 125, 10, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 105, 91, > 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 49, 44, 36, 49, 49, 10, 45, 105, 91, 45, 51, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 36, 49, 48, 10, 45, > 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, 118, 50, > 114, 103, 98, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 118, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 105, > 102, 32, 36, 49, 56, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 95, 108, 111, 99, 97, 108, 32, 36, 49, 56, 44, 36, 49, 57, 44, 36, > 50, 48, 44, 50, 37, 44, 49, 44, 48, 44, 50, 53, 53, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 50, 50, 32, 45, 110, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 36, 50, 49, 32, 45, 116, 111, 95, 112, 115, 101, 117, 100, 111, 103, > 114, 97, 121, 32, 36, 50, 49, 44, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 98, 108, 97, 99, 107, 97, 110, 100, 119, 104, > 105, 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 98, 108, 97, 99, 107, 97, 110, > 100, 119, 104, 105, 116, 101, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, 108, 98, 119, 32, 58, 10, > 45, 115, 116, 101, 110, 99, 105, 108, 98, 119, 32, 36, 49, 44, 36, 50, > 10, 45, 105, 102, 32, 123, 36, 51, 124, 124, 36, 52, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, > 47, 91, 48, 93, 32, 50, 53, 53, 32, 45, 105, 91, 48, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 36, 52, 32, > 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 49, 44, 36, 51, 32, 45, 97, 91, 48, 45, 50, 93, 32, 99, > 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 48, 93, 10, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, > 108, 98, 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, 108, > 98, 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 99, 104, 97, 114, 99, 111, 97, 108, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, > 93, 10, 45, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 109, 97, 120, 10, 119, 61, 123, 119, 125, 32, 104, 61, > 123, 104, 125, 10, 45, 105, 102, 32, 36, 53, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 53, 48, 37, 44, 49, 53, 48, 37, 44, 49, 44, 49, 44, > 54, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 52, 32, > 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 115, 104, 97, 114, 112, 101, 110, 32, 123, 36, 49, 42, 51, > 125, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 36, 54, 32, 45, 45, 116, 50, 32, 36, 55, 44, 36, 56, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 116, 50, 91, 48, 93, 32, 36, 50, 44, > 36, 51, 10, 45, 105, 102, 32, 123, 33, 36, 49, 53, 125, 32, 45, 101, > 113, 91, 48, 93, 32, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 111, > 114, 10, 45, 45, 42, 91, 48, 93, 32, 36, 49, 48, 32, 45, 45, 42, > 91, 48, 93, 32, 36, 49, 49, 32, 45, 42, 91, 48, 93, 32, 36, 57, > 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 36, 49, 50, 44, 36, 49, 51, 44, 36, 49, > 52, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, 48, > 37, 44, 50, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 99, 104, 97, 114, 99, 111, 97, 108, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 104, > 97, 114, 99, 111, 97, 108, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 105, 122, 101, 95, 99, 111, 109, > 105, 99, 115, 32, 58, 10, 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, > 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 49, 60, 50, 125, 32, 115, 101, 108, 101, 99, > 116, 105, 111, 110, 61, 48, 44, 49, 32, 45, 101, 108, 115, 101, 32, 115, > 101, 108, 101, 99, 116, 105, 111, 110, 61, 48, 44, 49, 44, 50, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 108, 91, 36, 115, 101, 108, 101, 99, 116, > 105, 111, 110, 93, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, > 114, 118, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, > 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 49, 61, 61, 51, 125, 32, 45, 114, 109, 91, 50, 93, 32, 45, 114, 118, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 116, 111, 95, 114, 103, 98, > 97, 91, 48, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 91, 45, 49, 93, 32, 45, 43, 91, 45, 50, 93, 32, 49, > 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 45, 110, 111, 114, 109, 91, 49, 93, 32, > 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 45, 104, 105, 115, > 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 50, 44, 48, 44, 49, > 10, 45, 105, 102, 32, 123, 105, 40, 48, 41, 62, 105, 40, 49, 41, 125, > 32, 45, 42, 91, 45, 50, 93, 32, 45, 49, 32, 45, 43, 91, 45, 50, > 93, 32, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 98, 91, 45, 49, 93, 32, 36, 52, 37, 32, 45, 119, > 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 91, 45, 49, 93, > 32, 49, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 48, 125, 32, 45, > 114, 109, 91, 48, 93, 32, 45, 114, 118, 32, 45, 98, 108, 101, 110, 100, > 91, 48, 44, 49, 93, 32, 109, 117, 108, 116, 105, 112, 108, 121, 32, 105, > 110, 100, 61, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, > 61, 49, 125, 32, 45, 114, 109, 91, 48, 93, 32, 45, 114, 118, 32, 105, > 110, 100, 61, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, > 50, 125, 32, 45, 114, 109, 91, 48, 93, 32, 105, 110, 100, 61, 49, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 51, 125, 32, 45, 114, > 118, 91, 49, 44, 50, 93, 32, 105, 110, 100, 61, 49, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 50, 61, 61, 52, 125, 32, 45, 114, 118, 91, 48, > 44, 49, 93, 32, 105, 110, 100, 61, 50, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 51, 38, 38, 36, 105, 110, 100, 62, 61, > 48, 125, 32, 45, 108, 91, 36, 105, 110, 100, 93, 10, 45, 45, 109, 105, > 120, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 40, 54, 53, 53, 51, > 54, 44, 50, 53, 54, 44, 49, 41, 10, 45, 105, 102, 32, 123, 36, 51, > 61, 61, 49, 48, 125, 32, 45, 100, 111, 10, 105, 77, 61, 64, 123, 49, > 44, 105, 77, 125, 10, 45, 105, 102, 32, 123, 36, 105, 77, 62, 61, 48, > 125, 10, 45, 45, 61, 61, 91, 49, 93, 32, 36, 105, 77, 32, 97, 114, > 101, 97, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, 101, 112, 108, > 97, 99, 101, 91, 49, 93, 32, 36, 105, 77, 44, 45, 49, 10, 45, 45, > 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 91, 48, 93, 10, 45, > 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 97, 114, 101, 97, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 105, > 77, 62, 61, 48, 125, 32, 45, 101, 108, 115, 101, 10, 45, 108, 97, 98, > 101, 108, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, 51, 60, 49, > 48, 125, 32, 45, 37, 91, 45, 49, 93, 32, 123, 36, 51, 43, 49, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 105, 77, 43, 49, 125, 32, 45, 45, 61, 61, 91, 49, 93, 32, 36, > 60, 32, 97, 114, 101, 97, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, > 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 91, 48, 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 48, > 93, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 97, 114, 101, > 97, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 91, 48, 44, 49, 93, 10, 45, 115, 111, 114, 116, 95, 108, 105, > 115, 116, 32, 43, 44, 110, 10, 45, 101, 110, 100, 108, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 10, 103, 105, 109, 112, 95, 99, > 111, 108, 111, 114, 105, 122, 101, 95, 99, 111, 109, 105, 99, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 99, > 111, 108, 111, 114, 105, 122, 101, 95, 99, 111, 109, 105, 99, 115, 32, 36, > 49, 44, 48, 44, 36, 51, 44, 36, 52, 10, 103, 105, 109, 112, 95, 114, > 101, 99, 111, 108, 111, 114, 105, 122, 101, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 10, > 45, 105, 102, 32, 36, 51, 32, 115, 61, 36, 62, 44, 123, 36, 62, 43, > 49, 125, 32, 45, 101, 108, 115, 101, 32, 115, 61, 123, 50, 42, 36, 62, > 125, 44, 123, 50, 42, 36, 62, 43, 49, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 108, 91, 36, 115, 93, 32, 45, 114, 118, 91, 48, 44, 49, > 93, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 48, > 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 50, 93, 10, 45, 116, 111, > 95, 114, 103, 98, 97, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 91, 45, 49, 93, 32, 45, 110, 101, > 113, 91, 45, 49, 93, 32, 48, 10, 45, 115, 114, 103, 98, 50, 114, 103, > 98, 91, 45, 51, 44, 45, 50, 93, 32, 45, 114, 103, 98, 50, 108, 97, > 98, 56, 91, 45, 51, 44, 45, 50, 93, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 45, 51, 93, 32, 48, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 45, 50, 93, 32, 49, 44, 50, 10, 45, 43, 91, 45, > 50, 93, 32, 49, 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 32, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, > 91, 45, 51, 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, > 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 91, 45, 50, > 93, 32, 49, 10, 45, 45, 100, 105, 102, 102, 117, 115, 105, 111, 110, 116, > 101, 110, 115, 111, 114, 115, 91, 45, 51, 93, 32, 36, 50, 44, 49, 44, > 48, 46, 53, 44, 48, 46, 53, 32, 45, 101, 113, 91, 45, 50, 93, 32, > 48, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, > 109, 91, 45, 50, 93, 10, 45, 115, 109, 111, 111, 116, 104, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 123, 36, 49, 42, 56, 48, 125, 44, 48, > 46, 56, 44, 54, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 108, 97, 98, 56, 50, > 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 103, 98, 50, 115, 114, 103, > 98, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 51, 32, 45, 114, 103, > 98, 50, 104, 115, 118, 91, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, > 32, 99, 32, 45, 105, 91, 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 49, 44, 49, 32, 45, 105, 91, 51, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 50, 44, 48, 32, 45, > 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 97, 91, 94, 48, 93, 32, > 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 32, 45, 114, 118, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 10, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 114, 101, 99, 111, 108, 111, 114, 105, 122, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 114, 101, 99, 111, 108, 111, 114, 105, 122, 101, 32, 36, 42, 32, > 45, 97, 32, 120, 10, 103, 105, 109, 112, 95, 98, 119, 114, 101, 99, 111, > 108, 111, 114, 105, 122, 101, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, > 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 36, 52, 32, > 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 53, 61, 61, 48, 125, 10, 40, 36, 123, 57, > 45, 45, 50, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 52, 44, 36, > 56, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, > 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 53, 61, 61, 49, 125, 10, 40, 48, 44, 50, 53, 53, 94, > 48, 44, 50, 53, 53, 94, 48, 44, 50, 53, 53, 94, 50, 53, 53, 44, > 50, 53, 53, 41, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, > 50, 125, 10, 40, 50, 53, 53, 44, 48, 94, 50, 53, 53, 44, 48, 94, > 50, 53, 53, 44, 48, 94, 50, 53, 53, 44, 50, 53, 53, 41, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 51, 125, 10, 40, 48, 44, > 52, 52, 44, 49, 49, 53, 44, 49, 52, 51, 44, 49, 57, 54, 44, 50, > 52, 52, 94, 48, 44, 50, 48, 44, 56, 52, 44, 49, 49, 57, 44, 49, > 56, 52, 44, 50, 51, 53, 94, 48, 44, 53, 44, 52, 52, 44, 55, 51, > 44, 49, 52, 52, 44, 50, 48, 48, 94, 50, 53, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, > 41, 10, 45, 101, 108, 115, 101, 10, 40, 48, 44, 51, 53, 57, 94, 49, > 44, 49, 94, 49, 44, 49, 94, 50, 53, 53, 44, 50, 53, 53, 41, 32, > 45, 114, 91, 45, 49, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 52, > 44, 51, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, > 104, 115, 118, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 36, 54, 61, 61, 48, 125, 32, 45, 114, 91, 45, 49, 93, 32, 50, 53, > 54, 44, 49, 44, 49, 44, 52, 44, 49, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 54, 61, 61, 49, 125, 32, 45, 114, 91, 45, 49, 93, 32, 50, > 53, 54, 44, 49, 44, 49, 44, 52, 44, 51, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 54, 61, 61, 50, 125, 32, 45, 114, 91, 45, 49, 93, 32, > 50, 53, 54, 44, 49, 44, 49, 44, 52, 44, 53, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, 108, 115, 101, 32, 45, > 114, 91, 45, 49, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 52, 44, > 54, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 55, > 61, 61, 49, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 50, > 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 45, 49, 93, 32, 45, 115, > 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, 45, 102, 91, 45, 49, 93, > 32, 120, 47, 119, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 45, 50, > 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 108, 91, 94, 45, 49, 93, 32, 45, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 32, 45, 97, 112, 112, 108, 121, 95, 103, 97, > 109, 109, 97, 32, 123, 49, 48, 94, 36, 49, 125, 32, 45, 45, 32, 49, > 50, 56, 32, 45, 42, 32, 36, 50, 32, 45, 43, 32, 123, 36, 51, 43, > 49, 50, 56, 125, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 101, > 110, 100, 108, 32, 45, 109, 97, 112, 91, 94, 45, 49, 93, 32, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, > 98, 119, 114, 101, 99, 111, 108, 111, 114, 105, 122, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 98, 119, 114, 101, 99, 111, 108, 111, 114, 105, 122, 101, 32, 36, > 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 100, > 105, 116, 104, 101, 114, 101, 100, 98, 119, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, > 48, 93, 10, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 110, > 32, 48, 44, 50, 53, 53, 32, 45, 97, 112, 112, 108, 121, 95, 103, 97, > 109, 109, 97, 32, 123, 49, 48, 94, 36, 49, 125, 32, 45, 45, 32, 49, > 50, 56, 32, 45, 42, 32, 36, 50, 32, 45, 43, 32, 49, 50, 56, 32, > 45, 43, 32, 36, 51, 32, 45, 98, 32, 36, 52, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 32, 45, 100, 105, 116, 104, 101, 114, 101, 100, 98, 119, > 10, 45, 105, 102, 32, 123, 36, 53, 124, 124, 36, 54, 125, 32, 45, 47, > 32, 50, 53, 53, 32, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 50, 32, 45, 102, 99, 91, 48, 93, 32, > 36, 53, 44, 36, 54, 32, 45, 97, 32, 99, 32, 45, 104, 115, 118, 50, > 114, 103, 98, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 100, 105, 116, 104, 101, 114, 101, 100, 98, > 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 100, 105, 116, 104, 101, 114, 101, 100, 98, > 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 104, > 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, 119, 32, 58, 10, 45, 98, > 32, 36, 51, 10, 45, 105, 102, 32, 123, 36, 55, 61, 61, 52, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 45, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, 119, > 32, 36, 49, 44, 36, 50, 44, 36, 52, 44, 36, 53, 44, 36, 54, 32, > 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, 100, 108, 105, 103, 104, 116, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 101, > 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 104, 97, 114, > 100, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 49, 44, 36, 50, 44, > 36, 52, 44, 36, 53, 44, 36, 54, 10, 45, 105, 102, 32, 123, 36, 55, > 38, 49, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 55, 61, 61, 50, 125, > 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 52, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, > 91, 36, 62, 93, 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, > 45, 50, 32, 45, 43, 91, 45, 49, 93, 32, 123, 50, 42, 50, 53, 53, > 125, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 55, 61, 61, 51, 125, 32, 45, 114, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 51, > 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, 119, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, > 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 104, > 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 58, 10, 45, > 98, 32, 36, 49, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 105, > 102, 32, 123, 36, 54, 61, 61, 52, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 45, 104, 111, > 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 123, 50, 45, > 53, 125, 32, 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, 100, 108, 105, > 103, 104, 116, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 123, > 50, 45, 53, 125, 10, 45, 105, 102, 32, 123, 36, 54, 38, 49, 125, 32, > 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, 50, 125, 32, 45, 114, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, > 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 45, 50, 32, 45, > 43, 91, 45, 49, 93, 32, 123, 50, 42, 50, 53, 53, 125, 32, 45, 99, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 54, 61, 61, 51, 125, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 52, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 51, 44, 51, 32, 45, > 42, 91, 45, 49, 93, 32, 50, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, > 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 104, > 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 105, 110, 107, > 95, 119, 97, 115, 104, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, > 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, 108, 98, 119, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 48, 44, 48, 44, 48, 10, 45, 105, > 102, 32, 123, 36, 51, 61, 61, 49, 125, 32, 45, 99, 111, 110, 116, 105, > 110, 117, 101, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 48, > 125, 32, 45, 103, 105, 109, 112, 95, 97, 110, 105, 115, 111, 116, 114, 111, > 112, 105, 99, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 91, 45, 49, > 93, 32, 54, 48, 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 49, 46, > 49, 44, 48, 46, 56, 44, 51, 48, 44, 50, 44, 48, 44, 49, 44, 49, > 44, 48, 44, 49, 44, 49, 54, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, > 50, 44, 54, 44, 53, 44, 50, 52, 44, 49, 44, 48, 44, 50, 53, 53, > 10, 9, 45, 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 50, 125, 32, > 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, > 108, 91, 45, 49, 93, 32, 50, 44, 54, 44, 53, 44, 50, 52, 44, 49, > 44, 48, 44, 50, 53, 53, 32, 45, 103, 105, 109, 112, 95, 99, 111, 110, > 116, 114, 97, 115, 116, 95, 115, 119, 109, 32, 50, 44, 48, 44, 48, 46, > 53, 49, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 51, > 125, 32, 45, 103, 105, 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, 36, 56, 44, 36, > 57, 44, 36, 49, 48, 44, 36, 49, 49, 44, 49, 44, 51, 44, 48, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 112, 101, 110, 99, 105, 108, 98, 119, 32, 58, 10, 45, 112, > 101, 110, 99, 105, 108, 98, 119, 32, 36, 49, 44, 36, 50, 10, 45, 105, > 102, 32, 123, 36, 51, 124, 124, 36, 52, 125, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 47, 91, 48, > 93, 32, 50, 53, 53, 32, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 36, 52, 32, 45, 105, 91, > 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 44, 36, 51, 32, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 104, > 115, 118, 50, 114, 103, 98, 91, 48, 93, 10, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, 108, 98, 119, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, 108, 98, 119, 32, 36, 42, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, > 108, 95, 112, 111, 114, 116, 114, 97, 105, 116, 98, 119, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 108, 91, 48, 93, 10, 45, 45, 98, 32, 50, 37, 10, 45, 45, 98, > 108, 101, 110, 100, 32, 100, 105, 118, 105, 100, 101, 32, 45, 114, 109, 91, > 45, 50, 93, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 45, > 49, 93, 10, 45, 103, 105, 109, 112, 95, 105, 110, 107, 95, 119, 97, 115, > 104, 91, 45, 50, 93, 32, 48, 44, 49, 54, 55, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 52, 44, 50, 46, 50, 53, 44, 48, 44, 50, 44, > 54, 44, 53, 44, 50, 48, 10, 45, 45, 103, 105, 109, 112, 95, 104, 97, > 114, 100, 115, 107, 101, 116, 99, 104, 98, 119, 91, 45, 49, 93, 32, 56, > 48, 44, 51, 50, 44, 49, 46, 56, 57, 44, 48, 46, 50, 49, 44, 51, > 49, 46, 52, 54, 44, 48, 44, 48, 10, 45, 45, 103, 105, 109, 112, 95, > 115, 107, 101, 116, 99, 104, 98, 119, 91, 45, 50, 93, 32, 49, 44, 36, > 50, 44, 49, 56, 48, 44, 36, 49, 44, 36, 51, 44, 48, 46, 48, 51, > 44, 48, 44, 48, 46, 54, 44, 48, 46, 49, 44, 48, 46, 54, 44, 48, > 46, 50, 53, 44, 49, 44, 48, 44, 49, 44, 48, 10, 45, 98, 108, 101, > 110, 100, 91, 48, 44, 49, 93, 32, 100, 97, 114, 107, 101, 110, 10, 45, > 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 109, 117, 108, 116, 105, > 112, 108, 121, 44, 48, 46, 53, 10, 45, 98, 108, 101, 110, 100, 91, 48, > 44, 49, 93, 32, 108, 105, 103, 104, 116, 101, 110, 44, 36, 52, 10, 45, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 32, > 44, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 45, 102, 99, 32, 36, > 123, 53, 45, 55, 125, 32, 45, 98, 108, 101, 110, 100, 32, 115, 111, 102, > 116, 108, 105, 103, 104, 116, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 112, 101, 110, 99, 105, 108, 95, 112, 111, 114, 116, 114, 97, > 105, 116, 98, 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, 108, > 95, 112, 111, 114, 116, 114, 97, 105, 116, 98, 119, 32, 36, 42, 34, 44, > 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 107, 101, 116, 99, 104, 98, > 119, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 53, 61, 61, 52, 125, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 45, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 123, > 49, 45, 49, 52, 125, 32, 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, > 100, 108, 105, 103, 104, 116, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 123, 49, 45, > 49, 52, 125, 10, 45, 105, 102, 32, 123, 36, 49, 53, 38, 49, 125, 32, > 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 53, 61, 61, 50, 125, 32, 45, 114, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, > 93, 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 45, 50, 32, > 45, 43, 91, 45, 49, 93, 32, 123, 50, 42, 50, 53, 53, 125, 32, 45, > 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 49, 53, 61, 61, 51, 125, 32, 45, 114, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 51, 44, 51, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 99, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 115, 107, 101, 116, 99, 104, 98, 119, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, > 107, 101, 116, 99, 104, 98, 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 115, 116, 97, 109, 112, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 110, > 111, 114, 109, 32, 45, 110, 111, 105, 115, 101, 32, 36, 53, 10, 45, 105, > 102, 32, 36, 49, 32, 45, 111, 116, 115, 117, 32, 50, 53, 54, 32, 45, > 101, 108, 115, 101, 32, 45, 103, 101, 32, 36, 50, 37, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 98, 32, 36, 51, 44, 48, 32, 45, 115, 104, 97, > 114, 112, 101, 110, 32, 36, 52, 32, 45, 110, 32, 48, 44, 50, 53, 53, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 49, 44, > 48, 44, 48, 44, 49, 48, 49, 44, 51, 51, 44, 49, 55, 48, 44, 50, > 50, 57, 44, 50, 53, 53, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, > 54, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 115, 116, 97, 109, 112, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 115, 116, 97, 109, 112, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 95, 97, 98, 115, > 116, 114, 97, 99, 116, 105, 111, 110, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, > 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 98, 32, 36, 49, 32, > 45, 115, 32, 99, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 36, > 50, 44, 49, 44, 48, 32, 45, 97, 114, 101, 97, 32, 48, 32, 45, 94, > 32, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, > 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 95, 97, > 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 99, 111, 108, 111, 114, 95, 97, 98, 115, 116, 114, 97, 99, 116, 105, 111, > 110, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 98, > 111, 111, 115, 116, 95, 102, 97, 100, 101, 32, 58, 10, 45, 105, 91, 48, > 93, 32, 54, 52, 48, 44, 52, 56, 48, 44, 49, 44, 51, 32, 45, 114, > 97, 110, 100, 91, 48, 93, 32, 48, 44, 49, 32, 45, 98, 91, 48, 93, > 32, 123, 49, 48, 45, 36, 49, 125, 32, 45, 110, 91, 48, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 116, 114, 97, 110, 115, 102, 101, 114, 95, 99, > 111, 108, 111, 114, 115, 32, 45, 114, 109, 91, 48, 93, 10, 103, 105, 109, > 112, 95, 98, 111, 111, 115, 116, 95, 102, 97, 100, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 98, 111, 111, 115, 116, 95, 102, 97, 100, 101, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 99, 104, 97, 110, 110, > 101, 108, 95, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 91, 45, 49, 93, > 32, 123, 49, 48, 94, 36, 49, 125, 10, 45, 105, 102, 32, 123, 36, 50, > 33, 61, 49, 125, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, > 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 43, 91, 45, 49, 93, > 32, 49, 50, 56, 32, 45, 101, 110, 100, 105, 102, 10, 45, 43, 91, 45, > 49, 93, 32, 36, 51, 10, 45, 98, 91, 45, 49, 93, 32, 36, 52, 37, > 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, > 102, 32, 123, 36, 53, 61, 61, 49, 125, 32, 45, 99, 91, 45, 49, 93, > 32, 36, 54, 37, 44, 36, 55, 37, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 53, 61, 61, 50, 125, 32, 45, 99, 91, 45, 49, 93, 32, 36, 54, > 37, 44, 36, 55, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 51, 125, > 32, 45, 110, 91, 45, 49, 93, 32, 36, 54, 37, 44, 36, 55, 37, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 52, 125, 32, 45, 116, > 50, 91, 45, 49, 93, 32, 36, 54, 37, 44, 36, 55, 37, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 56, 33, 61, 50, 53, 54, 125, 32, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 45, 49, 93, 32, 36, 56, 44, 49, > 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 57, > 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 49, 48, 32, 45, 110, > 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 99, 104, 97, 110, 110, 101, 108, 95, > 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 32, 45, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, > 118, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, > 105, 109, 112, 95, 115, 116, 97, 114, 116, 95, 109, 105, 120, 32, 36, 49, > 49, 44, 36, 49, 50, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 34, 45, 95, 103, 105, 109, > 112, 95, 99, 104, 97, 110, 110, 101, 108, 95, 112, 114, 111, 99, 101, 115, > 115, 105, 110, 103, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, > 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, 44, 36, 57, 44, > 36, 49, 48, 34, 44, 36, 49, 51, 44, 48, 10, 45, 103, 105, 109, 112, > 95, 101, 110, 100, 95, 109, 105, 120, 32, 36, 49, 49, 10, 45, 105, 102, > 32, 123, 64, 35, 33, 61, 51, 125, 32, 45, 114, 118, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 99, 104, 97, 110, 110, 101, 108, 95, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 104, 97, 110, > 110, 101, 108, 95, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 98, 97, 108, 97, > 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 58, 10, 45, 98, 97, 108, > 97, 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 36, 123, 49, 45, 51, > 125, 10, 45, 105, 102, 32, 36, 52, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 32, > 45, 115, 32, 99, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 98, 97, 108, 97, 110, 99, 101, 95, 103, 97, > 109, 109, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 98, 97, 108, 97, 110, 99, 101, > 95, 103, 97, 109, 109, 97, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 109, 97, 112, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 10, 45, 105, 102, 32, 123, > 36, 49, 62, 61, 50, 125, 10, 45, 105, 110, 100, 101, 120, 91, 48, 93, > 32, 123, 36, 49, 45, 50, 125, 44, 36, 50, 44, 49, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 10, 40, 36, 123, 53, 45, > 50, 56, 125, 41, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 123, 51, > 42, 36, 52, 45, 49, 125, 10, 45, 114, 91, 45, 49, 93, 32, 51, 44, > 123, 119, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, > 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 32, 45, > 114, 91, 45, 49, 93, 32, 36, 51, 44, 49, 44, 49, 44, 51, 44, 51, > 10, 45, 105, 110, 100, 101, 120, 91, 48, 93, 32, 91, 45, 49, 93, 44, > 36, 50, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, > 115, 101, 10, 45, 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, > 32, 36, 51, 44, 36, 50, 44, 123, 105, 102, 40, 36, 51, 60, 61, 51, > 50, 44, 49, 44, 48, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 109, 97, 112, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 99, 111, 108, 111, 114, 109, 97, 112, 32, 36, 42, 34, 44, > 36, 45, 49, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, 123, 49, 45, 49, > 51, 125, 34, 44, 36, 49, 52, 44, 36, 49, 53, 10, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, 49, 51, > 44, 48, 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, 53, > 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, > 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, > 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, 36, > 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, > 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, > 102, 32, 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, 44, > 36, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 49, 48, 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 50, 53, 53, 44, 36, 49, 50, 10, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, 36, > 49, 51, 44, 48, 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, > 32, 123, 36, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, > 51, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, > 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, > 102, 32, 123, 36, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, > 36, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, > 44, 36, 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 56, 44, 36, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, > 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, > 34, 45, 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, > 32, 36, 49, 48, 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, > 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, > 92, 10, 50, 53, 53, 44, 36, 49, 50, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 49, 125, 10, 45, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 91, 45, 49, 93, 32, 34, 45, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 44, 50, 53, 53, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 32, > 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, > 114, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, 45, 51, > 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, > 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, 49, > 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, 48, > 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 108, > 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, > 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 45, 50, > 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, 32, 45, 116, 111, 95, 103, > 114, 97, 121, 91, 45, 51, 93, 32, 45, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 91, 45, 51, 93, 32, 50, 53, 54, 44, 48, 44, 50, 53, 53, > 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 32, 45, 110, 101, > 113, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 53, 53, 32, 45, 114, 109, 91, 45, 51, 93, 10, 45, 45, 120, 111, 114, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 106, 91, 45, 51, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 36, 49, 54, 44, > 91, 45, 50, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, 50, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, 48, > 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 50, 53, > 53, 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, > 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, > 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 50, 44, 45, 49, 93, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 48, 44, 36, 49, 44, 48, 32, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 50, 44, 36, 51, 44, 49, 10, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 52, 44, 36, 53, 44, 50, 32, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 54, 44, 36, 55, 44, > 51, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 56, 44, > 36, 57, 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 36, 49, 48, 44, 36, 49, 49, 44, 53, 10, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 50, 53, 53, 44, 36, 49, 50, 44, 54, 10, 45, > 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, > 114, 109, 91, 48, 93, 10, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 105, 102, 32, 123, 36, 49, 62, 61, 48, 125, 10, 120, 61, > 123, 36, 49, 42, 49, 48, 48, 47, 50, 53, 53, 125, 37, 32, 121, 61, > 123, 49, 48, 48, 45, 36, 50, 42, 49, 48, 48, 47, 50, 53, 53, 125, > 37, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 36, > 120, 44, 36, 121, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 32, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 36, 120, 44, 36, 121, > 44, 50, 44, 50, 44, 48, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, > 10, 45, 116, 91, 45, 49, 93, 32, 36, 51, 44, 36, 120, 44, 123, 36, > 121, 42, 104, 45, 50, 48, 125, 44, 49, 51, 44, 49, 44, 50, 53, 53, > 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 49, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, > 105, 103, 102, 105, 108, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, 44, 45, 49, 93, 10, > 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 48, 93, > 32, 123, 109, 97, 120, 40, 51, 44, 115, 41, 125, 10, 45, 115, 104, 91, > 48, 93, 32, 48, 44, 48, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 91, 45, 49, 93, > 32, 64, 123, 45, 50, 44, 48, 45, 49, 50, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 32, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, > 117, 114, 118, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 49, 51, > 45, 50, 53, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 48, 93, 32, 50, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 91, 45, 49, > 93, 32, 64, 123, 45, 50, 44, 50, 54, 45, 51, 56, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 32, 58, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, 49, > 51, 44, 48, 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, > 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, > 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, > 32, 123, 36, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, > 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, > 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, > 102, 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, > 36, 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, > 44, 36, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 49, 48, 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, > 10, 50, 53, 53, 44, 36, 49, 50, 10, 45, 99, 32, 48, 44, 50, 53, > 53, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, > 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, > 104, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 32, 45, 102, > 91, 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 48, 44, 36, 123, 45, > 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 71, 99, 117, 114, 118, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 99, > 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, 104, 91, 45, 49, > 93, 32, 49, 44, 49, 44, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, > 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 91, 94, 45, > 49, 93, 32, 64, 45, 49, 44, 49, 44, 36, 123, 45, 50, 44, 45, 49, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 66, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, 105, > 103, 102, 105, 108, 101, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, > 50, 44, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, 36, 123, 49, > 45, 45, 51, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 91, 94, 45, 49, 93, 32, 64, > 45, 49, 44, 50, 44, 36, 123, 45, 50, 44, 45, 49, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, 105, 103, > 102, 105, 108, 101, 32, 58, 10, 102, 105, 108, 101, 110, 97, 109, 101, 61, > 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, 46, 103, 109, > 105, 99, 95, 82, 71, 66, 99, 117, 114, 118, 101, 46, 100, 108, 109, 10, > 45, 105, 102, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 36, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 32, 40, 48, > 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, > 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, > 49, 50, 56, 44, 50, 53, 53, 44, 49, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 48, 48, 37, 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 40, 36, > 123, 49, 45, 45, 51, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 49, > 51, 44, 51, 44, 49, 44, 49, 44, 45, 49, 32, 45, 111, 91, 45, 49, > 93, 32, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, 46, > 103, 109, 105, 99, 95, 82, 71, 66, 99, 117, 114, 118, 101, 46, 100, 108, > 109, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 102, 117, 110, 99, 116, > 105, 111, 110, 49, 100, 32, 36, 49, 51, 44, 48, 44, 36, 49, 44, 92, > 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 50, 44, 36, 51, 44, 32, 45, 101, 108, 115, 101, 32, > 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, > 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 52, 62, 61, 48, 125, > 32, 45, 117, 32, 36, 52, 44, 36, 53, 44, 32, 45, 101, 108, 115, 101, > 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, > 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 54, 62, 61, 48, > 125, 32, 45, 117, 32, 36, 54, 44, 36, 55, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 56, 62, 61, > 48, 125, 32, 45, 117, 32, 36, 56, 44, 36, 57, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 48, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 48, 44, 36, 49, 49, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, 53, 44, 36, 49, 50, > 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, 36, 50, 54, > 44, 48, 44, 36, 49, 52, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 49, 53, 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 53, 44, > 36, 49, 54, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 49, 55, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 49, 55, 44, 36, 49, 56, 44, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, > 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 57, 62, 61, 48, 125, > 32, 45, 117, 32, 36, 49, 57, 44, 36, 50, 48, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 49, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 49, 44, 36, 50, 50, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 50, 51, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 51, 44, > 36, 50, 52, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, 53, > 44, 36, 50, 53, 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, > 32, 36, 51, 57, 44, 48, 44, 36, 50, 55, 44, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 50, 56, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 50, 56, 44, 36, 50, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, > 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 48, 62, 61, 48, 125, > 32, 45, 117, 32, 36, 51, 48, 44, 36, 51, 49, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 50, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 51, 50, 44, 36, 51, 51, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 51, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 51, 52, 44, > 36, 51, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 51, 54, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 51, 54, 44, 36, 51, 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, > 10, 50, 53, 53, 44, 36, 51, 56, 10, 45, 97, 91, 45, 51, 45, 45, > 49, 93, 32, 121, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 91, 45, 49, 93, 32, 34, 45, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 32, 48, 34, 44, > 36, 45, 49, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, > 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 44, 50, 53, > 53, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 32, 45, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 114, 91, 45, > 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, 45, 51, 93, 32, 91, > 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, > 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, 49, 48, 37, 44, > 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, > 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, > 67, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 45, 50, 10, 91, 45, > 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, 49, 44, 45, 123, 36, 45, > 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 116, 111, 95, 103, > 114, 97, 121, 91, 45, 51, 93, 32, 45, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 91, 45, 51, 93, 32, 50, 53, 54, 44, 48, 44, 50, 53, 53, > 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 10, 45, 114, 109, > 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, 123, 36, 45, 50, > 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, 48, 46, > 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, > 10, 45, 115, 104, 91, 48, 93, 32, 48, 44, 48, 44, 48, 44, 48, 10, > 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 50, 53, 53, 44, > 49, 50, 56, 44, 49, 50, 56, 32, 45, 45, 91, 45, 49, 93, 32, 49, > 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, 44, 50, > 48, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 48, 93, 32, 49, 44, 49, 44, 48, 44, 48, 10, 45, 103, > 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, > 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 49, 50, 56, 44, 50, 53, > 53, 44, 49, 50, 56, 32, 45, 45, 91, 45, 49, 93, 32, 49, 10, 45, > 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, > 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, 44, 48, 44, 50, > 48, 48, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 48, 93, 32, 50, 44, 50, 44, 48, 44, 48, 10, 45, 103, 114, 97, > 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, 48, 44, > 50, 53, 53, 44, 48, 44, 49, 44, 49, 50, 56, 44, 49, 50, 56, 44, > 50, 53, 53, 32, 45, 45, 91, 45, 49, 93, 32, 49, 10, 45, 103, 114, > 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, 48, > 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, 44, 48, 44, 48, 44, 50, > 48, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, > 36, 52, 48, 61, 61, 48, 125, 10, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 48, 44, 36, 49, 44, 48, 32, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 36, 50, 44, 36, 51, 44, 49, 10, 45, 95, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 36, 52, 44, 36, 53, 44, 50, 32, > 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 54, 44, 36, 55, > 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 56, > 44, 36, 57, 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 49, 48, 44, 36, 49, 49, 44, 53, 10, 45, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 50, 53, 53, 44, 36, 49, 50, 44, 54, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 52, 48, 61, 61, 49, 125, 10, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 49, 52, 44, > 48, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 53, > 44, 36, 49, 54, 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 36, 49, 55, 44, 36, 49, 56, 44, 50, 32, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 49, 57, 44, 36, 50, 48, 44, 51, > 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 49, 44, > 36, 50, 50, 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 50, 51, 44, 36, 50, 52, 44, 53, 10, 45, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 50, 53, 53, 44, 36, 50, 53, 44, 54, 10, > 45, 101, 108, 115, 101, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 48, 44, 36, 50, 55, 44, 48, 32, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 50, 56, 44, 36, 50, 57, 44, 49, 10, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, 48, 44, 36, 51, 49, > 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, > 50, 44, 36, 51, 51, 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 36, 51, 52, 44, 36, 51, 53, 44, 52, 32, 45, 95, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, 54, 44, 36, 51, 55, 44, > 53, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, 53, > 44, 36, 51, 56, 44, 54, 10, 45, 101, 110, 100, 105, 102, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, > 109, 91, 48, 93, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 49, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 95, 99, 111, 110, > 102, 105, 103, 102, 105, 108, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, 44, 45, 49, 93, > 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 48, > 93, 32, 123, 109, 97, 120, 40, 51, 44, 115, 41, 125, 32, 45, 115, 104, > 91, 48, 93, 32, 48, 44, 50, 32, 45, 114, 103, 98, 50, 121, 99, 98, > 99, 114, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 48, 93, 32, 48, 44, 48, 32, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, > 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 48, 45, 49, 50, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, > 49, 44, 49, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, > 64, 123, 45, 50, 44, 49, 51, 45, 50, 53, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 50, 44, 50, 32, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, > 114, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, > 50, 54, 45, 51, 56, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 48, 93, 32, 48, 44, 50, 32, 45, 121, 99, 98, 99, 114, > 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, > 91, 45, 49, 93, 10, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, 49, 51, 44, 48, > 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, 44, 32, 45, > 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, > 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, > 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, 53, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, 36, 55, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, 44, 36, 57, > 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, > 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, > 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 48, > 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, > 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, > 53, 44, 36, 49, 50, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, > 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 32, 45, 102, 91, > 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 48, 44, 36, 123, > 45, 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 67, 98, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, > 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, > 104, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, 48, 32, 45, 102, > 91, 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 49, 44, 36, > 123, 45, 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 67, 114, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, > 114, 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, > 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 44, 48, 44, 48, 32, 45, > 102, 91, 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 50, 44, > 36, 123, 45, 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, > 114, 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, > 101, 32, 58, 10, 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, > 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, 46, 103, 109, 105, 99, 95, > 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 46, 100, 108, 109, 10, 45, > 105, 102, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 36, 102, 105, > 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 32, 40, 48, 44, > 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, > 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, > 50, 56, 44, 50, 53, 53, 44, 49, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 40, > 36, 123, 49, 45, 45, 51, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 49, 51, 44, 51, 44, 49, 44, 49, 44, 45, 49, 32, 45, 111, 91, 45, > 49, 93, 32, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, > 46, 103, 109, 105, 99, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, > 46, 100, 108, 109, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 102, 117, > 110, 99, 116, 105, 111, 110, 49, 100, 32, 36, 49, 51, 44, 48, 44, 36, > 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 62, 61, > 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 52, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, 53, 44, 32, 45, 101, > 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, > 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 54, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, 36, 55, 44, 32, 45, > 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, > 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, > 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, 44, 36, 57, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 48, 44, 36, > 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, 53, 44, > 36, 49, 50, 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, > 36, 50, 54, 44, 48, 44, 36, 49, 52, 44, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 49, 53, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 49, 53, 44, 36, 49, 54, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 55, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 49, 55, 44, 36, 49, 56, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 57, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 49, 57, 44, 36, 50, 48, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 50, 49, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 49, 44, 36, > 50, 50, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 50, 51, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 50, 51, 44, 36, 50, 52, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 50, 53, 53, 44, 36, 50, 53, 10, 45, 102, 117, 110, 99, 116, 105, 111, > 110, 49, 100, 32, 36, 51, 57, 44, 48, 44, 36, 50, 55, 44, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 56, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 50, 56, 44, 36, 50, 57, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 48, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 51, 48, 44, 36, 51, 49, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 51, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 51, 50, 44, 36, > 51, 51, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 51, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 51, 52, 44, 36, 51, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 54, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 51, 54, 44, 36, 51, 55, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 50, 53, 53, 44, 36, 51, 56, 10, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 121, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, > 10, 45, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 91, 45, 49, 93, 32, 34, 45, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, > 101, 32, 48, 34, 44, 36, 45, 49, 10, 45, 97, 120, 101, 115, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 44, 49, > 51, 44, 49, 44, 50, 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, > 53, 44, 50, 53, 53, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, > 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, > 45, 114, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, 45, > 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, > 49, 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, > 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, > 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, > 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 45, > 50, 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, 49, 44, > 45, 123, 36, 45, 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, > 116, 111, 95, 103, 114, 97, 121, 91, 45, 51, 93, 32, 45, 104, 105, 115, > 116, 111, 103, 114, 97, 109, 91, 45, 51, 93, 32, 50, 53, 54, 44, 48, > 44, 50, 53, 53, 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, > 91, 45, 51, 93, 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, > 10, 45, 114, 109, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, > 123, 36, 45, 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, > 50, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, > 44, 50, 53, 53, 10, 45, 115, 104, 91, 48, 93, 32, 48, 44, 48, 44, > 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, > 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, > 46, 53, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, > 49, 44, 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, > 49, 44, 49, 50, 56, 44, 49, 50, 56, 44, 50, 53, 53, 32, 45, 45, > 91, 45, 49, 93, 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, > 44, 48, 46, 53, 44, 48, 44, 48, 44, 50, 48, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 50, 44, 50, 44, > 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, > 50, 53, 53, 44, 49, 50, 56, 44, 49, 50, 56, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, > 46, 53, 44, 50, 48, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 123, 36, 52, 48, 61, 61, 48, 125, 10, > 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 49, 44, > 48, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 44, > 36, 51, 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 36, 52, 44, 36, 53, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 36, 54, 44, 36, 55, 44, 51, 10, 45, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 36, 56, 44, 36, 57, 44, 52, 32, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 48, 44, 36, 49, 49, > 44, 53, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, > 53, 44, 36, 49, 50, 44, 54, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 52, 48, 61, 61, 49, 125, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 48, 44, 36, 49, 52, 44, 48, 32, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 36, 49, 53, 44, 36, 49, 54, 44, 49, 10, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 55, 44, 36, 49, > 56, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, > 49, 57, 44, 36, 50, 48, 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 50, 49, 44, 36, 50, 50, 44, 52, 32, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 51, 44, 36, 50, 52, > 44, 53, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, > 53, 44, 36, 50, 53, 44, 54, 10, 45, 101, 108, 115, 101, 10, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 50, 55, 44, 48, > 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 56, 44, > 36, 50, 57, 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 51, 48, 44, 36, 51, 49, 44, 50, 32, 45, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 36, 51, 50, 44, 36, 51, 51, 44, 51, 10, > 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, 52, 44, 36, > 51, 53, 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 36, 51, 54, 44, 36, 51, 55, 44, 53, 10, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 50, 53, 53, 44, 36, 51, 56, 44, 54, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, > 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 10, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, 10, 45, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, > 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, > 44, 45, 49, 93, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, > 100, 101, 91, 48, 93, 32, 123, 109, 97, 120, 40, 51, 44, 115, 41, 125, > 32, 45, 115, 104, 91, 48, 93, 32, 48, 44, 50, 32, 45, 114, 103, 98, > 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 48, 93, 32, 48, 44, 48, 32, 45, 42, 91, 45, > 49, 93, 32, 50, 46, 53, 53, 32, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 91, 45, 49, > 93, 32, 64, 123, 45, 50, 44, 48, 45, 49, 50, 125, 32, 45, 47, 91, > 45, 49, 93, 32, 50, 46, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 32, 45, 43, 91, 45, > 49, 93, 32, 56, 54, 32, 45, 42, 91, 45, 49, 93, 32, 49, 46, 51, > 56, 53, 56, 55, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, 64, > 123, 45, 50, 44, 49, 51, 45, 50, 53, 125, 32, 45, 47, 91, 45, 49, > 93, 32, 49, 46, 51, 56, 53, 56, 55, 32, 45, 45, 91, 45, 49, 93, > 32, 56, 54, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, > 48, 93, 32, 50, 44, 50, 32, 45, 43, 91, 45, 49, 93, 32, 49, 48, > 56, 32, 45, 42, 91, 45, 49, 93, 32, 49, 46, 50, 53, 54, 49, 54, > 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, > 98, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, > 50, 54, 45, 51, 56, 125, 32, 45, 47, 91, 45, 49, 93, 32, 49, 46, > 50, 53, 54, 49, 54, 32, 45, 45, 91, 45, 49, 93, 32, 49, 48, 56, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, > 48, 44, 50, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, > 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 32, 36, 49, 51, 44, 48, 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, > 44, 36, 51, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 52, 44, 36, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, > 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, > 34, 45, 105, 102, 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 54, 44, 36, 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, > 123, 34, 45, 105, 102, 32, 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, > 32, 36, 56, 44, 36, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 49, 48, 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 50, 53, 53, 44, 36, 49, 50, 10, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 76, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, > 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, > 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, > 32, 45, 102, 91, 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 48, 44, > 36, 123, 45, 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 97, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, > 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, 48, 32, 45, 102, 91, > 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 76, 97, 98, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 49, 44, 36, 123, 45, 50, > 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 98, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 95, 99, 111, > 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, 104, 91, 45, 49, 93, > 32, 50, 44, 50, 44, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, > 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 91, 94, 45, 49, > 93, 32, 64, 45, 49, 44, 50, 44, 36, 123, 45, 50, 44, 45, 49, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 95, 99, 111, 110, > 102, 105, 103, 102, 105, 108, 101, 32, 58, 10, 102, 105, 108, 101, 110, 97, > 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, > 46, 103, 109, 105, 99, 95, 76, 97, 98, 99, 117, 114, 118, 101, 46, 100, > 108, 109, 10, 45, 105, 102, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, > 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, > 32, 40, 48, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, > 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, > 45, 49, 44, 49, 50, 56, 44, 50, 53, 53, 44, 49, 41, 32, 45, 114, > 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 51, 32, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, > 98, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 40, 36, 123, 49, 45, 45, 51, 125, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 51, 44, 51, 44, 49, 44, 49, 44, 45, 49, 32, 45, 111, > 91, 45, 49, 93, 32, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, > 125, 47, 46, 103, 109, 105, 99, 95, 76, 97, 98, 99, 117, 114, 118, 101, > 46, 100, 108, 109, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 102, 117, > 110, 99, 116, 105, 111, 110, 49, 100, 32, 36, 49, 51, 44, 48, 44, 36, > 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 62, 61, > 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 52, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, 53, 44, 32, 45, 101, > 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, > 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 54, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, 36, 55, 44, 32, 45, > 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, > 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, > 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, 44, 36, 57, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 48, 44, 36, > 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, 53, 44, > 36, 49, 50, 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, > 36, 50, 54, 44, 48, 44, 36, 49, 52, 44, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 49, 53, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 49, 53, 44, 36, 49, 54, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 55, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 49, 55, 44, 36, 49, 56, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 57, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 49, 57, 44, 36, 50, 48, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 50, 49, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 49, 44, 36, > 50, 50, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 50, 51, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 50, 51, 44, 36, 50, 52, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 50, 53, 53, 44, 36, 50, 53, 10, 45, 102, 117, 110, 99, 116, 105, 111, > 110, 49, 100, 32, 36, 51, 57, 44, 48, 44, 36, 50, 55, 44, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 56, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 50, 56, 44, 36, 50, 57, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 48, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 51, 48, 44, 36, 51, 49, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 51, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 51, 50, 44, 36, > 51, 51, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 51, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 51, 52, 44, 36, 51, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 54, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 51, 54, 44, 36, 51, 55, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 50, 53, 53, 44, 36, 51, 56, 10, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 121, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, > 10, 45, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 91, 45, 49, 93, 32, 34, 45, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 32, > 48, 34, 44, 36, 45, 49, 10, 45, 97, 120, 101, 115, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 44, 49, 51, 44, > 49, 44, 50, 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 44, > 50, 53, 53, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 32, 45, > 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 114, > 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, 45, 51, 93, > 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, 49, 48, > 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, 48, 120, > 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, > 67, 67, 67, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 45, 50, 10, > 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, 49, 44, 45, 123, > 36, 45, 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 116, 111, > 95, 103, 114, 97, 121, 91, 45, 51, 93, 32, 45, 104, 105, 115, 116, 111, > 103, 114, 97, 109, 91, 45, 51, 93, 32, 50, 53, 54, 44, 48, 44, 50, > 53, 53, 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, 45, > 51, 93, 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 10, 45, > 114, 109, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, 123, 36, > 45, 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 43, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, 50, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, > 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, > 53, 53, 10, 45, 115, 104, 91, 48, 93, 32, 48, 44, 48, 44, 48, 44, > 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 50, 53, > 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 45, 91, 45, 49, 93, > 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, > 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 44, > 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, > 50, 53, 53, 44, 49, 50, 56, 44, 49, 50, 56, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, > 46, 53, 44, 50, 48, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 50, 44, 50, 44, 48, 44, > 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 49, 50, > 56, 44, 49, 50, 56, 44, 50, 53, 53, 32, 45, 45, 91, 45, 49, 93, > 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, > 44, 48, 44, 48, 44, 50, 48, 48, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 123, 36, 52, 48, 61, 61, 48, 125, 10, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 49, 44, 48, 32, > 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 44, 36, 51, > 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 52, > 44, 36, 53, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 54, 44, 36, 55, 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 56, 44, 36, 57, 44, 52, 32, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 49, 48, 44, 36, 49, 49, 44, 53, > 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, 53, 44, > 36, 49, 50, 44, 54, 10, 45, 101, 108, 105, 102, 32, 123, 36, 52, 48, > 61, 61, 49, 125, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 48, 44, 36, 49, 52, 44, 48, 32, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 36, 49, 53, 44, 36, 49, 54, 44, 49, 10, 45, 95, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 55, 44, 36, 49, 56, 44, > 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 57, > 44, 36, 50, 48, 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 36, 50, 49, 44, 36, 50, 50, 44, 52, 32, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 50, 51, 44, 36, 50, 52, 44, 53, > 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, 53, 44, > 36, 50, 53, 44, 54, 10, 45, 101, 108, 115, 101, 10, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 50, 55, 44, 48, 32, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 56, 44, 36, 50, > 57, 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, > 51, 48, 44, 36, 51, 49, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 51, 50, 44, 36, 51, 51, 44, 51, 10, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, 52, 44, 36, 51, 53, > 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, > 54, 44, 36, 51, 55, 44, 53, 10, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 50, 53, 53, 44, 36, 51, 56, 44, 54, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, > 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 10, 103, 105, 109, 112, 95, > 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 58, 10, 45, 105, 102, 32, 123, 33, 36, 50, 125, 10, 45, > 105, 102, 32, 36, 52, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, > 101, 108, 115, 101, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 45, 49, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, > 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 36, 49, > 91, 48, 93, 10, 45, 115, 91, 48, 93, 32, 99, 32, 45, 105, 102, 32, > 123, 33, 36, 51, 125, 32, 45, 97, 32, 120, 32, 45, 101, 110, 100, 105, > 102, 10, 110, 98, 61, 64, 35, 10, 45, 101, 110, 100, 108, 32, 45, 109, > 118, 91, 45, 36, 110, 98, 45, 45, 49, 93, 32, 48, 32, 45, 100, 111, > 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 48, 32, 110, 98, 99, 61, 123, 51, 43, 40, 36, 49, 61, > 61, 49, 48, 41, 125, 32, 110, 98, 61, 123, 36, 110, 98, 99, 43, 36, > 52, 125, 10, 45, 105, 102, 32, 36, 51, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 110, 98, 41, 125, 32, > 45, 108, 91, 48, 45, 123, 36, 110, 98, 45, 49, 125, 93, 10, 45, 97, > 91, 48, 45, 123, 36, 110, 98, 99, 45, 49, 125, 93, 32, 99, 32, 45, > 95, 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 36, 49, 91, 48, 93, 32, 45, 97, > 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, > 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 115, 32, 120, 44, 36, 110, 98, 32, 45, 97, 91, 48, 45, 123, > 36, 110, 98, 99, 45, 49, 125, 93, 32, 99, 32, 45, 95, 103, 105, 109, > 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 36, 49, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, > 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, > 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 36, 123, > 94, 48, 125, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, > 115, 32, 44, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, > 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 48, 32, 58, 10, > 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 49, 32, 58, 32, 45, 114, 103, 98, > 50, 104, 115, 118, 56, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, > 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 50, 32, > 58, 32, 45, 114, 103, 98, 50, 104, 115, 108, 56, 10, 95, 103, 105, 109, > 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 51, 32, 58, 32, 45, 114, 103, 98, 50, 104, 115, 105, > 56, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, > 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 52, 32, 58, 32, 45, 114, > 103, 98, 50, 121, 117, 118, 56, 10, 95, 103, 105, 109, 112, 95, 100, 101, > 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 53, 32, 58, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 10, 95, > 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 54, 32, 58, 32, 45, 114, 103, 98, 50, > 120, 121, 122, 56, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 55, 32, 58, > 32, 45, 114, 103, 98, 50, 108, 97, 98, 56, 10, 95, 103, 105, 109, 112, > 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 56, 32, 58, 32, 45, 114, 103, 98, 50, 108, 99, 104, 56, > 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 57, 32, 58, 32, 45, 114, 103, > 98, 50, 99, 109, 121, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, > 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 49, 48, > 32, 58, 32, 45, 114, 103, 98, 50, 99, 109, 121, 107, 10, 95, 103, 105, > 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 48, 32, 58, 10, 95, 103, 105, 109, 112, 95, 114, > 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 49, 32, 58, 32, 45, 104, 115, 118, 56, 50, 114, 103, 98, 10, 95, > 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 50, 32, 58, 32, 45, 104, 115, 108, 56, > 50, 114, 103, 98, 10, 95, 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 51, 32, 58, > 32, 45, 104, 115, 105, 56, 50, 114, 103, 98, 10, 95, 103, 105, 109, 112, > 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 52, 32, 58, 32, 45, 121, 117, 118, 56, 50, 114, 103, 98, > 10, 95, 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 53, 32, 58, 32, 45, 121, 99, > 98, 99, 114, 50, 114, 103, 98, 10, 95, 103, 105, 109, 112, 95, 114, 101, > 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 54, 32, 58, 32, 45, 120, 121, 122, 56, 50, 114, 103, 98, 10, 95, 103, > 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 55, 32, 58, 32, 45, 108, 97, 98, 56, 50, > 114, 103, 98, 10, 95, 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, > 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 56, 32, 58, 32, > 45, 108, 99, 104, 56, 50, 114, 103, 98, 10, 95, 103, 105, 109, 112, 95, > 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 57, 32, 58, 32, 45, 99, 109, 121, 50, 114, 103, 98, 10, 95, > 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 49, 48, 32, 58, 32, 45, 99, 109, 121, > 107, 50, 114, 103, 98, 10, 103, 105, 109, 112, 95, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, > 10, 45, 109, 32, 34, 95, 103, 105, 109, 112, 95, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 32, 58, 10, 45, 105, 102, 32, 36, 53, 32, > 45, 98, 97, 108, 97, 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 49, > 50, 56, 44, 49, 50, 56, 44, 49, 50, 56, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 49, 32, 45, 100, 101, 116, 101, 99, 116, > 95, 115, 107, 105, 110, 32, 36, 50, 32, 45, 101, 108, 115, 101, 32, 45, > 100, 101, 116, 101, 99, 116, 95, 115, 107, 105, 110, 32, 36, 50, 44, 36, > 54, 37, 44, 36, 55, 37, 44, 36, 56, 37, 32, 45, 101, 110, 100, 105, > 102, 10, 77, 61, 123, 105, 77, 125, 32, 45, 98, 32, 36, 51, 37, 32, > 45, 42, 32, 123, 50, 53, 53, 42, 36, 77, 47, 105, 77, 125, 32, 45, > 42, 32, 36, 52, 32, 45, 99, 32, 48, 44, 50, 53, 53, 34, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 36, 57, 10, 45, 45, 95, 103, 105, 109, 112, 95, > 100, 101, 116, 101, 99, 116, 95, 115, 107, 105, 110, 32, 45, 97, 32, 99, > 10, 45, 105, 102, 32, 123, 36, 57, 62, 49, 125, 32, 45, 115, 104, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 42, 91, 45, 49, 93, > 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 108, 115, 101, 32, 45, 95, 103, 105, 109, 112, 95, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 117, 110, 99, 111, 109, > 109, 97, 110, 100, 32, 95, 103, 105, 109, 112, 95, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 10, 103, 105, 109, 112, 95, 100, 101, 116, 101, > 99, 116, 95, 115, 107, 105, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 100, 101, 116, > 101, 99, 116, 95, 115, 107, 105, 110, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 45, 116, 111, 95, 114, 103, 98, 97, 10, 45, 105, 102, 32, 123, 33, > 36, 49, 125, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 54, 37, 44, > 36, 55, 37, 44, 36, 56, 37, 44, 48, 46, 51, 44, 48, 44, 50, 53, > 53, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, 108, 101, 32, > 36, 54, 37, 44, 36, 55, 37, 44, 36, 56, 37, 44, 49, 44, 48, 120, > 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 50, 53, 53, 44, 48, > 44, 50, 53, 53, 10, 45, 108, 105, 110, 101, 32, 123, 36, 54, 45, 48, > 46, 50, 53, 42, 36, 56, 125, 37, 44, 123, 36, 55, 45, 48, 46, 50, > 53, 42, 36, 56, 125, 37, 44, 123, 36, 54, 43, 48, 46, 50, 53, 42, > 36, 56, 125, 37, 44, 123, 36, 55, 43, 48, 46, 50, 53, 42, 36, 56, > 125, 37, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 44, 50, > 53, 53, 10, 45, 108, 105, 110, 101, 32, 123, 36, 54, 43, 48, 46, 50, > 53, 42, 36, 56, 125, 37, 44, 123, 36, 55, 45, 48, 46, 50, 53, 42, > 36, 56, 125, 37, 44, 123, 36, 54, 45, 48, 46, 50, 53, 42, 36, 56, > 125, 37, 44, 123, 36, 55, 43, 48, 46, 50, 53, 42, 36, 56, 125, 37, > 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, > 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 104, 115, 118, > 95, 101, 113, 117, 97, 108, 105, 122, 101, 114, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, > 49, 125, 93, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 103, 98, > 50, 104, 115, 118, 32, 45, 115, 32, 99, 10, 45, 45, 102, 91, 48, 93, > 32, 105, 102, 40, 97, 98, 115, 40, 105, 45, 36, 50, 41, 60, 36, 51, > 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 50, 45, 51, 54, 48, 41, > 60, 36, 51, 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 50, 43, 51, > 54, 48, 41, 60, 36, 51, 47, 50, 44, 49, 44, 48, 41, 10, 45, 45, > 102, 91, 48, 93, 32, 105, 102, 40, 97, 98, 115, 40, 105, 45, 36, 55, > 41, 60, 36, 56, 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 55, 45, > 51, 54, 48, 41, 60, 36, 56, 47, 50, 124, 97, 98, 115, 40, 105, 45, > 36, 55, 43, 51, 54, 48, 41, 60, 36, 56, 47, 50, 44, 49, 44, 48, > 41, 10, 45, 45, 102, 91, 48, 93, 32, 105, 102, 40, 97, 98, 115, 40, > 105, 45, 36, 49, 50, 41, 60, 36, 49, 51, 47, 50, 124, 97, 98, 115, > 40, 105, 45, 36, 49, 50, 45, 51, 54, 48, 41, 60, 36, 49, 51, 47, > 50, 124, 97, 98, 115, 40, 105, 45, 36, 49, 50, 43, 51, 54, 48, 41, > 60, 36, 49, 51, 47, 50, 44, 49, 44, 48, 41, 10, 45, 45, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 91, 49, 44, 50, 93, 32, 48, 46, 48, > 49, 32, 45, 42, 91, 45, 49, 44, 45, 50, 93, 32, 91, 45, 49, 93, > 120, 50, 32, 45, 42, 91, 45, 49, 44, 51, 93, 32, 45, 42, 91, 45, > 49, 44, 52, 93, 32, 45, 42, 91, 45, 49, 44, 53, 93, 9, 35, 48, > 32, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 32, 97, 110, 100, 32, > 118, 97, 108, 117, 101, 32, 110, 111, 116, 32, 105, 110, 32, 109, 97, 115, > 107, 10, 45, 45, 42, 91, 51, 93, 32, 36, 52, 32, 45, 45, 42, 91, > 52, 93, 32, 36, 57, 32, 45, 45, 42, 91, 53, 93, 32, 36, 49, 52, > 32, 45, 43, 91, 45, 49, 44, 45, 50, 44, 45, 51, 93, 10, 45, 43, > 91, 45, 49, 44, 48, 93, 32, 45, 37, 91, 48, 93, 32, 51, 54, 48, > 10, 45, 105, 102, 32, 123, 36, 53, 62, 61, 48, 125, 32, 45, 45, 42, > 91, 51, 93, 32, 45, 36, 53, 32, 45, 101, 108, 115, 101, 32, 45, 45, > 42, 91, 51, 93, 32, 123, 49, 47, 40, 49, 43, 36, 53, 41, 45, 49, > 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 91, 45, 49, 93, 32, > 49, 10, 45, 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, > 45, 42, 91, 52, 93, 32, 45, 36, 49, 48, 32, 45, 101, 108, 115, 101, > 32, 45, 45, 42, 91, 52, 93, 32, 123, 49, 47, 40, 49, 43, 36, 49, > 48, 41, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 91, > 45, 49, 93, 32, 49, 10, 45, 105, 102, 32, 123, 36, 49, 53, 62, 61, > 48, 125, 32, 45, 45, 42, 91, 53, 93, 32, 45, 36, 49, 53, 32, 45, > 101, 108, 115, 101, 32, 45, 45, 42, 91, 53, 93, 32, 123, 49, 47, 40, > 49, 43, 36, 49, 53, 41, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 43, 91, 45, 49, 93, 32, 49, 10, 45, 42, 91, 45, 49, 44, > 45, 50, 44, 45, 51, 93, 32, 45, 94, 91, 49, 44, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 45, 42, 91, > 51, 93, 32, 45, 36, 54, 32, 45, 101, 108, 115, 101, 32, 45, 45, 42, > 91, 51, 93, 32, 123, 49, 47, 40, 49, 43, 36, 54, 41, 45, 49, 125, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 91, 45, 49, 93, 32, 49, > 10, 45, 105, 102, 32, 123, 36, 49, 49, 62, 61, 48, 125, 32, 45, 45, > 42, 91, 52, 93, 32, 45, 36, 49, 49, 32, 45, 101, 108, 115, 101, 32, > 45, 45, 42, 91, 52, 93, 32, 123, 49, 47, 40, 49, 43, 36, 49, 49, > 41, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 91, 45, > 49, 93, 32, 49, 10, 45, 105, 102, 32, 123, 36, 49, 54, 62, 61, 48, > 125, 32, 45, 45, 42, 91, 53, 93, 32, 45, 36, 49, 54, 32, 45, 101, > 108, 115, 101, 32, 45, 45, 42, 91, 53, 93, 32, 123, 49, 47, 40, 49, > 43, 36, 49, 54, 41, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 10, 45, 42, 91, 45, 49, 44, 45, > 50, 44, 45, 51, 93, 32, 45, 94, 91, 50, 44, 45, 49, 93, 10, 45, > 114, 109, 91, 51, 44, 52, 44, 53, 93, 32, 45, 97, 91, 48, 44, 49, > 44, 50, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 104, 115, 118, 95, 101, 113, 117, 97, 108, 105, 122, 101, 114, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 108, 91, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 32, 45, 103, 105, 109, 112, > 95, 104, 115, 118, 95, 101, 113, 117, 97, 108, 105, 122, 101, 114, 32, 36, > 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, > 44, 36, 55, 44, 36, 56, 44, 36, 57, 44, 36, 49, 48, 44, 36, 49, > 49, 44, 36, 49, 50, 44, 36, 49, 51, 44, 36, 49, 52, 44, 36, 49, > 53, 44, 36, 49, 54, 10, 45, 101, 108, 115, 101, 10, 45, 116, 111, 95, > 114, 103, 98, 32, 45, 114, 103, 98, 50, 104, 115, 118, 32, 45, 115, 32, > 99, 10, 40, 48, 44, 51, 53, 57, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 123, 64, 123, 48, 44, 104, 125, 47, 49, 48, > 125, 44, 49, 44, 49, 44, 51, 32, 91, 45, 49, 93, 32, 45, 102, 91, > 45, 49, 93, 32, 49, 9, 35, 99, 114, 101, 97, 116, 101, 32, 108, 111, > 119, 101, 114, 32, 98, 97, 110, 100, 10, 45, 106, 91, 48, 93, 32, 91, > 51, 93, 44, 48, 44, 57, 49, 37, 32, 45, 106, 91, 49, 93, 32, 91, > 52, 93, 44, 48, 44, 57, 49, 37, 32, 45, 106, 91, 50, 93, 32, 91, > 52, 93, 44, 48, 44, 57, 49, 37, 32, 45, 114, 109, 91, 45, 49, 44, > 45, 50, 93, 10, 45, 45, 102, 91, 48, 93, 32, 105, 102, 40, 97, 98, > 115, 40, 105, 45, 36, 50, 41, 60, 36, 51, 47, 50, 124, 97, 98, 115, > 40, 105, 45, 36, 50, 45, 51, 54, 48, 41, 60, 36, 51, 47, 50, 124, > 97, 98, 115, 40, 105, 45, 36, 50, 43, 51, 54, 48, 41, 60, 36, 51, > 47, 50, 44, 49, 44, 48, 41, 10, 45, 45, 102, 91, 48, 93, 32, 105, > 102, 40, 97, 98, 115, 40, 105, 45, 36, 55, 41, 60, 36, 56, 47, 50, > 124, 97, 98, 115, 40, 105, 45, 36, 55, 45, 51, 54, 48, 41, 60, 36, > 56, 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 55, 43, 51, 54, 48, > 41, 60, 36, 56, 47, 50, 44, 49, 44, 48, 41, 10, 45, 45, 102, 91, > 48, 93, 32, 105, 102, 40, 97, 98, 115, 40, 105, 45, 36, 49, 50, 41, > 60, 36, 49, 51, 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 49, 50, > 45, 51, 54, 48, 41, 60, 36, 49, 51, 47, 50, 124, 97, 98, 115, 40, > 105, 45, 36, 49, 50, 43, 51, 54, 48, 41, 60, 36, 49, 51, 47, 50, > 44, 49, 44, 48, 41, 10, 45, 111, 114, 91, 45, 51, 45, 45, 49, 93, > 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 51, 51, 32, 45, 47, 91, > 45, 49, 93, 32, 49, 46, 51, 51, 9, 35, 49, 32, 97, 110, 100, 32, > 48, 46, 50, 53, 10, 45, 42, 91, 50, 44, 45, 49, 93, 32, 45, 97, > 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 108, 10, 103, 105, 109, 112, 95, 115, 116, > 97, 114, 116, 95, 109, 105, 120, 32, 58, 10, 45, 105, 102, 32, 123, 36, > 49, 61, 61, 49, 125, 32, 45, 45, 116, 111, 110, 101, 115, 91, 45, 49, > 93, 32, 51, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 98, > 91, 45, 50, 44, 45, 49, 93, 32, 36, 50, 37, 32, 45, 114, 91, 45, > 50, 44, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 42, 91, 45, 49, > 93, 32, 91, 45, 51, 93, 32, 45, 109, 118, 91, 45, 51, 93, 32, 64, > 35, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, > 45, 45, 116, 111, 110, 101, 115, 91, 45, 49, 93, 32, 51, 32, 45, 43, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 98, 91, 45, 50, 44, 45, 49, > 93, 32, 36, 50, 37, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, > 91, 45, 51, 93, 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 51, 93, > 32, 45, 109, 118, 91, 45, 51, 93, 32, 64, 35, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 45, 116, 111, 110, 101, > 115, 91, 45, 49, 93, 32, 51, 32, 45, 43, 91, 45, 51, 44, 45, 50, > 93, 32, 45, 98, 91, 45, 50, 44, 45, 49, 93, 32, 36, 50, 37, 32, > 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, > 42, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 109, 118, 91, 45, > 51, 93, 32, 64, 35, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, > 112, 95, 101, 110, 100, 95, 109, 105, 120, 32, 58, 10, 45, 105, 102, 32, > 123, 36, 49, 61, 61, 49, 125, 32, 45, 42, 91, 45, 51, 44, 45, 49, > 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 109, 105, 120, 95, > 114, 103, 98, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 45, 114, 118, 32, 45, 116, 111, 95, 114, > 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 115, 116, 97, > 114, 116, 95, 109, 105, 120, 32, 36, 49, 48, 44, 36, 49, 49, 10, 45, > 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 115, 91, 45, 49, 93, > 32, 99, 10, 45, 42, 91, 45, 51, 93, 32, 36, 49, 32, 45, 43, 91, > 45, 51, 93, 32, 36, 50, 32, 45, 98, 91, 45, 51, 93, 32, 36, 51, > 37, 10, 45, 42, 91, 45, 50, 93, 32, 36, 52, 32, 45, 43, 91, 45, > 50, 93, 32, 36, 53, 32, 45, 98, 91, 45, 50, 93, 32, 36, 54, 37, > 10, 45, 42, 91, 45, 49, 93, 32, 36, 55, 32, 45, 43, 91, 45, 49, > 93, 32, 36, 56, 32, 45, 98, 91, 45, 49, 93, 32, 36, 57, 37, 10, > 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 43, 91, 45, > 49, 93, 32, 49, 50, 56, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 103, 105, 109, 112, 95, 101, 110, 100, 95, 109, 105, > 120, 32, 36, 49, 48, 10, 45, 105, 102, 32, 123, 64, 35, 33, 61, 51, > 125, 32, 45, 114, 118, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 105, > 102, 32, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 109, 105, 120, > 95, 114, 103, 98, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 109, 105, 120, 95, 114, 103, > 98, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, > 105, 120, 95, 121, 99, 98, 99, 114, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 118, 32, > 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, > 112, 95, 115, 116, 97, 114, 116, 95, 109, 105, 120, 32, 36, 49, 48, 44, > 36, 49, 49, 10, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, 45, > 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 115, > 91, 45, 49, 93, 32, 99, 10, 45, 42, 91, 45, 51, 93, 32, 36, 49, > 32, 45, 43, 91, 45, 51, 93, 32, 36, 50, 32, 45, 98, 91, 45, 51, > 93, 32, 36, 51, 37, 10, 45, 42, 91, 45, 50, 93, 32, 36, 52, 32, > 45, 43, 91, 45, 50, 93, 32, 36, 53, 32, 45, 98, 91, 45, 50, 93, > 32, 36, 54, 37, 10, 45, 42, 91, 45, 49, 93, 32, 36, 55, 32, 45, > 43, 91, 45, 49, 93, 32, 36, 56, 32, 45, 98, 91, 45, 49, 93, 32, > 36, 57, 37, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 121, 99, 98, 99, 114, 50, 114, > 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 101, 110, 100, > 95, 109, 105, 120, 32, 36, 49, 48, 10, 45, 105, 102, 32, 123, 64, 35, > 33, 61, 51, 125, 32, 45, 114, 118, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 109, 105, 120, 95, 121, 99, 98, 99, 114, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 109, > 105, 120, 95, 121, 99, 98, 99, 114, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 109, 105, 120, 95, 104, 115, 118, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 114, 118, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, > 10, 45, 103, 105, 109, 112, 95, 115, 116, 97, 114, 116, 95, 109, 105, 120, > 32, 36, 49, 48, 44, 36, 49, 49, 10, 45, 114, 103, 98, 50, 104, 115, > 118, 91, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, > 45, 91, 45, 50, 44, 45, 49, 93, 32, 48, 46, 53, 10, 45, 42, 91, > 45, 51, 93, 32, 36, 49, 32, 45, 43, 91, 45, 51, 93, 32, 36, 50, > 32, 45, 98, 91, 45, 51, 93, 32, 36, 51, 37, 10, 45, 42, 91, 45, > 50, 93, 32, 36, 52, 32, 45, 43, 91, 45, 50, 93, 32, 36, 53, 32, > 45, 98, 91, 45, 50, 93, 32, 36, 54, 37, 10, 45, 42, 91, 45, 49, > 93, 32, 36, 55, 32, 45, 43, 91, 45, 49, 93, 32, 36, 56, 32, 45, > 98, 91, 45, 49, 93, 32, 36, 57, 37, 10, 45, 37, 91, 45, 51, 93, > 32, 51, 54, 48, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 48, > 46, 53, 32, 45, 99, 91, 45, 50, 44, 45, 49, 93, 32, 48, 44, 49, > 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, > 118, 50, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, > 101, 110, 100, 95, 109, 105, 120, 32, 36, 49, 48, 10, 45, 105, 102, 32, > 123, 64, 35, 33, 61, 51, 125, 32, 45, 114, 118, 32, 45, 97, 32, 99, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 109, 105, 120, 95, 104, 115, 118, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 109, 105, 120, 95, 104, 115, 118, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 109, 105, 120, 95, 108, 97, 98, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 10, 45, 103, 105, 109, 112, > 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, > 112, 91, 48, 93, 32, 34, 45, 95, 103, 105, 109, 112, 95, 109, 105, 120, > 95, 108, 97, 98, 32, 36, 42, 34, 44, 48, 44, 123, 51, 42, 109, 97, > 120, 40, 36, 51, 44, 36, 54, 44, 36, 57, 41, 125, 10, 45, 97, 32, > 99, 10, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 36, 62, 93, 32, > 48, 32, 45, 100, 111, 110, 101, 10, 95, 103, 105, 109, 112, 95, 109, 105, > 120, 95, 108, 97, 98, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 116, > 97, 114, 116, 95, 109, 105, 120, 32, 36, 49, 48, 44, 36, 49, 49, 10, > 45, 114, 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 115, 91, > 45, 49, 93, 32, 99, 10, 45, 42, 91, 45, 51, 93, 32, 36, 49, 32, > 45, 43, 91, 45, 51, 93, 32, 36, 50, 32, 45, 98, 91, 45, 51, 93, > 32, 36, 51, 37, 10, 45, 42, 91, 45, 50, 93, 32, 36, 52, 32, 45, > 43, 91, 45, 50, 93, 32, 36, 53, 32, 45, 98, 91, 45, 50, 93, 32, > 36, 54, 37, 10, 45, 42, 91, 45, 49, 93, 32, 36, 55, 32, 45, 43, > 91, 45, 49, 93, 32, 36, 56, 32, 45, 98, 91, 45, 49, 93, 32, 36, > 57, 37, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, > 108, 97, 98, 50, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, > 112, 95, 101, 110, 100, 95, 109, 105, 120, 32, 36, 49, 48, 10, 103, 105, > 109, 112, 95, 109, 105, 120, 95, 108, 97, 98, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 109, 105, 120, 95, 108, 97, 98, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 109, 105, 120, 95, 99, 109, 121, 107, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 114, 118, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, > 10, 45, 103, 105, 109, 112, 95, 115, 116, 97, 114, 116, 95, 109, 105, 120, > 32, 36, 49, 51, 44, 36, 49, 52, 10, 45, 114, 103, 98, 50, 99, 109, > 121, 107, 91, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, > 45, 42, 91, 45, 52, 93, 32, 36, 49, 32, 45, 43, 91, 45, 52, 93, > 32, 36, 50, 32, 45, 98, 91, 45, 52, 93, 32, 36, 51, 37, 10, 45, > 42, 91, 45, 51, 93, 32, 36, 52, 32, 45, 43, 91, 45, 51, 93, 32, > 36, 53, 32, 45, 98, 91, 45, 51, 93, 32, 36, 54, 37, 10, 45, 42, > 91, 45, 50, 93, 32, 36, 55, 32, 45, 43, 91, 45, 50, 93, 32, 36, > 56, 32, 45, 98, 91, 45, 50, 93, 32, 36, 57, 37, 10, 45, 42, 91, > 45, 49, 93, 32, 36, 49, 48, 32, 45, 43, 91, 45, 49, 93, 32, 36, > 49, 49, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 50, 37, 10, 45, > 97, 91, 45, 52, 45, 45, 49, 93, 32, 99, 32, 45, 99, 109, 121, 107, > 50, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 101, > 110, 100, 95, 109, 105, 120, 32, 36, 49, 51, 10, 45, 105, 102, 32, 123, > 64, 35, 33, 61, 51, 125, 32, 45, 114, 118, 32, 45, 97, 32, 99, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 109, 118, > 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 109, 105, 120, 95, 99, 109, 121, 107, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 109, 105, 120, 95, 99, 109, 121, 107, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 95, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 95, 99, 111, > 108, 111, 114, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 49, > 125, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 49, 61, 61, 50, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, > 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 52, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 53, 125, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 50, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 54, 125, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 51, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 49, 61, 61, 55, 125, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 48, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 56, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, > 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 49, 44, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 49, 61, 61, 57, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, > 103, 98, 50, 104, 115, 118, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 48, > 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 103, 98, 50, 104, > 115, 118, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, 10, 45, > 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, > 116, 95, 99, 111, 108, 111, 114, 32, 58, 10, 40, 36, 53, 94, 36, 54, > 94, 36, 55, 94, 36, 56, 41, 32, 45, 95, 103, 105, 109, 112, 95, 115, > 101, 108, 101, 99, 116, 95, 99, 111, 108, 111, 114, 91, 45, 49, 93, 32, > 36, 49, 32, 99, 111, 108, 111, 114, 61, 64, 45, 49, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 97, 10, > 45, 45, 95, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 95, 99, > 111, 108, 111, 114, 32, 36, 49, 10, 45, 115, 101, 108, 101, 99, 116, 95, > 99, 111, 108, 111, 114, 91, 49, 93, 32, 36, 50, 37, 44, 36, 99, 111, > 108, 111, 114, 10, 45, 105, 102, 32, 36, 52, 32, 45, 45, 97, 114, 101, > 97, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 108, 101, 91, 45, 49, > 93, 32, 123, 114, 111, 117, 110, 100, 40, 36, 52, 94, 49, 46, 53, 41, > 125, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 51, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 98, 91, 49, 93, 32, 36, 51, 32, > 45, 110, 91, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, 32, > 123, 36, 57, 61, 61, 48, 125, 32, 45, 115, 104, 91, 48, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, 110, 100, 91, 45, 49, > 93, 32, 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 57, 61, > 61, 49, 125, 32, 45, 114, 109, 91, 48, 93, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 57, 61, 61, 50, 125, 32, 45, 45, 91, 49, 93, 32, 50, > 53, 53, 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 115, 104, 91, > 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, 110, > 100, 91, 45, 49, 93, 32, 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 57, 61, 61, 51, 125, 32, 45, 114, 109, 91, 48, 93, 32, 45, > 45, 32, 50, 53, 53, 32, 45, 42, 32, 45, 49, 10, 45, 101, 108, 115, > 101, 10, 45, 47, 91, 49, 93, 32, 50, 53, 53, 32, 45, 45, 42, 91, > 48, 44, 49, 93, 32, 45, 45, 42, 91, 49, 93, 32, 36, 49, 49, 32, > 45, 45, 42, 91, 49, 93, 32, 36, 49, 50, 32, 45, 45, 42, 91, 49, > 93, 32, 36, 49, 51, 32, 45, 42, 91, 49, 93, 32, 36, 49, 48, 32, > 45, 97, 91, 49, 44, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 45, > 91, 49, 44, 50, 93, 32, 45, 43, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 107, 91, 48, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 95, 99, 111, > 108, 111, 114, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 95, > 99, 111, 108, 111, 114, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 115, 101, 112, 105, 97, 32, 58, 10, 45, 115, 101, 112, 105, > 97, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 97, 112, 112, 108, 121, 95, > 103, 97, 109, 109, 97, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 49, > 125, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 42, 91, > 45, 49, 93, 32, 36, 50, 32, 45, 43, 91, 45, 49, 93, 32, 123, 49, > 50, 56, 43, 36, 51, 125, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, > 95, 115, 101, 112, 105, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 101, 112, 105, > 97, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, > 117, 115, 116, 111, 109, 95, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, > 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 10, 45, 102, 91, 45, 49, 93, 32, 34, 36, 49, > 34, 10, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 97, 91, 45, 52, > 45, 45, 50, 93, 32, 99, 32, 45, 102, 91, 45, 50, 93, 32, 34, 36, > 50, 34, 10, 45, 115, 91, 45, 50, 93, 32, 99, 32, 45, 102, 91, 45, > 52, 93, 32, 34, 36, 51, 34, 32, 45, 102, 91, 45, 51, 93, 32, 34, > 36, 52, 34, 32, 45, 102, 91, 45, 50, 93, 32, 34, 36, 53, 34, 32, > 45, 102, 91, 45, 49, 93, 32, 34, 36, 54, 34, 10, 45, 105, 102, 32, > 123, 36, 55, 61, 61, 48, 125, 32, 45, 97, 91, 45, 52, 45, 45, 49, > 93, 32, 99, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, > 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 32, 45, 110, 91, 45, 50, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 45, 101, 108, 115, 101, 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, > 32, 99, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 111, 110, 118, > 111, 108, 118, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 99, > 111, 110, 118, 111, 108, 118, 101, 32, 36, 49, 44, 36, 50, 44, 92, 34, > 36, 51, 92, 34, 44, 36, 123, 52, 45, 45, 51, 125, 34, 44, 36, 45, > 50, 44, 48, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, > 118, 101, 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 95, 103, 105, > 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 36, 49, 91, 93, 32, > 45, 101, 108, 115, 101, 32, 40, 36, 51, 41, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 33, 36, 52, 125, 32, 45, 42, 91, 45, > 49, 93, 32, 36, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 99, 111, > 110, 118, 111, 108, 118, 101, 91, 48, 45, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 36, 50, 10, 45, 105, 102, 32, 36, 52, 32, 45, 110, 32, 48, > 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, > 49, 93, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, > 101, 49, 32, 58, 32, 51, 44, 51, 32, 45, 102, 32, 49, 32, 45, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 95, 103, 105, > 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 50, 32, 58, 32, 53, > 44, 53, 32, 45, 102, 32, 49, 32, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 95, 115, 117, 109, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, > 118, 111, 108, 118, 101, 51, 32, 58, 32, 55, 44, 55, 32, 45, 102, 32, > 49, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, > 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 52, > 32, 58, 32, 57, 44, 57, 32, 45, 102, 32, 49, 32, 45, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 110, 118, 111, 108, 118, 101, 53, 32, 58, 32, 40, 49, 44, > 48, 44, 45, 49, 59, 49, 44, 48, 44, 45, 49, 59, 49, 44, 48, 44, > 45, 49, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, > 118, 101, 54, 32, 58, 32, 40, 49, 44, 49, 44, 49, 59, 48, 44, 48, > 44, 48, 59, 45, 49, 44, 45, 49, 44, 45, 49, 41, 10, 95, 103, 105, > 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 55, 32, 58, 32, 40, > 49, 44, 48, 44, 45, 49, 59, 50, 44, 48, 44, 45, 50, 59, 49, 44, > 48, 44, 45, 49, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, > 111, 108, 118, 101, 56, 32, 58, 32, 40, 49, 44, 50, 44, 49, 59, 48, > 44, 48, 44, 48, 59, 45, 49, 44, 45, 50, 44, 45, 49, 41, 10, 95, > 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 57, 32, 58, > 32, 97, 61, 123, 48, 46, 50, 53, 42, 40, 50, 45, 115, 113, 114, 116, > 40, 50, 41, 41, 125, 32, 98, 61, 123, 48, 46, 53, 42, 40, 115, 113, > 114, 116, 40, 50, 41, 45, 49, 41, 125, 32, 40, 36, 97, 44, 48, 44, > 45, 36, 97, 59, 36, 98, 44, 48, 44, 45, 36, 98, 59, 36, 97, 44, > 48, 44, 45, 36, 97, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, > 118, 111, 108, 118, 101, 49, 48, 32, 58, 32, 97, 61, 123, 48, 46, 50, > 53, 42, 40, 50, 45, 115, 113, 114, 116, 40, 50, 41, 41, 125, 32, 98, > 61, 123, 48, 46, 53, 42, 40, 115, 113, 114, 116, 40, 50, 41, 45, 49, > 41, 125, 32, 40, 36, 97, 44, 36, 98, 44, 36, 97, 59, 48, 44, 48, > 44, 48, 59, 45, 36, 97, 44, 45, 36, 98, 44, 45, 36, 97, 41, 10, > 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 49, 49, > 32, 58, 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, 45, 52, 44, 49, > 59, 48, 44, 49, 44, 48, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, > 110, 118, 111, 108, 118, 101, 49, 50, 32, 58, 32, 40, 49, 44, 48, 59, > 48, 44, 45, 49, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, > 111, 108, 118, 101, 49, 51, 32, 58, 32, 40, 48, 44, 49, 59, 45, 49, > 44, 48, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, > 118, 101, 49, 52, 32, 58, 32, 51, 44, 51, 32, 45, 102, 32, 49, 32, > 45, 114, 32, 55, 44, 55, 44, 49, 44, 49, 44, 52, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, > 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 49, 53, > 32, 58, 32, 51, 44, 51, 32, 45, 102, 32, 49, 32, 45, 114, 32, 57, > 44, 57, 44, 49, 44, 49, 44, 52, 44, 48, 44, 48, 46, 53, 44, 48, > 46, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 45, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 95, 103, 105, 109, > 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 49, 54, 32, 58, 32, 51, > 44, 51, 32, 45, 102, 32, 49, 32, 45, 114, 32, 49, 49, 44, 49, 49, > 44, 49, 44, 49, 44, 52, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 103, 105, 109, 112, 95, 99, > 111, 110, 118, 111, 108, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 111, 110, > 118, 111, 108, 118, 101, 32, 36, 49, 44, 36, 50, 44, 92, 34, 36, 51, > 92, 34, 44, 36, 123, 52, 45, 45, 49, 125, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 99, 117, 114, 118, 97, 116, 117, 114, 101, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 32, 45, 108, 91, 48, 93, 10, 45, 98, 32, 36, 49, 32, 45, 105, > 101, 101, 10, 45, 105, 102, 32, 36, 52, 32, 45, 97, 98, 115, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 99, 32, 36, 50, 37, 44, 36, 51, 37, > 10, 45, 105, 102, 32, 36, 53, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 117, > 114, 118, 97, 116, 117, 114, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 117, 114, > 118, 97, 116, 117, 114, 101, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 100, 111, 103, 32, 58, 10, 45, 100, 111, > 103, 32, 36, 49, 37, 44, 36, 50, 37, 10, 45, 99, 32, 36, 51, 37, > 44, 123, 49, 48, 48, 45, 36, 51, 125, 37, 10, 45, 105, 102, 32, 36, > 52, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, > 95, 100, 111, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 100, 111, 103, 32, 36, 123, > 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 100, 105, > 115, 116, 97, 110, 99, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, 36, 49, 44, 36, 50, 10, > 45, 105, 102, 32, 123, 36, 51, 61, 61, 48, 125, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, > 49, 125, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 108, 115, > 101, 32, 45, 37, 32, 36, 52, 32, 45, 110, 32, 48, 44, 50, 53, 53, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 100, 105, 115, 116, 97, 110, 99, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 100, 105, 115, 116, 97, 110, 99, 101, 32, 36, 123, 94, 48, 125, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 101, 100, 103, 101, 115, > 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 98, 32, 36, 49, > 37, 32, 45, 101, 100, 103, 101, 115, 32, 36, 50, 37, 10, 45, 105, 102, > 32, 36, 51, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, > 109, 112, 95, 101, 100, 103, 101, 115, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 100, > 103, 101, 115, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 101, 100, 103, 101, 95, 111, 102, 102, 115, 101, 116, 115, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 111, 115, > 61, 123, 115, 125, 10, 45, 98, 91, 45, 49, 93, 32, 36, 49, 37, 32, > 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 91, 45, > 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 50, 37, 32, 45, > 115, 107, 101, 108, 101, 116, 111, 110, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, > 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, 37, 91, 45, > 49, 93, 32, 36, 51, 32, 45, 103, 101, 91, 45, 49, 93, 32, 123, 109, > 97, 120, 40, 49, 44, 36, 51, 45, 36, 52, 41, 125, 10, 45, 105, 102, > 32, 123, 33, 36, 53, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, > 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 99, 111, 108, > 111, 114, 109, 111, 100, 101, 91, 45, 49, 93, 32, 36, 111, 115, 10, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 101, 100, 103, 101, 95, 111, 102, 102, 115, 101, 116, 115, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 101, 100, 103, 101, 95, 111, 102, 102, 115, 101, > 116, 115, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, > 32, 58, 10, 45, 98, 32, 36, 49, 32, 45, 103, 114, 97, 100, 105, 101, > 110, 116, 95, 110, 111, 114, 109, 32, 45, 94, 32, 36, 50, 10, 45, 99, > 32, 36, 51, 37, 44, 36, 52, 37, 10, 45, 105, 102, 32, 36, 53, 32, > 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 103, > 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, > 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 103, 114, 97, 100, 105, 101, 110, 116, 50, 114, 103, 98, 32, 58, 10, 45, > 98, 32, 36, 49, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 50, 114, > 103, 98, 32, 36, 52, 10, 45, 99, 32, 36, 50, 37, 44, 36, 51, 37, > 10, 45, 105, 102, 32, 36, 53, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, > 53, 10, 103, 105, 109, 112, 95, 103, 114, 97, 100, 105, 101, 110, 116, 50, > 114, 103, 98, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 103, 114, 97, 100, 105, 101, 110, > 116, 50, 114, 103, 98, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 105, 115, 111, 112, 104, 111, 116, 101, 115, 32, > 58, 10, 45, 105, 102, 32, 36, 51, 10, 45, 116, 111, 112, 111, 103, 114, > 97, 112, 104, 105, 99, 95, 109, 97, 112, 32, 36, 49, 44, 36, 50, 10, > 45, 101, 108, 115, 101, 10, 45, 98, 32, 36, 50, 32, 45, 105, 115, 111, > 112, 104, 111, 116, 101, 115, 32, 36, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 105, 115, 111, 112, 104, 111, 116, 101, 115, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 105, 115, 111, 112, 104, 111, 116, 101, 115, 32, 36, > 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 108, > 97, 112, 108, 97, 99, 105, 97, 110, 32, 58, 10, 45, 98, 32, 36, 49, > 32, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 10, 45, 105, 102, 32, > 36, 52, 32, 45, 97, 98, 115, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 99, 32, 36, 50, 37, 44, 36, 51, 37, 10, 45, 105, 102, 32, 36, 53, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, > 108, 97, 112, 108, 97, 99, 105, 97, 110, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 108, > 97, 112, 108, 97, 99, 105, 97, 110, 32, 36, 123, 94, 48, 125, 34, 44, > 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 108, 111, 99, 97, 108, 95, > 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 58, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, > 108, 91, 48, 93, 10, 45, 98, 32, 36, 49, 37, 32, 45, 103, 114, 97, > 100, 105, 101, 110, 116, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 32, 50, 32, 45, 99, 111, 109, 112, 108, 101, 120, 50, 112, 111, 108, > 97, 114, 32, 45, 114, 109, 91, 48, 45, 45, 49, 58, 50, 93, 10, 45, > 99, 32, 36, 50, 37, 44, 36, 51, 37, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, > 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 108, 111, 99, 97, 108, 95, 111, 114, 105, > 101, 110, 116, 97, 116, 105, 111, 110, 32, 58, 10, 45, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, > 109, 112, 95, 108, 111, 99, 97, 108, 95, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, > 34, 44, 36, 53, 44, 49, 10, 103, 105, 109, 112, 95, 108, 111, 99, 97, > 108, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 108, 111, 99, 97, 108, 95, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 95, 95, 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 32, 36, 123, > 94, 48, 125, 34, 44, 36, 53, 44, 36, 54, 10, 103, 105, 109, 112, 95, > 109, 111, 114, 112, 104, 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 109, 111, 114, 112, > 104, 111, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 95, 95, > 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 32, 58, 10, 45, 105, > 102, 32, 123, 36, 52, 61, 61, 49, 125, 32, 115, 117, 102, 61, 34, 95, > 111, 99, 116, 34, 32, 45, 101, 108, 105, 102, 32, 123, 36, 52, 61, 61, > 48, 125, 32, 115, 117, 102, 61, 34, 34, 32, 45, 101, 108, 115, 101, 32, > 115, 117, 102, 61, 34, 95, 99, 105, 114, 99, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 32, 45, > 101, 114, 111, 100, 101, 36, 115, 117, 102, 32, 36, 50, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 100, 105, 108, 97, > 116, 101, 36, 115, 117, 102, 32, 36, 50, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 49, 61, 61, 50, 125, 32, 45, 101, 114, 111, 100, 101, 36, 115, > 117, 102, 32, 36, 50, 32, 45, 100, 105, 108, 97, 116, 101, 36, 115, 117, > 102, 32, 36, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 51, 125, 32, 45, 100, 105, 108, 97, 116, 101, 36, 115, 117, 102, 32, 36, > 50, 32, 45, 101, 114, 111, 100, 101, 36, 115, 117, 102, 32, 36, 50, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 52, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 45, 101, 114, 111, 100, 101, > 36, 115, 117, 102, 32, 36, 50, 32, 45, 45, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 53, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 45, 100, 105, 108, > 97, 116, 101, 36, 115, 117, 102, 32, 36, 50, 32, 45, 114, 118, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 54, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 45, 101, 114, 111, 100, 101, > 36, 115, 117, 102, 32, 36, 50, 32, 45, 100, 105, 108, 97, 116, 101, 36, > 115, 117, 102, 91, 45, 49, 93, 32, 36, 50, 32, 45, 45, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 45, 100, 105, 108, 97, 116, 101, 36, 115, > 117, 102, 32, 36, 50, 32, 45, 101, 114, 111, 100, 101, 36, 115, 117, 102, > 91, 45, 49, 93, 32, 36, 50, 32, 45, 114, 118, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 109, 118, > 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 36, 51, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 110, 101, 103, > 97, 116, 105, 118, 101, 91, 48, 93, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, > 116, 101, 114, 115, 104, 101, 100, 32, 58, 10, 45, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 98, 32, 36, 50, > 32, 45, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, 101, 114, 115, > 104, 101, 100, 32, 36, 49, 34, 44, 36, 51, 44, 48, 10, 103, 105, 109, > 112, 95, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, 101, 114, 115, > 104, 101, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 101, 103, 109, 101, 110, 116, > 95, 119, 97, 116, 101, 114, 115, 104, 101, 100, 32, 36, 123, 94, 48, 125, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 107, 101, 108, 101, > 116, 111, 110, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, > 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, 33, 36, 52, 125, 32, > 45, 110, 111, 114, 109, 32, 45, 101, 110, 100, 105, 102, 10, 45, 98, 32, > 36, 50, 37, 10, 45, 105, 102, 32, 36, 49, 32, 45, 116, 104, 105, 110, > 110, 105, 110, 103, 32, 45, 101, 108, 115, 101, 32, 45, 115, 107, 101, 108, > 101, 116, 111, 110, 32, 36, 51, 37, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 42, 32, 50, 53, 53, 10, 103, 105, 109, 112, 95, 115, 107, 101, 108, > 101, 116, 111, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 107, 101, 108, 101, 116, > 111, 110, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 116, 104, 105, 110, 95, 101, 100, 103, 101, 115, 32, 58, 10, > 45, 98, 32, 36, 49, 37, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, > 95, 110, 111, 114, 109, 32, 45, 103, 101, 32, 36, 50, 37, 32, 45, 116, > 104, 105, 110, 110, 105, 110, 103, 10, 45, 105, 102, 32, 123, 33, 36, 51, > 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, > 95, 116, 104, 105, 110, 95, 101, 100, 103, 101, 115, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, > 95, 116, 104, 105, 110, 95, 101, 100, 103, 101, 115, 32, 36, 123, 94, 48, > 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, 117, 115, 116, > 111, 109, 95, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 110, 111, > 114, 109, 91, 45, 49, 93, 32, 91, 45, 49, 93, 32, 45, 102, 91, 45, > 50, 93, 32, 34, 36, 49, 34, 32, 45, 102, 91, 45, 49, 93, 32, 34, > 36, 50, 34, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, > 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, > 51, 44, 36, 52, 44, 36, 53, 44, 49, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 99, 105, 114, 99, 108, 101, 95, 116, 114, > 97, 110, 115, 102, 111, 114, 109, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, > 114, 103, 98, 97, 10, 114, 61, 123, 36, 53, 42, 115, 113, 114, 116, 40, > 119, 94, 50, 43, 104, 94, 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, > 54, 61, 61, 48, 125, 32, 99, 111, 110, 100, 61, 34, 105, 40, 88, 44, > 89, 44, 122, 44, 99, 44, 36, 55, 44, 36, 56, 41, 34, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 54, 61, 61, 49, 125, 32, 99, 111, 110, 100, > 61, 34, 105, 102, 40, 78, 60, 34, 36, 114, 34, 44, 105, 40, 88, 44, > 89, 44, 122, 44, 99, 44, 36, 55, 44, 36, 56, 41, 44, 105, 41, 34, > 10, 45, 101, 108, 115, 101, 32, 99, 111, 110, 100, 61, 34, 105, 102, 40, > 78, 62, 34, 36, 114, 34, 44, 105, 40, 88, 44, 89, 44, 122, 44, 99, > 44, 36, 55, 44, 36, 56, 41, 44, 105, 41, 34, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 102, 32, 39, 85, 61, 120, 45, 119, 42, 36, 49, 59, > 86, 61, 121, 45, 104, 42, 36, 50, 59, 78, 61, 115, 113, 114, 116, 40, > 85, 42, 85, 43, 86, 42, 86, 41, 59, 78, 114, 61, 78, 45, 36, 114, > 59, 88, 61, 120, 43, 36, 51, 42, 78, 114, 42, 85, 47, 78, 59, 89, > 61, 121, 43, 36, 52, 42, 78, 114, 42, 86, 47, 78, 59, 36, 99, 111, > 110, 100, 39, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 103, 105, 109, 112, 95, 99, 105, 114, 99, 108, 101, 95, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 103, 105, 109, 112, 95, 99, 105, 114, 99, 108, 101, 95, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 32, 36, 42, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 120, 48, 61, 123, > 36, 49, 42, 119, 125, 10, 121, 48, 61, 123, 36, 50, 42, 104, 125, 10, > 114, 61, 123, 36, 53, 42, 115, 113, 114, 116, 40, 119, 94, 50, 43, 104, > 94, 50, 41, 125, 10, 45, 105, 102, 32, 36, 57, 10, 45, 99, 105, 114, > 99, 108, 101, 32, 36, 120, 48, 44, 36, 121, 48, 44, 123, 36, 114, 45, > 49, 125, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, > 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, 108, > 101, 32, 36, 120, 48, 44, 36, 121, 48, 44, 123, 36, 114, 43, 49, 125, > 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, > 48, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, 108, 101, 32, > 36, 120, 48, 44, 36, 121, 48, 44, 36, 114, 44, 49, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 50, 53, 53, 44, 48, 44, > 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 101, 117, 99, 108, > 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 58, 10, 45, 105, > 102, 32, 36, 53, 32, 45, 112, 111, 108, 97, 114, 50, 101, 117, 99, 108, > 105, 100, 101, 97, 110, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, > 52, 32, 45, 101, 108, 115, 101, 32, 45, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 102, 108, 111, 119, 101, 114, 32, 58, 10, 45, 102, 108, 111, 119, 101, > 114, 32, 36, 49, 44, 36, 50, 44, 36, 51, 37, 44, 36, 52, 44, 36, > 53, 44, 36, 54, 44, 36, 55, 10, 103, 105, 109, 112, 95, 114, 111, 116, > 111, 105, 100, 111, 115, 99, 111, 112, 101, 32, 58, 10, 45, 114, 111, 116, > 111, 105, 100, 111, 115, 99, 111, 112, 101, 32, 123, 36, 49, 42, 49, 48, > 48, 125, 37, 44, 123, 36, 50, 42, 49, 48, 48, 125, 37, 44, 36, 51, > 44, 36, 52, 37, 44, 36, 53, 10, 103, 105, 109, 112, 95, 107, 97, 108, > 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 58, 10, 45, 115, 104, 105, > 102, 116, 32, 36, 51, 37, 44, 36, 52, 37, 44, 48, 44, 48, 44, 50, > 32, 45, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 36, > 49, 44, 36, 50, 44, 36, 53, 44, 36, 54, 44, 36, 55, 10, 103, 105, > 109, 112, 95, 115, 121, 109, 109, 101, 116, 114, 105, 122, 111, 115, 99, 111, > 112, 101, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 49, 10, 97, 110, 103, 61, 123, 36, 50, > 43, 49, 56, 48, 42, 36, 62, 47, 109, 97, 120, 40, 49, 44, 36, 49, > 45, 49, 41, 125, 10, 45, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, > 32, 53, 48, 37, 44, 53, 48, 37, 44, 36, 97, 110, 103, 44, 36, 51, > 44, 48, 44, 123, 105, 102, 40, 36, 52, 33, 61, 50, 44, 36, 52, 44, > 36, 62, 37, 50, 41, 125, 10, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 119, 97, 114, 112, 95, 112, 101, 114, 115, 112, 101, 99, 116, 105, > 118, 101, 32, 58, 10, 45, 115, 104, 105, 102, 116, 32, 36, 54, 37, 44, > 36, 55, 37, 44, 48, 44, 48, 44, 50, 32, 45, 119, 97, 114, 112, 95, > 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, 101, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 56, 10, 103, 105, > 109, 112, 95, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, 108, > 97, 114, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, > 10, 45, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, 108, 97, > 114, 32, 34, 36, 52, 34, 44, 34, 36, 53, 34, 44, 36, 50, 44, 36, > 51, 44, 36, 54, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 49, 125, 10, 45, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, > 108, 97, 114, 32, 82, 45, 114, 44, 97, 44, 36, 50, 44, 36, 51, 44, > 36, 54, 10, 45, 101, 108, 115, 101, 10, 45, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 95, 112, 111, 108, 97, 114, 32, 97, 42, 82, 47, 40, 50, > 42, 112, 105, 41, 44, 114, 42, 50, 42, 112, 105, 47, 82, 44, 36, 50, > 44, 36, 51, 44, 36, 54, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 114, 101, 102, 108, 101, 99, 116, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 10, 45, 116, 111, 95, 114, 103, 98, 97, > 91, 45, 49, 93, 32, 45, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, > 123, 49, 48, 48, 45, 36, 49, 125, 37, 44, 49, 48, 48, 37, 32, 45, > 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 32, 45, 119, 97, > 116, 101, 114, 91, 45, 49, 93, 32, 36, 55, 44, 36, 56, 10, 45, 115, > 91, 45, 49, 93, 32, 99, 10, 45, 102, 91, 45, 52, 93, 32, 34, 40, > 105, 42, 40, 50, 53, 53, 45, 36, 54, 41, 32, 43, 32, 36, 54, 42, > 36, 51, 41, 47, 50, 53, 53, 34, 10, 45, 102, 91, 45, 51, 93, 32, > 34, 40, 105, 42, 40, 50, 53, 53, 45, 36, 54, 41, 32, 43, 32, 36, > 54, 42, 36, 52, 41, 47, 50, 53, 53, 34, 10, 45, 102, 91, 45, 50, > 93, 32, 34, 40, 105, 42, 40, 50, 53, 53, 45, 36, 54, 41, 32, 43, > 32, 36, 54, 42, 36, 53, 41, 47, 50, 53, 53, 34, 32, 45, 97, 91, > 45, 52, 45, 45, 49, 93, 32, 99, 10, 45, 42, 91, 45, 49, 93, 32, > 39, 40, 104, 94, 36, 50, 45, 121, 94, 36, 50, 41, 47, 104, 94, 36, > 50, 39, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 36, 49, 49, 42, 36, 49, 50, 42, 40, 120, 47, 119, 45, 48, 46, 53, > 41, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 36, 49, 49, 42, 36, 49, 50, 42, 40, 121, 47, 104, 45, > 48, 46, 53, 41, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 34, 36, 49, 48, 42, 40, 120, 47, 119, 45, > 48, 46, 53, 41, 32, 43, 32, 36, 57, 42, 40, 121, 47, 104, 45, 48, > 46, 53, 41, 32, 43, 32, 36, 49, 49, 34, 10, 45, 47, 91, 45, 51, > 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, 45, 51, 93, 32, 48, 46, > 53, 32, 45, 42, 91, 45, 51, 93, 32, 64, 123, 45, 51, 44, 119, 125, > 10, 45, 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, > 93, 32, 48, 46, 53, 32, 45, 42, 91, 45, 49, 93, 32, 123, 104, 125, > 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, > 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 32, 48, 44, 48, 44, 48, 44, 48, 10, 103, 105, 109, 112, > 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 58, 10, 45, 105, 102, > 32, 36, 52, 10, 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, > 101, 114, 114, 111, 114, 32, 34, 80, 114, 105, 111, 114, 105, 116, 121, 32, > 109, 97, 115, 107, 32, 40, 116, 111, 112, 32, 108, 97, 121, 101, 114, 41, > 32, 105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 33, 34, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 95, 103, 105, 109, 112, 95, 115, 101, 97, 109, > 99, 97, 114, 118, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 115, 101, > 97, 109, 99, 97, 114, 118, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 36, 52, 44, 36, 53, 44, 36, 51, 37, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 36, 62, 93, 32, 48, 44, 64, 123, 36, 62, > 44, 115, 45, 50, 125, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, > 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 105, 102, 32, 36, 52, 10, 45, 105, 102, 32, > 123, 64, 35, 60, 50, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, > 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 34, 80, 114, > 105, 111, 114, 105, 116, 121, 32, 109, 97, 115, 107, 32, 40, 116, 111, 112, > 32, 108, 97, 121, 101, 114, 41, 32, 105, 115, 32, 109, 105, 115, 115, 105, > 110, 103, 33, 34, 44, 53, 44, 53, 44, 49, 56, 44, 50, 32, 45, 114, > 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 95, 103, > 105, 109, 112, 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 10, 45, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 36, 49, > 37, 44, 36, 50, 37, 44, 36, 52, 44, 36, 53, 44, 123, 109, 97, 120, > 40, 36, 51, 44, 49, 48, 41, 125, 37, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 123, 115, 45, > 50, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 114, 103, > 98, 97, 32, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, > 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 99, 32, 48, 44, > 50, 53, 53, 10, 95, 103, 105, 109, 112, 95, 115, 101, 97, 109, 99, 97, > 114, 118, 101, 32, 58, 10, 45, 109, 118, 91, 48, 93, 32, 64, 35, 10, > 45, 108, 91, 45, 49, 93, 10, 45, 115, 32, 99, 32, 45, 107, 91, 48, > 44, 49, 93, 10, 45, 103, 116, 91, 49, 93, 32, 91, 48, 93, 32, 45, > 33, 61, 91, 48, 93, 32, 48, 32, 45, 45, 91, 48, 93, 32, 91, 49, > 93, 32, 45, 42, 91, 48, 93, 32, 45, 49, 32, 45, 43, 32, 45, 42, > 32, 50, 53, 54, 10, 45, 101, 110, 100, 108, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 97, 91, 36, 62, 93, > 32, 91, 45, 49, 93, 44, 99, 32, 45, 100, 111, 110, 101, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 109, 97, 112, 95, 115, > 112, 104, 101, 114, 101, 32, 58, 10, 45, 114, 111, 116, 97, 116, 101, 32, > 123, 36, 56, 42, 57, 48, 125, 10, 45, 105, 102, 32, 36, 54, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, 105, 102, 116, > 91, 45, 49, 93, 32, 53, 48, 37, 44, 48, 44, 48, 44, 48, 44, 50, > 32, 45, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 123, > 40, 49, 45, 36, 55, 47, 49, 48, 48, 41, 42, 119, 47, 50, 125, 44, > 123, 40, 49, 43, 36, 55, 47, 49, 48, 48, 41, 42, 119, 47, 50, 125, > 10, 49, 48, 48, 37, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, > 45, 49, 93, 32, 123, 48, 46, 49, 42, 119, 125, 44, 123, 104, 125, 44, > 48, 32, 49, 48, 48, 37, 32, 49, 48, 48, 37, 32, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 51, 10, 45, 115, 109, > 111, 111, 116, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 54, > 44, 53, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 106, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 123, 40, 49, 45, 36, 55, 47, > 49, 48, 48, 41, 42, 64, 123, 45, 50, 44, 119, 125, 47, 50, 125, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 105, 102, 116, 91, 45, > 49, 93, 32, 45, 53, 48, 37, 44, 48, 44, 48, 44, 48, 44, 50, 10, > 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 115, 104, 105, 102, 116, 32, 36, 53, > 37, 44, 48, 44, 48, 44, 48, 44, 50, 32, 45, 116, 111, 95, 114, 103, > 98, 97, 10, 45, 105, 102, 32, 36, 57, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 10, 45, 45, 114, 111, 119, 115, 91, 36, 62, 93, 32, > 48, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 49, 44, 49, 44, 52, > 44, 50, 32, 82, 71, 66, 65, 36, 62, 61, 64, 45, 49, 10, 45, 114, > 91, 45, 49, 93, 32, 91, 36, 62, 93, 44, 91, 36, 62, 93, 44, 49, > 44, 52, 32, 45, 45, 91, 36, 62, 44, 45, 49, 93, 10, 45, 100, 111, > 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 109, 97, 112, 95, 115, > 112, 104, 101, 114, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, > 52, 44, 36, 49, 48, 44, 36, 49, 49, 10, 45, 105, 102, 32, 36, 57, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 40, 36, 123, 82, > 71, 66, 65, 36, 62, 125, 41, 32, 45, 121, 91, 45, 49, 93, 32, 99, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 36, 62, 93, 44, 91, 36, 62, > 93, 44, 49, 44, 52, 32, 45, 43, 91, 36, 62, 44, 45, 49, 93, 10, > 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, > 112, 95, 109, 97, 112, 95, 115, 112, 104, 101, 114, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 109, 97, 112, > 95, 115, 112, 104, 101, 114, 101, 32, 123, 119, 125, 44, 123, 104, 125, 44, > 36, 123, 51, 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, 115, 121, 109, > 109, 101, 116, 114, 105, 122, 101, 32, 58, 10, 45, 116, 111, 95, 114, 103, > 98, 97, 32, 45, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 36, > 49, 37, 44, 36, 50, 37, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, > 36, 54, 10, 103, 105, 109, 112, 95, 115, 121, 109, 109, 101, 116, 114, 105, > 122, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 36, 42, > 10, 116, 104, 101, 116, 97, 61, 123, 36, 51, 42, 112, 105, 47, 49, 56, > 48, 125, 32, 117, 61, 123, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, > 41, 125, 32, 118, 61, 123, 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, > 41, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 120, 48, 61, 123, 119, 42, 36, 49, 37, 125, 10, > 121, 48, 61, 123, 104, 42, 36, 50, 37, 125, 10, 120, 49, 61, 123, 36, > 120, 48, 45, 109, 97, 120, 40, 119, 44, 104, 41, 42, 36, 117, 125, 32, > 121, 49, 61, 123, 36, 121, 48, 45, 109, 97, 120, 40, 119, 44, 104, 41, > 42, 36, 118, 125, 10, 120, 50, 61, 123, 36, 120, 48, 43, 109, 97, 120, > 40, 119, 44, 104, 41, 42, 36, 117, 125, 32, 121, 50, 61, 123, 36, 121, > 48, 43, 109, 97, 120, 40, 119, 44, 104, 41, 42, 36, 118, 125, 10, 45, > 108, 105, 110, 101, 32, 36, 120, 49, 44, 36, 121, 49, 44, 36, 120, 50, > 44, 36, 121, 50, 44, 49, 44, 48, 120, 48, 70, 48, 70, 48, 70, 48, > 70, 44, 48, 10, 45, 108, 105, 110, 101, 32, 36, 120, 49, 44, 36, 121, > 49, 44, 36, 120, 50, 44, 36, 121, 50, 44, 49, 44, 48, 120, 70, 48, > 70, 48, 70, 48, 70, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, > 108, 101, 32, 36, 120, 48, 44, 36, 121, 48, 44, 51, 44, 49, 44, 48, > 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, > 108, 101, 32, 36, 120, 48, 44, 36, 121, 48, 44, 51, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 103, 105, 109, 112, 95, 116, 101, 120, 116, 117, 114, 101, 100, 95, 103, 108, > 97, 115, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 44, 49, 10, 45, 105, 102, 32, 36, 55, 32, 45, 112, 108, > 97, 115, 109, 97, 91, 45, 49, 93, 32, 49, 44, 49, 44, 36, 55, 32, > 45, 101, 108, 115, 101, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 103, 91, 45, 49, > 93, 32, 120, 121, 10, 45, 105, 102, 32, 36, 53, 10, 45, 45, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 91, 45, 51, 93, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 98, 91, 45, 49, 93, 32, > 36, 54, 32, 45, 94, 91, 45, 49, 93, 32, 45, 36, 53, 10, 45, 42, > 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 98, 108, 117, 114, > 95, 120, 121, 91, 45, 50, 44, 45, 49, 93, 32, 36, 51, 44, 36, 52, > 10, 45, 42, 91, 45, 50, 93, 32, 64, 123, 45, 50, 44, 36, 49, 47, > 109, 97, 120, 40, 97, 98, 115, 40, 105, 109, 41, 44, 97, 98, 115, 40, > 105, 77, 41, 41, 125, 10, 45, 42, 91, 45, 49, 93, 32, 64, 123, 45, > 49, 44, 36, 50, 47, 109, 97, 120, 40, 97, 98, 115, 40, 105, 109, 41, > 44, 97, 98, 115, 40, 105, 77, 41, 41, 125, 10, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 99, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 49, 44, 49, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 116, 101, 120, 116, 117, 114, 101, 100, 95, 103, 108, 97, 115, > 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 116, 101, 120, 116, 117, 114, 101, 100, 95, > 103, 108, 97, 115, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 119, 105, 110, 100, 32, 58, 10, 45, 105, 102, 32, 123, 33, > 36, 53, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 119, 105, 110, 100, 32, 36, 123, 49, 45, > 52, 125, 34, 44, 36, 45, 50, 10, 45, 105, 102, 32, 123, 33, 36, 53, > 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 119, 105, 110, 100, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 119, 105, 110, 100, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 122, 111, 111, 109, 32, 58, 10, 45, 105, 102, 32, 123, > 36, 49, 60, 49, 125, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 122, 111, 111, 109, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 44, 48, 44, 36, 52, 10, 103, 105, 109, 112, 95, 98, > 108, 117, 114, 95, 97, 110, 103, 117, 108, 97, 114, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 98, 108, 117, 114, 95, 97, 110, 103, 117, 108, 97, 114, 32, 36, 49, 37, > 44, 36, 50, 44, 36, 51, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, > 36, 52, 34, 44, 36, 53, 44, 36, 54, 10, 103, 105, 109, 112, 95, 98, > 108, 117, 114, 95, 100, 111, 102, 32, 58, 10, 45, 95, 36, 48, 32, 36, > 123, 49, 45, 49, 48, 125, 44, 48, 44, 36, 49, 50, 10, 103, 105, 109, > 112, 95, 98, 108, 117, 114, 95, 100, 111, 102, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 98, 108, 117, 114, > 95, 100, 111, 102, 32, 36, 42, 10, 95, 103, 105, 109, 112, 95, 98, 108, > 117, 114, 95, 100, 111, 102, 32, 58, 10, 45, 105, 102, 32, 123, 33, 36, > 51, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 32, 45, 105, 102, 32, 36, 49, 49, 32, 45, 100, 114, > 103, 98, 97, 32, 45, 101, 110, 100, 105, 102, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, > 114, 109, 97, 120, 61, 123, 40, 119, 42, 119, 43, 104, 42, 104, 41, 94, > 48, 46, 53, 125, 32, 82, 61, 123, 36, 55, 42, 36, 114, 109, 97, 120, > 47, 49, 48, 48, 125, 32, 114, 61, 123, 36, 56, 42, 36, 114, 109, 97, > 120, 47, 49, 48, 48, 125, 10, 116, 61, 123, 36, 57, 42, 112, 105, 47, > 49, 56, 48, 125, 32, 117, 61, 123, 99, 111, 115, 40, 36, 116, 41, 125, > 32, 118, 61, 123, 115, 105, 110, 40, 36, 116, 41, 125, 10, 108, 49, 61, > 123, 40, 36, 114, 109, 97, 120, 47, 40, 49, 101, 45, 56, 43, 36, 82, > 41, 41, 94, 50, 125, 32, 108, 50, 61, 123, 40, 36, 114, 109, 97, 120, > 47, 40, 49, 101, 45, 56, 43, 36, 114, 41, 41, 94, 50, 125, 10, 97, > 61, 123, 36, 108, 49, 42, 40, 36, 117, 41, 94, 50, 43, 36, 108, 50, > 42, 40, 36, 118, 41, 94, 50, 125, 32, 98, 61, 123, 36, 117, 42, 36, > 118, 42, 40, 36, 108, 49, 45, 36, 108, 50, 41, 125, 32, 99, 61, 123, > 36, 108, 49, 42, 40, 36, 118, 41, 94, 50, 43, 36, 108, 50, 42, 40, > 36, 117, 41, 94, 50, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 44, 39, 88, 61, 40, 120, 45, 36, 53, 42, 119, 47, > 49, 48, 48, 41, 47, 109, 97, 120, 40, 119, 44, 104, 41, 59, 89, 61, > 40, 121, 45, 36, 54, 42, 104, 47, 49, 48, 48, 41, 47, 109, 97, 120, > 40, 119, 44, 104, 41, 59, 102, 61, 36, 97, 42, 88, 42, 88, 43, 50, > 42, 36, 98, 42, 88, 42, 89, 43, 36, 99, 42, 89, 42, 89, 59, 101, > 120, 112, 40, 45, 102, 94, 36, 49, 48, 47, 50, 46, 53, 41, 39, 10, > 45, 45, 91, 49, 93, 32, 49, 32, 45, 42, 91, 49, 93, 32, 45, 36, > 49, 32, 109, 115, 61, 123, 105, 109, 125, 32, 77, 115, 61, 123, 105, 77, > 125, 10, 45, 105, 102, 32, 36, 49, 49, 10, 45, 45, 105, 115, 111, 108, > 105, 110, 101, 51, 100, 91, 49, 93, 32, 123, 48, 46, 49, 42, 36, 49, > 125, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, > 44, 50, 53, 53, 44, 48, 10, 45, 45, 105, 115, 111, 108, 105, 110, 101, > 51, 100, 91, 49, 93, 32, 123, 48, 46, 53, 42, 36, 49, 125, 32, 45, > 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 49, 50, > 56, 44, 48, 10, 45, 43, 51, 100, 91, 45, 50, 45, 45, 49, 93, 10, > 45, 95, 95, 103, 105, 109, 112, 95, 100, 111, 102, 95, 98, 108, 117, 114, > 91, 48, 44, 49, 93, 32, 36, 50, 44, 36, 109, 115, 44, 36, 77, 115, > 44, 36, 52, 10, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 51, 32, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 44, 48, 44, 48, > 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 99, 105, 114, 99, 108, 101, > 91, 45, 49, 93, 32, 36, 53, 37, 44, 36, 54, 37, 44, 51, 44, 49, > 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 10, 45, 45, 99, > 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 43, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 45, > 106, 91, 48, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 95, > 95, 103, 105, 109, 112, 95, 100, 111, 102, 95, 98, 108, 117, 114, 91, 48, > 44, 49, 93, 32, 36, 50, 44, 36, 109, 115, 44, 36, 77, 115, 44, 36, > 52, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 105, 102, 32, 36, 49, 49, 32, 45, 107, 91, 48, 93, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 64, 35, 62, 49, > 125, 10, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 45, 49, 93, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 94, 91, 45, > 49, 93, 32, 123, 49, 48, 94, 36, 49, 50, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 45, 114, 91, 45, > 49, 93, 32, 64, 123, 36, 62, 44, 119, 125, 44, 64, 123, 36, 62, 44, > 104, 125, 44, 49, 44, 49, 44, 51, 32, 45, 108, 91, 36, 62, 44, 45, > 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 91, 48, 93, 10, 45, 95, 95, 103, 105, 109, 112, 95, 100, 111, 102, > 95, 98, 108, 117, 114, 91, 48, 44, 45, 49, 93, 32, 36, 50, 44, 48, > 44, 36, 49, 44, 36, 52, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 108, 115, 101, 32, 45, 100, 114, 103, 98, 97, 32, 45, 116, 101, > 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 34, 68, 101, 112, 116, > 104, 45, 111, 102, 45, 102, 105, 101, 108, 100, 32, 40, 98, 111, 116, 116, > 111, 109, 32, 108, 97, 121, 101, 114, 41, 32, 105, 115, 32, 109, 105, 115, > 115, 105, 110, 103, 32, 33, 34, 44, 50, 44, 50, 44, 49, 51, 44, 50, > 44, 49, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, 95, 95, > 103, 105, 109, 112, 95, 100, 111, 102, 95, 98, 108, 117, 114, 32, 58, 10, > 45, 110, 91, 49, 93, 32, 48, 44, 123, 36, 49, 45, 49, 125, 32, 45, > 114, 111, 117, 110, 100, 91, 49, 93, 10, 91, 48, 93, 44, 91, 48, 93, > 44, 49, 44, 64, 123, 48, 44, 115, 43, 49, 125, 10, 115, 61, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 45, 45, 61, 61, 91, > 49, 93, 32, 123, 105, 102, 40, 36, 52, 44, 36, 60, 44, 36, 62, 41, > 125, 32, 45, 98, 91, 45, 49, 93, 32, 50, 37, 10, 45, 106, 91, 45, > 50, 93, 32, 91, 48, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 45, > 49, 44, 91, 45, 49, 93, 44, 49, 10, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, > 45, 49, 10, 45, 114, 109, 91, 45, 49, 93, 10, 110, 115, 61, 123, 36, > 50, 43, 40, 36, 51, 45, 36, 50, 41, 42, 40, 36, 62, 43, 49, 41, > 47, 40, 36, 49, 45, 49, 41, 125, 10, 45, 98, 91, 48, 93, 32, 123, > 115, 113, 114, 116, 40, 36, 110, 115, 94, 50, 45, 36, 115, 94, 50, 41, > 125, 37, 10, 115, 61, 36, 110, 115, 10, 45, 100, 111, 110, 101, 10, 45, > 115, 91, 45, 49, 93, 32, 99, 44, 123, 45, 115, 43, 49, 125, 32, 45, > 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 48, 44, 49, > 93, 10, 95, 103, 105, 109, 112, 95, 103, 97, 117, 115, 115, 105, 97, 110, > 95, 98, 108, 117, 114, 32, 58, 10, 45, 98, 32, 36, 49, 44, 36, 52, > 10, 45, 105, 102, 32, 123, 36, 50, 62, 48, 125, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, > 32, 121, 32, 45, 98, 32, 36, 50, 44, 36, 52, 32, 45, 97, 32, 121, > 32, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 36, 51, 62, 48, 125, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 32, 120, 32, > 45, 98, 32, 36, 51, 44, 36, 52, 32, 45, 97, 32, 120, 32, 45, 101, > 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, > 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, > 103, 97, 117, 115, 115, 105, 97, 110, 95, 98, 108, 117, 114, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 34, 45, 95, 103, 105, 109, 112, 95, 103, 97, 117, 115, 115, 105, 97, 110, > 95, 98, 108, 117, 114, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, > 52, 34, 44, 36, 53, 44, 36, 54, 10, 103, 105, 109, 112, 95, 103, 97, > 117, 115, 115, 105, 97, 110, 95, 98, 108, 117, 114, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, > 95, 103, 97, 117, 115, 115, 105, 97, 110, 95, 98, 108, 117, 114, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 103, 108, 111, 119, > 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 34, 45, 103, 108, 111, 119, 32, 36, 49, 34, 44, 36, 50, > 44, 48, 10, 103, 105, 109, 112, 95, 103, 108, 111, 119, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 103, 108, 111, 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, > 36, 49, 44, 123, 36, 50, 42, 36, 49, 47, 49, 48, 48, 125, 44, 36, > 51, 44, 36, 53, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, 52, > 34, 44, 36, 54, 44, 36, 55, 10, 103, 105, 109, 112, 95, 98, 108, 117, > 114, 95, 108, 105, 110, 101, 97, 114, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 98, 108, > 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 98, 108, 117, 114, 95, 114, 97, 100, 105, > 97, 108, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 98, 108, 117, 114, 95, 114, 97, 100, 105, > 97, 108, 32, 36, 49, 37, 44, 36, 50, 44, 36, 51, 32, 45, 115, 104, > 97, 114, 112, 101, 110, 32, 36, 52, 34, 44, 36, 53, 44, 36, 54, 10, > 103, 105, 109, 112, 95, 108, 111, 109, 111, 32, 58, 10, 45, 114, 101, 109, > 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, > 103, 97, 117, 115, 115, 105, 97, 110, 32, 123, 49, 48, 48, 45, 36, 49, > 125, 37, 44, 123, 49, 48, 48, 45, 36, 49, 125, 37, 32, 45, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 42, 10, 45, 115, 32, 99, 10, 45, 102, 91, 48, 93, 32, 39, 50, > 53, 53, 42, 97, 116, 97, 110, 40, 40, 105, 45, 49, 50, 56, 41, 47, > 49, 50, 56, 41, 39, 10, 45, 102, 91, 49, 93, 32, 39, 50, 53, 53, > 42, 116, 97, 110, 40, 40, 105, 45, 49, 50, 56, 41, 47, 49, 50, 56, > 41, 39, 10, 45, 102, 91, 50, 93, 32, 39, 50, 53, 53, 42, 97, 116, > 97, 110, 40, 40, 105, 45, 49, 50, 56, 41, 47, 50, 53, 53, 41, 39, > 10, 45, 97, 32, 99, 10, 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, > 10, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 108, 111, 109, 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 108, 111, 109, > 111, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 110, > 111, 105, 115, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 110, 111, 105, 115, 101, 32, 36, > 49, 44, 36, 50, 34, 44, 36, 51, 44, 36, 52, 10, 103, 105, 109, 112, > 95, 110, 111, 105, 115, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 110, 111, 105, 115, > 101, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, > 112, 114, 101, 97, 100, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 115, 112, 114, 101, 97, 100, > 32, 36, 49, 44, 36, 50, 34, 44, 36, 51, 44, 48, 10, 103, 105, 109, > 112, 95, 115, 112, 114, 101, 97, 100, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 112, > 114, 101, 97, 100, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, > 112, 95, 115, 116, 114, 105, 112, 101, 115, 95, 121, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 115, 116, 114, 105, 112, 101, 115, 95, 121, 32, 36, 49, 34, 44, 36, 50, > 44, 48, 10, 103, 105, 109, 112, 95, 115, 116, 114, 105, 112, 101, 115, 95, > 121, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 115, 116, 114, 105, 112, 101, 115, 95, 121, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 56, 98, > 105, 116, 115, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, > 123, 104, 125, 10, 45, 114, 32, 36, 49, 37, 44, 36, 49, 37, 44, 49, > 44, 49, 48, 48, 37, 44, 50, 10, 45, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, > 32, 36, 50, 32, 45, 111, 116, 115, 117, 91, 45, 49, 93, 32, 50, 53, > 54, 32, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, > 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, 10, 45, 108, > 91, 45, 49, 93, 32, 45, 115, 32, 99, 32, 45, 113, 117, 97, 110, 116, > 105, 122, 101, 32, 36, 51, 44, 49, 44, 49, 32, 45, 97, 32, 99, 32, > 45, 101, 110, 100, 108, 10, 45, 114, 91, 45, 49, 93, 32, 36, 119, 44, > 36, 104, 44, 49, 44, 49, 48, 48, 37, 44, 49, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 56, 98, 105, > 116, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 56, 98, 105, 116, 115, 32, 36, 42, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 104, 97, 100, 101, > 95, 115, 116, 114, 105, 112, 101, 115, 32, 58, 10, 45, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 115, 104, 97, > 100, 101, 95, 115, 116, 114, 105, 112, 101, 115, 32, 36, 49, 44, 36, 50, > 44, 36, 51, 44, 36, 52, 34, 44, 36, 53, 44, 48, 10, 103, 105, 109, > 112, 95, 115, 104, 97, 100, 101, 95, 115, 116, 114, 105, 112, 101, 115, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 115, 104, 97, 100, 101, 95, 115, 116, 114, 105, 112, > 101, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, 118, 105, 115, 105, 98, 108, > 101, 32, 58, 10, 45, 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, 118, > 105, 115, 105, 98, 108, 101, 32, 34, 36, 49, 34, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 36, 54, 44, 36, 53, 10, 95, 103, 105, 109, 112, > 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, 108, > 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 100, 101, 116, > 97, 105, 108, 115, 32, 53, 44, 53, 37, 44, 48, 46, 53, 37, 10, 45, > 95, 95, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, > 100, 101, 116, 97, 105, 108, 115, 91, 49, 93, 32, 36, 123, 49, 45, 52, > 125, 44, 56, 10, 45, 95, 95, 103, 105, 109, 112, 95, 101, 113, 117, 97, > 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, 108, 115, 91, 50, 93, 32, > 36, 123, 53, 45, 56, 125, 44, 52, 10, 45, 95, 95, 103, 105, 109, 112, > 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, 108, > 115, 91, 51, 93, 32, 36, 123, 57, 45, 49, 50, 125, 44, 50, 10, 45, > 95, 95, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, > 100, 101, 116, 97, 105, 108, 115, 91, 52, 93, 32, 36, 123, 49, 51, 45, > 49, 54, 125, 44, 49, 10, 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 95, 95, > 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, > 116, 97, 105, 108, 115, 32, 58, 10, 45, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 36, 49, 44, 49, 10, 45, 105, 102, 32, 123, 36, 51, 61, > 61, 48, 125, 32, 45, 98, 32, 123, 36, 50, 42, 36, 53, 47, 50, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 49, 125, 10, 45, > 105, 102, 32, 123, 36, 50, 62, 48, 125, 10, 109, 61, 123, 105, 109, 125, > 32, 77, 61, 123, 105, 77, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, > 116, 40, 36, 50, 47, 53, 41, 125, 32, 45, 98, 105, 108, 97, 116, 101, > 114, 97, 108, 32, 49, 53, 44, 123, 53, 42, 36, 53, 125, 32, 45, 100, > 111, 110, 101, 10, 45, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, 49, > 53, 44, 123, 40, 36, 50, 37, 53, 41, 42, 36, 53, 125, 10, 45, 42, > 91, 45, 49, 93, 32, 123, 40, 36, 77, 45, 36, 109, 41, 47, 50, 53, > 53, 125, 32, 45, 43, 91, 45, 49, 93, 32, 36, 109, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, 115, 109, 111, 111, 116, > 104, 32, 123, 36, 50, 42, 53, 48, 125, 44, 48, 46, 50, 44, 48, 46, > 56, 44, 36, 53, 44, 36, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 42, 32, 123, 49, 48, 94, 36, 52, 125, 10, 103, 105, 109, 112, 95, 101, > 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, 108, 115, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, > 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 95, 103, 105, > 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, > 105, 108, 115, 32, 36, 123, 49, 45, 49, 54, 125, 92, 34, 44, 36, 49, > 55, 44, 36, 49, 56, 34, 44, 36, 49, 57, 44, 48, 10, 103, 105, 109, > 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, > 108, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, > 95, 100, 101, 116, 97, 105, 108, 115, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 95, 103, 105, 109, 112, 95, 102, 114, 101, 97, 107, 121, 95, 100, 101, > 116, 97, 105, 108, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 51, 10, 91, 45, 49, 93, 32, 45, 45, 45, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 98, 105, 108, 97, > 116, 101, 114, 97, 108, 91, 45, 49, 93, 32, 36, 50, 44, 123, 49, 46, > 53, 42, 36, 50, 125, 32, 45, 100, 111, 110, 101, 10, 45, 98, 108, 101, > 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 118, 105, 118, 105, 100, 108, > 105, 103, 104, 116, 32, 45, 98, 108, 101, 110, 100, 32, 111, 118, 101, 114, > 108, 97, 121, 10, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 102, 114, 101, 97, 107, > 121, 95, 100, 101, 116, 97, 105, 108, 115, 32, 58, 10, 45, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, > 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, > 108, 97, 112, 32, 92, 34, 45, 95, 103, 105, 109, 112, 95, 102, 114, 101, > 97, 107, 121, 95, 100, 101, 116, 97, 105, 108, 115, 32, 36, 123, 49, 45, > 51, 125, 92, 34, 44, 36, 53, 44, 36, 54, 34, 44, 36, 52, 44, 48, > 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 102, > 114, 101, 97, 107, 121, 95, 100, 101, 116, 97, 105, 108, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 102, 114, 101, 97, 107, 121, 95, 100, 101, 116, 97, 105, 108, > 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 32, 58, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, > 97, 108, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, > 53, 44, 48, 44, 50, 53, 53, 34, 44, 36, 54, 44, 48, 10, 103, 105, > 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, > 97, 108, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 95, 108, 111, 99, 97, 108, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 100, 101, 98, 108, 117, 114, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, > 101, 114, 108, 97, 112, 32, 92, 34, 45, 100, 101, 98, 108, 117, 114, 32, > 36, 123, 49, 45, 53, 125, 32, 45, 99, 32, 48, 44, 50, 53, 53, 92, > 34, 44, 36, 55, 44, 36, 56, 34, 44, 36, 54, 44, 48, 10, 103, 105, > 109, 112, 95, 100, 101, 98, 108, 117, 114, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 100, > 101, 98, 108, 117, 114, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 103, 111, 108, 100, 109, > 101, 105, 110, 101, 108, 58, 10, 45, 103, 105, 109, 112, 95, 112, 97, 114, > 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 34, 45, > 95, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 103, 111, > 108, 100, 109, 101, 105, 110, 101, 108, 32, 36, 42, 34, 44, 36, 54, 44, > 36, 55, 10, 95, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, > 95, 103, 111, 108, 100, 109, 101, 105, 110, 101, 108, 32, 58, 10, 45, 100, > 101, 98, 108, 117, 114, 95, 103, 111, 108, 100, 109, 101, 105, 110, 101, 108, > 32, 36, 42, 10, 45, 105, 102, 32, 36, 53, 32, 45, 99, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 110, 32, 48, 44, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 117, > 110, 115, 104, 97, 114, 112, 95, 103, 111, 108, 100, 109, 101, 105, 110, 101, > 108, 95, 112, 114, 101, 118, 105, 101, 119, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 103, 111, > 108, 100, 109, 101, 105, 110, 101, 108, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 115, 104, 97, 114, 112, 101, 110, 95, 105, 110, > 118, 101, 114, 115, 101, 100, 105, 102, 102, 32, 58, 10, 45, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, > 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, > 108, 97, 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, 49, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 32, 45, 100, 111, 110, 101, 92, 34, 44, 36, 52, > 44, 36, 53, 34, 44, 36, 51, 44, 48, 10, 103, 105, 109, 112, 95, 115, > 104, 97, 114, 112, 101, 110, 95, 105, 110, 118, 101, 114, 115, 101, 100, 105, > 102, 102, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 115, 104, 97, 114, 112, 101, 110, 95, > 105, 110, 118, 101, 114, 115, 101, 100, 105, 102, 102, 32, 36, 42, 34, 44, > 36, 45, 49, 10, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, > 95, 111, 99, 116, 97, 118, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, > 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, > 112, 32, 92, 34, 45, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, > 97, 118, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 92, > 34, 44, 36, 54, 44, 36, 55, 34, 44, 36, 53, 44, 48, 10, 103, 105, > 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, 97, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 111, > 99, 116, 97, 118, 101, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 114, 105, 99, 104, 97, > 114, 100, 115, 111, 110, 108, 117, 99, 121, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, > 97, 112, 32, 34, 45, 95, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, > 114, 112, 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, 99, > 121, 32, 36, 42, 34, 44, 36, 53, 44, 36, 54, 10, 95, 103, 105, 109, > 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 114, 105, 99, 104, 97, 114, > 100, 115, 111, 110, 108, 117, 99, 121, 32, 58, 10, 45, 100, 101, 98, 108, > 117, 114, 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, 99, > 121, 32, 36, 42, 10, 45, 105, 102, 32, 36, 52, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 110, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, > 117, 110, 115, 104, 97, 114, 112, 95, 114, 105, 99, 104, 97, 114, 100, 115, > 111, 110, 108, 117, 99, 121, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 117, 110, 115, 104, > 97, 114, 112, 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, > 99, 121, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 115, 104, 97, 114, 112, 101, 110, 95, 115, 104, 111, 99, 107, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 34, 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, > 111, 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 53, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, 49, > 44, 36, 50, 44, 36, 51, 44, 36, 52, 32, 45, 99, 32, 48, 44, 50, > 53, 53, 32, 45, 100, 111, 110, 101, 92, 34, 44, 36, 55, 44, 36, 56, > 34, 44, 36, 54, 44, 48, 10, 103, 105, 109, 112, 95, 115, 104, 97, 114, > 112, 101, 110, 95, 115, 104, 111, 99, 107, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, > 104, 97, 114, 112, 101, 110, 95, 115, 104, 111, 99, 107, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, > 114, 112, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 56, 10, 45, 105, 102, 32, 123, > 36, 49, 61, 61, 48, 125, 32, 45, 45, 98, 91, 45, 49, 93, 32, 36, > 50, 32, 45, 101, 108, 115, 101, 32, 45, 45, 98, 105, 108, 97, 116, 101, > 114, 97, 108, 91, 45, 49, 93, 32, 36, 50, 44, 36, 51, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 45, 36, 52, 10, 45, 45, 110, 111, > 114, 109, 91, 45, 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, > 53, 37, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 36, 57, 32, > 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 45, 99, 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 32, > 45, 99, 91, 45, 50, 93, 32, 45, 49, 48, 48, 37, 44, 48, 32, 45, > 42, 91, 45, 50, 93, 32, 36, 54, 32, 45, 42, 91, 45, 49, 93, 32, > 36, 55, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 43, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 100, 111, 110, 101, 32, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 117, > 110, 115, 104, 97, 114, 112, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, > 95, 117, 110, 115, 104, 97, 114, 112, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, > 44, 36, 57, 34, 44, 36, 49, 48, 44, 48, 10, 103, 105, 109, 112, 95, > 117, 110, 115, 104, 97, 114, 112, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 117, 110, 115, > 104, 97, 114, 112, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 95, > 97, 108, 112, 104, 97, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, 95, > 111, 112, 97, 99, 105, 116, 121, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 36, 49, 45, 49, 125, 10, 115, 61, 123, 36, 51, 43, 40, > 36, 50, 45, 36, 51, 41, 42, 36, 62, 47, 105, 102, 40, 36, 49, 45, > 50, 62, 48, 44, 36, 49, 45, 50, 44, 49, 41, 125, 10, 45, 45, 95, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, > 108, 115, 95, 97, 108, 112, 104, 97, 95, 98, 108, 117, 114, 91, 45, 49, > 93, 32, 36, 115, 10, 45, 45, 115, 117, 98, 95, 97, 108, 112, 104, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 36, 52, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 100, 111, > 110, 101, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 114, 118, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 95, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, > 95, 97, 108, 112, 104, 97, 95, 98, 108, 117, 114, 32, 58, 10, 45, 105, > 102, 32, 123, 36, 49, 62, 61, 48, 46, 49, 125, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 49, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, > 123, 36, 49, 62, 61, 48, 46, 48, 53, 125, 32, 40, 49, 44, 52, 44, > 55, 44, 52, 44, 49, 59, 52, 44, 49, 54, 44, 50, 54, 44, 49, 54, > 44, 52, 59, 55, 44, 50, 54, 44, 52, 49, 44, 50, 54, 44, 55, 59, > 52, 44, 49, 54, 44, 50, 54, 44, 49, 54, 44, 52, 59, 49, 44, 52, > 44, 55, 44, 52, 44, 49, 41, 10, 45, 101, 108, 115, 101, 32, 40, 49, > 44, 50, 44, 49, 59, 50, 44, 52, 44, 50, 59, 49, 44, 50, 44, 49, > 41, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 111, 114, 109, 97, 108, > 105, 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 32, 45, 99, 111, 110, > 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, > 95, 97, 108, 112, 104, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, > 97, 105, 108, 115, 95, 97, 108, 112, 104, 97, 32, 36, 123, 49, 45, 52, > 125, 10, 45, 105, 102, 32, 36, 53, 32, 45, 114, 101, 109, 111, 118, 101, > 95, 111, 112, 97, 99, 105, 116, 121, 91, 94, 45, 49, 93, 32, 45, 101, > 108, 115, 101, 32, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 114, 103, 98, 97, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 34, > 92, 35, 34, 123, 49, 43, 36, 62, 125, 44, 49, 44, 49, 44, 52, 51, > 44, 55, 44, 49, 44, 50, 53, 53, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, > 101, 115, 32, 44, 10, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 100, 101, 116, 97, 105, 108, 115, 32, 58, 10, 45, 114, 101, 109, 111, 118, > 101, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, 36, > 49, 61, 61, 49, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 60, 93, 10, 45, 45, 114, 111, 119, 115, 32, 48, > 32, 118, 108, 105, 115, 116, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 109, 97, 103, 105, 99, 107, 61, 123, 97, > 114, 103, 40, 49, 44, 36, 118, 108, 105, 115, 116, 41, 125, 32, 110, 98, > 95, 105, 109, 103, 115, 61, 123, 49, 43, 97, 114, 103, 40, 50, 44, 36, > 118, 108, 105, 115, 116, 41, 125, 32, 109, 111, 100, 101, 61, 123, 97, 114, > 103, 40, 51, 44, 36, 118, 108, 105, 115, 116, 41, 125, 10, 45, 105, 102, > 32, 123, 36, 109, 97, 103, 105, 99, 107, 33, 61, 55, 49, 55, 55, 55, > 51, 54, 55, 124, 124, 36, 110, 98, 95, 105, 109, 103, 115, 60, 50, 124, > 124, 36, 109, 111, 100, 101, 60, 48, 124, 124, 36, 109, 111, 100, 101, 62, > 50, 125, 32, 45, 101, 114, 114, 111, 114, 32, 34, 34, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 109, 111, 100, 101, 61, 61, > 48, 125, 32, 45, 115, 32, 120, 44, 36, 110, 98, 95, 105, 109, 103, 115, > 32, 45, 101, 108, 105, 102, 32, 123, 36, 109, 111, 100, 101, 61, 61, 49, > 125, 32, 45, 115, 32, 121, 44, 36, 110, 98, 95, 105, 109, 103, 115, 10, > 45, 101, 108, 115, 101, 32, 78, 61, 123, 105, 110, 116, 40, 115, 113, 114, > 116, 40, 36, 110, 98, 95, 105, 109, 103, 115, 41, 41, 125, 32, 77, 61, > 123, 114, 111, 117, 110, 100, 40, 36, 110, 98, 95, 105, 109, 103, 115, 47, > 36, 78, 44, 49, 44, 49, 41, 125, 32, 45, 115, 112, 108, 105, 116, 95, > 116, 105, 108, 101, 115, 32, 36, 77, 44, 36, 78, 32, 45, 107, 91, 48, > 45, 123, 36, 110, 98, 95, 105, 109, 103, 115, 45, 49, 125, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 108, 91, > 94, 48, 93, 32, 45, 45, 32, 49, 50, 56, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 42, 91, 36, 62, 93, 32, 123, 97, 114, > 103, 40, 36, 62, 43, 52, 44, 36, 118, 108, 105, 115, 116, 41, 47, 49, > 50, 55, 125, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, 32, > 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 111, 110, 102, > 97, 105, 108, 32, 45, 101, 114, 114, 111, 114, 32, 34, 67, 111, 109, 109, > 97, 110, 100, 32, 39, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 100, 101, 116, 97, 105, 108, 115, 39, 58, 32, 67, 97, 110, 110, 111, > 116, 32, 114, 101, 99, 111, 109, 112, 111, 115, 101, 32, 105, 109, 97, 103, > 101, 44, 32, 100, 101, 99, 111, 109, 112, 111, 115, 101, 32, 105, 116, 32, > 98, 101, 102, 111, 114, 101, 32, 116, 114, 121, 105, 110, 103, 32, 116, 111, > 32, 114, 101, 99, 111, 109, 112, 111, 115, 101, 32, 105, 116, 32, 33, 34, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 115, 101, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 60, 93, 10, 45, 45, 114, 111, 119, 115, 32, 48, 32, 118, 108, > 105, 115, 116, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 109, 97, 103, 105, 99, 107, 61, 123, 97, 114, 103, 40, > 49, 44, 36, 118, 108, 105, 115, 116, 41, 125, 32, 110, 98, 95, 105, 109, > 103, 115, 61, 123, 49, 43, 97, 114, 103, 40, 50, 44, 36, 118, 108, 105, > 115, 116, 41, 125, 32, 109, 111, 100, 101, 61, 123, 97, 114, 103, 40, 51, > 44, 36, 118, 108, 105, 115, 116, 41, 125, 10, 45, 105, 102, 32, 123, 36, > 109, 97, 103, 105, 99, 107, 33, 61, 55, 49, 55, 55, 55, 51, 54, 55, > 124, 124, 36, 110, 98, 95, 105, 109, 103, 115, 60, 50, 124, 124, 36, 109, > 111, 100, 101, 60, 48, 124, 124, 36, 109, 111, 100, 101, 62, 50, 125, 32, > 45, 101, 114, 114, 111, 114, 32, 34, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 45, 108, 10, 45, 105, 102, 32, 123, 36, 109, 111, 100, 101, 61, > 61, 48, 125, 32, 45, 115, 32, 120, 44, 36, 110, 98, 95, 105, 109, 103, > 115, 32, 45, 101, 108, 105, 102, 32, 123, 36, 109, 111, 100, 101, 61, 61, > 49, 125, 32, 45, 115, 32, 121, 44, 36, 110, 98, 95, 105, 109, 103, 115, > 10, 45, 101, 108, 115, 101, 32, 78, 61, 123, 105, 110, 116, 40, 115, 113, > 114, 116, 40, 36, 110, 98, 95, 105, 109, 103, 115, 41, 41, 125, 32, 77, > 61, 123, 114, 111, 117, 110, 100, 40, 36, 110, 98, 95, 105, 109, 103, 115, > 47, 36, 78, 44, 49, 44, 49, 41, 125, 32, 45, 115, 112, 108, 105, 116, > 95, 116, 105, 108, 101, 115, 32, 36, 77, 44, 36, 78, 32, 45, 107, 91, > 48, 45, 123, 36, 110, 98, 95, 105, 109, 103, 115, 45, 49, 125, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 108, > 91, 94, 48, 93, 32, 45, 45, 32, 49, 50, 56, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 42, 91, 36, 62, 93, 32, 123, 97, > 114, 103, 40, 36, 62, 43, 52, 44, 36, 118, 108, 105, 115, 116, 41, 47, > 49, 50, 55, 125, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, > 32, 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, > 100, 108, 10, 45, 106, 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, > 91, 49, 93, 32, 40, 123, 39, 36, 118, 108, 105, 115, 116, 39, 125, 44, > 48, 41, 32, 45, 106, 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, > 91, 49, 93, 10, 45, 111, 110, 102, 97, 105, 108, 10, 45, 45, 115, 112, > 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 32, 36, 50, 44, 36, > 51, 44, 36, 52, 10, 118, 108, 105, 115, 116, 61, 55, 49, 55, 55, 55, > 51, 54, 55, 44, 36, 50, 44, 36, 53, 10, 45, 108, 91, 50, 45, 45, > 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 102, 97, > 99, 116, 61, 123, 114, 111, 117, 110, 100, 40, 109, 97, 120, 40, 97, 98, > 115, 40, 105, 109, 41, 44, 97, 98, 115, 40, 105, 77, 41, 41, 44, 48, > 46, 48, 49, 41, 125, 32, 118, 108, 105, 115, 116, 61, 36, 118, 108, 105, > 115, 116, 44, 36, 102, 97, 99, 116, 32, 45, 42, 91, 36, 62, 93, 32, > 123, 49, 50, 55, 47, 36, 102, 97, 99, 116, 125, 10, 45, 100, 111, 110, > 101, 32, 45, 43, 32, 49, 50, 56, 32, 45, 101, 110, 100, 108, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 53, 61, > 61, 48, 125, 32, 45, 97, 32, 120, 32, 45, 101, 108, 105, 102, 32, 123, > 36, 53, 61, 61, 49, 125, 32, 45, 97, 32, 121, 32, 45, 101, 108, 115, > 101, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, > 44, 32, 45, 101, 110, 100, 105, 102, 10, 40, 123, 39, 36, 118, 108, 105, > 115, 116, 39, 125, 44, 48, 41, 32, 45, 106, 91, 48, 93, 32, 91, 49, > 93, 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, > 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 36, 49, 32, > 45, 103, 105, 109, 112, 95, 110, 111, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 44, 10, 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 115, 112, 108, > 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 32, 36, 50, 44, 36, 51, > 44, 36, 52, 32, 45, 110, 91, 50, 45, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, 48, 125, 32, 45, > 107, 91, 49, 93, 32, 45, 101, 108, 105, 102, 32, 123, 36, 54, 61, 61, > 49, 125, 32, 45, 107, 91, 50, 45, 45, 49, 93, 32, 45, 97, 112, 112, > 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 44, 32, 45, 101, 108, 105, > 102, 32, 123, 36, 54, 61, 61, 50, 125, 32, 45, 107, 91, 45, 49, 93, > 32, 45, 101, 108, 115, 101, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, > 105, 108, 101, 115, 32, 44, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 109, 97, 112, 95, 116, 111, 110, 101, 115, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 109, 97, 112, 95, 116, 111, 110, 101, 115, 32, 36, 123, > 49, 45, 52, 125, 34, 44, 36, 53, 44, 48, 10, 45, 110, 32, 48, 44, > 50, 53, 53, 10, 103, 105, 109, 112, 95, 109, 97, 112, 95, 116, 111, 110, > 101, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 109, 97, 112, 95, 116, 111, 110, 101, > 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, > 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, 115, 116, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 34, 45, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, 115, 116, > 32, 36, 49, 44, 36, 50, 34, 44, 36, 51, 44, 48, 10, 103, 105, 109, > 112, 95, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, 115, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, > 102, 97, 115, 116, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, > 105, 110, 32, 58, 10, 45, 95, 95, 103, 105, 109, 112, 95, 101, 109, 117, > 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, 32, 64, 123, 45, 97, 114, > 103, 92, 32, 123, 49, 43, 36, 49, 125, 44, 64, 123, 45, 95, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, > 125, 125, 44, 36, 123, 50, 45, 49, 48, 125, 44, 48, 10, 95, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, > 32, 58, 10, 45, 117, 32, 103, 114, 97, 105, 110, 95, 111, 114, 119, 111, > 95, 110, 112, 50, 48, 44, 103, 114, 97, 105, 110, 95, 107, 111, 100, 97, > 107, 95, 116, 109, 97, 120, 52, 48, 48, 44, 103, 114, 97, 105, 110, 95, > 107, 111, 100, 97, 107, 95, 116, 109, 97, 120, 51, 50, 48, 48, 44, 103, > 114, 97, 105, 110, 95, 107, 111, 100, 97, 107, 95, 116, 114, 105, 120, 49, > 54, 48, 48, 44, 103, 114, 97, 105, 110, 95, 117, 110, 107, 110, 111, 119, > 110, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, > 114, 97, 105, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 103, 114, 97, 105, 110, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 95, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, 32, 64, 123, 45, > 97, 114, 103, 92, 32, 123, 49, 43, 36, 49, 125, 44, 64, 123, 45, 95, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, > 105, 110, 125, 125, 44, 36, 123, 50, 45, 49, 49, 125, 10, 95, 95, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, > 110, 32, 58, 10, 98, 109, 48, 61, 97, 108, 112, 104, 97, 32, 98, 109, > 49, 61, 103, 114, 97, 105, 110, 109, 101, 114, 103, 101, 32, 98, 109, 50, > 61, 104, 97, 114, 100, 108, 105, 103, 104, 116, 32, 98, 109, 51, 61, 111, > 118, 101, 114, 108, 97, 121, 32, 98, 109, 52, 61, 115, 111, 102, 116, 108, > 105, 103, 104, 116, 10, 100, 105, 114, 61, 64, 123, 45, 112, 97, 116, 104, > 95, 117, 115, 101, 114, 125, 10, 45, 105, 102, 32, 123, 33, 64, 123, 45, > 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, 125, 125, 10, 100, 105, 114, > 61, 36, 100, 105, 114, 47, 46, 103, 109, 105, 99, 95, 102, 105, 108, 109, > 95, 112, 114, 101, 115, 101, 116, 115, 10, 45, 105, 102, 32, 36, 100, 105, > 114, 32, 45, 101, 108, 115, 101, 32, 45, 120, 32, 34, 109, 107, 100, 105, > 114, 32, 34, 36, 100, 105, 114, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, > 36, 95, 102, 111, 114, 99, 101, 95, 114, 101, 100, 111, 119, 110, 108, 111, > 97, 100, 41, 125, 10, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, > 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, > 110, 101, 116, 47, 100, 97, 116, 97, 95, 102, 105, 108, 109, 95, 112, 114, > 101, 115, 101, 116, 115, 47, 36, 49, 46, 99, 105, 109, 103, 122, 32, 45, > 111, 91, 45, 49, 93, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, > 36, 49, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, 101, 10, 45, > 105, 102, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, 36, 49, 46, > 99, 105, 109, 103, 122, 32, 45, 105, 32, 36, 100, 105, 114, 47, 103, 109, > 105, 99, 95, 36, 49, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, > 101, 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, > 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, > 47, 100, 97, 116, 97, 95, 102, 105, 108, 109, 95, 112, 114, 101, 115, 101, > 116, 115, 47, 36, 49, 46, 99, 105, 109, 103, 122, 32, 45, 111, 91, 45, > 49, 93, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, 36, 49, 46, > 99, 105, 109, 103, 122, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 49, 125, 32, 45, 108, 91, 36, 62, 44, 45, 49, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 91, 48, 93, 10, 45, > 45, 115, 121, 110, 116, 101, 120, 116, 117, 114, 105, 122, 101, 91, 45, 49, > 93, 32, 64, 123, 48, 44, 109, 97, 120, 40, 49, 48, 44, 49, 48, 48, > 42, 119, 47, 36, 52, 41, 125, 44, 64, 123, 48, 44, 109, 97, 120, 40, > 49, 48, 44, 49, 48, 48, 42, 104, 47, 36, 52, 41, 125, 10, 45, 105, > 102, 32, 36, 53, 32, 45, 45, 115, 121, 110, 116, 101, 120, 116, 117, 114, > 105, 122, 101, 91, 45, 50, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, > 45, 45, 115, 121, 110, 116, 101, 120, 116, 117, 114, 105, 122, 101, 91, 45, > 51, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 91, 45, 49, 93, 32, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, > 104, 125, 44, 49, 44, 49, 48, 48, 37, 44, 53, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 97, 112, 112, 108, 121, 95, > 103, 97, 109, 109, 97, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 54, > 125, 10, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 42, 91, > 45, 49, 93, 32, 36, 55, 32, 45, 43, 91, 45, 49, 93, 32, 49, 50, > 56, 32, 45, 43, 91, 45, 49, 93, 32, 36, 56, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 57, > 124, 124, 36, 49, 48, 125, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, > 91, 45, 49, 93, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 45, 49, > 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 43, > 91, 45, 49, 93, 32, 36, 57, 32, 45, 37, 91, 45, 49, 93, 32, 51, > 54, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, > 49, 93, 32, 49, 44, 49, 32, 45, 43, 91, 45, 49, 93, 32, 36, 49, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 104, 115, 118, 50, 114, > 103, 98, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 36, 49, 49, 32, 45, 107, 91, 48, 44, 45, 49, 93, 32, 45, > 114, 118, 10, 45, 101, 108, 115, 101, 32, 45, 98, 108, 101, 110, 100, 91, > 48, 44, 45, 49, 93, 32, 36, 123, 98, 109, 36, 50, 125, 44, 36, 51, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 94, 45, 49, 93, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 95, 98, 119, 32, 58, 10, 45, 95, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, 36, 49, 44, 64, > 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 50, 45, 45, 49, 125, 10, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 98, 119, 32, 58, 10, 45, 117, 32, 97, 103, 102, 97, 95, > 97, 112, 120, 95, 49, 48, 48, 44, 97, 103, 102, 97, 95, 97, 112, 120, > 95, 50, 53, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, 95, > 49, 54, 48, 48, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, > 95, 97, 99, 114, 111, 115, 95, 49, 48, 48, 44, 105, 108, 102, 111, 114, > 100, 95, 100, 101, 108, 116, 97, 95, 49, 48, 48, 44, 105, 108, 102, 111, > 114, 100, 95, 100, 101, 108, 116, 97, 95, 51, 50, 48, 48, 44, 105, 108, > 102, 111, 114, 100, 95, 100, 101, 108, 116, 97, 95, 52, 48, 48, 44, 105, > 108, 102, 111, 114, 100, 95, 102, 112, 52, 95, 112, 108, 117, 115, 95, 49, > 50, 53, 44, 92, 10, 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 95, > 112, 108, 117, 115, 95, 52, 48, 48, 44, 105, 108, 102, 111, 114, 100, 95, > 104, 112, 115, 95, 56, 48, 48, 44, 105, 108, 102, 111, 114, 100, 95, 112, > 97, 110, 95, 102, 95, 112, 108, 117, 115, 95, 53, 48, 44, 105, 108, 102, > 111, 114, 100, 95, 120, 112, 50, 44, 107, 111, 100, 97, 107, 95, 98, 119, > 95, 52, 48, 48, 95, 99, 110, 44, 107, 111, 100, 97, 107, 95, 104, 105, > 101, 95, 40, 104, 115, 95, 105, 110, 102, 114, 97, 41, 44, 107, 111, 100, > 97, 107, 95, 116, 45, 109, 97, 120, 95, 49, 48, 48, 44, 107, 111, 100, > 97, 107, 95, 116, 45, 109, 97, 120, 95, 51, 50, 48, 48, 44, 92, 10, > 107, 111, 100, 97, 107, 95, 116, 45, 109, 97, 120, 95, 52, 48, 48, 44, > 107, 111, 100, 97, 107, 95, 116, 114, 105, 45, 120, 95, 52, 48, 48, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 52, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 54, 54, 55, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 55, 50, 44, 114, 111, 108, 108, 101, 105, 95, 105, 114, > 95, 52, 48, 48, 44, 114, 111, 108, 108, 101, 105, 95, 111, 114, 116, 104, > 111, 95, 50, 53, 44, 114, 111, 108, 108, 101, 105, 95, 114, 101, 116, 114, > 111, 95, 49, 48, 48, 95, 116, 111, 110, 97, 108, 44, 114, 111, 108, 108, > 101, 105, 95, 114, 101, 116, 114, 111, 95, 56, 48, 115, 10, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 98, > 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 95, 98, 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 105, 110, 115, 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, > 114, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, > 103, 92, 32, 36, 49, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, > 123, 50, 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, > 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, 110, > 116, 95, 99, 111, 110, 115, 117, 109, 101, 114, 32, 58, 10, 45, 117, 32, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, > 118, 43, 95, 99, 111, 108, 100, 95, 45, 45, 44, 112, 111, 108, 97, 114, > 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, 99, 111, > 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 49, 48, 48, 117, 118, 43, 95, 99, 111, 108, 100, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, > 99, 111, 108, 100, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, 99, 111, 108, 100, 95, 43, > 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, > 48, 117, 118, 43, 95, 99, 111, 108, 100, 95, 43, 43, 43, 44, 92, 10, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, > 118, 43, 95, 119, 97, 114, 109, 95, 45, 45, 44, 112, 111, 108, 97, 114, > 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, 119, 97, > 114, 109, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 49, 48, 48, 117, 118, 43, 95, 119, 97, 114, 109, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, > 119, 97, 114, 109, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, 119, 97, 114, 109, 95, 43, > 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, > 48, 117, 118, 43, 95, 119, 97, 114, 109, 95, 43, 43, 43, 44, 92, 10, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, > 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, > 56, 48, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 54, 56, 48, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 54, 56, 48, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 54, 56, 48, 95, 43, 43, 44, 92, 10, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 99, 111, 108, 100, > 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, > 54, 56, 48, 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, > 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 99, 111, 108, 100, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, > 99, 111, 108, 100, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 54, 56, 48, 95, 99, 111, 108, 100, 95, 43, 43, 44, 112, > 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 99, > 111, 108, 100, 95, 43, 43, 95, 97, 108, 116, 44, 92, 10, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 119, 97, 114, > 109, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 54, 56, 48, 95, 119, 97, 114, 109, 95, 45, 44, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 119, 97, 114, 109, > 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, > 95, 119, 97, 114, 109, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, > 95, 112, 120, 45, 54, 56, 48, 95, 119, 97, 114, 109, 95, 43, 43, 44, > 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, > 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, > 55, 48, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 55, 48, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, > 55, 48, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 55, 48, 95, 43, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 55, 48, 95, 43, 43, 43, 44, 92, 10, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, 95, 99, 111, 108, 100, 95, > 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, > 48, 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 112, 120, 45, 55, 48, 95, 99, 111, 108, 100, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, 95, 99, 111, 108, 100, > 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, > 48, 95, 99, 111, 108, 100, 95, 43, 43, 44, 92, 10, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, 95, 119, 97, 114, 109, 95, > 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, > 48, 95, 119, 97, 114, 109, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 112, 120, 45, 55, 48, 95, 119, 97, 114, 109, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, 95, 119, 97, 114, 109, > 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, > 48, 95, 119, 97, 114, 109, 95, 43, 43, 44, 92, 10, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, > 101, 120, 112, 105, 114, 101, 100, 41, 95, 45, 45, 45, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, > 40, 101, 120, 112, 105, 114, 101, 100, 41, 95, 45, 45, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, > 40, 101, 120, 112, 105, 114, 101, 100, 41, 95, 45, 44, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, > 101, 120, 112, 105, 114, 101, 100, 41, 44, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, 112, > 105, 114, 101, 100, 41, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, > 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, 112, 105, > 114, 101, 100, 41, 95, 43, 43, 44, 92, 10, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, > 112, 105, 114, 101, 100, 41, 95, 99, 111, 108, 100, 95, 45, 45, 45, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, > 114, 111, 95, 40, 101, 120, 112, 105, 114, 101, 100, 41, 95, 99, 111, 108, > 100, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 116, 105, > 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, 112, 105, 114, 101, 100, > 41, 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, 112, > 105, 114, 101, 100, 41, 95, 99, 111, 108, 100, 10, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, > 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, 114, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 105, 110, 115, 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, 114, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 101, 109, > 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, > 110, 116, 95, 112, 114, 111, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 32, 36, 49, 44, > 64, 123, 45, 97, 114, 103, 92, 32, 36, 49, 44, 64, 123, 45, 95, 36, > 48, 125, 125, 44, 36, 123, 50, 45, 45, 49, 125, 10, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, > 110, 115, 116, 97, 110, 116, 95, 112, 114, 111, 32, 58, 10, 45, 117, 32, > 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 45, 45, 44, > 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 45, 44, 102, > 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 44, 102, 117, 106, 105, > 95, 102, 112, 45, 49, 48, 48, 99, 95, 43, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 49, 48, 48, 99, 95, 43, 43, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 49, 48, 48, 99, 95, 43, 43, 95, 97, 108, 116, 44, 102, > 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 43, 43, 43, 44, > 92, 10, 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 99, > 111, 111, 108, 95, 45, 45, 44, 102, 117, 106, 105, 95, 102, 112, 45, 49, > 48, 48, 99, 95, 99, 111, 111, 108, 95, 45, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 49, 48, 48, 99, 95, 99, 111, 111, 108, 44, 102, 117, 106, > 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 99, 111, 111, 108, 95, 43, > 44, 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 99, 111, > 111, 108, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 102, 112, 45, > 49, 48, 48, 99, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 45, 45, > 44, 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 110, 101, > 103, 97, 116, 105, 118, 101, 95, 45, 44, 102, 117, 106, 105, 95, 102, 112, > 45, 49, 48, 48, 99, 95, 110, 101, 103, 97, 116, 105, 118, 101, 44, 102, > 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 110, 101, 103, 97, > 116, 105, 118, 101, 95, 43, 44, 102, 117, 106, 105, 95, 102, 112, 45, 49, > 48, 48, 99, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 43, 43, 44, > 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 110, 101, 103, > 97, 116, 105, 118, 101, 95, 43, 43, 95, 97, 108, 116, 44, 102, 117, 106, > 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 110, 101, 103, 97, 116, 105, > 118, 101, 95, 43, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 102, 112, > 45, 51, 48, 48, 48, 98, 95, 45, 45, 44, 102, 117, 106, 105, 95, 102, > 112, 45, 51, 48, 48, 48, 98, 95, 45, 44, 102, 117, 106, 105, 95, 102, > 112, 45, 51, 48, 48, 48, 98, 44, 102, 117, 106, 105, 95, 102, 112, 45, > 51, 48, 48, 48, 98, 95, 43, 44, 102, 117, 106, 105, 95, 102, 112, 45, > 51, 48, 48, 48, 98, 95, 43, 43, 44, 102, 117, 106, 105, 95, 102, 112, > 45, 51, 48, 48, 48, 98, 95, 43, 43, 43, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 51, 48, 48, 48, 98, 95, 104, 99, 44, 92, 10, 102, 117, > 106, 105, 95, 102, 112, 45, 51, 48, 48, 48, 98, 95, 110, 101, 103, 97, > 116, 105, 118, 101, 95, 45, 45, 44, 102, 117, 106, 105, 95, 102, 112, 45, > 51, 48, 48, 48, 98, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 45, > 44, 102, 117, 106, 105, 95, 102, 112, 45, 51, 48, 48, 48, 98, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 44, 102, 117, 106, 105, 95, 102, 112, 45, > 51, 48, 48, 48, 98, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 43, > 44, 102, 117, 106, 105, 95, 102, 112, 45, 51, 48, 48, 48, 98, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 95, 43, 43, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 51, 48, 48, 48, 98, 95, 110, 101, 103, 97, 116, 105, 118, > 101, 95, 43, 43, 43, 44, 102, 117, 106, 105, 95, 102, 112, 45, 51, 48, > 48, 48, 98, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 101, 97, 114, > 108, 121, 44, 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, > 53, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, > 53, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, > 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, 95, 43, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, 95, 43, 43, 44, > 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 95, 45, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 54, 53, 95, 110, 101, 103, 97, 116, 105, 118, 101, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, 95, 110, 101, 103, > 97, 116, 105, 118, 101, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, > 95, 54, 54, 53, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 104, 99, > 44, 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, > 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, > 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 44, 112, > 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, 43, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, 43, 43, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, 43, 43, 43, 44, 92, > 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, 99, 111, > 108, 100, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, > 54, 57, 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 54, 57, 95, 99, 111, 108, 100, 44, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 54, 54, 57, 95, 99, 111, 108, 100, 95, 43, 44, > 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 45, > 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 45, > 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 43, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 43, 43, 44, 92, 10, 112, > 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 99, 111, 108, 100, > 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, > 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, > 95, 54, 57, 48, 95, 99, 111, 108, 100, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 57, 48, 95, 99, 111, 108, 100, 95, 43, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 99, 111, 108, 100, 95, > 43, 43, 44, 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, > 48, 95, 119, 97, 114, 109, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 57, 48, 95, 119, 97, 114, 109, 95, 45, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 119, 97, 114, 109, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 119, 97, 114, > 109, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, > 95, 119, 97, 114, 109, 95, 43, 43, 10, 103, 105, 109, 112, 95, 101, 109, > 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, > 110, 116, 95, 112, 114, 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, 110, 116, > 95, 112, 114, 111, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 95, 99, 111, 108, 111, 114, 32, 58, 10, > 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, 36, > 49, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 50, 45, 45, > 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 99, > 111, 108, 111, 114, 32, 58, 10, 45, 117, 32, 97, 103, 102, 97, 95, 117, > 108, 116, 114, 97, 95, 99, 111, 108, 111, 114, 95, 49, 48, 48, 44, 97, > 103, 102, 97, 95, 118, 105, 115, 116, 97, 95, 50, 48, 48, 44, 102, 117, > 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 50, 48, 48, 44, 102, > 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 104, 103, 95, 49, > 54, 48, 48, 44, 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, > 95, 114, 101, 97, 108, 97, 95, 49, 48, 48, 44, 102, 117, 106, 105, 95, > 115, 117, 112, 101, 114, 105, 97, 95, 120, 45, 116, 114, 97, 95, 56, 48, > 48, 44, 92, 10, 107, 111, 100, 97, 107, 95, 101, 108, 105, 116, 101, 95, > 49, 48, 48, 95, 120, 112, 114, 111, 44, 107, 111, 100, 97, 107, 95, 101, > 108, 105, 116, 101, 95, 99, 111, 108, 111, 114, 95, 50, 48, 48, 44, 107, > 111, 100, 97, 107, 95, 101, 108, 105, 116, 101, 95, 99, 111, 108, 111, 114, > 95, 52, 48, 48, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, > 97, 95, 49, 54, 48, 95, 110, 99, 44, 107, 111, 100, 97, 107, 95, 112, > 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 118, 99, 44, 108, 111, 109, > 111, 103, 114, 97, 112, 104, 121, 95, 114, 101, 100, 115, 99, 97, 108, 101, > 95, 49, 48, 48, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, > 99, 111, 108, 111, 114, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, > 95, 99, 111, 108, 111, 114, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 110, 101, 119, 32, 58, 10, > 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, 123, > 109, 97, 120, 40, 49, 44, 52, 42, 36, 49, 43, 36, 50, 45, 51, 41, > 125, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 51, 45, 45, > 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 110, > 101, 119, 32, 58, 10, 45, 117, 32, 102, 117, 106, 105, 95, 49, 54, 48, > 99, 95, 45, 44, 102, 117, 106, 105, 95, 49, 54, 48, 99, 44, 102, 117, > 106, 105, 95, 49, 54, 48, 99, 95, 43, 44, 102, 117, 106, 105, 95, 49, > 54, 48, 99, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 52, 48, > 48, 104, 95, 45, 44, 102, 117, 106, 105, 95, 52, 48, 48, 104, 44, 102, > 117, 106, 105, 95, 52, 48, 48, 104, 95, 43, 44, 102, 117, 106, 105, 95, > 52, 48, 48, 104, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 56, > 48, 48, 122, 95, 45, 44, 102, 117, 106, 105, 95, 56, 48, 48, 122, 44, > 102, 117, 106, 105, 95, 56, 48, 48, 122, 95, 43, 44, 102, 117, 106, 105, > 95, 56, 48, 48, 122, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, > 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 95, 45, 44, 102, 117, 106, > 105, 95, 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 44, 102, 117, 106, > 105, 95, 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 95, 43, 44, 102, > 117, 106, 105, 95, 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 95, 43, > 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, > 95, 49, 54, 48, 95, 45, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, > 116, 114, 97, 95, 49, 54, 48, 44, 107, 111, 100, 97, 107, 95, 112, 111, > 114, 116, 114, 97, 95, 49, 54, 48, 95, 43, 44, 107, 111, 100, 97, 107, > 95, 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 43, 43, 44, 92, > 10, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, > 48, 95, 45, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, > 95, 52, 48, 48, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, > 97, 95, 52, 48, 48, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, > 114, 116, 114, 97, 95, 52, 48, 48, 95, 43, 43, 44, 92, 10, 107, 111, > 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 56, 48, 48, 95, 45, > 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 56, 48, > 48, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 56, > 48, 48, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, > 97, 95, 56, 48, 48, 95, 43, 43, 44, 92, 10, 107, 111, 100, 97, 107, > 95, 116, 109, 97, 120, 95, 51, 50, 48, 48, 95, 45, 44, 107, 111, 100, > 97, 107, 95, 116, 109, 97, 120, 95, 51, 50, 48, 48, 44, 107, 111, 100, > 97, 107, 95, 116, 109, 97, 120, 95, 51, 50, 48, 48, 95, 43, 44, 107, > 111, 100, 97, 107, 95, 116, 109, 97, 120, 95, 51, 50, 48, 48, 95, 43, > 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 116, 114, 105, 45, 120, 95, > 52, 48, 48, 95, 45, 44, 107, 111, 100, 97, 107, 95, 116, 114, 105, 45, > 120, 95, 52, 48, 48, 44, 107, 111, 100, 97, 107, 95, 116, 114, 105, 45, > 120, 95, 52, 48, 48, 95, 43, 44, 107, 111, 100, 97, 107, 95, 116, 114, > 105, 45, 120, 95, 52, 48, 48, 95, 43, 43, 10, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, > 97, 116, 105, 118, 101, 95, 110, 101, 119, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, > 116, 105, 118, 101, 95, 110, 101, 119, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, 100, 32, > 58, 10, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, > 32, 123, 109, 97, 120, 40, 49, 44, 52, 42, 36, 49, 43, 36, 50, 45, > 51, 41, 125, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 51, > 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, > 95, 111, 108, 100, 32, 58, 10, 45, 117, 32, 102, 117, 106, 105, 95, 105, > 108, 102, 111, 114, 100, 95, 100, 101, 108, 116, 97, 95, 51, 50, 48, 48, > 95, 45, 44, 102, 117, 106, 105, 95, 105, 108, 102, 111, 114, 100, 95, 100, > 101, 108, 116, 97, 95, 51, 50, 48, 48, 44, 102, 117, 106, 105, 95, 105, > 108, 102, 111, 114, 100, 95, 100, 101, 108, 116, 97, 95, 51, 50, 48, 48, > 95, 43, 44, 102, 117, 106, 105, 95, 105, 108, 102, 111, 114, 100, 95, 100, > 101, 108, 116, 97, 95, 51, 50, 48, 48, 95, 43, 43, 44, 92, 10, 102, > 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, 95, 49, 54, 48, 48, 95, > 45, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, 95, 49, 54, > 48, 48, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, 95, 49, > 54, 48, 48, 95, 43, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, > 110, 95, 49, 54, 48, 48, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, > 95, 115, 117, 112, 101, 114, 105, 97, 95, 49, 48, 48, 95, 45, 44, 102, > 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 49, 48, 48, 44, > 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 49, 48, 48, > 95, 43, 44, 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, > 49, 48, 48, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 115, 117, > 112, 101, 114, 105, 97, 95, 52, 48, 48, 95, 45, 44, 102, 117, 106, 105, > 95, 115, 117, 112, 101, 114, 105, 97, 95, 52, 48, 48, 44, 102, 117, 106, > 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 52, 48, 48, 95, 43, 44, > 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 52, 48, 48, > 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, > 105, 97, 95, 56, 48, 48, 95, 45, 44, 102, 117, 106, 105, 95, 115, 117, > 112, 101, 114, 105, 97, 95, 56, 48, 48, 44, 102, 117, 106, 105, 95, 115, > 117, 112, 101, 114, 105, 97, 95, 56, 48, 48, 95, 43, 44, 102, 117, 106, > 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 56, 48, 48, 95, 43, 43, > 44, 92, 10, 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, > 49, 54, 48, 48, 95, 45, 44, 102, 117, 106, 105, 95, 115, 117, 112, 101, > 114, 105, 97, 95, 49, 54, 48, 48, 44, 102, 117, 106, 105, 95, 115, 117, > 112, 101, 114, 105, 97, 95, 49, 54, 48, 48, 95, 43, 44, 102, 117, 106, > 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 49, 54, 48, 48, 95, 43, > 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, > 95, 49, 54, 48, 95, 110, 99, 95, 45, 44, 107, 111, 100, 97, 107, 95, > 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 110, 99, 44, 107, 111, > 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 110, > 99, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, > 95, 49, 54, 48, 95, 110, 99, 95, 43, 43, 44, 92, 10, 107, 111, 100, > 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 118, 99, > 95, 45, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, > 49, 54, 48, 95, 118, 99, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, > 116, 114, 97, 95, 49, 54, 48, 95, 118, 99, 95, 43, 44, 107, 111, 100, > 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 118, 99, > 95, 43, 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, > 114, 97, 95, 52, 48, 48, 95, 110, 99, 95, 45, 44, 107, 111, 100, 97, > 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, 110, 99, 44, > 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, > 95, 110, 99, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, > 114, 97, 95, 52, 48, 48, 95, 110, 99, 95, 43, 43, 44, 92, 10, 107, > 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, > 117, 99, 95, 45, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, > 97, 95, 52, 48, 48, 95, 117, 99, 44, 107, 111, 100, 97, 107, 95, 112, > 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, 117, 99, 95, 43, 44, 107, > 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, > 117, 99, 95, 43, 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 112, 111, > 114, 116, 114, 97, 95, 52, 48, 48, 95, 118, 99, 95, 45, 44, 107, 111, > 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, 118, > 99, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, > 48, 48, 95, 118, 99, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, > 114, 116, 114, 97, 95, 52, 48, 48, 95, 118, 99, 95, 43, 43, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, 100, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, 100, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 111, 116, 104, 101, 114, 115, 32, 58, 10, > 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, 36, > 49, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 50, 45, 45, > 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 111, 116, 104, 101, 114, 115, 32, 58, 10, 45, > 117, 32, 54, 48, 115, 44, 54, 48, 115, 95, 50, 44, 54, 48, 115, 95, > 51, 44, 104, 107, 102, 105, 108, 109, 44, 108, 111, 109, 111, 44, 110, 111, > 115, 116, 97, 108, 103, 105, 99, 44, 114, 101, 116, 114, 111, 44, 115, 117, > 116, 114, 111, 102, 120, 44, 118, 105, 110, 116, 97, 103, 101, 44, 118, 105, > 110, 116, 97, 103, 101, 95, 50, 44, 119, 97, 114, 109, 44, 119, 97, 114, > 109, 95, 115, 112, 114, 105, 110, 103, 44, 119, 97, 114, 109, 95, 121, 101, > 108, 108, 111, 119, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 111, 116, 104, 101, 114, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 111, 116, 104, 101, 114, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 112, 114, 105, 110, 116, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 32, 36, 49, 44, > 64, 123, 45, 97, 114, 103, 92, 32, 36, 49, 44, 64, 123, 45, 95, 36, > 48, 125, 125, 44, 36, 123, 50, 45, 45, 49, 125, 10, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 112, > 114, 105, 110, 116, 32, 58, 10, 45, 117, 32, 102, 117, 106, 105, 51, 53, > 49, 48, 95, 99, 111, 110, 115, 116, 108, 99, 108, 105, 112, 44, 102, 117, > 106, 105, 51, 53, 49, 48, 95, 99, 111, 110, 115, 116, 108, 109, 97, 112, > 44, 102, 117, 106, 105, 51, 53, 49, 48, 95, 99, 117, 115, 112, 99, 108, > 105, 112, 44, 92, 10, 102, 117, 106, 105, 51, 53, 49, 51, 95, 99, 111, > 110, 115, 116, 108, 99, 108, 105, 112, 44, 102, 117, 106, 105, 51, 53, 49, > 51, 95, 99, 111, 110, 115, 116, 108, 109, 97, 112, 44, 102, 117, 106, 105, > 51, 53, 49, 51, 95, 99, 117, 115, 112, 99, 108, 105, 112, 44, 92, 10, > 107, 111, 100, 97, 107, 50, 51, 56, 51, 95, 99, 111, 110, 115, 116, 108, > 99, 108, 105, 112, 44, 107, 111, 100, 97, 107, 50, 51, 56, 51, 95, 99, > 111, 110, 115, 116, 108, 109, 97, 112, 44, 107, 111, 100, 97, 107, 50, 51, > 56, 51, 95, 99, 117, 115, 112, 99, 108, 105, 112, 44, 92, 10, 107, 111, > 100, 97, 107, 50, 51, 57, 51, 95, 99, 111, 110, 115, 116, 108, 99, 108, > 105, 112, 44, 107, 111, 100, 97, 107, 50, 51, 57, 51, 95, 99, 111, 110, > 115, 116, 108, 109, 97, 112, 44, 107, 111, 100, 97, 107, 50, 51, 57, 51, > 95, 99, 117, 115, 112, 99, 108, 105, 112, 10, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 112, 114, 105, 110, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 95, 112, 114, 105, 110, 116, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, 101, 32, 58, > 10, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, > 36, 49, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 50, 45, > 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, > 101, 32, 58, 10, 45, 117, 32, 97, 103, 102, 97, 95, 112, 114, 101, 99, > 105, 115, 97, 95, 49, 48, 48, 44, 102, 117, 106, 105, 95, 97, 115, 116, > 105, 97, 95, 49, 48, 48, 102, 44, 102, 117, 106, 105, 95, 102, 112, 95, > 49, 48, 48, 99, 44, 102, 117, 106, 105, 95, 112, 114, 111, 118, 105, 97, > 95, 49, 48, 48, 102, 44, 102, 117, 106, 105, 95, 112, 114, 111, 118, 105, > 97, 95, 52, 48, 48, 102, 44, 102, 117, 106, 105, 95, 112, 114, 111, 118, > 105, 97, 95, 52, 48, 48, 120, 44, 102, 117, 106, 105, 95, 115, 101, 110, > 115, 105, 97, 95, 49, 48, 48, 44, 92, 10, 102, 117, 106, 105, 95, 115, > 117, 112, 101, 114, 105, 97, 95, 50, 48, 48, 95, 120, 112, 114, 111, 44, > 102, 117, 106, 105, 95, 118, 101, 108, 118, 105, 97, 95, 53, 48, 44, 103, > 101, 110, 101, 114, 105, 99, 95, 102, 117, 106, 105, 95, 97, 115, 116, 105, > 97, 95, 49, 48, 48, 44, 103, 101, 110, 101, 114, 105, 99, 95, 102, 117, > 106, 105, 95, 112, 114, 111, 118, 105, 97, 95, 49, 48, 48, 44, 103, 101, > 110, 101, 114, 105, 99, 95, 102, 117, 106, 105, 95, 118, 101, 108, 118, 105, > 97, 95, 49, 48, 48, 44, 92, 10, 103, 101, 110, 101, 114, 105, 99, 95, > 107, 111, 100, 97, 99, 104, 114, 111, 109, 101, 95, 54, 52, 44, 103, 101, > 110, 101, 114, 105, 99, 95, 107, 111, 100, 97, 107, 95, 101, 107, 116, 97, > 99, 104, 114, 111, 109, 101, 95, 49, 48, 48, 95, 118, 115, 44, 107, 111, > 100, 97, 107, 95, 101, 45, 49, 48, 48, 95, 103, 120, 95, 101, 107, 116, > 97, 99, 104, 114, 111, 109, 101, 95, 49, 48, 48, 44, 107, 111, 100, 97, > 107, 95, 101, 107, 116, 97, 99, 104, 114, 111, 109, 101, 95, 49, 48, 48, > 95, 118, 115, 44, 107, 111, 100, 97, 107, 95, 101, 108, 105, 116, 101, 95, > 99, 104, 114, 111, 109, 101, 95, 50, 48, 48, 44, 92, 10, 107, 111, 100, > 97, 107, 95, 101, 108, 105, 116, 101, 95, 99, 104, 114, 111, 109, 101, 95, > 52, 48, 48, 44, 107, 111, 100, 97, 107, 95, 101, 108, 105, 116, 101, 95, > 101, 120, 116, 114, 97, 99, 111, 108, 111, 114, 95, 49, 48, 48, 44, 107, > 111, 100, 97, 107, 95, 107, 111, 100, 97, 99, 104, 114, 111, 109, 101, 95, > 50, 48, 48, 44, 107, 111, 100, 97, 107, 95, 107, 111, 100, 97, 99, 104, > 114, 111, 109, 101, 95, 50, 53, 44, 107, 111, 100, 97, 107, 95, 107, 111, > 100, 97, 99, 104, 114, 111, 109, 101, 95, 54, 52, 44, 108, 111, 109, 111, > 103, 114, 97, 112, 104, 121, 95, 120, 45, 112, 114, 111, 95, 115, 108, 105, > 100, 101, 95, 50, 48, 48, 44, 92, 10, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 54, 54, 57, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, > 57, 48, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 111, 108, 97, > 99, 104, 114, 111, 109, 101, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, > 105, 100, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, 101, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 32, 58, 10, 45, 105, > 102, 32, 36, 49, 10, 100, 105, 114, 61, 64, 123, 45, 112, 97, 116, 104, > 95, 117, 115, 101, 114, 125, 10, 45, 105, 102, 32, 123, 33, 64, 123, 45, > 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, 125, 125, 10, 100, 105, 114, > 61, 36, 100, 105, 114, 47, 46, 103, 109, 105, 99, 95, 102, 105, 108, 109, > 95, 112, 114, 101, 115, 101, 116, 115, 10, 45, 105, 102, 32, 36, 100, 105, > 114, 32, 45, 101, 108, 115, 101, 32, 45, 120, 32, 34, 109, 107, 100, 105, > 114, 32, 34, 36, 100, 105, 114, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, > 36, 95, 102, 111, 114, 99, 101, 95, 114, 101, 100, 111, 119, 110, 108, 111, > 97, 100, 41, 125, 10, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, > 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, > 110, 101, 116, 47, 100, 97, 116, 97, 95, 102, 105, 108, 109, 95, 112, 114, > 101, 115, 101, 116, 115, 47, 36, 50, 46, 99, 105, 109, 103, 122, 32, 45, > 111, 91, 45, 49, 93, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, > 36, 50, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, 101, 10, 45, > 105, 102, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, 36, 50, 46, > 99, 105, 109, 103, 122, 32, 45, 105, 32, 36, 100, 105, 114, 47, 103, 109, > 105, 99, 95, 36, 50, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, > 101, 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, > 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, > 47, 100, 97, 116, 97, 95, 102, 105, 108, 109, 95, 112, 114, 101, 115, 101, > 116, 115, 47, 36, 50, 46, 99, 105, 109, 103, 122, 32, 45, 111, 91, 45, > 49, 93, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, 36, 50, 46, > 99, 105, 109, 103, 122, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 109, 97, 112, 95, 99, 108, 117, 116, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 10, 45, 97, 112, 112, 108, 121, 95, 103, 97, 109, > 109, 97, 91, 48, 93, 32, 123, 49, 48, 94, 36, 51, 125, 10, 45, 45, > 91, 48, 93, 32, 49, 50, 56, 32, 45, 42, 91, 48, 93, 32, 36, 52, > 32, 45, 43, 91, 48, 93, 32, 49, 50, 56, 32, 45, 43, 91, 48, 93, > 32, 36, 53, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 105, 102, 32, 123, 36, 54, 124, 124, 36, 55, 124, 124, 36, 56, 125, > 10, 45, 114, 103, 98, 50, 104, 115, 118, 91, 48, 93, 10, 45, 115, 104, > 91, 48, 93, 32, 48, 44, 48, 32, 45, 43, 91, 45, 49, 93, 32, 36, > 54, 32, 45, 37, 91, 45, 49, 93, 32, 51, 54, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 32, > 45, 43, 91, 45, 49, 93, 32, 36, 55, 32, 45, 99, 91, 45, 49, 93, > 32, 48, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 104, 115, > 118, 50, 114, 103, 98, 91, 48, 93, 10, 45, 105, 102, 32, 36, 56, 32, > 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, > 108, 97, 103, 101, 95, 98, 119, 32, 58, 10, 45, 107, 91, 48, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, > 62, 104, 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, > 50, 32, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, > 32, 95, 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, > 32, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 98, 119, 125, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, > 95, 105, 110, 115, 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, > 114, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, 44, 104, 41, 62, > 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, 125, 32, 45, 114, > 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, > 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, > 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, 95, 108, 97, 98, > 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, 111, 117, 116, 112, > 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, > 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, > 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, 114, 125, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 99, 111, 108, 108, 97, 103, 101, 95, 105, 110, 115, 116, 97, 110, 116, > 95, 112, 114, 111, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, > 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, 44, > 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, 125, > 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, > 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, 95, > 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, 111, > 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, 95, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, > 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 105, 110, 115, 116, 97, 110, 116, 95, 112, 114, 111, 125, 10, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, > 111, 108, 108, 97, 103, 101, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, > 99, 111, 108, 111, 114, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, > 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, > 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, > 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, > 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, > 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 99, 111, 108, 111, 114, 125, > 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 95, 110, 101, 103, 97, 116, > 105, 118, 101, 95, 110, 101, 119, 32, 58, 10, 45, 107, 91, 48, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, > 62, 104, 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, > 50, 32, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, > 32, 95, 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, > 32, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 110, 101, 119, 125, > 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 95, 110, 101, 103, 97, 116, > 105, 118, 101, 95, 111, 108, 100, 32, 58, 10, 45, 107, 91, 48, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, > 62, 104, 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, > 50, 32, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, > 32, 95, 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, > 32, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, 100, 125, > 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 95, 111, 116, 104, 101, 114, > 115, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, 44, 104, 41, 62, > 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, 125, 32, 45, 114, > 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, > 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, > 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, 95, 108, 97, 98, > 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, 111, 117, 116, 112, > 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, > 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 111, 116, 104, > 101, 114, 115, 125, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 95, 112, > 114, 105, 110, 116, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, > 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, 44, > 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, 125, > 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, > 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, 95, > 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, 111, > 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, 95, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, > 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 112, 114, 105, 110, 116, 125, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, > 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, 101, 32, 58, 10, 45, 107, > 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, > 123, 109, 97, 120, 40, 119, 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, > 102, 32, 123, 119, 62, 104, 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, > 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, > 98, 99, 61, 36, 50, 32, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, > 101, 61, 36, 51, 32, 95, 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, > 101, 61, 36, 52, 32, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, > 32, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, > 101, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 58, 10, > 36, 61, 97, 114, 103, 32, 45, 112, 114, 111, 103, 114, 101, 115, 115, 32, > 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 35, 10, 112, 114, 101, > 115, 101, 116, 61, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, > 10, 45, 45, 108, 91, 48, 93, 10, 45, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 91, 48, 93, 32, 49, > 44, 36, 112, 114, 101, 115, 101, 116, 44, 48, 44, 49, 44, 48, 44, 48, > 44, 48, 44, 48, 44, 48, 10, 40, 123, 39, 36, 112, 114, 101, 115, 101, > 116, 39, 125, 41, 32, 45, 114, 101, 112, 108, 97, 99, 101, 91, 45, 49, > 93, 32, 123, 39, 95, 39, 125, 44, 51, 50, 32, 45, 102, 91, 45, 49, > 93, 32, 105, 102, 40, 120, 61, 61, 48, 38, 38, 105, 62, 61, 123, 39, > 97, 39, 125, 38, 38, 105, 60, 61, 123, 39, 122, 39, 125, 44, 105, 43, > 123, 39, 65, 39, 125, 45, 123, 39, 97, 39, 125, 44, 105, 41, 32, 116, > 105, 116, 108, 101, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 36, 116, 105, 116, 108, 101, 44, 50, 44, > 50, 44, 36, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 44, 50, > 44, 49, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 10, 45, 112, 114, > 111, 103, 114, 101, 115, 115, 32, 123, 40, 49, 43, 36, 62, 41, 42, 49, > 48, 48, 47, 36, 35, 125, 10, 45, 100, 111, 110, 101, 10, 45, 116, 101, > 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 48, 93, 32, 34, 79, > 114, 105, 103, 105, 110, 97, 108, 32, 105, 109, 97, 103, 101, 34, 44, 50, > 44, 50, 44, 36, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 44, > 50, 44, 49, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 33, 36, 95, > 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 125, 32, 45, 102, 114, > 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, 109, 101, > 32, 53, 44, 53, 44, 50, 53, 53, 32, 45, 45, 32, 50, 53, 53, 32, > 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 123, 109, > 105, 110, 40, 36, 95, 110, 98, 99, 44, 64, 35, 41, 125, 32, 45, 43, > 32, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 100, 111, > 119, 110, 108, 111, 97, 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 100, 111, 119, > 110, 108, 111, 97, 100, 32, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 98, 119, 125, 44, > 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, 110, 116, 95, > 99, 111, 110, 115, 117, 109, 101, 114, 125, 44, 92, 10, 64, 123, 45, 95, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, > 109, 95, 105, 110, 115, 116, 97, 110, 116, 95, 112, 114, 111, 125, 44, 92, > 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, > 99, 111, 108, 111, 114, 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 95, 110, 101, 119, 125, 44, 92, 10, 64, > 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, > 100, 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, > 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 111, 116, 104, 101, 114, > 115, 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, > 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 112, 114, 105, 110, 116, > 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, > 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, > 108, 105, 100, 101, 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, > 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, 125, 10, > 45, 108, 91, 93, 32, 45, 112, 114, 111, 103, 114, 101, 115, 115, 32, 48, > 10, 45, 105, 102, 32, 36, 49, 32, 95, 102, 111, 114, 99, 101, 95, 114, > 101, 100, 111, 119, 110, 108, 111, 97, 100, 61, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, 110, 98, 95, > 112, 114, 101, 115, 101, 116, 115, 32, 45, 108, 91, 93, 32, 45, 95, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 32, 49, 44, 36, 123, 95, 112, 114, 101, 115, 101, 116, 123, 49, 43, 36, > 62, 125, 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 49, 44, 48, 32, > 45, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 40, 36, 62, 43, 49, > 41, 42, 49, 48, 48, 47, 36, 95, 110, 98, 95, 112, 114, 101, 115, 101, > 116, 115, 125, 32, 45, 111, 110, 102, 97, 105, 108, 32, 45, 101, 110, 100, > 108, 32, 45, 114, 109, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, > 108, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 100, 111, 119, 110, 108, 111, 97, 100, 32, 58, 10, > 95, 110, 98, 95, 112, 114, 101, 115, 101, 116, 115, 61, 36, 35, 10, 36, > 61, 95, 112, 114, 101, 115, 101, 116, 10, 103, 105, 109, 112, 95, 100, 114, > 111, 115, 116, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 10, 45, 105, 102, 32, 123, 36, 49, 54, 61, 61, 49, 125, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, 120, 39, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, > 121, 39, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 57, > 10, 120, 48, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 42, 119, 47, > 49, 48, 48, 41, 125, 32, 121, 48, 61, 123, 114, 111, 117, 110, 100, 40, > 36, 50, 42, 104, 47, 49, 48, 48, 41, 125, 32, 120, 49, 61, 123, 114, > 111, 117, 110, 100, 40, 36, 51, 42, 119, 47, 49, 48, 48, 41, 125, 32, > 121, 49, 61, 123, 114, 111, 117, 110, 100, 40, 36, 52, 42, 104, 47, 49, > 48, 48, 41, 125, 10, 120, 50, 61, 123, 114, 111, 117, 110, 100, 40, 36, > 53, 42, 119, 47, 49, 48, 48, 41, 125, 32, 121, 50, 61, 123, 114, 111, > 117, 110, 100, 40, 36, 54, 42, 104, 47, 49, 48, 48, 41, 125, 32, 120, > 51, 61, 123, 114, 111, 117, 110, 100, 40, 36, 55, 42, 119, 47, 49, 48, > 48, 41, 125, 32, 121, 51, 61, 123, 114, 111, 117, 110, 100, 40, 36, 56, > 42, 104, 47, 49, 48, 48, 41, 125, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 50, 44, 45, 51, 50, 55, 54, 55, 32, 45, 112, > 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 52, 44, 36, 120, 48, > 44, 36, 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, 36, 120, 50, > 44, 36, 121, 50, 44, 36, 120, 51, 44, 36, 121, 51, 44, 49, 44, 45, > 54, 53, 53, 51, 53, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, > 48, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, > 45, 54, 53, 53, 51, 53, 44, 120, 48, 51, 61, 36, 120, 48, 43, 40, > 121, 45, 36, 121, 48, 41, 47, 40, 36, 121, 51, 45, 36, 121, 48, 41, > 42, 40, 36, 120, 51, 45, 36, 120, 48, 41, 59, 120, 49, 50, 61, 36, > 120, 49, 43, 40, 121, 45, 36, 121, 49, 41, 47, 40, 36, 121, 50, 45, > 36, 121, 49, 41, 42, 40, 36, 120, 50, 45, 36, 120, 49, 41, 59, 40, > 120, 45, 120, 48, 51, 41, 47, 40, 120, 49, 50, 45, 120, 48, 51, 41, > 42, 40, 119, 45, 49, 41, 44, 105, 41, 39, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, > 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, 54, 53, > 53, 51, 53, 44, 121, 48, 49, 61, 36, 121, 48, 43, 40, 120, 45, 36, > 120, 48, 41, 47, 40, 36, 120, 49, 45, 36, 120, 48, 41, 42, 40, 36, > 121, 49, 45, 36, 121, 48, 41, 59, 121, 51, 50, 61, 36, 121, 51, 43, > 40, 120, 45, 36, 120, 51, 41, 47, 40, 36, 120, 50, 45, 36, 120, 51, > 41, 42, 40, 36, 121, 50, 45, 36, 121, 51, 41, 59, 40, 121, 45, 121, > 48, 49, 41, 47, 40, 121, 51, 50, 45, 121, 48, 49, 41, 42, 40, 104, > 45, 49, 41, 44, 105, 41, 39, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 120, 115, 104, 105, 102, 116, 61, 123, 119, 42, 36, 49, 48, 47, 49, 48, > 48, 125, 32, 121, 115, 104, 105, 102, 116, 61, 123, 104, 42, 36, 49, 49, > 47, 49, 48, 48, 125, 32, 97, 108, 112, 104, 97, 61, 123, 45, 36, 49, > 50, 42, 112, 105, 47, 49, 56, 48, 125, 32, 99, 97, 61, 123, 99, 111, > 115, 40, 36, 97, 108, 112, 104, 97, 41, 47, 36, 49, 51, 125, 32, 115, > 97, 61, 123, 115, 105, 110, 40, 36, 97, 108, 112, 104, 97, 41, 47, 36, > 49, 51, 125, 32, 119, 50, 61, 123, 119, 47, 50, 125, 32, 104, 50, 61, > 123, 104, 47, 50, 125, 10, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, > 40, 105, 61, 61, 45, 51, 50, 55, 54, 55, 44, 105, 44, 88, 61, 105, > 40, 120, 44, 121, 44, 48, 44, 48, 41, 45, 36, 119, 50, 59, 89, 61, > 105, 40, 120, 44, 121, 44, 48, 44, 49, 41, 45, 36, 104, 50, 59, 105, > 102, 40, 99, 61, 61, 48, 44, 36, 119, 50, 45, 36, 120, 115, 104, 105, > 102, 116, 43, 88, 42, 36, 99, 97, 45, 89, 42, 36, 115, 97, 44, 36, > 104, 50, 45, 36, 121, 115, 104, 105, 102, 116, 43, 88, 42, 36, 115, 97, > 43, 89, 42, 36, 99, 97, 41, 41, 39, 10, 45, 105, 102, 32, 123, 36, > 49, 52, 61, 61, 48, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, > 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, > 61, 45, 51, 50, 55, 54, 55, 44, 120, 44, 105, 41, 39, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, > 49, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, > 45, 51, 50, 55, 54, 55, 44, 121, 44, 105, 41, 39, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 52, 61, > 61, 49, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, > 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, 51, > 50, 55, 54, 55, 44, 120, 44, 119, 45, 49, 45, 105, 41, 39, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, 49, > 44, 49, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, > 61, 45, 51, 50, 55, 54, 55, 44, 121, 44, 105, 41, 39, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 52, > 61, 61, 50, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, > 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, > 51, 50, 55, 54, 55, 44, 120, 44, 105, 41, 39, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, > 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, 51, > 50, 55, 54, 55, 44, 121, 44, 104, 45, 49, 45, 105, 41, 39, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 115, 104, > 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, > 39, 105, 102, 40, 105, 61, 61, 45, 51, 50, 55, 54, 55, 44, 120, 44, > 119, 45, 49, 45, 105, 41, 39, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 102, 91, 45, > 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, 51, 50, 55, 54, 55, > 44, 121, 44, 104, 45, 49, 45, 105, 41, 39, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 49, 54, 60, 50, 125, 32, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 48, 44, 123, 36, 49, 54, 61, 61, 48, 125, 44, > 36, 49, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 115, > 101, 10, 45, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 48, 44, 49, 44, 36, 49, 53, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 105, 102, 32, 123, 36, 49, 54, 61, 61, 51, 125, 32, 45, > 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, > 108, 112, 104, 97, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 123, 36, 49, 54, 61, 61, 49, 125, 32, 45, > 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 49, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, > 110, 101, 10, 103, 105, 109, 112, 95, 100, 114, 111, 115, 116, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, 123, 33, 36, > 49, 55, 125, 32, 45, 103, 105, 109, 112, 95, 100, 114, 111, 115, 116, 101, > 32, 36, 42, 32, 45, 101, 108, 115, 101, 32, 45, 112, 111, 108, 121, 103, > 111, 110, 32, 52, 44, 36, 49, 37, 44, 36, 50, 37, 44, 36, 51, 37, > 44, 36, 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, 44, 36, 55, 37, > 44, 36, 56, 37, 44, 48, 46, 51, 44, 48, 44, 48, 44, 48, 44, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 112, 111, 108, 121, 103, > 111, 110, 32, 52, 44, 36, 49, 37, 44, 36, 50, 37, 44, 36, 51, 37, > 44, 36, 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, 44, 36, 55, 37, > 44, 36, 56, 37, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, > 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 51, > 44, 48, 44, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, 50, 53, 53, > 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 36, 49, 37, 44, 36, 50, > 37, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, > 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, > 101, 108, 108, 105, 112, 115, 101, 32, 36, 51, 37, 44, 36, 52, 37, 44, > 51, 44, 51, 44, 48, 44, 49, 44, 50, 53, 53, 44, 48, 44, 50, 53, > 53, 44, 50, 53, 53, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 36, > 51, 37, 44, 36, 52, 37, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 10, 45, 101, 108, 108, 105, 112, 115, 101, 32, 36, 53, 37, > 44, 36, 54, 37, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, 44, 48, > 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 101, 108, 108, 105, 112, 115, > 101, 32, 36, 53, 37, 44, 36, 54, 37, 44, 51, 44, 51, 44, 48, 44, > 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, > 44, 48, 44, 50, 53, 53, 10, 45, 101, 108, 108, 105, 112, 115, 101, 32, > 36, 55, 37, 44, 36, 56, 37, 44, 51, 44, 51, 44, 48, 44, 49, 44, > 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 101, > 108, 108, 105, 112, 115, 101, 32, 36, 55, 37, 44, 36, 56, 37, 44, 51, > 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, > 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, > 95, 102, 114, 97, 109, 101, 95, 98, 108, 117, 114, 32, 58, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 10, 45, 45, 114, 32, 123, 49, 48, 48, > 43, 36, 49, 125, 37, 44, 123, 49, 48, 48, 43, 36, 49, 125, 37, 44, > 49, 44, 49, 48, 48, 37, 44, 51, 32, 45, 98, 91, 49, 93, 32, 36, > 51, 37, 10, 45, 105, 102, 32, 36, 53, 32, 45, 98, 97, 108, 97, 110, > 99, 101, 95, 103, 97, 109, 109, 97, 91, 49, 93, 32, 36, 123, 54, 45, > 56, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 57, 61, 61, 49, 125, 32, 45, 110, 91, 49, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 101, 108, 105, 102, 32, 123, 36, 57, 61, 61, 50, 125, 32, > 45, 110, 91, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 113, 117, > 97, 108, 105, 122, 101, 91, 49, 93, 32, 50, 53, 54, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 118, 10, 45, 122, 91, 49, 93, 32, 123, 36, > 50, 47, 50, 125, 37, 44, 123, 36, 50, 47, 50, 125, 37, 44, 123, 49, > 48, 48, 45, 36, 50, 47, 50, 125, 37, 44, 123, 49, 48, 48, 45, 36, > 50, 47, 50, 125, 37, 10, 45, 116, 111, 95, 114, 103, 98, 97, 91, 49, > 93, 10, 45, 105, 102, 32, 36, 52, 32, 114, 61, 123, 49, 43, 49, 47, > 36, 52, 125, 32, 45, 115, 104, 91, 49, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 102, 91, 45, 49, 93, 32, 39, 49, 45, 40, > 97, 98, 115, 40, 120, 47, 119, 45, 48, 46, 53, 41, 94, 36, 114, 43, > 97, 98, 115, 40, 121, 47, 104, 45, 48, 46, 53, 41, 94, 36, 114, 41, > 94, 40, 49, 47, 36, 114, 41, 39, 10, 118, 61, 123, 109, 105, 110, 40, > 105, 40, 119, 47, 50, 44, 48, 41, 44, 105, 40, 119, 45, 49, 44, 104, > 47, 50, 41, 44, 105, 40, 119, 47, 50, 44, 104, 45, 49, 41, 44, 105, > 40, 48, 44, 104, 47, 50, 41, 41, 125, 10, 45, 99, 91, 45, 49, 93, > 32, 36, 118, 44, 123, 36, 118, 43, 48, 46, 53, 47, 109, 97, 120, 40, > 119, 44, 104, 41, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 115, 61, 123, 36, 49, 48, 37, 42, 109, 97, 120, 40, 119, 44, > 104, 41, 125, 10, 45, 114, 91, 49, 93, 32, 123, 119, 43, 36, 115, 125, > 44, 123, 104, 43, 36, 115, 125, 44, 49, 44, 52, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 91, 49, 93, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 32, 45, 102, 99, 91, > 49, 93, 32, 36, 123, 49, 49, 45, 49, 51, 125, 32, 45, 98, 108, 101, > 110, 100, 91, 49, 44, 50, 93, 32, 97, 108, 112, 104, 97, 32, 45, 116, > 111, 95, 97, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 52, 32, 45, > 115, 104, 91, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 102, 91, 45, 49, 93, 32, 39, 49, 45, 40, 97, 98, 115, 40, 120, > 47, 119, 45, 48, 46, 53, 41, 94, 36, 114, 43, 97, 98, 115, 40, 121, > 47, 104, 45, 48, 46, 53, 41, 94, 36, 114, 41, 94, 40, 49, 47, 36, > 114, 41, 39, 10, 118, 61, 123, 109, 105, 110, 40, 105, 40, 119, 47, 50, > 44, 48, 41, 44, 105, 40, 119, 45, 49, 44, 104, 47, 50, 41, 44, 105, > 40, 119, 47, 50, 44, 104, 45, 49, 41, 44, 105, 40, 48, 44, 104, 47, > 50, 41, 41, 125, 10, 45, 99, 91, 45, 49, 93, 32, 36, 118, 44, 123, > 36, 118, 43, 48, 46, 53, 47, 109, 97, 120, 40, 119, 44, 104, 41, 125, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, > 49, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 52, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 49, 93, 32, 49, 48, 48, 37, 32, 45, 98, > 91, 45, 49, 93, 32, 36, 49, 54, 37, 44, 48, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 123, 109, 97, 120, 40, 49, 44, 49, 48, 48, 45, > 36, 49, 55, 41, 125, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 36, > 49, 52, 37, 44, 36, 49, 53, 37, 44, 48, 44, 48, 44, 48, 32, 45, > 47, 91, 45, 49, 93, 32, 45, 50, 53, 53, 32, 45, 43, 91, 45, 49, > 93, 32, 49, 32, 45, 42, 91, 48, 44, 45, 49, 93, 10, 45, 98, 108, > 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 102, 114, 97, 109, 101, > 95, 102, 117, 122, 122, 121, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 10, 40, 123, 119, 42, 36, 49, 47, 50, 48, 48, 125, 44, > 123, 104, 42, 36, 50, 47, 50, 48, 48, 125, 41, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 49, 93, 32, 49, 10, 45, 102, 114, 97, 109, 101, 95, > 102, 117, 122, 122, 121, 91, 45, 50, 93, 32, 64, 45, 49, 44, 36, 51, > 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 102, 114, 97, > 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, 58, 10, 45, 105, > 102, 32, 36, 49, 52, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, > 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 91, 45, > 49, 93, 32, 36, 49, 37, 44, 36, 50, 44, 36, 51, 37, 44, 36, 123, > 52, 45, 54, 125, 44, 36, 55, 37, 44, 36, 123, 56, 45, 49, 51, 125, > 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 116, 111, 95, > 97, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 91, 45, 50, 93, 44, 49, 44, 52, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 32, 45, 109, 118, 91, 45, 50, 44, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, > 45, 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, > 36, 49, 37, 44, 36, 50, 44, 36, 51, 37, 44, 36, 123, 52, 45, 54, > 125, 44, 36, 55, 37, 44, 36, 123, 56, 45, 49, 51, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 102, 114, 97, 109, 101, 95, > 112, 97, 105, 110, 116, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, > 110, 103, 32, 36, 49, 37, 44, 36, 50, 44, 36, 51, 37, 44, 36, 123, > 52, 45, 54, 125, 44, 36, 55, 37, 44, 36, 123, 56, 45, 49, 51, 125, > 10, 103, 105, 109, 112, 95, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, > 101, 114, 110, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 51, > 32, 45, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, 101, 114, 110, 32, > 36, 49, 44, 36, 50, 44, 36, 52, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, 101, 114, > 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, 101, 114, 110, 32, > 36, 49, 44, 36, 50, 44, 36, 51, 44, 49, 10, 103, 105, 109, 112, 95, > 102, 114, 97, 109, 101, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 122, 91, 45, > 49, 93, 32, 36, 49, 37, 44, 36, 51, 37, 44, 36, 50, 37, 44, 36, > 52, 37, 10, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 36, 49, > 49, 44, 36, 49, 49, 44, 36, 123, 49, 50, 45, 49, 53, 125, 10, 45, > 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 36, 53, 37, 44, 36, 54, > 37, 44, 36, 123, 55, 45, 49, 48, 125, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 102, > 114, 97, 109, 101, 95, 114, 111, 117, 110, 100, 32, 58, 10, 45, 102, 114, > 97, 109, 101, 95, 114, 111, 117, 110, 100, 32, 36, 123, 49, 45, 56, 125, > 10, 45, 105, 102, 32, 36, 57, 32, 45, 102, 114, 97, 109, 101, 95, 98, > 108, 117, 114, 32, 36, 49, 44, 123, 109, 105, 110, 40, 57, 57, 44, 36, > 49, 43, 36, 57, 41, 125, 44, 36, 51, 44, 36, 49, 48, 44, 36, 49, > 49, 37, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 111, > 108, 100, 95, 112, 104, 111, 116, 111, 32, 58, 10, 45, 118, 105, 103, 110, > 101, 116, 116, 101, 32, 36, 123, 49, 45, 51, 125, 32, 45, 111, 108, 100, > 95, 112, 104, 111, 116, 111, 10, 103, 105, 109, 112, 95, 112, 111, 108, 97, > 114, 111, 105, 100, 32, 58, 10, 45, 118, 105, 103, 110, 101, 116, 116, 101, > 32, 36, 123, 55, 45, 57, 125, 32, 45, 112, 111, 108, 97, 114, 111, 105, > 100, 32, 36, 49, 44, 36, 50, 32, 45, 100, 114, 111, 112, 95, 115, 104, > 97, 100, 111, 119, 32, 36, 51, 37, 44, 36, 52, 37, 44, 36, 53, 37, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 36, 54, 44, 49, 44, 48, 10, > 103, 105, 109, 112, 95, 116, 117, 110, 110, 101, 108, 32, 58, 10, 45, 116, > 117, 110, 110, 101, 108, 32, 36, 49, 44, 36, 50, 37, 44, 36, 123, 51, > 45, 54, 125, 10, 103, 105, 109, 112, 95, 118, 105, 103, 110, 101, 116, 116, > 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 116, 111, 95, 114, 103, 98, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 61, 91, 45, 49, 93, 32, 48, 32, 45, > 118, 105, 103, 110, 101, 116, 116, 101, 91, 45, 49, 93, 32, 36, 123, 49, > 45, 51, 125, 32, 45, 97, 32, 99, 32, 45, 45, 102, 99, 32, 36, 123, > 52, 45, 55, 125, 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, > 97, 44, 49, 44, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, 97, 118, 101, > 114, 97, 103, 101, 95, 97, 108, 108, 32, 58, 10, 45, 105, 102, 32, 64, > 35, 10, 78, 61, 64, 35, 32, 45, 43, 32, 45, 47, 32, 36, 78, 10, > 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 98, 108, 101, 110, > 100, 95, 101, 100, 103, 101, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 45, 105, 102, 32, > 36, 51, 32, 45, 114, 118, 32, 45, 101, 110, 100, 105, 102, 32, 45, 45, > 98, 108, 101, 110, 100, 95, 101, 100, 103, 101, 115, 91, 45, 50, 44, 45, > 49, 93, 32, 36, 50, 32, 45, 114, 109, 91, 45, 51, 93, 32, 45, 98, > 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, 108, 112, 104, > 97, 44, 36, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, > 32, 58, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, 32, 45, > 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 32, 52, 10, 45, 105, > 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 50, > 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 45, 49, 93, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 55, 61, 61, 50, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 50, > 32, 45, 115, 114, 103, 98, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, > 114, 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 32, 91, 48, 93, > 44, 91, 48, 93, 44, 49, 44, 49, 44, 34, 36, 49, 49, 34, 10, 45, > 101, 108, 115, 101, 32, 45, 95, 103, 105, 109, 112, 95, 98, 108, 101, 110, > 100, 95, 102, 97, 100, 101, 36, 49, 32, 36, 56, 44, 36, 57, 44, 36, > 49, 48, 32, 45, 114, 91, 45, 49, 93, 32, 91, 48, 93, 44, 91, 48, > 93, 44, 49, 44, 49, 44, 51, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 110, 91, 45, 49, 93, 32, 123, 45, 40, 64, 35, 45, 50, 41, 42, 36, > 51, 125, 44, 123, 40, 64, 35, 45, 50, 41, 42, 40, 49, 43, 36, 51, > 41, 125, 10, 45, 45, 91, 45, 49, 93, 32, 123, 36, 50, 42, 40, 49, > 43, 36, 51, 41, 42, 40, 64, 35, 45, 50, 41, 125, 10, 45, 99, 91, > 45, 49, 93, 32, 48, 44, 123, 64, 35, 45, 50, 125, 10, 45, 105, 102, > 32, 36, 54, 32, 45, 114, 118, 91, 94, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 36, 53, 32, 45, 114, 111, 117, 110, > 100, 91, 45, 49, 93, 32, 49, 10, 45, 101, 108, 115, 101, 32, 45, 114, > 111, 117, 110, 100, 105, 102, 121, 91, 45, 49, 93, 32, 36, 52, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 98, 108, 101, 110, 100, 95, 102, 97, 100, > 101, 10, 45, 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, > 32, 48, 44, 50, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 50, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, > 32, 48, 44, 50, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 45, 49, > 93, 32, 45, 114, 103, 98, 50, 115, 114, 103, 98, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 95, 103, > 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, 49, 32, > 58, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 49, 44, 34, 97, > 61, 36, 49, 42, 112, 105, 47, 50, 59, 32, 120, 42, 99, 111, 115, 40, > 97, 41, 32, 43, 32, 121, 42, 115, 105, 110, 40, 97, 41, 34, 10, 95, > 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, 50, > 32, 58, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 49, 44, 48, > 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 123, 40, 36, 49, 43, 49, > 41, 42, 53, 48, 125, 37, 44, 123, 40, 36, 50, 43, 49, 41, 42, 53, > 48, 125, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, > 93, 32, 49, 10, 95, 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, > 102, 97, 100, 101, 51, 32, 58, 32, 91, 48, 93, 44, 91, 48, 93, 44, > 49, 44, 49, 44, 48, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 123, > 40, 36, 49, 43, 49, 41, 42, 53, 48, 125, 37, 44, 123, 40, 36, 50, > 43, 49, 41, 42, 53, 48, 125, 37, 32, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, > 123, 48, 46, 48, 49, 43, 36, 51, 47, 50, 125, 32, 45, 99, 111, 115, > 91, 45, 49, 93, 10, 95, 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, > 95, 102, 97, 100, 101, 52, 32, 58, 32, 91, 48, 93, 44, 91, 48, 93, > 44, 49, 44, 49, 44, 34, 40, 40, 120, 45, 119, 42, 40, 36, 49, 43, > 48, 46, 53, 41, 41, 42, 40, 121, 45, 104, 42, 40, 36, 50, 43, 48, > 46, 53, 41, 41, 41, 37, 40, 48, 46, 50, 42, 119, 42, 104, 42, 40, > 49, 46, 48, 48, 49, 43, 36, 51, 41, 41, 34, 10, 103, 105, 109, 112, > 95, 98, 108, 101, 110, 100, 32, 58, 10, 109, 111, 100, 101, 61, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 36, 49, 44, 97, 100, 100, 44, 97, > 108, 112, 104, 97, 44, 97, 110, 100, 44, 97, 118, 101, 114, 97, 103, 101, > 44, 98, 108, 117, 101, 44, 98, 117, 114, 110, 44, 100, 97, 114, 107, 101, > 110, 44, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 44, 92, 10, 100, > 105, 118, 105, 100, 101, 44, 100, 111, 100, 103, 101, 44, 101, 100, 103, 101, > 115, 44, 101, 120, 99, 108, 117, 115, 105, 111, 110, 44, 102, 114, 101, 101, > 122, 101, 44, 103, 114, 97, 105, 110, 101, 120, 116, 114, 97, 99, 116, 44, > 103, 114, 97, 105, 110, 109, 101, 114, 103, 101, 44, 103, 114, 101, 101, 110, > 44, 104, 97, 114, 100, 108, 105, 103, 104, 116, 44, 92, 10, 104, 97, 114, > 100, 109, 105, 120, 44, 104, 117, 101, 44, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 44, 108, 105, 103, 104, 116, 101, 110, 44, 108, > 105, 103, 104, 116, 110, 101, 115, 115, 44, 108, 105, 110, 101, 97, 114, 98, > 117, 114, 110, 44, 108, 105, 110, 101, 97, 114, 108, 105, 103, 104, 116, 44, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 44, 92, 10, 109, 117, 108, 116, > 105, 112, 108, 121, 44, 110, 101, 103, 97, 116, 105, 111, 110, 44, 111, 114, > 44, 111, 118, 101, 114, 108, 97, 121, 44, 112, 105, 110, 108, 105, 103, 104, > 116, 44, 114, 101, 100, 44, 114, 101, 102, 108, 101, 99, 116, 44, 115, 97, > 116, 117, 114, 97, 116, 105, 111, 110, 44, 92, 10, 115, 104, 97, 112, 101, > 97, 118, 101, 114, 97, 103, 101, 44, 115, 104, 97, 112, 101, 97, 118, 101, > 114, 97, 103, 101, 48, 44, 115, 111, 102, 116, 98, 117, 114, 110, 44, 115, > 111, 102, 116, 100, 111, 100, 103, 101, 44, 115, 111, 102, 116, 108, 105, 103, > 104, 116, 44, 115, 99, 114, 101, 101, 110, 44, 115, 116, 97, 109, 112, 44, > 115, 117, 98, 116, 114, 97, 99, 116, 44, 118, 97, 108, 117, 101, 44, 92, > 10, 118, 105, 118, 105, 100, 108, 105, 103, 104, 116, 44, 120, 111, 114, 125, > 10, 45, 98, 108, 101, 110, 100, 32, 36, 109, 111, 100, 101, 44, 36, 50, > 44, 123, 49, 45, 36, 51, 125, 10, 103, 105, 109, 112, 95, 98, 108, 101, > 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, 115, 32, 58, 10, 45, 114, > 118, 32, 45, 116, 111, 95, 97, 91, 94, 48, 93, 32, 45, 114, 91, 94, > 48, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 49, 48, 48, > 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 115, > 104, 105, 102, 116, 91, 94, 48, 93, 32, 36, 52, 37, 44, 36, 53, 37, > 10, 45, 105, 102, 32, 36, 54, 10, 45, 45, 98, 108, 101, 110, 100, 95, > 115, 101, 97, 109, 108, 101, 115, 115, 32, 36, 49, 44, 36, 50, 37, 44, > 36, 51, 37, 10, 45, 107, 91, 48, 44, 45, 49, 93, 32, 45, 114, 118, > 32, 45, 45, 115, 117, 98, 95, 97, 108, 112, 104, 97, 32, 49, 32, 45, > 114, 118, 91, 48, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 108, 115, 101, 32, 45, 98, 108, 101, 110, 100, 95, 115, 101, > 97, 109, 108, 101, 115, 115, 32, 36, 49, 44, 36, 50, 37, 44, 36, 51, > 37, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 98, 108, > 101, 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, 115, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 98, 108, 101, > 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, 115, 32, 36, 123, 49, 45, > 53, 125, 44, 48, 10, 103, 105, 109, 112, 95, 97, 108, 105, 103, 110, 95, > 108, 97, 121, 101, 114, 115, 32, 58, 10, 45, 105, 102, 32, 36, 123, 52, > 61, 48, 125, 32, 45, 95, 103, 105, 109, 112, 95, 114, 101, 118, 101, 114, > 116, 95, 108, 97, 121, 101, 114, 115, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 10, > 45, 105, 102, 32, 36, 49, 32, 45, 114, 101, 103, 105, 115, 116, 101, 114, > 95, 110, 111, 110, 114, 105, 103, 105, 100, 32, 36, 50, 44, 48, 46, 49, > 44, 36, 51, 10, 45, 101, 108, 115, 101, 32, 40, 36, 50, 41, 32, 45, > 42, 91, 45, 49, 93, 32, 51, 32, 45, 114, 101, 103, 105, 115, 116, 101, > 114, 95, 114, 105, 103, 105, 100, 91, 94, 45, 49, 93, 32, 64, 45, 49, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, > 103, 105, 109, 112, 95, 97, 108, 105, 103, 110, 95, 108, 97, 121, 101, 114, > 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 97, 108, 105, 103, 110, 95, 108, 97, 121, 101, 114, 115, 32, 36, > 49, 44, 36, 50, 44, 48, 32, 45, 98, 108, 101, 110, 100, 95, 101, 100, > 103, 101, 115, 32, 48, 46, 49, 10, 95, 103, 105, 109, 112, 95, 114, 101, > 118, 101, 114, 116, 95, 108, 97, 121, 101, 114, 115, 32, 58, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, > 125, 32, 45, 114, 118, 91, 123, 50, 42, 36, 62, 125, 44, 123, 50, 42, > 36, 62, 43, 49, 125, 93, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 102, 97, 100, 101, 95, 108, 97, 121, 101, 114, 115, 32, 58, 10, > 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, > 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 122, 32, 45, > 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 123, 40, 100, 45, > 49, 41, 42, 36, 49, 43, 49, 125, 44, 49, 48, 48, 37, 44, 51, 32, > 45, 115, 32, 122, 10, 103, 105, 109, 112, 95, 102, 97, 100, 101, 95, 108, > 97, 121, 101, 114, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, > 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 107, 91, 48, 44, 49, > 93, 32, 45, 43, 32, 45, 47, 32, 50, 10, 103, 105, 109, 112, 95, 109, > 111, 114, 112, 104, 32, 58, 10, 45, 105, 102, 32, 36, 123, 52, 61, 48, > 125, 32, 45, 95, 103, 105, 109, 112, 95, 114, 101, 118, 101, 114, 116, 95, > 108, 97, 121, 101, 114, 115, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 109, 111, 114, 112, 104, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 10, 103, 105, 109, 112, 95, 97, 112, 112, 101, 110, > 100, 95, 116, 105, 108, 101, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 48, 44, 48, > 44, 48, 44, 50, 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, > 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, 10, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 58, 10, 45, 115, > 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, > 44, 36, 51, 32, 45, 107, 91, 53, 48, 37, 93, 10, 103, 105, 109, 112, > 95, 116, 114, 97, 110, 115, 102, 101, 114, 95, 99, 111, 108, 111, 114, 115, > 32, 58, 10, 45, 105, 102, 32, 36, 123, 50, 61, 48, 125, 32, 45, 95, > 103, 105, 109, 112, 95, 114, 101, 118, 101, 114, 116, 95, 108, 97, 121, 101, > 114, 115, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 114, 97, 110, 115, > 102, 101, 114, 95, 99, 111, 108, 111, 114, 115, 32, 36, 49, 10, 103, 105, > 109, 112, 95, 116, 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 95, 100, > 105, 102, 102, 32, 58, 10, 45, 105, 102, 32, 36, 123, 53, 61, 48, 125, > 32, 45, 95, 103, 105, 109, 112, 95, 114, 101, 118, 101, 114, 116, 95, 108, > 97, 121, 101, 114, 115, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, > 10, 45, 105, 102, 32, 36, 51, 10, 45, 45, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 110, 111, 114, 109, 91, 45, 50, 93, 32, 45, 98, > 91, 45, 50, 93, 32, 36, 50, 37, 32, 45, 103, 101, 91, 45, 50, 93, > 32, 36, 49, 37, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 101, 108, 115, 101, 10, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 110, 111, 114, 109, 91, 45, 49, 93, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 50, 37, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, > 49, 37, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, > 36, 52, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 114, 103, 98, > 97, 91, 45, 50, 93, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 116, 111, 110, 101, 115, > 32, 58, 10, 115, 118, 97, 108, 61, 36, 50, 32, 101, 118, 97, 108, 61, > 123, 109, 97, 120, 40, 36, 50, 44, 36, 51, 41, 125, 10, 45, 114, 101, > 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, > 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 118, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, 125, 10, 91, 49, > 93, 10, 118, 97, 108, 48, 61, 123, 36, 115, 118, 97, 108, 43, 40, 36, > 101, 118, 97, 108, 45, 36, 115, 118, 97, 108, 41, 42, 36, 62, 47, 40, > 36, 49, 45, 50, 41, 125, 10, 118, 97, 108, 49, 61, 123, 36, 115, 118, > 97, 108, 43, 40, 36, 101, 118, 97, 108, 45, 36, 115, 118, 97, 108, 41, > 42, 40, 36, 62, 43, 49, 41, 47, 40, 36, 49, 45, 50, 41, 45, 49, > 125, 10, 45, 45, 116, 50, 91, 48, 93, 32, 36, 118, 97, 108, 48, 44, > 36, 118, 97, 108, 49, 10, 45, 105, 102, 32, 36, 53, 32, 45, 42, 91, > 45, 49, 93, 32, 91, 48, 93, 32, 45, 98, 91, 45, 49, 93, 32, 36, > 52, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 101, 108, 115, 101, 32, 45, 98, 91, 45, 49, 93, 32, 36, 52, 37, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 93, 32, 45, 114, > 118, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 116, 111, 110, 101, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 116, 111, 110, 101, 115, 32, 36, 42, 32, 45, 114, > 118, 32, 45, 116, 111, 95, 97, 32, 45, 97, 112, 112, 101, 110, 100, 95, > 116, 105, 108, 101, 115, 32, 44, 10, 95, 103, 105, 109, 112, 95, 98, 117, > 114, 110, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 10, 45, 45, 110, 111, 114, 109, 10, 45, 103, 105, 109, 112, 95, > 102, 111, 117, 114, 105, 101, 114, 91, 45, 49, 93, 32, 48, 10, 45, 45, > 114, 111, 119, 115, 91, 45, 49, 93, 32, 48, 44, 123, 36, 104, 45, 49, > 125, 32, 45, 114, 91, 45, 49, 93, 32, 36, 50, 37, 44, 36, 50, 37, > 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 32, 45, 98, 91, 45, 49, 93, 32, 36, 51, 37, 10, 45, > 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 123, 40, 36, 119, 45, > 119, 41, 47, 50, 125, 44, 123, 40, 36, 104, 45, 104, 41, 47, 50, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 102, > 111, 117, 114, 105, 101, 114, 91, 45, 49, 93, 32, 49, 10, 45, 98, 108, > 101, 110, 100, 32, 111, 118, 101, 114, 108, 97, 121, 44, 36, 49, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 98, 117, 114, 110, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 98, > 117, 114, 110, 32, 36, 123, 49, 45, 51, 125, 34, 44, 36, 52, 44, 49, > 10, 103, 105, 109, 112, 95, 98, 117, 114, 110, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 98, 117, 114, 110, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 99, 111, 110, 116, 114, 97, 115, 116, 95, 115, 119, > 109, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, 45, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, > 98, 108, 117, 114, 95, 120, 121, 91, 49, 93, 32, 36, 49, 44, 36, 49, > 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 48, 125, 32, 45, 110, 101, > 103, 97, 116, 105, 118, 101, 91, 49, 93, 32, 45, 101, 108, 105, 102, 32, > 123, 36, 50, 61, 61, 49, 125, 32, 45, 103, 105, 109, 112, 95, 100, 111, > 95, 110, 111, 116, 104, 105, 110, 103, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 118, 32, 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, 100, 108, > 105, 103, 104, 116, 44, 36, 51, 10, 45, 101, 110, 100, 108, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, > 58, 10, 45, 42, 32, 45, 49, 32, 45, 43, 32, 50, 53, 53, 32, 45, > 118, 105, 103, 110, 101, 116, 116, 101, 32, 123, 50, 53, 53, 42, 36, 53, > 125, 44, 56, 48, 44, 57, 53, 32, 45, 42, 32, 45, 49, 32, 45, 43, > 32, 50, 53, 53, 10, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, > 119, 32, 36, 49, 37, 44, 36, 50, 37, 44, 36, 51, 37, 44, 36, 52, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 36, 54, 44, 49, 44, 48, 10, > 103, 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, > 51, 100, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 60, 93, 10, 45, 45, 95, 103, 105, 109, 112, 95, 100, > 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 51, 100, 32, 36, 42, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, > 95, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 51, 100, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 105, 102, 32, 36, > 49, 51, 32, 45, 95, 103, 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, > 104, 97, 100, 111, 119, 51, 100, 32, 36, 42, 10, 45, 101, 108, 115, 101, > 32, 45, 45, 95, 103, 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, 104, > 97, 100, 111, 119, 51, 100, 32, 36, 42, 32, 45, 114, 118, 32, 45, 98, > 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 44, 49, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 95, 103, 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, > 119, 51, 100, 32, 58, 10, 45, 112, 111, 105, 110, 116, 51, 100, 32, 48, > 44, 48, 44, 49, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, > 48, 44, 48, 44, 36, 49, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 48, 44, 49, 44, 48, 44, 36, 50, 32, 45, 114, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 49, 44, 36, 51, 10, 117, 61, 123, 105, 40, > 48, 44, 56, 41, 125, 32, 118, 61, 123, 105, 40, 48, 44, 57, 41, 125, > 32, 119, 61, 123, 105, 40, 48, 44, 49, 48, 41, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 116, 111, 95, 97, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 49, 48, 48, 37, 32, 45, 105, 102, 32, 123, 105, > 109, 61, 61, 105, 77, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 45, 102, 32, 39, 88, 61, 120, 47, 119, > 45, 48, 46, 53, 59, 89, 61, 121, 47, 104, 45, 48, 46, 53, 59, 65, > 61, 40, 36, 55, 45, 36, 52, 42, 36, 55, 47, 49, 48, 48, 41, 42, > 36, 119, 47, 40, 88, 42, 36, 117, 43, 89, 42, 36, 118, 43, 36, 55, > 42, 36, 119, 41, 59, 105, 102, 40, 65, 60, 48, 44, 49, 101, 56, 44, > 65, 41, 39, 10, 45, 45, 42, 91, 45, 49, 93, 32, 39, 121, 47, 104, > 45, 48, 46, 53, 39, 32, 45, 42, 91, 45, 50, 93, 32, 39, 120, 47, > 119, 45, 48, 46, 53, 39, 32, 45, 43, 91, 45, 50, 93, 32, 123, 48, > 46, 53, 45, 36, 53, 47, 49, 48, 48, 125, 32, 45, 43, 91, 45, 49, > 93, 32, 123, 48, 46, 53, 45, 36, 54, 47, 49, 48, 48, 125, 32, 45, > 42, 91, 45, 50, 93, 32, 123, 119, 125, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 104, 125, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 32, 45, 119, 97, 114, 112, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, > 44, 49, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 32, > 36, 56, 37, 32, 45, 110, 32, 48, 44, 36, 49, 50, 32, 45, 105, 91, > 45, 50, 93, 32, 40, 36, 57, 94, 36, 49, 48, 94, 36, 49, 49, 41, > 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, > 93, 44, 49, 44, 51, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 99, 10, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, > 115, 104, 97, 100, 111, 119, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 45, 110, 101, 103, > 97, 116, 105, 118, 101, 32, 45, 98, 108, 101, 110, 100, 32, 115, 111, 102, > 116, 108, 105, 103, 104, 116, 44, 36, 49, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, > 105, 122, 101, 95, 115, 104, 97, 100, 111, 119, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 101, 113, 117, 97, 108, 105, 122, 101, 95, 115, 104, 97, 100, 111, 119, 32, > 36, 49, 34, 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 108, 105, > 103, 104, 116, 103, 108, 111, 119, 32, 58, 10, 109, 111, 100, 101, 61, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 51, 44, 98, 117, 114, 110, > 44, 100, 111, 100, 103, 101, 44, 102, 114, 101, 101, 122, 101, 44, 103, 114, > 97, 105, 110, 109, 101, 114, 103, 101, 44, 104, 97, 114, 100, 108, 105, 103, > 104, 116, 44, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 44, 108, 105, 103, 104, 116, 101, 110, 44, 109, 117, 108, 116, 105, 112, 108, > 121, 44, 111, 118, 101, 114, 108, 97, 121, 44, 114, 101, 102, 108, 101, 99, > 116, 44, 115, 111, 102, 116, 108, 105, 103, 104, 116, 44, 115, 116, 97, 109, > 112, 44, 118, 97, 108, 117, 101, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, > 111, 114, 109, 91, 45, 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, > 123, 49, 48, 48, 45, 36, 49, 125, 37, 32, 45, 100, 105, 115, 116, 97, > 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 94, 91, 45, 49, 93, > 32, 36, 50, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 98, 108, 101, 110, > 100, 32, 36, 109, 111, 100, 101, 44, 36, 52, 10, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 108, 105, 103, 104, 116, 103, 108, 111, 119, 32, 58, 10, 45, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, > 105, 109, 112, 95, 108, 105, 103, 104, 116, 103, 108, 111, 119, 32, 36, 123, > 49, 45, 52, 125, 34, 44, 36, 53, 44, 48, 10, 103, 105, 109, 112, 95, > 108, 105, 103, 104, 116, 103, 108, 111, 119, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 108, > 105, 103, 104, 116, 103, 108, 111, 119, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 108, 105, 103, 104, 116, 95, 112, 97, 116, 99, > 104, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 108, 105, 103, > 104, 116, 95, 112, 97, 116, 99, 104, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 34, 44, 36, 52, 44, 48, 10, 45, 101, 110, 100, 108, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 108, 105, 103, 104, 116, 114, 97, 121, 115, 32, 58, 10, > 45, 108, 105, 103, 104, 116, 114, 97, 121, 115, 32, 36, 123, 49, 45, 53, > 125, 10, 45, 105, 102, 32, 36, 54, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 123, 64, 123, 36, 62, 44, 115, 125, 43, > 40, 64, 123, 36, 62, 44, 115, 125, 37, 50, 41, 125, 32, 45, 100, 111, > 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 108, > 105, 103, 104, 116, 95, 114, 101, 108, 105, 101, 102, 32, 58, 10, 45, 98, > 32, 36, 49, 49, 37, 32, 45, 108, 105, 103, 104, 116, 95, 114, 101, 108, > 105, 101, 102, 32, 36, 123, 49, 45, 49, 48, 125, 10, 103, 105, 109, 112, > 95, 115, 104, 97, 100, 111, 119, 95, 112, 97, 116, 99, 104, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 108, 91, 48, 93, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 115, 104, 97, 100, 111, 119, 95, > 112, 97, 116, 99, 104, 32, 36, 49, 34, 44, 36, 50, 44, 48, 10, 45, > 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 98, 111, 120, 102, 105, > 116, 116, 105, 110, 103, 32, 58, 10, 45, 98, 111, 120, 102, 105, 116, 116, > 105, 110, 103, 32, 36, 123, 49, 45, 51, 125, 44, 51, 10, 45, 105, 102, > 32, 36, 52, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 44, 48, 44, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 98, 111, > 120, 102, 105, 116, 116, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 98, 111, 120, 102, 105, 116, 116, 105, 110, 103, 32, 36, > 123, 49, 45, 51, 125, 44, 49, 10, 45, 105, 102, 32, 36, 52, 32, 45, > 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 108, 97, 99, 101, > 95, 99, 111, 108, 111, 114, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 50, 53, 53, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, > 100, 105, 102, 10, 103, 105, 109, 112, 95, 99, 97, 110, 118, 97, 115, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 45, 49, 93, 10, 45, 105, 102, 32, 36, 52, 10, 40, 123, 99, 111, 115, > 40, 36, 50, 42, 112, 105, 47, 49, 56, 48, 41, 125, 94, 123, 115, 105, > 110, 40, 36, 50, 42, 112, 105, 47, 49, 56, 48, 41, 125, 41, 32, 45, > 118, 101, 99, 116, 111, 114, 50, 116, 101, 110, 115, 111, 114, 91, 45, 49, > 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, > 50, 93, 32, 45, 45, 115, 109, 111, 111, 116, 104, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 36, 49, 32, 45, 114, 109, 91, 45, 50, 93, 32, > 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 36, 51, 32, > 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 40, 123, 99, > 111, 115, 40, 36, 54, 42, 112, 105, 47, 49, 56, 48, 41, 125, 94, 123, > 115, 105, 110, 40, 36, 54, 42, 112, 105, 47, 49, 56, 48, 41, 125, 41, > 32, 45, 118, 101, 99, 116, 111, 114, 50, 116, 101, 110, 115, 111, 114, 91, > 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, > 91, 45, 50, 93, 32, 45, 115, 109, 111, 111, 116, 104, 91, 45, 51, 93, > 32, 91, 45, 49, 93, 44, 36, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 50, 93, 32, 36, 55, > 32, 45, 99, 91, 45, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 47, 91, 45, 49, 93, 32, 50, > 10, 45, 101, 108, 115, 101, 10, 40, 123, 99, 111, 115, 40, 36, 50, 42, > 112, 105, 47, 49, 56, 48, 41, 125, 94, 123, 115, 105, 110, 40, 36, 50, > 42, 112, 105, 47, 49, 56, 48, 41, 125, 41, 32, 45, 118, 101, 99, 116, > 111, 114, 50, 116, 101, 110, 115, 111, 114, 91, 45, 49, 93, 32, 45, 114, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 32, 45, > 115, 109, 111, 111, 116, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 36, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 97, 114, > 112, 101, 110, 91, 45, 49, 93, 32, 36, 51, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 97, 110, 118, 97, 115, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 99, 97, 110, 118, 97, 115, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, 114, 97, 99, 107, 115, > 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 34, 45, 99, 114, 97, 99, 107, 115, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 34, 44, 36, 52, 44, 48, 10, 103, 105, 109, 112, 95, > 99, 114, 97, 99, 107, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 114, 97, 99, > 107, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 104, 97, 108, 102, 116, 111, 110, 101, 32, 58, 10, 45, 97, 112, 112, 108, > 121, 95, 103, 97, 109, 109, 97, 32, 123, 49, 48, 94, 36, 49, 125, 32, > 45, 45, 32, 49, 50, 56, 32, 45, 42, 32, 36, 50, 32, 45, 43, 32, > 49, 50, 56, 32, 45, 43, 32, 36, 51, 32, 45, 98, 32, 36, 52, 32, > 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 104, 97, 108, 102, 116, > 111, 110, 101, 91, 48, 93, 32, 36, 123, 53, 45, 57, 125, 10, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 104, 97, 108, 102, 116, 111, 110, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 104, 97, 108, 102, 116, 111, 110, 101, 32, 36, 42, 34, 44, 36, > 45, 49, 10, 103, 105, 109, 112, 95, 104, 101, 97, 114, 116, 115, 32, 58, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 45, 104, 101, 97, 114, 116, 115, 32, 36, 49, 34, 44, 36, 50, > 44, 48, 10, 103, 105, 109, 112, 95, 104, 101, 97, 114, 116, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 104, 101, 97, 114, 116, 115, 32, 36, 42, 34, 44, 36, > 45, 49, 10, 103, 105, 109, 112, 95, 108, 97, 118, 97, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 108, 91, 48, 93, 32, 45, 110, 111, 114, 109, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 112, 108, 97, 115, 109, 97, 91, 45, 49, > 93, 32, 49, 44, 49, 44, 123, 49, 54, 45, 36, 49, 125, 32, 45, 115, > 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 36, 50, 44, 48, 44, 49, > 44, 36, 51, 44, 36, 51, 44, 48, 46, 56, 44, 57, 48, 32, 45, 42, > 10, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, > 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 113, 117, 97, 108, 105, > 122, 101, 32, 45, 109, 97, 112, 32, 51, 10, 45, 115, 104, 97, 114, 112, > 101, 110, 32, 36, 52, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 108, 97, 118, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 108, 97, 118, 97, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, 97, > 114, 98, 108, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, 109, > 97, 114, 98, 108, 101, 32, 36, 49, 47, 49, 48, 44, 36, 50, 47, 49, > 48, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, > 44, 36, 56, 44, 36, 57, 37, 44, 36, 49, 48, 37, 10, 45, 101, 110, > 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 109, 97, 107, 101, 95, 115, 101, > 97, 109, 108, 101, 115, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 36, > 49, 32, 45, 45, 98, 32, 123, 50, 48, 46, 53, 45, 36, 49, 47, 53, > 48, 125, 37, 32, 45, 45, 91, 48, 93, 32, 91, 49, 93, 32, 45, 102, > 99, 91, 45, 49, 93, 32, 64, 123, 45, 97, 118, 101, 114, 97, 103, 101, > 95, 99, 111, 108, 111, 114, 91, 45, 49, 93, 125, 32, 45, 43, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 112, 101, 114, 105, 111, 100, 105, 122, 101, 95, 112, 111, 105, > 115, 115, 111, 110, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, 105, > 109, 112, 95, 109, 97, 107, 101, 95, 115, 101, 97, 109, 108, 101, 115, 115, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 105, 102, 32, 123, 33, 36, 50, 125, 32, 45, 103, 105, 109, 112, 95, > 109, 97, 107, 101, 95, 115, 101, 97, 109, 108, 101, 115, 115, 32, 36, 42, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 105, 102, 32, 36, 51, 32, 45, > 97, 114, 114, 97, 121, 32, 123, 36, 51, 43, 49, 125, 44, 123, 36, 51, > 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 109, 97, 122, 101, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 10, 45, 114, 91, 45, 49, 93, 32, 123, 49, 48, 48, 47, 36, > 49, 125, 37, 44, 123, 49, 48, 48, 47, 36, 49, 125, 37, 44, 49, 44, > 49, 48, 48, 37, 44, 50, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, > 48, 125, 32, 45, 102, 91, 45, 49, 93, 32, 49, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 51, 61, 61, 49, 125, 32, 45, 110, 101, 103, 97, 116, > 105, 118, 101, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 109, 97, 122, 101, 95, 109, 97, 115, 107, 91, 45, 49, 93, 32, 36, 49, > 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 36, 50, 32, > 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 105, 102, 32, 123, > 33, 36, 53, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, > 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, 44, 36, 104, 44, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 100, > 116, 95, 109, 105, 110, 101, 114, 97, 108, 95, 109, 111, 115, 97, 105, 99, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 45, 98, > 32, 36, 51, 32, 45, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, > 101, 114, 115, 104, 101, 100, 91, 45, 49, 93, 32, 36, 49, 32, 45, 45, > 110, 111, 114, 109, 91, 45, 49, 93, 10, 45, 97, 114, 101, 97, 91, 45, > 49, 93, 32, 48, 32, 45, 45, 108, 101, 91, 45, 49, 93, 32, 123, 36, > 50, 94, 50, 125, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 108, 97, 98, 101, 108, 91, 45, 49, 93, 10, 45, 45, 102, 91, 48, 93, > 32, 39, 105, 102, 40, 99, 61, 61, 48, 44, 120, 44, 121, 41, 39, 32, > 45, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 115, > 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 44, 49, 44, 49, 10, > 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 48, 44, > 50, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, > 32, 48, 44, 49, 10, 97, 108, 112, 104, 97, 61, 123, 36, 53, 42, 112, > 105, 47, 49, 56, 48, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, > 44, 48, 32, 45, 42, 91, 45, 49, 93, 32, 123, 99, 111, 115, 40, 36, > 97, 108, 112, 104, 97, 41, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 42, 91, 45, > 49, 93, 32, 123, 115, 105, 110, 40, 36, 97, 108, 112, 104, 97, 41, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 99, 111, 109, 112, 111, 115, > 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 43, > 10, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, > 108, 91, 45, 49, 93, 32, 49, 48, 48, 48, 32, 45, 110, 91, 45, 49, > 93, 32, 45, 36, 52, 44, 36, 52, 10, 45, 43, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 109, 111, 115, 97, 105, 99, 32, 58, 10, 45, > 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, > 45, 109, 111, 115, 97, 105, 99, 32, 36, 49, 44, 36, 50, 34, 44, 36, > 51, 44, 48, 10, 103, 105, 109, 112, 95, 109, 111, 115, 97, 105, 99, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 109, 111, 115, 97, 105, 99, 32, 36, 42, 34, 44, > 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 32, > 58, 10, 45, 105, 102, 32, 36, 49, 10, 45, 114, 101, 109, 111, 118, 101, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, > 33, 36, 55, 125, 32, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, > 101, 115, 32, 36, 42, 32, 45, 42, 32, 50, 53, 53, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, > 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 51, 32, 45, 95, 103, 105, 109, 112, 95, 115, 104, > 97, 112, 101, 115, 91, 36, 62, 93, 32, 36, 42, 32, 45, 100, 111, 110, > 101, 32, 45, 42, 91, 48, 45, 50, 93, 32, 50, 53, 53, 32, 45, 97, > 91, 48, 45, 50, 93, 32, 99, 32, 45, 97, 32, 99, 10, 45, 101, 108, > 115, 101, 32, 45, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, > 115, 32, 36, 42, 32, 45, 114, 91, 48, 93, 32, 36, 51, 37, 44, 36, > 51, 37, 32, 45, 114, 91, 48, 93, 32, 91, 49, 93, 44, 91, 49, 93, > 32, 45, 42, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, > 32, 123, 64, 35, 60, 61, 36, 50, 125, 32, 45, 101, 114, 114, 111, 114, > 91, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 103, 105, > 109, 112, 95, 115, 104, 97, 112, 101, 115, 39, 58, 32, 83, 111, 109, 101, > 32, 108, 97, 121, 101, 114, 115, 32, 97, 114, 101, 32, 109, 105, 115, 115, > 105, 110, 103, 32, 105, 110, 32, 39, 67, 117, 115, 116, 111, 109, 32, 108, > 97, 121, 101, 114, 115, 39, 32, 109, 111, 100, 101, 32, 40, 34, 123, 36, > 50, 43, 49, 125, 34, 32, 101, 120, 112, 101, 99, 116, 101, 100, 32, 97, > 116, 32, 108, 101, 97, 115, 116, 44, 32, 34, 64, 35, 34, 32, 112, 114, > 111, 118, 105, 100, 101, 100, 41, 46, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 48, > 45, 123, 36, 50, 45, 49, 125, 93, 32, 64, 123, 45, 109, 97, 120, 95, > 115, 91, 48, 45, 123, 36, 50, 45, 49, 125, 93, 125, 32, 45, 114, 101, > 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 91, 36, 50, 45, > 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 36, 50, 125, 32, 45, 108, 91, 48, 45, 123, 36, 50, 45, 49, 125, 44, > 123, 36, 50, 43, 36, 62, 125, 93, 10, 45, 110, 111, 114, 109, 91, 45, > 49, 93, 32, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, > 114, 91, 45, 49, 93, 32, 36, 51, 37, 44, 36, 51, 37, 44, 49, 44, > 49, 44, 50, 10, 115, 61, 123, 36, 52, 42, 109, 97, 120, 40, 114, 111, > 117, 110, 100, 40, 36, 119, 47, 119, 41, 44, 114, 111, 117, 110, 100, 40, > 36, 104, 47, 104, 41, 41, 125, 10, 114, 48, 61, 123, 36, 115, 42, 36, > 53, 37, 125, 32, 114, 49, 61, 123, 36, 115, 42, 36, 54, 37, 125, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 32, 114, 61, 123, 114, 111, > 117, 110, 100, 40, 36, 114, 48, 43, 36, 62, 42, 40, 36, 114, 49, 45, > 36, 114, 48, 41, 47, 40, 36, 50, 45, 49, 41, 41, 125, 32, 45, 105, > 102, 32, 36, 114, 32, 45, 45, 114, 91, 36, 62, 93, 32, 36, 114, 44, > 36, 114, 44, 49, 44, 49, 48, 48, 37, 44, 51, 32, 45, 101, 108, 115, > 101, 32, 49, 44, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, > 110, 101, 10, 45, 114, 91, 45, 36, 50, 45, 45, 49, 93, 32, 36, 115, > 44, 36, 115, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 10, 45, 109, 97, 112, 95, 115, 112, 114, 105, > 116, 101, 115, 91, 36, 50, 45, 45, 49, 93, 32, 36, 50, 44, 36, 56, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, > 91, 48, 45, 123, 36, 50, 45, 49, 125, 93, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 32, 36, > 123, 49, 45, 51, 125, 44, 49, 44, 36, 123, 53, 45, 45, 50, 125, 34, > 44, 36, 45, 49, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 115, 101, 10, 45, 105, 102, 32, 123, 64, 35, 62, 36, 50, 125, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 36, 50, 125, 32, 45, > 108, 91, 48, 45, 123, 36, 50, 45, 49, 125, 44, 123, 36, 50, 43, 36, > 62, 125, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, > 45, 45, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 32, 36, 123, > 49, 45, 51, 125, 44, 49, 44, 36, 123, 53, 45, 45, 50, 125, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 114, 91, 45, 49, 93, 32, 36, 119, > 44, 36, 104, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 114, 109, 91, 48, 45, 123, 36, 50, 45, 49, 125, 93, > 10, 45, 101, 108, 115, 101, 32, 45, 95, 103, 105, 109, 112, 95, 110, 111, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 77, 105, 115, 115, 105, 110, > 103, 92, 110, 108, 97, 121, 101, 114, 115, 32, 33, 34, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 95, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 115, 32, 58, 10, 45, 110, 111, 114, 109, 32, > 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 114, 32, 36, > 51, 37, 44, 36, 51, 37, 44, 49, 44, 49, 44, 50, 10, 115, 61, 123, > 40, 49, 43, 36, 49, 48, 41, 42, 36, 52, 42, 109, 97, 120, 40, 114, > 111, 117, 110, 100, 40, 36, 119, 47, 119, 41, 44, 114, 111, 117, 110, 100, > 40, 36, 104, 47, 104, 41, 41, 125, 10, 114, 48, 61, 123, 36, 115, 42, > 36, 53, 37, 125, 32, 114, 49, 61, 123, 36, 115, 42, 36, 54, 37, 125, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 32, 114, 61, 123, 114, > 111, 117, 110, 100, 40, 36, 114, 48, 43, 36, 62, 42, 40, 36, 114, 49, > 45, 36, 114, 48, 41, 47, 40, 36, 50, 45, 49, 41, 41, 125, 32, 45, > 105, 102, 32, 36, 114, 32, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, > 112, 101, 115, 123, 36, 49, 45, 49, 125, 91, 93, 32, 36, 114, 44, 36, > 115, 32, 45, 101, 108, 115, 101, 32, 49, 44, 49, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 100, 111, 110, 101, 10, 45, 114, 91, 45, 36, 50, 45, > 45, 49, 93, 32, 36, 115, 44, 36, 115, 44, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 102, 32, 36, 57, > 32, 45, 114, 118, 91, 45, 36, 50, 45, 45, 49, 93, 32, 45, 42, 91, > 45, 36, 50, 45, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 36, > 50, 45, 45, 49, 93, 32, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 109, 97, 112, 95, 115, 112, 114, 105, 116, 101, 115, 32, 36, 50, 44, 36, > 56, 10, 45, 105, 102, 32, 36, 49, 48, 32, 45, 114, 32, 53, 48, 37, > 44, 53, 48, 37, 44, 49, 44, 49, 44, 50, 32, 45, 101, 110, 100, 105, > 102, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 48, 32, > 58, 10, 45, 95, 100, 116, 95, 99, 105, 114, 99, 108, 101, 91, 93, 32, > 36, 49, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, > 32, 58, 10, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 49, 10, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 50, 32, 58, 10, 36, > 49, 44, 36, 49, 44, 49, 44, 49, 32, 45, 61, 32, 49, 44, 53, 48, > 37, 44, 53, 48, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, > 49, 44, 49, 32, 45, 108, 116, 32, 123, 36, 49, 47, 50, 125, 10, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 51, 32, 58, 10, 36, > 50, 44, 36, 50, 44, 49, 44, 49, 44, 39, 120, 43, 121, 60, 61, 50, > 42, 36, 49, 45, 49, 39, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, > 112, 101, 115, 52, 32, 58, 10, 36, 50, 44, 36, 49, 44, 49, 44, 49, > 44, 49, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 53, > 32, 58, 10, 36, 49, 44, 36, 50, 44, 49, 44, 49, 44, 49, 10, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 54, 32, 58, 10, 45, > 98, 97, 108, 108, 32, 36, 49, 44, 50, 48, 48, 32, 45, 110, 32, 48, > 44, 49, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 55, > 32, 58, 10, 45, 104, 101, 97, 114, 116, 32, 54, 53, 32, 45, 114, 32, > 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 50, 32, 45, 103, 101, 32, > 53, 48, 37, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, > 56, 32, 58, 10, 45, 115, 116, 97, 114, 32, 36, 49, 44, 36, 49, 10, > 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 57, 32, 58, 10, > 45, 97, 114, 114, 111, 119, 51, 100, 32, 48, 44, 48, 44, 48, 44, 49, > 44, 48, 44, 48, 44, 49, 53, 37, 44, 52, 48, 37, 44, 51, 48, 37, > 32, 45, 99, 111, 108, 51, 100, 32, 49, 32, 45, 42, 51, 100, 32, 36, > 49, 32, 45, 99, 51, 100, 10, 36, 50, 44, 36, 50, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, > 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 44, > 48, 10, 45, 114, 109, 91, 45, 50, 93, 32, 45, 45, 109, 105, 114, 114, > 111, 114, 32, 121, 32, 45, 109, 97, 120, 10, 95, 103, 105, 109, 112, 95, > 115, 104, 97, 112, 101, 115, 49, 48, 32, 58, 10, 83, 61, 123, 36, 50, > 43, 49, 45, 40, 36, 50, 37, 50, 41, 125, 10, 36, 83, 44, 36, 83, > 44, 49, 44, 49, 44, 34, 88, 61, 120, 47, 40, 119, 45, 49, 41, 59, > 89, 61, 121, 47, 40, 104, 45, 49, 41, 59, 114, 61, 97, 98, 115, 40, > 48, 46, 53, 45, 115, 113, 114, 116, 40, 88, 94, 50, 43, 89, 94, 50, > 41, 41, 59, 97, 61, 97, 116, 97, 110, 50, 40, 121, 44, 120, 41, 59, > 114, 60, 48, 46, 49, 45, 48, 46, 49, 55, 42, 40, 48, 46, 53, 45, > 36, 49, 47, 36, 50, 41, 42, 115, 105, 110, 40, 50, 42, 97, 41, 34, > 10, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 121, 32, 45, 109, 97, > 120, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 49, > 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, > 48, 32, 36, 42, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, > 49, 44, 48, 32, 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, > 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 50, 32, > 58, 10, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, > 32, 36, 42, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, > 44, 48, 32, 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, > 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 51, 32, 58, > 10, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 50, 32, > 36, 42, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, > 48, 32, 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 52, 32, 58, 10, > 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 51, 32, 36, > 42, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, 48, > 32, 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 95, 103, > 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 53, 32, 58, 10, 45, > 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 55, 32, 36, 42, > 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, 48, 32, > 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 95, 103, 105, > 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 54, 32, 58, 10, 45, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 56, 32, 36, 42, 32, > 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, 48, 32, 45, > 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 95, 103, 105, 109, > 112, 95, 115, 104, 97, 112, 101, 115, 49, 55, 32, 58, 10, 45, 95, 103, > 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 57, 32, 36, 42, 32, 45, > 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, 48, 32, 45, 45, > 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 103, 105, 109, 112, 95, > 112, 97, 99, 107, 95, 115, 112, 114, 105, 116, 101, 115, 32, 58, 10, 45, > 105, 102, 32, 36, 54, 10, 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, > 32, 45, 101, 114, 114, 111, 114, 91, 93, 32, 34, 67, 111, 109, 109, 97, > 110, 100, 32, 39, 45, 103, 105, 109, 112, 95, 112, 97, 99, 107, 95, 115, > 112, 114, 105, 116, 101, 115, 39, 58, 32, 77, 97, 115, 107, 105, 110, 103, > 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 97, 116, 32, 108, 101, 97, > 115, 116, 32, 116, 119, 111, 32, 105, 110, 112, 117, 116, 32, 108, 97, 121, > 101, 114, 115, 32, 33, 32, 40, 112, 108, 101, 97, 115, 101, 32, 99, 104, > 101, 99, 107, 32, 116, 104, 97, 116, 32, 39, 73, 110, 112, 117, 116, 32, > 76, 97, 121, 101, 114, 115, 39, 32, 105, 115, 32, 99, 111, 114, 114, 101, > 99, 116, 108, 121, 32, 115, 101, 116, 41, 46, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 32, 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, > 97, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 45, 110, 101, 113, 91, 49, 93, 32, 48, 32, 45, 42, 91, 48, > 93, 32, 91, 45, 49, 93, 32, 45, 97, 32, 99, 32, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 32, 48, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 101, 109, 111, 118, 101, 95, 101, 109, 112, 116, > 121, 91, 48, 45, 45, 50, 93, 32, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 45, 49, 93, 32, 49, 48, 48, 37, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 45, 52, 44, 48, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 10, 45, 112, 97, 99, 107, 95, 115, > 112, 114, 105, 116, 101, 115, 91, 48, 45, 45, 50, 93, 32, 36, 123, 49, > 45, 53, 125, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 32, 45, 45, 110, 101, 113, 91, 49, 93, 32, 48, 32, 45, > 42, 91, 48, 93, 32, 91, 45, 49, 93, 32, 45, 97, 32, 99, 32, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 32, 48, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 109, 111, 118, 101, 95, 101, > 109, 112, 116, 121, 32, 45, 105, 91, 48, 93, 32, 36, 55, 44, 36, 56, > 44, 49, 44, 53, 32, 45, 112, 97, 99, 107, 95, 115, 112, 114, 105, 116, > 101, 115, 32, 36, 123, 49, 45, 53, 125, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 48, 44, > 64, 123, 48, 44, 115, 45, 50, 125, 10, 103, 105, 109, 112, 95, 112, 97, > 112, 101, 114, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 34, 45, 116, 101, 120, 116, 117, 114, 105, 122, > 101, 95, 112, 97, 112, 101, 114, 34, 44, 36, 49, 44, 48, 10, 103, 105, > 109, 112, 95, 112, 97, 112, 101, 114, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, > 112, 101, 114, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, > 95, 112, 108, 97, 105, 100, 95, 116, 101, 120, 116, 117, 114, 101, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 115, > 61, 123, 115, 125, 10, 45, 114, 111, 119, 115, 32, 36, 49, 37, 10, 45, > 98, 32, 36, 53, 37, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, > 54, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 36, 115, 44, > 50, 10, 45, 45, 114, 111, 116, 97, 116, 101, 91, 48, 93, 32, 36, 51, > 44, 49, 44, 50, 44, 53, 48, 37, 44, 53, 48, 37, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 36, 50, 45, 49, 125, 32, 45, 45, 114, 111, > 116, 97, 116, 101, 91, 48, 93, 32, 123, 36, 51, 43, 36, 52, 42, 40, > 36, 62, 43, 49, 41, 47, 40, 36, 50, 45, 49, 41, 125, 44, 49, 44, > 50, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, > 10, 45, 47, 32, 36, 50, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 103, 105, 109, 112, 95, 112, 108, 97, 115, 109, 97, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 48, 125, 44, 36, 123, > 53, 61, 48, 125, 10, 45, 105, 102, 32, 36, 53, 32, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 101, 108, 115, 101, 32, 45, 116, 111, 95, 114, > 103, 98, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 114, 97, 110, 100, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 112, 108, 97, 115, 109, 97, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 98, > 97, 108, 97, 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 36, 123, 54, > 45, 56, 125, 10, 103, 105, 109, 112, 95, 112, 111, 108, 107, 97, 95, 100, > 111, 116, 115, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, > 112, 111, 108, 107, 97, 95, 100, 111, 116, 115, 32, 123, 36, 49, 42, 36, > 50, 47, 49, 48, 48, 125, 44, 36, 123, 50, 45, 45, 49, 125, 10, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 95, 101, 108, 108, 105, 112, 115, > 101, 115, 32, 58, 10, 45, 99, 111, 108, 111, 114, 95, 101, 108, 108, 105, > 112, 115, 101, 115, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 103, 105, > 109, 112, 95, 115, 121, 110, 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 115, 121, 110, 116, 101, 120, 116, 117, 114, 105, 122, 101, 32, 49, 48, 48, > 37, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 114, 111, 114, 115, > 99, 104, 97, 99, 104, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 36, > 51, 61, 61, 48, 125, 32, 45, 110, 111, 114, 109, 32, 45, 114, 111, 114, > 115, 99, 104, 97, 99, 104, 32, 36, 49, 37, 44, 36, 50, 32, 45, 42, > 32, 50, 53, 53, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, > 49, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 111, 114, 115, > 99, 104, 97, 99, 104, 32, 36, 49, 37, 44, 36, 50, 32, 45, 42, 32, > 50, 53, 53, 10, 45, 101, 108, 115, 101, 32, 45, 45, 110, 111, 114, 109, > 32, 45, 114, 111, 114, 115, 99, 104, 97, 99, 104, 91, 45, 49, 93, 32, > 36, 49, 37, 44, 36, 50, 32, 45, 98, 108, 101, 110, 100, 32, 115, 104, > 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 115, 101, 97, 109, 108, 101, 115, 115, 95, 116, 117, 114, > 98, 117, 108, 101, 110, 99, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 104, 61, 123, > 119, 125, 44, 123, 104, 125, 32, 45, 114, 109, 10, 36, 119, 104, 44, 49, > 44, 123, 105, 102, 40, 36, 54, 44, 51, 44, 49, 41, 125, 32, 45, 114, > 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 36, 119, > 104, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, 36, 51, 42, > 112, 105, 47, 49, 56, 48, 45, 36, 52, 42, 49, 48, 42, 112, 105, 125, > 44, 123, 36, 51, 42, 112, 105, 47, 49, 56, 48, 43, 36, 52, 42, 49, > 48, 42, 112, 105, 125, 32, 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, > 45, 99, 111, 115, 91, 45, 50, 93, 32, 45, 97, 91, 45, 50, 44, 45, > 49, 93, 32, 99, 10, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 49, > 51, 48, 37, 44, 49, 51, 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 50, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 50, 32, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, > 111, 110, 91, 45, 49, 93, 10, 45, 118, 101, 99, 116, 111, 114, 50, 116, > 101, 110, 115, 111, 114, 91, 45, 49, 93, 10, 45, 115, 109, 111, 111, 116, > 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 49, 44, 48, 46, > 53, 44, 50, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 91, > 45, 49, 93, 32, 36, 119, 104, 44, 49, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 102, 32, 123, > 36, 53, 33, 61, 49, 125, 32, 105, 97, 61, 123, 105, 97, 125, 32, 45, > 45, 32, 36, 105, 97, 32, 45, 42, 32, 36, 53, 32, 45, 43, 32, 36, > 105, 97, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, > 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 115, 112, 111, > 110, 103, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 34, 45, 115, 112, 111, 110, 103, 101, 32, 36, > 49, 34, 44, 36, 50, 44, 48, 10, 103, 105, 109, 112, 95, 115, 112, 111, > 110, 103, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 112, 111, 110, 103, 101, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 116, 97, > 105, 110, 101, 100, 95, 103, 108, 97, 115, 115, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, > 91, 48, 93, 10, 45, 115, 116, 97, 105, 110, 101, 100, 95, 103, 108, 97, > 115, 115, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 45, 110, 32, 48, > 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 52, 32, 45, 101, 113, 117, > 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 115, > 104, 91, 45, 49, 93, 32, 49, 44, 50, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 53, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 108, 97, 98, > 50, 114, 103, 98, 91, 45, 49, 93, 10, 45, 97, 112, 112, 108, 121, 95, > 103, 97, 109, 109, 97, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 54, > 125, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 42, 91, > 45, 49, 93, 32, 36, 55, 32, 45, 43, 91, 45, 49, 93, 32, 123, 49, > 50, 56, 43, 36, 56, 125, 10, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 115, 116, 97, 105, 110, 101, 100, 95, 103, 108, 97, 115, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 115, 116, 97, 105, 110, 101, 100, 95, 103, 108, 97, 115, 115, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 116, > 97, 114, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 45, 114, 118, 10, 45, 115, 116, 97, 114, > 115, 32, 36, 49, 37, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, > 53, 44, 36, 54, 37, 44, 36, 123, 55, 45, 57, 125, 44, 123, 36, 49, > 48, 47, 50, 53, 53, 125, 10, 45, 114, 118, 32, 45, 97, 32, 99, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, > 95, 115, 116, 101, 110, 99, 105, 108, 32, 58, 10, 45, 118, 32, 45, 10, > 45, 105, 102, 32, 123, 36, 53, 61, 61, 48, 125, 32, 45, 110, 111, 114, > 109, 32, 45, 115, 116, 101, 110, 99, 105, 108, 32, 36, 49, 44, 36, 50, > 44, 36, 51, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 49, > 125, 32, 45, 115, 116, 101, 110, 99, 105, 108, 32, 36, 49, 44, 36, 50, > 44, 36, 51, 10, 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 10, 45, 45, 110, 111, 114, 109, 91, 45, 49, 93, 32, > 45, 115, 116, 101, 110, 99, 105, 108, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 32, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, > 37, 32, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, > 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 54, 32, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, > 108, 111, 114, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 52, 32, 45, 115, 109, 111, 111, 116, 104, 32, > 123, 51, 48, 42, 36, 52, 125, 44, 48, 44, 49, 44, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, > 108, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, 108, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 116, 101, 116, 114, > 105, 115, 32, 58, 10, 45, 116, 101, 116, 114, 105, 115, 32, 36, 49, 10, > 103, 105, 109, 112, 95, 116, 114, 117, 99, 104, 101, 116, 32, 58, 10, 45, > 105, 102, 32, 36, 54, 32, 45, 116, 111, 95, 97, 32, 45, 101, 108, 115, > 101, 32, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, > 121, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 114, 117, 99, 104, 101, > 116, 32, 36, 49, 44, 36, 50, 44, 36, 52, 10, 45, 105, 102, 32, 36, > 53, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 108, 97, > 98, 101, 108, 91, 45, 49, 93, 32, 48, 44, 49, 32, 123, 105, 77, 43, > 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 109, 97, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 98, 32, 36, 51, 32, 45, 110, 32, 48, > 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 116, 117, 114, 98, 117, 108, > 101, 110, 99, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, 116, > 117, 114, 98, 117, 108, 101, 110, 99, 101, 32, 36, 123, 94, 48, 125, 10, > 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 119, 104, 105, 114, > 108, 115, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 119, 104, 105, 114, 108, 115, 32, 36, 49, > 44, 36, 50, 44, 36, 51, 44, 36, 52, 34, 44, 36, 53, 44, 48, 10, > 103, 105, 109, 112, 95, 119, 104, 105, 114, 108, 115, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, > 95, 119, 104, 105, 114, 108, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, > 32, 58, 10, 45, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, 32, > 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 94, 48, 125, 10, 103, 105, > 109, 112, 95, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 105, 110, 112, > 97, 105, 110, 116, 95, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 58, > 10, 45, 105, 102, 32, 36, 55, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 115, 101, 108, 101, > 99, 116, 95, 99, 111, 108, 111, 114, 32, 48, 44, 36, 123, 56, 45, 49, > 49, 125, 32, 45, 114, 118, 10, 45, 105, 102, 32, 36, 49, 32, 45, 105, > 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, 119, 32, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 36, 53, 37, 44, 36, 54, 37, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 105, 110, 112, > 97, 105, 110, 116, 91, 49, 93, 32, 91, 48, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 109, 91, 48, 93, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, > 123, 64, 35, 61, 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 97, 91, 48, 93, 32, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 49, 48, 48, > 37, 32, 45, 103, 101, 91, 48, 93, 32, 53, 48, 37, 10, 45, 105, 102, > 32, 36, 49, 32, 45, 105, 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, > 119, 32, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 37, 44, 36, > 54, 37, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, > 101, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, 94, 48, 93, 32, 91, > 48, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 97, 91, > 48, 93, 32, 45, 102, 91, 48, 93, 32, 48, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 105, 110, 112, 97, 105, 110, 116, 95, 100, > 105, 102, 102, 117, 115, 105, 111, 110, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 105, 110, 112, 97, 105, 110, 116, > 95, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 36, 123, 94, 48, 125, > 10, 45, 105, 102, 32, 123, 33, 36, 55, 34, 32, 38, 38, 32, 34, 64, > 35, 62, 49, 125, 32, 45, 114, 109, 91, 48, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 105, 110, 112, 97, 105, 110, 116, 95, > 104, 111, 108, 101, 115, 32, 58, 10, 45, 105, 110, 112, 97, 105, 110, 116, > 95, 104, 111, 108, 101, 115, 32, 123, 36, 49, 94, 49, 46, 53, 125, 44, > 36, 50, 44, 36, 51, 10, 103, 105, 109, 112, 95, 105, 110, 112, 97, 105, > 110, 116, 95, 112, 97, 116, 99, 104, 32, 58, 10, 45, 105, 102, 32, 123, > 64, 46, 62, 61, 49, 53, 56, 49, 125, 32, 105, 110, 112, 97, 105, 110, > 116, 61, 105, 110, 112, 97, 105, 110, 116, 32, 45, 101, 108, 115, 101, 32, > 105, 110, 112, 97, 105, 110, 116, 61, 114, 101, 112, 97, 105, 114, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 57, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, > 45, 115, 101, 108, 101, 99, 116, 95, 99, 111, 108, 111, 114, 32, 48, 44, > 36, 123, 49, 48, 45, 49, 51, 125, 10, 45, 105, 102, 32, 123, 64, 46, > 62, 61, 49, 53, 56, 52, 125, 32, 45, 36, 105, 110, 112, 97, 105, 110, > 116, 91, 48, 93, 32, 91, 49, 93, 44, 36, 49, 44, 123, 36, 49, 42, > 36, 50, 125, 44, 36, 51, 44, 49, 44, 123, 36, 52, 42, 36, 49, 125, > 44, 36, 123, 53, 45, 56, 125, 10, 45, 101, 108, 105, 102, 32, 123, 64, > 46, 62, 61, 49, 53, 56, 51, 125, 32, 45, 36, 105, 110, 112, 97, 105, > 110, 116, 91, 48, 93, 32, 91, 49, 93, 44, 36, 49, 44, 123, 36, 49, > 42, 36, 50, 125, 44, 36, 51, 44, 123, 36, 52, 42, 36, 49, 125, 44, > 36, 123, 53, 45, 56, 125, 10, 45, 101, 108, 115, 101, 32, 45, 36, 105, > 110, 112, 97, 105, 110, 116, 91, 48, 93, 32, 91, 49, 93, 44, 36, 49, > 44, 123, 36, 49, 42, 36, 50, 125, 44, 123, 114, 111, 117, 110, 100, 40, > 49, 43, 36, 51, 41, 125, 44, 123, 36, 52, 42, 36, 49, 125, 44, 36, > 123, 53, 45, 56, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, > 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 116, 111, 95, 97, 91, 48, 93, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 48, 93, 32, 49, 48, 48, 37, 32, 45, 103, 101, 91, > 48, 93, 32, 53, 48, 37, 10, 45, 105, 102, 32, 123, 64, 46, 62, 61, > 49, 53, 56, 52, 125, 32, 45, 36, 105, 110, 112, 97, 105, 110, 116, 91, > 94, 48, 93, 32, 91, 48, 93, 44, 36, 49, 44, 123, 36, 49, 42, 36, > 50, 125, 44, 36, 51, 44, 49, 44, 123, 36, 52, 42, 36, 49, 125, 44, > 36, 123, 53, 45, 56, 125, 10, 45, 101, 108, 105, 102, 32, 123, 64, 46, > 62, 61, 49, 53, 56, 51, 125, 32, 45, 36, 105, 110, 112, 97, 105, 110, > 116, 91, 94, 48, 93, 32, 91, 48, 93, 44, 36, 49, 44, 123, 36, 49, > 42, 36, 50, 125, 44, 36, 51, 44, 123, 36, 52, 42, 36, 49, 125, 44, > 36, 123, 53, 45, 56, 125, 10, 45, 101, 108, 115, 101, 32, 45, 36, 105, > 110, 112, 97, 105, 110, 116, 91, 94, 48, 93, 32, 91, 48, 93, 44, 36, > 49, 44, 123, 36, 49, 42, 36, 50, 125, 44, 123, 114, 111, 117, 110, 100, > 40, 49, 43, 36, 51, 41, 125, 44, 123, 36, 52, 42, 36, 49, 125, 44, > 36, 123, 53, 45, 56, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 116, > 111, 95, 97, 91, 48, 93, 32, 45, 102, 91, 48, 93, 32, 48, 10, 45, > 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, 111, 108, 105, 100, > 105, 102, 121, 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 115, 111, > 108, 105, 100, 105, 102, 121, 10, 45, 101, 108, 115, 101, 32, 45, 115, 111, > 108, 105, 100, 105, 102, 121, 95, 108, 105, 110, 101, 97, 114, 32, 36, 50, > 44, 36, 51, 44, 36, 52, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 115, 111, 108, 105, 100, 105, 102, 121, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, > 95, 115, 111, 108, 105, 100, 105, 102, 121, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 114, 101, 109, 111, 118, 101, 95, 104, 111, > 116, 112, 105, 120, 101, 108, 115, 32, 58, 10, 45, 114, 101, 109, 111, 118, > 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 36, 49, 44, 36, > 50, 10, 103, 105, 109, 112, 95, 114, 101, 109, 111, 118, 101, 95, 104, 111, > 116, 112, 105, 120, 101, 108, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 114, 101, 109, > 111, 118, 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 36, 42, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 97, 110, 105, 115, 111, > 116, 114, 111, 112, 105, 99, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 51, 61, 49, 125, > 44, 36, 123, 49, 52, 61, 48, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, > 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, > 97, 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 49, > 32, 45, 115, 109, 111, 111, 116, 104, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, > 44, 36, 57, 44, 36, 49, 48, 32, 45, 100, 111, 110, 101, 92, 34, 44, > 36, 49, 51, 44, 36, 49, 52, 34, 44, 36, 49, 50, 44, 48, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, > 50, 53, 53, 10, 103, 105, 109, 112, 95, 97, 110, 105, 115, 111, 116, 114, > 111, 112, 105, 99, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, 105, 99, 95, > 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 98, 105, 108, 97, 116, 101, 114, 97, 108, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 53, 61, 48, 125, 44, > 36, 123, 54, 61, 48, 125, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, > 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 92, > 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 51, 32, 45, 98, 105, 108, > 97, 116, 101, 114, 97, 108, 32, 36, 49, 44, 36, 50, 32, 45, 100, 111, > 110, 101, 92, 34, 44, 36, 53, 44, 36, 54, 34, 44, 36, 52, 44, 48, > 10, 103, 105, 109, 112, 95, 98, 105, 108, 97, 116, 101, 114, 97, 108, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, > 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 115, 109, 111, > 111, 116, 104, 32, 36, 54, 44, 36, 49, 44, 36, 50, 44, 36, 51, 44, > 36, 52, 44, 36, 53, 44, 48, 32, 45, 99, 32, 48, 44, 50, 53, 53, > 92, 34, 44, 36, 56, 44, 36, 57, 34, 44, 36, 55, 44, 48, 10, 103, > 105, 109, 112, 95, 100, 105, 102, 102, 117, 115, 105, 111, 110, 95, 115, 109, > 111, 111, 116, 104, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 100, 105, 102, > 102, 117, 115, 105, 111, 110, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, 101, > 97, 110, 99, 117, 114, 118, 97, 116, 117, 114, 101, 95, 115, 109, 111, 111, > 116, 104, 105, 110, 103, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, > 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, > 92, 34, 45, 109, 101, 97, 110, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 95, 102, 108, 111, 119, 32, 36, 50, 44, 36, 49, 44, 36, 51, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 92, 34, 44, 36, 53, 44, 36, 54, 34, > 44, 36, 52, 44, 48, 10, 103, 105, 109, 112, 95, 109, 101, 97, 110, 99, > 117, 114, 118, 97, 116, 117, 114, 101, 95, 115, 109, 111, 111, 116, 104, 105, > 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 109, 101, 97, 110, 99, 117, 114, 118, > 97, 116, 117, 114, 101, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, 101, 100, > 105, 97, 110, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 34, 45, 109, 101, 100, 105, 97, 110, 32, 36, > 49, 34, 44, 36, 50, 44, 48, 10, 103, 105, 109, 112, 95, 109, 101, 100, > 105, 97, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 109, 101, 100, 105, 97, 110, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 112, 97, 116, > 99, 104, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, 58, 10, 45, > 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, > 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, > 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, 116, > 32, 36, 55, 32, 45, 100, 101, 110, 111, 105, 115, 101, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, 32, 45, > 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 92, 34, 44, > 36, 57, 44, 36, 49, 48, 34, 44, 36, 56, 44, 48, 10, 103, 105, 109, > 112, 95, 112, 97, 116, 99, 104, 95, 115, 109, 111, 111, 116, 104, 105, 110, > 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 112, 97, 116, 99, 104, 95, 115, 109, 111, > 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, 95, 115, 109, > 111, 111, 116, 104, 105, 110, 103, 32, 58, 10, 45, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, > 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, > 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 52, 32, 45, > 98, 108, 117, 114, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, 32, 36, > 49, 44, 36, 50, 44, 36, 51, 32, 45, 100, 111, 110, 101, 32, 45, 99, > 32, 48, 44, 50, 53, 53, 92, 34, 44, 36, 54, 44, 36, 55, 34, 44, > 36, 53, 44, 48, 10, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, > 105, 118, 101, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, 95, 115, 109, 111, > 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, 115, 107, 105, 110, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 108, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, > 10, 45, 105, 102, 32, 36, 53, 32, 45, 45, 98, 97, 108, 97, 110, 99, > 101, 95, 103, 97, 109, 109, 97, 32, 49, 50, 56, 44, 49, 50, 56, 44, > 49, 50, 56, 32, 45, 101, 108, 115, 101, 32, 91, 48, 93, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 32, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 101, 108, 105, 102, 32, > 123, 36, 49, 61, 61, 50, 125, 32, 45, 100, 101, 116, 101, 99, 116, 95, > 115, 107, 105, 110, 91, 45, 49, 93, 32, 36, 50, 32, 45, 101, 108, 115, > 101, 32, 45, 100, 101, 116, 101, 99, 116, 95, 115, 107, 105, 110, 91, 45, > 49, 93, 32, 36, 50, 44, 36, 54, 37, 44, 36, 55, 37, 44, 36, 56, > 37, 32, 45, 101, 110, 100, 105, 102, 10, 77, 61, 123, 105, 77, 125, 32, > 45, 98, 91, 45, 49, 93, 32, 36, 51, 37, 32, 45, 42, 91, 45, 49, > 93, 32, 123, 36, 77, 47, 105, 77, 125, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 52, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 49, 10, 45, > 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 91, 48, 93, > 32, 52, 44, 36, 57, 37, 44, 36, 49, 48, 37, 10, 45, 45, 95, 103, > 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, 115, 107, 105, 110, 91, > 50, 93, 32, 36, 49, 50, 44, 36, 49, 49, 10, 45, 106, 91, 50, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 42, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 49, 51, 125, 32, > 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, > 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 95, 103, 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, > 115, 107, 105, 110, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 48, 125, 32, 45, 98, 32, 123, 36, 50, 47, 56, 125, 37, 10, 45, 101, > 108, 115, 101, 10, 45, 105, 102, 32, 123, 36, 50, 62, 48, 125, 10, 109, > 61, 123, 105, 109, 125, 32, 77, 61, 123, 105, 77, 125, 32, 45, 110, 32, > 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, > 110, 116, 40, 36, 50, 47, 53, 41, 125, 32, 45, 98, 105, 108, 97, 116, > 101, 114, 97, 108, 32, 51, 37, 44, 123, 53, 42, 51, 125, 32, 45, 100, > 111, 110, 101, 10, 45, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, 51, > 37, 44, 123, 40, 36, 50, 37, 53, 41, 42, 51, 125, 10, 45, 42, 32, > 123, 40, 36, 77, 45, 36, 109, 41, 47, 50, 53, 53, 125, 32, 45, 43, > 32, 36, 109, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, 115, 107, > 105, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, > 32, 123, 36, 45, 50, 61, 61, 48, 125, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 105, 102, 32, 36, 53, 32, 45, 98, 97, 108, 97, 110, 99, 101, 95, 103, > 97, 109, 109, 97, 32, 49, 50, 56, 44, 49, 50, 56, 44, 49, 50, 56, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 105, 102, 32, 123, 36, 49, 61, > 61, 48, 125, 32, 45, 102, 32, 49, 32, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 50, 125, 32, 45, 100, 101, 116, 101, 99, 116, 95, 115, > 107, 105, 110, 32, 36, 50, 32, 45, 101, 108, 115, 101, 32, 45, 100, 101, > 116, 101, 99, 116, 95, 115, 107, 105, 110, 32, 36, 50, 44, 36, 54, 37, > 44, 36, 55, 37, 44, 36, 56, 37, 32, 45, 101, 110, 100, 105, 102, 32, > 77, 61, 123, 105, 77, 125, 32, 45, 98, 32, 36, 51, 37, 32, 45, 42, > 32, 123, 50, 53, 53, 42, 36, 77, 47, 105, 77, 125, 32, 45, 42, 32, > 36, 52, 32, 45, 99, 32, 48, 44, 50, 53, 53, 34, 44, 36, 45, 49, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 45, 50, 61, 61, 49, 125, 10, > 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 45, 98, 32, 36, 57, 37, 34, 44, 36, 45, 49, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 45, 50, 61, 61, 50, 125, 10, > 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 45, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, > 105, 108, 115, 32, 52, 44, 36, 57, 37, 44, 36, 49, 48, 37, 32, 45, > 107, 91, 45, 50, 93, 32, 45, 110, 32, 48, 44, 50, 53, 53, 34, 44, > 36, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 45, 50, 61, 61, > 51, 125, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 115, 112, 108, 105, 116, 95, 100, > 101, 116, 97, 105, 108, 115, 32, 52, 44, 36, 57, 37, 44, 36, 49, 48, > 37, 32, 45, 107, 91, 45, 50, 93, 32, 45, 95, 103, 105, 109, 112, 95, > 115, 109, 111, 111, 116, 104, 95, 115, 107, 105, 110, 32, 36, 49, 50, 44, > 36, 49, 49, 32, 45, 110, 32, 48, 44, 50, 53, 53, 34, 44, 36, 45, > 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 45, 50, 61, 61, 52, 125, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 115, 112, 108, 105, 116, 95, 100, 101, 116, > 97, 105, 108, 115, 32, 52, 44, 36, 57, 37, 44, 36, 49, 48, 37, 32, > 45, 107, 91, 45, 49, 93, 32, 45, 110, 32, 48, 44, 50, 53, 53, 34, > 44, 36, 45, 49, 10, 45, 101, 108, 115, 101, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, 115, 107, 105, > 110, 32, 36, 42, 34, 44, 36, 45, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 10, 45, 116, 111, > 95, 114, 103, 98, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 54, 37, > 44, 36, 55, 37, 44, 36, 56, 37, 44, 48, 46, 50, 44, 48, 44, 50, > 53, 53, 44, 48, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 54, 37, > 44, 36, 55, 37, 44, 36, 56, 37, 44, 48, 46, 52, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 50, 53, 53, 44, 48, 10, > 45, 108, 105, 110, 101, 32, 123, 36, 54, 45, 48, 46, 50, 53, 42, 36, > 56, 125, 37, 44, 123, 36, 55, 45, 48, 46, 50, 53, 42, 36, 56, 125, > 37, 44, 123, 36, 54, 43, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, > 123, 36, 55, 43, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, 48, 46, > 56, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 10, 45, 108, 105, 110, > 101, 32, 123, 36, 54, 43, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, > 123, 36, 55, 45, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, 123, 36, > 54, 45, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, 123, 36, 55, 43, > 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, 48, 46, 56, 44, 50, 53, > 53, 44, 50, 53, 53, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 103, > 105, 109, 112, 95, 116, 118, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, > 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, > 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 116, 118, > 95, 102, 108, 111, 119, 32, 36, 50, 44, 36, 49, 44, 36, 51, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 92, 34, 44, 36, 53, 44, 36, 54, 34, > 44, 36, 52, 44, 48, 10, 103, 105, 109, 112, 95, 116, 118, 95, 115, 109, > 111, 111, 116, 104, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 116, 118, 95, > 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 104, 97, 97, 114, 95, 115, 109, 111, 111, > 116, 104, 105, 110, 103, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, > 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, > 92, 34, 45, 100, 101, 110, 111, 105, 115, 101, 95, 104, 97, 97, 114, 32, > 36, 49, 44, 36, 51, 44, 36, 50, 32, 45, 99, 32, 48, 44, 50, 53, > 53, 92, 34, 44, 36, 53, 44, 36, 54, 34, 44, 36, 52, 44, 48, 10, > 103, 105, 109, 112, 95, 104, 97, 97, 114, 95, 115, 109, 111, 111, 116, 104, > 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 104, 97, 97, 114, 95, 115, 109, > 111, 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, 97, > 114, 116, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 117, 112, > 115, 99, 97, 108, 101, 95, 115, 109, 97, 114, 116, 32, 36, 49, 44, 36, > 50, 44, 49, 44, 36, 51, 44, 36, 52, 44, 36, 53, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 117, 112, 115, 99, 97, > 108, 101, 95, 115, 109, 97, 114, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, > 114, 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 49, 44, 49, 44, > 48, 10, 45, 105, 102, 32, 123, 119, 60, 64, 123, 45, 50, 44, 119, 125, > 124, 124, 104, 60, 64, 123, 45, 50, 44, 104, 125, 125, 10, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 47, 91, 45, 49, 93, 32, 52, 10, 48, 32, > 45, 116, 91, 45, 49, 93, 32, 34, 68, 111, 119, 110, 115, 99, 97, 108, > 105, 110, 103, 32, 105, 115, 92, 110, 110, 111, 116, 32, 97, 108, 108, 111, > 119, 101, 100, 33, 34, 44, 53, 44, 53, 44, 50, 48, 44, 49, 44, 50, > 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, > 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 10, 45, 111, 114, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 101, 108, 115, 101, 10, 45, 122, 91, 45, 50, 93, 32, 123, 53, 48, 45, > 53, 48, 42, 64, 123, 45, 50, 44, 119, 125, 47, 119, 125, 37, 44, 123, > 53, 48, 45, 53, 48, 42, 64, 123, 45, 50, 44, 104, 125, 47, 104, 125, > 37, 44, 123, 53, 48, 43, 53, 48, 42, 64, 123, 45, 50, 44, 119, 125, > 47, 119, 125, 37, 44, 123, 53, 48, 43, 53, 48, 42, 64, 123, 45, 50, > 44, 104, 125, 47, 104, 125, 37, 10, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 103, 105, 109, 112, 95, 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, > 97, 114, 116, 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, > 44, 36, 52, 44, 36, 53, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 115, 99, 97, 108, 101, 110, 120, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, > 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, > 36, 50, 61, 61, 49, 125, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, > 114, 91, 48, 93, 32, 45, 114, 111, 117, 110, 100, 91, 48, 93, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 50, 125, 32, 45, 114, 103, > 98, 50, 108, 97, 98, 56, 91, 48, 93, 32, 45, 114, 111, 117, 110, 100, > 91, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 36, 49, 61, 61, 48, 125, 32, 45, 115, 99, 97, 108, 101, 50, 120, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 115, > 99, 97, 108, 101, 51, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 50, 125, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, 45, 115, > 99, 97, 108, 101, 50, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 51, 125, 32, 45, 115, 99, 97, 108, 101, 51, 120, 32, 45, 115, > 99, 97, 108, 101, 50, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 52, 125, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, 45, 115, > 99, 97, 108, 101, 50, 120, 32, 45, 115, 99, 97, 108, 101, 50, 120, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 53, 125, 32, 45, 115, > 99, 97, 108, 101, 51, 120, 32, 45, 115, 99, 97, 108, 101, 51, 120, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 54, 125, 32, 45, 115, > 99, 97, 108, 101, 51, 120, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, > 45, 115, 99, 97, 108, 101, 50, 120, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 55, 125, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, > 45, 115, 99, 97, 108, 101, 50, 120, 32, 45, 115, 99, 97, 108, 101, 50, > 120, 32, 45, 115, 99, 97, 108, 101, 50, 120, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 56, 125, 32, 45, 115, 99, 97, 108, 101, 51, > 120, 32, 45, 115, 99, 97, 108, 101, 51, 120, 32, 45, 115, 99, 97, 108, > 101, 50, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 57, > 125, 32, 45, 115, 99, 97, 108, 101, 51, 120, 32, 45, 115, 99, 97, 108, > 101, 51, 120, 32, 45, 115, 99, 97, 108, 101, 51, 120, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 49, 125, 32, > 45, 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, 93, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 50, 61, 61, 50, 125, 32, 45, 108, 97, 98, > 56, 50, 114, 103, 98, 91, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 115, 99, 97, 108, 101, 110, 120, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 122, 32, 52, 48, 37, 44, 52, > 48, 37, 44, 54, 48, 37, 44, 54, 48, 37, 10, 45, 103, 105, 109, 112, > 95, 115, 99, 97, 108, 101, 110, 120, 32, 36, 49, 44, 36, 50, 10, 103, > 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 32, 58, 10, 45, > 110, 51, 100, 32, 45, 99, 51, 100, 32, 45, 109, 51, 100, 32, 36, 49, > 51, 32, 102, 51, 100, 61, 123, 48, 46, 53, 42, 109, 97, 120, 40, 36, > 49, 44, 36, 50, 41, 47, 116, 97, 110, 40, 36, 55, 42, 112, 105, 47, > 51, 54, 48, 41, 125, 10, 45, 102, 51, 100, 32, 36, 102, 51, 100, 32, > 45, 108, 51, 100, 32, 123, 36, 56, 42, 36, 102, 51, 100, 125, 44, 123, > 36, 57, 42, 36, 102, 51, 100, 125, 44, 123, 36, 49, 48, 42, 36, 102, > 51, 100, 125, 32, 45, 115, 108, 51, 100, 32, 36, 49, 49, 32, 45, 115, > 115, 51, 100, 32, 36, 49, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 42, 51, 100, 32, 123, > 36, 51, 42, 109, 97, 120, 40, 36, 49, 44, 36, 50, 41, 125, 32, 45, > 114, 51, 100, 32, 48, 44, 48, 44, 49, 44, 36, 54, 32, 45, 114, 51, > 100, 32, 48, 44, 49, 44, 48, 44, 36, 53, 32, 45, 114, 51, 100, 32, > 49, 44, 48, 44, 48, 44, 36, 52, 10, 36, 49, 44, 36, 50, 44, 49, > 44, 51, 44, 45, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, > 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 116, 111, 95, 114, 103, 98, > 97, 32, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, > 32, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 45, 49, 44, 50, 53, > 53, 44, 48, 44, 48, 44, 48, 44, 48, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 98, 108, 111, 99, 107, > 115, 51, 100, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 87, 61, 123, 119, 125, 32, 72, 61, > 123, 104, 125, 32, 77, 61, 123, 109, 97, 120, 40, 119, 44, 104, 41, 125, > 10, 45, 105, 102, 32, 123, 119, 62, 104, 125, 32, 45, 114, 50, 100, 120, > 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, 100, 121, 32, > 36, 49, 32, 45, 101, 110, 100, 105, 102, 10, 119, 61, 123, 119, 125, 32, > 104, 61, 123, 104, 125, 32, 109, 61, 123, 109, 97, 120, 40, 119, 44, 104, > 41, 125, 10, 45, 105, 102, 32, 123, 36, 51, 62, 48, 125, 32, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 109, 97, 103, 101, 98, 108, 111, 99, 107, 115, 51, 100, 32, 36, 51, > 44, 36, 50, 37, 10, 45, 45, 51, 100, 91, 45, 49, 93, 32, 123, 36, > 119, 47, 50, 125, 44, 123, 36, 104, 47, 50, 125, 32, 102, 61, 123, 36, > 52, 42, 36, 77, 47, 40, 36, 109, 42, 40, 50, 45, 36, 49, 54, 41, > 41, 125, 32, 45, 42, 51, 100, 32, 36, 102, 44, 36, 102, 44, 123, 36, > 102, 42, 97, 98, 115, 40, 36, 51, 42, 36, 49, 47, 49, 48, 48, 41, > 125, 10, 45, 105, 102, 32, 123, 36, 51, 62, 48, 125, 32, 45, 114, 51, > 100, 32, 49, 44, 48, 44, 48, 44, 49, 56, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 51, 100, 32, 48, 44, 48, 44, 49, 44, 36, 53, > 32, 45, 114, 51, 100, 32, 49, 44, 48, 44, 48, 44, 36, 54, 10, 45, > 105, 102, 32, 36, 49, 54, 32, 123, 50, 42, 36, 77, 125, 44, 123, 50, > 42, 36, 77, 125, 44, 49, 44, 52, 44, 45, 49, 32, 45, 101, 108, 115, > 101, 32, 36, 77, 44, 36, 77, 44, 49, 44, 52, 44, 45, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 102, 51, 100, 61, 123, 48, 46, 53, 42, 119, > 47, 116, 97, 110, 40, 36, 55, 42, 112, 105, 47, 51, 54, 48, 41, 125, > 32, 45, 102, 51, 100, 32, 36, 102, 51, 100, 10, 45, 108, 51, 100, 32, > 123, 36, 49, 48, 42, 36, 102, 51, 100, 125, 44, 123, 36, 49, 49, 42, > 36, 102, 51, 100, 125, 44, 123, 36, 49, 50, 42, 36, 102, 51, 100, 125, > 32, 45, 115, 108, 51, 100, 32, 36, 49, 51, 32, 45, 115, 115, 51, 100, > 32, 36, 49, 52, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 48, 93, 44, 36, 56, 37, 44, 36, 57, 37, 44, 48, > 44, 49, 44, 123, 105, 102, 40, 36, 49, 53, 44, 51, 44, 50, 41, 125, > 44, 48, 44, 49, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, > 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 36, 50, 48, 10, 91, 45, 49, 93, 44, > 91, 45, 49, 93, 44, 49, 44, 51, 44, 45, 49, 10, 45, 111, 98, 106, > 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 48, 93, 44, 36, 56, > 37, 44, 36, 57, 37, 44, 48, 44, 49, 44, 51, 44, 48, 44, 49, 32, > 45, 114, 109, 91, 48, 93, 10, 45, 103, 91, 45, 49, 93, 32, 120, 121, > 44, 49, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 111, > 114, 109, 91, 45, 49, 93, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, > 48, 10, 45, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 51, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 48, 44, 48, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 55, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, > 44, 49, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 56, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, > 50, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 57, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 106, 91, 48, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 123, 36, 50, 48, 47, 50, 53, 53, > 125, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 48, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, > 111, 108, 111, 114, 32, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 45, > 49, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 10, 45, 105, 102, 32, > 36, 49, 54, 32, 45, 114, 32, 53, 48, 37, 44, 53, 48, 37, 44, 49, > 44, 52, 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, > 106, 101, 99, 116, 51, 100, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, > 32, 45, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, > 98, 106, 101, 99, 116, 51, 100, 36, 49, 36, 50, 32, 36, 123, 54, 45, > 56, 125, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 36, 123, > 51, 45, 53, 125, 10, 45, 100, 98, 51, 100, 32, 48, 10, 103, 105, 109, > 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, > 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, > 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 32, 34, 95, 34, 44, 36, > 123, 49, 45, 52, 44, 54, 45, 56, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 45, 103, 105, 109, 112, 95, > 114, 101, 110, 100, 101, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 36, > 62, 44, 119, 125, 44, 64, 123, 36, 62, 44, 104, 125, 44, 36, 54, 44, > 36, 123, 57, 45, 45, 49, 125, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 53, 47, 50, > 53, 53, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 108, 101, > 110, 100, 91, 36, 62, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, 10, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, > 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, > 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 95, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, > 116, 51, 100, 32, 34, 95, 112, 114, 101, 118, 105, 101, 119, 95, 34, 44, > 36, 123, 49, 45, 52, 44, 54, 45, 56, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 45, 103, 105, 109, 112, > 95, 114, 101, 110, 100, 101, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, > 36, 62, 44, 119, 125, 44, 64, 123, 36, 62, 44, 104, 125, 44, 36, 54, > 44, 36, 123, 57, 45, 45, 49, 125, 10, 45, 115, 104, 91, 45, 49, 93, > 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 53, 47, > 50, 53, 53, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 108, > 101, 110, 100, 91, 36, 62, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, > 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, 95, > 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, > 99, 116, 51, 100, 95, 48, 32, 58, 32, 45, 112, 108, 97, 110, 101, 51, > 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 49, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, > 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 49, 32, 58, 32, 45, > 98, 111, 120, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, > 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, > 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, > 50, 32, 58, 32, 45, 112, 121, 114, 97, 109, 105, 100, 51, 100, 32, 49, > 44, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, > 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 51, 32, 58, 32, 45, > 115, 112, 104, 101, 114, 101, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 123, 50, 42, 36, 50, 125, 44, 123, 50, 42, > 36, 51, 125, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, > 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 52, 32, 58, 32, 45, 116, > 111, 114, 117, 115, 51, 100, 32, 36, 49, 44, 123, 36, 50, 47, 50, 125, > 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 51, 44, 48, 46, 53, > 44, 48, 46, 53, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, > 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 53, 32, 58, 32, 45, > 103, 121, 114, 111, 105, 100, 51, 100, 32, 50, 52, 32, 45, 42, 51, 100, > 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, > 116, 51, 100, 95, 54, 32, 58, 32, 45, 119, 101, 105, 114, 100, 51, 100, > 32, 51, 50, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, > 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 55, 32, 58, 32, > 45, 99, 117, 112, 51, 100, 32, 49, 50, 56, 32, 45, 42, 51, 100, 91, > 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, > 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, > 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 95, 48, 32, 58, 32, 45, > 112, 108, 97, 110, 101, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, > 49, 93, 32, 36, 49, 44, 36, 50, 44, 49, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 49, 32, 58, 32, 45, 98, 111, > 120, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, > 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, 99, 111, > 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, > 101, 118, 105, 101, 119, 95, 50, 32, 58, 32, 45, 112, 121, 114, 97, 109, > 105, 100, 51, 100, 32, 49, 44, 49, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 51, 32, 58, 32, 45, 115, 112, > 104, 101, 114, 101, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 49, 44, 123, 50, 42, 36, 50, 125, 44, 123, 50, 42, 36, 51, > 125, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, > 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 95, > 52, 32, 58, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 36, 49, 44, > 123, 36, 50, 47, 50, 125, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, > 36, 51, 44, 48, 46, 53, 44, 48, 46, 53, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 53, 32, 58, 32, 45, 103, 121, > 114, 111, 105, 100, 51, 100, 32, 56, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 54, 32, 58, 32, 45, 119, 101, > 105, 114, 100, 51, 100, 32, 49, 50, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 55, 32, 58, 32, 45, 99, 117, > 112, 51, 100, 32, 54, 52, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, > 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, 101, > 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 47, 50, 125, 32, 45, 108, 91, 36, > 62, 44, 123, 109, 105, 110, 40, 36, 62, 43, 49, 44, 64, 35, 45, 49, > 41, 125, 93, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, 32, > 45, 45, 110, 111, 114, 109, 32, 45, 101, 108, 115, 101, 32, 45, 114, 91, > 49, 93, 32, 91, 48, 93, 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 110, 91, 49, 93, 32, 48, 44, 36, 49, 32, 45, 98, 91, 49, 93, > 32, 36, 50, 10, 45, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, > 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, 91, 49, 93, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 100, 98, 51, 100, > 10, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, > 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, > 116, 105, 111, 110, 51, 100, 32, 36, 123, 49, 45, 50, 125, 32, 45, 103, > 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 32, 36, 123, 51, > 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, 116, > 105, 111, 110, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, > 100, 32, 36, 123, 49, 45, 50, 125, 44, 123, 119, 125, 44, 123, 104, 125, > 44, 36, 123, 53, 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, > 120, 116, 114, 117, 100, 101, 51, 100, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 47, 50, 125, 32, 45, 108, 91, 36, 62, 44, > 123, 109, 105, 110, 40, 36, 62, 43, 49, 44, 64, 35, 45, 49, 41, 125, > 93, 10, 45, 101, 120, 116, 114, 117, 100, 101, 51, 100, 91, 45, 49, 93, > 32, 36, 49, 44, 36, 50, 44, 36, 51, 37, 10, 45, 105, 102, 32, 123, > 64, 35, 61, 61, 50, 125, 32, 45, 116, 51, 100, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 100, 98, 51, 100, 32, 48, 10, 103, 105, 109, 112, 95, 101, 120, 116, > 114, 117, 100, 101, 51, 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 120, 116, 114, 117, 100, 101, 51, 100, 32, 36, 123, 49, 45, 51, 125, > 32, 45, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 32, > 36, 123, 52, 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, 101, 120, 116, > 114, 117, 100, 101, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, > 32, 36, 123, 49, 45, 51, 125, 44, 123, 119, 125, 44, 123, 104, 125, 44, > 36, 123, 54, 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 32, 58, 10, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 95, 103, 105, 109, 112, 95, 105, > 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 36, 49, 36, 50, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 100, 98, > 51, 100, 32, 48, 10, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, > 98, 106, 101, 99, 116, 51, 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, > 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 32, 34, > 95, 34, 44, 36, 49, 32, 45, 103, 105, 109, 112, 95, 114, 101, 110, 100, > 101, 114, 51, 100, 32, 36, 123, 50, 45, 45, 49, 125, 10, 103, 105, 109, > 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 119, 61, 123, 119, 125, 32, > 104, 61, 123, 104, 125, 32, 45, 95, 103, 105, 109, 112, 95, 105, 109, 97, > 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 32, 34, 95, 112, 114, 101, > 118, 105, 101, 119, 95, 34, 44, 36, 49, 32, 45, 103, 105, 109, 112, 95, > 114, 101, 110, 100, 101, 114, 51, 100, 32, 36, 119, 44, 36, 104, 44, 36, > 123, 52, 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, > 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 48, 32, 58, 32, 45, > 105, 109, 97, 103, 101, 112, 108, 97, 110, 101, 51, 100, 10, 95, 103, 105, > 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 49, 32, 58, 32, 45, 105, 109, 97, 103, 101, 99, 117, 98, 101, 51, > 100, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, > 101, 99, 116, 51, 100, 95, 50, 32, 58, 32, 45, 105, 109, 97, 103, 101, > 112, 121, 114, 97, 109, 105, 100, 51, 100, 10, 95, 103, 105, 109, 112, 95, > 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 51, 32, > 58, 32, 45, 105, 109, 97, 103, 101, 115, 112, 104, 101, 114, 101, 51, 100, > 32, 54, 52, 44, 51, 50, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, > 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 52, 32, 58, 32, 45, > 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, 32, 45, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, > 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, > 111, 98, 106, 101, 99, 116, 51, 100, 95, 53, 32, 58, 32, 45, 103, 121, > 114, 111, 105, 100, 51, 100, 32, 50, 52, 32, 45, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, > 116, 51, 100, 95, 54, 32, 58, 32, 45, 119, 101, 105, 114, 100, 51, 100, > 32, 51, 50, 32, 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, > 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 55, 32, > 58, 32, 45, 99, 117, 112, 51, 100, 32, 49, 50, 56, 32, 45, 116, 51, > 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, > 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, > 106, 101, 99, 116, 51, 100, 95, 56, 32, 58, 32, 45, 105, 109, 97, 103, > 101, 114, 117, 98, 105, 107, 51, 100, 32, 53, 44, 53, 10, 95, 103, 105, > 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 48, 32, 58, 32, 45, 105, 109, > 97, 103, 101, 112, 108, 97, 110, 101, 51, 100, 10, 95, 103, 105, 109, 112, > 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, > 114, 101, 118, 105, 101, 119, 95, 49, 32, 58, 32, 45, 105, 109, 97, 103, > 101, 99, 117, 98, 101, 51, 100, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, > 105, 101, 119, 95, 50, 32, 58, 32, 45, 105, 109, 97, 103, 101, 112, 121, > 114, 97, 109, 105, 100, 51, 100, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, > 105, 101, 119, 95, 51, 32, 58, 32, 45, 105, 109, 97, 103, 101, 115, 112, > 104, 101, 114, 101, 51, 100, 32, 49, 54, 44, 56, 10, 95, 103, 105, 109, > 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, > 112, 114, 101, 118, 105, 101, 119, 95, 52, 32, 58, 32, 45, 116, 111, 114, > 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, 32, 45, 116, 51, 100, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, > 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 95, 53, 32, > 58, 32, 45, 103, 121, 114, 111, 105, 100, 51, 100, 32, 56, 32, 45, 99, > 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, 91, 45, 49, 93, 32, > 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, > 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, > 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, 101, > 119, 95, 54, 32, 58, 32, 45, 119, 101, 105, 114, 100, 51, 100, 32, 49, > 50, 32, 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 45, 114, 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, > 105, 101, 119, 95, 55, 32, 58, 32, 45, 99, 117, 112, 51, 100, 32, 54, > 52, 32, 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 45, 114, 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, > 105, 101, 119, 95, 56, 32, 58, 32, 45, 105, 109, 97, 103, 101, 114, 117, > 98, 105, 107, 51, 100, 32, 51, 44, 51, 44, 53, 44, 53, 10, 95, 103, > 105, 109, 112, 95, 108, 97, 116, 104, 105, 110, 103, 51, 100, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 47, 50, 125, 32, 45, > 108, 91, 36, 62, 44, 123, 109, 105, 110, 40, 36, 62, 43, 49, 44, 64, > 35, 45, 49, 41, 125, 93, 10, 45, 108, 97, 116, 104, 101, 51, 100, 91, > 45, 49, 93, 32, 36, 49, 44, 36, 50, 37, 44, 36, 51, 10, 45, 105, > 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 45, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 100, 98, 51, 100, 32, 48, 10, 103, 105, 109, 112, 95, > 108, 97, 116, 104, 105, 110, 103, 51, 100, 32, 58, 10, 45, 95, 103, 105, > 109, 112, 95, 108, 97, 116, 104, 105, 110, 103, 51, 100, 32, 36, 123, 49, > 45, 51, 125, 32, 45, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, > 51, 100, 32, 36, 123, 52, 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, > 108, 97, 116, 104, 105, 110, 103, 51, 100, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 108, 97, 116, 104, 105, 110, > 103, 51, 100, 32, 36, 123, 49, 45, 51, 125, 44, 123, 119, 125, 44, 123, > 104, 125, 44, 36, 123, 54, 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, > 114, 97, 110, 100, 111, 109, 51, 100, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 102, 51, 100, > 61, 123, 48, 46, 53, 42, 109, 97, 120, 40, 119, 44, 104, 41, 47, 116, > 97, 110, 40, 36, 53, 42, 112, 105, 47, 51, 54, 48, 41, 125, 32, 45, > 102, 51, 100, 32, 36, 102, 51, 100, 32, 45, 108, 51, 100, 32, 123, 36, > 54, 42, 36, 102, 51, 100, 125, 44, 123, 36, 55, 42, 36, 102, 51, 100, > 125, 44, 123, 36, 56, 42, 36, 102, 51, 100, 125, 32, 45, 115, 108, 51, > 100, 32, 36, 57, 32, 45, 115, 115, 51, 100, 32, 36, 49, 48, 10, 45, > 116, 111, 95, 114, 103, 98, 32, 40, 123, 119, 125, 44, 123, 104, 125, 44, > 123, 100, 125, 44, 123, 115, 125, 41, 32, 45, 47, 91, 45, 49, 93, 32, > 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 10, 40, 64, 123, > 49, 44, 48, 125, 41, 32, 45, 43, 91, 45, 49, 93, 32, 64, 123, 49, > 44, 49, 125, 32, 45, 42, 91, 45, 49, 93, 32, 36, 51, 32, 45, 47, > 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, 95, 103, 105, 109, 112, 95, > 114, 97, 110, 100, 111, 109, 51, 100, 36, 49, 32, 64, 45, 49, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 49, 44, 48, 44, 123, 63, 40, 48, 44, 51, 54, 48, 41, 125, > 10, 40, 123, 63, 40, 45, 49, 44, 49, 41, 125, 41, 32, 45, 42, 91, > 45, 49, 93, 32, 64, 123, 49, 44, 48, 125, 32, 40, 123, 63, 40, 45, > 49, 44, 49, 41, 125, 41, 32, 45, 42, 91, 45, 49, 93, 32, 64, 123, > 49, 44, 49, 125, 10, 45, 43, 51, 100, 91, 45, 51, 93, 32, 64, 45, > 50, 44, 64, 45, 49, 44, 123, 63, 40, 45, 36, 52, 44, 36, 52, 41, > 125, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 99, 111, > 108, 51, 100, 91, 45, 49, 93, 32, 123, 63, 40, 50, 53, 53, 41, 125, > 44, 123, 63, 40, 50, 53, 53, 41, 125, 44, 123, 63, 40, 50, 53, 53, > 41, 125, 32, 45, 100, 111, 110, 101, 32, 45, 43, 51, 100, 91, 50, 45, > 45, 49, 93, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, 93, > 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 36, 49, 50, 44, 36, 49, 49, 44, 48, 44, 49, 10, 45, 107, 91, 48, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 95, 103, > 105, 109, 112, 95, 114, 97, 110, 100, 111, 109, 51, 100, 48, 32, 58, 32, > 45, 98, 111, 120, 51, 100, 32, 36, 49, 10, 95, 103, 105, 109, 112, 95, > 114, 97, 110, 100, 111, 109, 51, 100, 49, 32, 58, 32, 40, 36, 49, 41, > 32, 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, 99, 111, 110, 101, 51, > 100, 32, 64, 45, 49, 44, 36, 49, 32, 45, 114, 109, 91, 45, 50, 93, > 10, 95, 103, 105, 109, 112, 95, 114, 97, 110, 100, 111, 109, 51, 100, 50, > 32, 58, 32, 40, 36, 49, 41, 32, 45, 47, 91, 45, 49, 93, 32, 50, > 32, 45, 99, 121, 108, 105, 110, 100, 101, 114, 51, 100, 32, 64, 45, 49, > 44, 36, 49, 32, 45, 114, 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, > 112, 95, 114, 97, 110, 100, 111, 109, 51, 100, 51, 32, 58, 32, 45, 115, > 112, 104, 101, 114, 101, 51, 100, 32, 36, 49, 44, 50, 10, 95, 103, 105, > 109, 112, 95, 114, 97, 110, 100, 111, 109, 51, 100, 52, 32, 58, 32, 40, > 36, 49, 41, 32, 45, 47, 91, 45, 49, 93, 32, 51, 32, 45, 116, 111, > 114, 117, 115, 51, 100, 32, 36, 49, 44, 64, 45, 49, 32, 45, 114, 109, > 91, 45, 50, 93, 10, 103, 105, 109, 112, 95, 98, 97, 108, 108, 32, 58, > 10, 45, 98, 97, 108, 108, 32, 36, 49, 44, 36, 123, 53, 45, 55, 125, > 44, 36, 123, 50, 45, 52, 125, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 10, 103, 105, 109, 112, 95, 98, 97, 108, 108, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 98, 97, 108, 108, > 32, 36, 42, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, 32, 45, > 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, 108, 112, > 104, 97, 44, 49, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 99, 117, 112, 105, 100, 32, 58, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 48, 125, 32, 115, 105, 122, 61, 123, 109, 105, 110, 40, 64, > 123, 45, 109, 105, 110, 95, 119, 125, 44, 64, 123, 45, 109, 105, 110, 95, > 104, 125, 41, 125, 32, 45, 101, 108, 115, 101, 32, 115, 105, 122, 61, 53, > 49, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 99, 117, 112, 105, 100, > 32, 36, 115, 105, 122, 32, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, > 49, 93, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, > 114, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 48, 10, 45, > 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, 50, 53, 53, 44, > 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 10, 45, 102, 114, 97, > 109, 101, 91, 45, 49, 93, 32, 123, 50, 46, 53, 42, 36, 49, 125, 37, > 44, 123, 50, 46, 53, 42, 36, 49, 125, 37, 44, 36, 50, 44, 36, 51, > 44, 36, 52, 44, 48, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 37, > 10, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, > 108, 112, 104, 97, 10, 103, 105, 109, 112, 95, 101, 113, 117, 97, 116, 105, > 111, 110, 95, 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 114, > 109, 10, 36, 53, 44, 49, 44, 49, 44, 50, 44, 39, 34, 116, 61, 36, > 51, 43, 120, 42, 40, 36, 52, 45, 36, 51, 41, 47, 40, 36, 53, 45, > 49, 41, 59, 105, 102, 40, 99, 61, 61, 48, 44, 36, 49, 44, 36, 50, > 41, 34, 39, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 48, 44, 50, 10, 40, 36, 56, 44, 36, 49, 49, 94, 36, 57, > 44, 36, 49, 50, 94, 36, 49, 48, 44, 36, 49, 51, 41, 32, 45, 114, > 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 119, 125, 44, 49, 44, 49, > 44, 51, 44, 51, 32, 45, 97, 32, 99, 10, 45, 100, 105, 115, 112, 108, > 97, 121, 95, 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 36, 119, > 44, 36, 104, 44, 123, 36, 54, 43, 36, 49, 52, 42, 49, 46, 48, 48, > 49, 125, 44, 36, 55, 44, 36, 49, 53, 44, 36, 49, 54, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 101, > 113, 117, 97, 116, 105, 111, 110, 95, 112, 108, 111, 116, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 114, 109, > 10, 36, 52, 44, 49, 44, 49, 44, 36, 53, 44, 34, 88, 61, 36, 50, > 43, 40, 36, 51, 45, 36, 50, 41, 42, 120, 47, 40, 36, 52, 45, 49, > 41, 59, 36, 49, 34, 10, 45, 100, 103, 32, 36, 119, 44, 36, 104, 44, > 36, 54, 44, 36, 55, 44, 36, 50, 44, 36, 51, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 111, 114, > 110, 101, 114, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 40, 123, 119, 125, 44, 123, > 104, 125, 41, 32, 45, 114, 109, 91, 45, 50, 93, 10, 40, 36, 49, 44, > 36, 53, 59, 36, 57, 44, 36, 49, 51, 94, 36, 50, 44, 36, 54, 59, > 36, 49, 48, 44, 36, 49, 52, 94, 36, 51, 44, 36, 55, 59, 36, 49, > 49, 44, 36, 49, 53, 94, 36, 52, 44, 36, 56, 59, 36, 49, 50, 44, > 36, 49, 54, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 45, 50, 44, > 49, 44, 52, 44, 51, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, > 110, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 34, 36, 123, 49, 53, 61, 125, 34, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 36, 52, 10, 45, 45, 95, 103, 105, 109, 112, 95, 99, 117, 115, > 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 49, 32, 36, 123, > 49, 45, 49, 52, 125, 44, 34, 36, 49, 53, 34, 44, 36, 123, 49, 54, > 45, 45, 49, 125, 32, 45, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, > 32, 51, 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 53, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, > 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 91, 48, 93, 32, 36, 123, > 49, 45, 49, 52, 125, 44, 34, 36, 49, 53, 34, 44, 36, 123, 49, 54, > 45, 45, 49, 125, 44, 45, 49, 32, 45, 98, 108, 101, 110, 100, 32, 97, > 108, 112, 104, 97, 10, 45, 101, 108, 115, 101, 32, 45, 103, 105, 109, 112, > 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 36, 123, 49, 45, 49, 52, 125, 44, 34, 36, 49, 53, 34, 44, 36, > 123, 49, 54, 45, 45, 49, 125, 44, 45, 49, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 49, 52, 10, 45, 45, 95, 103, 105, 109, > 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, > 116, 48, 91, 93, 32, 36, 123, 49, 45, 49, 52, 125, 44, 34, 36, 49, > 53, 34, 44, 36, 123, 49, 54, 45, 45, 49, 125, 32, 45, 114, 91, 45, > 49, 93, 32, 123, 64, 123, 48, 44, 119, 125, 45, 49, 54, 125, 44, 49, > 54, 44, 49, 44, 52, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, > 32, 49, 44, 49, 44, 48, 32, 45, 106, 91, 48, 93, 32, 91, 45, 49, > 93, 44, 56, 44, 64, 123, 48, 44, 104, 45, 50, 53, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 117, > 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 53, 61, 125, 34, 10, 45, > 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, > 100, 105, 101, 110, 116, 48, 32, 36, 123, 49, 45, 49, 52, 125, 44, 34, > 36, 49, 53, 34, 44, 36, 123, 49, 54, 45, 45, 49, 125, 10, 45, 105, > 102, 32, 123, 36, 45, 49, 62, 61, 48, 38, 38, 110, 97, 114, 103, 40, > 34, 36, 49, 53, 34, 41, 125, 10, 100, 105, 114, 95, 103, 103, 114, 61, > 64, 123, 45, 112, 97, 116, 104, 95, 103, 105, 109, 112, 125, 47, 103, 114, > 97, 100, 105, 101, 110, 116, 115, 10, 48, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 64, 123, 34, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, > 102, 105, 108, 101, 110, 97, 109, 101, 32, 92, 34, 36, 49, 53, 92, 34, > 34, 125, 32, 110, 97, 109, 101, 95, 103, 103, 114, 61, 64, 123, 45, 49, > 44, 98, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 111, 117, 116, > 112, 117, 116, 95, 103, 103, 114, 91, 45, 49, 93, 32, 36, 100, 105, 114, > 95, 103, 103, 114, 47, 36, 110, 97, 109, 101, 95, 103, 103, 114, 46, 103, > 103, 114, 44, 34, 36, 49, 53, 34, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 91, 45, 50, 93, 32, 40, 48, 94, 48, 94, 48, 94, 48, 41, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, > 62, 44, 45, 49, 93, 10, 45, 95, 103, 105, 109, 112, 95, 99, 117, 115, > 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 49, 91, 48, 93, > 32, 36, 123, 49, 45, 49, 52, 125, 44, 34, 36, 49, 53, 34, 44, 36, > 123, 49, 54, 45, 45, 49, 125, 10, 45, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 48, 93, 32, 49, 44, 36, 49, 49, 32, 45, 45, 100, 105, > 115, 116, 97, 110, 99, 101, 91, 48, 93, 32, 48, 44, 36, 49, 49, 32, > 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 48, 93, 32, > 49, 32, 45, 43, 91, 48, 44, 45, 50, 44, 45, 49, 93, 10, 109, 61, > 123, 36, 57, 37, 42, 64, 123, 48, 44, 105, 109, 125, 125, 32, 77, 61, > 123, 36, 49, 48, 37, 42, 64, 123, 48, 44, 105, 77, 125, 125, 10, 45, > 45, 91, 48, 93, 32, 36, 109, 32, 45, 42, 91, 48, 93, 32, 123, 64, > 123, 49, 44, 119, 45, 50, 125, 47, 40, 36, 77, 45, 36, 109, 41, 125, > 32, 45, 43, 91, 48, 93, 32, 49, 10, 45, 114, 111, 117, 110, 100, 91, > 48, 93, 32, 45, 109, 97, 112, 91, 48, 93, 32, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 45, 49, 93, 10, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, > 95, 103, 114, 97, 100, 105, 101, 110, 116, 48, 32, 58, 10, 45, 105, 102, > 32, 36, 49, 54, 32, 52, 44, 56, 44, 49, 44, 49, 44, 36, 123, 49, > 56, 45, 53, 54, 125, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 49, 93, 32, 121, 122, 99, 120, 10, 45, 101, 108, 115, 101, 32, 56, 44, > 49, 44, 49, 44, 51, 32, 45, 115, 114, 97, 110, 100, 32, 36, 49, 55, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 122, 91, 45, 49, 93, 32, 48, 44, 123, 36, > 53, 45, 49, 125, 10, 45, 105, 102, 32, 36, 49, 51, 10, 45, 114, 91, > 45, 49, 93, 32, 123, 50, 48, 48, 42, 36, 54, 125, 37, 44, 49, 44, > 49, 44, 52, 44, 48, 44, 50, 10, 45, 95, 95, 103, 105, 109, 112, 95, > 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 48, > 91, 45, 49, 93, 32, 36, 49, 50, 44, 36, 56, 10, 45, 115, 104, 105, > 102, 116, 91, 45, 49, 93, 32, 123, 45, 36, 55, 47, 50, 125, 37, 44, > 48, 44, 48, 44, 48, 44, 50, 32, 45, 122, 91, 45, 49, 93, 32, 48, > 44, 123, 119, 47, 50, 45, 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, > 95, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, > 97, 100, 105, 101, 110, 116, 48, 91, 45, 49, 93, 32, 36, 49, 50, 44, > 36, 56, 10, 45, 114, 91, 45, 49, 93, 32, 123, 49, 48, 48, 42, 36, > 54, 125, 37, 44, 49, 44, 49, 44, 52, 44, 48, 44, 50, 32, 45, 115, > 104, 105, 102, 116, 91, 45, 49, 93, 32, 45, 36, 55, 37, 44, 48, 44, > 48, 44, 48, 44, 50, 10, 45, 101, 110, 100, 105, 102, 10, 95, 95, 103, > 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, > 101, 110, 116, 48, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 49, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, > 114, 103, 98, 50, 104, 115, 118, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, > 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 115, > 114, 103, 98, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 103, 98, > 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, 45, 49, 93, 32, 123, > 36, 50, 42, 119, 125, 44, 49, 44, 49, 44, 52, 44, 51, 10, 45, 105, > 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 115, 104, 91, 45, 49, > 93, 32, 48, 44, 50, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 115, 104, 91, 45, 49, 93, > 32, 48, 44, 50, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 45, 49, > 93, 32, 45, 114, 103, 98, 50, 115, 114, 103, 98, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 95, > 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, > 105, 101, 110, 116, 49, 32, 58, 10, 45, 98, 32, 36, 50, 37, 10, 45, > 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 10, 45, 116, 111, 95, 97, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, > 45, 105, 102, 32, 123, 105, 77, 62, 105, 109, 43, 51, 50, 125, 10, 45, > 114, 109, 91, 45, 50, 93, 32, 45, 103, 101, 91, 48, 93, 32, 123, 49, > 48, 48, 45, 36, 51, 125, 37, 10, 45, 101, 108, 115, 101, 10, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 110, 111, 114, 109, 32, 45, 110, 32, 48, > 44, 49, 10, 45, 105, 102, 32, 123, 105, 97, 62, 48, 46, 53, 125, 32, > 45, 108, 101, 91, 48, 93, 32, 36, 51, 37, 32, 45, 101, 108, 115, 101, > 32, 45, 103, 101, 91, 48, 93, 32, 123, 49, 48, 48, 45, 36, 51, 125, > 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 10, 45, 114, > 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 110, > 111, 114, 109, 32, 45, 108, 101, 32, 36, 51, 37, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 49, 61, 61, 50, 125, 10, 45, 114, 101, 109, 111, 118, > 101, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 110, 111, 114, 109, 32, > 45, 103, 101, 32, 123, 49, 48, 48, 45, 36, 51, 125, 37, 10, 45, 101, > 108, 115, 101, 10, 45, 116, 111, 95, 97, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 49, 48, 48, 37, 32, 45, 103, 101, 32, 123, 49, 48, > 48, 45, 36, 51, 125, 37, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 108, 105, 110, 101, 95, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 48, 61, 125, > 34, 10, 45, 95, 103, 105, 109, 112, 95, 108, 105, 110, 101, 95, 103, 114, > 97, 100, 105, 101, 110, 116, 32, 36, 42, 10, 45, 105, 102, 32, 123, 110, > 97, 114, 103, 40, 34, 36, 49, 48, 34, 41, 125, 10, 100, 105, 114, 95, > 103, 103, 114, 61, 64, 123, 45, 112, 97, 116, 104, 95, 103, 105, 109, 112, > 125, 47, 103, 114, 97, 100, 105, 101, 110, 116, 115, 10, 48, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 64, 123, 34, 45, 110, 111, 114, 109, 97, 108, > 105, 122, 101, 95, 102, 105, 108, 101, 110, 97, 109, 101, 32, 92, 34, 36, > 49, 48, 92, 34, 34, 125, 32, 110, 97, 109, 101, 95, 103, 103, 114, 61, > 64, 123, 45, 49, 44, 98, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 111, 117, 116, 112, 117, 116, 95, 103, 103, 114, 91, 45, 49, 93, 32, > 36, 100, 105, 114, 95, 103, 103, 114, 47, 36, 110, 97, 109, 101, 95, 103, > 103, 114, 46, 103, 103, 114, 44, 34, 36, 49, 48, 34, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 114, 91, 36, 62, 93, 32, 49, 48, 48, 37, 44, 54, 52, 44, 49, 44, > 49, 48, 48, 37, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 108, 105, 110, 101, 95, 103, 114, 97, 100, 105, 101, 110, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, 111, 95, 114, 103, > 98, 97, 10, 45, 105, 102, 32, 36, 57, 32, 45, 45, 95, 103, 105, 109, > 112, 95, 108, 105, 110, 101, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 36, 42, 32, 45, 101, 110, 100, 105, 102, 10, 45, 108, 91, 48, 93, 10, > 45, 108, 105, 110, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 36, 51, > 37, 44, 36, 52, 37, 44, 49, 44, 48, 120, 70, 48, 70, 48, 70, 48, > 70, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, > 53, 53, 10, 45, 108, 105, 110, 101, 32, 36, 49, 37, 44, 36, 50, 37, > 44, 36, 51, 37, 44, 36, 52, 37, 44, 49, 44, 48, 120, 48, 70, 48, > 70, 48, 70, 48, 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, > 45, 99, 105, 114, 99, 108, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 52, 44, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, 50, 53, 53, 10, > 45, 99, 105, 114, 99, 108, 101, 32, 36, 51, 37, 44, 36, 52, 37, 44, > 52, 44, 49, 44, 48, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 10, > 45, 99, 105, 114, 99, 108, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 52, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, > 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, 108, 101, > 32, 36, 51, 37, 44, 36, 52, 37, 44, 52, 44, 49, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 10, 45, 105, 102, 32, 123, 64, 35, 62, > 49, 125, 32, 45, 114, 91, 45, 49, 93, 32, 123, 64, 123, 48, 44, 119, > 125, 45, 51, 50, 125, 44, 51, 50, 44, 49, 44, 52, 44, 49, 32, 45, > 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 44, 50, 53, 53, 32, 45, 106, 91, 48, 93, 32, 91, 49, > 93, 44, 49, 54, 44, 123, 64, 123, 48, 44, 104, 125, 45, 52, 56, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 95, 103, 105, 109, > 112, 95, 108, 105, 110, 101, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 58, 10, 45, 97, 116, 95, 108, 105, 110, 101, 32, 36, 49, 37, 44, 36, > 50, 37, 44, 48, 44, 36, 51, 37, 44, 36, 52, 37, 44, 48, 32, 45, > 114, 32, 123, 109, 97, 120, 40, 48, 46, 49, 44, 36, 53, 41, 125, 37, > 44, 49, 44, 49, 44, 49, 48, 48, 37, 44, 49, 10, 45, 109, 32, 34, > 102, 101, 97, 116, 117, 114, 101, 49, 32, 58, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 48, 34, 10, 45, 109, 32, 34, 102, 101, 97, 116, > 117, 114, 101, 50, 32, 58, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 49, 34, 10, 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 51, > 32, 58, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 50, 34, 10, > 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 52, 32, 58, 32, 45, > 116, 111, 95, 114, 103, 98, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 34, 10, 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 53, 32, > 58, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 103, 98, 50, 121, > 99, 98, 99, 114, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, > 34, 10, 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 54, 32, 58, > 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 103, 98, 50, 121, 99, > 98, 99, 114, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 50, 34, > 10, 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 55, 32, 58, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 115, 114, 103, 98, 50, 114, 103, > 98, 32, 45, 114, 103, 98, 50, 108, 97, 98, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 48, 34, 10, 45, 105, 102, 32, 36, 55, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 45, 102, 101, 97, 116, 117, 114, 101, 36, 55, 32, 45, 114, 118, > 32, 45, 97, 32, 121, 32, 45, 115, 111, 114, 116, 32, 43, 44, 120, 32, > 45, 114, 111, 119, 115, 32, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, > 54, 32, 45, 114, 32, 36, 54, 44, 49, 44, 49, 44, 49, 48, 48, 37, > 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 56, > 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 108, 105, 110, 101, 97, 114, 95, 103, 114, > 97, 100, 105, 101, 110, 116, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 10, 40, 123, 119, 125, 44, 123, 104, 125, 41, 32, 45, 114, > 109, 91, 45, 50, 93, 10, 40, 36, 49, 94, 36, 50, 94, 36, 51, 94, > 36, 52, 41, 32, 40, 36, 53, 94, 36, 54, 94, 36, 55, 94, 36, 56, > 41, 10, 45, 105, 102, 32, 36, 57, 32, 45, 114, 118, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, 45, 50, > 44, 45, 49, 93, 32, 64, 45, 51, 32, 45, 114, 109, 91, 45, 51, 93, > 10, 45, 102, 97, 100, 101, 95, 108, 105, 110, 101, 97, 114, 32, 36, 49, > 48, 44, 36, 49, 49, 44, 36, 49, 50, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 114, > 97, 100, 105, 97, 108, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 40, 123, 119, 125, > 44, 123, 104, 125, 41, 32, 45, 114, 109, 91, 45, 50, 93, 10, 40, 36, > 49, 94, 36, 50, 94, 36, 51, 94, 36, 52, 41, 32, 40, 36, 53, 94, > 36, 54, 94, 36, 55, 94, 36, 56, 41, 10, 45, 105, 102, 32, 36, 57, > 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 64, 45, 51, > 32, 45, 114, 109, 91, 45, 51, 93, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 36, 49, 50, 37, > 44, 36, 49, 51, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 45, 49, 93, 32, 49, 32, 45, 95, 102, 97, 100, 101, 32, 36, 49, 48, > 44, 36, 49, 49, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 104, 101, 97, 114, 116, 32, > 58, 10, 45, 105, 102, 32, 123, 64, 35, 62, 48, 125, 32, 119, 104, 61, > 64, 123, 45, 109, 97, 120, 95, 119, 104, 125, 32, 119, 61, 123, 36, 49, > 37, 42, 109, 105, 110, 40, 53, 49, 50, 44, 97, 114, 103, 40, 49, 44, > 36, 119, 104, 41, 41, 125, 32, 104, 61, 123, 36, 49, 37, 42, 109, 105, > 110, 40, 53, 49, 50, 44, 97, 114, 103, 40, 50, 44, 36, 119, 104, 41, > 41, 125, 32, 45, 101, 108, 115, 101, 32, 119, 61, 123, 36, 49, 37, 42, > 53, 49, 50, 125, 32, 104, 61, 123, 36, 49, 37, 42, 53, 49, 50, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 104, 101, 97, 114, 116, 32, 123, > 109, 97, 120, 40, 49, 44, 36, 119, 41, 125, 44, 123, 109, 97, 120, 40, > 49, 44, 36, 104, 41, 125, 32, 45, 116, 111, 95, 114, 103, 98, 97, 91, > 45, 49, 93, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, > 111, 114, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, 49, 44, 49, > 44, 50, 53, 53, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, > 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 48, 10, 45, 98, 91, > 45, 49, 93, 32, 36, 50, 37, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 10, 103, 105, 109, 112, 95, 104, 101, 97, 114, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 104, 101, 97, > 114, 116, 32, 36, 42, 32, 45, 98, 108, 101, 110, 100, 91, 48, 44, 45, > 49, 93, 32, 97, 108, 112, 104, 97, 44, 49, 44, 49, 10, 103, 105, 109, > 112, 95, 108, 105, 115, 115, 97, 106, 111, 117, 115, 32, 58, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 97, 10, 123, 119, 125, 44, 123, 104, 125, > 10, 45, 102, 51, 100, 32, 123, 48, 46, 53, 42, 109, 97, 120, 40, 119, > 44, 104, 41, 47, 116, 97, 110, 40, 36, 52, 42, 112, 105, 47, 51, 54, > 48, 41, 125, 10, 45, 108, 105, 115, 115, 97, 106, 111, 117, 115, 51, 100, > 32, 36, 49, 44, 36, 53, 44, 36, 56, 44, 36, 54, 44, 36, 57, 44, > 36, 55, 44, 36, 49, 48, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 48, 44, 48, 44, 49, 44, 36, 49, 51, 32, 45, 114, 51, 100, 91, 45, > 49, 93, 32, 48, 44, 49, 44, 48, 44, 36, 49, 50, 32, 45, 114, 51, > 100, 91, 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 36, 49, 49, 10, > 45, 42, 51, 100, 91, 45, 49, 93, 32, 123, 48, 46, 53, 42, 36, 50, > 42, 64, 123, 45, 50, 44, 119, 125, 125, 44, 123, 48, 46, 53, 42, 36, > 51, 42, 64, 123, 45, 50, 44, 104, 125, 125, 44, 123, 48, 46, 53, 42, > 36, 52, 42, 109, 97, 120, 40, 64, 123, 45, 50, 44, 119, 125, 44, 64, > 123, 45, 50, 44, 104, 125, 41, 125, 10, 45, 99, 111, 108, 51, 100, 91, > 45, 49, 93, 32, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 48, 44, 49, 44, 49, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, > 32, 49, 32, 45, 103, 116, 91, 45, 49, 93, 32, 36, 49, 52, 37, 32, > 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 101, 113, 91, > 45, 49, 93, 32, 48, 10, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 10, 45, 115, 104, 91, 45, > 49, 93, 32, 48, 44, 48, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, > 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, > 93, 32, 49, 44, 49, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 54, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, > 32, 50, 44, 50, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 55, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 56, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 58, 10, 40, > 48, 94, 48, 94, 48, 41, 32, 40, 36, 56, 94, 36, 57, 94, 36, 49, > 48, 41, 32, 40, 36, 49, 49, 94, 36, 49, 50, 94, 36, 49, 51, 41, > 32, 40, 36, 49, 52, 94, 36, 49, 53, 94, 36, 49, 54, 41, 32, 40, > 36, 49, 55, 94, 36, 49, 56, 94, 36, 49, 57, 41, 10, 45, 97, 91, > 45, 52, 45, 45, 49, 93, 32, 120, 32, 45, 114, 91, 45, 49, 93, 32, > 36, 52, 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 120, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, > 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 36, 119, 104, 10, 45, 109, 97, 110, 100, 101, 108, 98, 114, > 111, 116, 91, 45, 49, 93, 32, 123, 36, 49, 45, 50, 47, 40, 49, 43, > 36, 51, 41, 125, 44, 123, 36, 50, 45, 50, 47, 40, 49, 43, 36, 51, > 41, 125, 44, 123, 36, 49, 43, 50, 47, 40, 49, 43, 36, 51, 41, 125, > 44, 123, 36, 50, 43, 50, 47, 40, 49, 43, 36, 51, 41, 125, 44, 36, > 52, 44, 36, 53, 44, 123, 105, 102, 40, 36, 53, 44, 36, 54, 44, 48, > 41, 125, 44, 123, 105, 102, 40, 36, 53, 44, 36, 55, 44, 48, 41, 125, > 10, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 48, 93, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, > 109, 91, 48, 93, 10, 103, 105, 109, 112, 95, 109, 97, 110, 100, 101, 108, > 98, 114, 111, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, > 36, 123, 94, 48, 125, 10, 45, 108, 105, 110, 101, 32, 48, 44, 53, 48, > 37, 44, 49, 48, 48, 37, 44, 53, 48, 37, 44, 48, 46, 53, 44, 50, > 53, 53, 10, 45, 108, 105, 110, 101, 32, 53, 48, 37, 44, 48, 44, 53, > 48, 37, 44, 49, 48, 48, 37, 44, 48, 46, 53, 44, 50, 53, 53, 10, > 103, 105, 109, 112, 95, 113, 117, 105, 99, 107, 95, 99, 111, 112, 121, 114, > 105, 103, 104, 116, 32, 58, 10, 45, 105, 91, 48, 93, 32, 48, 32, 45, > 116, 91, 48, 93, 32, 34, 36, 49, 34, 44, 48, 44, 48, 44, 36, 50, > 44, 49, 44, 36, 51, 44, 36, 52, 44, 36, 53, 32, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 91, 48, 93, 32, 48, 32, 45, 114, 91, 48, 93, > 32, 123, 64, 123, 48, 44, 119, 125, 43, 50, 42, 36, 55, 125, 44, 123, > 64, 123, 48, 44, 104, 125, 43, 50, 42, 36, 55, 125, 44, 49, 44, 51, > 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 91, > 49, 93, 32, 48, 32, 45, 116, 91, 49, 93, 32, 34, 36, 49, 34, 44, > 48, 44, 48, 44, 36, 50, 44, 49, 44, 49, 32, 45, 97, 117, 116, 111, > 99, 114, 111, 112, 91, 49, 93, 32, 48, 32, 45, 114, 91, 49, 93, 32, > 123, 64, 123, 49, 44, 119, 125, 43, 50, 42, 36, 55, 125, 44, 123, 64, > 123, 49, 44, 104, 125, 43, 50, 42, 36, 55, 125, 44, 49, 44, 49, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 105, 108, > 97, 116, 101, 91, 49, 93, 32, 123, 49, 43, 50, 42, 36, 55, 125, 10, > 45, 114, 111, 116, 97, 116, 101, 91, 48, 44, 49, 93, 32, 123, 57, 48, > 42, 40, 36, 49, 48, 45, 49, 41, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 64, 35, 45, 50, 125, 10, 45, 105, 102, 32, 123, 36, 56, > 61, 61, 48, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, 93, 44, > 36, 57, 44, 36, 57, 44, 48, 44, 48, 44, 123, 36, 54, 47, 50, 53, > 53, 125, 44, 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 56, > 61, 61, 49, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, 93, 44, > 123, 119, 45, 49, 45, 64, 123, 48, 44, 119, 125, 45, 36, 57, 125, 44, > 36, 57, 44, 48, 44, 48, 44, 123, 36, 54, 47, 50, 53, 53, 125, 44, > 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 56, 61, 61, 50, > 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, 93, 44, 36, 57, 44, > 123, 104, 45, 49, 45, 64, 123, 48, 44, 104, 125, 45, 36, 57, 125, 44, > 48, 44, 48, 44, 123, 36, 54, 47, 50, 53, 53, 125, 44, 91, 49, 93, > 10, 45, 101, 108, 115, 101, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, > 93, 44, 123, 119, 45, 49, 45, 64, 123, 48, 44, 119, 125, 45, 36, 57, > 125, 44, 123, 104, 45, 49, 45, 64, 123, 48, 44, 104, 125, 45, 36, 57, > 125, 44, 48, 44, 48, 44, 123, 36, 54, 47, 50, 53, 53, 125, 44, 91, > 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 50, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 44, > 49, 93, 10, 103, 105, 109, 112, 95, 114, 97, 105, 110, 98, 111, 119, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 115, > 112, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 36, 49, 37, 44, > 49, 48, 48, 44, 123, 45, 36, 51, 125, 37, 44, 49, 48, 48, 37, 44, > 36, 50, 37, 44, 49, 48, 48, 44, 36, 52, 37, 44, 50, 53, 54, 44, > 49, 44, 49, 10, 45, 102, 108, 111, 111, 100, 91, 45, 49, 93, 32, 48, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 32, 45, 102, 108, > 111, 111, 100, 91, 45, 49, 93, 32, 123, 119, 45, 49, 125, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 49, 10, 45, 100, 105, 115, 116, 97, > 110, 99, 101, 91, 45, 49, 93, 32, 48, 32, 45, 99, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 123, 36, 53, 42, 50, 53, 53, 125, 10, 45, 114, 97, 105, 110, 98, 111, > 119, 95, 108, 117, 116, 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 91, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 123, > 109, 105, 110, 40, 49, 48, 48, 44, 50, 48, 48, 45, 36, 54, 41, 125, > 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 109, 97, 112, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 123, 36, 54, 60, 49, 48, 48, 125, 32, 45, 115, > 104, 91, 45, 49, 93, 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 36, 54, 47, 49, 48, 48, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 98, 108, 101, 110, 100, 32, > 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 115, 104, 97, 100, 101, 98, 111, 98, 115, > 32, 58, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 32, 45, > 102, 32, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 116, 61, 48, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 51, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, > 114, 61, 123, 36, 54, 43, 36, 53, 42, 99, 111, 115, 40, 54, 42, 36, > 55, 42, 36, 116, 41, 43, 40, 49, 45, 36, 53, 41, 42, 115, 105, 110, > 40, 54, 42, 36, 56, 42, 36, 116, 41, 125, 10, 97, 61, 123, 40, 51, > 54, 48, 42, 115, 105, 110, 40, 36, 55, 42, 36, 116, 41, 43, 51, 48, > 42, 36, 54, 42, 36, 62, 41, 42, 112, 105, 47, 49, 56, 48, 125, 10, > 97, 120, 61, 123, 50, 42, 36, 62, 42, 112, 105, 47, 36, 49, 43, 36, > 116, 125, 10, 99, 120, 61, 123, 40, 49, 43, 36, 57, 42, 99, 111, 115, > 40, 36, 97, 120, 41, 43, 36, 114, 42, 99, 111, 115, 40, 36, 97, 41, > 41, 42, 119, 47, 50, 125, 10, 99, 121, 61, 123, 40, 49, 43, 36, 57, > 42, 115, 105, 110, 40, 36, 97, 120, 41, 43, 36, 114, 42, 115, 105, 110, > 40, 36, 97, 41, 41, 42, 104, 47, 50, 125, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 36, 99, 120, 44, 36, 99, 121, 44, > 36, 50, 37, 44, 36, 50, 37, 44, 48, 44, 45, 49, 44, 49, 10, 45, > 100, 111, 110, 101, 10, 116, 61, 123, 36, 116, 43, 36, 52, 47, 49, 48, > 48, 125, 10, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 97, 110, 100, 32, 50, 53, 53, 32, 45, 105, > 102, 32, 36, 49, 48, 32, 45, 109, 97, 112, 32, 123, 36, 49, 48, 45, > 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, > 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, > 48, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 115, 105, > 101, 114, 112, 105, 110, 115, 107, 105, 91, 45, 49, 93, 32, 36, 123, 49, > 45, 55, 125, 10, 45, 45, 102, 99, 91, 45, 50, 93, 32, 36, 56, 44, > 36, 57, 44, 36, 49, 48, 32, 45, 106, 91, 48, 93, 32, 91, 45, 49, > 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 36, 49, 49, 44, 91, 45, > 50, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 115, 110, > 111, 119, 102, 108, 97, 107, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, > 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, > 10, 45, 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, 36, 123, 49, 45, > 49, 49, 125, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, 97, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 10, 123, 119, 125, 44, 123, 104, > 125, 10, 45, 102, 51, 100, 32, 123, 48, 46, 53, 42, 109, 97, 120, 40, > 119, 44, 104, 41, 47, 116, 97, 110, 40, 36, 52, 42, 112, 105, 47, 51, > 54, 48, 41, 125, 10, 45, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, > 108, 97, 51, 100, 32, 36, 49, 44, 36, 123, 52, 45, 55, 125, 10, 45, > 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, 36, 49, > 48, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, > 44, 36, 57, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, 48, > 44, 48, 44, 36, 56, 10, 45, 42, 51, 100, 91, 45, 49, 93, 32, 123, > 48, 46, 53, 42, 36, 50, 42, 64, 123, 45, 50, 44, 119, 125, 125, 44, > 123, 48, 46, 53, 42, 36, 51, 42, 64, 123, 45, 50, 44, 104, 125, 125, > 10, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 49, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 103, 116, 91, 45, > 49, 93, 32, 36, 49, 49, 37, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 101, 113, 91, 45, 49, 93, 32, 48, 10, 45, 114, > 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 52, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, > 42, 91, 45, 49, 93, 32, 36, 49, 50, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 42, > 91, 45, 49, 93, 32, 36, 49, 51, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, 45, 42, 91, > 45, 49, 93, 32, 36, 49, 52, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 51, 44, 51, 32, 45, 42, 91, 45, > 49, 93, 32, 36, 49, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 48, 125, 44, > 36, 123, 54, 61, 36, 53, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 10, 45, 105, 102, 32, 36, 53, 32, 119, 105, 100, 116, 104, 61, > 36, 53, 32, 45, 101, 108, 115, 101, 32, 119, 105, 100, 116, 104, 61, 123, > 119, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 54, > 32, 104, 101, 105, 103, 104, 116, 61, 36, 54, 32, 45, 101, 108, 115, 101, > 32, 104, 101, 105, 103, 104, 116, 61, 123, 104, 125, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 36, 52, 32, 45, 115, 91, 45, 49, 93, > 32, 120, 44, 50, 32, 45, 101, 108, 115, 101, 32, 91, 45, 49, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 36, 49, 91, 45, 50, 93, 32, 36, > 50, 32, 45, 36, 49, 91, 45, 49, 93, 32, 36, 51, 10, 45, 114, 91, > 45, 50, 44, 45, 49, 93, 32, 123, 109, 97, 120, 40, 119, 44, 64, 123, > 45, 50, 44, 119, 125, 41, 125, 44, 123, 109, 97, 120, 40, 104, 44, 64, > 123, 45, 50, 44, 104, 125, 41, 125, 44, 49, 44, 49, 48, 48, 37, 44, > 51, 10, 45, 105, 102, 32, 123, 33, 36, 52, 125, 32, 45, 99, 111, 108, > 117, 109, 110, 115, 91, 45, 50, 93, 32, 48, 44, 53, 48, 37, 32, 45, > 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 53, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 120, 32, 45, 114, 91, 45, 49, 93, 32, 36, > 119, 105, 100, 116, 104, 44, 36, 104, 101, 105, 103, 104, 116, 44, 49, 44, > 49, 48, 48, 37, 44, 50, 32, 45, 100, 114, 103, 98, 97, 91, 45, 49, > 93, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, > 48, 44, 53, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, 44, 48, > 44, 48, 44, 50, 53, 53, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, > 108, 105, 110, 101, 91, 45, 49, 93, 32, 34, 83, 116, 97, 114, 116, 34, > 44, 49, 44, 48, 44, 49, 51, 44, 50, 44, 49, 44, 50, 53, 53, 32, > 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 34, 69, 110, 100, 34, 44, 123, 119, 45, 50, 51, 125, 44, 123, > 104, 45, 49, 54, 125, 44, 49, 51, 44, 50, 44, 49, 44, 50, 53, 53, > 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 108, > 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 105, 102, 32, > 36, 51, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, > 103, 109, 105, 99, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, > 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 95, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, > 100, 32, 36, 123, 53, 45, 54, 125, 10, 45, 97, 110, 105, 109, 97, 116, > 101, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 44, > 34, 36, 123, 55, 45, 56, 125, 44, 36, 123, 49, 48, 45, 49, 57, 125, > 44, 36, 57, 34, 44, 92, 10, 34, 36, 123, 55, 45, 56, 125, 44, 36, > 123, 50, 48, 45, 50, 57, 125, 44, 36, 57, 34, 44, 36, 49, 44, 36, > 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, > 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, > 97, 116, 101, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 119, 61, 123, 119, 125, 32, > 104, 61, 123, 104, 125, 10, 45, 95, 103, 105, 109, 112, 95, 101, 108, 101, > 118, 97, 116, 105, 111, 110, 51, 100, 32, 36, 123, 53, 45, 54, 125, 10, > 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, > 114, 51, 100, 44, 36, 119, 34, 44, 34, 36, 104, 34, 44, 36, 123, 49, > 48, 45, 49, 57, 125, 44, 36, 57, 34, 44, 92, 10, 36, 119, 34, 44, > 34, 36, 104, 34, 44, 36, 123, 50, 48, 45, 50, 57, 125, 44, 36, 57, > 34, 44, 48, 44, 36, 119, 44, 36, 104, 10, 103, 105, 109, 112, 95, 97, > 110, 105, 109, 97, 116, 101, 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, > 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, 110, 97, > 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, 101, 120, 116, 114, > 117, 100, 101, 51, 100, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 95, 103, 105, 109, 112, 95, 101, 120, 116, 114, 117, > 100, 101, 51, 100, 32, 36, 123, 53, 45, 55, 125, 10, 45, 97, 110, 105, > 109, 97, 116, 101, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, > 51, 100, 44, 34, 36, 123, 56, 45, 57, 125, 44, 36, 123, 49, 49, 45, > 50, 48, 125, 44, 36, 49, 48, 34, 44, 92, 10, 34, 36, 123, 56, 45, > 57, 125, 44, 36, 123, 50, 49, 45, 51, 48, 125, 44, 36, 49, 48, 34, > 44, 36, 49, 44, 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, > 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, > 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 120, 116, 114, 117, 100, 101, > 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 119, 61, 123, > 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 120, 116, 114, 117, 100, 101, 51, 100, 32, 36, 123, 53, 45, 55, 125, > 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, > 101, 114, 51, 100, 44, 36, 119, 34, 44, 34, 36, 104, 34, 44, 36, 123, > 49, 49, 45, 50, 48, 125, 44, 36, 49, 48, 34, 44, 92, 10, 36, 119, > 34, 44, 34, 36, 104, 34, 44, 36, 123, 50, 49, 45, 51, 48, 125, 44, > 36, 49, 48, 34, 44, 48, 44, 36, 119, 44, 36, 104, 10, 103, 105, 109, > 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, > 98, 106, 101, 99, 116, 51, 100, 32, 58, 10, 45, 105, 102, 32, 36, 51, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, > 105, 99, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, > 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, > 116, 51, 100, 32, 34, 95, 34, 44, 36, 53, 10, 45, 97, 110, 105, 109, > 97, 116, 101, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, > 100, 44, 34, 36, 123, 54, 45, 55, 125, 44, 36, 123, 57, 45, 49, 56, > 125, 44, 36, 56, 34, 44, 92, 10, 34, 36, 123, 54, 45, 55, 125, 44, > 36, 123, 49, 57, 45, 50, 56, 125, 44, 36, 56, 34, 44, 36, 49, 44, > 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, > 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, > 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, > 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 119, 61, 123, > 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 95, 103, 105, 109, 112, 95, > 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 32, 34, 95, > 112, 114, 101, 118, 105, 101, 119, 95, 34, 44, 36, 53, 10, 45, 103, 105, > 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, > 44, 36, 119, 34, 44, 34, 36, 104, 34, 44, 36, 123, 57, 45, 49, 56, > 125, 44, 36, 56, 34, 44, 92, 10, 36, 119, 34, 44, 34, 36, 104, 34, > 44, 36, 123, 49, 57, 45, 50, 56, 125, 44, 36, 56, 34, 44, 48, 44, > 36, 119, 44, 36, 104, 10, 103, 105, 109, 112, 95, 116, 101, 120, 116, 95, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 58, 10, 87, > 61, 123, 119, 125, 32, 72, 61, 123, 104, 125, 32, 77, 61, 123, 114, 111, > 117, 110, 100, 40, 49, 46, 53, 42, 109, 97, 120, 40, 119, 44, 104, 41, > 41, 125, 32, 45, 114, 109, 10, 45, 116, 101, 120, 116, 95, 112, 111, 105, > 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 34, 36, 50, 34, 44, 34, > 36, 51, 34, 44, 36, 52, 10, 45, 99, 111, 108, 51, 100, 91, 45, 49, > 93, 32, 36, 123, 53, 45, 55, 125, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 123, 48, 46, 55, 42, 36, 77, 125, 10, 45, 102, 51, 100, 32, > 52, 48, 48, 48, 32, 45, 100, 98, 51, 100, 32, 48, 32, 45, 109, 51, > 100, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 45, 114, 112, > 114, 111, 103, 114, 101, 115, 115, 32, 123, 54, 48, 42, 36, 62, 47, 36, > 49, 125, 10, 97, 110, 103, 108, 101, 61, 123, 36, 62, 42, 51, 54, 48, > 47, 36, 49, 125, 10, 45, 45, 114, 51, 100, 91, 48, 93, 32, 49, 44, > 48, 44, 49, 44, 36, 97, 110, 103, 108, 101, 10, 36, 77, 44, 36, 77, > 44, 49, 44, 51, 44, 45, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, > 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, > 48, 37, 44, 48, 44, 49, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, > 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 93, 32, 45, 97, 32, 122, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 45, 49, 32, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 115, 32, 122, 32, 45, 114, 101, 112, > 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 48, 44, 48, 44, 45, > 49, 44, 45, 49, 44, 45, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, > 48, 44, 48, 10, 45, 105, 102, 32, 36, 49, 49, 32, 78, 61, 64, 35, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 54, > 48, 43, 52, 48, 42, 36, 62, 47, 36, 78, 125, 10, 45, 105, 91, 48, > 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, > 45, 102, 99, 91, 48, 93, 32, 36, 123, 56, 45, 49, 49, 125, 32, 45, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 51, 44, > 51, 32, 45, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, > 32, 45, 98, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, 52, 37, 32, > 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, 10, 45, 106, 91, > 48, 93, 32, 91, 45, 49, 93, 44, 36, 49, 50, 37, 44, 36, 49, 51, > 37, 44, 48, 44, 48, 44, 49, 44, 91, 45, 50, 93, 44, 50, 53, 53, > 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 98, 108, 101, > 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 87, 62, 36, 72, 125, 32, 45, 114, 50, 100, 120, 32, 36, 87, > 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 72, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 53, 62, > 49, 125, 10, 45, 105, 91, 123, 105, 110, 116, 40, 36, 49, 47, 50, 41, > 125, 93, 32, 91, 123, 105, 110, 116, 40, 36, 49, 47, 50, 41, 125, 93, > 120, 123, 36, 49, 53, 45, 49, 125, 10, 45, 105, 91, 48, 93, 32, 91, > 48, 93, 120, 123, 36, 49, 53, 45, 49, 125, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 116, 101, 120, 116, 95, 112, 111, 105, 110, > 116, 99, 108, 111, 117, 100, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 116, 101, 120, 116, 95, 112, 111, > 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 52, 44, 34, 36, 50, > 34, 44, 34, 36, 51, 34, 44, 36, 52, 44, 36, 123, 53, 45, 55, 125, > 44, 36, 123, 56, 45, 49, 49, 125, 44, 36, 123, 49, 50, 45, 49, 52, > 125, 44, 49, 32, 45, 100, 114, 103, 98, 97, 10, 45, 102, 114, 97, 109, > 101, 32, 49, 44, 49, 44, 48, 32, 45, 97, 112, 112, 101, 110, 100, 95, > 116, 105, 108, 101, 115, 32, 50, 44, 50, 10, 103, 105, 109, 112, 95, 116, > 114, 97, 110, 115, 105, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 102, > 51, 100, 32, 36, 55, 10, 45, 116, 114, 97, 110, 115, 105, 116, 105, 111, > 110, 51, 100, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 34, 36, 52, > 34, 44, 34, 36, 53, 34, 44, 34, 36, 54, 34, 44, 36, 56, 10, 103, > 105, 109, 112, 95, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 102, 51, 100, 32, > 36, 55, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, 32, 45, > 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 107, > 91, 48, 44, 49, 93, 32, 45, 116, 114, 97, 110, 115, 105, 116, 105, 111, > 110, 51, 100, 32, 52, 44, 36, 50, 44, 36, 51, 44, 34, 36, 52, 34, > 44, 34, 36, 53, 34, 44, 34, 36, 54, 34, 44, 36, 56, 10, 45, 107, > 91, 49, 44, 50, 93, 10, 45, 114, 91, 48, 93, 32, 53, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, 48, 10, 45, 114, > 91, 49, 93, 32, 53, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 48, 48, 37, 44, 48, 44, 48, 44, 49, 10, 45, 97, 32, 120, 10, 45, > 108, 105, 110, 101, 32, 53, 48, 37, 44, 48, 44, 53, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, > 103, 105, 109, 112, 95, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, > 112, 108, 97, 115, 109, 97, 32, 58, 10, 45, 116, 114, 97, 110, 115, 105, > 116, 105, 111, 110, 95, 112, 108, 97, 115, 109, 97, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 37, 10, 103, 105, 109, 112, 95, 116, 114, 97, 110, 115, > 105, 116, 105, 111, 110, 95, 112, 108, 97, 115, 109, 97, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, > 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 107, 91, 48, 44, 49, 93, 32, 45, 116, 114, 97, 110, 115, > 105, 116, 105, 111, 110, 95, 112, 108, 97, 115, 109, 97, 32, 54, 44, 36, > 50, 44, 36, 51, 37, 32, 45, 107, 91, 49, 45, 45, 50, 93, 32, 45, > 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 97, 112, 112, > 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 44, 10, 103, 105, 109, 112, > 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, 101, 110, 99, 105, 108, 98, > 119, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, 110, > 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, 112, 101, 110, > 99, 105, 108, 98, 119, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 112, 101, 110, > 99, 105, 108, 98, 119, 44, 34, 36, 123, 53, 45, 54, 125, 34, 44, 92, > 10, 34, 36, 123, 55, 45, 56, 125, 34, 44, 36, 49, 44, 36, 50, 44, > 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, 110, > 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, > 101, 95, 112, 101, 110, 99, 105, 108, 98, 119, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 112, 101, 110, 99, 105, > 108, 98, 119, 44, 34, 36, 123, 53, 45, 54, 125, 34, 44, 92, 10, 34, > 36, 123, 55, 45, 56, 125, 34, 10, 103, 105, 109, 112, 95, 97, 110, 105, > 109, 97, 116, 101, 95, 115, 116, 101, 110, 99, 105, 108, 98, 119, 32, 58, > 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, 115, 116, 101, 110, 99, 105, > 108, 98, 119, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, > 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 115, 116, 101, 110, 99, > 105, 108, 98, 119, 44, 34, 36, 123, 53, 45, 54, 125, 34, 44, 92, 10, > 34, 36, 123, 55, 45, 56, 125, 34, 44, 36, 49, 44, 36, 50, 44, 64, > 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, 110, 97, > 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, > 95, 115, 116, 101, 110, 99, 105, 108, 98, 119, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 115, 116, 101, 110, 99, > 105, 108, 98, 119, 44, 34, 36, 123, 53, 45, 54, 125, 34, 44, 92, 10, > 34, 36, 123, 55, 45, 56, 125, 34, 10, 103, 105, 109, 112, 95, 97, 110, > 105, 109, 97, 116, 101, 95, 99, 97, 114, 116, 111, 111, 110, 32, 58, 10, > 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, > 34, 36, 52, 47, 103, 109, 105, 99, 95, 99, 97, 114, 116, 111, 111, 110, > 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 110, 105, 109, 97, 116, 101, 32, 99, 97, 114, 116, 111, 111, 110, 44, > 34, 36, 123, 54, 45, 49, 48, 125, 44, 36, 53, 34, 44, 92, 10, 34, > 36, 123, 49, 49, 45, 49, 53, 125, 44, 36, 53, 34, 44, 36, 49, 44, > 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, > 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, > 109, 97, 116, 101, 95, 99, 97, 114, 116, 111, 111, 110, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, > 109, 97, 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 99, 97, 114, > 116, 111, 111, 110, 44, 34, 36, 123, 54, 45, 49, 48, 125, 44, 36, 53, > 34, 44, 92, 10, 34, 36, 123, 49, 49, 45, 49, 53, 125, 44, 36, 53, > 34, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, > 100, 103, 101, 115, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, > 101, 100, 103, 101, 115, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 103, 105, 109, > 112, 95, 101, 100, 103, 101, 115, 44, 34, 36, 123, 54, 45, 55, 125, 44, > 36, 53, 34, 44, 92, 10, 34, 36, 123, 56, 45, 57, 125, 44, 36, 53, > 34, 44, 36, 49, 44, 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, > 92, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, > 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 100, 103, 101, 115, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 97, 110, 105, 109, 97, 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 103, 105, 109, 112, 95, 101, 100, 103, 101, 115, 44, 34, 36, 123, 54, 45, > 55, 125, 44, 36, 53, 34, 44, 92, 10, 34, 36, 123, 56, 45, 57, 125, > 44, 36, 53, 34, 10, 103, 105, 109, 112, 95, 102, 105, 114, 101, 95, 101, > 100, 103, 101, 115, 32, 58, 10, 45, 102, 105, 114, 101, 95, 101, 100, 103, > 101, 115, 32, 36, 123, 49, 45, 55, 125, 32, 45, 114, 118, 10, 103, 105, > 109, 112, 95, 102, 105, 114, 101, 95, 101, 100, 103, 101, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 102, 105, > 114, 101, 95, 101, 100, 103, 101, 115, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 49, 44, 36, 54, 44, 48, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 108, 97, 118, 97, 108, 97, 109, 112, 98, 119, > 32, 58, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 40, 50, 53, > 53, 59, 49, 48, 48, 94, 54, 52, 59, 49, 54, 94, 49, 50, 56, 59, > 48, 41, 32, 45, 114, 91, 45, 49, 93, 32, 53, 49, 50, 44, 53, 49, > 50, 44, 49, 44, 51, 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, > 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 45, 114, > 32, 36, 52, 37, 44, 36, 52, 37, 44, 49, 44, 49, 44, 48, 32, 91, > 45, 49, 93, 120, 123, 36, 49, 45, 49, 125, 32, 45, 114, 97, 110, 100, > 91, 94, 48, 93, 32, 48, 44, 49, 32, 45, 115, 116, 101, 110, 99, 105, > 108, 91, 94, 48, 93, 32, 36, 53, 44, 48, 10, 45, 105, 102, 32, 36, > 51, 32, 91, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 111, > 114, 112, 104, 91, 94, 48, 93, 32, 36, 50, 44, 36, 54, 44, 48, 10, > 45, 115, 116, 101, 110, 99, 105, 108, 91, 94, 48, 93, 32, 36, 53, 44, > 48, 10, 45, 114, 91, 94, 48, 93, 32, 36, 119, 44, 36, 104, 44, 49, > 44, 49, 44, 51, 32, 45, 98, 91, 94, 48, 93, 32, 49, 48, 32, 45, > 103, 101, 91, 94, 48, 93, 32, 53, 48, 37, 32, 45, 42, 91, 94, 48, > 93, 32, 50, 53, 53, 10, 45, 114, 91, 94, 48, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 106, 91, 94, 48, > 93, 32, 91, 48, 93, 32, 45, 114, 109, 91, 48, 93, 10, 45, 105, 102, > 32, 36, 51, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 105, 102, 32, 123, 33, 36, 55, 125, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 110, 91, 45, 49, 93, > 32, 48, 44, 49, 32, 45, 42, 91, 94, 45, 49, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, > 112, 95, 108, 97, 118, 97, 108, 97, 109, 112, 98, 119, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 108, 97, 118, > 97, 108, 97, 109, 112, 98, 119, 32, 50, 44, 50, 44, 49, 44, 36, 52, > 44, 36, 53, 44, 36, 54, 44, 36, 55, 32, 45, 107, 91, 48, 93, 10, > 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 108, 105, 115, > 115, 97, 106, 111, 117, 115, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, > 99, 95, 108, 105, 115, 115, 97, 106, 111, 117, 115, 46, 112, 110, 103, 34, > 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, > 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 110, 105, 109, 97, > 116, 101, 32, 103, 105, 109, 112, 95, 108, 105, 115, 115, 97, 106, 111, 117, > 115, 44, 34, 36, 123, 53, 45, 50, 50, 125, 34, 44, 92, 10, 34, 36, > 123, 50, 51, 45, 52, 48, 125, 34, 44, 36, 49, 44, 36, 50, 44, 64, > 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, 110, 97, > 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, > 95, 108, 105, 115, 115, 97, 106, 111, 117, 115, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 103, 105, 109, 112, 95, > 108, 105, 115, 115, 97, 106, 111, 117, 115, 44, 34, 36, 123, 53, 45, 50, > 50, 125, 34, 44, 92, 10, 34, 36, 123, 50, 51, 45, 52, 48, 125, 34, > 44, 48, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, > 109, 111, 114, 112, 104, 111, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, > 99, 95, 109, 111, 114, 112, 104, 111, 46, 112, 110, 103, 34, 32, 45, 101, > 108, 115, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, > 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 44, 34, 36, 53, 44, > 36, 56, 44, 36, 54, 44, 36, 55, 44, 48, 44, 49, 34, 44, 92, 10, > 34, 36, 53, 44, 36, 57, 44, 36, 54, 44, 36, 55, 44, 48, 44, 49, > 34, 44, 36, 49, 44, 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, > 92, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, > 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 109, 111, 114, 112, 104, 111, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 44, 34, 36, 53, > 44, 36, 56, 44, 36, 54, 44, 36, 55, 44, 48, 44, 49, 34, 44, 92, > 10, 34, 36, 53, 44, 36, 57, 44, 36, 54, 44, 36, 55, 44, 48, 44, > 49, 34, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, > 114, 111, 100, 105, 108, 105, 117, 115, 32, 58, 10, 45, 105, 102, 32, 36, > 51, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, > 109, 105, 99, 95, 114, 111, 100, 105, 108, 105, 117, 115, 46, 112, 110, 103, > 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 110, 105, 109, > 97, 116, 101, 32, 114, 111, 100, 105, 108, 105, 117, 115, 44, 34, 36, 123, > 54, 45, 49, 48, 125, 44, 36, 53, 34, 44, 92, 10, 34, 36, 123, 49, > 49, 45, 49, 53, 125, 44, 36, 53, 34, 44, 36, 49, 44, 36, 50, 44, > 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, 110, > 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, > 101, 95, 114, 111, 100, 105, 108, 105, 117, 115, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 114, 111, 100, 105, 108, > 105, 117, 115, 44, 34, 36, 123, 54, 45, 49, 48, 125, 44, 36, 53, 34, > 44, 92, 10, 34, 36, 123, 49, 49, 45, 49, 53, 125, 44, 36, 53, 34, > 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 103, 108, > 111, 119, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, 103, 108, > 111, 119, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 103, 108, 111, 119, 44, 34, > 36, 53, 34, 44, 92, 10, 34, 36, 54, 34, 44, 36, 49, 44, 36, 50, > 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, > 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 103, 108, 111, 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 103, 108, 111, 119, 44, 34, 36, 53, > 34, 44, 92, 10, 34, 36, 54, 34, 10, 103, 105, 109, 112, 95, 98, 97, > 110, 100, 112, 97, 115, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 34, 45, 98, 97, 110, 100, 112, 97, 115, 115, 32, 36, 49, 37, 44, 36, > 50, 37, 34, 44, 36, 51, 44, 36, 52, 10, 45, 101, 110, 100, 108, 32, > 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 98, 97, 110, 100, 112, 97, 115, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 98, 97, 110, 100, 112, 97, 115, 115, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 100, 105, 115, 112, 108, 97, > 121, 95, 102, 102, 116, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 32, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 102, 102, 116, 10, 103, 105, 109, > 112, 95, 102, 111, 117, 114, 105, 101, 114, 32, 58, 10, 45, 105, 102, 32, > 36, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 10, 45, 102, 102, 116, 56, 50, 102, 108, 111, 97, 116, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 10, 45, 111, 110, 102, 97, 105, 108, 32, 45, 101, > 114, 114, 111, 114, 32, 34, 73, 109, 97, 103, 101, 32, 91, 34, 36, 62, > 34, 93, 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 115, 101, 101, 109, > 32, 116, 111, 32, 98, 101, 32, 97, 32, 70, 70, 84, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 46, 34, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 45, 102, 108, 111, 97, > 116, 50, 102, 102, 116, 56, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 102, 111, 117, 114, 105, 101, 114, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 103, 105, 109, > 112, 95, 110, 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 10, 45, > 101, 108, 115, 101, 32, 45, 100, 102, 102, 116, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 119, 97, 116, 101, 114, 109, 97, 114, 107, > 95, 102, 111, 117, 114, 105, 101, 114, 32, 58, 10, 45, 119, 97, 116, 101, > 114, 109, 97, 114, 107, 95, 102, 111, 117, 114, 105, 101, 114, 32, 34, 36, > 49, 34, 44, 36, 50, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, > 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 45, 115, 107, > 105, 112, 32, 44, 125, 34, 10, 45, 109, 32, 34, 95, 103, 105, 109, 112, > 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 95, 115, 116, 97, > 114, 116, 32, 58, 32, 36, 49, 34, 10, 45, 105, 102, 32, 123, 36, 51, > 62, 48, 125, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, > 111, 109, 95, 99, 111, 100, 101, 95, 115, 116, 97, 114, 116, 34, 44, 36, > 51, 44, 36, 50, 10, 45, 101, 108, 115, 101, 10, 45, 95, 103, 105, 109, > 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 10, 45, 105, > 102, 32, 36, 50, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 101, > 108, 115, 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 117, 110, 99, 111, > 109, 109, 97, 110, 100, 32, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, > 111, 109, 95, 99, 111, 100, 101, 95, 115, 116, 97, 114, 116, 10, 103, 105, > 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, > 36, 123, 49, 61, 45, 115, 107, 105, 112, 32, 44, 125, 34, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 108, 10, 95, 103, 99, > 112, 95, 97, 114, 103, 61, 34, 36, 49, 34, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, > 101, 32, 36, 95, 103, 99, 112, 95, 97, 114, 103, 44, 36, 123, 50, 45, > 45, 50, 125, 34, 44, 36, 45, 49, 10, 45, 111, 110, 102, 97, 105, 108, > 10, 45, 114, 109, 10, 45, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, > 111, 109, 95, 99, 111, 100, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 64, 123, 125, 10, 45, 115, 32, 45, 44, 123, 39, 42, 42, 42, 39, 125, > 32, 45, 107, 91, 45, 49, 93, 32, 45, 115, 32, 121, 44, 123, 45, 105, > 110, 116, 40, 36, 119, 47, 55, 41, 125, 32, 45, 105, 91, 49, 45, 45, > 50, 93, 32, 40, 49, 48, 41, 32, 45, 97, 32, 121, 10, 36, 119, 44, > 36, 104, 44, 49, 44, 51, 44, 56, 48, 10, 45, 116, 101, 120, 116, 95, > 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 34, 80, 114, 101, > 118, 105, 101, 119, 32, 101, 114, 114, 111, 114, 58, 34, 44, 53, 44, 53, > 44, 51, 52, 44, 50, 44, 49, 44, 50, 53, 53, 10, 45, 116, 101, 120, > 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 116, 125, 44, 53, 44, 53, 48, 44, 49, 51, 44, 49, 44, > 49, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 101, > 110, 100, 108, 10, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, > 95, 99, 111, 100, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 32, > 40, 123, 39, 34, 36, 42, 34, 39, 125, 41, 10, 95, 103, 105, 109, 112, > 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 32, 58, 10, 45, > 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, > 101, 95, 115, 116, 97, 114, 116, 10, 103, 105, 109, 112, 95, 100, 111, 95, > 110, 111, 116, 104, 105, 110, 103, 32, 58, 10, 103, 105, 109, 112, 95, 100, > 105, 115, 112, 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 36, > 50, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, > 100, 105, 115, 112, 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, > 109, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 36, 49, > 44, 48, 44, 50, 53, 53, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 105, 109, 112, 111, > 114, 116, 95, 105, 109, 97, 103, 101, 32, 58, 10, 45, 114, 109, 32, 45, > 105, 32, 34, 36, 49, 34, 32, 45, 115, 32, 122, 32, 45, 105, 102, 32, > 36, 50, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, > 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 115, 111, 108, 118, 101, 95, 109, 97, 122, > 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, > 45, 110, 111, 114, 109, 91, 45, 49, 93, 32, 45, 103, 101, 91, 45, 49, > 93, 32, 53, 48, 37, 10, 45, 105, 102, 32, 123, 33, 36, 49, 48, 125, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, > 32, 45, 45, 98, 91, 45, 49, 93, 32, 36, 53, 37, 32, 45, 42, 91, > 45, 50, 93, 32, 49, 101, 49, 48, 32, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, 104, > 91, 45, 49, 93, 32, 36, 49, 37, 44, 36, 50, 37, 44, 48, 44, 36, > 51, 37, 44, 36, 52, 37, 44, 48, 10, 45, 112, 111, 105, 110, 116, 99, > 108, 111, 117, 100, 91, 45, 49, 93, 32, 48, 32, 45, 100, 105, 108, 97, > 116, 101, 91, 45, 49, 93, 32, 36, 54, 32, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 48, > 10, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, 49, 93, > 32, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, 50, 53, 53, 44, 36, > 123, 55, 45, 57, 125, 44, 50, 53, 53, 10, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, 49, 93, 32, 48, 44, 48, > 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 44, 48, > 44, 48, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, > 36, 49, 37, 44, 36, 50, 37, 44, 53, 44, 53, 44, 48, 44, 49, 44, > 36, 123, 55, 45, 57, 125, 44, 50, 53, 53, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 36, 51, 37, 44, 36, 52, 37, 44, > 53, 44, 53, 44, 48, 44, 49, 44, 36, 123, 55, 45, 57, 125, 44, 50, > 53, 53, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, 45, 109, > 118, 91, 45, 50, 44, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 115, 111, 108, 118, 101, 95, 109, 97, 122, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 100, 114, 103, 98, > 97, 10, 45, 108, 105, 110, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 36, 51, 37, 44, 36, 52, 37, 44, 49, 44, 48, 120, 67, 67, 67, 67, > 67, 67, 67, 67, 44, 36, 123, 55, 45, 57, 125, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 51, > 44, 48, 44, 49, 44, 36, 123, 55, 45, 57, 125, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 51, > 44, 48, 44, 49, 44, 48, 120, 49, 44, 48, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 32, 36, 51, 37, 44, 36, 52, 37, 44, 51, 44, 51, 44, > 48, 44, 49, 44, 36, 123, 55, 45, 57, 125, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 32, 36, 51, 37, 44, 36, 52, 37, 44, 51, 44, 51, 44, > 48, 44, 49, 44, 48, 120, 49, 44, 48, 10, 103, 109, 105, 99, 111, 108, > 95, 108, 111, 103, 111, 95, 101, 110, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 108, 111, 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, > 117, 110, 100, 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, > 125, 32, 34, 32, 32, 32, 32, 45, 32, 79, 110, 108, 105, 110, 101, 32, > 45, 92, 110, 32, 32, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, 115, > 116, 114, 118, 101, 114, 125, 34, 32, 34, 93, 10, 103, 109, 105, 99, 111, > 108, 95, 97, 100, 106, 117, 115, 116, 95, 99, 111, 108, 111, 114, 115, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 97, 118, 103, 61, 123, 105, 97, 125, 32, 45, 45, 32, > 36, 97, 118, 103, 32, 45, 42, 32, 36, 49, 32, 45, 43, 32, 36, 97, > 118, 103, 10, 45, 43, 32, 123, 36, 50, 42, 50, 53, 54, 125, 10, 45, > 105, 102, 32, 123, 36, 51, 33, 61, 49, 125, 32, 45, 97, 112, 112, 108, > 121, 95, 103, 97, 109, 109, 97, 32, 123, 49, 48, 94, 36, 51, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 52, 37, 51, > 54, 48, 125, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, > 101, 32, 123, 109, 97, 120, 40, 51, 44, 115, 41, 43, 49, 45, 115, 37, > 50, 125, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 32, 45, 108, 91, 48, 93, 10, 45, 114, 103, 98, 50, 104, 115, 118, > 32, 45, 115, 104, 32, 48, 44, 48, 32, 45, 43, 91, 45, 49, 93, 32, > 36, 52, 32, 45, 37, 91, 45, 49, 93, 32, 51, 54, 48, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 45, > 101, 110, 100, 108, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 10, 103, 109, 105, 99, 111, 108, 95, 97, 100, 106, > 117, 115, 116, 95, 99, 111, 108, 111, 114, 115, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 109, 105, 99, 111, > 108, 95, 97, 100, 106, 117, 115, 116, 95, 99, 111, 108, 111, 114, 115, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 109, 105, 99, 111, 108, 95, 99, > 114, 111, 112, 32, 58, 10, 45, 122, 32, 36, 49, 37, 44, 36, 50, 37, > 44, 36, 51, 37, 44, 36, 52, 37, 10, 103, 109, 105, 99, 111, 108, 95, > 99, 114, 111, 112, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 36, 49, 37, 44, 36, 50, > 37, 44, 36, 51, 37, 44, 36, 52, 37, 44, 48, 46, 53, 44, 49, 50, > 56, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 36, 49, 37, > 44, 36, 50, 37, 44, 36, 51, 37, 44, 36, 52, 37, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 99, 105, 114, > 99, 108, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 49, 44, > 48, 44, 50, 53, 53, 44, 48, 32, 45, 99, 105, 114, 99, 108, 101, 32, > 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 49, 44, 48, 120, 70, 70, > 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 99, 105, 114, 99, 108, 101, > 32, 36, 51, 37, 44, 36, 50, 37, 44, 51, 44, 49, 44, 48, 44, 50, > 53, 53, 44, 48, 32, 45, 99, 105, 114, 99, 108, 101, 32, 36, 51, 37, > 44, 36, 50, 37, 44, 51, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, > 70, 70, 70, 44, 48, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 51, > 37, 44, 36, 52, 37, 44, 51, 44, 49, 44, 48, 44, 50, 53, 53, 44, > 48, 32, 45, 99, 105, 114, 99, 108, 101, 32, 36, 51, 37, 44, 36, 52, > 37, 44, 51, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, > 44, 48, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 49, 37, 44, 36, > 52, 37, 44, 51, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 32, 45, > 99, 105, 114, 99, 108, 101, 32, 36, 49, 37, 44, 36, 52, 37, 44, 51, > 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, > 103, 109, 105, 99, 111, 108, 95, 101, 113, 117, 97, 108, 105, 122, 101, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, 50, 53, 54, > 44, 48, 44, 50, 53, 53, 34, 44, 36, 49, 44, 49, 10, 103, 109, 105, > 99, 111, 108, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 109, 105, > 99, 111, 108, 95, 101, 113, 117, 97, 108, 105, 122, 101, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 103, 109, 105, 99, 111, 108, 95, 102, 108, 105, 112, > 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 109, 105, 114, 114, 111, > 114, 32, 121, 32, 45, 101, 108, 115, 101, 32, 45, 109, 105, 114, 114, 111, > 114, 32, 120, 32, 45, 101, 110, 100, 105, 102, 10, 103, 109, 105, 99, 111, > 108, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 58, 10, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 100, 104, 32, 54, 52, 48, 44, 52, 56, > 48, 44, 36, 49, 10, 103, 109, 105, 99, 111, 108, 95, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 100, 104, 32, 51, 50, 48, 44, > 50, 52, 48, 44, 36, 49, 10, 103, 109, 105, 99, 111, 108, 95, 114, 101, > 115, 105, 122, 101, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 48, 125, 10, 45, 114, 32, 36, 50, 37, 44, 36, 50, 37, 44, 49, 44, > 49, 48, 48, 37, 44, 54, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 49, 125, 10, 45, 114, 101, 115, 105, 122, 101, 50, 100, 120, 32, > 36, 51, 44, 54, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 115, 105, > 122, 101, 50, 100, 121, 32, 36, 52, 44, 54, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, 109, 105, 99, 111, > 108, 95, 114, 111, 116, 97, 116, 101, 32, 58, 10, 45, 105, 102, 32, 36, > 50, 10, 45, 114, 111, 116, 97, 116, 101, 32, 123, 57, 48, 42, 114, 111, > 117, 110, 100, 40, 36, 49, 47, 57, 48, 41, 125, 44, 48, 44, 48, 10, > 45, 101, 108, 115, 101, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, > 114, 111, 116, 97, 116, 101, 32, 36, 49, 44, 49, 44, 36, 51, 10, 45, > 101, 110, 100, 105, 102, 10, 95, 103, 109, 105, 99, 111, 108, 95, 114, 103, > 98, 95, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 32, 58, > 10, 45, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, 100, > 32, 45, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, 100, 32, 45, 112, > 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 43, 51, 100, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 52, 10, 45, 45, 115, 110, 97, 112, 115, 104, > 111, 116, 51, 100, 91, 48, 93, 32, 36, 49, 44, 48, 46, 57, 44, 50, > 53, 53, 10, 45, 114, 51, 100, 91, 48, 93, 32, 48, 44, 49, 44, 48, > 46, 50, 44, 57, 48, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 48, 93, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 45, 45, 32, > 50, 53, 53, 10, 45, 114, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, > 125, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 32, 45, 43, 32, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 32, > 53, 44, 53, 44, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 32, 49, > 44, 49, 44, 48, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, > 101, 115, 32, 44, 10, 103, 109, 105, 99, 111, 108, 95, 114, 103, 98, 95, > 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 32, 58, 10, 45, > 95, 103, 109, 105, 99, 111, 108, 95, 114, 103, 98, 95, 100, 105, 115, 116, > 114, 105, 98, 117, 116, 105, 111, 110, 32, 53, 49, 50, 10, 103, 109, 105, > 99, 111, 108, 95, 114, 103, 98, 95, 100, 105, 115, 116, 114, 105, 98, 117, > 116, 105, 111, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 95, 103, 109, 105, 99, 111, 108, 95, 114, 103, 98, 95, 100, 105, 115, 116, > 114, 105, 98, 117, 116, 105, 111, 110, 32, 51, 50, 48, 10, 103, 109, 105, > 99, 111, 108, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 108, 101, 118, > 97, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, > 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 36, 123, 50, > 45, 51, 125, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 103, 105, 109, > 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 44, 34, 36, 123, 52, 45, > 53, 125, 44, 36, 123, 55, 45, 49, 54, 125, 44, 36, 54, 34, 44, 92, > 10, 34, 36, 123, 52, 45, 53, 125, 44, 36, 123, 49, 55, 45, 50, 54, > 125, 44, 36, 54, 34, 44, 36, 49, 10, 45, 111, 32, 36, 95, 111, 117, > 116, 112, 117, 116, 46, 103, 105, 102, 44, 49, 48, 10, 45, 114, 109, 10, > 103, 109, 105, 99, 111, 108, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, > 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 49, 44, 49, 44, 48, 44, 92, 34, > 92, 34, 44, 36, 123, 50, 45, 45, 49, 125, 10, 103, 109, 105, 99, 111, > 108, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 120, 116, 114, 117, 100, > 101, 51, 100, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, > 97, 116, 101, 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, 32, 36, 49, > 44, 49, 44, 48, 44, 92, 34, 92, 34, 44, 36, 123, 50, 45, 45, 49, > 125, 10, 103, 109, 105, 99, 111, 108, 95, 97, 110, 105, 109, 97, 116, 101, > 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 36, 49, 44, 49, 44, 48, 44, 92, 34, 92, 34, > 44, 36, 123, 50, 45, 45, 49, 125, 10, 103, 109, 105, 99, 111, 108, 95, > 97, 110, 105, 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, 98, 106, > 101, 99, 116, 51, 100, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, > 105, 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, > 116, 51, 100, 32, 36, 49, 44, 49, 44, 48, 44, 92, 34, 92, 34, 44, > 36, 123, 50, 45, 45, 49, 125, 10, 103, 109, 105, 99, 111, 108, 95, 97, > 110, 105, 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, > 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 105, 109, 97, > 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 36, 49, 44, 49, 44, 48, 44, 92, 34, 92, 34, 44, 36, > 123, 50, 45, 45, 49, 125, 0 }; > >unsigned int size_data_gmic_def = sizeof(data_gmic_def); ># 1882 "gmic.cpp" 2 > > > > > >using namespace cimg_library; ># 1901 "gmic.cpp" >inline bool _gmic_image_arg(const unsigned int ind, const CImg<unsigned int>& selection) { > for (int l = 0; l<(int)((selection)._height); ++l) if (selection[l]==ind) return true; > return false; >} > > > > >inline bool gmic_check_filename(const char *const filename) { > bool res = false; > > > > > try { > std::FILE *file = cimg::fopen(filename,"r"); > if (file) { res = true; cimg::fclose(file); } > } catch (CImgException&) {} > > return res; >} > > >struct _gmic_mutex { > > > > > > > pthread_mutex_t mutex[256]; > _gmic_mutex() { for (unsigned int i = 0; i<256; ++i) pthread_mutex_init(&mutex[i],0); } > void lock(const unsigned int n) { pthread_mutex_lock(&mutex[n]); } > void unlock(const unsigned int n) { pthread_mutex_unlock(&mutex[n]); } > > > > > >}; >inline _gmic_mutex& gmic_mutex() { static _gmic_mutex val; return val; } > > >inline const char *gmic_ellipsize_arg(const char *const argument, CImg<char>& argument_text) { > if (argument_text) return argument_text; > const unsigned int l = std::strlen(argument); > if (l>=72) { > argument_text.assign(72); > std::memcpy(argument_text.data(),argument,32); > std::memcpy(argument_text.data()+32," ... ",5); > std::memcpy(argument_text.data()+37,argument+l-34,35); > } > return argument_text?argument_text:argument; >} ># 2099 "gmic.cpp" >inline unsigned int gmic_hashcode(const char *const str, const bool is_variable) { > if (!str) return 0; > unsigned int hash = 0; > if (is_variable) { > if (*str=='_') return 255; > for (const char *s = str; *s; ++s) hash+=*s; > return hash%255; > } > for (const char *s = str; *s; ++s) hash+=*s; > return hash&255; >} > > > >inline bool gmic_command_has_arguments(const char *const command) { > if (!command || !*command) return false; > for (const char *s = std::strchr(command,'$'); s; s = std::strchr(s,'$')) { > const char c = *(++s); > if (c=='#' || > c=='*' || > c=='=' || > (c>'0' && c<='9') || > (c=='-' && *(s+1)>'0' && *(s+1)<='9') || > (c=='\"' && *(s+1)=='*' && *(s+2)=='\"') || > (c=='{' && (*(s+1)=='^' || > (*(s+1)>'0' && *(s+1)<='9') || > (*(s+1)=='-' && *(s+2)>'0' && *(s+2)<='9')))) return true; > } > return false; >} > > > >inline const char* gmic_basename(const char *const s) { > if (!s) return s; > const unsigned int l = (unsigned int)std::strlen(s); > if (*s=='[' && (s[l-1]==']' || s[l-1]=='.')) return s; > const char *p = 0; > for (const char *np = s; np>=s && (p=np); np = std::strchr(np,'/')+1) {} > return p; >} > > > >template<typename T> >struct st_gmic_parallel { > gmic gmic_instance; > CImgList<T> *images; > CImgList<char> *images_names, commands_line; > unsigned int variables_sizes[256], wait_mode; > gmic_exception exception; > > > pthread_t thread_id; > > > > >}; > >template<typename T> > >static void *gmic_parallel(void *arg) > > > >{ > st_gmic_parallel<T> &st = *(st_gmic_parallel<T>*)arg; > unsigned int pos = 0; > try { > st.gmic_instance._parse(st.commands_line,pos,*st.images,*st.images_names,st.variables_sizes); > } catch (gmic_exception &e) { > st.exception._command_help.assign(e._command_help); > st.exception._message.assign(e._message); > } > > pthread_exit(0); > > return 0; >} > > > > >static int _gmic_levenshtein(const char *const s, const char *const t, > CImg<int>& d, const int i, const int j) { > const int ls = d.width()-1, lt = d.height()-1; > if (d(i,j)>=0) return d(i,j); > int x; > if (i==ls) x = lt - j; > else if (j==lt) x = ls - i; > else if (s[i]==t[j]) x = _gmic_levenshtein(s,t,d,i+1,j+1); > else { > x = _gmic_levenshtein(s,t,d,i+1,j+1); > int y; > if ((y=_gmic_levenshtein(s,t,d,i,j+1))<x) x = y; > if ((y=_gmic_levenshtein(s,t,d,i+1,j))<x) x = y; > ++x; > } > return d(i,j) = x; >} > >inline int gmic_levenshtein(const char *const s, const char *const t) { > const char *const ns = s?s:"", *const nt = t?t:""; > const int ls = std::strlen(ns), lt = std::strlen(nt); > if (!ls) return lt; else if (!lt) return ls; > CImg<int> d(1+ls,1+lt,1,1,-1); > return _gmic_levenshtein(ns,nt,d,0,0); >} > > > > > >gmic::gmic():commands(new CImgList<char>[256]), commands_names(new CImgList<char>[256]), commands_has_arguments(new CImgList<char>[256]), _variables(new CImgList<char>[256]), _variables_names(new CImgList<char>[256]), variables(new CImgList<char>*[256]), variables_names(new CImgList<char>*[256]) {} > >gmic::~gmic() { > debug("%sEnd G'MIC instance.%s\n",cimg::t_bold,cimg::t_normal); > delete[] commands; > delete[] commands_names; > delete[] commands_has_arguments; > delete[] _variables; > delete[] _variables_names; > delete[] variables; > delete[] variables_names; >} > >gmic::gmic(const char *const commands_line, const char *const custom_commands, > const bool include_default_commands, float *const p_progress, int *const p_cancel): > commands(new CImgList<char>[256]), commands_names(new CImgList<char>[256]), commands_has_arguments(new CImgList<char>[256]), _variables(new CImgList<char>[256]), _variables_names(new CImgList<char>[256]), variables(new CImgList<char>*[256]), variables_names(new CImgList<char>*[256]) { > CImgList<float> images; > CImgList<char> images_names; > _gmic(commands_line,images,images_names,custom_commands,include_default_commands, > p_progress,p_cancel); >} > > > >CImg<char> gmic::scope2string(const CImg<unsigned int> *const scope_selection) const { > if (scope_selection && !*scope_selection) return CImg<char>("./",3); > CImgList<char> input_scope; > if (!scope_selection) input_scope.assign(scope,true); > else for (int l = 0; l<(int)((*scope_selection)._height); ++l) input_scope.insert(scope[(*scope_selection)[l]],~0U,true); > CImgList<char> res; > const unsigned int siz = (unsigned int)input_scope.size(); > if (siz<=8) res.assign(input_scope,false); > else { > res.assign(8); > res[0].assign(input_scope[0],false); > res[1].assign(input_scope[1],false); > res[2].assign(input_scope[2],false); > res[3].assign("..",3); > res[4].assign(input_scope[siz-4],false); > res[5].assign(input_scope[siz-3],false); > res[6].assign(input_scope[siz-2],false); > res[7].assign(input_scope[siz-1],false); > } > for (int l = 0; l<(int)(res)._width; ++l) res[l].back() = '/'; > CImg<char>::vector(0).move_to(res); > return res>'x'; >} > >CImg<char> gmic::scope2string() const { > return scope2string(0); >} > >CImg<char> gmic::scope2string(const CImg<unsigned int>& scope_selection) const { > return scope2string(&scope_selection); >} > > > >CImgList<char> gmic::commands_line_to_CImgList(const char *const commands_line) { > if (!commands_line || !*commands_line) return CImgList<char>(); > bool is_dquoted = false; > const char *ptrs0 = commands_line; > while (*ptrs0==' ') ++ptrs0; > CImg<char> item(std::strlen(ptrs0)+1); > CImgList<char> items; > char *ptrd = item.data(), c = 0; > for (const char *ptrs = ptrs0; *ptrs; ++ptrs) { > c = *ptrs; > if (c=='\\') { > c = *(++ptrs); > if (!c) { c = '\\'; --ptrs; } > else if (c=='$') c = _dollar; > else if (c=='{') c = _lbrace; > else if (c=='}') c = _rbrace; > else if (c==',') c = _comma; > else if (c=='\"') c = _dquote; > else if (c=='@') c = _arobace; > else if (c==' ') c = ' '; > else *(ptrd++) = '\\'; > *(ptrd++) = c; > } else if (is_dquoted) { > if (c=='\"') is_dquoted = false; > else if (c==1) while (c && c!=' ') c = *(++ptrs); > else *(ptrd++) = c=='$'?_dollar:c=='{'?_lbrace:c=='}'?_rbrace: > c==','?_comma:c=='@'?_arobace:c; > } else { > if (c=='\"') is_dquoted = true; > else if (c==' ') { > *ptrd = 0; CImg<char>(item.data(),ptrd - item.data() + 1).move_to(items); > ptrd = item.data(); > ++ptrs; while (*ptrs==' ') ++ptrs; ptrs0 = ptrs--; > } else *(ptrd++) = c; > } > } > if (is_dquoted) { > CImg<char> str; CImg<char>::string(commands_line).move_to(str); > char *ptrd = str,c = 0; > bool _is_debug_infos = false; > for (char *ptrs = (str)._data, *_maxptrs = (str)._data + (str).size(); ptrs<_maxptrs; ++ptrs) { > c = *ptrs; > if (c!=1) *(ptrd++) = c; > else { > unsigned int _debug_filename = ~0U, _debug_line = ~0U; > if (!_is_debug_infos && std::sscanf(ptrs+1,"%x,%x",&_debug_line,&(_debug_filename=0))) { > debug_filename = _debug_filename; > debug_line = _debug_line; > _is_debug_infos = is_debug_infos = true; > } > while (c && c!=' ') c = *(++ptrs); > } > } *ptrd = 0; > error("Invalid command line: Double quotes are not closed, in expression '%s'.", > str.data()); > } > if (ptrd!=item.data() && c!=' ') { > *ptrd = 0; CImg<char>(item.data(),ptrd - item.data() + 1).move_to(items); > } > if (is_debug) { > debug("Decompose command line into %u items: ",items.size()); > for (int l = 0; l<(int)(items)._width; ++l) { > if (items(l,0)==1) { > if (items(l,1)) debug(" item[%u] = (debug info 0x%s)",l,items[l].data()+1); > else debug(" item[%u] = (debug info)",l); > } else debug(" item[%u] = '%s'",l,items[l].data()); > } > } > return items; >} > > > >gmic& gmic::print(const char *format, ...) { > if (verbosity<0 && !is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(16384,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > std::fprintf(cimg::output(), > "[gmic]%s %s", > scope2string().data(),message.data()); > std::fflush(cimg::output()); > return *this; >} > > > >gmic& gmic::error(const char *const format, ...) { > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (verbosity>=0 || is_debug) { > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > std::fprintf(cimg::output(),"[gmic]%s %s*** Error *** %s%s", > scope2string().data(),cimg::t_red,message.data(),cimg::t_normal); > std::fflush(cimg::output()); > } > > > CImg<char> full_message(512+message.width(),1,1,1,0); > if (debug_filename<commands_files.size() && debug_line!=~0U) > snprintf(full_message,full_message.width(), > "*** Error in %s (file '%s', %sline %u) *** %s", > scope2string().data(),commands_files[debug_filename].data(), > is_debug_infos?"":"call from ",debug_line,message.data()); > else snprintf(full_message,full_message.width(), > "*** Error in %s *** %s", > scope2string().data(),message.data()); > CImg<char>::string(full_message).move_to(status); > message.assign(); > throw gmic_exception(0,status); > return *this; >} > > > >gmic& gmic::debug(const char *format, ...) { > if (!is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > std::fprintf(cimg::output(), > "%s<gmic>%s ", > cimg::t_green,scope2string().data()); > for (char *s = message; *s; ++s) { > char c = *s; > if (c<' ') switch (c) { > case _dollar : std::fprintf(cimg::output(),"\\$"); break; > case _lbrace : std::fprintf(cimg::output(),"\\{"); break; > case _rbrace : std::fprintf(cimg::output(),"\\}"); break; > case _comma : std::fprintf(cimg::output(),"\\,"); break; > case _dquote : std::fprintf(cimg::output(),"\\\""); break; > case _arobace : std::fprintf(cimg::output(),"\\@"); break; > default : std::fputc(c,cimg::output()); > } > else std::fputc(c,cimg::output()); > } > std::fprintf(cimg::output(), > "%s", > cimg::t_normal); > std::fflush(cimg::output()); > return *this; >} > > > >gmic& gmic::add_commands(const char *const data_commands, > CImgList<char> commands_names[256], > CImgList<char> commands[256], > CImgList<char> commands_has_arguments[256], > const char *const commands_file) { > if (!data_commands || !*data_commands) return *this; > CImg<char> com(256*1024), line(256*1024); > char mac[256] = { 0 }, debug_info[32] = { 0 }; > unsigned int pos[256] = { 0 }, line_number = 1; > bool is_last_slash = false, _is_last_slash = false, is_newline = false, was_dquotes = false; > int ind = -1, l_debug_info = 0; > char sep = 0; > if (commands_file) CImg<char>::string(commands_file).move_to(commands_files); > > for (const char *data = data_commands; *data; is_last_slash = _is_last_slash, > line_number+=is_newline?1:0) { > > > char *_line = line, *const line_end = line.end(); > while (*data!='\n' && *data && _line<line_end) *(_line++) = *(data++); > if (_line<line_end) *_line = 0; else *(line_end-1) = 0; > if (*data=='\n') { is_newline = true; ++data; } else is_newline = false; > > > for (_line = line; *_line; ++_line) if ((unsigned char)*_line<' ') *_line = ' '; > _line = line; if (*_line=='#') *_line = 0; else do { > if ((_line=std::strchr(_line,'#')) && *(_line-1)==' ') { *--_line = 0; break; } > } while (_line++); > > > char *linee = line.data() + std::strlen(line) - 1; > while (linee>=line && *linee==' ') --linee; *(linee+1) = 0; > char *lines = line; while (*lines==' ') ++lines; > if (!*lines) continue; > > > _is_last_slash = false; > for (_line = linee; *_line=='\\' && _line>=lines; --_line) _is_last_slash = !_is_last_slash; > if (_is_last_slash) *(linee--) = 0; > if (!*lines) continue; > *mac = *com = 0; > > if (!is_last_slash && std::strchr(lines,':') && > std::sscanf(lines,"%255[a-zA-Z0-9_] %c %262143[^\n]",mac,&sep,com.data())>=2 && > (*lines<'0' || *lines>'9') && sep==':') { > ind = gmic_hashcode(mac,false); > CImg<char>::string(mac).move_to(commands_names[ind],pos[ind]); > CImg<char> body = CImg<char>::string(com); > CImg<char>::vector((char)gmic_command_has_arguments(body)). > move_to(commands_has_arguments[ind],pos[ind]); > if (commands_file) { > if (commands_files.width()<2) > l_debug_info = snprintf(debug_info+1,sizeof(debug_info)-2,"%x",line_number); > else > l_debug_info = snprintf(debug_info+1,sizeof(debug_info)-2,"%x,%x", > line_number,commands_files.width()-1); > debug_info[0] = 1; debug_info[l_debug_info+1] = ' '; > ((CImg<char>(debug_info,l_debug_info+2,1,1,1,true),body)>'x'). > move_to(commands[ind],pos[ind]++); > } else body.move_to(commands[ind],pos[ind]++); > } else { > if (ind<0) error("Command '-command': Syntax error in expression '%s'.",lines); > const unsigned int p = pos[ind] - 1; > if (!is_last_slash) commands[ind][p].back() = ' '; > else --(commands[ind][p]._width); > const CImg<char> body = CImg<char>(lines,linee - lines + 2); > commands_has_arguments[ind](p,0) |= (char)gmic_command_has_arguments(body); > if (commands_file && !is_last_slash) { > const bool is_dquotes = (bool)std::strchr(body,'\"'); > if (!is_dquotes && !was_dquotes) > ((commands[ind][p],CImg<char>(2,1,1,1,1,' '),body)>'x').move_to(commands[ind][p]); > else { > if (commands_files.width()<2) > l_debug_info = snprintf(debug_info+1,sizeof(debug_info)-2,"%x",line_number); > else > l_debug_info = snprintf(debug_info+1,sizeof(debug_info)-2,"%x,%x", > line_number,commands_files.width()-1); > debug_info[0] = 1; debug_info[l_debug_info+1] = ' '; > ((commands[ind][p],CImg<char>(debug_info,l_debug_info+2,1,1,1,true),body)>'x'). > move_to(commands[ind][p]); > } > was_dquotes = is_dquotes; > } else commands[ind][p].append(body,'x'); > } > } > > if (is_debug) { > CImg<unsigned int> hdist(256); > unsigned int nb_commands = 0; > for (int i = 0; i<(int)((hdist)._width); ++i) { hdist[i] = commands[i].size(); nb_commands+=commands[i].size(); } > const CImg<double> st = hdist.get_stats(); > debug("Distribution of command hashes: [ %s ], min = %u, max = %u, mean = %g, " > "std = %g (%u commands).", > hdist.value_string().data(),(unsigned int)st[0],(unsigned int)st[1],st[2], > std::sqrt(st[3]),nb_commands); > } > return *this; >} > > > >gmic& gmic::add_commands(std::FILE *const file, > const char *const filename, > CImgList<char> commands_names[256], > CImgList<char> commands[256], > CImgList<char> commands_has_arguments[256], > const bool add_debug_infos) { > if (!file) return *this; > > > try { > CImg<char> buffer; > buffer.load_cimg(file); > add_commands(buffer.data(),commands_names,commands,commands_has_arguments, > add_debug_infos?(filename?filename:"(FILE*)"):0); > } catch (...) { > std::rewind(file); > std::fseek(file,0,2); > const long siz = std::ftell(file); > std::rewind(file); > if (siz>0) { > CImg<char> buffer(siz+1); > if (std::fread(buffer.data(),sizeof(char),siz,file)) { > buffer[siz] = 0; > add_commands(buffer.data(),commands_names,commands,commands_has_arguments, > add_debug_infos?(filename?filename:"(FILE*)"):0); > } > } > } > return *this; >} > > > >CImg<unsigned int> gmic::selection2cimg(const char *const string, const unsigned int indice_max, > const CImgList<char>& names, > const char *const command, const bool is_selection, > const bool allow_new_name, CImg<char> &new_name) { > if (string && !*string) return CImg<unsigned int>(); > if (!string || (*string=='^' && !string[1])) { > if (indice_max) return CImg<unsigned int>::sequence(indice_max,0,indice_max-1); > else return CImg<unsigned int>(); > } > const char *const stype = is_selection?"selection":"subset"; > const int > ctypel = is_selection?'[':'{', > ctyper = is_selection?']':'}'; > CImg<bool> is_selected(1,indice_max,1,1,false); > > bool is_inverse = *string=='^'; > const char *it = string + (is_inverse?1:0); > for (bool stopflag = false; !stopflag; ) { > CImg<char> name(256), item; > float ind0 = 0, ind1 = 0, step = 1; > int iind0 = 0, iind1 = 0; > bool is_label = false; > char sep = 0; > > const char *const it_comma = std::strchr(it,','); > if (it_comma) { item.assign(it,it_comma-it+1); item.back() = 0; it = it_comma + 1; } > else { CImg<char>::string(it).move_to(item); stopflag = true; } > > char end, *const it_colon = std::strchr(item,':'); > if (it_colon) { > *it_colon = 0; > if (std::sscanf(it_colon+1,"%f%c",&step,&end)!=1 || step<=0) > error("Command '%s': Invalid %s %c%s%c (syntax error after colon ':').", > command,stype,ctypel,string,ctyper); > } > if (!*item) { > if (is_inverse) { iind0 = 0; iind1 = -1; is_inverse = false; } > else continue; > } else if (std::sscanf(item,"%f%c",&ind0,&end)==1) { > iind1 = iind0 = (int)cimg::round(ind0); > } else if (std::sscanf(item,"%f-%f%c",&ind0,&ind1,&end)==2) { > iind0 = (int)cimg::round(ind0); > iind1 = (int)cimg::round(ind1); > } else if (std::sscanf(item,"%255[a-zA-Z0-9_]%c",name.data(),&end)==1 && > (*name<'0' || *name>'9')) { > for (int l = 0; l<(int)(names)._width; ++l) if (names[l] && !std::strcmp(names[l],name)) { > is_selected(l) = true; is_label = true; > } > if (!is_label) { > if (allow_new_name && !new_name) { > iind0 = iind1 = -1; > CImg<char>::string(name).move_to(new_name); > } else error("Command '%s': Invalid %s %c%s%c (undefined label '%s').", > command,stype,ctypel,string,ctyper,name.data()); > } > } else if (std::sscanf(item,"%f%c%c",&ind0,&sep,&end)==2 && sep=='%') { > iind1 = iind0 = (int)cimg::round(ind0*((int)indice_max-1)/100)-(ind0<0?1:0); > } else if (std::sscanf(item,"%f%%-%f%c%c",&ind0,&ind1,&sep,&end)==3 && sep=='%') { > > iind0 = (int)cimg::round(ind0*((int)indice_max-1)/100)-(ind0<0?1:0); > iind1 = (int)cimg::round(ind1*((int)indice_max-1)/100)-(ind1<0?1:0); > } else if (std::sscanf(item,"%f%%-%f%c",&ind0,&ind1,&end)==2) { > > iind0 = (int)cimg::round(ind0*((int)indice_max-1)/100)-(ind0<0?1:0);; > iind1 = (int)cimg::round(ind1); > } else if (std::sscanf(item,"%f-%f%c%c",&ind0,&ind1,&sep,&end)==3 && sep=='%') { > > iind0 = (int)cimg::round(ind0); > iind1 = (int)cimg::round(ind1*((int)indice_max-1)/100)-(ind1<0?1:0);; > } else error("Command '%s': Invalid %s %c%s%c.", > command,stype,ctypel,string,ctyper); > > if (!indice_max) error("Command '%s': Invalid %s %c%s%c (no data available).", > command,stype,ctypel,string,ctyper); > if (!is_label) { > int > uind0 = iind0<0?iind0+indice_max:iind0, > uind1 = iind1<0?iind1+indice_max:iind1; > if (uind0>uind1) { cimg::swap(uind0,uind1); cimg::swap(iind0,iind1); } > if (uind0<0 || uind0>=(int)indice_max) > error("Command '%s': Invalid %s %c%s%c (contains starting indice '%d', " > "not in range -%u..%u).", > command,stype,ctypel,string,ctyper,iind0,indice_max,indice_max-1); > if (uind1<0 || uind1>=(int)indice_max) > error("Command '%s': Invalid %s %c%s%c (contains ending indice '%d', " > "not in range -%u..%u).", > command,stype,ctypel,string,ctyper,iind1,indice_max,indice_max-1); > const int istep = (int)cimg::round(step); > for (int l = uind0; l<=uind1; l+=istep) is_selected[l] = true; > } > } > unsigned int indice = 0; > for (bool *p = (is_selected)._data, *_maxp = (is_selected)._data + (is_selected).size(); p<_maxp; ++p) if (*p) ++indice; > CImg<unsigned int> selection(1,is_inverse?indice_max-indice:indice); > indice = 0; > if (is_inverse) { for (int l = 0; l<(int)((is_selected)._height); ++l) if (!is_selected[l]) selection[indice++] = l; } > else for (int l = 0; l<(int)((is_selected)._height); ++l) if (is_selected[l]) selection[indice++] = l; > return selection; >} > > > >CImg<char> gmic::selection2string(const CImg<unsigned int>& selection, > const CImgList<char>& images_names, > const bool display_indices) const { > CImg<char> res(1024); > if (display_indices) { > switch (selection.height()) { > case 0: snprintf(res.data(),res.width()," []"); break; > case 1: snprintf(res.data(),res.width()," [%u]", > selection[0]); break; > case 2: snprintf(res.data(),res.width(),"s [%u,%u]", > selection[0],selection[1]); break; > case 3: snprintf(res.data(),res.width(),"s [%u,%u,%u]", > selection[0],selection[1],selection[2]); break; > case 4: snprintf(res.data(),res.width(),"s [%u,%u,%u,%u]", > selection[0],selection[1],selection[2],selection[3]); break; > case 5: snprintf(res.data(),res.width(),"s [%u,%u,%u,%u,%u]", > selection[0],selection[1],selection[2],selection[3],selection[4]); break; > case 6: snprintf(res.data(),res.width(),"s [%u,%u,%u,%u,%u,%u]", > selection[0],selection[1],selection[2], > selection[3],selection[4],selection[5]); break; > case 7: snprintf(res.data(),res.width(),"s [%u,%u,%u,%u,%u,%u,%u]", > selection[0],selection[1],selection[2],selection[3], > selection[4],selection[5],selection[6]); break; > default: snprintf(res.data(),res.width(),"s [%u,%u,%u,..,%u,%u,%u]", > selection[0],selection[1],selection[2], > selection[selection.height()-3], > selection[selection.height()-2], > selection[selection.height()-1]); > } > return res; > } > > switch (selection.height()) { > case 0: > *res = 0; > break; > case 1: > snprintf(res.data(),res.width(),"%s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":""); > break; > case 2: > snprintf(res.data(),res.width(),"%s%s, %s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":"", > gmic_basename(images_names[selection[1]].data()), > images_names[selection[1]].back()?"*":""); > break; > case 3: > snprintf(res.data(),res.width(),"%s%s, %s%s, %s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":"", > gmic_basename(images_names[selection[1]].data()), > images_names[selection[1]].back()?"*":"", > gmic_basename(images_names[selection[2]].data()), > images_names[selection[2]].back()?"*":""); > break; > case 4: > snprintf(res.data(),res.width(),"%s%s, %s%s, %s%s, %s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":"", > gmic_basename(images_names[selection[1]].data()), > images_names[selection[1]].back()?"*":"", > gmic_basename(images_names[selection[2]].data()), > images_names[selection[2]].back()?"*":"", > gmic_basename(images_names[selection[3]].data()), > images_names[selection[3]].back()?"*":""); > break; > default: > snprintf(res.data(),res.width(),"%s%s, .., %s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":"", > gmic_basename(images_names[selection.back()].data()), > images_names[selection.back()].back()?"*":""); > } > return res; >} > > > > > >template<typename T> >gmic& gmic::print(const CImgList<T>& list, const CImg<unsigned int> *const scope_selection, > const char *format, ...) { > if (verbosity<0 && !is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(16384,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > if (!scope_selection || *scope_selection) > std::fprintf(cimg::output(), > "[gmic]-%u%s %s", > list.size(),scope2string(scope_selection).data(),message.data()); > else std::fprintf(cimg::output(),"%s",message.data()); > std::fflush(cimg::output()); > return *this; >} > > > >template<typename T> >gmic& gmic::warn(const CImgList<T>& list, const CImg<unsigned int> *const scope_selection, > const char *format, ...) { > if (verbosity<0 && !is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > if (!scope_selection || *scope_selection) > std::fprintf(cimg::output(), > "[gmic]-%u%s %s*** Warning *** %s%s", > list.size(),scope2string(scope_selection).data(), > cimg::t_red,message.data(),cimg::t_normal); > else std::fprintf(cimg::output(), > "%s*** Warning *** %s%s", > cimg::t_red,message.data(),cimg::t_normal); > std::fflush(cimg::output()); > return *this; >} > > > >template<typename T> >gmic& gmic::error(const CImgList<T>& list, const CImg<unsigned int> *const scope_selection, > const char *const command, const char *const format, ...) { > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (verbosity>=0 || is_debug) { > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > if (!scope_selection || *scope_selection) > std::fprintf(cimg::output(), > "[gmic]-%u%s %s*** Error *** %s%s", > list.size(),scope2string(scope_selection).data(), > cimg::t_red,message.data(),cimg::t_normal); > else std::fprintf(cimg::output(),"%s",message.data()); > std::fflush(cimg::output()); > } > > > CImg<char> full_message(512+message.width(),1,1,1,0); > if (debug_filename<commands_files.size() && debug_line!=~0U) > snprintf(full_message,full_message.width(), > "*** Error in %s (file '%s', %sline %u) *** %s", > scope2string().data(),commands_files[debug_filename].data(), > is_debug_infos?"":"call from ",debug_line,message.data()); > else snprintf(full_message,full_message.width(), > "*** Error in %s *** %s", > scope2string().data(),message.data()); > CImg<char>::string(full_message).move_to(status); > message.assign(); > throw gmic_exception(command,status); > return *this; >} > > > > > >template<typename T> >gmic& gmic::debug(const CImgList<T>& list, const char *format, ...) { > if (!is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > std::fprintf(cimg::output(), > "%s<gmic>-%u%s ", > cimg::t_green,list.size(),scope2string().data()); > for (char *s = message; *s; ++s) { > char c = *s; > if (c<' ') { > switch (c) { > case _dollar : std::fprintf(cimg::output(),"\\$"); break; > case _lbrace : std::fprintf(cimg::output(),"\\{"); break; > case _rbrace : std::fprintf(cimg::output(),"\\}"); break; > case _comma : std::fprintf(cimg::output(),"\\,"); break; > case _dquote : std::fprintf(cimg::output(),"\\\""); break; > case _arobace : std::fprintf(cimg::output(),"\\@"); break; > default : std::fputc(c,cimg::output()); > } > } else std::fputc(c,cimg::output()); > } > std::fprintf(cimg::output(), > "%s", > cimg::t_normal); > std::fflush(cimg::output()); > return *this; >} > > > >template<typename T> >inline bool gmic_is_valid_pointer(const T *const ptr) { > > const int result = access((const char*)ptr,0); > if (result==-1 && (*__errno_location ())==14) return false; > > > > return true; >} > >template<typename T> >CImg<T>& gmic::check_image(const CImgList<T>& list, CImg<T>& img) { > check_image(list,(const CImg<T>&)img); > return img; >} > >template<typename T> >const CImg<T>& gmic::check_image(const CImgList<T>& list, const CImg<T>& img) { ># 2930 "gmic.cpp" > cimg::unused(list); > > return img; >} > > > > > >template<typename T> >gmic& gmic::remove_images(CImgList<T> &images, CImgList<char> &images_names, > const CImg<unsigned int>& selection, > const unsigned int start, const unsigned int end) { > if (start==0 && end==(unsigned int)selection.height()-1 && selection.height()==images.width()) { > images.assign(); > images_names.assign(); > } else for (int l = (int)end; l>=(int)start; ) { > unsigned int eind = selection[l--], ind = eind; > while (l>=(int)start && selection[l]==ind-1) ind = selection[l--]; > images.remove(ind,eind); images_names.remove(ind,eind); > } > return *this; >} > > > >template<typename T> >gmic::gmic(const int argc, const char *const *const argv, > CImgList<T>& images, CImgList<char>& images_names, > const char *custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel):commands(new CImgList<char>[256]), commands_names(new CImgList<char>[256]), commands_has_arguments(new CImgList<char>[256]), _variables(new CImgList<char>[256]), _variables_names(new CImgList<char>[256]), variables(new CImgList<char>*[256]), variables_names(new CImgList<char>*[256]) { > CImgList<char> items; > for (int l = 1; l<argc; ++l) { > if (std::strchr(argv[l],' ')) { > CImg<char>(1,1,1,1,'\"').move_to(items); > CImg<char>(argv[l],std::strlen(argv[l])).move_to(items); > CImg<char>::string("\"").move_to(items); > } else CImg<char>::string(argv[l]).move_to(items); > if (l<argc-1) items.back().back()=' '; > } > const CImg<char> commands_line(items>'x'); > _gmic(commands_line.data(),images,images_names,custom_commands,include_default_commands, > p_progress,p_cancel); >} > >template<typename T> >gmic::gmic(const char *const commands_line, CImgList<T>& images, CImgList<char>& images_names, > const char *custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel):commands(new CImgList<char>[256]), commands_names(new CImgList<char>[256]), commands_has_arguments(new CImgList<char>[256]), _variables(new CImgList<char>[256]), _variables_names(new CImgList<char>[256]), variables(new CImgList<char>*[256]), variables_names(new CImgList<char>*[256]) { > _gmic(commands_line,images,images_names,custom_commands,include_default_commands, > p_progress,p_cancel); >} > >template<typename T> >void gmic::_gmic(const char *const commands_line, CImgList<T>& images, > CImgList<char>& images_names, > const char *custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel) { > > > setlocale(1,"C"); > cimg::srand(); > verbosity = 0; > nb_carriages = 0; > debug_filename = ~0U; > debug_line = ~0U; > is_released = true; > is_debug = false; > is_debug_infos = false; > is_start = true; > is_quit = false; > is_return = false; > is_double3d = true; > is_default_type = true; > check_elif = false; > reference_time = cimg::time(); > background3d.assign(1,2,1,3).fill(32,64,32,116,64,96).resize(1,256,1,3,3); > render3d = 4; > renderd3d = -1; > focale3d = 700; > light3d.assign(); > light3d_x = light3d_y = 0; > light3d_z = -5e8f; > specular_lightness3d = 0.15f; > specular_shininess3d = 0.8f; > if (p_progress) progress = p_progress; else { _progress = -1; progress = &_progress; } > if (p_cancel) cancel = p_cancel; else { _cancel = 0; cancel = &_cancel; } > for (unsigned int l = 0; l<256; ++l) { > commands_names[l].assign(); > commands[l].assign(); > commands_has_arguments[l].assign(); > _variables[l].assign(); > variables[l] = &_variables[l]; > _variables_names[l].assign(); > variables_names[l] = &_variables_names[l]; > } > if (include_default_commands) > add_commands(data_gmic_def,commands_names,commands,commands_has_arguments); > add_commands(custom_commands,commands_names,commands,commands_has_arguments); ># 3038 "gmic.cpp" > const CImgList<char> items = commands_line_to_CImgList(commands_line); > for (int l = 0; l<(int)(items)._width; ++l) if (!std::strcmp("-debug",items[l].data())) { is_debug = true; break; } > if (is_debug) { > debug(images,"%sStart G'MIC instance, in debug mode.%s",cimg::t_bold,cimg::t_normal); > debug(images,"Initial command line: '%s'.",commands_line); > is_start = false; > } > if (is_debug) commands_line_to_CImgList(commands_line); > > > try { > parse(items,images,images_names); > } catch (gmic_exception &e) { > print(images,0,"Abort G'MIC instance.\n"); > throw e; > } >} > > > >template<typename T> >gmic& gmic::print_images(const CImgList<T>& images, const CImgList<char>& images_names, > const CImg<unsigned int>& selection, const bool is_header) { > if (!images || !images_names || !selection) { > if (is_header) print(images,0,"Print image []."); > return *this; > } > char title[256] = { 0 }; > if (is_header) print(images,0,"Print image%s.\n", > selection2string(selection,images_names,true).data()); > if (verbosity>=0 || is_debug) for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > const CImg<T>& img = images[ind]; > bool is_valid = true; > int _verbosity = verbosity; > bool _is_debug = is_debug; > verbosity = -1; is_debug = false; > try { check_image(images,img); } catch (gmic_exception&) { is_valid = false; } > verbosity = _verbosity; is_debug = _is_debug; > snprintf(title,sizeof(title),"[%u] = '%s'", > ind,images_names[ind].data()); > { if (sizeof(title)>=5 && title[sizeof(title)-2]) title[sizeof(title)-4] = title[sizeof(title)-3] = title[sizeof(title)-2] = '.'; }; > img.gmic_print(title,is_debug,is_valid); > } > nb_carriages = 0; > return *this; >} > > > > > >template<typename T> >gmic& gmic::display_images(const CImgList<T>& images, const CImgList<char>& images_names, > const CImg<unsigned int>& selection, unsigned int *const XYZ) { > if (!images || !images_names || !selection) { print(images,0,"Display image []."); return *this; } > > > > print(images,0,"Display image%s",selection2string(selection,images_names,true).data()); > if (verbosity>=0 || is_debug) { > if (XYZ) std::fprintf(cimg::output(),", from point (%u,%u,%u)",XYZ[0],XYZ[1],XYZ[2]); > std::fprintf(cimg::output()," (console output only, no display support).\n"); > std::fflush(cimg::output()); > print_images(images,images_names,selection,false); > } ># 3167 "gmic.cpp" > return *this; >} > > > >template<typename T> >gmic& gmic::display_plots(const CImgList<T>& images, const CImgList<char>& images_names, > const CImg<unsigned int>& selection, > const unsigned int plot_type, const unsigned int vertex_type, > const double xmin, const double xmax, > const double ymin, const double ymax) { > if (!images || !images_names || !selection) { print(images,0,"Plot image []."); return *this; } > > print(images,0,"Plot image%s (console output only, no display support).\n",selection2string(selection,images_names,true).data()); > print_images(images,images_names,selection,false); > cimg::unused(plot_type,vertex_type,xmin,xmax,ymin,ymax); ># 3225 "gmic.cpp" > return *this; >} > > > >template<typename T> >gmic& gmic::display_objects3d(const CImgList<T>& images, const CImgList<char>& images_names, > const CImg<unsigned int>& selection) { > if (!images || !images_names || !selection) { > print(images,0,"Display 3d object []."); > return *this; > } > char message[1024] = { 0 }; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection[l]]).is_CImg3d(true,message)) > error(images,0,0, > "Command '-display3d': Invalid 3d object [%d] in selected image%s (%s).", > selection[l],selection2string(selection,images_names,true).data(),message); > > print(images,0,"Display 3d object%s (skipped, no display support).",selection2string(selection,images_names,true).data()); ># 3289 "gmic.cpp" > return *this; >} > > > > > >template<typename T> >CImg<char> gmic::substitute_item(const char *const source, > CImgList<T>& images, > CImgList<char>& images_names, > unsigned int variables_sizes[256]) { > if (!source) return CImg<char>(); > CImgList<char> substituted_items; > CImg<char> inbraces; > > for (const char *nsource = source; *nsource; ) > if (*nsource!='@' && *nsource!='{' && *nsource!='$') { > > const char *const nsource0 = nsource; > do { ++nsource; } while (*nsource && *nsource!='@' && *nsource!='{' && *nsource!='$'); > CImg<char>(nsource0,nsource - nsource0).move_to(substituted_items); > } else { > CImg<char> substr(256); > CImg<unsigned int> _ind; > if (inbraces) *inbraces = 0; else inbraces.assign(1,1,1,1,0); > int ind = 0, l_inbraces = 0; > bool is_braces = false; > char end, sep = 0; > > > if (*nsource=='{') { > const char *const ptr_beg = nsource + 1, *ptr_end = ptr_beg; > unsigned int p = 0; > for (p = 1; p>0 && *ptr_end; ++ptr_end) { if (*ptr_end=='{') ++p; if (*ptr_end=='}') --p; } > if (p) { CImg<char>(nsource++,1).move_to(substituted_items); continue; } > l_inbraces = ptr_end - ptr_beg - 1; > if (l_inbraces>0) { > inbraces.assign(ptr_beg,l_inbraces + 1).back() = 0; > substitute_item(inbraces,images,images_names,variables_sizes).move_to(inbraces); > gmic_strreplace(inbraces); > } > nsource+=l_inbraces + 2; > if (*inbraces) { > const CImg<T>& img = images.size()?check_image(images,images.back()):CImg<T>::empty(); > bool is_substitution_done = false; > > > if (!inbraces[1]) { > switch (*inbraces) { > case 'w' : > snprintf(substr,substr.width(),"%d",img.width()); > is_substitution_done = true; > break; > case 'h' : > snprintf(substr,substr.width(),"%d",img.height()); > is_substitution_done = true; > break; > case 'd' : > snprintf(substr,substr.width(),"%d",img.depth()); > is_substitution_done = true; > break; > case 's' : > snprintf(substr,substr.width(),"%d",img.spectrum()); > is_substitution_done = true; > break; > } > if (is_substitution_done) > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } > > > if (!is_substitution_done && inbraces.width()>=3 && *inbraces=='\'' && > inbraces[inbraces.width()-2]=='\'') { > const char *s = inbraces.data() + 1; > if (inbraces.width()>3) { > inbraces[inbraces.width()-2] = 0; > for (*substr=0, cimg::strunescape(inbraces); *s; ++s) { > snprintf(substr,substr.width(),"%d,",(int)(unsigned char)*s); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } > if (*substr) --(substituted_items.back()._width); > } > is_substitution_done = true; > } > > > if (!is_substitution_done && inbraces.width()>=3 && *inbraces=='`' && > inbraces[inbraces.width()-2]=='`') { > if (inbraces.width()>3) { > unsigned int nb_values = 1; > for (char *p = (inbraces)._data, *_maxp = (inbraces)._data + (inbraces).size(); p<_maxp; ++p) if (*p==',') ++nb_values; > inbraces[inbraces.width()-2] = 0; > try { > CImg<char>(nb_values,1,1,1,inbraces.data()+1,false).move_to(substituted_items); > is_substitution_done = true; > } catch (CImgException &e) { > const char *const e_ptr = std::strstr(e.what(),": "); > error(images,0,0, > "Item substitution '{`value1,..,valueN`}': %s", > e_ptr?e_ptr+2:e.what()); > } > } > is_substitution_done = true; > } > > > if (!is_substitution_done && inbraces.width()>=5) { > char *const peq = std::strstr(inbraces,"'=='"); > if (peq) { > *peq = 0; > snprintf(substr,substr.width(),"%d",(int)!std::strcmp(inbraces,peq+4)); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > is_substitution_done = true; > } else { > char *const pne = std::strstr(inbraces,"'!='"); > if (pne) { > *pne = 0; > snprintf(substr,substr.width(),"%d",(int)std::strcmp(inbraces,pne+4)); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > is_substitution_done = true; > } > } > } > > > if (!is_substitution_done && inbraces.width()>=3 && *inbraces=='_') try { > snprintf(substr,substr.width(),"%g",img.eval(inbraces.data(1))); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > is_substitution_done = true; > } catch (CImgException& e) { > const char *const e_ptr = std::strstr(e.what(),": "); > error(images,0,0, > "Item substitution '{_expression}': %s", > e_ptr?e_ptr+2:e.what()); > } > > > if (!is_substitution_done) try { > snprintf(substr,substr.width(),"%.16g",img.eval(inbraces.data())); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } catch (CImgException& e) { > const char *const e_ptr = std::strstr(e.what(),": "); > error(images,0,0, > "Item substitution '{expression}': %s", > e_ptr?e_ptr+2:e.what()); > } > } else error(images,0,0, > "Item substitution '{}': empty braces."); > continue; > > > } else if (nsource[1]=='{') { > const char *const ptr_beg = nsource + 2, *ptr_end = ptr_beg; unsigned int p = 0; > for (p = 1; p>0 && *ptr_end; ++ptr_end) { if (*ptr_end=='{') ++p; if (*ptr_end=='}') --p; } > if (p) { CImg<char>(nsource++,1).move_to(substituted_items); continue; } > l_inbraces = ptr_end - ptr_beg - 1; > if (l_inbraces>0) { > inbraces.assign(ptr_beg,l_inbraces + 1).back() = 0; > substitute_item(inbraces,images,images_names,variables_sizes).move_to(inbraces); > } > is_braces = true; > } > > > if (*nsource=='@' && nsource[1]=='#') { > nsource+=2; > snprintf(substr,substr.width(),"%u",images.size()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='*') { > nsource+=2; > snprintf(substr,substr.width(),"%u",cimg::nb_cpus()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='^') { > nsource+=2; > snprintf(substr,substr.width(),"%d",verbosity); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='.') { > nsource+=2; > snprintf(substr,substr.width(),"%u",1593); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='%') { > nsource+=2; > > snprintf(substr,substr.width(),"%u",(unsigned int)getpid()); > > > > > > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='|') { > nsource+=2; > snprintf(substr,substr.width(),"%g",(cimg::time()-reference_time)/1000.); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='?') { > nsource+=2; > snprintf(substr,substr.width(),"%s",CImg<T>::pixel_type()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='!') { > nsource+=2; > > std::strcpy(substr,"0"); > > > > > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > > } else if (*nsource=='@' && inbraces[0]=='!' && > (inbraces[1]==0 || > (inbraces[1]>='0' && inbraces[1]<='9' && inbraces[2]==0) || > (inbraces[1]==',' && inbraces[2]) || > (inbraces[1]>='0' && inbraces[1]<='9' && inbraces[2]==',' && inbraces[3]))) { > nsource+=l_inbraces + 3; > > std::strcpy(substr,"0"); ># 3624 "gmic.cpp" > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='/') { > nsource+=2; > snprintf(substr,substr.width(),"%u",scope.size()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && inbraces[0]=='/' && > (inbraces[1]==0 || (inbraces[1]==',' && inbraces[2]))) { > nsource+=l_inbraces + 3; > const CImg<unsigned int> > subset = selection2cimg(inbraces[1]?inbraces.data()+2:0,scope.size(), > CImgList<char>::empty(), > "Item substitution '@{/[,subset]}'",false, > false,CImg<char>::empty()); > if (subset) for (unsigned long i = 0, _maxi = (subset).size(); i<_maxi; ++i) > substituted_items.insert(scope[subset[i]]).back().back() = '/'; > > > } else if (*nsource=='$' && nsource[1]=='/') { > snprintf(substr,substr.width(),"%s",scope.back().data()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > nsource+=2; > > > } else if (*nsource=='@' && (nsource[1]=='>' || nsource[1]=='<')) { > nsource+=2; > snprintf(substr,substr.width(),"%u",repeatdones.size()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > > } else if (*nsource=='@' && (*inbraces=='>' || *inbraces=='<') && > (inbraces[1]==0 || (inbraces[1]==',' && inbraces[2]))) { > nsource+=l_inbraces + 3; > const CImg<unsigned int> > subset = selection2cimg(inbraces[1]?inbraces.data()+2:0,repeatdones.size(), > CImgList<char>::empty(), > "Item substitution '@{>[,subset]}'",false, > false,CImg<char>::empty()); > if (subset) { > for (unsigned long i = 0, _maxi = (subset).size(); i<_maxi; ++i) { > snprintf(substr,substr.width(),"%u", > *inbraces=='>'?repeatdones(subset[i],2):repeatdones(subset[i],1)-1); > CImg<char>::string(substr.data()).move_to(substituted_items).back().back()=','; > } > --(substituted_items.back()._width); > } > > > } else if (*nsource=='$' && > (nsource[1]=='>' || nsource[1]=='<' || > ((*inbraces=='>' || *inbraces=='<') && inbraces[1]==0))) { > const char direction = is_braces?*inbraces:nsource[1]; > if (!repeatdones) > error(images,0,0, > "Item substitution '$%s': There is no loop currently running.", > is_braces?(direction=='>'?"{>}":"{<}"):(direction=='>'?">":"<")); > snprintf(substr,substr.width(),"%u", > direction=='>'?repeatdones.back()(2):repeatdones.back()(1)-1); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > nsource+=is_braces?4:2; > > > } else if (*nsource=='$' && > (((is_braces && std::sscanf(inbraces,"%255[a-zA-Z0-9_]",substr.data())==1)) || > (std::sscanf(nsource+1,"%255[a-zA-Z0-9_]",substr.data())==1)) && > (*substr<'0' || *substr>'9')) { > const CImg<char>& name = is_braces?inbraces:substr; > const unsigned int sind = gmic_hashcode(name,true); > const bool is_global = *name=='_'; > const int lind = is_global?0:(int)variables_sizes[sind]; > if (is_global) cimg::mutex(29); > const CImgList<char> > &__variables = *variables[sind], > &__variables_names = *variables_names[sind]; > bool is_name_found = false; > for (int l = __variables.width()-1; l>=lind; --l) > if (!std::strcmp(__variables_names[l],name)) { > is_name_found = true; ind = l; break; > } > if (is_name_found) { > if (__variables[ind].size()>1) > CImg<char>(__variables[ind].data(),__variables[ind].size()-1). > move_to(substituted_items); > } else { > for (int l = images.width()-1; l>=0; --l) > if (images_names[l] && !std::strcmp(images_names[l],name)) { > is_name_found = true; ind = l; break; > } > if (is_name_found) { > char text[64]; > snprintf(text,sizeof(text),"%d",ind); > CImg<char>(text,std::strlen(text)).move_to(substituted_items); > } else { > const char *const s_env = std::getenv(name); > if (s_env) CImg<char>(s_env,std::strlen(s_env)).move_to(substituted_items); > } > } > if (is_global) cimg::mutex(29,0); > nsource+=is_braces?l_inbraces + 3:std::strlen(substr)+1; > > > } else if (*nsource=='@' && (std::sscanf(nsource+1,"%d",&ind)==1 || > ((end=0),std::sscanf(inbraces,"%d%c",&ind,&end)==1) || > ((end=1),std::sscanf(inbraces,"%d,%c",&ind,&sep)==2) || > (std::sscanf(nsource+1,"%255[a-zA-Z0-9_]",substr.data())==1 && > (_ind=selection2cimg(substr,images.size(),images_names, > "Item substitution '@name'",true, > false,CImg<char>::empty())).height()>0) || > (((end=0),std::sscanf(inbraces,"%255[a-zA-Z0-9_]%c", > substr.data(),&end)==1) && > (_ind=selection2cimg(substr,images.size(),images_names, > "Item substitution '@{name}'",true, > false,CImg<char>::empty())).height()>0) || > (((end=1),std::sscanf(inbraces,"%255[a-zA-Z0-9_],%c", > substr.data(),&sep)==2) && > (_ind=selection2cimg(substr,images.size(),images_names, > "Item substitution '@{name,feature}'", > true,false, > CImg<char>::empty())).height()>0))) { > if (_ind) { > if (_ind.height()>1) > error(images,0,0, > "Item substitution '%s': Selection [%s] specifies %d items.", > !*inbraces?"@name":end?"@{name,feature}":"@{name}", > substr.data(),_ind.height()); > ind=*_ind; > } > const unsigned int > l_ind = _ind?std::strlen(substr):snprintf(substr,substr.width(),"%d",ind); > nsource+=is_braces?l_inbraces + 3:l_ind + 1; > int nind = ind; > if (nind<0) nind+=images.width(); > if (nind<0 || nind>=images.width()) { > if (images.width()) > error(images,0,0, > "Item substitution '%s': Invalid indice '%d' (not in range -%u..%u).", > !*inbraces?"@indice":end?"@{indice,feature}":"@{indice}", > ind,images.size(),images.size()-1); > else > error(images,0,0, > "Item substitution '%s': Invalid indice '%d' (no image data available).", > !*inbraces?"@indice":end?"@{indice,feature}":"@{indice}",ind); > } > const CImg<T>& img = check_image(images,images[nind]); > char argx[256], argy[256], argz[256], argc[256]; > *argx = *argy = *argz = *argc = 0; > char sepp = 0, sepx = 0, sepy = 0, sepz = 0, sepc = 0; > float x = 0, y = 0, z = 0, v = 0, bcond = 0; > bool is_substitution_done = false; > const char *subset = sep?inbraces.data() + l_ind + 1:&sep; > *substr = 0; > > > if (*subset) { > is_substitution_done = true; > switch (*subset) { > case 'w' : > if (subset[1]=='h') { > if (subset[2]=='d') { > if (subset[3]=='s' && !subset[4]) > snprintf(substr,substr.width(),"%d", > img.width()*img.height()*img.depth()*img.spectrum()); > else if (!subset[3]) > snprintf(substr,substr.width(),"%d", > img.width()*img.height()*img.depth()); > else is_substitution_done = false; > } else if (!subset[2]) > snprintf(substr,substr.width(),"%d",img.width()*img.height()); > else is_substitution_done = false; > } else if (!subset[1]) > snprintf(substr,substr.width(),"%d",img.width()); > else is_substitution_done = false; > break; > case 'h' : > if (!subset[1]) snprintf(substr,substr.width(),"%d",img.height()); > else is_substitution_done = false; > break; > case 'd' : > if (!subset[1]) snprintf(substr,substr.width(),"%d",img.depth()); > else is_substitution_done = false; > break; > case 's' : > if (!subset[1]) snprintf(substr,substr.width(),"%d",img.spectrum()); > else is_substitution_done = false; > break; > case 'r' : > if (!subset[1]) snprintf(substr,substr.width(),"%d",img.is_shared()); > else is_substitution_done = false; > break; > case 'n' : > if (!subset[1]) { > snprintf(substr,substr.width(),"%s",images_names[nind].data()); > for (char *ps = substr.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > } > else is_substitution_done = false; > break; > case 'b' : > if (!subset[1]) { > cimg::split_filename(images_names[nind].data(),substr); > const char *const basename = cimg::basename(substr); > if (substr.data()!=basename) > substr.draw_image(CImg<char>::string(basename)); > for (char *ps = substr.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > } else is_substitution_done = false; > break; > case 'x' : > if (!subset[1]) { > snprintf(substr,substr.width(),"%s", > cimg::split_filename(images_names[nind].data())); > for (char *ps = substr.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > } > else is_substitution_done = false; > break; > case 'f' : > if (!subset[1]) { > CImg<char> _substr(images_names[nind]); > char *const basename = const_cast<char*>(cimg::basename(_substr)); > *basename = 0; > std::strcpy(substr,_substr); > for (char *ps = substr.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > } else is_substitution_done = false; > break; > case '#' : > if (!subset[1]) snprintf(substr,substr.width(),"%lu",img.size()); > else is_substitution_done = false; > break; > case '+' : > if (!subset[1]) { > double res = img?(double)img.front():0; > for (const T *ptrs = img.data() + 1, *ptre = img.end(); ptrs<ptre; > res+=(double)*ptrs++) {} > snprintf(substr,substr.width(),"%.16g",res); > } else is_substitution_done = false; > break; > case '-' : > if (!subset[1]) { > double res = img?(double)img.front():0; > for (const T *ptrs = img.data() + 1, *ptre = img.end(); ptrs<ptre; > res-=(double)*ptrs++) {} > snprintf(substr,substr.width(),"%.16g",res); > } else is_substitution_done = false; > break; > case '*' : > if (!subset[1]) { > double res = img?(double)img.front():0; > for (const T *ptrs = img.data() + 1, *ptre = img.end(); ptrs<ptre; > res*=(double)*ptrs++) {} > snprintf(substr,substr.width(),"%.16g",res); > } else is_substitution_done = false; > break; > case '/' : if (!subset[1]) { > double res = img?(double)img.front():0; > for (const T *ptrs = img.data() + 1, *ptre = img.end(); ptrs<ptre; > res/=(double)*ptrs++) {} > snprintf(substr,substr.width(),"%.16g",res); > } else is_substitution_done = false; > break; > case 'm' : > if (!subset[1]) snprintf(substr,substr.width(),"%.16g",(double)img.min()); > else is_substitution_done = false; > break; > case 'M' : > if (!subset[1]) snprintf(substr,substr.width(),"%.16g",(double)img.max()); > else is_substitution_done = false; > break; > case 'a' : > if (!subset[1]) snprintf(substr,substr.width(),"%.16g",img.mean()); > else is_substitution_done = false; > break; > case 'v' : > if (!subset[1]) snprintf(substr,substr.width(),"%.16g",img.variance()); > else is_substitution_done = false; > break; > case 't' : > if (!subset[1]) { > const unsigned int siz = (unsigned int)img.size(); > if (siz) { > unsigned int strsiz = 0; > for (T *ptr = (img)._data, *_maxptr = (img)._data + (img).size(); ptr<_maxptr; ++ptr) if ((unsigned char)*ptr) ++strsiz; > if (strsiz) { > CImg<char> text(strsiz+1), _text = text.get_shared_points(0,strsiz-1,0,0,0); > _text = CImg<T>(img.data(),strsiz,1,1,1,true); > text.back() = 0; > for (char *ps = _text.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > _text.move_to(substituted_items); > } > } > *substr = 0; > } else is_substitution_done = false; > break; > case 'c' : > if (!subset[1]) { > CImg<unsigned int> st; > if (img) st = img.get_stats(); else st.assign(8,1,1,1,0); > snprintf(substr,substr.width(),"%u,%u,%u,%u",st[4],st[5],st[6],st[7]); > } else is_substitution_done = false; > break; > case 'C' : > if (!subset[1]) { > CImg<unsigned int> st; > if (img) st = img.get_stats(); else st.assign(12,1,1,1,0); > snprintf(substr,substr.width(),"%u,%u,%u,%u",st[8],st[9],st[10],st[11]); > } else is_substitution_done = false; > break; > default : is_substitution_done = false; > } > > > if (is_substitution_done) { > if (*substr) CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } else if ((std::sscanf(subset,"(%255[0-9.eE%+-]%c%c", > argx,&sepp,&end)==2 || > std::sscanf(subset,"(%255[0-9.eE%+-],%255[0-9.eE%+-]%c%c", > argx,argy,&sepp,&end)==3 || > std::sscanf(subset,"(%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c%c", > argx,argy,argz,&sepp,&end)==4 || > std::sscanf(subset,"(%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c%c", > argx,argy,argz,argc,&sepp,&end)==5 || > std::sscanf(subset,"(%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f%c%c", > argx,argy,argz,argc,&bcond,&sepp,&end)==6) && > sepp==')' && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%')) && > (!*argc || > std::sscanf(argc,"%f%c",&v,&end)==1 || > (std::sscanf(argc,"%f%c%c",&v,&sepc,&end)==2 && sepc=='%'))) { > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z), > nv = (int)cimg::round(sepc=='%'?v*(img.spectrum()-1)/100:v); > snprintf(substr,substr.width(),"%.16g", > bcond?(double)img.atXYZC(nx,ny,nz,nv):(double)img.atXYZC(nx,ny,nz,nv,0)); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > is_substitution_done = true; > } > } > > > if (!is_substitution_done) { > CImg<T> values; > is_substitution_done = true; > if (!*subset) values = img.get_shared(); > else { > int _verbosity = verbosity; > bool _is_debug = is_debug; > verbosity = -1; is_debug = false; > try { > const CImg<unsigned int> > inds = selection2cimg(subset,img.size(), > CImgList<char>::empty(),"",false,false,CImg<char>::empty()); > values.assign(1,inds.height()); > for (unsigned long p = 0, _maxp = (inds).size(); p<_maxp; ++p) values[p] = img[inds(p)]; > } catch (gmic_exception&) { > is_substitution_done = false; > } > verbosity = _verbosity; is_debug = _is_debug; > } > if (is_substitution_done) { > for (unsigned long p = 0, _maxp = (values).size(); p<_maxp; ++p) { > snprintf(substr,substr.width(),"%.16g",(double)values[p]); > CImg<char>::string(substr).move_to(substituted_items).back().back() = ','; > } > if (values) --(substituted_items.back()._width); > } > } > > > if (!is_substitution_done) { > try { > snprintf(substr,substr.width(),"%.16g",img.eval(subset)); > } catch (CImgException&) { > error(images,0,0, > "Item substitution '@{%d,%s}': Invalid argument '%s'.", > ind,subset,subset); > } > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } > > > } else if (!is_braces || *nsource!='@') CImg<char>(nsource++,1).move_to(substituted_items); > > > else { > nsource+=l_inbraces + 3; > if (l_inbraces>0) { > const CImgList<char> > ncommands_line = commands_line_to_CImgList(gmic_strreplace(inbraces)); > unsigned int nposition = 0; > CImg<char>::string("*substitute").move_to(scope); > unsigned int nvariables_sizes[256]; > for (unsigned int l = 0; l<256; ++l) nvariables_sizes[l] = variables[l]->size(); > _parse(ncommands_line,nposition,images,images_names,nvariables_sizes); > for (unsigned int l = 0; l<255; ++l) if (variables[l]->size()>nvariables_sizes[l]) { > variables_names[l]->remove(nvariables_sizes[l],variables[l]->size()-1); > variables[l]->remove(nvariables_sizes[l],variables[l]->size()-1); > } > scope.remove(); > is_return = false; > } > if (status.width()>1) > CImg<char>(status.data(),std::strlen(status)).move_to(substituted_items); > continue; > } > } > CImg<char>::vector(0).move_to(substituted_items); > return substituted_items>'x'; >} > > > >template<typename T> >gmic& gmic::_parse(const CImgList<char>& commands_line, unsigned int& position, > CImgList<T> &images, CImgList<char> &images_names, > unsigned int variables_sizes[256]) { > > > typedef typename cimg::superset<T,float>::type Tfloat; > typedef typename cimg::superset<T,long>::type Tlong; > > > const unsigned int initial_scope_size = scope.size(), initial_debug_line = debug_line; > bool is_endlocal = false; > char end; > > > > CImgList<st_gmic_parallel<T> > threads_data; > static CImgList<st_gmic_parallel<T> > global_threads_data; > > CImg<char> _formula(4096), _title(256), _indices(256), > _argx(256), _argy(256), _argz(256), _argc(256); > char > *const formula = _formula.fill(0).data(), > *const title = _title.fill(0).data(), > *const indices = _indices.fill(0).data(), > *const argx = _argx.fill(0).data(), > *const argy = _argy.fill(0).data(), > *const argz = _argz.fill(0).data(), > *const argc = _argc.fill(0).data(); > > > CImg<char> _color(4096); > char *const color = _color.data(); > > > try { > > > cimg::exception_mode() = 0; > if (images.size()<images_names.size()) > images_names.remove(images.size(),images_names.size()-1); > else if (images.size()>images_names.size()) > images_names.insert(images.size() - images_names.size(),CImg<char>::string("[unnamed]")); > > is_debug_infos = false; > if (is_debug) { > nb_carriages = 2; > debug(images,"%sStart G'MIC parser in scope '%s/' [%s].%s", > cimg::t_bold,scope.back().data(),CImg<T>::pixel_type(),cimg::t_normal); > is_start = false; > } > > > if (!commands_line && is_start) { print(images,0,"Start G'MIC parser."); is_start = false; } > while (position<commands_line.size() && !is_quit && !is_return) { > > > while (position<commands_line.size() && *commands_line[position]==1) { > const CImg<char> &code = commands_line[position]; > if (!code[1]) ++debug_line; > else if (!std::sscanf(code.data()+1,"%x,%x",&debug_line,&(debug_filename=0))) > debug_filename = debug_line = ~0U; > else is_debug_infos = true; > ++position; > } > if (position>=commands_line.size()) continue; > > > if (images_names.size()!=images.size()) > error("Internal error: Images (%u) and images names (%u) have different size.", > images_names.size(),images.size()); > if (!scope) > error("Internal error: Scope is empty."); > if (scope.size()>64) > error("Scope overflow (infinite recursion ?)."); > > > const char > *const initial_item = commands_line[position].data(), > *const initial_argument = position+1<commands_line.size()?commands_line[position+1].data(): > ""; > > CImg<char> _item, _argument, _argument_text; > substitute_item(initial_item,images,images_names,variables_sizes).move_to(_item); > char *item = _item.data(); > const char *argument = initial_argument, *argument_text = initial_argument; > > > CImg<char> _command(256), _restriction(256); > char *const command = _command.data(), *const restriction = _restriction.data(); > *command = *restriction = 0; > > bool is_get_version = false, is_restriction = false; > CImg<unsigned int> selection; > CImg<char> new_name; > if (item[0]=='-' && item[1] && item[1]!='.') { > char sep0 = 0, sep1 = 0; > if (item[1]=='-' && item[2] && item[2]!='[' && (item[2]!='3' || item[3]!='d')) { > ++item; is_get_version = true; > } > gmic_strreplace(item); > const int err = std::sscanf(item,"%255[^[]%c%255[a-zA-Z_0-9.eE%^,:+-]%c%c", > command,&sep0,restriction,&sep1,&end); > if (err==1) selection = CImg<unsigned int>::sequence(images.size(),0,images.size()-1); > else if (err==2 && sep0=='[' && item[std::strlen(command)+1]==']') { > selection.assign(); is_restriction = true; > } else if (err==4 && sep1==']') { > is_restriction = true; > if ((!std::strcmp("-wait",command) || !std::strcmp("-cursor",command)) && !is_get_version) > selection = selection2cimg(restriction,10,CImgList<char>::empty(),command,true, > false,CImg<char>::empty()); > else if ((!std::strcmp("-i",command) || !std::strcmp("-input",command)) && > !is_get_version) > selection = selection2cimg(restriction,images.size()+1,images_names,command,true, > true,new_name); > else if ((!std::strcmp("-e",command) || !std::strcmp("-echo",command) || > !std::strcmp("-error",command) || !std::strcmp("-warn",command)) && > !is_get_version) > selection = selection2cimg(restriction,scope.size(),CImgList<char>::empty(), > command,true,false,CImg<char>::empty()); > else > selection = selection2cimg(restriction,images.size(),images_names,command,true, > false,CImg<char>::empty()); > } else { > std::strncpy(command,item,_command.size()-1); > command[_command.size()-1] = *restriction = 0; > } > if (is_get_version) --item; > } else { > std::strncpy(command,item,_command.size()-1); > command[_command.size()-1] = *restriction = 0; > } > ++position; > > if (is_debug) { > const char *const _initial_item = initial_item+(is_get_version?1:0); > if (std::strcmp(item,_initial_item)) > debug(images,"Item '%s' -> '%s', indice%s.", > _initial_item,item,selection2string(selection,images_names,true).data()); > else > debug(images,"Item '%s', indice%s.", > _initial_item,selection2string(selection,images_names,true).data()); > } > > > bool is_verbose_argument = false; > const int old_verbosity = verbosity; > if (!std::strcmp("-v",item) || !std::strcmp("-verbose",item)) { > > if (*argument=='-' && !argument[1]) { --verbosity; is_verbose_argument = true; } > else if (*argument=='+' && !argument[1]) { ++verbosity; is_verbose_argument = true; } > else { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (*argument=='-' && !argument[1]) { --verbosity; is_verbose_argument = true; } > else if (*argument=='+' && !argument[1]) { ++verbosity; is_verbose_argument = true; } > else { > float level = 0; > if (std::sscanf(argument,"%f%c",&level,&end)==1) { > verbosity = (int)cimg::round(level); > is_verbose_argument = true; > } > else verbosity = 0; > } > } > } > if (is_start) { print(images,0,"Start G'MIC parser."); is_start = false; } > > > if (*cancel) { > if (verbosity>0 || is_debug) print(images,0,"Cancel G'MIC instance.\n"); > dowhiles.assign(); > repeatdones.assign(); > position = commands_line.size(); > is_released = is_quit = true; > break; > } > > > if (*item=='-' && item[1]) { > > > > > char _item[16] = { 0 }, command1 = command[1]; > const char > command2 = command1?command[2]:0, command3 = command2?command[3]:0, > command4 = command3?command[4]:0, command5 = command4?command[5]:0; > > if (!command2) switch (command1) { > case 'm' : if (!is_get_version && !is_restriction) { > std::strcpy(item=_item,"-command"); command1 = 'c'; > } break; > case 'd' : std::strcpy(command,"-display"); break; > case 'e' : std::strcpy(command,"-echo"); break; > case 'i' : std::strcpy(command,"-input"); break; > case 'o' : std::strcpy(command,"-output"); break; > case 'p' : std::strcpy(command,"-print"); break; > case 'v' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-verbose"); break; > case 'w' : std::strcpy(command,"-window"); break; > case 'k' : std::strcpy(command,"-keep"); break; > case '+' : std::strcpy(command,"-add"); command1 = 'a'; break; > case '&' : std::strcpy(command,"-and"); command1 = 'a'; break; > case '/' : std::strcpy(command,"-div"); command1 = 'd'; break; > case '>' : std::strcpy(command,"-gt"); command1 = 'g'; break; > case '<' : std::strcpy(command,"-lt"); command1 = 'l'; break; > case '%' : std::strcpy(command,"-mod"); command1 = 'm'; break; > case '*' : std::strcpy(command,"-mul"); command1 = 'm'; break; > case '|' : std::strcpy(command,"-or"); command1 = 'o'; break; > case '^' : std::strcpy(command,"-pow"); command1 = 'p'; break; > case '-' : std::strcpy(command,"-sub"); command1 = 's'; break; > case 'c' : std::strcpy(command,"-cut"); break; > case 'f' : std::strcpy(command,"-fill"); break; > case 'n' : std::strcpy(command,"-normalize"); break; > case '=' : std::strcpy(command,"-set"); command1 = 's'; break; > case 't' : std::strcpy(command,"-text"); break; > case 'a' : std::strcpy(command,"-append"); break; > case 'z' : std::strcpy(command,"-crop"); command1 = 'c'; break; > case 'r' : std::strcpy(command,"-resize"); break; > case 's' : std::strcpy(command,"-split"); break; > case 'y' : std::strcpy(command,"-unroll"); command1 = 'u'; break; > case 'b' : std::strcpy(command,"-blur"); break; > case 'g' : std::strcpy(command,"-gradient"); break; > case 'j' : std::strcpy(command,"-image"); command1 = 'i'; break; > case 'q' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-quit"); break; > case 'l' : std::strcpy(command,"-local"); break; > case 'u' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-status"); command1 = 's'; break; > case 'x' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-exec"); command1 = 'e'; break; > } else if (!command3) { > if (command1=='s' && command2=='h') std::strcpy(command,"-shared"); > else if (command1=='m' && command2=='v') std::strcpy(command,"-move"); > else if (command1=='n' && command2=='m') std::strcpy(command,"-name"); > else if (command1=='r' && command2=='m') std::strcpy(command,"-remove"); > else if (command1=='r' && command2=='v') std::strcpy(command,"-reverse"); > else if (command1=='<' && command2=='<') { std::strcpy(command,"-bsl"); command1 = 'b'; } > else if (command1=='>' && command2=='>') { std::strcpy(command,"-bsr"); command1 = 'b'; } > else if (command1=='=' && command2=='=') { std::strcpy(command,"-eq"); command1 = 'e'; } > else if (command1=='>' && command2=='=') { std::strcpy(command,"-ge"); command1 = 'g'; } > else if (command1=='<' && command2=='=') { std::strcpy(command,"-le"); command1 = 'l'; } > else if (command1=='/' && command2=='/') { > std::strcpy(command,"-mdiv"); command1 = 'm'; > } > else if (command1=='*' && command2=='*') { > std::strcpy(command,"-mmul"); command1 = 'm'; > } > else if (command1=='!' && command2=='=') { std::strcpy(command,"-neq"); command1 = 'n'; } > } else if (!command4 && command2=='3' && command3=='d') switch (command1) { > > case 'd' : std::strcpy(command,"-display3d"); break; > case '+' : std::strcpy(command,"-add3d"); command1 = 'a'; break; > case 'b' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-background3d"); break; > case '/' : std::strcpy(command,"-div3d"); command1 = 'd'; break; > case 'f' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-focale3d"); break; > case 'l' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-light3d"); break; > case 'm' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-mode3d"); break; > case '*' : std::strcpy(command,"-mul3d"); command1 = 'm'; break; > case 'o' : std::strcpy(command,"-opacity3d"); break; > case 'p' : std::strcpy(command,"-primitives3d"); break; > case 'r' : std::strcpy(command,"-rotate3d"); break; > case 's' : std::strcpy(command,"-split3d"); break; > case '-' : std::strcpy(command,"-sub3d"); command1 = 's'; break; > case 't' : std::strcpy(command,"-texturize3d"); break; > } else if (!command5 && command3=='3' && command4=='d') { > > if (command1=='d' && command2=='b') { > if (!is_get_version && !is_restriction) std::strcpy(item=_item,"-double3d"); > } else if (command1=='m' && command2=='d') { > if (!is_get_version && !is_restriction) std::strcpy(item=_item,"-moded3d"); > } > else if (command1=='r' && command2=='v') std::strcpy(command,"-reverse3d"); > else if (command1=='s' && command2=='l') { > if (!is_get_version && !is_restriction) std::strcpy(item=_item,"-specl3d"); > } > else if (command1=='s' && command2=='s') { > if (!is_get_version && !is_restriction) std::strcpy(item=_item,"-specs3d"); > } > } > > > if (new_name && std::strcmp("-input",command) && !is_get_version) > error(images,0,0, > "Item '%s %s': Unknow name '%s'.", > initial_item,initial_argument,new_name.data()); > > > > > if (command1=='a') { > > > if (!std::strcmp("-append",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float align = 0; > char axis = 0, sep = 0; > CImg<unsigned int> ind; > if ((std::sscanf(argument,"%c%c", > &axis,&end)==1 || > std::sscanf(argument,"%c,%f%c", > &axis,&align,&end)==2) && > (axis=='x' || axis=='y' || axis=='z' || axis=='c')) { > print(images,0,"Append image%s along the '%c'-axis, with alignment %g.", > selection2string(selection,images_names,true).data(), > axis,align); > if (selection) { > CImgList<T> subimages; > for (int l = 0; l<(int)((selection)._height); ++l) if (check_image(images,images[selection[l]])) > subimages.insert(check_image(images,images[selection[l]]),~0U,true); > CImg<T> img = subimages.get_append(axis,align); > CImg<char> name = images_names[selection[0]].get_mark(); > if (is_get_version) { > img.move_to(images); > images_names.insert(name.copymark()); > } else if (selection.height()>=2) { > remove_images(images,images_names,selection,1,selection.height()-1); > img.move_to(images[selection[0]].assign()); > name.move_to(images_names[selection[0]]); > } > } > } else if ((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c,%c%c", > indices,&sep,&axis,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c,%c,%f%c", > indices,&sep,&axis,&(align=0),&end)==4) && > (axis=='x' || axis=='y' || axis=='z' || axis=='c') && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-append",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Append image [%u] to image%s, along the '%c'-axis, with alignment %g.", > *ind,selection2string(selection,images_names,true).data(),axis,align); > const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_append(img0,axis,align); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].append(img0,axis,align); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"append","Command '-%s': Invalid argument '%s'.","append",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-autocrop",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<T> is_arg; > if (*argument && std::sscanf(argument,"%4095[0-9.,eE+-]%c",formula,&end)==1) > try { CImg<T>(1).fill(argument,true).move_to(is_arg); } > catch (CImgException&) { is_arg.assign(); } > if (is_arg) { > print(images,0,"Auto-crop image%s by vector '%s'.", > selection2string(selection,images_names,true).data(), > argument_text); > ++position; > } else print(images,0,"Auto-crop image%s.", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > if (is_arg) { > const CImg<T> col = CImg<T>(img.spectrum()).fill(argument,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_gmic_autocrop(col); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.gmic_autocrop(col); images_names[posi].mark(); } }; > } > else { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_gmic_autocrop(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.gmic_autocrop(); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > > > if (!std::strcmp("-add",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Add %g%s to image%s" ".",value,ssep,selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator+=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator+=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-add", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Add image [%d] to image%s" ".",ind[0],selection2string(selection,images_names,true).data()); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator+=(img0); } else { images_names[selection[l]].mark(); img.operator+=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Add expression %s to image%s" ".",argument_text,selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator+=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator+=((const char*)formula); } } ++position; } else { print(images,0,"Add image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator+=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator+=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 4437 "gmic.cpp" > ; > > > if (!std::strcmp("-add3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float tx = 0, ty = 0, tz = 0; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"%f%c", > &tx,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &tx,&ty,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &tx,&ty,&tz,&end)==3) { > print(images,0,"Shift 3d object%s by displacement (%g,%g,%g).", > selection2string(selection,images_names,true).data(), > tx,ty,tz); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_shift_CImg3d(tx,ty,tz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.shift_CImg3d(tx,ty,tz); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-add3d': Invalid 3d object [%d], in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-add3d",true, > false,CImg<char>::empty())).height()==1) { > const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > print(images,0,"Merge 3d object%s with 3d object [%u].", > selection2string(selection,images_names,true).data(),*ind); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int _ind = selection[l]; > CImg<T>& img = check_image(images,images[_ind]); > CImgList<T> nimages(2); > nimages[0].assign(img,true); > nimages[1].assign(img0,true); > CImg<T> res; > try { CImg<T>::append_CImg3d(nimages).move_to(res); } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img0.is_CImg3d(true,message)) > error(images,0,0, > "Command '-add3d': Invalid 3d object [%u], in specified " > "argument '%s' (%s).", > *ind,argument_text,message.data()); > else if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-add3d': Invalid 3d object [%d], in selected image%s (%s).", > _ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > if (is_get_version) { > res.move_to(images); > images_names[_ind].get_mark().copymark().move_to(images_names); > } else { > res.move_to(images[_ind].assign()); > images_names[_ind].mark(); > } > } > ++position; > } else { > print(images,0,"Merge 3d object%s.", > selection2string(selection,images_names,true).data()); > if (selection) { > CImgList<T> subimages(selection.height()); > for (int l = 0; l<(int)((selection)._height); ++l) subimages[l].assign(check_image(images,images[selection[l]]),true); > CImg<T> img; > try { CImg<T>::append_CImg3d(subimages).move_to(img); } > catch (CImgException &e) { > CImg<char> message(1024); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > if (!images[ind].is_CImg3d(true,message)) > error(images,0,0, > "Command '-add3d': Invalid 3d object [%d], in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > } > throw e; > } > CImg<char> name = images_names[selection[0]].get_mark(); > if (is_get_version) { > img.move_to(images); > images_names.insert(name.copymark()); > } else if (selection.height()>=2) { > remove_images(images,images_names,selection,1,selection.height()-1); > img.move_to(images[selection[0]].assign()); > name.move_to(images_names[selection[0]]); > } > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-abs",command)) { print(images,0,"Compute pointwise absolute value of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_abs(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].abs(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-and",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise AND of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator&=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator&=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-and", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise AND of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator&=(img0); } else { images_names[selection[l]].mark(); img.operator&=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise AND of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator&=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator&=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise AND of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator&=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator&=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 4551 "gmic.cpp" > ; > > > if (!std::strcmp("-atan2",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-atan2",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Compute pointwise oriented arc-tangent of image%s, " > "with x-argument [%u].", > selection2string(selection,images_names,true).data(), > *ind); > const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_atan2(img0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].atan2(img0); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"atan2","Command '-%s': Invalid argument '%s'.","atan2",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-acos",command)) { print(images,0,"Compute pointwise arc-cosine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_acos(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].acos(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-asin",command)) { print(images,0,"Compute pointwise arc-sine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_asin(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].asin(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-atan",command)) { print(images,0,"Compute pointwise arc-tangent of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_atan(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].atan(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-axes",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float xmin = 0, xmax = 0, ymin = 0, ymax = 0, opacity = 1, siz = 13; > unsigned int pattern = ~0U; > char seph = 0; > *color = 0; > if (std::sscanf(argument,"%f,%f%c", > &xmin,&xmax,&end)==2 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &xmin,&xmax,&ymin,&ymax,&end)==4 || > std::sscanf(argument,"%f,%f,%f,%f,%f%c", > &xmin,&xmax,&ymin,&ymax,&siz,&end)==5 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f%c", > &xmin,&xmax,&ymin,&ymax,&siz,&opacity,&end)==6 || > (std::sscanf(argument,"%f,%f,%f,%f,%f,%f,0%c%x%c", > &xmin,&xmax,&ymin,&ymax,&siz,&opacity,&seph,&pattern,&end)==8 && > seph=='x') || > (std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%4095[0-9.eE,+-]%c", > &xmin,&xmax,&ymin,&ymax,&siz,&opacity,color,&end)==7 && > (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"%f,%f,%f,%f,%f,%f,0%c%x,%4095[0-9.eE,+-]%c", > &xmin,&xmax,&ymin,&ymax,&siz,&opacity, > &seph,&pattern,color,&end)==9 && seph=='x')) { > siz = cimg::round(siz); > print(images,0,"Draw xy-axes on image%s, with x-range (%g,%g), y-range (%g,%g), " > "font height %g, opacity %g, pattern 0x%x and color (%s).", > selection2string(selection,images_names,true).data(), > xmin,xmax, > ymin,ymax, > siz,opacity,pattern, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_axes(xmin,xmax,ymin,ymax,col.data(),opacity, -60,-60,0,0,pattern,pattern,(unsigned int)siz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_axes(xmin,xmax,ymin,ymax,col.data(),opacity, -60,-60,0,0,pattern,pattern,(unsigned int)siz); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"axes","Command '-%s': Invalid argument '%s'.","axes",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='b') { > > > > > if (!std::strcmp("-blur",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, is_gaussian = 0; > float sigma = -1; > char sep = 0; > if ((std::sscanf(argument,"%f%c", > &sigma,&end)==1 || > (std::sscanf(argument,"%f%c%c", > &sigma,&sep,&end)==2 && sep=='%') || > std::sscanf(argument,"%f,%u%c", > &sigma,&boundary,&end)==2 || > (std::sscanf(argument,"%f%c,%u%c", > &sigma,&sep,&boundary,&end)==3 && sep=='%') || > std::sscanf(argument,"%f,%u,%u%c", > &sigma,&boundary,&is_gaussian,&end)==3 || > (std::sscanf(argument,"%f%c,%u,%u%c", > &sigma,&sep,&boundary,&is_gaussian,&end)==4 && sep=='%')) && > sigma>=0 && boundary<=1 && is_gaussian<=1) { > print(images,0,"Blur image%s, with standard deviation %g%s, %s boundary conditions " > "and %s kernel.", > selection2string(selection,images_names,true).data(), > sigma,sep=='%'?"%":"", > boundary?"neumann":"dirichlet", > is_gaussian?"gaussian":"quasi-gaussian"); > if (sep=='%') sigma = -sigma; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur(sigma,(bool)boundary,(bool)is_gaussian); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur(sigma,(bool)boundary,(bool)is_gaussian); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"blur","Command '-%s': Invalid argument '%s'.","blur",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-bsr",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise right shift of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator>>=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator>>=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-bsr", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise right shift of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator>>=(img0); } else { images_names[selection[l]].mark(); img.operator>>=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise right shift of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator>>=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator>>=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise right shift of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator>>=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator>>=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 4678 "gmic.cpp" > ; > > > if (!std::strcmp("-bsl",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise left shift of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator<<=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator<<=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-bsl", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise left shift of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator<<=(img0); } else { images_names[selection[l]].mark(); img.operator<<=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise left shift of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator<<=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator<<=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise left shift of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator<<=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator<<=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 4690 "gmic.cpp" > ; > > > if (!std::strcmp("-bilateral",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sigma_s = 0, sigma_r = 0; > CImg<unsigned int> ind; > char sep_s = 0, sep_r = 0; > if ((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > indices,argx,argy,&end)==3) && > (std::sscanf(argx,"%f%c",&sigma_s,&end)==1 || > (std::sscanf(argx,"%f%c%c",&sigma_s,&sep_s,&end)==2 && sep_s=='%')) && > (std::sscanf(argy,"%f%c",&sigma_r,&end)==1 || > (std::sscanf(argy,"%f%c%c",&sigma_r,&sep_r,&end)==2 && sep_r=='%')) && > (ind=selection2cimg(indices,images.size(),images_names,"-bilateral",true, > false,CImg<char>::empty())).height()==1 && > sigma_s>=0 && sigma_r>=0) { > print(images,0,"Apply joint bilateral filter on image%s, with guide image [%u] " > "and standard deviations %g%s and %g.", > selection2string(selection,images_names,true).data(), > *ind, > sigma_s,sep_s=='%'?"%":"", > sigma_r,sep_r=='%'?"%":""); > const CImg<T> guide = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > if (sep_s=='%') sigma_s = -sigma_s; > if (sep_r=='%') sigma_r = -sigma_r; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_bilateral(guide,sigma_s,sigma_r); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_bilateral(guide,sigma_s,sigma_r); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2) && > (std::sscanf(argx,"%f%c",&sigma_s,&end)==1 || > (std::sscanf(argx,"%f%c%c",&sigma_s,&sep_s,&end)==2 && sep_s=='%')) && > (std::sscanf(argy,"%f%c",&sigma_r,&end)==1 || > (std::sscanf(argy,"%f%c%c",&sigma_r,&sep_r,&end)==2 && sep_r=='%')) && > sigma_s>=0 && sigma_r>=0) { > print(images,0,"Apply bilateral filter on image%s, with standard deviations %g%s " > "and %g.", > selection2string(selection,images_names,true).data(), > sigma_s,sep_s=='%'?"%":"", > sigma_r,sep_r=='%'?"%":""); > if (sep_s=='%') sigma_s = -sigma_s; > if (sep_r=='%') sigma_r = -sigma_r; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_bilateral(images[selection[l]],sigma_s,sigma_r); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_bilateral(images[selection[l]],sigma_s,sigma_r); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"bilateral","Command '-%s': Invalid argument '%s'.","bilateral",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-background3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float R = 0, G = 0, B = 0; > CImg<unsigned int> ind; > char sep = 0; > const int nb = std::sscanf(argument,"%f,%f,%f%c", > &R,&G,&B,&end); > R = cimg::round(R); > G = cimg::round(G); > B = cimg::round(B); > if (nb>=1 && nb<=3) { > switch (nb) { > case 1 : background3d.assign(1,1,1,3,(unsigned char)R); break; > case 2 : background3d.assign(1,1,1,3,(unsigned char)R,(unsigned char)G,0); break; > case 3 : background3d.assign(1,1,1,3,(unsigned char)R,(unsigned char)G, > (unsigned char)B); break; > } > print(images,0,"Set 3d background color to (%u,%u,%u).", > (unsigned int)R,(unsigned int)G,(unsigned int)B); > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-background3d",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Set 3d background from image [%u].",*ind); > background3d.assign(images[*ind],false); > ++position; > } else { > print(images,0,"Reset 3d background to default."); > background3d.assign(1,2,1,3).fill(32,64,32,116,64,96).resize(1,256,1,3,3); > } > continue; > } > > > } > > > > > else if (command1=='c') { > > > if (!std::strcmp("-check",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> arg_check(argument,std::strlen(argument)+1); > gmic_strreplace(arg_check); > bool is_cond = false, is_filename = false; > const CImg<T> &img = images.size()?images.back():CImg<T>::empty(); > try { if (img.eval(arg_check)) is_cond = true; } > catch (CImgException&) { > is_filename = true; > is_cond = gmic_check_filename(arg_check); > } > if (verbosity>0 || is_debug) { > print(images,0,"Check %s '%s' -> %s.", > is_filename?"file":"expression", > argument_text, > is_filename?(is_cond?"found":"not found"):(is_cond?"true":"false")); > } > if (!is_cond) { > if (scope.size()>1 && scope.back()[0]!='*') > error(images,0,scope.back().data(), > "Command '-check': %s '%s' %s.", > is_filename?"file":"expression", > argument_text, > is_filename?"does not exist":"is false"); > else error(images,0,0, > "Command '-check': %s '%s' %s.", > is_filename?"file":"expression", > argument_text, > is_filename?"does not exist":"is false"); > } > ++position; continue; > } > > > if (!std::strcmp("-crop",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> st0(64), st1(64), st2(64), st3(64), st4(64), st5(64), st6(64), st7(64); > char sep0 = 0, sep1 = 0, sep2 = 0, sep3 = 0, sep4 = 0, sep5 = 0, sep6 = 0, sep7 = 0; > float a0 = 0, a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0, a7 = 0; > *st0 = *st1 = *st2 = *st3 = *st4 = *st5 = *st6 = *st7 = 0; > unsigned int boundary = 0; > if ((boundary=0,std::sscanf(argument,"%63[0-9.eE%+-],%63[0-9.eE%+-]%c", > st0.data(), > st1.data(),&end)==2 || > std::sscanf(argument,"%63[0-9.eE%+-],%63[0-9.eE%+-],%u%c", > st0.data(), > st1.data(),&boundary,&end)==3) && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > boundary<=1) { > print(images,0,"Crop image%s with selection (%g%s) x (%g%s) and " > "%s boundary conditions.", > selection2string(selection,images_names,true).data(), > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > boundary?"neumann":"dirichlet"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > x0 = (int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > x1 = (int)cimg::round(sep1=='%'?a1*(img.width()-1)/100:a1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(x0,x1,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(x0,x1,(bool)boundary); images_names[posi].mark(); } }; > } > ++position; > } else if ((boundary=0,std::sscanf(argument, > "%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-]%c", > st0.data(),st1.data(), > st2.data(),st3.data(),&end)==4 || > std::sscanf(argument, > "%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%u%c", > st0.data(),st1.data(), > st2.data(),st3.data(),&boundary,&end)==5) && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%')) && > boundary<=1) { > print(images,0, > "Crop image%s with selection (%g%s,%g%s) x (%g%s,%g%s) and " > "%s boundary conditions.", > selection2string(selection,images_names,true).data(), > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > boundary?"neumann":"dirichlet"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > x0 = (int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > y0 = (int)cimg::round(sep1=='%'?a1*(img.height()-1)/100:a1), > x1 = (int)cimg::round(sep2=='%'?a2*(img.width()-1)/100:a2), > y1 = (int)cimg::round(sep3=='%'?a3*(img.height()-1)/100:a3); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(x0,y0,x1,y1,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(x0,y0,x1,y1,(bool)boundary); images_names[posi].mark(); } }; > } > ++position; > } else if ((boundary=0,std::sscanf(argument, > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]%c", > st0.data(),st1.data(),st2.data(), > st3.data(),st4.data(),st5.data(),&end)==6 || > std::sscanf(argument,"%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-],%u%c", > st0.data(),st1.data(),st2.data(), > st3.data(),st4.data(),st5.data(),&boundary,&end)==7) && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%')) && > (std::sscanf(st4,"%f%c",&a4,&end)==1 || > (std::sscanf(st4,"%f%c%c",&a4,&sep4,&end)==2 && sep4=='%')) && > (std::sscanf(st5,"%f%c",&a5,&end)==1 || > (std::sscanf(st5,"%f%c%c",&a5,&sep5,&end)==2 && sep5=='%')) && > boundary<=1) { > print(images,0,"Crop image%s with selection (%g%s,%g%s,%g%s) x (%g%s,%g%s,%g%s) " > "and %s boundary conditions.", > selection2string(selection,images_names,true).data(), > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > a4,sep4=='%'?"%":"", > a5,sep5=='%'?"%":"", > boundary?"neumann":"dirichlet"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > x0 = (int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > y0 = (int)cimg::round(sep1=='%'?a1*(img.height()-1)/100:a1), > z0 = (int)cimg::round(sep2=='%'?a2*(img.depth()-1)/100:a2), > x1 = (int)cimg::round(sep3=='%'?a3*(img.width()-1)/100:a3), > y1 = (int)cimg::round(sep4=='%'?a4*(img.height()-1)/100:a4), > z1 = (int)cimg::round(sep5=='%'?a5*(img.depth()-1)/100:a5); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(x0,y0,z0,x1,y1,z1,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(x0,y0,z0,x1,y1,z1,(bool)boundary); images_names[posi].mark(); } }; > } > ++position; > } else if ((boundary=0,std::sscanf(argument, > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-]%c", > st0.data(),st1.data(),st2.data(),st3.data(), > st4.data(),st5.data(),st6.data(),st7.data(),&end)==8 || > std::sscanf(argument,"%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%u%c", > st0.data(),st1.data(),st2.data(),st3.data(), > st4.data(),st5.data(),st6.data(),st7.data(),&boundary,&end)==9) && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%')) && > (std::sscanf(st4,"%f%c",&a4,&end)==1 || > (std::sscanf(st4,"%f%c%c",&a4,&sep4,&end)==2 && sep4=='%')) && > (std::sscanf(st5,"%f%c",&a5,&end)==1 || > (std::sscanf(st5,"%f%c%c",&a5,&sep5,&end)==2 && sep5=='%')) && > (std::sscanf(st6,"%f%c",&a6,&end)==1 || > (std::sscanf(st6,"%f%c%c",&a6,&sep6,&end)==2 && sep6=='%')) && > (std::sscanf(st7,"%f%c",&a7,&end)==1 || > (std::sscanf(st7,"%f%c%c",&a7,&sep7,&end)==2 && sep7=='%')) && > boundary<=1) { > print(images,0, > "Crop image%s with selection (%g%s,%g%s,%g%s,%g%s) x (%g%s,%g%s,%g%s,%g%s) " > "and %s boundary conditions.", > selection2string(selection,images_names,true).data(), > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > a4,sep4=='%'?"%":"", > a5,sep5=='%'?"%":"", > a6,sep6=='%'?"%":"", > a7,sep7=='%'?"%":"", > boundary?"neumann":"dirichlet"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > x0 = (int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > y0 = (int)cimg::round(sep1=='%'?a1*(img.height()-1)/100:a1), > z0 = (int)cimg::round(sep2=='%'?a2*(img.depth()-1)/100:a2), > v0 = (int)cimg::round(sep3=='%'?a3*(img.spectrum()-1)/100:a3), > x1 = (int)cimg::round(sep4=='%'?a4*(img.width()-1)/100:a4), > y1 = (int)cimg::round(sep5=='%'?a5*(img.height()-1)/100:a5), > z1 = (int)cimg::round(sep6=='%'?a6*(img.depth()-1)/100:a6), > v1 = (int)cimg::round(sep7=='%'?a7*(img.spectrum()-1)/100:a7); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(x0,y0,z0,v0,x1,y1,z1,v1,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(x0,y0,z0,v0,x1,y1,z1,v1,(bool)boundary); images_names[posi].mark(); } }; > } > ++position; > } else { > > print(images,0,"Crop image%s in interactive mode (skipped, no display support).", > selection2string(selection,images_names,true).data()); ># 5018 "gmic.cpp" > } > is_released = false; continue; > } > > > if (!std::strcmp("-channels",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > float value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c]",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-channels",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%'))) { > if (ind0) { value0 = images[*ind0].spectrum() - 1.0f; sep0 = 0; } > print(images,0,"Keep channel %g%s of image%s.", > value0,sep0=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.spectrum()-1)/100:value0); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_channel(nvalue0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.channel(nvalue0); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-channels",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%')) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep0,&end)==2 && > sep0==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-channels",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argy,"%f%c",&value1,&end)==1 || > (std::sscanf(argy,"%f%c%c",&value1,&sep1,&end)==2 && sep1=='%'))) { > if (ind0) { value0 = images[*ind0].spectrum() - 1.0f; sep0 = 0; } > if (ind1) { value1 = images[*ind1].spectrum() - 1.0f; sep1 = 0; } > print(images,0,"Keep channels %g%s..%g%s of image%s.", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.spectrum()-1)/100:value0), > nvalue1 = (int)cimg::round(sep1=='%'?value1*(img.spectrum()-1)/100:value1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_channels(nvalue0,nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.channels(nvalue0,nvalue1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"channels","Command '-%s': Invalid argument '%s'.","channels",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-columns",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > float value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c]",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-columns",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%'))) { > if (ind0) { value0 = images[*ind0].width() - 1.0f; sep0 = 0; } > print(images,0,"Keep column %g%s of image%s.", > value0,sep0=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.width()-1)/100:value0); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_column(nvalue0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.column(nvalue0); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-columns",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%')) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep0,&end)==2 && > sep0==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-columns",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argy,"%f%c",&value1,&end)==1 || > (std::sscanf(argy,"%f%c%c",&value1,&sep1,&end)==2 && sep1=='%'))) { > if (ind0) { value0 = images[*ind0].width() - 1.0f; sep0 = 0; } > if (ind1) { value1 = images[*ind1].width() - 1.0f; sep1 = 0; } > print(images,0,"Keep columns %g%s..%g%s of image%s.", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.width()-1)/100:value0), > nvalue1 = (int)cimg::round(sep1=='%'?value1*(img.width()-1)/100:value1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_columns(nvalue0,nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.columns(nvalue0,nvalue1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"columns","Command '-%s': Invalid argument '%s'.","columns",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-command",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> _arg_command(argument,std::strlen(argument)+1); > const char *arg_command_text = argument_text; > char *arg_command = _arg_command; > gmic_strreplace(arg_command); > > unsigned int siz = 0; > for (unsigned int l = 0; l<256; ++l) siz+=commands[l].size(); > > bool add_debug_infos = true; > if ((*arg_command=='0' || *arg_command=='1') && arg_command[1]==',') { > add_debug_infos = (*arg_command=='1'); > arg_command+=2; arg_command_text+=2; > } > > std::FILE *file = std::fopen(arg_command,"rb"); > if (file) { > print(images,0,"Import custom commands from file '%s'%s", > arg_command_text, > !add_debug_infos?" without debug infos":""); > add_commands(file,arg_command,commands_names,commands,commands_has_arguments, > add_debug_infos); > std::fclose(file); > } else if (!cimg::strncasecmp(arg_command,"http://",7) || > !cimg::strncasecmp(arg_command,"https://",8)) { > print(images,0,"Import custom commands from URL '%s'%s", > arg_command_text, > !add_debug_infos?" without debug infos":""); > CImg<char> filename_tmp(1024); > try { > file = std::fopen(cimg::load_network_external(arg_command,filename_tmp),"r"); > } catch (...) { > file = 0; > } > if (file) { > add_commands(file,arg_command,commands_names,commands,commands_has_arguments, > add_debug_infos); > std::fclose(file); > } else > error(images,0,0, > "Command '-command': Unable to reach custom commands file '%s' " > "from network.", > arg_command_text); > std::remove(filename_tmp); > } else { > print(images,0,"Import custom commands from expression '%s'", > arg_command_text); > add_commands(arg_command,commands_names,commands,commands_has_arguments); > } > if (verbosity>=0 || is_debug) { > unsigned int nb_added = 0; > for (unsigned int l = 0; l<256; ++l) nb_added+=commands[l].size(); > nb_added-=siz; > std::fprintf(cimg::output()," (added %u command%s, total %u).", > nb_added,nb_added>1?"s":"",siz+nb_added); > std::fflush(cimg::output()); > } > ++position; continue; > } > > > if (!std::strcmp("-camera",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float > cam_index = 0, nb_frames = 1, skip_frames = 0, > capture_width = 0, capture_height = 0; > if ((std::sscanf(argument,"%f%c", > &cam_index,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &cam_index,&nb_frames,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &cam_index,&nb_frames,&skip_frames,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%c", > &cam_index,&nb_frames,&skip_frames, > &capture_width,&capture_height,&end)==6) && > cam_index>=0 && nb_frames>=0 && skip_frames>=0 && > ((!capture_width && !capture_height) || (capture_width>0 && capture_height>0))) > ++position; > cam_index = cimg::round(cam_index); > nb_frames = cimg::round(nb_frames); > skip_frames = cimg::round(skip_frames); > capture_width = cimg::round(capture_width); > capture_height = cimg::round(capture_height); > if (!nb_frames) { > print(images,0,"Release camera #%g.",cam_index); > CImg<T>::get_load_camera((unsigned int)cam_index,0,true); > } else { > if (capture_width) > print(images,0,"Insert %g image%s from camera #%g, with %g frames skipping " > "and resolution %gx%g.", > cam_index,nb_frames,nb_frames>1?"s":"",skip_frames, > capture_width,capture_height); > else print(images,0,"Insert %g image%s from camera #%g, with %g frames skipping.", > cam_index,nb_frames,nb_frames>1?"s":"",skip_frames); > snprintf(title,_title.size(),"[Camera #%g]",cam_index); > const CImg<char> _title = CImg<char>::string(title); > if (nb_frames>1) { > std::fputc('\n',cimg::output()); > std::fflush(cimg::output()); > } > for (unsigned int k = 0; k<(unsigned int)nb_frames; ++k) { > if (nb_frames>1 && (verbosity>=0 || is_debug)) { > std::fprintf(cimg::output(),"\r > Image %u/%u ", > k+1,(unsigned int)nb_frames); > std::fflush(cimg::output()); > } > CImg<T>::get_load_camera((unsigned int)cam_index,(unsigned int)skip_frames,false, > (unsigned int)capture_width,(unsigned int)capture_height). > move_to(images); > images_names.insert(_title); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-check3d",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > bool is_full_check = true; > if (!argument[1] && (*argument=='0' || *argument=='1')) { > is_full_check = (*argument=='1'); > ++position; > } else is_full_check = true; > if (verbosity>0 || is_debug) > print(images,0,"Check validity of 3d object%s (%s check)", > selection2string(selection,images_names,true).data(), > is_full_check?"full":"fast"); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > CImg<char> message(1024); > if (!img.is_CImg3d(is_full_check,message)) { > if (verbosity>0 || is_debug) { > std::fprintf(cimg::output()," -> invalid."); > std::fflush(cimg::output()); > } > error(images,0,0, > "Command '-check3d': Invalid 3d object [%d], in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > } > } > if (verbosity>0 || is_debug) { > std::fprintf(cimg::output()," -> valid."); > std::fflush(cimg::output()); > } > continue; > } > > > > > if (!std::strcmp("-cut",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > double value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-cut",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argx,"%lf%c%c",&value0,&sep0,&end)==2 && sep0=='%') || > std::sscanf(argx,"%lf%c",&value0,&end)==1) && > ((std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep1,&end)==2 && > sep1==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-cut",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argy,"%lf%c%c",&value1,&sep1,&end)==2 && sep1=='%') || > std::sscanf(argy,"%lf%c",&value1,&end)==1)) { > if (ind0) { value0 = images[*ind0].min(); sep0 = 0; } > if (ind1) { value1 = images[*ind1].max(); sep1 = 0; } > print(images,0,"Cut image%s in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_cut((T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.cut((T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-cut",true, > false,CImg<char>::empty())).height()==1) { > if (images[*ind0]) value1 = (double)images[*ind0].max_min(value0); > print(images,0,"Cut image%s in range [%g,%g].", > selection2string(selection,images_names,true).data(), > value0, > value1); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_cut((T)value0,(T)value1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].cut((T)value0,(T)value1); images_names[posi].mark(); } }; > } > ++position; > } else { > > print(images,0,"Cut image%s in interactive mode (skipped, no display support).", > selection2string(selection,images_names,true).data()); ># 5420 "gmic.cpp" > } > is_released = false; continue; > } > > > if (!std::strcmp("-cos",command)) { print(images,0,"Compute pointwise cosine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_cos(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].cos(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-convolve",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, is_normalized = 0; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&boundary,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&boundary,&is_normalized,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-convolve",true, > false,CImg<char>::empty())).height()==1 && > boundary<=1) { > print(images,0, > "Convolve image%s with mask [%u] and %s boundary conditions, " > "with%s normalization.", > selection2string(selection,images_names,true).data(), > *ind, > boundary?"neumann":"dirichlet", > is_normalized?"":"out"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_convolve(mask,boundary,(bool)is_normalized); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].convolve(mask,boundary,(bool)is_normalized); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"convolve","Command '-%s': Invalid argument '%s'.","convolve",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-correlate",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, is_normalized = 0; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&boundary,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&boundary,&is_normalized,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-correlate",true, > false,CImg<char>::empty())).height()==1 && > boundary<=1) { > print(images,0, > "Correlate image%s with mask [%u] and %s boundary conditions, " > "with%s normalization.", > selection2string(selection,images_names,true).data(), > *ind, > boundary?"neumann":"dirichlet", > is_normalized?"":"out"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_correlate(mask,boundary,(bool)is_normalized); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].correlate(mask,boundary,(bool)is_normalized); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"correlate","Command '-%s': Invalid argument '%s'.","correlate",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-color3d",command) || !std::strcmp("-col3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float R = 200, G = 200, B = 200, opacity = -1; > if ((std::sscanf(argument,"%f%c", > &R,&end)==1 && ((B=G=R),1)) || > (std::sscanf(argument,"%f,%f%c", > &R,&G,&end)==2 && ((B=0),1)) || > std::sscanf(argument,"%f,%f,%f%c", > &R,&G,&B,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &R,&G,&B,&opacity,&end)==4) { > const bool set_opacity = (opacity>=0); > if (set_opacity) > print(images,0,"Set colors of 3d object%s to (%g,%g,%g), with opacity %g.", > selection2string(selection,images_names,true).data(), > R,G,B, > opacity); > else > print(images,0,"Set color of 3d object%s to (%g,%g,%g).", > selection2string(selection,images_names,true).data(), > R,G,B); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_color_CImg3d(R,G,B,opacity,true,set_opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.color_CImg3d(R,G,B,opacity,true,set_opacity); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-color3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"color3d","Command '-%s': Invalid argument '%s'.","color3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-cursor",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (!is_restriction) > CImg<unsigned int>::vector(0,1,2,3,4,5,6,7,8,9).move_to(selection); > bool value = true; > if (!argument[1] && (*argument=='0' || *argument=='1')) { > value = (*argument=='1'); ++position; > } else value = true; > > > print(images,0,"%s mouse cursor for instant window%s (skipped, no display support).", > value?"Show":"Hide", > selection2string(selection,images_names,true).data()); ># 5558 "gmic.cpp" > continue; > } > > > if (!std::strcmp("-cosh",command)) { print(images,0,"Compute pointwise hyperbolic cosine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_cosh(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].cosh(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > } > > > > > else if (command1=='d') { > > > if (!std::strcmp("-done",item)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='r') > error(images,0,0, > "Command '-done': Not associated to a '-repeat' command " > "within the same scope."); > if (--repeatdones.back()(1)) { > ++repeatdones.back()(2); > position = repeatdones.back()(0); > } else { > if (verbosity>0 || is_debug) print(images,0,"End 'repeat..done' block."); > repeatdones.remove(); > scope.remove(); > } > continue; > } > > > if (!std::strcmp("-do",item)) { > CImg<char>::string("*do").move_to(scope); > if (verbosity>0 || is_debug) print(images,0,"Start '-do..-while' block."); > CImg<unsigned int>::vector(position).move_to(dowhiles); > continue; > } > > > if (!std::strcmp("-discard",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 0; > if (std::sscanf(argument,"%f%c", > &value,&end)==1) { > print(images,0,"Remove value %g in image%s.", > value, > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_discard((T)value); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].discard((T)value); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"discard","Command '-%s': Invalid argument '%s'.","discard",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-debug",item)) { > is_debug = true; > continue; > } > > > > > if (!std::strcmp("-div",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Divide image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator/=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator/=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-div", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Divide image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].div(img0); } else { images_names[selection[l]].mark(); img.div(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Divide image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].div((const char*)formula); } else { images_names[selection[l]].mark(); img.div((const char*)formula); } } ++position; } else { print(images,0,"Divide image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.div(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.div(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 5632 "gmic.cpp" > ; > > > if (!std::strcmp("-distance",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int algorithm = 0, off = 0; > char sep1 = 0, sep2 = 0; > CImg<unsigned int> ind; > double value = 0; > int metric = 2; > if ((std::sscanf(argument,"%lf%c", > &value,&end)==1 || > (std::sscanf(argument,"%lf%c%c", > &value,&sep1,&end)==2 && sep1=='%') || > std::sscanf(argument,"%lf,%d%c", > &value,&metric,&end)==2 || > (std::sscanf(argument,"%lf%c,%d%c", > &value,&sep1,&metric,&end)==3 && sep1=='%')) && > metric>=0 && metric<=3) { > print(images,0,"Compute distance map to isovalue %g%s in image%s, " > "with %s metric.", > value,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data(), > metric==0?"chebyshev":metric==1?"manhattan":metric==2?"euclidean": > "squared-euclidean"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > double nvalue = value; > if (sep1=='%' && img) { > double vmin, vmax = (double)img.max_min(vmin); > nvalue = vmin + value*(vmax-vmin)/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_distance((T)nvalue,metric); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.distance((T)nvalue,metric); images_names[posi].mark(); } }; > } > } else if ((((std::sscanf(argument,"%lf,[%255[a-zA-Z0-9_.%+-]%c%c", > &value,indices,&sep2,&end)==3 || > (std::sscanf(argument,"%lf%c,[%255[a-zA-Z0-9_.%+-]%c%c", > &value,&sep1,indices,&sep2,&end)==4 && sep1=='%')) && > sep2==']') || > ((std::sscanf(argument,"%lf,[%255[a-zA-Z0-9_.%+-]],%u%c", > &value,indices,&algorithm,&end)==3 || > (std::sscanf(argument,"%lf%c,[%255[a-zA-Z0-9_.%+-]],%u%c", > &value,&sep1,indices,&algorithm,&end)==4 && sep1=='%')) && > algorithm<=4)) && > (ind=selection2cimg(indices,images.size(),images_names,"-distance",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Compute distance map%s to isovalue %g%s in image%s, " > "using %s algorithm, with metric [%u].", > selection.height()>1?(algorithm>=3?"s and return paths":"s"): > (algorithm>=3?" and return path":""), > value,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data(), > algorithm==0?"fast-marching":algorithm==1||algorithm==3? > "low-connectivity dijkstra":"high-connectivity dijkstra", > *ind); > const CImg<T> custom_metric = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > if (algorithm<3) for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > double nvalue = value; > if (sep1=='%' && img) { > double vmin, vmax = (double)img.max_min(vmin); > nvalue = vmin + value*(vmax-vmin)/100; > } > if (!algorithm) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_distance_eikonal((T)nvalue,custom_metric); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.distance_eikonal((T)nvalue,custom_metric); images_names[posi].mark(); } }; } > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_distance_dijkstra((T)nvalue,custom_metric,algorithm==2); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.distance_dijkstra((T)nvalue,custom_metric,algorithm==2); images_names[posi].mark(); } }; } > } > else for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<T>& img = check_image(images,images[ind]); > double nvalue = value; > if (sep1=='%' && img) { > double vmin, vmax = (double)img.max_min(vmin); > nvalue = vmin + value*(vmax-vmin)/100; > } > CImg<char> name = images_names[ind].get_mark(); > CImg<T> path(1), > dist = img.get_distance_dijkstra((T)nvalue,custom_metric,algorithm==4,path); > if (is_get_version) { > images_names.insert(2,name.copymark()); > dist.move_to(images,~0U); > path.move_to(images,~0U); > } else { > off+=1; > dist.move_to(images[ind].assign()); > path.move_to(images,ind+1); > images_names[ind] = name; > images_names.insert(name.copymark(),ind+1); > } > } > } else gmic::error(images,0,"distance","Command '-%s': Invalid argument '%s'.","distance",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-dilate",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sx = 3, sy = 3, sz = 1; > unsigned int boundary = 1, is_normalized = 0; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&boundary,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&boundary,&is_normalized,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-dilate",true, > false,CImg<char>::empty())).height()==1 && > boundary<=1) { > print(images,0,"Dilate image%s with mask [%u] and %s boundary conditions, " > "with%s normalization.", > selection2string(selection,images_names,true).data(), > *ind, > boundary?"neumann":"dirichlet", > is_normalized?"":"out"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_dilate(mask,boundary, (bool)is_normalized); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].dilate(mask,boundary, (bool)is_normalized); images_names[posi].mark(); } } > ; > } > } else if ((std::sscanf(argument,"%f%c", > &sx,&end)==1) && > sx>=0) { > sx = cimg::round(sx); > print(images,0,"Dilate image%s with mask of size %g and neumann boundary conditions.", > selection2string(selection,images_names,true).data(), > sx); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_dilate((unsigned int)sx); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].dilate((unsigned int)sx); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%f,%f%c", > &sx,&sy,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &sx,&sy,&sz,&end)==3) && > sx>=0 && sy>=0 && sz>=0) { > sx = cimg::round(sx); > sy = cimg::round(sy); > sz = cimg::round(sz); > print(images,0,"Dilate image%s with %gx%gx%g mask and neumann boundary conditions.", > selection2string(selection,images_names,true).data(), > sx,sy,sz); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_dilate((unsigned int)sx,(unsigned int)sy, (unsigned int)sz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].dilate((unsigned int)sx,(unsigned int)sy, (unsigned int)sz); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"dilate","Command '-%s': Invalid argument '%s'.","dilate",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-double3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > bool value = true; > if (!argument[1] && (*argument=='0' || *argument=='1')) { > value = (*argument=='1'); > ++position; > } else value = true; > is_double3d = value; > print(images,0,"%s double-sided mode for 3d rendering.", > is_double3d?"Enable":"Disable"); > continue; > } > > > if (!std::strcmp("-denoise",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sigma_s = 10, sigma_r = 10, smoothness = 1; > unsigned int is_fast_approximation = 0; > float psize = 5, rsize = 6; > if ((std::sscanf(argument,"%f%c", > &sigma_s,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &sigma_s,&sigma_r,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &sigma_s,&sigma_r,&psize,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &sigma_s,&sigma_r,&psize,&rsize,&end)==4 || > std::sscanf(argument,"%f,%f,%f,%f,%f%c", > &sigma_s,&sigma_r,&psize,&rsize,&smoothness,&end)==5 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%u%c", > &sigma_s,&sigma_r,&psize,&rsize,&smoothness, > &is_fast_approximation,&end)==6) && > sigma_s>=0 && sigma_r>=0 && psize>=0 && rsize>=0 && is_fast_approximation<=1) { > psize = cimg::round(psize); > rsize = cimg::round(rsize); > print(images,0,"Denoise image%s using %gx%g patchs, with standard deviations %lg,%g, " > "lookup size %g and smoothness %g.", > selection2string(selection,images_names,true).data(), > psize, > psize, > sigma_s, > sigma_r, > rsize, > smoothness); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_patch(sigma_s,sigma_r, (unsigned int)psize,(unsigned int)rsize, smoothness, (bool)is_fast_approximation); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_patch(sigma_s,sigma_r, (unsigned int)psize,(unsigned int)rsize, smoothness, (bool)is_fast_approximation); images_names[posi].mark(); } } > > > ; > } > } else gmic::error(images,0,"denoise","Command '-%s': Invalid argument '%s'.","denoise",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-deriche",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, order = 0; > char sep = 0, axis = 0; > float sigma = 0; > if ((std::sscanf(argument,"%f,%u,%c%c",&sigma,&order,&axis,&end)==3 || > (std::sscanf(argument,"%f%c,%u,%c%c",&sigma,&sep,&order,&axis,&end)==4 && > sep=='%') || > std::sscanf(argument,"%f,%u,%c,%u%c",&sigma,&order,&axis,&boundary,&end)==4 || > (std::sscanf(argument,"%f%c,%u,%c,%u%c", > &sigma,&sep,&order,&axis,&boundary,&end)==5 && sep=='%')) && > sigma>=0 && order<=2 && (axis=='x' || axis=='y' || axis=='z' || axis=='c') && > boundary<=1) { > print(images,0,"Apply Deriche filter on image%s, with standard " > "deviation %g%s, order %d, axis '%c' and %s boundary conditions.", > selection2string(selection,images_names,true).data(), > sigma,sep=='%'?"%":"", > order,axis, > boundary?"neumann":"dirichlet"); > if (sep=='%') sigma = -sigma; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_deriche(sigma,order,axis,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].deriche(sigma,order,axis,(bool)boundary); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"deriche","Command '-%s': Invalid argument '%s'.","deriche",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-dijkstra",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float snode = 0, enode = 0; > if (std::sscanf(argument,"%f,%f%c",&snode,&enode,&end)==2 && > snode>=0 && enode>=0) { > snode = cimg::round(snode); > enode = cimg::round(enode); > print(images,0,"Compute minimal path from adjacency matri%s%s with the " > "Dijkstra algorithm.", > selection.height()>1?"ce":"x",selection2string(selection,images_names,true).data()); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<char> name = images_names[ind].get_mark(); > if (is_get_version) { > CImg<T> path, dist = check_image(images,images[ind]).get_dijkstra((unsigned int)snode, > (unsigned int)enode, > path); > images_names.insert(name.copymark()); > name.move_to(images_names); > dist.move_to(images); > path.move_to(images); > } else { > CImg<T> path; > check_image(images,images[ind]).dijkstra((unsigned int)snode,(unsigned int)enode,path); > images_names.insert(name.get_copymark(),ind+1); > name.move_to(images_names[ind]); > images.insert(path,ind+1); > ++off; > } > } > } else gmic::error(images,0,"dijkstra","Command '-%s': Invalid argument '%s'.","dijkstra",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-displacement",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float nb_scales = 0, nb_iterations = 10000, smoothness = 0.1f, precision = 5.0f; > unsigned int is_backward = 1; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&smoothness,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f%c", > indices,&smoothness,&precision,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f%c", > indices,&smoothness,&precision,&nb_scales,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f%c", > indices,&smoothness,&precision,&nb_scales,&nb_iterations,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%u%c", > indices,&smoothness,&precision,&nb_scales,&nb_iterations, > &is_backward,&end)==6) && > (ind=selection2cimg(indices,images.size(),images_names,"-displacement",true, > false,CImg<char>::empty())).height()==1 && > precision>=0 && nb_scales>=0 && nb_iterations>=0 && is_backward<=1) { > nb_scales = cimg::round(nb_scales); > nb_iterations = cimg::round(nb_iterations); > print(images,0,"Estimate displacement field from source [%u] to image%s, with " > "%s smoothness %g, precision %g, %g scales, %g iterations, in %s direction.", > *ind, > selection2string(selection,images_names,true).data(), > smoothness>=0?"isotropic":"anisotropic",cimg::abs(smoothness), > precision, > nb_scales, > nb_iterations, > is_backward?"backward":"forward"); > const CImg<T> source = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_displacement(source,smoothness,precision, (unsigned int)nb_scales, (unsigned int)nb_iterations, (bool)is_backward); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].displacement(source,smoothness,precision, (unsigned int)nb_scales, (unsigned int)nb_iterations, (bool)is_backward); images_names[posi].mark(); } } > > > ; > } > } else gmic::error(images,0,"displacement","Command '-%s': Invalid argument '%s'.","displacement",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-display",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int X,Y,Z, XYZ[3]; > bool is_xyz = false; > if (std::sscanf(argument,"%u,%u,%u%c", > &X,&Y,&Z,&end)==3) { is_xyz = true; ++position; } > XYZ[0] = X; XYZ[1] = Y; XYZ[2] = Z; > display_images(images,images_names,selection,is_xyz?XYZ:0); > is_released = true; continue; > } > > > if (!std::strcmp("-display3d",command) && !is_get_version) { > display_objects3d(images,images_names,selection); > is_released = true; continue; > } > > > } > > > > > else if (command1=='e') { > > > if (!std::strcmp("-endif",item)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='i') > error(images,0,0, > "Command '-endif': Not associated to a '-if' command within the same scope."); > if (verbosity>0 || is_debug) print(images,0,"End 'if..endif' block."); > check_elif = false; > scope.remove(); > continue; > } > > > if (!std::strcmp("-else",item) || (!std::strcmp("-elif",item) && !check_elif)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='i') > error(images,0,0, > "Command '%s': Not associated to a '-if' command within the same scope.", > item); > check_elif = false; > if (verbosity>0 || is_debug) print(images,0,"Reach '-else' block."); > for (int nb_ifs = 1; nb_ifs && position<commands_line.size(); ++position) { > const char *const it = commands_line[position].data(); > if (!std::strcmp("-if",it)) ++nb_ifs; > else if (!std::strcmp("-endif",it)) { if (!--nb_ifs) --position; } > } > continue; > } > > > if (!std::strcmp("-endlocal",item) || !std::strcmp("-endl",item)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='l') > error(images,0,0, > "Command '-endlocal': Not associated to a '-local' command within " > "the same scope."); > if (verbosity>0 || is_debug) print(images,0,"End 'local..endlocal' block."); > is_endlocal = true; > break; > } > > > if (!std::strcmp("-echo",command) && !is_get_version) { > if (verbosity>=0 || is_debug) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> str(argument,std::strlen(argument)+1); > cimg::strunescape(str); > if (is_restriction) print(images,&selection,"%s",str.data()); > else print(images,0,"%s",str.data()); > } > ++position; continue; > } > > > if (!std::strcmp("-exec",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > > > > > print(images,0,"Execute external command '%s'\n", > argument_text); > CImg<char> arg_exec(argument,std::strlen(argument)+1); > gmic_strreplace(arg_exec); > cimg::strunescape(arg_exec); > cimg::mutex(31); > const int errcode = cimg::system(arg_exec); > cimg::mutex(31,0); > snprintf(title,_title.size(),"%d",errcode); > CImg<char>::string(title).move_to(status); > if (errcode) print(images,0,"Command '-exec' returned error code '%d'.", > errcode); > > ++position; continue; > } > > > if (!std::strcmp("-error",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> str(argument,std::strlen(argument)+1); > cimg::strunescape(str); > if (is_restriction) error(images,&selection,0,"%s",str.data()); > else error(images,0,0,"%s",str.data()); > } > > > if (!std::strcmp("-endian",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (!std::strcmp(argument,"bool") || !std::strcmp(argument,"uchar") || > !std::strcmp(argument,"unsigned char") || !std::strcmp(argument,"char") || > !std::strcmp(argument,"ushort") || !std::strcmp(argument,"unsigned short") || > !std::strcmp(argument,"short") || !std::strcmp(argument,"uint") || > !std::strcmp(argument,"unsigned int") || !std::strcmp(argument,"int") || > !std::strcmp(argument,"ulong") || !std::strcmp(argument,"unsigned long") || > !std::strcmp(argument,"long") || !std::strcmp(argument,"float") || > !std::strcmp(argument,"double")) { > print(images,0,"Invert data endianness of image%s, with assumed pixel type '%s'.", > selection2string(selection,images_names,true).data(),argument); > ++position; > } else print(images,0,"Invert data endianness of image%s.", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_gmic_invert_endianness(argument); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].gmic_invert_endianness(argument); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > > > if (!std::strcmp("-exp",command)) { print(images,0,"Compute pointwise exponential of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_exp(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].exp(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-eq",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean equality between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_eq((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_eq((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-eq", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean equality between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_eq(img0); } else { images_names[selection[l]].mark(); img.operator_eq(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean equality between image%s and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_eq((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_eq((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean equality between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_eq(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_eq(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 6093 "gmic.cpp" > ; > > > if (!std::strcmp("-ellipse",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> argR(256), argr(256); > *argx = *argy = *argR = *argr = *color = 0; > float x = 0, y = 0, R = 0, r = 0, angle = 0, opacity = 1; > char sepx = 0, sepy = 0, sepR = 0, sepr = 0, seph = 0; > unsigned int pattern = ~0U; > if ((std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argR.data(),&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > argx,argy,argR.data(),argr.data(),&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f%c", > argx,argy,argR.data(),argr.data(),&angle,&end)==5 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%f%c", > argx,argy,argR.data(),argr.data(),&angle,&opacity,&end)==6 || > (std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%f,0%c%x%c", > argx,argy,argR.data(),argr.data(),&angle,&opacity,&seph,&pattern, > &end)==8 && > seph=='x') || > (std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%f,%4095[0-9.eE,+-]%c", > argx,argy,argR.data(),argr.data(),&angle,&opacity,color,&end)==7 && > (bool)(pattern=~0U))|| > (*color=0,std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%f,0%c%x,%4095[0-9.eE,+-]%c", > argx,argy,argR.data(),argr.data(),&angle,&opacity,&seph, > &pattern,color,&end)==9 && > seph=='x')) && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (std::sscanf(argR,"%f%c",&R,&end)==1 || > (std::sscanf(argR,"%f%c%c",&R,&sepR,&end)==2 && sepR=='%')) && > (!*argr || > std::sscanf(argr,"%f%c",&r,&end)==1 || > (std::sscanf(argr,"%f%c%c",&r,&sepr,&end)==2 && sepr=='%'))) { > if (!*argr) r = R; > print(images,0,"Draw %s ellipse at (%g%s,%g%s) with radii (%g%s,%g%s) on image%s, " > "with orientation %g°, opacity %g and color (%s).", > seph=='x'?"outlined":"filled", > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > R,sepR=='%'?"%":"", > r,sepr=='%'?"%":"", > selection2string(selection,images_names,true).data(), > angle, > opacity, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > const float rmax = std::sqrt((float)cimg::sqr(img.width()) + > cimg::sqr(img.height())); > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y); > const float > nR = cimg::round(sepR=='%'?R*rmax/100:R), > nr = cimg::round(sepr=='%'?r*rmax/100:r); > if (seph=='x') { > if (nR==nr) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_circle(nx,ny,(int)nR,col.data(),opacity,~0U); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_circle(nx,ny,(int)nR,col.data(),opacity,~0U); images_names[posi].mark(); } };} > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_ellipse(nx,ny,nR,nr,angle,col.data(),opacity,~0U); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_ellipse(nx,ny,nR,nr,angle,col.data(),opacity,~0U); images_names[posi].mark(); } }; } > } else { > if (nR==nr) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_circle(nx,ny,(int)nR,col.data(),opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_circle(nx,ny,(int)nR,col.data(),opacity); images_names[posi].mark(); } }; } > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_ellipse(nx,ny,nR,nr,angle,col.data(),opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_ellipse(nx,ny,nR,nr,angle,col.data(),opacity); images_names[posi].mark(); } }; } > } > } > } else gmic::error(images,0,"ellipse","Command '-%s': Invalid argument '%s'.","ellipse",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-equalize",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sep = 0, sep0 = 0, sep1 = 0; > double value0 = 0, value1 = 0; > float nb_levels = 256; > bool no_min_max = false; > if (((std::sscanf(argument,"%f%c", > &nb_levels,&end)==1 && (no_min_max=true)) || > ((std::sscanf(argument,"%f%c%c", > &nb_levels,&sep,&end)==2 && sep=='%') && (no_min_max=true)) || > std::sscanf(argument,"%f,%lf,%lf%c", > &nb_levels,&value0,&value1,&end)==3 || > (std::sscanf(argument,"%f%c,%lf,%lf%c", > &nb_levels,&sep,&value0,&value1,&end)==4 && sep=='%') || > (std::sscanf(argument,"%f,%lf%c,%lf%c", > &nb_levels,&value0,&sep0,&value1,&end)==4 && sep0=='%') || > (std::sscanf(argument,"%f%c,%lf%c,%lf%c", > &nb_levels,&sep,&value0,&sep0,&value1,&end)==5 && sep=='%' && > sep0=='%') || > (std::sscanf(argument,"%f,%lf,%lf%c%c", > &nb_levels,&value0,&value1,&sep1,&end)==4 && sep1=='%') || > (std::sscanf(argument,"%f%c,%lf,%lf%c%c", > &nb_levels,&sep,&value0,&value1,&sep1,&end)==5 && sep=='%' && > sep1=='%') || > (std::sscanf(argument,"%f,%lf%c,%lf%c%c", > &nb_levels,&value0,&sep0,&value1,&sep1,&end)==5 && sep0=='%' && > sep1=='%') || > (std::sscanf(argument,"%f%c,%lf%c,%lf%c%c", > &nb_levels,&sep,&value0,&sep0,&value1,&sep1,&end)==6 && sep=='%' && > sep0=='%' && sep1=='%')) && > nb_levels>=0.5) { nb_levels = cimg::round(nb_levels); ++position; } > else { nb_levels = 256; value0 = 0; value1 = 100; sep = 0; sep0 = sep1 = '%'; } > if (no_min_max) { value0 = 0; value1 = 100; sep0 = sep1 = '%'; } > print(images,0,"Equalize histogram of image%s, with %g%s levels in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > nb_levels,sep=='%'?"%":"", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > const unsigned int > _nb_levels = cimg::max(1U, > (unsigned int)cimg::round(sep=='%'? > nb_levels*(1+nvalue1-nvalue0)/100: > nb_levels)); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_equalize(_nb_levels,(T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].equalize(_nb_levels,(T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-erode",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, is_normalized = 0; > float sx = 3, sy = 3, sz = 1; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&boundary,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&boundary,&is_normalized,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-erode",true, > false,CImg<char>::empty())).height()==1 && > boundary<=1) { > print(images,0,"Erode image%s with mask [%u] and %s boundary conditions, " > "with%s normalization.", > selection2string(selection,images_names,true).data(), > *ind, > boundary?"neumann":"dirichlet", > is_normalized?"":"out"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_erode(mask,boundary,(bool)is_normalized); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].erode(mask,boundary,(bool)is_normalized); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%f%c", > &sx,&end)==1) && > sx>=0) { > sx = cimg::round(sx); > print(images,0,"Erode image%s with mask of size %g and neumann boundary conditions.", > selection2string(selection,images_names,true).data(), > sx); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_erode((unsigned int)sx); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].erode((unsigned int)sx); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%f,%f%c", > &sx,&sy,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &sx,&sy,&sz,&end)==3) && > sx>=0 && sy>=0 && sz>=0) { > sx = cimg::round(sx); > sy = cimg::round(sy); > sz = cimg::round(sz); > print(images,0,"Erode image%s with %gx%gx%g mask and neumann boundary conditions.", > selection2string(selection,images_names,true).data(), > sx,sy,sz); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_erode((unsigned int)sx,(unsigned int)sy, (unsigned int)sz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].erode((unsigned int)sx,(unsigned int)sy, (unsigned int)sz); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"erode","Command '-%s': Invalid argument '%s'.","erode",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-elevation3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > float fact = 1; > char sep = 0; > *formula = 0; > if (std::sscanf(argument,"'%4095[^']'%c",formula,&end)==1) { > print(images,0,"Build 3d elevation of image%s, with elevation formula '%s'.", > selection2string(selection,images_names,true).data(), > formula); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > CImg<typename CImg<T>::Tfloat> elev(img.width(),img.height(),1,1,formula,true); > CImgList<unsigned int> primitives; > CImgList<float> colors; > CImg<float> vertices = img.get_elevation3d(primitives,colors,elev); > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-elevation3d",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Build 3d elevation of image%s, with elevation map [%u].", > selection2string(selection,images_names,true).data(), > *ind); > CImg<typename CImg<T>::Tfloat> elev; > if (images[*ind].spectrum()>1) images[*ind].get_norm().move_to(elev); > else elev = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > CImgList<unsigned int> primitives; > CImgList<float> colors; > CImg<float> vertices = img.get_elevation3d(primitives,colors,elev); > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } > ++position; > } else { > if (std::sscanf(argument,"%f%c", > &fact,&end)==1) { > print(images,0,"Build 3d elevation of image%s, with elevation factor %g.", > selection2string(selection,images_names,true).data(), > fact); > ++position; > } else > print(images,0,"Build 3d elevation of image%s.", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > CImgList<unsigned int> primitives; > CImgList<float> colors; > CImg<typename CImg<T>::Tfloat> elev; > if (fact==1 && img.spectrum()==1) elev = img.get_shared(); > else if (img.spectrum()>1) (img.get_norm().move_to(elev))*=fact; > else (elev = img)*=fact; > CImg<float> vertices = img.get_elevation3d(primitives,colors,elev); > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-eigen",command)) { > print(images,0,"Compute eigen-values/vectors of symmetric matri%s or matrix field%s.", > selection.height()>1?"ce":"x",selection2string(selection,images_names,true).data()); > CImg<float> val, vec; > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<char> name = images_names[ind].get_mark(); > check_image(images,images[ind]).gmic_symmetric_eigen(val,vec); > if (is_get_version) { > images_names.insert(name.copymark()); > name.move_to(images_names); > val.move_to(images); > vec.move_to(images); > } else { > images_names.insert(name.get_copymark(),ind+1); name.move_to(images_names[ind]); > val.move_to(images[ind].assign()); images.insert(vec,ind+1); > ++off; > } > } > is_released = false; continue; > } > > > } > > > > > else if (command1=='f') { > > > > > if (!std::strcmp("-fill",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double value = 0; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"%lf%c", > &value,&end)==1) { > print(images,0,"Fill image%s with %g.", > selection2string(selection,images_names,true).data(), > value); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_fill((T)value); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].fill((T)value); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-fill",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Fill image%s with values from image [%u].", > selection2string(selection,images_names,true).data(), > *ind); > const CImg<T> values = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_fill(values); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].fill(values); images_names[posi].mark(); } }; > } > } else { > CImg<char> arg_fill_text(argument_text,std::strlen(argument_text)+1); > cimg::strpare(arg_fill_text,'\'',true,false); > print(images,0,"Fill image%s with expression '%s'.", > selection2string(selection,images_names,true).data(), > arg_fill_text.data()); > CImg<char> arg_fill(argument,std::strlen(argument)+1); > cimg::strpare(arg_fill,'\'',true,false); > gmic_strreplace(arg_fill); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_fill(arg_fill.data(),true); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].fill(arg_fill.data(),true); images_names[posi].mark(); } }; > } > } > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-flood",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x = 0, y = 0, z = 0, tolerance = 0, opacity = 1; > unsigned int is_high_connectivity = 0; > char sepx = 0, sepy = 0, sepz = 0; > *argx = *argy = *argz = *color = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > argx,argy,argz,&tolerance,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%u%c", > argx,argy,argz,&tolerance,&is_high_connectivity,&end)==5 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%u,%f%c", > argx,argy,argz,&tolerance,&is_high_connectivity,&opacity,&end)==6 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%u,%f," > "%4095[0-9.eE,+-]%c", > argx,argy,argz,&tolerance,&is_high_connectivity, > &opacity,color,&end)==7) && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%')) && > tolerance>=0) { > print(images,0, > "Flood fill image%s from (%g%s,%g%s,%g%s), with tolerance %g, %s connectivity," > "opacity %g and color (%s).", > selection2string(selection,images_names,true).data(), > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > tolerance, > is_high_connectivity?"high":"low", > opacity, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_fill(nx,ny,nz,col.data(),opacity,tolerance, (bool)is_high_connectivity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_fill(nx,ny,nz,col.data(),opacity,tolerance, (bool)is_high_connectivity); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"flood","Command '-%s': Invalid argument '%s'.","flood",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-focale3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 700; > if (std::sscanf(argument,"%f%c",&value,&end)==1) ++position; > else value = 700; > focale3d = value; > print(images,0,"Set 3d focale to %g.", > focale3d); > continue; > } > > > } > > > > > else if (command1=='g') { > > > > > if (!std::strcmp("-ge",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean 'greater or equal than' between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_ge((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_ge((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-ge", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean 'greater or equal than' between image%s " "and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_ge(img0); } else { images_names[selection[l]].mark(); img.operator_ge(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean 'greater or equal than' between image%s " "and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_ge((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_ge((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean 'greater or equal than' between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_ge(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_ge(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 6516 "gmic.cpp" > ; > > > if (!std::strcmp("-gt",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean 'greater than' between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_gt((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_gt((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-gt", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean 'greater than' between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_gt(img0); } else { images_names[selection[l]].mark(); img.operator_gt(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean 'greater than' between image%s and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_gt((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_gt((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean 'greater than' between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_gt(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_gt(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 6528 "gmic.cpp" > ; > > > if (!std::strcmp("-gradient",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char axes[16]; > int scheme = 3; > *axes = 0; > if ((std::sscanf(argument,"%15[xyz]%c", > axes,&end)==1 || > std::sscanf(argument,"%15[xyz],%d%c", > axes,&scheme,&end)==2) && > scheme>=-1 && scheme<=5) { > ++position; > print(images,0,"Compute gradient of image%s along axes '%s', with %s scheme.", > selection2string(selection,images_names,true).data(), > axes, > scheme==-1?"backward differences":scheme==4?"deriche":scheme==5?"vanvliet": > scheme==1?"forward differences":scheme==2?"sobel": > scheme==3?"rotation invariant":"centered differences"); > } else print(images,0,"Compute gradient of image%s, with rotation invariant scheme.", > selection2string(selection,images_names,true).data()); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<T>& img = check_image(images,images[ind]); > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> gradient = img.get_gradient(*axes?axes:0,scheme); > if (is_get_version) { > images_names.insert(gradient.size(),name.copymark()); > gradient.move_to(images,~0U); > } else { > off+=gradient.size() - 1; > gradient[0].move_to(images[ind].assign()); > for (unsigned int i = 1; i<gradient.size(); ++i) gradient[i].move_to(images,ind+i); > images_names[ind] = name; > if (gradient.size()>1) > images_names.insert(gradient.size()-1,name.copymark(),ind+1); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-graph",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double ymin = 0, ymax = 0, xmin = 0, xmax = 0; > unsigned int plot_type = 1, vertex_type = 1; > float resolution = 65536, opacity = 1; > unsigned int pattern = ~0U; > CImg<unsigned int> ind; > char sep = 0, seph = 0; > *formula = *color = 0; > if (((std::sscanf(argument,"'%1023[^']%c%c", > formula,&sep,&end)==2 && sep=='\'') || > std::sscanf(argument,"'%1023[^']',%f%c", > formula,&resolution,&end)==2 || > std::sscanf(argument,"'%1023[^']',%f,%u%c", > formula,&resolution,&plot_type,&end)==3 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u%c", > formula,&resolution,&plot_type,&vertex_type,&end)==4 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax,&end)==6 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax, > &ymin,&ymax,&end)==8 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf,%f%c", > formula,&resolution,&plot_type,&vertex_type, > &xmin,&xmax,&ymin,&ymax,&opacity,&end)==9 || > (std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf,%f,0%c%x%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax, > &ymin,&ymax,&opacity,&seph,&pattern,&end)==11 && seph=='x') || > (std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf,%f,%4095[0-9.eE,+-]%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax,&ymin,&ymax, > &opacity,color,&end)==10 && (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf,%f,0%c%x," > "%4095[0-9.eE,+-]%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax, > &ymin,&ymax,&opacity,&seph,&pattern,color,&end)==12 && > seph=='x')) && > resolution>0 && plot_type<=3 && vertex_type<=7) { > resolution = cimg::round(resolution); > gmic_strreplace(formula); > print(images,0, > "Draw graph of formula '%s' on image%s, with resolution %g, %s contours, " > "%s vertices, x-range = (%g,%g), y-range = (%g,%g), opacity %g, " > "pattern 0x%x and color (%s).", > formula, > selection2string(selection,images_names,true).data(), > resolution, > plot_type==0?"no":plot_type==1?"linear":plot_type==2?"spline":"bar", > vertex_type==0?"no":vertex_type==1?"dot":vertex_type==2?"straight cross": > vertex_type==3?"diagonal cross":vertex_type==4?"filled circle": > vertex_type==5?"outlined circle":vertex_type==6?"square":"diamond", > xmin,xmax, > ymin,ymax, > opacity,pattern, > *color?color:"default"); > if (xmin==0 && xmax==0) { xmin = -4; xmax = 4; } > if (!plot_type && !vertex_type) plot_type = 1; > if (resolution<1) resolution = 65536; > > CImg<double> values(4,(unsigned int)resolution--,1,1,0); > const double dx = xmax - xmin; > for (int X = 0; X<(int)((values)._height); ++X) values(0,X) = xmin + X*dx/resolution; > cimg::eval(formula,values).move_to(values); > > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_graph(values,col.data(),opacity,plot_type,vertex_type, ymin,ymax,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_graph(values,col.data(),opacity,plot_type,vertex_type, ymin,ymax,pattern); images_names[posi].mark(); } } > ; > } > } else if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&plot_type,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&plot_type,&vertex_type,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf%c", > indices,&plot_type,&vertex_type,&ymin,&ymax,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf,%f%c", > indices,&plot_type,&vertex_type,&ymin,&ymax,&opacity,&end)==6|| > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf,%f,0%c%x%c", > indices,&plot_type,&vertex_type,&ymin,&ymax,&opacity,&seph, > &pattern,&end)==8 && > seph=='x') || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf,%f," > "%4095[0-9.eE,+-]%c", > indices,&plot_type,&vertex_type,&ymin,&ymax,&opacity, > color,&end)==7 && > (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf," > "%f,0%c%x,%4095[0-9.eE,+-]%c", > indices,&plot_type,&vertex_type,&ymin,&ymax, > &opacity,&seph,&pattern,color,&end)==9 && > seph=='x')) && > (ind=selection2cimg(indices,images.size(),images_names,"-graph",true, > false,CImg<char>::empty())).height()==1 && > plot_type<=3 && vertex_type<=7) { > if (!plot_type && !vertex_type) plot_type = 1; > print(images,0,"Draw graph of dataset [%u] on image%s, with %s contours, %s vertices, " > "y-range = (%g,%g), opacity %g, pattern 0x%x and color (%s).", > *ind, > selection2string(selection,images_names,true).data(), > plot_type==0?"no":plot_type==1?"linear":plot_type==2?"spline":"bar", > vertex_type==0?"no":vertex_type==1?"dot":vertex_type==2?"straight cross": > vertex_type==3?"diagonal cross":vertex_type==4?"filled circle": > vertex_type==5?"outlined circle":vertex_type==6?"square":"diamond", > ymin,ymax, > opacity,pattern, > *color?color:"default"); > const CImg<T> values = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_graph(values,col.data(),opacity,plot_type,vertex_type, ymin,ymax,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_graph(values,col.data(),opacity,plot_type,vertex_type, ymin,ymax,pattern); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"graph","Command '-%s': Invalid argument '%s'.","graph",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='h') { > > > > > if (!std::strcmp("-histogram",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sep = 0, sep0 = 0, sep1 = 0; > double value0 = 0, value1 = 0; > float nb_levels = 256; > bool no_min_max = false; > if (((std::sscanf(argument,"%f%c", > &nb_levels,&end)==1 && (no_min_max=true)) || > ((std::sscanf(argument,"%f%c%c", > &nb_levels,&sep,&end)==2 && sep=='%') && (no_min_max=true)) || > std::sscanf(argument,"%f,%lf,%lf%c", > &nb_levels,&value0,&value1,&end)==3 || > (std::sscanf(argument,"%f%c,%lf,%lf%c", > &nb_levels,&sep,&value0,&value1,&end)==4 && sep=='%') || > (std::sscanf(argument,"%f,%lf%c,%lf%c", > &nb_levels,&value0,&sep0,&value1,&end)==4 && sep0=='%') || > (std::sscanf(argument,"%f%c,%lf%c,%lf%c", > &nb_levels,&sep,&value0,&sep0,&value1,&end)==5 && sep=='%' && > sep0=='%') || > (std::sscanf(argument,"%f,%lf,%lf%c%c", > &nb_levels,&value0,&value1,&sep1,&end)==4 && sep1=='%') || > (std::sscanf(argument,"%f%c,%lf,%lf%c%c", > &nb_levels,&sep,&value0,&value1,&sep1,&end)==5 && sep=='%' && > sep1=='%') || > (std::sscanf(argument,"%f,%lf%c,%lf%c%c", > &nb_levels,&value0,&sep0,&value1,&sep1,&end)==5 && sep0=='%' && > sep1=='%') || > (std::sscanf(argument,"%f%c,%lf%c,%lf%c%c", > &nb_levels,&sep,&value0,&sep0,&value1,&sep1,&end)==6 && sep=='%' && > sep0=='%' && sep1=='%')) && > nb_levels>=0.5) { nb_levels = cimg::round(nb_levels); ++position; } > else { nb_levels = 256; value0 = 0; value1 = 100; sep = 0; sep0 = sep1 = '%'; } > if (no_min_max) { value0 = 0; value1 = 100; sep0 = sep1 = '%'; } > print(images,0,"Compute histogram of image%s, using %g%s level%s in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > nb_levels,sep=='%'?"%":"", > nb_levels>1?"s":"", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > const unsigned int > _nb_levels = cimg::max(1U, > (unsigned int)cimg::round(sep=='%'? > nb_levels*(1+nvalue1-nvalue0)/100: > nb_levels)); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_histogram(_nb_levels,(T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].histogram(_nb_levels,(T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-hsi2rgb",command)) { print(images,0,"Convert image%s from HSI to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_HSItoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].HSItoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-hsl2rgb",command)) { print(images,0,"Convert image%s from HSL to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_HSLtoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].HSLtoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-hsv2rgb",command)) { print(images,0,"Convert image%s from HSV to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_HSVtoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].HSVtoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-hessian",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> axes(64); > *axes = 0; > if (std::sscanf(argument,"%63[xyz]%c", > axes.data(),&end)==1) { > ++position; > print(images,0,"Compute Hessian of image%s along axes '%s'.", > selection2string(selection,images_names,true).data(), > axes.data()); > } else > print(images,0,"Compute Hessian of image%s.", > selection2string(selection,images_names,true).data()); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<T>& img = check_image(images,images[ind]); > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> hessian = img.get_hessian(*axes?axes.data():0); > if (is_get_version) { > images_names.insert(hessian.size(),name.copymark()); > hessian.move_to(images,~0U); > } else { > off+=hessian.size() - 1; > hessian[0].move_to(images[ind].assign()); > for (unsigned int i = 1; i<hessian.size(); ++i) hessian[i].move_to(images,ind+i); > images_names[ind] = name; > if (hessian.size()>1) images_names.insert(hessian.size()-1,name.copymark(),ind+1); > } > } > is_released = false; continue; > } > > > } > > > > > else if (command1=='i' && !(command[2]=='f' && !command[3])) { > > > > > if (!std::strcmp("-image",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sep = 0, sepx = 0, sepy = 0, sepz = 0, sepc = 0; > CImg<char> indicesm(256); > float x = 0, y = 0, z = 0, c = 0, opacity = 1, max_opacity_mask = 1; > CImg<unsigned int> ind, indm; > *indices = *indicesm = *argx = *argy = *argz = *argc = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-]%c", > indices,argx,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > indices,argx,argy,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > indices,argx,argy,argz,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > indices,argx,argy,argz,argc,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > indices,argx,argy,argz,argc,&opacity,&end)==6 || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%255[0-9.eE%+-],%f,[%255[a-zA-Z0-9_.%+-]%c%c", > indices,argx,argy,argz,argc,&opacity,indicesm.data(),&sep,&end)==8 && > sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%255[0-9.eE%+-],%f,[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,argx,argy,argz,argc,&opacity,indicesm.data(), > &max_opacity_mask,&end)==8) && > (ind=selection2cimg(indices,images.size(),images_names,"-image",true, > false,CImg<char>::empty())).height()==1 && > (!*indicesm || > (indm = selection2cimg(indicesm,images.size(),images_names,"-image",true, > false,CImg<char>::empty())).height()==1) && > (!*argx || > std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%')) && > (!*argc || > std::sscanf(argc,"%f%c",&c,&end)==1 || > (std::sscanf(argc,"%f%c%c",&c,&sepc,&end)==2 && sepc=='%'))) { > const CImg<T> sprite = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > CImg<T> mask; > if (indm) { > mask = check_image(images,_gmic_image_arg(*indm,selection)?images[*indm]: images[*indm].get_shared()); > print(images,0,"Draw image [%u] at (%g%s,%g%s,%g%s,%g%s) on image%s, " > "with opacity %g and mask [%u].", > *ind, > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > c,sepc=='%'?"%":"", > selection2string(selection,images_names,true).data(), > opacity, > *indm); > } else print(images,0,"Draw image [%u] at (%g%s,%g%s,%g%s,%g%s) on image%s, " > "with opacity %g.", > *ind, > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > c,sepc=='%'?"%":"", > selection2string(selection,images_names,true).data(), > opacity); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z), > nc = (int)cimg::round(sepc=='%'?c*(img.spectrum()-1)/100:c); > if (indm) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_image(nx,ny,nz,nc,sprite,mask,opacity,max_opacity_mask); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_image(nx,ny,nz,nc,sprite,mask,opacity,max_opacity_mask); images_names[posi].mark(); } }; > } else { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_image(nx,ny,nz,nc,sprite,opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_image(nx,ny,nz,nc,sprite,opacity); images_names[posi].mark(); } }; > } > } > } else gmic::error(images,0,"image","Command '-%s': Invalid argument '%s'.","image",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-index",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int lut_type = 0, map_indexes = 0; > float dithering = 0; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&dithering,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%u%c", > indices,&dithering,&map_indexes,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-index",true, > false,CImg<char>::empty())).height()==1) { > const float ndithering = dithering<0?0:dithering>1?1:dithering; > print(images,0,"Index values in image%s by LUT [%u], with dithering level %g%s.", > selection2string(selection,images_names,true).data(), > *ind, > ndithering, > map_indexes?" and index mapping":""); > const CImg<T> palette = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_index(palette,ndithering,(bool)map_indexes); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].index(palette,ndithering,(bool)map_indexes); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%u%c",&lut_type,&end)==1 || > std::sscanf(argument,"%u,%f%c",&lut_type,&dithering,&end)==2 || > std::sscanf(argument,"%u,%f,%u%c", > &lut_type,&dithering,&map_indexes,&end)==3) && > lut_type<=7) { > const float ndithering = dithering<0?0:dithering>1?1:dithering; > print(images,0,"Index values in image%s by %s color LUT, with dithering level %g%s.", > selection2string(selection,images_names,true).data(), > lut_type==0?"default":lut_type==1?"HSV":lut_type==2?"lines":lut_type==3?"hot": > lut_type==4?"cool":lut_type==5?"jet":lut_type==6?"flag":"cube", > ndithering,map_indexes?" and index mapping":""); > const CImg<T> > palette = lut_type==0?CImg<T>::default_LUT256():lut_type==1?CImg<T>::HSV_LUT256(): > lut_type==2?CImg<T>::lines_LUT256():lut_type==3?CImg<T>::hot_LUT256(): > lut_type==4?CImg<T>::cool_LUT256():lut_type==5?CImg<T>::jet_LUT256(): > lut_type==6?CImg<T>::flag_LUT256():CImg<T>::cube_LUT256(); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_index(palette,ndithering,(bool)map_indexes); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].index(palette,ndithering,(bool)map_indexes); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"index","Command '-%s': Invalid argument '%s'.","index",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-invert",command)) { print(images,0,"Invert matrix image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_invert(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].invert(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-isoline3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x0 = -3, y0 = -3, x1 = 3, y1 = 3, value = 0, dx = 256, dy = 256; > char sep = 0, sepx = 0, sepy = 0; > *formula = 0; > if (std::sscanf(argument,"%f%c", > &value,&end)==1 || > std::sscanf(argument,"%f%c%c", > &value,&sep,&end)==2) { > print(images,0,"Extract 3d isolines from image%s, using isovalue %g%s.", > selection2string(selection,images_names,true).data(), > value,sep=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > if (img) { > CImg<float> vertices; > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > CImg<unsigned char> palette; > palette.assign(3,img.spectrum(),1,1,220).noise(35,1); > if (img.spectrum()==1) palette(0) = palette(1) = palette(2) = 200; > else { > palette(0,0) = 255; palette(1,0) = palette(2,0) = 30; > palette(0,1) = palette(2,1) = 30; palette(1,1) = 255; > if (img.spectrum()>=3) palette(0,2) = palette(1,2) = 30; palette(2,2) = 255; > } > for (int k = 0; k<(int)((img)._spectrum); ++k) { > const CImg<T> channel = img.get_shared_channel(k); > float nvalue = value; > if (sep=='%') { > float vmin = 0, vmax = (float)channel.max_min(vmin); > nvalue = vmin + (vmax-vmin)*value/100; > } > CImgList<unsigned int> prims; > const CImg<float> pts = img.get_shared_channel(k).get_isoline3d(prims,nvalue); > vertices.append_object3d(primitives,pts,prims); > colors.insert(prims.size(),CImg<unsigned char>::vector(palette(0,k), > palette(1,k), > palette(2,k))); > } > if (!vertices) > warn(images,0,"Command '-isoline3d': Isovalue %g%s not found in image [%u].", > value,sep=='%'?"%":"",ind); > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(img); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(img); images_names[posi].mark(); } }; } > } > } else if ((std::sscanf(argument,"'%4095[^']',%f%c", > formula,&value,&end)==2 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f%c", > formula,&value,&x0,&y0,&x1,&y1,&end)==6 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f%c", > formula,&value,&x0,&y0,&x1,&y1,&dx,&dy,&end)==8 || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f%c,%f%c", > formula,&value,&x0,&y0,&x1,&y1,&dx,&sepx,&dy,&end)==9 && > sepx=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f%c%c", > formula,&value,&x0,&y0,&x1,&y1,&dx,&dy,&sepy,&end)==9 && > sepy=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f%c,%f%c%c", > formula,&value,&x0,&y0,&x1,&y1,&dx,&sepx,&dy,&sepy,&end)==10&& > sepx=='%' && sepy=='%')) && > dx>0 && dy>0) { > dx = cimg::round(dx); > dy = cimg::round(dy); > gmic_strreplace(formula); > print(images,0,"Extract 3d isoline %g from formula '%s', in range (%g,%g)-(%g,%g) " > "with size %g%sx%g%s.", > value, > formula, > x0,y0, > x1,y1, > dx,sepx=='%'?"%":"", > dy,sepy=='%'?"%":""); > if (sepx=='%') dx = -dx; > if (sepy=='%') dy = -dy; > CImgList<unsigned int> primitives; > CImg<T> vertices = CImg<T>::isoline3d(primitives,(const char*)formula,value, > x0,y0,x1,y1,(int)dx,(int)dy); > vertices.object3dtoCImg3d(primitives,false).move_to(images); > snprintf(title,_title.size(),"[3d isoline %g of '%s']",value,formula); > { if (_title.size()>=5 && title[_title.size()-2]) title[_title.size()-4] = title[_title.size()-3] = title[_title.size()-2] = '.'; }; > CImg<char>::string(title).move_to(images_names); > } else gmic::error(images,0,"isoline3d","Command '-%s': Invalid argument '%s'.","isoline3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-isosurface3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x0 = -3, y0 = -3, z0 = -3, x1 = 3, y1 = 3, z1 = 3, value = 0, > dx = 32, dy = 32, dz = 32; > char sep = 0, sepx = 0, sepy = 0, sepz = 0; > *formula = 0; > if (std::sscanf(argument,"%f%c", > &value,&end)==1 || > std::sscanf(argument,"%f%c%c", > &value,&sep,&end)==2) { > print(images,0,"Extract 3d isosurface from image%s, using isovalue %g%s.", > selection2string(selection,images_names,true).data(), > value,sep=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > if (img) { > CImg<float> vertices; > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > CImg<unsigned char> palette; > palette.assign(3,img.spectrum(),1,1,220).noise(35,1); > if (img.spectrum()==1) palette(0) = palette(1) = palette(2) = 200; > else { > palette(0,0) = 255; palette(1,0) = palette(2,0) = 30; > palette(0,1) = palette(2,1) = 30; palette(1,1) = 255; > if (img.spectrum()>=3) palette(0,2) = palette(1,2) = 30; palette(2,2) = 255; > } > for (int k = 0; k<(int)((img)._spectrum); ++k) { > const CImg<T> channel = img.get_shared_channel(k); > float nvalue = value; > if (sep=='%') { > float vmin = 0, vmax = (float)channel.max_min(vmin); > nvalue = vmin + (vmax-vmin)*value/100; > } > CImgList<unsigned int> prims; > const CImg<float> pts = channel.get_isosurface3d(prims,nvalue); > vertices.append_object3d(primitives,pts,prims); > colors.insert(prims.size(),CImg<unsigned char>::vector(palette(0,k), > palette(1,k), > palette(2,k))); > } > if (!vertices) { > if (img.depth()>1) > warn(images,0, > "Command '-isosurface3d': Isovalue %g%s not found in image [%u].", > value,sep=='%'?"%":"",ind); > else > warn(images,0, > "Command '-isosurface3d': Image [%u] has a single slice, " > "isovalue %g%s not found.", > ind,value,sep=='%'?"%":""); > } > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(img); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(img); images_names[posi].mark(); } }; } > } > } else if ((std::sscanf(argument,"'%4095[^']',%f%c", > formula,&value,&end)==2 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1,&end)==8 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f,%f,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1,&dx,&dy,&dz,&end)==11 || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f%c,%f,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&sepx,&dy,&dz,&end)==12 && > sepx=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f,%f%c,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&dy,&sepy,&dz,&end)==12 && > sepy=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f,%f,%f%c%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&dy,&dz,&sepz,&end)==12 && > sepz=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f%c,%f%c,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&sepx,&dy,&sepy,&dz,&end)==13 && > sepx=='%' && sepy=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f%c,%f,%f%c%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&sepx,&dy,&dz,&sepz,&end)==13 && > sepx=='%' && sepz=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f,%f%c,%f%c%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&dy,&sepy,&dz,&sepz,&end)==13 && > sepy=='%' && sepz=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f%c,%f%c,%f%c%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&sepx,&dy,&sepy,&dz,&sepz,&end)==14 && > sepx=='%' && sepy=='%' && sepz=='%')) && > dx>0 && dy>0 && dz>0) { > dx = cimg::round(dx); > dy = cimg::round(dy); > dz = cimg::round(dz); > gmic_strreplace(formula); > print(images,0,"Extract 3d isosurface %g from formula '%s', " > "in range (%g,%g,%g)-(%g,%g,%g) with size %g%sx%g%sx%g%s.", > value, > formula, > x0,y0,z0, > x1,y1,z1, > dx,sepx=='%'?"%":"", > dy,sepy=='%'?"%":"", > dz,sepz=='%'?"%":""); > if (sepx=='%') dx = -dx; > if (sepy=='%') dy = -dy; > if (sepz=='%') dz = -dz; > CImgList<unsigned int> primitives; > CImg<T> vertices = CImg<T>::isosurface3d(primitives,(const char*)formula,value, > x0,y0,z0,x1,y1,z1,(int)dx,(int)dy,(int)dz); > vertices.object3dtoCImg3d(primitives,false).move_to(images); > snprintf(title,_title.size(),"[3d isosurface %g of '%s']",value,formula); > { if (_title.size()>=5 && title[_title.size()-2]) title[_title.size()-4] = title[_title.size()-3] = title[_title.size()-2] = '.'; }; > CImg<char>::string(title).move_to(images_names); > } else gmic::error(images,0,"isosurface3d","Command '-%s': Invalid argument '%s'.","isosurface3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-inpaint",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float patch_size = 11, lookup_size = 22, lookup_factor = 0.5, lookup_increment = 1, > blend_size = 0, blend_threshold = 0, blend_decay = 0.05f, blend_scales = 10; > unsigned int is_blend_outer = 1, method = 1; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']') || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%c%c",indices,&sep,&end)==2 && > sep=='0') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],0,%u%c",indices,&method,&end)==2) && > (ind=selection2cimg(indices,images.size(),images_names,"-inpaint",true, > false,CImg<char>::empty())).height()==1 && > method<=3) { > print(images,0,"Inpaint image%s masked by image [%u], with %s algorithm.", > selection2string(selection,images_names,true).data(), > *ind, > method==0?"low-connectivity average":method==1?"high-connectivity average": > method==2?"low-connectivity median":"high-connectivity median"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_inpaint(mask,method); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].inpaint(mask,method); images_names[posi].mark(); } }; > } > } else if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&patch_size,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f%c", > indices,&patch_size,&lookup_size,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&end)==6 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&blend_threshold,&end)==7 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&blend_threshold,&blend_decay, > &end)==8 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&blend_threshold,&blend_decay, > &blend_scales,&end)==9 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f,%f,%f,%f,%u%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&blend_threshold,&blend_decay, > &blend_scales,&is_blend_outer,&end)==10) && > (ind=selection2cimg(indices,images.size(),images_names,"-inpaint",true, > false,CImg<char>::empty())).height()==1 && > patch_size>=0.5 && lookup_size>=0.5 && lookup_factor>=0 && > blend_size>=0 && blend_threshold>=0 && blend_threshold<=1 && > blend_decay>=0 && blend_scales>=0.5 && is_blend_outer<=1) { > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > patch_size = cimg::round(patch_size); > lookup_size = cimg::round(lookup_size); > lookup_increment = cimg::round(lookup_increment); > blend_size = cimg::round(blend_size); > blend_scales = cimg::round(blend_scales); > print(images,0,"Inpaint image%s masked by image [%d], with patch size %g, " > "lookup size %g, lookup factor %g, lookup_increment %g, blend size %g, " > "blend threshold %g, blend decay %g, %g blend scale%s and outer blending %s.", > selection2string(selection,images_names,true).data(),*ind, > patch_size,lookup_size,lookup_factor,lookup_increment, > blend_size,blend_threshold,blend_decay,blend_scales,blend_scales!=1?"s":"", > is_blend_outer?"enabled":"disabled"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_inpaint_patch(mask, (unsigned int)patch_size,(unsigned int)lookup_size, lookup_factor, (int)lookup_increment, (unsigned int)blend_size,blend_threshold,blend_decay, (unsigned int)blend_scales,(bool)is_blend_outer); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].inpaint_patch(mask, (unsigned int)patch_size,(unsigned int)lookup_size, lookup_factor, (int)lookup_increment, (unsigned int)blend_size,blend_threshold,blend_decay, (unsigned int)blend_scales,(bool)is_blend_outer); images_names[posi].mark(); } } > > > > > > ; > } > } else gmic::error(images,0,"inpaint","Command '-%s': Invalid argument '%s'.","inpaint",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='k') { > > > if (!std::strcmp("-keep",command)) { > print(images,0,"Keep image%s", > selection2string(selection,images_names,true).data()); > CImgList<T> _images, nimages(selection.height()); > CImgList<char> _images_names, nimages_names(selection.height()); > if (is_get_version) { _images.assign(images); _images_names.assign(images_names); } > for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > nimages.move_to(images); > nimages_names.move_to(images_names); > if (is_get_version) { > _images.move_to(images,0); > _images_names.move_to(images_names,0); > } > if (verbosity>=0 || is_debug) { > std::fprintf(cimg::output()," (%u image%s left).", > images.size(),images.size()==1?"":"s"); > std::fflush(cimg::output()); > } > is_released = false; continue; > } > > } > > > > > else if (command1=='l') { > > > if (!std::strcmp("-local",command)) { > CImg<char>::string("*local").move_to(scope); > if (verbosity>0 || is_debug) > print(images,0,"Start '-local..-endlocal' block, with image%s.", > selection2string(selection,images_names,true).data()); > CImgList<T> nimages(selection.height()); > CImgList<char> nimages_names(selection.height()); > if (is_get_version) for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l].assign(images[selection[l]]); > nimages_names[l].assign(images_names[selection[l]]).copymark(); > } else for (int l = 0; l<(int)((selection)._height); ++l) { > if (images[selection[l]].is_shared()) > nimages[l] = CImg<T>(images[selection[l]],true); > else nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > const unsigned int local_scope_size = scope.size(); > CImg<char> exception_message, exception_command; > try { > _parse(commands_line,position,nimages,nimages_names,variables_sizes); > } catch (gmic_exception &e) { > int nb_locals = 0; > for (nb_locals = 1; nb_locals && position<commands_line.size(); ++position) { > const char *const it = commands_line[position].data(); > if (!std::strcmp("-local",it) || !std::strcmp("-l",it) || > !std::strcmp("--local",it) || !std::strcmp("--l",it) || > !std::strncmp("-local[",it,7) || !std::strncmp("-l[",it,3) || > !std::strncmp("--local[",it,8) || !std::strncmp("--l[",it,4)) ++nb_locals; > else if (!std::strcmp("-endlocal",it) || !std::strcmp("-endl",it)) --nb_locals; > else if (nb_locals==1 && !std::strcmp("-onfail",it)) break; > } > if (scope.size()>local_scope_size) scope.remove(local_scope_size,scope.size()-1); > if (nb_locals==1 && position<commands_line.size()) { > if (verbosity>0 || is_debug) print(images,0,"Reach '-onfail' block."); > _parse(commands_line,++position,nimages,nimages_names,variables_sizes); > } else { > exception_message.assign(e._message); > exception_command.assign(e._command_help); > } > } > scope.remove(); > if (is_get_version) { > nimages.move_to(images,~0U); > nimages_names.move_to(images_names,~0U); > } else { > const unsigned int nb = cimg::min((unsigned int)selection.height(),nimages.size()); > if (nb>0) { > for (unsigned int i = 0; i<nb; ++i) { > if (images[selection[i]].is_shared()) { > images[selection[i]] = nimages[i]; > nimages[i].assign(); > } else images[selection[i]].swap(nimages[i]); > images_names[selection[i]].swap(nimages_names[i]); > } > nimages.remove(0,nb-1); > nimages_names.remove(0,nb-1); > } > if (nb<(unsigned int)selection.height()) > remove_images(images,images_names,selection,nb,selection.height()-1); > else if (nimages) { > const unsigned int ind0 = selection?selection.back()+1:images.size(); > images.insert(nimages,ind0); > nimages_names.move_to(images_names,ind0); > } > } > if (exception_message || exception_command) > throw gmic_exception(exception_command.data(),exception_message.data()); > continue; > } > > > > > if (!std::strcmp("-le",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean 'less or equal than' between image%s " "and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_le((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_le((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-le", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean 'less or equal than' between image%s " "and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_le(img0); } else { images_names[selection[l]].mark(); img.operator_le(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean 'less or equal than' between image%s and " "expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_le((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_le((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean 'less or equal than' between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_le(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_le(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7370 "gmic.cpp" > ; > > > if (!std::strcmp("-lt",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean 'less than' between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_lt((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_lt((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-lt", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean 'less than' between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_lt(img0); } else { images_names[selection[l]].mark(); img.operator_lt(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean 'less than' between image%s and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_lt((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_lt((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean 'less than' between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_lt(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_lt(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7382 "gmic.cpp" > ; > > > if (!std::strcmp("-log",command)) { print(images,0,"Compute pointwise base-e logarithm of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_log(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].log(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-log2",command)) { print(images,0,"Compute pointwise base-2 logarithm of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_log2(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].log2(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-log10",command)) { print(images,0,"Compute pointwise base-10 logarithm of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_log10(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].log10(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-line",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > *argx = *argy = *argz = *argc = *color = 0; > float x0 = 0, y0 = 0, x1 = 0, y1 = 0, opacity = 1; > char sepx0 = 0, sepy0 = 0, sepx1 = 0, sepy1 = 0, seph = 0; > unsigned int pattern = ~0U; > if ((std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > argx,argy,argz,argc,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f%c", > argx,argy,argz,argc,&opacity,&end)==5 || > (std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,0%c%x%c", > argx,argy,argz,argc,&opacity,&seph,&pattern,&end)==7 && > seph=='x') || > (std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%4095[0-9.eE,+-]%c", > argx,argy,argz,argc,&opacity,color,&end)==6 && (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,0%c%x,%4095[0-9.eE,+-]%c", > argx,argy,argz,argc,&opacity,&seph, > &pattern,color,&end)==8 && seph=='x')) && > (std::sscanf(argx,"%f%c",&x0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x0,&sepx0,&end)==2 && sepx0=='%')) && > (std::sscanf(argy,"%f%c",&y0,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y0,&sepy0,&end)==2 && sepy0=='%')) && > (std::sscanf(argz,"%f%c",&x1,&end)==1 || > (std::sscanf(argz,"%f%c%c",&x1,&sepx1,&end)==2 && sepx1=='%')) && > (std::sscanf(argc,"%f%c",&y1,&end)==1 || > (std::sscanf(argc,"%f%c%c",&y1,&sepy1,&end)==2 && sepy1=='%'))) { > print(images,0,"Draw line (%g%s,%g%s) - (%g%s,%g%s) on image%s, with opacity %g, " > "pattern 0x%x and color (%s).", > x0,sepx0=='%'?"%":"", > y0,sepy0=='%'?"%":"", > x1,sepx1=='%'?"%":"", > y1,sepy1=='%'?"%":"", > selection2string(selection,images_names,true).data(), > opacity,pattern, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > const int > nx0 = (int)cimg::round(sepx0=='%'?x0*(img.width()-1)/100:x0), > ny0 = (int)cimg::round(sepy0=='%'?y0*(img.height()-1)/100:y0), > nx1 = (int)cimg::round(sepx1=='%'?x1*(img.width()-1)/100:x1), > ny1 = (int)cimg::round(sepy1=='%'?y1*(img.height()-1)/100:y1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_line(nx0,ny0,nx1,ny1,col.data(),opacity,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_line(nx0,ny0,nx1,ny1,col.data(),opacity,pattern); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"line","Command '-%s': Invalid argument '%s'.","line",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-lab2rgb",command)) { print(images,0,"Convert image%s from Lab to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_LabtoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].LabtoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-label",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int is_high_connectivity = 0; > float tolerance = 0; > if ((std::sscanf(argument,"%f%c",&tolerance,&end)==1 || > std::sscanf(argument,"%f,%u%c",&tolerance,&is_high_connectivity,&end)==2) && > tolerance>=0) ++position; > else { tolerance = 0; is_high_connectivity = 0; } > print(images,0, > "Label connected components on image%s, with tolerance %g and " > "%s connectivity.", > selection2string(selection,images_names,true).data(),tolerance,is_high_connectivity?"high":"low"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_label((bool)is_high_connectivity,tolerance); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].label((bool)is_high_connectivity,tolerance); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-light3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float lx = 0, ly = 0, lz = -5e8f; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"%f,%f,%f%c", > &lx,&ly,&lz,&end)==3) { > print(images,0,"Set 3d light position to (%g,%g,%g).", > lx,ly,lz); > light3d_x = lx; > light3d_y = ly; > light3d_z = lz; > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-light3d",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Set 3d light texture from image [%u].",*ind); > light3d.assign(images[*ind],false); > ++position; > } else { > print(images,0,"Reset 3d light to default."); > light3d.assign(); > light3d_x = light3d_y = 0; light3d_z = -5e8f; > } > continue; > } > > > } > > > > > else if (command1=='m') { > > > if (!std::strcmp("-move",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float pos = 0; > char sep = 0; > if (std::sscanf(argument,"%f%c",&pos,&end)==1 || > (std::sscanf(argument,"%f%c%c",&pos,&sep,&end)==2 && sep=='%')) { > const int > _ind0 = (int)cimg::round(sep=='%'?pos*images.size()/100:pos), > ind0 = _ind0<0?_ind0+(int)images.size():_ind0; > if (ind0<0 || ind0>(int)images.size()) > error(images,0,0, > "Command '-move': Invalid position '%d' (not in range -%u..%u).", > _ind0,images.size(),images.size()-1); > print(images,0,"Move image%s to position %d.", > selection2string(selection,images_names,true).data(), > ind0); > CImgList<T> _images, nimages; > CImgList<char> _images_names, nimages_names; > if (is_get_version) { > _images.insert(images.size()); > > for (int l = 0; l<(int)(_images)._width; ++l) _images[l].assign(images[l],images[l].is_shared()); > _images_names.assign(images_names); > } > nimages.insert(selection.height()); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > if (is_get_version) images[ind].move_to(nimages[l]); > else images[ind].swap(nimages[l]); > > images[ind]._is_shared = true; > images_names[ind].move_to(nimages_names); > } > images.insert(nimages.size(),ind0); > for (int l = 0; l<(int)(nimages)._width; ++l) nimages[l].swap(images[ind0+l]); > nimages_names.move_to(images_names,ind0); > for (int l = 0; l<(int)(images)._width; ++l) if (!images[l] && images[l].is_shared()) { > images.remove(l); images_names.remove(l--); > } > if (is_get_version) { > for (int l = 0; l<(int)(images)._width; ++l) > if (images[l].is_shared()) { > CImg<T> tmp; (images[l].move_to(tmp)).swap(images[l]); > } > images.insert(_images.size(),0); > for (int l = 0; l<(int)(_images)._width; ++l) images[l].swap(_images[l]); > _images_names.move_to(images_names,0); > } > } else gmic::error(images,0,"move","Command '-%s': Invalid argument '%s'.","move",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-mirror",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > bool is_valid_argument = true; > for (const char *s = argument; *s; ++s) { > const char _s = *s; > if (_s!='x' && _s!='y' && _s!='z' && _s!='c') { is_valid_argument = false; break; } > } > if (*argument && is_valid_argument) { > print(images,0,"Mirror image%s along the '%s'-ax%cs.", > selection2string(selection,images_names,true).data(), > argument_text, > std::strlen(argument)>1?'e':'i'); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_mirror(argument); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].mirror(argument); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"mirror","Command '-%s': Invalid argument '%s'.","mirror",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-mutex",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int number, is_lock = 1; > if ((std::sscanf(argument,"%u%c", > &number,&end)==1 || > std::sscanf(argument,"%u,%u%c", > &number,&is_lock,&end)==2) && > number<256 && is_lock<=1) { > print(images,0,"%s mutex #%u.", > is_lock?"Lock":"Unlock",number); > if (is_lock) gmic_mutex().lock(number); > else gmic_mutex().unlock(number); > } else gmic::error(images,0,"mutex","Command '-%s': Invalid argument '%s'.","mutex",argument_text); > ++position; continue; > } > > > > > if (!std::strcmp("-mul",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Multiply image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator*=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator*=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-mul", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Multiply image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].mul(img0); } else { images_names[selection[l]].mark(); img.mul(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Multiply image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].mul((const char*)formula); } else { images_names[selection[l]].mark(); img.mul((const char*)formula); } } ++position; } else { print(images,0,"Multiply image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.mul(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.mul(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7609 "gmic.cpp" > ; > > if (!std::strcmp("-mod",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute pointwise modulo of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator%=((T)nvalue); } else { images_names[selection[l]].mark(); img.operator%=((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-mod", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute pointwise modulo of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator%=(img0); } else { images_names[selection[l]].mark(); img.operator%=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute pointwise modulo of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator%=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator%=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential pointwise modulo of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator%=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator%=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7620 "gmic.cpp" > ; > > > if (!std::strcmp("-max",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute pointwise maximum between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].max((T)nvalue); } else { images_names[selection[l]].mark(); img.max((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-max", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute pointwise maximum between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].max(img0); } else { images_names[selection[l]].mark(); img.max(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute pointwise maximum between image%s and expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].max((const char*)formula); } else { images_names[selection[l]].mark(); img.max((const char*)formula); } } ++position; } else { print(images,0,"Compute pointwise maximum of all image%s together" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.max(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.max(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7632 "gmic.cpp" > ; > > if (!std::strcmp("-min",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute pointwise minimum between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].min((T)nvalue); } else { images_names[selection[l]].mark(); img.min((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-min", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute pointwise minimum between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].min(img0); } else { images_names[selection[l]].mark(); img.min(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute pointwise minimum between image%s and expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].min((const char*)formula); } else { images_names[selection[l]].mark(); img.min((const char*)formula); } } ++position; } else { print(images,0,"Compute pointwise minimum of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.min(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.min(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7643 "gmic.cpp" > ; > > > if (!std::strcmp("-mmul",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Multiply matrix/vector%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator*=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator*=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-mmul", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Multiply matrix/vector%s by matrix/vector image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator*=(img0); } else { images_names[selection[l]].mark(); img.operator*=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Multiply matrix/vector%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator*=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator*=((const char*)formula); } } ++position; } else { print(images,0,"Multiply matrix/vector%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator*=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator*=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7655 "gmic.cpp" > ; > > > if (!std::strcmp("-mode3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > int value = 4; > if (std::sscanf(argument,"%d%c", > &value,&end)==1 && > value>=-1 && value<=5) ++position; > else value = 4; > render3d = value; > print(images,0,"Set static 3d rendering mode to %s.", > render3d==-1?"bounding-box": > render3d==0?"pointwise":render3d==1?"linear":render3d==2?"flat": > render3d==3?"flat-shaded":render3d==4?"Gouraud-shaded": > render3d==5?"Phong-shaded":"none"); > continue; > } > > if (!std::strcmp("-moded3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > int value = -1; > if (std::sscanf(argument,"%d%c", > &value,&end)==1 && > value>=-1 && value<=5) ++position; > else value = -1; > renderd3d = value; > print(images,0,"Set dynamic 3d rendering mode to %s.", > renderd3d==-1?"bounding-box": > renderd3d==0?"pointwise":renderd3d==1?"linear":renderd3d==2?"flat": > renderd3d==3?"flat-shaded":renderd3d==4?"Gouraud-shaded": > renderd3d==5?"Phong-shaded":"none"); > continue; > } > > > if (!std::strcmp("-map",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int lut_type = 0; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-map",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Map LUT [%u] on image%s.", > *ind, > selection2string(selection,images_names,true).data()); > const CImg<T> palette = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_map(palette); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].map(palette); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%u%c",&lut_type,&end)==1 && > lut_type<=7) { > print(images,0,"Map %s color LUT on image%s.", > lut_type==0?"default":lut_type==1?"HSV":lut_type==2?"lines":lut_type==3?"hot": > lut_type==4?"cool":lut_type==5?"jet":lut_type==6?"flag":"cube", > selection2string(selection,images_names,true).data()); > const CImg<T> > palette = lut_type==0?CImg<T>::default_LUT256():lut_type==1?CImg<T>::HSV_LUT256(): > lut_type==2?CImg<T>::lines_LUT256():lut_type==3?CImg<T>::hot_LUT256(): > lut_type==4?CImg<T>::cool_LUT256():lut_type==5?CImg<T>::jet_LUT256(): > lut_type==6?CImg<T>::flag_LUT256():CImg<T>::cube_LUT256(); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_map(palette); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].map(palette); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"map","Command '-%s': Invalid argument '%s'.","map",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-median",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float siz = 3; > if (std::sscanf(argument,"%f%c", > &siz,&end)==1 && > siz>=0) { > siz = cimg::round(siz); > print(images,0,"Apply median filter of size %g, on image%s.", > siz, > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_median((unsigned int)siz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_median((unsigned int)siz); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"median","Command '-%s': Invalid argument '%s'.","median",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-mdiv",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Divide matrix/vector%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator/=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator/=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-mdiv", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Divide matrix/vector%s by matrix/vector image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator/=(img0); } else { images_names[selection[l]].mark(); img.operator/=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Divide matrix/vector%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator/=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator/=((const char*)formula); } } ++position; } else { print(images,0,"Divide matrix/vector%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator/=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator/=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7753 "gmic.cpp" > ; > > > if (!std::strcmp("-mse",command)) { > print(images,0,"Compute the %dx%d matrix of MSE values, from image%s.", > selection.height(),selection.height(), > selection2string(selection,images_names,true).data()); > if (selection) { > CImgList<T> subimages(selection.height()); > for (int l = 0; l<(int)((selection)._height); ++l) subimages[l].assign(check_image(images,images[selection[l]]),true); > CImg<T> img(subimages.size(),subimages.size(),1,1,(T)0); > > > > for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) if (x>y) img(x,y) = img(y,x) = (T)subimages[x].MSE(subimages[y]); > CImg<char> name = CImg<char>::string("[MSE]"); > if (is_get_version) { > img.move_to(images); > name.move_to(images_names); > } else { > remove_images(images,images_names,selection,1,selection.height()-1); > img.move_to(images[selection[0]].assign()); > name.move_to(images_names[selection[0]]); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-mandelbrot",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double z0r = -2, z0i = -2, z1r = 2, z1i = 2, paramr = 0, parami = 0; > unsigned int is_julia = 0; > float opacity = 1, itermax = 100; > if ((std::sscanf(argument,"%lf,%lf,%lf,%lf%c", > &z0r,&z0i,&z1r,&z1i,&end)==4 || > std::sscanf(argument,"%lf,%lf,%lf,%lf,%f%c", > &z0r,&z0i,&z1r,&z1i,&itermax,&end)==5 || > std::sscanf(argument,"%lf,%lf,%lf,%lf,%f,%u%c", > &z0r,&z0i,&z1r,&z1i,&itermax,&is_julia,&end)==6 || > std::sscanf(argument,"%lf,%lf,%lf,%lf,%f,%u,%lf,%lf%c", > &z0r,&z0i,&z1r,&z1i,&itermax,&is_julia,¶mr, > ¶mi,&end)==8 || > std::sscanf(argument,"%lf,%lf,%lf,%lf,%f,%u,%lf,%lf,%f%c", > &z0r,&z0i,&z1r,&z1i,&itermax,&is_julia, > ¶mr,¶mi,&opacity,&end)==9) && > itermax>=0 && is_julia<=1) { > itermax = cimg::round(itermax); > print(images,0,"Draw %s fractal on image%s, from complex area (%g,%g)-(%g,%g) " > "with c0 = (%g,%g) and %g iterations.", > is_julia?"julia":"mandelbrot", > selection2string(selection,images_names,true).data(), > z0r,z0i, > z1r,z1i, > paramr,parami, > itermax); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_draw_mandelbrot(CImg<T>(),opacity,z0r,z0i,z1r,z1i, (unsigned int)itermax,true, (bool)is_julia, paramr,parami); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].draw_mandelbrot(CImg<T>(),opacity,z0r,z0i,z1r,z1i, (unsigned int)itermax,true, (bool)is_julia, paramr,parami); images_names[posi].mark(); } } > > > ; > } > } else gmic::error(images,0,"mandelbrot","Command '-%s': Invalid argument '%s'.","mandelbrot",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='n') { > > > if (!std::strcmp("-name",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > const unsigned int l = std::strlen(argument); > CImg<char> name(argument,l+1); > unsigned int is_modified=0; > if (l>=2 && name[l-2]==',' && (name[l-1]=='0' || name[l-1]=='1')) { > is_modified = name[l-1]!='0'; > name[l-2] = 0; > } > print(images,0,"Set name of image%s to '%s'%s.", > selection2string(selection,images_names,true).data(),name.data(),is_modified?" (modified)":""); > gmic_strreplace(name); > if (is_modified) name.mark(); > for (int l = 0; l<(int)((selection)._height); ++l) images_names[selection[l]].assign(name); > ++position; continue; > } > > > > > if (!std::strcmp("-normalize",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > double value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-normalize",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argx,"%lf%c%c",&value0,&sep0,&end)==2 && sep0=='%') || > std::sscanf(argx,"%lf%c",&value0,&end)==1) && > ((std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep1,&end)==2 && > sep1==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-normalize",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argy,"%lf%c%c",&value1,&sep1,&end)==2 && sep1=='%') || > std::sscanf(argy,"%lf%c",&value1,&end)==1)) { > if (ind0) { value0 = images[*ind0].min(); sep0 = 0; } > if (ind1) { value1 = images[*ind1].max(); sep1 = 0; } > print(images,0,"Normalize image%s in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_normalize((T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.normalize((T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-normalize",true, > false,CImg<char>::empty())).height()==1) { > if (images[*ind0]) value1 = (double)images[*ind0].max_min(value0); > print(images,0,"Normalize image%s in range [%g,%g].", > selection2string(selection,images_names,true).data(), > value0, > value1); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_normalize((T)value0,(T)value1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].normalize((T)value0,(T)value1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"normalize","Command '-%s': Invalid argument '%s'.","normalize",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-neq",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean inequality between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_neq((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_neq((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-neq", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean inequality between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_neq(img0); } else { images_names[selection[l]].mark(); img.operator_neq(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean inequality between image%s and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_neq((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_neq((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean inequality between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_neq(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_neq(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7910 "gmic.cpp" > ; > > > if (!std::strcmp("-noise",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > int noise_type = 0; > float sigma = 0; > char sep = 0; > if ((std::sscanf(argument,"%f%c", > &sigma,&end)==1 || > (std::sscanf(argument,"%f%c%c", > &sigma,&sep,&end)==2 && sep=='%') || > std::sscanf(argument,"%f,%d%c", > &sigma,&noise_type,&end)==2 || > (std::sscanf(argument,"%f%c,%d%c", > &sigma,&sep,&noise_type,&end)==3 && sep=='%')) && > sigma>=0 && noise_type>=0 && noise_type<=4) { > const char *s_type = noise_type==0?"gaussian": > noise_type==1?"uniform": > noise_type==2?"salt&pepper": > noise_type==3?"poisson":"rice"; > if (sep=='%') sigma = -sigma; > print(images,0,"Add %s noise to image%s, with standard deviation %g%s.", > s_type, > selection2string(selection,images_names,true).data(), > cimg::abs(sigma),sep=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_noise(sigma,noise_type); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].noise(sigma,noise_type); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"noise","Command '-%s': Invalid argument '%s'.","noise",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='o') { > > > if (!std::strcmp("-output",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char cext[8]; > CImg<char> _filename(4096), filename_tmp(1024), options(256); > *cext = *_filename = *filename_tmp = *options = 0; > if (std::sscanf(argument,"%8[a-zA-Z]:%4095[^,],%255s", > cext,_filename.data(),options.data())<2 || > !cext[1]) { > *cext = *_filename = *options = 0; > if (std::sscanf(argument,"%4095[^,],%255s",_filename.data(),options.data())!=2) { > std::strncpy(_filename,argument,_filename.width()-1); > _filename[_filename.width()-1] = 0; > } > } > gmic_strreplace(_filename); > gmic_strreplace(options); > > if (*cext) { > if (*_filename=='-' && (!_filename[1] || _filename[1]=='.')) { > > snprintf(_filename,_filename.width(),"-.%s",cext); > *cext = 0; > } else { > std::FILE *file = 0; > do { > snprintf(filename_tmp,filename_tmp.width(),"%s%c%s.%s", > cimg::temporary_path(),'/', > cimg::filenamerand(),cext); > if ((file=std::fopen(filename_tmp,"rb"))!=0) std::fclose(file); > } while (file); > } > } > const char > *const filename = *cext?filename_tmp:_filename, > *const ext = cimg::split_filename(filename); > > if (!cimg::strcasecmp(ext,"off")) { > CImg<char> nfilename(4096); > *nfilename = 0; > std::strncpy(nfilename,filename,nfilename.width()-1); > nfilename[nfilename.width()-1] = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > const CImg<T>& img = check_image(images,images[ind]); > if (selection.height()!=1) cimg::number_filename(filename,l,6,nfilename); > CImgList<unsigned int> primitives; > CImgList<float> colors, opacities; > CImg<float> vertices(img,false); > try { > vertices.CImg3dtoobject3d(primitives,colors,opacities,false). > save_off(primitives,colors,nfilename); > } catch (CImgException &e) { > CImg<char> message(1024); > if (!vertices.is_CImg3d(true,message)) > error(images,0,0, > "Command '-output': 3d object file '%s', invalid 3d object [%u] " > "in selected image%s (%s).", > nfilename.data(),ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > print(images,0,"Output 3d object [%u] as file '%s'.", > ind, > nfilename.data()); > } > } else if (!cimg::strcasecmp(ext,"cpp") || !cimg::strcasecmp(ext,"c") || > !cimg::strcasecmp(ext,"hpp") || !cimg::strcasecmp(ext,"h") || > !cimg::strcasecmp(ext,"pan")) { > const char *const > stype = (std::sscanf(options,"%255[A-zA-Z]%c",&(*argx=0),&(end=0))==1 || > (std::sscanf(options,"%255[A-zA-Z]%c",&(*argx=0),&end)==2 && end==','))? > argx:cimg::type<T>::string(); > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],images[selection[l]]?true:false); > if (output_images.size()==1) > print(images,0, > "Output image%s as file '%s', with pixel type '%s' (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype, > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s', with pixel type '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s', instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); ># 8068 "gmic.cpp" > if (!std::strcmp(stype,"bool")) { if (output_images.size()==1) CImg<bool>(output_images[0], cimg::type<T>::string()==cimg::type<bool>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<bool>(output_images[l], cimg::type<T>::string()==cimg::type<bool>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"uchar")) { if (output_images.size()==1) CImg<unsigned char>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"unsigned char")) { if (output_images.size()==1) CImg<unsigned char>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"char")) { if (output_images.size()==1) CImg<char>(output_images[0], cimg::type<T>::string()==cimg::type<char>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<char>(output_images[l], cimg::type<T>::string()==cimg::type<char>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"ushort")) { if (output_images.size()==1) CImg<unsigned short>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"unsigned short")) { if (output_images.size()==1) CImg<unsigned short>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"short")) { if (output_images.size()==1) CImg<short>(output_images[0], cimg::type<T>::string()==cimg::type<short>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<short>(output_images[l], cimg::type<T>::string()==cimg::type<short>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"uint")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"unsigned int")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"int")) { if (output_images.size()==1) CImg<int>(output_images[0], cimg::type<T>::string()==cimg::type<int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"ulong")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"unsigned long")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"long")) { if (output_images.size()==1) CImg<int>(output_images[0], cimg::type<T>::string()==cimg::type<int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"float")) { if (output_images.size()==1) CImg<float>(output_images[0], cimg::type<T>::string()==cimg::type<float>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<float>(output_images[l], cimg::type<T>::string()==cimg::type<float>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"double")) { if (output_images.size()==1) CImg<double>(output_images[0], cimg::type<T>::string()==cimg::type<double>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<double>(output_images[l], cimg::type<T>::string()==cimg::type<double>::string()). save(nfilename); } } } > else error(images,0,0, > "Command '-output': File '%s', invalid " > "specified pixel type '%s'.", > _filename.data(),stype); > } else if (!cimg::strcasecmp(ext,"tiff") || !cimg::strcasecmp(ext,"tif")) { > const char *const > stype = (std::sscanf(options,"%255[A-zA-Z]%c",&(*argx=0),&(end=0))==1 || > (std::sscanf(options,"%255[A-zA-Z]%c",&(*argx=0),&end)==2 && end==','))? > argx:cimg::type<T>::string(); > const unsigned int l_stype = std::strlen(stype); > const char *const _options = options.data() + (stype!=argx?0:l_stype+(end==','?1:0)); > float _compression = 0, _is_multipage = 0; > > if (std::sscanf(_options,"%f%c",&_compression,&end)!=1 && > std::sscanf(_options,"%f,%f%c",&_compression,&_is_multipage,&end)!=2) _compression = _is_multipage = 0; > if (_compression<0) _compression = 0; else if (_compression>6) _compression = 6; > const unsigned int compression = (unsigned int)cimg::round(_compression); > const bool is_multipage = (bool)cimg::round(_is_multipage); > > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()==1) > print(images,0,"Output image%s as file '%s', with pixel type '%s' and %s compression " > "(1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(),stype, > compression==0?"no":compression==1?"CCITTRLE":compression==2?"CCITT4": > compression==3?"CCITT6":compression==4?"LZW":compression==5?"JPEG1":"JPEG2", > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s', with pixel type '%s', " > "%s compression and %s-page mode.", > selection2string(selection,images_names,true).data(), > _filename.data(),stype, > compression==0?"no":compression==1?"CCITTRLE":compression==2?"CCITT4": > compression==3?"CCITT6":compression==4?"LZW":compression==5?"JPEG1": > "JPEG2",is_multipage?"multi":"single"); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s', instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); ># 8151 "gmic.cpp" > if (!std::strcmp(stype,"bool")) { if (output_images.size()==1 || is_multipage) CImgList<bool>(output_images, cimg::type<T>::string()==cimg::type<bool>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<bool>(output_images[l], cimg::type<T>::string()==cimg::type<bool>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"uchar")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned char>(output_images, cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"unsigned char")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned char>(output_images, cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"char")) { if (output_images.size()==1 || is_multipage) CImgList<char>(output_images, cimg::type<T>::string()==cimg::type<char>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<char>(output_images[l], cimg::type<T>::string()==cimg::type<char>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"ushort")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned short>(output_images, cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"unsigned short")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned short>(output_images, cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"short")) { if (output_images.size()==1 || is_multipage) CImgList<short>(output_images, cimg::type<T>::string()==cimg::type<short>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<short>(output_images[l], cimg::type<T>::string()==cimg::type<short>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"uint")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"unsigned int")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"int")) { if (output_images.size()==1 || is_multipage) CImgList<int>(output_images, cimg::type<T>::string()==cimg::type<int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"ulong")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"unsigned long")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"long")) { if (output_images.size()==1 || is_multipage) CImgList<int>(output_images, cimg::type<T>::string()==cimg::type<int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"float")) { if (output_images.size()==1 || is_multipage) CImgList<float>(output_images, cimg::type<T>::string()==cimg::type<float>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<float>(output_images[l], cimg::type<T>::string()==cimg::type<float>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"double")) { if (output_images.size()==1 || is_multipage) CImgList<double>(output_images, cimg::type<T>::string()==cimg::type<double>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<double>(output_images[l], cimg::type<T>::string()==cimg::type<double>::string()). save_tiff(nfilename,compression); } } } > else error(images,0,0, > "Command '-output': File '%s', invalid " > "specified pixel type '%s'.", > _filename.data(),stype); > > } else if (!cimg::strcasecmp(ext,"gif")) { > float _fps = 0, _nb_loops = 0; > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()>1 && std::sscanf(options,"%f,%f",&_fps,&_nb_loops)>=1) { > > const unsigned int > fps = (unsigned int)cimg::round(_fps), > nb_loops = (unsigned int)cimg::round(_nb_loops); > if (nb_loops) > print(images,0, > "Output image%s as animated file '%s', with %u fps and %u loops.", > selection2string(selection,images_names,true).data(),_filename.data(),fps,nb_loops); > else > print(images,0, > "Output image%s as animated file '%s', with %u fps.", > selection2string(selection,images_names,true).data(),_filename.data(),fps); > output_images.save_gif_external(filename,fps,nb_loops); > } else { > if (output_images.size()==1) > print(images,0,"Output image%s as file '%s' (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data()); > output_images.save(filename); > } > } else if (!cimg::strcasecmp(ext,"jpeg") || !cimg::strcasecmp(ext,"jpg")) { > float quality = 100; > if (std::sscanf(options,"%f%c",&quality,&end)!=1) quality = 100; > if (quality<0) quality = 0; else if (quality>100) quality = 100; > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()==1) > print(images,0, > "Output image%s as file '%s', with quality %g%% (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > quality, > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s', with quality %g%%.", > selection2string(selection,images_names,true).data(), > _filename.data(), > quality); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s', instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); > if (output_images.size()==1) > output_images[0].save_jpeg(filename,(unsigned int)cimg::round(quality)); > else { > CImg<char> nfilename(4096); > for (int l = 0; l<(int)(output_images)._width; ++l) { > cimg::number_filename(filename,l,6,nfilename); > output_images[l].save_jpeg(nfilename,(unsigned int)cimg::round(quality)); > } > } > } else if (!cimg::strcasecmp(ext,"mnc") && *options) { > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()==1) > print(images,0, > "Output image%s as file '%s', with header get from file '%s' " > "(1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > options.data(), > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else > print(images,0, > "Output image%s as file '%s', with header get from file '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data(), > options.data()); > if (output_images.size()==1) > output_images[0].save_minc2(filename,options); > else { > CImg<char> nfilename(4096); > for (int l = 0; l<(int)(output_images)._width; ++l) { > cimg::number_filename(filename,l,6,nfilename); > output_images[l].save_minc2(nfilename,options); > } > } > } else if (!cimg::strcasecmp(ext,"raw")) { > const char *const stype = std::sscanf(options,"%255[A-zA-Z]%c",argx,&end)==1?argx: > cimg::type<T>::string(); > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],images[selection[l]]?true:false); > if (output_images.size()==1) > print(images,0, > "Output image%s as file '%s', with pixel type '%s' (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype, > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s', with pixel type '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s', instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); ># 8337 "gmic.cpp" > if (!std::strcmp(stype,"bool")) { if (output_images.size()==1) CImg<bool>(output_images[0], cimg::type<T>::string()==cimg::type<bool>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<bool>(output_images[l], cimg::type<T>::string()==cimg::type<bool>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"uchar")) { if (output_images.size()==1) CImg<unsigned char>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"unsigned char")) { if (output_images.size()==1) CImg<unsigned char>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"char")) { if (output_images.size()==1) CImg<char>(output_images[0], cimg::type<T>::string()==cimg::type<char>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<char>(output_images[l], cimg::type<T>::string()==cimg::type<char>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"ushort")) { if (output_images.size()==1) CImg<unsigned short>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"unsigned short")) { if (output_images.size()==1) CImg<unsigned short>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"short")) { if (output_images.size()==1) CImg<short>(output_images[0], cimg::type<T>::string()==cimg::type<short>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<short>(output_images[l], cimg::type<T>::string()==cimg::type<short>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"uint")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"unsigned int")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"int")) { if (output_images.size()==1) CImg<int>(output_images[0], cimg::type<T>::string()==cimg::type<int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"ulong")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"unsigned long")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"long")) { if (output_images.size()==1) CImg<int>(output_images[0], cimg::type<T>::string()==cimg::type<int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"float")) { if (output_images.size()==1) CImg<float>(output_images[0], cimg::type<T>::string()==cimg::type<float>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<float>(output_images[l], cimg::type<T>::string()==cimg::type<float>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"double")) { if (output_images.size()==1) CImg<double>(output_images[0], cimg::type<T>::string()==cimg::type<double>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<double>(output_images[l], cimg::type<T>::string()==cimg::type<double>::string()). save_raw(nfilename); } } } > else error(images,0,0, > "Command '-output': File '%s', invalid " > "specified pixel type '%s'.", > _filename.data(),stype); > } else if (!cimg::strcasecmp(ext,"cimg") || !cimg::strcasecmp(ext,"cimgz")) { > const char *const stype = std::sscanf(options,"%255[A-zA-Z]%c",argx,&end)==1?argx: > cimg::type<T>::string(); > CImgList<T> output_images(selection.height()); > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],images[selection[l]]?true:false); > print(images,0,"Output image%s as file '%s', with pixel type '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype); > > > > > > > if (!std::strcmp(stype,"bool")) CImgList<bool>(output_images, cimg::type<T>::string()==cimg::type<bool>::string()). save(filename); > else if (!std::strcmp(stype,"uchar")) CImgList<unsigned char>(output_images, cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(filename); > else if (!std::strcmp(stype,"unsigned char")) CImgList<unsigned char>(output_images, cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(filename); > else if (!std::strcmp(stype,"char")) CImgList<char>(output_images, cimg::type<T>::string()==cimg::type<char>::string()). save(filename); > else if (!std::strcmp(stype,"ushort")) CImgList<unsigned short>(output_images, cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(filename); > else if (!std::strcmp(stype,"unsigned short")) CImgList<unsigned short>(output_images, cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(filename); > else if (!std::strcmp(stype,"short")) CImgList<short>(output_images, cimg::type<T>::string()==cimg::type<short>::string()). save(filename); > else if (!std::strcmp(stype,"uint")) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); > else if (!std::strcmp(stype,"unsigned int")) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); > else if (!std::strcmp(stype,"int")) CImgList<int>(output_images, cimg::type<T>::string()==cimg::type<int>::string()). save(filename); > else if (!std::strcmp(stype,"ulong")) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); > else if (!std::strcmp(stype,"unsigned long")) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); > else if (!std::strcmp(stype,"long")) CImgList<int>(output_images, cimg::type<T>::string()==cimg::type<int>::string()). save(filename); > else if (!std::strcmp(stype,"float")) CImgList<float>(output_images, cimg::type<T>::string()==cimg::type<float>::string()). save(filename); > else if (!std::strcmp(stype,"double")) CImgList<double>(output_images, cimg::type<T>::string()==cimg::type<double>::string()). save(filename); > else error(images,0,0, > "Command '-output': File '%s', invalid " > "specified pixel type '%s'.", > _filename.data(),stype); > } else > if (!cimg::strcasecmp(ext,"avi") || !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mkv") || !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"qt") || !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || !cimg::strcasecmp(ext,"mpeg") || > !cimg::strcasecmp(ext,"ogg")) { > float fps = 0, bitrate = 0; > std::sscanf(options,"%f,%f",&fps,&bitrate); > fps = cimg::round(fps); > bitrate = cimg::round(bitrate); > if (!fps) fps = 25; > if (!bitrate) bitrate = 2048; > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > print(images,0,"Output image%s as file '%s', with %g fps and bitrate %gk.", > selection2string(selection,images_names,true).data(), > _filename.data(), > fps,bitrate); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s, instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); > output_images.save_ffmpeg(filename,(unsigned int)fps,(unsigned int)bitrate); > } else { > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()==1) > print(images,0,"Output image%s as file '%s' (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data()); > output_images.save(filename); > } > > if (*cext) { > try { > CImg<unsigned char>::get_load_raw(filename_tmp).save_raw(_filename); > std::remove(filename_tmp); > } catch (...) { > bool save_failure = false; > CImg<char> message(1024); > for (unsigned int i = 0; i!=~0U; ++i) { > cimg::number_filename(filename_tmp,i,6,formula); > cimg::number_filename(_filename,i,6,message); > try { CImg<unsigned char>::get_load_raw(formula).save_raw(message); } > catch (...) { i = ~0U-1; if (!i) save_failure = true; } > } > if (save_failure) > error(images,0,0, > "Command '-output': Invalid write of file '%s' from temporary file '%s'.", > _filename.data(),filename_tmp.data()); > } > } > is_released = true; ++position; continue; > } > > > if (!std::strcmp("-onfail",item)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='l') > error(images,0,0, > "Command '-onfail': Not associated to a '-local' command within " > "the same scope."); > for (int nb_locals = 1; nb_locals && position<commands_line.size(); ++position) { > const char *const it = commands_line[position].data(); > if (!std::strcmp("-local",it) || !std::strcmp("-l",it) || > !std::strcmp("--local",it) || !std::strcmp("--l",it) || > !std::strncmp("-local[",it,7) || !std::strncmp("-l[",it,3) || > !std::strncmp("--local[",it,8) || !std::strncmp("--l[",it,4)) ++nb_locals; > else if (!std::strcmp("-endlocal",it) || !std::strcmp("-endl",it)) { > --nb_locals; if (!nb_locals) --position; > } > } > continue; > } > > > > > if (!std::strcmp("-object3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x = 0, y = 0, z = 0, opacity = 1; > char sep = 0, sepx = 0, sepy = 0; > unsigned int > is_zbuffer = 1, > _render3d = (unsigned int)cimg::max(0,render3d), > _is_double3d = is_double3d?1:0; > float > _focale3d = focale3d, > _light3d_x = light3d_x, > _light3d_y = light3d_y, > _light3d_z = light3d_z, > _specular_lightness3d = specular_lightness3d, > _specular_shininess3d = specular_shininess3d; > CImg<unsigned int> ind; > *argx = *argy = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-]%c", > indices,argx,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > indices,argx,argy,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f%c", > indices,argx,argy,&z,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f%c", > indices,argx,argy,&z,&opacity,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u%c", > indices,argx,argy,&z,&opacity,&_render3d,&end)==6 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&end)==7 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u,%u%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&is_zbuffer, > &end)==8 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u,%u,%f%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&is_zbuffer, > &_focale3d,&end)==9 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u,%u,%f,%f,%f,%f%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&is_zbuffer, > &_focale3d,&_light3d_x,&_light3d_y,&_light3d_z,&end)==12 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u,%u,%f,%f,%f,%f,%f,%f%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&is_zbuffer, > &_focale3d,&_light3d_x,&_light3d_y,&_light3d_z, > &_specular_lightness3d,&_specular_shininess3d,&end)==14) && > (ind=selection2cimg(indices,images.size(),images_names,"-object3d",true, > false,CImg<char>::empty())).height()==1 && > (!*argx || > std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > _render3d<=5 && is_zbuffer<=1 && _is_double3d<=1) { > const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > > print(images,0,"Draw 3d object [%u] at (%g%s,%g%s,%g) on image%s, with opacity %g, " > "%s rendering, %s-sided mode, %sz-buffer, focale %g, 3d light at (%g,%g,%g) " > "and specular properties (%g,%g)", > *ind, > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z, > selection2string(selection,images_names,true).data(), > opacity, > _render3d==0?"dot":_render3d==1?"wireframe":_render3d==2?"flat": > _render3d==3?"flat-shaded":_render3d==4?"gouraud-shaded":"phong-shaded", > _is_double3d?"double":"simple", > is_zbuffer?"":"no ", > _focale3d,_light3d_x,_light3d_y,_light3d_z, > _specular_lightness3d,_specular_shininess3d); > CImgList<unsigned int> primitives; > CImgList<float> colors, opacities; > CImgList<unsigned char> _colors; > CImg<float> vertices(img0,false); > try { > if (_render3d>=3) { > vertices.CImg3dtoobject3d(primitives,_colors,opacities,false); > if (light3d) _colors.insert(light3d,~0U,true); > } else vertices.CImg3dtoobject3d(primitives,colors,opacities,false); > } > catch (CImgException &e) { > CImg<char> message(1024); > if (!vertices.is_CImg3d(true,message)) > error(images,0,0, > "Command '-object3d': Invalid 3d object [%u], specified " > "in argument '%s' (%s).", > *ind,argument_text,message.data()); > else throw e; > } > for (int o = 0; o<(int)(opacities)._width; ++o) if (!opacities[o].is_shared()) opacities[o]*=opacity; > > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const float > nx = sepx=='%'?x*(img.width()-1)/100:x, > ny = sepy=='%'?y*(img.height()-1)/100:y; > CImg<float> zbuffer(is_zbuffer?img.width():0,is_zbuffer?img.height():0,1,1,0); > if (colors) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_object3d(nx,ny,z,vertices,primitives,colors,opacities, _render3d,_is_double3d,_focale3d, _light3d_x,_light3d_y,_light3d_z, _specular_lightness3d,_specular_shininess3d, zbuffer); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_object3d(nx,ny,z,vertices,primitives,colors,opacities, _render3d,_is_double3d,_focale3d, _light3d_x,_light3d_y,_light3d_z, _specular_lightness3d,_specular_shininess3d, zbuffer); images_names[posi].mark(); } } > > > > ; > } else { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_object3d(nx,ny,z,vertices,primitives,_colors,opacities, _render3d,_is_double3d,_focale3d, _light3d_x,_light3d_y,_light3d_z, _specular_lightness3d,_specular_shininess3d, zbuffer); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_object3d(nx,ny,z,vertices,primitives,_colors,opacities, _render3d,_is_double3d,_focale3d, _light3d_x,_light3d_y,_light3d_z, _specular_lightness3d,_specular_shininess3d, zbuffer); images_names[posi].mark(); } } > > > > ; > } > } > } else gmic::error(images,0,"object3d","Command '-%s': Invalid argument '%s'.","object3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-or",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise OR of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator|=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator|=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-or", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise OR of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator|=(img0); } else { images_names[selection[l]].mark(); img.operator|=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise OR of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator|=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator|=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise OR of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator|=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator|=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 8633 "gmic.cpp" > ; > > > if (!std::strcmp("-opacity3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 1; > if (std::sscanf(argument,"%f%c", > &value,&end)==1) ++position; > else value = 1; > print(images,0,"Set opacity of 3d object%s to %g.", > selection2string(selection,images_names,true).data(), > value); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_color_CImg3d(0,0,0,value,false,true); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.color_CImg3d(0,0,0,value,false,true); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-opacity3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > is_released = false; continue; > } > > > } > > > > > else if (command1=='p') { > > > if (!std::strcmp("-parallel",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > const char *_arg = argument, *_arg_text = argument_text; > unsigned int wait_mode = 3; > if ((*_arg=='0' || *_arg=='1' || *_arg=='2' || *_arg=='3') && > (_arg[1]==',' || !_arg[1])) { > wait_mode = (unsigned int)(*_arg-'0'); _arg+=2; _arg_text+=2; > } > CImgList<char> arguments = CImg<char>::string(_arg).get_split(',',false,false); > CImg<st_gmic_parallel<T> >(1,arguments.width()). > move_to(wait_mode>1?threads_data:global_threads_data); > CImg<st_gmic_parallel<T> > > &_threads_data = wait_mode>1?threads_data.back():global_threads_data.back(); > > > print(images,0,"Execute %d command%s '%s' in parallel%s.", > arguments.width(),arguments.width()>1?"s":"",_arg_text, > wait_mode==3?" and wait for thread termination immediately": > wait_mode==2?" and defer thread termination wait at command return point": > wait_mode==1?" and defer thread termination wait at process return point": > "and do not wait for thread termination"); > > > > > > > > for (int l = 0; l<(int)((_threads_data)._height); ++l) { > gmic &gi = _threads_data[l].gmic_instance; > for (unsigned int i = 0; i<256; ++i) { > gi.commands[i].assign(commands[i],true); > gi.commands_names[i].assign(commands_names[i],true); > gi.commands_has_arguments[i].assign(commands_has_arguments[i],true); > gi.variables[i] = &gi._variables[i]; > gi.variables_names[i] = &gi._variables_names[i]; > _threads_data[l].variables_sizes[i] = 0; > } > gi.scope.assign(scope); > gi.commands_files.assign(commands_files,true); > snprintf(title,_title.size(),"*thread%d",l); > CImg<char>::string(title).move_to(gi.scope); > gi.background3d.assign(background3d); > gi.light3d.assign(light3d); > gi.pose3d.assign(pose3d); > gi.status.assign(status); > gi.debug_filename = debug_filename; > gi.debug_line = debug_line; > gi.focale3d = focale3d; > gi.light3d_x = light3d_x; > gi.light3d_y = light3d_y; > gi.light3d_z = light3d_z; > gi.specular_lightness3d = specular_lightness3d; > gi.specular_shininess3d = specular_shininess3d; > gi._progress = 0; > gi.progress = &gi._progress; > gi.is_released = is_released; > gi.is_debug = is_debug; > gi.is_start = false; > gi.is_quit = false; > gi.is_return = false; > gi.is_double3d = is_double3d; > gi.is_default_type = is_default_type; > gi.check_elif = false; > gi.verbosity = verbosity; > gi.render3d = render3d; > gi.renderd3d = renderd3d; > gi._cancel = _cancel; > gi.cancel = cancel; > gi.nb_carriages = nb_carriages; > gi.reference_time = reference_time; > _threads_data[l].images = &images; > _threads_data[l].images_names = &images_names; > _threads_data[l].wait_mode = wait_mode; > > > arguments[l].resize(1,arguments[l].height()+1,1,1,0); > bool is_dquoted = false; > for (char *s = arguments[l].data(); *s; ++s) { > const char c = *s; > if (c=='\"') is_dquoted = !is_dquoted; > if (!is_dquoted) *s = c<' '?(c==_dollar?'$':c==_lbrace?'{':c==_rbrace?'}': > c==_comma?',':c==_dquote?'\"':c==_arobace?'@':c):c; > } > gi.commands_line_to_CImgList(arguments[l].data()). > move_to(_threads_data[l].commands_line); > } > > > for (int l = 0; l<(int)((_threads_data)._height); ++l) { > > > pthread_create(&_threads_data[l].thread_id,0,gmic_parallel<T>, > (void*)&_threads_data[l]); ># 8773 "gmic.cpp" > } > > > if (wait_mode==3) { > for (int l = 0; l<(int)((_threads_data)._height); ++l) { > > > pthread_join(_threads_data[l].thread_id,0); > > > > > > } > > > for (int l = 0; l<(int)((_threads_data)._height); ++l) is_released&=_threads_data[l].gmic_instance.is_released; > > > _threads_data[0].gmic_instance.status.move_to(status); > > > for (int l = 0; l<(int)((_threads_data)._height); ++l) if (_threads_data[l].exception._message) > throw _threads_data[l].exception; > > threads_data.remove(); > } > > ++position; continue; > } > > > if (!std::strcmp("-permute",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > print(images,0,"Permute axes of image%s, with permutation '%s'.", > selection2string(selection,images_names,true).data(),argument_text); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_permute_axes(argument); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].permute_axes(argument); images_names[posi].mark(); } }; > } > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-progress",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = -1; > if (std::sscanf(argument,"%f%c", > &value,&end)==1) { > if (value<0) value = -1; else if (value>100) value = 100; > if (value>=0) > print(images,0,"Set progress indice to %g%%.", > value); > else > print(images,0,"Disable progress indice."); > *progress = value; > } else gmic::error(images,0,"progress","Command '-%s': Invalid argument '%s'.","progress",argument_text); > ++position; continue; > } > > > if (!std::strcmp("-print",command) && !is_get_version) { > print_images(images,images_names,selection); > is_released = true; continue; > } > > > > > if (!std::strcmp("-pow",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute image%s to the power of %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].pow((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.pow((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-pow", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute image%s to the power of image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].pow(img0); } else { images_names[selection[l]].mark(); img.pow(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute image%s to the power of expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].pow((const char*)formula); } else { images_names[selection[l]].mark(); img.pow((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential power of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.pow(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.pow(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 8850 "gmic.cpp" > ; > > > if (!std::strcmp("-point",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x = 0, y = 0, z = 0, opacity = 1; > char sepx = 0, sepy = 0, sepz = 0; > *argx = *argy = *argz = *color = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > argx,argy,argz,&opacity,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f," > "%4095[0-9.eE,+-]%c", > argx,argy,argz,&opacity,color,&end)==5) && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%'))) { > print(images,0, > "Draw point (%g%s,%g%s,%g%s) on image%s, with opacity %g and color (%s).", > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > selection2string(selection,images_names,true).data(), > opacity, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_point(nx,ny,nz,col.data(),opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_point(nx,ny,nz,col.data(),opacity); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"point","Command '-%s': Invalid argument '%s'.","point",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-polygon",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> strint(256); > *strint = *color = 0; > float N = 0, x0 = 0, y0 = 0, opacity = 1; > char sepx = 0, sepy = 0, seph = 0; > unsigned int pattern = 0; > if (std::sscanf(argument,"%f%c", > &N,&end)==2 && N>=1) { > N = cimg::round(N); > const char > *nargument = argument + snprintf(strint,strint.width(),"%u", > (unsigned int)N) + 1, > *const eargument = argument + std::strlen(argument); > CImg<float> coords0((unsigned int)N,2,1,1,0); > CImg<bool> percents((unsigned int)N,2,1,1,0); > for (unsigned int n = 0; n<(unsigned int)N; ++n) if (nargument<eargument) { > sepx = sepy = 0; > if (std::sscanf(nargument,"%255[0-9.eE%+-],%255[0-9.eE%+-]", > argx,argy)==2 && > (std::sscanf(argx,"%f%c",&x0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x0,&sepx,&end)==2 && sepx=='%')) && > (std::sscanf(argy,"%f%c",&y0,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y0,&sepy,&end)==2 && sepy=='%'))) { > coords0(n,0) = x0; percents(n,0) = (sepx=='%'); > coords0(n,1) = y0; percents(n,1) = (sepy=='%'); > nargument+=std::strlen(argx) + std::strlen(argy) + 2; > } else gmic::error(images,0,"polygon","Command '-%s': Invalid argument '%s'.","polygon",argument_text); > } else gmic::error(images,0,"polygon","Command '-%s': Invalid argument '%s'.","polygon",argument_text); > if (nargument<eargument && > std::sscanf(nargument,"%4095[0-9.eE+-]",color)==1 && > std::sscanf(color,"%f",&opacity)==1) { > nargument+=std::strlen(color) + 1; > *color = 0; > } > if (nargument<eargument && > std::sscanf(nargument,"0%c%4095[0-9a-fA-F]",&seph,color)==2 && seph=='x' && > std::sscanf(color,"%x%c",&pattern,&end)==1) { > nargument+=std::strlen(color)+3; > *color = 0; > } > const char *const _color = nargument<eargument?nargument:&(end=0); > if (seph=='x') > print(images,0,"Draw %g-vertices outlined polygon on image%s, with opacity %g, " > "pattern 0x%x and color (%s).", > N, > selection2string(selection,images_names,true).data(), > opacity,pattern, > *_color?_color:"default"); > else > print(images,0,"Draw %g-vertices filled polygon on image%s, with opacity %g " > "and color (%s).", > N, > selection2string(selection,images_names,true).data(), > opacity, > *_color?_color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > CImg<int> coords(coords0); > for (int p = 0; p<(int)((coords)._width); ++p) { > if (percents(p,0)) > coords(p,0) = (int)cimg::round(coords0(p,0)*(img.width()-1)/100); > else coords(p,0) = (int)cimg::round(coords(p,0)); > if (percents(p,1)) > coords(p,1) = (int)cimg::round(coords0(p,1)*(img.height()-1)/100); > else coords(p,1) = (int)cimg::round(coords(p,1)); > } > CImg<T> col(img.spectrum(),1,1,1,0); > col.fill(_color,true); > if (seph=='x') { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_polygon(coords,col.data(),opacity,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_polygon(coords,col.data(),opacity,pattern); images_names[posi].mark(); } }; } > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_polygon(coords,col.data(),opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_polygon(coords,col.data(),opacity); images_names[posi].mark(); } }; } > } > } else gmic::error(images,0,"polygon","Command '-%s': Invalid argument '%s'.","polygon",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-plasma",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float alpha = 1, beta = 1, scale = 8; > if ((std::sscanf(argument,"%f%c", > &alpha,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &alpha,&beta,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &alpha,&beta,&scale,&end)==3) && > scale>=0) ++position; > else { alpha = beta = 1; scale = 8; } > const unsigned int _scale = (unsigned int)cimg::round(scale); > print(images,0,"Draw plasma fractal on image%s, with alpha %g, beta %g and scale %u.", > selection2string(selection,images_names,true).data(), > alpha, > beta, > _scale); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_draw_plasma(alpha,beta,_scale); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].draw_plasma(alpha,beta,_scale); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-pose3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<float> _p3d(16,1,1,1,0); > float *const p3d = _p3d.data(); > if (std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f%c", > p3d,p3d+1,p3d+2,p3d+3,p3d+4,p3d+5,p3d+6,p3d+7, > p3d+8,p3d+9,p3d+10,p3d+11,p3d+12,p3d+13,p3d+14,p3d+15, > &end)==16) { > print(images,0,"Set 3d pose matrix to [ %g,%g,%g,%g; %g,%g,%g,%g; %g,%g,%g,%g; " > "%g,%g,%g,%g ].", > p3d[0],p3d[1],p3d[2],p3d[3], > p3d[4],p3d[5],p3d[6],p3d[7], > p3d[8],p3d[9],p3d[10],p3d[11], > p3d[12],p3d[13],p3d[14],p3d[15]); > pose3d.assign(p3d,4,4,1,1,false); > ++position; > } else { > print(images,0,"Reset 3d pose matrix to default."); > pose3d.assign(); > } > continue; > } > > > if (!std::strcmp("-primitives3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int mode = 0; > if (std::sscanf(argument,"%u%c", > &mode,&end)==1 && > mode<=2) { > print(images,0,"Convert primitives of 3d object%s to %s.", > selection2string(selection,images_names,true).data(), > mode==0?"points":mode==1?"segments":"no-textures"); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T> &img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_convert_primitives_CImg3d(mode); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.convert_primitives_CImg3d(mode); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-primitives3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"primitives3d","Command '-%s': Invalid argument '%s'.","primitives3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-plot",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double ymin = 0, ymax = 0, xmin = 0, xmax = 0; > unsigned int plot_type = 1, vertex_type = 1; > float resolution = 65536; > char sep = 0; > *formula = 0; > if (((std::sscanf(argument,"'%1023[^']%c%c", > formula,&sep,&end)==2 && sep=='\'') || > std::sscanf(argument,"'%1023[^']',%f%c", > formula,&resolution,&end)==2 || > std::sscanf(argument,"'%1023[^']',%f,%u%c", > formula,&resolution,&plot_type,&end)==3 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u%c", > formula,&resolution,&plot_type,&vertex_type,&end)==4 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax,&end)==6 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf%c", > formula,&resolution,&plot_type,&vertex_type, > &xmin,&xmax,&ymin,&ymax,&end)==8) && > resolution>0 && plot_type<=3 && vertex_type<=7) { > resolution = cimg::round(resolution); > gmic_strreplace(formula); > if (xmin==0 && xmax==0) { xmin = -4; xmax = 4; } > if (!plot_type && !vertex_type) plot_type = 1; > if (resolution<1) resolution = 65536; > CImgList<double> tmp_img(1); > CImg<double> &values = tmp_img[0]; > > values.assign(4,(unsigned int)resolution--,1,1,0); > const double dx = xmax - xmin; > for (int X = 0; X<(int)((values)._height); ++X) values(0,X) = xmin + X*dx/resolution; > cimg::eval(formula,values).move_to(values); > > CImgList<char> tmp_name; > snprintf(title,_title.size(),"[Plot of '%s']",formula); > CImg<char>::string(title).move_to(tmp_name); > display_plots(tmp_img,tmp_name,CImg<unsigned int>::vector(0), > plot_type,vertex_type,xmin,xmax,ymin,ymax); > ++position; > } else { > plot_type = 1; vertex_type = 0; ymin = ymax = xmin = xmax = 0; > if ((std::sscanf(argument,"%u%c", > &plot_type,&end)==1 || > std::sscanf(argument,"%u,%u%c", > &plot_type,&vertex_type,&end)==2 || > std::sscanf(argument,"%u,%u,%lf,%lf%c", > &plot_type,&vertex_type,&xmin,&xmax,&end)==4 || > std::sscanf(argument,"%u,%u,%lf,%lf,%lf,%lf%c", > &plot_type,&vertex_type,&xmin,&xmax,&ymin,&ymax,&end)==6) && > plot_type<=3 && vertex_type<=7) ++position; > if (!plot_type && !vertex_type) plot_type = 1; > display_plots(images,images_names,selection,plot_type,vertex_type, > xmin,xmax,ymin,ymax); > } > is_released = true; continue; > } > > > } > > > > > else if (command1=='q') { > > > > > if (!std::strcmp("-quiver",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sampling = 25, factor = -20, opacity = 1; > unsigned int is_arrows = 1, pattern = ~0U; > CImg<unsigned int> ind; > char seph = 0; > *color = 0; > if ((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]]%c", > indices,&end)==1 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&sampling,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f%c", > indices,&sampling,&factor,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u%c", > indices,&sampling,&factor,&is_arrows,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u,%f%c", > indices,&sampling,&factor,&is_arrows,&opacity,&end)==5 || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u,%f,0%c%x%c", > indices,&sampling,&factor,&is_arrows, > &opacity,&seph,&pattern,&end)==7 && seph=='x') || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u,%f,%4095[0-9.eE,+-]%c", > indices,&sampling,&factor,&is_arrows,&opacity,color,&end)==6 && > (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u," > "%f,0%c%x,%4095[0-9.eE,+-]%c", > indices,&sampling,&factor,&is_arrows, > &opacity,&seph,&pattern,color,&end)==8 && > seph=='x')) && > (ind=selection2cimg(indices,images.size(),images_names,"-quiver",true, > false,CImg<char>::empty())).height()==1 && > sampling>0 && is_arrows<=1) { > sampling = cimg::round(sampling); > print(images,0,"Draw 2d vector field [%u] on image%s, with sampling %g, factor %g, " > "arrows %s, opacity %g, pattern 0x%x and color (%s).", > *ind, > selection2string(selection,images_names,true).data(), > sampling, > factor, > is_arrows?"enabled":"disabled", > opacity,pattern, > *color?color:"default"); > const CImg<T> flow = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_quiver(flow,col.data(),opacity,(unsigned int)sampling, factor,(bool)is_arrows,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_quiver(flow,col.data(),opacity,(unsigned int)sampling, factor,(bool)is_arrows,pattern); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"quiver","Command '-%s': Invalid argument '%s'.","quiver",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='r') { > > > if (!std::strcmp("-remove",command)) { > print(images,0,"Remove image%s", > selection2string(selection,images_names,true).data()); > CImgList<T> _images; > CImgList<char> _images_names; > if (is_get_version) { _images.assign(images); _images_names.assign(images_names); } > remove_images(images,images_names,selection,0,selection.height()-1); > if (is_get_version) { > _images.move_to(images,0); > _images_names.move_to(images_names,0); > } > if (verbosity>=0 || is_debug) { > std::fprintf(cimg::output()," (%u image%s left).", > images.size(),images.size()==1?"":"s"); > std::fflush(cimg::output()); > } > is_released = false; continue; > } > > > if (!std::strcmp("-repeat",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float number = 0; > if (std::sscanf(argument,"%f%c", > &number,&end)==1) { > const unsigned int nb = number>0?(unsigned int)cimg::round(number):0U; > if (nb) { > CImg<char>::string("*repeat").move_to(scope); > if (verbosity>0 || is_debug) > print(images,0,"Start '-repeat..-done' block (%u iteration%s).", > nb,nb>1?"s":""); > CImg<unsigned int>::vector(position+1,nb,0).move_to(repeatdones); > } else { > if (verbosity>0 || is_debug) > print(images,0,"Skip 'repeat..done' block (0 iteration).", > nb); > int nb_repeats = 0; > for (nb_repeats = 1; nb_repeats && position<commands_line.size(); ++position) { > const char *it = commands_line[position].data(); > if (!std::strcmp("-repeat",it)) ++nb_repeats; > else if (!std::strcmp("-done",it)) --nb_repeats; > } > if (nb_repeats && position>=commands_line.size()) > error(images,0,0, > "Command '-repeat': Missing associated '-done' command."); > continue; > } > } else gmic::error(images,0,"repeat","Command '-%s': Invalid argument '%s'.","repeat",argument_text); > ++position; continue; > } > > > if (!std::strcmp("-resize",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float valx = 100, valy = 100, valz = 100, valc = 100, cx = 0, cy = 0, cz = 0, cc = 0; > char sep = 0, sepx = '%', sepy = '%', sepz = '%', sepc = '%'; > CImg<char> indicesy(256), indicesz(256), indicesc(256); > CImg<unsigned int> ind, indx, indy, indz, indc; > unsigned int boundary = 0; > int interpolation = 1; > *indices = *indicesy = *indicesz = *indicesc = *argx = *argy = *argz = *argc = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d%c", > indices,&interpolation,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u%c", > indices,&interpolation,&boundary,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u,%f%c", > indices,&interpolation,&boundary,&cx,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u,%f,%f%c", > indices,&interpolation,&boundary,&cx,&cy,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u,%f,%f,%f%c", > indices,&interpolation,&boundary,&cx,&cy,&cz,&end)==6 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u,%f,%f,%f,%f%c", > indices,&interpolation,&boundary,&cx,&cy,&cz,&cc,&end)==7) && > (ind=selection2cimg(indices,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1 && > interpolation>=-1 && interpolation<=6 && boundary<=2 && > cx>=0 && cx<=1 && cy>=0 && cy<=1 && cz>=0 && cz<=1 && cc>=0 && cc<=1) { > const int > nvalx = images[*ind].width(), > nvaly = images[*ind].height(), > nvalz = images[*ind].depth(), > nvalc = images[*ind].spectrum(); > print(images,0,"Resize image%s to %dx%dx%dx%d, with %s interpolation, " > "%s boundary conditions and alignment (%g,%g,%g,%g).", > selection2string(selection,images_names,true).data(), > nvalx,nvaly,nvalz,nvalc, > interpolation<=0?"no":interpolation==1?"nearest-neighbor": > interpolation==2?"moving average":interpolation==3?"linear": > interpolation==4?"grid":interpolation==5?"cubic":"lanczos", > boundary<=0?"dirichlet":boundary==1?"neumann":"cyclic", > cx,cy,cz,cc); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_resize(nvalx,nvaly,nvalz,nvalc,interpolation, boundary,cx,cy,cz,cc); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].resize(nvalx,nvaly,nvalz,nvalc,interpolation, boundary,cx,cy,cz,cc); images_names[posi].mark(); } } > ; > } > ++position; > } else if ((cx=cy=cz=cc=0, interpolation=1, boundary=0, true) && > (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,argz,argc,&end)==4 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d%c", > argx,argy,argz,argc,&interpolation,&end)==5 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u%c", > argx,argy,argz,argc,&interpolation,&boundary,&end)==6 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u,%f%c", > argx,argy,argz,argc,&interpolation,&boundary,&cx,&end)==7 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u,%f," > "%f%c", > argx,argy,argz,argc,&interpolation,&boundary,&cx,&cy,&end)==8|| > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u,%f," > "%f,%f%c", > argx,argy,argz,argc,&interpolation,&boundary, > &cx,&cy,&cz,&end)==9 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u,%f," > "%f,%f,%f%c", > argx,argy,argz,argc,&interpolation,&boundary, > &cx,&cy,&cz,&cc,&end)==10) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sepx,&end)==2 && > sepx==']' && > (indx=selection2cimg(indices,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1) || > (sepx=0,std::sscanf(argx,"%f%c",&valx,&sepx)==1 && valx>=1) || > (std::sscanf(argx,"%f%c%c",&valx,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > (std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesy.data(),&sepy, > &end)==2 && > sepy==']' && > (indy=selection2cimg(indicesy,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1) || > (sepy=0,std::sscanf(argy,"%f%c",&valy,&sepy)==1 && valy>=1) || > (std::sscanf(argy,"%f%c%c",&valy,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > (std::sscanf(argz,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesz.data(),&sepz, > &end)==2 && > sepz==']' && > (indz=selection2cimg(indicesz,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1) || > (sepz=0,std::sscanf(argz,"%f%c",&valz,&sepz)==1 && valz>=1) || > (std::sscanf(argz,"%f%c%c",&valz,&sepz,&end)==2 && sepz=='%')) && > (!*argc || > (std::sscanf(argc,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesc.data(),&sepc, > &end)==2 && > sepc==']' && > (indc=selection2cimg(indicesc,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1) || > (sepc=0,std::sscanf(argc,"%f%c",&valc,&sepc)==1 && valc>=1) || > (std::sscanf(argc,"%f%c%c",&valc,&sepc,&end)==2 && sepc=='%')) && > valx>0 && valy>0 && valz>0 && valc>0 && > interpolation>=-1 && interpolation<=6 && boundary<=2 && > cx>=0 && cx<=1 && cy>=0 && cy<=1 && cz>=0 && cz<=1 && cc>=0 && cc<=1) { > if (indx) { valx = (float)images[*indx].width(); sepx = 0; } > if (indy) { valy = (float)images[*indy].height(); sepy = 0; } > if (indz) { valz = (float)images[*indz].depth(); sepz = 0; } > if (indc) { valc = (float)images[*indc].spectrum(); sepc = 0; } > print(images,0, > "Resize image%s to %g%s%g%s%g%s%g%s, with %s interpolation, " > "%s boundary conditions and alignment (%g,%g,%g,%g).", > selection2string(selection,images_names,true).data(), > valx,sepx=='%'?"%x":"x", > valy,sepy=='%'?"%x":"x", > valz,sepz=='%'?"%x":"x", > valc,sepc=='%'?"% ":"", > interpolation<=0?"no":interpolation==1?"nearest neighbor": > interpolation==2?"moving average":interpolation==3?"linear": > interpolation==4?"grid":interpolation==5?"cubic":"lanczos", > boundary<=0?"dirichlet":boundary==1?"neumann":"cyclic", > cx,cy,cz,cc); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const int > _nvalx = (int)cimg::round(sepx=='%'?valx*img.width()/100:valx), > _nvaly = (int)cimg::round(sepy=='%'?valy*img.height()/100:valy), > _nvalz = (int)cimg::round(sepz=='%'?valz*img.depth()/100:valz), > _nvalc = (int)cimg::round(sepc=='%'?valc*img.spectrum()/100:valc), > nvalx = _nvalx?_nvalx:1, > nvaly = _nvaly?_nvaly:1, > nvalz = _nvalz?_nvalz:1, > nvalc = _nvalc?_nvalc:1; > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_resize(nvalx,nvaly,nvalz,nvalc,interpolation,boundary,cx,cy,cz,cc); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.resize(nvalx,nvaly,nvalz,nvalc,interpolation,boundary,cx,cy,cz,cc); images_names[posi].mark(); } }; > } > ++position; > } else { > > print(images,0,"Resize image%s in interactive mode (skipped, no display support).", > selection2string(selection,images_names,true).data()); ># 9411 "gmic.cpp" > } > is_released = false; continue; > } > > > if (!std::strcmp("-reverse",command)) { > print(images,0,"Reverse positions of image%s.", > selection2string(selection,images_names,true).data()); > CImgList<T> _images, nimages(selection.height()); > CImgList<char> _images_names, nimages_names(selection.height()); > if (is_get_version) { _images.assign(images); _images_names.assign(images_names); } > for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > nimages.reverse(); nimages_names.reverse(); > for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > if (is_get_version) { > _images.move_to(images,0); > _images_names.move_to(images_names,0); > } > is_released = false; continue; > } > > > if (!std::strcmp("-return",item)) { > if (verbosity>0 || is_debug) print(images,0,"Return."); > position = commands_line.size(); > while (scope && scope.back()[0]=='*') { > const char c = scope.back()[1]; > if (c=='d') dowhiles.remove(); > else if (c=='r') repeatdones.remove(); > else if (c=='l' || c=='>' || c=='s') break; > scope.remove(); > } > is_return = true; > break; > } > > > if (!std::strcmp("-rows",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > float value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c]",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-rows",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%'))) { > if (ind0) { value0 = images[*ind0].height() - 1.0f; sep0 = 0; } > print(images,0,"Keep rows %g%s of image%s.", > value0,sep0=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.height()-1)/100:value0); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_row(nvalue0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.row(nvalue0); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-rows",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%')) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep0,&end)==2 && > sep0==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-rows",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argy,"%f%c",&value1,&end)==1 || > (std::sscanf(argy,"%f%c%c",&value1,&sep1,&end)==2 && sep1=='%'))) { > if (ind0) { value0 = images[*ind0].height() - 1.0f; sep0 = 0; } > if (ind1) { value1 = images[*ind1].height() - 1.0f; sep1 = 0; } > print(images,0,"Keep rows %g%s..%g%s of image%s.", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.height()-1)/100:value0), > nvalue1 = (int)cimg::round(sep1=='%'?value1*(img.height()-1)/100:value1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_rows(nvalue0,nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.rows(nvalue0,nvalue1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"rows","Command '-%s': Invalid argument '%s'.","rows",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-rotate",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float angle = 0, zoom = 1, cx = 0, cy = 0; > unsigned int interpolation = 1, boundary = 0; > char sepx = 0, sepy = 0; > *argx = *argy = 0; > if ((std::sscanf(argument,"%f%c", > &angle,&end)==1 || > std::sscanf(argument,"%f,%u%c", > &angle,&interpolation,&end)==2 || > std::sscanf(argument,"%f,%u,%u%c", > &angle,&interpolation,&boundary,&end)==3 || > std::sscanf(argument,"%f,%u,%u,%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > &angle,&interpolation,&boundary,argx,argy,&end)==5 || > std::sscanf(argument,"%f,%u,%u,%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > &angle,&interpolation,&boundary,argx,argy,&zoom,&end)==6) && > (!*argx || > std::sscanf(argx,"%f%c",&cx,&end)==1 || > (std::sscanf(argx,"%f%c%c",&cx,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&cy,&end)==1 || > (std::sscanf(argy,"%f%c%c",&cy,&sepy,&end)==2 && sepy=='%')) && > interpolation<=2 && boundary<=2) { > if (*argx) { > print(images,0,"Rotate image%s of %g°, %s interpolation, %s boundary conditions " > "with center at (%g%s,%g%s).", > selection2string(selection,images_names,true).data(),angle, > interpolation==0?"nearest-neighbor":interpolation==1?"linear":"cubic", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic", > cx,sepx=='%'?"%":"",cy,sepy=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const float > ncx = sepx=='%'?cx*(img.width()-1)/100:cx, > ncy = sepy=='%'?cy*(img.height()-1)/100:cy; > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_rotate(angle,ncx,ncy,zoom,interpolation,boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.rotate(angle,ncx,ncy,zoom,interpolation,boundary); images_names[posi].mark(); } }; > } > } else { > print(images,0,"Rotate image%s of %g°, %s interpolation and %s boundary conditions.", > selection2string(selection,images_names,true).data(),angle, > interpolation==0?"nearest-neighbor":interpolation==1?"linear":"cubic", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_rotate(angle,interpolation,boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].rotate(angle,interpolation,boundary); images_names[posi].mark(); } }; > } > } > } else gmic::error(images,0,"rotate","Command '-%s': Invalid argument '%s'.","rotate",argument_text); > is_released = false; ++position; continue; > } > > > > > if (!std::strcmp("-round",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double rounding_value = 1; > int rounding_type = 0; > if ((std::sscanf(argument,"%lf%c", > &rounding_value,&end)==1 || > std::sscanf(argument,"%lf,%d%c", > &rounding_value,&rounding_type,&end)==2) && > rounding_value>=0 && rounding_type>=-1 && rounding_type<=1) ++position; > else { rounding_value = 1; rounding_type = 0; } > print(images,0,"Round values of image%s by %g and %s rounding.", > selection2string(selection,images_names,true).data(), > rounding_value, > rounding_type<0?"backward":rounding_type>0?"forward":"nearest"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_round(rounding_value,rounding_type); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].round(rounding_value,rounding_type); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-rand",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > double value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-rand",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argx,"%lf%c%c",&value0,&sep0,&end)==2 && sep0=='%') || > std::sscanf(argx,"%lf%c",&value0,&end)==1) && > ((std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep1,&end)==2 && > sep1==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-rand",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argy,"%lf%c%c",&value1,&sep1,&end)==2 && sep1=='%') || > std::sscanf(argy,"%lf%c",&value1,&end)==1)) { > if (ind0) { value0 = images[*ind0].min(); sep0 = 0; } > if (ind1) { value1 = images[*ind1].max(); sep1 = 0; } > print(images,0,"Fill image%s with random values, in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_rand((T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.rand((T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-rand",true, > false,CImg<char>::empty())).height()==1) { > if (images[*ind0]) value1 = (double)images[*ind0].max_min(value0); > print(images,0,"Fill image%s with random values, in range [%g,%g] from image [%d].", > selection2string(selection,images_names,true).data(), > value0, > value1, > *ind0); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_rand((T)value0,(T)value1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].rand((T)value0,(T)value1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"rand","Command '-%s': Invalid argument '%s'.","rand",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-rotate3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float u = 0, v = 0, w = 1, angle = 0; > if (std::sscanf(argument,"%f,%f,%f,%f%c", > &u,&v,&w,&angle,&end)==4) { > print(images,0,"Rotate 3d object%s around axis (%g,%g,%g), with angle %g°.", > selection2string(selection,images_names,true).data(), > u,v,w, > angle); > const CImg<float> rot = CImg<float>::rotation_matrix(u,v,w, > (float)(angle*cimg::PI/180)); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_rotate_CImg3d(rot); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.rotate_CImg3d(rot); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-rotate3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"rotate3d","Command '-%s': Invalid argument '%s'.","rotate3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-rgb2hsi",command)) { print(images,0,"Convert image%s from RGB to HSI color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtoHSI(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtoHSI(); images_names[posi].mark(); } }; } is_released = false; continue; }; > if (!std::strcmp("-rgb2hsl",command)) { print(images,0,"Convert image%s from RGB to HSL color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtoHSL(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtoHSL(); images_names[posi].mark(); } }; } is_released = false; continue; }; > if (!std::strcmp("-rgb2hsv",command)) { print(images,0,"Convert image%s from RGB to HSV color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtoHSV(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtoHSV(); images_names[posi].mark(); } }; } is_released = false; continue; }; > if (!std::strcmp("-rgb2lab",command)) { print(images,0,"Convert image%s from RGB to Lab color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtoLab(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtoLab(); images_names[posi].mark(); } }; } is_released = false; continue; }; > if (!std::strcmp("-rgb2srgb",command)) { print(images,0,"Convert image%s from RGB to sRGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtosRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtosRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-rol",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise left rotation of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].rol((unsigned int)nvalue); } else { images_names[selection[l]].mark(); img.rol((unsigned int)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-rol", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise left rotation of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].rol(img0); } else { images_names[selection[l]].mark(); img.rol(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise left rotation of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].rol((const char*)formula); } else { images_names[selection[l]].mark(); img.rol((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise left rotation of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.rol(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.rol(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 9683 "gmic.cpp" > ; > > > if (!std::strcmp("-ror",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise right rotation of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].ror((unsigned int)nvalue); } else { images_names[selection[l]].mark(); img.ror((unsigned int)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-ror", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise right rotation of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].ror(img0); } else { images_names[selection[l]].mark(); img.ror(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise left rotation of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].ror((const char*)formula); } else { images_names[selection[l]].mark(); img.ror((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise left rotation of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.ror(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.ror(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 9695 "gmic.cpp" > ; > > > if (!std::strcmp("-reverse3d",command)) { > print(images,0,"Reverse orientation of 3d object%s.", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T> &img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_reverse_CImg3d(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.reverse_CImg3d(); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-reverse3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > is_released = false; continue; > } > > > } > > > > > else if (command1=='s') { > > > if (!std::strcmp("-status",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > print(images,0,"Set status to '%s'.",argument_text); > CImg<char>::string(argument).move_to(status); > ++position; continue; > } > > > if (!std::strcmp("-skip",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (verbosity>0 || is_debug) > print(images,0,"Skip argument '%s'.", > argument_text); > ++position; > continue; > } > > > if (!std::strcmp("-set",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sepx = 0, sepy = 0, sepz = 0, sepc = 0; > float x = 0, y = 0, z = 0, c = 0; > double value = 0; > *argx = *argy = *argz = *argc = 0; > if ((std::sscanf(argument,"%lf%c", > &value,&end)==1 || > std::sscanf(argument,"%lf,%255[0-9.eE%+-]%c", > &value,argx,&end)==2 || > std::sscanf(argument,"%lf,%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > &value,argx,argy,&end)==3 || > std::sscanf(argument,"%lf,%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > &value,argx,argy,argz,&end)==4 || > std::sscanf(argument,"%lf,%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > &value,argx,argy,argz,argc,&end)==5) && > (!*argx || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%') || > std::sscanf(argx,"%f%c",&x,&end)==1) && > (!*argy || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%') || > std::sscanf(argy,"%f%c",&y,&end)==1) && > (!*argz || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%') || > std::sscanf(argz,"%f%c",&z,&end)==1) && > (!*argc || > (std::sscanf(argc,"%f%c%c",&c,&sepc,&end)==2 && sepc=='%') || > std::sscanf(argc,"%f%c",&c,&end)==1)) { > print(images,0,"Set value %g in image%s, at coordinates (%g%s,%g%s,%g%s,%g%s).", > value, > selection2string(selection,images_names,true).data(), > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > c,sepc=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z), > nc = (int)cimg::round(sepc=='%'?c*(img.spectrum()-1)/100:c); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_gmic_set(value,nx,ny,nz,nc); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].gmic_set(value,nx,ny,nz,nc); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"set","Command '-%s': Invalid argument '%s'.","set",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-split",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > const char *axis_arg = 0; > char keep_values = '+'; > CImgList<char> axes; > float nb = 0; > for (axis_arg = argument; *axis_arg && *axis_arg!=','; ++axis_arg) { > const char _s = *axis_arg; > if (_s!='x' && _s!='y' && _s!='z' && _s!='c') { axis_arg = 0; break; } > CImg<char>::vector(_s).move_to(axes); > } > if (axis_arg && *axis_arg==',') { > if (std::sscanf(++axis_arg,"%f%c",&nb,&end)!=1) axis_arg = 0; > else nb = cimg::round(nb); > } > if (axes && axis_arg) { > const CImg<char> _axes = (axes,CImg<char>::vector(0))>'x'; > axes.remove(); > if (nb>0) > print(images,0,"Split image%s along the '%s'-ax%cs, into %g parts.", > selection2string(selection,images_names,true).data(), > _axes.data(), > axes.size()>1?'e':'i', > nb); > else if (nb<0) > print(images,0,"Split image%s along the '%s'-ax%cs, into blocs of %g pixels.", > selection2string(selection,images_names,true).data(), > _axes.data(), > axes.size()>1?'e':'i', > -nb); > else > print(images,0,"Split image%s along the '%s'-ax%cs.", > selection2string(selection,images_names,true).data(), > _axes.data(), > axes.size()>1?'e':'i'); > int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T>& img = check_image(images,images[ind]); > if (!img) { > if (!is_get_version) { images.remove(ind); images_names.remove(ind); off-=1; } > } else { > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> split(img,true); > for (int i = 0; i<(int)(axes)._width; ++i) { > const unsigned int N = split.size(); > for (unsigned int l = 0; l<N; ++l) { > split[0].get_split(axes(i,0),(int)nb).move_to(split,~0U); > split.remove(0); > } > } > if (is_get_version) { > images_names.insert(split.size(),name.copymark()); > split.move_to(images,~0U); > } else { > images.remove(ind); images_names.remove(ind); > off+=(int)split.size() - 1; > images_names.insert(split.size(),name.get_copymark(),ind); > name.move_to(images_names[ind]); > split.move_to(images,ind); > } > } > } > ++position; > } else if ((std::sscanf(argument,"%c,%c", > &keep_values,&end)==2) && > (keep_values=='+' || keep_values=='-')) { > print(images,0,"Split image%s in %s mode, according to value sequence '%s'.", > selection2string(selection,images_names,true).data(), > keep_values=='-'?"discard":"keep", > argument_text+2); > unsigned int nb_values = 1; > int off = 0; > for (const char *s = argument+2; *s; ++s) if (*s==',') ++nb_values; > const CImg<T> values(nb_values,1,1,1,argument+2,true); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T>& img = check_image(images,images[ind]); > if (!img) { > if (!is_get_version) { images.remove(ind); images_names.remove(ind); off-=1; } > } else { > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> split = img.get_split(values,keep_values=='+',false); > if (is_get_version) { > if (split) { > images_names.insert(split.size(),name.copymark()); > split.move_to(images,~0U); > } > } else { > images.remove(ind); > images_names.remove(ind); > off+=(int)split.size() - 1; > if (split) { > images_names.insert(split.size(),name.get_copymark(),ind); > name.move_to(images_names[ind]); > split.move_to(images,ind); > } > } > } > } > ++position; > } else { > print(images,0,"Split image%s as a set of constant sub-vectors.", > selection2string(selection,images_names,true).data()); > int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T>& img = check_image(images,images[ind]); > if (!img) { > if (!is_get_version) { images.remove(ind); images_names.remove(ind); off-=1; } > } else { > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> split = img.get_split(false); > if (is_get_version) { > if (split) { > images_names.insert(split.size(),name.copymark()); > split.move_to(images,~0U); > } > } else { > images.remove(ind); > images_names.remove(ind); > if (split) { > off+=(int)split.size() - 1; > images_names.insert(split.size(),name.get_copymark(),ind); > name.move_to(images_names[ind]); > split.move_to(images,ind); > } > } > } > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-shared",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> st0(256), st1(256), st2(256), st3(256), st4(256); > char sep0 = 0, sep1 = 0, sep2 = 0, sep3 = 0, sep4 = 0; > float a0 = 0, a1 = 0, a2 = 0, a3 = 0, a4 = 0; > *st0 = *st1 = *st2 = *st3 = *st4 = 0; > if (std::sscanf(argument, > "%255[0-9.eE%+],%255[0-9.eE%+],%255[0-9.eE%+],%255[0-9.eE%+]," > "%255[0-9.eE%+]%c", > st0.data(),st1.data(),st2.data(),st3.data(),st4.data(),&end)==5 && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%')) && > (std::sscanf(st4,"%f%c",&a4,&end)==1 || > (std::sscanf(st4,"%f%c%c",&a4,&sep4,&end)==2 && sep4=='%'))) { > print(images,0, > "Insert shared buffer%s from points (%g%s->%g%s,%g%s,%g%s,%g%s) of image%s.", > selection.height()>1?"s":"", > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > a4,sep4=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const unsigned int > s0 = (unsigned int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > s1 = (unsigned int)cimg::round(sep1=='%'?a1*(img.width()-1)/100:a1), > y = (unsigned int)cimg::round(sep2=='%'?a2*(img.height()-1)/100:a2), > z = (unsigned int)cimg::round(sep3=='%'?a3*(img.depth()-1)/100:a3), > c = (unsigned int)cimg::round(sep4=='%'?a4*(img.spectrum()-1)/100:a4); > images.insert(img.get_shared_points(s0,s1,y,z,c),~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > ++position; > } else if (std::sscanf(argument, > "%255[0-9.eE%+],%255[0-9.eE%+],%255[0-9.eE%+]," > "%255[0-9.eE%+],%c", > st0.data(),st1.data(),st2.data(),st3.data(),&end)==4 && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%'))) { > print(images,0,"Insert shared buffer%s from lines (%g%s->%g%s,%g%s,%g%s) of image%s.", > selection.height()>1?"s":"", > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const unsigned int > s0 = (unsigned int)cimg::round(sep0=='%'?a0*(img.height()-1)/100:a0), > s1 = (unsigned int)cimg::round(sep1=='%'?a1*(img.height()-1)/100:a1), > z = (unsigned int)cimg::round(sep2=='%'?a2*(img.depth()-1)/100:a2), > c = (unsigned int)cimg::round(sep3=='%'?a3*(img.spectrum()-1)/100:a3); > images.insert(img.get_shared_rows(s0,s1,z,c),~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > ++position; > } else if (std::sscanf(argument,"%255[0-9.eE%+],%255[0-9.eE%+],%255[0-9.eE%+]%c", > st0.data(),st1.data(),st2.data(),&end)==3 && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%'))) { > print(images,0,"Insert shared buffer%s from planes (%g%s->%g%s,%g%s) of image%s.", > selection.height()>1?"s":"", > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const unsigned int > s0 = (unsigned int)cimg::round(sep0=='%'?a0*(img.depth()-1)/100:a0), > s1 = (unsigned int)cimg::round(sep1=='%'?a1*(img.depth()-1)/100:a1), > c = (unsigned int)cimg::round(sep2=='%'?a2*(img.spectrum()-1)/100:a2); > images.insert(img.get_shared_slices(s0,s1,c),~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > ++position; > } else if (std::sscanf(argument,"%255[0-9.eE%+],%255[0-9.eE%+]%c", > st0.data(),st1.data(),&end)==2 && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%'))) { > print(images,0,"Insert shared buffer%s from channels (%g%s->%g%s) of image%s.", > selection.height()>1?"s":"", > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const unsigned int > s0 = (unsigned int)cimg::round(sep0=='%'?a0*(img.spectrum()-1)/100:a0), > s1 = (unsigned int)cimg::round(sep1=='%'?a1*(img.spectrum()-1)/100:a1); > images.insert(img.get_shared_channels(s0,s1),~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > ++position; > } else { > print(images,0,"Insert shared buffer%s from image%s.", > selection.height()>1?"s":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > images.insert(img,~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-shift",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sepx = 0, sepy = 0, sepz = 0, sepc = 0; > float dx = 0, dy = 0, dz = 0, dc = 0; > unsigned int boundary = 0; > *argx = *argy = *argz = *argc = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > argx,argy,argz,argc,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%u%c", > argx,argy,argz,argc,&boundary,&end)==5) && > (std::sscanf(argx,"%f%c",&dx,&end)==1 || > (std::sscanf(argx,"%f%c%c",&dx,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&dy,&end)==1 || > (std::sscanf(argy,"%f%c%c",&dy,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&dz,&end)==1 || > (std::sscanf(argz,"%f%c%c",&dz,&sepz,&end)==2 && sepz=='%')) && > (!*argc || > std::sscanf(argc,"%f%c",&dc,&end)==1 || > (std::sscanf(argc,"%f%c%c",&dc,&sepc,&end)==2 && sepc=='%')) && > boundary<=2) { > print(images,0, > "Shift image%s by displacement vector (%g%s,%g%s,%g%s,%g%s) and " > "%s boundary conditions.", > selection2string(selection,images_names,true).data(), > dx,sepx=='%'?"%":"", > dy,sepy=='%'?"%":"", > dz,sepz=='%'?"%":"", > dc,sepc=='%'?"%":"", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > ndx = (int)cimg::round(sepx=='%'?dx*img.width()/100:dx), > ndy = (int)cimg::round(sepy=='%'?dy*img.height()/100:dy), > ndz = (int)cimg::round(sepz=='%'?dz*img.depth()/100:dz), > ndc = (int)cimg::round(sepc=='%'?dc*img.spectrum()/100:dc); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_shift(ndx,ndy,ndz,ndc,boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].shift(ndx,ndy,ndz,ndc,boundary); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"shift","Command '-%s': Invalid argument '%s'.","shift",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-slices",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > float value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c]",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-slices",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%'))) { > if (ind0) { value0 = images[*ind0].depth() - 1.0f; sep0 = 0; } > print(images,0,"Keep slice %g%s of image%s.", > value0,sep0=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.depth()-1)/100:value0); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_slice(nvalue0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.slice(nvalue0); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-slices",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%')) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep0,&end)==2 && > sep0==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-slices",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argy,"%f%c",&value1,&end)==1 || > (std::sscanf(argy,"%f%c%c",&value1,&sep1,&end)==2 && sep1=='%'))) { > if (ind0) { value0 = images[*ind0].depth() - 1.0f; sep0 = 0; } > if (ind1) { value1 = images[*ind1].depth() - 1.0f; sep1 = 0; } > print(images,0,"Keep slices %g%s..%g%s of image%s.", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.depth()-1)/100:value0), > nvalue1 = (int)cimg::round(sep1=='%'?value1*(img.depth()-1)/100:value1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_slices(nvalue0,nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.slices(nvalue0,nvalue1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"slices","Command '-%s': Invalid argument '%s'.","slices",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-srand",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double value = 0; > if (std::sscanf(argument,"%lf%c", > &value,&end)==1) { > value = cimg::round(value); > print(images,0,"Set random generator seed to %u.", > (unsigned int)value); > cimg::srand((unsigned int)value); > ++position; > } else { > print(images,0,"Set random generator seed to random."); > cimg::srand(); > } > continue; > } > > > > > if (!std::strcmp("-sub",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Subtract %g%s to image%s" ".",value,ssep,selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator-=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator-=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-sub", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Subtract image [%d] to image%s" ".",ind[0],selection2string(selection,images_names,true).data()); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator-=(img0); } else { images_names[selection[l]].mark(); img.operator-=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Subtract expression %s to image%s" ".",argument_text,selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator-=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator-=((const char*)formula); } } ++position; } else { print(images,0,"Subtract image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator-=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator-=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 10196 "gmic.cpp" > ; > > if (!std::strcmp("-sqrt",command)) { print(images,0,"Compute pointwise square root of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sqrt(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sqrt(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sqr",command)) { print(images,0,"Compute pointwise square function of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sqr(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sqr(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sign",command)) { print(images,0,"Compute pointwise sign of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sign(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sign(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sin",command)) { print(images,0,"Compute pointwise sine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sin(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sin(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sort",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char order = '+', axis = 0; > if ((std::sscanf(argument,"%c%c",&order,&end)==1 || > (std::sscanf(argument,"%c,%c%c",&order,&axis,&end)==2 && > (axis=='x' || axis=='y' || axis=='z' || axis=='c'))) && > (order=='+' || order=='-')) ++position; > else { order = '+'; axis = 0; } > if (axis) print(images,0,"Sort values of image%s in %s order, according to axis '%c'.", > selection2string(selection,images_names,true).data(),order=='+'?"ascending":"descending",axis); > else print(images,0,"Sort values of image%s in %s order.", > selection2string(selection,images_names,true).data(),order=='+'?"ascending":"descending"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sort(order=='+',axis); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sort(order=='+',axis); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-solve",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-solve",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Solve linear system AX = B, with B-vector%s and A-matrix [%d].", > selection2string(selection,images_names,true).data(),*ind); > const CImg<T> A = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_solve(A); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].solve(A); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"solve","Command '-%s': Invalid argument '%s'.","solve",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-sub3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float tx = 0, ty = 0, tz = 0; > if (std::sscanf(argument,"%f%c", > &tx,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &tx,&ty,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &tx,&ty,&tz,&end)==3) { > print(images,0,"Shift 3d object%s with displacement -(%g,%g,%g).", > selection2string(selection,images_names,true).data(), > tx,ty,tz); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_shift_CImg3d(-tx,-ty,-tz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.shift_CImg3d(-tx,-ty,-tz); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-sub3d': Invalid 3d object [%d], in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"sub3d","Command '-%s': Invalid argument '%s'.","sub3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-sharpen",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float amplitude = 0, edge = -1, alpha = 0, sigma = 0; > if ((std::sscanf(argument,"%f%c", > &litude,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &litude,&edge,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &litude,&edge,&alpha,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &litude,&edge,&alpha,&sigma,&end)==4) && > amplitude>=0 && (edge==-1 || edge>=0)) { > if (edge>=0) > print(images,0,"Sharpen image%s with shock filters, amplitude %g, edge %g, " > "alpha %g and sigma %g.", > selection2string(selection,images_names,true).data(), > amplitude, > edge, > alpha, > sigma); > else > print(images,0,"Sharpen image%s with inverse diffusion and amplitude %g.", > selection2string(selection,images_names,true).data(), > amplitude); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sharpen(amplitude,(bool)(edge>=0), edge,alpha,sigma); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sharpen(amplitude,(bool)(edge>=0), edge,alpha,sigma); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"sharpen","Command '-%s': Invalid argument '%s'.","sharpen",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-smooth",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float amplitude = 0, sharpness = 0.7f, anisotropy = 0.3f, alpha = 0.6f, > sigma = 1.1f, dl =0.8f, da = 30.0f, gauss_prec = 2.0f; > unsigned int interpolation = 0, is_fast_approximation = 1; > CImg<unsigned int> ind; > char sep = 0; > if ((std::sscanf(argument,"%f%c", > &litude,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &litude,&sharpness,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&end)==4 || > std::sscanf(argument,"%f,%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&end)==5 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&end)==6 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&da,&end)==7 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&da,&gauss_prec, > &end)==8 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f,%f,%u%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&da,&gauss_prec, > &interpolation,&end)==9 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f,%f,%u,%u%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&da,&gauss_prec, > &interpolation,&is_fast_approximation,&end)==10) && > amplitude>=0 && sharpness>=0 && anisotropy>=0 && anisotropy<=1 && dl>0 && > da>=0 && gauss_prec>0 && interpolation<=2 && is_fast_approximation<=1) { > if (da>0) > print(images,0,"Smooth image%s anisotropically, with amplitude %g, sharpness %g, " > "anisotropy %g, alpha %g, sigma %g, dl %g, da %g, precision %g, " > "%s interpolation and fast approximation %s.", > selection2string(selection,images_names,true).data(), > amplitude, > sharpness, > anisotropy, > alpha, > sigma, > dl, > da, > gauss_prec, > interpolation==0?"nearest-neighbor":interpolation==1?"linear":"runge-kutta", > is_fast_approximation?"enabled":"disabled"); > else > print(images,0,"Smooth image%s anisotropically, with %d iterations, sharpness %g, " > "anisotropy %g, alpha %g, sigma %g and dt %g.", > selection2string(selection,images_names,true).data(), > (int)amplitude, > sharpness, > anisotropy, > alpha, > sigma, > dl); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_anisotropic(amplitude,sharpness,anisotropy, alpha,sigma,dl,da,gauss_prec, interpolation, (bool)is_fast_approximation); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_anisotropic(amplitude,sharpness,anisotropy, alpha,sigma,dl,da,gauss_prec, interpolation, (bool)is_fast_approximation); images_names[posi].mark(); } } > > > ; > } > } else if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&litude,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f%c", > indices,&litude,&dl,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f%c", > indices,&litude,&dl,&da,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f%c", > indices,&litude,&dl,&da,&gauss_prec,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%u%c", > indices,&litude,&dl,&da,&gauss_prec, > &interpolation,&end)==6 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%u,%u%c", > indices,&litude,&dl,&da,&gauss_prec,&interpolation, > &is_fast_approximation,&end)==7) && > (ind=selection2cimg(indices,images.size(),images_names,"-smooth",true, > false,CImg<char>::empty())).height()==1 && > amplitude>=0 && dl>0 && da>=0 && gauss_prec>0 && interpolation<=2 && > is_fast_approximation<=1) { > const CImg<T> tensors = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > if (da>0) > print(images,0, > "Smooth image%s anisotropically, with tensor field [%u], amplitude %g, " > "dl %g, da %g, precision %g, %s interpolation and fast approximation %s.", > selection2string(selection,images_names,true).data(), > *ind, > amplitude, > dl, > da, > gauss_prec, > interpolation==0?"nearest-neighbor":interpolation==1?"linear":"runge-kutta", > is_fast_approximation?"enabled":"disabled"); > else > print(images,0, > "Smooth image%s anisotropically, with tensor field [%u], %d iterations " > "and dt %g.", > selection2string(selection,images_names,true).data(), > *ind, > (int)amplitude, > dl); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_anisotropic(tensors,amplitude,dl,da, gauss_prec,interpolation, is_fast_approximation); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_anisotropic(tensors,amplitude,dl,da, gauss_prec,interpolation, is_fast_approximation); images_names[posi].mark(); } } > > ; > } > } else gmic::error(images,0,"smooth","Command '-%s': Invalid argument '%s'.","smooth",argument_text); > is_released = false; ++position; continue; > } > > > > if (!std::strcmp("-split3d",command)) { > bool keep_shared = true; > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if ((*argument=='0' || *argument=='1') && !argument[1]) { > keep_shared = *argument=='1'; > ++position; > } > print(images,0,"Split 3d object%s into 6 property vectors%s.", > selection2string(selection,images_names,true).data(), > keep_shared?"":" and clone shared data"); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T> &img = check_image(images,images[ind]); > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> split; > try { > if (!keep_shared) { > CImg<T> vertices; > CImgList<unsigned int> primitives; > CImgList<T> colors, opacities; > img.get_CImg3dtoobject3d(primitives,colors,opacities,false).move_to(vertices); > CImgList<T> _colors(colors,false), _opacities(opacities,false); > _colors.move_to(colors.assign()); > _opacities.move_to(opacities.assign()); > vertices.object3dtoCImg3d(primitives,colors,opacities,false).get_split_CImg3d(). > move_to(split); > } else img.get_split_CImg3d().move_to(split); > } catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-split3d': Invalid 3d object [%d], in selected image%s (%s).", > ind-off,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > if (is_get_version) { > images_names.insert(split.size(),name.copymark()); > split.move_to(images,~0U); > } else { > images.remove(ind); > images_names.remove(ind); > off+=split.size() - 1; > images_names.insert(split.size(),name.get_copymark(),ind); > name.move_to(images_names[ind]); > split.move_to(images,ind); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-svd",command)) { > print(images,0,"Compute SVD decomposition%s of matri%s%s.", > selection.height()>1?"s":"",selection.height()>1?"ce":"x",selection2string(selection,images_names,true).data()); > CImg<float> U, S, V; > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T>& img = check_image(images,images[ind]); > CImg<char> name = images_names[ind].get_mark(); > img.SVD(U,S,V,true,100); > if (is_get_version) { > images_names.insert(2,name.copymark()); > name.move_to(images_names); > U.move_to(images); > S.move_to(images); > V.move_to(images); > } else { > images_names.insert(2,name.get_copymark(),ind+1); > name.move_to(images_names[ind]); > U.move_to(images[ind].assign()); > images.insert(S,ind+1); > images.insert(V,ind+2); > off+=2; > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-sphere3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float radius = 100, recursions = 3; > if ((std::sscanf(argument,"%f%c", > &radius,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &radius,&recursions,&end)==2) && > recursions>=0) { > recursions = cimg::round(recursions); > print(images,0,"Input 3d sphere, with radius %g and %g recursions.", > radius, > recursions); > CImgList<unsigned int> primitives; > CImg<float> vertices = CImg<T>::sphere3d(primitives,radius,(unsigned int)recursions); > vertices.object3dtoCImg3d(primitives,false).move_to(images); > CImg<char>::string("[3d sphere]").move_to(images_names); > } else gmic::error(images,0,"sphere3d","Command '-%s': Invalid argument '%s'.","sphere3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-specl3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 0.15f; > if (std::sscanf(argument,"%f%c", > &value,&end)==1 && value>=0) ++position; > else value = 0.15f; > specular_lightness3d = value; > print(images,0,"Set lightness of 3d specular light to %g.", > specular_lightness3d); > continue; > } > > if (!std::strcmp("-specs3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 0.8f; > if (std::sscanf(argument,"%f%c", > &value,&end)==1 && value>=0) ++position; > else value = 0.8f; > specular_shininess3d = value; > print(images,0,"Set shininess of 3d specular light to %g.", > specular_shininess3d); > continue; > } > > > if (!std::strcmp("-sinc",command)) { print(images,0,"Compute pointwise sinc function of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sinc(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sinc(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sinh",command)) { print(images,0,"Compute pointwise hyperpolic sine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sinh(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sinh(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-srgb2rgb",command)) { print(images,0,"Convert image%s from sRGB to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sRGBtoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sRGBtoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-streamline3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int interp = 2, is_backward = 0, is_oriented_only = 0; > float x = 0, y = 0, z = 0, L = 100, dl = 0.1f; > char sepx = 0, sepy = 0, sepz = 0; > *formula = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > argx,argy,argz,&L,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f%c", > argx,argy,argz,&L,&dl,&end)==5 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f,%u%c", > argx,argy,argz,&L,&dl,&interp,&end)==6 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f,%u," > "%u%c", > argx,argy,argz,&L,&dl,&interp,&is_backward,&end)==7 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f,%u," > "%u,%u%c", > argx,argy,argz,&L,&dl,&interp,&is_backward, > &is_oriented_only,&end)==8) && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%')) && > L>=0 && dl>0 && interp<4 && is_backward<=1 && is_oriented_only<=1) { > print(images,0,"Extract 3d streamline from image%s, starting from (%g%s,%g%s,%g%s).", > selection2string(selection,images_names,true).data(), > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > const float > nx = cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = cimg::round(sepz=='%'?z*(img.depth()-1)/100:z); > CImg<T> vertices = img.get_streamline(nx,ny,nz,L,dl,interp, > (bool)is_backward,(bool)is_oriented_only); > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > if (vertices.width()>1) { > primitives.assign(vertices.width()-1,1,2); > for (int l = 0; l<(int)(primitives)._width; ++l) { primitives(l,0) = l; primitives(l,1) = l+1; } > colors.assign(primitives.size(),1,3,1,1,200); > } else { > vertices.assign(); > warn(images,0, > "Command '-streamline3d': Empty streamline starting from " > "(%g%s,%g%s,%g%s) in image [%u].", > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > ind); > } > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"'%4095[^']',%f,%f,%f%c", > formula,&x,&y,&z,&end)==4 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f%c", > formula,&x,&y,&z,&L,&end)==5 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f%c", > formula,&x,&y,&z,&L,&dl,&end)==6 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%u%c", > formula,&x,&y,&z,&L,&dl,&interp,&end)==7 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%u,%u%c", > formula,&x,&y,&z,&L,&dl,&interp,&is_backward,&end)==8 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%u,%u,%u%c", > formula,&x,&y,&z,&L,&dl,&interp,&is_backward, > &is_oriented_only,&end)==9) && > dl>0 && interp<4) { > gmic_strreplace(formula); > print(images,0,"Extract 3d streamline from formula '%s', starting from (%g,%g,%g).", > formula, > x,y,z); > CImg<T> vertices = CImg<T>::streamline((const char *)formula,x,y,z,L,dl,interp, > (bool)is_backward,(bool)is_oriented_only); > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > if (vertices.width()>1) { > primitives.assign(vertices.width()-1,1,2); > for (int l = 0; l<(int)(primitives)._width; ++l) { primitives(l,0) = l; primitives(l,1) = l+1; } > colors.assign(primitives.size(),1,3,1,1,200); > } else { > vertices.assign(); > warn(images,0, > "Command '-streamline3d': Empty streamline starting from (%g,%g,%g) " > "in expression '%s'.", > x,y,z,formula); > } > vertices.object3dtoCImg3d(primitives,colors,false).move_to(images); > snprintf(title,_title.size(),"[3d streamline of '%s' at (%g,%g,%g)]", > formula,x,y,z); > { if (_title.size()>=5 && title[_title.size()-2]) title[_title.size()-4] = title[_title.size()-3] = title[_title.size()-2] = '.'; }; > CImg<char>::string(title).move_to(images_names); > } else gmic::error(images,0,"streamline3d","Command '-%s': Invalid argument '%s'.","streamline3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-structuretensors",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int scheme = 0; > if (std::sscanf(argument,"%u%c",&scheme,&end)==1 && > scheme<=2) ++position; > else scheme = 2; > print(images,0,"Compute structure tensor field of image%s, with %s scheme.", > selection2string(selection,images_names,true).data(), > scheme==0?"centered":scheme==1?"forward-backward1":"forward-backward2"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_structure_tensors(scheme); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].structure_tensors(scheme); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-select",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int feature_type = 0, X=~0U, Y=~0U, Z=~0U; > bool is_xyz = false; > if ((std::sscanf(argument,"%u%c",&feature_type,&end)==1 || > (is_xyz=std::sscanf(argument,"%u,%u,%u,%u%c",&feature_type,&X,&Y,&Z,&end)==4)) && > feature_type<=3) { > > print(images,0,"Select %s in image%s in interactive mode", > feature_type==0?"point":feature_type==1?"segment":feature_type==2?"rectangle": > "ellipse",selection2string(selection,images_names,true).data()); > if (verbosity>=0 || is_debug) { > if (is_xyz) std::fprintf(cimg::output(),", from point (%u,%u,%u)",X,Y,Z); > std::fprintf(cimg::output()," (skipped, no display support)."); > std::fflush(cimg::output()); > } ># 10738 "gmic.cpp" > } else gmic::error(images,0,"select","Command '-%s': Invalid argument '%s'.","select",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='t') { > > > if (!std::strcmp("-type",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; ># 10766 "gmic.cpp" > if (!std::strcmp(argument,"float")) { if (std::strcmp("float",cimg::type<T>::string())) { if (!is_default_type) { --position; break; } else { print(images,0,"Set pixel data type to '%s'.","float"); CImgList<float> cast_images; images.move_to(cast_images); is_default_type = false; is_released = false; _parse_float(commands_line,++position,cast_images,images_names,variables_sizes); is_default_type = true; cast_images.move_to(images); } } else { print(images,0,"Set pixel data type to '%s'.","float"); ++position; } continue; }; > gmic::error(images,0,"type","Command '-%s': Invalid argument '%s'.","type",argument_text); > } > > > > > if (!std::strcmp("-threshold",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int is_soft = 0; > double value = 0; > char sep = 0; > if ((std::sscanf(argument,"%lf%c", > &value,&end)==1 || > (std::sscanf(argument,"%lf%c%c", > &value,&sep,&end)==2 && sep=='%') || > std::sscanf(argument,"%lf,%u%c", > &value,&is_soft,&end)==2 || > (std::sscanf(argument,"%lf%c,%u%c", > &value,&sep,&is_soft,&end)==3 && sep=='%')) && > is_soft<=1) { > print(images,0,"%s-threshold image%s by %g%s.", > is_soft?"Soft":"Hard", > selection2string(selection,images_names,true).data(), > value,sep=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > double nvalue = value; > if (sep=='%' && img) { > double vmin = 0, vmax = (double)img.max_min(vmin); > nvalue = vmin + (vmax-vmin)*value/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_threshold((T)nvalue,(bool)is_soft); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.threshold((T)nvalue,(bool)is_soft); images_names[posi].mark(); } }; > } > ++position; > } else { > > print(images,0, > "Threshold image%s in interactive mode (skipped, no display support).", > selection2string(selection,images_names,true).data()); ># 10878 "gmic.cpp" > } > is_released = false; continue; > } > > > if (!std::strcmp("-tan",command)) { print(images,0,"Compute pointwise tangent of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_tan(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].tan(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-text",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> text(4096); > *argx = *argy = *text = *color = 0; > float x = 0, y = 0, opacity = 1, siz = 13; > char sepx = 0, sepy = 0; > if ((std::sscanf(argument,"%4095[^,]%c", > text.data(),&end)==1 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-]%c", > text.data(),argx,&end)==2 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > text.data(),argx,argy,&end)==3 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > text.data(),argx,argy,&siz,&end)==4 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f%c", > text.data(),argx,argy,&siz,&opacity,&end)==5 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f," > "%4095[0-9.eE,+-]%c", > text.data(),argx,argy,&siz,&opacity,color,&end)==6) && > (!*argx || > std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > siz>=0) { > siz = cimg::round(siz); > gmic_strreplace(text); > print(images,0,"Draw text '%s' at position (%g%s,%g%s) on image%s, with font " > "height %g, opacity %g and color (%s).", > text.data(), > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > selection2string(selection,images_names,true).data(), > siz, > opacity, > *color?color:"default"); > cimg::strunescape(text); > unsigned int nb_cols = 1; > for (const char *s = color; *s; ++s) if (*s==',') ++nb_cols; > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> > &img = images[selection[l]], > col(cimg::max(img.spectrum(),(int)nb_cols),1,1,1,0); > col.fill(color,true); > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_gmic_draw_text(nx,ny,text,col,0,opacity,(unsigned int)siz,nb_cols); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.gmic_draw_text(nx,ny,text,col,0,opacity,(unsigned int)siz,nb_cols); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"text","Command '-%s': Invalid argument '%s'.","text",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-texturize3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind_texture, ind_coords; > char sep = 0; > *argx = *argy = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > argx,&sep,&end)==2 && sep==']') || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],[%255[a-zA-Z0-9_.%+-]%c%c", > argx,argy,&sep,&end)==3 && sep==']')) && > (ind_texture=selection2cimg(argx,images.size(),images_names,"-texturize3d",true, > false,CImg<char>::empty())).height()==1 && > (!*argy || (ind_coords=selection2cimg(argy,images.size(),images_names, > "-texturize3d",true, > false,CImg<char>::empty())).height()==1)) { > if (ind_coords) > print(images,0, > "Texturize 3d object%s with texture [%u] and texture coordinates [%u].", > selection2string(selection,images_names,true).data(),*ind_texture,*ind_coords); > else > print(images,0,"Texturize 3d object%s with texture [%u].", > selection2string(selection,images_names,true).data(),*ind_texture); > const CImg<T> > texture = check_image(images,_gmic_image_arg(*ind_texture,selection)?images[*ind_texture]: images[*ind_texture].get_shared()), > coords = ind_coords?check_image(images,_gmic_image_arg(*ind_coords,selection)?images[*ind_coords]: images[*ind_coords].get_shared()):CImg<T>(); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_texturize_CImg3d(texture,coords); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.texturize_CImg3d(texture,coords); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-texturize3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"texturize3d","Command '-%s': Invalid argument '%s'.","texturize3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-trisolve",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-trisolve",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Solve tridiagonal system AX = B, with B-vector%s and tridiagonal " > "A-matrix [%d].", > selection2string(selection,images_names,true).data(),*ind); > const CImg<T> A = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_solve_tridiagonal(A); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].solve_tridiagonal(A); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"trisolve","Command '-%s': Invalid argument '%s'.","trisolve",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-tanh",command)) { print(images,0,"Compute pointwise hyperbolic tangent of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_tanh(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].tanh(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > } > > > > > else if (command1=='u') { > > > if (!std::strcmp("-unroll",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char axis = 'y'; > if ((*argument=='x' || *argument=='y' || > *argument=='z' || *argument=='c') && !argument[1]) { > axis = *argument; > ++position; > } > else axis = 'y'; > print(images,0,"Unroll image%s along the '%c'-axis.", > selection2string(selection,images_names,true).data(), > axis); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_unroll(axis); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].unroll(axis); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-uncommand",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (argument[0]=='*' && !argument[1]) { > unsigned int nb_commands = 0; > for (unsigned int i = 0; i<256; ++i) { > nb_commands+=commands[i].size(); > commands[i].assign(); > commands_names[i].assign(); > commands_has_arguments[i].assign(); > } > print(images,0,"Discard definitions of all custom commmands (%u command%s discarded).", > nb_commands,nb_commands>1?"s":""); > } else { > CImgList<char> command_list = CImg<char>::string(argument).get_split(',',false,false); > print(images,0,"Discard last definition of custom command%s '%s'", > command_list.width()>1?"s":"", > argument_text); > unsigned int nb_removed = 0; > for (int l = 0; l<(int)(command_list)._width; ++l) { > CImg<char> &arg_command = command_list[l]; > arg_command.resize(1,arg_command.height()+1,1,1,0); > gmic_strreplace(arg_command); > if (*arg_command) { > const int ind = gmic_hashcode(arg_command,false); > for (int l = 0; l<(int)(commands_names[ind])._width; ++l) > if (!std::strcmp(commands_names[ind][l],arg_command)) { > commands_names[ind].remove(l); > commands[ind].remove(l); > commands_has_arguments[ind].remove(l); > ++nb_removed; break; > } > } > } > if (verbosity>=0 || is_debug) { > unsigned int siz = 0; > for (unsigned int l = 0; l<256; ++l) siz+=commands[l].size(); > std::fprintf(cimg::output()," (%u found, %u command%s left).", > nb_removed,siz,siz>1?"s":""); > std::fflush(cimg::output()); > } > } > ++position; continue; > } > > } > > > > > else if (command1=='v') { > > > > if (!std::strcmp("-verbose",item)) { > if (*argument=='-' && !argument[1]) > print(images,0,"Decrement verbosity level (set to %d).", > verbosity); > else if (*argument=='+' && !argument[1]) { > if (verbosity>0) print(images,0,"Increment verbosity level (set to %d).", > verbosity); > } else if (verbosity>=0 && old_verbosity>=0) > print(images,0,"Set verbosity level to %d.", > verbosity); > if (is_verbose_argument) ++position; > continue; > } > > > if (!std::strcmp("-vanvliet",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, order = 0; > char sep = 0, axis = 0; > float sigma = 0; > if ((std::sscanf(argument,"%f,%u,%c%c",&sigma,&order,&axis,&end)==3 || > (std::sscanf(argument,"%f%c,%u,%c%c",&sigma,&sep,&order,&axis,&end)==4 && > sep=='%') || > std::sscanf(argument,"%f,%u,%c,%u%c",&sigma,&order,&axis,&boundary,&end)==4 || > (std::sscanf(argument,"%f%c,%u,%c,%u%c", > &sigma,&sep,&order,&axis,&boundary,&end)==5 && sep=='%')) && > sigma>=0 && order<=3 && (axis=='x' || axis=='y' || axis=='z' || axis=='c') && > boundary<=1) { > print(images,0,"Apply Vanvliet filter on image%s, with standard " > "deviation %g%s, order %d, axis '%c' and %s boundary conditions.", > selection2string(selection,images_names,true).data(), > sigma,sep=='%'?"%":"", > order,axis, > boundary?"neumann":"dirichlet"); > if (sep=='%') sigma = -sigma; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_vanvliet(sigma,order,axis,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].vanvliet(sigma,order,axis,(bool)boundary); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"vanvliet","Command '-%s': Invalid argument '%s'.","vanvliet",argument_text); > is_released = false; ++position; continue; > } > > } > > > > > else if (command1=='w') { > > > if (!std::strcmp("-while",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='d') > error(images,0,0, > "Command '-while': Not associated to a '-do' command within the same scope."); > float _is_cond = 0; > bool is_filename = false; > if (std::sscanf(argument,"%f%c",&_is_cond,&end)!=1) { > is_filename = true; > CImg<char> arg_while(argument,std::strlen(argument)+1); > gmic_strreplace(arg_while); > _is_cond = (float)gmic_check_filename(arg_while); > } > const bool is_cond = (bool)_is_cond; > if (verbosity>0 || is_debug) print(images,0,"Reach '-while' command -> %s '%s' %s.", > is_filename?"file":"boolean", > argument_text, > is_filename?(is_cond?"exists": > "does not exist"): > (is_cond?"is true":"is false")); > if (is_cond) { position = dowhiles.back()(0); continue; } > else { > if (verbosity>0 || is_debug) print(images,0,"End 'do..while' block."); > dowhiles.remove(); > scope.remove(); > } > ++position; continue; > } > > > if (!std::strcmp("-warn",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> str(argument,std::strlen(argument)+1); > cimg::strunescape(str); > if (is_restriction) warn(images,&selection,"%s",str.data()); > else warn(images,0,"%s",str.data()); > ++position; continue; > } > > > > > unsigned int wind = 0; > if ((!std::strcmp("-window",command) || > std::sscanf(command,"-window%u%c",&wind,&end)==1 || > std::sscanf(command,"-w%u%c",&wind,&end)==1) && > wind<10 && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > int norm = -1, fullscreen = -1; > float dimw = -1, dimh = -1, posx = -1, posy = -1; > char sepw = 0, seph = 0, sepx = 0, sepy = 0; > *argx = *argy = *argz = *argc = *title = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%d%c", > argx,argy,&norm,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%d%c", > argx,argy,&norm,&fullscreen,&end)==4 || > std::sscanf(argument, > "%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%d,%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > argx,argy,&norm,&fullscreen,argz,argc,&end)==6 || > std::sscanf(argument, > "%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%d,%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%255[^\n]", > argx,argy,&norm,&fullscreen,argz,argc,title)==7 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%d,%255[^\n]", > &(*argx=*argz=*argc=0),argy,&norm,&fullscreen,title)==5 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%255[^\n]", > argx,argy,&(norm=fullscreen=-1),title)==4 || > (norm=fullscreen=-1,std::sscanf(argument, > "%255[0-9.eE%+-],%255[0-9.eE%+-],%255[^\n]", > argx,argy,title))==3) && > (std::sscanf(argx,"%f%c",&dimw,&end)==1 || > (std::sscanf(argx,"%f%c%c",&dimw,&sepw,&end)==2 && sepw=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&dimh,&end)==1 || > (std::sscanf(argy,"%f%c%c",&dimh,&seph,&end)==2 && seph=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&posx,&end)==1 || > (std::sscanf(argz,"%f%c%c",&posx,&sepx,&end)==2 && sepx=='%')) && > (!*argc || > std::sscanf(argc,"%f%c",&posy,&end)==1 || > (std::sscanf(argc,"%f%c%c",&posy,&sepy,&end)==2 && sepy=='%')) && > (dimw>=0 || dimw==-1) && > (dimh>=0 || dimh==-1) && > norm>=-1 && norm<=3) ++position; > else { > dimw = dimh = -1; > norm = fullscreen = -1; > posx = posy = -1; > sepw = seph = 0; > } > if (dimh==0) dimw = 0; > gmic_strreplace(title); > cimg::strunescape(title); > > > unsigned int optw = 0, opth = 0; > CImgList<T> subimages; > if (dimw && dimh) for (int l = 0; l<(int)((selection)._height); ++l) { > const CImg<T>& img = check_image(images,images[selection[l]]); > if (img) { > subimages.insert(img,~0U,true); > optw+=img.width() + (img.depth()>1?img.depth():0); > if (img.height()>(int)opth) opth = img.height() + (img.depth()>1?img.depth():0); > } > } > optw = optw?optw:sepw=='%'?CImgDisplay::screen_width():256; > opth = opth?opth:seph=='%'?CImgDisplay::screen_height():256; > dimw = dimw<0?-1:cimg::round(sepw=='%'?optw*dimw/100:dimw); > dimh = dimh<0?-1:cimg::round(seph=='%'?opth*dimh/100:dimh); > > > print(images,0, > "Display image%s in instant window [%d] (skipped, no display support).", > selection2string(selection,images_names,true).data(), > wind); ># 11345 "gmic.cpp" > is_released = true; continue; > } > > > if (!std::strcmp("-warp",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int interpolation = 1, is_relative = 0, boundary = 1; > CImg<unsigned int> ind; > float nb_frames = 1; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']')|| > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&is_relative,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&is_relative,&interpolation,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%u%c", > indices,&is_relative,&interpolation,&boundary,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%u,%f%c", > indices,&is_relative,&interpolation,&boundary,&nb_frames,&end)==5) && > (ind=selection2cimg(indices,images.size(),images_names,"-warp",true, > false,CImg<char>::empty())).height()==1 && > is_relative<=1 && interpolation<=2 && boundary<=2 && nb_frames>=0.5) { > const CImg<T> warping_field = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > nb_frames = cimg::round(nb_frames); > if (nb_frames==1) { > print(images,0,"Warp image%s with %s displacement field [%u], %s interpolation, " > "%s boundary conditions.", > selection2string(selection,images_names,true).data(), > is_relative?"relative":"absolute",*ind, > interpolation==2?"cubic":interpolation==1?"linear":"nearest-neighbor", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_warp(warping_field,(bool)is_relative, interpolation,boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].warp(warping_field,(bool)is_relative, interpolation,boundary); images_names[posi].mark(); } } > ; > } > } else { > print(images,0,"Warp image%s with %s displacement field [%u], %s interpolation, " > "%s boundary conditions and %d frames.", > selection2string(selection,images_names,true).data(), > is_relative?"relative":"absolute",*ind, > interpolation==2?"cubic":interpolation==1?"linear":"nearest-neighbor", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic", > (int)nb_frames); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int _ind = selection[l] + off; > CImg<T>& img = check_image(images,images[_ind]); > CImg<char> name = images_names[_ind].get_mark(); > CImgList<T> frames((int)nb_frames); > for (int t = 0; t<(int)(frames)._width; ++t) > frames[t] = img.get_warp(warping_field*((t+1.0f)/nb_frames),(bool)is_relative, > interpolation,boundary); > if (is_get_version) { > images_names.insert((int)nb_frames,name.copymark()); > frames.move_to(images,~0U); > } else { > off+=(int)nb_frames - 1; > images_names.insert((int)nb_frames - 1,name.get_copymark(),_ind); > images.remove(_ind); frames.move_to(images,_ind); > } > } > } > } else gmic::error(images,0,"warp","Command '-%s': Invalid argument '%s'.","warp",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-watershed",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > unsigned int is_filled = 1; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&is_filled,&end)==2) && > (ind=selection2cimg(indices,images.size(),images_names,"-watershed",true, > false,CImg<char>::empty())).height()==1 && > is_filled<=1) { > print(images,0,"Compute watershed transform of image%s with priority map [%u] and " > "%sfilling.", > selection2string(selection,images_names,true).data(),*ind,is_filled?"":"no "); > const CImg<T> priority = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_watershed(priority,(bool)is_filled); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].watershed(priority,(bool)is_filled); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"watershed","Command '-%s': Invalid argument '%s'.","watershed",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-wait",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (!is_restriction) > CImg<unsigned int>::vector(0,1,2,3,4,5,6,7,8,9).move_to(selection); > float delay = 0; > if (std::sscanf(argument,"%f%c", > &delay,&end)==1) ++position; > else delay = 0; > delay = cimg::round(delay); > > if (!delay) > print(images,0, > "Wait for user events on instant window%s (skipped, no display support).", > selection2string(selection,images_names,true).data()); > else { > print(images,0, > "%s for %g milliseconds according to instant window%s.", > delay<0?"Sleep":"Wait",delay, > selection2string(selection,images_names,true).data()); > if (delay<0) cimg::sleep((unsigned int)-delay); > else cimg::wait((unsigned int)delay); > } ># 11513 "gmic.cpp" > continue; > } > > > } > > > > > else if (command1=='x') { > > > > > if (!std::strcmp("-xor",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise XOR of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator^=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator^=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-xor", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise XOR of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator^=(img0); } else { images_names[selection[l]].mark(); img.operator^=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise XOR of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator^=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator^=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise XOR of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator^=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator^=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 11536 "gmic.cpp" > ; > > > } > > > > > > > if (!std::strcmp("-if",item) || (!std::strcmp("-elif",item) && check_elif)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > check_elif = false; > float _is_cond = 0; > bool is_filename = false; > if (std::sscanf(argument,"%f%c",&_is_cond,&end)!=1) { > is_filename = true; > CImg<char> arg_if(argument,std::strlen(argument)+1); > gmic_strreplace(arg_if); > _is_cond = (float)gmic_check_filename(arg_if); > } > const bool is_cond = (bool)_is_cond; > if (item[1]=='i') { > CImg<char>::string("*if").move_to(scope); > if (verbosity>0 || is_debug) print(images,0,"Start '-if..-endif' block -> %s '%s' %s.", > is_filename?"file":"boolean", > argument_text, > is_filename?(is_cond?"exists":"does not exist"): > (is_cond?"is true":"is false")); > } else if (verbosity>0 || is_debug) print(images,0,"Reach '-elif' block -> %s '%s' %s.", > is_filename?"file":"boolean", > argument_text, > is_filename?(is_cond?"exists": > "does not exist"): > (is_cond?"is true":"is false")); > if (!is_cond) { > for (int nb_ifs = 1; nb_ifs && position<commands_line.size(); ++position) { > const char *const it = commands_line[position].data(); > if (!std::strcmp("-if",it)) ++nb_ifs; > else if (!std::strcmp("-endif",it)) { --nb_ifs; if (!nb_ifs) --position; } > else if (nb_ifs==1) { > if (!std::strcmp("-else",it)) --nb_ifs; > else if (!std::strcmp("-elif",it)) { --nb_ifs; check_elif = true; --position;} > } > } > continue; > } > ++position; continue; > } > > > bool is_continue = false; > if (!std::strcmp("-break",item) || > (!std::strcmp("-continue",item) && (is_continue=true)==true)) { > const char > *const com = is_continue?"continue":"break", > *const Com = is_continue?"Continue":"Break"; > unsigned int scope_repeat = 0, scope_do = 0, scope_local = 0; > for (unsigned int l = scope.size() - 1; l; --l) { > const char *const s = scope[l].data(); > if (s[0]=='*' && s[1]=='r') { scope_repeat = l; break; } > else if (s[0]=='*' && s[1]=='d') { scope_do = l; break; } > else if (s[0]=='*' && s[1]=='l') { scope_local = l; break; } > else if (s[0]!='*' || s[1]!='i') break; > } > const char *stb = 0, *ste = 0; > unsigned int scope_ind = 0; > int level = 0; > if (scope_repeat) { > print(images,0,"%s %scurrent 'repeat..done' block.", > Com,is_continue?"to next iteration of ":""); > for (level = 1; level && position<commands_line.size(); ++position) { > const char *it = commands_line[position].data(); > if (!std::strcmp("-repeat",it)) ++level; > else if (!std::strcmp("-done",it)) --level; > } > scope_ind = scope_repeat; > stb = "repeat"; ste = "done"; > } else if (scope_do) { > print(images,0,"%s %scurrent 'do..while' block.", > Com,is_continue?"to next iteration of ":""); > for (level = 1; level && position<commands_line.size(); ++position) { > const char *it = commands_line[position].data(); > if (!std::strcmp("-do",it)) ++level; > else if (!std::strcmp("-while",it)) --level; > } > scope_ind = scope_do; > stb = "do"; ste = "while"; > } else if (scope_local) { > print(images,0,"%s %scurrent local environment.", > Com,is_continue?"to end of ":""); > for (level = 1; level && position<commands_line.size(); ++position) { > const char *it = commands_line[position].data(); > if (!std::strcmp("-local",it) || !std::strcmp("-l",it) || > !std::strcmp("--local",it) || !std::strcmp("--l",it) || > !std::strncmp("-local[",it,7) || !std::strncmp("-l[",it,3) || > !std::strncmp("--local[",it,8) || !std::strncmp("--l[",it,4)) ++level; > else if (!std::strcmp("-endlocal",it) || !std::strcmp("-endl",it)) --level; > } > scope_ind = scope_local; > stb = "local"; ste = "endlocal"; > } else { > print(images,0,"%s",Com); > error(images,0,0, > "Command '-%s': There are no loops or local environment to %s.",com,com); > continue; > } > if (level && position>=commands_line.size()) > error(images,0,0, > "Command '-%s': Missing associated '-%s' command.",stb,ste); > if (is_continue || scope_local) { > if (scope_ind<scope.size()-1) scope.remove(scope_ind+1,scope.size()-1); > --position; > } else { > scope.remove(scope_ind,scope.size()-1); > if (scope_do) { dowhiles.remove(); ++position; } else repeatdones.remove(); > } > continue; > } > > > if (!std::strcmp("-quit",item)) { > print(images,0,"Quit G'MIC instance.\n"); > dowhiles.assign(); > repeatdones.assign(); > position = commands_line.size(); > is_released = is_quit = true; > break; > } > > > > > const bool inv_fft = !std::strcmp("-ifft",command); > if (!std::strcmp("-fft",command) || inv_fft) { > print(images,0,"Compute %sfourier transform of image%s with complex pair%s", > inv_fft?"inverse ":"", > selection2string(selection,images_names,true).data(), > selection.height()>2?"s":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int > ind0 = selection[l], > ind1 = l+1<selection.height()?selection[l+1]:~0U; > CImg<T> &img0 = check_image(images,images[ind0]), > &img1 = ind1!=~0U?check_image(images,images[ind1]):CImg<T>::empty(); > CImg<char> name = images_names[ind0].get_mark(); > if (ind1!=~0U) { > if (verbosity>=0 || is_debug) { > std::fprintf(cimg::output()," ([%u],[%u])%c",ind0,ind1, > l>=selection.height()-2?'.':','); > std::fflush(cimg::output()); > } > if (is_get_version) { > CImgList<T> fft(img0,img1); > fft.FFT(inv_fft); > fft.move_to(images,~0U); > images_names.insert(2,name.copymark()); > } else { > CImgList<T> fft(2); > fft[0].swap(img0); > fft[1].swap(img1); > fft.FFT(inv_fft); > fft[0].swap(img0); > fft[1].swap(img1); > name.get_copymark().move_to(images_names[ind1]); > name.move_to(images_names[ind0]); > } > ++l; > } else { > if (verbosity>=0 || is_debug) { > std::fprintf(cimg::output()," ([%u],0)",ind0); > std::fflush(cimg::output()); > } > if (is_get_version) { > CImgList<T> fft(img0); > CImg<T>(fft[0].width(),fft[0].height(),fft[0].depth(),fft[0].spectrum(),0). > move_to(fft); > fft.FFT(inv_fft); > fft.move_to(images,~0U); > images_names.insert(2,name.copymark()); > } else { > CImgList<T> fft(1); > fft[0].swap(img0); > CImg<T>(fft[0].width(),fft[0].height(),fft[0].depth(),fft[0].spectrum(),0). > move_to(fft); > fft.FFT(inv_fft); > fft[0].swap(img0); > fft[1].move_to(images,ind0+1); > name.get_copymark().move_to(images_names,ind0+1); > name.move_to(images_names[ind0]); > } > } > } > is_released = false; continue; > } > > > const bool divide3d = !std::strcmp("-div3d",command); > if (!std::strcmp("-mul3d",command) || divide3d) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sx = 0, sy = 1, sz = 1; > if ((std::sscanf(argument,"%f%c", > &sx,&end)==1 && ((sz=sy=sx),1)) || > std::sscanf(argument,"%f,%f%c", > &sx,&sy,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &sx,&sy,&sz,&end)==3) { > if (divide3d) > print(images,0,"Scale 3d object%s with factors (1/%g,1/%g,1/%g).", > selection2string(selection,images_names,true).data(), > sx,sy,sz); > else > print(images,0,"Scale 3d object%s with factors (%g,%g,%g).", > selection2string(selection,images_names,true).data(), > sx,sy,sz); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { > if (divide3d) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_scale_CImg3d(1/sx,1/sy,1/sz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.scale_CImg3d(1/sx,1/sy,1/sz); images_names[posi].mark(); } }; } > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_scale_CImg3d(sx,sy,sz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.scale_CImg3d(sx,sy,sz); images_names[posi].mark(); } }; } > } catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-%s3d': Invalid 3d object [%d], in selected image%s (%s).", > divide3d?"div":"mul",ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else { if (divide3d) gmic::error(images,0,"div3d","Command '-%s': Invalid argument '%s'.","div3d",argument_text); else gmic::error(images,0,"mul3d","Command '-%s': Invalid argument '%s'.","mul3d",argument_text); } > is_released = false; ++position; continue; > } > > > > > if (std::strcmp("-input",command)) { > const char *custom_command = 0, cc = *(command+1); > bool custom_command_found = false, has_arguments = false; > CImg<char> substituted_command; > if ((cc>='a' && cc<='z') || (cc>='A' && cc<='Z') || cc=='_') { > const int ind = gmic_hashcode(command+1,false); > for (int l = 0; l<(int)(commands_names[ind])._width; ++l) { > custom_command = commands_names[ind][l].data(); > const char *const command_code = commands[ind][l].data(); > if (!std::strcmp(command+1,custom_command)) { > custom_command_found = true; > if (is_debug) { > CImg<char> command_code_text(264); > const unsigned int ls = std::strlen(command_code); > if (ls>=264) { > std::memcpy(command_code_text.data(),command_code,128); > std::memcpy(command_code_text.data()+128," ... ",5); > std::memcpy(command_code_text.data()+133,command_code+ls-130,131); > } else std::strcpy(command_code_text.data(),command_code); > for (char *ptrs = command_code_text, *ptrd = ptrs; *ptrs || (bool)(*ptrd=0); > ++ptrs) > if (*ptrs==1) while (*ptrs!=' ') ++ptrs; else *(ptrd++) = *ptrs; > debug(images,"Found custom command '%s: %s' (%s).", > custom_command,command_code_text.data(), > commands_has_arguments[ind](l,0)?"takes arguments":"takes no arguments"); > } > CImgList<char> arguments(32); > > CImg<char>::string(custom_command).move_to(arguments[0]); > unsigned int nb_arguments = 0; > > if (commands_has_arguments[ind](l,0)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > > > for (const char *ss = argument, *_ss = ss; _ss; ss =_ss+1) > if ((_ss=std::strchr(ss,','))!=0) { > if (ss==_ss) ++nb_arguments; > else { > if (++nb_arguments>=arguments.size()) > arguments.insert(2+2*nb_arguments-arguments.size()); > CImg<char> arg_item(ss,_ss-ss+1); > arg_item.back() = 0; > arg_item.move_to(arguments[nb_arguments]); > } > } else { > if (*ss) { > if (++nb_arguments>=arguments.size()) > arguments.insert(1+nb_arguments-arguments.size()); > if (*ss!=',') CImg<char>::string(ss).move_to(arguments[nb_arguments]); > } > break; > } > > if (is_debug) { > debug(images,"Found %d given argument%s for command '%s'%s", > nb_arguments,nb_arguments!=1?"s":"", > custom_command,nb_arguments>0?":":"."); > for (unsigned int i = 1; i<=nb_arguments; ++i) > if (arguments[i]) debug(images," $%d = '%s'",i,arguments[i].data()); > else debug(images," $%d = (undefined)",i); > } > } > > > CImgList<char> substituted_items; > CImg<char> inbraces; > for (const char *nsource = command_code; *nsource;) > if (*nsource!='$') { > > const char *const nsource0 = nsource; > nsource = std::strchr(nsource0,'$'); > if (!nsource) nsource = &commands[ind][l].back(); > CImg<char>(nsource0,nsource-nsource0).move_to(substituted_items); > } else { > CImg<char> substr(324); > inbraces.assign(1,1,1,1,0); > int ind = 0, ind1 = 0, l_inbraces = 0; > bool is_braces = false; > char sep = 0; > > if (nsource[1]=='{') { > const char *const ptr_beg = nsource + 2, *ptr_end = ptr_beg; > unsigned int p = 0; > for (p = 1; p>0 && *ptr_end; ++ptr_end) { > if (*ptr_end=='{') ++p; > if (*ptr_end=='}') --p; > } > if (p) { CImg<char>(nsource++,1).move_to(substituted_items); continue; } > l_inbraces = ptr_end - ptr_beg - 1; > if (l_inbraces>0) inbraces.assign(ptr_beg,l_inbraces + 1).back() = 0; > is_braces = true; > } > > > if (nsource[1]=='?') { > nsource+=2; > snprintf(substr,substr.width(),"%s",selection2string(selection,images_names,true).data()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (nsource[1]=='#') { > nsource+=2; > snprintf(substr,substr.width(),"%u",nb_arguments); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > has_arguments = true; > > > } else if (nsource[1]=='*') { > nsource+=2; > CImg<char>(argument,std::strlen(argument)).move_to(substituted_items); > has_arguments = true; > > > } else if (nsource[1]=='\"' && nsource[2]=='*' && nsource[3]=='\"') { > nsource+=4; > for (unsigned int i = 1; i<=nb_arguments; ++i) { > CImg<char>(1,1,1,1,'\"').move_to(substituted_items); > CImg<char>(arguments[i].data(),arguments[i].width()-1). > move_to(substituted_items); > if (i==nb_arguments) CImg<char>(1,1,1,1,'\"').move_to(substituted_items); > else CImg<char>(2,1,1,1,'\"',',').move_to(substituted_items); > } > has_arguments = true; > > > } else if (nsource[1]=='=' && > std::sscanf(nsource+2,"%255[a-zA-Z0-9_]",title)==1 && > (*title<'0' || *title>'9')) { > nsource+=2+std::strlen(title); > for (unsigned int i = 0; i<=nb_arguments; ++i) { > snprintf(substr,substr.width()," %s%u=\"",title,i); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > CImg<char>(arguments[i].data(),arguments[i].width()-1). > move_to(substituted_items); > CImg<char>(2,1,1,1,'\"',' ').move_to(substituted_items); > } > has_arguments = true; > > > } else if ((std::sscanf(nsource,"$%d",&ind)==1 || > (std::sscanf(nsource,"${%d%c",&ind,&sep)==2 && sep=='}'))) { > const int nind = ind + (ind<0?(int)nb_arguments+1:0); > if ((nind<=0 && ind) || nind>=arguments.width() || !arguments[nind]) { > error(images,0,custom_command, > "Command '-%s': Undefined argument '$%d', in expression '$%s%d%s' " > "(for %u argument%s specified).", > custom_command,ind,sep=='}'?"{":"",ind,sep=='}'?"}":"", > nb_arguments,nb_arguments!=1?"s":""); > } > nsource+=snprintf(substr,substr.width(),"$%d",ind) + (sep=='}'?2:0); > if (arguments[nind].width()>1) > CImg<char>(arguments[nind].data(),arguments[nind].width()-1). > move_to(substituted_items); > if (nind!=0) has_arguments = true; > > > > } else if (std::sscanf(nsource,"${%d=$%d%c",&ind,&ind1,&sep)==3 && sep=='}' && > ind>0) { > const int nind1 = ind1 + (ind1<0?(int)nb_arguments+1:0); > if (nind1<=0 || nind1>=arguments.width() || !arguments[nind1]) > error(images,0,custom_command, > "Command '-%s': Undefined argument '$%d', in expression '${%d=$%d}' " > "(for %u argument%s specified).", > custom_command,ind1,ind,ind1, > nb_arguments,nb_arguments!=1?"s":""); > nsource+=snprintf(substr,substr.width(),"${%d=$%d}",ind,ind1); > if (ind>=arguments.width()) arguments.insert(2+2*ind-arguments.size()); > if (!arguments[ind]) { > arguments[ind] = arguments[nind1]; > if (ind>(int)nb_arguments) nb_arguments = ind; > } > if (arguments[ind].width()>1) > CImg<char>(arguments[ind].data(),arguments[ind].width()-1). > move_to(substituted_items); > has_arguments = true; > > > > } else if (std::sscanf(nsource,"${%d=$#%c",&ind,&sep)==2 && sep=='}' && > ind>0) { > if (ind>=arguments.width()) arguments.insert(2+2*ind-arguments.size()); > if (!arguments[ind]) { > snprintf(substr,substr.width(),"%u",nb_arguments); > CImg<char>::string(substr).move_to(arguments[ind]); > if (ind>(int)nb_arguments) nb_arguments = ind; > } > nsource+=snprintf(substr,substr.width(),"${%d=$#}",ind); > if (arguments[ind].width()>1) > CImg<char>(arguments[ind].data(),arguments[ind].width()-1). > move_to(substituted_items); > has_arguments = true; > > > > } else if (std::sscanf(inbraces,"%d%c",&ind,&sep)==2 && sep=='=' && > ind>0) { > nsource+=l_inbraces + 3; > if (ind>=arguments.width()) arguments.insert(2+2*ind-arguments.size()); > if (!arguments[ind]) { > CImg<char>::string(inbraces.data() + > snprintf(substr,substr.width(),"%d=",ind)). > move_to(arguments[ind]); > if (ind>(int)nb_arguments) nb_arguments = ind; > } > if (arguments[ind].width()>1) > CImg<char>(arguments[ind].data(),arguments[ind].width()-1). > move_to(substituted_items); > has_arguments = true; > > > } else { > > > > if (is_braces) { > if ((*inbraces>='a' && *inbraces<='z') || > (*inbraces>='A' && *inbraces<='Z') || > *inbraces=='_') { > CImg<char>(nsource++,1).move_to(substituted_items); > } else if (*inbraces) { > CImg<unsigned int> inds; > const int _verbosity = verbosity; > const bool _is_debug = is_debug; > bool is_valid_subset = true; > verbosity = -16384; is_debug = false; > try { > inds = selection2cimg(inbraces,nb_arguments+1, > CImgList<char>::empty(),"",false, > false,CImg<char>::empty()); > } catch (...) { inds.assign(); is_valid_subset = false; } > verbosity = _verbosity; is_debug = _is_debug; > if (is_valid_subset) { > nsource+=l_inbraces + 3; > if (inds) { > for (int j = 0; j<(int)((inds)._height); ++j) { > const unsigned int ind = inds[j]; > if (ind) has_arguments = true; > if (!arguments[ind]) > error(images,0,custom_command, > "Command '-%s': Undefined argument '$%d', " > "in expression '${%s}'.", > custom_command,ind,inbraces.data()); > substituted_items.insert(arguments[ind]); > substituted_items.back().back() = ','; > } > if (substituted_items.back().width()>1) > --(substituted_items.back()._width); > else substituted_items.remove(); > has_arguments = true; > } > } else CImg<char>(nsource++,1).move_to(substituted_items); > } else nsource+=3; > } else CImg<char>(nsource++,1).move_to(substituted_items); > } > } > CImg<char>::vector(0).move_to(substituted_items); > (substituted_items>'x').move_to(substituted_command); > > > bool is_dquoted = false; > for (char *s = substituted_command.data(); *s; ++s) { > const char c = *s; > if (c=='\"') is_dquoted = !is_dquoted; > if (!is_dquoted) *s = c<' '?(c==_dollar?'$':c==_lbrace?'{':c==_rbrace?'}': > c==_comma?',':c==_dquote?'\"':c==_arobace?'@':c):c; > } > > if (is_debug) { > CImg<char> command_code_text(264); > const unsigned int l = std::strlen(substituted_command.data()); > if (l>=264) { > std::memcpy(command_code_text.data(),substituted_command.data(),128); > std::memcpy(command_code_text.data()+128," ... ",5); > std::memcpy(command_code_text.data()+133,substituted_command.data()+l-130,131); > } else std::strcpy(command_code_text.data(),substituted_command.data()); > for (char *ptrs = command_code_text, *ptrd = ptrs; *ptrs || (bool)(*ptrd=0); > ++ptrs) > if (*ptrs==1) while (*ptrs!=' ') ++ptrs; else *(ptrd++) = *ptrs; > debug(images,"Expand command line for command '%s' to: '%s'.", > custom_command,command_code_text.data()); > } > break; > } > } > } > > if (custom_command_found) { > const CImgList<char> > ncommands_line = commands_line_to_CImgList(substituted_command.data()); > unsigned int nvariables_sizes[256]; > for (unsigned int l = 0; l<256; ++l) nvariables_sizes[l] = variables[l]->size(); > CImgList<char> nimages_names(selection.height()); > CImgList<T> nimages(selection.height()); > unsigned int nposition = 0; > CImg<char>::string(custom_command).move_to(scope); > if (is_get_version) { > for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l] = images[selection[l]]; > nimages_names[l] = images_names[selection[l]]; > } > _parse(ncommands_line,nposition,nimages,nimages_names,nvariables_sizes); > nimages.move_to(images,~0U); > for (int l = 0; l<(int)(nimages_names)._width; ++l) nimages_names[l].copymark(); > nimages_names.move_to(images_names,~0U); > } else { > for (int l = 0; l<(int)((selection)._height); ++l) { > if (images[selection[l]].is_shared()) > nimages[l] = CImg<T>(images[selection[l]],true); > else nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > _parse(ncommands_line,nposition,nimages,nimages_names,nvariables_sizes); > const unsigned int nb = cimg::min((unsigned int)selection.height(),nimages.size()); > if (nb>0) { > for (unsigned int i = 0; i<nb; ++i) { > if (images[selection[i]].is_shared()) { > images[selection[i]] = nimages[i]; > nimages[i].assign(); > } else images[selection[i]].swap(nimages[i]); > images_names[selection[i]].swap(nimages_names[i]); > } > nimages.remove(0,nb-1); > nimages_names.remove(0,nb-1); > } > if (nb<(unsigned int)selection.height()) > remove_images(images,images_names,selection,nb,selection.height()-1); > else if (nimages) { > const unsigned int ind0 = selection?selection.back()+1:images.size(); > nimages_names.move_to(images_names,ind0); > nimages.move_to(images,ind0); > } > } > for (unsigned int l = 0; l<255; ++l) if (variables[l]->size()>nvariables_sizes[l]) { > variables_names[l]->remove(nvariables_sizes[l],variables[l]->size()-1); > variables[l]->remove(nvariables_sizes[l],variables[l]->size()-1); > } > scope.remove(); > is_return = false; > if (has_arguments) ++position; > continue; > } > } > } > > > char sep = 0; > if (std::strchr(item,'=') && std::sscanf(item,"%255[a-zA-Z0-9_]%c",title,&sep)==2 && > sep=='=' && (*title<'0' || *title>'9')) { > CImg<char> > name(title,std::strlen(title)+1), > value = CImg<char>::string(item+name.width()); > int ind = 0; bool is_name_found = false; > const bool is_global = *name=='_'; > const unsigned int sind = gmic_hashcode(name,true); > const int lind = is_global?0:variables_sizes[sind]; > if (is_global) cimg::mutex(29); > CImgList<char> > &__variables = *variables[sind], > &__variables_names = *variables_names[sind]; > for (int l = __variables.size()-1; l>=lind; --l) > if (!std::strcmp(__variables_names[l],name)) { > is_name_found = true; ind = l; break; > } > print(images,0,"Set %s variable %s='%s'.", > *name=='_'?"global":"local", > name.data(),value.data()); > if (is_name_found) value.move_to(__variables[ind]); > else { name.move_to(__variables_names); value.move_to(__variables); } > if (is_global) cimg::mutex(29,0); > continue; > } > > > if (!std::strcmp("-input",command) && !is_get_version) ++position; > else { std::strcpy(command,"-input"); argument = item; *restriction = 0; } > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (!is_restriction || !selection) selection.assign(1,1,1,1,images.size()); > CImg<char> indicesy(256), indicesz(256), indicesc(256); > float dx = 0, dy = 1, dz = 1, dc = 1, nb = 1; > char sepx = 0, sepy = 0, sepz = 0, sepc = 0; > CImg<unsigned int> indx, indy, indz, indc; > CImgList<char> input_images_names; > CImgList<T> input_images; > *indices = *indicesy = *indicesz = *indicesc = *argx = *argy = *argz = *argc = 0; > > CImg<char> arg_input(argument,std::strlen(argument)+1); > gmic_strreplace(arg_input); > > if (*arg_input=='0' && !arg_input[1]) { > > > print(images,0,"Input empty image at position%s", > selection2string(selection,images_names,true).data()); > input_images.assign(1); > CImg<char>::string("[empty]").move_to(input_images_names); > > > } else if ((std::sscanf(arg_input,"[%255[a-zA-Z_0-9%.eE%^,:+-]%c%c",indices,&sep,&end)==2 && > sep==']') || > std::sscanf(arg_input,"[%255[a-zA-Z_0-9%.eE%^,:+-]]x%f%c",indices,&nb,&end)==2) { > > > nb = cimg::round(nb); > const CImg<unsigned int> inds = selection2cimg(indices,images.size(),images_names, > "-input",true,false,CImg<char>::empty()); > CImg<char> s_tmp(256); > std::strncpy(s_tmp,selection2string(inds,images_names,true).data(),s_tmp.width()-1); > s_tmp[s_tmp.width()-1] = 0; > if (nb<=0) gmic::error(images,0,"input","Command '-%s': Invalid argument '%s'.","input",argument_text); > if (nb!=1) > print(images,0,"Input %u copies of image%s at position%s", > (unsigned int)nb, > s_tmp.data(), > selection2string(selection,images_names,true).data()); > else > print(images,0,"Input copy of image%s at position%s", > s_tmp.data(), > selection2string(selection,images_names,true).data()); > for (unsigned int i = 0; i<(unsigned int)nb; ++i) for (unsigned long l = 0, _maxl = (inds).size(); l<_maxl; ++l) { > input_images.insert(check_image(images,images[inds[l]])); > input_images_names.insert(images_names[inds[l]].get_copymark()); > } > } else if ((sep=0,true) && > (std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 || > std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,argz,argc,&end)==4 || > std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%c", > argx,argy,argz,argc,&sep)==5) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sepx,&end)==2 && > sepx==']' && > (indx=selection2cimg(indices,images.size(),images_names,"-input",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argx,"%f%c",&dx,&end)==1 && dx>=1) || > (std::sscanf(argx,"%f%c%c",&dx,&sepx,&end)==2 && dx>0 && sepx=='%')) && > (!*argy || > (std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesy.data(),&sepy,&end)==2 && > sepy==']' && > (indy=selection2cimg(indicesy,images.size(),images_names,"-input",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argy,"%f%c",&dy,&end)==1 && dy>=1) || > (std::sscanf(argy,"%f%c%c",&dy,&sepy,&end)==2 && dy>0 && sepy=='%')) && > (!*argz || > (std::sscanf(argz,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesz.data(),&sepz,&end)==2 && > sepz==']' && > (indz=selection2cimg(indicesz,images.size(),images_names,"-input",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argz,"%f%c",&dz,&end)==1 && dz>=1) || > (std::sscanf(argz,"%f%c%c",&dz,&sepz,&end)==2 && dz>0 && sepz=='%')) && > (!*argc || > (std::sscanf(argc,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesc.data(),&sepc,&end)==2 && > sepc==']' && > (indc=selection2cimg(indicesc,images.size(),images_names,"-input",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argc,"%f%c",&dc,&end)==1 && dc>=1) || > (std::sscanf(argc,"%f%c%c",&dc,&sepc,&end)==2 && dc>0 && sepc=='%'))) { > > > if (indx) { dx = (float)check_image(images,images[*indx]).width(); sepx = 0; } > if (indy) { dy = (float)check_image(images,images[*indy]).height(); sepy = 0; } > if (indz) { dz = (float)check_image(images,images[*indz]).depth(); sepz = 0; } > if (indc) { dc = (float)check_image(images,images[*indc]).spectrum(); sepc = 0; } > int idx = 0, idy = 0, idz = 0, idc = 0; > const CImg<T>& img = images.size()?check_image(images,images.back()):CImg<T>::empty(); > if (sepx=='%') { idx = (int)cimg::round(dx*img.width()/100); if (!idx) ++idx; } > else idx = (int)cimg::round(dx); > if (sepy=='%') { idy = (int)cimg::round(dy*img.height()/100); if (!idy) ++idy; } > else idy = (int)cimg::round(dy); > if (sepz=='%') { idz = (int)cimg::round(dz*img.depth()/100); if (!idz) ++idz; } > else idz = (int)cimg::round(dz); > if (sepc=='%') { idc = (int)cimg::round(dc*img.spectrum()/100); if (!idc) ++idc; } > else idc = (int)cimg::round(dc); > if (idx<=0 || idy<=0 || idz<=0 || idc<=0) gmic::error(images,0,"input","Command '-%s': Invalid argument '%s'.","input",argument_text); > CImg<char> s_values; > if (sep) { > const char *_s_values = arg_input.data() + std::strlen(argx) + std::strlen(argy) + > std::strlen(argz) + std::strlen(argc) + 4; > s_values.assign(_s_values,std::strlen(_s_values)+1); > cimg::strpare(s_values,'\'',true,false); > gmic_strreplace(s_values); > CImg<char> s_values_text(72); > *s_values_text = 0; > const unsigned int l = std::strlen(s_values); > if (l>=72) { > std::memcpy(s_values_text.data(),s_values.data(),32); > std::memcpy(s_values_text.data()+32," ... ",5); > std::memcpy(s_values_text.data()+37,s_values.data()+l-34,35); > } else std::strcpy(s_values_text,s_values); > print(images,0,"Input image at position%s, with values '%s'", > selection2string(selection,images_names,true).data(),s_values_text.data()); > } else > print(images,0,"Input black image at position%s", > selection2string(selection,images_names,true).data()); > CImg<T> new_image(idx,idy,idz,idc,0); > if (s_values) { > new_image.fill(s_values.data(),true); > snprintf(title,_title.size(),"[image of '%s']",s_values.data()); > { if (_title.size()>=5 && title[_title.size()-2]) title[_title.size()-4] = title[_title.size()-3] = title[_title.size()-2] = '.'; }; > CImg<char>::string(title).move_to(input_images_names); > } else CImg<char>::string("[unnamed]").move_to(input_images_names); > new_image.move_to(input_images); > > } else if (*arg_input=='(' && arg_input[std::strlen(arg_input)-1]==')') { > > > unsigned int cx = 0, cy = 0, cz = 0, cc = 0, maxcx = 0, maxcy = 0, maxcz = 0; > const char *nargument = 0; > for (nargument = arg_input.data() + 1; *nargument; ) { > CImg<char> s_value(256); > *s_value = 0; > char separator = 0; > double value = 0; > if (std::sscanf(nargument,"%255[0-9.eE+-]%c",s_value.data(),&separator)==2 && > std::sscanf(s_value,"%lf%c",&value,&end)==1) { > if (cx>maxcx) maxcx = cx; > if (cy>maxcy) maxcy = cy; > if (cz>maxcz) maxcz = cz; > switch (separator) { > case '^' : cx = cy = cz = 0; ++cc; break; > case '/' : cx = cy = 0; ++cz; break; > case ';' : cx = 0; ++cy; break; > case ',' : ++cx; break; > case ')' : break; > default : gmic::error(images,0,"input","Command '-%s': Invalid argument '%s'.","input",argument_text); > } > nargument+=std::strlen(s_value) + 1; > } else break; > } > if (*nargument) gmic::error(images,0,"input","Command '-%s': Invalid argument '%s'.","input",argument_text); > CImg<T> img(maxcx+1,maxcy+1,maxcz+1,cc+1,0); > cx = cy = cz = cc = 0; > for (nargument = arg_input.data() + 1; *nargument; ) { > CImg<char> s_value(256); > *s_value = 0; > char separator = 0; > double value = 0; > if (std::sscanf(nargument,"%255[0-9.eE+-]%c",s_value.data(),&separator)==2 && > std::sscanf(s_value,"%lf%c",&value,&end)==1) { > img(cx,cy,cz,cc) = (T)value; > switch (separator) { > case '^' : cx = cy = cz = 0; ++cc; break; > case '/' : cx = cy = 0; ++cz; break; > case ';' : cx = 0; ++cy; break; > default : ++cx; > } > nargument+=std::strlen(s_value) + (separator?1:0); > } else break; > } > print(images,0,"Input image at position%s, with values '%s'", > selection2string(selection,images_names,true).data(), > argument_text); > img.move_to(input_images); > arg_input.move_to(input_images_names); > > } else { > > > char cext[8]; > CImg<char> _filename(4096), filename_tmp(512), options(256); > *cext = *_filename = *filename_tmp = *options = 0; > bool is_network_file = false; > if (std::sscanf(argument,"%8[a-zA-Z]:%4095[^,],%255s", > cext,_filename.data(),options.data())<2 || > !cext[1] || > !cimg::strcasecmp(cext,"http") || !cimg::strcasecmp(cext,"https")) { > *cext = *_filename = *options = 0; > if (std::sscanf(argument,"%4095[^,],%255s",_filename.data(),options.data())!=2) { > std::strncpy(_filename,argument,_filename.width()-1); > _filename[_filename.width()-1] = 0; > } > } > gmic_strreplace(_filename); > gmic_strreplace(options); > CImg<char> __filename0 = CImg<char>::string(_filename); > const char *const _filename0 = __filename0.data(); > > > if (!cimg::strncasecmp(_filename,"http://",7) || > !cimg::strncasecmp(_filename,"https://",8)) { > cimg::load_network_external(_filename,filename_tmp); > std::strncpy(_filename,filename_tmp,_filename.width()-1); > _filename[_filename.width()-1] = 0; > *filename_tmp = 0; > is_network_file = true; > } > > if (*cext) { > if (*_filename=='-' && (!_filename[1] || _filename[1]=='.')) { > > snprintf(_filename,_filename.width(),"-.%s",cext); > *cext = 0; > } else { > std::FILE *file = 0; > do { > snprintf(filename_tmp,filename_tmp.width(),"%s%c%s.%s", > cimg::temporary_path(),'/', > cimg::filenamerand(),cext); > if ((file=std::fopen(filename_tmp,"rb"))!=0) std::fclose(file); > } while (file); > > > > const char *const _filename_path = realpath(_filename,0); > if (symlink(_filename_path,filename_tmp)) > CImg<unsigned char>::get_load_raw(_filename).save_raw(filename_tmp); > std::free((void*)_filename_path); > > > > } > } > > const char > *const filename = *filename_tmp?filename_tmp:_filename, > *const ext = cimg::split_filename(filename); > > std::FILE *const file = std::fopen(filename,"rb"); > long siz = 0; > if (file) { std::fseek(file,0,2); siz = std::ftell(file); std::fclose(file); } > if (file && siz==0) { > input_images_names.insert(__filename0); > input_images.insert(1); > } else if (!cimg::strcasecmp("off",ext)) { > > > print(images,0,"Input 3d object '%s' at position%s", > _filename0,selection2string(selection,images_names,true).data()); > CImgList<unsigned int> primitives; > CImgList<float> colors; > CImg<float> vertices = CImg<float>::get_load_off(primitives,colors,filename); > const CImg<float> opacities(1,primitives.size(),1,1,1); > vertices.object3dtoCImg3d(primitives,colors,opacities,false).move_to(input_images); > input_images_names.insert(__filename0); > } else if (!cimg::strcasecmp(ext,"cimg") && *options) { > > > float > n0 = -1, x0 = -1, y0 = -1, z0 = -1, c0 = -1, > n1 = -1, x1 = -1, y1 = -1, z1 = -1, c1 = -1; > if ((std::sscanf(options,"%f,%f%c", > &n0,&n1,&end)==2 || > std::sscanf(options,"%f,%f,%f,%f%c", > &n0,&n1,&x0,&x1,&end)==4 || > std::sscanf(options,"%f,%f,%f,%f,%f,%f%c", > &n0,&n1,&x0,&y0,&x1,&y1,&end)==6 || > std::sscanf(options,"%f,%f,%f,%f,%f,%f,%f,%f%c", > &n0,&n1,&x0,&y0,&z0,&x1,&y1,&z1,&end)==8 || > std::sscanf(options,"%f,%f,%f,%f,%f,%f,%f,%f,%f,%f%c", > &n0,&n1,&x0,&y0,&z0,&c0,&x1,&y1,&z1,&c1,&end)==10) && > (n0==-1 || n0>=0) && (n1==-1 || n1>=0) && > (x0==-1 || x0>=0) && (x1==-1 || x1>=0) && > (y0==-1 || y0>=0) && (y1==-1 || y1>=0) && > (z0==-1 || z0>=0) && (z1==-1 || z1>=0) && > (c0==-1 || c0>=0) && (c1==-1 || c1>=0)) { > n0 = cimg::round(n0); n1 = cimg::round(n1); > x0 = cimg::round(x0); x1 = cimg::round(x1); > y0 = cimg::round(y0); y1 = cimg::round(y1); > z0 = cimg::round(z0); z1 = cimg::round(z1); > c0 = cimg::round(c0); c1 = cimg::round(c1); > if (c0==-1 && c1==-1) { > if (z0==-1 && z1==-1) { > if (y0==-1 && y1==-1) { > if (x0==-1 && x1==-1) { > print(images,0,"Input crop [%d] -> [%d] of file '%s' at position%s", > (int)n0,(int)n1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > 0U,0U,0U,0U,~0U,~0U,~0U,~0U); > } else { > print(images,0,"Input crop [%d](%d) -> [%d](%d) of file '%s' at position%s", > (int)n0,(int)x0,(int)n1,(int)x1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > (unsigned int)x0,0U,0U,0U, > (unsigned int)x1,~0U,~0U,~0U); > } > } else { > print(images,0,"Input crop [%d](%d,%d) -> [%d](%d,%d) of file '%s' at position%s", > (int)n0,(int)n1,(int)x0,(int)y0,(int)x1,(int)y1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > (unsigned int)x0,(unsigned int)y0,0U,0U, > (unsigned int)x1,(unsigned int)y1,~0U,~0U); > } > } else { > print(images,0,"Input crop [%d](%d,%d,%d) -> [%d](%d,%d,%d) of file '%s' " > "at position%s", > (int)n0,(int)n1,(int)x0,(int)y0,(int)z0,(int)x1,(int)y1,(int)z1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > (unsigned int)x0,(unsigned int)y0,(unsigned int)z0,0U, > (unsigned int)x1,(unsigned int)y1,(unsigned int)z1,~0U); > } > } else { > print(images,0,"Input crop [%d](%d,%d,%d,%d) -> [%d](%d,%d,%d,%d) of file '%s' " > "at position%s", > (int)n0,(int)n1, > (int)x0,(int)y0,(int)z0,(int)c0, > (int)x1,(int)y1,(int)z1,(int)c1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > (unsigned int)x0,(unsigned int)y0, > (unsigned int)z0,(unsigned int)c0, > (unsigned int)x1,(unsigned int)y1, > (unsigned int)z1,(unsigned int)c1); > } > > if (input_images) { > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > } else > error(images,0,0, > "Command '-input': .cimg file '%s', invalid file options '%s'.", > _filename0,options.data()); > > } else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) { > > > float first_frame = 0, last_frame = 0, step = 1; > char first_sep = 0, last_sep = 0; > if ((std::sscanf(options,"%f%c,%f%c,%f%c", > &first_frame,&first_sep,&last_frame,&last_sep,&step,&end)==5 && > first_sep=='%' && last_sep=='%') || > (std::sscanf(options,"%f%c,%f,%f%c", > &first_frame,&first_sep,&last_frame,&step,&end)==4 && > first_sep=='%') || > (std::sscanf(options,"%f,%f%c,%f%c", > &first_frame,&last_frame,&last_sep,&step,&end)==4 && > last_sep=='%') || > std::sscanf(options,"%f,%f,%f%c",&first_frame,&last_frame,&step,&end)==3 || > (std::sscanf(options,"%f%c,%f%c%c", > &first_frame,&first_sep,&last_frame,&last_sep,&end)==4 && > first_sep=='%' && last_sep=='%') || > (std::sscanf(options,"%f%c,%f%c",&first_frame,&first_sep,&last_frame,&end)==3 && > first_sep=='%') || > (std::sscanf(options,"%f,%f%c%c",&first_frame,&last_frame,&last_sep,&end)==3 && > last_sep=='%') || > std::sscanf(options,"%f,%f%c", > &first_frame,&last_frame,&end)==2) { > if (first_frame>last_frame) cimg::swap(first_frame,last_frame,first_sep,last_sep); > step = cimg::round(step); > print(images,0,"Input frames %g%s..%g%s with step %g of file '%s' at position%s", > first_frame,first_sep=='%'?"%":"", > last_frame,last_sep=='%'?"%":"", > step, > _filename0, > selection2string(selection,images_names,true).data()); > if (first_sep=='%' || last_sep=='%') { > const unsigned int > nb_frames = CImg<unsigned int>::get_load_ffmpeg(filename,0,0,0)[0]; > first_frame = cimg::round(first_sep=='%'?first_frame*nb_frames/100:first_frame); > last_frame = cimg::round(last_sep=='%'?last_frame*nb_frames/100:last_frame); > } > input_images.load_ffmpeg(filename,(unsigned int)first_frame, > (unsigned int)last_frame,(unsigned int)step); > } else if ((std::sscanf(options,"%f%c%c",&first_frame,&first_sep,&end)==2 && > first_sep=='%') || > std::sscanf(options,"%f%c",&first_frame,&end)==1) { > step = cimg::round(step); > print(images,0,"Input frame %g%s of file '%s' at position%s", > first_frame,first_sep=='%'?"%":"", > _filename0, > selection2string(selection,images_names,true).data()); > if (first_sep=='%') { > const unsigned int > nb_frames = CImg<unsigned int>::get_load_ffmpeg(filename,0,0,0)[0]; > first_frame = cimg::round(first_frame*nb_frames/100.0f); > } > input_images.load_ffmpeg(filename,(unsigned int)first_frame,(unsigned int)first_frame); > } else { > print(images,0,"Input all frames of file '%s' at position%s", > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_ffmpeg(filename); > } > if (input_images) { > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > } else if (!cimg::strcasecmp("raw",ext)) { > > > float dx = 0, dy = 1, dz = 1, dc = 1; > unsigned long offset = 0; > *argx = 0; > if (!*options || > std::sscanf(options,"%f%c",&dx,&end)==1 || > std::sscanf(options,"%f,%f%c",&dx,&dy,&end)==2 || > std::sscanf(options,"%f,%f,%f%c",&dx,&dy,&dz,&end)==3 || > std::sscanf(options,"%f,%f,%f,%f%c",&dx,&dy,&dz,&dc,&end)==4 || > std::sscanf(options,"%f,%f,%f,%f,%lu%c",&dx,&dy,&dz,&dc,&offset,&end)==5 || > std::sscanf(options,"%255[a-zA-Z]%c",argx,&end)==1 || > std::sscanf(options,"%255[a-zA-Z],%f%c",argx,&dx,&end)==2 || > std::sscanf(options,"%255[a-zA-Z],%f,%f%c",argx,&dx,&dy,&end)==3 || > std::sscanf(options,"%255[a-zA-Z],%f,%f,%f%c",argx,&dx,&dy,&dz,&end)==4 || > std::sscanf(options,"%255[a-zA-Z],%f,%f,%f,%f%c",argx,&dx,&dy,&dz,&dc,&end)==5 || > std::sscanf(options,"%255[a-zA-Z],%f,%f,%f,%f,%lu%c",argx,&dx,&dy,&dz,&dc,&offset, > &end)==6) { > const char *const stype = *argx?argx:cimg::type<T>::string(); > dx = cimg::round(dx); > dy = cimg::round(dy); > dz = cimg::round(dz); > dc = cimg::round(dc); > if (dx<0 || dy<=0 || dz<=0 || dc<=0) > error(images,0,0, > "Command '-input': raw file '%s', invalid specified " > "dimensions %gx%gx%gx%g.", > _filename0,dx,dy,dz,dc); > > if (offset) > print(images,0,"Input raw file '%s' (offset: %lu) with type '%s' at position%s", > _filename0,offset,stype, > selection2string(selection,images_names,true).data()); > else > print(images,0,"Input raw file '%s' with type '%s' at position%s", > _filename0,stype, > selection2string(selection,images_names,true).data()); > > > > > > > > if (!cimg::strcasecmp(stype,"bool")) CImg<bool>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"uchar")) CImg<unsigned char>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"unsigned char")) CImg<unsigned char>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"char")) CImg<char>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"ushort")) CImg<unsigned short>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"unsigned short")) CImg<unsigned short>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"short")) CImg<short>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"uint")) CImg<unsigned int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"unsigned int")) CImg<unsigned int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"int")) CImg<int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"ulong")) CImg<unsigned int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"unsigned long")) CImg<unsigned int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"long")) CImg<int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"float")) CImg<float>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"double")) CImg<double>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else error(images,0,0, > "Command '-input': raw file '%s', " > "invalid specified pixel type '%s'.\n", > _filename0,stype); > input_images_names.insert(__filename0); > } else > error(images,0,0, > "Command '-input': raw file '%s', invalid file options '%s'.", > _filename0,options.data()); > } else if (!cimg::strcasecmp("yuv",ext)) { > > > float first_frame = 0, last_frame = 0, step = 1, dx = 0, dy = 1; > int err = 0; > if ((err=std::sscanf(options,"%f,%f,%f,%f,%f", > &dx,&dy,&first_frame,&last_frame,&step))>=1) { > dx = cimg::round(dx); > dy = cimg::round(dy); > if (dx<=0 || dy<=0) > error(images,0,0, > "Command '-input': YUV file '%s', invalid specified dimensions %gx%g.", > _filename0,dx,dy); > first_frame = cimg::round(first_frame); > if (err>3) { > last_frame = cimg::round(last_frame); > step = cimg::round(step); > print(images,0,"Input frames %g..%g with step %g of YUV file '%s' at position%s", > first_frame,last_frame,step, > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_yuv(filename,(unsigned int)dx,(unsigned int)dy, > (unsigned int)first_frame,(unsigned int)last_frame, > (unsigned int)step); > } else if (err==3) { > print(images,0,"Input frames %g of YUV file '%s' at position%s", > first_frame, > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_yuv(filename,(unsigned int)dx,(unsigned int)dy, > (unsigned int)first_frame,(unsigned int)first_frame); > } else { > print(images,0,"Input all frames of YUV file '%s' at position%s", > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_yuv(filename,(unsigned int)dx,(unsigned int)dy); > } > if (input_images) { > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > } else > error(images,0,0, > "Command '-input': YUV file '%s', invalid or missing file options '%s'.", > _filename0,options.data()); > > } else if (!cimg::strcasecmp("tif",ext) || !cimg::strcasecmp("tiff",ext)) { > > > float first_frame = 0, last_frame = 0, step = 1; > int err = 0; > > > > > > if ((err=std::sscanf(options,"%f,%f,%f",&first_frame,&last_frame,&step))>0) { > first_frame = cimg::round(first_frame); > if (err>1) { > last_frame = cimg::round(last_frame); > step = cimg::round(step); > print(images,0,"Input frames %g..%g with step %g of TIFF file '%s' at position%s", > first_frame,last_frame,step, > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_tiff(filename,(unsigned int)first_frame,(unsigned int)last_frame, > (unsigned int)step); > } else if (err==1) { > print(images,0,"Input frames %g of TIFF file '%s' at position%s", > first_frame, > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_tiff(filename,(unsigned int)first_frame,(unsigned int)first_frame); > } > } else { > if (*options) error(images,0,0, > "Command '-input': TIFF file '%s', " > "invalid file options '%s'.", > _filename0,options.data()); > print(images,0,"Input all frames of TIFF file '%s' at position%s", > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_tiff(filename); > } > if (input_images) { > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > } else if (!cimg::strcasecmp("gmic",ext)) { > > > const bool add_debug_infos = (*options!='0'); > print(images,0,"Input custom commands file '%s'%s", > _filename0,!add_debug_infos?" without debug infos":""); > unsigned int siz = 0; > for (unsigned int l = 0; l<256; ++l) siz+=commands[l].size(); > std::FILE *const file = cimg::fopen(filename,"rb"); > add_commands(file,filename,commands_names,commands,commands_has_arguments, > add_debug_infos); > cimg::fclose(file); > if (verbosity>=0 || is_debug) { > unsigned int nb_added = 0; > for (unsigned int l = 0; l<256; ++l) nb_added+=commands[l].size(); > nb_added-=siz; > std::fprintf(cimg::output()," (added %u command%s, total %u).", > nb_added,nb_added>1?"s":"",siz+nb_added); > std::fflush(cimg::output()); > } > continue; > } else { > > > print(images,0,"Input file '%s' at position%s", > _filename0, > selection2string(selection,images_names,true).data()); > try { input_images.load(filename); } > catch (CImgException&) { > std::FILE *file = 0; > if (!(file=std::fopen(filename,"r"))) { > if (cimg::type<T>::string()==cimg::type<float>::string() || *ext || *filename!='-') { > if (*filename=='-' && filename[1]) { > const char *native_commands_names[] = { > "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s", > "t","u","v","w","x","y","z", > "+","-","*","/",">","<","%","^","=","sh","mv","rm","rv","<<",">>","==",">=", > "<=","//","**","!=","&","|", > "d3d","+3d","b3d","/3d","f3d","l3d","m3d","*3d","o3d","p3d","r3d","s3d","-3d", > "t3d","db3d","md3d","rv3d","sl3d","ss3d","div3d", > "append","autocrop","add","add3d","abs","and","atan2","acos","asin","atan", > "axes", > "blur","bsr","bsl","bilateral","background3d","break", > "check","check3d","crop","channels","columns","command","camera","cut","cos", > "convolve","correlate","color3d","col3d","cosh","continue","cursor", > "done","do","debug","divide","distance","dilate","discard","double3d","denoise", > "deriche","dijkstra","displacement","display","display3d", > "endif","else","elif","endlocal","endl","echo","exec","error","endian","exp", > "eq","ellipse","equalize","erode","elevation3d","eigen","eikonal", > "fill","flood","focale3d","fft", > "ge","gt","gradient","graph", > "histogram","hsi2rgb","hsl2rgb","hsv2rgb","hessian", > "input","if","image","index","invert","isoline3d","isosurface3d","inpaint", > "ifft", > "keep", > "local","le","lt","log","log2","log10","line","lab2rgb","label","light3d", > "move","mirror","mul","mutex","mod","max","min","mmul","mode3d","moded3d", > "map","median","mdiv","mse","mandelbrot","mul3d", > "name","normalize","neq","noise", > "output","onfail","object3d","or","opacity3d", > "parallel","permute","progress","print","pow","point","polygon","plasma", > "pose3d","primitives3d","plot", > "quiver","quit", > "remove","repeat","resize","reverse","return","rows","rotate", > "round","rand","rotate3d","rgb2hsi","rgb2hsl","rgb2hsv","rgb2lab", > "rgb2srgb","rol","ror","reverse3d", > "status","skip","set","split","shared","shift","slices","srand","sub","sqrt", > "sqr","sign","sin","sort","solve","sub3d","sharpen","smooth","split3d", > "svd","sphere3d","specl3d","specs3d","sinc","sinh","srgb2rgb","streamline3d", > "structuretensors","select", > "type","threshold","tan","text","texturize3d","trisolve","tanh", > "unroll","uncommand", > "vanvliet","verbose", > "while","warning","window","warp","watershed","wait", > "xor",0 > }; > const char *misspelled = 0; > const unsigned int foff = filename[1]=='-'?2:1; > int dmin = 4; > for (unsigned int l = 0; native_commands_names[l]; ++l) { > > const char *const c = native_commands_names[l]; > const int d = gmic_levenshtein(c,filename+foff); > if (d<dmin) { dmin = d; misspelled = native_commands_names[l]; } > } > for (unsigned int i = 0; i<256; ++i) > > for (int l = 0; l<(int)(commands_names[i])._width; ++l) { > const char *const c = commands_names[i][l].data(); > const int d = gmic_levenshtein(c,filename+foff); > if (d<dmin) { dmin = d; misspelled = commands_names[i][l].data(); } > } > if (misspelled) > error(images,0,0, > "Unknown command or filename '%s' (did you mean '-%s' ?).", > argument_text,misspelled); > else error(images,0,0, > "Unknown command or filename '%s'.", > argument_text); > } else error(images,0,0, > "Unknown %s '%s'.", > *filename=='-'?"command or filename":"filename", > argument_text); > } else > error(images,0,0, > "Unknown command '%s' in '%s' type mode " > "(command defined only in 'float' type mode ?).", > argument_text,cimg::type<T>::string()); > } else throw; > } > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > > if (*filename_tmp) std::remove(filename_tmp); > if (is_network_file) std::remove(_filename); > } > > if (verbosity>=0 || is_debug) { > if (input_images) { > const unsigned int last = input_images.size() - 1; > if (input_images.size()==1) { > if (input_images[0].is_CImg3d(false)) > std::fprintf(cimg::output()," (%u vertices, %u primitives).", > cimg::float2uint((float)input_images(0,6)), > cimg::float2uint((float)input_images(0,7))); > else > std::fprintf(cimg::output()," (1 image %dx%dx%dx%d).", > input_images[0].width(),input_images[0].height(), > input_images[0].depth(),input_images[0].spectrum()); > } else > std::fprintf(cimg::output()," (%u images [0] = %dx%dx%dx%d, %s[%u] = %dx%dx%dx%d).", > input_images.size(), > input_images[0].width(),input_images[0].height(), > input_images[0].depth(),input_images[0].spectrum(), > last==1?"":"..,",last, > input_images[last].width(),input_images[last].height(), > input_images[last].depth(),input_images[last].spectrum()); > } else { > std::fprintf(cimg::output()," (no available data)."); > input_images_names.assign(); > } > std::fflush(cimg::output()); > } > > for (unsigned int l = 0, siz = selection.height()-1U, off = 0; l<=siz; ++l) { > const unsigned int ind = selection[l] + off; > off+=input_images.size(); > if (l!=siz) { > images.insert(input_images,ind); > images_names.insert(input_images_names,ind); > } else { > input_images.move_to(images,ind); > input_images_names.move_to(images_names,ind); > } > } > > if (new_name) new_name.move_to(images_names[selection[0]]); > is_released = false; > } > > > > > > > if (scope.size()==1) global_threads_data.move_to(threads_data,~0U); > > > for (int i = 0; i<(int)(threads_data)._width; ++i) for (int l = 0; l<(int)((threads_data[i])._height); ++l) { > if (!threads_data(i,l).wait_mode) { > cimg::mutex(30); > *(threads_data(i,l).gmic_instance.cancel) = 1; > cimg::mutex(30,0); > } > > pthread_join(threads_data(i,l).thread_id,0); > > > > > is_released&=threads_data(i,l).gmic_instance.is_released; > } > > for (int i = 0; i<(int)(threads_data)._width; ++i) for (int l = 0; l<(int)((threads_data[i])._height); ++l) > if (threads_data(i,l).exception._message) > throw threads_data(i,l).exception; > > > > if (images_names.size()!=images.size()) > error(images,0,0, > "Internal error: Images (%u) and images names (%u) have different size, " > "at return point.", > images_names.size(),images.size()); > if (!scope) > error(images,0,0, > "Internal error: Scope is empty, at return point."); > > > if (!is_quit && !is_return) { > const CImg<char> &s = scope.back(); > if (is_default_type && > s[0]=='*' && (s[1]=='d' || s[1]=='i' || s[1]=='r' || (s[1]=='l' && !is_endlocal))) > error(images,0,0, > "A '-%s' command is missing, before return point.", > s[1]=='d'?"while":s[1]=='i'?"endif":s[1]=='r'?"done":"endlocal"); > } else if (initial_scope_size<scope.size()) scope.remove(initial_scope_size,scope.size()-1); > > > for (int l = 0; l<(int)(images)._width; ++l) check_image(images,images[l]); ># 12987 "gmic.cpp" > if (is_debug) debug(images,"%sEnd G'MIC parser in scope '%s/' [%s].%s\n", > cimg::t_bold,scope.back().data(),CImg<T>::pixel_type(),cimg::t_normal); > if (!is_debug && !is_quit && scope.size()==1 && is_default_type) { > print(images,0,"End G'MIC parser.\n"); > is_quit = true; > } > } catch (CImgException &e) { > CImg<char> error_message(e.what(),std::strlen(e.what())+1); > for (char *cimg = std::strstr(error_message,"CImg"); cimg; cimg = std::strstr(cimg,"CImg")) { > cimg[0] = 'g'; cimg[1] = 'm'; cimg[2] = 'i'; cimg[3] = 'c'; > } > error(images,0,0,error_message); > } > debug_line = initial_debug_line; > return *this; >} ># 13099 "gmic.cpp" >gmic& gmic::_parse_float(const CImgList<char>& commands_line, unsigned int& position, > CImgList<float>& images, CImgList<char>& images_names, > unsigned int variables_sizes[256]) { > return _parse(commands_line,position,images,images_names,variables_sizes); >} >template gmic::gmic(const int, const char *const *const, CImgList<float>&, CImgList<char>&, > const char *const custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel); >template gmic::gmic(const char *const, CImgList<float>&, CImgList<char>&, > const char *const custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 1111781
:
910999
|
911000
| 911001