diff --git a/.gitignore b/.gitignore index 68d400c..8884eec 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ /bench.du /bench.ud /bench23 +/bench_gap + /examples /examples.du /examples.ud diff --git a/automerge_gap.txt b/automerge_gap.txt new file mode 100644 index 0000000..54f958b --- /dev/null +++ b/automerge_gap.txt @@ -0,0 +1 @@ +'''''''''''''''''''''''''''''''''''c'''''''''n''''''''''''''''''''''''''''''''''''}'l'r'u'{'}'s'n'e'h'p'y'h'{'e'g'a'k'c'a'P'o'T's'n'o'i't'p'O's's'a'P''n'''''''''%''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'r'u'{''''''''''''''''''''''}'f'e'r'r'e'p'y'h'{'e'g'a'k'c'a'p'e's'u'''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''s'''''n'''''e'''''h'''''p'''''y'''''h'''''{'''''e'''g'a'k'c'a'P'o'T's'n'o'i't'p'O's's'a'P''n''a'r't'E'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'f'e'r'r'e'p'y'h'{'e'g'a'k'c'a'p'e's'u''n'''''''''''''''''''''''''''}'l'r'u'{']'s'n'e'h'p'y'h'['e'g'a'k'c'a'p'e's'u''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'''''g'''''r'''''o'''''.'''''v'''''i'''''x'''''r'''''a''''' '''''.'''''g'''.'e'(' 's'p'i'v'd' 'g'n'i's'u' 'n'e'h'w' 'g'n'i'k'a'e'r'b' 'e'n'i'l' 'L'R'U' 'x'i'F' '%' '}'l'r'u'k'a'e'r'b'{']'s'k'a'e'r'b'n'e'h'p'y'h'['e'g'a'k'c'a'p'e's'u''n'E'E'I'''''''''''''''o's'p'm'o'c','l'a'n'r'u'o'j',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'s'n'e'h'p'y'h'[''''''}'l'r'u'{'e'g'a'k'c'a'p'e's'u''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''%'''''''''''''''%'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'n'o'i't'i'n'i'f'e'D'{'}'n'o'i't'i'n'i'f'e'd'{'m'e'r'o'e'h't'w'e'''''''''''''''''''''''''''''''''''''''}'m'e'r'o'e'h'T'{'}'m'h't'-'e'c'n'e'g'r'e'v'n'o'c'{'*'m'e'r'o'e'h't'w'e'n''n''n''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''x''''''''''''''''x'i'd'n'e'p'p'a'e'd'u'l'c'n'i'''i'''''d'''''n'''''e'''''p'''p'a'e'd'u'l'c'n'i'''''''''''''''''''''''''''''''''''''''}'a'''''e'u'r't'''m'''''m'''''e'L'{']'m'e'r'o'e'h't'['}'a'm'm'e'l'{'m'e'r'o'e'h't'w'e'n''n'}'m'e'r'o'e'h'T'{'}'m'e'r'o'e'h't'{'m'e'r'o'e'h't'w'e'n'''n'n'}'m'h't's'm'a'{'e'g'a'''''e's'l'a'f''''''k'''''c'a'p'e's'u''n's't'n'e'm'n'o'r'i'v'n'e' 'm'e'r'o'e'h'T' '%'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'T'D'R'C' 'r'o' 'e'p'y't'a't'a'd' 'd'e't'a'c'i'l'p'e'r' 'e'e'r'f'-'t'c'i'l'f'n'o'c' 'a'(' ''''''''''''''''''''''''''''''''''''''b'b'h't'a'm' '%' '}'b'm'y's's'm'a'''''''''' 's'k'r'o'w'''''''''''''''''''''''''''''''-'''''e'u'r't'''t'''''e'''''n''{'e'g'a'k'c'a'p'''''e'''''s'''''u''''''''n''''''''''''''''''''n'n'a'''''''''''''''''''''d'r'o'f's'''''''''''''''''''''.'R''''''''''''''''''''''''e'h't' 'h't'i'w' 'e'r'a' 'd'r'o'f's'e'r'e'B' '''''''B' '.'A' 'd'n'a' '''n'n'a'm'p'p'e'l'K' '.'M'''''''''''''''''''''''''''''.''''k''}'u'.'c'a'.'m'a'c'.'l'c'@'3'3'b'r'a'{'l'r'u'' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y''''''''''','e'g'd'i'r'b'm''''''''''b'm'n'a'C' ''r'o't'a'r'o'b'a'L' 'r'e't'u'p'm'o'C' ''''''''''''''''''''''''''''''''''''''''''''''''}'k'u'.'c'a'.'m'a'c'.'l'c'@'8'2'4'k'm'{'l'r'u'' ':'l'i'a'm'E'n'''t'c'e't'o'r'p''''''.'K'U' ','e'g'd'i'r'b'm'a'C' 'f'o' 'y't'i's'r'e'v'i'n'U' ','y'r'o't'a'r'o'b'a'L' 'r'e't'u'p'm'o'C''''''e'''''r'''''e'''''B''''' '''''.'''''R''''' '''''r'''''i'''''a'''''t'''''s'''''a'''l'''m'''''p'''''p'''''e'l'K' 'n'i't'r'a'M''''''''''''''''''t'''''n'''''e'''''m'n'o'r'i'v'n'''''''v'n'e' 'n'g'i'l'a'''''''''s's'e'r'p'm'o'c'o'''''' '''''%'''''''''''''''''''''''''''e't'i'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o' 't'n'e'm'y'o'l'p'e'd''''''''''p'e'c'''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'''''t'''''i'''''v'''''i'''''t'''''c'''''e'''''n'''''n'''''o'''''c''''' '''''k'''''r'''''o'''''w'''''t'''''e'''''n''''' '''''r'''''o'''''o'''''p''''' '''''h'''''t'''''i'''''w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''d'''''o'''''i'''''r'''''e'''''p''''' '''''r'''''e'''''f'''''f'''''u'''''s''''' '''''t'''''a'''''h'''''t' 's'e'c'i'v'e'd' 'e'l'i'b'o'm' 'r'o'f' 'e'l'b'a't'i'u's' 't''''''' 's'i' 'g'n'i'k'a'm' '''''''''''''''''''''''''''','y'l'r'a'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l's'u'o'e'n'a't'l'u'm'i'''s'''''t'i'''''''''''''''''''','e'n'o'r'p'-'r'o'r'r'e' 'd'n'a' 'd'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'a'l'e'd' 'l'a'm'i'n'i'm' 'h't'i'w' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 's'e'i'p'o'c' '''s'r'o't'a'r'o'b'a'l'l'o'c' 'r'e'h't'o' 'e'h't' 'n'o' 'd'e't'c'e'l'f'e'r'''''''''''''''''''''''''''''''z'i'n'o'r'h'c'n'y's'''''''n'o's'r'e'p' 'h'c'a'e'''''''''''''''''''''''''s'r'e'p' 'e'n'o' 'h't'i'w' '''''''''''''''''''''''''''''s'i''''''''''''''''e'''''m'''''a'''''s''''' '''''e'''''h'''''t''''' '''''n'''''o''''' '''''k'''r'o'w' 'o''''''''''''''''''''''''''''''''''''''''''''''a'm' 's't'i'd'e' ','e'c'i'v'e'd' 'n'w'o' 'r'i'e'h't' 's'e's'u' 'n'o's'r'e'p' 'h'c'a'e' 'f'i''t' 'e'l'p'o'e'p' 'l'a'r'e''' ';'''v'''''e'''s' 's'e'r'i'u'q'e'r' 'n'e't'f'o' 'k'r'o'w' 'e'v'''i'''m'i'S'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'i' '''}'z'k'i''''''''''''D''''M''''''f'o' 'g'n'i't'i'd'e' 'e'v'i''''''t'''''{'''''e'''''g'''''a'''''k'''''c'''''a'p'e's'u''n'''' 'e'r'u'''''''''''''''''''''''''''''''''''''''''''''''''''''''n'}'s'w'''o'''''r'''''r'''''a'''''{'''''y'''''r'''''a'''''r'''''b'''''i'''''l'''''z'''''k'''''i'''''t'''''e'''''s'''''u''''''''n'''''}'''''z'''''k'''''i'''''t'''''{'''''e'''''g'''''a'''''k'''''c'''''a'''''p'''''e'''''s'''''u''''''''''''''''''''n'''''''''''''''''s'''''''''''''''''m'''''''''''''''''a'''''''''''''''''r'''''''''''''''''g'''''''''''''''''a'''''''''''''''''i'''''''''''''''''D''''''''''''''''' '''''''''''''''''%''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'b' 'd'l'u'o'h's' 's'c'i't'n'a'm'e's' 'e'h't' 't'a'h'w' 'r'a'e'l'c'n'u' 's'i' 't'i' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'.'e'r'e'h' 's'e'o'g' 'n''''''''''''' 't'c'a'r''''''''''''''''s'd'r'o'w' '0'0'2'-'0'0'1' ':'''t's'b'a'''''''''''' 't'i'm'i'l' 'd'r'o'w' '%'n'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'''''w'''''d'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'l'a'n'o'i't'a'r'e'p'O'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''?')'g'n'i'r'e'd'r'o' 'h't'i'w' 's'''' '''''''''''''w' 's's'e's's'e'm' 'C''''h'c'R''''i'h'w'(' 's'e'c'a'f'r'e't'n'i' 'e'l'p'i't'l'u'm' 'e's'u' 'o's'l'a' 'd'n'a' 'y't'i'v'i't'c''''t'e'n'n'o'c's'i'd' 'f'o' 's'd'o'i'r'e'p' 'r'e'f'f'''''''p'p'u's'''''''''''''''''''s' 'o's'l'a' 'h'c'i'h''''''''''''' 'h'c'i'w' 's'm'e't's'y's' ''''''''''''''''''''''''''''''''''''''''''' 'e'v'i't'a'r'o'b'a'l'l'o'c''''''''''o'c'i'e'l'i'b'o'm' 'r'o'f' 'l'u'f'e's'u' 'y'l'r'a'l'u'c'i't'r'a'p' 's'i' 's'i'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'r'o'p'p'u's' 'd'l'u'o'h's' 'e'w' 't'a's''h't''''''''''m'o's' 'e'r'e'h' 'n'o'i't'n'e'm' 'O'D'O'T'%'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''%''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'.'.'e'v'i't'a'r'o'b'a'l'l'o'c' 'n'e't'f'o' 'e'r'a' 's'r'a'd'n'e'l'a'c' 'd'n'''''''d'j'a''''''''''''' 't'e'y' ','e'c'i'v'e'''''''''' 's't'r'o'p'p'u's'''d''''' '''''r'''''i'''''e'''''h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'n'e'r'r'u'c'n'o'c'''''''''''''''''''''''e'W''''''''''''''''','e'l'g'n'i's' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'e'd'o'm' 'r'u'o' 'o't'n'i' ''''''''''''''''''''''' 'a'(' 'm'i's'n''i'''a'h'')'c'e'm' 'l'a'r'e'n'e'g' 'a' 's'e'c'u'''''''''''''''''''''''''''''''''''.'T''''''e'''''s'i'h't'''r''''''''''''''''''','''''s'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'}'n'u'1'1'0'2':'o'r'i'p'a'h'S'{'e't'i'c''~'}'y'c'n'e't's'i's'n'o'c' 'l'a'u't'n'e'v'e' 'g'n'o'r't's'{'h'p'm'e'' 's'a' 'n'w'o'n'k' 't'n'e'm'e'r'i'u'q'e'r' 'a'(' 's'a'b' 't'n'e't's'i's'''n'''''''''''''''''''g'n'i'n'i'a'''''''''''''''''''''''''''''r'''' 'a'i'v'''C''''''''''''''''''''t'u'p'n'i' 'r'e's'u' 'r'e'h't'r'u'f''''''o''''' '''''s'''''n'''''a'''''e'm' 'c'i't'a'm'm'a'r'g'o'r'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'''''c'i't'a'm'm'a'r'g'o'r'p'(' '''''''''''''''''''s'''''n'''''a'''''e'''''m''''' '''''l'''''a'''''u'''''n'''''a'''''m''''' '''''r'''''o' 'c'i't'a'm'o't'u'a' 'h'''' 'g'u'o'r'h't''''''m'''''e'''''r''''' '''''y'''''n'''''a''''' '''''''''''o'''''''''''''''''''''''''''c'''''''''''''''''''''''''''''''''''''''''''''''h'c'i'h'w' 'n'o' 'e'r'u't'c'u''''''''''''''''s't'c'i'l'f'n'','o'c' 'h'c'','u's'''''''''''''''''''''u't'c'r't's' 'a' 's'e'd'i'v''''i'o'r'p' 'n'e'h't''''''''''''''''u'''''t'''''c'''''u'''''r'''''t'''''s''''' '''''a'''''t'''''a'''''d''''' '''''N'''''O'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'c'i't'n'a'm'e's' 'r'i'e'h't' 'n'o' 'g'n'i'd'n'e'p'e'd' 'y'l'l'a'u'n'a'm' 'r'o' 'y'l'l'a'c'i't'a''''t'm'o''''h't'u'a' 'r'e'h't'i'e' 'e'v'l'o's'e'r' 'n'e'h't' 'n'a'c' 's'n'o'i't'a'c'i'l'p'p'a' 'h'c'i'h'w' ''''''''''''''''''''''''' 'h'c'i'h'w' 's'm'''''''m's'i's'n'a'h'c''''t'e'm'''S''''''''''a'J''''J' 'e'h't' 'n'i' ''''''''''''''''''''''''''''''''''''''' 'r'o'f' 'n'o'i't'c'a'r't's'b'a' 'l'a'r'e'n'e'g' 'a' 'g'n'i'd'i'v'o'r'p' ','s'e'd'o''''d'n' 'd'o'r't'n'i''''''''''''''''''''''''''''''''''''h''''s'e's'u''''''''''''''''''''''W'''''''''''''''a' 's'e'c'u'd''''''''f'a'e'l' 'o't' ''o'r't'n'i''''''''''''''''''''''''''''' 's'e't'a'd'p'''''''p'd'u' 'g'n'i''''''''''''''''''''''''c'''''''''''a'o'r'p'p''T'''a' ''''''' 'a'r'u'O' '.'e'r'u't'c'u'r't's' 'a't'a'd' 'N'O'S'J' 'a' 'o't'n'i' 's'n'o'i't'a'c'i'f''''''''''''''''''''''''''''''''''''''''''''''y'g'o'l'o'p'o't' 'k'r'o'w't'e'n' 'y'n'a' 'n'o' 'd'e'y'o'l'p'e'd' 'e'b' 'n'a'c' 't'a'h't' 'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','s'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'f'o''.''' '''e'c'n'e'u'q'e's' 'y'n'a' 'r'e't'f'a' ''''''''''''''''''''''''''''''''w'o'h's' 'o't' 'm'e'r'o'e'h't' 'a' '''''''''''''''''''''''''''''''''''''''''''''''t'n'e'm'e'r'i'u'q'e'r' 's'i'h't' 's'e'i'f's'i't'a's' 'm'h't'i'r'o'g'l'a' 'r'u'o' 't'a'h't' 'e'v'o'r'p' 'e'w' '' 'l'l'a''''''''''''y'l'l'a'u't'n'e'v'e' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''e'k'1'1'0'2':'i'd'h'e'M',''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'p'o' 'f'o' 't'e's' 'e'm'a's' 'e'h't' 'd'e's's'e'c'o'r'p' 'e'v'a'h' 't'a'h't' 's'a'c'i'l'p'e'r' 'o'w't' 'y'n'a' ','y'l'l'a'm'r'o'f' 'e'r'o'm' 'r'o' ','e't'a't's' 'e'm'a's' 'e'h't' 's'd'r'a'w'o't' 'e'g'r'e'v'n'o'c' 's'a'c'i'l'p'e'r' 't'a'h't' 's'i' 'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 'f'o' 't'n'e'm'e'r'i'u'q'e'r' 'y'e'k' 'A'' '''''''''''''''''''''''''''''''''''''''''''''''''''.'''' 'x'i'd'n'e'p'p'a' 'e'h't' 'd'n'a' '}'e'c'n'e'g'r'e'v'n'o'c':'c'e's'{'f'e'r''~'n'o'i't'c'e'S' 'n'I'n'n''d'o'm' 'f'o' 'g'n'i'g'r'e''''''''''''''''''''''''''x'e'l'p'm'o'c' 'e'r'o'm' 'r'u'o'f' 'e'b'i'r'c's'e'd''''''m''''' '''''c'''''i'''''t'''''''''''''''''''''''''''''''r'e'v'r'e's' 'e'l'g'n'i's' 'a' 'g'n'i's'u' 't'u'o'h't'i'w' '''''''''''''a'''''m'''''o'''''t'''''u'''''a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''i'''''g'''''r'''e'm' 'e'h't''' '''''s'''''t'''''r'''''o'''''p'p'u's''''s' 'y'l'l'a'c'i'p'y't' '''''''''''''''''''''s't'n'a'p'i'c'''''i'''''t'''''r'''''a'''''p''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s't'c'i'l'f'n'o'c' 'l'a'i't'n'e't'o'p' 'd'r'o'c''''''m'u'r'o'u'q''''''''''''''''''e'r' 'o't' 'r'e't's'i'g'''''''g's'e'r' 'e'u'l'''''''e'l'a'v'-'i't'l'u'm' 'a' 'e'r'i'u'q'e'r' 'y'a'm''''''''''''y'n'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'n'o' 'y'n'a' 't'a' 'e'n'i'l'f'f'o' 'e'''''''''''''''''''''''''''''t''' ','s'm'u'r'o'u'q' '''''t'''''u'''o'h't'i'W''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a' 'm'u'r'o'u'q' 'a' 'h'c'a'e'r' 'o't' '''e'''''l'''g'g'u'r't's'''''r'e't's'''''''e't'i'g'e'r' 'e'u'l'a''''a'v'-'i't'l'u'm' 'a' 'f'o' 'e's'u' 'e'h't' 's'e'r'i'u'q'e'r' 'h'c'a'','o'r'p'p'a' 'r'u'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a' 't'r'o'p'p'u's'''''''''''''''''''''''''''''''''''''''''''''''''''''''t'r'o'p'p'u's' 'o't' 'd'e'e'n' 'e'w' 's'e's'a'c' 'e'm'o's' 'n'i' ','r'e't'a'l' 'e'e's' 'l'l'a'h's' 'e'w' 's'A' ''''''' 'i''''t''''' '''''s'''''s'''''o'''''r'''''c'a' 'd'e''T'''''''','''w'''''d'''''t'''''a'''''c'''''i'''''l''''''''''''''''''''''''''s'a' 'l'l'e'w' 's'a''''''''''''d'''n'a'''r'o'''''','''y't'i'''''l'''''i'''''b'''''a'z'i'l'a'''T' '.''''''i'''''r'''''e'''''s''''' ''''''''''p'''''e'''''''r''''''''''''''''' ''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-'l'l'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''c'''''i'''''''''''''''''v''''''''''''''''''''''''''''''''''''''''''''y'''''t'''''i'''''l'''''i'''''b'''''a'''''l'''''i'''''a'''''v'''''a''''' '''''''''''''''''e'''''d''''' '''''r'''''i''''''''''''''r'''''e'''''h'''''t''''' '''''s'''''s'''''o'''''r'''''c'''''a''''' '''''d'''''e'''''g'''''r'''''e'''''m''''' '''''r'''''e'''''s'''''u''''' '''''e'''''l'''''g'''''n'''''i'''''s''''' '''''a''''' '''''r'''''o'''''f''''' ''''''''''m'h't'i'r'o'g'l'a'''''''''''''''e'''''''''''r'''''a''''' '''''s't'n'e'm'u'c'o'd' 't'x'e't' 'e'm'o's' '''o't''':'e'''''''e'''''''e'm' 'o't' 'y'''m'''''o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'o' 'd'a'e'h'''y'l'r''d'''''''e''''''e'''v'o' 'a't'a'd'a't'e'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'n'o'i't'n'e'm'e'r'o'f'a''''''''''''''''''''''''''''''''''r'i'e'h't''''''''''s't'i' 'f'''''a' 's'i'''o''''''' 'h'c'a'e'''''''''''g'n'i't's'''''i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'p'a'm' 'd'n'a' 's't's'i'l' 'T'D'R'C' 'r'o'f' ''x'e' ''''''''''''''''''s'm'h't'i'r'o'g'l'a' 'e's'e'h't' 'f'o' 'l'l'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'l'o'c'o't'o'r'p' 'A'G'R' 'e'h't' 'f'o' 'f'o'o'r'p' 's's'e'n't'c'e'r'r'o'c' 'a' 'e'd'i'v'o'r'p' 'd'n'a' ','s't's'i'l' 'd'e'r'e'd'r'o' 'f'o' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'f'o' 'm'e'l'b'o'r'p' 'e'h't''''''''''''''''''''''''' 'e'z'y'l'a'n'a' 'r'e'h't'r'u'f' '}'h'k'6'1'0'2':'a'y'i't't'A'{'e't'i'c''~'.'l'a' 't'e' 'a'y'i't't'A' '''''n'' 'a''e'h'w'''t''''s'''''''''''''''o'''''h''''o'c'i'd' 'e's'l'a'f''''c' 'a' 'e'k'i'l' 's'm'e'e's' 's'i'h'T' '''O'D'O'T''n''''''''''''''''''s'a' 'l'l'e'w' 's'a' 's'n'o'i't'a'c'i'l'p'p'a' 'e's'e'h't' 'h't'i'w' ''''''''''''''''''''''''''e'''''''''''''''''''''''''''''''n'''''.'''''e'''''l'''''b'''''i'''''s'''''s'''''o'''''p''''' '''''r'''''e'''''v'''''e'''''n''''''''''''''v'''''e'''''h'''''w''''' '''''d'''''e'''''d'''''i'''''o'''''v'''''a''''''b' 'd'l''''''''''''''''''''' ','d'n'a'h' 'r'e'h't'o' 'e'h't' 'n'O'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''A''' '''''''''''''s'p'a'm' 'd'e't's'e'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s's'e'n'e'''''''''''''''''''.'N'O'S'J' 'f'o' 'y't'i'v'i's's'e'r'p'x'e' 'e'h't' 'e'r'u't'p'a'c' 't'o'n' 's'e'o'd' 'e'r'u't'c'u'r't's' 'a'''''''''''a't'a'd' 'p''''''''''''B'D'h'c'u'o'C' 'd'n'a' ''a'm' 'a' 't'u'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'''','e'c'1'0'0'2':'y'e's'm'a'R','h'j'8'9'9'1':'m'a'i'n'a'm'a'r'b'u's'a'l'a'B'{'e't'i'c''~'n'o'i't'a'z'i'n'o'r'h'c'n'y's' 'm'e't's'y's'e'l'i'f' 'f'o' 't'x'e't'n'o'c' 'e'h't' 'n'i' 'd'e'i'd'u't's' 'n'e'e'b' 's'a'h' 's'e'r'u't'c'u'r't's' 'e'e'r't' 'n'o' 's'e't'a'd'p'u' 't'n'e'r'r'u'c'n'o'c' 'g'n'i'v'l'o's'e'R'n'n'o'h't'i'w' '-'-'~'''''''''''''''''''''''''''''''''''''''''''''''''''' 'h'c'u's' ','}'l'm'x'-'n'o's'j':'c'e's'{'f'e'r''~'n'o'i't'c'e'S' 'n'i' '''''''''''''''''''''''''''''''''''''''d'e's's'u'c's'i'd' 's'A' '.'s't's'i'l' 'd'e'r'e'd'r'o' 'd'e't's'e'n' 'f'o' 'e'e'r't' 'a' ','s'i' 't'a'h't' '-'-'~'s't'n'e'm'u'c'o'd' 'L'M'X' 'f'o' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 't'r'o'p'p'u's' 'o't' '}'x'h'0'1'0'2':'s's'i'e'W'{'e't'i'c''~'t'o'o'g'o'L' 'e'z'i'l'a'r'e'n'e'g' '}'h'i'0'1'0'2':'n'i't'r'a'M'{'e't'i'c''~'.'l'a' 't'e' 'n'i't'r'a'M'n'n''u'o'h's' 'e'r'o'f'e'r'e'h't' 'd'n'a' ''''i'''i'''''''''''''''''''''''''''''''''''''''''''''''''' '''W'W'L''''''''''''e'l'p'm'a'x'e' 'r'o'f''''''''''''''''''y'''''''''''''''''l'''''''''''''''''r'''''''''''''''''a'''''''''''''''''l'''''''''''''''''u'''''''''''c'''''i'''''t'''''r'''''a'''''p''''' '''''s'''''i''''' '''''n'''''o'''''i'''''t'''''u'l'o's' 'r'u'O''''''''''''''t'I'''''''''''''''''''''''''''''g'n'i'g'r'e'm' 'e'h'T''''''''''''''''''''''''' 'g'n'i'g'r'e'M' ''''i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''u'o'y'a'B''''''''''''''''''''?'t'n'i'o'p' 's'i'h't' 't'a' 'y't'e'l''''''''''''''''''g''''''''''''''''''n'o'i't'a'c'i'l'p'p'a' 'e'h't' 'y'b''''''''''''''''''''n'i'''''''''''''''''''''''''''D''''S''''''''''''''''''''''''''a' 'y't'l'e''''l't'b'u's''''c' 's'i'h't' 'y''''u'e'v'''''''u'o'y'a'B'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'a't'a'd''''''''''''''''''''''''''''''''''''''''''''''''''''E'''''''E'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'n'o'i't'u'c'e'x'e'''']'p'[' 'l'a'i't'n''''''}'}''e'u'q'e's' 'n'i''''''''''''''''''' 'r'e'd'n'u' 'e's'i'r'a' 't'o'n' 'o'd' 't'a'h't' 's'e'r'u't'c'u'r't's' 'd'e't's'e'n' 't'n'e'r'r'u'c'n'o'c' 'f'o' 's'e'i't'i'r'a'i'l'u'c'e'p' 'e'm'o's' 'e't'a'r't's'u'l'l'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 's'e'l'p'm'a'x'e' 'e'm'o's' 'e'v'i'g' 'd'n'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'h't'4'1'0'2':'s'i'l'i'a'B'{'e't'i'c''~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('t'e'g')''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('t'e'g')''''.'''c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e''''''''''''''n'e'h'w'''''''''''''''''''''''''''''''''''''''''''''''''e's'i'r'a' 's'e'i's''t'l'u'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'h'g'i'''''''i'g'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'n'o'i's'i'c'e'd' 'n'g'i's'e'd' 'r'u'o' 'r'o'f' 'e'l'a'n'o'i't'a'r' 'e'h't' 'n'i'a'l'p'x'e' 'd'n'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m'h't'i'r'o'g'l'a' 'r'u'o' 'y'b''''i' 'd'e'l'd'n'a'h' 'e'r'a' 'y'e'h't' 'w'o'h' 'e't'a'r't's'n'o'm'e'd' 'd'n'a''''''''''''''',''''''''''''''''''''''''''''''''''''e'r'a' '''''''''''''''r'u'c'c'o' 'n'a'c' 't'a'h't' 's'n'o'i't'a'u't'i's' ''''''''''''''''''''''''' 'w'o'h's'''''''''''''''''''''''''''''''e't'a'r't's'u'l'l'i' 'e'w' 's'e'l'p'm'a'x'e' 'g'n'i'w'o'l'l'o'f' 'e''''''''''''''''l'o'f'e' 'h't' 'n'I'' '.'s'e'r'u't'c'u'r't's' 'a't'a'd' 'd'e't's'e'n' 'd'n'a' 'y'c'n'e'r'r'u'c'n'o'c'i'f'f'i'd' ',''''''''''''''''' ','r'e'v'e'w'o'H' ''t'a'l'e'r':'c'e's''''''''''''''.')'}'{'f'e'r''~'n'o'i't'c'e'S' 'e'e's'(' 'e'r'u't'a'r'e't'i'l' 'e'h't' 'n'i' 'd'e'r'o'l'p'x'e' 'y'l'h'g'u'o'r'o'h't' 'n'e'e'b' 'e'v'a'h' 'e'r'u't'c'u'r't's' 'a't'a'd' 't's'i'l' 'r'o' 'p'a'm' 't'a'l'f' 'a' 'g'n'i't'i'd'e' 'y'l't'n'e'r'r'u'c'n'o'c' 'f'o' 's'c'i't'n'a'm'e's' 'e'h't' 'd'n'a' ','n'w'o'n'k'-'l'l'e'w' 'e'r'a' 'e'r'u't'c'u'r't's' 'a't'a'd' 'N'O'S'J' 'a' 'g'n'i't'i'd'e' 'f'o' 's'c'i't'n'a'm'e's' 'l'a'i't'n'e'u'q'e's' 'e'h'T''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'e'e'w't'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''c'i't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'p'[''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.')'}'t'i'd'e'-'t'x'e't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'o's'l'a' 'e'e's'(' 'g'n'i'r't's' 'e'l'b'a't'i'd'e' 'y'l'e'v'i't'a'r'o'b'a'l'l'o'c' 'a' 'r'o'f' 's'r'e't'c'a'r'a'h'c' 'f'o' 't's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'r'o' ','d'e't'n'e'm'e'r'c'e'd' 'd'n'a' 'd'e't'n'e'm'e'r'c'n'i' 'e'b' 'y'l'n'o' 'n'a'c' 't'a'h't' 'r'e'b'm'u'n' 'a' 'r'o'f' 'T'D'R'C' 'r'e't'n''''t'u'o'c' 'a' ','e'l'p'm'a'x'e' 'r'o'f' ':'e'c'a'l'p' 's't'i' 'n'i' 'd'e't'u't'i't's'b'u's' 'e'b' 'd'l'u'o'c' 's'T'D'R'C' 'r'e'h't'O' '.'d'e'n'i'f'e'd' 's'i' 'n'o'i't'c'n'u'f'''i'a'm'o't'u'a''''''''''''''''''''''' 'e'g'r'e'm' 'r'e'h't'o' 'o'n' 'h'c'i'h'w' 'r'o'f' 's'e'u'l'a'v' 'e'v'i't'i'm'i'r'p' 'r'o'f' 'y'l'n'o' 't'i' 'e's'u' 'e'W''''''''''''' 's't'I' '.'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 'y'n'a' 'm'r'o'f'r'e'p' 'y'l'l'a'u't'c'a' 't'o'n' 's'e'o'd' 't'i' 'e'c'n'i's' ','T'D'R'C' 'e'v'i's's'e'r'p'm'i' 'n'a' 'y'l'd'r'a'h' 's'i' 'r'e't's'i'g'e'r' 'e'u'l'a'v'-''''='i't'l'u'm' 'A'n'n'''b''n'n'' 'n'o'i't'c'a'r'e't'n'i' 'e'h't' 'o't' 'e'u'd' 's'i' 'a't'a'd' 'N'O'S'J' 'r'o'f' 'T'D'R'C'''''''''''''''' 'N'O'S'J' 'a' 'g'n'i'n'i'f'e'd' 'f'o' 'y't'l'u'c'i'f'f'i'd' 'e'h'T'''''''''''''''''''''''''''''''''''''''.'a'c'''''i'''''l'''''p'''''e'''''r''''' '''''e'''''''''''''''''n'''''''''''''''''o''''''''''''''''' '''''''''''''''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''e'''''r'''''t''''''''''' ''''''''''''''''''''''''''$'''''p'''''$''''' ''''''''e'''''''''''h'''''t''''' '''''f'''''o''''' '''''s'''''l'''''e'''''v'''''e'''''l''''' '''''t'''''''''''''''''''''''''''''''''''''' '''''$'''''q'''''$''''' '''''a'''''c'''''i'''''l'''''p'''''e'''''r''''''''n'''''e'''''r'''''e'''''f'''''f'''''''''''''''''i'''''''''''''''''d''''''''''''''''' '''''''''''''''''t'''''''''''''''''a''''''''''''''''' '''''''''''''''''s'''''''''''t'''''i'''''d'''''e''''' '''''t'''''n'''''e'''''r'''''r'''''u'''''c'''''n'''''o'''''c''''' '''''f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'A''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'A''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'''''''''''''r'e't'F'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'A''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''e'''''v'''''o'''''m'''''e'''''r'''''-'''''p'''''a'''''m''''':'''''g'''''i'''''f'''''{'''''f'''''e'''''r''''''''~'''''e'''''r'''''u'''''g'''''i'''''F''''' '''''n'''''i''''' '''''n'''''w'''''o'''''h'''''s''''' '''''s'''''a''''' ''''','''''''''''''':'''''''''''''''''s'''''''''''''''''e'''''''''''''''''g'''''''''''''''''n'''''''''''''''''a'''''''''''''''''h'''''''''''''''''c''''''''''''''''' '''''''''''''''''l'''''''''''''''''l'''''''''''''''''a''''''''''''''''' '''''''''''''''''e'''''''''''''''''v'''''''''''''''''r'''''''''''''''''e'''''''''''''''''s'''''''''''''''''e'''''''''''''''''r'''''''''''''''''p''''''''''''''''' '''''''''''''''''t'''''''''''''''''a'''''''''''''''''h'''''''''''''''''t''''''''''''''' '''''s''''' '''s'i''''''''''''']'p'['t'a'm''''''''''''''''''''''''''''c'''''i'''''t'''''n'''''a'''''m'''e's' 'e'g'r'e'm''''''''''m' 'a' 'e'n'i'f'e'd' 'e'w' ','d'a'e't's'n'I' '.'s'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'o't' 'e'u'd' 't's'o'l' 'e'b' 'd'l'u'o'h's' 't'u'p'n'i' 'r'e's'u' 'o'n''''''''''''''''''' 's't'i'd'e' 't'a'h't'''''''''' 'f'o' 't'n'e'm'e'r'i'u'q'e'r' 'r'u'o' 't'e'e'm' 't'o'n' '''''r'e't'f'A''d'l'u'o'w' 'r'o'i'v'a'h'e'b' 't'a'h't' ','r'e'v'e'w'o'H' '.')'s'r'o'l'o'c' 'f'o' 'p'a'm' 'e'r'i't'n'e' 'e'h't' 'f'o' 't'u'o'-'g'n'i'k'n'a'l'b' 'e'h't' 'y'b' 'n'e'd'd'i'r'r'e'v'o' 'e'b' 'd'l'u'o'w' 't'i' 'e'c'n'i's' ','d'e'd'r'a'c's'i'd' 'e'b' 'd'l'u'o'w' '''''d'e'r'`'`' 'f'o' 'n'o'i't'i'd'd'a' 'e'h't' 'n'a'e'm' 'd'l'u'o'w' 't'a'h't' ','e's'a'c' 's'i'h't' 'n'i'(' 'e'e'r't'b'u's' 't'a'h't' 'n'i'h't'i'w' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'e'd'i'r'r'e'v'o' 's'y'a'w'l'a' 'e'e'r't' 'a' 'f'o' 's'l'e'v'e'l' 'r'e'h'g'i'h' 't'a' 's't'i'd'e' 't'e'l' 'o't' 'e'b' 'd'l'u'o'w' 't'c'i'l'f'n'o'c' 'a' 'h'c'u's' 'g'n'i'l'd'n'a'h' 'f'o' 'y'a'w' 'e'l'b'i's's'o'p' 'e'n'O'n'n'.'e'e'r't' 'e'h't' 'f'o' 'l'e'v'e'l' 'r'e'h'g'i'h' 'a' 't'a' 's'r'u'c'c'o' 's'r'o'l'o'c' 'f'o' 'p'a'm' 'e'h't' 'f'o' 'l'a'v'o'm'e'r' 'e'h't' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'l'i'h'w' ','e'e'r't' 'e'h't' 'f'o' 'l'e'v'e'l' 'r'e'w'o'l' 'a' 't'a' 's'r'u'c'c'o' '''''d'e'r'`'`' 'f'o' 'n'o'i't'i'd'd'a' 'e'h't' 't'a'h't' 's'i' 'e'l'p'm'a'x'e' 's'i'h't' 'n'i' 'y't'l'u'c'i'f'f'i'd' 'e'h'T' '''n'n'.'y'e'k' 't'a'h't' 'o't' 'p'a'm' 'y't'p'm'e' 'w'e'n' 'a' 'n'g'i's's'a' 'n'e'h't' 'd'n'a' ','p'a'm' 'r'e't'u'o' 'e'h't' 'm'o'r'f' '''''s'r'o'l'o'c'`'`' 'y'e'k' 'e'r'i't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'y''''''''''''j'j'j'j''w'3'1'0'2':'n'w'o'r'B','s'h'4'1'0'2':'n'w'o'r'B'{'e't'i'c''~'k'a'i'R' 'n'i' 's'p'a'm' 'T'D'R'C' 'f'o' 't'a'h't' 's'e'h'c't'a'm'''''''''' 's'i' 'e'n'i'f'e'd' 'e'w' 'r'o'i'v'a'h'e'b' 'e'h'T''n'n'n'e' 'e'h't' 'e'v'o'm'e'r' 'y'l't'n'e'l'a'v'i'u'q'e' 'd'l'u'o'c' '$'q'$' ',''o' 'e'l'p'm'a'x'e' 'n'a' 's'e'v'i'g' '''o''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'a'm' 'y't'p'm'e' 'n'a' 'g'n'i'n'g'i's's'a' 'f'o' 'd'a'e't's'n'I' ''''''''''''''('''''t'''''e'''''g''''')''''''.'''d'e'm'r'o'f'r'e'p' 'n'e'e'b' 'e'v'a'''n'n'h' 'y'e'h't' 'r'e't'f'a' 'l'i'a'f' 't'o'n'n'a'c' 's'n'o'i't'a'r'e'p'o' 't'a'h't' 'h'c'u's' 'd'e'n'i'f'e'd' 'e'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'h't' 'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':'t'l'u's'e'r' 'd'e'g'r'e'm' 'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' ';'''''c'`'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'b' ''''b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'p'a' 'e'h'T' '.'e'c'a'p's'e'm'a'n' 'e't'a'r'a'p'e's' 'a' 's't'i'b'a'h'n'i' 'e'p'y't' 'h'c'a'e' 'o's' ',')'y'l'e'v'i't'c'e'p's'e'r' 'e'u'l'a'v' 'r'e't's'i'g'e'r' 'r'o' ','t's'i'l' ','p'a'm' 'a' 'r'o'f' '}'T'g'e'r'{'f's't'x'e't'' 'r'o' ',''''''''''''}'T't's'i'l'''''''e'r'{'f's't'x'e't'' 'r'o' '}'T'p'a'm'{'f's't'x'e't''(' 'n'o'i't'a't'o'n'n'a' 'e'p'y't' 'a' 'h't'i'w' 'y'e'k' 'p'a'm' 'h'c'a'e' 'g'n'i'g'g'a't' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'a't' 'e'p'y't' 'a' 'g'n'i'd'd'a' 'y'b' 's'i'h't' 'o'd' 'e'W' '.'y'l'e't'a'r'a'p'e's' 's'e'u'l'a'v' 'h't'o'b' 'e'v'r'e's'e'r'p' 'e'w' 'o's' ','d'e'g'r'e'm' 'e'b' 'y'l'l'u'f'g'n'i'n'a'e'm' 't'o'n'n'a'c' 's''V'''e'p'y't'a't'a'd' 'e's'e'h'T' '.'t's'i'l' 'a' 's't'r'e's'n'i' '$'q'$' 's'a'e'r'e'h'w' ','p'a'm' 'd'e't's'e'n' 'a' 's't'r'e's'n'i' '$'p''''q'$' ':'s'e'u'l'a'v' 's'a' 's'e'p'y't'a't'a'd' 't'n'e'r'e'f'f'i'd' 'h't'i'w' 'o's' 'o'd' 'y'e'h't' 't'u'b' ','y'e'k' 'p'a'm' 'e'm'a's' 'e'h't' 't'r'e's'n'i' 'y'l't'n'e'r'r'u'c'n'o'c' 's'a'c'i'l'p'e'r' 'o'w't''''$' 'e'r'e'h'w' ','}'s't's'i'l'-'o'w't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'o'i't'a'u't'i's' 'e'h't' 'f'o' 't'n'a'i'r'a'v' 'a' 's'e't'a'r't's'n'o'm'e'd' '}'h's'a'l'c'-'e'p'y't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F'n'n'.''`' 'd'n'a' '''''a'`'`'''''''a'a' 'n'e'e'w't'e'b' 'd''''''' 'c'e't'r'e's'n'i' 'e'r'a' '''''z'`'`' 'd'n'a' '''''x'`'`' 'h't' 'n'i' 'd'e'v''''';''''''''''''''''''`'`'''''''z'z'r'e's'e'r'p' 'e'r'a' 's'e'g'n'a'h'c' 'l'l'A' ''''''''''''''''''''''''''''''''';''''''''''''''''''''''''''' 'd'n'a' ','d'e't'e'l'e'd' 's'i' '''''b'`'`' ','''''a'`'`' 'e'r'o'f'e'b' 'd'e't'r'e's'n'i' 's'i' '''''y'`'`' '.'s'r'e't'c'a'r'a'h'c' 'f'o' 't's'i'l' 'a' 's'a' 't'n'e'm'u'c'o'd' 'e'h't' 'g'n'i't'a'e'r't' 'y'b''''''''''''''''''''s'o'i'r'a'n'e'c's'''''''''''''''''''''''''s'''''''' 's''a' 'g'n'i's'u' ','''''''''''''''''''''''''}'h's'a'l'c'-'e'p'y't':'g'i'f'{'f'e'r''~'d'n'a' ''d'e't'n'e'm'e'l'p'm'i' 'e'b' 'n'a'c' 'r'o't'i'd'e' 't'x'e't' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'a' 'w'o'h' 's'w'o'h's' '}'t'i'd'e'-'t'x'e't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F'n'n' 's'm'e't'i' '''''''''''''.'r'e'd'r'o' 'e'm'a's' 'e'h't' 'h't'i'w' 'p'u' ''E'''d'n'e' 's'a'c'i'l'p'e'r' 'l'l'a' 't'a'h't' 'd'e'd'i'v'o'r'p' ','''''m'a'h' ','s'g'g'e' ','r'u'o'l'f' ','k'l'i'm'`'`' 'd'n'a' '''''r'u'o'l'f' ','k'l'i'm' ','m'a'h' ','s'g'g'e'`'`' 'n'e'e'w't'e'b' 'e'c'i'o'h'c' 'y'r'a'r't'i'b'r'a' 'n'a' 'e'k'a'm' 'n'a'c' 'm'h't'i'r'o'g'l'a' 'e'h't' 'o's' ','t'l'u's'e'r' 'd'e'g'r'e'm' 'e'h't' 'n'i' 't's'r'i'f' 'r'a'e''''''r'e't'f'A'p'p'a' 'd'l'u'o'h's' 's'm'e't'i' 's'''a'c'i'l'p'e'r' 'h'c'i'h'w' 'n'o' 'n'o'i't'a'm'r'o'f'n'i' 'o'n' 's'i' 'e'r'e'h'T' '.'t'l'u's'e'r' 'd'e'g'r'e'm' 'e'h't' 'n'i' '''''k'l'i'm'`'`' 'r'e't'f'a' 's'r'a'e'p'p'a' '''''r'u'o'l'f'`'`' 'd'n'a' ','''''s'g'g'e'`'`' 'r'e't'f'a' 's'r'a'e'p'p'a' '''''m'a'h'`'`' 'o's' ','a'c'i'l'p'e'r' 'h'c'a'e' 't'a' 'd'e't'r'e's'n'i' 's'm'e't'i' 'f'o' 'y'c'n'e'c'a'j'd'a' 'd'n'a' 'g'n'i'r'e'd'r'o' 'e'h't' 'e'v'r'e's'e'r'p' 'e'W' '.'y'l'l'a'c'i't'a'm'o't'u'a' 'd'e'g'r'e'm' 'e'b' 'n'a'c' 'y'e'h't' 'o's' 'd'n'a' 's't's'i'l' 'e'r'a' 's'e'u'l'a'v' 'h't'o'b' ','}'s't's'i'l'-'o'w't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 't'u'b' ','n'o'i't'a'c'i'l'p'p'a' 'e'h't' 'y'b' 'd'e'v'l'o's'e'r' 'e'b' 'o't' 't'f'e'l' 'e'r'e'w' 'y'e'k' 'p'a'm' 'e'm'a's' 'e'h't' 'o't' 's't'n'e'm'n'g'i's's'a' 't'n'e'r'r'u'c'n'o'c' ','}'n'g'i's's'a'-'r'e't's'i'g'e'r':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'f'o' 'e's'a'c' 'e'h't' 'n'I' '.'t's'i'l' 'e'h'''''s'g'g'e'''t'''''''''''r'e't'f'A'' 'o't' 's'm'e't'i' 'd'd'a'''''s'g'g'e''' '''''d'''n'a' ','''''y'r'e'c'''''r'e't'f'A''o'r'g'`'`' ''''''r'e't'f'A'y'e'k' 'p'a'm' 'e'm'a's' 'e'h't' 'r'e'd'n'u' 't's'i'l' 'g'n'i'p'p'o'h's' 'w'e'n' 'a' 'e't'a'e'r'c' 'y'l't'n'e'd'n'e'p'e'd'n'i' 'h'c'a'e' '$'q'$' 'd'n'a' '$'p'$' ','e'r'e'H' '.'y'e'k' 'p'a'm' 'e'm'a's' 'e'h't' 't'r'e's'n'i' 'y'l't'n'e'r'r'u'c'n'o'c' 'n'a'c' 's'a'c'i'l'p'e'r' 'o'w't' ':'s'p'a'm' 'h't'i'w' 'm'e'l'b'o'r'p' 'r'e'h't'o'n'a' 's'e't'a'r't's'u'l'l'i' '}'s't's'i'l'-'o'w't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F'n'n''a' 's'T'D'R'C' 's'a'e'r'e'h'w' ','s'k'c'a'b'l'l'o'r' 'e'l'd'n'a'h' 'y'l't'i'c'i'l'p'x'e' 'o't' 'n'o'i't'a'c'i'l'p'p'a' 'e'h't' 'g'n'i'r'i'u'q'e'r' ','k'c'a'b' 'd'e'l'l'o'r' 'e'b' 'y'a'm' 's'n'o'i't'c'a's'n'a'r't' 'e'v'i't'a't'n'e't' 't'a'h't' 's'i' 'e'd'i's'n'w'o'd' 'e'h'T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'p'['''''''''''''''''' 'h'c'i'h'w' ','t's'a'c'd'a'o'r'b' 'c'i'm'o't'a' 's'e'r'i'u'q'e'r' 't'i' ','r'e'v'e'w'o'H' '.'s'T'D'R'C' 'g'n'i's'u' 'd'e's's'e'r'p'x'e' 'e'b' 't'o'n'n'a'c' 'd'n'a' 'n'o'i't'a'z'i'l'a'i'r'e's' 'e'r'i'u'q'e'r' 'h'c'i'h'w' ','s't'n'i'a'r't's'n'o'c' 's's'e'n'e'u'q'i'n'u' 's'a' 'h'c'u's' 's't'n'a'i'r'a'v'n'i' 'l'a'b'o'l'g' 's's'e'r'p'x'e' 'o't' 'e'l'b'a' 'g'n'i'e'b' 'f'o' 'e'g'a't'n'a'v'd'a' 'e'h't' 's'a'h' 'h'c'a'o'r'p'p'a' 's'i'h'T' 'n'o'c' 'e'w' 'n'a'C' '.')'n'o'i't'n'e'v'r'e't'n'i' 'r'e's'u' 'y'l'b'i's's'o'p' 'd'n'a'(' 's'n'o'i't'u'l'o's' 'c'i'f'i'c'''''''''''''f'i'c'i'e'p's' 'n'o'i't'a'c'i'l'p'p'a' 'e'r'i'u'q'e'r' 'n'e'h't''''''''''e'h't' 'h'c'i'h'w' 's'''''''d'e'r'e't's'i'g'e'r' 'd'e'u'l'a'v'-'i't'l'u'm' 'g'n'i''''t'c'u'd'o'r't'n'i' 'y'b' 's'i'h't' 'o'd' 'e'w' ','s'd'o'm' 't'n'e'r'r'u'c'n'n'o'c' 'e'g'r'e'm' 'y'l'l'a'c'i't'a'm'o't'u'a' 'e'w' 't'a'h't' 'e'''' 'u'r't' 'y'l'l'a'c'i'n'h'c'e''''''''''''''''t' 'e'u'r't' 's'i' 't'i' 'e'l'i'h'w' 'O'D'O'T'%'n''''''''''''''''s'''''e'''''c'''''i'''''v'''''e'''''d'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('t'e'g'.''''''''''''''')''''''''''''''''''''''''''''''''''' 'd'n''''''('''''''''''''''''''''''''''''''''''''''''''''''''''''''')'t'n'e'm'e'l'e' 't's'i'l' 't's'r'i'f' 'e'h't' 'e'r'o'f'e'b' 'n'o'i't'i's'o'p' 'l'a'u't'r'i'v' 'a'(' '''''''''''''''''''''''''''h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t's'i'l' 'a' 'f'o' 'd'a'e'h' 'e'h't' 'g'n'i't'a'c'i'd'n'i' 'r'o's'r'u'c' 'l'a'i'c'e'p's' 'a' 's'i' '}')'0'('x'd'i'.'{'t't't'x'e't'' 'd'n'a' ','1' 'm'o'r'f' 'g'n'i't'r'a't's' 'd'e'x'e'd'n'i' 'e'r'a' 's't's'i'L' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'$'n'$' 'e'h't' 's't'c'e'l''''e'e''''l's' '}')'{'t't't'x'e't''$'n''''''''''''''''''''''e'h't'''''''''''''''''}'n'{'t'i'h't'a'm''$''x'd'i'.'''a''''' ''''''','y't'i'v'''''''''''o't' 'g'n''''''r'e't'f'A'i't'i'r'w'''i'''''''''''''''''''t'''''c''''''''''s'n'g'i's's'a'''''''''e'''''''n'''''n'''''o'''''''''r'e't'f'A''c'''''s'''''i'''''d''' 'f'o' 's'd'o'''''''''i'''''''''''''''''''''''''''''''''''''''''{'h'p'}''n'a'''''''''m''''''''''''''''''''''t'n'e'm'e'l'e' 't's'i'l' 'g'n'i't's'i'x'e'''e'''''''''''''''''''''''''''''''''''''''''''''''''''r'o's'r'u'c' 'e'h't' 'y'b' 'd'e'i'f'i't'n'e'd'i' 'r'e't's'i'g'e'r' 'e'h't' 'f'o' 'e'u'l'''a'''''v''''' '''''e'''''h'''''t''''' '''''s'''''t'''''e'''''s''''' ''''''''''''''r'''''''''''''''''''''''''''''''''''e'''''p''''' '''''m'''''o'''''r'''''f''''''''s'g'g'e'''''' '''''''''r'''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'''''''''''''t' '1' 'x'e'd'n'i' 'm'o'r'f' 's'e'v'o'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'f'o' 'e'c'n'e's'e'r'p' 'e'h't' 'n'i' 's'c'i't'n'a'm'e's' 'e'l'b'a'r'i's'e'd' 'g'n'i'v'e'i'h'c'a' 'r'o'f' 'l'u'f'p'l'e'h' 's'i' 'e'r'u't'a'e'f' 's'i'h't' ','r'e't'a'l' 'e'e's' 'l'l'a'h's' 'e'w' 's'A'''''''''''''''' 's'i'h'T' ''''''''.'''''s'g'g'e'`'`' 'r'e't'f'a' 'd'e't'r'e's'n'i'''''''f'a' 's's'e'l'e'h't'r'e'v'e'n'''''''''''''''''''S''''''''''''''''''''''''''''''''''}'s'c'i't'n'a'm'e's':'c'e's'{'l'e'b'a'l''}'s'c'i't'n'a'm'e's' 'l'a'm'r'o'F'{'n'o'i't'c'e's''n'n'' 's'i' '''''k'l'i'm'`'`''''''''''''' 'e'h't' 't'u'b' ','2' 'x'e'd'n'i' 's'a'h' '''''s'g'g'e'`'`' 't'n'e'm'e'l'e' 'e'h't' ','''''e's'e'e'h'c'`'`' 'f'o' 'n'o'i't'r'e's'n'i' 'e'h't' 'r'e't'f'a' ':'x'e'd'n'i' 's't'i' 'y'b' 't'o'n' ','y't'i't'n'e'd'i' 'y'b' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 's'e'i'f'i't'n'e'd'i' '}'s'g'g'e'{'t't't'x'e't''''''''''''''''''''i't'n'e'd'i' '''r'''''o'''''s'''''r'''''u'''''c''''' '''''e'''''h'''''t''''' '''''t'''''a'''''h'''''t''''' '''''e'''''t'''''o'''''N''''' '''''.'''''''''''''''''s'''''g'''''g'''''e'''''`'''''`''''' '''''r'''''e'''''t'''''f'''''a''''' '''''''''''''''''k'''''l'''''i'''''m'''''`'''''`''''' '''''d'''''n'''''a''''' ''''','''''d'''''a'''''e'''''h''''' '''''e'''''h'''''t''''' '''''t'''''a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'$'}'r'u'c'{'t'i'h't'a'm'' '=' ')'x'('p'_'A'$' 't'a'h't' 't'p'e'c'x'e' ','$'p'_'A'$' 's'a' 'e'm'a's' 'e'h't' 's'i' '''''''''''g'n'i'w'o'l'l'o'f' 't'a'h't' 'n'o'i't'c'n'u'f' 'l'a'i't'r'a'p' 'a' 's'e't'o'n'e'd' '$']',''}'r'u'c'{'t'i'h't'a'm'' ',''o't's'p'a'm'','' 'x',''['p'_'A'$' 'n'o'i't'a't'o'n' 'e'h't'(' ''''T' '.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'''''e'''''s'''''n'''''i''''' '''''s'''''i''''' '''''''''''''''''e'''''s'''''e'''''e'''''h'''''c'''''`'''''`''''' ''''':'''''d'''''e'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''e'''''r'''''a''''' '''''s'''''t'''''n'''''e'''''m'''''e'''''l'''''e''''' '''''t'''''s'''''i'''''l''''' '''''e'''''r'''''o'''''m''''' '''''o'''''w'''''t''''' '''''n'''''e'''''h'''''T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'r'e'i'f'i't'n'e'd'i' 'e's'e'''''h'''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'''''''''''r'o's'r'u'c' 'e'h'T'''''s'r'e'i'f'i't'n'e'd'i' 'e's'e'h't' 'e't'a'r'e'n'e'g' 'o't' 'w'o'h' '}'s't'-'t'r'o'p'm'a'l':'c'e's'{'f'e'r''~'n'o'i't'c'e'S' 'n'i' 's's'u'c's'i'd' 'l'l'i'w' 'e'w'(' 't'n'e'm'e'l'e' 't's'i'l' 's'i'h't' 'd'e't'r'e's'n'i' 't'a'h't' 'n'o'i'''''''''s'a'h' 't'a'h't'''t'''''a'''r'e'p'o' 'e'h't' 'f'o' 'r'e'i'f'i't'n'e'd'i' 'e'u'q'i'n'u' 'e'h't' 's'i' '$'1'_'}'d'i'{'t'i'h't'a'm''$' 't'a'h't' 'g'n'i'm'u's's'a' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''.'''''''''''''''''s'''''g'''''g'''''e'''''`'''''`''''' '''''t'''''n'''''e'''''m'''''e'''''l'''''e''''' '''''t'''''''''''''''''''''d'e's'r'e'v'a'r't' 'g'n'i'e'b' 's'''''i'''''l''''' '''''e'''''h'''''t''''' '''''t'''''a''''' '''''g'''''n'''''i'''''t'''''n'''''''''''''''''''''''''e't'a't's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'p'_'A'$' ' 'a'c'i'l'p'e'r' 'l'a'c'o'l' 'i'''''o'''''p''''' '''''r'''''o'''''s'''''r'''''u'''''c''''' '''''a''''' '''''o'''''t''''' '''''t'''''e'''''s''''' '''''s'''''i''''' '''''}'''''l'''''i'''''a'''''t'''''{'''''t'''''t'''''t'''''x'''''e'''''t'''''''' '''''e'''''l'''''b'''''a'''''i'''''r'''''a'''''v''''' '''''e'''''h'''''t'''''f'''''''''''''''''f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''|'''''b'''''r'''''e''''''''s'$''e'l'u'''x'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e't'e'l'e'd' 's'a' 'd'e'k'r'a'm' 'e'r'a' 't'a'h't' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e'l'l'a'c'''c'''''c'-'o's''''''''''''''''''')'}'s'e'n'o't's'b'm'o't'{'h'p'm'e'' 'e'm'o'c'e'b' 'y'e'h't'''''''''''''''' 's'i'h't'(' '''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'i'a'm'''''''''''''''''''''''''''''''''''''''''''''''e'h't'''''''''''''''''''''''''''h'c'i'h'w' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'h'c'i'h'w''''''s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('''',' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'''''''''''''s't'n'e'm'e'l'e' 't's'i'l' 's'a' 'm'e'h't' 'g'n'i't'n'u'o'c' 't'o'n' '.'e'.'i' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''x'd'I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'm'a's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''x'e'd'n'i' 'e'h't' 'g'n'i't'n'e'm'e'r'c'e'd' 't'u'o'h't'i'w' 't'n'e'm'e'l'e' 't's'i'l' 't'x'e'n' 'e'h't' 'o't' 'g'n'i'v'o'm' 'y'b' 't'e's' '''''''e'c'n'e's'e'r'p' 'y't'p'm'e' 'h't'i'w' 's'''' 't'n'e'm'e'l'e' 't's'i'l' 's'e'l'd'n'a'h' '$'4'_'}'x'd'I'{'c's't'x'e't''$' 'e'l'u'R''''$' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''.')'}'m'e't'i'-'o'd'o't':'g'i'f'{'f'e'r''~'''' 'd'n'a' '}'e'v'o'm'e'r'-'p'a'm':'g'i'f'{'f'e'r''~'s'e'r'u'g'i'F' 'n'i' 's'n'o'i't'a'u't'i's' 'e'h't' 'o't' 'g'n'i'd'a'e'l'(' 'n'i'a'g'a' 'y't'p'm'e'-'n'o'n' 'e'm'o'c' 'e'b' 'o't' 't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'e's'u'a'c' 'n'a'c' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 's'e'c'n'e'r'e'f'e'r' 't'a'h't' 'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'a' ','r'e'v'e'w'o'h' ';'d'e't'e'l'e'd' 's'a' 't'i' 'g'n'i'k'r'a'm' ','t'e's' 'y't'p'm'e' 'e'h't' 'o't' 't'e's' 's'i' 't'e's' 'e'c'n'e's'''''''e'c'e'r'p' 'e'h't' ','d'e't'e'l'e'd' 's'i' 't'n'e'm'e'l'e' 't's'i'l' 'a' 'n'e'h'W' '.'t'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'f'o' 'e'c'n'e't's'i'x'e' 'e'h't' 'd'e't'r'e's's'a' 'e'v'a'h' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'l'l'a' 'f'o' 't'e's' 'e'h't' 's'i' 't'I' ''''''''''h'T'''''''''''''''''''s' 's'i'h'T' 'a'''''''''''''''''''''''''''''''''''''''.'$'k'$' 'D'I' 'h't'i'w' 't'n'e'm'e'l'e' 't's'i'l' 'h'c'a'e' 'r'o'f' '$')'k'('}'s'e'r'p'{'f's'h't'a'm''$' '}'t'e's' 'e'c'n'e's'e'r'p'{'h'p'm'e'' 'a' 's'n'i'a't'n'o'c' 'e't'a't's' 'l'a'c'o'l' 'e'h't' ','d''''''{'h'p'm'e'''n'e' 's'}''i'h't' 'o'T' '''''''''''''''''''''''''''':'i''''s'w'o'l'l'o'f' 's'a' 'd'e'n'i'f'e'd' 's'i' 't'I' '''''''''''''''''''''''''''''''''''''''''''''''''''''''n'a''''e'h't' ','$'p'$''' '''''a'''''c'''''i'''''l'''p'e'r' 'y'b' 'd'e't'a'r'e'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 'l'l'a' 'f'o' 's'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'f'o' 't'e's' 'e'h't' 's'a' '$'}'s'p'e'd'{'t'i'h't'a'm''$''''''''''a'm'''''''''''''' 'e'h't' ''''d'e'n'i'f'e'd' 'e'w' ','r'e'p'a'p'''('' ',''s'i'h't' 'n'I' '.'d'e't'a'r'e'n'e''''''''''''''''''''n'o'i't'c'e'r'i'd' 'r'e'h't'i'e' 'n'i' '')''''g' 's'a'w' '$'2'_'o'$' 'n'e'h'w' 'e'm'i't' 'e'h't' 't'a' '$'p'$' 'n'o' ''g' 's'a'w' '$'2'_'o'$' 'n'o'i't'a'r'e'p'o' 'f'I' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'd'a'e'r'l'a' '''''''''''''''''''''''''''''''''''''''''''''' 's'a'w' '$'2'_'o'$' 'e'r'e'h'w' 'a'c'i'l'p'e'r' 'e'h't' 't'a' 'd'e'i'l'p'p'a' 'n'e'e'b' 'd'a'h' 't'a'h't' '$'1'_'o'$' 'n'o'i't'a'r'e'p'o' 'y'n'a' 's'i' '$'2'_'o'$' 'n'o'i't'a'r'e'p'o' 'f'o'''''''''' 's'i' 'y'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' '''''''c' 'A' '.'.'d'e't'e'l'e'd' 's'a' 'd'e'k'r'a'm' 'y'l'n'o' 't'u'b' ',''''''''''''''''''''''''e'''''r'''''u'''''t'''''c'''''u'''''r'''''t'''''s''''' '''''t's'i'l' 'd'e'k'n'i'l' ''''''''''''''''e'h't' 'm'o'r'f' 'd'e'v'o'm'e'r' 'r'e'v'e''''''r'e't'f'A'n' 'e'r'a' 's't'n'e'm'e'l'e' 't's'i'l' 'd'e't'e'l'e'D' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'a'h' 'o's'l'a' 't'''''''''' 't'b'n'e'''''''''''''t'n'e'm'm'e'l'e' 't's'i'l' 'h'c'a'E''''''''''''''''''''''''''''''''''''' 't's'i'l' 'a' 'n'e'h'W' '.'$'k'$' 's'w'o'l'l'o'f' 't'a'h't' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'f'o' 'D'I' 'e'h't' 'o't' '$')'k'('}'t'x'e'n'{'f's'h't'a'm''$' 's'p''''s'a'm' 'e't'a't's' 'l'a'c'o'l' 'g'n'i't'n'e's'e'r'p'e'r' 'n'o'i't'c'n'u'f' 'l'a'i't'r'a'p' 'e'h't' 'd'n'a' ','$'k'$' 'r'e'i'f'i't'n'e'd'i' 'e'u'q'i'n'u' 'a' 's'a'h' 't'n'e'm'e'l'e' 't's'i'l' 'h'c'a'e' ':''''''''''''''''t's'i'l' 'd'e'k'n'i'l' 'a' 's''''d'e'l'b'm'e's'e'r' 'e'r'u't'c'u'r't's' 't's'i'l' 'e'h'T' '.'s't'n'e'm'e'l'e' 't's'i'l' 'd'e't'e'l'e'd' 'r'e'v'o' 's'p'i'k's' '$'4'_'}'x'd'I'{'c's't'x'e't''$' 'd'n'a' ','x'e'd'n'i' 'e'h't' 's't'n'e'm'e'r'c'e'd' 'd'n'a' 't'n'e'm'e'l'e' 't'x'e'n' 'e'h't' 'o't' 's'e'v'o'm' '$'3'_'}'x'd'I'{'c's't'x'e't''$' 'e'l'i'h'w' ','o'r'e'z' 's'e'h'c'a'e'r' 'x'e'd'n'i' 'e'h't' 'n'e'h'w' 'n'o'i't'a'r'e't'i' 'e'h't' 's'e't'a'n'i'm'r'e't' '$'5'_'}'x'd'I'{'c's't'x'e't''$'n'n'.'d'n'u'o'''''''n'i'f' 's'i' 't'n'e'm'e'l'e' 'd'e'r'i's'e'd' 'e'h't' 'l'i't'n'u' 't's'i'l' 't'a'h't' 'r'e'v'o' 'e't'a'r'e't'i' '$'}'5','4','3'{'_'}'x'd'I'{'c's't'x'e't''$' 's'e'l'u'r' 'e'h't' 'd'n'a' ','n'o'i't's'e'u'q' 'n'i' 't's'i'l' 'e'h't' 's'e'r'o't's' 't'a'h't'''''''''''''''''''''''''''''''''''''''' 'g'n'i't'n'e's'e'r'p'e'r' '$'p'_'A'$' 'f'o' 'e'e'r't'b'u's' 'e'h't' 's'i' '$'}'x't'c'{'t'i'h't'a'm''$' 't'x'e't'n'o'c' 'e'h't' ','y't'p'm'e' 's'i' 's'y'e'k' 'f'o' 'r'o't'c'e'v' 'e'h't' 'n'e'h'W' '.'r'o's'r'u'c' 'e'h't' 'n'i' 's'y'e'k' 'f'o' 'r'o't'c'e'v' 'e'h't' 'o't' 'g'n'i'd'r'o'c'c'a' 'e't'a't's' 'l'a'c'o'l' 'e'h't' 's'd'n'e'c's'e'd' 'y'l'e'v'i's'r'u'c'e'r' '$'2'_'}'x'd'I'{'c's't'x'e't''$' '.'t's'i'l' 'e'h't' 'r'e'v'o' 'n'a'c's' 'o't' 's'e'l'u'r' 't'n'e'u'q'e's'b'u's' 'e'h't' 'o't' 's'e't'a'g'e'l'e'd' 'd'n'a'''''''''''''''''''''' ','t's'i'l' 'e'h't' 'f'o' 'd'a'e'h' 'e'h't' 'g'n'i't'n'e's'e'r'p'e'r' 'r'o's'r'u'c' 'a' 's't'c'u'r't's'n'o'c' '$'1'_'}'x'd'I'{'c's't'x'e't''$''''' ','t's'r'i'F' '.'t's'i'l' 'a' 'f'o' 't'n'e'm'e'l'e' 'r'a'l'u'c'i't'r'a'p' 'a' 'o't' 'r'o's'r's''u'c' 'e'h't' 'g'n'i'v'o'm' ','''n'n'|')'|'b'r'e'v''$''''$'n'$'|'('x'd'i'.'c'o'd'|'b'r'e'v'' 'n'o'i's's'e'r'p'x'e' 'e'h't' 'e't'a'u'l'a'v'e' 'o't' 'w'o'h' 'e'n'i'f'e'd' '$'}'5' 's't'o'd'' '''''1'{'_''d'''r''''' ''''''='='''''v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''|''''']'''''[''''''''''''''''''''d'''''r'''''i'''''h'''''t'''''''''''|'''''''''''''''''b'''''''''''''''''r''''''''''''''''''''''''''|'''''b'''''r'''''e'''''v''''''''|'''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('t'e'''g'.'')'''''''e'h't''''''''''s't'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''('t')''''e'g'.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','5' 'e'E''''n'i'l' 'n'I' '.'t's'i'l' 'e'h't' 'f'o' 'd'a'e'h' 'e'h't' 't'a' 'd'e't'r'e's'n'i' 's'i' '''''s'g'g'e'`'`' 't'n'e'm'e'l'e' 't's'i'l' 'e'h'T''''''''''''''''''''''''''''''''''' '''n'n''d'a'e'h'{'t't't'x'e't'' 'd'e'l'l'a'c' 'e'l'b'a'i'r'a'v' 'a' 'n'i' 'r'o's'r'u'c' 'e'h't' 'g'n'i'c'a'l'p' ',''''''''''''v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''t'''''''''''''''''s'''''''''''''''''i'''''''''''''''''l''''''''''''''''' '''''''''''''''''y'''''''''''''''''t'''''''''''p'''''m'''''e''''' '''''e'''''h'''''t''''' '''''o'''''t''''' '''''t'''''e'''''s''''' '''''s'''''i''''' 'p'a'm' 't'a'h't' 'n'i'h't'i'w' ''''''''''''''''''''''''''''''''|''''}'''g'n'i'p'p'o'h's'''{'t't't'x'e't'''''''''''h'`'`' 'y'e'k' 'e'h't' 'n'e'h't' 'd'n'a' ','''''''''''''u'''''u'''''s''''' '''''h'''''c'''''i'''''h'''''w''''' '''''s'''''m'''''e'''''t'''''s'''''y'''''s''''' '''''e'''''l'''i'b'o'm' 'n'o' ',''''''''''''''''''''''''''''''''''''''''''''s'e'i'l'p'p'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's'i'l' 'a' 'f'o' 'd'a'e'h' 'e'''s't'i''''''h'''t''''' '''''t'''''a''''' '''''s't'r'e's'n'i' '''''''''g'n'i'y'l'p'p'a'''}'''''t'''''r''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o's'r'u'c' 'e'h't' 'y'b' 'd'e'i'f'i't'n'e'd'i' 't'n'e'm'e'l'e''''''''''e't'i' 'e'h't' 's'e'v'o'm'e'r' 'e's'n'i'.')'0'('x'd'i'.'{'t't't'x'e't'' 'd'n'a' ','r'o's'r'u'c' 'e'h't' 'y'b' 'd'e'i'f'i't'n'e'd'i' 'n'o'i't'i's'o'p' 'e'h't' 'r'e't'f'a' 't'n'e'm'e'l'e' 'w'e'n' 'a' 's'e'c'a'l'p' '''' ','i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'h'c''''''''8''''''''''''''''''''''''5'.'7'''''''''''']'p'['''''''8''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''5'.'7'''''''''''''''''''''''''''''8''''''''''''''''''''''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''''''''''''''s't'-''}'t'r'o'p'm'a'l':'c'e's'{'l'e'b'a'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''5'.'5'''''''''''''''''''''''''''''''''''''''''''6'''''''''''''''.'n'o'i't'p'y'r'c'n'e' 'd'n'e'-'o't'-'d'n'e' 'h't'i'w' 's'm'e't's'y's' 'g'n'i'g'a's's'e'm''''e' 'n'i' 'd'n'a' 's'k'r'o'w't'e'n' 'r'e'e'p'-'o't'-'r'e'e'p' 'n'i' 'd'e'y'o'l'p'e'd' 'e'b' 'o't''''' '''''t'''','''''''''''''''''''','''s'e'n'o'''''h'''s''''p''''''''''''e'u'n'''g'''''n'''''i''''''''i'''''t'''''n'''''o'''''c''''' '''''''''''''''''''''''''''''t'''''''''''''''''r'''''a'''''m'''''s''''' '''''s'''''a''''' '''''h'''''c'''''u'''''s''''' '''''''''''i''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'''''e'''''t'''''s'''''i'''''g'''''e'''''r''''' '''''e'''''u'''''l'''''a'''''v'''''-'''''i'''''t'''''l'''''u'''''I''''''''''''''m'''''''W''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'i' 'd'e't'a'e'r'c' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'e'h't' 'f'o' 'r'e'i'f'i't'n'e'd'i' 'e'h't' 'y'b' 'd'e'i'f'i't'n'e'd'i' 's'i' 'e'u'l'a'v' 'r'e't's'i'g'e'r' 'r'o' 't'n'e'm'e'l'e' 't's'i'l' 'w'e'n''''''''''''''''''''''''''''''' 'n'o'i't'a'r'e'p'o' 'e'h't' ','r'e't's'i'g'e'r' 'a' 'o't' 'd'e'n'g'i's's'a' 's'i' 'e'u'l'a'v' 'a' 'r'o' 't's'i'l' 'a' 'o't'n'i' 'd'e't'r'e's'n'i' 's'i' 't'n'e'm'e'l'e' 'n'a' 'r'e'v'e'n'e'h'w' ','' 'a' 's'i' 's't'r'o'p'p'u's' 't'i' 'e'p'y't'a't'a'd' 'y'l'n'o' 'e'h't' ''''''''j''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'}'g'n'i's'o'p'm'o'c':'c'e's'{'f'e'r''~'n'o'i't'c'e'S' 'n'i' 'd'e'n'i'l't'u'o' 's'c'i't'n'a'm'e's' 't'n'e'r'r'u'c'n'o'c' 'e'h't' 'e'v'e'i'h'c'a' 'o't' 'w'o'h' 'y'l'l'a'm'r'o'f' 'n'i'a'l'p'x'e' 'w'o'n' 'e'W''''H'''''''''''''''''''''''''''''''''''''''''''''e't'a'l'o'i'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''O'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'y'w'3'1'0'2':'n'w'o'r'B','s'h'4'1'0'2':'n'w'o'r'B'{'e't'i'c''~'k'a'i'R' 'n'i' 's'p'a'm' 'T'D'R'C' 'f'o' 't'a'h't' 's'e'h'c't'a'm' 'r'o'i'v'a'h'e'b' 's'i'h'T' '.'d'e'd'd'a' 'y'l't'i'c'i'l'p'x'e' 'e'r'e'w' 'y'e'h't' 'e'c'n'i's' ','''' 't'n'e's'e'r'p' 'e'b' 't's'u'm' '''''n'e'e'r'g'`'`' 'd'n'a' '''''d'e'r'`'`' 'e'l'i'h'w' ','p'a'm' 'e'h't' 't'u'o' 'g'n'i'k'n'a'l'b' 'y'b' 'd'e'v'o'm'e'r' 's'a'w' 't'i' 'e'c'n'i's' ','p'a'm' 'l'a'n'i'f' 'e'h't' 'm'o'r'f' ''T'''t'n'e's'b'a' 'e'b' 't's'u'm' '''''e'u'l'b'`'`' ':'}'e'v'o'm'e'r'-'p'a'm':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'w'o'h's' 's'a' ','s'e'g'n'a'h'c' 'l'l'a' 'e'v'r'e's'e'r'p' 't'a'h't' 's'c'i't'n'a'm'e's' 'e'g'r'e'm' 'e'n'i'f'e'd''''e' 'e'w' ','d'a'e't's'n'I' '.'s'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'o't' 'e'u'd' 't's'o'l' 'e'b' 'd'l'u'o'h's' 't'u'p'n'i' 'r'e's'u' 'o'n''''''''''''''''''''''''''''''''''''''' 't'a'h't' 't'n'e'm'e'r'i'u'q'e'r' 'r'u'o' 't'e'e'm' 't'o'n' 'd'l'u'o'w' 'r'o'i'v'a'h'e'b' 't'a'h't' ','r'e'v'e'w'o'H' '.'s'r'o'l'o'c' 'f'o' 'p'a'm' 'e'r'i't'n'e' 'e'h't' 'f'o' 't'u'o'-'g'n'i'k'n'a'l'b' 'e'h't' 'y'b' 'n'e'd'd'i'r'r'e'v'o' 'e'b' 'd'l'u'o'w' 't'i' 'e'c'n'i's' ','d'e'd'r'a'c's'i'd' 'e'b' 'd'l'u'o'w' '''''d'e'r'`'`' 'f'o' 'n'o'i't'i'd'd'a' 'e'h't' 'n'a'e'm' 'd'l'u'o'w' 't'a'h't' ','e's'a'c' 's'i'h't' 'n'I' '.'e'e'r't'b'u's' 't'a'h't' 'n'i'h't'i'w' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'e'd'i'r'r'e'v'o' 's'y'a'w'l'a' 'e'e'r't' 'e'h't' 'f'o' 's'l'e'v'e'l' 'r'e'h'g'i'h' 't'a' 's't'i'd'e' 't'e'l' 'o't' 'e'b' 'd'l'u'o'w' 't'c'i'l'f'n'o'c' 'a' 'h'c'u's' 'g'n'i'l'd'n'a'h' 'f'o' 'y'a'w' 'e'l'b'i's's'o'p' 'e'n'O'n'n'.'e'e''''''y'l'p'p'a'''r'''''t''''' '''''o't'''''''''e'''''''''h't''' '''''''g'n'i''''f'''o' 'l'e'v'e'l' 'r'e'h'g'i'h' 'a' 't'a' 's'r'u'c'c'o' 's'r'o'l'o'c' 'f'o' 'p'a'm' 'e'h't' 'f'o' 'l'a'v'o'm'e'r' 'e'h't' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'l'i'h'w' ','e'e'r't' 'e'h't' 'f'o' 'l'e'v'e'l' 'r'e'w'o'l' 'a' 't'a' 's'r'u'c'c'o' '''''d'e'r'`'`' 'f'o' 'n'o'i't'i'd'd'a' 'e'h't' 't'''''a'''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'y'e'k' 'e's'e'h't' 'y'b' 'd'e'b'i'r'c's'e'd' 'h't'a'p' 'e'h't' 'g'n'i'w'o'l'l'o'f' 'y'b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y't'p'm'e'-'n'o'n' 's'i' 's'y'e'k' 'f'o' 'r'o't'c'e'v' 's'''h't' 's'i' 'e'l'p'm'a'x'e' 's'i'h't' 'n'i' 'y't'l'u'c'i'f'f'i'd' 'e'h'T' '.'y'e'k' 't'a'h't' 'o't' 'p'a'm' 'y't'p''''t'm'e' 'w'e'n' 'a' 'n'g'i's's'a' 'n'e'h't' 'd'n'a' ','p'a'm' 'r'e't'u'o' 'e'h't' 'm'o'r'f' '''''s'r'o'l'o'c'`'`' 'y'e'k' 'e'r'i't'n'e' 'e'h't' 'e'v'o'm'e'r' 'y'l't'n'e'l'a'v'i'u'q'e' 'd'l'u'o'c' '$'q'$' ','p'a'm' 'y't'p'm'e' 'n'a' 'g'n'i'n'g'i's's'a' 'f'o' ''''e'd'a'e't's'n'I' '.'''''n'e'e'r'g'`'`'''' 's'd'd'a' 'n'e'h't' 'd'n'a' ','s'r'o'l'o'c' 'f'o' 'p'a'm' 'e'r'i't'n'e' 'e'h't' 't'u'o' 's'k'n''S'''a'l'b' 'y'l't'n'e'r'r'u'c'n'o'c' '$'q'$' 'a'c'i'l'p'e'r' 'e'l'i'h'w' ','s'r'o'l'o'c' 'f'o' 'p'a'm' 'a' 'o't' '''''d'e'r'`'`' 's'd'd'a' '$'p'$' 'a'c'i'l'p'e'r' ','e'r'e'H' '.'e'e'r't' 'N'O'S'J' 'e'h't' 'f'o' 's'l'e'v'e'l' 't'n'e'r'e'f'f'i'd' 't'a' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'f'o' 'e'l'p'm'a'x'e' 'n'a' 's'e'v'i'g' '}'e'v'o'm'e'r'-'p'a'm':'g'i'f'{'f'e'r''~'e'r'u'g'i'F''n'n'''''''' ' ''''''''''''''''2'.'4'''''''''''''''''''''''''''y'a'w'd'i'm','d'e'r'e't'n'e'c' 't'x'e't','m'c'2'='h't'''d'''''i'''''w''''' '''t'x'e't',' ' 'n')'1't'f'e'l'(' '-'-'','s'd'r'o'w'''''''''''''''''e's'a'c' 'e'h't' 's'i' 'h'c'i'h'w'''''' '''''r'e'h'''''('t'e'g'.'''''''('t'e'g')''''.')''''''''t'o' 'n'i' '-'-' ''g'''2'.''''''4'''n'''''i''''''''''d'e'r'e't'n'e'c'''''''''''''''''''d'e'g'g'a'r''''''''''''w'''''o'''''l'l'a' ','k'r'o'w'''''('t'e'g'.'')':'''''''t'e'n' 'e'h't' 'm'o'r'f' 's'e'e't'n'a''-'-''''''r'''' ' ' ' ''''''a'''''u'''''g''''''2''' '''''g'''''n'''''i''''''''d'e'r'e't'n'e'c'''''''''''''''''''d'e'g'g'a''''e'r''''''''''''''''''r'''''''''''''y'''']'p'['a'w'd'i'm',''''e'''''d'''''''''''''''''('''''t'''''e'''''g''''''''''''''''''''''''''t'''''e'''''g'''''.''''''''(''''')''''''''''''''''''''''')''''''''''''''''''''o'd'.''''r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}';'''''0'0'f'f'0'0'#''`'`' '=':' ')'''''n'e'e'r'g'`'`'('t'e'g'.')'''''s'r'o'l'o'c'`'`'('t'e'g'.'c'o'd'{' ']'d'e'r'e't'n'e'c' 't'x'e't','m'c'1''''3'='h't'd'i'w' 't'x'e't','t'h'g'i'r'[' 'e'd'o'n'n''o' 'n'o' 'd'n'e'p'e'd' 't'o'n' 's'e'o'd' 'd'n'a'''''''''''''''''''s't's'i'l' 'o'd'-'o't' ','s'l'o'o't' '' 'e'd'i's'-'t'n'e'i'l'c' 'g'n'i'g'r'e'm' 'l'l'a' 's'm'r''0'1''''''9''''''o'f'r'e'p' 'm'h't'i'r'o''5'''g'l'''0'.'9''''a' 'e'h'T'''n'''''e'm'n'g'i's's'a' 'd'5''''n'a' 'n'o'i'''0'.'9''''t'e'l'e'd' ','n'o'i't'r'e's''5'''n'i' 'y'b' 'd'e'i'''''''0'.'7''''f'''''i'''d'G''''o'm' 'O''''e'b' 'n'a'c' 'h''5'''c'i'h'w' ','''''' 't'I' '.'''''''0'.'7'''''' '.'s'e'p'y't' 'p'a'm'''0'.'5'''''' '''d'n'a' 't''''''''''''''''''''''''''''''''5'.'''t''' 'e'h't' ','y't'''''i'l'5''''i'b'a'z'i'l'a'i'''''r'''''e'''''s''''' ''''''0'.''g'''''n'''''i'''''r'''''i'''''u'''0'.'5''''''''''''q'''''e'R''s'i'l' 'd'e'''''''''''''' 'o't' 's''5'.''e'h'c'a'o',''''''' ''5'''t'a'h't'''''''''''r'''''p'''''p'''''a''''''''t's''0'.''e'n' 'y'l'i'r'a'r't'i'b'r'a' 's't'r'o'p'p'u's' 't'I' '.'e't'a't's' 'e'm'a's' 'e''0'.''h't' 's'd''''''e'n'i'f'e'd''''''''r''''''''g'n'i'''''''''''''a'''''w'o't' 'e'g'r'e'v'n'o'c' 's'a'c''0'.''i'l'p'e'r' 'l'l'a''u's''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','k'r'o'w't'e'n' 'e'h't' 'f'o' 's's'e'l'd'r'a'g'e'r' 'k'r'o'w' 'o't' 's'n'o'i't'a'c'i'l'p'p'a' 'e''''''t'a'h't' 'r'i'u'q'e'r' 'e'w' 'f'I'''''''='''''''''''''''('t'e'g'.''')''''''''''''''}'v'h'5'8'9'1':'n'o's'd'i'v'a'D'{'e't'i'c''~'''''' 't''''''('t'e'')'''g'.'''a'h't' 'd'n'a' ','t's'o'l' 'e'r'a' '''''''''''''' ' ' 'n')'2''''''''''''''''''''''''''''''''''''y' ''''a'w'd'i'm','d'e'r'e't'n'' 'e'c' 't'x'e't','m'''''c'''''4'''''='''''h't'''''''''''''''''''''''' ' ' ''''''''''''''''''''''''''''''''''''y'a'w'd'i'm','d'e'r'e't'n'e'c'' ' 't'x'e't','m'c'4'='''''h'''''t'''''d'''''i'''w'''''''''''''' ' ' '''''n''''''''''''''''''''''''''''''''''''y'a'w'd'i'm','d'e'r'e't'n'e'c' '' 't'x'e't','m'c'''''4''''''''''''''3'''='h''''''''''''''''''''''' ' ' ''''''''''''''''''''''''''''''''''''y'a'w'd'i'm','d'e'r'e't'n'e'c'' ' 't'x'e't','m'c'4'''='''''h'''''t'''''d'''''i'w' 't'x'e't','' 'n')'3't'h'g'i'r'(' '-'-'t'd'i'w' 't'x'e't','')'3't'f'e'l'(' '-'-'' 't'x'e't','' 'n')'2't'h'g'i'r'(' '-'-'''h'd'i'w' 't'x'e't',''t'f'e'l'(' '-'-''''''s'e't'a'd'p'u' 'o'n' 't'a'''''''''(')'''''')'0'('x'd''''''''''t'e'g'.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'0'('x'd'''''''''''''''''''''''')'''''''('t'e'g'.'''''''''''''''''''''''''''''''''''''''''''''''''')'1'('x'd'i'.')'''''y'r'e'c'o'r'g'`'`'('t'e'g'.'c'o'd''''''''''''''''''''''''''''''''''''''''''''')'1'('x'd'i'.')'''''y'r'e''''y'c'o'r'g'`'`'''''''`'z'('t'e'g'.'c'o'd''''''''''''''''''''''''''''''''''''''''e's'o'p'r'u'p'-'l'a'r'e'n'e'g' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 's'n'o'i't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''5'.'8''''9''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}':'$'q'$' 'a'c'i'l'p'e'R'{' ')'5'.'8','8'(' 't'a' ')'R't'h'g'i'r'(' 'e'd'o'n''n';'}':'$'p'$' 'a'c'i'l'p'e'R'{' ')''''''''''''5'.'8','0'(' 't'a' ' ')'R't'f'e'l'(' 'e'd'o'n''n';')'5'.'7','4'(' '-'-' ')'5'.''''5'0'-','4'(' ']'d'e't't'o'd','w'a'r'd'[' 'h't'a'p'''''''''''''''''''''''''''''''h't'a'p'[' 'w'a'r'd''n''''''''''''''''' ''''''7''''8'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''5'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''4''''5'''''''''''';'}']'''''c'`'`' ',''''7'''''z'`'`' ','''''x'`'`' ','''''a'`'`' ','''''y'`'`'['{''''[' ']'w'a'5''''r'd','e'l'g'n'a't'c'e'r'[' ')'0','0'(' 't'a' ' ')'4't'f'e'l'(' 'e'd'o'n''3''''n';'}']'''''c'`'`' ','''''x'`'`' ','''''a'`'`'['{' ']'w'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'t'i'd'e'-'t'x'e't':'g'i'f'{'l'e'b'a'l'''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''';')'4''''3't'h'g'i'r'(' 'o't' ')'3't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'4't'f'e'l'(''' 'o't' ')'3't'f'e'l'(' ']'''''''(' '>'-','k'c'i'h't'[' 'w'a'r'd''n'''''''''''''''''''''''''''''''''';'}'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 'e'z'i's'e't'o'n't'o'o'f''{' ']'e'u'l'b'=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''1'''''''''''''''''''7'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'x'i'r't'''a'm'[' '''''''''''''''''''''''''''''{' 'e'd'o'n'' ' ' ' 'n'''''''''''''''''''''''''''''{' 'e'd'o'n'' ' ' ' 'n''''''';'}'n''' ''' ';'}''''''''''''''''''''('T'''''''''''''''''''''''''''''''''''''''''''''''';'}'}'']'''''z'`'`'[' ':')''''''''''a'`'`'('T't's'i'l' ','}''''''y'`'`' ':'''''x'`'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''0'.'2'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 'e'z'i's'e't'o'n't'o'o'f''{' ']'e'u'l'b'='t'x'e't'[' ')'5'.'1','4'(' 't'a' ' ')'s'm'm'o'c'(' 'e'd'o'n''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'h's'a'l'c'-'e'p'y't':'''''''''''''p'y't';'g'i'f'{'l'e'b'a'l''''''''''''''''''''''''''''''''''''''''{'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''O''''''o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''';')'t's'a'e' 'h't'r'o'n'.'4't'f'e'l'(' ' ']'5'4'='n'i','0'7'2'='t'u'o'[' 'o't' ')'h't'u'o's'.'3't'h'g'i'r'(' ']'''''''[' '>'-','e'u'l'b','d'e'h's'a'd','k'c'i'h't'[' 'w'a'r'd''n';')'t's'e'w' 'h't'r'o'n'.'4't'h'g'i'r'(' ']'5'3'1'='n'i','0'7'2'='t'u'o'[' 'o't' ' ')'h't'u'o's'.'3't'f'e'l'(' ']'>'-','e'u'l'b','d'e'h's'a'd','k'c'i'h't'[' 'w'a'r'd''n';')'4't'h'g'i'r'(' 'o't' ')'3't'h'g'i'r''''l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'4't'f'e'l'(''''n' 'o't' ' ')'3't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'3't'h'g'i'r'(' '}';')'''''z'`'`'('t'r'e's'n'i'.')'0'('x'd'i'.'''' ')'''''a'`'`'('t'e'g'.'c'o'd'{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'2't'h'g'i'r'(' ']''''''']' '>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'h'g'i'r'(' '}';']'[' '=':' ')'''''a'`'`'('t'e'g'.'c'o'd'{'''''' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'1't'h'g'i'r'(' ']'''' '>'-','k'c'i'h't'[' 'w'a'r'd''n';')'3't'f'e'l'(' '}';'''''y'`'`' '=':' ')'''''x'`'`'('t'e'g'.')'''''a'`'`'('t'e'g'.'c'o'd'(' ' ']'t'f'e'l'[' 'e'd'o'n' 'o't' ' ')'2't'f'e'l'(' ']'''' '>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'f'e'l'(' '}';'}''{'' '=':' ')'''''a'`'`'('t'e'g'.'c'o'd'{' ' ']'''' 't'f'e'l'[' 'e'd'o'n' 'o't' ' ')'1't'f'e'l'(' ']'''' '>'-','k'c'i'h't'[' 'w'a'r'd''n';'}'n''' ';'}'}'']'''''z'`'`'[' ':')'''''a'`'`'('T't's'i'l'{' 'e'd'o'n'' ' ' ' 'n''' ';'}','}''''''y'`'`' ':'''''x'`'`'{''''''''{'`' ':')'''''a'`'`'('T'p'a'm'{''{' 'e'd'o'n'' ' ' ' 'n'{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'0','8'(' 't'a' ')''''3'4't'h'g'i'r'(' ']'x'i'r't'a'm'[' 'e'd'o'n''n''`'{'' ':')'''p'a'm'''''''a'`'`'{''''_''{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'0','0'(' 't'a' ' ')'4''''3't'f'e'l'(' 'e'd'o'n''n';'}'}''}''''''y'`'`' ':'''''x'`'`'{'' ':'''''a'`'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''''n''''';']'}'']'''''z'`'`'[' ':'''''a'`'`'{''{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'3''''4','8'(' 't'a' ')'3't'h'g'i'r'(' 'e'd'o'n''n';'}'}'']'[' ':'''''a'`'`'{''{''''[' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'5','8'(' 't'a' ')'2't'h'g'i'r'(' 'e'd'o'n''n'`'{''{' ']'w'a''''''''''w'a'w'r'd','e'l'g'n'a't'c'e'r'[' ')'3''''4','0'(' 't'a' ' ')'3't'f'e'l'(' 'e'd'o'n''n';'}'}''}''{'' ':'''''a'`'`'{''{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'5','0'(' 't'a' ' ')'2't'f'e'l'(' 'e'd'o'n''n'''''''''''''''''''''''''''''''''''''''''''''''''';'}'}''{''{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'7','8''''0'(' ''''x'd'''4','''''I'''t'''''a''' ')'1't'h'g'i'r'(' 'e'd'o'n''n';'}'}''{''''''''h't'a'm''''''''''x'e't'''''''''''''h't'a''''''''''''''''''''''''f'i' 'n'e'p'p'a'h' 'd'l'u'o'w' 'h'c'i'h'w' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's'i'l' 'e'h't' 'n'i' 's't'n'e'm'e'l'e' 'd'e't'e'l'e'd'-'n'o'n' 'f'o' 'r'e'b'm'u'n' 'e'h't' 'n'a'h't' 'r'e't'a'e'r'g' 's'i' '$'n'$' 'e's'u'a'c'e'b' 'm''''$'''''{''''' ']'''''''''$')'n'(''x'd'i''''''}'''''w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'7','0'(' 't'a' ' ')'1't'f'e'l'(' 'e'd'o'n''n';')'5'.'8','4'(' '-'-' ')'5'.'0'-','4'(' ']'d'e't't'o'd','w'a'r'd'[' 'h't'a'p''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'*'e'r'u'g'i'f'{'d'n'e''n'}'.'y'e'k' 'p'a'm' 'e'm'a's' 'e'h't' 'o't' 's'e'p'y't' 't'n'e'r'e'f'f'i'd' 'f'o' 's'e'u'l'a'v' 'g'n'i'n'g'i's's'a' 'y'l't'n'e'r'r'u'c'n'o'C'{'n'o'i't'p'a'c''n'}'e'r'u't'c'i'p'z'k'i't'{'d'n'e''n']'8'.'0'='e'l'a'c's','o't'u'a'['}'e'r'u't'c'i'p'z'k'i't'{'n'i'g'e'b''n'g'n'i'r'e't'n'e'c''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b''n'n''t'x'e't'[' ')'4'.'1' ','5'(' 't'a' ' ')'s'm'm'o''''''''''''r'd''n''c'(' 'e'd'o'n''n'''''''''''''''''''0'.'7'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''5'''.'''''6'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'''''''''''''''''''''''''''''''''''''''''''''''''''''';')'t's'a'e' 'h't'r'o'n'.'4't'f'e'l'(' ' ']'5'4'='n'i','0'7'2'='t'u'o'[' 'o't' ')'h't'''u'o's'.'3't'h'g'i'r'(' '>'-','e'u'l'b','d'e'''''('t'e'g''''''''''''''''''''''''''''')'1'('x'd'i'.')'''.''''h's'a'd','k'c'i'h't'[' 'w'a'r'd''n'')'''''''''''('t'e'g'')'''''''''''''.')'1'('x'd'i'''';''''')'''''t'''s'e'w' 'h't'r'o'n'.'4't'h'g'i''''''('t'e'g'.'''r'(' ']'5'3'1'='n'i','0'7'2'='t'u'o'[' 'o't' ' ')'h't'u'o's'.'3't'f'e'l'(' ']'>'-','e'u'l'b','d'e'h's'a'd','k'c'i'h't'[' 'w'a'r'd''n''''''''''''''''''''''''''''''';')'3't'h'g'i'r'(' '}';')'''''z'`'`'('t'r'e's'n'i'.')'2'('x'd'i'.'c'o'd'{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'2't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' ''''['w'a'r'd''n';')'2't'h'g'i'r'(' '}';')'''''y'`'`'('t'r'e's'n'i'.')' ''0''''1'('x'd'i'.'c'o'd'{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'1't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'b' 'o't' 'e'c'n'a'l'g' 't's'r'i'f' 't'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''k'r'o'w' 'n'o'-'w'o'l'l'o'f' 'n'i' 's'c'i't's'i'r'e't'c'a'r'a'h'c' 'e'c'n'a'm'r'o'f'r'e'p' 's't'i' 'n'o' 't'r'o'p'e'r' 'l'l'i'w' 'd'n'a' ','m'h't'i'r'o'g'l'a' 'e'h't' 'f'o' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'l'a'c'i't'c'a'r'p' 'a' 'n'o' 'g'n'i'k'r'o'w' 'o's'l'a' 'e'r'''a'''''n''''l'l'i'f'v''n''''n'n''3't'f'e'l'(' '}';')'''''x'`'`'('t'r'e's'n'i'.')'1'('x'd'i'.'c'o'd'{' ' ']'t'f'e'l'[' 'e'd'o'n' 'o't' ' ')'''' '2't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'f'e'l'(' '}';'e't'e'l'e'd'.')'2'('x'd'i'.'c'o'd'{' ' ']'t'f'e'l'[' 'e'd'o'n' 'o't' ' ')'1't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';'}']'''''c'`'`' ','''''z'`'`' ','''''x'`'`' ','''''a'`'`'''''' ','''''y'`'`'['{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'0','8'(' 't'a' ')'4''''''')'3't'h'g'i'r'(' 'e'd'o'n''n''r'd','e'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}']'''''c'`'`' ','''''b'`'`' ','''' '''''z'`'`' ','''''a'`'`' ','''''y'`'`'['{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'4''''5','8'(' 't'a' ')'3't'h'g'i'r'('''''''(')' 'e'd'o'n''n';'}']'''''c'`'`' ','''''b'`'`' ','''''a'`'`''''''''''' ','''''y'`'`'['{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'6','8'(' 't'a' ')'2't'h'g'i'r'(' 'e'd'o'n''n'g'n'a't'c'e'r'[' ')'4','0'(' 't'a' ' ')'3't'f'e'l'''''8''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}']'''''c'`'`' ','''''b'`'`''''a''''''''''`'a'a''''''''''' ','''''a'`'`'['{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'8','8''''9'(' 't'a' ')'1't'h'g'i'r'(' 'e'd'o'n''n'(' 'e'd'o'n''n';'}']'''''c'`'`' ','''''a'`'`'['{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'6','0'(' 't'a' ' ')'2't'f'e'l'(' 'e'd'o'n''n''''''''''';'}']'''''c'`'`' ','''''b'`'`' ','''''a'`'`'['{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'0',''''.'8'(' 't'a''' ')'1't'h'g'i'r'(' 'e'd'o'n''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'c'i'v'r'e's' 'b'e'w' 'd'n'a' 's'e's'a'b'a't'a'd' 'S''''y'n'a'm' 'n'i' 'd'e's'u' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','r'e'v'e'w'o'h' ''''''''''''''''','''''''y't''''''''''s'e's's'u'c's'i'd'''''''''''''''''''''''''''''''''''''''''''''''''''''o'w't' 'g'n'i'n'i'a't''''''''''''''''n'i'a't'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'h'c'n'a'r'b''''''''''''''''''''''''''''''''''''''''''''''''''''N'i''''''''''''x'''''x'''''x'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o't' 's'i''''' '''''k'r'o'w' 'r'u'o' 'f'o' 'l'a'o'g' 'm'r'e't'-'g'n'o'l' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'a'w''.''''a't'f'o's' 'e's'u'-'o't'-'y's'a'e' 'n'a' 'e'd'i's'n'i' 'n'e'd'd'i'h'''''''n'i' 'e'b' 'y'l'e'g'r'a'l' 'n'a'c' 's'l'i'a't'e'd' 'e's'o'h'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'r'a'r'b'i'l' 'a' 'e'd'i's'n'i' 'n'o'i't'a'l'u's'p'a'n'''''''''''''''''''''''''''' 'g'n'i'd'd'e'b'm'e' 'o't' 'e'l'b'a'n'e'm'a' 's'i' 't'a'h't' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''''''''''''''''''''''y'b''''''''' 'o't' 'e'l'b'a'n'e'm'a' 'e'b' 't's'u'm''''''''''''''''''''''''''''''''''''' 'e'b' 'o't' 's'd'e'e'n' 'm'h't'i'r'o'g'l'a' 'n''''l'a' 'h'c'u'S' '.''''''''''''''''''' 'h't'i'w' '''n'o'i't'u'l'o's'e'r' 't'c'i'l''''i'f'n'o'c' 'r'o'f''''t' 'm'h't'i'r'o'g'l'a' 'l'a'r'e'n'e'g' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''P'''''S'''''''''''''''''''''''''''''''''''a''''''b''''''''''''c'`'`' ','''''''''''''''';'}'''']'''']'}'']'''''i'`'`' ','''''h'`'`'''''''z'z'[' ':'''''t'x'e't'`'`'{''{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'0','0'(' 't'a' ')'1't'f'e'l'(' 'e'd'o'n''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'*'e'r'u'g'i'f'{'d'n'e''n'}'.')'t'n'e'm'u'c'o'd' 't'x'e't' 'a' ','.'e'.'i'(' 's'r'e't'c'a'r'a'h'c' 'f'o' 't's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'f'o' 'g'n'i't'i'd'e' 't'n'e'r'r'u'c'n'o'C'{'n'o'i't'p'a'c''n'}'e'r'u't'c'i'p'z'k'i't'{'d'n'e''n']'8'.'0'='e'l'a'c's','o't'u'a'['}'e'r'u't'c'i'p'z'k'i't'{'n'i'g'e'b''n'g'n'i'r'e't'n'e'c''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b''n'n'''''''''''''''''''' 'm'''''''m' 'h't'i'r'o'g'l'a' 'n'''' 'a' 'g'n'i'd'i'v'o'r'p' 'y'b' ''''i''''i''e'h't' 'y'l't'n'e'u'q'e's'n'o'C''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''k'''''''''''''''''s'''''a''''''''''''''''''''''' '''''t'''''a'''''e'''''r'''''t''''' ''''''''s'''''''''''e'''''''''''W''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'c'i'v'e'd' 'o'w't' 'n'o' 'r'''' 'e'g'a'n'a'm' 'd'r'o'w's's'a'p' 'a' 'o't' 's'''' 't'i'd'e' 't'n'e'r'r'u'c'n'o'c' ','e'l'p'm'a'x'e' 'r'o'F' ''''i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'p'a'm' 'e'h't' 'm'o'r'f' 'd'e'v'o'm'e'r' 'd'n'a' 'd'e'd'd'a' 'e'b' 'n'a'c' 's'g'n'i'p'p'a'm' 'e'u'l'a'v'-'y'e'k' 'd'n'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s't'n'e'm'e'l'e' 't's'i'l' 'g'n'i't'e'l'e'd' 'r'o' 'g'n'i't'r'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''A' ''f'''.'''''e'd'o'n' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-'e'l'g'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''S''''''''''''''''''''''''''''''''''''''''''''''''' '''.'s't'n'e'm'e'l'e' ''*'t's'i'l' 'f'o''''''''r'e'h't'r'u'f'''''''''''8'.'0'='e'l'a'c's','''''4'-''5'.''''''''''4''''''''''''''''''''d'e'3'''5'.''''t'''5'.'t'o''''3''''''6''''''''''''''''''''''''8''''''''''''''''''''''''''';''''6'''''''''''''''''''''''''''''q'''''''''''''''''''';'''}':'$'2'_'p'$''8''' 'a'c'i'l'''''''''''''''''']'w'a''6'''r'd','e'l'g'n'a't'c'e'r'[' 'p'e'R'{' ')'''''''''''''''''']'w'a'r'd','e'l'g'n'a't'c''8'''e'r'[' '6','4'(' 't'''''''''''''''''']'6''''w'''''a'r'd','e'l'g''''5'.'0'''n'a't'c'e'r'[' 'a' ')'R't'h'''''''''''''''''''''']'w'a'r'd','e'l'g'n''''5'.'0'''a't'c'e'8''''r'[' 'g'i'r'(' 'e''''6''''8'.'1'''''''''''''''''''']'''w'''a'r'6''''d','e'l'g'n'a't'c'e''4'''5''''r'[' 'd'o'n''n'}':'$'1'_'p'$'''''''''''''''''''''''''8'''''''''''']'e'u'l'b'='t'x'e't'[' '''''''''''''''''''t'p'8'='p'e's' 'r'e'n'n'i' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'p'8'='p'e's' 'r'e'n'n'i','''''' 'e'z'i' ''''''s'e't'o'n't'o'''''''''''''''''''''''''''''o'f''''''''''''''''''''''''''''''7'2''''''''''''''''''''5'3'1'='n'i',''''''''''''''''']'0'8'1'''''''''-'''0'8'2'='t'u'o''7'2''''-''''[' '''' 'o't' '''''''''5' ''4'='n'i''''''''''''''''''''''''''''''''''''''''''''''''''''$'q'$' 'd'n'a' '$'p'$' 's'a'c'''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's''''''''''''''''''''i'l'p'''''''''''''''''''''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's''''''r'''''e'''''t'''''s'''i'g'e'r' 'y'b' '''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's'''''']'''''''''''''''''y'''e'k'`'`'['c'o'd' 't'a' '''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's''''''r'''''e'''''t'''''s'''i'g'e'r' 'e'h't''''''''''''''''''''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's'''''','''''''''''''''''''''''''''''''' 't'a''''''''''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's''''''''''''''''''}''''''''''''A'`'`' ':'''''y'e'k'`'`'{'' ''''''''''''''']'0'8'1'''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's''''''=''''''''''''''('t'e'g'.''''''''='''''')'''t'u'o'[' '''''''''';'}'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n''i'''''x'd'i'''''i'''''{' ')'5'''o''''('''''''''''''''''''''''''$'0''''' '''''e'''''g'''''''''''''''''''''''''''''''''''e'''x'd'I''''''''''''''g'''''/''''' '''''n'''''$''''' '&' '}')'{'t't't'x'e't''$'n'$''t'a'''t'''''''''.'''2','3'(' 't'a' ' ')'s'm'm'o'c'(' 'e'd'o'n''n''''''''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's'''''''''''' '''''o'''''w'''t'','''''''''''''''''''''''''''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g''''''''''''''''''''''''''';']'[' '=':' ')'''g'n'i'p'p'o'h's'''('t'e'g'.'c'o'd'n''n'i'p'p'o'''''l'i'a't'''h'''''s'''''''d'a'e''''''''''''''''''l'''''i'''''a'''''t'''''''''''''''''''''''''''''''('t'e'g'.'')'''''h'''''''''''''''''''''''''''''''''''''n''''';''''')'''''''''''k'''''l'''''i'''''m'''''''''''('''''t'''''r'''''e'''''s'''''n'''''i'''''.'''''l'''''i'''''a'''''t'''''''''''''''''d'''''a'''''e'''''h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'1'('x'd'i'.')'''g'n'i''''d'a'e'h''''''p'''''p'o'h's'''('t'e'g'.'c'o'd''''''''''''''')'''''0'''''('x'd'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'L''''''''''y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's''' '''''''''''''''''''''''''''''''''''' 's'i' 'a'c'i'l'p'e'r' 'a' 'r'o'f'''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'''' 't'a't's' 'l'a'c'o'l'''''''''e'k'a'm' 'e'w' ''''''''''''''''' 's'e'g'n'a'h'''''''''''''''''h'''''a''.'''''''''''''''''''''n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w''''o't'e'N'''''''''''''s'i'h'T''''''''''''c''''' '''''e'''''t'''''a'''''t'''''s''''' '''''f'''''o'''''''' '''''o''';''''''t'''''''''''''''''''s'a'c'i'l'p'e'r' 'n'e'e'w't'e'b' 's'''''''''''''''''''''''''''''e''''''''''''''''''''''e'w't'e'b' 'e't'a't's' 'l'a'c'o'l' 'o't' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''n'''''.'''''''''''''t'y'r'e'c'o'r'g'''''''''''''''''''''''''g'n'i'p'p'o'h's'''''''''''''''''''''''''''''''$'p'$' 's'''''''w'''''o'''''r'''''r'''''a''''' ''''''''''''$'q'$' 'a'c'i'l'p'e'r'''''''''''''''d'''''''''e'''''h'''''s'''''a'''''d''''' '''''h'''''t'''''i'''''w''''' '''''d'''''e'''''t'''''c'''''i'''''''''''''''''''''''''''n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 'a'i'v' '''''p'''''e'''''d'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''h'''''t'''''i'''''w''''' '''''n'''''w'''''o'''''h'''''s' 's'i' 'd'n'a' 'l'e'd'o'm' 'r'u'o' 'n'i' 't'i'c'i'l'p''''''''''''''''t'i'c'i'p''''''''''l'p'm'x'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'i' 's'e'g'n'a'h'c' 'e's'e'h't' 'f'o' 'n'o'i't'a'c'i'n'u'm'm'o'c' ''''''''''''''''''''''''.'e'g'a'p'''''''''''' 'y'l'n'o'''''''' '' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','y''''''r'a'''''w''''' '''''c'''''i'''''f'i'c'e'p's'-'n'o'i't'a'c'i'l'p'p'a' 'n'a' 'n'i' ''''''''''''''''''''''''''''o't' 'g'''r'o'f'''''''''''''''''''n'''''.'''''n'''''o'''''i'''''t'''''u''''''''''''''i'''''l'''''o'''''s'''''''''''l'o'e'r' '''''n'''''i'r'e'f'e'd' 'y'l'l'a'i't'n'e't'o''''''''''n'e't'p' 'r'o' 's't'''''''t's'c'i'l'''''''c'i'f'n'o'c' 'h'c'u's' 'g'n'i'v'l'o's'e'r' 'y'l'l'a'c'i't'a'm'o't'u'a' 'n'i' 'r'e'p'o'l'e'v'e'd' 'e'h't' '''''''''''.'''''e'''''g'''''p'''''a' 'e'h't' 'n'w'o'd' 'g'n'i'n'n'u'r' 'e'm'i't' 'd'n'a' 's'w'o'r'r'a' 'd'i'l'o'''''''o'l's' 'd'e'l'l'e'b'a'l' 'h't'i'w' 'n'w'o'h's' 's'n'o'i't'a'c'i'f'i'F'''''','''''''''''''''''''''''y'l''''d'''''o'''m' 'd'n'a' 's''''d'e'x'o'b' 'n'i' 'n'w'a'r'd' '''''''d' 'e't'a't's' 'l'a'c'o'l'''''''''''''''''''''''''''''''''''''''' 'n'w'a'r'd' 's'e't'a't's' 'h't'i'w' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'l'p'm'a'x'e' 'e'h't' 'n'i''''''''''''''''''''''''''$'p'$''''g'n'i'v'''''' ''''''''''''''''''''''''''''' 'e'h't' 'n'o' 'y'l'e't'a'r'a'p'e's' 'n'w'o'h's' 'e'r'a' ','s'a'c'i'l'p'e'r' 'n'e'e'w't'e'b' 'e't'a'g'''''''e'g'a''''e'p'o'r'p' 's'e'g'n'a'h'c' 'n'e''''''''''''''''''''''{'{'{'{'{'{'{'h'w' ','''''''b'''''''e's'a'c'''''''''''''''r'''''a' 'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 'f''''''' 'd'o' 's'd'o'i'r'e'p''''''''''''''''''''''''' 'k'r'o'w't'e'n'''''''n'e' ','e't'a't's' 'l'a'c'o'l' 'r'i'e'h't' 'y'l''''r'o'f'''n'''o''''''''''''''''''''''''''''''''''''''''''''''''''''e't'a't's' 'l'a'c'o'l' 'r'i'e'h''''e't' 'e't'a'''''''''s'e'i'r'e'c'o''''i'r'g''''''t'''u'm' 's'a'c'i'l'p'e'r' 'e''''''''''s'e'i'r'e'c'o'r'g'''''''c'n'i'S''''''''''''''''''''''''''''''''''''s'e'i'r'e'c'o'r'g''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'i'r'e'c'o'r'g'''''''''''''''''''''''''''''''''''''''''''''''''' 'l'a'c''''''''''s'e'i'r'e'c'o'r'g'''''''o'l' 'r'i'e'h't' 'n'o''''''''''''''''''''''''''''''s'e'i'r'e'c'o'r'g''''''''''''''''''''''''''''''''''''''''''''''' 'k'r'o'w'''''''''''''s'e'i'r'e'c'o'r'g''''''''''o'r'c'''''''o't'e'n' 'd'n'a' 'y'l'l'a'c'o'l' 'e't'''''''''''''''''''''''''''''s'e'i'r'e'c'o'r'g''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'i'r'e'c'o'r'g''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'i'r'e'c'o'r'g'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'i'r'e'c'o'r'g''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'i'r'e'c'o'r'g'''''''''''''''''n'a'c' 'd'n'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'n'a' 'e'r'a'h's' 'o't' 'r'e'd'r'o' 'n'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'a' 'h't'i'w' 's'k'r'o'w''''''''''''''''''''''''''''''''''''''''r'o'f' 's'n'o'i't'c'n'u'f' 'm'h't'i'r'o'g'l'a' 'r'u'o' 'd'n'a' ''''''''''''''''''' 'r'u'o' ','s'e's'o'p'r'u'p' 'l'a'n'o'i't'a't'n'e's'e'r'p' 'r'o'f' 'y'l'e'r'u'p' 's'i' 's'a'c'i'l'p''''l'e'r' 'o'w't' 'f'o' 'e'c'i'o'h'c' 'e'h'T' '''''''''''''''''''''F'''''''W'''''s'e'i'r'e'c'o'r'g''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'n'i'b'm'o'c' 'e'r'a' 's'n'''''o'''''i'''t'a'c'i'f'i'd'o'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e't'a'c'i'n'u'm'm'o'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'r'e'e'''''''e'i'p' 'r'i'e'h't' 'h't'i'w' 'n'o'i't'c'e'n'n'o'c' 'k'r'o'w't'e'n' 'm'r'o''''m'f'r'e'p' 'o't' 'n'e'h'w' 'e's'o'o'h'c''''''''''''' 'd'n'a' 'y'l'l''''''''''y'l'l'a'c'o'l' 'e't'a't's' 'e't'a't'u'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'l'a'c'o'l' 'a't'a'd' 's's'e'c'o'r'p' 's'a'c'i'l'p'e'R' '.')'e'd'i'''''''e'd''''''''''e'z'i's' 'd'n'a'h'-'t'h'g'i'r'(' '$'q'$' 'd'n'a' ')'e'd'''''''''')'e'z'i's' 'd'n'a'h'-'t'f'e'l' 'e'h't' 'n'o' 'n'w'a'r'd'(''''''''''d'n'a' '$'p'$' 's'a' 'd'e'l'l'e'b'a'l'''''''''''''''' 'h't'i'w' '}'s'a'c'i'l'p'e'r'{'h'p'm'e''''''' 'r'o' ','''' 's'e'c'i'v'e'd' 'g'n'i't'u'p'm'o'c' 'o'w't' 'e'm'u's's'a' 'e'w' 's'e'l'p'm'a'x'e' 'l'l'a' 'n'I' '''' ''''''']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ''''p' 'a'c'i'l'p'e''''p'R''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''o'''''i'''''t'''''c'''''e'''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'q'$' 'd'n'a' '$'p'$' 's'''a'c'i'l'p'e'r' 's'a' 'd'e'l'l'e'b'a'l' 's'e'c'i'v'e'd' 'g'n'i'''''''''''''d' 'r'e't'u'''''''u't'p'm'o'c''''''''''''''''''''''s'e'c'i'v'e'd' 'o'w't' 'e'''''''''''' 'y'l'e't'a'i'd'e'm'm'i''m'u's's'a' 'e'w' 'r'e'p'a'p' 's'i'h't' '''''''''''''''' 's'i'h''''''''''''''s'u'o'n'o'r'h'c'n'y's'a' 't'n'i' '''b''s'e'l'p'm'a'x'e' 'r''''h't'a'm''''''u'''''o''f'''t'(''e'g''''s'''''''''''''''''''''')'''''''''a' 'l'''''''''''''r'u'o' 'l'a'''''''''''''''''''''''''''''''''''''''' 's'e'l'p'm'a'x'e' 'l'l'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r' 'o'w't' 'e'r'a' 'e'r'e'h't' 'e'l'p'm'a'x'e' 'e'h't' 'n'I' ''{' ')'6','0'('''''''''''''''''''''''''''''''''''''''''''''''''''''''''i''''''''''''''''''''''''''''''''''''''''''''''' ' ' 'n'''''''''''''''''''''}'''''''''''''''''''''''''''''''i'''''''}')''''}'{'f's'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$')'''n'_'k' ''','''''''','''''e'''''l'''''g'''''n'''''a'''''r'''''''' '''''}'''''1'''''-'''''n'''''{'''''_'''''k''''' ''''','''''s'''''t'''''o'''''d'''''''' ''''','''''2'''''_'''''k''''' ''''','''''1'''''_'''''k''''' '''''e'''''l'''''g'''''n'''''a'''''l''''''''('''''''''''''' '''''}'''''r'''''o'''''s'''''r'''''u'''''c'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' '''''o'''''t'''''l'''''a'''''v'''''e'''''''' ''''' ''''' ''''' '''''n''''')'''''i'''''('''''}'''''x'''''d'''''i'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''.''''''''''''''''')'''''n'''''_'''''k''''' ''''','''''''','''''e'''''l'''''g'''''n'''''a'''''r'''''''' '''''}'''''1'-'n'{''''''''''1'-'n'_'k' ','s't'o'd'' ','2'_'k' ','1'_''''1'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'''''''t'a'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n'}'''''$'2'_'}'x'd'I'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$')'''n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n')'i'('}'x'd'i'{''C'''f's'h't'a'm''.')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','',')'1'_'k'('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' '1'_'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''a'm''n'''''''''''''''''}'('x'd'i'{'f's'h't'a'm'''i'''.'''''' ' ' ' '''''''''0'='n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'i'('}'x'd'i'{'f's'h't'a'm''.')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'$'5'_'}'x'd'I'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'0'='i'$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''U''''''''''}'''''''''''('''''''' ''''''''''''''''''''''''i'''''''''''''''''''''''''''''''''''''''''''''' ' ' ''f's''''r''''''''''''''''''''')'k' ','','e'l'g'n''i'''a'r''e'l'g'n'a'l'''''''''''''''''''''''''''''''''''''''''''''''}'$'0'>'n'''''''''''''''' ',''e'g'd'e'w'''''n',''''',' '0'>'n'''''''''''''''''''''''''{'t'i'h't'a'm''$'{'C'''''''''''''''''''''''''''''''''''''''''''''''''i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'1'-'n'('}'x'd'i'{'f's'h't'a'm''.')'i''''''k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'''{'''''i''''f'''''s''''''''''''''''' ',''e'g'd'e'w'','' '0'>'n''''h'''''t'''''a'''''m'''''''' ''''','''''''','''''}'''''x'''''t'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''$'{'C'm'o'i'x'A'''m'o'i'x'A''n'(''''o's''''''r'T'''''x''i''''')''''-'n'(''d'i'''''''''R''''''' 'n''''''''''''''''}'$'''}'x't'c'{'t'i'h't'a'm'' '''''''''''')'''''''''r'''''u'''''c'''''{'''''t''''x''i''''')'n'(''d'i'''''''''''''n''i'''''h'''''t'''''a'''''m''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''''''''''''''''''x''')'n'(''d'i'''''''''$'''''''''''''''''''''''''''''''''''''}'''''''''''''x''i''''')'n'(''d'i''''''''''''''''r'''''''u'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m'''''''' '''''n''''''''''''''''''''''''''')'k' ','','e'''n''''')'0'(''''''''')'''''''''''''''''''''''''0'(''''0'''('''l'g'n''''x''i''''')'n'(''d'i'''a'''''r''''e'l'g'n'a'l''(''''''''''''''''''''''''''''''''' '''''o'''''t'''''l'''''a'''''v'''''e'''''''' '''''''''''}'''''$''''''''''''}'x't'c'{''f''''''r'o's'r'u'c''''''s''''''''''t'i'h't'a'm'''''''t'a''''''''''''''''''''''%''''')'''''}''''''('''''''''''}')'{'f's'h't'a'm''n''x'd'i''''''''''''d'''''a'''''e'''''h'''''{'''''f'''''s'''''h'''''t'''''a'''''m'' ','','e'l'g'n'a'r'' ')'n'_'k'('}'T't's'i'l'{'f's'h't'a'm'' ','}'1'-'n'{'_'k' ','s't'o'd'' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'','e'u'l'b'''$' 't'a' ' ''''$'1''i'B''''_''x'd'''''')'''R't'f'e'l''''''''''p'e'r'''('''''''''''}')'{'f's'h't'a'm''n''x'd''''''(''' 'e'd'o'n''n'''''''''','e'u'l'b''''h's'a'd',''''' ''''''''5''''''''''';')'4','2'(' '-'-' ''-'-'''''')'''''0''''','''2'(' ']''''='5''''''''''''t's'a'e' 'h't'u'o's'.'''''-'-''''''4''''w''''t's'e'w''''''''''''''''t's'e'w' 'h't'u'o's'.''a'''''r'd'''[''''' '''''h'''''t''''''''''''t's'a''''x'd'I'''e''''''''''''2''''''''''t''-'-''''''s'a'e' 'h't'r'o'n'.''''''a'''''p''''''''-'-'''''''''n'''''''''''''''''''''t's'e'w' 'h't'r'o'n'.''''''' '''''''''''''''''s'''''''''''''''''''''0't'f'''3'''4'''e'l''''''''''''n''''''1''''''''''''''''''''''''''''''''''''''''''''''x''3'''d'I'''''''''''''''''''''''''''''''''''o'''''''''0''3'''4'''''''1't'h'g'i'r'''0''''''''''''''''i'''''''1'''2''''''`'''`''''''''''''''''''''''''''''''''''2'''''''''''1'''''''''''''''';'}'}''''']'''''A'`'`' ':'''' '''''y'e'k'`'`'{''{' ')'3','4'(' 't'a' ''')'2't'r'a't's'(' 'e'd'o'n''n''''`'''''''''''''`''''z''''' '''''''''''''''`'`''''''`''''''''''''''''''0't'f'e'l'''`''''''''''''''f'o' 't'n'e'm'p'o'l'e'v'e'd'''''''''''''x'd'I''''''''''''''''4''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''`'`''''''''''''''''''''''''0't'h'g'i'r'''''''''`'''''`' '1''''`'`'''' ''`''''''`'''''''''''''''`' '''''''''`'''''''''''''`'`''''''''''''7'''''''''''''''''''''`'''''''''7''''`' '''''''''''''''''d'e'h's'a'd',''''''''''''''`'`''''`'`''''''''','d'e'h's'a'd''''''''7''''''''''''''''''''''''''''x''5'''d'I'''''''''''''''''''''''''4''1''''''''''5'.'6'''''''''' ''4''''''''''''''''''8'.'0'='e'l'a'c's',''''''4''''''''''''''''''''''''''''''''''''''';')'5','3'(''8''' '-'-' ')''6'''''''''''''''''''''''''''''''''''''''''''''''''s'n'o''''''''''''''''''''''')'e'''s'''''i'''''w'r'e'h't'o' 'r'o'(''' ''''''''''''''''''''''''''''''''''''''h'''''c'''''u'''''s''''' '''''r'''''o'''''f''''' '''''d'''''e'''''e'''''n''''' '''''e'''''h'''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''''''''''''''h'''''t''''' '''''i'''''t'''''a'''''t'''''c'''''e'''''p'''''x'''''e''''' '''''r'''''e'''''p'''''o'''''l'''''e'''''v'''''e'''''d''''' '''''f'''''o''''' '''''''''''''''''''''''''' '''''d'''''n'''''a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''t'''''i'''''c'''''i'''''''''''''''''''''''i'''''c'''''l'''''p'''''''''''''''''''''''l'''''['''''x'''''e''''' '''''r'''''e'''h't'e'h'w' 'f'o' 's'i's'y'l'a'n'a' ''''''''''''''''''''''''''''''''''''''''''''''''''.'k'r'o'w' 'e'r'u't'u'f' 's'a''''t' 'e'g'a'u'g''''''''''u'g'a'n'a'l' 'a'm'e'h'c's'''''''''''''''''''m'e'h'c's'a' 'a' 'h'c'u's''''a' 'f'o' 'n'g'i's'e'd' 'e'h''''e't' 'e'v'a'e'l' 'e'W' '''5'.'0'-','3'(' ']'d'e't't'o'd','w'a'r'd'[' 'h't'a'p''n''''''''''''''0'' 't'f'5'''''0'''''''''6'''''''''''']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ''''e'l'3''''''''''''''''''''''n'''''''6'''''''''3''''''''''''''''''']'w'a'r'd','e'l'g'n'a'8''''t'c'e'r'[' ''''''''''''''''''''''''t'i''''''''''''''''''1'.'''t'i'''''''''''5'.'2''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 'e'z'i's'e't'o'n't'o'o'f''{' ']'e'u'l'b'='t'x'e't'[' ')'8'.'1','4'(' 't'a' ' ')'s'm'm'o'c'(' 'e'd'o'n''n''t't'''''''''''''''{'}''t't't'x'e't'''t'i''''''''''''''''''''''''t'i''''''''''''''''''''''''''8'$'''''''''''''$''''''']''''''''{''}'t't't'x'e't'''w'a'r'd','e'l'g'n'a't'c'e'r'[' '('''''''''''{'}''t't't'x'e't''''''''$''''''''.'$''''''t't't'x'e'$'$'''''t'''''''''''''''''''4''''''''''''''$''''''t'.''t'''''''''{'}''t't't'x'e'''''''t'x't''t'''x'e't''''''''''''t't'''''''''''''''''''''''''''';'}'}''}''''''f'f'0'0'0'0'#''`'`''t'''t'''' ':'''2''''''''{''$'}''t't't'x'''''''''{'}''t't't'x''''t'e't''$''''e't''''''''''''''e'u'l'b'6''''`'`'{'' ''''''''''''''''']'''m'r'''w'''a'r'd'''m'r''','''e'l'g'n'a't'c'e'r'[' ''6'''':'''''''s''.''t'.''t''''''r'o'l'o''''''''''''''t't'''''''''.''8''''''''']'w'a'''t't'''r''''''t't''''''d','e'l'g''t't''''''n'.''a't'c'e'r'[' ''c'''''''''''''''''''''''r'a'V''''''''}'g'n'i'r't'S'{'m'r'h't'a'm'' 'n'i'' 'x''''''''''`''$'''''''''{''$'m'r'h't''m'r''''''a'm''''''''''''''''''''''''''}'''''''{'t''}'''t''''''''{'''t'}''''t'''''''{''''}'''t't't'x'e't''''''t'''''x'e't'''t'''''x'''e't'''''''''''''''''`'''{'''''''''''''''['{' ''''''''$'1'_'x'$' '&''''''[''''''''''''''''''''''')'''''''''''']''''['''''''4''''',''''''''''''''}'y'e'k'{'t't'h't'a'm'''$'$'''8'''''(''''' 't'a' ')'0't'''''''''''''''''']'w'a'r'd','e'l'g'n'a't'c'e'r'[' 'h'g'i'r'(' 'e'd'o'n''n'''''' ''''''''''''''''''''''''''''''''''''`'`''''''''''''''''''''''''''''`'`'''''''''''''''''''''`'6''''`''''''}''''''''''''''''''''''''''']'w'a'r'd','e'''''''''''''''''''''''''''''''''l'g'n'a't'c'e'r'[' '''''''''''''''''''''''''']'5'3'1'='n'i','0'7'2'='t'u'o'[' '''''''''''''''''''''''''''''''''''''''''''''''''''' ']'5'4'='n'i','0''''8'7'2'='t''''=''''t'u'o'[' ''''n'o'i't'a'c'i'l'p'e'r'-'o'r''''''''''''''''`'`'''''''''''`'`'''''''`'`''''''''''''''''''''''''t'''''n'''''i':'c'e's'{'l'e'b'a'l'''''''''''b'a'l't''*'e'''''''`'`''''''''''''''''''''''''''''''''''''''''''''`'`''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''`'`'''''''''0't'f'e'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''`'`'''''''''''`'`''''''''''0'''t'h'g'i'r'''''''''''''''''`'`''''''''''''''''''''t's'a'e' 'h't'''''''''''t's'e'w' 'h't'r'o'n'.''u'o's'.''''''''''''''''''''''''''''''''''''''''''t's'a'e' 'h't'r'o'n'.''''''''''''t's'e'w' 'h't'u'o's'.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';')'5'.'8','5'(' '-'-' ')'5'.'0'-','5'(' ']'d'e't't'o'd','w'a'r'd'[' 'h't'a'p''n''''''''''''''''''''' ''''' ''''8'''''''''''''''''''''''''''']'w'a'r'd','e'l'''''''''''''''' '''''''''4''''2'''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}'n'o'i't'a'c'i'n'u'm'm'o'c' ''''''''s't'n'e''''''''''''e'u'l'a'v'-'i't'l'u'm' ''t'n'o'c''''''k'''''r''''''s'o'w't'e'n' 'e'z'i's'e't'o'n't'o'o'f''{' ']'e'u'l'b'='t'x'e't'[' ')'8'''t't'''.'''1','5'(' '''''' ''''(' 't'a' ')'s'm'm'o'c'(' 'e'd'o'n''n''g''0'1''''n'a't'c'e'r''8'''''''[' '''''''''''t't''''''''''' '''''''''''''''''''''''''''''''''''''t'','h'g'i'r' 'o't' 't'''' ''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'v'a'e'l' 'e'h't''''''''''''' 'e'h't' 's'd'r'a'w'o''''w't'''''''''''''''''''t' 'm'o'r'f' '''''''''''''''''''''''''''','f'a'e'l' 's'd'r'a'w'o't' 't'o'o'r' ',''f'e'l' ',''''''''''h't'a'p' 'e''''''''''''t'i' 's'a's'''' 's'e'k'a't'''h'''t' 's'e'n'i'f'e'd' 'n'o'i's's'e'r'p'x'e' 'e'h'T'''''''''''''''''' '''''''''''''']'''''w'''''a'''''r'''''d''''','''''e'''''l'''''g'''''n'''''a'''''t'''''c'''''e'''''r''''''''6'''''''''''[' '''''''''''''''0'1'''''''0'2'''''''']'w'a'r'd','e'l'g'n'a't'''''''{''''''''''''{''$'''''''''{'''}''t't't'x'e't''}''''m'r'h't'a''t't''''''m'''''m''''l'$'}''t't't'x'e't''''''c'''''e'''''t't'''r'''[' ''''' ''''' '''''6'''''''''''''''''''''''''''']'w'a'r'd','e'l'g' ''n'a't'c'e'r'[' '''''''''4''''''''''''''''''''''''''''t't''''''']'w'a'r'd','e'l'g'n'a'''0'1'''t'c'e'r'[' '''''''''''''''`'2'''''''t't''''''''`''''''''''''''''''']'w'''0'1'''''''0'2'''a'r'd','e'l'g'n'a't''t't''''''c'e'r'[' ''''''''''''''''''''''''''4'''''' ''''''''''''''''''''''''' ']'w'a'r'd','e'l'g'n'a't'c'e'r'['''''`'`'''' '''2''t't''''''''''''''''''''''''''''''0'1'''''''']''t't''''''w'a'r'd','e'l'g'n'a'''''''a'n't'c'e'r'[' '''''''''''''''''''''''''`''''''''''''''''' ']'w'a'r'd','e'l'g'n'a't'c'e'r'['''' ''''''''{''}'t't't'x'e't''''`'''''''''''''s'm'r'o'f'r'e'p'''''''''''''''''''''''''s'e't'u'c'e'x'e'''''''''''''''''''''''''''''''`'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'$'p''''q' 'q'e'n''''q'$' 'a'c'i'l'p'e'r' 'r'e'h't'o' 'y'n'a' 'f'o' 'e't'a't's' 'e'h't'(' '$'q'_'A'$' 'n'o' 'd'n'e'p'e'd' 't'o'n' 'o'd' 't't'''''''e'c'n'i'S''''''`'''''''''''''''''''''''''''''''''''']'w'a'r'd','e'l'g'n'a''t't''''''t'c'e'r'[' '''''' '''''''''`'`'''' ''`'`'''''''''''''''''''''''''''''''''''''''''''''''''''''''''`''''''`'`''''''''''''''' '''''''''`'`'''`''''' ''''''''''''`'`''''''''''''''''''''''''''''''''''''''',''`'`''''e'u'l'b','d'''''''`'`'''''''''''''''''t't''' '''''''' ''''''|'b'r'e'v''''''''''''''''''''''{'t't't'x'e't''''''''''''''''''''e''''''''{'t't't'x''}'''e't'''h'''''''t't'''s'''''''a'd''`'`''''''''`'`'''''''`'`''''''`'`'''''''`'`''''''''''''''' '''''''' ''''''''' ''''''''''''''' ''''''''''''''''''''7'''''''5'3'1'''''''5'4'='n'i',''2''''9''''''''']'0'8'1'='t'u'o'[' ''''''''''''''''`'`'''''''t't''''''5'4'''''''''`'`''''''''''5'3'1'='n'i','''''`'`'''''''''''7'2''''9''''''''''''''''']'0'8'1'='t'u'o'[' ''''' '''''''' ''''''''''''''''''8'''''''''''''''''{'t''}'''t't'x'e't'''''''''''''''''''''''''''''''''''''''';')'8','4'(' '-'-' ')'''''''{'t't't'x'e't''''''5'''''.'''0'-''}''','4'(' ']'d'e't't'o'd','w'a'r'd'[' 'h't'a'p''n''''''''''''''''' ''''''''5'.'7''''''''''''''''''''''''''''''''''''''''''''''5'.'7''''''''''n''''''''''''''''''';'}':'$'q'$' 'a'c'i'l'p'e'R'{' ')'8','8'(' 't'a''' ')'R't'h'g'i'r'(' 'e'd'o'n''n';'}':'$'p'$' 'a'c'i'l'p'e'R'{' ')'8',''''.'0'(''''9' 't'a' ')'R't'f'e'l'(' 'e'd'o'''t't'''n''''n''.'0'=''''''''']'x'i'r'''t'a'm'6''''5''''[' ''e'''''0't'f'e'l''''''''''''{' 'e'd'o'n'' ' ' ' 'n'''''''l'''''a''''''''''''''''''''''{' 'e'd'o'n''''''''''''''';'}'n''' '''''d'o'n''' ' ''6''' ' 'n'5'''''' ';'}'c's','''0'4'''''''''''''{' 'e'd'o'n'' ' ' ' 'n'''''''''4''''''''''''''' ''''''''{' 'e'd'o'n'' '' 'n''''''''';'}'n''' ' ''3''';'}''''''''''']'w'a'r'd','e'l'''''''''']'x'i'r't'a'm'[' ''''''''''''''''''''''''''6'''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 'e'z'i's'e't'o'n't'o'o'f''{' ']'e'u'l'b'='t'x'e't'[' ')'4'.'1','4'(' 't'a' ' ')'s'm'm'o'c'(' 'e'd'o'n''n'g''''''''']'x'i'r't''''''''''''{' 'e'd'o'n'' ' ' ' 'n''a'm'[' ''n''3'''''''''''''''''''{' 'e'd'o'n'' ' ' ' ''''''';'}'n''' 'n''' ';'}''''a't'c'e'r'[' '''''''`'`''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';''''''}'''']'}'']'}''e's'l'a'f' ':'''''e'n'o'd'`'`' ','''''k'l'i'm' 'y'u'b'`'`' ':'''''e'l't'i't'`'`'{''[' ':'''''o'd'o't'`'`'{''{' ']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ')'4','8'(' 't'a' ''''''''''`''''''''''''''')'0't'h'g'i'r'(' 'e'd'o'n''n''`''''''''`'`'''''''''''`'`'''''''''''''''''''''''']'w'a'r'd','e'l'g'n'a't'c'e'r'[' '''''''''''''''''''''''0't'f'e'l''''''''''''''''''''']'w'a'r'd','e'l'g'n'a't'c'e'r'[' '''''''''''''''''''''''0'''t'h'g'i'r''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''']'w'a'r'd','e'l'g'n'a't'c'e'r'[' '''''t's'a'e' 'h't''''''h't'r''''''''''''''''']'w'a'r'd','e'l'g'n'a't'c'e'r'[' ''o''''`'`''''''''`'`'''''''''''`'`'''''''''''''''''''''''''n''''''''''''`'`''''''''''''''''''`'`'''''''''''''''''''''''''''''''''''''''''2'''''''''`'`''''''t's'e'w''''''''''''''' '''='''`'`''''''''''''''''h't'u'''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''''''''''''''t's'''''''''t''`'`''''s'a'e' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','e'u'l'b'''''''h't'u''''''''''''''''']'5'3'1''''''''''''t's'e'w' 'h't'r'o'n'.'='n'i','''']'0'7'''''''0'8'2'='t'u'o'[' ''o's'.','''''''''''''t's'a'e' 'h't'r'o'n'.'''''''''''''''' ']'5'4'='n'i','0'7'2'='t'u'o'[' ''d'e'h's'a'd'''''''''''''''''''''''''''''''''h't'u'o's'.'','e'u'l'b','d'e'h's'a'd'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h't'r'e'w' '''''''''''''''''''h't'u'o's''''''o''''`'`''''''s'''.''u'o's'.''''''''''''''''''''''''''''''''''t's'a'e'''''''o'n'.''''''''''t's'e'w' 'h't'''''r'o'n'.''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''' '''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''`''`'`''''`'''''''-''','e''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''8'.'0'='e'''''0't'''`'`'''''`'`'f'e'0''''''''''''''''''''''''''''''''l''''''''l''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''`'`''''';'}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','e'u'l'b','d'e'h's'a'd'''''''''''''''''''''''''''','e'u'l'b','d'e'h's'a'd'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''{''{''' ')'0'.'6','''''''''''8'(' 't'a' ')'0't'h'g'i'r'(' 'e'd'o'n''n'a'''c's',''u'l'b','''''''''d'''''e'''''h'''s'a'd''''''''''''''''''''''''''''''''''''''''''''''''''''''`'`''''''''`'`''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''`'`'''''''''''`'`''''''`'`''''''''''''''''''''''''''''''''''''''''''''''`'`''''''''''''''''''''''''''''''''''''''''''''`'`''''''''''''''''''{'''''''''''''''''''''''''''''''''''''''''''''0't'f'e'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'r'o'p'p'u'''''s'''''''''0'''t'h'g'i'r'''''''''''''''n'o'i't'a'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 'd'n'''''''''''''e'h't' 'e'''y'a'm''''''''''''''''''''''''''''m'u's's'a' 'e'W'''''''''''''''''>'-',''''''''''e'u'l'b','d'e'h's'a'd',''a''''''''''''''>'-','''''''''''''''''''''''''e'u'l'b','d'e'h's'a'd',''''''''l'''''e'''''d'''''o'''''m''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''o'''''i'''''t'''''''''''''''''''''''''' ''','y'a''''d'n'a'''''l'''''''''''''y'l'a'y'e'd'a'c'i'l'p'e'R'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'C'{'n'o'i't'c'e's'b'u's''n'n'l'e'd' 'd'n'a' 's'n'o'i't'r'e's'n'i' 's'a' 'd'e's's'e'r'p'x'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''S''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'''''''''''''''''''''''e'e'r'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'r'e's'u' 't'n'e'r'e'f'f'i'd' 'd'n'a' 'r'e's'u' 'e'm'a's' 'e'h't' 'y'b' 'd'e'n'w'o' 's'e'c'i'v'e'd' 'n'e'e'w't'e'b' 'h's'i'u'g'n'i't's'i'd' 't'o'n' 'o'd' 'e'W' ''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'l'a'c'i't's'i'm'i't'p'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e'r' 'e'n'''''''''''''''''''''''''''''a'i'v' 'd'e'r'e'v'i'l'e'd' 'e'b' 'o't' 's'e'g'a's's'e'm' ''o' 'y'b' 't'''''''r'e'h't'o' 'n'e's' '''''''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''''''''''s'a'c'i'l'p'e'r' 'l'l'a' 'o't' '''''' 'y'b'''''''''''''''''''''s''''''''''''''''''''''''''''''''' 'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''T' '.'s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'e'r'h'''''''''''n'o'i't'p'y'r'c'n'e' 'd'n'e'-'o't'-'d'n'e' 'h't'i'w' '''''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'o' 't'e's' 'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'t'g'2'1'0'2':'a's'u'i'n'e'i'B'{'e't'i'c''~'e't'a't's' 'e'm'a's' 'e'h't' 'o't' 's'd'a'e'l' 'o's'l'a' 's'e't'a'd'p'u' 'e's'o'h't' 'f'o' 'n'o'i't'u'c'e'x'e' 't'n'e'r'r'u'c'n'o'c' 'n'e'h't' ','e't'a't's' 'e'm'a's' 'e'h't' 'o't' 'd'a'e'l' 's'e't'a'd'p'u' 'f'o' 's'n'o'i't'a't'u'm'r'e'p' 'l'a'i't'n'e'u'q'e's' 'l'l'a' 'f'I'''''''''''''''''''''''''''''''''''''''' 't'e's' 'e'm'o's' 'r'o'F'''''''''''''a' 'f'I' 'm'e't'i''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'w''''a''''''''e'v'l'o's'e'r' 'e'r'a' 's't'c'i'l'f'n'o'c' 'w'o'h' '.''''''s'''''e'''b'i'r'c's'e'd' 't'a'h't' 's'c'i't'n'a'm'e's' 'l'a'm'r'o'f' 'e'v'i'g''''''''''o'r'p' 'e'w' '}'s'c'i't'n'a'm'e's':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'n'I'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''S''''''''''''' '''''''''''''''''''''''''''''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'}'d'e't'a'l'e'r':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'e'e's'(' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i't'a'c'i'l'p'e'r' 'c'i't's'i'm'i't'p'''''''''''''''''''''''''''''''''''T''''''''''''''''''''''''''''''''''''' 'e'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'d'k'6'0'0'2':'i'L'{'e't'i'c''~'s'e's'a'e'r'c'n'i' 's'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'f'o' 'r'e'b'm'u'n' 'e'h't' 's'a'''''''''''''''''''''''''''''''''''' 'y'l'd'i'p'a'r' 's'e'd'a'r'g'e'd' 's'm'h't'i'r'o'g'l'a' 'T'O' 'f'o' 'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o' 't'b'u'o'd' 't's'a'c' 'e'v'a'h' 's'e'i'd'u't's' 'e'c'n'a'm'r'o'f'r'e'p' ','r'e'v'o'e'r'o'M' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 'd'n'a' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' ','n'o'i't'a'c'i'l'p'e'r' 'c'i't's'i'm'i't'p'o' 'o't' 's'e'h'c'a'o'r'p'p'a' 'g'n'i't's'i'x'e' 's's'u'c's'i'd' 'e'w' 'n'o'i't'c'e's' 's'i'h't' 'n'I'n'n''o' 'e's'u' 't'a'h't' 's'n'o'i't'a'c'i'l'p'p'a' 'f'o' 't'n'e'm'p'o'l'e'v'e'd' 'e'h't' 'e'h't' 'y'f'i'l'p'm'i's' 'o'''e'b' ''t' 'e'p'''''''o'h' 'e'w' ','s'e'r'u't'c'u'r't's' 'h'c'u's' 'n'o' 'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 's'e'l'd'n'a'h'''''''''''''''''''''''''''''''''''' 't'a'h't' 'm'h't'i'r'o'g'l'a' 'n'a' 'g'n'i'd'i'v'o'r'p' 'y'b' ';'s'n'o'i't'a'c'i'l'p'p'a' 'y'n'a'm' 'r'o'f''' 't'n'e'm'e'r'i'''''''''''''''''''''''''''''''''''')'}'l'm'x'-'n'o's'j':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'e'e's'(' 'u'q'e'r' 't'n'a't'r'o'p'm'i' 'n'a' 'e'r'a' 's'e'r'u't'c'u'r't's' 'd'e't's'e'n' ','d'n'a'h' 'r'e'h't'o' 'e'h't' 'n'O' '.'}'s'e'l'p'm'a'x'e':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'n'i' 'e'l'p'm'a'x'e' 'y'b' 's'e'g'n'e'l'l'a'h'c' 'e's'o'h't' 'f'o' 'e'm'o's' 'e't'a'r't's'u'l'l'i' 'e'W' '.'e'e'r't' 'e'h't' 'f'o' 's'l'e'v'e'l' 't'n'e'r'e'f'f'i'd' 't'a' 's'n'e'r'r'u'c'n'o'c'''''t'i'd'e' 'f'o' 'y't'i'l'i'b'i's's'o'p' 'e'h't' 'o't' 'e'u'd' ','s'e'r'u't'c'u'r't's' 't'a'l'f' 'n'i' 'e's'i'r'a' 't'o'n' 'o'd' 't'a'h't' 's'e'g'n'e'l'l'a'h'c' 'e'l't'b'u's' 'p'u' 's'n'e'p'o' 's'e'r'u't'c'u'r't's' 'd'e't's'e'n' 'y'l'i'r'a'r't'i'b'r'a' 'o't'n'i' 's't's'i'l' 'd'n'a' 's'p'a'm' 'g'n'i's'o'p'm'o'C'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'p'y't'a't'a'd' 'e'l'b'a's'o'p'm'o'c' 'y'l'i'r'a'r't'i'b'r'a' 'n'a' 'o't'n'i' 's'e'r'u't'c'u'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'T'D'R'C' 'f'o' 'd'n'i'k' 'a' 's'i' 'r'e'p'a'p' 's'i'h't' 'n'i' 'd'e'b'i'r'c's'e'd' 'e'p'y't'a't'a'd' 'N'O'S'J' 'e'h'T' ''t's' 'e's'e'h't' 'f'o' 'l'l'a' 'e't'a'r'g'e't'n'i' 'o't' 't's'r'i'f' 'e'h't' 's'i' 'r'e'p'a'p' 's'i'h't' 'e'g'd'e'l'w'o'n'k' 'r'u'o' '''''''''''''''''''''''''''''''''''''''''''s''' ')'T'D'R'C'(''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a' 's'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'n'o'i't'a'r'e'p'o' 'e't'a'd'p'u' 'e'v'i't'a't'u'm'm'o'c'-'n'o'n' 'g'n'i'm'r'o'f''''o's'n'a'r't' 'y'b' 's'k'r'o'w' 'T'O' ','t's'a'r't'n'o'c' 'y'B' ''o'i't'a'r'e'p'o' 's'm'r'o'f's'n'a'r't' 'h'c'i'h'w' ','T'O' 'e'k'i'l'n'U' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'v'i't'i'm'i'r'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i't'c'u'r't's'n'o'c' 'y'b' 'e'v'i't'a't'u'm'm'o'c' 's'n'o'i't'a'r'e'p'o' 'n'o'i't'a'c'i'f'i'd'o'm' 'g'n'i'k'a'm' 'd'n'a' ','e'r'u't'c'u'r't's' 'a't'a'd' 'e'h't' 'o't' 'a't'a'd'a't'e'm' 'l'a'n'o'i't'i'd'd'a' 'g'n'i'h'c'a't't'a' 'y'b' 'k'r'o'w' 'y'e'h'T' '.'s'e't'a'd'p'u' 't'n'e'r'r'u'c'n'o'c' 'h'c'u's' 'f'o' 'e'c'n'e'g'r'e'v'n'o'c' 'e'e't'n'a'r'a'u'g' 't'a'h't' 'd'n'a' 'd'e'i'f'i'd'o'm' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'b' 'n'a'c' 't'a'h'''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''n''''' '''''s'''''e'''''r'''''u'''''t'''''c'''''u'''''r'''''t'''''s''''' '''''a'''''t'''''a'''''d''''' '''''f'''''o''''' '''y'l'i'm'a'f' 'a' 'e'r'a' 's'e'p'y't'a't'a'd' 'd'e't'a'c'i'l'p'e'r' 'e'e'r'f'-'t'c'i'l'f'n'o'C'n'o't' ','y'l'l'a'u'd'i'v'i'd'n'i' 's'r'e't's'i'g'e'r' 'd'n'a' 's'p'a'm' ','s't's'i'l' 'r'o'f' 'd'e'n'i'f'e'd' 'n'e'e'b' 'y'l's'u'o'i'v'e'r'p' 'e'v'a'h' 's'm'h't'i'r'o'g'l'a' 'r'a'l'i'm'i's' 'h'g'u'o'h't'l'A' '.'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 'c'i't'a'm'o't'u'a' 'h't'i'w' 's'e'r'u't'c'u'r't's''S''' 'a't'a'd' 'N'O'S'J' 'f'o' 'g'n'i't'i'd'e' 't'n'e'r'r'u'c'n'o'c' ','e'v'i't'a'r'o'b'a'l'l'o'c' 'r'o'f' 's'c'i't'n'a'm'e's' 'l'a'm'r'o''''o'f' 'd'n'a' '''''''''''''''''''''''''t'c'i'l'f'n'o'c' 't'a'h't' 'e'v'e'i'l'e'b' 'e'W'''m'''''h'''''t'''''i'''''r'''''o'''''g'''''l'''''a''''' '''''n'''''a''''' '''''e'''''n'''''i'''''f'''''e'''''d''''' '''''o'''''t''''' '''''s'''''i''''' '''''k'''r'o'w' 's'i'h't' 'n'i' 'n'o'i't'u'b'i'r't'n'o'c' 'n'i'a'm' 'S''''r'u'O'n''s'n'o'i't'u'b'i'r't'n'o'''''''''''''''''''}'d'e't'a'l'e'r':'c'e's'{'l'e'b'a'l'''''''''''''e'l'b'a'''c' 'r'u'O'{'n'o'i't'c'e's'b'u's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t's'o'l' 'g'n'i'e'b' 't'u'p'n'i' 'r'e's'u' 'f'o' 'k's'i'r' 'e'h't' 's'n'e'p'o'''''''''''' 'y'l'l'a'm'r'o'f'n'.''i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'd'r'o'f's'e'r'e'B'/'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'c'i't'n'a'm'e's':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'n'i' 's'w'o'l'l'o'f' 'm'h't'i'r'o'g'l'a' 'e'h't' 'f'o' 'n'o'i't'a't'n'e's'e'r'p' 'l'a'm'r'o'f' 'A' '.'s'e'r'u't'c'u'r't's' 'a't'a'd' 'N'O'S'J' 'f'o' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c''''''''''''''''''''''' 'o't' 'h'c'a'o'r'p'p'a' 'r'u'o' 'e'c'u'd'o'r't'n'i' '''n'n'' 'o's'l'a' 'k'c'a'b' 'd'e'l'l''T'''o'''''r''''' '''''g'''''n'''''i'''''e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'l'p'm'a'x'e' 'e'm'o's' 't'n'e's'e'r'p' 'e'w' ','d'e'i'f'i'd'o'm' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'r'a' 's't'n'e'm'u'c'o'd' 'N'O'S'J' 'n'e'h'w' 'b''''' '''''r'''''e'''''t'''''a'''''l''''' '''''s'''''n'''''o'''''i'''''t'''''c'''''a'''''s'''''n'''''a'''''r'''''t''''' '''''e'''''v'''''i'''''t'''''a'''''t'''''n'''''e'''''t''''' '''''f'''''o''''' '''''y'''''t'''''i'''''l'''''i'''''b'''''i'''''s'''''s'''''o'''''p''''' '''''e'''''h'''''T' ''''''''''''''''''''''''''''''''''''''''e'w' ','s'e'c'i'v'e'd' 't'n'e'r'e'f'f'i'd' 'n'o' 'd'e'i'f'i'd'o'm' 'y'l't'n'e'r'r'u'c'n'o'c' 's'i' 't'n'e'm'u'c'o'd' 'N'O'S'J' 'e'h't' 'n'e'h'W'' ''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'p'a'p' 's'i'h't' 'f'o' 'e'p'o'c's' 'e'h't' 'f'o' 'e'd'i's't'u'o' 'e'r'a' 's'l'o'c'o't'o'r'p' 'c'i'h'p'a'r'g'o't'p'y'r'c' 'y'n'a' 'd'n'a' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'k'r'o'w't'e'n' 'e'h't' 'f'o' 's'l'i'a't'e'd' 'e'h't' 'h'g'u'o'h't'l'a' ',''''''''''''''''''''''.'d'e's'u' 'e'b' 'o't' '}'g'k'5'1'0'2':'r'e'g'n'U'{'e't'i'c''~'''' 'l'o'c'o't'o'r'p' 'g'n'i'g'a's's'e'm' 'e'r'u'c'e's' 'a' 'd'n'a' 'k'r'o'w't'e'n' 'r'e'e'p'-'o't'-'r'e'e'p' 'a' 's'w'o'l'l'a' 'h'c'a'o'r'p'p'a' 's'i'h't' ';''''''s'k'r'o'-'''e'd'i'''w'''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'g'a's's'e'm' 's's'e'c'o'r'p' 'r'o' 'm'r'o'f's'n'a'r't' 'o't' 'r'e'v'r'e's' 'y'n'a' 'n'o' 'd'n'e'p'e'd' 't'o'n' 's'e'o'd' 'd'n'a' 's't'n'e'i'l'c' 'e'h't' 'n'o' 'k'r'o'w' 'l'l'a' 's'm'r'o'f'r'e'p' 'm'h't'i'r'o'g'l'a' 'r'u'O'''''''''' 'e'W' '.'s'e'g'a's's'e'm' 'e't'a'c'i'l'p'u'd' 'r'o' 'r'e'd'r'o'''''''''''''''''''''''''s'i' 'e'r'u't'c'u'r't's','''''t' 'e'u'l'a'v'-'y'e'k' 's'i'''''''''''''''''''''''''''''''''r'''''o'''''-'''''e'r' 'y'l'i'r'a'r't'i'b'r'a' 'o't' 'd'e'w'o'l'l'a' 's'i' 'k'r'o'w't'e'n' 'e'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''u'o'b'a' 's'n'''s'i' '''g'n'i'''''o'i't'p'm'u's's'a' 'o'n' 'e'k'a'm' 'e'W' ''l'i'a'f' 'y'r'e'v'i'l'e'd''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''/'.'y'r'a's's'e'c'e'n' 'f'i' 'g'n'i'y'r't'e'r' 'y'b' 'y'r'a's's'e'c'e'n' 'f'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'n'o'i't'i'd'n'''''''''''''''''''''''''''''''''''n'I'd'e'k'n'i'L' 'd'n'a' 'e'v'i't'r'o'p'p'a'R' 'g'n'i'd'u'l'c'n'i' ',''o'c' 's's'e'n'e'v'i'l' 'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'r'e'v''''''''''e'v'e'i'l'e'd' 'y'l'l'a'u't'n'e'v'e' 'e'r'a' 's'e'g'a's's'e'm' 't'a'h't' 'n'o'i't'i'd'''''''''n'''''''''''''''''o'''''c''''' '''''s'''''s'''''e'''''n'''''e'''''v'''''i'''''l''''' '''''e'''''h'''''t''''' '''''s'''''i''''' '''''k'''''r'''''o'''''w'''''t'''''e'''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'c'i'v'r'e's' 't'e'n'r'e't'n'I' 'd'e's'a'b'-'d''''b'u'o'l'c' 'd'n'a' 's'e'c'i'v'e'd' 'e'l'i'b'o'm' 'n'e'e'w't'e'b' 'n'o'i't'c'a'r'e't'n'i' 'e'h't' 'y'b' 'd'e'c'u'd'n'i' 's'm'e'l'b'o'r'p' 'y'c'a'v'i'''''''v'o'r'p' 'd'n'a' 'y't'i'r'u'c''''''''''r'c'u'e's' 'e'h't' 's'a' 'l'l'e'w' 's'a' ','s'e'v'l'e's'm'e'h't' 's'e'c'i'v'e'd' 'e'h't' 'f'o' 'y'c'a'v'i'r'p' 'd'n'a' 'y't'i'r'u'c'e's' 'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'l'g'n'a' 'e'e'r'h't' 'm'o'e'r'f' 'n'i'a'm'o'd' 's'i'h't' 't'a' 's'k'o'o'l' 'e'H' '''''''''''''''''''' '''''h'''''c'''''''''''''''''''''''c'''''h'''''i'''''h'''''w'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i't't'e's' 'g'n'i't'u'p'm'o'c' 'e'l'i'b'o'm' 'a' 'n'i' 'y'c'a'v'i''''''''''a'v'o'r'p' 'n'o'i't'a'c'o'l' 'g'n'i''''e'd'i'v'o'r'p' 'f'o' 's'n'a'e'm' 'a' 's'a' 'y't'i'm'y'n'o'n'a' 'f'o' 's's'e'n'e'v'i't'c'e'f'f'e' 'e'h't' 'd'e'r'o'l'p'x'e''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''t'''''n'''''e'''''m'''''e'''''r'''''i'''''u'''''q'''''e'''''r''''' '''''y'''''l'''''n'''''o''''' '''''r'''''u'''''O'''''''''''''''''''''''''''''''' '''''e'''W''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'p'o't'p''''b'a'l' 'd'n'a' 's't'e'l'b'a't' ','''' 's'e'n'o'h'p't'r'a'm's' 's'a' 'h'c'u's' 's'e'c'i'v'e'd' 'e'l'i'b'''''''l'i'o'm' 'd'e'k'r'o'w'''''''''''''r'k'w'o't'e'n'''''''''''''i'b'o'm' 'n'o' 's'u'c'o'f' 'r'a'l'u'c'i't'r'a'p' 'a''''p' 'h't'i'w' ','s'm'e't's'y's' 'd'e't'u'b'i'r't's'i'd' 'e'l'a'c's'-'e'g'r'a'l' 'f'o' 'y'c'a'v'i'r'p' 'd'n'a' 'y't'i'r'u'c'e's' 'e'h't' 's'e'r'o'l''''''''''e'r'o'p'x'e' 'k'r'o'w''''''''''''''''''''''''''''''''''''''''o'f'''''''''''''''''''e'd'u'l'c'n'i' '''''''''''''''''''''' 'r'e'v'o'c' 's''''e't's'e'r'e't'n'i''''''''''t'i'w' 'h'c'r'a'e's'e'r' 't'n'e'r'r'u'c' 's'i'H'''''''''''''''''''''''''''''''''''''''''''''''''''''''h' 'e'h' 'y'l't'n'e'c'e'r' 'e'r'o'M'''''''''w'''''d'''''n'''''n'''''.'''''s'''''a'''c'i'l'p'e'r' 'r'e'h't'o' 'o't' 's't'i'd'e' 'e's'o'h't' 'e't'a'g'a'p'o'r'p' 'y'l's'u'o'n'o'r'h'c'n'y's'a' 'o't' 'd'n'a' ','t'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'a'c'i'l'p'e'r'''''''''''''''' 'y'p'o'c' 'l'a'c'o'l' 's't'i' 'y'f'i'd'o'm' 'o't' 'e'c'i'v'e'd''''''''''p'e'r' 'h'c'a'e' 's'w'o'l'l'a' 'l'e'd'o'm' 'r'u'O' ''t'i'v'i't'c'e'n'n'o'c' 'k'r'o'w't'e'n' 't'n'e't't'i'm'r'e't'n'i' 'e'v'a'h' 'h'c'i'h'w' ',''.'s'p'o't'p'a'l' 'd'n'a' ''''''''''''''''''''''e'l'b'a't' ','s'e'n'o'h'p't'r'a'm's' 's'a' 'h'c'u's' 's'e'c'i'v'e'd' 'e'l'i'b'o'm' 'n'o' 's'u'c'o'f''''p'''''''o'c''''''''''''''''''''''''''''''' 'y'l'i'r'a'm'i'r'p' 'e'w' 't'u'b' ','s'r'e't'n'e'c'a't'a'd' 'n'i' 's'r'e'v'r'e's' 'e''.'b' 'd'l'u'o'c' 's'e'c'i'v'e'd' 'e's'o'h'T' '.'s'e'c'i'v'e'd' 'l'a'r'e'v'e's' 'n'o' 'd'e't'a'c'i'l'p'e'r' 's'i' 't'n'e'm'u'c'o'd' 'N'O'S'J' 'e'h't' 'f'o' 'y'p'o'c' 'l'l'u'f' 'a' 'h'c'i'h'w' 'n'i' 's'm'e't's'y's' 'r'e'd'i's'n'o'c' 'e'W''n'n'e' 'n'e'h't' 'e'r'a' 's't'i'd'e' 'r'e't'c'a'r'a'h'c'-'y'b'-'r'e't'c'a'r'a'h'c' ';'s'g'n'i'r't's' ''''i's''''''''''''''''''''''''''''''''''''''''''''s'r'e't'c'a'r'a'h'c' 'l'a'u'd'i''''''''''''''''''''''''''''v'i'd'n'i' 'f'o' 't's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'y'b' 'd'e't'n'e's'e'r'p'e'r' 'e'b' 'n'a'c' 't'n'e'm'u'c'o'd' 't'x'e't' 'a' ','e'l'p'm'a'x'e' 'r'o'F' '.'s'n'o'i't'a'c'i'l'p'p'a' 'f'o' 'e'g'n'a'r' 'e'd'i'w' 'a' 'f'o' 'e't'a't's' 'e'h't' 's's'e'r'p'x'e' 'o't' 't'n'e'i'c'i'f'f'u's' 's'i' 'l'e'd'o'm' 's'i'h'T'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'a't'a'd' 'n'o'i't'a'c'i'l'p'p'a' 'l'e'd'o'm' 'o't' 'N'O'S'J' 'g'n'i's'u' 'f'o' 's'e'l'p'm'a'x'e' 'e'l'p'm'i's'''''''x'e' 'e'm'o's' 'w'o'h's' 'e'w' '}'s'e'l'p'm'a'x''''a'e':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'n'I'''''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'u'l'a'v' 'w'e'n' 'a' 'd'e'n'g'i's's'a' 'e'b' 'n'a'c' 't'a'h't' '}'r'e't's'i'g'e'r'{'h'p'm'e'' 'a' 's'a' 't'i' 'g'n'i't'a'e'r't' 'y'b' 'd'e'i'f'i'd'o'm' 'e'b' 'o't' 'e'd'o'n' 'f'a'e'l' 'a' 'f'o' 'e'u'l'a'v' 'e'h't''''''' 'a' 'w'o'l'l'a' 't'u'b' ','e'l'b'a't'u'm'm'i' 's'a' 's'e'u'l'a'v' 'e'v'i't'i'm'i'r'p' 't'a'e'r't' 'e'W' '.')'l'l'u'n' 'r'o' ','n'a'e'l'o'o'b' ','r'e'b'm'u'n' ','g'n'i'r't's'(' 'e'u'l'a'v' 'e'v'i't'i'm'i'r'p' 'a' 's'''f'a'e'l' 'a' 'r'o' ','e'd'o'n' ''.'h'c'n'a'r'b' 'r'e'h't'o'n'a' 'r'e'h't'i'e' 'e'b' 'n'a'c' 'e'd'o'n' 'h'c'n'a'r'b' 'a' 'f'o' 'd'l'i'h'c' 'A''''e'''''''''''''''''''''''''''''''''''''' 'n'i'a't'n'o'c' 'e'e'r't' 'e'h't' 'f'o' 's'e'v'a'e'l' 'e'h'T's'n'i' 'y'b' 'd'e't'a't'u'm' 'e'b' 'n'a'c' 't's'i'l' 'e'h'T' '','e'l'b'a't'u'm' 'e'r'a' 's'e'u'l'a'v' 't'u'b' ','e'l'b'a't'u'm'm'i' 'e'r'a' 's'y'e'K' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''[''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''' '.')'l'l'u'n' '''r'o' 'n'a'e'l'o'o'b' ','r'e'b'm'u'n' ','g'n'i'r't's'(' 'e'u'l'a'v' 'e'v'i't'i'm'i'r'p' 'a' 'g'n'i'n'i'a't'n'o'c' 'e'd'o'n' 'f'a'e'l' 'A' ']':'r'e't's'i'g'e'R'['m'e't'i''n'.'}'y'a'r'r'a'{'h'p'm'e'' 'n'a' 's'a' 'n'w'o'n'k' 'o's'l'a' 's'i' 't's'i'l' 'N'O'S'J' 'A'''''''h'T' '.'n'o'i't'a'c'i'l'p'p'a' 'e'h't' 'y'b' 'd'e'n'i'f'e'd' 'r'e'd'r'o' 'n'a' 'e'v'a'h' 'n'e'r'd'l'i'h'c' 'e's'o'h'w' 'e'd'o'n' 'h'c'n'a'r'b' 'A' ']'''''':'t's'i'L'{'m'e't'i''n'.'}'t'c'e'j'b'o'{'h'p'm'e'' 'n'a' 's'a' 'n'w'o'n'k' 'o's'l'a' 's'i' 'p'a'm' 'N'O'S'J' 'A' '.'n'e'r'd'l'i'h'c' 'e'h't' 'f'o' 'e'n'o' 's'e'i'f'i't'n'e'd'i' 'y'l'e'u'q'i'n'u' 'y'e'k' 'A' '.'}'y'e'k'{'h'p'm'e'' 'g'n'i'r't's' 'a' 'h't'i'w' 'd'e'l'l'e'b'a'l' 's'i' 'd''''t'x'e'n''''''l'''''i'''''h'''''c''''' '''''h'''''c'''''a'''''e''' 'e'r'e'h'w' 'd'n'a' ','r'e'd'r'o' 'd'e'n'i'f'e'd' 'o'n' 'e'v'a'h''''''''''''''''''''''''''''''''''''''''''''''d'e'r'e'd'r'o' 't'o'n' 'e'r'a' 'n'e'r'd'l'i'h'c' 'e's'o'h'w' 'e'd'o'n' 'h'c'n'a'r'b' 'A' ']':'p'a'M'['m'e't'i''n'''''''''''''''''''}'n'o'i't'p'i'r'c's'e'd'{'d'n'e''n'}'n'o'i't'p'i'r'c's'e'd'{'n'i'g'e'b''n'n':'e'd'o'n' 'f'o' 's'e'p'y't' 'g'n'i'w'o'l'l'o'f' 'e'h't' 'f'o' 'g'n'i't's'i's'n'o'c' 'e'e'r't' 'a' 's'i' 't'n'e'm'u'c'o'd' 'N'O'S'J' 'A'n'n'''''''''''''i'c'i'l'p'm'i's' 'r'o'f' ';''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'a'm'e'h'c's' 't'i'c'i'l'p'x'e' 'n'a' 't'u'o'h't'i'w' 'N'O'S'J' 'd'e'p'y't'n'u' 'y'l'n'o'''''''`'`' 'r'e'd'i's'n'o'c' 'e'w' 'r'e'p'a'p' 's'i'h't' 'n'i' 't'u'b' ','a'm'e'h'c's' 'a' 'y'b' 'd'e'n'i'a'r't's'n'o'c' 'e'b' 'y'l'l'a'n'o'i't'p'o' 'n'a'c' 't'n'e'm'u'c'o'd' 'N'O'S'J' 'a' 'f'o' 'e'r'u't'c'u'r't's' 'e'h'T'''.'t'a'm'r'o'f' 'g'n'i'd'o'c'n'e' 'a't'a'd' 'e's'o'''''p'''''r'''''u'''''p'-'l'a' ''r'e'n'e'g' 'r'a'l'u'p'o'p' 'a' 's'i' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'l'm'x'-'n'o's'j':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'n'i' 'r'e'h't'r'u'f' 'm'e'h't' 'e'r'a'p'm'o'c' 'e'w' 'd'n'a' ','L'M'X' 'o't' 's'e'i't'i'r'a'l'i'm'i's' 's'a'h' 't'I' 'N'O'S'J'n'n'}'l'e'd'o'm' 'a't'a'd' 'N'O'S'J'{'n'o'i't'c'e's'b'u's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'c'i'v'e'd' 'e'l'i'b'o'm' 'r'o'f' 's'n'o'i't'a'c'i'l'p'p'a' 'g'n'i'z'i'n'o'r'h'c'n'y's'-'e't'a't's' 'd'n'a' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'f'o' 't'n'e'm'p'o'l'e'v'e'd' 'e'h't' 'y'f'i'l'p'm'i's' 'y'l'l'a'c'i't's'a'r'd'''''''''''''''''''''''''c'i'f'i'n'g'i's' 'a't'n'e'm'e'l'p'm'i'''''''''''''''''''''''''''''''''''''''''''''''''''' 'l'l'i'w' 'e'p'y't'a't'a'd' 's'i'h't' '''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'a'h't' 't'c'e'p'x'e' 'e'W' '.'n'o'i't'a'm'r'o'f'n'i' 'f'o' 's's'o'l' 't'u'o'h't'i'w' 's'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'y'n'a' 's'e'g'r'e'm' 'y'l'l'a'c'i't'a'm'o't'u'a' 'd'n'a' ','l'e'd'o'm' 'a't'a'd' 'N'O'S'J' 'e'h't' 'f'o' 's's'e'.''n'e'v'i's's'e'r'p'x'e' 'l'l'u'f' 'e'h't' 's'e'd'i'v'o'r'p' 't'a'h't' 'e'p'y't'a't'a'd' 'a''''''''''''''''''''''''''''t's'r'i'f' 'e'h't''''''''''''''''''''''''''''''''''''}'$'}'d'a'e'h'{'f's'h't'a'm'' '='t'o'n'' 'n'_'k'$'{'C'm'o'i'x'A''n' 't'n'e's'e'r'p' 'e'w' 'r'e''i'B''''p'a'p' 's'i'h't' 'n'I' ''''''''''''''''''s'a'c'i'l'p'e'r''''''''''''''''a'c'i'l'p'e'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'u'o'b'a' 'n'o's'a'e'r' 'o't' 't'l'u'c'i'f'f'i'd' 'e'r'a' 's'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 's'A' '.'''''''''''''''''''''''''''''''''''''c'e'r'r'o'c' 'e'h't' ','s'm's'i'n'a'h'c'e'm' 'c'i'f'i'c'e'p's'-'n'o'i't'a'c'i'l'p'p'''''''''s'a'c'i'l'p'e'r'''a''''' '''''d'n'a' 'c'o'h'-'d'a' 'f'o' 'e'g'n'a'r' 'a' 'h't'i'w' 'm'e'l'b'o'r'p' 's'i'h't' 'e'v'l'o's' 's'n'o'i't'a'c'i'l'p'p'a' '''''''y'l't'n'e'r'r'u'C'n'n''h't' 'h'c'u's' 's'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 's'e'v'l'o's'e'r' 'y'l'l'a'c'i't'a'm'o't'u'a' 't'a'h't' 'e'r'u't'c'u'r't's' 'a't'a'd' 'N'O'S'J' 'a' 'r'o'f' 's'c'i't'n'a'm'e's' 'l'a'm'r'o'f' 'd'n'a' 'm'h't'i'r'o'g'l'a' 'n'a' 't'n'e's'e'r'p' 'e'w' 'r'e'p'a'p' 's'i'h't' 'n'I' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'c'i'v'e'd' 'e'l'p'i't'l'u'm' 'n'o' 'y'l't'n'e'r'r'u'c'n'o'c' 'd'e'i'f'i'd'o'm' 'd'n'a'''''''i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e'i'f'i'd'o'm' 'e'b' 'y'a'm' 't'i' 'e'r'e'h'w' 's'e'c'i'v'e'd' 'e'l'p'i't'l'u'm' 'n'o' 'd'e't'a'c'i'l'p'e'r' 's'i' 'a't'a'd' 'e'h't''''''''''t'a'd' 'f'i' 'r'a'e'l'c'n'u' 's'i''''''''''''' 'e'r'a' 's'c'i't'n'a'm'e's' 'e'h't' 't'u'b' ','a't'a'd' 'e'h't' 'f'o' 'y'p'o'c' 'e'l'g'n'i's' 'a' 'n'o' 'y'l'l'a'i't'n'e'u'q'e's' 'd'e'm'r'o'f'r'e'p''''t' 'f'i' 'd'o'o't's'r'e'd'n'u' 'l'l'e'w' 'e'r'a' 's'n'o'i't'a'c'i'f'i'd'o'm' 'h'c'u'S''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'t'u'p'n'i' 'r'e's'u' 'f'o' 't'l'u's'e'r' 'a' 's'a' 'n'o'i't'a'c'i'l'p'p'a' 'e'h't' 'y'b' 'd'e'i'f'i'd'o'm' 's'i' 'e'r'u't'c'u'r't's' 'a't'a'd' 's'i'h'T''''F' '.'N'O'S'J' 's'a' 'h'c'u's' 't'a'm'r'o'f' 'e'g'a'r'o't's' 'e's'o'p'r'u'p'-'l'a'r'e'n'e'g' 'a' 'n'i' 'a't'a'd' 'r'i'e'h't' 'l'e'd'o'm' 's'n'o'i't'a'c'i'l'p'p'a' 'y'n'a'M''''''i'''''t'a'i'l'i'f'f'a' 'r'o'h't'u'A'{'s'k'n'a'h't'''''''''''''''''''''''''''''''''''''i'c'o's'p'm'o'c'E'E'E'I''n'2' 'r'o'h't'u'A' 'd'n'a' '1' 'r'o'h't'u'A'n'n''g'i'f's'y'a'w'e'd'i's' '%''''$' '}'g'n'i't'a't'o'r'{'e'g'a'k'c'a'p'e's'u''n' '}'''''''''''''''''''''''''U'''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'''r'e's'u' 'e'h't'''''''''''''''''''''''''''f'o' 's'e'l'u'r' 'n'o'''i'''''t'''''a'''''u'''''l'''''a'''''v'''''e''''''y'e'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e''''''''''''''''''''''''''''''''''''''''''''''''s''''''''''a'c'i'l'p''''o'e'r''''''''''''''''d'n'a' ''''''' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'x'e't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'o' 's'd'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'a'''''''''''''''''''''''''''''''''''a' 'g'n'i's'u' 'e'l'p'''''''y'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y'l'l'a'c'i't'a'm'o't'u'a' 'd'e'g'r'e'm' 'e'b' 'd'l'u'o'c' 't'a'h't' 's'n'o'i't'a'c'i'f'i'd'o'm' 'f'o' 'e's'a'c' 'n'i' 's'u'o'i'd'e't' 's'i' 'h'c'i'h'w' ','t'c'i'l'f'n'o'c' 'e'h't' 'e'v'l'o's'e'r' 'y'l'l'a'u'n'a'm' 'r'e's'u' 'e'h't' 't'e'l' 'o't' 's'i' 'e'v'i't'a'n'r'e't'l'a' 'n'A' '.'s's'o'l' 'a't'a'd' 's'r'u'c'n'i' 't'i' 's'a' 'e'l'b'a'r'i's''''r'e'd'n'u' 's'i' 'h'c'a'o'r'p'p'a' 's'i'h't' ','r'e'v'e'w'o'H' ''c'i'l'o'p' ''m'a'x'e' 'r'o'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''s'n'i'w' 'r'e't'i'r'w' 't's'a'l'`'`' 's'a' 'n'w'o'n'k' 's'e'm'i't'e'm'o's' 'y'c'i'l'o'p' 'a' ','d'e'r'r'u'c'c'o' 's't'c'i'l'f'n'o'c''''''''''''''''''''''''''''''''''''''''''''''''''''l'f'n'o'c' ','t'n'e'r'r'u'c'n'o'c' 'f'i' 's'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'm'u'c'o'd' 'e'm'o's' 'd'r''''''''''''''''''''''''''''''''''t'c'e's'b'u's''n'n'}'k'r'o'w' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''T'O'(' '}'n'o'i't'a'm'r'o'f's'n'a'r't' 'l'a'n'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'o'h'c'i'N','f'v'8'9'9'1':'n'u'S','x'w'6'9'9'1'''''''''''''''''''''''''''''''''''''''''''''''' ')'e'l'p'm'a'x'e' 'r'o'f' ','s'r'e't'c'a'r'a'h'c' 'f'o'(' 't's'i'l' 'd'e'r'e'd'r'o' 'e'l'g'n':'l'''e's's'e'R','e'u'''':'9'8'9'1':'s'i'l'l'E'{'e't'i'c''~'s'n'o'i't'a'c'i'l'p'p'a'i't'a'r'e'p'o'{'h'p'm'e'' 'n'o' 'd'e's'''a'b' 's'm'h't'i'r'o'g'l'A'n'n'}'t'o'-'d''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''s'r'e'w'e'i'v''''''''''''''d'e'v'o'r'p'm'i' 't'a'h't'''''''''''''''''''''''''''e'r' 's'u'o'm'y'n'o'n'a' 'e'h't' 'd'n'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'g'n'i's'o'p'm'o'c':'c'e's'{'l'e'b'a'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'g'd'e'l'w'o'n'k' 'r'u'o' '''o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'e'l'p'm'a'x'e':'c'e's'{'l'e'b'a'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''q'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'i'1'='h't'd'i'w''''''''''''''']''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''H''''''''''''''''''''''''''''''''''''''''''''s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'n'i'n'i'a't'n'i'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'i'n'a'p'm'o'c' 't'e'n'r'e't'n'i' 'l'a'r'e'v'e's' 't'a' 'r'u'e'n'e'r'p'e'r't'n'e' 'd'n'a' 'r'e'e'n'i'g'n'e' 'e'r'a'w't'f'o's' 'a' 's'a' 'd'e''''d'k'r'o'w' 'e'h''''e' ','''' 'y'l's'u'o'i'v'e'r'P' ''''''.''''.'7'0'0'2' 'n'i' 'a'i'd'e'M' 'y'l'l'i'e'R'''O' 'y'b' 'd'e'h's'i'l'b'u'p' 's'a'w' '}'s'n'o'i't'a'c'i'l'p'p'A' 'e'v'i's'n'e't'n'I'-'a't'a'D'''''''''n'l'l'i'f'v''n' 'g'n'i'n'g'i's'e'D'{'h'p'm'e'' 'k'o'o'b' 's'i'''''''''''''''''''''''''''''''''''''''' 'y'l's'u'o'i'v'e'r'p' 'e'H' '.'a't'a'd' 'n'o'i't'a'c'i'l'p'p'a''m' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'l'b'a't'i'd'e' 'y'l'e'v'i't'a'r'o'b'a'l'l'o'c' 'o't''''''''''''''''''''''''''''''''''''''''''' 'n'o'i't'p'y'r'c'n'e' 'd'n'e'-'o't'-'d'n'e' 'g'n'i'y'l'p'p'a' 'y'b' ''' 'e'v'i't'a'r'o'b'a'l'l'o'c'''''''''''''''''''s'n'o'i't'a'c'i'l'p'p'a' 'd'u'o'l'c' 'n'i' 'y'c'a'v'i'r'p' 'd'n'a' 'y't'i'r'u'c'e's' 'r'e't't'e'b' 's'd'r'a'w'o't' 'g'n'i'k'r'o'w' 's'i' ','a't'a'D' 'E'V'R'T' ','t'c'e'j'o'r'p'''''''''''''''''' 'h'c'r'a'e's'e'r' 't'n'e'r'r'u'c' 's'i'h't' 'n'I''''H'''''''''''''''''''''''''''''''''''''e'r'r'u'c' 's'i'h' 'n'I' '.'e'g'd'i'r'b'm'a'C' 'f'o' 'y't'i's'r'e'v'i'n'U' 'e'h't' 't'a' 'y'r'o't'a'r'o'b'a'L' 'r'e't'u'p'm'o'C' 'e'h't' 'n'i'''''''t'a' 'e't'a'i'c'o's's'A' 'h'c'r'a'e's'e'R' 'a' 's'i''''''}'''''}'g'p'j'.'8'2'4'k'm'{']'['s'c'i'h'p'a'r'g'e'''''''''''''''''''''''''''''''''''''''''}''''}'g'p'j'.'3'3'b'r'a'{'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'x'e't' 'e'r'o'm' 'O'D'O'T' '.'y't'i'r'u'c'e's' 'r'e't'u'p'm'o'c' 'd'n'a' 'g'n'i't'u'p'm'o'c' 'e'l'i'b'o'm' 'f'o' 'n'o'i't'c'e's'r'e't'n'i' 'e'h't' 't'a' 'g'n'i'k'r'o'w' ','e'g'd'i'r'b'm'a'C' 'f'o' 'y't'i's'r'e'v'i'n'U' 'e'h't' 'm'o'r'f' 'D'h'P' 's'i'h' 'd'e'n'i'a't'b'o' 'e'H' '.'e'g'd'i'r'b'm'a'C' 'f'o' 'y't'i's'r'e'v'i'n'U' 'e'h't' 't'a' 'y'r'o't'a'r'o'b'a'L' 'r'e't'u'p'm'o'C' 'e'h't' 'n'i' 'r'e'r'u't'c'e'L' 'r'o'i'n'e'S'''''''e's' 'a' 's'i'''''']'''''n'i'1'='h't'd'i'w'['s'c'i'h'p'a'r'g'e'd'u'l'c'n'i'''}'{'']'['d'u'l'c'n'i''{'['''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''O'D'O'T''n''''''''''''''''''''}'y'h'p'a'r'g'o'i'b'E'E'E'I'{'d'n'e''n''''}'d'r'o'f's'e'r'e'B' ''''' '.'R' 'r'i'a't's'a'l'A'{'}'y'h'p'a'r'g'o'i'b'E'E'E'I'{'n'i'g'e'b''n'n'}'y'h'p'a'r'g'o'i'b'E'E'E'I'{'d'n'e''n'O'D'O'T'n'}'n'n'a'm'p'p'e'l'K' 'n'i't'r'a'M'{'}'y'h'p'a'r'g'o'i'b'E'E'E'I'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''a''q'''c'''i'l'p'e'r'''''''''''''''''''''''''''''''''s'a'c'i'l'p'e'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e'r''''''''''''''''''''''''''''''''a'c'i'l'p'e'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''n's'e'c'i'v'e'd' 'e'l'i'b'o'm' 'f'o' 'm'e't's'y's' 'r'e'e'p'-'o't'-'r'e'e'p' 'a' ''$'''n'''''i''''' '''''e'''''v'''''i'''''t'''''i'''''b'''''i'''''h'''o'r'p' 'e'r'a' 's't'n'e'm'e'r'i'u'q'e'r' 'g'n'i'r'e'd'r'o' 'l'a'i'r'e's' 'h'c'u's' ','}'t'o'-'d'e't'a'l'e'r':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'n'i' 'd'e's's'u'c's'i'd' 's'A' '.'s'n'o'i't'i'd'n'o'c'''''s'e'l'u'r''''''e'''''r'''''p''''' '''s't'i' 'n'o' '''g'n'i'd'n'e'p'e'd' 'l'''''''' 'y'd'a'e'r'l'a''u'f's's'e'c'c'u's' 's''''n'a'w' 'n'o'i't''''''''''''''''''''''}'s'c'i't'n'a'm'e's':'c'e's'{'l'e'b'a'l''c'a's'n'a'r't' 'a' 'r'e'h't'e'h'w' 'g'n'i'd'i'c'e'd' 'd'n'a' ','r'e'd'r'o' 'l'a'i'r'e's' 'e'm'a's' 'e'h't' 'n'i' 's'n'o'i't'c'a's'n'a'r't' 'g'n'i't'u'c'e'x'e' 's'r'e'v'r'e's' 'l'l'a' 'n'o' 's'e'i'l'e'r' 'h'c'a'o'r'p'p'a' 's'i'h'T' '.'e'n'i'l'n'o' 't'x'e'n' 'e'r'a' 'y'e'h't' 'n'e'h'w' 'm'e'h't' 'm'r'i'f'n'o'c''''''''''n'o' ' 'd'n'a' ','y'l'e'v'i't'a't'n'e't' 's'n'o'i't'c'a's'n'a'r't' 'e't'u'c'e'x'e' 'o't' 's'e'd'o'n' 'e'n'i'l'f'f'o' 'w'o'l'l'a' '}'n'd'5'9'9''''0'1':'y'r'r'e'T'{'e't'i'c''~'u'o'y'a'B' 's'a' 'h'c'u's' 's'm'e't's'y's' ','y'l'l'a'n'i'F'n'n'.'s'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'o't' 'e'u'd' 't's'o'l' 'e'b' 'o't' 't'u'p'n'i' 'r'e's'u' 'o'n' 't'n'a'w' 'e'w' 'e'c'n'i's' ','s't'n'e'm'e'r'i'u'q'e'r' 'r'u'o' 't'e'e'm' 't'o'n' 's'e'o'd' ''''W'W'W'L' '.'B'D'h'c'u'o'C' 'd'n'a' 'k'a'i'R' 'g'n'i'd'u'l'c'n'i' 's'm'e't's'y's' 'r'e'h't'o' 'y'n'a'm' 'n'i' 'n'o'i't''''e'p'o' 'n'a' 's'i' 't'i' 'd'n'a' ','a'r'd'n'a's's'a'C' 'e'h'c'a'p'A' 'n'i' 'd'e's'u' 's'i' 'h'c'a'o'r'p'p'a' 's'i'h'T' '.'s'r'e'h't'o' 'e'h't' 's'd'r'a'c's'i'd' 'd'n'a' '''''r'e'n'n'i'w'`'`' 's'a' 's'e't'i'r'w' 't'n'e'r'r'u'c'n'o'c' 'l'a'r'e'v'e's' 'g'n'o'm'a' 'e'n'o' 's'e's'o'o'h'c' 'y'l'i'r'a'r't'i'b'r'a' 'h'c'i'h'w' ',')'W'W'L'(' '}'s'n'i'w' 'r'e't'i'r'w' 't's'a'l'{'h'p'm'e'' 's'i' 'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 'o't' 'h'c'a'o'r'p'p'a' 'd'e's'u'-'y'l't'n'e'u'q'e'r'f' 'r'e'h't'o'n'A'n'n'.'s'r'e'm'm'a'r'g'o'r'p' 'n'o'i't'a'c'i'l'p'p'a' 'o't' 't'f'e'l' 'e'b' 'y'l'b'a'n'o's'a'e'r' 'n'a'c' 't''''''' 'n'a'h't' 'r'e't't'a'm' 'e'l'p'm'i's' 'a' 't'o'n' 's'i' 'n'o'i't'u'l'o's'e'r' 't'i'c'l'f'n'o'c' ','s'e't'a'r't's'n'o'm'e'd' 'r'e'p'a'p' 's'i'h't' 'f'o' 'y't'i'x'e'l'p'm'o'c' 'e'h't' 's'A' '.'}'i'u'7'0'0'2':'a'i'd'n'a'C'e'D'{'e't'i'c''~'g'n'i'r'a'e'p'p'a'e'r' 's'm'e't'i' 'd'e't'e'l'e'd''''''''''''' 'e'h't' 's'a' 'h'c'u's' 's'e'i'l'a'm'o'n'a' 't'i'b'i'h'x'e' 'n'e't'f'o' 's'n'o'i't'c'n'u'f' 'e'g'r'e'm' 'n'e's'o'h'c' 'y'l'e'v'i'a'N' '.'e'd'o'c' 'n'o'i't'a'c'i'l'p'p'a' 'o't' 'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 's'e'v'a'e'l' 'd'n'a' ','s'e'u'l'a'v' 'e's'e'h't' 'f'o' 'l'l'a' 's'e'v'r'e's'e'r'p' 'e's'a'b'a't'a'd' 'e'h''''''''a'c'i'l'p'e'r'''t''''' ''','y'e'k' 'e'm'a's' 'e'h't' 'o't' 'n'e't't'i'r'w' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'r'a' 's'''''''a'c'i'l'p'e'''r''''''''''''''''''''''''''''''''e'''''u'''''l'''''a'''''v''''' '''''l'''''a'''''r'''''e'''''v'''''e'''''s''''' '''''f'''''i''''' ''''','''''}'''''i'''u'7'0'0'2':'a'i'd'n'a'C'e'D'{'e't'i'c''~'o'm'a'n'y'D' 'n'i' ','e'l'p'm'a'x'e' 'r'o'F' '.'c'o'h'-'d'a' 'n'e't'f'o' 'e'r'a' 's'n'o'i't'u'l'o's' 'e'h't' 't'u'b' ','s'n'o'i't'a'c'i'f'i'd'o'm' 'g'n'i't'c'i'l'f'n'o'c' ','t'n'e'r'r'u'c'n''''''''a'c'i'l'p'e'r'''''''''o'c' 'f'o'''''r'e't'f''' '''''s'i' ''''m'a''''' 'm'o'r'f''''''''''''''''''''''''''''''''''''''y'l'l'a'c'o'l' 'd'e'i'l'p'p'a' 's'i' 't'i''' ','e'''''l'''''b'''''o'''''r'''''p''''''n'a' ' 'e'''h't' 'h't'i'w' 'l'a'e'd' 'o't' 'd'e'e'''n' 's'm'e't's'y's' 'a't'a'd' 'd'e't'a'c'i'l'p'e'r' 'y'n'a'M'n'n'}'r'e'h't'o'-'d'e't'a'l'e'r':'c'e's'{'l'e''''''''a'c'i'''''''a'c'i'l'p'e'r''''''''''l'p'e'r'''''''''b'''''''''s'a'c'i'l'p'e'r'''''''''a'l''}'s'e'h'c'a'o'r'p'p'a' 'r'e'h't'O'{'n'o'i't'c'e's'b'u's''n'n'.'e'r'u't'c'u'r't's' 'e'k'i'l'-'N'O'S'J' 'a' 'h't'i'w'''''''''''''''''''''''''''''''''''''''s't'n'e'm'n'g'i's's'a' 'r'e't's'i'g'e'r' 'e'h't' 'd'e'm'r'o'f''''r'e'p' 'r'o'f' ' 'T'D'R'C' 'd'e't's'e'n' 'y'l'i'r'a'r't'i'b'r'a' 'n'a' 'o't'n'i' 'd'e's'o'p'm'o'c' 'e'b' 'o't' ''''''' 't'l'l'a' 'm'e'h't' 's'w'o'l'l'a' 't'a'h't' 'k'r'o'w' 'r'o'i'r'p' 'y'n'a' 'f'o' 'e'r'a'w'a' 't'o'n' 'e'r'a' 'e'w' ','n'o'i't'a'l'o's'i' 'n'i' 's'r'a'e'y' 'r'o'f' 'd'e't's'i'x'e' 'e'v'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e't's'i'g'e'r' 'a' 'n'a'h't' 'r'e'h't'a'r' 'r'e't'n'u'o'c' 'a' 's'a' 'd'e't'a'e'r't' 'e'b' 'd'l'u'o'h's' 'r'e'b'm'u'n' 'a' 't'a'h't' 'g'n'i't'a'c'i'd'n'i' 's'a' 'h'c'u's' ','s'n'o'i't'a't'o'n'n'a' 'c'i't'n'a'm'e's' 't'r'o'p'p'u's' 'o's'l'a' 'd'l'u'o'c' 'e'g'a'u'g'n'a'l' 'a'm'e'h'c's' 'A' ''h' 's't's'i'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '?'a't'a'd' 'e'h't' 'f'o' 'e'm'o's' 'e's'y'l'a'n'a' 'e'w' 's's'e'l'n'u''''i' 'r'e'p'a'p' 's'i'h't' 'o't' 't'n'a'v'e'l'e'r' 'y'l'r'a'l'u'c'i't'r'a'p' 'e'b' 'o't' 'm'e'e's' 't'''n's'e'o'd' 's'i'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'r'a'p' 's'a' 'n'i' 's'i'h't' 't'u'p' 'd'l'u'o'h's' 'e''''w'w' ':'O'D'O'T'%'n'' 'd'e'r'e'd'r'o' 'd'n'a' 's'p'a'm' ','s'r'e't's'i'g'e'r' 'r'o'f' 's'T'D'R'C' 'h'g'u'o'h't'l'A'n'n'.'l'a' 't'e' 't'd'r'a'h'k'c'r'u'B' ''''''''''s'a'c'i'l'p'e'r''''''y'''''b' 'd'e'r'i'p's'n'i' 's'i' 't'n'e'm'e't'a't's' '}'d'l'e'i'y'{'f's't'x'e't'' 'r'u''''''''a'c'i'l'p'e'R'''O''''' '''.'k''''''''''''''''t'u'o' 'n'r'u''''i't' 'y'a'm''''''''''''''''''''''''''''e'r'o'm' 't'r'o'p'p'u's' 'o't'''''''''''''''''''''''''''' 'e'r'''''''''''''s'n'o'i't'a'c'i'l'p'p'a' ''''''o'''m' 'r'o'f' 'd'e'r'i'u'q'e'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''h'''''t''''' '''''''''''''''''''''''''''''' 'h'c'u's''''''''''''''''''''''a'd'p'u' 'f'o' 't'n'e'm''n'i' 'l'a't'n'e'm''''c'u'r't's'n'i' 'e'b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y't'i'x'''''''''''''y't'x'i'e'l'p'm'o'c' 'e'g'a'n'a'm' 'p'l'e'h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y't'i'x'e'l'p'm'o'c' 'e'g'a'n'a'm'''''''''''''p'l'e'h' 'o't'''''''''''''o' ''''o'n'i' 'd'e'r'i'u'q'e'r' 'e'b' 'l'l'i'w''''''''''''''''''''''''''''''''''d'e'r'i'u'q'e'r' 's'i' 'e'g'a'u'g'n'a'l' 'a'm'e'h'c's' 'a' 't'a'h't' 'e'l'b'i's's'o'p' 's'i' 't'I' ''r'o'w'''''''''a'c'i'l'p'e'r''''''''''''''w'o'e'm'a'r'f' 's'i'h't' 'n'i' 'd'e'n'i'f'e'd' 't'o'n' 'e'r'''k' '''''a' 's't's'i'l' 'd'e'''''''''' 'y'l'l'a's'u'a'c'r'e'd'r'o''''''''a'c'i'l'p'e'''''' ';'s'n'o'i't'a'l'e'r' 'r'o' 's''''''''a'c'i'l'p'e'r'''t'''''e'''s' 'd'e'r'e'd'r'o'n'u' 'e'k'i'l' 'e'r'a' 'h'c'i'h'w' ','}'s'e'i't'i't'n'e'{'h'p'm'e'' 'd'''''''a'c'i'l'p'e'''''''n'a' ',''''s'e'p'y't'a't'a'd' 'p'a'm' 'r'u'o' 'o't' 'y'l'r'a'l'i'm'i's' 'e'v'a'h'e'b' 'h'c'i'h'w' ','}'s'y'a'r'r'a' 'd'u'o'l'c'{'h'p'm'e'' 'e'n'i'f'e'd' 'y'e'h'T' '.'d'e's'o'p'm'o'c' 'e'b' 'n'a'c' 'd'n'a' 's'T'D'R'C' 'o't' 'r'a'''''''a'c'i'l'p'e'''''''l'i'm'i's' 'e'r'a' 'h'c'i'h'w' ','}'s'e'p'y'''t' 'd'u'o'l'c'{'h'p'm'e'' 'e'n'i'f'e'd' '}'y'j'2'1'0'2':'t'd'r'a'h'k'c'r'u'B'{'e't'i'c''~''''|'''''''~'|'''''''~'Z'.'l'a' 't'e' 't'd'r'a'h'k'c'r'u'B'n'n'.'r'e'p'a'p' 's'i'h't' 'n'i' 'd'e'p'o'l'e'v'e'd' 's'c'i't'n'a'm'e's' 'e'h't' 'r'o'f' 's'i's'a'b' 'a' 's'm'r'o'f' 's'e'p'y't'a't'a'd' 'e's'e'h't' 'n'i' 'y't'i'l'a's'u'a'c' 'f'o' 't'n'e'm't'a'e'r't' 'e'h't' 't'u'b' ','s't's'i'l' 'd'e'r'e'd'r'o' 'r'o'f''''''''''t'c'e'f'f'e' 'r'i''' '''''s'''''T'''''D'''''R'''C' 's'e't'a'r'g'e't'n'i' 'k'r'o'w' 's'i'h't' 'f'o' 'e'n'o'N' '.'s'e'c'i't't'a'l' 'n'o' 'd'e's'a'b' ','s'T'D'R'C' 'd'e's'a'b'-'e't'a't's' 'f'o' 'n'o'i't'i's'o'p'm'o'c' 'r'o'f' 'k'r'o'w'e'm'a'r'f' 'l'a'c'i't'e'r'o'e'h't' 'a' 'e'n'i'f'e'd' '}'m't'5'1'0'2':'o'r'e'u'q'a'B'{'e't'i'c''~'.'l'a' 't'e' 'o'r'e'u'q'a'B' 'd'n'a' ','s'p'a'm' 'd'e't's'e'n' 'r'o'f' 's'n'o'i't'a't'u'm' 'a't'l'''''''a'c'i'l'p'e'R''''''e'''''d' 'e'n'i'f'e'd' 'o's'l'a' '}'k't'6'1'0'2'''''''a'c'i'l'p'e'R'''''''''':'a'd'i'e'm'l'A'{'e't'i'c''~'.'l''''.'a' 't'e' 'a'd'i'e'm'l'A' '.'}'v'i'6'1'0'2':'o'r'e'u'q'a'B'{'e't'i'c''~'e'h'c'r'e'L' 'd'n'a' 'a'd'i'e'm'l'A' ','o'r'e'u'q'a'B' 'y'b' 'd'e'i'd'u't's' 'n'e'e'''''''''''''''''''''}'l'm'x'-'n'o's'j':'c'e's'{'l'e'b'a'l''b' 'e'v'a'h' 'h'c'i'h'w' ','s'c'i't'n'a'm'e's' 'f'o' 's'n'o'i't's'e'u'q' 's'e''''''''''''''}'t'u'm'{'t'i'h't'a'm'' ',''s'i'a'r' 's'p'a'm' 'e'd'i's'n'i' 's'r'e't'n'u'o'c' 'g'n'i'd'd'e'b'm'E' '.'}'y'w'3'1'0'2':'n'w'o'r'B','s'h'4'1'0'2':'n'w'o'r'B'{'e't'i'c''~'s'p'a'm' 'r'e'h't'o' 'n'i'h't'i'w' 's'p'a'm' 'f'o' 'd'n'a' ','s'p'a'm' 'e'd'i's'n'i' 's'r'e't's'i'g'e'r' 'd'n'a' 's'r'e't'n'u'o'c' 'f'o' 'g'n'i't's'e'n' 's'w'o'l'l'a' 'k'a'i'R' '.'y'l't'n'e'c'e'r' 'e'r'o'm' 'd'e'i'd'u't's' 'n'e'e'b' 'y'l'n'o' 's'a'h' ')'}'g'n'i'd'd'e'b'm'e'{'h'p'm'e'' 'r'o' '}'n'o'i't'i's'o'p'm'o'c'{'h'p'm'e'' 's'a' 'n'w'o'n'k' 'o's'l'a'(' 'r'e'h't'o'n'a' 'e'd'i's'n'i' 'T'D'R'C' 'e'n'o' 'g'n'i't's'e'n' 'f'o' 'm'e'l'b'o'r'p' 'e'h'T'n'n'.'T'D'R'C' 'r'e'h't'o'n'a' 't'o'n' ','s'e'u'l'a'v' 'c'i'm'o't'a' 'e'r'a' 't's'i'l' 'r'o' 'p'a'm' 'T'D'R'C' 'e'h't' 'f'o' 's't'n'e'm'e'l'e' 'e'h't' 't'a'h't' 'e'm'u's's'a' 'y'e'h't' ':'g'n'i't's'e'n' 't'r'o'p'p'u's' 'm'e'h't' 'f'o' 'e'n'o'n' ','r'e'v'e'w'o'H' '.'}'y'k'3'1'0'2':'c'e'l'e'd'e'N'{'e't'i'c''~'Q'E'S'L' 'd'n'a' '}'x'h'0'1'0'2':'s's'i'e'W'{'e't'i'c''~'t'o'o'g'o'L' ','}'z'f'9'0'0'2':'a'c'i'u'g'e'r'P'{'e't'i'c''~'c'o'd'e'e'r'T' ','}'w'd'1'1'0'2':'h'o'R'{'e''''''''a'c'i'l'p'e''t'''''i'c''~'A'G'R' ','}'j'w'6'0'0'2''''''''a'c'i'l'p'e'r''':'''''r'''e't's'O'{'e't'i'c''~'T'O'O'W' 'g'n'i'd'u''''u'l'c'n'i' ','d'e's'o'p'o'r'p' 'n'e'e'b' 'e'v'a'h' 's'm'h't'i'r'o'g'l'a' 's'u'o'i'r'a'v' ','s't's'i'l' 'd'e'r'e'd'r'o' 'r'o'F' '.'}'y'w'3'1'0'2':'n'w'o'r'B','s'h'4'1'0'2':'n'w'o'r'B'{'e't'i'c''~'k'a'i'R' 's'a' 'h'c'u's' 's'm'e't's'y's' 'd'e'y''''''''''''''''''g'n'i't'i'd'e''''''''''''''''''''''''}'i'p'a'-'t'n'e'i'l'c':'c'e's'{'l'e'b''''''r''''''''''''''''''''''''''''''''''''''''''''''}'$'}'e't'e'l'e'd'{'f's'h't'a'm'' '='t'o'n'' '}'t'u'm'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n''e't'n'e'c''''''a'''''l'''''''''''o'''l'p'e'd' 's'u'o'i'r'a'v' 'n'i' 'd'e't'n''$'e'm'e'l'p'm'i'''$'1'_'' 'n'e'e'b' 'e'v'a'h' 'd'n'a' ','}'y'w'1'1'0'2':'o'r'i'p'a'h'S','n'u'1'1'0'2':'o'r'i'p'a'h'S'''r'T'''{'e't'i'c''~'n'w'o'n'k' 'y'l'e'd'i'w' 'e'r'a' 's't'e's' 'd'n'a' 's'p'a''''''''''''''}'t'u'm'{'t'i'h't'a'm'' ',''m' ','s'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f'o'o'r'p''f'o'o'r'P'y'a'l'p's'i'D''n'}'$'}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'t'u'm'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm'' ','}'g'a't'{'t'i'h't'a'm''_'k'('}'d'I'd'd'a'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'$'2'_'}'D'I'-'d'd'A'{'c's't'x'e't'''''''''''''t'x'e'T''$'{''''''''''''''''''''''''''''''')'''' ' ' 'n''}'l'a'v'{'t'i'h't'a'm''('}'n'g'i's's'a'{'f's'h't'a'm'' ',''l'e'b'a'L't'f'e'L''''''''''n'}'$'}'e't'e'l'e'd'{'f's'h't'a'm'' '=' '}'t'u'm'{'t'i'h't'a'm''$'{'C'm'o'i'x'A'''e't'n'u'o'c' ','s'r'e't's'i'g'e'r' 'r'o'f' 's'T'D'R'C'n'n'}'s't'd'r'c'-'d'e't'a'l'e'r':'c'e''''''''''''''''''''''''''''''n'%'n'}'m'e'3'{'e'c'a'p's'h''f'o'o'r'P'y'''''''y'u'a'l'p's'i'D''n's'{'l'''''''r'e't'n'e'c'''e'''''b'''''a'''''l''''''}'s'T'D'R'C'{'n'o'i't'c'e's'b'u's''n'n'.'d'e'h's'i'l'b'u'p' 'n'e'e'b' 't'o'n' 'e'v'a'h' 's'm'h't'i'r'o'g'l'a' 's't'i' 'f'o' 's'l'i'a't'e'd' ','t'c'u'd'o'r'p' 'y'r'a't'e'i'r'p'o'r'p' 'a' 's'A' '.'}'h'w'6'1'0'2':'k'i'n'o'm'e'L'{'e't'i'c''~'r'e'v'r'e's' 'e''''''''''''''''''''''''''''''')'''' ' ' 'n''}'l'a'v'{'t'i'h't'a'm''('}'n'g'i's's'a'{'f's'h't'a'm'' ',''l'g'n'i's' 'a' 'n'o' 's'e'i'l'e'r' 't'i' ','s'c'o'D' 'e'l'g'o'o'G' 'e'k'i'L' '.'s'p'a'm' 'd'n'a' 's't's'i'l' 'f'o' 'g'n'i't's'e'n' 'y'r'a'r't'i'b'r'a' 's't'r'o'p'p'u's''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'a'h't' 'e'r'a'w'a' 'e'r'a' 'e'w' 'h'c'i'h'w' 'f'o' 'T'O' 'f'o' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'y'l'n'o' 'e'h't' 's'i' '}'k'v'5'1'0'2':'e'l''''o'g'o'o'G'{'e't'i'c''~'I'P'A' 'e'm'i't'l'a'e'R' 'e'l'g'o'o'G' 'e'h'T'n'n'.'}'m'd'5'1'0'2':'a'y'i't't'A'{'e't'i'c''''']'~'g'n'i'r'e''''''''''''''''''''''''''''''')'''' ' ' 'n''}'l'a'v'{'t'i'h't'a'm''('}'n'g'i's's'a'{'f's'h't'a'm'' ',''d'r'o' 'l'a's'u'a'c' 's'i' 'e'v'i'g' 'n'a'c' 'm'e't's'y's' 'a' 'h'c'u's' 'e'e't'n'a'r'a'u'g' 't's'e'g'n'o'r't's' 'e'h'T' '.'e'l'b'a'l'i'a'v'a'n'u' 'e'm'o'c'e'b' 'd'l'u'o'w' 't's'a'c'd'a'o'r'b' 'c'i'm'o't'a' 'g'n'i'r'i'u'q'e'r' ''''s'm'h't'i'r'o'g'l'a' 'y'n'a' 'o's' 'd'n'a' ','e'm'i't' 'e'm'a's' 'e'h't' 't'a' 'e'n'i'l'n'o' 'e'r'a' 's't'n'a'p'i'c'i't'r'a'p' 'f'o' 'y't'i'r'o'n'i'm' 'a' 'y'l'n'o' 't'a'h't' 'e's'a'c' 'e'h't' 'e'b' 'y'l't'n'e'u'q'e'r'f' 'l'l'i'w' 't'i' 's'e'c'i'v'e'd' 'e'l'i'b'o'm' 'f'o' 's'm'e't's'y's' 'r'e'e'p'-'o't'-'r'e'e'p' 'n'i' 't'a'h't' 't'c'e'p'x'e' 'e'W' '.'e'l'b'a'h'c'a'e'r' 'd'n'a' 'e'n'i'l'n'o' 'e'r'a' 's't'n'a'p'i'c'i't'r'a'p' 'f'o' 'y't'i'r'o'j'a'm' 'a' 'f'i' 's's'e'r'g'o'r'p' 'e'k'a'm' 'y'l'e'f'a's' 'y'l'n'o' 'n'a'c' 'y'e'h't' 'o's' ','}'p'c'6'9'9'1':'a'r'd'n'a'h'C'{'e't'i'c''~'s'u's'n'e's'n'o'c' 'o't' 't'n'e'.''l'a'v'i'u'q'e' 'e'r'a' 's'l'o'c'o't'o'r'''''''''''''''p' 'h'c'u's' ','r'e'v'r'e's' ''''''''a'c'i'l'p'e'R'''e'''''l'''g'n'i's' 'a' 'n'o' 'g'n'i'y'l'e'r' 's'd'i'o'v'a' 'h'c'i'h'w' ','}'i'j'4'0'0'2':'o'g'a'f'e'D'{'e't'i'c''~'l'o'c'o't'o'r'p' 't's'a'c'd'a'o'r'b' 'c'i'm'o't'a' 'n'a' 'g'n'i's'u' 'y'b' 's'n'o'i't'a'r'e'p'o' 'f'o' 'g'n'i'r'e'd'r'o' 'l'a'''''''''' 'a'l't'o't' 'a' 'n'o' 'e'd'i'c'e'd' 'o't' 'e'l'b'i's's'o'p' 's'i' 't'i' 'h'g'u'o'h't'l'A' '.'}'g'k'5'1'0'2':'r'e'g'n'U'{'e't'i'c''~'r'e'd'r'o' 'e'm'a's' 'e'h't' 'n'i' 's'e'g'a''''''''''''$'p'$' 'a'c'i'l'p'e'r'''s'''''s'''''e'''''m''''' '''''e'''e's' 'l'l'i'w' 's't'n'e'i'p'i'c'e'r' 't'n'e'r'e'f'f'i'd' 't'a'h't' 'e'e't'n'a'r'a'u'g' 't'o'n' 'o'd' ','n'o'i't'a'r'o'b'a'l'l'o'c' 'd'e't'p'y'r'c'n'e' 'r'o'f' 'e's'u' 'o't' 'n'a'l'p' 'e'w' 'h'c'i'h'w' ','s'l'o'c'o't'o'r'p' 'g'n'i'g'a's's'e'm' 'e'r'u'c'e's' 'y'n'a'M'n'n'.'r'e'v'r'e's' 'e'l'g'n'i's' 'a' 'g'n'i'r'i'u'q'e'r' 't'u'o'h't'i'w' 'n'o'i't'a'r'o'b'a'l'l'o'c' 'r'e'e'p'-'o't'-'r'e'e'p' 't'r'o'p'p'u's' 'o't' 't'n'a'w' 'e'w' 'e'c'n'i's' ','s't'n'e'm'e'r'i'u'q'e'r' 'r'u'o' 't'e'e'm' 't'o'n' 's'e'o'd' 't'i' 't'u'b' ','}'s'k'3'0'0'2':'e'n'i'm'I'{'e't'i'c''~'e'n'o'r'p'-'r'o'r'r'e' 's's'e'l' 'd'n'a' 'r'e'l'p'm'i's' 's'n'o'i't'c'n'u'f' 'n'o'i't'a'm'r'o'f'''''''f'o's'n'a'r't' 'e'h't' 'g'n'i'k'a'm' 'f'o' 'e'g'a't'n'a'v'd'a' 'e'h't' 's'a'h' 'h'c'a'o'r'p'p'a' 's'i'h'T' '.'}'d'f'5'9'9'1':'s'l'o'h'c'i'N'{'e't'i'c''~'m'e't's'y's' 'r'e't'i'p'u'J' 'e'h't' 'm'o'r'f' 'd'e't'i'r'e'h'n'i' 'n'o'i's'i'c'e'd' 'n'g'i's'e'd' 'a' ','}'h'w'6'1'0'2':'k'i'n'o'm'e'L'{'e't'i'c''~'s'n'o'i't'a'r'e'p'o' 'f'o' 'g'n'i'r'e'd'r'o' 'l'a't'o't' 'a' 'n'o' 'e'd'i'c'e'd' 'o't' 'r'e'v'r'e's' 'e'l'g'n'i's' 'a' 'n'o' 'y'l'$''e'r' ',')'}''''''''$'}'2','1'{'_'o'v'5'1'0'2':'g'n'a'W'{'e't'i'c''~'e'v'a'''''''''s'a''''s'c'i'l'p'e'r'''''''''''W' 'e'l'''''''a'c'i'l'p'e'''''''g'o'o'G' 'y'l'r'e'm'r'o'f'(' 'e'v'a'W' 'e'h'c'a'p'A' 'd'n'a' '}'w'v'0'1'0'2':'k'a'w'e'i'p'S'{'e't'i'c''~'e'b'i'V' 'l'l'e'v'o'N' ','}'m'u'1'1'0'2':'d'a'p'r'e'h't'E'{'e't'i'c'''''{'~'d'a'p'r'e'h't'E' ','}'t't'0'1'0'2':'r'e't'h'c'i'R'y'a'D'{'e't'i'c''~'s'c'o'D' 'e'''''''a'c'i'l'p'e'''''''l'g'o'o'''''''a'c'i'l'p'e'''''''G''''''''a'c'i'l'p'e'' '''''g'n'i'd'u'l'c'n'i' ','s'm'e't's'y's' 'n'o'i't'a'r'o'b'a'l'l'o'c' 'T'O' 'd'e'y'o'l'p'e'd' 't's'o'M'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'t'p'6'{'e'c'a'p's'v''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e'p'a'p' 's'i'h't' 'n'i' 'd'e'n'i'f''''''''''''}'t'p'6'{'e'c'a'p's'v'''e'd' 's'a' 's'p'a'm' 'e'u'l'a'v'-'y'e'k' 't'r'o'p'p'u's' 't'o'n' 'o'd' 's'm'h't'i'r'o'g'l'a' 'e's'e'h't' 't'u'b' ','s't's'i'l' 'd'e'r'e'n'd'r'o' 'f'o' 'g'n'i't's'e'n' 's'e'd'i'v'o'r'p' 'h'c'i'h'w' ','}'o'v'5'1'0'2':'g'n'a'W','y'j'3'0'0'2':'t'a'n'g'I','v'i'2'0'0'2':'s'i'v'a'D'{'e't'i'c''~'s't'n'e'm'u'c'o'd' 'L'M'X' 'g'n'i't'i'd'e' 'o't' 'T'O' 'e'z'i'l'a'r'e'n'e'g' 's'm'h't'i'n'r'o'g'l'a' 'e'm'o'S' '.'s'n'o'i't'a'c'i'l'p'p'a' 'y'n'a'm' 'r'o'f' 'd'e'r'i'u'q'e'r' 'e'r'a' 't'a'h't' 's'e'r'u't'c'u'r't's' 'e'e'r't' 'd'e't's'e'n' 'e'h't' 't'r'o'p'p'u's' 't'o'n' 'o'd' 'd'n'a'i's' '''''''''''''}'t'p'6'{'e'c'a'p's'v''a' 's'a' 't'n'e'm'u'c'o'd' 'a' 't'a'e'r't' 'm'e'h't' 'f'o' 't's'o'M' '.'}'d'f'5'9'9'1':'s' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'r'o'f' 'd'e's'u' 'n'e'e'b' 'g'n'o'l' 'e'v'a'h' ')'e't'a'l'e'r':'c'e's'{'l'e'b'a'l''}'n'o'i't'a'm'r'o'f's'n'a'r't' 'l'a'n'o'i't'a'r'e'p'O'{'n'o'i'd'e't'a'l'e'R'{'n'o'i't'c'e's''n'n'.'r'e'p'a'p' 's'i'h't' 'n'i' 'd'e'n'i'f'e'd' 's'a' 's''''''''''''}'t'p'6'{'e'c'a'p's'v'''p'a'm' 'e'u'l'a'v'-'y'e'k' 't'r'o'p'p'u's' 't'o'n' 'o'd' 's'm'h't'i'r'o'g'l'a' 'i'h'w' ','}'o'v'5'1'0'2':'g'n'a'W','y'j'3'0'0'2':'t'a'n'g'I','v'i'2'0'0'2':'s'i'v'a'D'{'e't'i'c' 'd'e'r'i'u'q'e'r' 'e'r'a' 't'a'h't' 's'e'r'u't'c'u'r't's' 'e'e'r't' 'd'e't's'e'n' 'e'h't' 't'r'o'p'p'u's' 't'o'n' 'o'd' 'd'n'a' ')'e'l'p'm'a'x'e' 'r'o'f' ','s'i's' 'a' 's'a' 't'n'e'm'u'c'o'd' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'r'o'f' 'd'e's'u' 'n'e'e'b' 'g'n'o'l' 'e'v'a'h' ')'T'O'(' '}'n'o'i't'a'm'r'o'f's'n'a'r't' 'l'a'n'o'i't'a'r'e'p'o'{'h'p'm'e'' 'n'o' 'd'e's'a'b' 's''}'n'o'i't'a'm'r'o'f's'n'a'r't' 'l'a'n'o'i't'a'r'e'p'O'{'n'o'i'd'e't'a'l'e'R'{'n'o'i't'c'e's'''''''''''''''''''''''''''''''''''''''''''''''''''}'t'p'6'{'e'c'a'p's'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''}'t'p'6'{'e'c'a'p's'v''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'r'e'e'p' 'e't'o'''''m'''''e'r' 'm'o'r'f' '''''s'''''n'''''o'''''i't'a'r'e'p'o' 'g'n'i'y'l'p'p'a' 'd'n'a' ','s'r'e'e'p' 'r'e'h't'o' 'm'o'r'f' 'd'n'a' 'o't' 's'n'o'i't'a'r'e'p'o' 'g'n'i'v'i'e'c'e'r' 'd'n'a' 'g'n'i'd'n'e's' ':'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 's'm'r'o'f'r'e'p' ','}'y'j'2'1'0'2':'t'd'r'a'h'k'c'r'u'B'{'e't'i'c''~'.'l'a' 't'e' 't'd'r'a'h'k'c'r'u'B' 'y'b' 'd'e'r'i'p's'n'i' ','d'n'a'm'm'o'c' '}'d'l'e'i'y'{'f's't'x'e't'' 'e'h'T'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'t'p'6'{'e'c'a'p's'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'t'p'6'{'e'c'a'p's'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'e'r't'b'u's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'i'l'p'p'a' 'y'l'e'v'i's'r'u'c'e'r' 'e'r'a' 's'e'l'u'r' 's'a' 'e't'a't's' 'e'h't' 'f'o' 's't'r'a'p' 'r'e'n'n'i' 'o't' 'r'e'f'e'r' 'y'a'm' 't'u'b' ','$'p'_''''-'A'$' ''''$'e't'a't's' 'a'c'i'l'p'e'r' 'e'h't' 'y'l'l'a'i't'i'n'i' 's'i' 't'x'e't'n'o'c' 'e'h'T' 'e'm'n'g''''''''''' 'e't'a'd'p'u'''''''''''''''''''''''a'c'i'l'p'e'r' 'a' 'f'o' 'e't'a't's' 'e'h't' 'o't' ''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i's's'a' 'd'n'a' 'n'o'i't'r'e's'n'i' 'g'n'i'y'l'p'p'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a' 'o't' 'e'u'l'a'v' 'e'v'i't'i'm'i'r'p' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'w'd'1'1'0'2':'h'o'R'{'e't'i'c''~'m'h't'i'r'o'g'l'a' 'A'G'R' 'e'h't' 'n'o' 'd'e's'a'b' 's'i' 's'n'o'i't'r'e's'n'i' 'g'n'i'l'd'n'a'h' 'r'o'f' 'h'c'a'o'r'p'p'a' 'r'u'O' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'h's'i'l'b'u'p' 'n'e'e'b' 't'o'n' 'e'v'a'h' 's'm'h't'i'r'o'g'l'a' 's't'i' 'f'o' 's'l'i'a't'e'd' ','t'c'u'd'o'r'p' 'y'r'a't'e'i'r'p'o'r'p' 'a' 's'A' '.'}'h'w'6'1'0'2':'k'i'n'o'm'e'L'{'e't'i'c''~'r'e'v'r'e's' 'e'l'g'n'i's' 'a' 'n'o' 's'e'i'l'e'r' 't'i' ','s'c'o'D' 'e'l'g'o'o'G' 'e'k'i'L' '.'s'p'a'm' ''''''''s'a'c'i'l'p'e'r''''''d'''''n'''a' 's't's'i'l' 'f'o' 'g'n'i't's'e'n' 'y'r'a'r't'i'b'r'a' 's't'r'o'p'p'u's' 't'a'h't' 'e'r'a'w'a' 'e'w' 'h'c'i'h'w' 'f'o' 'T'O' 'f'o' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'y'l'n'o' 'e'''''''a'c'i'l'p'e'''''h'''t' 's'i' '}'k'v'5'1'0'2':'e'l'g'o'o'G'{'e't'i'c''~'I'P'A' 'e'm' 'n'a'c' 'm'e't's'y's' 'a' 'h'c'u's' 'e'e't'n'a'r'a'r'a'u'g' 't's'e'g'n'o'r't's' 'e'h'T' '.'e'l'b'a'l'i'a'v'a'n'u' 'e'm'o'c'e'b'r' 'm'h't'i'r'o'g'l'a' 'y'n'a' 'o's' 'd'n'a' ','e'm'i't' 'e'm'a't' 'e'b' 'y'l't'n'e'u'q'e'r'f' 'l'l'i'w' 't'i' 's'e'c'i'v'e'd' 'e'l'i'b'o'm' 'f'o' 's'm'e't's'y's' 'r'e'e'p'-'o't'-'r'e'e'p' 'n'o'j'a'm' 'a' 'f'i' 's's'e'r'g'o'r'p' 'e'k'a'm' 'y'l'e'f'a's' 'y'l'n'o' 'n'a'c' 'y'e'h't' 'o's' ','}'p'c'6'9'9'1':'a'r'd'n'a'h'C's' 'a' 'n'o' 'g'n'i'y'l'e'r' 's'd'i'o'v'a' 'h'c'i'h'w' ','}'i'j'4'0'0'2':'o'g'a'f'e'D'{'e't'i'c''~'l'o'c'o't'o'r'p' 't's'a'c'd' 'o't' 'e'l'b'i's's'o'p' 's'i' 't'i' 'h'g'u'o'h't'l'A' '.'}'g'k'5'1'0'2':'r'e'g'n'U'{'e't'i'c''~'r'e'd'r'o' 'e'm'a's' 'e'h't' 'e'e't'n'a'r'a'u'g' 't'o'n' 'o'd' ','n'o'i't'a'r'o'b'a'l'l'o'c' 'd'e't'p'y'r'c'n'e' 'r'o'f' 'e's'u' 'o't' 'n'a'l'p' 'e'w' 'h'c'i'h'w' ','s'l'o'c'o't'o'r'p' 'g'n'a'l'l'o'c' 'r'e'e'p'-'o't'-'r'e'e'p' 't'r'o'p'p'u's' 'o't' 't'n'a'w' 'e'w' 'e'c'n'i's' ','s't'n'e'm'e'r'i'u'q'e'r' 'r'u'o' 't'e'l'p'm'i's' 's'n'o'i't'c'n'u'f' 'n'o'i't'a'm'r'o'f's'n'a'r't' 'e'h't' 'g'n'i'k'a'm' 'f'o' 'e'g'a't'n'a'v'd'a' 'e'h't' 's'a'h' 'h'i'r'e'h'n'i' 'n'o'i's'i'c'e'd' 'n'g'i's'e'd' 'a' ','}'h'w'6'1'0'2':'k'i'n'o'm'e'L'{'e't'i'c''~'s'n'o'i't'a'r'e'p'o' 'f'o' 'g'n'n'a'W'{'e't'i'c''~'e'v'a'W' 'e'l'g'o'o'G' 'y'l'r'e'm'r'o'f'(' 'e'v'a'W' 'e'h'c'a'p'A' 'd'n'a' '}'w'v'0'1'0'2':'k'a'w'e'i'p'S'{'h'c'i'R'y'a'D'{'e't'i'c''~'s'c'o'D' 'e'l'g'o'o'G' 'g'n'i'd'u'l'c'n'i' ','s'm'e't's'y's' 'n'o'i't'a'r'o'b'a'l'l'o'c' 'T'O' 'd'e'v'-'y'e'k' 't'r'o'p'p'u's' 't'o'n' 'o'd' 's'm'h't'i'r'o'g'l'a' 'e's'e'h't' 't'u'b' ','s't's'i'l'W','y'j'3'0'0'2':'t'a'n'g'I','v'i'2'0'0'2':'s'i'v'a'D'{'e't'i'c''~'s't'n'e'm'u'c'o'd' 'L'M'X' 'g'n'i't'i'd'e' 'o't' 'T'O' 'e'z'a'c'i'l'p'p'a' 'y'n'a'm' 'r'o'f' 'd'e'r'i'u'q'e'r' 'e'r'a' 't'a's'i'l' 'd'e'r'e'd'r'o' 'e'l'g'n'i's' 'a' 's'a' 't'n'e'm'u'c'o'd' 'a' 't'a'e'r't' 'm'e'h't' 'f'o' 't's'o'M' '.'}'d'f'5'9'9'1':'s'l'o'h'c'i'N','f'v'8'9'9'1':'n'u'S','x'w'6'9'9'1':'l'e's's'e'R','e'u'9'8'9'1':'s'i'l'l'E'{'e't'i'n'e'e'b' 'g'n'o'l' 'e'v'a'h' ')'T'O'(' '}'n'o'i't'a'm'r'o'f's'n'a'r't' 'l'a'n'o'i't'a'r'e'p'o'{'h'p'm'e'' 'n'o' 'd'e's'a'b' 's''}'n'o'i't'a'm'r'o'f's'n'a'r't' 'l'a'n'o'i't'a'r'e'p'O'{'n'o'i'd'e't'a'l'e'R'{'n'o'i't'c'e's'''n'n''a'c's'i'd' 'o't' 's'i' 's't'c'i'''''''''''''s't'i'c'l'f'n'o'c' 'g'n'i'v'l'o'''''''''''''v'l'o'e's'e'r' 'f'o' 'y'a'w' 't's'e'l'p'm'i's' 'e'h'T'n'n'.'d'e'v'l'o's'e'r' 'e'b' 't's'u'm' 's't'c'i'l'f'n'o'c' 'g'n'i't'l'u's'e'r' 'y'n'a' 'd'n'a' ','s'e'c'i'v'e'd' 't'n'e'r'e'f'f'i'd' 'n'o' 'y'l't'n'e'r'r'u'c'n'o'c' 's'n'o'i't'a'c'i'f'i'd'o'm' 'y'r'a'r't'i'b'r'a' 'e'k'a'm' 'n'a'c' 's'r'e's'u' 't'a'h't' 'e'm'u's's'a' 't's'u'm' 'e'w' 'o's' ','y't'i'v'i't'c'e'n'n'o'c' 'k'r'o'w't'e'n' 'r'o'o'p' 'f'o' 's'e'm'i't' 't'a' 'e'l'b'a's'u'n'u' 'e'm'o'c'e'b' 'o't' 'n'o'i't'a'c'i'l'p'p'a' 'e'h't' 'e's'u'a'c' 'd'l'u'o'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y't'i'l'i'b'a'z'i'l'a'i'r'e's' 's'a' 'h'c'u's' 's'e'h'c'a'o'r'p'p'a''''''''''''''''''''''''''''s' 's'd'o'h't'e'm' 'l'o'r't'n'o'c' 'y'c'n'e'r'r'u'c'n'o'c' 'l'a'n'o'i't'i'd'a'r't' 'd'n'a' ','y'l't'n'e'r'r'u'c'n'o'c' 'n'e'p'p'a'h' 'y'a'm' 's'n'o'i't'a'c'i'f'i'd'o'M'''''''t'S' '.'y'l'l'a'c'o'l' 'e't'a't's' 'e'h't' 'y'f'i'd'o'm' 'y'a'm' 'h'c'i'h'w' 'f'o' 'h'c'a'e' ','s'e'c'i'v'e'd' 'l'a'r'e'v'e's' 'o't' 'd'e't'a'c'i'l'p'e'r' 'e'b' 'o't' 's'd'e'e'n' 'e't'a't's' 'n'o'i't'a'c'i'l'p'p'a' 'e'm'a's' 'e'h't' 't'a'h't' 's'i' 'n'o'm'm'o'c' 'n'i' 'e'v'a'h' 's'n'o'i't'a'c'i'l'p'p'a''''d'''''''''''''''''''''''''''''''''''''''''''''''}'e'v'o'm'e'r'-'p'a'm':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'd'e't'a'r't's'u'l'l'i' 's'a' ','' 'e's'e'h't' 't'a'h'W'n'n'''n'i'k' 'r'e'h't'o'''''''''''''''''''''''''''''''''.'s't'n'e'm'u'c'o'd' 'r'a'l'i'm'i's' 'd'n'a' ','s'c'i'h'p'a'r'g' ','s'n'o'i't'a't'n'e's'e'r'p' ','s't'e'e'h's'd'a'e'r'p's' ','''' '''''''''''''' 's't'n'e'm'u'c'o'd' 'n'o' 's'r'e'h't'o' 'h't'i'w' 'e't'a'r'o'b'a'l'l'o'c' 'o't' 't'n'a'w' 'e'l'p'o'e'p' 'y'n'a''''''''''''''''''''''''''''''''''x'i'd'n'e'p'p'a'e'd'u'l'c'n'i''''''''''''''''''''''''.'''''n'o'i't'c'u'd'o''''''''''o'd'u'r't'n'i' 'e'r'o'm' 'O'D'O'T'n'n'm' ','r'e'v'o'e'r'o'M' '.'''''''''''''''''''''''''''''''s'r'e'g'a'n'a'm' 'd'r'o'w's's''''''''' 'g'n''''''''''''''''''''''''''''''' 'e'''''''''''''a'c'i'l'p'e'r' 'a' 'f'o' ''h't' 'e't'a'd'p'u'''''''''''''''''''''''''''''.'e't'a't's' 'a'c'i'l'p'e'r' 'o't' 's'n'o'i't'a'r'e'p'o' 'n'o'i''i'y'l'p'p'a''a'p''' ''''','''''g'''''n'''''i'''''k'''''a'''''t'''''-'''''e'''''t'''o'n'''g'''n'i'r'a'd'n'e'l'a'c''''''''''''''''''a'c' ','s'k'o'o'b' 's's'e'r'd'd'a' 'e'd'u'l'c'n'i' 's'n'o'i't'a'c'i'l'p'p'a' 'h'c'u's' 'f'o' 's'e'l'p'm'a'x'E' ''l'b'a'l'i'a'v'a' 's'i' 'k'r'o'w't'e'n' 'e'h't' 'n'e'h'w' 's'e'c'i'v'e'd' 'r'e'h't'o' 'h't'i'w' ''''''i'i''e't'a't's' 's't'i' 'e'z'i'n'o'r'h'c'n'y's' 'o't' 'd'n'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'r'e'd'n'u' 'g'n'i's'i'r'p'r'u's' 'y'l'''''''s' 'l'a'm'i'n'i'm' 'e'r'a' 't'a'h't' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'n'g'i's'e'd' 'o't' 'd'n'a' 's'r'e'm'm'a'r'g'o'r'p' 'n'o'i't'a'c'i'l'p'p'a' 'f'o' 's'n'o'i't'a't'c'e'p'x'e' 'e'h't' 'd'n'a't's'r'e'd'n'u' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y't'i''''''$'p'_'H'$' ''v'i't'c'e'n'n'o'c' 'k'r'o'w't'e'''':''$'n'$' ''n' 'r'o'o'p' 's'a'h' 'r'o' 'e'n'i'l'f'f'o' 's'i' 'e'c'i'v'e'd' 'e'h't' 'e'l'i'h'w' 'k'r'o'w' 'o't' 'l'l'i't's' 's'n'o'i't'a'c'i'l'p'p'a' 'e'h't' 't'c'e'p'x'e' 's'e'c'i'v'''''''''''''''''''''''''''''''''''''''}'c'e'x'e'-'d'i'l'a'v':'f'e'd'{'l'e'b'a'l'']'n'o'i't'u'c'e'x'e' 'd'i'l'a'v'[''e'd' 'e'l'i'b'o'm' 'n'o' 's'n'o'i't'a'c'i'l'p'p'a' 'f'o'r'e's''''''''''''''q's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''k'c'u't's' 'g'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''l'l''h'c's'''' 'e'r'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i'h'w' 'n'i' 's'e'l'u'r' 'f'o' 'n'o'i't'a'c'i'l'p'p'a' 'o'n' 's'i' 'e'r'e'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a' 'd'r'a'h'c'r'O' 'c'i'n'i'm'o'D'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e't'u'm'm'o'c'-'p'o':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'n'i' ''.'r'e'p'a'p' 's'i'h't' 'f'o' 't'f'a'r'd' 'a' 'n'o' 's't'n'e'm'm'o'c' 'r'o'f' 'e'l'i's'a'V' 'a'n''.'''a'''''i'''''D''''' '''''o'''''t''''' '''''u'''''o''''''''''''s'n'o'i't'a'r'e'p'o''''''''''''y''''''''''''''''' '''''''''''''''''k'''''''''''''''''n'''''''''''''''''a'''''''''''''''''h'''''T''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{'''''f'''''e'''''r''''''''~'''''a'''''m'''''m'''''e'''''L''''' '''''n'''''i''''' ''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i''''' ''''';'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''.'r'o'r'r'e' 'e'm'i't'n'u'r' 'a' 'e'b' 'd'l'u'o'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'y'r'o't's'i'h':'f'e'd'{'l'e'b'a'l'''''''''''''''''''''''''''''''''''']'y'r'o't's'i'h'['''''''''''''''''''''''''''''''r'e'd'r'o'e'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'a'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'}'1'+'n'{'_'o'$' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'y'l'n'o' 's'n'i'a't'n'o'c' 'x'i'f'f'u's' 'e'h't' ';'$'}'1'+'n'{'_'o'$' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't''''c''''''''o't' 'd'e'e'n' '' 's'n'o'i't'a'r'e'p'o' 'e'm'o's' 'y'l''''y'b'i's's'o'p' 'd'n'a' ','$'}'1'+'n'{'_'o'$' 'e'd'e'c'e'r'p'' 's'n'o'i't'a'r'e'p'o'''''''''' 'y'l'l'a's'u'a'c' 'l'l'a' 's'n'i'a't'n'o'c' 'x'i'f'e'r'p' 'e'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'n''''''''''=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''W'''''''''''''''''''''''''''''''''''''''''''''''e'n'i'm'r'e't'e''''''''''''''''''''a'c'i'l'p'e'r' 'n'e'v'i'g' 'a' 't'a' 'd' '''''''''''.'k'c'u't's' 's't'e'g''o't' 'e't'a't's' 'l'a'c'o'l' 's'''a'c'i'l'p'e'r' 'a' 'y'l'n'o' 'd'e'e'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o'''''''''' 'o'n'i't'c'u'd'e'r' 'r'e'h't'e'h'w''''''''''g'n'i'r'a'e'p'p'a''''''''''''''''''''''''''''''''''r'e't'f'a' 'g'n'i'r'r'u'c'c'o''' '''''''''''''''''''''''''''''''''''''s'r'a'e'p'p'a'''''''''''''''''''''''''r'e't'f'a' 's'r'u'c'c'o'''''''''''''''''''''''''''''''''''''''''<''''''''''e'''''''1'-'l'''''''''''''''''n'''''''''''''''''''''''''y'a's' 'e'w' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'i' '''''''''''''''''''''''''''''''''''''''''''.'$'j'_'k' '=' ''''$')')'1'_'k'('''')'}'t'x'e'n'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$' '.'e'.'i' ','y't'p'm'e' 's'i' 'e'c'n'e'u'q'e's' 't'a'h't' 'f'i' '$'1'_'k'$' 'r'a'e'p'p'a'''''''''''''''''''}'r'e't'f'a' 'y'l'e't'a'i'd'e'm'm'i'{'h'p'm'e'' 's'r'a'e'p'p'a' '$'j'_'k''''j'$' ','r'e'v'o'e'r'o'M' '''''''''''''''''''''''''''''''l''' ','$'}'x't'c'{'t'i'h't'a'm''$' 't's'i'''''''''''''''r'e't'f'a' 'g'n'i'r'a'e'p'p'a''''''l''''' '''''d'e'r'''''e'''''d''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'a'''s'''''t'''''n'''''e'''m'e'''l'''''''''''''''''r'e't'f'a' 's'r'a'e'p'p'a''''''e''''''''''' '''''t's'i'l' 'f'o''''''''''''''r'e't'f'a' 's'r'a'e'p'p'a''''''''''''''''' 'e'c'n'e'u'q'e's' ')'y't'p'm'e' 'y'l'b'i's's'o'p'(' 'a' 's''''''''''''''''''' 't's'i'l' '''r'''''o''''' '''''e'''''h'''''t''''' '''''n'''''I'''''o'''''i'''''s'''''s'''''e'''''c'''c'u''j'''s' ''''c''e'u'''s'''''''''''''''''''1'''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'a'-'s'r'a'e'p'p'a''''''''''''''''''''''''''''''''''''''''''''''s'e'i''''''''e''j'''r'a'''''''''''''''''r'e't'f'a'-'s'r'a'e'p'p'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'d'e'n'j''''i'f'e'd'''''''''''''''''''''}'e't'a't''j'''s'-'c'o'e'''''''''''c'''''c'''''u'''''s''''''''''''''''''''d''''''''''':'''''f'''''e'''''d'''''{'''''l'''''e'''''b'''''a'''''l'''''''''''-'''''l'''''l'''''e'''''w''''' '''''s'''''i''''' '''''r'''''e'''''d'''''r'''''o''''' '''''e'''''h'''''t'''''''''''''''''''''''''''''''''''''''''''''''''']'''''e'''''t'''''a'''''t'''''s''''' 't'n'e''''''''s'd'e'e'c'c'u's''e''''''''''''''''''''m'u'c'o'd'['' ','e'm'i'2''''c'u's'''''1'''''''''t' 'a' 't'a' 'n'o'i't'a'r'e'p'o'':'e'''' '''e'n'o' ''''''r'e't'a'l'''''''''''''''''''''''r'e't'f'a' 's'r'a'e'p'p'a'''''''''''''''''r'e't'f'a' 's'r'a'e'p'p'a'''''''''''''''''''''''''''''''''''''''''y'l'p'p'a' 'y'l'l'a''''a'i''2'''t'n'''c'u's'''''''''''''''r'e't'f'a' 's'r'a'''''''''''''r'e't'f'a' 's'r'a'e'p'p'a''''''e'''''p'''''p'''''a''''''''''''1'''''''''''''''e'u'q'e's' 's'e'l'u'r' 'n'o'i't'a'u'l'a'v'e' 'e'h't''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')''''''''''''''''''''''''''''''''''''')''''''''''''''''''''''''''''''''''''')'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i's's'e'c'c'u's'''''''''''''''''''''''''''''''''''''''''''''''.'d'e'n'i'f'e'd' '''''''''''''''''''''''''n'o'i's's'e'c'c'u's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''2''''''''''''''r'e''1'''t'f'a' 's'r'a'e'p'p'a'''''''''''''''''''''''''''''''' 'e's'''''''''s'n'i'a't'n'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'l'b'''''a'''''''''m'h't'-'''''''''''''e'','c'n'''''''''e'r'o'f'e'r'e'h't''''''''''''' 'd'e't'r'e's'n'i' 's'i''e'''''''''''''''''g'''''r'''''e'v'n'o'c'''''e'm'o''''p'''''r'e't'f'a''''''s''''''''''':'''''m''''''''''''''''i'''''r'''''''''u'-'''a'v' 'e's'e'h't' 's'e'd'u'l'c'x'e' 'e't'a't's' 't'n'e'm'u'c'o'd' 'f'o' 'n'o''''''''''''''''s'd'e'e'c'c'u's' '''''''''''''''''''''''''''''''$'2'_'k'$' 'i't'i'n'i'f'e'd' 'e'h''c' ''u'a'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'r'r'u'c'n'o'c' '''''''''''''''''r''''s''''r''''s''''t'''''''''s''''''''''''''''''''''''' 't's'e't'a'l''''m'''''''''''''''''''r'''''''''s'''''''''''''''''''''.'$'2'_'o'$' 'd'n'''''''''r''''''''''''''s'''''''''''''''''''''''''$'2'_'o'$' 'd'n'a' '$'1'_'o''''O'$' 'f'o' ''''''''''''''''''''''''''''''''''''''''''''''''''s'i' 't'a'h't''''''''''''''$'e'l'g'n'a'r'' ''''''''''''''''''''''''p'a'c'''''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'r'r'u'c'n'o'c' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m'r'''''''''''''''''''''''''''''''''''''''''''''''r'e't'f'a' 's'r'a'e'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y'l'r'a'l'i'm'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i''''h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'a'''''''''''''''''''''''''s't'n'e'm'e'l'e' 'd'''''''''''''''''''$'H'$' 'g''''''' 't'n'i'y'l'p'p'a' 'r'e't'f'a' '''''''''''''''''''''''''$'H'$' 'n'i' '$'s'_'o'$' 'd'n'a' '$'r'_'o'$' 'f'o'''''''''e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'''''n'''''a''''' '''''c'''''i'''''t's'i'n'i'm'r'e't'e'd' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{'c's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's'a'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'a'e'p'p'a' 't'a'h't' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'s'_'o'$' 'r'e'''''','s'u'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'D'I' 'e'h't' 'y'b' 'd'e'n'i'm'r'e't'e'd' 's'i' 'r'e'd'r'o' 't's'i'l' 'e'h't' ','d'e't'a'r'e'n'e'g' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'e'm'i'''''''m'o't' 'e'h't' 't'a' 'd'e'x'i'f' 'e'r'a' 's'D'I' 'e's'e'h't' 'e'c'n'i's' 'd'n'a' ','s'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't' 'n'o' 'y'l'n'o' 's'd'n'e'p'e'd' 'g'n'i'r'e'd'r'o' 'e'h'T''''S' '.'d'e'i'l'p'p'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'o'w't' 'e'h't' 'h'c'i'h'w' 'n'i' 'r'e'd'r'o' 'e'h't' 'f'o' 's's'e'l'd'r'a'g'e'r' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'$'s'_'o'$' 'f'o' 'n'o'i't'i's'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' 'r'e't'f'a' 's'r'a'e'p'p'a' '$'r'_'o'$' 'f'o' 'n'o'i't'i's'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' ','s'e's'a'c' 'h't'o'b' 'n'I'n''n''t'f'a' 'e'b' 't's'u'm' '$'r'_'o'$' 'f'o' 'n'o'i't'i's'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' ','s'u'h'T' '.'$'r'_'o'$' 'g'n'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'i'l'p'p'a' 'e'r'a' 's'''' 'n'o'i't'a'r'e'p'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o'i'r'p' '''''''''''''''''''''''''''''''''''''''''''''n''''''''''''''''''''''''''''''''s'r'o's'r'u'c' 'f'o' '''''''''''''''''''''''''''''''''''''''''''''''''$'}'t's'r'i'f'{'m'r'h't'a'm''_'o'$' 's'''''''('''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'a''d''''''''''''n'o'i't'a'r'e'p'o' '' ','$'H'$' 'y'r'o't's'i'h' 'n'o'i't'a'r'e'p'o' 'n'a' 'n'I''''''''''''''''''''''''t'''i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'i'l'p'p'a' 'e'r'e'w' '$'c'_'o'$' 'd'n'a' '$'d'_'o'$' 'h'c'i'h'w' 'n'i' 'r'e'd'r'o' 'e'h't' 'n'o' 'd'n'e'p'e'd' 't'o'n' 's'e'o'd' 's'n'o'i't'a'r'e'p'o' 'h't'o'b' 'g'n'i'y'l'p'p'a' 'r'e't'f'a' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 't'a'h't' 'w'o'h's' 't's'u'm' 'e'w' ','''''''''''''''''''''''''''''''''''''''''''''n'$'c'_'o'$' 'n'o'i't'a'r'e'p'o' 't'''''''''''n'''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'o' 'x'i'f'e'r'p' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'd'i's'n'o'c' 'w'o'N''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''n'n'.'e'v'i't'a't'u'm'm'o'c' 's'i' 'h'c'i'h'w' ','$'p'u'c''$' 'r'o't'a'r'e'p'o' 'n'o'i'n'u' 't'e's' 'e'h't' 'g'n'i's'u' 'd'e'i'l'p'p'a' 'e'r'a' 'h't'a'p' 'r'o's'r'u'c' 'e'h't' 'f'o' 't'r'a'p' 'd'e'r'a'h's'''''''h's' 'e'h't' 'g'n'o'l'a' '$'1'_'}'D'I'-'d'd'A'{'c's't'x'e't''$' 'd'n'a' '}'d'n'e'c's'e'D'{'c's't'x'''''''''d''''''''''''''''''e'r''c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'u'o'h't'i'w'''''''''''''g'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a''' 'n'a''''''''''n'o'i't'a'r'e'p'o' '' ','$'H'$' 'y'r'o't's'i'h' 'a' 'n'I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''''''''''''''''''''''''''''''''''''a'_'o'$' 'y''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'u'c'e'x'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a''' 'r'o'F''''''' '$'''H'$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'H'$' 'n'i' 's'n'o'i't'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''w' 'd'n'a' ',''''''.'''$'}'1'+'n'{'_'o'$' 'h't'i'w' 't'n'e'r'r'''''''''n'e'h't' ' '.''''''u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'y'l'n'o' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'v'i't'a't'u'm'm'o'c' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'e'h't' '}'r'e'd'r'o'e'r'-'t'r'e's'n'i':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'b' 'n'e'h't' ','$'}'1''''2'+'n'{''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''T''' '.'',''''''''''''''''''''''''''''''''''$'H'$' 'o't'n'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e't'r'e's'n'i' 's'i' 'n'o'i't'a'r'e'p'o' 'e'h't' 'h'c'i'h'w' 't'a' 'n'o'i't'i's'o'p' 'e'h't' 'f'o' 't'n'e'd'n'e'p'e'd'n'i' 's'i' 'e't'a't's' 't'n'e'm'u'c'o'd' 'l'a'n'i'f' 'e'h't' 'n'o' 't'c'e'f'f'e''''''''''''''''''' 'e'h't' 'd'n'a' ','s'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 's't'i''''p' 'r'e't'f'a' 't'n'i'o'p' 'y'n'a' 't'a' 'd'e't'r'e's'n'i' 'e'b' 'n'a'c' '$'}'1'+'n'{'_'o''''''''''''''''''''''''''''''$' 'e'r'o'f'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'p'y't'a't'a'd' 'r'u'o' 'f'o' 'e'c'n'e'g'r'e'v'n'o'c' 's'e'v'o'r'p' 's'u'h't' 'd'n'a' ','}'e'c'n'e'g'r'e'v'n'o'c':'m'h't'{'f'e'r''~'m'e'r'o'e'h'T' 'f'o' 'f'o'o'r'p' 'e'h't' 'n'i' 'p'e't's' 'n'o'i't'c'u'd'n'i' 'e'h't' 's'e't'e'l'p'm'o'c' 's'i'h'T'n'n'r'e'h't' 'd'n'a' ','$'H'$' 'n'i' 'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'y'n'a' 'o't' 't'c'e'p's'e'r' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c' 's'i' '$'}'1'''''''1'2'+'n'{'_'o'$' '''''''''''''''' 'e'h't' ','s'u'h'T'''_'''''''''''''''''o'''''''''''''''''$''''''''''''''''' '''''''''''''''''s'''''''''''''''''a''''''''''''''''' '''''''''''''''''t'''''''''''''''''s'''''''''''''''''i'''''''''''''''''l''''''''''''''''' '''''''''''''''''e'''''''''''''''''m'''''''''''''''''a'''''''''''''''''s''''' '''''e'''''h'''''t''''' '''''o'''''t'''''n'''''i''''' '''''n'''''o'''''i'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''n'''''a''''' '''''s'''''i''''' '''''$'c'_'o'$' 'f'I' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''a'h't' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'o't'n'i' 'n'o'i't'r'e's'n'i' 'n'a' 's'i' '$'c'_'o'$' 'f'I' '.'r'e'd'r'o' 'y'n'a' 'n'i' 'd'e'i'l'p'p'a' 'e'b' 'n'a'c' 's'n'o'i't'a'r'e'p'o' 'o'w't' 'e'h't' 'o's' 'd'n'a' '$'}'1'+'n'{'_'o'$' 'm'o'r'f' 't'n'e'd'n'e'p'e'd'n'i' 's'i' 't'c'e'f'f'e' 's't'i' ','t'n'e'm'u'c'o'd' 'e'h't' 'n'i' 't's'i'l' 't'n'e'r'e'f'f'i'd' 'a' 'o't'n'i' 'n'o'i't'r'e's'n'i' 'n'a' 's'i' '$'c'_'o'$' 'f'I' '.'y'l'e'v'i't'c'e'p's'e'r' '}'e't'u'm'm'o'c'-'n'g'i's's'a':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'r'o' '}'e't'u'm'm'o'c'-'e't'e'l'e'd''''''''''s's'a':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'b' '$'}'1'+'n'{'_'o'$' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c' 's'i' 't'i' ','t'n'e'm'n'g'i's's'a' 'r'o' 'n'o'i't'e'l'e'd' 'a' 's'i' '$'c'_'o'$' 'f'I' '.'y'r'o't's'i'h' 'e'h't' 'n'i' '$'c'_'o'$' 'r'e't'f'a' 'd'n'a' 'e'r'o'f'e'b' 'd'e't'r'e's'n'i' 'g'n'i'e'b' '$'}'1'+'n'{'_'o'$' 'f'o''''''''''''''''h't'e'h'w' 's'e's'a'c' 'e'h't' 'r'e'd'i's'n'o'c' 'd'n'a' ','x'i'f'f'u's' 'e'h't' 'n'i' 'n'o'i't'a'r'e'p'o' 'y'n'a' 'e'b' '$'c'_'o'$' 't'e'l' ','n'o'i't'r'e's'n'i' 'n'a' 's'i' '$'}'1'+'n'{''''['_'o'$' 'f'I'n'n'.'x'i'f'f'u's' 'e'h't' 'n'i' 's'n'o'i't'a'r'e'p'o' 'l'l'a' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c' 's'i' 't'i' '}'e't'u'm'm'o'c'-'n'g'i's's'a':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'b' ','t'n'e'm'n'g'i's's'a' 'n'a' 's'i' '$'}'1'+'n'{'_'o'$' 'f'i' ','y'l'r'a'l'i'm'i'S' '.'e't'a't's' 't'n'e'm'u'c'o'd' 'l'a'n'i'f' 'e'h't' 'n'o' 't'c'e'f'f'e' ''''e's't'i' 'g'n'i'g'n'a'h'c' 't'u'o'h't'i'w' 'x'i'f'f'u's' 'e'h't' 'r'e't'f'a' 'r'o' ','e'r'o'f'e'b' ','n'i'h't'i'w' 't'n'i'o'p' 'y'n'a' 't'a' 'd'e't'r'e's'n'i' 'e'b' 'n'a'c' '$'}'1'+'n'{'_'o''''#'$' 'o's' 'd'n'a' ','x'i'f'f'u's' 'e'h't' 'n'i' 's'n'o'i't'a'r'e'p'o' 'l'l'a' 'h't'i'w' 'e'v'i't'a't'u'm'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'p'o' 'l'l'a' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 's'i' 't'i' '}'e't'u'm'm'o'c'-'e't'e'l'e'd':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'b' ','n'o'i't'e'l'e'd' 'a' 's'i' '$'}'1'+'n'{'''''''{'n'_'o'$' 'f'I''n'n''s'n'i'a't'n'o'c' 'x'i'f'f'u's' 'e'h'T' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','x'i'f'e'r'p' 'e'h't' 'r'e't'f'a' 't'n'i'o'p' 'y'n'a' 't'a' 'd'e't'r'e's'n'i' 'e'b' 'o't' '$'}'1'+'n'{'_'o'$' 'w'o'l'l'a' 'e'W' '.'}'e'c'n'e'g'r'e'v'n'o'c':'m'h't'{'f'e'r''~'m'e'r'o'e'h'T' 'f'o' 'f'o'o'r'p' 'e'h't' 'n'i' 'd'e'b'i'r'c's'e'd' 's'a' ','x'i'f'f'u's' 'a' 'd'n'a' 'x'i'f'e'r'p' 'a' 'o't'n'i' 't'i'l'p's' 'e'b' 'n'a'c' '$'H'$'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'$'}'1'+'n'{'_'o'$' 'n'i' 'n'o'i't'a't'u'm' 'f'o' 'e'p'y'''''''''''''''' 'e'p'y'h't' 'e'h't' 'n'o' 'g'n'i'd'n'e'p'e'd' ','e's'a'c'-'y'b'-'e's'a'c' 'a'm'm'e'l' 'e'h't' 'e'v'o'r'p' 'e'W''n'n''r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'y'n'a' 'f'o' 'g'n'i'r'e'd'r'o' 'e'h't' 'f'o' 't'n'e'd'n'e'p'e'd'n'i' 'd'n'a' ','e'm'a's' 'e'h't' 's'i' 'r'e'd'r'o' 'n'i' '$'''H'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'i'y'l'p'p'a''''''''''' 'm'o'r'f' 'g'n'i't'l'u's'e'r' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' ','y'a'w' 's'i'h't' 'd'e't'c'u'r't's'n'o'c' 'e'b' 'n'a'c'''''''''''''' 't'a'h't' 's'e'i'r'o't's'i'h' '''''''''''''''''''''''''''''''''' 'g'n'i't'l'u's'e'r' 'l'l'A''''T' '.'d'e'i'l'p'p'a' 'n'e'e'b' 'e'v'a'h' '$'}'s'p'e'd'{'t'i'h't'a'm''.'}'1'+'n'{'_''''{'o'$' 'r'e't'f'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 'e'h't' 'e'r'e'h'w' '$'H'$' 'n'i' 't'n'i'o'p' 'y'n'a' 't'a' 'd'e't'r'e's'n'i' 'e'b' 'n'a'c' 'n'o'i't'u'c'e'x'e' 't'a'h't' 'm'o'r'f' '$'}'1'+'n'{'_'o'$' 'd'i'l'a'v' 'a' 'm'o'r'f' ''''''''''''''''''' 'n'o'i't'a'r'e'p'o' 'w'e'n' 'a' ','$'e'l'g'n'a'r'' 'n'_'o' ','s't'o'd'' ','1'_'o' 'e'l'g'n'a'l''='H'$' 'y''''''''''$' 'h'r'o't's'i'h' 'n'o'i't'a'r'e'p'o' 'n'a' 'n'e'v'i'G''n'''''''''''''''''''''''''''}'f'o'o'r'p'{'n'i'g'e'b''n'n'}'a'm'm'e'l'{'d'n'e''n''o'i's's'e'r'p'x'e' 'e'h't' 'y'b' '''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''f'o'o'r'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''''''''''''''''''''''''''''''''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''e'''''o'''''d''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''''''''''''''''''''''''''''''''''''''''''''f'i' 'r'o' 'n'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'e't'u'm'm'o'c'-'n'g'i's's'a':'m'e'l'{'f'e'r''~'a'm'm'e'L' ':'t'n'e'm'n'g'i's's'a' ';'}'e't'u'm'm'o'c'-'e't'e'l'e'd':'m'e'l'''':'{'f'e'r''~'a'm'm'e'L' ':'n'o'i't'e'l'e'd' ';'}'r'e'd'r'o'e'r'-'t'r'e's'n'i':'m'e'l'{'f'e'r''~'a'm'm'e'L' ':'t's'i'l' 'e'm'a's' 'e'h't' 'o't' 'n'o'i't'r'e's'n'i'n'''''''''''''}'a'm'm'e'l'{'d'n'e''n'}'e't'u'm'm'o'c'-'p'o':'m'e'l'{'l'e'b'a'l''}'a'm'm'e'l'{'n'i'g'e'b''n'n'i't'a'r'e'p'o' 't'n'e'm'n'g'i's's'a' 'n'a' 't'o'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':'n'o'i't'c'n'u'f' 'l'a'i't'r'a'p' 'a' 'o't' 's'e't'a'd'p'u' 't'n'e'd'n'e''''d'p'e'd'n'i' 'f'o' 'y't'i'v'i't'a't'u'm'm'o'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'a'i'r'e't'a'm'm'i' 's'i' 'r'e'd'r'o' 'r'i'e'h't' 'd'n'a' ',''.'g'n'i'p'p'a'm' 'e'h't' 'o't' 's'y'e'k' 't'n'e'r'e'f'f'i'd' 'o'w't' 'd'd'a' 's't'n'e'm'n'g'i's's'a' 't'n'e'r'r'u'c'n'o'c' 'o'w't' ','e'u'q'i'n'u' 'e'r'a' ')'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L'(' 's'D'I' 'n'o'i't'a'r'e'p'o' 'e'c'n'i'S' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e't'a't's' 't'n'e'm'u'c'o'd' '''s'i'''e'''''h't' 'n'o' ''''''''''''''''''''''''''''''''''e't'u'm'm'o'c' 's'n'o'i't'a'r'e''''p'p'o' 'e'h't' 'o's' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'a'_'o'$' 'r'e't'f'a' 'r'o' 'e'r'o'f'e'b' 'd'e'i'l'p'p'a' 's'a'w' '$'c'_'o'$' 'r'e'h't'e'h'w' 'f'o' 's's'e'l'd'r'a'g'e'r' ','t'c'e'f'f'e' 'e'm'a's' 'e'h't' 'e'v'a'h' '$'a''''c'_'o'$' 'g'n'i'y'l'p'p'a' 'f'o' 's's'e'c'o'r'p' 'e'h't' 'f'o' 's't'r'a'p' 'l'l'a''''''''''''''''''''''''' 'l'l'a' 'r'o'f' ','s'u'h'T'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'2'_'}'d'i''''''''''d'i'k'{'t'i'h't'a'm'' '='t'o'n'' '1'_'}'d'i'{'t'i'h't'a'm''$' 't'a'h't' 'd'e'd'i'v'o'r'p' '$']',''''']'1'_'}'l'a'v'{'t'i'h't'a'm'' 'o't's'p'a'm'' '1'_'}'d'i'{'t'i'h't'a'm'',''''''''[']',''2'_'}'l'a'v'{'t'i'h't'a'm'' 'o't's'p'a'm'' '2'_'}'d'i'{'t'i'h't'a'm'',''['}'d'l'i'h'c'{'t'i'h't'a'm'' '=' ']',''2'_'}'l'a'v'{'t'i'h't'a'm'' 'o't's'p'a'm'' '2'_'}'d'i'{'t'i'h't'a'm'',''''','[']',''1'_'}''''_'l'a'v'{'t'i'h't'a'm'' 'o't's'p'a'm'' '1'_'}'d'i'{'t'i'h't'a'm'',''['}'d'l'i'h'c'{'t'i'h't'a'm''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'c'n'u'f' 'l'a'i't'r'a'p' 'a' 'o't' 's'e't'a'd'p'u' 'f'o' 'r'e'd'r'o' 'e'h't' 't'a'h't' 't'c'a'f' 'e'h't' 'e's'u' 'e'w' ','r'o's'r'u'c' 'e'm'a's' 'e'h't' 'o't' 's't'n'e'm'n'g'i's's'a' 'e'r'a' '$'c'_'o'$' 'd'n'a' '$'a'_'o'$' 'f'I' '.'e'v'i't'a't'u'm'm'o'c' 'y'l'l'a'i'v'i'r't' 's'u'h't' 'd'n'a' 't'n'e'd'n'e'p'e'd'n'i' 'e'r'a'''''' '''''s'''''i''''' '''$'c'_'o'$' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'o't' 'y'l'p'p'a' 's'n'o'i't'a'r'e'p'o''''''''''''''''''''''''' 's'e't'a'd'p'u' 'e'h't' ','$'}'r'o's'r'u'c'{'t'i'h't'a'm''.'c'_'o' '='t'o'n'' '}'r'o's'r'u'c'{'t'i'h't'a'm''.'a'_'o'$' 'f'I'n'n''a'_'o'$' '''''''''''''''''''''''''''r'e't'f'a' 'r'o' 'e'r'o'f'e'b' 'd'e'i'l'p'p'a' 's'i' 't'i' 'r'e'h't'e'h'w' 'f'o' 's's'e'l'd'r'a'g'e'r' ','''''''.'$'}'d'i'{'t'i'h't'a'm''$''''#' 'f'o' 'g'n'i'p'p'a'm' 'e'h't' 't'c'e'f'f'a' 't'o'n'n'a'c' 'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'a' ','g'n'i'p'p'a'm' 'e'h't' 'm'o'r'f' '}'d'i'{'t'i'h't'a'm'' 'e'v'o'm'e'r' 't'o'n' 'o'd' 's'n'o'i't'a'r'e'p'o' 'n'o'i't'e'l'e'd' 't'n'e'r'r'u'c'n'o'c' 'd'n'a' ','e'u'q'i'n'u' 'e'r'a' ')'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L'(' 's'D'I' 'n'o'i't'a'r'e'p'o' 'e'c'n'i'S' ''''''''''''''''''''''''''''''''''''''''.'$']',''}'l'a'v'{'t'i'h't'a'm'' 'o't's'p'a'm'' '}'d'i'{'t'i'h't'a'm'',''['}'d'l'i'h'c'{'t'i'h't'a'm''$''''#' ':'''''''''''''''''''''' 'g'n'i's'u' 'r'e't's'i'g'e'r' 'e'h't' 'o't' 'd'e'd'd'a' 's'i' 'e'u'l'a'v' 'o't' 'D'I' 'n'o'i't'a'r'e'p'o' 'm'o'r'f' 'g'n'i'p'p'a'm' 'e'h't' ','b' 'd'e'n'g'i's's'a' 'e'u'l'a'v' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'i'l'p'p'a' 'e'l'u'r' '}'n'g'i's's'A'{'c's't'x'e't'' 'e'h't' 'd'n'a' 'e'v'i't'i'm'i'r'p' 'a' 's'i' 'e'u'l'a'v' 'd'e'n'g'i's's'a' 'e'h't' 'e'r'e'h'w' 'e's'a'c' 'e'h't' 'n'i' ','''' 'y'l'l'a'n'i'F'n'n'.'e'v'i't'a't'u'm'm'o'c' 's'i' 'h'c'i'h'w' ','$'p'u'c''$' 'r'o't'a'r'e'p'o' 'n'o'i'n'u' 't'e's' 'e'h't' 'g'n'i's'u' 'd'e'i'l'p'p'a' 'e'r'a' 's'e'g'n'a'h'c' 'e't'a't's' 'e's'e'h'T' '.'r'o's'r'u'c' 'e'h't' 'y'b' 'd'e'b'i'r'c's'e'd' 'e'e'r't' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 't'o'o'r' 'e'h't' 'm'o'r'f' 'h't'a'p' 'e'h't' 'n'o'''''''l'a' 's't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'o't' '$'}'d'i'{'t'i'h't'a'm''.'a'_'o'$' 's'd'd'a' '}'d'n'e'c's'e'D'{'c's't'x'e't'' 'd'n'a' ','r'o's'r'u'c' 'e'h't' 'y'b' 'd'e'i'f'i't'n'e'd'i' 't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'o't' '$'}'d'i'{'t'i'h't'a'm''.'a'_'o'$' 'd'd'a' 'o's'l'a' 's'e'l'u'r' 'e'h'T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n''n''d'e'h'c'u'o't'n'u' 's'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'y'b' 's'e't'a'd'p'u' 's'e'v'a'e'l' 'd'n'a' ','s'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c' 's'i' 'n'o'i't'a'r'e'p'o' 'g'n'i'r'a'e'l'c' 's'i'h't' ','}'e't'u'm'm'o'c'-'e't'e'l'e'd':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'b' ';'g'n'i'r'r'u'c'c'o' 's'i' 't'n'e'm'n'g'i's's'a' 'e'h't' 'h'c'i'h'w' 't'a' 'r'o's'r'u'c' 'e'h't' 'm'o'r'f' 'e't'a't's' 'r'o'i'r'p' 'y'l'l'a's'u'a'c' 'y'n'a' 'r'a'e'l'c' 't's'r'i'f' 's'e'l'u'r' 'e'e'r'h't' 'l'l'A' '.'d'e'n'g'i's's'a' 'g'n'i'e'b' 'e'u'l'a'v' 'e'h't' 'n'o' 'g'n'i'd'n'e'p'e'd' ','d'e'i'l'p'p'a' 's'i' '$'a'_'o'$' 'n'o'i't'a'r'e'p'o' 't'n'e'm'n'g'i's's'a' 'n'a' 'w'o'h' 'e'n'i'f'e'd' '}'t's'i'L'-'y't'p'm'E'{'c's't'x'e't'' 'd'n'a' '}'p'a'M'-'y't'p'm'E'{'c's't'x'e't'' ','}'n'g'i's's'A'{'c's't'x'e't'' 's'e'l'u'r' 'e'h'T'n'n'.'d'e'i'l'p'p'a' 'e'r'e'w' '$'c'_'o'$' 'd'n'a' '$'a'_'o'$''''o' 'h'c'i'h'w' 'n'i' 'r'e'd'r'o' 'e'h't' 'n'o' 'd'n'e'p'e'd' 't'o'n' 's'e'o'd' 's'n'o'i't'a'r'e'p'o' 'h't'o'b' 'g'n'i'y'l'p'p'a' 'r'e't'f'a' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 't'a'h't' 'w'o'h's' 't's'u'm' 'e'w' ','$'c'_'o'$' 'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'r'e'h't'o' 'y'n'a' 'd'n'a' '$'a'_'o'$' 't'n'e'm'n'g'i's's'a' 'n'a' 'n'e'v'i'G'n'''''''''''''}'f'o'o'r'p'{'d'n'e''n'}'f'o'o'r'p'{'n'i'g'e'b''n'n'''''''t''' ','s'u'h'T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'r'e't's'i'g'e'r' 'd'n'a' 's't'e's' 'e'c'n'e's'e'r'p' 'f'o' 't'n'e't'n'o'c' 's'u'o'i'v'e'r'p' 'e'h't' 'n'o' 'l'a'n'o'i't'i'd'n'o'c' 't'o'n' 'e'r'a'n'''''''''''''''''''''x'i'd'n'e'p'p'a'''' 'e'd'u'l'c'n'i' '''''' '''''''''''''''''n'''''''''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''n'''''a''''' '''''g'''''n'''''i'''''y'''''l'''''p'''''p'''''a''''' '''''r'''''o'''''f''''' '''''s'''''e'''''l'''''u'''''r''''' '''''e'''''h'''''t''''' '''''e'''''s'''''u'''''a'''''c'''''e'''''b''''' '''''d'''''n'''''a''''' ''''',''''''''.'''''s'''''t'''''n'''''e'''''m'''''e'''''l'''''e''''''''''''''''''''''''''''''''''''''''''''''''''s'''''m'''''e'''''t'''''i''''' '''''t'''''s'''''i'''''l''''' '''''r'''''o''''' '''''s'''''y'''''e'''''k''''' '''''p'''''a'''''m''''' '''''y'''''n'''''a''''' '''''e'''''v'''''o'''''m'''''e'''''r''''' '''''y'''''l'''''l'''''a'''''u'''''t'''''c'''''a''''' '''''t'''''o'''''n''''' '''''s'''''e'''''o'''''d''''' '''''t'''''u'''''b''''' ''''','''''s'''''r'''''e'''''t'''''s'''''i'''''g'''''e'''''r''''' '''''d'''''n'''''a''''' '''''s'''''t'''''e'''''s''''' '''''e'''''c'''''n'''''e'''''s'''''e'''''r'''''p''''' '''''s'''''e'''''i'''''f'''''i'''''d'''''o'''''m''''' '''''y'''''l'''''n'''''o''''' '''''n'''''o'''''i'''''t'''''e'''''l'''''e'''''d''''' '''''a''''' '''''g'''''n'''''i'''''y'''''l'''''p'''''p'''''a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''$'''''d'''''_'''''o'''''$''''''''''''''''''''''' '''''a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''$'''''d'''''_'''''o'''''$''''' '''''e'''''s'''''u'''''a'''''c'''''e'''''b''''' ''''','''''y'''''l'''''s'''''u'''''o'''''i'''''v'''''e'''''r'''''p''''' '''''d'''''e'''''i'''''l'''''p'''''p'''''a''''' '''''n'''''e'''''e'''''b''''' '''''t'''''o'''''n''''' '''''d'''''a'''''h''''' '''''$'''''d'''''_'''''o'''''$''''' '''''f'''''i''''' '''''s'''''a''''' '''''y''''''''''''''s'''''a'''''w''''' '''''e'''''m'''''a'''''s''''' '''''e'''''h'''''t''''' '''''n'''''i''''' '''''s'''''e'''''i'''''l'''''p'''''p'''''a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''t'''''u'''''c'''''e'''''x'''''e''''' '''''o'''''t''''' '''''e'''''l'''''b'''''a''''' '''''l'''''l'''''i'''''t'''''s''''' '''''s'''''i''''' '''''$'''''c'''''_'''''o'''''$''''' ''''','''''''''''''' '''''r'''''e'''''v'''''o'''''e'''''r'''''o'''''M''''' '''''.'''''r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''e'''''h'''''t''''' '''''o'''''t''''' '''''e'''''u'''''d''''' ''''','''''r'''''e'''''d'''''r'''''o''''' '''''e'''''s'''''r'''''e'''''v'''''e'''''r''''' '''''e'''''h'''''t''''' '''''n'''''i''''' '''''d'''''e'''''i'''''l'''''p'''''p'''''a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''t'''''u'''''c'''''e'''''x'''''e''''' '''''n'''''e'''''e'''''b''''' '''''d'''''a'''''h''''' '''''y'''''e'''''h'''''t''''' '''''f'''''i''''' '''''s'''''a''''' '''''e'''''m'''''a'''''s''''' '''''e'''''h'''''t''''' '''''s'''''i''''' '''''s'''''r'''''e'''''t'''''s'''''i'''''g'''''e'''''r''''' '''''d'''''n'''''a''''' '''''s'''''t'''''e'''''s''''' '''''e'''''c'''''n'''''e'''''s'''''e'''''r'''''p''''' '''''n'''''o''''' '''''t'''''c'''''e'''''f'''''f'''''e''''' '''''e'''''h'''''t''''''''o'''''f'''''e'''''b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''','''''$'''''d'''''_'''''o'''''$''''' '''''r'''''e'''''t'''''f'''''a''''' '''''d'''''e'''''i'''''l'''''p'''''p'''''a''''' '''''s'''''i''''' '''''$'''''c'''''_'''''o'''''$''''' '''''f'''''I'''''n'''''n'''''''''''n'''''n''''''''''''''e'''''t'''''''' '''''y'''''b''''' '''''s'''''e'''''g'''''n'''''a'''''h'''''c''''' '''''e'''''t'''''a'''''t'''''s''''' '''''y'''''n'''''A''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''$'''''}'''''r'''''u'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''.'''''c'''''_'''''o'''''$''''' '''''f'''''o''''' '''''x'''''i'''''f'''''e'''''r'''''p''''' '''''a''''' '''''s'''''i''''' '''''$''''''''''''''''''''''''''''''''''''''''' '''''s'''''i''''' '''''}'''''r'''''u'''''c''''''''''''''''''''''''''e'''''r'''''o'''''f'''''e'''''r'''''e'''''''''''{'''''''''''t'''''i'''''h'''''t'''''a'''''m''''''''.'''''d'''''_'''''o'''''$''''' '''''e'''''r'''''e'''''h'''''w''''' '''''e'''''s'''''a'''''c''''' '''''e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'''''l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''}'''''s'''''p'''''e'''''d'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''.'''''d'''''_'''''o'''''$''''' '''''n'''''i''''' '''''s'''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''f'''''o''''' '''''s'''''e'''''c'''''n'''''e'''''r'''''r'''''u'''''c'''''c'''''o''''' '''''y'''''n'''''a''''' '''''g'''''n'''''i'''''v'''''o'''''m'''''e'''''r''''' '''''e'''''l'''''i'''''h'''''w''''' ''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''e'''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''e'''''t'''''u'''''m'''''m'''''o'''''c''''' '''''s'''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''e'''''h'''''t''''' '''''o'''''s''''' ''''','''''$'''''c'''''_'''''o'''''$''''' '''''e'''''r'''''o'''''f'''''e'''''b''''' '''''$'''''d'''''_'''''o'''''$''''' '''''g'''''n'''''i'''''y'''''l'''''p'''''p'''''a''''' '''''s'''''a''''' '''''e'''''m'''''a'''''s''''' '''''e'''''h'''''t''''' '''''s'''''u'''''h'''''t''''' '''''s'''''i''''' '''''$'''''d'''''_'''''o'''''$''''' '''''e'''''r'''''o'''''f'''''e'''''b''''' '''''$'''''c'''''_'''''o'''''$''''''''''''''''''''''''''''''''''' '''''g'''''n'''''i'''''y'''''l'''''p'''''p'''''a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'''''p'''''a''''' '''''f'''o' 'f'o' 't'c'e'f'f'e' 'e'h'T' '.'d'e'b'r'u'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 'n'i'''''''t's'i'd'n'u' '$'}'d'i'{'t'i'h't'a'm''.'c'_'o'$' 'f'o' 's'e'c'n'e'r'r'u'c'c'o' 'y'n'a' 'e'v'a'e'l' 'l'l'i'w' '$'d'_'o'$' 'g'n'i't'a'u'l'a'v'e'''''''''''''''''''''''''''''''$' 'g'n'i'y'l'p'p'a' 's'e'l'u'r' '}'*'-'r'a'e'l'C'{'c's't'x'e't'' 'e'h't' ','h't' 'n'o' 's'u'c'o'f' 'e'w' ','''' 'f'o'o'r'p' 's'i'h't' 'f'o' 't's'e'r' 'e'h't' 'r'o'F' '.'e'v'i't'a't'u'm'm'o'c' 'y'l'l'a'i'v'i'r't' 'e'r'a' 'y'e'h't' 'o's' 'd'n'a' ','t'n'e'm'u'c'o'd' 'e'h't' 'f'o' 's'e'e'r't'b'u's' 't'n'i'o'j's'i'd' 't'c'e'f'f'a' 's'n'o'i't'a'r'e'p'o''''o' 'e'h't' ',''''''a''''' '''''t'''''o'''''n''''' '''''s'''''i''''' '''''$'''''}'r'u'c'{'t'i'h't'a'm''.'d'_'o'$' '''' '''''''''''''''''''}'r'''''''''''''''''''' 'n'i'h't'i'w' 'l'l'a'f' 't'o'n' 's'e'o''u'c'{'t'i'h't'a'm''.''''d' '$'c'_'o'$' 'f'I'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'r'o't's'i'h' 'e'h't''''h' 'n'i' '$'d'_'o'$' 'e'r'o'f'e'b' 'd'e'i'l'p'p'a' 's'i' '$'c'_'o'$' 'f'i' ','s'u'h'T' ''''''''''''','}'n'g'i's's'A'{'c's't'x'e't'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'}'s'p'e'd'{'t'i'h't'a'm''.'d'_'o' 'n'i't'o'n'' '}'d'i'{'t'i'h't'a'm''.'c'_'o'$' 't'a'h't' 'w'o'n'k' 'e'w' ','$'d'_'o'$' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 's'i' '$'c'_'o'$' 'e'c'n'i'S'n'n'.'r'o's'r'u'c' 'e'h't' 'y''''''' 'h'b' 'd'e'b'i'r'c's'e'd' 'e'e'r't' 't'n'e'm'u'c'o'd' 'e'h't' 'h'g'u'o'r'h't' 'h't'a'p' 'e'h't' 'g'n'o'l'a' '$')'k'('}'s'e'r'p'{'f's'h't'a'm''$' 's't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'o't' '$'}'d'i'{'t'i'h't'a'm''.'c'_'o'$' 'd'd'a' 's'e'l'u'r' '}'t's'i'L'-'y't'p'm'E'','}'d'n'e'c's'e'D'{'c's't'x'e't'' 'e'h't' 'd'n'a' ','r'e't's'i'g'e'r' 'a' 'r'o'f' 'e'u'l'a'v' 'o't' 'D'I' 'n'o'i't'a'r'e'p'o' 'm'o'r'f' 'g'n'i'p'p'a'm'''''''''''''''''''''' 'f'o' 't'e's' 'e'h't'''''''''' 'e'h' 'o't' '$'}'d'i'{'t'i'h't'a'm''.'c'_'o'$' 's'd'd'a' 'e'l'u'r' ''''''''''''''''''''''''''''''''''''{'c's't'x'e't'' 'd'n'a' '}'p'a'M'-'y't'p'm'E'{'c's't'x'e't'' ','}'n'g'i's's'A'{'c's't'x'e't'' 'e'h't' ','n'o'i't'a'r'e'p'o' 'n'o'i't'r'e's'n'i' 'r'o' 't'n'e'm'n'g'i's's'a' 'n'a' 's'i' '$'c'_'o'$' 'f'I' '.'$'}'s'p'e'd'{'t'i'h't'a'm''.'d'_'o' 'n'i't'o'n'' '}'d'i'{'t'i'h't'a'm''.'c'_'o'$' 't'a'h't' 'w'o'n'k' 'e'w' ','$'d'_'o'$' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 's'i' '$'c'_'o'$' 'e'c'n'i'S'n'n'''' '''''r'r'u'c'n'o'c' 'r'e'h't'o' 'y'n'a''''' 'd'n'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'e'd'{'m'r'h't'a'm''''''' '$'d'_'o'$' 'n'o'i't'a'r'e'p'o' 'n'o'i'''''''''''t'''''e'''''l'''''e'd' 'a' 'n'e'v'i'G'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'b' 'd'e'n'i'm'r'e't'e'd' 's'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'i''''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''''''''.'s'n'o'i't'a'r'e'p'o' 'o'w't' 'e'h't''' 'f'o' 's'e'c'n'e'r'e'f''''v'e'r' 'r'o's'r'u'c' 'f'o' 'n'i'a'h'c' 'e'h't' 'n'i' ','''''''r'o't's'e'c'n'a' 'n'o'm'm'o'c' 'e'h't' 'r'e't'f'a' 'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i' 'e'h't' 'o't'n'i''''''''''''''''''''''''''''''''''''''s'''''''''''''''''''''''' '''''s'''''''''''''' '''''n'''''o'''''i'''''t'''''r'''''e'''''s'''''n'''''i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'}'l'e'd'{'m'r'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'}'s'p'e'd'{'t'i'h't'a'm''.'}'l'e'd'{'m'r'h't'a'm''_'o'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'y'b' 'n'e't't'i'r'w' 's'e'u'l'a'v' 'y'n'a' 'e'v'o'm'e'r' 'o't' 's'r'e't's'i'g'e'r' 'l'l'a' 'g'n'i't'a'd'p'u' 'd'n'a' ','t'a'm''_'o'$' ''''''''''''''''''''''''''''''''''''''''''''''''''''''b'u's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'a' '$')'''''''''''''''''''''''e'e'r't'b'u's' 'e'h't' 'n'i' 's'e'd'o'n' 'h'c''k'('}'s'e'r'p'{'f's'h't'a'm''$' 't'e's' 'e'c'n'e's'e'r'p' 'e'h't' ''''''''''n'a'r'b' 'l'l'a''''''' 'm'o'r'f' '$'}'s'p'e'd'{'t'i'h't'a'm''.'}'l'e'd'{'m'r'h't'a'm''_'o'$' 'g'n'i'v'o'm'e'r' ',''''''''''''''''''''''''''''''''''e'e'r't' 'e'h't' 'd'n'e'c's'e'd' 'y'l'e'v'i's'r'u'c'e'r' 'y'e'h't' ','n'o'i't'a'r'e'p'o' 'e'h't' 'n'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'i' 'd'e'i'f'i't'n'e'd'i' 'n'o'i't'i's'o'p' 'r'o's'r'u'c' 'e'h't' 't'a' 'g'n'i't'r'a't's' ':'d'e'i'l'p'p'a' 's'i' 'n'o'i't'a'r'e'p'o' 'n'o'i't'e'l'e'd' 'a' 'w'o'h' 'e'n'i'f'e'd' '}'s'e'l''''''''''s'e'o'u'r'-''''_'r'a'e'l'c':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 's'e'l'u'r' 'e'h'T'n'''''''''''''}'f'o'o'r'p'{'d'n'e''n'}'f'o'o'r'p'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''t'''''a'''''h'''''t''''' '''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''t'''''s'''''r'''''i'''''f''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''p'''''m'''''a'''''t'''''s'''''e'''''m'''''i'''''t''''' '''''t'''''r'''''o'''''p'''''m'''''a'''''L''''' '''''e'''''h'''''t''''' '''''n'''''o''''' '''''s'''''d'''''n'''''e'''''p'''''e'''''d''''' '''''t'''''s'''''i'''''l''''' '''''l'''''a'''''n'''''i'''''f''''' '''''e'''''h'''''t''''' '''''n'''''i''''' '''''$'''''s'''''_'''''o'''''$''''' '''''d'''''n'''''a''''' '''''$'''''''''''''' '''''r'''''_'''''o'''''$''''' '''''f'''''o''''' '''''r'''''e'''''d'''''r'''''o''''' '''''e'''''h'''''t''''' ''''','''''e'''''r'''''o'''''f'''''e'''''r'''''e'''''h'''''T'''''''' '''''t'''''i''''' '''''n'''''o''''' '''''d'''''e'''''s'''''a'''''b''''' '''''s'''''i''''' '''''t'''''a'''''h'''''t''''' '''''s'''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''f'''''o''''' '''''n'''''i'''''a'''''h'''''c''''' '''''e'''''h'''''t''''' '''''e'''''r'''''o'''''f'''''e'''''b''''' '''''d'''''e'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''o'''''s'''''l'''''a''''' '''''s'''''i''''' '''''t'''''i''''' ''''','''''$'''''}'''''t'''''s'''''r'''''i'''''f'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''_'''''o'''''$''''' '''''e'''''r'''''o'''''f'''''e'''''b''''' '''''t'''''n'''''e'''''m'''''e'''''l'''''e''''' '''''w'''''e'''''n''''' '''''a''''' '''''s'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''$'''''1'''''_'''''}'''''t'''''r'''''e'''''s'''''n'''''I'''''{'''''c'''''s'''''t'''''x'''''e'''''t''''''''$''''' '''''f'''''i''''' ''''';'''''t'''''i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''''a'''''m''''''''_'''''o'''''$'''''''''''''''''''''''t'''''i''''' '''''n'''''o''''' '''''t'''''n'''''e'''''d'''''n'''''e'''''p'''''e'''''d''''' '''''y'''''l'''''l'''''a'''''s'''''u'''''a'''''c''''' '''''e'''''r'''''a''''' '''''t'''''a'''''h'''''t''''' '''''s'''''t'''''n'''''e'''''m'''''e'''''l'''''e''''' '''''t'''''s'''''i'''''l''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''l'''''l'''''a''''' '''''r'''''e'''''v'''''o''''' '''''p'''''i'''''k'''''s''''' '''''o'''''s'''''l'''''a''''' '''''l'''''l'''''i'''''w''''' '''''t'''''i''''' ''''','''''$'''''}'''''t'''''s'''''r'''''i'''''f'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''_'''''o'''''$''''' '''''y'''''b''''' '''''d'''''e'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''t'''''n'''''e'''''m'''''e'''''l'''''e''''' '''''t'''''s'''''i'''''l''''' '''''e'''''h'''''t''''' '''''r'''''e'''''v'''''o''''' '''''s'''''p'''''i'''''k'''''s''''' '''''$'''''2'''''_'''''}'''''t'''''r'''''e'''''s'''''n'''''I'''''{'''''c'''''s'''''t'''''x'''''e'''''t''''''''$''''' '''''f'''''i''''' ''''':''''''''''''''f'''''}'''''t'''''c'''''i'''''l'''''f'''''n'''''o'''''c'''''-'''''t'''''r'''''e'''''s'''''n'''''i''''':'''''m'''''e'''''l'''''{'''''f'''''e'''''r''''''''~'''''a'''''m'''''m'''''e'''''L''''' '''''n'''''i''''' '''''s'''''a''''' '''''t'''''n'''''e'''''m'''''u'''''g'''''r'''''a''''' '''''e'''''m'''''a'''''s''''' '''''e'''''h'''''t''''' '''''y'''''l'''''p'''''p'''''a''''' '''''n'''''a'''''c''''' '''''e'''''w''''' ''''','''''s'''''u'''''h'''''T''''' '''''.'''''$'''''}'''''t'''''s'''''r'''''i'''''f'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''_'''''o'''''$''''' '''''n'''''a'''''h'''''t''''' '''''r'''''e'''''t'''''a'''''e'''''r'''''g''''' '''''p'''''m'''''a'''''t'''''s'''''e'''''m'''''i'''''t''''' '''''t'''''r'''''o'''''p'''''m'''''a'''''L''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'''''e'''''p'''''o''''' '''''n'''''a''''' '''''e'''''v'''''a'''''h''''' '''''t'''''s'''''u'''''m''''' '''''y'''''e'''''h'''''t''''' '''''o'''''s''''' '''''d'''''n'''''a''''' ''''','''''$'''''}'''''t'''''s'''''r'''''i'''''f'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''_'''''o'''''$'''''''''''''''''''''''''' '''''n'''''o''''' '''''t'''''n'''''e'''''d'''''n'''''e'''''p'''''e'''''d''''' '''''y'''''l'''''l'''''a'''''s'''''u'''''a'''''c''''' '''''e'''''r'''''a''''' '''''n'''''i'''''a'''''h'''''c''''' '''''s'''''i'''''h'''''t''''' '''''n'''''i''''' '''''s'''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''l'''''l'''''a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'''''o'''''s'''''r'''''u'''''c''''' '''''e'''''h'''''t''''' '''''r'''''e'''''t'''''f'''''a''''' '''''n'''''o'''''i'''''t'''''i'''''s'''''o'''''p''''' '''''a''''' '''''t'''''a''''' '''''s'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''s'''''y'''''a'''''w'''''l'''''a''''' '''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''n'''''o'''''i'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''n'''''a''''' '''''e'''''c'''''n'''''i'''''s''''' ''''','''''''''''''' ''''''''''''''''''''''''''''''''''''''''' '''''t'''''a'''''h'''''t''''' '''''e'''''t'''''o'''''N''''' '''''.'''''$'''''}'''''e'''''r'''''o'''''f'''''e'''''b'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''^''''''''''''''&'''''k'''''$''''' '''''o'''''''''''p'''''e'''''t'''''s''''' '''''f'''''o''''' '''''r'''''e'''''b'''''m'''''u'''''n''''' '''''e'''''t'''''i'''''n'''''i'''''f''''' '''''a''''' '''''r'''''o'''''f''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''''' '''''s'''''r'''''e'''''f'''''e'''''r''''' '''''r'''''o'''''s'''''r'''''u'''''c''''' '''''e'''''s'''''o'''''h'''''w''''' '''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''n'''''a''''' '''''o'''''t''''' '''''s'''''d'''''a'''''e'''''l''''' '''''s'''''r'''''o'''''s'''''r'''''u'''''c''''' '''''f'''''o''''' '''''n'''''i'''''a'''''h'''''c''''' '''''s'''''i'''''h'''''t''''' '''''g'''''n'''''i'''''w'''''o'''''l'''''l'''''o'''''F'''''o''''' '''''o'''''s''''' '''''d'''''n'''''a''''' ''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''r'''''o'''''i'''''r'''''p''''' '''''r'''''e'''''h'''''t'''''o'''''n'''''a''''' '''''o'''''t''''' '''''s'''''r'''''e'''''f'''''e'''''r''''' '''''n'''''r'''''u'''''t''''' '''''n'''''i''''' '''''r'''''o'''''s'''''r'''''u'''''c''''' '''''e'''''s'''''o'''''h'''''w''''' ''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''.'''''l'''''a'''''v'''''r'''''e'''''t'''''n'''''i''''' '''''n'''''o'''''i'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''e'''''m'''''a'''''s''''' '''''e'''''h'''''t''''' '''''n'''''i'''''h'''''t'''''i'''''w''''' '''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''n'''''a''''' '''''y'''''b''''' '''''d'''''e'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''f'''''l'''''e'''''s'''''t'''''i''''' '''''s'''''a'''''w''''' '''''o'''''t''''' '''''s'''''r'''''e'''''f'''''e'''''r''''' '''''t'''''i''''' '''''t'''''n'''''e'''''m'''''e'''''l'''''e''''' '''''t'''''s'''''i'''''l''''' '''''e'''''h'''''t''''' ''''':''''''''''''''''''''''' ''''',''''''''''''''''''''''' '''''.'''''$'''''}'''''e'''''r'''''o'''''f'''''e'''''b'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''^'''''k'''''$''''' '''''m'''''o'''''r'''''f''''' '''''s'''''r'''''e'''''f'''''f'''''i'''''d''''' '''''t'''''a'''''h'''''t''''' '''''r'''''o'''''s'''''r'''''u'''''c''''' '''''a'''''''''''''''''''''''''''''''''''''''''h'''''t'''''i'''''e''''' '''''e'''''k'''''a'''''T'''''n'''''n'''''.''''')'''''}'''''r'''''o'''''t'''''s'''''e'''''''''''''''''''''''e'''''v'''''o'''''b'''''a''''' '''''c'''''n'''''a'''''-'''''n'''''o'''''m'''''m'''''o'''''c''''':'''''f'''''e'''''d'''''{'''''f'''''e'''''r''''''''~'''''n'''''o'''''i'''''t'''i'''''n'''''i'''''f'''''e'''''D'''''(''''' '''''r'''''o'''''t'''''s'''''e'''''c'''''n'''''a''''' '''''n'''''o'''''m'''''m'''''o'''''c''''' '''''e'''''h'''''t''''' '''''n'''''i''''' '''''t'''''s'''''i'''''x'''''e''''' '''''t'''''e'''''y''''' '''''t'''''o'''''n''''' '''''d'''''i'''''d'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''d'''''e'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''s'''''a'''''w''''' '''''t'''''a'''''h'''''t''''' '''''d'''''n'''''a''''' ''''','''''$'''''}'''''r'''''e'''''t'''''f'''''a'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''^'''''k'''''$''''' '''''d'''''n'''''a''''' '''''$'''''}'''''e'''''r'''''o'''''f'''''e'''''b'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''^'''''k'''''$''''' '''''n'''''e'''''e'''''w'''''t'''''e'''''b''''' '''''s'''''r'''''a'''''e'''''p'''''p'''''a''''' '''''t'''''a'''''h'''''t''''' '''''t'''''n'''''e'''''m'''''e'''''l'''''e''''' '''''t'''''s'''''i'''''l''''' '''''a''''' '''''o'''''t''''' '''''r'''''e'''''f'''''e'''''r''''' '''''t'''''s'''''u'''''m''''' '''''s'''''r'''''o'''''s'''''r'''''u'''''c''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''h'''''t'''''o'''''b''''' '''''r'''''o''''' '''''e'''''n'''''o''''' '''''n'''''e'''''h'''''t'''''''' '''''e'''''h'''''t''''' '''''h'''''c'''''i'''''h'''''w''''' '''''n'''''i''''' '''''r'''''e'''''d'''''r'''''o''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''s'''''s'''''e'''''l'''''d'''''r'''''a'''''g'''''e'''''r''''' ''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''''s'''''i'''''l''''' '''''e'''''h'''''t''''' '''''n'''''i''''' '''''t'''''s'''''r'''''i'''''f''''' '''''s'''''r'''''a'''''e'''''p'''''p'''''a''''' '''''D'''''I''''' '''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''r'''''e'''''t'''''a'''''e'''''r'''''g''''' '''''e'''''h'''''t''''' '''''h'''''t'''''i'''''w''''' '''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''e'''''h'''''t''''' '''''d'''''n'''''a''''' ''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''t'''''o'''''d''''''''O'''''D'''''O'''''T''''' ''''','''''$'''''}'''''r'''''u'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''.'''''s'''''_'''''o''''' '''''='''''t'''''o'''''n'''''''' '''''}'''''r'''''u'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''.'''''r'''''_'''''o'''''$''''' '''''f'''''I''''' '''''.'''''e'''''v'''''i'''''t'''''a'''''t'''''u'''''m'''''m'''''o'''''c''''' '''''e'''''r'''''a''''' '''''s'''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''e'''''h'''''t''''' ''''','''''}'''''t'''''c'''''i'''''l'''''f'''''n'''''o'''''c'''''-'''''t'''''r'''''e'''''s'''''n'''''i''''':'''''m'''''e'''''l'''''{'''''f'''''e'''''r''''''''~'''''a'''''m'''''m'''''e'''''L''''' '''''y'''''b''''' '''''n'''''e'''''h'''''t''''' ''''','''''$'''''}'''''r'''''u'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''.'''''s'''''_'''''o''''' '''''=''''' '''''}'''''r'''''u'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''.'''''r'''''_'''''o'''''$''''' '''''f'''''I'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''r'''''e'''''h'''''t'''''i'''''E''''''''''''''''''''t'''''''''''''''''r'''''''''''''''''e'''''''''''''''''s'''''''''''''''''n'''''''''''''''''i''''''''''''''''' '''''''''''''''''n'''''''''''''''''e'''''''''''''''''h'''''''''''''''''w''''''''''''''''' '''''''''''''''''s'''''''''''''''''t'''''''''''''''''n'''''''''''''''''e'''''''''''''''''m'''''''''''''''''e'''''''''''''''''l'''''''''''''''''e''''''''''''''''' '''''''''''''''''t'''''''''''''''''s'''''''''''''''''i'''''''''''''''''l''''''''''''''''' '''''''''''''''''e'''''''''''''''''s'''''''''''''''''o'''''''''''''''''h'''''''''''''''''t''''''''''''''''' '''''''''''''''''r'''''''''''''''''e'''''''''''''''''v'''''''''''''''''o''''''''''''''''' '''''''''''''''''s'''''''''''''''''p'''''''''''''''''i'''''''''''''''''k'''''''''''''''''s''''''''''''''''' '''''''''''''''''o'''''''''''''''''s'''''''''''''''''l'''''''''''''''''a''''''''''''''''' '''''''''''''''''$'''''''''''''''''2'''''''''''''''''_'''''''''''''''''}'''''''''''''''''t'''''''''''''''''r'''''''''''''''''e'''''''''''''''''s'''''''''''''''''n'''''''''''''''''I'''''''''''''''''{'''''''''''''''''c'''''''''''''''''s'''''''''''''''''t'''''''''''''''''x'''''''''''''''''e'''''''''''''''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$''''''''''''''''' '''''''''''''''''o'''''''''''''''''s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''e'''''''''''''''''s'''''''''''''''''u'''''''''''''''''a'''''''''''''''''c'''''''''''''''''e'''''''''''''''''b''''''''''''''''' ''''''''''''''''','''''''''''''''''$'''''''''''''''''}'''''''''''''''''d'''''''''''''''''i'''''''''''''''''{'''''''''''''''''t'''''''''''''''''i'''''''''''''''''h'''''''''''''''''t'''''''''''''''''a'''''''''''''''''m''''''''''''''''''''''''''.'''''''''''''''''s'''''''''''''''''_'''''''''''''''''o'''''''''''''''''$''''''''''''''''' '''''''''''''''''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''''''''''''''t'''''''''''''''''a'''''''''''''''''h'''''''''''''''''t''''''''''''''''' '''''''''''''''''r'''''''''''''''''e'''''''''''''''''t'''''''''''''''''a'''''''''''''''''e'''''''''''''''''r'''''''''''''''''g''''''''''''''''' '''''''''''''''''p'''''''''''''''''m'''''''''''''''''a'''''''''''''''''t'''''''''''''''''s'''''''''''''''''e'''''''''''''''''m'''''''''''''''''i'''''''''''''''''t''''''''''''''''' '''''''''''''''''t'''''''''''''''''r'''''''''''''''''o'''''''''''''''''p'''''''''''''''''m'''''''''''''''''a'''''''''''''''''L''''''''''''''''' '''''''''''''''''a''''''''''''''''' '''''''''''''''''e'''''''''''''''''v'''''''''''''''''a'''''''''''''''''h''''''''''''''''' '''''''''''''''''t'''''''''''''''''s'''''''''''''''''u'''''''''''''''''m''''''''''''''''' '''''''''''''''''$'''''''''''''''''r'''''''''''''''''_'''''''''''''''''o'''''''''''''''''$''''''''''''''''' '''''''''''''''''g'''''''''''''''''n'''''''''''''''''i'''''''''''''''''t'''''''''''''''''r'''''''''''''''''e'''''''''''''''''s'''''''''''''''''n'''''''''''''''''i''''''''''''''''' '''''''''''''''''f'''''''''''''''''o''''''''''''''''' '''''''''''''''''e'''''''''''''''''m'''''''''''''''''i'''''''''''''''''t''''''''''''''''' '''''''''''''''''e'''''''''''''''''h'''''''''''''''''t''''''''''''''''' '''''''''''''''''t'''''''''''''''''a''''''''''''''''' '''''''''''''''''$'''''''''''''''''s'''''''''''''''''_'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'''''''''''''''''$''''''''''''''''' '''''''''''''''''d'''''''''''''''''n'''''''''''''''''a''''''''''''''''' '''''''''''''''''$'''''''''''''''''}'''''''''''''''''r'''''''''''''''''u'''''''''''''''''c'''''''''''''''''{'''''''''''''''''t'''''''''''''''''i'''''''''''''''''h'''''''''''''''''t'''''''''''''''''a'''''''''''''''''m''''''''''''''''''''''''''.'''''''''''''''''s'''''''''''''''''_'''''''''''''''''o'''''''''''''''''$''''''''''''''''' '''''''''''''''''n'''''''''''''''''e'''''''''''''''''e'''''''''''''''''w'''''''''''''''''t'''''''''''''''''e'''''''''''''''''b''''''''''''''''' '''''''''''''''''s'''''''''''''''''t'''''''''''''''''n'''''''''''''''''e'''''''''''''''''m'''''''''''''''''e'''''''''''''''''l'''''''''''''''''e''''''''''''''''' '''''''''''''''''t'''''''''''''''''s'''''''''''''''''i'''''''''''''''''l''''''''''''''''' '''''''''''''''''y'''''''''''''''''n'''''''''''''''''a''''''''''''''''' ''''''''''''''''','''''''''''''''''r'''''''''''''''''e'''''''''''''''''v'''''''''''''''''o'''''''''''''''''e'''''''''''''''''r'''''''''''''''''o'''''''''''''''''M''''''''''''''''' '''''''''''''''''.'''''''''''''''''$'''''''''''''''''s'''''''''''''''''_'''''''''''''''''o'''''''''''''''''$''''''''''''''''' '''''''''''''''''r'''''''''''''''''e'''''''''''''''''t'''''''''''''''''f'''''''''''''''''a''''''''''''''''' '''''''''''''''''n'''''''''''''''''o'''''''''''''''''i'''''''''''''''''t'''''''''''''''''i'''''''''''''''''s'''''''''''''''''o'''''''''''''''''p''''''''''''''''' '''''''''''''''''a''''''''''''''''' '''''''''''''''''t'''''''''''''''''a''''''''''''''''' '''''''''''''''''$'''''''''''''''''r'''''''''''''''''_'''''''''''''''''o'''''''''''''''''$''''''''''''''''' '''''''''''''''''s'''''''''''''''''t'''''''''''''''''r'''''''''''''''''e'''''''''''''''''s'''''''''''''''''n'''''''''''''''''i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''d'''''''''''''''''n'''''''''''''''''a''''''''''''''''' '''''''''''''''''$'''''''''''''''''s'''''''''''''''''_'''''''''''''''''o'''''''''''''''''$''''''''''''''''' '''''''''''''''''r'''''''''''''''''e'''''''''''''''''v'''''''''''''''''o''''''''''''''''' '''''''''''''''''s'''''''''''''''''p'''''''''''''''''i'''''''''''''''''k'''''''''''''''''s''''''''''''''''' '''''''''''''''''e'''''''''''''''''l'''''''''''''''''u'''''''''''''''''r''''''''''''''''' '''''''''''''''''e'''''''''''''''''h'''''''''''''''''t''''''''''''''''' '''''''''''''''''o'''''''''''''''''s''''''''''''''''' ''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''$'''''''''''''''''}'''''''''''''''''d'''''''''''''''''i'''''''''''''''''{'''''''''''''''''t'''''''''''''''''i'''''''''''''''''h'''''''''''''''''t'''''''''''''''''a'''''''''''''''''m''''''''''''''''''''''''''.'''''''''''''''''s'''''''''''''''''_'''''''''''''''''o''''''''''''''''' '''''''''''''''''=''''''''''''''''' '''''''''''''''''}'''''''''''''''''t'''''''''''''''''x'''''''''''''''''e'''''''''''''''''n'''''''''''''''''{'''''''''''''''''t'''''''''''''''''i'''''''''''''''''h'''''''''''''''''t'''''''''''''''''a'''''''''''''''''m''''''''''''''''''''''''''$''''''''''''''''' '''''''''''''''''h'''''''''''''''''t'''''''''''''''''i'''''''''''''''''w''''''''''''''''' '''''''''''''''''s'''''''''''''''''e'''''''''''''''''i'''''''''''''''''l'''''''''''''''''p'''''''''''''''''p'''''''''''''''''a''''''''''''''''' '''''''''''''''''$'''''''''''''''''2'''''''''''''''''_'''''''''''''''''}''''''''''''''''''''''''''''''''''''''''''''_'''''''''''''''''t'''''''''''''''''r'''''''''''''''''e'''''''''''''''''s'''''''''''''''''n'''''''''''''''''I'''''''''''''''''{'''''''''''''''''c'''''''''''''''''s'''''''''''''''''t'''''''''''''''''x'''''''''''''''''e'''''''''''''''''t''''''''''''''''''''''''''$''''''''''''''''' '''''''''''''''''e'''''''''''''''''l'''''''''''''''''u'''''''''''''''''r''''''''''''''''' '''''''''''''''''e'''''''''''''''''h'''''''''t''''' ''''','''''$'''''r'''''_'''''o'''''$''''' '''''g'''''n'''i'''y'''''l'''''p'''''p'''''a''''' '''''n'''''e'''''h'''''W'''''''''''''''''''''''''''''''''''''''''O'''''D'''''O'''''T''''' '''''.'''''d'''''e'''''i'''''l'''''p'''''p'''''a''''' '''''n'''''e'''''e'''''b''''' '''''y'''''d'''''a'''''e'''''r'''''l'''''a''''' '''''s'''''a'''''h''''' '''$'s'_'o'$' ','d'e'i'l'p'p'a' 's'i' '$'r'_'o'$' 'n'e'h'w' 'e'm'i't' 'e'h't' 't'a' ','s'u'h'T' '.'$'H'$' 'n'i' '$'r'_'o'$' 'e'r'o'f'e'b' 'd'e'i'l'p'p'a' 's'i' '$'s'_'o'$' 'm'e't'i''n'n'.'$'r'_'o'$''''o' 't's'a'p' 'p'i'k's' 'o't' '$'2'_'}'t'x'e't'''''''''''''h't'a'm''$'''''''t'r'e's'n'I' 'r'o'f' 'e'l'b'i's's'o'p' 't'o'n' 's'i' 't'I' '.'$'r'_'o'$' 'e'r'o'f'e'b' 'r'a'e'p'p'a' 't's'u'm' '$'s'_'o'$' 'f'o' 'n'o'i't'i's'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' 'o's' ','t's'e't'a'l' 'e'h't' 't'a' '$'}'d'i'{'t'i'h't'a'm''.'r'_'o' '=' '}'t'x'e'n'{'t'i'h't'a'm''$' 'h't'i'w' 's'e'i'l'p'p'a' '$'1'_'}'t'r'e's'n'I'{'c's't'x'e't''$' 'e'l'u'r''''' 'e'h't' ','D'I' 'n'o'i't'a'r'e'p'o' 'r'e's's'e'l' 'a' 's'a'h' '$'r'_'o'$' 'e'c'n'i's' ','$'s'_'o'$' 'g'n'i'y'l'p'p'a' 'n'e'h'W' '.'d'e'i'l'p'p'a' 'n'e'e'b' 'y'd'a'e'r'l'a' 's'a'h' '$'r'_'o'$' ','d'e'i'l'p'p'a' 's'i' '$'s'_'o'$' 'n'e'h'w' 'e'm'i't' 'e'h't' 't'a' ','s'u'h'T' '.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'H'$' 'n'i' '$'s'_'o'$' 'e'r'o'f'e'b' 'd'e'i'l'p'p'a' 's'i' '$'r'_'o'$' 'm'e't'i''n'}'''''''''''''''}'e't'a'r'e'm'u'n'e'{'d'n'e'''''''e'''''t'a'r'e'm'u'n'e'{'n'i'g'e'b''n'n':'s'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'i'y'l'p'p'a' 'f'o' 's'''''''''''''''' 's'g'n'i'r'e'd'r'o' 'e'l'b'i's's'o'p' 'o'w't' 'e'h't''''t' 'h's'i'u'g'n'i't's'i'd' 'w'o'n' 'e'W' ')'.'f'o'o'r'p' 's'i'h't' 'n'i' 'd'e'p'p'a'w's' 'e'b' 'n'a'c' 's'n'o'i't'a'r'e'p'o' 'o'w't' 'e'h't' ','$'s'_'o'$' 'f'o' 't'a'h't' 'n'a'h't' 'r'e'''' 't'a'e'r'g' 's'i' '$'r'_'o'$' 'f'o' 'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't' 'f'I'(' '.'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'n'o' 'n'o'i't'a'l'e'r' 'g'n'i'r'e'd'r'o' 'e'h't' 'o't' 'g'n'i'd'r'o'c'c'a' '$'}'d'i'{'t'i'h't'a'm''.'s'_'o' '<' '}'d'i'{'t'i'h't'a'm''.'r'_'o'$' 't'a'h't' 'e'm'u's's'a' ','y't'i'l'a'r'e'n'e'g' 'f'o' 's's'o'l' 't'u'o'h't'i'W'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'i'l'p'''''''''''''''''''''''''''''''''}'f'o'o'r'p'{'d'n'e''n'O'D'O'T'n'}'f'o'o'r'p'{'n'i'g'e'b''n'n'p'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'h'c'i'h'w' 'n'i' 'r'e'd'r'o' 'e'h't' 'f'o' 't'n'e'd'n'e'p'e'd'n'i' 's'i' 't's'i'l' 'e'h't' 'n'i' 'r'a'e'p'p'a''''''''''''' 'e'r'a' 's'n'o'i't'r'e's'n'i' 'e'h't' 'h'c'i'h'w' 't'a' 'r'e'd'r'o' 'e'h't' 'n'e'h't' ',')'$'}'r'u'c'{'t'i'h't'a'm''.'s'_'o' '=' '}'r'u'c'{'t'i'h't'a'm''.'r'_'o'$'(' 'r'o's'r'u'c' 'e'm'a's' 'e'h't' 'e'v'a'h' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'f'i''''''''''''''' '$'s'_'o' ','r'_'o'$' 's'n'o'i't'a'r'e'p'o' 'n'o'i't'r'e's'n'i' 't'n'e'r'r'u'c'n'o'c' 'o'w't' 'y'n'a' 'r'o'F'''''''''''''''''''''''''''''''''g' ','$'H'$' 'y'r'o't's'i'h' 'n'o'i't'a'r'e'p'o' 'n'a' 'n'I''n''''''''''''}'a'm'm'e'l'{'d'n'e''n'}'t'c'i'l'f'n'o'c'-'t'r'e's'n'i':'m'e'l'{'l'e'b'a'l''}'a'm'm'e'l'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'H'$' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'s'_'o'$' ','r'_'o'$' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'s'_'o'$' 'n'''''''''''''$' 'n't'a'h't' ''s'i''''''''''''''''='''''''''n'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'm'i't' 'e'h't' 't'a''''''''''''''''''''''''''''''''''''''''''''''''''''''s''' ','$'s'_'o'$' 'g'n'i'y'l'p'p'a' 'n'e'h'W''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$''''.'r'_'o'$' 't's'a'p' 'p'i'k's''''''''''$'r'_'o'$' 'e'r'o'f'e'b' 'r'a'e'p'p'a' 't's'u'm' '$'s'_'o'$' 'f'o' 'n'o'i't'i's'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' 'o's' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','n'o'i't'a'c'i'l'''''''''''''''''''''''''''''''''''''''t's'i'l' 'e'm'a's' 'e'h't' 'o't' 's'n'o'i't'r'e's'n'i' 't'n'e'r'r'u'c'n'o'c'''p'''''p'''''a''''' '''''f'''''o''''' '''''r'e'd'r'o' 'e'h't' 't'o'n' 't'u'b' 's'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't' 'n'o' 'y'l'n'o' 's'd'n'e'p'e'd' 't's'i'l' 'e'h't' 'n'i' 's't'n'e'm'e'l'e' 'f'o' 'r'e'd'r'o' 'l'a'n'i'f' 'e'h't' 't'a'h't' 'e'c'u'd'e'd' 'e'w' ','$'H'$' 'n'i' '$'s'_'o' '''''''''''''_'o'$' ','r'_'o'$' 's'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'f'o' 's'r'i'a'p' 'l'l'a' 'o't' 's'e'i'l'p'p'a' 't'n'e'm'u'g'r'a' 'e'h't' 'e'c'n'i'S' '.''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'v'i't'a't'u'm'm'o'c' 'e'r'a' '$'s'_'o'$' 'd'n'a' '$'r'_'o'$' 't'a'h't' 's'w'o'h's' 'h'c'i'h'w' ',''''''''''T' '.'$'s'_'o'$' 'f'o' 'n'o'i't'i's'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' 'r'e't'f'a' 's'r'a'e'p'p'a' '$'r'_'o'$' 'f'o' 'n'o'i't'i's'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' ','s'e's'a'c' 'h't'o'b' 'n'I'n'n''''''''' 'o't' ''''%'$'2'_'}'t'r'e's'n'I'{'c's't'x'e't''''m''$' 'r'o'f' 'e'l'b'i's's'o'p' 't'o'n' 's'i' 't'i' ';'t's'e't'a'l' 'e'h't' 't'a' '$'}'d'i'{'t'i'h't'a'm''.'r'_'o' '=' '}'t'x'e'n'{'t'i'h't'a'm''$' 'h't'i'w' 's'e'i'l'p'p'a' '$'1'_'}'t'r'e's'n'I'{'c's't'x'e't''''m''$' 'e'l'u'r' 'e'h't' ','D'I' 'n'o'i't'a'r'e'p'o' 'r'e's's'e'l' 'a' 's'a'h' '$'r'_'o'$' 'e'c'n'i'S' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'm'i't' 'e'h't' 't'a'''''''''' '''''s'''''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''''''''''''''''''''''''''.'d'e'i'l'p'p'a' 'n'e'e'b' 'y'd'a'e'r'l'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'i'l'p'p'a' 'n'e'e'b' 'y'd'a'e''''a'r'l'a' 'e'v'a'h' 'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i' 'e'm'a's' 'e'h't' 'n'i' '$'s'_'o'$' 'o't' 'r'o'i'r'p' 'y'l'l'a's'u'a'c' 's'n'o'i't'r'e's'n'i' 'y'n'a' 'd'n'a' '$'s'_'o'$' ','d'e'i'l'p'p'a' 's'i' '$'r'_'o''''o'$' 'n'e'h'''''''h'e'w' ','s'u'h'T' 'e'v'a'h' 'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i' 'e'm'a's' 'e'h't' 'n'i' '$'r'_'o'$' 'o't' 'r'o'i'r'p' 'y'l'o'i't'r'e's'n'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 's'e'i'c'n'e'd'n'e'p'e'd' 'l''''''''''d' 'p'a's'u'a'c' 'y'n'a' 'd'n'a' '$'r'_'o'$' ','d'e'i'l'p'p'a' 's'i' '$'s'_'o'$' 'n'e'h'w' ','s'u'h'T' '''''''''''''''''''''''''':'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e's'a'c' 'o'w't' 'h's'i'u'g'n'i't's'i'd' 'w'o'n' 'e'W' ')'.'f'o'o'r'''''''r'o'p' 's'i'h't' 'n'i' 'd'e'p'p'a'w's' 'e'b' 'd'l'u'o'c' '$'s'_'o'$' 'd'n'a' '$'r'_'o'$' ','r'e't'a'e'r'g' 'e'r'e'w' '$'r'_'o'$' 'f'o' 'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't''''''''''''' 'e'h't' 'f'I'(' '.'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'n'o' 'n'o'i't'a'l'e'r' 'g'n'i'r'e'd'r'o' 'e'h't' 'o'''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'H'$' 'n'i' '$'r'_'o'$' 'e'r'o'f'e'b' 'd'e'i'l'p'p'a' 's'i' '$'s'_'o'$' 'm'e't'i''n'.'$'H'$' 'n'i' '$'s'_'o'$' 'e'r'o'f'e'b' 'd'e'i'l'p'p'a' 's'i' '$'r'_'o'$''''e'h't' 'g'n'i'd'r'o'c'c'a' '$'}'d'i'{'t'i'h't'a'm''.'s'_'o' '<' '}'d'i'{'t'i'h't'a'm''.'r'_'o'$' 't'a''''''h't' 'e'm'u's'a's' ','y't'i'l'a'r'e'n'e'g' 'f'o' 's's'o'l' 't'u'o'h't'i'W''n'n'''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''x' 'm'e't'i''n'''''''''''''''''}'e't''''''''''}'e'g'a'r'e'm'u'n'e'{'d'n'e''n'}'e't'a'r'e'm'u'n'e'{'n'i'g'e'b''n'n'.'d'e'i'l'p'p'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'h'c'i'h'w' 'n'i' 'r'e'd'r'o' 'e'h't' 'n'o' 't'o'n' 'd'n'a' ',')'s'a'c'i'l'p'e'r' ''''''' 'r'l'l'a' 'n'o' 'e'm'a's' 'e'h't' 's'i' 'h'c'i'h'w'(' 'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't' 'n'o' 'y'l'n'o' 's'd'n'e'p'e'd' 't's'i'l' 'e'h't' 'n'i' 's't'n'e'm'e'l'e' 'f'o' 'r'e'd'r'o' 'l'a'n'i'f' 'e'h't' 't'a'h't' ''''''' 's'w'o'h's' 'n'e'h't' 'e'W' '.'t's'r'i'f' 'd'e'i'l'p'p'a' 's'i' 's'n'o'i't'a'r'e'p'o' 'o'w't' 'e'h't' 'f'o'''''''''''''''''''''' 'e'h't' 'o'f' 'e'n'o' 'h'c'i'h'w' 'd'n'a' ',')'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L''''''''''''''''o'p'm'a'l'(' 'D'I' 'n'o'i't'a'r'e'p'o' 'r'e't'a'e'r'g' 'e'h't' 's'a'h' '$'s'_'o'$' 'd'n'a' '$'r'_'o'$''''#''''t' 'f'o' 'h'c'i'h'w' 'n'o' 'd'e's'a'b' ','s'e's'a'c' 'r'u'o'f' 'h's'i'u'g'n'i't's'i'd' 'e'W'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$''''')'''''}'''''r'''''e'''''t'''''f'''''a'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''^'''''''''''''''''''''''^'''''&'''''k''''' ''''','''''}'''''e'''''r'''''o'''''f'''''e'''''b'''''{'''''m'''''r'''''h'''''t'''''a'''''m''''''''^'''''k'''''('''''$''''' '''''l'''''a'''''v'''''r'''''e'''''t'''''n'''''i''''' '''''n'''''o'''''i'''''t'''''r'''''e'''''s'''''n'''''i''''' '''''e'''''m'''''a'''''s''''' '''''e'''''h'''''t''''' '''''e'''''v'''''a'''''h''''' '''''y'''''e'''''h'''''t''''' '''''h'''''c'''''i'''''h'''''w''''' '''''n'''''i''''' '''''e'''''s'''''a'''''c''''' '''''e'''''h'''''t''''' '''''e'''''z'''''y'''''l'''''a'''''n'''''a''''' '''''y'''''l'''''n'''''o''''' '''''o'''''t''''' '''''d'''''e'''''e'''''n''''' '''''e'''''w''''' '''''o'''''S''''''''''''''A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''''s'''''e'''''r''''' '''''e'''''h'''''t''''' '''''r'''''o'''''F''''' '''''.'''''r'''''e'''''d'''''r'''''o''''' '''''r'''''i'''''e'''''h'''''t''''' '''''f'''''o''''' '''''s'''''s'''''e'''''l'''''d'''''r'''''a'''''g'''''e'''''r''''' '''''t'''''c'''''e'''''f'''''f'''''e''''' '''''e'''''m'''''a'''''s''''' '''''e'''''h'''t' 'e'v'a'h' 'y'e'h't' 'o's' 'd'n'a' ','r'e'h't'o' 'h'c'a'e' 't'c'e'f'f'a' 't'o'n'n'a'c' 's'n'o'i't'a'r'e'p'o' 'e'h't' '}'n'e'e'w't'e'b'-'t'r'e's'n'i':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'b' 'n'e'h't' ','t'n'e'r'e'f'f'i'd' 'e'r'a' 's'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i' 'e'h't' 'f'I' '.'s'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i' 't'n'e'r'e'f'f'i'd' 'e'v'a'h' 'y'e'h't' 'r'o' ','}'l'a'v'r'e't'n'i'-'t'r'e's'n'i':'f'e'd'{'f'e'r''~'n'o'i't'i'n'i'f'e'D' 'n'i' 'd'e'n'i'f'e'd''''d' 's'a' 'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i' 'e'm'a's' 'e'h't' 'e'v'a'h'''''''''''''''' 'e'v'h'a' '$'s'_'o'$' 'd'n'a' '$'r'_'o'$' 'r'e'h't'i'E'n'n''n'.'d'e'i'l'p'p'a' 'e'r'a' '$'s'_'o'$' 'd'n'a' '$'r'_'o'$' 'h'c'i'h'w' 'n'i' 'r'e'd'r'o' 'e'h't' 'n'o' 'd'n'e'p'e'd' 't'o'n' 's'e'o'd' 'e't'a't's' 't'n'''''''''''''''''''''''''e'm'u'c'o'd' 'e'h't' 't'a'h't' 'w'o'h's' 't's'u'm' 'e'w' ','$'H'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'n'o'i't'r'e's'n'i' 't'n'e'r'r'u'c'n'o'c' 'o'w't' 'y'n'a' 'n'e'v'i'G'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'l'p'm'a'x'e' 'r'o'F''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'n'e'm'u'c'o'd' 'y't'p'm'e' 'e'h't' 's'i' 'r'o't's'e'c'n'a' 'n'o'm'm'o'c' 'e'h't' 'o's' 'd'n'a' '$'}''{'' '=' '}'s'p'e'd'{'t'i'h't'a'm''.'s'_'o' 'p'a'c'' '}'s'p'e'd'{'t'i'h't'a'm''.'''''r'_'o'$' 'f'i' '.'e'.'i' ','y'r'o't's'i'h' 'l'a's'u'a'c' 'n'o'm'm'o'c' 'o'n' 'e'v'a'h' '$'s'_'o'$' 'd'n'a' '$'r'_'o'$' 'f'i' 'e's'a'c' 'e'h't' 's'i' 's'i'h't' ','r'a'l'u'c'i't'r'a'p' 'n'I''''i' '.'}'l'i'a't'{'f's't'x'e't''''''' 's'i' '$'}'r'e't'f'a'{'m'r'h't'a'm''^'s'_'k'''''''k''$' 'r'o' '$'}'r'e't'f'a'{'m'r'h't'a'm''^'r'_'k'$' 't'a'h't' 'd'n'a' ','''' '}'d'a'e'h'{'f's't'x'e't'''''''''$''''' 's'i' '$'}'e'r'o'f'e'b'{'m'r'h't'a'm'''''''e'b''^'s'_'k'$' 'r'o' '$'}'e'r'o'f'e'b'{'m'r'h't'a'm''^'r'_'k''''K'$' 't'a'h't' 'e's'a'c' 'e'h't' 'e'b' 'y'a'm' 't''''''' 'f'I''n'n's'''''''l'a' 'd'e'n'i'f'e'd' '$')'}'r'e't'f'a'{'m'r'h't'a'm''^'s'_'k' ','}'e'r'o'f'e'b'{'m'r'h't'a'm''^'s'_'k'('$' 's'y'e'k' 'f'o' 'r'i'a'p' 'e'h't' 's'i' '$'s'_'o'$' 'f'o' 'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i' 'e'h'T' '.'$'s'_'o'$' 'd'n'a' '$'r'_'o'$' 'f'o' 'r'o't's'e'c'n'a' 'n'o'm'm'o'c' 'e'h't' 'n'i' '''$'}'e'r'o'f'e'b'{'m'r'h't'a'm''^''''&'r'_'k'$' 'r'e't'f'a' 'y'l'e't'a'i'd'e'm'm'i' 's'r'a'e'p'p'a' '}'r'e't'f'a'{'m'r'h't'a'm''^'r'_'k'$' 'd'n'a' ','d'e'i'l'p'p'a' 'n'e'e'b' 's'a'h' '$'r'_'o'$' 'n'e'h'w''''a' '$'}'d'i'{'t'i'h't'a'm''.'r'_'o'''''''_'k'$' 'r'e't'f'a' 's'r'a'e'p'p'a' '$'}'r'e't'f'a'{'m'r'h't'a'm''^''''&'r'_'k'$' ','d'e'i'l'p'p'a' 'n'e'e'b' 's'a'h' '$'r'_'o'$' 'n'e'h'w' 'p'a' '$'}'d'i'{'t'i'h't'a'm''.'r'_'o'$' '''''''''''''''''''''''$'}'e'r'o'f'e'b'{'m'r''''i'h't'a'm''^''''&'r'_'k'$' 't'a'h't' 'h'c'u's''''''''''''''''''''''' ''m'r''''''''''''''''$')'}'r'e't'f'a'{'t'i'h't'a'm''^''''&'r'_'k' ','}'e'r'o'f'e'b'{'t'i'h't'a'm''^'r'_'k'('$' 's'y'e'k' 'f'o' 'r'i'a'p' 'e'h't' 's'i' '$'r'_'o'$'''''''h't' 'f'o' '}'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i'{'h'p'm'e'' 'e'h't' ','t's'i'l' 'e'm'a's' 'e'h't' 'o't'n'i' 't'r'e's'n'i' 't'a'h't' '$'s'_'o'$' 'd'n'a' '$'r'_'o'$' 's'n'o'i't'a'r'e'p'o'''''''''''''''''''t'r'e's'n'i' 'o'w't' 'n'e'v'i'G''''T''n'''''''''''''''''}'n'o'i't'i'n'i'f'e'd'{'d'n'e''n'}'l'a'v'r'e't'n'i'-'t'r'e's'n'i':'f'e'd'{'l'e'b'a'l'']''''n'l'a'v'r'e't'n'i' 'n'o'i't'r'e's'n'i'['}'n'o'i't'i'n'i'f'e'd'{'n'i'g'e'b'''n'n''''''''''''''''''''''''''''''''''''''''''.'$'}''}'d'i'{'t'i'h't'a'm''-''''.'j'_'o' ','s't'o'd'' ','}'d'i'{'t'i'h't'a'm''.'1'_'o'{'' 'q'e't'e's'b'u's'' ')'}'s'p'e'd'{'t'i'h't'a'm'.''s'_'o' 'p'u'c'' '}'s'p'e'd'{'t'i'h't'a'm''.'r'_'o'('$''j'_'o' ','s't'o'd'' ','1'_'o' 'e'l'g'n'a'l''''a''$' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'o' 'e'c'n'''''''''''''''''''''''''''''''f'o''''''''''''''''' 's'e'i'f's'i't'a's' 't'a'h't' ' 'x'i'f'e'r'p' 't's'e't'r'o'h's' 'e'h't' 'y'l'e'm'a'n' ',''''''''''h't'''''e'u'q'e's''''''''''''''''''''''''''''''''''''''''''''''$'H'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'f'o' 'x'i'f'e'r'p' 'a' 'g'n'i'y'l'p'p'a' 'm'o'r'f' 'g'n'i't'l'u's'e'r' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 's'a' 'y'l'l'a'm'r'o'f' 'e'r'o'm' 'd'e'n'i'f'e'd' 'e'b' 'n'a'c' 'r'o't's'e'c'n'a' 'n'o'm'm'o'c' 'e'h'T''n'n'a' '$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''1'_'o'$' 'h't'o'b' 's'e'd'e'c'e'r'p' 'y'l'l'a's'u'a'c'''''''''''''''''''' 't'a'h't' 'e't'a't's' 't'n'e'm'u'c'o'd''''l' 'e'h't' 's'i' ''''%'$'2'_'o'$' 'd'n'a' '$'1'_'o'$' 's'n'o'i't'a'r'e'p'o' 'o'w't' 'f'o' '}'r'o't's'e'c'n'a' 'n'o'm'm'o'c'{'h'p'm'e'' 'e'h't' ','$'H'$' 'y'r'o't's'i'h' 'a' 'n'I'n''''''''''''''''''}'n'o'i't'i'n'i'f'e'd'{'d'n'e''n'}'r'o't's'e'c'n'a'-'n'o'm'm'o'c':'f'e'd'{'l'e'b'a'l'']'r'o't's'e'c'n'a' 'n'o'''''''n'a'm'm'o'c'['}'n'o'i't'i'n'i'f'e'd'{'n'i'g'e'b''''e''n'n'''''''''''''''''''''$'1''''''''''''''''s'd'e'e'c'c'u's' '''''''''''''''''''''''''''''''$'2'_'k'$' '_'k'$' 's'd'e'e'c'c'u's' '''''''''''''''e'b' 'n'''o''''''''''''''''''''''''''''''''''''''''''''''''''''''m'h't'-'e'c''''''''''''''''''''''''$'''''1'''''''''''''''''' 'd'e't'r'e's'n'i' ''''''''''''''''''r'e't'f'a' 's'r'a'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a''' ','y'r'o't's'i'h'''''''''''''''e'v'i't'a't'u'm'm'o'c' 's'i''''''''''''''''''''''''''''''''' 'n'o'.''''''i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':'m'e'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'w'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'2'_'k'$' 'd'n'a' '$'1'_'k'$' 'n'e'e'w't'e'b' 'n'o'i't'i's'o'p' 'a' 't'a' 't'r'e's'n'i''''''''''''' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'y'l'n'o' '''''''r'e'd'i's'n'o'c' ','f'o'o'r'p' 's'i'h't' 'f'o' 't's'e'r' 'e'h't' 'r'o'F' ''''''''.'r'e'd'r'o' 'r'i'e'h't' 'f'o' 's's'e'l'd'r'a'g'e'r' 't'c'e'f'f'e' 'e'm'a's' 'e'h't' 'e'v'a'h' 'y'e'h't' 'o's' 'd'n'a' ','r'e'h't'o' 'h'c'a'e' 't'c'e'f'f'a' 't'o'n'n'a'c' 's'n'o'i't'a'r'e'p'o' 'e'h't' '}'n'e'e'w't'e'b'-'t'r'e's'n'i'{'f'e'r''~'a'm'm'e'L' 'y'b' 'n'e'h't' ','$'2'_'k'$' 'd'n'a' '$'1'_'k'$' 'n'e'e'w't'e'b' 't'o'n' 's'i' 't'a'h't' 'n'o'i't'i's'o'p' 'a' 't'a' 's't'r'e's'n'i''''j' 'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'y'n'a' 'f'I' '.'d'e't'a'n'i'g'i'r'o' 't'i' 'e'r'e'h'w' 'a'c'i'l'p'e'r' 'e'h't' 'n'o' '$'2'_'k'$' 'd'n'a' '$'1'_'k'$' 'e'm'o's' 'n'e'e'w't'e'b' 'd'e't'r'e's'n'i' 's'i' '$'}'1'+'n'{'_'o'$' '.'y'r'o't's'i'h' 'a' 'n'i' 's'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'o't' 't'c'e'p's'e'r' 'h't'i'w' 'd'e'r'e'd'r'o'e'r' 'g'n'i'e''''''''''''''''''' 'g'n'i'e'b'b' '$'}'1'+'n'{'_'o'$' 'n'o'i't'a'r'e'p'o' 'e'h't' 'r'e'd'i's'n'o'C''n'n'''''''''''''''}'f'o'o'r'p'{'d'n'e''n'}'f'o'o'r'p'{'n'i'g'e'b''n'n''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'n'i't'c'e'f'f'a' 't'u'o'h't'i'w' 't's'i'l' 'e'm'a's' 'e'h't' 'o't' 's'n'o'i't'a'r'e'p'o' 'n'o'i't'r'e's'n'i' 't'n'e'r'r'u'c'n'o'c' 'o't' 't'c'e'p's'e'r' 'h't'i'w' 'd'e'r'e'd'r'o''a'r'e'p'o' 'n'a' 'n'I'''''''''''''''''''''''''''''''''e'r' 'e'b' 'n'a'c' 'n'o'i't'a'r'e'p'o' 'n'o'i't'r'e's'n'i' 'n'A''n''''''''''''}'a'm'm'e'l'{'d'n'e''n'}'r'e'd'r'o'e'r'-'t'r'e's'n'i':'m'e'l'{'l'e'b'a'l''}'a'm'm'e'l'{'n'i'g'e'b''n'n'''''''''''''''%'%'%'%'%'%'%'%'%'%'%''''''''''''''''''''''''''''%'%'%'%'%'%'%'%'%'%'%'%'%'%'%'%'%'%'%'%'%' '''''''''''''''''''''''e'r'e'h' 's's'e'r'g'o'r'p' 'n'i' ''''''''''''''''p'g' 'n'i'k'r'o'w' 'O'D'O'T' '%'n'n''p'p'a' 't'a'h'''r'''''e'''''v'''''e'''''n''''' '''s'i''''''_'''''k'''''$''''' 's'd'e'e'c'c'u's' 'n'e'g'r'e'v'n'o'c'-'m'''i'''''t'''''''''''''''''h'''''c'''''i'''''h'''w''''''i'''''n'''''i'''''f'''''e'd' 's'i'''''r'e't'f'a''''''''''''''''''''''''''''d'e'r'e'b'm'u'n'n'u'-''''h't' 'd'e'e'n' ''T' ''e'W''''''$'p'_'A'$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e't'''a'''''c'''''i'''''l'''''p'''''e'''''r''''' '''''''''''''''''''''''''''''''''''.'d'e't'a'c'i'l'p'e'r' 's'i' 't'a'h't' 'e't'a't's' 'e'h't' 'f'o' 't'r'a'p' 't'o'n' 'd'n'a' ','a'c'i'l'p'e'r' 'e's''n'o' 'o't' 'l'a'c'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o'f' 'g'n'i't'i'a'w''''''''''''''''''''''''''''''''''i'u'''''''u''r''''g'n'i'''''''''''''''''''''''''''''''''''''d'n'e's'''''''''''''''''''''s'a'c'i'l'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''k'r'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o' 'd'e's'a'b' 's'i' 't'a'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'l'a'''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'm'a'r'g'o'r'p' 'l'a'i't'n'e'u'q'e's' 'h't'i'w' 'r'a'i'l'i'm'a'f' 'e'r'o'm' 'e'r'a' 'o'h'w' 's'r'e'm'm'a'r'g'o'r'p' 'n'o'i't'a'c'i'l'p'p'a' 'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'r'u't'c'u'r't's'a't'a'd' 'e'h't' 'f'o' 'h't'w'o'r'g' 'd'e'd'n'u'o'b'n'u' 't'n'e'v'e'r'p' 'o't' 'r'e'd'r'o' 'n'i' 'd'e'r'i'u'q'e'r' 's'i' ')'l'a'v'o'm'e'r' 'e'n'o't's'b'm'o't'(' 'n'o'i't'c'e'l'l'o'c' 'e'g'a'b'r'a'g' ','r'e'v'o'e'r'o'M' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'k'r'o'w' 'e'r'u't'u'f' 'n'i' 's'e'r'u't'a'e'f' 'g'n'i's's'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'q'$' 'r'o' '$'p'$' 't'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''f''''''''''''''''''''''''''''''' 'y'l'''''''d'e'r'e'd'''y'l'''r'''''o'''''''''''''''r'i''''''n'o' 'd'n'a' ''('''''f'''''i''''''''' 'e',''l'g',''n'a'l''''''''e'l'g'n'a'r'' ''''''''''''''''''''s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'r'i'u'q'e'r' 'e'w'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'l'u'r' '}'*'-'y'l'p'p'A'{'c's't'x'e't'' 'e'h't' 'y'b' 'd'e'n'i'a't'n'i'a'm' 's'i' 't'n'a'i'r'a'v'n'i' 'y't'i'l'a's'u'a'c' 'e'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''q'_'H'$' 'd'n'a' '$'''p'_'H'$' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 'e'c'n'e'u'q'e's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'u's''''''''''''''''''''''''''b'u's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' 's'm'r'e't' 'e'r'o'm' 'e'm'o's' 'e'n'i'f'e'd' ''''''''''''''''''''''''''''''''.'s'a'm'm'e'l' 'y'r'a'n'i'm'i'l'e'r'p' 'e'm'o's' 'e'v'o'r'p' 't's'r'i'f' 't's'u'm' 'e'w' ','t'n'e'm'n'g'i's's'a' 'd'n'a' 'n'o'i't'e'l'e'd' ','n'o'i't'r'e's'n'i' 'f'o' 'y't'i'v'i't'a't'u'm'm'o'c' 'e'h't' 'e'v'o'r'p' 'n'a'c' 'e'w' 'e'r'o'f'e'B'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'e't'u'm'm'o'c'-'n'g'i's's'a':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'n'i' 't'n'e'm'n'g'i's's'a' 'd'n'a' ','''''''}'e't'u'm'm'o'c'-'e't'e'l'e'd':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'n'i' 's'n'o'i't'e'l'e'd' ','}'e't'u'm'm'o'c'-'t'r'e's'n'i':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'n'i' 's'n'o'i't'r'e's'n'i' ':'$'}'1'+'n'{'_'o'$' 'n'i' 'n'o'i't'a't'u'm' 'f'o' 'e'p'y't' 'e'h't' 'n'o' 'g'n'i'''''''n'o'd'n'e'p'e'd' 'e's'a'c'-'y'b'-'e's'a'c' 'y't'i'v'i't'a't'u'm'm'o'c' 's'i'h't' 'e't'a'r't's'n'o'm'e'd' 'e'W' '.'$'}'1'+'n'{'_'o'''''''-'O'$' 'o't' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'l'l'a' 'o't' 't'c'e'p's'e'r' 'h't'i'w' '.'e'.'i' ','x'i'f'f'u's' 'e'h't' 'n'i' 's'n'o'i't'a'r'e'p'o' 'l'l'a' 'o't' 't'c'e'p's'e'r' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c' 's'i' '$'}'1'+'n'{'_'o'$' 't'a'h't' 'g'n'i'w'o'h's' 'y'b' 's'i'h't' 'o'd' 'e'W' '.'$'q'_''''-'H'$' 'r'o' '$'''''''$'R'p'_'H'$' 'o't''''o'n'i' 'd'e't'r'e's'n'i' 's'i' 't'i' 'r'e'h't'e'h'w' 'f'o' 's's'e'l'd'r'a'g'e'r' 'd'n'a' ','d'e't'r'e's'n'i' 's'i' '$'}'1'+'n'{'_'o'$' 'h'c'i'h'w' 't'a' 'n'o'i't'i's'o'p' 'e'h't' 'f'o' 's's'e'l'd'r'a'g'e'r' ','e'm'a's' 'e'h't' 's'i' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 'n'o' 't'c'e'f'f'e' 'e'h't' 't'a'h't' 'w'o'h's' 'e'W'n'n''''''''''''''''''''''.'x'i'f'f'u's' 'e'h't' 'n'i'h't'i'w' 't'n'i'o'p' 'y'n'a' 't'a' 'd'e't'r'e's'n'i' 'e'b' 'd'l'u'o'c' 't'i' 'r'o' ';'x'i'f'f'u's' 'e'h't' 'f'o' 'd'n'e' 'e'h't' 't'a' 's'i' 'n'o'i't'i's'o'p' 't's'e't'a'l' 'e'h't' ';'x'i'f'f'u's' 'e'h't' 'd'n'a' 'x'i'f'e'r'p' 'e'h't' 'n'e'e'w't'e'b' 's'i' 'y'r'o't's'i'h' 'e'h't' 'o't'n'i' 'd'e't'r'e's'n'i' 'e'b' 'n'a'c' '$'}'1'+'n'{'_'o'$' 'e'r'e'h'w' 'n'o'i't'i's'o'p' 't's'e'i'l'r'a'e' 'e'h'T' '.'$'e'l'g'n'a'r'' 'n'_'o' ','s't'o'd'' ','}'1'+'j'{'_'o' 'e'l'g'n'a'l''$' 'e'c'n'e'u'q'e's' 'g'n'i'n'i'a'm'e'r' 'e'h't' 's'i' 'h'c'i'h'w' ','x'i'f'e'r'p' 'a' 'd'n'a' ','$'}''}'d'i'{'t'i'h't'a'm''.'j'_'o' ','s't'o'd'' ','}'d'i'{'t'i'h't'a'm''.'1'_'o'{'' 'q'e't'e's'b'u's'' '}'s'p'e'd'{'t'i'h't'a'm''.'}'1'+'n'{'_'o'$' 't'a'h't' 'h'c'u's' '$'e'l'g'n'a'r'' 'j'_'o' ','s't'o'd'' ','1'_'o' 'e'l'g'n'a'l''$' 'e'c'n'e'u'q'e's'b'u's' 'l'a'm'i'n'i'm' 'e'h't' 's'i' 'h'c'i'h'w' ','x'i'f'e'r'p' 'a' 'o't'n'i' 't'i'l'p's' 'e'b' 'n'a'c' 'y'r'o't's'i'h' 'h'c'a'E' '.'$'q'_'H'$' 'd'n'a' '$'p'_'H'$' 'o't'n'i' '$'}'1'+'n'{'_'o'$' 'f'o' 'n'o'i't'r'e's'n'i' 'e'h't' 'e'n'i'm'a'x'e' 'e'w' ','p'e't's' 'n'o'i't'c'u'd'n'i' 'e'h't' 'e'v'o'r'p' 'o't' 'r'e'd'r'o' 'n'I'n'n'''''''''''''''''''''''''.'e't'a't's' 't'n'e'm'u'c'o'd''''''''''''''''''' 'l'a'n'i'f' 'e'm'a's' 'e'h't' 'n'i' 's't'l'u's'e'r' 'r'e'd'r'o' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'i'y'l'p'p'a' ','y'a'w' 's'i'h't' 'd'e't'c'u'r't's'n'o'c' '$'''q'_'H'$' 'd'n'a' '$'''p'_'H'$' 's'e'i'r'o't's'i'h' 'e'h't' 'l'l'a' 'r'o'f' 't'a'h't' 'w'o'h's' 'n'e'h't' 't's'u'm' 'e'W' '.'y'l'e'v'i't'c'e'p's'e'r' '$'q'_'H''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''$' 'r'o' '$'p'_'H'$' 'r'e'h't'i'e' 'n'i' 'n'o'i't'i's'o'p' 'y'd'a'e'r' 'y'l'l'a's'u'a'c' 'y'n'a' 't'a'''''''''''''''''''''' 'y'n'a' 'n'i' '$'}'1'+'n'{'_'o'$' 'n'o'i't'a'r'e'p'o' 'w'e'n' 'a' 'g'n'i't'r'e's'n'i' 'y'b' '$'1'+'n'$' 'h't'g'n'e'l' 'f'o' 's'e'i'r'o't's'i'h' 'w'e'n' 't'c'u'r't's'n'o'c' 'n'a'c' 'e'w' ','$'q'_'''''''Q'-'H'$' 'g'n'i'y'l'p'p'a' 's'a' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'm'a's' 'e'h't' 'n'i' 's't'l'u's'e'r' '$'p'_'H'$' 'g'n'i'y'l'p'p'a' 't'a'h't' 'h'c'u's' 'd'n'a' ','$'p''''q'_'H'$' 'f'o' 'n'o'i't'a't'u'm'r'e'p' 'a' 's'i' '$'''' 'q'_'H'$' 'd'n'a' '$'e'l'g'n'a'r'' 'n'_'o' ','s't'o'd'' ','1'_'o' 'e'l'g'n'a'l'' '=' 'p'_'H'$' 't'a'h't' 'h'c'u's' ','$'n'$' 'h't'g'n'e'l' 'f'o' '$'q'_'H'$' 'd'n'a' '$'p'_'H'$' 's'e'i'r'o't's'i'h' 'n'e'v'i'G' '}':'p'e't's' 'n'o'i't'c'u'd'n'I'{'h'p'm'e''n'n'.'e't'a't's' 'e'm'a's' 'e'h't' 'n'i' 'n'o'i't'i'n'i'f'e'd' 'y'b' 'e'r'a' ''''''''''r' 'a's'n'o'i't'a'r'e'p'o' 'y'n'a' 'd'e't'u'c'e'x'e' 't'o'n' 'e'v'a'h' 't'a'h't' 's'a'c'i'l'p'e'r' 'o'w't' 'y'n'a' 'o's' 'd'n'a' ','e'm'a's' 'e'h't' 's'y'a'w'l'a' 's'i' 't'n'e'm'u'c'o'd' 'y't'p'm'e' 'e'h'T' '.'e't'a't's' 't'n'e'm'u'c'o'd' 'y't'p'm'e' 'e'h't' 's'e'b'i'r'c's'e'd' '$'0'='n'$' 'h't'i'w' 'y'r'o't's'i'h' 'y't'p'm'e' 'n''''''''''''''''''''''r'o't's'i'h' 'A' '}':'e's'a'c' 'e's'a'B'{'h'p'm'e''n'n'.'$'n'$' 'y'r'o't's'i'h' 'f'o' 'h't'g'n'e'l' 'e'h't''''''''''''''''''''''''''''s'e'i'r'o't's'i'h' 'r'e'v'o' 'n'o'i't'c'u'd'n'i' 'y'b' 'm'e'r'o'e'h't' 'e'h't' 'e'v'o'r'p' 'n'a'c' 'e'W'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'''''''}'' ''i' '<' 'j' 'e'l''''''' 'e'' '1' 'd'i'm'' '}'d'i'{'t'i'h't'a'm''.'j'_'o' '{' 'q'e't'e's'b'u's'''''''''''''''''''''''''''''''''e'r'i'u'q'e'r' 'e'w' ''' '}'s'p'e'd'{'t'i'h't'a'm''.'i'_'o''''''''''''''''''''''t'i'h't'a'm''$' ','$'n' 'e'l'' 'i' 'e'l''''e'' '1'$' 'h't'i'w' '$'i'$''''#' 'l'l'a' 'r'o'f' '.'e'.'i' ','y't'i'l'a's'u'a'c' 'h't'i'w' 't'n'e't's'i's'n'o'c' 'e'b' 't's'u'm' 's'e'i'r'o't's'i'h' 'h't'o'B' '''.'''''$'''''p'''''_'''''H'''''$''''' '''''f'''''o''''' '''''n'''''o'''''i'''''t'''''a'''''t'''''u'''''m'''''r'''''e'''''p''''' '''''a''''' '''''s'''''i''''' '''''h'''''c'''''i'''''h'''''w''''' ''''','''''$'q'_'H'$' 'm'o'r'f' 'd'e'v'i'r'e'd' 's'i' '$'q'$' 't'a' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' ','e's'i'w'''' 'e'k'i'L' '.'r'e'd'r'o' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'i'''' 'y'l'p'p'a' 'd'n'a' 'e't'a't's' 'y't''''s'p'm'e' 'e'h't' 'n'i' 'g'n'i't'r'a't's' 'y'b' '$'p'_'H'$' 'm'o'r'f' 'd'e'v'i'r'e'd' 's'i' '$'p'$' 't'a' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 'd'n'a' ','$'n'_'o' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'}'a'm'm'e'l'{'d'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'r'e'h't'o' 'o't' 't'c'e'p's'e'r' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c' 's'i' 't'n'e'm'n'g'i's's'A'n'}'e't'u'm'm'o'c'-'n'g'i's's'a':'m'e'l'{'l'e'b'a'l''}'a'm'm'e'l'{'n'i'g'e'b''n'n'}'a'm'm'e'l'{'d'n'e''n'.'s'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'r'e'h't'o' 'o't' 't'c'e'p's'e'r' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c' 's'i' 'n'o'i't'e'l'e'D'''''''''''''''''''''''''e'r'r'u'c'n'o'C'n'}'e't'u'm'm'o'c'-'e't'e'l'e'd':'m'e'l'{'l'e'b'a'l''}'a'm'm'e'l'''''''m'e'{'n'i'g'e'b''n''s't'o'd'' '1'_'o' '=' 'p'_'H'$' 's'n'o'i't'a'r'e'p'o' 'f'o' 'e'c'n'e'u'q'e's' 'a' 's'i' '$'p'$' 'a'c'i'l'p'e'r' 't'a'''''''''''''''' 'a' 's'i' 'y'r'o't's'i'h' 'e'h'T'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '$'p'_'H'$' 'y'r'o't's'i'h' 'e'h't' 'm'o'r'f' 'd'e'v'i'r''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'e'r'i't'n'e' 'd'e'n'i'm'r'e't'e'd' 's'i''''''''''''' 'n'a'c' '$'p'$' 'a'c'i'l'p'e'r' 't'a''''''''''''''''''' 'e't'a't's' 't'n'e'm'u'c'o'd' 'l''''''' '.'a'n'i'f' 'e'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'a'h't' 'e'v'o'r'p' 'n'a'c' 'e'W'n'n'''''''')''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e'd'r'o' 't'n'e'r'e'f'f'i'd' 'a' 'n'i' 'y'l'l'a'i't'n'e't'o'p' 't'u'b' ','s'n'o'i't'a'r'e'p'o' 'f'o' 't'e's' 'e'm'a's' 'e'h't' 'n'i'a't'n'o'c' '$'q'_'H'$' 'd'n'a' '$'p'_'H'$' 'n'e'h't' '$')'}'s'p'o'{'f's'h't'a'm''('q'_'A' '=' ')'}'s'p'o'{'f's'h't'a'm''(''''''''{'p'_'A'$' 'f'i' ','s'u'h'T' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'a' '$')'}'''')'s'p'o'{'f's'h't'a'm''('q'_'A''''''''''''''''n'i''''''''''''n'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 'o't' 'd'e'i'l'p'p'a' 's'a'w' 't'i' 'f'i' 'y'l'n'o' 'd'n'a' ''''f'f'i' '$')'}'s'p'o'{'f's'h't'a'm''('q'_'A'$' 'r'o' '$'''' ')'}'s'p'o'{'f's'h't'a'm''('p'_'A'$' 'o't' 'd'e'd'd'a' 's'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'i'' '}'p'o'{'t'i'h't'a'm''$' ','$'}'p'o'{'t'i'h't'a'm''$' 'n'o'i't'a'r'e'p'o' 'y'n'a' 'r'o'f'''''''''' 'n'a' 't'a'h't' 't'n'a'i'r'a'v' 'e'h't' 'n'i'a't'n'i'a'm' 'y'e'h't' 'd'n'a' ',''$' 'd'n'a' '$')'}'s'p'o'{'f's'h't'a'm''('p'_'A'$' 'y'f'i'd'o'm' 't'a'h't' 'd'n'a' 's'n'o'i't'a'r'e'p'o' 'y'l'p'p'a' 't'a'h't' 's'e'l'u'r' 'y'l'n'o' 'e'h'T' ''''''''''''''''''''''''''''''''''''''''''''''''}'e't'o'm'e'R'-'y'l'p'p'A'{'c's't'x'e't'' 'd'n'a' '}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'}'y'r'o't's'i'h':'f'e'd'{'f'e'r''~'n'o'i't'i'n'i'f'e'D' 'e'e's'(' ''' '.'y'l'e'v'i't'c'e'p's'e'r' '$'q'$' 'd'n'a' '$'p'$' 't'a' '$'q'_'H'$' 'd'n'a' '$'p'_'H'$' 's'e'i''''''' 'y'r'o't's'i'h' 'e'h't' 'r'e'd'i's'n'o'C'n'''''''''''''}'f'o'o'r'p'{'d'n'e''n'}'f'o'o'r'p'{'n'i'g'e'b''n'n'}'m'e'r'o'e'h't'{'d'n'e''''b''n'.'e't'a't's' 't'n'e'm'u'c'o'd' 'e'm'a's' 'e'h't' 'e'v'a'h' '$'q'$' 'd'n'a' '$''''4'p'$' 'n'e'h't' ','$')'}'s'p'o'{'f's'h't'a'm''('q'_'A' '=' ')'}'s'p'o'{'f's'h't'a'm''('p'_'A'$' 'f'i' ','n'o'i't'u'c'e'x'e' 'd'i'l'a'v' 'a' 'n'i' 'd'e't'a'p'i'c'i't'r'a'p' 't'a'h't' '$'q'$' 'd'n'a' '$'p'$' 's'a'c'i'l'p'e'r' 'o'w't' 'y'n'a' 'r'o'F'n'}'e'c'n'e'g'r'e'v'n'o'c':'m'h't'{'l'e'b'a'l''}'m'e'r'o'e'h't'{'n'i'g'e'b'''''''m''''' '''''e'''''s'''''e'''''h'''''t''''' '''''s'''''s'''''e'''''''''''''''''''''''''''''''''''e'''''g'''''a'''''p'''''r'''''a'''''e'''''l'''''c''''''''n''''''''r'''''d'''''d'''''a''''' '''''o'''''t''''' '''''n'''''a'''''l'''''p''''' '''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'N'O'S'J'''''''''''.'s't'n'e'''''''''''''''''''''''''']'e'c'n'e'd'e'c'e'r'p' 't'n'e'm'e'l'e' 't's'i'l'['m''''''''''''''''''''''''''''''''''''''''''''''''''''n''''''''''''''''''''t's'i'l' 'd'e'r'e'd'r'o' 'e'h't' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''$'''''n''''' '''''<''' 'i''''''''''''''''n'o'i't'''''''n'o'i'n'i'f'e'd'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'd'e'c'e'r'p'''''''''''''''''}'r'e'd'r'o''''''''''e'r'p'-'t's'i'l':'m'e'l'{'l'e'b'a'l'''''''''''''''''''''''''''''''''''.'t's'i'l' 'e'h't' 'r'e'v'o' 'e't'a'r'e't'i' 's'e'l'u''n'r' '}'t'x'e'N'{'c's't'x'e't'' 'e'h't' 'h'c'i'h'w' 'n'i' 'r'e'd'r'o' 'e'h't' 'o't' 's'd'n'o'p's'e'r'r'o'c' '}'g'n'i'd'e'c'e'r'p'{'h'p'm'e''''''''''''''''''''''s'r'e't'n'i'o'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'x'e't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'v'r'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't's'i'l' 'e'h't' 'n'i' '$'2'_'k'$' 's'e'd'e'c'e'r'p' '$'}'w'e'n'{'t'i'h't'a'm''_'k'$' 'd'n'a' 't's'i'l' 'e'h't' 'n'i' '}'w'e'n'{'t'i'h't'a'm''_'k'$' 's'e'd'e'c'e'r'p' '$'1'_''''1'k'$'''''.'t's'i'l' 'e'm''''''''''''''''''''''''''}'n'e'e'w't'e'b'-'t'r'e's'n'i':'m'e'l'{'l'e'b'a'l'''a's' 'e'h't' 'o'''' 't'n'i' 's't'n'e'm'e'l'e' 'w'e'n' 't'r'e's'n'i' 'y'l't'n'e'r'r'u'c'n'o'c' 's'a'c'i'l'p'e'r' 'l'a'r'e'v'e's' 'n'e'h'w' 's'n'e'p'p'a'h' 't'a'h'w' 'r'e'd'i's'n'o'c' 'w'o'n' 'e'W' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''.'r'e'i'f'i't'n'e'd'i' 'n'o'i't'a'r'e'p'o' 'n'a' 'r'o' '}'l'i'a't'{'f''''c's't'x'e't'' 'r'e'h't'i'e' 's'i' '$'2'_'k'$' 'd'n'a' ','r'e'i'f'i't'n'e'd'i' 'n'o'i't'a'r'e'p'o' 'n'a' 'r'o' '}'d'a'e'h'{'f's't'x'e't'' 'r'e'h't'i'e' 's'i' '$'1'_'k'$' 't'a'h't' 'e'r'u's'n'e' 's'n'o'i't'a'r'e'p'o' 't's'i'l' 'g'n'i't'a'r'e'n'e'g' 'r'o'f' 's'e'l'u'r' 'e'h'T'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$''''n'n''1'_'k'$' 's'e'd'e'c'e'r'p' 't'a'h't' 'n'o'i't'i's'o'p' 'a' 't'a' '$'}'w'e'n'{'t'i'h't'a'm''_'k'$' 't'r'e's'n'i' 'r'e'v'e'n' 'd'n'a' '$'1'_'k'$' 't'a' 't's'i'l' 'e'h't' '''''t'x'e't'''''''''''''h't'a'm'''g'''''n'''i't'a'r'e't'i' 't'r'a't's' 's'e'l'u'r' 'e'h't' 'o's' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'x'e't'''''''''''''''''''''''''''''''''''''''''''''''''''''h't'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'2'_'k'$''''''''''''''''''''''''''''''''''''''''a'c'i'l'p'e'r'''''''''''''''''''''']'r'o'''''''r']'t's'e'c'n'a' 'n'o'm'm'o'c'['''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'i' 'r'o't's'e'c'n'a' 'n'o'm'm'o'c' 'e'h't' ','s'd'r'o'w' 'r'e'h't'o' 'n'I''''''''''''''''''''s'a'c'i'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'}'2','1'{'_'}'p'o'{'t'i'h't'a'm''$' 'd'n'a' 'r'o't's'e'c'n'a' 'n'o'm'm'o'c' 'e'h't' 'n'e'e'w't'e'b' 's'n'o'i't'a'r'e'p'o' 'f'o' 'r'e'b'm'u'n' 'y'n'a' 'e'b' 'y'n'a'm' 'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{'t'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'a'h't' 'w'o'h's' 'o't' 'd'e'e'n' 'e'W' '.'$'}'r'e't'f'a'{'t'i'h't'a'm''^'2'_'k' '=' '}'r'e't'f'a'{'t'i'h't'a'm''^'1'_'k' '=' '}''h't'a'm''''''r'e't'f'a''^'k'$' 'd'n'a' '$'}'e'r'o'f'e'b'{'t'i'h't'a'm''^'2'_'k' '=' '}'e'r'o'f'e'b'{'t'i'h't'a'm''^'1'_'k' '=' '}'e'r'o'f'e'b'{'t'i'h't'a'm''^'k'$' 'f'o' 'e's'a'c' 'e'h't' 'r'e'd'i's'n'o'c' ','f'o'o'r'p' 's'i'h't' 'f'o' 't's'e'r' 'e'h't' 'r'o'F'n'n'''.'s'e'g'n'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r' 'e'v'i't'c'e'p's'e'r' 'r'i'e'h't' 'f'o' 'e'd'i's't'u'o' 't's'i'l' 'e'h't' 'f'o' 's't'r'a'p' 't'c'e'f'f'a' 't'o'n' 'o'd' 'y'e'h't' '}'n'e'e'w't'e'b'-'t'r'e's'n'i':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'b' 'd'n'a' ','t's'i'l' 'e'h't' 'f'o' 's't'r'a'p' 't'n'e'r'e'f'f'i'd' 't'c'e'f'f'a' 'y'e'h't' 's'a' ','e'v'i't'a't'u'm'm'o'c' 'y'l'l'a'i'v'i'r't' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'o'w't' 'e'h't' ','e's'a'c' 'r'e't't'a'l' 'e'h't' 'n'I' '.')'s't'n'e'm'e'l'e' 't's'i'l' 'f'o' 's'l'a'v'r'e't'n'i' 't'n'i'o'j's'i'd' 'o't'n'i' 'g'n'i't'r'e's'n'i' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'e'h't' '.'e'.'i'(' '$'}'r'e't'f'a'{'t'i'h't'a'm''^'2'_'k' '='t'o'n'' '}'r'e't'f'a'{'t'i'h't'a'm''^'1'_'k' 'e'g'd'e'w'' '}'e'r'o'f'e'b'{'t'i'h't'a'm''^'2'_''''''k' '='t'o'n'' '}'e'r'o'f'e'b'{'t'i'h't'a'm''^''''&''''&'2'_'k'$' 'r'o' ',')'s't'n'e'm'e'l'e' 't's'i'l' 'f'o' 'l'a'v'r'e't'n'i' 'e'm'a's' 'e'h't' 'o't'n'i' 'g'n'i't'r'e's'n'i' 'e'r'a' '$'2'_'''''''_')'}'p'o'{'t'i'h't'a'm''$' 'd'n'a' '$'1'_'}'p'o'{'t'i'h't'a'm''$' '.'e'.'i'(' '$'}'r'e't'''''''''''''r'e't'g'f'a'{'t'i'h't'a'm''^'2'_'k' '=' '}'r'e't'f'a'{'t'i'h't'a'm''^'1'_'k' 'e'g'd'e'w''''v'' '}'e'r'o'f'e'b'{'t'i'h't'a'm''^'2'_'k' '=' '}'e'r'o'f'e'b'{'t'i'h't'a'm''^'1'_'k'$''r'e'h'T' 'p'e'r' '''n'n'}'n'o'i'''''t'''''i'''''''''''''''''''''''''''''$'}'c'n'a'''''''''''''''''}''''''''''''''''''''''''''$'}'e'r'o'f'e'b'{'t''''''''''''''''''''''$'}'c'n'a'{'t'i'h't'a'm''_'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'r'e'h't'i'e' ','}'n'e'e'w't'e'b'-'t'r'e's'n'i':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'B'n'n'.'y'l'e'v'i't'c'e'p's'e'r' '$'2'_'}'p'o'{'t'i'h't'a'm''$' 'd'n'a' '$'1'_'}''''_'p'o'{'t'i'h't'a'm''$' 'f'o' 'n'o'i't'i's'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' 'y'b' 'd'e'd'e'c'e'r'p' 'y'l'e's'o'l'c' 't's'o'm' '$'}'c'n'a'{'t'i'h't'a'm''_'A'$' 'n'i' 's't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'e'b' '$'}'r'e't'f'a'{'t'i'h't'a'm''^'2'_'k'$' 'd'n'a' '$'}'r'e't'f'a'{'t'i'h't'a'm''^''''&'1'_'k'$' 't'e'l' 'd'n'a' ','y'l'e'v'i't'c'e'p's'e'r' '$'2'_'''''''2')'}'p'o'{'t'i'h't'a'm''$' 'd'n'a' '$'1'_'}'p'o'{'t'i'h't'a'm''$' 'f'o' 'n'o'i't'i's'o''''''''''i's'i'p' 'n'o'i't'r'e's'n'i' 'e'h't' ''''A'$' 'n'i' 's'i'h't'a'm'''''&'^'2'_'k'$' 'd'n'a' ''e'r'o'f'e'b''''b'{'t'i'h't'a'm''^'{'t'i'h't'a'm''_'''''A'$'''''''$'#' 'r'o't's'e'c'n'a''n'''''i'''''f'''''e'''''d'''''{'''d'n'e''n'.'''''''''''''''''''''''''''''''''a'c'i'l'p'e'r''''''''''''''''''''''''''''''''''''''''''''''''''y'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'g'r'e'v'i'd' 's'e't'a't's' 't'n'e'm'u'''''''''''''''' 'n'o'm'm'o'c' 'a' 'h't'i'w' 'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'd'e'c'e'r'p' 'y'l'e's'o'l'c' 't's'o'm' 't'a'h't' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'e'b' '$'1'_'k'$' 't'e'L'o'd' 'e'h't' 'h'c'i'h'w' 'r'e't'f'a' ','s'n'o'i't'a'r'e'p'o' 'h't'o'b' 's'e'd'e'c'e'r'p' 'y'l'l'a's'u'a'c' 't'a'h't' 'e't'a't's' 't'n'e'm'u'c'o'd' 't'n'e'c'e'r' 't's'o'm' 'e'h't' '.'e'.'i' ','$'}'s'p'e'd'{'t'i'h't'a'm''.'2'_'}'p'o'{'t'i'h't'a'm'' 'p'u'c'' '}'s'p'e'd'{'t'i'h't'a'm''.'1'_'}'p'o'{'t'i'h't'a'm''$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'l'l'a' 'g'n'i'y'l'p'p'a' 'm'o'r'f' 'g'n'i't'l'u's'e'r' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 's'i' '}'r'o't's'e'c'n'a' 'n'o'm'm'o'c'{'h'p'm'e'' 'e'h't' ','$'2'_'}'p'o'{'t'i'h't'a'm''$' 'd'n'a' '$'1'_'}'p'o'{'t'i'h't'a'm''$' 's'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'o'w't' 'r'o'F'n''''''''''''''''''}'n'o'i't'i'n'i'f'e'd'{'d'n'e''n'}'r'o't's'e'c'n'a'-'n'o''''a'm'm'o'c':'f'e'd'{'l'e'b'a'l''}'n'o'i't'i'n'i'f'e'd'{'n'i'g'e'b''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'q':''''''''''''''''''''''''''''''''''''''''''''''''''' '.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''$''''' 'd'n'a' '$'1'_'}'p'o'{'t'i'h't'a'm''$' 's'n'o'i't'a'r'e'p'o' 'o'w'T'n''''''''''''''''''}'n'o'i't'i'n'i'f'e'd'{'d'n'e''n'}'t'n'e'r'r'u'c'n'o'c':'f'e'd'{'l'e'b'a'l''}'n'o'i't'i'n'i'f'e'd'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'v'i't'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'r'r'u'c'n'''''''''''''''''''''''''''''''''''''''''''' '}'s'p'e'd'{'t'i'h't'a'm''.'1'_'}''''_'p'o'{'t'i'h't'a'm''$' '.'e'.'i' ',''''''''''''''''''''''''''''''''''''''''''''s'n'o'i't'a'r'e'p'o' 'n'o'i't'r'e's'n'i' 'e'v'i't'a't'u'm'm'o'c' 'o'w't' 'e'b' '$'2'_'}'p'o'{'t'i'h't'a'm''$' 'd'n'a' '$'1'_'}'p'o'{'t'i'h't'a'm''$' 't'e'L'n'''''''''''''}'f'o'o'r'p'{'d'n'e''n'}'f'o'o'r'p'{'n'i'g'e'b''n'n't'u'm'm'o'c' 'e'r'a' 't's'i'l' 'e'm'a's' 'e'h't' 'o't'n'i' 's'n'o'i't'r'e's'n'i' 't'n'e'r'r'u'c'n'o'C''n''''''''''''}'a'm'm'e'l'{'d'n'e''n'}'e't'u'm'm'o'c'-'t'r'e's'n'i':'m'e'l'{'l'e'b'a'l''}'a'm'm'e'l'{'n'i'g'e'b''n'n' 's'e'd'e'c'e'r'p' 't'a'h't' 'n'o'i't'i's'o'p' 't's'i'l''''p' 'a' 't'a' '$'}'w'e'n'{'t'i'h't'a'm''_'k'$' 't'r'e's'n'i' 's'y'a'w'l'a' 's'u'h't' 'd'n'a' ','$'2'_'k'$' 't's'a'p' 'e't'a'r'e't'i' 'r'e'v'e'n' 's'u'h't' 's'e'l'u'r' '$'}'2','1'{'_'}'t'r'e's'n'I'{'c's't'x'e't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h't'a'm'''''''''''''h't'a'm''$' 'e'h'T' '.'t's'e't'a'l' 'e'h't' 't'a' '$'2'_'k'='}'t'x'e'n'{'t'i'h't'a'm''$' 'h't'i'w' 'y'l'p'p'a' 'l'l'i'w' '$'1'_'}'t'r'e's'n'I'{'c's't'x'e't''$' 'o's' 'd'n'a' ','$'}'l'i'a't'{'f's'h't'a'm'' '=' '2'_'k' 'e'e'v'' '}'w'e'n'{'t'i'h't'a'm''_'k' '<' '2'_'k'$' 't'a'h't' 'w'o'n'k' 'e'w' ','r'e'v'e'w'o'H' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'}'w'e'n'{'t'i'h't'a'm''_'k'$' 'n'a'h't' 'r'e't'a'e'r'g' 's'i' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'e's'o'h'w' 's't'n'e'm'e'l'e' 't's'i'l' 'y'n'a' 'r'e'v'o' 's'p'i'k's' '$'2'_'}'t'r'e's'n'I'{'c's't'x'e't''$' ','r'a'l'u'c'i't'r'a'p' 'n'I' '.'y'l'p'p'a' 'y'a'm' '$'2'_'}'t'r'e's'n'I'{'c's't'x'e't''$''''' 'r'o' '$'1'_'}'t'r'e's'n'I'{'c's't'x'e't'''''''''''''h't'a'm''$' 'r'e'h't'i'e' 's'u'h't' 'd'n'a' ','$'}'w'e'n'{'t'i'h't'a'm''_'k'$' 'n'a'h't' 's's'e'l' 'r'o' 'n'a'h't' 'r'e't'a'e'r'g' 'e'b' 'y'a'm' 'D'I' 'n'o'i't'a'r'e'p'o' 'r'i'e'h't' ','$'2'_'k'$' 'd'n'a' '$'1'_'k'$' 'n'e'e'w't'e'b' 'd'e'r'r'u'c'c'o' 's'n'o'i't'r'e's'n'i' 't'n'e'r'r'u'c'n'o'c' 'r'e'h't'o' 'f'I' '.'$')'1'_'k' ','e'l'g'n'a'r''s't'o'd''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm''$' 's'i' 'n'o'i't'a'r'e'p'o' 'e'h't' 'f'o' 'r'o's'r'u'c' 'e'h'T''''n''''$' ''''''''''''''''''''''''''''''''''''''''''''''''''''.')'y't'i'l'a's'u'a'c' 'd'n'a' '}'s'e'd'e'c'e'r'p'-'t's'i'l':'m'e'l'{'f'e'r''~'a'm'm'e'L' 'y'b'(' 'a'c'i'l'p'e'r'''''''' 't'a'h't' 'n'o' '$'2'_'k'$' 's'e'd'e'c'e'r'p' '$'1'_'k'$'''''''''''''L' 'y'b' ','$'}'2','1'{'_'}'t'r'e's'n'I'{'c's't'x'e't''$' 'd'n'a' '}'e't'o'm'e'R'-'y'l'p'p'A'{'c's't'x'e't'' 'g'n'i's'u' ''''e's'a'c'i'l'p'e'r' 'r'e'h't'o' 'n'o' 'd'e'i'l'p'p'a' 's'i' 'n'o'i't'a'r'e'p'o' 'n'o'i't'r'e's'n'i' 'e'h't' 'n'e'h'W'n'n'.'$'}'l'i'a't'{'f's'h't'a'm'' '=' '2'_'k'$' 'r'o' ','s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'r'o'f' '$'<'$' 'n'o'i't'a'l'e'r' 'g'n'i'r'e'd'r'o' 'e'h't' 'r'e'd'n'u' '$'}'w'e'n'{'t'i'h't'a'm''_'k' '<' '2'_'k'$' 'r'e'h't'i'e' ','''' 's'u'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'i'l''''''''''T'n'n'p'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'}'l'i'a't'{'f's't'x'e't'' 'e'b' 't's'u'm' 't'i' ','r'e'i'f'i't'n'e'd'i' 'n'o'i't'a'r'e'p'o' 'n'a' 't'o'n' 's'i' '$'2'_'k'$' 'f'I' '''''''''''''''''''''''''''''''''''''''''''''''''''''''o'p' 'r'e'h't'o' 'y'l'n'o' 'e'h'T'''''''''''''''','s'u'h'T' '.'''' 'n'o'i't'r'e's'n'i' 'n'a' 'g'n'i'y'l'p'p'a' 'n'e'h'w' '$')'}'s'p'o'{'f's'h't'a'm''('p'_''''-'A'$' 'o't' 's'D'I' 'n'o'i't'a'r'e'p'o' 'd'd'a' '}'e't'o'm'e'R'-''''_'y'l'p'p'A'{'c's't'x'e't'' 'd'n'a' '}'l'a'c'o'L'-''''_'y'l'p'p'A'{'c's't'x'e't'' 'h't'o'b' 'e'c'n'i's' ','$')'}'s'p'o'{'f's'h't'a'm''('p'_'A' 'n'i'''''''n'o'' '2'_'k'$' 'e'v'a'h' 't's'u'm' 'e'w' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'i'f'i't'n'e'd'i' 'n'o'i't'a'r'e'p'o' 'n'a' 's'i' '$'2'_'k'$' 'f'I' '.'$')'}'s'p'o'{'f's'h't'a'm''('p'_''''-'A'''''$' 'n'i' 'D'I' 'n'o'i't'a'r'e'p'o' 'g'n'i't's'i'x'e' 'y'n'a' 'f'o' 'r'e't'n'u'o'c' 'e'h't' 'n'a'h't' 'r'e't'a'e'r'g' 's'i' 't'a'h't' '$'}'r't'c'{'t'i'h't'a'm''$''''' 'e'u'l'a'v' 'r'e't'n'u'o'c' 'a' 'n'e'v'i'g' 's'i'''''''''''''''''''''''''''''''''' 'a' 's'n'i'a't'n'o'c' 'r'e'i'f'i't'n'e'd'i' 'n'o'i't'a'r'e'p'o' 's't'i' ','e'l'u'r' '}'p'O'-'e'k'a'M'{'c's't'x'e't'' 'e'h't' 'g'n'i's'u' 'd'e't'a'r'e'n'e'g' 's'i' 'n'o'i't'a'r'e'p'o' 'n'o'i't'r'e's'n'i' 'e'h't' 'n'e'h'W'n''''''''''''f'o'o'r'p''}'{'''''''p'P'd'n'e''n'''''}'f'o'o'r'p'{'n'i'g'e'b''n'p'a' 's'i' 'n'o'i't'a'r'e'p'o' 't'a'h't' 'e'r'e'h'w' 'a'c'i'l'p'e'r' 'r'e'h't'o' 'y'r'e'v'e' 'n'o' '$'2'_'k'$' 's'e'd'e'c'e'r'p' '$'}'w'e'n'{'t'i'h't'a'm''_'k'$' 'd'n'a' '$'}'w'e'n'{'t'i'h't'a'm''_'k'$' 's'e'd'e'c'e'r'p' '$'1'_'k'$' 'n'e'h't' ','}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't'' 'g'n'i'y'l'p'p'a' 'r'e't'f'a' 'a'c'i'l'p'e'r' 'e'c'r'u'o's' 'e'h't' 'n'o' '$'2'_'k' '=' ')')'}'w'e'n'{'t'i'h't'a'm''_'k'('}'t'x'e'n'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$' 'd'n'a' '$'}'w'e'n'{'t'i'h't'a'm''_'k'''''''''''''''''''''''''''''''''''''''''''''''''a'm''('}'x't'c'{'t'i'h't'a'm'' '=' ')')'1'_'k'('}'t'x'e'n'{'f's'h't'a'm''''''''e'n'('}'x't'c'{'t'i'h't'a'm''$' 'f'i' '.'e'.'i' ','$'2'_'k'$' 'd'n'a''''''''''''' 'D'N'A' '$'1'_'k'$' 'n'e'e'w't'e'b' '$'}'w'e'n'{'t'i'h't'a'm''_''''{'k'$' 't'n'e'm'e'l'e' 't's'i'l' 'a' 's't'r'e's'n'i' 'a'c'i'l'p'e'r' 'e'n'o' 'f'I'n'''''''''''''}'a'm'm'e'l'{'d'n'e''n'}'a'm'm'e'l''''e'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$')'k'('}'s'e'r'p'{'f's'h't'a'm''$' 't'e's' 'e'c'n'e's'e'r'p' 's't'i' 's'r'a'e'l'c' 'y'l'n'o' 't'u'b' ',''''''''''''''''''''''''''''''''''''''s'r'e't'n'i'o'p' '}'t'x'e'n'{'f's't'x'e't'' 'f'o' 'e'c'n'e'u'q'e's' 'e'h't' 'm'o'r'f' 't'i' 'e'v'o'm'e'r' 't'o'n' 's'e'o'd' 't's'i'l' 'a' 'm'o'r'f' 't'n'e'm'e'l'e' 'n''''l'a' 'f'o' 'n'o'i't'e'l'e'd' 't'a'h't' 'e't'o'N'n'n's'e'r'p' 's'y'a'w'l'a' 's'i' 'e'c'n'e'd'e'c'e'r'p' ','r'e'd'r'o' 't's'i'l' 'e'h't' 's't'c'e'f'f'a' 'e'l'u'r' 'r'e'h't'o' 'o'n' 'e'c'n'i'S' '''''''''''''''''''''''''''''''''''''''''''''''''.'s't'n'e'm'e'l'e' 't's'i'l' 'g'n'i't's'i'x'e' 'o'w't' 'y'n'a' 'n'e'e'w't'e'b' 'p'i'h's'n'o'i'''''''''''''s'n'i'o't'a'l'e'r' 'e'c'n'e'd'e'c'e'r'p' 'e'h't' 's'e'v'r'e's'e'r'p' 'n'o'i't'a'c'i'f'i'd'o'm' 's'i'h'T' '.')'}'l'i'a't'{'f's't'x'e't'''''''''''''''''''''' 'r'o'/'d'n'a' '}'d'a'e'h'{'f's'h't'a'm'' 'y'l'b'i's's'o'p'(' 's't'n'e'm'e'l'e' 't's'i'l' 'g'n'i't's'i''''c'x'e' 'o'w't''''r' 'n'e'e'w't'e'b' 't'n'e'm'e'l'e' 't's'i'l' 'w'e'n''''p' 'a' 's't'r'e's'n'i'''''''''''''''''''''''''''' 's'e'i'f'i'd'o'm' 't'i' 'd'n'a' ','$'1'_'}'t'r'e's'n'I'{'c's't'x'e't''''''''''''''''''''''{'f's'h't'a'm''$' 's'i' 't'x'e't'n'o'c' 'e'h't' 'n'i' 's'e'i'r't'n'e' '}'t'x'e'n'{'f's't'x'e't'' 'e'h't' 's'e'i'f'i'd'o'm' 't'a'h't' 'e'l'u'r' 'y'l'n'o' 'e'h'T'n'''''''''''''}'f'o'o'r'p'{'d'n'e''n'}'f'o'o'r'p'{'n'i'g'e'b''n'' 'f'o' 'n'o'i't'o'n' 'e'h'T'n'n'' 'i''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'}'1'+'i'{'''l'' '1'$' 'h't'i'w' '$'i'$' 'l'l'a' 'r'o'f' ''''''''''' 'l'l'a'r'o'f''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''2'_'k'('}'t'x'e'n'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm'' ';''e'g'd'e'w'';'' '2'_'k' '=' ')')'1'_'k'('}'t'x'e'n'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$' 't'a'h't' 'h'c'u's' '$'}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k'$' 't's'i'x'e' 'e'r'e'h't'''''' 'f'i' '$'}'x't'c'{'t'i'h't'a'm''$''''' 'n'i' '$'2'_'k'$' 't'n'e'm'e'l'e' 't's'i'l' '}'s'e'd'e'c'e'r'p'{'h'p'm'e'' '$'1'_'k'$' 't'''''''''' 't' 'n'e'm'e''k'''l'''''e''''k''''''''' '''''''''''''''''t'''''''''s''''''''t'i'L''u'c'o'd' 'e't'i's'o'p'm'o'c' ''k'''x'''''''''''''' '''''e'''''l'''p'm'o'c' 'e'r'o'm' 'k''''''s'''''d'''''r'''''a'''''w'''o't' 'y'a'w' 'r'u'o' 'k'r'o'w' 'n'e'h't' 'd'n'a' ','s't's'i'l' 'd'e'r'e'd'r'o' 't'u'o'b'a' 's'a'm'm'e'l' 'e'm'o's' 'h't'i'w' 'n'i'g'e'b' 'e'W' ''''''''''''''''''''''n''''''''''''''''''}'n'o'i't'i'n'i'f'e'd'{'d'n'e''n'}'n'o'i't'i'n'i'f'e'd'{'n'i'g'e'b''n'n'.''''''''''''''''''''''''''''''''''''''''''s'e'd'e'c'e'r'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e't'a't's' 't'n'e'm'u'c'o'd'''''''t's' 'e'v'i's's'e'c'c'u's''''''''''''''''''''''''''''''' 'g'n'i't'l'u's'e'r' 'l'l'a' 'n'i' '$'2'_'}'d'i'{'t'i'h't'a'm''$' 's'e'd'e'c'e'r'p' 'o's'l'a' '$'1'_'}'d'i'{'t'i'h't'a'm''$''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','s'e'l'u'r' 'n'o'i't'a'u'l'a'v'e''''v' 'e'h't' 'o't' 'g'n'i'd'r'o'c'c'a' 'd'e't'a't'u'm' 's'i' 't's'i'l' 'e'h't' 'd'n'a' ','t's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'n'i' '$'2'_'}'d'i'{'t'i'h't'a'm''$' 'e'r'o'f'e'b' 's'r'a'e'p'p'a' '$'1'_'}'d'i'{'t'i'h't'a'm''$' 'f'I''''''''''''''''''''''''''''''''''t'a'u'l'a'v'e' 'e'h'T'n'''''''''''''}'a'm'm'e'l'{'d'n'e''n'}'a'm'm'e'l'{'n'i'g'e'b'''n'n''}'e'c'n'e'g'r'e'v'n'o'c':'c'e's'{'f'e'r''~'n'o'i't'c'e'S'''''''e's' 'n'i' 'd'e't'a't's' 'm'e'r'o'e'h't' 'e'h't' 'f'o' 'f'o'o'r'p' 'a' 'e'd'i'v'o'r'p' 'e'w' 'x'i'd'n'e'p'p'a' 's'i'h't' 'n'I''n'n'W' '.'n'o'i't'a'r'e'p'o' '}'o'd'n'u'{'h'p'm'e'' 'n'a' 'd'n'a' ')'r'e'h't'o'n'a' 'o't' 't'n'e'm'u'c'o'd' 'a' 'n'i' 'n'o'i't'i's'o'p' 'e'n'o' 'm'o'r'f' 'e'e'r't'b'u's' 'a' 'e'v'o'm' 'o't' 'r'o' ','t's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'n'i' 's't'n'e'm'e'l'e' 'f'o' 'r'e'd'r'o' 'e'h't' 'e'g'n'a'h'c' 'o't'(' 'n'o'i't'a'r'e'p'o' '}'e'v'o'm'{'h'p'm'e'' 'a' 't'r'o'p'p'u's' 'o't' 'l'u'f'e's'u' 'e'b' 'd'l'u'o'w' 't'i' ','e's'e'h't' 'o't' 'n'o'i't'i'd'd'a' 'n'I' '.'s'n'o'i't'a'r'e'p'o' 't'n'e'm'n'g'i's's'a' 'd'n'a' 'n'o'i't'e'l'e'd' ','n'o'i't'r'e's'n'i' 's't'r'o'p'p'u's' 'r'e'p'a'p' 's'i'h't' 'n'i' 'd'e'n'i'f'e'd' 'T'D'R'C' 'e'h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'r'u't'a'''''''''''''u't'a'r'e'f' 't'n'a't'r'o'p'm'i' 'o'w'T''n'''t''''' '''''g'''''n'''''i'''''s'''''i'''''r'''''p'''''r'''''u'''''s''''' '''''e'''''b''''' '''''y'''''a'''''m''''' '''''t'''''a'''''h'''''t''''' '''''s'''''e'''''t'''''a'''''t'''''s''''' '''''t'''''n'''''e'''''m'''''u'''''c'''''o'''''d''''' '''''d'''''e'''''g'''r'e'm''''''''''''''''r'p'r'u's''''''''''''''''''''''''' 'o't' 's'd'a'e'l' 't'i''''' ','}'m'e't'i'-'o'd'o't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'd'e't'a'r't's'u'l'l'i' 's'a' 't'u'b' ','e'l'b'a'n'o's'a'e'r' 's'r'a'e'p'p'a' 's'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c''''o' 'o't' 'e'u'd' 't'u'p'n'i' 'g'n'i's'o'l' 't'o'n' 'f'o' 'e'l'p'i'c'n'i'r'p' 'r'u'O'''''''''''''''' 'd'e't'a'r't's'u'l'l'i' 's'A's'm'h't'i'r'o'g'l'a' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'f'o' ''c'i'r'i'p'm'e''''''''''p'x'e''''''y'd'u't's' 'e'h't' 'r'o'f' 't'e's'a't'a'''''''''''''''''''''''''''''''''''''''''''''' ','}'m'e't'i'-'o'd'o't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'd'e't'a'r't's'u'l'l'i' 's'A''d' 'a' 'e'd'i'v'o'r'p' 'o't' 'r'e'd'r'o' 'n'i' ','r'e'p'a'p' 's'i'h't' 'f'o' 'a't'a'd' 'l'a't'n'e'm'e'l'p'p'u's' 's'a' 'e'l'b'a'l'i'a'v'a' 't'n'e'm'u'c'o'd' 's'i'h't' 'f'o' 'e'c'a'r't' 'g'n'i't'i'd'e' 'r'e't'c'a'r'a'h'c'-'y'b'-'r'e't'c'a'r'a'h'c' 'e'h't' 'g'n'i'k'a'm' 'e'r'a' 'e'W' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''}'k'v'5'1'0'2':'e'l'g'o'o'G'{'e't'i'c''~'I'P'A' 'e'm'i't'l'a'e'R' 'e'l'g'o'o'G' '.'s'e'r'u't'c'u'r't's' 'a't'a'd' 'e'l'b'a't'i'd'e' 'y'l'e'v'i't'a'r'o'b'a'l'l'o'c' 'f'o' 'e'r'i'u'q'e'r' 'd'n'a' 't'c'e'p'x'e' 's'r'e'm'm'a'r'g'o'r'p' 'n'o'i't'a'c'i'l'p'p'a' 't'a'h't' 's'c'i't'n'a'm'e's' 'e'h't' 'e'r'o'l'p'x'e' 'o't' 'd'e'd'e'e'n' 'e'b' 'l'l'i'w' 'k'r'o'w' 'r'e'h't'r'u'F'n'n'.'T'D'R'C' 's'i'h't' 'f'o' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'r'u'o' 'g'n'i's'u' 'r'o't'i'd'e' 't'x'e't' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'l'a't'n'e'm'i'r'e'p'x'e' 'n'a' 'g'n'i's'u' 'r'e'p'a'p' 's'i'h't' 'f'o' 't'x'e't' 'e'c'r'u'o's' '}'X'e'T'a'L''{' 'e'h't' 'e't'o'r'w' 'e'w' ','t'c'a'f''w' 'n'o'-'w'o'l'l'o'f'''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'I' '.'r'e'p'a'p' 'e't'a'r'a'p'e's' 'a' 'n'i' 's'c'i't's'i'r'e't'c'a'r'a'h'c' 'e'c'n'a'm'r'o'f'r'e'p' 's't'i' 'n'o' 't'r'o'p'e'r' 'l'l'i'w' 'd'n'a' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'l'a'c'i't'c'a'r'p' 'a' 'd'e't'a'e'r'c' 'o's'l'a' 'e'v'a'h' 'e'W' '.'l'e'd'o'm' 'l'a'c'i't'a'm'e'h't'a'm' 'a' 's'a' 'd'e't'n'e's'e'r'p'e'r' ','T'D'R'C' 'N'O'S'J' 'e'h't' 'f'o' 's'c'i't'n'a'm'e's' 'l'a'm'r'o'f' 'e'h't' 'n'o' 'd'e's'u'c'o'f' 'k'r'o'w' 's'i'h'T'n'n'.'c'i'g'o'l' 'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'''''''''''''n'o'c' 'c'i'f'i'c'e'p's'-'n'o'i't'a'c'i'l'p'p'a' 'y'n'a' 'g'n'i'r'i'u'q'e'r' 't'u'o'h't'i'w' 'e't'a't's' 'e'm'a's' 'e'h't' 's'd'r'a'w'o't' 'e'g'r'e'v'n'o'c' 's'a'c'i'l'p'e'r' 't'a'h't' 's'e'r'u's'n'e' 'h'c'i'h'w' ','e'v'i't'a't'u'm'm'o'c' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'C' '.'s'n'o'i't'a'r'e'p'o' 'f'o' 'e'r' 'r'e'h't'o' 'o't' ''''''''''''''''''''''''''''''''''''''''''s'n'o'i't'a't'u'm''''''''''''''''''''''''''''m'r'o'f' 'e'h't' 'n'i' 's't'i'd'e''''''''''a'h'c' 'e't'a'c'i'n'u'm'm'o'c' 'y'l's'u'o'n'o'r'h'c'n'y's'a' 's'a'c'i'l'p'e'R' '.''''''''''''''''''''''g'm'o'r'o'i'q'e'r' '''''''''''''' 'k'r'o'w't''n'o''''''e'n' 'y'n'a'''''''''''''''''''' 'h't'i'w' 'g'n'i't'a'c'i'n'u'm'm'o'c' 't'u'o'h't'i'w' 'a't'a'd' 'e'h't' 'o't' 's'e'g'n'a'h'c' 'y'r'a'r't'i'b'r'a' 'e'k'a'm' 'o't' 's'a'c'i'l'p'e'r' 's'w'o'l'l'a''''l' 't'i' 'd'n'a' ','s'p'a'm' 'd'n'a' 's't's'i'l' 'd'e't's'e'n' 'y'l'i'r'a'r't'i'b'r'a' 's't'r'o'p'p'u's' 't'I' '.'l'e'd'o'm' 'a't'a'd' 'N'O'S'J' 'a' 'h't'i'w' 'T'D'R'C' 'd'n'u'o'p'm'o'c' 'a' 'o't'n'i' 's'r'e't's'i'g'e'r' 'd'n'a' 's'p'a'm' ','s't's'i'l' 'd'e'r'e'd'r'o' 'r'o'f' 's'T'D'R'C''''C' 'e's'o'p'm'o'c' 'o't' 'w'o'h' 'd'e't'a'r't's'n'o'm'e'd' 'e'w' 'r'e'p'a'p' 's'i'h't' 'n'I''''''''''''''''''''''''''''''''''l' 'e'r'a' 'y'e'h't' 'e'c'n'i's' ','}'t'e'l'{'f's't'x'e't'''''''''''''h't'a'm'' 'h't'i'w' 'd'e'n'i'f'e'd' 's'e'l'b'a'i'r'a'v' 'y'n'a' 's'e'd'u'l'c'x'e' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h'T'n'n''s'i' 'r'e'v'e'h'c'i''''c'h'w' ','$')'}'c'o'd'{'f's'h't'a'm''('}'T'g'e'r'{'f's'h't'a'm''('p'_'A'$' 'r'o' '$')'}'c'o'd'{'f's'h't'a'm''('}'T't's'i'l'{'f's'h't'a'm''('p'_'A'$' 'r'o' '$')'}'c'o'd'{'f's'h't'a'm''('}'T'p'a'm'{'f's'h't'a'm''('p'_'A'$' ','s'i' 't'a'h't' ':'''' 't'n'e'm'u'c'o'd' 'e'h't' 'g'n'i'n'i'a't'n'o'c' '$'p'_'A'$' 'f'o' 'e'e'r't'b'u's' 'e'h't' 's'i' '$'p'$' 'a'c'i'l'p'e'r' 'a' 'f'o' '}'e't'a't's' 't'n'e'm'u'c'o'd'{'h'p'm'e''''m'' 'e'h'T'n''''''''''''''''''}'n'o'i't'i'n'i'f'e'd'{'d'n'e''n'}'n'o'i't'i'n'i'f'e'd'{'n'i'g'e'b''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e't'a't's' 't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'a'n'i'b'm'o'c' 'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'l'a'u's'u' '''''''''''''''''''''' 'y'l'l'a'u's'u''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i't'a'r'u'd' 'e't'i'n'i'f' 'f'o' 'y'l'l'a'u's'u' 'e'r'a' 's'n'o'i't'p'u'r'r'e't'n'i' 'k'r'o'w't'e'n' 's'a' ','e'c'i't'c'a'r'p' 'n'i' 'd'e'd'i'v'o'r'p' 'e'b' 'n'a'c' 't'i' 't'a'h't' 't'r'e's's'a' 't'u'b' ','r'e'p'a'p' 's'i'h't' 'n'i' 'y't'r'e'p'o'r'p' 's's'e'n'e'v'i'l' 'e'h't' 'e'z'i'l'a'm'r'o'f' 't'o'n' 'l'l'i'w' 'e'W' '.'y'l'r'i'a'f' 'n'e's'o'h'c' 'g'n'i'e'b' '}'d'l'e'i'y'{'f's't'x'e't'''''''''''x'e't' 'r'o'f' 's'e'l'u'r' 'c'i't's'i'n'i'm'r'e't'e'd'n'o'n' 'l'l'a' 'd'n'a' ','n'e't'f'o' 'y'l't'n'e'i'c'i'f'f'u's' '}'d'l'e'i'y'{'f's't'x'e't'''''''a'm'' 'g'n'i'k'o'v'n'i' 's'a'c'i'l'p'e'r' 'f'o' 's'n'o'i't'p'm'u's's'a' 'n'o' 's'd'n'e'p'e'd' 'y't'r'e'p'o'r'p' 's's'e'n'e'v'i'l' 'e'h'T'n'n'.'e't'a't's' 'e'm'a's' 'e'h't' 'n'i' 'p'u' 'd'n'e' 'y'l'l'a'u't'n'e'v'e' 's'a'c'i'l'p'e'r' 'l'l'a' ':'e'c'n'e'g'r'e'v'n'o'c' 'f'o' 'n'o'i't'o'n' 'd'e'r'i's'e'd' 'e'h't' 'n'i'a't'b'o' 'e'w' ','s'n'o'i't'a'r'e'p'o' 'l'l'a' 's'e's's'e'c'o'r'p' 'y'l'l'a'u't'n'e'v'e' 'a'c'i'l'p'e'r' 'y'r'e'v'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'a'h't' 'y'l'e'm'a'n' ','y't'r'e'p'o'r'p' 's's'e'n'e'v'i'l' 'a' 'h't'i'w' 'd'e'l'p'u'o'c' 'e'b' 'o't' 's'd'e'e'n' 't'I' '.'e't'a't's' 'e'm'a's' 'e'h't' 'n'i' 'e'r'a' 'y'e'h't' 'n'e'h't' ','r'e'd'r'o' 't'n'e'r'e'f'f'i'd' 'a' 'n'i' 'y'l'b'i's's'o'p' ','s'n'o'i't'a'r'e'p'o' 'f'o' 't'e's' 'e'm'a's' 'e'h't' 'd'e's's'e'c'o'r'p' 'e'v'a'h' 's'a'c'i'l'p'e'r' 'o'w't' 'f'i' ':'e'c'n'e'g'r'e'v'n'o'c' 'f'o' 'y't'r'e'p'o'r'p' 'y't'e'f'a's' 'e'h't' 's'e'z'i'l'a'm'r'o'f' 't'I' '.'x'i'd'n'e'p'p'a' 'e'h't' 'n'i' 'd'e'v'o'r'p' 's'i' 'm'e'r'o'e'h't' 's'i'h'T'n'n''n'e'm'u'c'o'd' 'e'm'a's' 'e'h't' 'e'v'a'h' '$'q'$' 'd'n'a' '$'p'$' 'n'e'h't' ','$')'}'s'p'o'{'f's'h't'a'm''('q'_'A''''$' '=' ')'}'s'p'o'{'f's'h't'a'm''('p'_'A'$' 'f'i' ','n'o'i't'u'c'e'x'e' 'd'i'l'a'v' 'a' 'n'i' 'd'e't'a'p'i'c'i't'r'a'p' 't'a'h't' '$'q'$' 'd'n'a' '$'p'$' 's'a'c'i'l'p'e'r' 'o'w't' 'y'n'a' 'r'o'F'n''''''''''''''''}'*'m'e'r'o'e'h't'{'d'n'e''n'}'*'m'e'r'o'e'h't'{'n'i'g'e'b''n'n'''e'''''c'''''n'''''i'''''S''''''''k'''''c'''''e'''''h'''''c''''' '''''n'''''a'''''c''''' '''''e''''''''''''''''''''''''''''''''''n'a' 'f'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.')'y'r'o't's'i'h' 'e'h't' 'n'i' 's'e'i'c'n'e'd'n'e'p'e'd' 'e's'o'h't' 'r'e't'f'a' 't'n'i'o'p' 'e'm'o's' 't'a' 's'r'a'e'p'p'a' 't'i' ','s'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 's'a'h' 'n'''''''''''''''''''''''''''''''''''''''''''''''''''''s'r'a'e'p'p'a' 'n'o'i'''''''''''''''''k'r'o'w' 'r'e'h't'r'u'f' 'd'n'a' ''t'a'r'e'p'o' 'y'r'e'v'e'''''''''''''''''''''''''''''''''''''''' '''''r'''''e'''''h'''''t'''''e'''''h'''''w''''' ''''','''''s'''''u'''''h'''''T''''' '''''.'''''e'''''l'''''u'''''r''''' '}'v'c'e'R'{'c's't'x'e't'' 'e'h't' 's'e'i'l'p'p'a' 'r'e'v'e'n' '}'d'l'e'i'y'{'f's't'x'e't'' 'f'o' 'n'o'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'n'i'f'e'd'-'l'l'e'w' 's'i' 'r'e'd'r'o' 'e'h't' ','e'm'i't' 'a' 't'a' 'n'o'i't'a'r'e'p'''''''''''''y'r'o't's'i'h' 'y'n'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(' 'y't'i'l'a's'u'a'c' 'h't'i'w' 't'n'e't's'i's'n'o'c' 's'i' 'r'e'd'r'o' 'e'h't' ',''''''o''''' '''''e'''''n'''''o''''' '''''y'''''l'''''p'''''p'''''a''''' '''''y'''''l'''''l'''''a'''''i'''''t'''''n'''''e'''''u'''''q'''''e'''''s''''' '''''s'''''e'''''l'''''u'''''r''''' '''''n'''''o'''''i'''''t'''a'u'l'a'v'e' 'e'h't' 'e'''''''''''''h't'e' 'c'n'i'S' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e't'o'm'e'R'-'y'l'p'p'A'{'c's't'x'e't'' 'n'i' '$')'}'s'p'o'{'f's'h't'a'm''('p'_'A' 'q'e't'e's'b'u's'' '}'s'p'e'd'''''''d'i'.'p'o'{'t'i'h't'a'm''$' 'e's'i'm'e'r'p' 'e'h't' 'o't' 'e'u'D' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'm'i't' 'a' 't'a' 'n'o'i't'a'r'e'p'o' 'e'n'o' 'y'l'p'p'a' 'y'l'l'a'i't'n'e'u'q'e's' 's'e'l'u'r' 'n'o'i't'a'u'l'a'v'e' 'e'h't' 'e'c'n'i'S' 't'u'c'e'x'e' 'c'i't's'i'n'i'm'r'e't'e'd'n'o'n' 'e'h't' 'e's'u'a'c'e'b' 'r'o' ','d'n'a'm'm'o'c' '}'d'l'e'i'y'{'f's't'x'e't'' 'e'h't' 's'e'k'o'v'n'i'''''''''''''''''''t' 's'e's'u' 'r'e'v'e'n' 't'i' 'e's'u'a'c'e'b' 'r'e'h't'i'e' ','n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 'y'n'a' 'm'r'o'f'r'e'p' 'r'e'v'e'n' 'o't' 'n'o'i't'u'c'e'x'e' 'n'a' 'r'o'f' 'd'i'l'a'v' 's'i' 't'i' 't'a'h't' 'e't'o'N'n'n'''' '''''''''''''''''''''''''''''''''''''''''''a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e't'o'm'e'R'-'y'''''''''''''''''''''''''''''''''''$'q'$' 'd'n'a' '$'p'$' '''''''''''''''''''''f'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'r'r'u'c'n'o'c' 'y'n'a'''''''''''''''''''''''''''''''''''''''''''.'r'e'd'r'o' 't'n'e'r'e'f'f'i'd' 'a' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'd'e'i'l'p'p'a' 'e'v'a'h' 'y'a'm' 'y'e'h't' ','$')'}'s'p'o'{'f's'h't'a'm''('q'_'A' '=' ')'}'s'p'o'{'f's'h't'a'm''('p'_'A'$' '.'e'.'i' ','''''''''''''''''''''''''s'n'o'i't'a'r'e'p'o' 'f'o' 't'e's' 'e'm'a's' 'e'h't' 'd'e'i'l'p'p'a' 's'a'c'i'l'p'e'r' 'o'w't' 'f'i' 'n'e'v'E''''N'n'n'l'p'p'A'{'c's't'x'e't'' 'd'n'a' '}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't'' 's'e'l'u'r' 'e'h't' 'f'o' 'n'o'i't'a'c'i'l'p'p'a' 'y'b' ',''.'$'p'$' 'a'c'i'l'p'e'r' 'r'a'l'u'c'i't'r'a'p' 'e'n'o' 't'a' 'd'e'i'l'p'p'a' 's'a'w' 't'i' 'r'e'd'r'o' 'e'h't' 'n'i' 's'n'o'i't'a'r'e'p''''''''''''o' 'f'o' 'e'c'n'e'u'q'e's' 'e'h't' 's'i''''''''''''''''''}'n'o'i't'i'n'i'f'e'd'{'d'n'e''n' '}'y'r'o't's'i'h'{'h'p'm'e'' 'A'n'}'n'o'i't'i'n'i'f'e'd'{'n'i'g'e'b''n'n'.'t's'i'x'e' 'y'l'l'a'u't'c'a' 't'a'h't' 's't'n'e'm'e'l'e' 't's'i'l' 'o't' 'r'e'f'e'r' 'y'l'n'o' 's'n'o'i't'a'r'e'p'o' 't'a'h't' 'e'r'u'' 's'i'h't' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'l'a'e'r' 'a' 'n'I'(' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'n'e' 'e'w' ','k'c'u't's' 't'e'g' 't'o'n' 'o'd' 't'a'h't' 'e's'o'h't' 'o't' 's'n'o'i't'u'c'e'x'e' 'd'i'l'a'v''''''''''e'x'e' 'g'n'i'n'i'a'r't's'n'o'c' 'y'B' '.'t's'i'l' 'a' 'f'o' 'd'n'e' 'e'h't' 't's'a'p' 'e't'a'r'e't'i' 'o't' 's'e'i'r't' '}'t'x'e'n'{'f's't'x'e't'' 'f'i' 'k'c'u't's' 't'e'g' '}'s'e'l'u'r'-'r'p'x'e':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 's'e'l'u'r' '$'}'3','2'{'_'}'t'x'e'N'{'''c's't'x'e't'' 'e'h't' ','e'l'p'm'a'x'e' 'r'o'F' '.'d'e'i'f's'i't'a's' 'e'b' 't'o'n'n'a'c' 's'n'o'i't'a'c'i'l'p'p'a' 'e'l'u'r' 'e'h't' 'f'o' 'e'n'o' 'n'i' 'e's'i'm'e'r'p' 'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''o'n'n'a'c' 's'e's'i'm'e'r'p''''''''''e'r'p' 's't'i' 'f'i' 'k'c'u't's' 's't'e'g' 'n'o'i't'c'u'd'e'r' 'A''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'h't' 'g'n'i'n'i'a'r't's'n'o'c' 'y'B'n'n't't'e'g' 't'u'o'h't'i'w' ''.'$'e'l'g'n'a'r'' 'n'_'}'d'm'c'{'t'i'h't'a'm'' '}'''']';'{'n'i'b'h't'a'm'' 's't'o'd'' '}';'{'n'i'b'h't'a'm'' '1'_'}'d'm'c'{'t'i'h't'a'm'' 'e'l'g'n'a'l''$' 's'd'n'a'm'm'o'c' 'f'o' 'e'c'n'e'u'q'e's' 'a' 'g'n'i'c'u'd'e'r' 'h'c''''h'a'e' ','$'}'D'I'a'c'i'l'p'e'R'{'m'r'h't'a'm'' '=' '}''k'_'p' ','s't'o'd'' ','1'_'p'{''$' 's'a'c'i'l'p'e'r' 'f'o' 't'e's' 'a' 'y'b' 'd'e't'a'r'e'n'e'g' 's'n'o'i't'a'r'e'p'o' 'f'o' 't'e's'''''''e's' 'a' 's'i' '}'n'o'i't'u'c'e'x'e' 'd'i'l'a'v'{'h'p'm'e'' 'A'n''''''''''''''''''}'n'o'i't'i'n'i'f'e'd'{'d'n'e''n'}'n'o'i't'i'n'i'f'e'd'{'n'i'g'e'b''n'n'f'o'o'r'p's's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'n'e'm'e'r'i'u'q'e'r' 's'i'h't' 'y'f's'i't'a's' '}'s'e'l'u'r'-'r'a'e'l'c':'g'i'f'{'f'e'r''~'''' 'o't' '}'s'e'l'u'r'-'r'p'x'e':'g'i'f'{'f'e'r''~'s'e'r'u'g'i'F' 'n'i' 's'e'l'u'r' 'e'h't' 't'a'h't' 'w'o'h's' 'd'n'a' ','n'o'i't'o'n' 's'i'h't' 'e'z'i'l'a'm'r'o'f' 'w'o'n' 'e'W'D'R'C' 'a' 'f'o' 't'n'e'm'e'r'i'u'q'e'r' 'y'e'k' 'a' '-'-' ''''''''''''i'h'T' '.'e't'a't's' 'e'm'a's' 'e'h't' 's'd'r'a'w'o't' 'e'g'r'e'v'n'o'c' 'y'l'l'a'c'i't'a'm'o't'u'a' 's'a'c'i'l'p'e'r' 'l'l'a' 't'a'h't' 'e'r'i'u'q'e'r' 'e'w' ','}'n'o'i't'a'c'i'l'p'e'r'-'o'r't'n'i':'c'e's'{'f'e'r''~'n'o'i't'c'e'S' 'n'i' 'd'e'n'i'l't'u'o' 's'A''u'b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'}'e'c'n'e'g'r'e'v'n'o'c':'c'e's'{'l'e'b'a'l''}'e'c'n'e'g'r'e'v'n'o'C'{'n'o'i't'c'e's'b'u's''n''''''''''''''r''''t'i't'r'a'p'h't'a'm'''''''''''''e's'l'a'f'''''''''''''e'u'r't''''''''''''''''''''''''''''c'i't'n'a'm'e's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e's'l'a'f't'f'a'r'd'f'o'o'r'p''n't'f'a'r'd'f'o'o'r'p'f'i''f'i'w'e'n'''n'n'''''''''''''''''''''''''' 'r'o'f' 'n'o'i't'a't'o'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'O'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'}'s'd'r'o'w'y'e'k'E'E'E'I'{'d'n'e''n'.'y'c'n'e't's'i's'n'o'C' 'l'a'u't'n'e'v'E' ','s'c'i't'n'a'm'e'S' ','n'o'i't'a'c'i'l'p'e'R' 'c'i't's'i'm'i't'p'O' ','N'O'S'J' ','P'2'P' ','g'n'i't'i'd'E' 'e'v'i't'a'r'o'b'a'l'l'o'C' ','s'T'D'R'C'n'}'s'd'r'o'w'y'e'k'E'E'E'I'{'n'i'g'e'b''n'n'''''}'t'c'a'r't's'b'a'{'d'n'e''D'O'T'n'}'t'c'a'r't's'b'a'{'n'i'g'e'b''n'%'{'t'x'e't'x'e'd'n'i't'c'a'r't's'b'a'e'l't'i't'E'E'E'I''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''''''''''''''''''''''''{'g'n'i'd'a'e'h'n'o'i''''''''''''''''''''''''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'a'r'e' 't'i'd'n'a'l'b' 'l'e'v' ','s'u'r'u'p' 'm'u'd'n'e'b'i'b' 'd'e's' 'c'e'n'o'D' '.'t'n'u'd'i'c'n'i't' 's'i't't'a'm' 'r'o't'r'o't' 's'u's'r'u'c' 'o'e'l' 's'i't't'a'm' 'e's's'i'd'n'e'p's'u'S' '.'t'i'l'e' 'g'n'i'c's'i'p'i'd'a' 'r'u't'e't'c'e's'n'o'c' ','t'e'm'a' 't'i's' 'r'o'l'o'd' 'm'u's'p'i' 'm'e'r'o'L' '.')'O'D'O'T'(' 'o'g' 'd'l'u'o'h's' 'n'o'i't'c'u'd'o'r't'n'i' 'e'h't' 'e'r'e'h'w' 's'i' '}'s'i'h't'{'}'T'{'t'r'a't's'R'A'P'E'E'E'I''n''}'n'o'i't'c'u'd'o'r't'n'i':'c'e's'{'l'e'b'a'l''t'c'e's'e's'i'a'r'E'E'E'I'''n'e'm'n'o'r'i'v'n'e' 'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'a'm' 't'a'n'g'i'l'a' 'n'a' 'n'i'h't'i'w' 's'n'm'u'l'o'c' 'e'l'p'i't'l'u'm' 'n'a'p'S' '%'n'''''''''''''s'e'l'u'r' 'e'c'n'e'r'e'f'n'i' '%' '}'r'i't'r'a'p'h't'a'm'''''''a'p'{'e'g'a'k'c'a'p'e's'u''n'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'n'%'}'$'2'#'}''''''''''''''''''''''''''''' 'o'w't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'l'a'c'i't'a'm'o't'u'a''''''''''''''''m'o't'u'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o'i't'a'c'i'l'p'p'a' 'o'N' 'm'e't'i''n''''''''''''''''''''''''t'n'e'm'u''''''''''''''''''''''y'n'a' 'd'n'a' ','y'l'i'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'h'c'a'o'r'p'p'a' 'l'u'f'e'r'a'c' 'e'r'o'm' 'a' 's'e'r'i'u'q'e'r' 't'u'p'n'i' 'r'e's'u' 'e'v'r'e's'e'r'p' 'o't' 't'n'e'm'e'r'i'u'q'e'r' 'e'h't' ','r'e'v'e'w'o'H' '.'d'e'd'r'a'c's'i'd' 'e'r'a' ''''''a'''''r'''''t'i'b'r'a' 'c'o'd' 'a' 'f'o' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a' ','s''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''s'n'i'w' 'r'e't'i'r'w'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'f'o' 't'e's' 'a' 'm'o'r'f' 'n'e's'o'h'c' 's'i' 'n'o'i's'r'e'v'''''''''''''''''''''' 'e't'a'd'p'u' 'e'n'o' 'h'c'i'h'w' 'n'i' ','t'n'e'i'c'i'f'f'u's' 's'i'' 't's'a'l'`'`'''''''''''''''''''''''''''' 'y'c'i'l'o'p' 'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 'e'l'p'm'i's' 'a' ','d'e't't'i'm'o' 's'i' 'e'l'p'i'c'n'i'r'p' 'd'n'o'c'e's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'r'a'p'r'e't'n'u'o'c'''''''''''''''''''''''.'n'o'i's'r'e'v' 'd'e't'a'c'i'l'p'e'r'-'n'o'n' ','r'a'i'l'i'm'a'f' 's'''''''''''''''''''''''''''''' '''''''c' 'd'r'i'h't' 'e'h't' 'f'I'n''n'n'}'e't'a'r'e'm'u'n'e'{'d'n'e'''t'i' 'e'k'i'l' 'e'v'a'h'e'b' 'd'l'u'o'h's' 'e'r'u't'c'u'r't's' 'a't'a'd' 'e'h't' ','s'n'o'i't'a'c'i'f'i'd'o'm' 't'n''''''''''y'c'n'e'r'r'u'c'n'o'c' 'f'o' 'e'c'n'e's'b'a' 'e'h't' 'n'I''''U''''''''''n'I'W' 'm'e't'i''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'o't' 'e'u'd' 't's'o'l' 'e'b' 'd'l'u'o'h's' 't'u'p'n'i' 'r'e's'u''3''' 'o'N' 'm'e't'i''n'.'e't'a't''''a's' 'e'm'a's' 'e'h't' 's'd'r'a'w'o't' 'e'g'r'e'v'n'o'c' 'd'l'u'o'h's' 'e'r'u't'c'u'r't's' 'a't'a'd' 'e'h't' 'f'o' 's'a'c'i'l'p'e'r' 'l'l'A' 'm'e't'i''n'}'e't'a'r'e'm'u'n'e'{'n'i'g'e'b''n'''' ':'s'e'l'p'i'c'n'i'r'p' 'e'l'p'm'i''''''''''''''t'p'8''''''''''m'''e'''''1''''''''''''''''''''''''t'''''p'''''5'='p'e'''s' '''''''''''''''''r'e'n'n'i','''''''''''''n'i' ',''''''t'f'e'l'''''''''''''''''''''''''s' 'o'w''''t'p'8'''t''''''' 'n'''''''''''''''''''''''''''''''''''''''''''''o' 'd'e's'a'b''''''''''''''m'e'1''''''''''t'p'5'='p'e's' 'r'e'n'n'i','' 's'i' 'n'g'i's'e'd' 'r'u'O''n'n'{'e'l'y't's'y''''''t'h'g'i'r'''''''''''''''''''''''''a'l'p's'i'd''$'{'x'o'b'm''}'1'#'{'n'a'p's'i't'l'u'm'' ' 'n'%'{']'2'['}'n'g'i'l'a'i't'l'u'm''{'d'n'a'm'm'o'c'w'e'n''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a' 'n'I'''''''''''''''''''''''''''''''''''''''''''''e'u'l'a'v' 'h't'i'w' 'r'e't's'i'g'e'r' 'a' '''''''''''''''''''''''''''''''''''''''''''''''''''r'e't's'i'g'e'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'r'e'w' 't'a'h't' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''' 'y'l'l'a'u'n'a'm''''''''''''''''''''''''.'t'c'i'l'f'n'o'c' 'e'h't' 'g'n'i'v'l'o's'e'r' 'h't'i'w' 's'r'e's'u' 't's'i's's'a' 'o't' ''')'e'm'i't' 't'a'h'w' 't'a' 'e'c'i'v'e'd' 'h'c'i'h'w' 'n'o' ','e'g'n'a'h'c' 'e'h't' 'e'd'a'm' 'o'h'w'(' 'e'u'l'a'v' 'h'c'a'e' 'f'o' 'e'c'n'a'n'e'v'o'r'p' 'e'h't' 't'u'o'b'a' 'a't'a'd'a't'e'm' 'p'e'e'k' 'y'a'm' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'n'A' ''s'e'u'l'a'v' 'e'l'p'i't'l'u'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''4''''5'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'{' ':'''s'r'o'l'o'c'''3''''''''''5'.'2''''''''''''''''''''''''''''''''''5'.'1'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '4''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'x'' 'i'r'''t'a'm'' '''''' ' 'x'' ' '''''''''''''''''''''''''''''''''''''|','''f'f'0'0'0'0'''''''''''''''''''''''''|'}'}''''''''''''' ''''''''8''''''''''''''''x''''''''''''''''''''''8'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'x'i'r't'a'm'[' ''''8''''''''''''''{' 'e'd'o'n'' ' ' ''''''''}''{'' '=' ''' '''''n''''''''''''''''''''''''''''' '''2'1''' '''''t'p'8'='p'e's' 'r'e'n'n'i',''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';')'2't'f'e'l'''''''''''''f'e'l'A'(' '''''''''''n'e't't'i'r'w'r'e'v'o''''''o'''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''0'.'6'''''''''''''''''''''''''''''''''''''''''''5'.'4''' ''''''''''''''''''y'u'b''''''''''''''''''''''''5'.'4''''''''''''''''''''''y'u'b''''''''''''''''''''''''0'.'3''''''''''''''''''''''y'u'b''''''''''''''''''''''''''''''5'.'''''''''''''''''''y'u'b'''''''''m'a'h''''''''''''''''''''''0'.'3'''''''''''''''''''''''(''''''k'l''''''''''''''''''''''''5'.''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''0'.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''0'.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ''''''''''''''''x'8'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''8'''''''''x''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';')'4'''''''4'3't'f'e'l'(' 'o't' ')''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i'p'p'o'h's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e'd'r'o' 'e'm'a's' 'e'h't' 'h't'i'w' 'p'u' 'd'n'e'''''''''''''v'n'o'c' 's'a'c'i'l'p'e'r' 'l'l'a' 't'a'h't' 'd'e'd'i'v'o'r'p' ','''''m'a'h' ','s'g'g'e' ','r'u'o'l'f' ','k'l'i'm'`'`' 'd'n'a' '''''r'u'o'l'f' ','k'l'i'm' ','m'a'''''''a'j'h' ','s'g'g'e'`'`' 'n'e'e'w't'e'b' 'e'c'i'o'h'c'''''''o'n' 'y'r'a'r't'i'b'r'a' 'n'a' 'e'k'a'm' 'n'a'c' 'm'h't'i'r'o'g'l'a' '''''''''' 'e'r'e'h't' 'o's' ','t'l'u's'e'r' 'd'e'g'r'e'm' 'e'h't' 'n'i' 't's'r'i'f' 'r'a'e'p'p'a' 'd'l'u'o'h's' 's'm'e't'i' 's'''a'c'i'l'p'e'r' 'h'c'i'h''''i'''''''''''''''''''''' 'r'e'h't'e'h'w' 'n'o' 'n'o'i't'a'm'r'o'f'n'i' 'o'n' 's'i' 'e'r'e'h'T''''''''''''''''''''''''' 'r'e'h't'e'h'W' '.'t'l'u's'e'r' 'd'e'g'r'e'm' 'e'h't' 'n'i' '''''k'l'i'm'`'`' 'r'e't'f'a' 's'r'a'e'p'p'a' ''''''''`'r'u'o'l'f'`'`' 'd'n'a' ','''''s'g'g'e'`'`' 'r'e't'f'a' 's'r'a'e'p'p'a' '''''''' 'm'a'h'`'`' 'o's' ','a'c'i'l'p'e'r' 'h'c'a'e' 't'a' 'd'e't'r'e's'n'i' 's'm'e't'i' 'f'o' 'y'c'n'e'c'a'j'd'a' 'd'n'a''''''''''''''''''''''a'j'd'a' 'f'o' 'g'n'i'r'e'd'r'o' 'e'h't' 'e'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''L'M'X''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'''''}'a'v'5'1'0'2':'g'n'a'W','y'j'3'0'0'2':'t'a'n'g'I','v'i'2'0'0'2':'s'i'v'a'D'{'e't'i'c''~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e't's'e'n' 'y'l'i'r'a'r't'i'b'r'a' 'e'b' 'n'a'c' 't'a'h't' ''''''''''''' 'n'I''''','L'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''L'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'p'a'm''''''''''''''''''r'e'h'''''''''''''''''''''''''''''''''''''''''''''''''''''t''' ':'N'O'S'J' '''n'''''a'''''h'''''t''''' '''''e'''''v'''''i'''''s'''''s'''''e'''''r'''''p'''''x'''''e''''' '''''s'''''s'''''e'''''l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's'i'l' 'd'e'g'r'e'm' 'e'n'o' 'n'a'h't' 'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'t'o'-'d'e't'a'l'e'r':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'n'i' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'r'o'f' 's'm'h't'i'r'o'g'l'a' 'g'n'i't's'i'x'e'''''''''''''''''''''''''''''''''''''''' 'k'r'o'w' 'd'e't'a'l'e'r' 's's'u'c's'i'd' 'e'W'n'n''''''''''''''''g'n'i't'e'r'p'r'e't'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'s't's'i'l'-'o'w't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'e'k'i'l' 'm'e'h't' 'g'n'i'g'r'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''I'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'm''''s'h't'i'r'o'g'l'a' 'g'n'i't's'i'x'e' ','d'e't'a'e'r'c' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'r'a' 'y'e'k' 'e'm'a's' 'e'h't' 'h't'i'w' 'n'e'r'd'l'i'h'c' 'e'l'p'i't'l'u'm''''''''.'L'M'X' 'r'o'f' 's'm'h't'i'r'o'g'l'a' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'g'n'i't's'i'x'e' 'y'b' ''''''''e'n''''''''''''''''''''''''''''''''''o'n' 'e'l'p'i't'l'u'm' 'f'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m' 'n'a'h't' 'r'e'h't'a'r' 'y'e'k' 'e'm'a's' 'e'h't' 'h't'i'w' 'n'e'r'd'l'i'h'w' 'e't'a'c'i'l'p'u'd' 'e't'a'e'r'c' 'd'l'u'o'w' 'L'M'X' 'r'o'f' 's'm'h't'i'r'o'g'l'a' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'g'n'i't's'i'x'e'''''''''''''o'c' 'a' ':'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'r'o't'i'd'e' 'L'M'X' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'a' 'y'b' 'd'e'c'r'o'f'n'e' 'e'b' 't'o'n' 'd'l'u'o'w' 'd'n'a' 'f'l'e's't'i' 'L'M'X' 'f'o' 't'r'a'p' 't'o'n' 'e'r'a' 's'c'i't'n'a'm'e's' 'e's'e'h't' ','r'e'v'e'w'o'H' '.'y'e'k' 's'a''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' 'd'l'i'h'c'''''''''''''''''''''''''''''e't'u'b'i'r't't'a' 'n'a' 'r'o' 'e'm'a'n' 't'n'e'm'e'l'e' 'e'h't' 'g'n'i's'u' 'y'b' 'e'l'p'm'a'x'e' 'r'o'f' ',''e'h't'a'r' 's't's'i'l' 'e't'a'r'a'p'e's' 'o'w't' 'n'i' 't'l'u's'e'r' 'd'l'u'o'w' 't'i' 's'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'm'u'c'o'd' 'L'M'X' 'n'a' 'f'o' 'n'e'r'd'l'i'h'c' 'e'h't' 'o't' 's'c'i't'n'a'm'e's' 'e'k'i'l'-'p'a'm' 'h'c'a't't'a' 'y'a'm' 's'n'o'i't'a'c'i'l'p'p'a' 'e'm'o''''''''''''''''''''''''''''''.''''''''''''''''''''''''''''''''i'r't's'e'r' 'e'r'o'm' 's'i' 'L'M'X' ','d'r'a'g'e'r' 's'i'h't' 'n'I' ''''''''''''''''''' 's'i'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o's'a'e'r' 's'i'h't' 'r'o'f' 'L'M'X' 'n'i' 'r'u'c'c'o' 't'o'n'n'a'c' '}'s't's'i'l'-'o'w't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'e'l'p'm'a'x'e' 'e'h'T' 't'o' '' 'r'o' '''''''''''''''''S'n'n'.'s'p'a'm' 'n'i'h't'i'w' 's't's'i'l' 't'o'n' 't'u'b' ','s't's'i'l' 'n'i'h't'i'w' 's'p'a'm'''''' 's't'r'o'p'p'u's' 'l'M'X' ','s'u'h'T' '.'e'p'y't'a't'a'd' 'e'v'i't'i'm'i'r'p' 'a' 'e'b' 'y'l'n'o' 'n'a'c' 'e't'u'b'i'r't't'a' 'n'a' 'f'o' 'e'u'l'a'v' 'e'h't' '-'-' 's'e't'u'b'i'r't't'a' 'e'd'i's'n'i' 's't'n'e'm'e'l'e'''''''h'c' 'd'e't's'e'n' 'w'o'l'l'a' 't'o'n' 's'e'o'd' 'L'M'X'''''''''''''''''''L'M'X' 'n'i' ','r'e'v'e'w'o'H' '.'s'r'i'a'p' 'e'u'l'a'v'-'y'e'k' 'd'e'r'e'd'r'o'n'u' 'e'r'a' 't'n'e'm'e'l'e' 'n'a' 'f'o' 's'e't'u'b'i'r't't'a' 'e'h't' 'e'l'i'h'w' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''b'b'b'b'b'b'''''''''''''''''e'c'n'e'u'q'e's' 'd'e'r'e'd'r'o' 'n'a' 'm'r'o'f''''''''''''''''a' 'e'r'a' 't'n'e'm'e'l'e' 'n'a' 'f'o' 'n'e'r'd'l'i'h'c' 'e'h't' ':'d'r'a'g'e'r' 's'i'h't' 'n'i' 'd'e't'c'i'r't's'e'r' 'e'r'o'm' 's'i' 'L'M'X''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'s'e'c'n'e'u'q'e's' 'd'e'r'e'd'r'o' 'r'o'f' 's't's'i'l' 'd'n'a' ','s'r'i'a'p' 'e'u'l'a'v'-'y'e'k' 'd'e'r'e'd'r'o'n'u' 'r'o'f' 's'p'a'm' ':'s't'c'u'r't's'n'o'c' 'n'o'i't'c'e'l'l'o'c' 'o'w't' 's'a'h' 'N'O'S'J'n'n'.'t'h'g'i'l'h'g'i'h' 'd'l'u'o'h's' 'e'w' 't'a'h't' 'e'c'n'e'r'e'f'f'i'd' 't'n'a't'r'o'p'm'i' 'n'a' 's'i' 'e'r'e'h't' ','r'e'v'e'w'o'H' '.'r'a'l'i'm'i's' 'e't'i'u'q' 's'r'a'e'p'p'a' 'N'O'S'J' 'd'n'a' 'L'M'X' 'f'o' ' ','s'e'c'n'e'r'e'f'f'i'd' 'l'a'c'i't'c''''t'a't'n'y's' 'l'a'i'c'i'f'r'e'p'u's' 'e'h't' 's'e'd'i's'e'B''''''''''''''''''''''''''''e'r'u't'c'u'r't's' 'e'e'r't' 'e'h't' 'h'g'u'o'h't'l'A''''''''y'l's'u'o'i'v'e'r'p'''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''0''''.')'3'0'2' ','e'i'r'r'o'N' 'd'n'a' 't'a'n'g'I'(' ''''''' '.'d'e'i'd'u't's' 'y'l'e'v'i's'n'e't'x'e' 'n'e'e'b' 's'a'h' 's't'n'e'm'u'c'o'd' 'L'M'X' 'f'o' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'd'n'a' ','L'M'X' 's'i' 'N'O'S'J' 'o't' 'e'v'i't'a'n'r'e't'l'a' 'n'o'm'm'o'c' 't's'o'm' 'e'h'T'n'n'}'s'l'e'd'o'm' 'r'e'h't'o' 's'u's'r'e'v' 'N'O'S'J'{'n'o'i't'c'e's'b'u's''n'''''''''''''''''''''''''''''''''''''n'}'I'P'A' 'g'n'i't'i'd'e' 't'n'e'm'u'c'o'D'{'n'o'i't'c'e's'b'u's''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'r'e's'u' 'd'n'a' 's'r'e'p'o'l'e'v'e'd' 'n'o'i't'a'c'i'l'p'p'a' 'f'o' 's'n'o'i't'a't'c'e'p'x'e' 'e'h't' 's'e'h'c't'a'm' 'r'o'i'v'a'h'e'b' 's'i'h't' 'e'e'r'g'e'd' 't'a'h'w' 'o't' 'e'n'i'm'r'e't'e'd' 'o't' 'd'e'r'i'u'q'e'r' 'e'b' 'l'l'i'w' 'y'd'u't's' 'r'e'h't'r'u'F' '.'}'m'e't'i'-'o'd'o't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'w'o'h's'''''''''' 'n'i' 'r'o'i'v'a'h'e'b' 'e'h't' 's't'i'b'i'h'x'e' 't'i' 'o's' 'd'n'a' ','t'u'p'n'i' 'r'e's'u''''o' 'l'l'a' 's'e'v'r'e's'e'r'p' 'r'e'p'a'p' 's'i'h't' 'n'i' 'm'h't'i'r'o'g'l'a' 'e'h'T''''S'n'n'.'d'l'e'i'f' '''''e'n'o'd'`'`' 'a' 'd'n'a' '''''e'l't'i't'`'`' 'a' 'h't'o'b' 's'a'h' 'm'e't'i' 'o'd'-'o't' 'a' 't'a'h't' 'a'm'e'h'c's' 't'i'c'i'l'p'm'i' 'e'h't' 'e'v'r'e's'e'r'p' 's'u'h't' 'd'n'a' ','s'e't'a'd'p'u' 't'n'e'r'r'u'c'n'o'c' 'e'h't' 'f'o' 'e'n'o' 'd'r'a'c's'i'd' 'o't' 'e'l'b'a'r'i's'e'd' 'e'r'o'm' 'e'b' 'y'a'm' 't'i' 'e'l'p'm'a'x'e' 's'i'h't' 'n'I' '.'s'r'e's'u' 'o't' 'g'n'i's'i'r'p'r'u's' 's'p'a'h'r'e'p' 's'i' 't'i' 't'u'b' ','}'e'v'o'm'e'r'-'p'a'm':'g'i'f'{'f'e'r''''l''~'e'r'u'g'i'F' 'n'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'l'p'm'a'x'e' 'e'h't' 'h't'i'w' 't'n'e't's'i's'n'o'c' 's'i' 'r'o'i'v'a'h'e'b' 's'i'h'T' '.')'m'e't'i' 't's'i'l' 'e'h't' 'g'n'i't'e'l'e'd' 'f'o' 't'r'a'p' 's'a' 'd'e't'e'l'e'd' 's'a'w' 'e'l't'i't' 'e'h't' 'e'c'n'i's'(' 'e'l't'i't' 'a' 't'u'o'h't'i'w' 'm'e't'i' ''''-'o'd'-'o't' 'a' 'o't' 'g'n'i'd'a'e'l' ',''''''' '.'a'c'i'l'p'e'r' 't'f'e'l' 'e'h't' 'n'o' 'd'e't'c'e'r'r'u's'e'r' 'e'b' 'o't' 'm'e't'i' 't's'i'l' 'e'h't' 's'e's'u'a'c' 'y'l'e'v'i't'c'e'f'f'e' '''''e'n'o'd'`'`' 'y'e'k' 'p'a'm' 'e'h't' 'f'o' 'e't'a'd'p'u' 'e'h't' ','d'e'g'r'e'm' 'e'r'a' 's'e'g'n'a'h'c' 'e'h't' 's'A' '.'e'n'o'd' 's'a' 'm'e't'i' 'e'm'a's' 'e'h't' 's'k'r'a'm' 'y'l't'n'e'r'r'u'c'n'o'c' 'a'c'i'l'p'e'r' 'r'e'h't'o'n'a' 'e'l'i'h'w' ','t's'i'l' 'e'h't' 'm'o'r'f' 'm'e't'i' 'o'd'-'o't' 'a' 's'e'v'o'm'e'r' 'a'c'i'l'p'e'r' 'e'n'o' ','n'o'i't'a'c'i'l'p'p'a' 't's'i'l' 'o'd'-'o't' 'a''''''''''''' 'o't''''''''''''' 'o'T' 'a' 'n'I' '.'t'u'p'n'i' 'r'e's'u' 'l'l'a' 'g'n'i'v'r'e's'e'r'p' 'f'o' 'e'l'p'i'c'n'i'r'p' 'e'h't' 'f'o' 'n'o'i't'a't'i'm'i'l' 'a' 's'w'o'h's' '}'m'e't'i'-'o'd'o't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'e'l'p'm'a'x'e' 'l'a'n'i'f' 'r'u'O'n'n''r'e's'e'r'p' 'e'W' '.'o's'l'a' '''' 'd'e'g'r'e'm' 'e'b' 'o't' 'd'e'e'n' 's't's'i'l' 'e'h't' ','d'e'g'r'e'm' 'e'r'a' 's'a'c'i'l'p'e'r' 'e'h't' 'n'e'h'W' '.'t's'i'l' 'e'h't' 'o't' 's'm'e't'i' 'g'n'i'd'd'a' 'd'n'a' ','''''y'u'b'`'`' 'y'e'k'''''''''''''' 'd'e'r'e'd'r'o''''''''''''''''''''''''' 'p'a'm' 'e'm'a's' 'e'h't' 'r'e'd'n'u' 't's'i'l' 'w'e'n' 'a' 'g'n'i't'a'e'r'c' 'y'l't'n'e'r'r'u'c'n'o'c' 's'a'c'i'l'p'e'r' 'o'w't' 's'w'o'h's' '}'s't's'i'l'-'o'w't':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'e'l'p'm'a'x'e' 'e'h'T'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''0'.'3''''4'''''''''''''''''''''' '''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''5'.'1'''''''''''''''''''''''''''''''''''''''''''''''''''''5'.'1'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''0'.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''0'.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';')'2't'f'e'l'(' 'o't' ')'1't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'h'g'i'r'(' 'o't' ' ')'1't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'h'g'i'r'(' '}';'d'l'e'i'y' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'1't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'f'e'l'(''''[' '}';'d'l'e'i'y' 'e'z'i's'e't'o'n't'o'o'f''{' ' ']'t'f'e'l'[' 'e'd'o'n' 'o't' ' ')'1't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'1''''2't'h'g'i'r'(' '}';'e'u'r't' '=':' ']'''''e'n'o'd'`'`'['t'x'e'n'.'r'e't'i'.'''']']'''''o'd'o't'`'`'['c'o'd' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'p'2'1'='p'e's'x' 'r'e'n'n'i','t'h'g'i'r'[' 'e'd'o'n' 'o't' ' ')'t'r'a't's'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'1't'f'e'l'(' '}';'e't'e'l'e'd'.'t'x'e'n'.'r'e't'i'.']'''''o'd'o't'`'`'['c'o'd' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'p'2'1'='p'e's'x' 'r'e'n'n'i' ','t'f'e'l'[' 'e'd'o'n' 'o't' ' ')'t'r'a't's'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n'''''''''''''''''''''''''''''''''''';'}'|'}']'}'e'u'r't' ':'''e'n'o'd'''{''''''[' ':'''o'd'o't'''{'|'b'r'e'v''{' ')'0','8'(' 't'a' ')'2't'h'g'i'r'(' 'e'd'o'n''n';'}'|'}']'}'e'u'r't' ':'''e'n'o'd'''{'[' ':'''o'd'o't'''{'''''''''['|'b'r'e'v''{' ')'0','0'(' 't'a' ' ')'2't'f'e'l'(' 'e'd'o'n''n';'}'|'}']'}'e'u'r't' ':'''e'n'o'd''' ','''k'l'i'm' 'y'u'b''' ':'''e'l't'i't'''{'[' ':'''o'd'o't'''{'|'b'r'e'v''{' ')'2','8'(' 't'a' ')'1't'h'g'i'r'(' 'e'd'o'n''n';'}'|'}']'[' ':'''o'd'o't'''{'|'b'r'e'v''{' ')'2','0'(' 't'a' ' ')'1't'f'e'l'(' 'e'd'o'n''n'''''''}']'}'e's'l'a'f' ':'''''':'e'n'o'd''' ','''k'l'i'm' 'y'u'b''':'''e'l't'i''''''''''t'x'e't'''{'[':'''o'd'o't'''{'''';'}'|'|'b'r'e'v''{' ')'5','4'(' 't'a' ' ')'t'r'a't's'(' 'e'd'o'n''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'m'e't'i'-'o'd'o't':'g'i'f'{'l'e'b'a'l''}'s't'n'e't'n'o'c' 's't'i' 's'e't'a'd'p'u' 'y'l't'n'e'r'r'u'c'n'o'c' 'r'e'h't'o'n'a' 'e'l'i'h'w' ','t'n'e'm'e'l'e' 't's'i'l' 'a' 's'e'v'o'm'e'r' 'a'c'i'l'p'e'r' 'e'n'O'{'n'o'i''''u't'p'a'c''n'}'e'r'u't'c'i'p'z'k'i't'{'d'n'e''n']'o't'u'a'['}'e'r'u't'c'i'p'z'k'i't'{'n'i'g'e'b''n'g'n'i'r'e't'n'e'c''n'''''''''''''''}'''']'*'e'r'u'g'i'f'{'d'n'e''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b''n'n'' '3't'h'g'i'r'(' ']'''' '>'-','k'c'i'h't'[' 'w'a'r'd''n';')'4''''5't'h'g'i'r'(' '''o'''''t''''' ''''')'''''3''''''''''''''''''''''}'f'o'o'r'p':'c'e's'{'l'e'b'a'l''t'''f''''''''''['x'i'd'n'e'p'p'a'''e'''''l'''''(''''' ''']'>'-','k'c'i'h't'['']''' 'w'a'r'd''n';')'4't'h'g'i'r'(' '}';'d'l'e'i'y' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'3't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'4''''5't'f'e'l'(' '}'''']';'d'l'e'i'y' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'f'e'l'[' 'e'd'o'n' 'o't' ')'3't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'3't'h'g'i'r'(' '}';')'''''r'u'o'l'f'`'`'('t'r'e's'n'i'.'k'l'i'm' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'2't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'3't'f'e'l'(' '}';')'''''m'a'h'`'`'('t'r'e's'n'i'.'s'g'g'e' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'f'e'l'[' 'e'd'o'n' 'o't' ')'2't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'h'g'i'r'(' '}';')'''''k'l'i'm'`'`'('t'r'e's'n'i'.'r'e't'i'.']'''''y'u'b'`'`'['c'o'd' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'1't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'f'e'l'(' '}';')'''''s'g'g'e'`'`'('t'r'e's'n'i'.'r'e't'i'.']'''''y'u'b'`'`'['c'o'd' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'f'e'l'[' 'e'd'o'n' 'o't' ')'1't'f'e'l'(' ']'''' '>'-','k'c'i'h't'[' 'w'a'r'd''n''''''''''''''''''';')'1't'h'g'i'r'(' '}';']'[' '=':' ']'''''y'u'b'`'`'['c'o'd' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'p'2'1'='p'e's' 'r'e'n'n'i'''' ','t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'t'r'a't's'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'1't'f'e'l'(' '}';']'[' '=':' ']'''''y'u'b'`'`'['c'o'd' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'p'2'1'='p'e's' 'r'e'n'n'i','t'f'e'l'[' 'e'd'o'n' 'o't' ')'t'r'a't's'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';'}'|'}']'''r'u'o'l'f''','''k'l'i'm''','''m'a'h''','''s'g'g'e'''[':'''y'u'b'''{'|'b'r'e'v''{' ')'0','8'(' 't'a' ')'4't'h'g'i'r'(' 'e'd'o'n''n';'}'|'}']'''r'u'o'l'f''','''k'l'i'm''','''m'a'h''','''s'g'g'e'''[':'''y'u'b'''{'|'b'r'e'v''{'''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'd'o'n'' ' ' ' 'n'{' ')'0','0'(' 't'a' ')'4't'f'e'l'(' ']'x'i''''x'r't'a'm'[' 'e'd'o'n''n';'}'|'}']'''r'u'o'l'f''','''k'l'i'm'''[':'''y'u'b'''{'|'b'r'e'v''{' ')'1','8'(' 't'a' ')'3't'h'g'i'r'(' 'e'd'o'n''n';'}'|''i'm'''''''''''''''''''''''''''''''}']'''m'a'h'''[':'''y'u'b'''{'|'b'r'e'v''{' ''')'2','8' 't'a' ')'2't'h'g'i'r'(' 'e'd'o'n''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}'|'}']'''k'l'i'm''','''s'g'g'e'''[':'''d'o'o'f'''{'|'b'r'e'v''{' ')'1','0'(' 't'a' ' ')'3't'f'e'l'(' 'e'd'o'n''n';'}'|'}']'''s'g'g'e'''[':'''d'o'o'f'''{'|'b'r'e'v''{' ')'2','0'(' 't'a' ' ')'2't'f'e'l'(' 'e'd'o'n''n';'}'|'}']'[''''p':'''d'o'o'f'''{'|'b'r'e'v''{' ')'3','8'(' 't'a' ''''')'1't'h'g'i'r'(' 'e'd'o'n''n';'}'|''''''}']'[':'''d'o'o'f'''{'|'b'r'e'v''{' ')'3','0'(' 't'a' ')'1't'f'e'l'(' 'e'd'o'n''n';'}'|'}'{'|'b'r'e'v''{' ')'4','4'(' 't'a' ')'t'r'a't's'(' 'e'd'o'n''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'*'e'r'u'g'i'f'{'d'n'e''n'}'s't's'i'l'-'o'w't':'g'i'f'{'l'e'b'a'l''}'y'e'k' 'p'a'm' 'e'm'a's' 'e'h't' 'r'e'd'n'u' 's't's'i'l' 'd'e'r'e'd'r'o'''''''''' 'n'a' 'e't'a'e'r'c' 'y'l't'n'e'r'r'u'c'n'o'c' 's'a'c'i'l'p'e'r' 'o'w'T'{'n'o'i't'p'a'c''n'}'e'r'u't'c'i'p'z'k'i't'{'d'n'e''n']'o't'u'a'['}'e'r'u't'c'i'p'z'k'i't'{'n'i'g'e'b''n'g'n'i'r'e't'n'e'c''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b'''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'e'v'i'a'n' 'A'n'n'.'d'e'd'd'a' 'y'l't'i'c'i'l'p'x'e' 'e'r'e'w' 'y'e'h't' 'e'c'n'i's' ','t'n'e's'e'r'p' 'e'b' 't's'u'm' '''''n'e'e'r'g'`'`' 'd'n'a' '''''''''''`'`'d'e'r'`'`' 'e'l'i'h'w' ','p'a'm' 'e'h't' 't'u'o' 'g'n'i'k'n'a'l'b' 'y'b' 'd'e'v'o'm'e'r' 's'a'w' 't'i' 'e'c'n'i's' ','p'a'm' 'l'a'n'i'f' 'e'h't' 'm'o'r'f' 't'n'e's'b'a' 'e'b' 't's'u'm' '''''e'u'l'b'`'`' ':'d'e'v'r'e's'e'r'p' 'e'b' 't's'u'm' 's'e'g'n'a'h'c' 'l'l'a' ','s't'i'd'e' 'r'i'e'h't' 'e'g'r'e'm' 's'a'c'i'l'p'e'r' 'e'h't' 's'A' '.'''''n'e'e'r'g'`'`' 's'd'd'a' 'n'e'h't' 'd'n'a' ','''' 's'r'o'l'o'c' 'f'o' 'p'a'm' 'e'r'i't'n'e' 'e'h't' 't'u'o' 's'k'n'a'l'b' 't's'r'i'f' 't'n'e'i'l'c' 'r'e'h't'o'n'a' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'l'i'h'w'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'{'}'s'e'c'n'e'r'e'f'e'r'{'y'h'p'a'r'g'o'i'l'b'i'b''n'}'n'a'r't'E'E'E'I'{'e'l'y't's'y'h'p'a'r'g'o'i'l'b'i'b''n'n'.'y'n'a'p'm'o''''''''''''''''''''''''''''''''''''''''''''n'}'e'c'n'e'g'r'e'v'n'o'c' 'f'o' 'f'o'o'r'P'{'n'o'i't'c'e's''n's'e'c'i'd'n'e'p'p'a''C' 'g'n'i'e'o'B' 'e'h'T' 'm'o'r'f' 't'n'a'r'g' 'a' 'y'b' 'd'e't'r'o'p'p'u's' 's'a'w' 'h'c'r'a'e's'e'r' 's'i'h'T'n'n'}'s't'n'e'm'e'g'd'e'l'w'o'n'k'c'A'{'*'n'o'i't'c'e's''n'n'n'.'n'o'i's'u'l'c'n'o'c' 'O'D'O'T'n'n'}'n'o'i's'u'l'c'n'o'C'{'n'o'i't'c'e's''n'n'n' ','s'r'o'l'o'c' 'f'o' 'p'a'm' 'a' 'o't' '''''d'e'r'`'`' 's'd'd'a' 'a'c'i'l'p'e'r' 'e'n'o' ','e'r'e'H' '.'}'e'v'o'm'e'r'-'p'a'm':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'e'v'i'g' 's'i' 'e'l'p'm'a'x'e' 'r'e'h't'o'n'A'n'n''' ''')'2't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'3't'h'g'i'r'(' 'o't' ')'1't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'3't'h'g'i'r'(' '}''''n'''']';'d'l'e'i'y' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'2''''1't'h'g'i'r'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'2't'f'e'l'(' '}'''']';'d'l'e'i'y' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'f'e'l'''''''f'e'[' 'e'd'o'n' 'o't' ')'1't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'h'g'i'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';')'2't'h'g'i'r'(' '}';'''''0'0'f'f'0'0'#''''''`'`' '=':''''''' '=' ']'''''n'e'e'r'g'`'`'[''''.']'''''s'r'o'l'o'c'`'`'['c'o'd' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'1't'f'e'l'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n';')'1't'h'g'i'r'(' '}';'e't'e'l'e'd'.']'''''s'r'o'l'o'c'`'`'['c'o'd' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'p'2'1'='p'e's' 'r'e'n'n'i','t'h'g'i'r'[' 'e'd'o'n' 'o't' ')'t'r'a't's'(' ']'>''''.'-','k'c'i'h't'[' 'w'a'r'd''n'd''n'e'''''''|'b'r'e'v''{''d'o'n''''' ''''' ''''''%'''''''''''''''''''''''''''''''''''''''%''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''%'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'f'e'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'m'e'1'{'e'c'a'p's'h'''''''''''''d'a'u'q''''''''''''''''''''''''''''''''''}'m'e'1'{'e'c'a'p's'h''''''''~'~''''';'''''0'0'0'0'f'f'#''`'`' '=':' ']'''''d'e'r'`'`'[''''''''''''''''''''''''''''''''''''''''''''''''''''''';')'1't'f'e'l'(' '}']'''''s'r'o'l'o'c'`'`'['c'o'd'''''''''''''''''''''''''''''''''''''['}'c'o'd'{'t'x'e't''$' 'e'z'i's'e't'o'n't'o'o'f''{' ']'d'e'p'o'l's','e'v'o'b'a'[' 'e'd'o'n' 'o't' ')'t'r'a't's'(' ']'>'-','k'c'i'h't'[' 'w'a'r'd''n''''''''''''' ''''''''''''''''''''''''''''%''';'''n''}'n';'}'|'}'}'''0'0'f'f'0'0'#''' ':'''n'e'e'r'g'''|'b'r'e'v''{' 'e'd'o'n'' ' ' ' 'n';'}'|''''}','''0'0'0'0'f'f'#''' ':'''d'e'r'''{' ':'''s'r'o'l'o'c'''{'|'b'r'e'v''{' 'e'd'o'n'' ' ' ' 'n'{' ')'0'''' ','8'(' 't'a' ')'3't'h'g'i'r'(' ']'x'i'r't'a'm'[' 'e'd'o'n''n';'}'n' ' ' 'n';'}'|'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}'|'}'}'''0'0'f'f'0'0'#''' ':'''n'e'e'r'g''' ','''0'0'0'0'f'f'#''' ':'''d'e'r'''{' ':'''s'r'o'l'o'c'''{'|'b'r'e'v''{' ')'0','0'(' 't'a' ')'2't'f'e'l'(' 'e'd'o'n''n'''''''''''''''''''''';'}'|'}'}'''0'0'f'f'0'0'#''' ':'''n'e'e'r'g'''{'''''''#''' ':'''s'r'o'l'o'c'''{'|'b'r'e'v''{' ')'2','0'1'(' 't'a' ')'2't'h'g'i'r'(' 'e'd'o'n''n';'}'|'}'{'|'b'r'e'v''{' ')'3''''2','0'1'(' 't'a' ')'1't'h'g'i'r'(' 'e'd'o'n''n'0'0'0'0'f'f'#''' ':'''''':'d'e'r''''''{'|'b'r'e'v'''''#''' ':'''e'u'l'b''''''''''d'e'r'''{' ':'''s'r'o'l'o'c'''{'|'b'r'e'v''''''';''''''''''''''''';''b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a''n''''''''{' 'e'd'o'n''[' ''''''''''''''''''' ' ' '' 'n''''''''}'''''''''{'e'd'o'n'n''''''''''''''''''''}'''{'x'o'b'm''''''''''''''''''''' ''' '''''''''''''''''''''''',''''''''''|'''''''''''''''''''}'|'}'}''''''''0'0'0'0'f'f'#''' ':'''d'e'r'''{'b'r'e'v'' ''' ''''';'}'|'''f'f'0'0'0'0'#''' ':'''e'u'l'b'''{' ':'''s'r'o'l'o'c'''{'|'b'r'e'v''{' ')'2','0'(' 't'a''' ' ')'1't'f'e'l'(' 'e'd'o'n''n';'}'|'}'}'''f'f'0'0'0'0'#''' ':'''e'u'l'b'''{' ':'''s'r'o'l'o'c'''{'|'b'r'e'v''{' ')'4','5'(' 't'a' ')'t'r'a't's'(' 'e'd'o'n''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'v'o'm'e'r'-'p'a'm':'g'i'f'{'l'e'b'a'l''}'d'e'v'o'm'e'r' 's'i' 'p'a'm' 'e'r'i't'n'e' 'e'h't' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'l'i'h'w' 'p'a'm' 'd'e't's'e'n' 'a' 'f'o' 's't'n'e't'n'o'c' 'e'h't' 'g'n'i'y'f'i'd'o'M''''''''''''''''''''''''''''''''''''''''o'm' 't'n'e'r'r'u'c'n'o'C'{'n'o'i't'p'a'c''n'}'e'r'u't'c'i'p'z'k'i't'{'d'n'e''n']'o't'u'a'['}'e'r'u't'c'i'p'z'k'i't'{'n'i'g'e'b''n'g'n'i'r'e't'n'e'c''n'''''''''''''''}'*'e'r'u'g'i'f'{'d'n'e''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b'''''''n'n'''''''''''''''''''''''''''''''''''''''''''''.'s'e'u'l'a'v' 'n'e't't'i'r'w' 'y'l't'n'e'r'r'u'c'n'o'c' 'f'o' 't'e's' 'a' 'n'r'u't'e'r' 'y'a'm' 'r'e't's'i'g'e'r' 'e'h't' 'g'n'i'd'a'e'r''''''''''''''''''''''''''''''''''''' 'e'v'a'h' 'y'a'm' 't'i' ','r'e't's'i'g'e'r' 'e'h't' 'o't' 'e'u'l'a'v' 'e'l'g'n'i's' ''''s'a' 'n'g'i's's'a' 'y'l'n'o' 'n'a'c' 'a'c'i'l'p'e'r' 'a' 'h'g'u'o'h't'l'a' ':'}'r'e't's'i'g'e'r' 'e'u'l'a'v'-'i't'l'u'm'{'h'p'm'e'' 'a' 's'a' 'n'w'o'n'k' 's'i' ''''s'e'p'y't'a't'a'd' 's'i'h'T' '.'s'e't'a'd'p'u' 't'n'e'r'r'u'c'n'o'c' 'h't'o'b' 'e'v'r'e's'e'r'p' 't's'u'm' 'm'e't's'y's' 'e'h't' ','d'e'g'r'e'm' 'e'b' 'y'l'l'u'f'g'n'i'n'a'e'm' 't'o'n'n'a'c' '''''C'`'`' 'd'n'a' '''''B'`'`' 's'g'n'i'r't's' 'e'h't' 'd'n'a' ','s't'i'd'e' 'e'h't' 'f'o' 'e'n'o' 'd'r'a'c's'i'd' 'y'l'p'm'i's' 'o't' 't'n'a'w' 't'o'n' 'o'd'''''''''''''''''''''''''''''''''''''''' 'e'h't' 't'u'o' 'e'l'u'r' 'e'w' 'e'c'n'i'S' '.'t'c'i'l'f'n'o'c' 'e'h't' 't'c'e't'e'd'''''''''''''''''''''''''' 'y'e'h't' ','s't'i'd'e' 'e'g'n'a'h'c'x'e' 'y'l't'n'e'u'q'e's'b'u's' 's'a'c'i'l'p'e'r' 'e'h't' 's'A' '.'''''C'`'`' 'o't' 't'i' 's't'e's' 'y'l't'n'e'r'r'u'c'n'o'c' 'r'e'h't'o'n'a' 'e'l'i'h'w' ','''''B'`'`' 'o't' 'y'e'k' 'e'h't' 'f'o' 'e'u'l'a'v' 'e'h't' 's't'e's' 'a'c'i'l'p'e'r' 'e'n'o' ','''''A'`'`' 'o't' '''''y'e'k'`'`'''''''''''' 's'p'a'm' 't'a'h't' 't'n'e'm'u'c'o'd' 'A' '.'}'n'g'i's's'a'-'r'e't's'i'g'e'r':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'w'o'h's' 's'i' 'e'l'p'm'a'x'e' 't's'r'i'f' 'r'u'O'n'n'.'e's'i'r'a' 't'a'h't' 's'e'i't'e'l't'b'u's' 'e'h't' 'f'o' 'e'm'o's' 'e't'a'r't's'u'l'l'i' 'o't' 'r'e'd'r'o' 'n'i' ','''' 't'n'e'm'u'c'o'd' 'N'O'S'J' 'a' 'n'i' 'r'u'c'c'o' 'y'a'm' 't'a'h't' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'f'o' 's'e'l'p'm'a'x'e' 'e'm'o's' 'e'n'i'm'a'x'e' 'l'l'i'w' 'e'w' 'n'o'i't'c'e's' 's'i'h't' 'n'I'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'''''''''''''''''''''''}'b'j'3'8'9'1':'r''''''':'R'J'r'e'k'r'a'P'{'e't'i'c''~'''''''''''''''''''''''''''''''}'x'f'2'1'0'2':'a'c'i'u'g'e'r'P'{'e't'i'c''~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o' ','}'e'u'9'8'9'1':'s'i'l'l'E'{'e't'i'c''~'s'r'o't'c'e'v' 'e't'a't's' ',''''''n'''i'w'o'l'l'o'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s's'e'n't'c'e'r'r'o'c' 's't'i' 'e'v'o'r'p' 'd'n'a' 'e'p'y't'a't'a'd''''''''''''''''''''''''''''''' 'e'l'b'a't'i'd'e' 'y'l'e'v'i't'a'''''''a'e'r'o'b'a'l'l'o'c' 'r'u'o' 'f'o' 's'c'i't'n'a'm'e's' 'l'a'm'r'o'f' 'e'd'i'v'o'r'p' 'e'w' 'n'o'i't'c'e's' 't'x'e'n' 'e'h't' 'n'I' '''.'e'l'b'a't'i'd'e' 'y'l'e'v'i't'a'r'o'b'a'l'l'o'c' 'e'd'a'm' 'e'r'a' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'd'e't's'e'n' 'n'e'h'w' 'r'u'c'c'o' 't'a'h't' 'm'e'l'b'o'r'p' 'e'h't' 'f'o' 'e'm'o's' 'e't'a'r't's'n'o'm'e'd' 'd'n'a' ','e'l'p'm'a'x'e' 'y'b' 'h'c'a'o'r'p'p'a' 'r'u'o' 'e'n'i'l't'u'o' 'e'w' 'n'o'i't'c'e's' 's'i'h't' 'n'I''''''''''''''''''''''''''''''''''''''''s'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'o't''''d'u'a'['''''''4''''5''''''''''''' '''''''4'''''''''''''y'''e''5'.'''''''3'.''k'''1''''''''''''''''''''''''''''5'.''''''''';''''''''y'1''''''e'k''''''''''''''''''1''2'''''')'''t'a'''''''y'''e'k''''''''''''''''''''''''t'f'e'l'('''''''''y'''e'k'''''''''','k'c'i'h't''''h''''''''''c'i't'''''''''''2'''''''1'''''''''''''''''''''''''y'''e'''o't'''''''''''''''''''''''''''''''','k'c'i'h't''' 'e'z'i's'e't'o'n't'o'o'f''''d'e'p'o'l's','']'e'v'o'b'a'[' ''''''''k'''''''''''$''''t'x'e't''''''''''''''','k'c'i'h't'''''''''''''' 'e'z'i's'e't'o'n't'o'o'f'''''''''h'''t'a'''''','k'c'i'h't''''''''''''''''d'e'p'''''','k'c'i'h't''o'l's',''{'t'x''''''''''','k'c'i'h't'''''''''''''''''''''''''''''''''}';'d'l'e'i'y' 'e'z'i's'e't'o''o't''''''n't'o'o'f''{' ']'t'f'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}';'d'l'e'i'y' 'e'z'i's'e't'o'''''''''''''''''''''''''''''''''''''''}';'d'l'e'i'y' 'e'z'i's'e't'o'n't'o'o'f''{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't'''n'''t'o'o'f''{' ']'t'h'g'i'r'[' 'e'd'o'n' 'o't''''''l'[' 'e'd'o'n' 'o't'''''''''''''']'e'v'o'b'a'[' 'e'}''''''''''{'t'x''}'e't''o't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}';'''''C'`'`'{'t'x'e't'' '=':' ']'}'''''y'e'k'`'`'{'t'x'e't''['}'c'o'd'{'t'x'e't''$'{' 'e'd'o'n' 'e'g'd'e'''''''t'''}''$'''m''''''''''''''''''''''''''''''''''''''''''''}'';'''''B'`'`' '=':' ']'''''y'e'k'`'`'['c'o'd'{'f's't'x'e't'''''''''''''''''''e'd'o'n' 'e'g'd'e' ''''''''''''''''''''}'x'{' 'e'g'd'e'''''''''''''''''''''''''''''''''''''''''''''''''e'd'o'n' '}'x'{' 'e'd'o'n' 'o't'''''''''''''''';'''''' 'w''o't''''''a'r'd'''''''']'>'-'['''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'}'|'}'}'''C''','''B'''{' ''1':'''e'l't'i't'''{'|'b'r'e'v'''1'{' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';')'2't'h'g'i'r'(' '-'-' ')'1''''2't'h'g'i'r'(' ']'>'-'[' 'w'a'r'd''n';')'2't'f'e'l'(' '-'-' ')'1't'h'g'i'r'(' ']'>'-'[' 'w'a'r'd''n';')'2'''''''2'y't'h'g'i'r'(''''(' '-'-' ')'1't'f'e'l'(' ']'>'-''''p'[' 'w'a'r'd''n';')'2't'f'e'l'(' '-'-' ')'1't'f'e'l'''''(' ']'>'-'[' 'w'a'r'd''n')'0','4'(' 't'a' ')'2't'h'g'i'r'(' 'e'd'o'n''n';'}'|'}'}'''C''','''B'''{' ''''''''''{' ':':'''e'l't'i't'''{'|'b'r'e'v''{' ')'0'''')'''''''0' ','0'(' 't'a' ' ')'2't'f'e'l'(' 'e'd'o'n''n'''''''''''''''''''''';'}'|'}'''C''' ':'''e'l't'i't'''''''''''''''''''''''''''''''';')'t'h'g'i'r'(' '-'-' ')'t'r'a't's'(' ']'>'-'[' 'w'a'r'd''n'''{'|'b'r'e'v''{' ')'1','4'(' 't'a' ')'t'h'g'i'r'(' 'e'd'o'n''n''''''''''''''''''''''''''''''''''''''''''''''''';')'t'f'e'l' 'r'e't'n'e'(' '-'-' ')'t'r'a't's'(' ']'>'-'[' 'w'a'r'd''n'' 'e'd'o'n''''''''''')'2','2'(' 't'a' ')'t'r'a't's'(' '''''''''''''''''''''']'t'r'a't's'['e'd'o'n''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i'r'e't'n'e'c''n'''''''''''2''''''''''''''''''''''''''''|''' ' 'n'''''' '1'''}'''A''' '''''''''''''''''''''|'}'''B'''''':' ':'''e'l't'i't'''{'|'b'r'e'v''''''':'''''''''e'l't'i't'''{'|'b'r'e'v'''''v'''''''''''''''''''''''''0'''' '''''''''''''''''''''''''''''''''''''''';'}'d'l'r'o'W'{' 'e'd'o'n' ')''''2' ','0'''(' '-'-' '}'o'l'l'e'H'{' 'e'd'o'n' ')'0','2'('w'a'r'd''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'n'g'i's's'a'-'r'e't's'i'g'e'r':'g'i'f'{''''['l'e'b'a'l''}'r'e't's'i'g'e'r' 'a' 'o't' 't'n'e'm'n'g'i's's'a' 't'n'e'r'r'u'c'n'o'C'{'n'o'i't'p'a'c''n'''' '}'e'r'u't'c'i'p'z'k'i't'{'d'n'e''n'}'e'r'u't'c'i'p'z'k'i't'{'n'i'g'e'b''n''''''''''''''''''''}'*'e'r'u'g'i'f'{'d'n'e''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b''n'n'}'s'e'l'p'm'a'x'e' 'g'n'i't'i'd'e' 't'n'e'r'r'u'c'n'o'C'{'n'o'i't'c'e's'b'u's''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'u't'c'u'r't's' 'a't'a'd' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'g'n'i's'o'p'm'o'C''''T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'p'y't'a't'a'D' 'N'O'S'J' 'd'e't'a'c'i'l'p'e'R' 'e'e'r'F'-'t'c'i'l'f'n'o'C'''''''''''''='m'o'c' 'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''%''''''''e'''''l'''''u'''''r''''' '''''e'''''c'''''n'''''e'''''r'''''c''''''''e'''''f'''''n'''''i''''' '''n'''''''''''''''''''''''''';'''''''''''''''';'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'u's's'i' '')'h'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'a'M' 'l'l'u'B'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't''''':''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''K' '.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'a'm' 'e'h't' 'm'o'r'f' 'd'e'v'o'm'e'r' 'd'n'a' 'd'e'd'd'a' 'e'b' 'n'a'c' 's'g'n'i'p'p'a'm' 'e'u'l'a'v'-'y'e'k' 'd'n'a' ','e'l'b'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s't'n'e'm'e'l'e' 't'''''s'''''i'''''l''''' '''''g'''''n'''''i'''''t'''''e'''''l'''''e'''''d''''' '''''r'''''o''''' '''''g'''''n'''''i'''''t'''''r'''''e'''''s'''''''''''''''''''''''''''''''''''''''''''n'''''i''''' '''''y''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'i's'a'e' ''''''''''''''''''o''' 'o't' 's'e'z'i'l'a'r'e'n'e'g' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y't'i'v'e'r'b' 'f'o' 's't's'e'r'e't'n'i' 'e'h't' 'n'i' 'l'i'a't'e'd' 'n'i' 't'u'o' 'l'l'e'p's' 't'o'n' 'o'd' 'e'w' 'h'c'i'h'w' ','''o's'l'a' 'h'c'a'o'r'p'p'a' 'r'u'O''''''''''''''''''''''''''''''''''''''''''''''''''''' 's't'e's' 'r'o' 's'r'e't'n'u'o'c' 's'a' 'h'c'u's' 's'e'p'y't'a'''['''[''''']'''''''y'e'k''''''''''''|'''r't's'''t't'''''''|'b'r'e'v'''''''''''''''''''''t''''''''''''']''''a'''''d''''' '''''d'''''e'''''t'a'c'i'l'p'e'r' 'r'e'h't'O' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '}'s'y'e'k'{'f's't'x'e't''.'R'P'X'E' '&' '$'|'$' '&''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m''''''r'e'b'm'u'N''''r'''''''''''''''''''''''''''''''.'w'o'l'e'b' 'd'e'''''''''''''''''''''''''''''''''''''''|'''''''''['''''''''']''''''''''''|'''''' 'l'l'u'n'|'b'''r'''''e'''''v'' '''''''$'|'$' 'e's'l'a'f'|'b'r'e'v'' '$'|'$' '|'e'u'r't'|'b'r'e'v'' '&' '$'|'$' '&'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'r'e'e'p' 'r'e'h't'o' 'o't' 'g'n'i't's'a'c'd'a'o'r'b' 'r'o'f' 'd'e'u'e'u'q'n'e' 'o's'l'a' 'd'n'a' ','t'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'y'p'o'c' 'l'a'c'o'l' 'e'h't' 'o't' 'd'e'i'l'p'p'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'e's'o'h'T' '.'n'o'i't'a't'u'm' 'e'h't' 'g'n'i'b'i'r'c's'e'd' '}'s'n'o'i't'a'r'e'p'o'{'h'p'm'e'' 'g'n'i'c'u'd'o'r'p' 'f'o' 't'c'e'f'f'e' 'e'h't' 's'a'h' 't'n'e'm'u'c'o'd' 'e'h't' 'g'n'i'y'f'i'd'o'm' 't'u'b' ','s't'c'e'f'f'e'-'e'd'i's' 'o'n' 's'a'h' 's'e'i'r'e'u'q' 'y'l'n'o'-'d'a'e'r' 'g'n'i'm'r'o'f'r'e'P' '.'d'e'i'f'i'd''''t'o'm' 'd'n'a' 'd'e'i'r'e'u'q' 'e'b' 'o't' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'y'p'o'c' 'l'a'c'o'l' 's'''r'e'e'p' 't'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'a'h't' 'f'o' 'e't'a't's' 'l'a'c'o'l' 'e'h't' 's'w'o'l'l'a' 'h'c'i'h'w' 'd'n'a' ','s'r'e'e'p' 'e'h't' 'f'o' 'y'n'a' 't'a' 'y'l'l'a'c'o'l' 'd'e't'u'c'e'x'e' 's'i' 't'a'h't' 'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'e'l'p'm'i's' 'a' 'e'n'i'f'e'd' 't's'r'i'f' 'e'w' ','s'e'r'u't'c'u'r't's' 'a't'a'd' 'e'l'b'a't'i'd'e' 'y'l'e'v'i't'a'r'o'b'a'l'l'o'c' 'r'o'f' 's'c'i't'n'a'm'e's' 'e'h't' 'e'n'i'f'e'd' 'o'T'n'n''P'A' 'g'n'i't'i'd'e' 't'n'e'm'u'c'o'D''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'c'u'd'o'r't'n'i' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'u't'c'u'r'''' 't's' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' ''''''''''''''''''''''''.'y'''l'''''i'''''s'''''a'''''e''''' '''''d'''''e'''''d'''''d'''''a''''' '''''e'''''b''''' '''''d'''''l'''''u'''''o'''''c''''' '''''s'''''n'''''o'''''i'''''t'''''c'''''i'''''r'''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'c'i't'n'a'm'e's' 'e'g'r'e'm' 't'n'e't's'i's'n'o'c' 'e'n'i'f'e'd' 'o't' 's'u' 'w'o'l'l'a' 'o't' 'r'e'd'r'o' 'n'i' ','''s'''''e'''''g'''''a'''''u'''''g'''''n'''''a'''''l''''' '''''g'''''n'''''i'''''m'''''m'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'm'u'c'o'd' 'e'h't' 'n'i' 'n'o'i't'i's'o'p' 'a' 's'e'i'f'i't'n'e'd'i' 'h'c'i'h'w' '}'r'o's'r'u'c'{'h'p'm'e'' 'a' 't'c'u'r't's'n'o'c' 'o't' 'd'n'a' ','a'r'g'o'r'p' 'y'n'a'm' 'n'i' 'd'n''''''''''''''''''''''''''''''''e'h't' 'h'g''''''''''''''''''''''''''''''''''''''''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''|']'''y'e'k'''['|'b'r'e'''''d'n'a' '''v'' 'r'o't'a'r'e'p'o' 't'p'i'r'c's'b'u's' 'e'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':'t'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'e't'a't''''e'h'''''''''''''''''''''''r'o's'r'u'c' 't'n'e'r'r'u'c' 'e'h't' 't'a' 't'''s' 'e'h't' 'y'r'e'u'q'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'a' 'o't''''''''''''' 's'r'e'f'e'r' 'r'o's'r'u'c' 'e'h't' 'f'i'''''''''''''''''''''''''''''''r'o's'r'u'c' ' 'o's'l'a' 'n'a'c' 'R'P'X'E' 't'c'u'r't's'n'o'c' 'n'o'i's's'e'r'p'x'e' 'e'h'T'n'n'.'''e'r't' 'e'h't' 'h'g'u'o'r'h't' 'd'e't'a'g'i'v'a'n' 's'i' 'r'o's'r'u'c' 'e'h'''''''''''''''''''''''''''''''''''''''e'h't' '''''t'a'h't''''s'e'i''' ''''''''''s'e'n'i'f'e'd'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'b' 'd'e'i'f'i't'n'e'd'i' 's'i' 'd'e'i'f'i'd'o'm' 'g'n'i'e'b' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 't'r'a'p' 't''' ',''u'o'r'h't' 't'h'g'i'r' 'o't' 't'f'e'l' 'g'n'i'v'o'M''''''u'''o'f'''' 's'e'''''i'''''r'''''a'''''i'''''r'''''b'''''i'''''l''''' '''''N'''''O'''''S'''''J''''' '''''e'''''h'''''t''''' '''''m'''''o'''''r'''''f''''' 'y'l't'h'g'i'l's' 's'r'e'f'f'i'd' 'I'P'A''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'I'P'A' 'e'h't' 'f'o' 's'e'r'u't'a'e'f' 'e'h'T' ''''''s'''''e'''''r' 'h'c'u's' 't'u'b' ','s'e'l'u'r' 'g'n'i'k'c'e'h'c'-'e'p'y't' 'c'i't'a't's' 'r'o' 'e'g'a'u'g'n'a'l' 'a'm'e'h'c's' 'a' 'e'n'i'f'e'd' 't'o'n' 'o'd' 'e'w' 'y't'i'c'i'l'p'm'i's' 'r'o'F''''W' '.'y'l'i'r'a'r't'i'b'r'a' 'r'e'h't'o' 'h'c'a'e' 'n'i'h't'i'w' 'd'e't's'e'n' 'e'b' 'y'a'm' 's't's'i'l' 'd'n'a' 's'p'a'M' '.'s'r'e't'n'u'o'c' 'r'o' 's'r'e't's'i'g'e'r' 'r'e'h't'i'e' 'e'r'a' 's'e'd'o'n' 'f'a'e'l' 'e'h't' 'l'l'a' 'd'n'a' ','s't's'i'l' 'r'o' 's'p'a'm' 'r'e'h't'i'e' 'e'r'a' 's'e'd'o'n' 'h'c'n'a'r'b' 'r'o'i'r'e't'n'i' 'e'h't' 'l'l'a' ','t'n'e'm'u'c'o'd' 'N'O'''''''''''''''''''''''''''''''''''''''''''''''','p'a'm' 'a' 'n'i' 's'y'e'k' 'f'o' 't'e's' 'e'h't' 's'n'r'u't'e'r' '}'s'y'e'''''''''''''''''''''''''s'c'i't'n'a'm'e's' 'l'a'm'r'o'F'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''k'{'''''''l'a'c'o'L'{''''L'''f'''''s'''''t'''''x'''''e'''''t'''''' ''S'J' 'a' 'f'o' 'e'e'r't' 'e'h't' 'n'i' ','s'u'h'T'n'n'b'i'r'c's'e'd' 's'a' ','n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'r'e'd'n'u' 's'c'i't'n'a'm'e's' 't'n'e'''''''''''''''''''''''''''''''''''''''''';'t'x'e'n'.'t's'i'l' '=' 's'g'g'e' 't'e'l''n'''r'e'f'f'i'd' 's'a'h' 't'u'b' ','r'e't's'i'g'e'r' 'a' 'o't' 'r'a'l'i'm'i's' 's'i' 't'I''''S' '.'r'e'b'm'';''''''''''''''''''''''''''''''')''''''''''''''''''''''''''''''','}''3'_'}'d'i'{'t'i'h't'a'm''{'' 'o't's'p'a'm'' '}'3'_'}'d'i'{'t'i'h't'a'm''('}'s'e'r'p'{'f's'h't'a'm'' ''u'n' ''''''' 'n'a' 'g'n'i'n'i'a't'n'o'c' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','}''1'_'}'d'i'{'t'i'h't'a'm''{'' 'o't's'p'a'm'' ')'1'_'}''''_'d'i'{'t'i'h't'a'm''('}'s'e'r'p'{'f's'h't'a'm'' ';''e'd'o'n' 'f'a'e'l' 'A' ']':'r'e't'n'u'o'C'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''2'_'}'''''''''''''''{'}'3'''' ' ' 'n''{'n'g'i'l'a'i't'l'u'm'''d','''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''}''''''''''''''''''''''''''''''''' ''';''3'_'}'d'i'{'t'i'h't'a'm'' ','2'_''''+'}'d'i'{'t'i'h't'a'm'' ','1'_'}'d'i'{'t'i'h't'a'm''{'' 'o't's'p'a'm'' ')'}'''''g'n'i'p'p'o'h's'`'`'{'t'x'e't'''''''''''''''''h't'a'm''('}'s'e'r'p'{'f's'h't'a'm'' ''i'{'t'i'h't'a'm''{'' 'o't's'p'a'm'' ')'2'_'}'d'i'{'t'i'h't'a'm''('}'s'e'r'p'{'f's'h't'a'm'' ';'','['m'e't'i''n'.'t'i' 'o't' 'e'u'l'a'v' 'w'e'n' 'a' 'g'n'i'n'g'i's's'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'o't' 't'i'''''''''''''''''''''''''''''''''''''''' 'g'n'i't't'e's' 'y'b' 'd'e't'a't'u'm' 'e'b' 'n'a'c' 'r'e't's'i'g'e'r' 'a' 'f'o' 'e'u'l'a'v' 'e'h't' ','e'l'b'a't'u'm'm'i' 's'e'v'l'e's'm'e'h't' 'e'r'a' 's'e'v'i't'i'm'i'r'p' 'h'g'u'o'h't'l'A' '.')'l'l'u'n' 'r'o' 'n'a'e'l'o'o'b' ','''' 'r'e'b'm'u'n' ','g'n'i'r't's'(' 'e'u'l'a'v' 'e'v'i't'i'm'i'r'p' 'a' 'g'n'i'n'i'a't'n'o'c'b' ''' 'r'o''d'e't'a't'u'm' 'e'b' 'n'a'c' 't's'i'l' 'e'h'T' ''t'u'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'r'a' 's'e'u'l'a'v' 't'u'b' ',''''''''''''''''''''''''''''''''''(' 'e'l'b'a't'u'm'm'i' 'e'r'a' 's'y'e'k' 'd'n'a' ',''''''''''''''''''''''''''''''''''''''''''''''''.'}'t'c'e'j'b'o'{'h'p'm'e'' 'n'a' 's'a' 'n'w'o'n'k' 'o's'l'a' 's'i' 'p'a'm' 'N'O'S'J''''''''''''''''''''''''''''''''''''''''''''''.'}'y'a'r'r'a'{'h'p'm'e'' 'n'a' 's'a' 'n'w'o'n'k' 'o's'l'a' 's'i' 't's'i'l' 'N'O'S'J' 'A' '' 'A' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'd'o'n' 'f'a'e'l' 'A' ']':'r'e't's'i''''t'x'e't''''''g'''''e''t'[''''''''t''''''''t'x'e't''''''''''''''''''}']'{'t't'h't'a'm'''''''''R'['m'e't'i''n'.'n'o'i't'a'c'i'l'p'p'a' 'e'h't' 'y'b' 'd'e'n'i'f'e'd' 'r'e'd'r'o' 'n'a' 'e'v'a'h' 'n'e'r'd'l'i'h'c' 'e's'o'h'w' 'e'd'o'n' 'h'c'n'a'r'b' 'A' ']''''}':'t's'i'L'['m'e't'i''n'.'n'e'r'd'l'i'h'c' 'e'h't' 'f'o' 'e'n'o' 's'e'i'f'i't'n'e'''''d'''''i''''' '''''y'''''l'''''e''''n'''''u'''''q'i'n'u' 'y'e''''t'u'p'''k''''''''''''r'i'a'p' 'e'u'l'a'v'-''''' '''''A''' '.'}'y'e'k'{'h'p'm'e'' 'g'n'i'r't's' 'a' 'h't'i'w' 'd'e'l'l'e'b'a'l' 's'i' '''''''''''''''''''''''''''''''' 'r'e't'n'u'o'c' 'r'o' 'r'e't's'i'g'e'r' 'e''''''''t'x'e't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'.'s'e'd'o'n' 't's'i'l' 'r'o' 'p'a'm' 'r'o'f' 'd'e'n'i'f'e'd' 't'o'n' 's'i' '}'s'e'u'l'a'v'{'f's'h't'a'm''(' 'h't' 'f'o''''''''''''''''''''r'e't's'i'g'e'r' 'a''''''''''''''''''''''''''''''''''''' '''s'i' 'n'''''t'a'h't' ''s''''''e'''r'd'l'i'h'c' 'h'c'a'e' 'e'r'e'h'w' 'd'n'a' ','d'e'r'e'd'r'o' 't'o'n' 'e'r'a' 'n'e'r'd'l'i'h'c' 'e's'o'h'w' 'e'd'o'n' 'h'c'n'a'r'b' 'A'''''' ']'.'p'a'''''''P'A'M'[''''p'i'r''''''''''''n'o'i't'p'i'r'c's'e'd'''c'''''s'''''e'''''d'''''''''''''''''''''''''''''''''''''''' 'm'e't'i''n'''''''''''''''''}'e't'a'r'e'm'u'n'e'{'d'n'e''n'}'e't'a'r'e'm'u'n'e'{'n'i'g'e'b''n'n':'e'd'o'n' 'f'o'''''''o'n' 's'e'p'y't' 'g'n'i'w'o'l'l'o'f' 'e'h't' 'h't'i'w' 'e'e'r't' 'a' 'f'o' 's't's'i's'n'o'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'o'f'e'b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'g'g'e' 'r'e't'f'a' 'd'e't'r'e's'n'i' 's'i' 'k'l'i'm' 'o's' ','''''s'g'g'e'`'`' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'o't' 's'r'e'f'e'r' '|'s'g'g'e'|'b'r'e'v'' 'e'l'b'a'i'r'a'v' 'e'h't' 't'u'b' ','s'g'g'e' 'f'o' 'd'a'e'h'a' 'd'e't'r'e's'n'i' 's'i' 'e's'e'e'h'c' 'o's' ','d'a'e'h' 'e'h't' 'o't' 's'r'e'f'e'r' '|'t's'i'l'|''''''b'r'e'v'' 'e'l'b'a'i'r'a'v' 'e'h'T' '.'t's'i'l' 'e'h't' 'f'o' 'd'a'e'h' 'e'h't' 't'a' 's'i' 'r'o's'r'u'c' 'e'h't' 'f'i' 'd'a'e'h' 'e'h't' 't'a' 'r'o' '''''' '.' 't'I' '.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'N'O'S'J' 'n'o' 'd'e's'a'b' 's'i' 't'n'e'm'u'c'o'd' 'a' 'r'o'f' 'l'e'd'o'm' 'a't'a'd' 'r'u'O'''''''''' 'e'W'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t's'i'l' 'y't'p'm'e' 'e'h't' 'o't' 't'e's' 'd'n'a' 'd'e't'a'e'r'c' 'y'l't'i'c'i'l'p'm'i' 's'i' 't'i' ','t's'i'x'e' 't'o'n' 's'e'o'd' 'y'e'k' 'e'h't' 'f'I' ''''''''''''''''''''''''e'e'r't'f'o'o'r'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''''''''''f'f'f''''''''''''''''''''''''''}''''''''''''''''''''}'''''e'''''e'''''r'''''t'''''f'''''o'''''o'''''r'''''p'''''{'''''n'''''i'''''g'''''e'''''b''''''''n''''''''''''''e''''''''e'''''r'''''t'''''f'''''o'''''o'''''r'''''p''B'''''''''{'''''d'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''}'r'u'c'{'t'i'h't'a'm'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$''''''''}'r'u'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'t'x'e'n'{'f's'h't'a'm''.')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'r'T''o't'l'a'v'e'' '}'t'x'e'n'{'f's'h't'a'm''.')'''k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'4''''r'o's'r'u'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n''''''''''''''''''''''''''''''''n'}'$''''#'3'_'}'t'x'e'N'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'}''{'' '=' ')')'k'('}'''''''''''''''''''''''''''''''''''''''' ''''''''' ' ' 'n'''''''''''' ''''''''''''''''''''''''''{'t'}''i'h't'a'm''''''''''''''''''''''''''''''''''''''''''''''{'t'}''i'h't'a'm''''''''''''''''''''' ''''''''''''''''''''''''''{'t'}''i'h't'a'm'''''''''''''''''''''''''''''''''''''''')'x't'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''p''''' '=' ''a'm''''''''''i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'}'n'o'i't'a'u'l'a'v'e' 'n'o'i's's'e'r'p'x'E'{'n'o'i't'c'e's'b'u's''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'s'y'e'k'{''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'s'y'e'k'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n'}'s'y'e'k'{'f's'h't'a'm''.')'n'_'k' ','','''''e'l'g'n'a'r'' '}'''']'1'-'n'{''''''''''''''h'c'i'h'w' ','''''''''''''''''''''''''''''''''''''''_'k' ','s't'o'd'' ','2'_'k' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'''''''}'#'3'_'}'s'y'e'K'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'}'s'y'e'k'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n'}'s'y'e'k'{'f's'h't'a'm''.')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''('r'o's'r'u'c'{'f's'h't'a'm'' ','',')'1'_'k'('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' '1'_'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n't'i'h't'a'm'' 'o't'l'a'v'e'' '}'s'y'e'k'{'f's'h't'a'm''.')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'''''''''''''h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'2'_'}'s'y'e'K'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'}'';'' '}''{'' '='t'o'n'' ')')'k'('}'s'e'r'p'{'f's'h't'a'm''('}'p'a'm'{'t'i'h't'a'm'' ' ' ' 'n',''e'g'd'e'w'','' ')'}'p'a'm'{'t'i'h't'a'm''('}'s'y'e'k'{'m'r'h't'a'm'' 'n'i'' 'k' 'd'i'm'' 'k' ';''{'' '=' '}'s'y'e'k'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$''''''''''('}'s'y'e'k'{'m'r'h't'a'm'''''')'''''''''''''''''''''''''''')')'k'('}'T'p'a'm'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p''''P'{'d'n'e''n'}'$'}'s'y'e'k'{'t'i'h't'a'm'' 'o't'[''''''l''']''''''a'''v'e'' '}'s'y'e'k'{'f's'h't'a'm''.'}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'1'_'}'s'y'e'K'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n's'y'e'k''''''''''l'a''''']'.'.'.'[''''''v'''''{'t'i'h't'a'm'' 'o't'l'a'v'e'' '''}'$'}'s'y'e'k'{'f's'h't'a'm''.'}'r'u'c'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'$'}'r'u'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'''''''=''e'e'r't'f'o'o'r'p'{'n'i'g'e'b''''''''''r'u'o'f'''''''''''''''''''''3','2''''''''''''''''''4','s't'o'd'''''''''''''''''''''''r'o'{'f's'h't'a'm''n'n'('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'T'g'e'r'{'f's'h't'a'm'' ' ' ' 'n',''e'e'v'','' ')'x't'c'('}'m'o'd'{'m'r'h'''''t'''''a'm'' 'n'i'' ')'k'('}'T't's'i'l'{'f's'4''''h't'a'm'' ' ' ' 'n''''''''''''''''''''''''''''' ',''e'e'v'','' ')'x't'c'('}'m'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.')'d'e't'e'l'e'd' 'n'e'e'b' 's'a'h' 'y'e'k' 'e'h''''''''''''''''n'o'i't'a'c'i'l'p'p'a' 'e'h't'''''''''''''''''''t' 't'a'h't' 'g'n'i't'a'c'i'd'n'i'(' 'y't'p'm'e' 's'i' 't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'h'c'i'h'w' 'r'o'f' 's'y'e'k' 'y'n'a' 'g'n'i'd'u'l'c'x'e' 'd'n'a' ','e't'a't's' 'l'a'c'o'l' 'e'h't' 'g'n'i'n'i'm'a'x'e' 'y'b' 'd'e'n'i'm'r'e't'e'd' 's'i' 't'e's' 's'i'h'T' '.'p'a'm' 'a' 'n'i' 'd'e'n'i'f'e'd' 'e'r'a' 't'a'h't' 's'y'e'k' 'f'o' 't'e's' 'e'h't' 't'c'e'p's'n'i' 'o't' 'n'o'i't'a'c'i'l'p'p'a' 'e'h't' 'w'o'l'l'a' 's'e'l'u'r' '$'}'3','2','1'{'_'}'s'y'e'K'{'c's't'x'e't''$' 'e'h'T'n'n'.'s'e'i'l'p'p'a' '$'2'_'}'t'x'e'N'{'c's't'x'e't''$' ','''' 'y't'p'm'e''''-'''''''-'='n'o'n' 's'i' 't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'f'I' '.'t'n'e'm'e'l'e' 'e'h't' 'r'e'v'o' 's'p'i'k's' '$'3'_'}'t'x'e'N'{'c's't'x'e't''$' 'o's' 'd'n'a' ','d'e't'e'l'e'd' 's'a'w' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 's'n'a'e'm' 't'a'h't' ','y't'p'm'e' 's'i' 't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'f'i' ':'t's'i'l' 'e'h't' 'n'i' 't'n'e'm'e'l'e' 'n'a' 'f'o' '}'e'c'n'e's'e'r'p'{'h'p'm'e'' 'e'h't' 's'e'd'o'c'n'e' 'h'c'i'h'w' ','$'p'_'A'$' 'n'i' '$')'''k'('}'s'e'r'p'{'f's'h't'a'm''$' 'y'r't'n'e' 'n'a' 'n'o' 'l'a'n'o'i't'i'd'n'o'c' 'e'r'a''''''''''''''''''''''''' 't'c'e'p's'n'i' '$'}'3','2'{'_'}'t'x'e'N'{'c's't'x'e't''$' 'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'T'p'a'm'{''''m''''''''''i'l'{'f's'h't'a'm'' 'd'i'm'' 'k' ' ' ' 'n''''''''']'' '}'';''n';''{'' '=' ')'}'x't'c'{'t'i'h't'a'm''('}'s'y'e'k'{'m'r'h't'a'm'' '[''n'n''s'e'r'p'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'l'i'a't'{'f's'h't'a'm'' '='t'o'n'' '''k' ',''e'g'd'e'w'','' '''k' '=' ')')'k'('}'t'x'e'n'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'''''e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'''''''}'$'}''{'' '''''''''''''''''''''''''''''='t'o'n'' ')')'k'('}''r'T''''s'e'r'p'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i''''o'x'A''n'l'i'a't'{'f's'h't'a'm'' '='t'o'n'' '''k' ',''e'g'd'e'w'''''''''''e'e'r't'f'o'o'r'p''','''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'a'm' 'a' 'o't'n'i' 'y'e'k' 'w'e'n' 'a' 't'r'e's'n'i' 'o't' 'd'n'a'm'm'o'c' 'a' 'r'o'f' 'd'e'e'n' 'o'n' 's'i''''' '''''e'''''r'''''e'''''h'''''t''''' '''''o'''''s''''' ''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''e'''''W'''''n'''''n'''''}'''l'e'd'o'm' 'a't'a'D'{'n'o'i't'c'e's'b'u's'''''n'n''''''''''''''''''''''''''''g'n'i'r'e't'n'e'c''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'l'':'c'r'{''''''''''{'m''}'r'''h't'a'm''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''{'m''}'''''h't'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''$''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '$'}'N'{'b'b'h't'a'm'' 'n'i'' 'n'$' '&' '$')'n'('}'r'c'n'i'{'f's'h't'a'm''.'}'R'P'X'E'{'m'r'h't'a'm''$' '&' '$'|'$' '&'n''''' '}'e't'e'l'e'd''''''''''''''''y'e'K'm'r'{'f's'h't'a'm'''''''''''''''''''''''''''''''''' '}'r'e't'i'{'f's't'x'e't''.'R'P'X'E' '&' '$'|'$' '&'n'.'}'R'P'X'E'{'''''''''''''''''''''''''''''''''''''''''''''''''''''''' '$'''''''$' '}'R'A'V'{'m'r'h't'a'm'' 'n'i'' 'x'$' '&' '$'x'$' '&' ''''''g'n'i'r't'S''''''$''$'$'''''&''''''' 'n'i''''''' ''' ''''''''''''''''''''''''''{'''}'r't''t't'h't'a'm''''''''''''''''''''''''''''|'r't's''' '|'''''''''|'''|'b'r'e'v'' ''''|'b'r'e'v'''''''$''''''''''''''''''''''''''''''''''''''''''''|'}'{'|'b'r''''''''''|']'['|'b'r'e'v''''''''''''''''''''''''''''''':'''''''''''''''''''' '=' 't's'i'l' '''''r'e't'i'''''''''''''t'''''x'''''e'''''n'''''.'''''''';''''t'e''':''''t's'i'l'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''''''}'k'l'i'm'''{' 'o't' 's'e't'a'u'l'a'v'e' '/'/' 's'e'u'l'a'v'.'t'x'e'n'.'s'g'g'e'n'}'''s'g'g'e'''{' 'o't' 's'e't'a'u'l'a'v'e' '/'/' 's'e'u'l'a'v'.'s'g'g'e'n'n''''''f'l'''''t's'i'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' 't'u'p'n'i' 'r'e's'u' 's't'p'e'c'c'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'o'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'd'd'e'b'm'e' 's'i' 'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'e'h't' 'h'c'i'h'w' 'n'i' 'm'a'r'g'o'r'p' 'e'h't' 't'u'o'b'a' 'g'n'i'h't'y'n'a'''''' '''''o'd''''''''''''' 't'a'h't' 'e'm'u's's'a' 'd'n'a' ','s'd'n'a'm'm'o'c' 'e's'o'h't' 'f'o' 's'c'i't'n'a'm'e's' 'e'h't' 'y'l'n'o' 'l'e'd'o'm' 'e'W' '.'I'P'A' 'e'h't' 'o't' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','s'd'n'a'm'm'o'c' 'f'o' 'e'c'n'e'u'q'e's' ')'e't'i'n'i'f'n'i' 'y'l'b'i's's'o'p'(' 'a''''a' 's'e'u's's'i' 'm'a'r'g'o'r'p' 'r'e's'u' 'e'h't' 't'a'h't' 'e'm'u's's'a' 'e'W' '.'d'e'i'f'i'd'o'm' 'd'n'a' 'd'e'i'r'e'u'q' 's'i' 'e't'a't's' 't'n'e'm'u'c'o'd' 'e'h't' 'h'c'i'h'w' 'h'g'u'o'r'h't' 'I'P'A' 'n'a' 'r'e'h't'a'r' 't'u'b' ','e'g'a'u'g'n'a'l' 'g'n'i'm'm'a'r'g'o'r'''''''='''''''g'o'r'p' 'l'l'u'f' 'a' 't'o'n' 's'i' 't'I' '''''';')'''e's'e'e'h'c'''('t'r'e's'n''''''''''' ','''e's'e'e'h'c'''i'.'t's'i'l'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''s'''''g'''''g'''''e''''''''''''''''''''=''''''''''''''''''''''''''''' '''''''''''''''''}'''''''''''''''''t'''''''''''''''''s'''''''''''''''''i'''''''''''''''''l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''q'w':'.'y'n'a'p'm'o'C' 'g'n'i'e'o'B' 'e'h'T' 'm'o'r'f' 't'n'a'r'g' 'a' 'y'b' 'd'e't'r'o'p'p'u's' 's'a'w' 'h'c'r'a'e's'e'r' 's'i'h'T''''i'n'n'}'s't'n'e'm'e'g'd'e'l'w'o'n'k'c'A'{'*'n'o'i't'c'e's''n''''''n'n'i'''''''' ','t's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'r'e'v'o' 'g'n'i't'a'r'e't'i' 's't'r'a't's' '}'r'e't'i'{'f's't'x'e't'''''''''''''''''''''''''''''''''''''''':'e't'a't's' 'l'a'n'i'F' '/'/'n'n';')'''k'l'i'm'''('t'r'e's'n'i'.'s'g'g'e'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'t'o'-'d'e't'a'l'e'r':'c'e's'{'l'e'b'a'l'''n'}'n'o'i't'a'm'r'o'f's'n'a'r't' 'l'a'n'o'i't'a'r'e'p'O'{'n'o'i't'c'e's'b'u's''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''t's'i'l' 'd'e'r'e'd'r'o' 'e'''l'g'n'i's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'a'r'o'b'a'l'l'o'c' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'h'w'6'1'0'2':'k'i'n'o'm'e'L'{'e't'i'c''~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'d'f'5''''''''' 'h'c'a'o'r'p'p'a''9'9'1':'s'l'o'h'c'i'N'{'e't'i'c''~'m'e't's'y's' 'r'e't'i'p'u'J' 'e'h't' 'm'o'r'f' 'd'e't'i'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'e'p'-'o't'-'r'e'e'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'g'k'5'1'0'2':'r'e'g'n'U'{'e't'i'c''~'r'e'd'r'o' 'e'm'a's' 'e'h't' 'n'i' 's'e'g''''''''''''' 's'e'g'a's's'e'm' 'e'e's' 'l'l'i'w' 's't'n'e'i'p'i'c'e'r' 't'n'e'r'e'f'f'i'd' 't'a'h't' 'e'e't'n'a'r'a'u'g' 't'o'n' 'o'd' ','n'o'i't'a'r'o'b'a'l'l'o'c''''d' 'd'e't'p'y'r'c'n'e' 'r'o'f' 'e's'u' 'o't' 'n'a'l'p' 'e'w' 'h'c'i'h'w' ','s'l'o'c'o't'o'r'p' 'g'n'i'g'a's's'e'm' 'e'r'u'c'e's' 'y'n'a'M'' 'n'n''''''''''''''''''''''''''''''''d' ''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'h's'i'''''''i''''''''''''''''''''''''''}'s't'd'r'c'-'d'e't'a'l'e'r':'c'e's'{'l'e'b'a'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','n'u'1'1''''''''''''''y'w'3'1'0'2':'n'w'o'r'B','0'2':'o'r'i'p'a'h'S''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'h'4'1'0'2':'n'w'o'r'B'{'e't'i'c''~''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o' '}'n'o'i't'i's'o'p'm'o'c'{'h'p'm'e'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' ','s'p'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'm'r'o'f'''''''''''''''''''''''''''d'e'p'o'l'e'v'e'd' ''''''''''''''''''''''''''''''''.'r'e'p'a'p'''''''p'a' 's'i'''''''i's'h't' 'n'i' 's'c'i't'n'a'm'e's' 'e'h't' 'r'o'f' 's'i's'a'b' 'a''''''''''''' 'e'h't' 's'i' 's'e'p'y't'a't'a'd' 'e's'e'h't' 'n'i' 'y't'i'l'a's'u'a'c' 'f'o' 't'n'e'm't'a'e'r't' 'e'h't' 't'u'b' ','s't's'i'l' 'd'e'r'e'd'r'o' 'r'o'f' 's'T'D'R'C' 's'e't'a'r'g'e't'n'i' 'k'r'o'w' 's'i'h't' 'f'o' 'e'n'o'N''' '''''d'''''e'''''t'''''s'e'n' 'r'o'''''f''''' '''s'''' 'n'o'i't'a't'u'm' 'a't'l'e'd' 'e'n'i'f'e'd' 'o's'l'a' '}'k't'6'1'0''''''''''' 'h'g'u'o'h't'l'A' '2':'a'd'i'e'm'l'A'{'e't'i'c''~'.'l'a' 't'e' 'a'd'i'e'm'l'A' '''''' ',''.'}'v'i'6'1'0'2':'o'r'e'u'q'a'B'{'e't'''''o's'l'a' ''i'c''~'e'h''''''''''k'r'o'w'e'm'a'r'f'''c'''''r'''''e'L' 'd'n'a' 'a'd'i'e'm'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'e'h'T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'n'o'i't'a'l'e'r' 'r'o' 's't'e's' 'd'e'r'e'd'r'o'n'u' 'e'k'i'l' 'e'r'a' 'h'c'i'h'w' ','}'s'e'i't'i't'n'e'{'h'p'm'e'' 'd'n'a' ',''''''''''''''''''s'e'n'i'f'e'd' 'l'''''''''''''''''''''''}'s'e'i'''''''e'v'a'h'''y'l'e'b' ''t'i't'n'e'''o'''';''''''{'''''h'''''p'''''m'''''e'''''''' '''''d'''''n'''''a''''' ''''''''''''''''''''''''''h'''''c'''''i'''''h'''''w''''' ''''','''''}'''''''''''s'''''''''''''''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''O''''.'l'e'd'o'm' 'l''''''''''''''''''''''''''k'r'o'w'e'm'a'r'f' 's'i'h't' 'n'i' 'd'e'n'i'f'e'd'''a'''''n'''''o'''''i'''''t'a'l'e'r' 'e'h't' 'n'i' 's'e'l'p'u't' 'e'k'i'l' 'e'r'a' 'h'c'i'h'w' ','}'s'e'i''''y't'i't'n'e'{'h'p'm'e'' 'd'n'a' ','d'o'm' 's'i'h'T''''' 'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e't'r'o'p'p'u's' 't'o'n' 'e'r'a' 's't's'i'l' 'd'e'r'e'd'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s''''''''''''''''''''''''''''''''''n'a'r't'E'E'E'I''''''''''''''''''''''''''''f's'r'''''''''''''''''''''''a'e'y' 'r'o'f' '''''''''''''''''''''l'l'a' ''''''''s'r'a'e'y' 'r'o'f' ''''''''d'e't's'e'n' 'n'o'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'i'r'a'r't'i'b'r'a' 'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'r'u't'c'u'r't's' 'e'k'i'l'-'N'O'S'J' 'a' 'h't'i'w' 'T'D'R'C' 'd'n'u'o'p'm'o'c' 'a' 'o't'n'i' 'd'e's'o'p'm'o'c' 'e'b' 'o't' 'm'e'h't' 's'w'o'l'l'a' 't'a'h't' 'k'r'o'w' 'r'o'i'r'p't'a'l'o's'i' 'n'i' 'd'e't's'i'x'e' 'e'v'a'h' 's't's'i'l' 'd'e'r'e'd'r'o' 'd'n'a' 's'p'a'm' ','s'r'e't's'i'g'e'r' 'r'o'f' 's'T'D'R'C'''''''i'l' 'h'g'u'o'h't'l'A''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'n'a' 'f'o' 'e'r'a'w'a' 't'o'n' 'e'r'a' 'e'w' ','l'a'r'e'n'e'g' 'n'I'n'n'o' ';'e'p'y't'a't'a'd' 'p'a'm' 'r'u'o' 'o't' 'r'a'l'i'm'i's' 's'i' 'h'c'i'h'w' ','}'y'a'r'r'a' 'd'u'o'l'c'{'h'p'm'e'' 'e'h't' 's'i' 'e'p'y't' 'n'o'i't'c'e'l'l'o'c' 'd'e'n'i'f'e'd' 'y'l'n'o' 'e'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'l'a' 't'e' 't'd'r'a'h'k'c'r'u'B' 'y'b' 'd'e'r'i'p's'n'i' 's'i' 't'n'e'm'e't'a't's' '}'d'l'e'i'y'{'f's't'x'e't'' 'r'u'O' '.'d'e's'o'p'm'o'c' 'e'b' 'n'a'c' 'd'n'a' 's'''''''''''''''' 't'u'b' 'T'D'R'C' 'o't' 'r'a'l'i'm'i's' 'e'r'a' 'h'c'i'h'w' ','}'s'e'p'y't' 'd'u'o'l'c'{'h'p'm'e'' 'e'n'i'f'e'd' '}'y'j'2'1'0'2':'t'd'r'a'h'k'c'r'u'B'{'e't'i'c''~'.'l'a' 't'e' 't'd'r'a'h'k'c'r'u'B''n'n'A' ','o'r'e'u'q'a'B''''A' 'y'b' 'd'e'i'd'u't's' 'n'e'e'b' 'e'v'a'h' 'h'c'i'h'w' ','s'c'i't'n'a'm'e's' 'f'o' 's'n'o'i't's'e'u'q'''''''i'd' 's'e's'i'a'r' 's'p'a'm' 'e'd'i's'n'i' 's'r'e't'n'u'o'c' 'g'n'i'd'd'e'b'm'E' '.'}'y'w'3'1'0'2':'n'w'o'r'B','s'h'4'1'0'2':'n'w'o'r'B'{'e't'i'c''~'s't's'i'l' 'd'e'r'e'd'r'o' 't'r'o'p'p'u's' 't'o'n' 's'e'o'd' 't'u'b' ','s'p'a'm' 'r'e'h't'o' 'n'i'h't'i'w' 's'p'a'm' 'f'o' 'd'n'a' ','s'p'a'm' 'e'd'i's'n'i' 's'r'e't's'i'g'e'r' 'd'n'a' 's'r'e't'n'u'o'c' 'f'o' 'g'n'i't's'e'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 's'l'e'v'e'l' 'e'l'p'i't'l'u'm' 's'w'o'l'l'a' 'k'a'i'R' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'c'i't't'a'l' 'n'o' 'd'e's'a'b' ','s'T'D'R'C' 'd'e's'a'b'-'e't'a't's' 'f'o' 'n'o'i't'i's'o'p'm'o'c''''C' 'r'o'f' 's'i's'a'b' 'l'a'c'i't'e'r'o'e'h't' 'a' 'e'n'i'f'e'd''''=''''''''''''''''''''''''' 't'n'e's'e'r'p' '}'m't'5'1'0'2':'o'r'e'u'q'a'B'{'e't'i'c''~'.'l'a' 't'e' 'o'r'e'u'q'a'B' '''''''''''''''''''''''''''''''''''''''''''e'h't' 't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'r'e'h't'o'-'d'e't'a'l'e'r':'c'e's'{'l'e'b'a'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i''' ','e'l'p'm'a'x'e' 'r'o'F'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 'l'l'','a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'b'a'n'o's'a'e'r' 'n'a'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'r'e'm'm'a'r'g'o'r'p' 'n'o'i't'a'c'i'l'p'p'a' 'o't' 't'f'e'l' 'e'b' 'd'l'u'o'h's' 't'a'h't' 'r'e't't'a'm' 'e'l'p'm'i's' 'a' 't'o'n' 's'i' 'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c''''''''''''' 's't'i''''c' ','s'e't'a'r't's'n'o'm'e'd' 'r'e'p'a'p' 's'i'h't' 'f'o' 'y't'i'x'e'l'p'm'o'c' 'e'h't' 's'A' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'W'W'L'(' '''''''l'l''''''''''''''''''''''''''''''''''''''''e'm'a's' 'e'h't''''s'''''''g'n'i'''''''''''''''''''g'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'a'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'n'o'i't'i'd'n'o'c''''d'e'r'p' 's't'i' 'n'o' 'g'n'i'd'n'e'p'e'd' 'l'u'f's's'e'c'c'u's' 's'a'w' 'n'o'i't'c'a's'n'a'r't' 'a' 'r'e'h't'e'h'w' 'e'd'i'c'e'd' 'd'n'a' ','r'e's''''''''''''''''''''''r'e'd'r'o' 'l'a't'o't' 'a''''''l'a'i'r'e's'''''' '''''n'''i' 's'n'o'i't'c'a's'n'a'r't' 'e't'u'c'e'x'e''''''''''b'b'b' 'o't' 'r'e'v'r'e's' 'l'a'r't'n'e'c' 'a' 'n'o' 's'e'i'l'e'r' 'h'c'a'o'r'p'p'a' 's'i'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'c'i'v'e'd' 'e'l'i'b'o'm' 'f'o' 'm'e't's'y's' 'r'e'e'p'-'o't'-'r'e'e'p' 'a' 'n'i' 'e'v'i't'i'b'i'h'o'r'p' 'e'r'a' 's't'n'e'm'e'r'i'u'q'e'r' 'r'e'd'r'o' 'l'a't'o't' 'h'c'u's' ','}'t'o'-'d'e't'a'l'e'r':'c'e's'{'f'e'r''~'n'o'i't'c'e's' 'n'i' 'd'e's's'u'c's'i'd' 's'A''''T' '.'e'n'i'l'n'o' 't'x'e'n' 'e'r'a' 'y'e'h't' 'n'e'h'w' 'm'e'h't' 'm'r'i'f'n'o'c' 'd'n'a' ','y'l'e'v'i't'a't'n'e't' 's'n'o'i't'c'a's'n'a'r't' 'e't'u'c'e'x'e' 'o't' 's'e'd'o'n' 'e'n'i'l'f'f'o' 'w'o'l'l'a' '}'n'd'5'9'9'1':'y'r'r'e'T'{'e't'i'c''~'u'o'y'a'B' 's'a' 'h'c'u's'''''''''''''''' 's'm'e't's'y's' 'y'n'a'm' ','y'l'l'a'n'i'F'n'n''''''''''''''''''''''''''''''''''.'B'D'h'c'u'o'C' 'd'n'a' ''''''' ','k'a'i'R' 'g'n'i'd'u'l'c'n'i' 's'm'e't's'y's' 'r'e'h't'o' 'y'n'a'm' 'n'i' 'n'o'i't'p'o' 'n'''' 'a' 's'i' 't'i' 'd'n'a' ','a'r'd'n'a's's'a'C' 'e'h'c'a'p'A' 'n'i' 'd'e's'u' 's'i' 'h'c'a'o'r'p'p'a' 's'i'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'o't' 'e'u'd' 't's'o'l' 'e'b' 'o't' 't'u'p'n'i' 'r'e's'u' 'o'n' 't'n'a'w' 'e'w' 'e'c'n'i's' ','s't'n'e'm'e'r'i'u'q'e'r' 'r'u'o' 't'e'e'm' 't'o'n' 's'e'o'd' 'W'W'L''''''''''''''''''''''''''''l' 'e'''''''''' 's'i'h'T''''p' '.'s'r'e'h't'o' 'e'h't' 's'd'r'a'c's'i'd' 'd'n'a' '''''r'e'n'n'i'w'`'`' 's'a' 's'e't'i'r'w' 't'n'e'r'r'u'c'n'o'c' 'l'a'r'e'v'e's' 'g'n'o'm'a' 'e'n'o' 's'e's'o'o'h'c' 'y'l'i'r'a'r't'i'b'r'a' 'h'c'i'h'w' ','}'s'n'i'w' 'r'e't'i'r'w' 't's'a'l'{'h'p'm'e'' 's'i' 'n'o'i't'u'l'o's'e'r' 't'c'i'l'f'n'o'c' 'o't' 'h'c'a'o'r'p'p'a' 'd'e's'u'-'y'l't'n'e'u'q'e'r'f' 'r'e'h't'o'n'A'n'n'.'}'i'u'7'0'0'2':'a'i'd'n'a'C'e'D'{'e't'i'c''~'g'n'i'r'a'e'p'p'a'e'r' 's'm'e't'i' 'd'e't'e'l'e'd' 's'a' 'h'c'u's' ','s'e'i'l'a'm'o'n'a' 't'i'b'i'h'x'e' 'n'e't'f'o' 's'n'o'i't'c'n'u'f' 'e'g'r'e'm' 'n'e's'o'h'c' 'y'l'e'v'i'a'N'''''''''''''p'm'i'S' '''''o'''''t''''' '''''n'''''o'''''i'''''t'''''u'''''l'''''o'''''s'''''e'r' 't'c'i'l'f'n'o'c' 's'e'v'a'e'l' ''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'c'i'l'f'n'o'c' 'e'h't' 'e'v'l'o's'e'r' 'o't' 'e'd'o'c' 'n'o'i't'a'c'i'l'p'p'a' 's'e'r'i'u'q'e'r'''e''''''''''''''''''''''''''''''''''''''''''' 's't'n'e's'e'r'p' 'd'n'a' 's'e'u'l'a'v' 'e's'o'h't' 's'e'v'r'e's'e'r'p' 'e's'a'b'a't'a'd' 'e'h't' ','y'e'k' 'e'm'a's' 'e'h't' 'o't' 'n'e't't'i'r'w' 'y'l't'n'e'r'r'u'c'n'o'c' 'e'r'a' 's'e'u'l'a'v' 'l'a'r'e'v'e's' 'f'i''''''''''''''''u'c'n'o'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e't'''''''''''''''' 'e's'a'b'a't'a'd' 'e'h't' ','''a'''''l'''''e'''''r'''''''''''''''''''''''''''''''d'e'r'i'p's'n'i' 't'i' 's't'c'e'j'o'r'p''''l''''p' 'd'n'a' '}'i'u'7'0'0'2':'a'i'd'n'a'C'e'D'{'e''''''''''{'e'4't'i'c''~'o'm'a'n'y'D' 'n'I' '.'''''''''''''''' 'd'n'a' 'c'o'h'-'d'a' 'n'e't'f'o' 'e'r'a' 's'n'o'i't'u'l'o's' 'e'h't' 't'u'b' ',''''s'n'o'i't'a'c'i'f'i'd'o'o'm' 'g'n'i't'c'i'l'f'n'o'c' ','t'n'e'r'r'u'c'n'o'c' 'f'o' 'm'e'l'b'o'r'p' 'e'h't' 'h't'i'w' 'l'a'e'd' 'o't' 'd'e'e'n' 's'm'e't's'y's' 'a't'a'd' 'd'e't'a'c'i'l'p'e'r' 'y'n'a'M'n'n'}'s'e'h'c'a'o'r'p'p'a' 'r'e'h't'O'{'n'o'i't'c'e's'b'u's'''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y'l't'n'e'c'e'r' 'e'r'o'm' 'd'e'i'd'u't's' 'n'e'e'b' 'y'l'n'o' 's'a'h' ')'}'g'n'i'd'd'e'b'm'e'{'h'p'm'e'' 's'a' 'n'w'o'n'k' 'o's'l'a'(' 'r'e'h't'o'n'a' 'e'd'i's'n'i' 'T'D'R'C' 'e'n'o' 'g'n'i't's'e'n' 'f'o' 'm'e'l'b'o'r'p' 'e'h'T'n'n''D'R'C' 'r'e'h't'o'n'a' 't'o'n' ',''.'''''''''''''''''''''''''''e'l'b'a't'u'm'm'i' ',''''''''s'e'u'l'a'v' 'c'i'm'o't'a' 'e'r'a' 't's'i'l' 'r'o' 'p'a'm' 'T'D'R'C' 'e'h't' 'f'o'a'h't' 'e'm'u's's'a' 'y''''''''''' 's't'n'e'm'e'l'e' 'e'h't' ':'g'n'i't's'e'n' 't'r'o'p'p'u's' 'm'e'h't' 'f'o' 'e'n'o'n' ','r'e'v'e'w'o'H' '.'}'y'k'3'1'0'2':'c'e'l'e'd'e'N'{'e't'i'c''~'Q'E'S'L' 'd'n'a' '}'x'h'0'1'0'2':'s's'i'e'W'{'e't'i'c''~'t'o'o'g'o'L' ','}'z'f'9'0'0'2':'a'c'i'u'g'e'r'P'{'e't'i'c''~'c'o'd'e'e'r'T'''''''''''''''''''t'o'o'g'o'L' ','}'w'd'1'1'0'2':'h'o'R'{'e't'i'c''~'A'G'R' ','}'j'w'6'0'0'2':'r'e't's'O''''o'{'e't'i'c''~'T'O'O'W' 'g'n'i'd'u'l'c'n'i' ','d'e's'o'p'o'r'p' 'n'e'e'b' 'e'v'a'h' 's'm'h't'i'r'o'g'l'a' 's'u'o'i'r'a'v' ','s't's'i'l' 'd'e'r'e'd'r'o' 'r'o'F' '.'k'a'i'R' 's'a' 'h'c'u's' 's'm'e't's'y's' 'd'e'y'o'l'p'e'd' 's'u'o'i'r'a'v' 'n'i' 'd'e't'n'e'm'e'l'p'm'i' 'n'e'e'b' 'e'v'a'h' 'd'n'a' ','}'y'w'1'1'0'2':'o'r'i'p'a'h'S'{'e't'i'c''~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e't'i'u'q' 'e'r'a' 'y'e'h't' 'd'n'a' ','n'w'o'n'k' 'y'l'e'd'i'w' 'e'r'a' 's't'e's' 'd'n'a' 's'p'a'm' ','s'r'e't'n'u'o'c''''m' ','s'r'e't's'i'g'e'r' 'r'o'f' 's'T'D'R'C'n'n's'l'b'u'p' 'n'e'e'b' 't'o'n' 'e'v'a'h' 's'm'h't'i'r'o'g'l'a' 's't'i' 'f'o' 's'l'i'a't'e'd' ','t'c'u'd'o'r'p' 'y'r'a't'e'i'r'p'o'r'p' 'a' 's'A' '.'}'h'w'6'1'0'2':'k'i'n'o'm'e'L'{'e't'i'c''~'r'e'v'r'e's' 'e'l'g'n'i's' 'a' 'n'o' 's'e'i'l'e'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'o't' 's'r'a'e'p'p'a' 't'i' ','s'c'o'D' 'e'l'g'o'o'G' 'e'k'i'L'''''''''''''''''''''''''''''''''''''''''''''''''''' 'o's'l'a'''''''''' 's'i' 't'i' ','r'e'v'e'w'o'H' '.'s'p'a'm' 'd'n'a' 's't's'i'l' 'f'o' 'g'n'i't's'e'n' 'y'r'a'r't'i'b'r'a' 's't'r'o'p'p'u's' 't'a'h't' 'e'r'a'w'a' 'e'w' 'h'c'i'h'w' 'f'o' 'T'O' 'f'o' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'y'l'n'o' 'e'h't' 's'i' '}'k'v'5'1'0'2':'e'l'g'o'o'G'{'e't'i'c''~'I'P'A' 'e'm'i't'l'a'e'R' 'e'l'g'o'o'G' 'e'h'T'n'n''''','''''r'''''e'''''v'''''r'''''e'''''s''''' '''''e'''''l'''''g'''''n'''''i'''''s''''' '''''a''''' '''''n'''''o''''' '''''g'''''n'''''i'''''y'''''l'''''e'''''r''''' '''''s'''''d'''''i'''''o'''''v'''''a''''' '''''h'''''c'''''i'''''h'''''w''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'T'D'R'C'{'n'o'i't'c'e's'b'u's''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'e'f'a's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f''' 'd'n'a' ','''''''''''''''t''' 'r'o'F'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'c'n'e'g'r'e'v'n'o'c' 'e'v'e'i'h'c'a' 'o't' 't'n'e'i'c'i'f'f'u's' 's'i' 'g'n'i'r'e'd'r'o' 'l'a's'u'a'c' ',''''''''''''''''' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'f'o' 'y'l'i'm'a'f' 'T'D'R'C' 'e'h'T'n'n'.'}'m'd'5'1'0'2':'a'y'i't't'A'{'e't'i'c''~'g'n'i'r'e'd'r'o' 'l'a's'u'a'c' 's'i' 'e'v'i'g' 'n'a'c' 'm'e't's'y's' 'a' 'h'c'u's' 'e'e't'n'a'r'a'r'a'u'g' 't's'e'g'n'o'r't's' 'e'h'T' '.'e'l'b'a'l'i'a'v'a'n'u' 'e'm'o'c'e'b' 'd'l'u'o'w' 't's'a'c'd'a'o'r'b' 'c'i'm'o't'a' 'g'n'i'r'i'u'q'e'r' 'm'h't'i'r'o'g'l'a' 'y'n'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'l'b'a' 'e'b' 't'o'n' 'l'l'i'w' 'm'e't's'y's' 'e'h't' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'e'i'l'e'r' 't'a'h't' 'm'h't'i'r'o'g'l'a' 'y'n'a' 'o's' 'd'n'a' ','e'm'i't' 'e'm'a's' 'e'h't' 't'a' 'e'n'i'l'n'o' 'e'r'a' 's't'n'a'p'i'c'i't'r'a'p' 'f'o' 'y't'i'r'o'n'i'm' 'a' 'y'l'n'o' 't'a'h't' 'e's'a'c' 'e'h't' 'e'b' 'y'l't'n'e'u'q'e'r'f' 'l'l'i'w' 't'i' 's'e'c'i'v'e'd' 'e'l'i'b'o'm' 'f'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h't'i'w' 's'm'e't's'y's' 'r'e'e'p'-'o't'-'r'e'e'p' 'n'i' 't'a'h't' 't'c'e'p'x'e' 'e'W' '.'e'l'b'a'h'c'a'e'r' 'd'n'a' 'e'n'i'l'n'o' 'e'r'a' 's't'n'a'p'i'c'i't'r'a'p' 'f'o' 'y't'i'r'o'j'a'm' 'a' 'f'i' '''''''''''''''s's'e'r'g'o'r'p' 'e'k'a'm' 'y'l'n'o' 'n'a'c' 'y'e'h't' 'o's' ','}'p'c'6'9'9'1':'a'r'd'n'a'h'C'{'e't'i'c''~'s'u's'n'e's'n'o'c' 'o't' 't'n'e'l'a'v'i'u'q'e' 'e'r'a' 's'l'o'c'o't'o'r'p' 'h'c'u's' ','}'i'j'4'0'0'2':'o'g'a'f'e'D'{'e't'i'c''~'l'o'c'o't'o'r'p' 't's'a'c'd'a'o'r'b' 'c'i'm'o't'a' 'n'a' 'g'n'i's'u' 'y'b' 's'n'o'i't'a'r'e'p'o' 'f'o' 'g'n'i'r'e'd'r'o' 'l'a't'o't' 'a'o'''''t' 'e'l'b'i's's'o'p' 's'i''''p' 't'i' 'h'g'u'o'h't'l'A''''''''''''''' 'n'o' 'g'n'i'd'i'c'e'D' '.'r'e'v'r'e's' 'e'l'g'n'i's' 'a' 'g'n'i'r'i'u'q''''''''''''''''''' 'g'n'i'y'l'e'r'' '''''''''''''''''''''''' 't'u'o'h't'i'w' 'n'o'i't'a'r'o'b'a'l'l'o'c' 't'r'o'p'p'u's' 'o't' 't'n'a'w' 'e'w' 'e'c'n'i's' ','''' 's't'n'e'm'e'r'i'u'q'e'r' 'r'u'o' 't'e'e'm' 't'o'n' 's'e'o'd' 't'i''e'h'n'i' 'n'o'i's'''''i'''''c'''''e'''''d''''' '''''n'''''g'''''i'''''s'''''e'''d' 'a' ','''''''''''''''''''''''''''''''''''g'n'i'k'a'm' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'l'b'a't'p'e'c'c'a' 't'o'n' 's'i' 't'i' 't'u'b' ','}'s'k'3'0'0'2':'e'n'i'm'I'{'e't'i'c''~'e'n'o'r'p'-'r'o'r'r'e' 's's'e'l' 'd'n'a' 'r'e'l'p'm'i's' 's'n'o'i't'c'n'u'f''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o'i't'a'm'r'o'f's'n'a'r't' 'e'h't' 'g'n'i'y'f'i'l'p'm'i's' 'f'o' 'e'g'a't'n'a'v'd'a' 'e'h't' 's'a'h' 's'i'h'T' '.'s'n'o'i't'a'r'e'p'o' 'f'o' 'g'n'i'r'e'd'r'o' 'l'a't'o't' 'a' 'n'o' 'e'd'i'c'e'd' 'o't' 'r'e'v'r'e's' 'e'l'g'n'i's''''''''''''''''''''''''''''' 'a' 'n'o' 'y'l'e'r' ',')'}'o'v'5'1'0'2':'g'n'a'W'{'e't'i'c''~'e'v'a'W' 'e'l'g'o'o'G' 'y'l'r'e'm'r'o'f'(' 'e'v'a'W' 'e'h'c'a'p'A' 'd'n'a' '}'w'v'0'1'0'2':'k'a'w'e'i'p'S'{'e't'i'c''~'e'b'i'V' 'l'l'e'v'o'N' ','}'m'u'1'1'0'2':'d'a'p'r'e'h't'E'{'e't'i'c''~'d'a'p'r'e'h't'E' ','}'t't'0'1'0'2':'r'e't'h'c'i'R'y'a'D'{'e't'i'c''~'s'c'o'D' 'e'l'g'o'o'G''''' 'g'n'i'd'u'l'c'n'i' ','s'm'e't's'y's' 'T'O' 'd'e'y'o'l'p'e'd' 't's'o'M'n'n'.'r'e'p'a'p' 's'i'h't' 'n'i' 'd'e'n'i'f'e'd' 's'a' 's'p'a'm' 'e'u'l'a'v'-'y'e'k' 't'r'o'p'p'u's' 't'o'n' 'o'd' 's'm'h't'i'r'o'g'l'a' 'e's'e'h't' 't'u'b' ','s't's'i'l' 'd'e'r'e'd'r'o' 'f'o' 'g'n'i't's'e'n' 's'e'd'i'v'o'r'p' 'h'c'i'h'w''5'1'0'2':'g'n'a'W',''}' ''','y'j'3'0'0'2':'t'a'n'g'I','v'i'2'0'0'2':'s'i'v'a'D'{'e't'i'c''~'s't'n'e'm'u'c'o'd' 'L'M'X' 'g'n'i't'i'd'e' 'o't' 'T'O' 'e'z'i'l'a'r'e'n'e'g' 's'm'h't'i'r'o'g'l'a' 'e'm'o'S' '.'s'n'o'i't'a'c'i'l'p'p'a' 'y'n'a'm' 'r'o'f''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e'r'i'u'q'e'r' 'e'r'a' 't'a'h't' 's'e'r'u't'c'u'r't's' 'e'e'r't' 'd'e't's'e'n' 'e'h't' 't'r'o'p'p'u's' 't'o'n' 'o'd' 'd'n'a' ')'e'l'p'm'a'x'e' 'r'o'f' ','s'r'e't'c'a'r'a'h'c' 'f'o'(' 'e'c'n'e'u'q'e's' 't'a'l'f' 'a' 's'a' 't'n'e'm'u'c'o'd' 'a' 't'a'e'r't' 'm'e'h't' 'f'o' 't's'o'M' '.'}'d'f'5'9'9'1':'s'l'o'h'c'i'N','f'v'8'9'9'1':'n'u'S','x'w'6'9'9'1':'l'e's's'e'R','e'u'9'8'9'1':'s'i'l'l'E'{'e't'i'c''~'s'n'o'i't'a'c'i'l'p'p'a' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'r'o'f' 'd'e's'u' 'n'e'e'b' 'g'n'o'l' 'e'v'a'h' ')'T'O'(' '}'n'o'i't'a'm'r'o'f's'n'a'r't' 'l'a'n'o'i't'a'r'e'p'o'{'h'p'm'e'''''_' 'n'o' 'd'e's'a'b' 's'm'h't'i'r'o'g'l'A'n'n'}'k'r'o'w''''W' 'd'e't'a'l'e'R'{'n'o'i't'c'e's''n'n'';')'''s'g'g'e'''('t'r'e's'n'i'.')'''g'n'i'p'p'o'h's'''('t'e'g'.'c'o'd' '=' 's'g'g'e' 't'e'l'n';']'[' '=' ')''''}'''g'n'i'p'p'o'h's'''('t'e'g'.'c'o'd'n';'}'{' '=' 'c'o'd'n''''''''''''''''''''''''''''''''}']'''k'l'i'm''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'l'e'i'f'''''''''''''''''''t'c'e'j'b'o' ''''''''''''''''''''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','r'o's'''''g'n'i'y'''r'''''u'c' 'a' 's'a' 's't'c'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''''''''r'e't'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o't' 's'e't'a'g'i'v'a'n' 'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h'c'a'e' 'r'o'F'''''''''''''''a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'T'p'a'm'{'f's't'x'e't'' '.'t'n'e'm'u'c'o'T''''''''''p'a'm' 'd''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''s'''''t'''''n'''''e'''''t'''''n'''''o'''''c''''' '''''e'''''h'''''t''''' '''''g'''''n'''''i'''''t'''''n'''''e'''''s'''''e'''''r'''''p'''''e'''''r''''' '''''n'''''o'''''i'''''t'''''c'''''n'''''u'''''f''''' '''''l'''''a'''''i'''''t'''''r'''''a'''''p' 'd'e't's'e'n' 'a' 'o't' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''h't' 's'p'a'm' '$'p'_'A'$' ','n'o'i't'i'd'd'a' 'n'I' '.'w'o'l'e'b' 'd'e'b'i'r'c's'e'd' 's'a' 't'n'e'm'u'c'o'd' 'e'h't' 'n'i' ''''''''''''''''''''''''''n'o'i't'p'm'u's's'a' 'e'h't' 's'e'z'i'l'a'm'r'o'f'''n'''''o'''''i'''''t'i's'o'p' 'a' 's'e'i'f'i't'n'e'd'i' 'h'c'i'h'w' ','}'r'o's'r'u'c'{'h'p'm'e'' 'a' 'o't' 'e'm'a'n' 'e'l'b'a'i'r'a'v' 'e'h't' 's'p'a'm' '$'p'_'''''''p'-'A'$' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'd'n'a'm'm'o'c' '}'t'e'l'{'f's't'x'e't'' 'h't'i'w' 'd'e'n'i'f'e'd' 's'e'l'b'a'i'r'a'v' 'l'a'c'o'l' 'e'h't' 's'n'i'a't'n'o'c' '''''''''''''''''''''''''''''''''''','y'l'l'a'n'i'F' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t's'i'l' 'e'h't' 'f'o' 'd'a'e'h' 'e'h't' 's't'c'e'l'e's' 'd'n'a' 't's'i'l' 'a' 's'a' 'y'e'''k''''' ''''' '['''''''''t'''''a'''''h'''''t''''' '''''t'''''a''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'{''''''''}'n'%'}'$'2'#'e'l'y't's'y'a'l'p's'i'd''$'{''''''''''''''''5''''''{'}'';'''3'{''''''}'''''n'''''g'''i'l'a'''''''''''''''''''''}'D'I'r'e'e'P'{'m'r'h't'a'm'' 'n'i'' 'i't'l''''' ' ' 'n'u'm''''''''''''''''''''''''''''''''''''''''''''''''''&'&''''''''''''''''''''''''''b'b''''''''''}'N'{'B'B'h't'a'm'' 'n'i'' ''''''''''''''''''''''''''''''{'}''''' '''''''''''4'3'{'n'g'i'l'a'i't'l'u'm'' '&''''''''''''''''' '&''''' '''''''''''''''''''''n''' '{'' '=' 'p'_'A''''_' '''%'''''''''''5'''''''''''{'}'3''''n'''''{'''''''n'g'i'l'a'i't'''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'h't'i'e' ','e'd'o'n' 'h'c'n'a'r'b' 'e'h't' 'f'o' 'e'p'y't'a't'a'd' 'e'h't' 'h't'i'w' 'd'e'g'g'a't' 'e'r'a''''''l'''''u'''''m'''''''' '''''&'''''''''''''''''''''''''''''''''''''' ''''' ''''' ' 'n''''''''''''&'&' '}''x'&''o'b'm''}'1'''' '}''''#'{'n'a'p's'i't'l'u'''''''''m'' ' 'n'%'{'' ''}']'2'['}'n'g'i'l'a'i't'l'u'm''{'d'n'a'm'm'o'c'w'e'n''n''''''''''''''''''''''''''''''''''''''''''''''3'''''''' '&'''''''''''''''''''''''''''''''''''''''''''''''''''''&'''''''''''''&'&'''''''''''''''''''''''''g'S''''''&'&'''n'''''i'''''t'''''a'''''e'''''r'''c' '''''''''''''''''''&'&''''''''''''''n'o'i't'a'u'l'a'v'e' 'n'o'i's's'e'r'p'x'e'''''''''b'''''''''''''''''''''''''''''&'&''''''''''''''o'''''''''''''''''''''''''''''t's'p'a'm'' '''&'&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&'&''''''''''''o't's'p'a'm'' '''''''''''''''''''''''&''''''''''''&'&''''''''''&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&''3'''&''''''''''''''''''''o't's'p'a'm'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'&''''''2'{'}'''''''&'&'''''''' ''&' ''*'t'a'n'g'i'l'a'{'n'i'g'e'b''n'''''' ''''''''&'&'''''''''&' ''''''''''''''''' ' ' ' 'n''''''''''''''''''''''''' ''''''''''''&'&''''&' '''''''''d'a'u'q''''''''''' 'd'q'u''''''''''''''''L''''''''''}'R'A'V'{'m'r'h't'a'm'' ':'v' '&'&' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ')'v''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s''''''''''''''''''''''''''''''''''''''l'l'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''' ','r'e'v'e'w'o'H'''''''''''''''''''''''''''y't'i'u''''''''''''''''e'l'p'm'i's' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'n'o'i't'a'r'e'p'o' 'g'n'''i't'a'r'e'n'e'''''''''''$'''''''''''''''''''-'e'k'a'M'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''',''''''''''''''''''}'l'a'v''''''''' ' ' 'n't'','''x''''''''''''''''''''''t'''''''g'''''''g'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'}'n'g'i's's'A'{'c's't'x'e't''{'l'e'''''-'e'k'a'M''','''''''b' ''''',''' ''''''a'''''L'''''t'''f'e'L''n'}'''r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-'e'k'a'M''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''p'_'A' 'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')''''''''''''''''''''1' ''''''''''''''''''''''''''B''''''''''''''''''''''''''''(''''''''''''r'''''''')'p' ','1' '+' ''t'''' ' ' 'n''c''''''''''''''''''''''''''''''''''''''''b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e't'a't's' 'r'e'e'p' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','r'e't's'i'g'e'r' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','|'}'{'|'b'r'e'v'' 'l'a'''''r''s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l't'n'e't's'i's'n'o'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''''''}'e't'a't's' 'r'o'i'r'p' 'g'n'i'r'a'e'l'C'{'n'o'i't'c'e's'b'u's'b'u's''n''n''e't'a't's' 'e'm'a's' 'e'h't' 's'd'r'a'w'o't' 'e'g'r'e'v'n'o'c' 's'r'e'e'p' 'l'l'a' 'e'r'u's'n'e' 's'e'l'u'r' 'e's'e'h't' 't'a'h't' 'r'e't'a'l' 'w'o'h's' 'e'W' ''''''''''''''''''''''''''''' ''.'t'n'i'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' 'e'n'i'm'r'e't'e'd' 'o't' 's'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'n'o' '$'<'$' 'n'o'i't'a'l'e'r' 'g'n'i'r'e'd'r'o' 'e'h't' 's'e's'u'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'n'i't'a'c'o'l''''o' 'y'b' 'r'e''''''''''''''''''''''''}'s'p'e'd'{'t'i'h't'a'm'' 's'u'n'i'm't'e's'' ''d'r'o' 't'n'e't's'i's'n'o'c' 'a' 's'e'r'u's'n'e' 'd'n'a' ','n'o'i't'i's'o'p' 'e'm'a's' 'e'h't' 't'a' 's't'n'e'm'e'l'e' 't's'i'l' 'g'n'i't'r'e's'n'i' 'y'l't'n'e'r'r'u'c'n'o'c' 's'r'e'e'p' 'e'l'p'i't'l'u'm' 'f'o' 'e's'a'c' 'e'h't' 's'e'l'd'n'a'h' '$'2'_'}'t'r'e's'n'I'{'c's't'x'e't''$' '.'''''''''''''n'a' ','e'r'u't'c'u'r't's' 't's'i'l' 'd'e'k'n'i'l' 'e'h't' 'g'n'i't'a'l'u'p'i'n'a'm' 'y'b' 'n'o'i't'r'e's'n'i' 'e'h't' 's'm'r'o'f'r'e'p' '$'1'_'}'t'r'e's'n'I'{'c's't'x'e't''$''''''''''''' 'e'h'T' '.'t's'i'l' 'e'h't' 'n'i' 'n'o'i't'i's'o'p' 't'a'h't' 'r'e't'f'a' 'd'e't'r'e's'n'i' 's'i' 't'n'e'm'e'l'e' 'w'e'n' 'e'h't' 'd'n'a' ','$'}'v'e'r'p'{'t'i'h't'a'm''$' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'o't' 's'r'e'f''''v'e'r' 'r'o's'r'u'c' 'e'h't' ','e's'a'c' 's'i'h't' 'n'I' '.'t's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'o't'n'i' 't'n'e'm'e'l'e' 'w'e'n' 'a' 'f'o' 'n'o'i't'r'e's'n'i' 'e'l'd'n'a'h' 's'e'l'u'r' '$'}'2','1'{'_'}'t'r'e's'n'I'{'c's't'x'e't''$' 'e'h'T''n'n''e't'a't's' 'l'a'c'o'l' 'f'o' 'e'e'r't' 'e'h't' 'o't'n'i' 'e'u'l'a'v' 'w'e'n' 'e'h't' 'g'n'i't'a'r'o'p'r'o'c'n'i' 'y'l'l'a'n'i'f' 'd'n'a' ','t'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'o't' 'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'i'd'd'a' 'n'e'h't' ',')'n'o'i't'c'e's' 't'x'e'n' 'e'h't' 'n'i' 'd'e's's'u'c's'i'd' 's'a'(' 'r'o's'r'u'c' 'e'h't' 't'a' 'e'u'l'a'v' 'r'o'i'r'p' 'e'h't' 'g'n'i'r'a'e'l'c' 't's'r'i'f' ':'e'r'u't'c'u'r't's' 'r'a'l'i'm'i's' 'a' 'e'v'a'h' '}'n'g'i's's'a'{'f's't'x'e't'' 'r'o'f''''''''''''''''' 'e'e'r'h't'''''''''''''''''' 's'e'l'u'r' 't'n'e'm'n'g'i's's'a' 'e's'e'h'T' '.'|']'['|'b'r'e'v'' 't's'i'l' 'y't'p'm'e' 'e'h't' 'f'o' 't'n'e'm''''''''''''e'''''''''''''''''t'''''i'''''l''''' '''''p'''''a'''''m''''' '''y't'p'''m'''''e' 'e'h't' 's'i' 'e'u'l'a'v' 'e'h't' 'e'r'e'h'w' 't'n'e'm'n'g'i's's'a' 's'e'l'd'n'a'h' ''a' 'f'o' 't'n'e'm'n'g'i's's'a' 's'e'l'd'n'a'h' 'e'l'u'r' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '$'}'n'g'i's's'a'{'f's'h't'a'm''''''''''x'e't''$''''' 'e'h't' 'f'o' 'n'o'i't'a'u'l'a'v'e' 'e'l'd'n'a'h' 's'e'l'u'r' '}'t's'i'L'-'y't'p'm'E'{'c's't'x'e't'' 'd'n'a' '}'p'a'M'-'y't'p'm'E'{'c's't'x'e't'' ','}'n'g'i's's'A'{'c's't'x'e't'' 'e'h'T''''' '.'s'e'i'l'p'p'a' 'n'o'i't'a't'u'm' 'e'h't' 'h'c'i'h'w' 'o't' 'e'd'o'n' 'e'e'r't' 'e'h't' 'f'o' 't'x'e't'n'o'c' 'e'h't' 'o't' 'd'e'd'n'e'c's'e'd' 'n'e'h'w' '.'e'.'i' ','y't'p'm'e' 's'i' 'r'o's'r'u'c' 'e'h't' 'n'i' 's'y'e'k' 'f'o' 'r'o't'c'e'v' 'e'h't' 'n'e'h'w' 'y'l'p'p'a' '}'s'e'l'u'r'-'n'o'i't'a'r'e'p'o':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 's'e'l'u'r' 'g'n'i'n'i'a'm'e'r' 'e'h'T'n'n'.'n'o'i't'a'r'e'p'o' 's'i'h't' 'y'b' 'e'd'a'm' 'n'o'i't'a't'u'm' 'a''''''''''t'u'm' 's'e'd'u'l'c'n'i' 'e'e'r't'b'u's' 'e'h't' 't'a'h't' 'e't'a'c'i'd'n'i' 'o't' '$')'k'('}'s'e'r'p'{'f's'h't'a'm''$' 't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 'o't' 'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'i'd'd'a' ','r'o's'r'u'c' 'e'h't' 'y'b' 'd'e'b'i'r'c's'e'd' 'h't'a'p' 'e'h't' 'g'n'o'l'a' 'e'd'o'n' 'e'e'r't' 'h'c'a'e' 't'a' '}'D'I'-''''_'d'd'A'{'c's't'x'e't'' 's'e'k'o'v'n'i' 'o's'l'a' 'e'l'u'r' '}'d'n'e'c's'e'D'{'c's't'x'e't'' 'e'h'T'''''n'n'''' '.'y'l'e'v'i't'c'e'p's'e'r' 't's'i'l' 'r'o' 'p'a'm' 'y't'p'm'e' 'n'a' 'e't'a'e'r'c''''c' '}'t's'i'L'-'d'l'i'h'C'{'c's't'x'e't'' 'd'n'a' '}'p'a'M'-'d'l'i'h'C'{'c's't'x'e't'' 'e's'i'w'r'e'h't'o' ','t'i' 's'd'n'i'f''l'a'c'o'l' 'e'h't' 'n'i' '''''''''''''''''''''' '}'t'e'G'-'d'l'i'h'C'{'c's't'x'e't'' ','s't's'i'x'e' 'y'd'a'e'r'l'a' 'e'd'o'n' 'e'e'r't' 'e'h't' 'f'I' '.'r'o's'r'u'c' 'e'h't' 'n'i' 'n'e'v'i'g' 's'y'e'k' 'f'o' 'r'o't'c'e'v' 'e'h't' 'o't' 'g'n'i'd'r'o'c'c'a' 'e'e'r't' 't'n'e'm'u'c'o'd' 'e'h't' 's'd'n'e'c's'e'd' 'y'l'e'v'i's'r'u'c'e'r''''d' 't'I' '.'s'e'i'l'p'p'a' 't's'r'i'f' 'e'l'u'r' '}'d'n'e'c's'e'D'{'c's't'x'e't'' 'e'h't' ','$'}'c'o'd'{'f's'h't'a'm''$''''' 't'o'o'r' 't'n'e'm'u'c'o'd' 'e'h't' 't'o'n' 's'i' 't'a'h't' 'e'd'o'n' 'e'e'r't' 'a' 'o't' 's'r'e'f'e'r''o'i't'a'r'e'p'o'''''''' 'r'o's'r'u'c' 'e'h't' 'n'e'h'W'n'n'.'t'n'e'm'u'c'o'd' 'a' 'n'o' 's'e't'a'd'p'u' 'e't'a't's' 'e'h't' 'm'r'o'f'r'e'p' 'o't' '}'e't'o'm'e'R'-'y'l'p'p'A'{'c's't'x'e't'' 'd'n'a' '}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't'' 'y'b' 'd'e's'u' 'e'r'a' 's'e'l'u'r' 'e's'e'h'T' '.'$'''}'x't'c'{'t'i'h't'a'm''$' 't'x'e't'n'o'c' 'd'e't'a'd'p'u' 'n'''''''''''''''' 'w'e'n' 'a' 'e'c'u'd'o'r'p' 'd'n'a' ','$'}'x't'c'{'t'i'h't'a'm''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 't'c'e'f'f'e' 'e'h''''''''''''''' 'A''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''C''''-'''c'''''''''','n'r'u't' 'n'I' 's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'u'l'a'v' 'o't''''''''''''''''''''''' 'y'b'''''''''''''''''''''''''''''''''''''''''''h't'a'm''''''''''''''''''''''''('''''''''''''''''''''''''''''''''''''''''''''''''')''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'a''''''''''''''''''''''''.'d'''''''''''''''''''''''''''''''n'o'n' 'r'i'e'h't' 'e'v'r'e's'e'r'p' 'l'l'i'w' 'n'o'i't'a'r'e'p'o' 'g'n'i'r'a'e'l'c' 'e'h't' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'g'n'i'n'i'a't'n'o'c' 's't'n'e'm'e'l'e' 't's'i'l' 'r'o' 'p'a'm' 'y'n'A' '.'d'e't'e'l'e'd' 'd'e'r'e'd'i's'n'o'c' 'e'b' 's'u'h't' 'd'n'a' ','s't'e's' 'e'c'n'e's'e'r'p' 'y't'p'm'e' 'h't'i'w' 'p'u' 'd'n'e' 'l'l'i'w' 'n'o'i't'a'r'e'p'o' 'g'n'i'r'a'e'l'c' 'e'h't' 'e'd'e'c'e'r'p' 'y'l'l'a's'u'a'c' 's'n'o'i't'a'c'i'f'i'd'o'm' 'e's'o'h'w' 's'e'i'r't'n'e' 'p'a'm' 'r'o' 's't'n'e'm'e'l'e' 't's'i'l' 'y'n'a' ','s'u'h'T' '.'$'}'s'p'e'd'{'t'i'h't'a'm''$' 'e'd'u'l'c'x'e' 'o't' 'd'e't'a'd'p'u' 'e'r'a' 's't'e's' 'e'c'n'e's'e'r'p' 'd'n'a' ','}'m'e'l'E'r'a'e'l'c'{'f's't'x'e't'''''$' 'g'n'i's'u' 'd'e'r'a'e'l'c' 'y'l'e'v'i's'r'u'c'e'r' 's'i' 't's'i'l' 'r'o' 'p'a'm' 'e'h't' 'f'o' 't'n'e'm'e'l'e' 'h'c'a'e' ':'h'c'a'o'r'p'p'a' 'r'a'l'i'm'i's' 'a' 's'e'k'a't' 's't's'i'l' 'd'n'a' 's'p'a'm' 'g'n'i'r'a'e'l'C'n'n'.')'n'o'i't'a'r'e'p'o' 'g'n'i'r'a'e'l'c' 'e'h't' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 't'n'e'm'n'g'i's's'a' 'm'o'r'f'(' '''''''''''''''''''''$'}'s'p'e'd'{'t'i'h't'a'm'''''''''''''t'x'e't''$' 'n'i' 'r'a'e'p'p'a' 't'o'n' 'o'd' 't'a'h't'''''''' 's'D'I' 'n'o'i't'a'r'e'p'o' 'l'l'a' 'g'n'i'n'i'a't'e'r' 't'u'b' ','n'o'i't'a'r'e'p'o' 'g'n'i'r'a'e'l'c' 'e'h't' 'e'd'e'c'e'r'''''''''''''p' 'y'l'l'a's'u'a'c' 'e'r'a' 'h'c'i'h'w' '.'e'.'i' ','$'}'s'p'e'd'{'t'i't'x'e't''$' 'n'i' 'r'a'e'p'p'a' 't'a'h't' 's'D'I' 'n'o'i't'a'r'e'p'o' 'l'l'a' 'g'n'i'''''' '''r'e't's'i'g'e'r' 'a' 's'e't'a'd'p'u' 's'D'I' 'n'o'i't'a'r'e'p'o' 'm'o'r'f' 'g'n'i'p'p'a'm' 'a' 's'n'i'a't'n'i'a'm' 'r'e't's'i'g'e'r' 'a' ','e'l'u'r' '}'n'g'i's's'A'{'c's't'x'e't'' 'e'h't' 'y'b' 'd'e'n'i'f'e'd' 's'A'' '''''''''''''''''''''''''''' 's'e'v'o'm'e'r' '}'g'e'R'-'r'a'e'l'C'{'c's't'x'e't''n'n'.'t'n'e's'b'a' 's'i' 'y'e'k' 'e'h't' 'f'i' ')'g'n'i'h't'o'n' 's'e'o'd' 'h'c'i'h'w'(' '}'e'n'o'N'-'r'a'e'l'C'{'c's't'x'e't'' 'y'b' 'r'o' ','$'}'x't'c'{'t'i'h't'a'm''$' 'n'i' 's'r'a'e'p'p'a' 'y'e'k' 'e'v'i't'c'e'p's'e'r' 'e'h't' 'f'i' '}'g'e'R'-'r'a'e'l'C'{'c's't'x'e't'' 'd'n'a' '$'1'_'}'t's'i'L'-'r'a'e'l'C'{'c's't'x'e't''$' ','$'1'_'}'p'a'M'-'r'a'e'l'C'{'c's't'x'e't''$' 'y'b' 'd'e'i'f's'i't'a's' 'e'r'a' '}'y'n'A'-'r'a'e'l'C'{'c's't'x'e't'' 'f'o' 's'e's'i'm'e'r'p' 'e'h'T''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h't'a'm'''''''''''''''''''''''.'$'}'s'p'e'd'{'t'i't'x'e't''$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'y'n'a' 'e'd'u'l'c'x'e' 't'u'b' ','s'D'I' 'n'o'i't'a'r'e'p'o' 'd'e't's'e'n' 'y'n'a' 'e'd'u'l'c'n'i' 'o't' 't'e's' 'e'c'n'e's'e'r'p' 'e'h't' 's'e't'a'd'p'u' 'o's'l'a' 'd'n'a' ','}'T'g'e'r'{'f's't'x'e't'' 'r'o' '}'T't's'i'l'{'f's't'x'e't'' ','}'T'p'a'm'{'f's't'x'e't'' 'e'p'y't' 'f'o' 's'i' 't'i' 'r'e'h't'e'h'w' 'f'o' 's's'e'l'd'r'a'g'e'r' ','''' 'y'e'k' 'n'e'v'i'g' 'a' 'h't'i'w' 'a't'a'd' 'y'n'a' 't'u'o' 'r'a'e'l'c'''''''''''''''''''''''''''''''''''''''''''l'c' 'y'l'e'v'i's'r'u'c'e'r' 'o't' '}'y'n'A'-'r'a'e'l'C'{'c's't'x'e't'' 's'e's'u' '}'m'e'l'E'-'r'a'e'l'C'{'c's't'x'e't'' '.'}'m'e'l'E'r'a'e'l'c'{'f's't'x'e't'' 'o't' 'g'n'i't'a'g'e'l'e'd' 'y'b' ','d'e't'a'u'l'a'v'e' 's'i' 'n'o'i't'a'r'e'p'o' 's'i'h't' 'w'o'h' 's'w'o'h's' 'e'l'u'r' '}'e't'e'l'e'D'{'c's't'x'e't'' 'e'h'T' '.'o't' 's'r'e'f'e'r' 'r'o's'r'u'c' 'e'h't' 't'a'h'w' 'n'o' 'g'n'i'd'n'e'p'e'd' ','p'a'm' 'a' 'm'o'r'f' 'y'e'k' 'a' 'r'o' 't's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'm'o'r'f' 't'n'e'm'e'l'e' 'n'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'r'e'h't'i'e' 'e't'e'l'e'd' 'o't' 'd'e's'u' 'e'b' 'n'a'c' 'h'c'i'h'w'(' 's'n'o'i't'a'r'e'p'o' '''''''''''''}'e't'e'l'e'd'{'f's't'x'e't'' 'e'h't' 'w'o'h' 's'w'o'h's' 'e'l'u'r' '}'e't'e'l'e'D'{'c's't'x'e't'' 'e'h'T'n'n'.'d'e'h'c'u'o't'n'u' ''t''''''''''''''''''''''''''s'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'y'n'a' 'g'n'i'v'a'e'l' 'e'l'i'h'w' ','n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c' 'e'h't' 'e'd'e'c''''d'e'r'p' 'y'l'l'a's'u'a'c' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'y'n'a' 'g'n'i'o'd'n'u' 'y'b' 'e't'a't's' 'y't'p'm'e' 's't'i' 'o't' 't'i' 't'e's'e'r' 'o't' 's'i' 'g'n'i'h't'e'm'o's' 'g'n'i'r'a'e'l'c' 'f'o' 't'c'e'f'f'e' 'e'h't' ','y'l'e'v'i't'i'u't'n'I' '.'}'s'e'l'u'r'-'r'a'e'l'c':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'e'v'i'g' 'e'r'a' 's's'e'c'o'r'p' 'g'n'i'r'a'e'l'c' 's'i'h't' 'e'l'd'n'a'h' 'o't' 's'e'l'u'r' 'e'h'T' '.'t's'o'l' 't'o'n' 'e'r'a' 's'n'o'i't'a'c'i'f'i'd'o'm' 't'n''''m'e'r'r'u'c'n'o'c' 't'a'h't' 'g'n'i'r'u's'n'e' 'o's'l'a' 'e'l'i'h'w' ','''' 'd'e'r'a'e'l'c' 's'i' ')'d'e't'e'l'e'd' 'r'o' 'n'e't't'i'r'w'r'e'v'o' 'g'n'i'e'b' 'e'u'l'a'v' 'e'h't'(' 'e't'a't's' 'r'o'i'r'p' 't'a'h't' 'e'r'i'u'q'e'r' 's'n'o'i't'a'r'e'p'o' 'n'o'i't'e'l'e'd' 'd'n'a' 't'n'e'm'n'g'i's's'A' 't'x'e't'n'o'c' 'a' 'n'i'h't'i'w' '$'}'p'o'{'f's'h't'a'm''$' 'n'o'i't'a'r'e'p'o' 'n'a' 'e't'a'u'l'a'v'e' 't'a'h't' 's'e'l'u'r' 'e'h't' 's'e'v'i'g' '}'s'e'l'u'r'-'n'o'i't'a'r'e'p'o':'g'i'f'{'f'e'r''~'e'r'u'g'i'F'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''$'''''''''''p'''''_'''''A'''''''' '''''o'''''t'''''l'''''a'''''v'''''e'''''''' ''''')'''''}'''''t'''''u'''''m'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''':'''''''''''''''''''''''m'''''P''''''''''''''D'''''I'''''''''''''''''r''''''''''''''''''''''''''''' ''''''''''','''''}'''''r'''''u'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''('''''}'''''p'''''O'''''e'''''k'''''a'''''m'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' ''''','''''''','''''p'''''_'''''A'''''$'''''{'''''C'''''f'''''n'''''I'''''y'''''r'''''a'''''n'''''i'''''r'''''T''''''''n'''''}'''''}'''''p'''''O'''''-'''''e'''''k'''''a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-'e'k'a'M'''''''''''''-'e'k'a'M''''''''''''''''-'e'k'a'M'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$'''''p'_'A' 'o't'l'a'v'e'' '}'d'l'e'i'y'{'f's'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B''n'}'}'d'l'e'i'Y'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'g'a's'e'm''''''''''''''''''''''''''' 'e'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h't'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''$''''''''''''''''''''''''''''''''x''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'y'a'''w'e'd'i's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'d'l'i'h'c'''''''''''''''''''' ' ' ' 'n'}'x'i'r't'a'm'{'n'i'g'e'b''{'t'i'h't''''d'l'i'h''''' '''''''a'''''''''''m'' 'o't'l'a'v'e'''''e' '1'_'k' ','','''''''''''''''''''''''''''''''''''''''''' ' ' ' 'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''}'x't'c'{'t'i'h't'a'm'' '''r'T'''o't'l'a'v'e'' ')'}'d'i'{'t'i'h't'a'm'' ','1'_'k'('}'d'I'd'd'a'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n''''''''''''d''''''''''''}'m'e'3'{'e'c'a'p's'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'%''''''r'''''e'''''t'''''n'''''e'''''c'''''{'''d'n'e''n't'n'u'o'm'A'p'i'k'S'f'o'o'r'p''''''''''''''''''''''''''''''''''''''%'''''''''''''''''''''''''''''''''n''''''''''''''}'r'e't'n'e'c'{'n'i'g'e'b'''''}'r'e't'n'e'c'{'d'n'e''n't'n'u'o'm'A'p'i'k'S'f'o'o'r'p'''''''''''''''''''''''''''''''''}'r'e't'n'e'c'{'n'i'g'e'b'''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f''''''''''e'e'r't'f'o'o'r'p'''o'''''o'''''r'''p''f'o'o'r'P'y'a'l'p's'i'D''n'}'$'}''{''''''''m'' 'o't'l'a'v'e''''''''''''''''' ','','}'x't'c'{'t''''''o't'l'''t''''s'''''''''''''''''''''''''''''''''''e'''''''''''''''''r'''''''''''p''''''''''''''''''''''''''i'''''''''''''''''a'''''v'''''e''''''''''''''''''''i'''''''''''''''''''h'''''''''''''''''''''''''''''''''''t'''''''t'i'''a'''''''m''''''''''''''''''' ''''')'''''k'''''('''''}'''''''''''''''''s'''''''''''''''''e'''''''''''''''''r'''''''''''''''''p'''''''''''''''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' ''''','''''''','''''}'''''x'''''t'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''$'''''{'''''C'''''f'''''n'''''I'''''y'''''r'''''a'''''n'''''U''''''''n'''''}'''''$'''''2'''''_'''''}'''''e'''''c'''''n'''''e'''''s'''''e'''''r'''''P'''''{'''''c'''''s'''''t'''''x'''''e'''''t''''''''$'''''{'''''l'''''e'''''b'''''a'''''L'''''t'''''f'''''e'''''L''''''''n'''''}'''''$''''')'''''}'''''x'''''t'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''('''''}'''''m'''''o'''''d'''''{'''''m'''''r'''''h'''''t'''''a'''''m'''''''' '''''n'''''i'''''t'''''o'''''n'''''''' ''''')'''''k'''''('''''}'''''s'''''e'''''r'''''p'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''$'''''{'''''C'''''m'''''o'''''i'''''x'''''A''''''''n'''''%'''''n'''''}'''''m'''''e'''''3'''''{'''''e'''''c'''''a'''''p'''''s'''''h''f'o'o'r'P'y'a'l'p's'i'D''n'}'$')')'k'('}'s'e'r'p'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'k'('}'s'e'r'p'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'$'1'_'}''''n'''e'c'n'e's'e'r'P'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L'''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'s'e'r'p'{'f's'h't'a'm''$'{'C''''''''''e'e'r't'f'o'o'r'p'''m'''''o'''''i'''x'A'n'%'n'}'m'e'3'{'e'c'a'p's'h''''''''''''''''''''''''''''''''''''}'''''''''''m'''''e'''''3'''''{'''''e'''''c'a'p's'h''''''''''''''''''''''''''''''''''''''''''''''''' '}'x'i'r't''' '''a'm'{'d'n'e'' ' ' ' 'n'''''''''d''''l'i'h'c'''l'''''i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'e'G'-''''''''''''''''''''''''''''''''''''''''''''r'e't'n'e'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'a'M'-''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'l'i'f'''''''''''''''''''''''''''''''}'''%''''''''m'''''e'''''3'''''{'''''e'''''c'''''a'''''p's'h''f'o'o'r'P'y'a'l'p's'i'D''''''''''''''''''''''''''''''''''''(''''')''}'T't'''s'i'l'{'f''''''t'''''''s'i'L'-'s'h't'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' 'n''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f'o'o'r'p''f'o'o'r'P'y'a'l'p's'i'D''n'''''''''''''r'e't'n'e'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''''''''''''''''''''$'1'_'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$']','' '}''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'d'''l'i'h'c'{'t'i'h'''t'a'm'' '''''''r'e't'a'u'Q'''''o't'l'a'v'e'''''''e'3'' ')'k'('}'T'p'a'm'{'f's'h't'a'm'' ','','''''''''''''''''''''''''''''''1'''''''''''''''}'d'l'i'h'c'{'t'i'h't'a''2'''m''''''''_'''''''''''''3'_''''+''''''''''''''''''''''1''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''''}'$'}'m'e'l'e'{'t'i'h't'a'm''_'}'s'e'r'p'''''''''''''''}'d'l'i'h''''''''''''''''''''''3'_'''''''''''}''''''''3'_''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''' '3'_'}'s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}''{'' ','','}'x't'c'{'t'''''''t'o'i'h't'a'm'' 'o't'l'a'v'e'' ')'k' ','}'s'p'e'd'{'t'i'h't'a'm''('}'r'a'e'l'c'{'f's'h't'a'm'' ','','}'x'''t'''c'{'t'i'h'''''t'a'm''$'{'C'''''f'n'I'y'r'a'''''n'U''n'}'}'e'n'o'N'-'r'a'e'l'C'{'c's't'x'e't''{'l'e'''''b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i't'o'n'' 'k'$'{'C'm'o'i'x'A''n''''''''''''''''''''r'''''''''''''''''''''''''''''''''''''''''''o'''''t'''''l'''''a'''''v'''''e'''''''' ''''')''''')'''''k'''''('''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' '''''''''''''''''''''''''''''''''''''''''''''''''t'f'e'L''n'}'$'}''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'s'e'r'p'{'''''''''''''''''''''''''''''''''''''''''''''''' ' ' 'n'' '}'x'i'r't'a'm'{'n'i'g'e'b'''''' ' ' ' 'n'''''''''''''''''''''''''''''''''''}'x'i'r't'a'''''''''''''''''''' ' ' ' 'n'}'x'i'r't'a'm'{'n'i'g'e'b''m'{'d'n'e'' '''''''''' ' ' 'n''' '''''''''''''''''''''''''''''''''''''''''}'x'i'r't'a''''''''''''''''''''''' ' ' ' ' 'n'}'x'i'r't'a'm'{'n'i'g'e'b''m'{'d'n'e'' '''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'x'i'r't'a'm'{'d'n'e'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''','''''''''}'$'}''{'' ','}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n')'}'e'n'o'd'{'t'i'h't'a'm'' ','}'s'p'e'd'{'t'i'h't'a'm''('}'p'a'M''''''''''t'''''''''''''''''''''''''''''')'}'d'''''a'''''e'''''h'''''{'''''''''''''''''}'s'e'r'p'{'t''$'i'h't'a'm'' ','','''''$'1'_'''''f'''''s'''''h'''''t'''''a'''''m'''''''' '''''''''''''''''''''''''''''''''''''''''s'''''i'''''L'''''r'''''a'''''e'''''l'''''c'''''''''''''''''r'''''''''''''''''''''}'s'e'r'p'{'t'i'h't'a'm'' ','',''a'''''e'''''''''''''''''''' ' ' ' 'n'}'x'i'r't'a''','''''''''''' ' ' ' '''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''' ' ' ' 'n'}'x'i'r't'a'm''''''''''m''''''''''''''''''''''' ')'''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'x'i'r't'a'm'{'d'n'e'' '2'_'}'s'e'r'p'{'t'i'h't'a'm'' ','''''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n''' ')'}'t'x'e'n'{'','''t'i'h't'a'm'' ','}'s'p'e'd'{'t'i'h't'a'm''('}'t's'i'L'r'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's'i'L''''''''''''''''''''''''''''''''''''''''''''t'''''''''''''''''''''''''''''''''''''''''''''''''''}'''''$'''''}''''''''{'''''''' '''''''''''''''' 'd'n'a'''''''e't'a't's' ' 'g'n'i't'e'l'e'd''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''}'''''x'''''t'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m'''''''' '''''o'''''t'''''l'''''a'''''v'''''e'''''''' ''''')'''''k''''' '''''''''''''''''''''''''''''''''''''''''s'''''i'''''L'''''r'''''a'''''e'l'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'l'c'{'f's'h't'a'm'' ','','''}'x't'c'{'t'i'h't'a'm'''''''t'a'' ' ' ' 'n'}'x'i'r't'a'm'{'n'i'g'e'b''$'{'C'm'o'i'x'A''n'x'i'r't'a'm'{'d'n'e''''' ' '1'_'}'s'e'r'p'{'t'i'h't'a'm'' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''k' '''''''''''''e'l'E''''L'r'a'e'l'c'''{'''n'i'g'e'b'''''''''' '}'x'i'r't'a'm'{'d'n'e'' ' ' ' 'n''''''''''''''''''''''''''''''''''''''' ''''' ' 'n''' ''m'{'n'i'g'e'b''''''l'''''c'''''{'''''f'''''s'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'$'3'_'}'p'a'M'-'r'a'e'l'C'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'s'y'e'k'{'m'r'h't'a'm''''''r''''''''''''''''''''''''''''''''''''''''''''o'''''t'''''l'''''a'''''v'''''e'''''''' ''''''t's'i'L'''''''''''')''''''2''''')'''''k''''''''''''''t''''''''''''''''''''''''''''o'''''t'''''l''''''''''''''''''''''''''''''''''''''''''''''2'_'}'s'e'r'p'{'t'i'h't'a'm'' ',''p'u'c'','' '1'_'}'s'e'r'p'{'t'i'h't'a'm'' ','''''''''''a'''''''''''''''''v'''''''''''''''''e'''''''''''''''''''''''''' ''''''''''''''''')'''''''''''''''''k''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''i'''''L'''''r'''''a'''''e'''''l'''''c'''''''''''''''''('''''''''''''''''}'''''''''''''''''T'''''''''''''''t'''''s'''''i'''''l'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' '''''''''''''''''''''''''''''''''''''''''a'''''e'''''l'''c'''''' '=' '}'e'n'o'd'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'2'_'}''''{'s'e'r'p'{'t'i'h't'a'm'' 'p'u'c'' '1'_'}'s'e'r'p'{'t'i'h't'a'm'' ','','''''}'x't'c'{'t'i'''''''''''''''''''' 'o't'l'a'v'e'''''''h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'e'n'o'd'{'t'i'h't'a'm'' ','}'s'p'e'd'{'t'i'h't'a'm''('}'p'a'M'r'a'e'l'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'r'T''n'}'$'2'_'}'p'a'M'-'r'a'e'l'C'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'2'_'}'s'e'r'p'{'t'i'h't'a'm'' ','','''''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n')'}''k'{'' 'p'u'c'' '}'e'n'o'd'{'t'i'h't'a'm'' ','}'s'p'e'd'{'t'i'h't'a'm''(''''{'}'p'a'M'r'a'e'l'c'{'f's'h't'a'm'' ','','''''''''',''','''}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'1'_'}'s'e'r'p'{'t'i'h't'a'm'' ','''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'k' ','}'s'p'e'd'{'t'i'h't'a'm''('}'m'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'e'n'o'd'{'t'i'h't'a'm'' 'n'i't'o'n'' 'k' ',''e'g'd'e'w'','' ')'}'x't'c'{'t'i'h't'a'm''('}'s'y'e'k'{'m'r'h't'a'm'' 'n'i'' 'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e'''''''e'n''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n't'i'h't'a'm'' ','',']','' '}'d'e'r'a'e'l'c'{'t'i'h't'a'm'' ',''o't's'p'a'm'','' ')'k'('}'T'p'a'm'{'f's'h't'a'm'' ',''[' '}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')')'k'('}'T'p'a'm'{'f's'h't'a'm'' ','}'s'p'e'd'{'t'i'h't'a'm''('}''''('r'a'e'l'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n's'e'r'p'{'t'i'h't'a'm'' ','','}'d'e'r'a'e'l'c'{'t'i'n'''''''h't'a'm'' 'o't'l'a'v'e'' ')'}''{'' ','}'s'p'e'd'{'t'i'h't'a'm''('}'p'a'M'r'a'e'l'c'{'f's'h't'a'm'' ','',''''')')'k'('}'T'p'a'm'{'f's'h't'a'm''('''''''','}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n''''''''''''''$''''''''''''''''''''$'''''1'_'''''''n'}'}'p'a'M'-'r'a'e'l'C'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'T'p'a'm'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''''''''''''')'}'t'n'e'r'r'u'c'n'o'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r''''''''''{'t'i'h't'a'm'' ','','''''T'''''g'''''e'''''r'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' '''''''''''''''''''''''''''''''''''''''''a'''''e'''''l'''''c'''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''e'r'p'{'t'i'h't'a'm'' ',''p'u'c'',''''''''c'' '2'_'}'s'e'r'p'{'t'i'h't'a'm'' ',''p'u'c'','' '1'_'}'s'e'r'p'{'t'i''''t'h't'a'm'' ','','3'_''''-'}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'k' ','}'s'p'e'd'{'t'i'h't'a'm''('}'y'n'A'''''''''''''m'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'r'T''n'}'}'y'n'A'-'r'a'e'l'C'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'x'i'r't'a'm'{'d'n'e'' ''''''' '}'3'_'}'s'e'r'p'{'t'i'h't'a'm'' ','','3'_'}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n''' ')')'k'('}'T'g'e'r'{'f's'h't'a'm'' ','}'s'p'e'd'{'t'i'h't'a'm''('}'r'a'e'l'c'{'f's'h't'a'm'' ','','2'_'}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'}'x'i'r't'a'm'{'n'i'g'e'b''$'{'C'm'o'i'x'A''n'}'$'}'x'i'r't'a'm'{'d'n'e'' '2'_'}'s'e'r'p'{'t'i'h't'a'm'' ','','2'_'}''''_'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n''' ')')'k'('}'T't's'i'l'{'f's'h't'a'm'' ','}'s'p'e'd'{'t'i'h't'a'm''('}'r'a'e'l'c'{'f's'h't'a'm'' ','','1'_'}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'}'x'i'r't'a'm'{'n'i'g'e'b''$'{'C'm'o'i'x'A''n'}'$'}'x'i'r't'a'm'{'d'n'e'' '1'_'}'s'e'r'p'{'t'i'h't'a'm'' ','','1'_'}''''_'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n''' ')')'k'('}'T'p'a'm'{'f's'h't'a'm'' ','}'s'p'e'd'{'t'i'h't'a'm''('}'r'a'e'l'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'}'x'i'r't'a'm'{'n'i'g'e'b''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' 'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''}'s'e'r'p'{'t'i'h't'a'm'' ','',']','' '''}'s'e'r'p'{'t'i'h't'a'm'' ',''o't's'p'a'm'','' ')'k'('}'s'e'r'p'{'f's'h't'a'm'' ',''[' '''''''''''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')''''}'k' ','}'s'p'e'd'{'t'i'h't'a'm''('}'m'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'r'T''n'}'}'m'e'l'E'-''''_'r'a'e'l'C'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'm'e'l'e'{'t'i'h't'a'm''_'}'s'e'r'p'{'t'i'h't'a'm''c'{'t'i'h't'a'm''_''{'t'i'h't'a'm'' 'o't'l'a'v'e'''''=' '''''''''''''''''''''''''''''''''')'k'('}'s'e'r'p'{'f's'h't'a'm'' ','','''}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'''''''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'d'i'{'t'i'h't'a'm'' ',')'k'('}'T'p'a'm''''''''''g'e'r'{'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$']','' '}'d'l'i'h'c'{'t'i'h't'a'm'' ',''''' 'o't's'p'a'm'','' ')'k'('}'T't's'i'l'{'f's'h't'a'm'' ',''['''''}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')')'}'l'a'v'{'t'i'h't'a'm''('}'n'g'i's's'a'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'r'e't'a'u'Q''n'}'}'t's'i'L'-'y't'p'm'E'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'d'l'i'h'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'k'('}'T't's'i'l'{'f's'h't'a'm'' ','','''''}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'''''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'d'i'{'t'i'h't'a'm'' ',')'k'('}'T't's'i'l'{'f's'h't'a'm''('}'d'I'd'd'a'{'f's'h't'a'm'' ','','''}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''''m''n'}'$'}'s'e'r'p'{'t'i'h't'a'm'' ','','''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'k' ','}'s'p'e'd'{'t'i'h't'a'm''('}'m'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}']'['{'t't't'x'e't'' '=' '}'l'a'v'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b'''''''''''''''''''''''''''''''m'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'a'l'i'm'i's''''''''''''''''''''''r'a'l'i's'm'i' 's'i' 't's'i'L'-'y't'p'M'E' 'O'D'O'T' '%'n'n''s'h't'a'm''('}'d'I'd'd'a'{'''f'''''s'''''''''%''''''''''''''''''%'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'e'r'p'{'t'i'h't'a'm'' ',''''' ','''}'%''x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'k' ','}'s'%''p'e'd'{'t'i'h't'a'm''('}'m'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ','','''' '''h'''''t'''''a'''''m''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$' ',''p'u'c'','' '}'s'e'r'p'{'t'i'h't'a'm'' '=' '''}'s'e'r'p'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'s'e'r'p'{'t'i'h't'a'm'' ','''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'k' ','}'s'p'e'd'{'t'i'h't'a'm''('}'y'n'A'r'a'e'l'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'''''''''''' ''''','''''''','''''''''''}'''''x'''''t'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''m''$'{'C'm'o'''i'x'A''n's'e'r'p'{'t'i''''''e't'e'''h'''''t'''a'm'' ','','''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'k' ''''''''''''''''t'a'm'' ','}'s'p'e'd'{'t'i''''''f'f'''k''''''''''''''''e't'e'l'e'' '''d'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h'''''t'''''a'''''m''''''''('''''}'''''m'''''e'''''l'''''E'''''r'''''a'''''e'''''l'''''c'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''' ','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'a'v'{'t'i'h't'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'a'M'-'y't'p'm'E''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''','''''''''''''''''''''''''''}'$']','' '}''}''''''''''''''{'t't't'''''T'p'a'm'''x'''''e'''''''''''''''''']','' '}'d'l'i'h'c'{'t'i'h't'a'm'''''t'''''''''''''''' ',''o't's'p'''''''''''''''''''''''''''''''''}'''''}'''''g'''''n'''''i'''''r'''''t'''''s''''''''{'''''g'''''n'''''i'''''r'''''t'''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'i'{'t'i'h't'a'm''{'' 'p'u'c'' ')')'k'('}'s'e'r'p'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm'' ',''o't's'p'a'm'','' ')'k'('}'''''s'''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'e'r'p'{'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'d'l'i'''h'c'{'t'i'h't'a'''''''r'e't'a'u'Q'''''''''m'''''' 'o't'l'a'v'e'' ')'k'('}'T'g'e'r'{'f's'h't'a'm'' ','''''}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'d'i'{'t'i'h't'''''''a'm'' ',')'k'('}'T'g'e'r'{'f's'h't'a'm''(''''d'l'i'h''''''}'''''d'''''I'''''d'''d'a'{'f's'h't'a'm'' ','''}'x't'c'{'t'i'h't'a'm''''''t'''''i'''''h'''''t'''''a'''''m'''''''' ''''','''''''','''''''''''}'''''x'''''t'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m'''''''' '''''o'''''t'''''l'''''a'''''v'''''e'''''''' ''''')''''')'''''k'''''('''''}'''''T'''''g'''''e'''''r'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' ''''','''''}'''''s'''''p'''''e'''''d'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''('''''}'''''r'''''a'''''e'''''l'''''c'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' ''''','''''''',''''''''''''''''''''''','''''''''''''''''''''''r'''''''''''''''''p'''''''''''''''''{'''''''''''''''''f'''''''''''''''''s'''''''''''''''''h'''''''''''''''''t'''''''a'''''m'''''''' ''''',''''''''['''''}'''''x't'c'{'t'i'h'''t'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'d'i'{'t'i'h't'a'm'' ','}'g'a't'{'t'i'h't'a'm''_'k'('}'d'I'd'd'a'{'f's''''i'h't'a'm'' ','','}'''','x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'2'_'}'D'I'-'d'd'A'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$')''''('}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'s'e'r'p'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'')'k'('}'T'g'e'r'{'f's'h't'a'm'' ',')'k'('}'T't's'i'l'{'f's'h't'a'm'' ',')'k'('}'T'p'a'm'{'f's'h't'a'm'''''m'{'' 'n'i'' '}'g'a't'{'t'i'h't'a'm''_'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'd'i'{'t'i'h't'a'm''{'' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''''''''''''''''}'*'e'r'u'g'i'f'{'n'i'g'e'b''n''*'e'r'u'g'i'f's'y'a'w'e'd'i's'{'d'n'e''n'}'s'e'l'u'r'-'n'o'i't'a'r'e'p'o':'g'i'f'{'l'e'b'a'l''}'e't'a't's' 't'n'e'm'u'c'o'd' 'g'n'i'y'f'i'd'o'm' 'd'n'a' 's'n'o'i't'a'r'e'p'o' 'g'n'i't'a'u'l'a'v'e' 'r'o'f' 's'e'l'u'R'{'n'o'i't'p'a'c''n'o't's'p'a'm'','' ')'k'('}'s'e'r'p'{'f's'h't'a'm'' ',''['}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'d'i'{'t'i'h't'a'm'' ','}'g'a't'{'t'i'h't'a'm''_'k'('}'d'I'd'd'a'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'1'_'}''''-'D'I'-'d'd'A'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''(''''{'}'m'o'd'{'m'r'h't'a'm'' 'n'i't'o'n'' ')'k'('}'s'e'r'p'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'')'k'('}'T'g'e'r'{''''('f's'h't'a'm'' ',')'k'('}'T't's'i'l'{'f's'h't'a'm'' ',')'k'('}'T'p'a'm'{'f's'h't'a'm''{'' 'n'i'' '}'g'a't'{'t'i'h't'a'm''_'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'}'r'e't'n'e'c'{'d'n'e'''n'''''u'''''o'''''m'''''A'''''p'''''i'k'S'f'o'o'r'p''f'o'o'r'P'y'a'l'p's'i'D''n'}'$'}''{'' 'o't'l'a'v'e'' ')'k'('}'T'g'e'r'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'}'g'e'R'-'d'l'i'h'C'{'c's't'x'e't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''{'l'e'b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i't'o'n'' ')'k'('}'T'g'e'r'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''''''''''''''''''''''''''''''''h't'a'm''$'{'C'm'o'i'x'A''n''''$'%'n'}'m'e'3'{'e'c'a'p's'h''f'o'o'r'P'y'a'l'p's'i'D''n'}'$'}'','' '}'l'i'a't'{'f's'h't'a'm''''''''','''''' 'o't's'p'a'm'' ')'}'d'a'e'h'{'f's'h't'a'm''('}'t'x'e'n'{'f's'h't'a'm'',''{'' 'o't'l'a'v'e'' ')'k'('}'T't's'i'l'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'$'3'_'}'d'l'i'h'C'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i't'o'n'' 'k'$'{'C'm'o'i'x'A''n'}'r'e't'n'e'c'{'n'i'g'e'b''n'n't'n'b'u'o'm'A'p'i'k'S'f'o'o'r'p''f'o'o'r'P'y'a'l'p's'i'D''n'}'$'}''{'' 'o't'l'a'v'e'''''e' ')'k'('}'T'p'a'm'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'$'2'_'}''''_'d'l'i'h'C'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r''''i'h't'a'm'' 'n'i't'o'n'' ')'k'('}'T'p'a'm'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'%'n'}'m'e'3'{'e'c'a'p's'''''''''''''l'l'i'f'h''f'o'o'r'P'y'a'l'p's'i'D''n'}'$')'k'('}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' 'k''''' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'$'1'_'}'d'l'i'h'C'{'c's't'x'e't''$''''''''''e't''{'l'e'b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' 'k'$'{'C'm'o'i'x'A''n''''''''''''''}'r'e't'n'e'c'{'d'n'e''n'}'r'e't'n'e'c'{'n'i'g'e'b'''''h'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l''}'g'n''''''r'a'e'l'c'''''''''''''''''''''i'r'a'e'l'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*'''''''''''''''''''''''''''''''''''''''',''''''','''''''''''''''''''''''']','' '}'e't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'y'a'w'e'd'i's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$']','' '''''b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' ' 'n'}'x'i'r't'a'm'{'n'i'g'e'b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '}'x'i'r't'a'm'{'d'n'e'' ' ' ' 'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' ' 'n'}'''''''t'n'e'r'r'u'x'i'r't'a'm'{'n'i'g'e'b'''''' ' ' 'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'x'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'''''''''''''''''''t'i'''''''''''''''''''''''''''''''''''''''''''''''''' ' ' 'n''''''''''''t'n'e'r'r'u''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')''''''''''''''''''t'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$']',''}'','' '}'l'a'v'{'t'i'h't'''a'''''m'''''''''''''}''''''''''''''('}'t'x'e'n'{')''f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'h't'a'm'''x't'c'{'t'i'h't'a'm''''''''''''''''''''''f's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'x't'c'{'t'i'h't'a'm'''''''' '''''''i'r'T'''''''''''''''''}'x't'c'{'t''o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','','e'l'g'n'a')'''''''''''''''''''''''''''''')'}'l'a'v'{'t'''''''''''''}'x'''''''''''''''('}'t'x'e'n'{')''f's'h't'a'''''''''''''''''''''''''''''''''''''('}'t'x'e'n')''{'f's'h't'''a'''''m'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n's'e'l'u'r' 'o'w't' 't'x'e''''''''''''''''''''''''''''('}'t'x'e'n'{')''f'''''''''''''''''''''''''''''''''t'r'e's'n'i'''''''''''''''''''''''''''''''''''''''''''''''''''''x't'c''''''''o''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''' ','','e'l'g'')'''''''''''''''''''''''''{'''')'}'l'a''t''''''''''''}'x't'c'{'t'i'h't'a'm'''''''''''''''''''''i'h'''t'''''''''''''}'x't'c'{'t''o'''i'''''h''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('}'m'o'd'{'')'m'r'h't'a'm'' 'n'i'' '''''''''''''''''''''''''''''''''''''''U'''''''''''''''''''''''''''''}'x't'c'{'t'''p'o'''i'''''h''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','','e'l'g'n'a''''''''''''''''''')'}'l'e'D't's''''''''''''}'x'''''''''''''''''('}'d'e't'e'l'e')''d'{'f's'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''_''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''']','' '}'t'n'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ',''e'g'd'e'w'','' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'s'p'e'd'{'t'i'h't'a'm'' 'n'i'' 'k'$'{'C'm'o'i'x'A''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'t'x'e'n'{'t'i'h't'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i'r'T'''''''''''''''$''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''e'''''e'''''r'''''t'''''f'''''o'''''o'''r'p'{'d'n'e''n'}'$'}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'s'm'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'U''n'}'$'3'_'}'s'm'e'l'E'-'r'a'e'l'C'{'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'u't'c'u'r't's' 'e'h't' 'o't' 's'n'o'i't'a't'u'm' 't'n'e'r'r'u'c'n'o'c' 'o'n' 'e'r'a' 'e'r'e'h't' 'f'i' 't'i' 'e'v'o'm'e'r' 'd'l'u'o'h's' 'e'r'u't'c'u'r't's' 'a' 'g'n'i'r'a'e'l'C''''C' 'm'e't'i''n's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'}'l'i'a't'{'f's'''''''f's'h't'a'm'' '=' 'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'}'e'e'r't'f'o'o'r'p''''['{'d'n'e''n'}'$'''}'x't'c'{'t'i'h't'a'm'' ''''n'o't'l'a'v'e'' ')'}'s'''''''s'e'm'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'r'T''n'}'$'2'_'}'s'm'e'l'E'-'r'a'e'l'C'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'s'm'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ',')'}'t'x'e'n'{'t'i'h't'a'm'' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{''''$'C'm'o'i'x'A''n'}'$'}'t'x'e'n'{'t'i'h't'a'm'' '=' ')')'k'('}'''')'t'x'e'n'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'s'p'e'd'{'t'i'h't'a'm'' 'n'i't'o'n'' 'k' ',''e'g'd'e'w'','' '}'l'i'a't'{'f's'h't'a'm'' '='t'o'n'' 'k'$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$']',''}'e'u'r't'{'f's'h't'a'm'' ',''o't's'p'a'm'','' ')'k'''''''''''''''''''''''''{'''''''k'('t'i'h't'a'm''('}'d'e't'e'l'e'd'{'f's''''h't'a'm'' ',''['''}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'''' 'o't'l'a'v'e'' ')'}'''''''''''''''''''''''''''''s'm'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''''','e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'r'e't'a'u'Q''n'}'$'1'_'}'s'm'e'l'E'-'r'a'e'l'''''''''e'l'C'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'''}'x't'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'s''''e'm'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'{'C'm'o'i'x'A''n'}'$'}'t'x'e'n'{'t'i'h't'a'm'' '=' ')')'k'('}'t'x'e'n'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'l'i'a't'{'f's'h't'a'm'' '='t'o'n'' 'k''''''''''''''''h't'a'm''$'{'C'm'o'i'x'A''n'}'''''e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$']','' '}'d'e'r'a'e'l'c'{'t'i'h't'a'm'' ',''o't's'p'a'm'','' ')'k'('}'T't's'i'l'{'f's'h't'a'm'' ',''['}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'t's'i'L'r'a'e'l'c'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n'}'}'t's'i'L'-'r'a'e'l'C'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'d'e'r'a'e'l'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'s''''e'm'e'l'E'r'a'e'l'c'{'f's'h't'a'm'' ',')'}'d'a'e'h'{'f's'h't'a'm'' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i''''s'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','',')')'k'('}'T't's'i'l'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'T't's'i'l'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''r'r'u'c'n'o'c'{'t'i'h't'a'm'' ',''''' 'o't's'p'a'm'','' ')'k'('}'T'g'e'r'{'f's'h't'a'm'',''''''''''''''''''''''['}'x't'c'{'t'i'''''''f's'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'''')'g'e'R'r'a'e'l'c'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''''}'$'$'{'C'f'n'I'y'r'a'n'i'B''n'}'}'g'e'R'-'r'a'e'l'C'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'' '}'s'p'e'd'{'t'i'h't'a'm'' 'n'i't'o'n'' 'i'_'}'d'i'{'t'i'h't'a'm'' ',''e'g'd'e'w'','' ' ' ' 'n'''''''' ')')'k'('}'T'g'e'r'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm'' 'n'i'' ')'i'_'v' 'o't's'p'a'm'' 'i'_'}'d'i'{'t'i'h't'a'm''(' ' ' ' 'n'd'i'm'' 'i'_'v' 'o't'''''''t'o's'p'a'm'' 'i'}'d'i'{'t'i'h't'a'm'' '{'' '=' '}'t'n'e'r'r'u'c'n'o'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'''' 'm'r'h't'a'm'' 'n'i'' ')'k'('}'T'g'e'r'{''''+'f's'h't'a'm''$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''t'a'm'''''''e'''''''''''''''''''''''''''''''''''''''''''u'r't'''''''''''''t'c'{'t'i'h't'a'm'''''''i'''''l'{'f's'h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'e'D'p'a'm'{'f's't'x'e't'' 'd'n'a' '}'l'e'D't's'i'l'{'f's't'x'e't'' 'n'e'e'w't'e'b' 'n'o'i't'c'n'i't's'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'s'y'a'r'r'a' 'D'2'('''''''2'9' 's't's'i'l' 'd'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a' 'r'e't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'n'i'f'e'd' 't''''d'o'n' 's'i' 'r'e't's'i'g'e'r' 'f'i' 't'e's' 'y't'p'm'e' 'o't' 't'l'u'a'f'e'd' 'd'l'u'o'h's' 's'e'u'l'a'v' 't'n'e'r'r'u'c'n'o'c' 'f'o' 't'e's' ':''''s'i'g'e'R'''''''''''''' 't'n'e'm'n'g'i's's'A' 'm'e't'i''n''t's'e'n' 'g'n'i't'a'e'r'c' 'r'o'f' 'd'e'd'e'e'n' 'o's'l'a' '-'-' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'a'm' 'm'o'r'f' 't'n'e'm'e'l'e' 'g'n'i't'e'l'e'D' 'm'e't'i''n'''''''''''''''''''''',''''''''''''''''''''''''''''''''' 'd'n'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'n'o't's'b'm'o't' 'r'e'v'o' 'p'i'k's' 'd'l'u'o'h's' '}'t'x'e'n'.'{'f's't'x'e't'' 'm'e't'i''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'p'y't'a't'a'd'/'')'e'c'n'e't's'i'x'e' 's't'i' 'e'v'r'e's'e'r'p' 't'u'b' 'e'u'l'a'v' 't'e's'e'r' 'o't' 'd'e'e'n'(' 'd'e'n'i'f'e'd' 't'o'n' 's'i' 'y'a'r'r'a' 'y't'p'm'e' 'd'n'a' 't's'i'l' 'y't'p'm'e' 'f'o' 't'n'e'm'n'g'i's's'A' 'm'e't'i''n'''''''''''''''''}'e't'a'r'e'm'u'n'e'{'d'n'e''n'}'e't'a'r'e'm'u'n'e'{'n'i'g'e'b''n'n':'s'm'e'l'b'o'r'p' 'n'w'o'n'k' 'O'D'O'T''t'a'm'' ',''r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'''''t'''''a'''m'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ')'}'t'e'g'r'a't'{'t'i'h't'a'm''('}'t'x'e'n'{'f's'h't'a'm''''''''''''''''''''''')'k'('''''''' '''x'''t'c'''''','''''''','''e'l'g'')'''''''''''''''''''''''''{''''''')')'}'l''''''''''''}'x't'c'{'t'i'h't'a'm'''''''''a''t'i'h't'a'm''('}'t'r'e'''''t's''''t'i'L'''''''''''s'n'i'{'f's'h't'a'm''n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm''' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ''t'''''a'm''''''''r'e''t'a'm''('}'n'g'i's's'a'{'f's'h't'a'm''n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm''' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' '''''''''''s'h't'a'm''''('}'x't'c'{'t'i'h't'a'm''''''''n' 'e'h't' 'e't'a'd'p'u' 'o't' 'd'e'e'n' 'O'D'O'T' '%'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m''t'c'{'t'i'h't'a'm''''i'''''h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'''''r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ''i'h't'a'm'''''''''''''''''o'''t'l'''t'r'e''a'v'e'' ')')'}'l'a'v'{'t'i'h't'a'm''('}'n'g'i's's'a'{'f's'h't'a'm'' ',')'}'d'i'{'t'i'h't'a'm'' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n''''','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'t'i'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm'''''''''''''''''''''''''''''''''''''''' ''''''''''''''''',''''''''''''''''''''''''''o'''''''''''''''''t'''''''''''''''''s'''''''''''''p'''''a'''''m'''''''','''''''' '''''}'''''d'''''i'''''{'''''t'''''i'''''h'''''t'''''a'''''m'''''' ',''{'' ',''o't's'p'a'm'','' ')'k'('}'T'g'e'r'{'f's'h't'a'm'' ',''['}'x't'c'{'f's'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'l'a'v'{'t'i'h't'a'm''('}'n'g'i's's'a'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('''''}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'2'_'}'n'g'i's's'A'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i't'o'n'' ')'k'('}'T'g'e'r'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'}'g'n'i'r't's''{'g'n'i'r't's''{'t't't'x'e't'' '='t'o'n'' '}'l'a'v'{'t'i'h't'a'm'' ',''e'g'd'e'w'','' '}']'['{'t't't'x'e't'' '='t'o'n'' '}'l'a'v'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'''''''''''''''''''''''''''''''}'$']','']','' '}'l'a'v'{'t'i'h't'a'm'' ',''o't's'p'a'm'','' '}'d'i'{'t'i'h't'a'm'' ',''['}'c'n'o'c'{'t'i'h't'a'm'' ',''o't's'p'a'm'''''m','' ')'k'('}'T'g'e'r'{'f's'h't'a'm'' ',''['}'x't'c'{'f's'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'l'a'v'{'t'i'h't'a'm''('}'n'g'i's's'a'{'f's'h't'a'm'' ',')'k' ','','e'l'g'n'a'r''''' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'''''''''''''S'P'E'D'{''''['t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'r'T''n'}'$'1'_'}'n'g'i's's'''''''''''A'{'c's'c's'e't''''''''''''''''s'h't'a'm''$'{'l'e'b'a'L't'f'e'L''n'}'$' '}'x'i'r't'a'm'{'d'n'e'' ' ' ' 'n'}'' '}'s'p'e'd'{'t'i'h't'a'm'' 'n'i't'o'n'' 'i'_'}'d'i'{'t'i'h't'a'm'' ','''''''' 'e'g'd'e'w'' ' ' ' 'n''' ')')'k'('}'T'g'e'r'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm'' 'n'i'' ')'i'_'v' 'o't's'p'a'm'' 'i'_'}'d'i'{'t'i'h't'a'm''(' ''''''''''''''''''''''''''''''''''''''d'i'm'' 'i'_'v''''''''''''''''''''''t'i'h't'a'm'' 'o't's'p'a'm'' 'i'_'}'d'i'{'t'i'h't'a'm'' '{'''''''' '{' '=' '}'c'n'o'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''''m''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'T'g'e'r'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'''' '}'}'g'n'i'r't's''{'''''g'n'i'r't's''{'t't't'x'e't'' '='t'o'n'' '}'l'a'v'{'t'i'h't'a'm'' ',''e'g'd'e'w'','' '}']'['{'t't't'x'e't'' '='t'o'n'' '}'l'a'v'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$']','''''''''''''''''''''''''''''''''' '}'e't'a't's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''''''''''''''''''''''''''}'''''s'''''e'''''l'''''u'''''r'''''-'''''n'''''o'''''i'''''t'''a'r'e'p'o':'g'i'f'{'l'e'b'a'l'''t'a't's' 't'n'e'm'u'c'o'd' 'g'n'i'y'f'i'd'o'm' 'd'n'a' 's'n'o'i't'a'r'e'p'o' 'g'n'i't'a'u'l'a'v'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{'t'i'h't'a'm'' ',''''' 'o't's'p'a'm'','' '1'_'k' ',''['}'x't'c'{'f's'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'t'u'm'{'t'i'h't'a'm'' ',')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ',''''s't'o'd'' ','2'_'k'' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'r'T''n'}'}'t's'i'L'-'f'e'D'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'e't'a't's'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'t'u'm'{'t'i'h't'a'm'' ',')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','}''}'l'i'a't'{'f's'h't'a'm'' 'o't's'p'a'm'' ')'}'d'a'e'h'{'f's'h't'a'm''('}'t'x'e'n'{'f's'h't'a'm''''''''''''''a'm'' '{''$'{'C'm'o'i'x'A''n'}'$')'}'w'e'n'{'t'i'h't'a'm''_'k'('}'T't's'i'l'{'f's'h't'a'm'' '=' '1'_'k'$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i't'o'n'' '1'_'k'$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'}'e't'a't's'{'t'i'h't'a'm'' ',''''' 'o't's'p'a'm'','' '1'_'k' ',''['}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'t'u'm'{'t'i'h't'a'm'' ',')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'''''f's'h't'a'm'' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's''''i'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'r'T''n'}'}'p'a'M'-'f'e'D'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'e't'a't's'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'t'u'm'{'t'i'h't'a'm'' ',')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''{'}'p'o'{'f's'h't'a'm'' ','','}''{''$'{'C'm'o'i'x'A''''''''''f'e'L''n'}'$')'}'w'e'n'{'t'i'h't'a'm''_'k'('}'T'p'a'm'{'f's'h't'a'm'' '=' '1'_'k'$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i't'o'n'' '1'_'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''a't's'{'t'i'h't'a'm'' 'o't's'p'a'm'' '1'_'k' ',''['}'x't'c'{'t'i'h't'a'm'' ' ' ' 'n'o't'l'a'v'e'' ')'}'t'u'm'{'t'i'h't'a'm'' ',')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''''}'$'$'{'C'f'n'I'y'r'a'n'i'B''n'}'}'d'n'e'c's'e'D'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'e't'a't's'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ')'}'t'u'm'{'t'i'h't'a'm'' ',')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n'''' ','}'s'p'e'd'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' ','',')'1'_'k'('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' '1'_'k''''K'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'e'l'u'r'-'n'o'i't'a'r'e'p'o':'g'i'f'{'l'e'b'a'l''''''''''g'i'f''}'e't'a't's' 't'n'e'm'u'c'o'd' 'g'n'i'y'f'i'd'o'm' 'd'n'a' 's'n'o'i't'a'r'e'p'o' 'g'n'i'''''''''''''''' 'g'n'o'i't'a'u'l'a'v'e' 'r'o'f' 's'e'l'u'R'{'n'o'i't'p'a'c''n'''''''''''''''}'*'e'r'u'g'i'f'{'d'n'e''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b''n'n'O'D'O'T' '%'n'n''''''''''T' '%'}'s'n'o'i't'a'r'e'p'o' 'g'n'i'y'l'p'p'A'{'n'o'i't'c'e's'b'u's''n'n'''.'n'o'i't'c'e's' 't'e'n' 'e'h't' 'n'i' 's's'u'c's'i'd' 'e'w' 'h'c'i'h'w' ','s'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n''''''''''g'n'o'i't'a'u'l'a'v'e' 'y'b' 'd'e'm'r'o'f'r'e'p' 'e'r'a' 's'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'm'u'c'o'd' 'l'a'u't'c'a' 'e'h'T'n'n'.'$')'}'s'p'o'{'f's'h't'a'm''('p'_'A'$' 's'n'o'i't'a'r'e'p'o' 'd'e's's'e'c'o'r'p' 'f'o' 't'e's' 'e'h't' 'o't' 'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't' 's'd'd'a' 'd'n'a' ','}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't'' 's'a' 'y'a'w''''s' 'e'm'a's' 'e'h't' 'n'i' 'n'o'i't'a'r'e'p'o' 'e'h't' 's'e't'a'u'l'a'v'e' '}'e't'o'm'e'R'-'y'l'p'p'A'{'c's't'x'e't'' ','d'e'i'f'i's'i't'a's' 'e'r'a''''''''''v'a'h' 's'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 's't'i' 't'a'h't' 'd'n'a' '''d'e's's'e'c'o'r'p' 'n'e'e'b' 'y'd'a'e'r'l'a' 't'o'n' 's'a'h' 'n'o'i't'a'r'e'p'o' 'e'h't' 't'a'h't' 'n'o'i't'i'd'n'o'c'e'r'p' 'e'h't' 'r'e'd'n'U' '.'y'l'p'p'a' 'y'a'm' '}'e't'o'm'e'R'-'y'l'p'p'A'{'c's't'x'e't'' 'e'l'u'r' 'e'h't' ','$')'}'v'c'e'r'{''s'h't'a'm'''''''''''''''''''''''''''''''''''f's't'x'e't''('p'_'A'$' 'r'e'f'f'u'b' 'e'v'i'e'c'e'r' 'e'h't' 'n'i' 's'r'a'e'p'p'a''''h' 'n'o'i't'a'r'e'p'o' 'n'a' 'e'c'n'O'n'n'.'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 'l'l'a' 's'l'e'd'o'm' 't'i' 'd'n'a' ','r'e'e'p' 'e'n'o' 'n'a'h't' 'e'r'o'm' 's'e'v'l'o'v'n'i' 't'a'h't' 'e'l'u'r' 'y'l'n'o' 'e'h't' 's'i' 's'i'h'T' '.'$'p'$' 'r'e'e'p' 'f'o' '$')'}'v'c'e'r'{'f's't'x'e't''('p'_'A'$''''o' 'r'e'f'f'u'b' 'e'v'i'e'c'e'r' 'e'h't' 'o't' 'm'e'h't' 's'd'd'a' 'd'n'a' '$'q'$' 'r'e'e'p' 'f'o' 'r'e'f'f'u'b' 'd'n'e's' 'e'h't' 'n'i' 's'n'o'i't'a'r'e'p'o' 's'e'k'a't' 'e'l'u'r' '}'v'c'e'R'{'c's't'x'e't'' 'e'h't' ','y'l'g'n'i'd'n'o'p's'e'r'r'o'C' '.'$')'}'d'n'e's'{'f's'h't'a'm''('p'_'A'$' 'r'e'f'f'u'b' 'd'n'e's' 'a' 'o't' 'm'e'h't' 's'd'd'a' 'd'n'a' '}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't'' 'y'b' '$')'}'e'u'e'u'q'{'f's'h't'a'm''('p'_'A'$' ''''''''''h't' 'n'i' 'd'e'c'a'l'p' 'e'r'e'w' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'y'n'a' 's'e'k'a't' 'e'l'u'r''''''''' '}'d'n'e'S'{'c's't'x'e't''n'n''''''''''''''k'r'o'w't'e'n' 'e'h't' 'n'i' 'e'e't'n'a'r'a'u'g' 'g'n'i'r'e'd'r'o' 'o'n' 's'i' 'e'r'e'h't' 'd'n'a' ',''.'e'm'i't' 'n'i' 't'n'i'o'p' 'r'e't'a'l' 'y'l'i'r'a'r't'i'b'r'a' 'e'm'o's' 't'a'''''''''''''''' 'e'm'o's'''''''''''''''' 'e'm'o's' 'r'e'e'p' 'r'e'h't'o'n'a' 't'a' 's'e'v'i'r'r'a' 'r'e'e'p' 'e'n'o' 'y'b' 't'n'e's' 'e''''''g'a's's'e',' 'a' ':'s'r'e'e'p' 'n'e'e'w't'e'b' 'k'r'o'w't'e'n' 'e'h't''''n' 'f'o' 'y't'i'c'i'n'o'r'h'c'n'y's'a' 'e'h't' 's'l'e'd'o'm' 'h'c'i'h'w' ','c'i't's'i'n'i'm'r'e't'e'd'n'o'n' 's'i' 's'c'i't'n'a'm'e's' 'e'h't' ','}'d'l'e'i'y'{'f's't'x'e't'' 'e't'a'u'l'a'v'e' 'o't' 'd'e's'u' 'e'b' 'n'a'c' 's'e'l'u'r' 'e's'e'h't' 'f'o' 'y'n'a' 'e'c'n'i'S'''''''''''''''''''''''''''''''n'a'm'e's' 's'i''''''''''''' 'e's'e'h'T' '.'d'n'a'm'm'o'c' '}'d'l'e'i'y'{'f's't'x'e't'' 'e'h't' 'f'o' 's'c'i't'n'a'm'e's' 'e'h't' 'e'n'i'f'e'd' '}'d'l'e'i'Y'{'c's't'x'e't'' 'd'n'a' '}'v'c'e'R'{'c's't'x'e't'' ','}'d'n'e'S'{'c's't'x'e't'' ','}'e't'o'm'e'R'-'y'l'p'p'A'{'c's't'x'e't'' ','''' '}'v'c'e'r'-'d'n'e's':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 's'e'l'u'r' 'g'n'i'n'i'a'm'e'r' 'e'h'T'n'n'.'$')'}'s'p'o'{'f's'h't'a'm''('p'_'A'$' 's'n'o'i't'a'r'e'p'o' 'd'e's's'e'c'o'r'p' 'f'o' 't'e's' 'e'h't' 'o't' 'D'I' 'n'o'i't'a'r'e'p'o' 'e'h't' 's'd'd'a' 't'i' 'd'n'a' ','$')'}'e'u'e'u'q'{'f's'h't'a'm''('p'_'A'$' 's'n'o'i't'a'r'e'p'o' 'd'e't'a'r'e'n'e'g'''''''''''''b't'u'o' 'f'o' 'e'u'e'u'q' 'e'h't' 'o't' 'n'o'i't'a'r'e'p'o' 'e'h't' 's'd'd'a' 't'i' ','$'''p'_'A'$' 'e't'a't's' 'l'a'c'o'l' 'd'e'i'f'i'd'o'm' 'a' 'e'c'u'd'o'r'p' 'o't' 'n'o'i't'a'r'e'p'o' 'e'h't' 's'e't'a'u'l'a'v'e' 't'i' ':'s'g'n'i'h't' 'e'e'r'h't' 's'e'o'd' '}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't'' '.'n'o'i't'a'r'e'p'o' 'e'h't' 's's'e'c'o'r'p' 'o't' 'e'l'u'r' '}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't'' 'e'h't' 'o't' 's'e't'a'g'e'l'e'd' 'd'n'a' ','e'v'o'b'a' 'd'e'b'i'r'c's'e'd' 'm'r'o'f' 'e'h't' 'f'o' 'e'l'p'u't'(''' '}'p'o'{'f's't'x'e't'' 'n'a' 's't'c'u'r't's'n'o'c' '}'p'O'-'e'k'a'M'{'c's't'x'e't''n'n'.'t'n'e'm'u'c'o'd' 'e'h't' 'o't' 'd'e'i'l'p'p'a' 'n'e'e'b' 'e'v'a'h' 't'a'h't' 's'D'I' 'n'o'i't'a'r'e'p'o' 'l'l'a' 'f'o' 't'e's''' 'e'h't' '$')'}'s'p'o'{'f's'h't'a'm''('p'_'A'$' 'n'i' 'r'e't'n'u'o'c' 'g'n'i't's'i'x'e' 'y'n'a' 'n'a'h't' 'r'e't'a'e'r'g' '1' 's'i' 't'a'h't' 'e'u'l'a'v' 'r'e't'n'u'o'c' 'a' 'g'n'i's'o'o'h'c' 'y'b' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'w'e'n' 'a' 's'e't'a'r'e'n'e'g'''''''''''''''''''''''''''''''''''''s'e't'a'l'u's'p'a'c'n'e' '}'p'O'-'e'k'a'M'{'c's't'x'e't'' '.'n'o'i't'a'r'e'p'o' 'e'h't' 'y'l'p'p'a' 'd'n'a' 'e'''''''''''''''''''''''''' 'g'n'i't'a'r'e'n'e'g' 'r'o'f' 'e'l'u'r' '}'p'O'-'e'k'a'M'{'c's't'x'e't'' 'e'h't' 'o't''''''''''''' 'e'h't' 'e't'a'g'e'l'e'd' 'e'e'r'h't' 'l'l'a' ':'t'n'e'm'u'c'o'd' 'e'h't' 'e't'a't'u'm' 's'd'n'a'm'm'o'c' 'e'v'i't'c'e'p's'e'r' 'e's'e'h't' 'w'o'h' 'e'n'i'f'e'd'''''''''''''''' 'w'o'h's' 's'e'l'u'r' '}'e't'e'l'e'D'{'c's't'x'e't'' 'd'n'a' '}'t'r'e's'n'I'{'c's't'x'e't'' ','}'n'g'i's's'A'{'c's't'x'e't'' 'e'h'T' '''''p'_'A' 'o't'l'a'v'e'' '}'d'l'e'i'y'{'f's'h't'a'm'''' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'$'''p'_'A' 'o't'l'a'v'e'' '}'d'l'e'i'y'{'f's'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'M'''''{'''''c'''''s'''''''''''g'n'i't'a'r'''' 'd'n'a''e'n'e'g'''''''''''''''t'''''''''''''''''x'''''''''''''''''e'''''''t''''''''{'''''l'''''''''''''''''e'''''''''''''''''b'''''''''a'''''L'''''t'''''f'''''e'''''L''''''n'}'$'''p'_'A' 'o't'l'a'v'e'' ')'}'t'u'm'{'t'i'h't'a'm'' ','}'''''r'''''u'''''c'''''{'''''t'''''i'''''''h'''''t'''''a'''''m'''''''' ''''',''''')'''''}'''''s'''''p'''''o'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''('''''p'''''_'''''A''''' ''''','''''}'''''d'''''i'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''('''''}'''''p'''''o'''''{'''''f'''s'h't'a'm''('}'''y'''''l'''''p'''''p'''''a'''''{''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$')'}'s'p'o'{'f's'h't'a'm''('''''p'_'A'''' 'n'i''t'o'n'' '}'d'i'.'p'o'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''f'''''s''''''''''''.'p'o'n'''''''r'e't'a'u'Q'''''''U'''''''''''''''''''''p'p'a'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'$'+' ''''')'p' ','}'r'''d'i'.''t'c'''''('''p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''''''''''''''''f'o'o'r'p''n'}'$']','')'}'d'n'e's'{'f's'h't'a'm''('q'_'A' ',''p'u'c'','' ')'}'v'c'e'r'{'f's'h't'a'm''('p'_'A' ',''o't's'p'a'm'','' '}'v'c'e'r'{'f's'h't'a'm'',''['p'_'A' ' ' ' 'n'o't'l'a'v'e'' '}'d'l'e'i'y'{'f's'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'v'c'e'R'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'D'I'r'e'e'P'{'m'r'h't'a'm'' ':'q'''''''''' ':'a'$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$']','')'}'e'u'e'u'q'{'f's'h't'a'm''('p'_'A''''' ',''p'u'c'','' ')'}'d'n'e's'{'f's'h't'a'm''('p'_'A' ',''o't's'p'a'm'','' '}'d'n'e's'{'f's'h't'a'm'',''['p'_'A' ' ' ' 'n'o't'l'a'v'e'' '}'d'l'e'i'y'{'f's'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'d'n'e'S'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'_'A''{'t''''''''''''''''''''''''''}''}'p'o'{'t'i'h't'a'm''{'' ',''p'u'c'','' ')''''f's'''i'''h't'a'm''(' '=' '}'d'i'{'t'i'h't'a'm''$'{'C'''m'o'i'x'A''n'}'$'''''''}'#'}'' ')''''d'i'.'}''''''''''''''''''''''''''''''''''''}'d'i'{'f's'h't'a'm''.''s'p'o'{'f's'h't'a'm''('p'_'A' 'n'i'' ')'i'_'p' ','i'_'c'(' 'd'i'm'' 'i'_'c' '{'' ',''p'u'c'','' '}''0'{''('}'x'a'm'{'m'r'h't'a'm'' '=' '}'r't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$'''p'_'A' 'o't'l'a'v'e'' '}'''' 'e't'e'l'e'd'{'f's'h't'a'm''.'}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B''n'}'}'e't'e'l'e'D'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'''p'_'A' 'o't'l'a'v'e'' ')'}'e't'e'l'e'd'{'f's'h't'a'm'' ','}'r'u'c'{'t'i'h't'a'm''('}'p'O'e'k'a'm'{'f's'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'$'}'r'u'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n't'l'a'v'e'' ')'}'l'a'v'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm''.'}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_''''-'A'$'{'C'f'n'I'y'r'a'n'i'r'T''n'}'}'t'r'e's'n'I'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n''''}'$'''p'_''''-'A'' 'o't'l'a'v'e'' ')')'}'l'a'v'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'' ','}'r'u'c'{'t'i'h't'a'm''('}'p'O'e'k'a'm'{'f's'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'$'}'L'A'V'{'m'r'h't'a'm'' ':'}'l'a'v'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$'}'r'u'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''T'''$''''''''''''''''''''''''''''''''''''''''{''}'''''''''''''''''''''''''''$'''p'_'A' 'o't'l'a'v'e'' '}'l'a'v'{'t'i'h't'a'm'' ''t'x'e't'''''}'=':'{''''''':'('n'i'b'h't'a'm''''''''''''''''''':'{'t'x'e't''''''''e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'''p'''_'A' 'o't'l'a'v'e'' ')')'}'l'a'v'{'t'i'h't'a'm''('}'n'g'i's's'a'{'f's'h't'a'm'' ','''' '}'r'u'c'{'t'i'h't'a'm''('}'p'O'e'k'a'm'{'f's'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n''r't's'n'i'r't's'''''''''''''''}'}''{''{'t't'x'e't'' '='t'o'n'' '}'l'a'v'{'t'i'h't'a'm'' ',''e't'''''''''''''''''']'[''''''''''''''''''''''''''''''''''''''''''''}'k'c'a'r'b'r''k'c'a'r'b'l''{'t't'h't'a'''''''''''''''{'''''x'''''o'''''b'''''m'''}'''''''''|'b'r'e'v'''{'''''''''''''''''''''|'''''''''''{'''t'''''''''' 'e'g'd'e'w'' ''t'h't'a'm'''''''''''''''''''}''''''''''''''''''''''}'k'o''''$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'|']'['|'b'r'e'v'' '='t'o'n'' 't'i'h't'a'm'' 'e'g'd'e'w'' '}'L'A'V'{'m'r'h't'a'm'' ':'}'l'a'v'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n''$''}'}'r'u'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'{'C'm'o'i'x'A'''''|'n'g''' 'f'o' 's'c'i't'n'a'm'e'S'{'n'o'i't'c'e's'b'u's'b'u's''n'n'.'r'e'd'r'o' 'y'n'a' 'n'i' 'd'e'i'l'p'p'a' 'e'b' 'n'a'c' ','y'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 'o'n' 's'i' 'e'r'e'h't' 'e'r'e'h'w' '.'e'.'i' ','''' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e'p'O' '.'r'e'e'p' 'r'e'h't'o' 'y'r'e'v'e' 't'a' 'r'e'd'r'o' 'e'm'a's' 'e'h't' 'n'i' 'd'e'i'l'p'p'a' 'e'b' 'l'l'i'w' 'r'e'e'p' 'r'a'l'u'c'i't'r'a'p' 'e'n'o' 't'a' 'd'e't'a'r'e'n'e'g' 's'n'o'i't'a'r'e'p'o' 'f'o' 'e'c'n'e'u'q'e's' 'e'h't' 't'a'h't' 's'n'a'e'm' 's'i'h't' ','r'a'l'u'c'i't'r'a'p' 'n'I' '.'d'e'i'l'p'p'a' 'n'e'e'b' 'e'v'a'h' 't'i' '''''e'r'o'f'e'b' 'd'e'n'e'p'p'a'h'`'`' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'l'l'a' 'r'e't'f'a' 'd'e'i'l'p'p'a' 'e'b' 'y'l'n'o' 'n'a'c' 'n'o'i't'a'r'e'p'o' 'n'a' ':'s'n'o'i't'a'r'e'p'o' 'n'o' 'g'n'i'r'e'd'r'o' 'l'a'i't'r'a'p' 'a' 'e's'o'p'm'i' 'o't' 's'i' '$'}'s'p'e'd'{'t'i'h't'a'm''$' 's'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 'e'h't' 'f'o' 'e's'o'p'r'u'p' 'e'h'T'n'n'''''''''''''''''''''''''''''''''''g'i'b'm'a' 'd'i'o'v'a' 'o'T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'''''''''''''''''''''''''.'e'''''''e' 'c'n'i's' 's'D'I' 'n'o'i't'a'r'e'p'o' 'f'o' 't'e's' 'a' 's'a' 's'e'i'c'n'e'd'n'e'p'e'd' 'e'h't' 'e'v'i'g' 'e'w' 's'c'i't'n'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'}'v'c'e'r'-'d'n'e's':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'e'v'i'g' 'e'r'a' 's'd'n'a'm'm'o'c' 'r'o'f' 's'e'l'u'r' 'n'o'i't'a'u'l'a'v'e' 'l'a'm'r'o'f' 'e'h'T'n'n'e's' 'e'h't' 'f'o' 'n'o'i't'a't'n'e's'e'r'p' 't'c'a'r't's'b'a' 'r'u'o' 'n'i' ','r'e'v'e'w'o'H' '.')'s'n'o'i't'a't'i'c''''i' 'O'D'O'T'(' 's'r'o't'c'e'v' 'n'o'i's'r'e'v' 'd'e't't'o'd' 'r'o' 's'r'o't'c'e'v' 'n'o'i's'r'e'v' ','e'l'p'm'a'x'e' 'r'o'f' '-'-' 'd'a'e't's'n'i' 'd'e's'u' 'e'b' 'd'l'u'o'w'''''''''''''''' 'h'c'u's' 'y'r'o't's'i'h' 'l'a's'u'a'c' 'f'o' 'n'o'i't'a't'n'e's'e'r'p'e'r' 't'c'a'p'm'o'c' 'a' 'o's' ','e'g'r'a'l' 'y'l'b'a'c'i't'c'a'r'p'm'i' 'e'm'o'c'e'b' 'd'l'u'o'w' 't'e's' 's'i'h't' ','n'o'i't'a't'n'e'm'e'l'p'm'i' 'l'a'e'r' 'a' 'n'I' '.'d'e't'a'r'e'n'e'g' 's'a'w' 'n'o'i't'a'r'e'p'o' 'e'h't' 'n'e'h'w' 'e'm'i't' 'e'h't' 't'a' 't'n'e'm'u'c'o'd' 'e'h't' 'o't' 'd'e'i'l'p'p'a' 'n'e'e'b' 'd'a'h' 't'a'h't''''''''' 's'D'I' 'n'o'i't'a'r'e'p'o' 'f'o' 't'e's' 'e'h't' 'e'b' 'o't' '$'}'s'p'e'd'{'t'i'h't'a'm''$'''''''''''''''''''=' 's'i'h't' 'e'n'i'f'e'd' 'w'o'l'e'b' 's'c'i't'n'a'm'e's' 'e'h'T' '.'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'f'o' 't'e's' 'a' 's'a' 'n'e'v'i'g' ','n'o'i't'a'r'e'p'o' 'e'h't' 'f'o' 's'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 'f'o' 't'e's' 'e'h't' 's'i' '$'}'s'p'e'd'{'t'i'h't'a'm''$'n'n'.'n'o'i't'i's'o'p' 'd'e'i'f'i'c'e'p's' 'e'h't' 't'a' 'd'e't's'e'u'q'e'r' 's'a'w'''''''''''''''''''''''''''''''''''''''' 'r'u'c'c'o' 'd'l'u'o'h's' 't'a'h't' 'n'o'i't'a't'u'm' 'e'h't' 's'i' '$'}'t'u'm'{'t'i'h't'a'm''$' 'd'n'a' ','d'e'i'f'i'd'o'm' 'g'n'i'e'b' 't'n'e'm'u'c'o'd' 'e'h't' 'n'i' 'n'o'i't'i's'o'p' 'e'h't' 'g'n'i'b'i'r'c's'e'd' 'r'o's'r'u'c' 'e'h't' 's'i' '$'}'r'u'c'{'t'i'h't'a'm''$' ','n'o'i't'a'r'e'p'o' 'e'h't' 's'e'i'f'i't'n'e'd'i' 'y'l'e'u'q'i'n'u' 't'a'h't' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'e'h't' 's'i' '$'}'d'i'{'t'i'h't'a'm''$'''''''t'' 'e'r'e'h'w'n''('}'n'g'i's's'a'{'f's'h't'a''%'m'' 'd'i'm'''' ''%'' '}'e't'e'l'e'd'{'f's'h't'a'm'' 'd'i'm'' ')'v'('}'t'r'e's'n'i'{'f's'h't'a'm'' ':'&' ''&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'}'*'t'a'n'g'i'l'a'{'d'n'e''n')' '&'''''''''''''''''''''''''''''''''''''''''''''''}'t'u'm'{'t'i'h't'a'm'' ' ' ' 'n',')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ':'}'r'u'c'{'t'i'h't'a'm'' ' ' ' 'n',')'}'D'I'r'e'e'P'{'m'r'h't'a'm'' 's'e'm'i't'' '}'N'{'b'b'h't'a'm''''' '('}'P'{'l'a'c'h't'a'm'' ':'}'s'p'e'd'{'t'i'h't'a'm'' ' ' ' 'n','''''''''''}'D'I'r'e'e'P'{'m'r'h't'a'm'' 's'e'm'i't'' '}'N'{'b'b'h't'a'm''''''''''''''''''''''''''{'m'r'h't'a'm'' ':'}'d'i'{'t'i'h't'a'm''('}'p'o'{'f's'h't'a'm'' '[''n'm'r'o'f' 'e'h't' 'f'o' 'e'l'p'u'''''''p'y't' 'a' 's'i' 'n'o'i't'a'r'e'p'o' 'n'A'n'n'}'e'r'u't'c'u'r't's' 'n'o'i't'a'r'e'p'O'{'n'o'i't'c'e's'b'u's'b'u's'''''''''''''''''''' '&'&'''''&'''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''g''''''''''''''='''''}'''''{'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''{'''''''''''''''''''''''}'''''{'''''{'''''}'''''3'''''{'''''n'''''g'''''i'''''l'''''a'''''i'''''t'''''l'''''u'''''m'''''''''''''''''i'''''l'''''a'''''''''''''''''''''''''''''''''''''''''n'''''a''''''''''''''%'''''''''''''''''''''''''''''''''''''''''''''''$'''''{'''''x'''''o'''''b'''''m''''''''''''''''''''''' '''''&'''''''''''''''''''''''''''''''''''p'''''s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''''a''''' '''''r'''''e'''''t'''''s'''''i'''''g'''''e'''''r''''' '''''a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''='''''}''''''''''''''''''''''''''='''''{'''''}'''''{'''''''''''''''''''''''''''''''''''''' '''''A'''''''''''[''''''''''''''''']'''''''''''''''''[''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''[''''''''''''''''']'''''''''''''''''['''''''''''''''''{''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o's'r'u'c' 'e'h't' 'y'b' 'd'e'i'f'i't'n'e'd'i' '''''''''''''''''$'p'_'A'$' 'n'i' 's't's'i'x'e' 'r'e't's'i'g'e'r' 'e'h't' 'f'i' 'y'l'p'p'a' 'y'l'n'o' 's'e'l'u'r' '}'l'a'V'{'c's't'x''''-'-' '''e't'' 'e'h't' 'd'n'a' ',''''''''}'''''''''''''''''''''''''''''''''''''''''''s''''''n'e'h'W'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n''''''''''''''''''''' 'a''''''''''''''''''''''''''''s'e'i''''''''''''''''''''''''''''''''''''''''''s''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'e't'a'i'd'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'o's'l'a' 's'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'r'e'e'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'.'w'o'l'e'b' 'd'e'l'i'a't'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'i''''''''''''''''''''n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'n'i'r'i'u'q'e'r'''''''''''''''''''''w''''''''''n'o'i't'a'n'i'd'r'o'o'c' 's'u'o'n'''' '''.'''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'u'q'i'n'u' 's'i' '$')'p' ','c'('$' 'r'i'a'p' 'e'h't' ','$'c'$' 's'e'u'l'a'v' 'r'e't'n'u'o'c' 'f'o' 'e'c'n'e'u'q'e's' 'g'n'i's'a'e'r'c'n'i' 'y'l'l'a'c'i'n'o't'o'n'o'm' 'y'l't'c'i'r't's' 'a' 's'e't'a'r'e'n'e'g' 'r'e'e'p' 'h'c'a'e' 'e'c'n'i'S'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''s'''''''''''''''''r'''''''''''''''''e'''''''''''''''''e''''''''''''' '['''''''''''''p''''''''''''''''' '''''''''''''''''n'''''''''''''''''e''''''''''''''''''']'' ''''''e'''''''''''w'''''t'''''e'''''b''''' '''''n'''''o'''''i'''''t'''''a'''''z'''''i'''''n'''''o'''''r'''''h'''''c'''''n'''''y'''''s''''' '''''t'''''u'''''o'''''h'''''t'''''i'''''w''''' '''''s'''''r'''''e'''''i'''''f'''''i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s't's'i'l' 'd'e'r'e'd'r'o' 'f'o' 's'c'i't'n'a'm'e's' 'e'h't' 'f'o' 'n'o'i't'i'n'i'f'e'd' 'r'u'o' 'r'o'f' 't'n'a't'r'o'p'm'i' 's'i' 'y't'r'e'p'o'r'p' 'g'n'i'r'e'd'r'o' 's'i'h'T' '''''t'''''n'''''e'''''d'''''i''''' '''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''e'''''u'''''q'''''i'''''n'''''u''''' '''''y'''''l'''''l'''''a'''''b'''''o'''''l'''''g''''' '''''e'''''t'''''a''''''q'r'e'n'e'g' 'o't' 'r'e'd'r'o' 'n'I'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''c'i'h'p'a'r'g'o't'p'y'r'c' 'a' ''''''''''''''''''''''''''''''''''''')'y'e'k' 'c'i'l'b'u'p' 's't'i' 'f'o' 'h's'a'h' 'e'h't' ','e'l'p'm'a'x'e' 'r'o'f'(' '''''' ','s'r'e'i'f'i't'n'e'd'i' 'n'o'i't'a'r'e'p'o' 's'a'''''''''''''''''''''''''''''''''''''''''''h't' 'e't'a'r'e'n'e'g' 'o't' '}'q'j'8'7'9'1':'t'r'o'p'm'a'L'{'e't'i'c''~'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'e's'u' 'e'W'''''''''' 'n'I'n'n'.'s't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'd'e't'r'e's'n'i' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'f'o''' 's'r'e'i'f'i't'n'e'd'i' 'e'h't' 't'c'a'f'n'i' 'e'r'a'''' '$'}','3','2','1'{'_'}'d'i'{'t'i'h't'a'm''$' 's'r'e'i'f'i't'n'e'd'i' 'e's'o'h'T' '.'s'r'e't's'i'g'e'r' 'f'o' 's'e'u'l'a'v' 'e'h't' 'o's'l'a' 'd'n'a' 's't'n'e'm'e'l'e' 't's'i'l' 'y'f'i't'n'e'd'i' 'o't' 'd'e's'u' 'e'r'a' '$'}'3','2','1'{'_'}'d'i'{'t'i'h't'a'm''$' ','}'e'l'p'm'a'x'e'-'e't'a't's':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' ','e'l'p'm'a'x'e' 'r'o'F' '''''''''''''''''''''''''''''''''''''''''''''.'s'r'o's'r'u'c' 'f'o' 'd'n'a' 'e't'a't's' 'l'a'c'o'l' 'e'h't' 'f'o' 't'r'a'p' 's'a' 'd'e's'u' 's'i' 'h'c'i'h'w' ','r'e'i'f'i't'n'e'd'i' 'e'u'q'i'n'u' 'a' 'n'e'v'i'g' 's'i' 'l'e'd'o'm' 'r'u'o' 'n'i' 'n'o'i't'a'r'e'p'o' 'y'r'e'v'E'n''n''d' 's'a' ','d'e'i'f's'i't'a's' 'e'r'a' 's'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 's't'i' 'n'e'h'w' 's'e'd'o'n' 'e't'o'm'e'r' 'm'o'r'f' 'd'e'v'i'e'c'e'r' 's'n'o'i't'a'r'e'p'o' 's''''''' 's'e'i'l'p'p'a' 'r'e'e'p' 'A' '.'s'r'e'e'p' 'r'e'h't'o' 'e'h't' 'o't' 't's'a'c'd'a'o'r'b'' 'n'o'i't'a'r'e'p'o' 'e'h't'''''''''''''''' 'y'l's'u'o'n'o'r'h'c'n'y's'a' 'd'n'a' ','y'l'l'a'c'o'l' 't'c'e'f'f'e' 's'e'k'a't' 't'i' 't'a'h't' 'o's''''''m'''''m'''''i'''''''''''''''''''''''''''''''''''''''''' 'o't' 'r'e'd'r'o' 'n'i' '$'p'_'A'$' 'o't' 'd'e'i'l'p'p'a' 'n'e'''''''''' 't'a'h't' 's'i' 'n'o'i't'a'r'e'p'o' 't'a'h'T' '''''''''''''''''''.'n'o'i't'a'r'e'p'o' 'n'a' 'e't'a'r'e'n'e'g' 'y'l'n'o' 't'u'b' ','$'p'_'A'$' 'e't'a't's' 'r'e'e'p' 'l'a'c'o'l''''''''''''' 'e'h't' 'e'h't' 'y'f'i'd'o'm' 'y'l't'c'e'r'i'd' 'r'e'v'e'n' 's'd'n'a'm'm'o'c' ','s'c'i't'n'a'm'e's' 'r'u'o' 'n'I' ''o'i't'a't'u'm' 'e'h't' 'e'b'i'r'c's'e'd' 't'a'h't' '}'s'n'o'i't'a'r'e'p'o'{'h'p'm'e'' 'e't'a'r'e'n'e'g' 'y'e'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'h't' 'f'''''''''''''''t'a'h''e'''t'''''''o''''' 's'c'i''''''''''' 't's'u'm' 'e'w' ','''' 't'n'a'm'e's' 'l'a'm'r'o'f' 'e'h't' 'e'n'i'f'e'd' 'n'a'c' 'e'w' 'e'r'o'f'e'B''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'e't'a't's' 'e'h't' 'g'n'i't'a't'u'm' 'r'o'f' 's'd'n'a'm'm'o'c' 'e'h't' 'o't' 'n'r'u't' 'w'o'n' 'e'W'''''''''''''''''''''' 'e'r'o'f'e'B'n'n''n'o'i't'a'r'e'p'o' 'g'n'i't'a'r'e'n'e'G''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''3'''''''''''''''''{'''''''''''''''''n''''''b'u's'''''''''g''''''''s'i' 'r''''''i'''''''''l'a'i't'l'u'm'''''''''$'''''''''''''''''''''''''''''''''''' '}'1'{'r'o'f'}''s't'o'd'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''{'}'c'{'}'2'{'n'm'u'l'o'c'i't'l'u'm''''''''''''''''''''''''''%'''''''''''''''''''''''''{'n'm'u'l'o'c'i't'l'u'm''''''''''''''''''''}'''''''''''''''''''' '}'2'{'n'a'p's'''''''''''''''''''''''''''''''''''''''''''''''''''''}'3'{'n'a'p's'i't'l'u'm'' ''{'}'l'{'}'2'{'n'm'u'l'o'c'i't'l'u'm'''''''''''''''''''''''''''''''''','''''''''''''''''''''' '''''&'''''&''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''''''''''''''''''''''''''''' '}'2'{'n'a'p's''''''''''''''''''''''''''''''''''''''''{'}'l'{'}'2'{'n'm'u'l'o'c'i't'l'u'm''''''''''''''''''''''''' '''''''''''''''''''''''''b'b'b'b'b'b'b'b' ' 'n'''''''''''''''''''''}''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '&''''n'n''''''''''''''''n't'f'a'r'd'f'o'o'r'p'f'i''n'''''''''''''''''''''''}''n''' ')'1'_'}'d'i'{'t'i'h't'a'm'' ','','e'l'g'n'a'r'')'}'''''g'n'i'p'p'o'h's'`'`'{'t'x'e't''('}'T't's'i'l'{'f's'h't'a'm'' ' ' ' 'n',')'}'c'o'd'{'f's'h't'a'm''('}'T'p'a'm'{'f's'h't'a'm'' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' 'o't's'p'a'm'' '&' '}'s'g'g'e'{'f's'h't'a'm'' '&'&'n''' ',')'}'d'a'e'h'{'f's'h't'a'm'' ''''''''','','e'l'g'n'a'r'')'}'''''g'n'i'p'p'o'h's'`'`'{'t'x'e't''('}'T't's'i'l'{'f's'h't'a'm'' ',')'}'c'o'd'{'f's'h't'a'm''('}'''''T'''''p'''''a'''''m'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' '''''e'''''l'''''g'''''n'''''a'''''l''''''''('''''}'''''r'''''o'''''s'''''r'''''u'''''c'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' '''''o'''''t'''''s'''''p'''''a'''''m'''''''' '''''&'''''''''''''''''''''''''''''''' ''''' '''''}'''''t'''''s'''''i'''''l'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''n''''''''''' ''''''''''''''''''''''''''''''''''''''&''''''''''';'''''l''''''''''''''&''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'''''e'''''t'''''f'''''a''''' '''''$'''''p'''''$''''' '''''r'''''e'''''e'''''p''''' '''''f'''''o''''' '''''$'''''p'''''_'''''A'''''$''''' '''''e'''''t'''''a'''''t'''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'''''''''''''''''''''''''''''''''''&''''''''''''''''''''''''''f'''''''''''''''''f'''''f'''''f'''''&''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&'''''&''''''''''''''''''''''''''&''''''''''''''''' '''''&'''''&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''f'''''''''''''''''f'''''''''''f'''''''''''''''''t'''''x'''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''' ''''' '''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''}'''''''','''''''')'''''}'''''''''''''''''e'''''s'''''e'''''e'''''h'''''c'''''`'''''`'''''{'''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'''''f'''''f'''''f'''''''''''''''''f'''''''''''''''''''''''''''''''''''''''''g'''''n'''''i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''i''''' '''''s'''''d'''''n'''''a'''''m'''''m'''''o'''''c''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''n'''''o'''''i'''''t'''''u'''''c'''''e'''''x'''''e''''' '''''e'''''h'''''t''''' ''''''''t'''''l'''''u'''''s'''''e'''''r''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''' '''''}'''''''','''''''',''''')'''''}'''''''''''''''''s'''''g'''''g'''''e'''''`'''''`'''''{'''''t'''''x'''''e'''''t'''''''' ''''':'''''}'''''e'''''u'''''l'''''a'''''v'''''{'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''g'''''''''''('''''}'''''n'''''a'''''r'''''{'''''m'''''r'''''h'''''t'''''a'''''m'''''''''''''''''''''''''''''''''''''''''''''''''''''''')''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''' '''''}'''''''',''''''''''''''''')'''''}'''''''''''''''''k'''''l'''''i'''''m'''''`'''''`'''''{'''''t'''''x'''''e'''''t'''''''' ''''':'''''}'''''e'''''u'''''l'''''a'''''v'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' ''''','''''''','''''2'''''_'''''}'''''d'''''i'''''{'''''t'''''i'''''h'''''t'''''a'''''''''''''''''''''''a'''''n'''''m'''''''' ''''':'''''}'''''d'''''i'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''('''''}'''''p'''''o'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''',''''''''{'''''''' ''''' ''''' ''''' '''''n''''''''''''''''''''''''''''' '''''o'''''t'''''s'''''p'''''a'''''m'''''''' '''''&''''' ''''')'''''2'''''_'''''}''''''''''''''_'''''d'''''i'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''('''''}'''''T'''''g'''''e'''''r'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''' '''''&'''''&'''''n''''''''f'''''s'''''h'''''t'''''a'''''m'''''''' ''''','''''''','''''1'''''_'''''}'''''d'''''i'''''{'''''t'''''i'''''h'''''t'''''a'''''m'''''''' ''''':'''''}'''''d'''''i'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''('''''}'''''p'''''o'''''{'''''f'''''s'''''h'''''t'''''a'''''m'''''''',''''''''{'''''''' ''''' ''''' ''''' '''''n'''''''''' 'o't's'p'a'm'' '&' ')'1'_'}'d'i'{'t'i'h't'a'm''('}'T'g'e'r'{'f's'h't'a'm'' '&'&'n''x'e't'' ':'}'e'u'l'a'v'{'f's'h't'a'm'' ','3'_'}'d'i'{'t'i'h't'a'm'' ':'}'d'i'{'f's'''''''t'i'h't'a'm''('}'p'o'{'f's'h't'a'''''''''' '&'&'''''m'',''{'' 'o't's'p'a'm'' '&' ')'3'_'}'d'i'{'t'i'h't'a'm''('}'T'g'e'r'{'f's'h't'a'm'' '&'&'n't''''''''''''''''''''''`'''`'{'f''''}'''''''s'''h't'a'm'''f'' '&''''''f''''''''}'*'n''''',''o'''''i't'a'u'q''%'e'''''%''{''' '&'n'i'g'e'b''''['' ''''''''''','''''''''''''''&''&' ''''''''' '&''''''''''' '&'''}'2'{'''}'*'t'a',''n'g'i'l'a'{'n'i'g'e'b''''''''''''''''}'';''}'';'''',''}'' '&'n''' '''' '&'''%''&''' '''' '&''['''''''' ''''''''''''''''''''''''''''''''''%''''&''&'y'''''a'''''r'' '&'''''''''''''''''''''''''''''''''%''''''&''''&'''''''''''''''''' '&'''''''''''''''''''''''''%''''''''&''''''''&'''''''''''''' '''''o'''''t'''''s'''''p'''a''''' '&'''''''''''''''''''''''''''''''''&'''''''''''''}''''''''''''''''}'*'n'o'i't'a'u'q'e'{'d'n'e'''''''''''''''''''' '&'''''''''''''''''''''''''''''''''}'''''''''']'' ''''''''n''''''''''''''''''''''''}'*'t'a'n'g'i'l'a'{'d'n'e'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'i'a't'{'f's'h't'a'm'' 'o't's'p'a'm'' ')'2'_'}'d'i'{'t'i'h't'a'm''('}'t'x'e'n'{'f's'h't'a'm''n''' '}'2'_'d'i'{'t'i'h't'a'''''''a'n'm'' 'o't's'p'a'm'' ')''''''}'1'_'d'i'{'t'i'h't'a'm'''''m'('}'t'x'e'n'{'f's'h't'a'm''n''' '}'1'_'d'i'{'t'i'h't'a'm'' 'o't's'p'a'm'' ')'3'''''''3'2'_'}'d'i'{'t'i'h't'a'm''('}'t'x'e'n'{'f's'h't'a'm''n''' '3'''m'''''''' ''''')'''''}'''''d'''a'e'h'{'f's'h't'a'm''''''''''''''''''''''''' 'o't's'p'a'm'' ')'3'_''''-'}'d'i'{'t'i'h't'a'm''('}'t'x'e'n'{'f's'h't'a'm''''''''''''''''''';'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''{'' 'o't's'p'a'm'' ')'|'''g'n'i'p'p'o'h's'''|''''''b'r'e'v''('}'T't's'i'l'{'f's'h't'a'm'' '''{' 'o't's'p'a'm'' ')'}'c'o'd'{'f's'h't'a'm''('}'T'p'a'm''''''''''''''''''''m'o'r'f'''''''n'i' 't'n'e'm'u'c'o'd'''o'''d'{'f's'h't'a'm'' '&' ';''{' '=' 'p'_'A'r'a''''''''y''']'' ''a'r'r'a'''n''''''''''''''''''''''''''''''''''''''''''''''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'l'p'm'a'x'e'-'e't'a't's':'g'i'f'{'l'e'b'a'l''}'.'}'c'o'd'-'e'k'a'm':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'f'o' 'e'l'p'm'a'x'e' 'e'h't' 'f'o' 'n'o'i't'a't'n'e's'e'r'p'e'r' 'l'a'n'r'e't'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'u'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'l'a'v'{'t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'l'a'v'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n'}'s'e'u'l'a'v'{'f's'h't'a'm''.')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'3'_'}'l'a'V'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'}'l'a'v'{'t'i'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n'}'s'e'u'l'a'v'{'f's'h't'a'm''.')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_''''{'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''''('r'o's'r'u'c'{'f's'h't'a'm'' ','',')''''}'1'_'k'('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' '1'_'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$'}'l'a'v'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'s'e'u'l'a'v'{'f's'h't'a'm''.')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''''''''''''''''''''''' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B'''''''n'}'$'2'_'}'l'a'V'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'}'','' ')')'k'('}'T'g'e'r'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm'' 'n'i'' '}'p'o'{'t'i'h't'a'm'' 'd'i'm'' '}'l'a'v'{'f's'h't'a'm''.'}'p'o'{'t'i'h't'a'm'' ',''{'' '=' '}'l'a'v'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'T'g'e'r'{'f's'h't'a'm''$'{'C'm'o'i'x'A''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'i'h't'a'm'' 'o't'l'a'v'e'' '}'s'e'u'l'a'v'{'f's'h't'a'm''.'}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'1'_'}'l'a'V'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'}'l'a'v''''c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'s'e'u'l'a'v'{'f's'h't'a'm''.'}'r'u'c''''''''''''''''{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'$'}'l'a'v'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''I'{'n'o'i't'p'a'c''n'}'r'a'l'u'b'a't'{'d'n'e''n'}'l'l'{'}'r'a'l'u'b'a't'{'n'i'g'e'b''n'g'n'i'r'e't'n'e'c''n'''''''''''''''''''''''''''''''''''''''''''''''''y'b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'e'v'i't'c'e'p's'e'r' ','''''''''''''''''''''''''''''''''''''''t''' 's'e'v'i'g' '}'s'e'l'u'r'-'r'p'x'e':'g'i'f''''r'{'f'e'r''~''''''''''''''''''''''d'e't'a'u'l'a'v'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'x'e't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n't'f'a'r'd'f'o'o'r'p' '%' 'i'f''n''''''''''''''''''''''.'r'o's'r'u'c' 'e'h't' 'n'i' 'd'e'd'o'c'n'e' 's'i' 'n'o'i't'r'e's's'a' 's'i'h't' 'd'n'a' ','}'T'p'a'm'{'f's't'x'e't''''''''''''''''''''''''''''''p'a'm'' 'e'p'y't' 'f'o' 's'i' '}'c'o'd'{'f's'h't'a'm'' 't'a'h't' 's't'r'e's's'a' 'y'l't'i'c'i'l'p'm'i' '|'t'e'g'.'c'o'd'|''''''b'r'e'v'' 'n'o'i's's'e'r'p'x'e' 'e'h't''''''''''''' 'e'h't' 't'a'h't' 'e't'o'N' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'l'u'r' '}'t'x'e'N'{'c's't'x'e't'' 'e'h't' 's'a' 'e'r'u't'c'u'r't's' 'e'l'u'r' 'e'v'i's'r'u'c'e'r' 'r'a'l'i'm'i's' 'a' 'g'n'i's'u' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'n'o'i't'a't'u'm' 'l'a'c'o'l' 'f'o' 's'c'i't'n'a'm'e'S''''''''''''''''''''''''''''''''''''' 'l'a'n'o'i't'a'r'e'p'O'{'n'o'i't'c'e's'b'u's'b'u's''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e't'a'l' 'h't'p'e'd' 'r'e't'a'e'r'g' 'n'i' 'e'r'o'''''''o';'l''''o'p'x'e' 'l'l'i'w' 'e'w' 'e'u's's'i' 'n'a' ','t'i' 'o't' 's'e'u'l'a'v' 'n'g'i's's'a' 'y'l't'n'e'r'r'u'c'n'o'c' 's'r'e'e'p' 'e'l'p''''l'i't'l'u'm' 'f'i' 's'e'u'l'a'v' 'e'l'p'i't'l'u'm' 'n'i'a't'n'o'c' 's's'e'l'e'h't'r'e'v'e'n' 'n'a'c' 'r'e't's'i'g'e'r' 'a' ','r'e't's'i'g'e'r' 'a' 'o't' 'e'u'l'a'v' 'e'l'g'n'i's' 'a' 'n'g'i's's''''''''''''''''''''''a' 'y'l'n'o' 'n'a'c' 'r'e'e'p' 'e'l''''l'g'n'i's' 'a' 'h'g'u'o'h't'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''u'm' 'e'v'a'h' 'y'a'm' 'r'e't's'i''''u'g'e'r' 'A' '.'e't'a't's' 'l'a'c'o'l' 'e'h't' 'n'i' 'n'o'i't'a't'o'n'n'a' 'e'p'y't' '}'T'g'e'r'{'f's't'x'e't'''''''''$' 'e'h't' 'g'n'i's'u' 'd'e''''s's'e'r'p'''p'x'e' '}'s'r'e't's'i'g'e'r'{'h'p'm'e'' 's'y'a'w'l'a' 'e'r'a' 'e'e'r't' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 's'e'v'a'e'l' 'e'h'T' '.'n'o'i't'i's'o'p' 'r'o's'r'u'c' 'r'a'l'u'c'i't'r'a'p' 'a' 't'a' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 's't'n'e't'n'o'c''''''''''''''''''' 'e'u'l'a'v' 'e'h't' 'd'a'e'r' 'o't' 'm'a'r'g'o'r'p' 'a' 'w'o'l'l'a''''d' 's'e'l'u'r' '$'}'3','2','1'{'_'}'l'a'V'{'c's't'x'e't''$' 'e'h't' ','y'l'l'a'n'i'F'n'n'''''''''''''''''''''''''''s'i' 'n'o'd''i's's'e'r'p'x'e' 'n'a''''''''''''''''''''''''' 'y'l's'u'o'u'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'n'''' ','e'l'p''''''''''e'k'p'm'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'$''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'l'p'm'a'x'e'-'e't'a't's''''''''''''''''''''''''''''''''''''''''s'e'h's'i'n'i'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'y't'p'm'e' 'y'l'b'i's's'o'p'(' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$')'}'c'o'd'{'f's'h't'a'm'' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm''$' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{'''''''}'''''3''''','''''2''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'o's'r'u'c' 'e'h't' 'n'i' 's'y'e'k' 'f'o' 'r'o't'c'e'v' 'e'h't' 'o't' 'g'n'i'd'r'o'c'c'a' 'e't'a't's' 'l'a'c'o'l' 'e'h't' 's'd'n'e'c's'e'd' 'y'l'e'v'i's'r'u'c'e'r' '$''''''3'_'+'}'t'x'e'N'{'c's't'x'e't'' 'e'h't' 'd'n'a' ','$'p'_'A'$' 'n'i' 's't's'i'x'e' 't's'i'l' 'e'h't' 'f'i' 'y'l'n'o' 'y'l'p'p'a' 's'e'l'u'r' '}'t'x'e'N'{'c's't'x'e't'' 'e'h'T' '.'t'n'e'm'e'l'e' 't's'i'l' 't'x'e'n' 'e'h't' 'f'o' 'r'e'i'f'i't'n'e'd'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'h't' 'o't' 'r'o's'r'u'c' 'e'h't' 'n'i' 'y'e'k' 'l'a'n'i'f' 'e'h't' 'g'n'i't't'e's' 'y'b' 't's'i'l' 'd'e'k'n'i'l' 'a' 'h'g'u'o'r'h't' 'n'o'i't'a'r'e't'i' 'e'l'd'n'a'h' '$'}'t'x'e'N'{'c's't'x'e't''$' 'd'n'a' '$'2'_'}'t'x'e'N'{'c's't'x'e't''$' ','$'1'_'}'t'x'e'N'{'c's't'x'e't''$' 's'e'l'u'r' 'e'e'r'h't' 'e'h'T' '.'$'p'_'A'$' 'n'i' 't'n'e't's'i'x'e'n'o'n' 'r'o' 'y't'p'm'e' 's'i' 't's'i'l' 'e'h't''''$' 'f'i' 'n'e'v'e' 's'e'i'l'p'p'a' 'e'l'u'r' 's'i'h'T' '.'t's'i'l' 'e'h't' 'f'o' '}'d'a'e'h'{'f's't'x'e't'''''''a'm'' 'e'h't' 't'a' 't'i''''''''''''' 'e'h't' 's'n'o'i't'i's'o'p' 'd'n'a' '''''''''''''l'a'v' 't's'i'l' 'a' 'o't'n'i' 'r'o's'r'u'c' 'e'h't' 's't'f'i''''u'h's' 'e'l'u'r' '}'r'e't'I'{'c's't'x'e't'' 'e'h'T'n'n'.'s'e'l'u'r' '}'t'e'G'{'c's't'x'e't'' 'd'n'a' '}'c'o'D'{'c's't'x'e't'' 'e'h't' 'g'n'i'y'l'p'p'a' 'y'b' '$')'}'''''g'n'i'p'p'o'h's'`'`'{'t'x'e't'' ','','e'l'g'n'a'r'' ')'}'c'o'd'{'f's'h't'a'm''('}'T'p'a'm'{'f's'h't'a'm'' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm''$'''''''''''''''''''''''''''''''''''''$' 'r'o's'r'u'c' 'e'h't' 'o't' 's'e't'a'u'l'a'v'e' '|')'''g'n'i'p'p'o'h's'''('t'e'g'.'c'o'd'|'b'r'e'v'''''''''$' 'n'o'i's's'e'r'p'x'e' 'e'h't' ','e'l'p'm'a'x'e' 'r'o'F' '.'p'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e't'n'e's'e'r'p'e'r' 's'i' 't'n'e'm'u'c'o'd' 't'o'o'r' 'e'h't' 'n'i' '''''g'n'i'p'p'o'h's'''''''h'w'`'`' 'y'e'k' 'e'h't' 'o's' ','p'a'm' 'a' 'n'i'h't'i'w' 'y'e'k' 'r'a'l'u'c'i't'r'a'p' 'a' 'o't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'r'o's'r'u'c' 'a' 's'e't'a'g'i'v'a'n' 'e'l'u'r' '}'t'e'G'{'c's't'x'e't'' 'e'h'T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 'e'l'p'm'a'x'e' 'e'h't' 'n'i' 's'a'(' 'p'a'm' 'a' 's'i' 't'o'o'r' 'e'h't' 'f'I' '.'}'c'o'd'{'f's't'x'e't'''''''a'm'' 'm'o't'a' 'l'a'i'c'e'p's' 'e'h't' 'g'n'i's'u' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 't'o'o'r' 'e'h't' 'g'n'i'c'n'e'r'e'f'e'r' ','r'o's'r'u'c' 't's'e'l'p'm'i's' 'e'h't' 's'e'n'i'f'e'd' '}'s'e'l'u'r'-'r'p'x'e':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'e'l'u'r' '}'c'o'D'{'c's't'x'e't''''''''''t'a'm'' 'e'h'T'n'n'.'}'T't's'i'l'{'f's't'x'e't'' 'r'o' '}'T'p'a'm'{'f's't'x'e't'''''''''$' 's'a' 'h'c'u's' 'm'o't'a''''''''''n'n'a' 'e'p'y't'a't'a'd' 'a' 'e'v'a'h' 'r'o't'c'e'v' 'e'h't' 'f'o' 's't'n'e'm'e'l'e' 'e'h't' 's'a'e'r'e'h'w' ','e'p'y't'a't'a'd' 'a' 'h't'i'w' 'd'e'g'g'a't' 't'o'n' 's'i' 't''''s'i' 't'a'h't' 'n'o'i't'c'n'i't's'i'd' 'e'h't' 'h't'i'w' ','r'o't'c'e'v' 'e'h't' 'f'o' 't'n'e'm'e'l'e' 'l'a'n'i'f' 'e'h't' 's'a' 'f'o' 't'h'g'u'o'h't' 'e'b' 'n'a'c' '$'n'_'k'$' '.')'t'n'e's'e'r'p' 's'y'a'w'l'a' 's'i' 'h'c'i'h'w'(' '$'n'_'k'$' 'y'e'k' 'l'a'n'i'f' 'a' 'd'n'a' ','$'e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','''''''''''''''''''''''''''''''''''s't'o'd'' ','1'_'k' 'e'l'g'n'a'l''$' 's'y'e'k' 'f'o' 'r'o't'c'e'v' 'a' 'f'o' 's't's'i's'n'o'c' '$')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k'''''''k'' ','s't'o'd'' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 's't's'i's''''''''''''''''s'n'i'a't'n'o'c' 'r'o's'r'u'c' 'a' ','l'a'r'e'n'e'g' 'n'I'n'n''''''''''''''''''''y'r't'n'e''''''''''''''''''t'x'e't''''''''''''''''{'f''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'1'_'}'d'i'{'t'i'h't'a'm''$' 'r'e'i'f'i't'n'e'd'i' 'h't'i'w' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'h't'i'w' 's'd'n'e' 'd'n'a' ','}'T's'h't'a'm'''''''''''''''''''''''''t's'i'l' 'e'p'y't' 'f'o' '''''g'n'i'p'p'o'h's'`'`' 'y'e'k' 'p'a'm' 'e'h't' 'h'g'u'o'r'h't' 's'e's'r'e'v'a'r't' 't'i' ','t'o'o'r' 'e'h't' 't'a' 'p'a'm' '}'c'o'd'{'f's't'x'e't'''''''a'm'' 'e'h't' 'm'o'r'f' 'g'n'i't'r'a't's'':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'e'r'u't'c'u'r't's' 'e'h't' 'h'g'u'o'r'h't' '''''''''''''''''''''''''''' ':'t'h'g'i'r' 'o't' 't'f'e'l' 'm'o'r'f' 'd'a'e'r' ','h't'a'p' 'a' 's'a' 'd'e't'e'r'p'r'e't'n'i' 'e'b' 'n'a'c' 't'I''''''''''''''''''''''r'u'c' 'e'h'T' '.'}'c'o'd'-'e'k'a'm':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' '|'''s'g'g'e'''|'b'r'e'v'' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'g'n'i't'n'e's'e'r'p'e'r' 'r'o's'r'u'c' 'a' 's'i' '$')'1'_'}'d'i'{'t'i'h't'a'm'' ','','e'l'g'n'a'r'' ')'}'''''g'n'i'p'p'o'h's'`'`'{'t'x'e't''('}'T't's'i'l'{'f's'h't'a'm'' ',')'}'c'o'd'{'f's'h't'a'm''('}'T'p'a'm'{'f's'h't'a'm'' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm''$' ','e'l'p'm'a'x'e' 'r'o'F'n'n'.'t'n'e'm'u'c'o'd' 'e'h't' 'n'i' 'n'o'i't'i's'o'p' 'e'm'a's' 'e'h't' 'e't'a'c'o'l' 'o't' 'd'e's'u' 'e'b' 'n'a'c' 't'i' 'e'r'e'h'w' ','r'e'e'p' 'r'e'h't'o'n'a' 'o't' 'k'r'o'w't'e'n' 'e'h't' 'r'e'v'o' 't'n'e's' 'e'b' 'n'a'c' 't'i' 'o's' ','s'r'e'i'f'i't'n'e'd'i' 'd'n'a' 's'y'e'k' 'e'l'b'a't'u'm'm'i' 'f'o' 'y'l'n'o' 's't's'i's'n'o'c' 'r'o's'r'u'c' 'A''''S' '.'e'd'o'n' 'f'a'e'l' 'r'o' 'h'c'n'a'r'b' 'e'm'o's' 'o't' 'e'e'r't' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 't'o'o'r' 'e'h't' 'm'o'r'f' 'h't'a'p' 'a' 'g'n'i'b'i'r'c's'e'd' 'y'b' 't'n'e'm'u'c'o'd' 'N'O'S'J' 'a' 'n'i' 'n'o'i't'i's'o'p' 'r'a'l'u'c'i't'r'a'p''g'i'b'm'a'n'u'''''''''''''' 'a' 's'e'i'f'i't'n'e'd'i' 'r'o's'r'u'c' 'A' '.'''''''''''''''''''''''''''''''''' 's'i' 'h'c'i'h'w' ',''''''' '.'''''' 'w'o'h' 'w'o'h's' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','m'o't'a' '}'r'o's'r'u'c'{'h'p'm'e'' 'a' 'o't' 'e't'a'u'l'a'v'e''''''''''''''''''''''''' 'e'''''''r'o't'a'r'e'p'o' '}'s'e'l'u'r'-'r'p'x'e':'g'i'f'{'f'e'r''~'e'r'u'g'i'F''''f' 'n'i' 's'e'l'u'r' 'g'n'i'n'i'a'm'e'r''''''''''''''''r'e'h't'o' 'e'h'T'n'n'.'e'l'b'a'i'r'a'v' 'd'e'n'i'f'e'd' 'y'l's'u'o'i'v'e'r'p' 'a' 'f'o' 'e'u'l'a'v' 'e'h't' 'e'v'e'i'r't'e'r' 'o't' 'm'a'r'g'o'r'p' 'e'h't' 's'w'o'l'l'a' 'e'l'u'r' '}'r'a'V'{'c's't'x'e't'' 'g'n'i'd'n'o'p's'e'r'r'o'c' 'e'h't' 'd'n'a' ','e't'a't's' 'l'a'c'o'l' 'e'h't' 'o't' 'd'e'd'd'a' 's'i' 'h'c'i'h'w' ','e'l'b'a'i'r'a'v' 'l'a'c'o'l' 'a' 'e'n'i'f'e'd' 'o't' 'm'a'r'g'o'r'p' 'e'h't' 's'w'o'l'l'a' 'e'l'u'r' '}'t'e'L'{'c's't'x'e't'' 'e'h'T' '.'y'l'l'a'i't'n'e'u'q'e's' 'd'e't'u'c'e'x'e' 'e'r'a' 's'd'n'a'm'm'o'c' 't'a'h't' 's'e'n'i'f'e'd' 'e'l'u'r' '}'c'e'x'E'{'c's't'x'e't'' 'e'h'T' ''''''''''''''''''''''''''''''''''''''''.'$'p'_'A'$' 'e't'a't's' 'r'e'e'p' 'l'a'c'o'l' 'e'h't' 'f'o' 't'x'e't'n'o'c' 'e'h't' 'n'i' 'd'e'i'l'p'p'a' 'e'r'a' 'h'c'i'h'w' ','e'r'u'g'i'F''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'e'h't' 'n'i' 's'n'o'i's's'e'r'p'x'e' 'R'P'X'E' 'g'n'i't'a'u'l'a'v'e' 'r'o'f' 's'e'l'u'r' 'e'h'T'n'n'.'t's'i'l' 'e'h't' 'f'o' 'd'n'e' 'd'n'a' 'g'n'i'n'n'i'g'e'b' 'e'h't' 'g'n'i't'o'n'e'd' 's'm'o't'a' '}'l'i'a't'{'f's't'x'e't'' 'd'n'a' '}'d'a'e'h'{'f's't'x'e't'' 'l'a'i'c'e'p's' 'd'n'a' ','''' ')'$'3'_'}'d'i''''3'{'t'i'h't'a'm'' ','2'_'}'d'i'{'t'i'h't'a'm'' ','1'_'}'d'i'{'t'i'h't'a'm''$'(' 'r'e'i'f'i't'n'e'd'i' 'e'u'q'i'n'u' 'a' 'd'e'n'g'i's's'a' 't'n'e'm'e'l'e' 't's'i'l' 'h'c'a'e' 'h't'i'w' ','t's'i'l' 'd'e'k'n'i'l' 'a' 'g'n'i'l'b'm'e's'e'r' 'r'e'n'n'a'm' 'a' 'n'i' 'd'e't'n'e's'e'r'p'e'r' 's'i' 't's'i'l' 'e'h'T' '.'}'T't's'i'l'{'f's't'x'e't'' 'e'p'y't' 'f'o' '''''g'n'i'p'p'o'h's'`'`' 'y'e'k' 'e'h't' 's'i' 'y'r't'n'e' 'y'l'n'o' 'e'h't' ','e'r'e'h'''''''''''''t' 'n'i' ';'p'a'm' 'e'h't' 'f'o' 's'r'i'a'p' 'e'u'l'a'v'-'y'e'k' 'e'h't' 'g'n'i'n'i'a't'n'o'c' 'n'o'i't'c'n'u'f' 'l'a'i't'r'a'p' 'r'e'h't'o'n'''' 'a' 'o't' 's'p'a'm' '}')''''''' '}'c'o'd'('T'p'a'm'{'f's't'x'e't'' '.'p'a'm' 'e'p'y't'''''''''''''''''''''''''''''''e'p'y't' 'p'a'm' 'a' 'f'o'''''''f'o' 's'i' '}'c'o'd'{'f's't'x'e't''''m'' 't'n'e'm'u'c'o'd' 'e'h't' 't'a'h't' 's'e't'o'n'e'd' 'h'c'i'h'w' ','}')'c'o'd'('T'p'a'm'{'f's't'x'e't''''m'''''''''$' 'm'o't'a' 'e'l'g'n'i's' 'e'h't' 's'i' 'n'i'a'm'o'd' 'e's'o'h'w' 'n'o'i't'c'n'u'f' 'l'a'i't'r'a'p' 'a' 's'i' '$'p'_'A'$' ','}'e'l'p'm'a'x'e'-'e't'a't's':'g'i'f''''s'{'f'e'r''~'e'r'u'g'i'F' 'n'I' '.'}'c'o'd'-'e'k'a'm':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'f'o' 'e'l'p'm'a'x'e' 't's'i'l' 'g'n'i'p'p'o'h's' 'e'h't' 'o't' 's'd'n'o'p's'e'r'r'o'c' 'h'c'i'h'w' ','}'e'l'p'm'a'x'e'-'e't'a't's':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'e'v'i'g' 's'i' '$'p'_'A'$' 'e't'a't's' 'r'e'e'p' 'e'h't' 'f'o' 'e'l'p'm'a'x'e' 'e'v'i't'a'r't's'u'l'l'i' 'n'A'n'n'.'$'p'$' 'r'e'e'p' 'e'l'g'n'i's' 'a' 't'a' 's'd'n'a'm'm'o'c' 'f'o' 'n'o'i't'u'c'e'x'e' 'e'h't' 'n'o' 'e't'a'r't'n'e'c'n'o'c' 'e'w' ','''' 'w'o'n' 'r'o'F' '.'r'e't'a'l' 's's'u'c's'i'd' 'e'w' 'h'c'i'h'w' ','d'n'a'm'm'o'c' '}'d'l'e'i'y'{'f's't'x'e't'' 'e'h't' 'f'o' 'n'o'i't'a'u'l'a'v'e' 'e'h't' 'n'i' 's'r'u'c'c'o' 's'r'e'e'p' 'n'e'e'w't'e'b'''''''e'p' 'n'o'i't'a'c'i'n'u'm'm'o'c' 'y'l'n'o' 'e'h'T' '.'$'''p'$' 'r'e'e'p' 'r'e'h't'o' 'y'n'a' 'f'o' '$'}'''p'{'_'A'$'''''''''' 'f'o' 'e't'a't's' 'e'h't' 'f'o' 't'n'e'd''''t'n'e'p'e'd'n'i' 'e'r'a' 'h'c'i'h'w' 'd'n'a' ','$'p'_'A''''''''''P'-'A'$' 'e't'a't's' 'l'a'c'o'l' 's'i'h't' 'y'f'i'd'o'm' 'd'n'a' 't'c'e'p's'n'i' 't'a'h't' 's'e'l'u'r' 'y'b' 'd'e'n'i'f'e'd' 'e'r'a' 'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'e'h't' 'f'o' 's'c'i't'n'a''''e'm'e's' 'e'h'T''''E' '''''''''''''''''.'n'o'i't'c'n'u'f' 'l'a'i't'r'a'p' 'e't'i'n'i'f' 'a' ','$'p'_'A'$' 'h't'i'w' 'd'e'b'i'r'c's'e'd' 's'i' '$'p'$' 'r'e'e'p' 'f'o' 'e't'a't's' 'e'h'T'n'n''''''n'}'e'r'u'g'i'f'{'d'n'e''n'}'e'r'u'g'i'f'{'n'i'g'e'b''n''''''''''''''''''''''''''''''''}'r'e't'n'e'c'{'n'i'g'e'b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''p'_'A' 'o't'l'a'v'e'' '1'_'}'d'm'c'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''''E''n'''''''''''''''''''''''''''}'}''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''4'''''''}'m'e'6'{'e'c'a'p's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''''''''}'r'e't'n'e'c'{'n'i'g'e'b''n''r'e't'n'e'c'{'d'n'e''n''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f'o'o'r'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'r'e't'n'e'c'{'d'n'e''n'''''''''''''''''''''''3'''''''''''''''''''''''''''',''''''''''''''''''''}'m'e'6'{'e'c'a'p's'''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'}'t'e'G'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$')'n'_'k' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p''''P'{'n'i'g'e'b''n'n'}'e'e'r't'f'o'o'r'p'{'d'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'n'e'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'''''''''''''''''l'''''''''''''''''i'''''''''''''''''f''''''''''''''''''''''''''''''''''''''''''''1'''''''''''}'m'e'2'{'e'c'a'p's'h'''''''''''''d'a'u'q''f'o'o'r'P'y'a'l'p's'i'D''n'''%''''''''''''''''%'%''''''''''''''''''''''''''}'$'''}'r'u'c'{'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f'o'o'r'p''f'o'o'r'P'y'a'l'p's'i'D''n''''''''''''''}'r'e't'n'e'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$')'''k' ','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$')'''n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' 'o't'l'a'v'e'' ' ' ' 'n'}'t'x'e'n'{'f's'h't'a'm''.'''''''.'')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_''''{'k' ','s't'o'd'' ','2'_'k' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$''''%'''''''$'%'{'C'f'n'I'y'r'a'n'i'B''n'}'$'3'_'}'t'x'e'N'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$')'''n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' 'o't'l'a'v'e''''''''e''' ' ' ' 'n''''''''''''''''a'v'e'' '}'t'x'e'n'{'f's'h't'a'm''.')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k' ','s't'o'd'' ','2'_'k' 'e'l'g'n'a'l''(''o's'r'u'c''}'{'f's'h't'a'm'' ','',')'1'_'k'('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' '1'_'k'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n'''' 'o't'l'a'v'e'' '}'t'x'e'n'{'f's'h't'a'm''.')'k' ','','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ','','}'x't'c'{'t'i'h't'a'm''$'{'C'f'n'I'y'r'a'n'i'B''n'}'$'2'_'}'t'x'e'N'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L''n'}'$'''k' '=' ')')'k'('}'t'x'e'n'{'f's'h't'a'm''('}'x't'c'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')'}'x't'c'{'t'i'h't'a'm''('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' ')'k'('}'t'x'e'n'{'f's'h't'a'm''$'{''C'm'o'i'x'A'n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{''''P'd'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n't'i'h't'a'm'' 'o't'l'a'v'e'' '}'t'x'e''''''''''x'e' 'n'{'f's'h't'a'm''.'}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'''''''y'e'r'a'n'i'B'''''A'n'}'$'1'_'}'t'x'e'N'{'c's't'x''''s'e't'''''''a'm''$'{'l'e'b'a'L't'f'e'L''n'}'$'''}'r'u'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'t'x'e'n'{'f's'h't'a'm''.'}'r'u'c'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'$'}'r'u'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'''''''''''''''''''f'o'p'o'r'['{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'''''''''''''''''0'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f'o'o'r'p''f'o'o'r'P'y'a'l'p's'i'D''n'}'$')'}'d'a'e'h'{'f's'h't'a'm'' '''','','e'l'g'n'a'r'' ')'n'_'k'('}'T't's'i'l'{'f's'h't'a'm'' ','}'1'-'n'{'_'k' ','s't'o'd'' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n'''' 'o't'l'a'v'e'' '}'r'e't'i'{'f's'h't'a'm''.'}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'r'e't'I'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'''''''}'%'$')'n'_'k' ','','e'l'g'n'a'r'' '}'1'-'n'{'_'k''''' ','s't'o'd'' ','1'_'k' 'e'l'g'n'a'l''('''' '}'r'o's'r'u'c'{'f's'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'%'n'}'m'e'4'{'e'c'a'p's'h''f'o'o'r'P'y'a'l'p's'i'D''n'}'$')'}'y'e'k'{'t'i'h't'a'm'' ','e'l'g'n'a'r'' ')'n'_'k'('}'T'p'a'm'{'f's'h't'a'm'' ','}'1'-'n'{'_'k' ','s't'o'd'' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' ' ' ' 'n' ','e'l'g'n'a'r'' '}'1'-'n'{'_'k''''' ','s't'o'd'' ','1'_'k' 'e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's''''''''''{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'''''''''''''{'C'f'n'I'y'r'a'n'U''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''o't'l'a'v'e'' ')'}'y'e'k'{'t'i'h't'a'm''('}'t'e'g'{'f's'h't'a'm''.'}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p''''r'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'u'o'm''''''''''''''''t'n'u'o'M'A'p'i'k'S'f'o'o'r'p''''h''f'o'o'r'P'y'a'l'p's'i''''''''''''''''''''''''''''''''''F'O'O'R'P'Y'A'L'P'S'I'D''n'}'$')'x'('p'_'A' 'o't'l'a'v'e'' 'x' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'r'a'V'{'c's't'x'e't'''''''''''e't'|'{'l'e'b'a'L't'f'e'L''''''''''''''''''''''''''''%'$'{'C'm'o'i'x'A''n'}'$')'p'_'A'('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' 'x'$'{'C'm'o'i'x'A''n'%'n'l'l'i'f'h''f'o'o'r'P'y'a'l'p's'i'D''n'}'$']',''}'r'u'c'{'t'i'h't'a'm'' ','''''''' 'o't's'p'a'm'' 'x',''['p'_'A' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' '=' 'x' '}'t'e'l'{'f's'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'t'e'L'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'r'u'c'{'t'i'h't'a'm'' 'o't'l'a'v'e'' '}'r'p'x'e'{'t'i'h't'a'm'' ','','p'_'A'''''$'{'C'm'o'i'x'A''n'n't'n'u'o'm'A'p'i'k'S'f'o'o'r'p''f'o'o'r'P'y'a'l'p's'i'D''''''''i'D'n'}'$')'}'c'o'd'{'f's'h't'a'm'' ','e'l'g'n'a'r''e'l'g'n'a'l''('}'r'o's'r'u'c'{'f's'h't'a'm'' 'o't'l'a'v'e'' '}'c'o'd'{'f's'h't'a'm'' ','','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'c'o'D'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'{'C'm'o'i'x'A''n'%'n'l'l'i'f'h''f'o'o'r'P'y'a'l'p's'i'D''n'}'$'e'l'g'n'a'r'' 's't'o'd'' '}';'{'n'i'b'h't'a'm'' '2'_'}'d'm'c'{'t'i'h't'a'm'' 'e'l'g'n'a'l'' ',''''' ','''p'_'A' 'o't'l'a'v'e'' ' ' ' 'n''c'e'x'E'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'''''''''''''C'f'n'I'y'r'a'n'i'B'''''''''''''''''''''''''''''''''''' 'e'l'g'n'a'l''''''''''''''''''''''''''''''''''''''''''''''''''''''e'l'g'n'a'r'' 's't'o'd'' '}';'{'n'i'b'h't'a'm'' '2'_'}'d'm'c'{'''t'i'h't'a'm'' '}';'{'n'i'b'h't'a'm'' '''<'''''''''''''''1'_'}'d'm'c'{'t'i'h't'a'm'' ','','p'_'A'$'{'C'm'o'i'x'A''n'}'$'}'D'M'C'{'m'r'h't'a'm'' '}':'{'n'i'b'h't'a'm'' '1'_'}'d'm'c'{'t'i'h't'a'm''''a''$'{'C'm'o'i'x'A''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'e'l'u'r'-'r'p'x'e''''c':'g'i'f'{'l'e'b'a'l''}'r'o's'r'u'c' 'a' 'n'i'a't'b'o' 'o't' 'n'o'i's's'e'r'p'x'e' 'n'a' 'g'n'i't'a'u'l'a'v'e' 'r'o'f' 's'e'l'u'R'{'n'o'i't'p'a'c''n'g'n'i'r'e't'n'e'c''n'''''''''''''''}'*'e'r'u'g'i'f'{'d'n'e''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b'''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'f'o' 's'c'i't'n'a'm'e's' 'l'a'n'o'i't'a'r'e'p'O'{'n'o'i't'c'e's'b'u's'b'u's''n'n'''''''''''''''''''.'s'n'o'i't'a'c'i'f'i'd'o'm' 't'n'e'r'r'u'c'n'o'c' 'f'o' 'e'c'n'e's'e'r'p' 'e'h't' 'n'i' 's'c'i't'n'a'm'e's' 'e'l'b'a'r'i's'e'd' 'g'n'i'v'e'i'h'c'a'''''''e'd' 'r'o'f' 'l'u'f'p'l'e'h' 'e'r'''''''''''''''''''''''''''''''''''''''''''''' 'r'o'f' 'l'u'f'p'l'e'h' 'e'r'a' 's'e'r'u't'a'e'f' 'e's'e'h't' ','r'e't'a'l' 'e'e's' 'l'l'a'h's' 'e'w' 's'A' '.'s'n'o'i't'c'e'l'l'o'c' 'y't'p'm'e'-'n'o'n' 'r'o'f' 't'o'n' 't'u'b' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''c' 's't's'i'l' 'd'n'a' '''' 's'p'a'm' 'r'o'f' 't'o'n' 't'u'b' ','s't's'i'l' 'd'n'a' 's'p'a'm' 'y't'p'm'e' 'r'o'f' 's'l'a'r'e't'i'l' 's'a'h' 'e'g'a'u'g'n'a'l' 'e'h't' 'd'n'a' ';'x'e'd'n'i' 'y'b' 't'o'n' 't'u'b' ')'}'t'x'e'n'{'f's't'x'e't''(' 'n'o'i't'a'r'e't'i' 'y'b' 'd'e't'a'g'i'v'a'n' 'e'b''''n' 'y'l'n'o' 'n'a'c' 's't's'i'l' ';'d'e's's'e'c'c'a' 't's'r'i'f' 'e'r'a' 'y'e'h't' 'n'e'h'w' 'd'e't'a'e'r'c' 'y'l't'i'c'i'l'p'm'i' 'e'r'a' 's'p'a'm' 'n'i' 's'y'e'k'''''''h't' ':'s'e'g'a'u'g'n'a'l' 'g'n'i'm'm'a'r'g'o'r'p' 'm'a'e'r''''e't's'n'i'a'm' 't's'o'm' 'm'o'r'f' 'r'e'f'f'i'd' 'y'l'e't'a'r'e'b'i'l'e'd' 'e'g'a'u'g'n'a'l' 's'i'h't' 'f'o' 's'e'r'u't'a'e'f' 'w'e'f' 'A'n'n'.'d'a'e'h' 'e'h't' 'o't' 'r'e'f'e'r' 'o't' 's'e'u'n'i't'n'o'c' '|'t's'i'l'|'b'r'e'v'' 'e'l'b'a'i'r'a'v' 'e'h't' 'e's'u'a'c'e'b' ','t's'i'l' 'e'h't' 'f'o' 'd'a'e'h' 'e'h't''e'''''u'''''l'''''a'''''v''''' '''''e'''''h'''''t''''' '''''s'''''t'''''a'''''e'''''r'''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'h't' 'o't' 's'e'v'o'm' 'h'c'i'h'w' ','}'t'x'e'n'{'f's't'x'e't'' 's'l'l'a'c' 'd'n'a' ',')'t's'i'x'e' 't'o'n' 's'e'o'd' 't'i' 'f'i' 'd'e't'a'e'r'c' 'y'l't'i'c'i'l'p'm'i' 's'i' 'h'c'i'h'w'(''n'i'l' 'd'n'o'c'e's' 'e'h'T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t's'i'l' 'e'h't' 'f'o' 'd'a'e'h' 'e'h't' 't'a' 's'n'e'p'p'a'h' 'n'o'i't'r'e's'n'i' ','e'l'o'h'w' 'a' 's'a' 't's'i'l' 'e'h't' 'o't' 's'r'e'f'e'r' 'r'o's'r'u'c' 'e'h't' 'f'I' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'a' 'd'e't'r'e's'n'i' 's'''''''s'n'i' 'e's'e'e'h'c' 't'u'b' ','s'g'g'e' 'r'e't'f'a' 'd'e't'r'e's'n'i' 's'i' 'k'l'i'm''''' ','s'u'h'T' '.'t'n'e'm'e'l'e' 'd'e't'r'e's'n'i' 'y'l'''' 'w'e'n' 'e'h't' 'f'o' 'n'o'i't'i's'o'p' 'r'o's'r'u'c' 'e'h't' 's'n'r'u't'e'r' 'd'n'a' ','n'o'i't'i's'o'p' 'r'o's'r'u'c' 't'n'e'r'r'u'c' 'e'h't' '}'r'e't'f'a'{'h'p'm'e'' 't'n'e'm'e'l'e''''a' 't's'i'l' 'w'e'n' ''''''' 'n'a' 's'd'd'a'''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a'm'm'o'c' '}'t'r'e's'n'i'{'f's't'x'e't'' 'e'h'T' '.'t's'i'l' 'e'h't' 'o't'n'i' 'd'e't'r'e's'n'i' 'e'r'a' 's'm'e't'i' 'e'e'r'h't' 'n'e'h't' 'd'n'a' ','|']'['|'b'r'e'v'' 't's'i'l' 'y't'p'm'e' 'e'h't' 'o't' 't'e's' 's'i' '|'''g'n'i'p'p'o'h's'''|'b'r'e'v''''''''''' 'y'e'k' 'e'h't' ','p'a'm' 't'a'h't' 'n'i'h't'i'W' '.'l'a'r'e't'i'l' 'p'a'm' 'y't'p'm'e' 'e'h't' ','|'}'{'|'b'r'e'v'' 'o't' 't'e's''''''''''s's'a' 's'i' '}'c'o'd'{'f's't'x'e't'' 't's'r'i'F' '.'t's'i'l' 'g'n'i'p'p'o'h's' 'a' ''''''' 'a'g'n'i't'n'e's'e'r'p'e'r' 't'n'e'm'u'c'o'd' 'w'e'n' 'a' 'g'n'i't'c'u'r't's'n'o'c' 's'd'n'a'm'm'o'c' 'f'o' 'e'c'n'e'u'q'e's' 'a' 'f'o' 'e'l'p'm'a'x'e' 'n'a' 's'w'o'h's' '}'c'o'd'-'e'k'a'm':'g'i'f'{'f'e'r''~'e'r'u'g'i'F'''d'''''e'''i'f'i'd'o'm' 'g'n'i'e'b' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 't'r'a'p' 'e'h't' 's'e'i'f'i't'n'e'd'i' 'R'P'X'E' 'n'o'i's's'e'r'p'x'e' 'g'n'i'd'e'c'e'r'p' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d' 's'i' 'd'e'i'f'i'd'o'm' 'g'n'i'e'b' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 't'r'a'p' 'e'h'T' ''''''' 'e'h'T'n'n''''''''''''''''''''''''''''''' 't'r'a'p' 'e'h'T' '.')'}'r'c'n'i'{'f's't'x'e't''(' 'r'e't'n'u'o'c' 'a' 'g'n'i't'n'e'm'e'r'c'n'i' 'y'b' 'r'o' ',')'}'e't'e'l'e'd'{'f's''''f't'x'e't''(' 'p'a'm' 'a' 'r'o' 't's'i'l' 'a' 'm'o'r'f' 't'n'e'm'e'l'e' 'n'a' 'g'n'i't'e'l'e'd' 'y'b' ','''''')'}'t'r'e'n's'i'{'f's't'x'e't''(' 't's'i'l' 'a' 'o't'n'i' 't'n'e'm'e'l'e' 'n'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i't'r'e's'n'i' 'y'b' ',')'=':' 'r'o't'a'r'e'p'o' 't'n'e'm'n'g'i's's'a' 'e'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'n'i's'u'(' 'd'l'e'i'f' 'e'm'o's' 'f'o' 'e'u'l'a'v' 'e'h't' 'g'n'i'n'g'i's's'a' 'y'b' 'd'e'i'f'i'd'o'm' 'e'b' 'n'a'c' 't'n'e'm'u'c'o'd' 'A' '.'t'n'''''''''''''''''''''''''''''''''''''x'e't'' ','=':'''''(' 't'n'e'm'u'c'o'd' 'e'h't' 's'e'i'f'i'd'o'm' 'r'o' ',')'}'d'l'e'i'y'{'f's't'x'e't''(' 'n'o'i't'a'c'i'n'u'm'm'o'c' 'k'r'o'w't'e'n' 's'm'r'o'f'r'e'p' ',')'}'t'e'l'{'f's't'x'e't''''m''(' 'e'l'b'a'i'r'a'v' 'l'a'c'o'l' 'a' 'f'o' 'e'u'l'a'v' 'e'h't' 's't'e's' 'r'e'h't'i'e' 'D'M'C' 'd'n'a'm'm'o'c' 'A'''''''p'''''p''''''''''''''''' '}'t'e'''''s'''''''''''''''''''''''''''''''''''''')'|'''g'n'i'p'p'o'h's'''|''''''b'r'e'v''('}'''''''(')'t'e'g'.'c'o'd'{'f's't'x'e't'' '=' ''g'g'e'''l'''''{'''f's't'x'e't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';')''''''')'}''''''''''''''''''''''''''''''''''''''''''''''''''''','''s'g'g'e'''[' ':'''g'n'i'p'p'o'h's'''{'n''''''''''''''''}'m'i't'a'b'r'e'v'{'d'n'e''n'}'m'i't'a'b'r'e'v'{'n'i'g'e'b'''''n'n':'e't'a't's' 'l'a'n'i'F'n'|'''k'l'i'm'''|'b'r'e'v''('}'t'r'e's'n'i'{'f's't'x'e't''.'}'t's'i'l'{'t'i't'x'e't''n''' ';')''''|''''''''''''''s'g'g'e'|'''''''b'r'e'v''('}'t'r'e's'n'i'{'f's't'x'e't''.'}'t's'i'l'{'t'i't'x'e't''n''' ''''';'''o'h's'{'t'i't'x'e't'' '}'t'e'l'{'''' 'f's't'x'e't''''''''''''''''''''''''''''''''''''''.')'|'''g'n'i'p'p'o'h's'''|''''''b'r'e'v''('}'t'e'g'.'c'o'd'{'f's't'x'e't''n''';'|']'['|'b'r'e'v'' '=' ')'|''''''|'g'n'i'p'p'o'h's'''|'b'r'e'v'''''''''''''''''t'x'e't'''''''''''''h't'a'm''(''e'g'.''}'c'o'd'{'f's't'x'e't''n''';'|'}'{'|'b'r'e'v'' '=' '}'c'o'd'{'f's't'x'e't''n'''''''''''''''}'r'a'l'u'b'a't'{'d'n'e''n'}'l'{'}'r'a'l'u'b'a't'{'n'i'g'e'b''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'r'u'g'i'f'{'d'n'e''n'}'c'o'd'-'e'k'a'm':'g'i'f'{'l'e'b'a'l''}'t'n'e'm'u'c'o'd' 'N'O'S'J' 'a' 'g'n'i't'c'u'r't's'n'o'c' 'y'l'l'a'c'i't'a'm'm'a'r'g'o'r'p' 'f'o' 'e'l'p'm'a'x'E''''''''''''''''''''''{'n'o'i't'p'a'c''n'g'n'i'r'e't'n'e'c''n'}'e'r'u'g'i'f'{'n'i'g'e'b''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'h't' ','y't'i'v'e'r'b' 'r'o'F'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'c'i't'n'a'm'e's' 'l'a'm'r'o'f' 's't'i' 'g'n'i'v'i'g' 'e'r'o'f'e'b' ','y'l'l'a'm'r'o'f'n'i' 'e'g'a'u'g'n'a'l' 'e'h't' 'n'i'a'l'p'x'e' 't's'r'i'f' 'e'W'' '''''''''''''''''''''''''t'c'u'''''''''''o't' 'd'e's'u' 's'i' ''''''r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'r'r'u'c' 'e'''e'h't'''''.'''h'''''t''''' '''''t'''''a''''' '''e'u'l'a'v' 'e'h't' 's'n'r'u't'e'r''' '''''}'''''s'''''e'''''u'''''l'''''a'''''v'{'f's't'x'e't'' 'd'n'a' ','t's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'f'o' 't'n'e'm'e'l'e' 't'x'e'n' 'e'h't' 'o't' 's'e'v'o'm' '}'t'x'e'n'{'f's't'x'e't'''''$' ',')'t'c'e'j'b'o' 'N'O'S'J' 'a'(' 'p'a'm' 'a' 'n'i'h't'i'w' 'y'e'k' 'a' 's't'c'e'l'e's' '$')''''_'}'y'e'k'{'t'i'h't'a'm''('}'t'e'g'{'f's'h't'a'm''$' ':'s'l'l'a'c' 'd'o'h't'e'm'''''''''''''''''''''''''''' 'n'o'i't'c'n'u'f' 'f'o' 'e'c'n'e'u'q'e's' 'a' 'h't'i'w' 's'e'u'n'i't'n'o'c' 'n'e'h't' 'n'o'i's's'e'r'p'x'e' 'e'h'T' '.'d'n'a'm'm'o'c'''''''''''''''''''s'e'r'p'x'e' '}'t'e'l'{'f's't'x'e't''''']' 'a' 'n'i' 'd'e'n'i'f'e'd' 'y'l's'u'o'i'v'e'r'p' 's'a'w' 't'a'h't' '$'x'$' 'e'l'b'a'i'r'a'v' 'a' 'r'o' ','e'e'r't' 't'n'e'm'u'c'o'd' 'N'O'S'J' 'e'h't' 'f'o' 't'o'o'r' 'e'h't' 'g'n'i'y'f'i't'n'e'd'i' ','}'c'o'd'{'f's't'x'e't'' 'n'e'k'o't' 'l'a'i'c'e'p's' 'e'h't' 'r'e'h't'i'e' 'h't'i'w' 's't'r'a't's' 'n'o'i's's'e'r'p'x'e' 'n'A' '.''''t'''''s'''n'o'c' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''s'''''''''''''''''y''''''''''''''''''''''''''''''''''''y'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m'm'o'c' 'a' 'd'n'a' ','t'n'e'm'u'c'o'd' 'a' 'n'i'h't'i'w' 'n'o'i't'i's'o'p' 'a' 's'e'i'f'i't'n'e'd'i' 'd'n'a' 't'n'e'm'u'c'o'd' 'a' 'f'o' 'e't'a't's' 'e'h't' 's'e'i'r'e'u'q' 'h'c'i'h'w' ','R'P'X'E' 'n'o'i's's'e'r'p'x'e' 'n'a' ':'t'c'u'r't's'n'o'c' 'f'o' 's'd'n'i'k' 'n'''' '''''''''''''k' 's'n'i'a'm' 'o'w't' 's'a'h' 'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'e'h'T'n'n'.'e'g'a'u'g'n'a'l' 'g'n'i'm'm'a'r'g'o'r'p' 'e's'o'p'r'u'p'-'l'a'r'e'n'e'g' 'a' 'n'i' 'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 's'i'h't' 'g'n'i'd'd'e'b'm'e' 'y'b' 'd'e't'n'e'm'e'l'p'm'i'''''''''''''''''''d'i'v'o'r'p' 'e'b' 'y'l'i's'a'e' 'n'a'c' 's'e'i't'i'l'i'c'a'f' 'h'c'u's' 't'u'b' ','s'''''''n'o'i't'c'n'u'f' ','s'p'o'o'l' ','s'l'a'n'o'i't'i'd'n'o'c' 's'a' 'h'c'u's' 's'e'r'u't'c'u'r't's' 'l'o'r't'n''''''''''t's'n'o'c' 'l'a'u's'u' 'e'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'i'd'n'o'c' ','s'p'o'o'l' 'e'd'i'v'o'r'p' 't'o'n' 's'e'o'd' '}'x'a't'n'y's'-'l'a'c'o'l':'g'i'f'{'f'e'r''~'''''''''''''e'r''`'e'r'u'g'i'F' 'f'o' 'e'g'a'u'g'n'a'l' 'e'h'T' '.'s'd'n'a'm'm'o'c' 'f'o' 'e'c'n'e'u'q'e's' ','e't'i'n'i'f'n'i' 'y'l'b'i's's'o'p' ','r'a'e'n'i'l' 'a' 'e'b' 'o't' 'd'e'm'u's's'a' 's'i' 'm'a'r'g'o'r'p' 'A' '.'}'x'a't'n'y's'-'l'a'c'o'l':'g'i'f'{'f'e'r''~'e'r'u'g'i'F' 'n'i' 'n'e'v'i'g' 's'i' 'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'e'h't' 'f'o' 'x'a't'n'y's' 'e'h''''R'T'n'n'}'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'C'{'n'o'i't'c'e's'b'u's''n'n'''''''''''r'e'v'n' ''''''e'''''v'''''''''''''''''''''''''''''''''''''''''''''t'''''t'''''''''''''''''''''''''''''t't''''''''''''''''''''','''''$'}']'['{'f's'h't'a'm''$''''''''''''''''''''''''''''''''''''''''}']''[''{'f's't'x'e't'' '&' '$'|'$''''|' '&'n''' '}'}''{''{'f's't'x'e't'''''''a'm'' '&' '$'|'$' '&'n''' '''''$'}'g'n'i'r't'S'{'m'r'h't'a'm'' 'n'i'' 's'$' '&' '$'''''''s' '&' '$'|'$''''|' '&'n'''''''' '''''n''''' '''''n''''' ''''''''''''''|'''''$''''' '''''&'''''n'''$''''%''''''''m'r'h't'a'm'' '&' '$'|'$''''$' '&'n''' '$''''''''''''''}'m'e'5'.'0'{'e'c'a'p's'v'''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''L'A'V'{'m'r'h't'a'''''m'''''''' '''''n'''''i'''''''''''''''' '''''''''''''''''v'''''''''''''''''$''''''''''''''''' '''''''''''''''''&''''''''''''' '''''$''''')'''''v''''''''''''''''r'h't'a'm''$'''''''''''''''''''''''''''''''''''''('}'r'e't'f'A't'r'e's'n'i'{'f's't'x'e't'''''''a'm''.'R'P'X'E' '&' '$'|'$' '&'n'''''''''''''''''''$'$'''''''''|''''''''''''''''''''''''5'.'0''''''''''''''''''''''''t'x'e't''''''''''''''''''''''''''''''''''''''''m'''''e'''''''''''}'t'p'0'1'{'e'c'a'p's'v'''' '}'d'l'e'i'y'{'f's'h't'a'm'' '&' '' '&''$'|'$' '&''''''' ''''''''''''''''''''''''m'r''''''''''''''''''' '}'y'e'K'l'e'd'{'f's't'x'e'''''''''''''''''''''' '}'m'e'l'E'm'r'''5'.'0''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'m'e'5'.'';''''';''0'{'e'c'a'p's'v''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''$'''''''''''''''''''''''''''''''$'}'g'n'i'r't'S'{'m'r'h't'a'm'' 'p'u'c'' '}'N'{'''b'b'h't'a'm'' '&' '=':':' '&' 'L'A'V'n'$'}'s't'o'd'' ','2'_'x' ','1'_'x'{'$' '&' '=':':' '&' 'R'A'V'n'''}'m'e'1'{'e'c'a'p's'v'' '$'}'R'A'V'{'m'r'h't'a'm'' 'n'i'' 'x'$' '&' '$'x'$' '&' '$'|'$' '&'n''' ''''''''''''l'e'd'{'f's't'x'e't''.'R'P'X'E' '&' '$'|'$' '&'n't''.'R'P'X'E' '&' '$'|'$' '&'n''^'n''''''''''''''''''''''''''''''''''''''''''''''''''' '&'''''''''''''''''''t'x'e''' '&'t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'}'s'e'u'l'a'v'{'f's't'x'e't''''''.'R'P'X'E' '$'|'$' '&'n''' '}'t'x'e'n'{'f's't'x'e't''.'R'P'X'E' '$'|'$' '&'n''' '$'}'L'A'V'{'''' 'm'r'h't'a'm'' 'n'i'' '}'y'e'k'{'t'i'h't'a'm''$''''''''' '&' ')'}'y'e'k'{'t'i't'x'e't''''''''''''''''''''''('}'t'e'g'{'f's'h't'a'm''.'R'P'X'E' '$'|'$' '&'n''' '}'c'o'd'{'f's't'x'e't'' '&' '=':':' '&' 'R'P'X'E'n''' 'D'M'C' ';'D'M'C' '&' '$'|'$' '&''''^'n''''''{'m''''''' '$'}''r'h't'a'm'''''L'A'V' 'n'i'' 'v'$' '&' '$'v'$' '=' 'R'P'X'E' '&' '|' '&'n''' '''''''''''''$'}'R'A'V'{'m'r'h't'a'm'' 'n'i'' 'x'$' '&' 'R'P'X'E' '=' '$'x'$' '}'t'e'l'{'f's't'x'e't'''''''a'm'''''l' '&' '=':':' '&' 'D'M'C'n'''''''''''''''}'r'a'l'u'b'a't'{'d'n'e''n'}'r'a'l'u'b'a't'{'n'i'g'e'b''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'x'a't'n'y's'-'l'a'c'o'l':'g'i'f'{'l'e'b'a'l''}'t'n'e'm'u'c'o'd' 'a' 'g'n'i'y'f'i'd'o'm' 'd'n'a' 'g'n'i'y'r'e'u'q''''''''''''''''''''''''' 'y'l'l'a'c'o'l' 'r'o'f' 'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'f'o' 'x'a't'n'y'S'{'n'o'i't'p'a'c''n''''''''''''''}'e'r'u'g'i'f'{'d'n'e''n'}'e'r'u'g'i'f'{'n'i'g'e'b''n'n' '.'s'r'e'e'p' 'r'e'h't'o' 'o't' 'g'n'i't's'a'c'd'a'o'r'b' 'r'o'f' 'd'e'u'e'u'q'n'e' 'o's'l'a' 'd'n'a' ','''' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'y'p'o'c' 'l'a'c'o'l' 'e'h't' 'o't' 'd'e'i'l'p'p'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'e's'o'h'T' '.'n'o'i't'a't'u'm' 'e'h't' 'g'n'i'b'i'r'c's'e'd' '}'s'n'o'i't'a'r'e'p'o'{'h'p'm'e'' 'g'n'i'c'u'd'o'r'p' 'f'o' 't'c'e'f'f'e' 'e'h't' 's'a'h' 't'n'e'm'u'c'o'd' 'e'h't' 'g'n'i'y'f'i'd'o'm''''''''''r'e'p' 't'u'b' ','s't'c'e'f'f'e'-'e'd'i's' 'o'n' 's'a'h' 's'e'i'r'e'u'q' 'y'l'n'o'-'d'a'e'r''''''''''''''''''''''''' 's'e'i'r'e'u'q' 'g'n'i'm'r'o'f'r'e'P' '.'d'e'i'f'i'd'o'm' 'd'n'a' 'd'e'i'r'e'u'q' 'e'b' 'o't' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'y'p'o'c' 's'''r'e'e'p' 't'a'h't' 'f'o' 'e't'a't's' 'l'a'c'o'l' 'e'h't' 's'w'o'l'l'a' 'h'c'i'h'w' 'd'n'a' ','s'r'e'e'p' 'e'h't' 'f'o' 'y'n'a' 't'a'''''''''''''''''''''''''o' 'e'n'o' 'n'o' 'y'l'l'a'c'o'l' 'd'e't'u'c'e'x'e' 's'i' 't'a'h't' 'e'g'a'u'g'n'a'l' 'd'n'a'm'm'o'c' 'e'l'p'm'i's' 'a' 'e'n'i'f'e'd' 'e'w' ','y'l't's'r'i'F' '.'s'w'o'''''''0'w'l'l'o'f' 's'a' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'e'l'b'a't'i'd'e' 'y'l'e'v'i't'a'r'o'b'a'l'l'o'c' 'r'o'f' 's'c'i't'n'a'm'e's' 'e'h't' 'g'n'i'n'i'f'e'd' 't'u'o'b'a' 'o'g' 'e'W'n'n'''''''''''''''''''''''''''''''''''n'}'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L'{'n'o'i't'c'e's'b'u's''n'E'D' 'n'i' 'o's'l'a'(' 'a'e'l'e'u'Q' 's'''C'K' 't'a' 'k'o'o'L' '%'n'%'n'a's'u'i'n'e'i'B' '&' 'r'e'l'l'e'Z' '%'n')'4' 'm'e'r'o'e'h't' ','3'1'-'8' 's'a'm'm'e'l'(' 't'r'o'p'e'r' 'h'c'e't' 's'''l'a' 't'e' 'h'o'R' '%'n't'd'r'a'h'k'c'r'u'B' 'n'a'i't's'a'b'e'S' 'y'b' 's'r'e'p'a'p' 's'u'o'i'r'a'v' '%'n'6'1'0'2' 'L'P'O'P' ','''h'g'u'o'n'e' 'g'n'o'r't's' 'm'''I' 'e's'u'a'c''' ','l'a' 't'e' 'n'a'm's't'o'G' '%'n':'r'a'l'i'm'i's' 'r'o' 's'T'D'R'C' 'f'o' 'n'o'i't'a'c'i'f'i'r'e'v' 'l'a'm'r'o'f' 'n'o' 's'r'e'p'a'p' 'O'D'O'T' '%''n'n''''''''''''''}'d'a'u'q''w'o'r'r'a't'h'g'i'r'g'n'o'L''d'a'u'q''{'}'o't'l'a'v'e''{'d'n'a'm'm'o'c'w'e'n''n'n'i'h't'i'w' ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'e's'i'm'e'r'p''{' 'l'l'a' ''}'r'o'f' 'e'd'o'm' 'h't'a'm' 'e's'u' ','e'g'a'k'c'a'p' 'c'i't'n'a'm'e's' 'r'o'F' '%''''''' '$'n''''''''''''''''''''''''''''''''''''''n'}'$' '1'#' '$'{']'1'['}'e't'a'i'd'e'r'p''{'d'n'a'm'm'o'c'w'e'n'e'r''n'a'm's'm'a'{'e'g'a'k'c'a'p'e's'u''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'm'a't's'-'e'm'i't' ''''''''''''''''''''''''''''''''''''''''''''l''' 'r'e't'c'a'r'a'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''7''''8'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'n'%'}' ' 'n'm'e'7'0'.'n'r'e'k''''' ' ' ' ' 'n'x'e'3'.'t'h'g'i'e'h' 'e'l'u'r'v'' ' ' ' 'n'l'l'i'f'e'l'u'r'h'' ' ' ' 'n'x'e'3'.'t'h'g'i'e'h' 'e'l'u'r'v'' ' ' ' 'n'm'e'7'0'.'n''''''''''.'0'n'r'e'k'' ' ' ' 'n'%'{']'m'e'5'.'0'['x''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p''''''''''p'''''''''''''''''''''''''''''''''''''r'e'e'p''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''r'e'e'p'''''''''''''''d'n'a' ','e'd'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'm'a't's'''''''''''''''''''n'o'i't'a'r'e'p'o' 't'a'h't'''n'n''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'<'$' '''''''''''''''''''''''''''''''''''''''''''''''''''''';'''''' ''''' '''''''''';'';''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'i'''''''''''''''''''1'o't' 'g'n'i'd'r'o'c'c'a' '''''''e'''''''''$'<'$' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'c'i't's'i'n'i'm'r'e't'e'd' 't'u'b' 'y'r'a'r't'i'b'r'a' 's'i' 'g'n'i'r'e'd'r'o' 's'i'h't' ','t'n'e'r'r'u'c'n'o'c' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'o'w't' 'f'I' '.')'p'm'a't'e's'e'm'i't' 'r'e'w'o'l' 'a' '''''''''''''''''''')'}'r't'c'{'f'''''s'''''h'''''t'''''a'''''m''''''''('''p'_'A' '=' ''''''''''''''''''','''''''''''''''''''''''''''}'''''x'''''a'''''m'''''{'''''t',''''''''i'''''h'''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''.'''p' 's't's'i'x'e'' '' 'd'i'm'' 'c'a'm''''''''','''''''''}'f'l'e's'{'t'i'h't'a'm''_'''_''s''''''''''''''''''}''{''')'('}'x'a'm'{'m'r'h't'a'm'' ''''''a'''''h''''' '''''n'''''o'''''i'''''t'''''a'''''r'e'p'o' 'r'e'i'''~''l'r'a'e' 'e'h't'(' 'y't'i'l'a's'u'a'c' ',''''h't'i'w' 't'n'e't's'i's'n'o'c' 's'i' 'g'n'i'r'e'd'r'o' 's'i'h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''''''''''''''''''''''''n'g'n'i'''' ''p'_'',''''=' 'c''r'e't'''n'''''e'''c''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'_''''''''}'$'}')'('D'I'r'e''p'_''e'P'y'm'{'m'''i'B''''r'h't'';'''',''''''''D'I'w'e',''''n'''a'''''m''''' '=' 'p'$'{'C'm'o'i'''''''''''''''''}'d'i'{'t'i'h't'a'm''_''l'l'i'f'h'''x'A''n'''''''p'_''''''''''''''''''''%'%'n''''''''''''''''p'_'''''''''''''''''o'''''''''''l'l'e'h'n'n''''''1'+''''''''''''''' '''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f'o'o'r'p'''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b'''''''''''''''''''''',''''''''''''''''''''''''''''''''' ' ' 'n'''''''''''''''','''''''','''''''''''''''''''',''''''''''',''''',''';'''''''';''''''''''''''''''''''''''''e'u'e'u'q'''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''' '',''' ' 'n''''''''''''''''''','''''''''','''''''''''''''''''''';'''''''';'''''p'o''''''' ',''''e'''d'''''o'''''m'''''',''''''''''''}'e'u'e'u'q'{'t'i'h't'a'm''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'')'}'p'o'{'t'i'h't'a'm'' ',')'}'s'','''p'o'{'f's'h't'a'm''('''p'_'A'('{''',''''''''{'P'' ',''p'u'''c'','' ')'}'e'u'e'u'q'{'f's'h't'a'''''''''{'''''}'e'u'e'u''t'i'''''''f's'h't'a'm'''q'''m'''',''''''''('''''''''''p'''''_''','''''''''''''''''''''A''''' '''''='''''',''' '''''q''''''''''''''''''''''''''''''''''''''''''''''''''''''''v'''''''''''''''''''''''''''''''''''''''''''''''''''''e''''''''''''',''''''''''''''''''''''v'''''''''''''''''a''''''''''''''''',''''e'''''''''''l'''''t'n'u'o'm'A'''''''''''''''''''''''''''''''''''''''''''''}'$'''''p'_'A' 'o't'l'a'v'e'' '}'p'o'{'','''t'i'h't'a'm'' ''''''''''''','''''''('}'y'l'p'p')''a'{'f's'h't'a'm''',''''''n';'','''''',''''''''''''''''g'n'i'y'l'p'p'a' 'd'n'a' ',''''''p''p'o''''''_'''A'$'{'C'm'o'i'''''''''''''''''''''''''''''''$'''','''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'}'d'i'{'t'i'h't'a'm'' ';','''''''' ','''''p'_'A' 'o't'l'a'v'e'' ''''''''('}'d'm'C't's'i'l''''a'{'f's'h't'a'm'' ';'','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B''n'}'}'t's'i'L'-'c'o'l'l'A'{'c's't'x'e't''{'l'e'b'a'L't'f'''''''e'v'e'L''n'}'$'''''p'_'A' 'o't'l'a'v'e'' ')')'}'d'i'{'t'i'h't'a'm''('}''''''p'O't's'i'l'{'f's'h't'a'm''('}'y'l'p'p'a'{'f's'h't'a'm'' ';'','''p'_'A'$'{'C'm'o'i'x'A''''n'}'$'}'d'i'{'t'i'h't'a'','''m'' ';'','''p'_'A' 'o't'l'a'v'e'' '}'D'I'w'e'n'{'f's'h't'a'm'';'','p'_'A'{'C'm'o'i'x'A''n''''''''''','''''''''''n'}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n''x'A''n''p'i'k'S'f'o''''''''''''''''''''''''''''i'B''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('}'s't'{'f''''''''''''''''}'$'''p'_'A' 'o't'l'a'v'e'' ')','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ''''''''''''''''''',''''''''''''''''''''''''''''''''''',''''''''''''''''']','')'}'l'i'a't'{'f's'h't'a'm'' ','t'o'b''('}'l'E't's'i'l'{'f's'h't'a'm'' ','''''o't's'p'a'm'' '}'d'i'{'t'i'h't'a'm'',''[''' 'n'''''p'_'A' 'o't'l'a'v'e'' ')'}'d'i'{'t'i',''''h't'a''''''''''''''''''''''''''''''',''''','''''''''''''''''''''''''''''''''''}'l'i'a't''''''n'n''{'','''f's'h't'a'm'' '=' '}'t'x'e'n'{'t'i'h't'a'm'' 'e'e'v'' ''''''''''''''''''''''''''''''''''''''''''''''''''''a't'{'f's'h't'a'm'' '=' '}'t'x'e'n'{'t'i'h't'a'm''m''('}'p'O't's'i'l'{'f's'h't'a'm'' ';'','p'_'A'''}'$'$'{'C'f'n'I'y'r'a'n'i'B''n's'h't'a'm'' ';'','p'_'A''''''''''''}'d'i'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'}'$')''''}'p'_'A'('}'m'o'd'{'m'r'h't'a'm'' 'n'i''t'o'n'' '}'d'i'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''''''''''''''''''}'}'t's'i'L'-'y'l'p'p'A'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'''''''''','''''''',''''''''''''''''''''''','''''''''','''''''''''''p'O''''''''''''''''''''''''''''''''''''''''''''''''''''''',''';'''',''''';''''''''''''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';''''';'''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'$']',''}''}'p'o'{'t'i'h't'a'm''{'' '''''''p'u'c'' ')'}'s'p'o'{'f's'h't'a'm''('''p'_'A'' 'o't's'p'a'm''''p'O' '}'s'p'o'{'f's'h't'a'm'' ' ' ' 'n';''''''',''',''}'')'','''}'p'o'{'t'i'h't'a'm'' '',''',','''')'}'s'p'o'{'f's'h't'a'm''('''p'_'A'(''''' ' ' 'n'{'' 'p'u'c'' ')'}'e'u'e'u'q'{'f's'h't'a'm''('''p'';''''';''''''';''''_'A' 'o't's'p'a'm'' '}'e'u'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''''p'_'A' 'o't'l'a'v'e'' ')')'v' ','}'v'e'r'p'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'''''''''''''''''''''''''}'''''$'''''}'''''d'''''i'''''''p'O'{'''''t'''''i'''''h'''''t'''''a'''''m'''''''' ''''';'''''''','''''''''''''''''p'''''_'''''A''''' ''''''''t'''''r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''''p'_'A' 'o't'l'a'v'e'' ')')'}'t'e'g'r'a't'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'''''''',''''''''t'o'b'' ';''''''}'''''$'''''''''''''''''p'''''_'''''A''''''p'O'' '''''e'''''t'''''e'''''l'''''e'''''d'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''('''''}'''''y'''''l'''''p'''p'O'''''p'''''a'''''{'''''f's'h't'a'm'' ';'','''p'_'A'$'{'C'm'o'i'x'A''n'''''e'''''s'''''n'''''i'''''{'''r'T'''''''f'''s'h't'a'm''('}'y'l'p'p'a'{'f's'h't'a'm'' ';'','''p'_'A'$'{'C'm'o'i'x'A''n''u'q'{'f's'h't'a'm'' ''''' ''''''i'r'T''''''' ''''' '''''n''''',''''''''[''''''''p'O'd'm'C''''''''''''''''l'a'c'o'L''''''''''d'm'C'''''''''''''''''''''''''''''''''','''''''''''p'''''_'''''A''''' '''''o'''''t'''''''''''l'''''''''''''''''a'''''i'B'''''''''''''''''''''''''''v'''''''''''''''''e'''''''''''''''''''''''''' '''''''''''''''''}''''''''''''''''''''''''''''''''''''''''''''''''d'm'C'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$')'}'t'e'g'r'a't'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'e't'e'l'e'd'{'f's'h't'a'm'' ';'','''p'_'A' ' ' ' 'n'o't'l'a'v'e'' ')'}'t'e'g'r'a't'{'t'i'h't'a'm''('}'l'a'c'o'L'e't'e'l'e'd'{'f's'h't'a'm'' ';'','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B''n'}'}'e't'e'l'e'D'{'c's''''''t'x'e'T''{'l'e'b'a'L't'f'e'L''n'}'$'}'d'i'{'t'i'h't'a'm'' ';'','''p'_'A' 'o't'l'a'v'e'' '}'D'I'w'e'n'{'f's'h't'a'm'' ';'','p'_'A''',''$'{''',''C'm'o'i'x'A''n'}'$')'p'_'A'('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' '}''',''t'e''',''g'r'a't'{'t'i'h't'a'm''$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'''d'''''''''''''''''''''''''m'''''''''''''''''c'''''''''''''''''{'''''''''''''''''''''''''t'''''''''''''''''i'''''''''''''''''h'''''''''''''''''t'''''''''''''''''a'''''''''''''''''''''''''m'''''''''''''''''''''''''' ''''''''''''''''''''''''';'''''''''''''''','''''p'''''_'''''A'''''$'''''{'''''''''''''C'''''f'''''n'''''I'''''y'''''r'''''a'''''''''''''n'''''U''''''''n'''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'}'$')'v' ','}'v'e'r'p'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''''''''''('}'t'r'e's'n'i'{'f's'h't'a'm'' ';'',''''''''''''}'''''l'''''a'''''c'''''o'''''L'''''-'''''y'''''l'''''p'''''p'''''A'''''{'''''c'''''s'''''t'''''x'''''e'''''t''''''''{'''''''''''''l'''''e'''''b'''''a'''''L'''''t'''''f'''''e'''''L''''''''n'''''}'''''''''''''$'''''}'''''p'''''o'''''{'''''t'''''i'''''h'''''t'''''a'''''''''''''m'''''''' ''''';'''''''','''''''''''''''''''p'''''_'''''A''''' '''''o'''''t'''''l'''''a'''''v'''''e'''''''' '''''}'''''d'''''''''''''m'''''c'''''{'''''t'''''i'''''h'''''t'''''a'''''m'''''''' ''''';'''''''','''''p'''''_'''''A'''''$'''''{'''''C'''''m'''''o'''''i'''''x'''''A''''''''n'''''}'''''e'''''e'''''r'''''t'''''f'''''o'''''o'''''r'''''p'''''{'''''n'''''i'''''g'''''e'''''b''''''''n'''''n'''''o'''''r'''''p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e't'o'm'e'R'-'''''''R'-''''''''''''''''''''''''''''''''''''''''''''''}'''''e'''''e'''''r'''''t'''''f'''''o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''}'}'l'a'c'o'L'-'y'l'p'p'A'{'c's't'x'e't''{''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$']',''}''}'p'o'{'t'i'h't'a'm''{'' 'p'u'c'' ')'}'s'p'o'{'f's'h't'a'm''('''p'_'A' 'o't's'p'a'm'' '}'s'p'o'{'f's'h't'a'm'' ' ' ' 'n';'','}'')'}'p'o'{'t'i'h't'a'm'' ',')'}'s'p'o'{'f's'h't'a'm''('''p'_'A'('{'' 'p'u'c'' ')'}'e'u'e'u'q'{'f's'h't'a'm''('''p'_'A''''' 'o't's'p'a'm'' '}'e'u'e'u'q'{'f's'h't'a'm'' ' ' ' 'n''''''''''l'e'b'a'L't'f'e'L''n'}''U'''''$'}'p'o'{'t'i'h't'''a'm'';'','''p'_'A' 'o't'l'a'v'e'' '}'d'm'c'{'t'i'h't'a'm'' ';'','p'_'A'$'{'C'm'o'i'x'A''n'''''''''''''''''''''''''''''''''''''''''''''''''',''[''''''''''''' ';'','''p'_'A' 'o't'l'a'v'e'' '}'d'm'c'{'t'i'h't'a'm'' ''''''''''';'','p'_'A'$'{'C'f'n'I'y'r'a'n'i'B''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n''''''''''''''''''''''m'''''e'''''''''''''''''''''''''''''''''''}'''''t'''''p'''''0'''''3'''''{'''''e'''''c'''''a'''''p'''''s'''''h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'p'_'A' 'o't'l'a'v'e'' '}'d'l'e'i'y'{'f's'h't'a'm'' ';'','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'P'O'N'-'d'l'e'i'Y'{''''''c's't'x'e'T''{'l'e'b'a'L't'f'e'L''n'}'{'C'm'o'i'x'A''n'''''''''''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f'o'o'r'p''f'o'o'r'P'y'a'l'p's'i'D''n'%'n'''''f'o'o'r'P'y'a'l'p's'i'D'''o'''''r''''''''''''''''''''''''''''''''''''''''''''''''''''}''}'p'o'{'t'i'h't'a'm''{'' 'p'u'c'' ')'}''''''''''' '}'s'p'o'{'f's'h't'a'm''('''''p'_'A' 'o't's'p'a'm'' '''p'''''{''''''''''''''P'''''n'i'g'e'b''n''''e'e'r't'f'o'o'r'p'{'d'n'e''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$')'p'_'A'('}'m'o'd'{'m'r'h't'a'm'' 'n'i'' '}'v'e'r'p'{'t'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'_'A' 'o't'l'a'v'e'' '}'p'o''''''r'e't'a'u'Q''''''{'''t'i'h't'a'm'' ','''p'_'A'''}'$'$'{'C'm'o'i''''c'x'A''n'}'$')'v''''''e'u'e'u'q''' ''''',''''''''''e'u'e'u'q'''}'''''''''''v'''e'r'p'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'''''''''''''''''''''}'s'p'o'{'f's'h't'a'm'' ' ' ' 'n';'','m'' '=' '}'p'o'{'t'i'h't'a'm''''''''''''''''''''''';'','''p'_'A'$'{'C'm'o'i'x'A''n''h't'a'm'''''A'$'{'C'm''''' ' ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ',')'}'s'p')''o'{'f's''''''''''{'t'i'h't'a'm''('''''p'_'A'(''''''''''''''''''''']',''}''}'p'o'{'t'i'h't'a'm''{'' 'p'u'c'' ')'}'s'p'O'w'e'n'{'f's'h't'a'm''('''''p'_'A' 'o't's'p'a'm'' '}'s'p'O'w'e'n'{'f's'''''''t'i'h't'a'm'',''['' 'n''''o'i'x'A''n'''''''''''''''''' '''''''''''''''''''''''''''''''''''v''''''''''''''''}'$'''''p'_'A' 'o't'l'a'v'e'' '' ',''''''t''''''''}'d'i'{'d'i'h't'a'm'' ';'''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'}'v'e'r'p'{'t'i'h't'a'm''('}'l'a'c'o'L't'r'e's'n'i'{'f's'h't'a'm'' ';'','p'_'A'$'{'C'f'n'I'y'r'a'n'i'r'T''n'','''p'_'A' 'o't'l'a'v'e'' '''}'D'I'w'e'n'{'f's'h't'a'm'';''''';','p'_'A'''}'$'$'{'C'm'o'i'x'A''n''''''''''''''''''''''''''''''''n'}'}'t'r'e's'n'I'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n''''''''''''''''''n'}'e'e'r't'f'o'o'r'p''''P'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{''}'t'i'h't'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}''''''''''''''''}'*'e'r'u'g'i'f'{'n'i'g'e'b''n''*'e'r'u'g'i'f'{'d'n'e''n'}'v'c'e'r'-'d'n'e's':'g'i'f'{'l'e'b'a'l''n'}'s'n'o'i't'a'r'e'p'o' 'g'n'i'v'i'e'c'e'r' 'd'n'a' 'g'n'i''''''''''n'i'c'd'n'e's' ','s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L'''''''''''''''''''i't'n'i'a'm' 'r'o'f' 's'e'l'u'R'{'n'o'i't'p'a'c''n'''''}'$']',''}''p'o'{'' 'p'u'c'' ')'}'s'p'o'{'f's'h't'a'm''('''p'_'A' 'o't's'p'a'm'' '}'s'p'o'{'f's'h't'a'm'',''['''p'_'A' 'o't'l'a'v'e'' '}'d'l'e'i'y'{'f's'h't'a'm'' ';'','p'_'A'$'{'C'f'n'I'y'r'a'n'i'r'''''''''''''''''''y'r'a'n'r'e'T''n'}'}'y'l'p'p'A'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'''p'_'A' 'o't'l'a'v'e'' '}'p'o'{'t'i'h't'a'm'' ','p'_'A'$'{'C'm'o'i'x'A''n'}'$')'}'s'p'o'{'f's'h't'a'm''('p'_'A' 'q'e't'e's'b'u's'' '}'s'p'e'd'{'t'i'h't'a'm''''' '$'{'C'm'o'i'x'A''n'}'$')'}'v'c'e'r'{'f's'h't'a'm''('p'_'A' 'n'i'' ')'}'p'o'''''''p'i'{'t'i'h't'a'm'' ','}'s'p'e'd'{'t'i''''''''''{'f's'h't'a'm''('$'{'C'm'o'i'x'A''n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e'''''''''''''''''''''%'''''n'''''l'''''l'''''i'''''f'''''h''''''''f'''''o'''''o'''''r'P'y'a'l'p's'i'D''n'}'$']','')'}'s'p'O'w'e'n'{'f's'h't'a'm''('p'_'A' 'p'u'c'' ')'}'d'n'e's'{'f's'h't'a'm''('p'_'A' 'o't's'p'a'm'' '}'d'n'e's'{'f's'h't'a'm''''''''''''''f'o'o'r'P'y'a'l'p's'i'D''',''['p'_'A' 'o't'l'a'v'e'' '}'d'l'e'i'y'{'f's'h't'a'm'' ';'','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'d'n'e'S'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'{'C'm'o'i'x'A''n''''e'd'o'm'v'e'v'a'e'l'' 't'n'u'o'm'A'p'i'k'S'f'o'o'r'p'''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'''''''''''''''''''''''''''''''''''''''''''''''''''t'n'u'o'm'A'p'i'k'S'f'o'o'r'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e'''''''''''''''''''''''''''''''''''''f'o'o'r'P'y'a'l'p's'i'D''n'}'$']','')'}'d'n'e's'{'f's'h't'a'm''('q'_'A' 'p'u'c'' ')'}'v'c'e'r'{'f's'h't'a'm''('p'_'A' 'o't's'p'a'm'' '}'v'c'e'r'{'f's'h't'a'm'',''''','['p'_'A' 'o't'l'a'v'e'' '}''''|'d'l'e'i'y'{'f's'h't'a'm'' ';'','p'_'A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'v'c'e'R'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L''n'}'$'}'s'r'e'e'p'{'t'i'h't'a'm'' 'n'i'' 'q'$'{'C'm'o'i'x'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b'''''''''''''''''''''''''''''''''''''''''n'''n'n'''''f'''''o'''''o'''''p'_'''r'''P'y'a'l'''p'_'p's'i'D'''''n'n'}'$')'p'''''';'''''''''''''''}'v'e'r'p'{'t'i'h't'a'm''''''''''''' ''''','c'(';'',']',''1'+'c' 'o't's'p'a'''p'_'m'' '}'r't'c'{'f's'h't''''''''''''''p'_''''''''''''n'd'l'r'o'w'n'''''''''''''''''''''''''''''''''''''''''''p'_''''''f'o'o'r'P'y'a'l'p's'i'D''''''''''''''''''''''''''''''''''p'_'''''''''''''''''''''''''a'm'',''['A' 'o''''''''''''''}'v'e'r'p'{'t'i'h't'a'm''''']'''t'l'a'v'e'' '}'D'I'w'e'n'{'f's'''''''F'S'h't'a'm'' ','A'$'{'C'f'n'I'y'r'a'n'U''n'}'}'S'T'-'n'e'G''';''''p'_'{'c's't'x'e't''{'l'e'b'a'L't'f'e'''''''''''''}'v'e'r'p'{'t'i'h't'a'm'''''L''n'}'$'c' '=' ')'}'r't'c'{'f's'h't'a'm''('A'$'''p'_'{'C'm'o'i'x'A''n''';''''''''''''''''''''''''''''''''''$'''''''p'_'''''''''''''''''}'$')'p' ','c'(' '=' ''d'i'{'t'i'h't'a''p'_''m'''}'{'C'm'o'i'x'A'' ' ' ' 'n'''''''''''''''''''''''''''p'_''''''''''''''''''''''''n'''e''u'o''''''''''''''''''p'_'''''''''''''''''''''''n'''e''u'o''' ' ' ' ' ' ' ' 'n''''''''''''''''p'_'''''''''''''''''''''''''''''']',''''p'_')'c' ',')'}'r't'c'{'f's'h't'a'm''('A'('}'x'a'm'''''''''p'_'''''''';''''''''''''{'m'r'h't'a'm'' 'o't's'p'a'm'' '}'r't'c'{'f''p'_''s'''''''t'i'h't'a'm'',''['A' 'o't'l'a'v'e'''''''''''''''''''''''';''''''''''''''''''''''''''''''''''}'$'''A' 'o't'l'a'v'e'' ')'}'d'i'{'t'i'h't'a'''''''r'e't'a'u'Q'''m''''''('}'s't'{'f's'h't'a'm'' ','A'$'{'C'm'o'i'x'A'' ' ' ' 'n'''''' ')'}'d'i'{'t'';'''i'h't'a'm''('}'s't'{'f's'h't'a'm'' ','A'''}'$'$'{'C'f'n'I'y'r'a'n'''''''''''''''''''''''''';'''''''''''''''r'a'N'U'' ' ' ' 'n'}'}'S'T'-'y'l'p'p'A'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L'' ' ' ' 'n''''''''''''''''''n'}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$')'A'('}'m'o'd'{''''('m'r'h't'a'm'' 'n'i''t'o'n'' '}'d'i'{'t'i'h't'a'm''$'{'C'm'o'i'x'A'' ' ' ' 'n'''''''''''''$'{'C'm'o'i'x'A''''''''''''''''''''n'i'g'e'b''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$'''A' 'o't'l'a'v'e'' ')'}'d'i'{'t'i'h't'a'm''('}'s't'{'f's'h't'a'm'' ','A'$'{'C'm'o'i'x'A'' ' ' ' 'n'''''''''''}'l'E''''t's'i'l'{'f's'h't'a'm''''''i'B''''''''n'i'r'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-'y'l'p'p'A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'E't's'i'l'{'f's'h''''''''' ' ' ' ' ' ' ' 'n''''''''''''''''''}'l'E't's'i'l'{'f's'h't'a'm'''t'a'm'''''''$''''t'x'e't''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'E't's'i'l'{'f's'h't'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$''''''''''''''''''''''}']','')'}'t'x'e'n'{'t'i'h'''t'''''a'''''m'''''''' ''''','''''v'''''(''''' '''''o'''''t'''''s'''''p'''''a'''''''''''-'y'l'p'p'A'm'''''' '}'''''''''''''''}'l'E't's'i'l'{'f's'h't'a'm'''d'i'{'t'i'h't'a'm'' ';'',')'}'d'i'{'t'i'h't'a'm'' ','p'_'v'(' 'o't's'p'a'm'' '}'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'E't's'i'l'{'f's'h't'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'$']','')'}'t'x'e'n'{'t'i'h't'a'm'' ','t'o'b''(' 'o't's'p'a'm'' '}'t'e'g'r'a't'{'t'i'h't'a'm'',''['A' ' ' ' ' ' ' ' 'n'''' 'o't'l'a'v'e'' ')'}'t'e'g'r'a't'{'t'i'h't'a'm'' ','}'d'i'{'t''''d'i'h't'a'm''('}'e't'e'l'e'd'{'f's'h't'a'm'''''''m'a'' ','A'$'{'C'f'n'I'y'r'a'n'U'' ' ' ' 'n'}'''''''$'}'l'e'D'-'y'l'p'p'A'{'c's't'x'e't''$'{'l'e'b'a'L't'f'e'L'' ' ' ' 'n'}'$')'}'t'x'e'n'{'t'i'h't'a'm'' ','v'(' '=' ')'}'t'e'g'r'a't'{'t'i'h't'a'm''('A'$'{'C'm'o'i'x'A'' ' ' ' 'n'''''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e''n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'n'e'r'p'{'t'i'h't'a'm'',''['A' ' ' ' ' ' ' ' 'n'''' 'o't'l'a'v'e'' ')'v' ','}'v'e'r'p'{'t'i'h't'''''t'x'e't'''a'''''m'''' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'' ','A'$'{'C'f'n'I'y'r'a'n'i'B'' ' ' ' 'n'}'$'1'_'}'s'n'I'{'c's'h't'a'm''''{'l'e'b'a'L't'f'e'L'' ' ' ' 'n'}'$'}'d'i'{'t'i'h't'a'm'$''''h't'a'''''$'2'_''m'''''''''''''''' '<' '}'t'x'e'n'{'t'i'h't'a'm''$'{'C'm'o'i'x'A'' ' ' ' 'n'}'$')'}'t'x'e'n'{'t'i'h't'a'm'' ','p'_'v'(' '=' ')'}'v'e'r'p'{'t'i'h't'a'm''('A' ';''.'}'t'x'e'n'{'t'i'h't'a'm'' ','p'_'v' 's't's'i'x'e''$'{'C'm'o'i'x'A'' ' ' ' 'n''''''''''''''''''n'}'e'e'r't'f'o'o'r'p'{'d'n'e'''''}'n'}'e'e'r't'f'o'o'r'p'{'n'i'g'e'b''n'''''''''''''''''''}'''''''''''''$'{'C'm'o'i'x'A'' ' ' ' ''''';''.'''''''''''''''''''''''''''''''''''''''e'''''e'''''r'''''t'''''f'''''o'''''o''$''}'''''''''''''$'{'C'm'o'i'x'A'''''''''r'''$''''}'''''''''''''$'{'C'm'o'i'x'A''''''''''''''''''''''''''''''''}'}'t'r'e's'n'I'{'c's't'x'e't''{'l'e'b'a'L't'f'e'L'' ' ' ' 'n'''''p'''''{'n'i'g'e'b'''n'''''''''''''''''''''''''''''''''''''$'''''''''''{'C'f'n'I'y'r'a'n'i'r'T'' ' ' ' '''''''''$''}'''''}'''''''''''''''}'e'e'r't'f'o'o'r'p'{'d'n'e'''''$''''''''''''''''''''''''''''''''''''''''''''''''e'l'u'r'''''''''''''''''''''.'e'u'l'a'v' 'a' 'f'o' 'e'c'n'e's'b'a' 'e'h't' 'g'n'i't'a'c'i'd'n''''''''' ' ' ' 'n''''''i' ','$'t'o'''''''b''$' 'e'u'l'a'v' 'l'a'i'c'e'p's' 'e'h't' 'r'o' ','s't'n'e'm'e'l'e' 't's'i'l' 'f'o' 'e'p'y't'a't'a'd' 'e'h't' 'f'o' 'e'u'l'a'v' 'y'n'a' 's'i' '$'}'e'u'l'a'v'{'t'i'h't'a'm''$' '''''n'n'.'t's'i'l' 'e'h't' 'f'o' 'd''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s't'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}':'{'n'i'b'h't'a'm'' '''''''''';'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o't'l'a'v'e'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''o't'l'a'v'e'' ''''''''''''''''A' '>'='=' ')'v' ','}'t'x'e'n'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h''}'n''t'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'' ','A' ' ' ' 'n'&' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''A' '>'='=' ')'v' ','}'v'e'r'p'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'''''''''''''''''''''''''''''''''''''''''''''''('}'y'l'p'p'a'{'m'r'h't'a'm'' ','A' ' ' ' 'n'{'}'n'}'t'x'e'n'{'t'i'h't'a'm'' '<' '}'d'i'{'t'i'h't'a'm'' '&' ')'}'t'x'e'n'{'t'i'h't'a'm''''n'' ','p'_'v'(' '=' ')'}'v'e'r'p'{'t'i'h't'a'm''('A' '.'}'t'x'e'n'{'t'i'h't'a'm'' ','p'_''''P'v''''''''''''''''''''''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''t'''''n'''''e'''''m'''''e'''''l'''''e''''' '''''t'''''s'''''i'''''l''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''D'''''I''''' '''''e'''''h'''t' 'p'm'a't's'e'm'i't' '''t'''''r'''''o'''''''''''''''''' 's't's'i'x'e'' ' ' ' 'n'{''p'''''m'''''a'''''L''''' '''''t'''''a''''''''''''''''''']'t'r'e's'n'I'''''''''''''''''''t'r'e's'n'i'['e'c'n'e'r'e'f'n'i''n''h't' 'l'l'a'c' 'e'W' ''n'e''''''''''''''''''']'t'r'e's'n'i'['e'l'u'r'r'e'f'n'i''n''m'u'c'o'd' 'e'h't' 'f'o' 'e'm'i't'e'f'i'l' 'e'h't' 'r'o'f' ''.'e'l'b'a't'u'm'm'i' 's'n'i'a'm'e'r' 'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'s'e'l'u'r'-'a'g'r':'g'i'f'{'l'e'b'a'l''n'}'t's'i'l' 'd'e'r'e'd'r'o' 'n'a' 'g'n'i't'a't'u'm' 'r'o'f' 's'e'l'u'R'{'n'o'i''''u't'p'a'c''n'''''''''''''''}'*'e'r'u'g'i'f'{'d'n'e''n'}'*'e'r'u'g'i'f'{'n'i'g'e'b''n'n'c'i'h'w' ','''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'b' 'n'a'c' 't'n'e'm'e'l'e' 't's'i'l' 'a' ','p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'a' 's'a'h' 'n'o'i't'a'r'e'p'o' 'h'c'a'e' 'e'c'n'i'S' '.'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm''$' 'n'a' 'h't'i'w' 'd'e't'a'e'r'c' 's'i' 't'n'e'm'e'l'e' 't's'i'l' 'A''''''''''''''''''''''''' 't'n'e'm'e'l'E''''''''''s'i'L'n'''''''''''''''''''t'n'e'm'e'l'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'''' '''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'e'h't' 'l'l'a'c' 'e'W'''''''''''''''t'n'e'm''''''''''''''''''''''''''''''$')'p' ','c'(' '<' '}'d'a'e'h'{'f's'h't'a'm''$' 'd'n'a' 'e'r'i'u'q'e'r' 'l'a''''''''''''''''a'''''e'''''r'''''c''''''''''''''''''''''''''''''''''''''t'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''h'T' '.'m'e't'i' 'e'h't' 'd'e't'r'e's'n'i' 't'a'h't' 'n'o'i't'a'r'e'p'o' '$'''' '}'t'r'e's'n'i'{'f's'h't'a'm''$''''' 'e'h't' 'f'o' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'e'h't' 'y'b' 'd'e'i'f'i't'n'e'd'i' 'y'l'e'u'q'i'n'u' 's'i' 'm'e't'i' 't's'i'l' 'h'c'a'E''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e't'r'e's'n'i' 'e'r'a' 's'm'e't'i' 't's'i'L'n'n'n'e' 'e'h't' 'g'n'i't'o'n'e'd' ','$'}'l'i'a't'{'f's'h't'a'm''$' 'l'o'b'm'y's' 'e'h't' 'r'o' 'p''' ','A''m'a't's'e'm'i't' 't'r'o'p'm'a'L' 'a' 'r'e'h'' '''.''''''''''''''t'''''i'''''e''''' '''''s'''''i''''' '''''$'''''}'''''t'''''x'''''e'''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&''''''''''''r'''''''''''''''''''''''''''''''''r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r''''''''''''''''''''''''''''''''' '&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r''''''''''''''''''''''''''''''''''''''''''' '&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'n'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'n'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'r'e'd'r'o' 'e'm'a's' 'e'h't' 'y'l''''''''''''''''' '}'''' '.'f'o'o'r'P'{'f'b't'x'e't'''E'''i'''''r'''''a'''''s's'e'c'e'n' 't'o'n' 't'u'b'(' ''''''''''''''''''''''t'u'b' ''''''''''''''''''''''''''''''''''''''''''w' ','e'r'o'e''''f'e'r'e'''h''''''$'p'$' ''T' '.'''''m'o'r'''''f'''''''''''''''''''''''''''''d'e'''''t'a'h','''''''''' 'd'e's's'e'c'o'r'p'''''''t'''''''''''p'_'H''''''''''''i'''''''''''''''''''''''''''''''''''''l'''''''''''p'''''p'''''a''''' '''''$'''''n'''''_'o' 's't'o'd'' '1'_'o'='p'_'H'$'''''''''.'''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''' '''''b'''''n'''''e'''''h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'$' ')'n'_'o' ',')'}'1'-'n'{'_'o' ','s't'o'd'' ',')'1'_'o' ','t'e's'y't'p'm'e''_'A'('}'y'l'p'p'a'{'m'r'h't'a'm'' 's't'o'd''('}'y'l'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d''' 'f'o' 'y't'i'v'i't'a't'u'm'm'o'C'''''''''''n'}'n'o'i't'e'l'e'D'{'n'o'i't'c'e's'b'u's'b'u's''n''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's'i'x'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''y'l'n'o' 's'e'i''''''$''''')'''''',''''''''''''''''''''s'e'v'a'e'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','t''''s'u'h'T' '.'$')'}'d'i'{'t'i'h't'a'm''('}'e't'e'l'e'd'{'f's'h't'a'm''$' 'o't' 'r'o'i'r'p' 'r'u'c'c'o' 'y'l'n'o' 'n'a'c' 'n'o'i't'a'r'e'p'o' '$')'r'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'i'''''''''''''''''''''''''e'r'o'n'g'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'i''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e't'r'e's'n'i' 's'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'e'l' ','d'e't'a'r'e'n'''$'p'$''''''e'''''g''''' '''''s'''''a'''''w''''' '''''$'''''}'''''1'''''+'''''$'p'$''''''''''''n'''''''''''''''''{'''''''''''_'''''o''''''''''''''{'''''$''''' '''''h'c'i'h'w' 'n'o' 'r'e'e'p' 'e'h't' 'y'b' '$'p'$' ''''''p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'o'f'e'b''''''''''''''''''''''''''''''''''''''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''';''''&''' '&'''&''*'''n'g'i'l'a'{'n'i'g'e'b''n'''''''''''''''p'_''''''''''''''''''''''''''''''''t'i'''''''''''''}'v'e'r'p'{''''''''''{''''''d'a'u'q''''''t'''''x'''''''''&'''' '&''d'''a'u'q''}''''e't''&'''''m'''r''''&'h't'a'm''''''''''''''''''''' '&''''''''n''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('q'_'A''''''')'''''''''$'''''''''''''''''''''''''''''$'}'l'i'a't'{'f's'h't'a'm'' '=' '}'t'x'e'n'{'t'i'h'''t'a'm'' 'r'o' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','r''''''''''''''''''''''''''''''''''''''''''''''''f'o' 's'g'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'b' 'd'e'i'f'i't'n'e'''''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'a'h't' 'w'o'n'k' 'o's'l'a' 'e'w' ','e'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's't'n'e'm'e'l'e' 't's'i'l'''''''''''''''''''''y'd'a'e'r'l'a' 'e'r'e'w'''''''''''''''y'r'o't's'i'h' 'e'h'''''t''''' '''''n'''''i''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''s'e'i'r''''''''''''''''''e'm'a's' ''''''h't' 'n'i' 't'l'u's'e'r''''''o''''''''''''''''''''''''''''''$'c'_'H'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h'T' '.'''t'''''''''''''s'''''i'''h'-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'''e'h't''''''o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'''''''''''''''''''''''','m'_'}'d'i'{''''''''''''''''''','}'1'+'m'{'_'}'d'i'{'t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'}'1'+'n'{'_'o'$' 'f'o' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'e'h't' 's'i' '$'}'d'i'{'t'i'h't'a'm''$' 'e'r'e'h'w' ',''i'h't'a'm'' ''t'i'h't'a'm'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'i'c'i'f'f'u's'''''''''''''''''''''''''''''''''''''''''''''r'e'd'r'o' 'l'''''''''''''''''' 's'i'h'T' ''a'n'i'f' 'e'h't' 'n'i' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'d'i'{'t'i'h't'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''{'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'B' '.'e'm'a's' 'e'h't' 's'i' '$'}'1'+'n'{'_'o'$' '''''''''''''t'e's' 'e'h't' ''''T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'i'a't'n'o'c'''''''''''''''''''''''''''''''''''''''''''''{'''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i'''f'o' ''t's'i's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'u'o'i'v'b'o' 'e'b' 't'o'n' 't'h'g'i'm' 't'i' ','')'a'm'm'e'l' 'a' 'n'i' 's'i'h't' 'e'v'o'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e'd'r'o' 's''''''$'i'_'o'$' ''''i'h's''t' 'n''''''''''''''''''''''''''''''''''''''''''''''s't'i' ''''''''''''''''''''s''''''''''''''''''''''''''s't'i''''''''''''''''''''''''''''''''''''''''''''''s''''''''''''''''''''''''''''''''''''s't'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''.'d'e'i'l'p'p'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'h'c'i'h'w' 'n'i' ''''''''''''' 'f'o' 'r'e'd'r'o' 'e'h't' 'f'o' 's's'e'l'd'r'a'g'e'r' ','$'}'1'+'n'{'_'o'$' 'r'e't'f'a' 's'r'a'e'p'p'a' 'o's'l'a' '$'i'_'o'$' ','r'e'd'r'o' 'l'a'n'i'f' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o'$' 'r'e't'f'a' 's'r'a'e'p'p'a' 't'n'e'm'e'l'e' 'e'c'n'e'r'e'f'e'r' 'e'h't' 'f'I'''''''''' 'f'i' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o'f' 't''''''''' 'n'i'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'f'o'o'r'p' 'e'h't' 's'u'h't' 'd'n'a' ','p'e't's' 'n'o'i't'c'u'd'n'i' 'e'h't' 's'e't'e'l'p'm'o'c' 't'a'h'T' '.'k'o' 's'i' 'h'c'a'o'r'p'p'a' 'l'a'r'e'n'e'g' 'e'h't' 'k'n'i'h't' 'I' 't'u'B' '.'e's'i'c'e'r'p' 'e'r'o'm' 't'i' 'e'k'a'm' 'o't' 'd'e'e'n' ','y'v'a'w'-'d'n'a'h' 't'i'b' 'a' 's'i' 't'n'e'm'u'g'r'a' 'e'h't' 'f'o' 't'i'b' 't's'a'l' 't'a'h't' 'O'D'O'T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'i'l'p'p'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o''''a' 'h'c'i'h'w' 'n'i' 'r'e'd'r'o' 'e'h't' 'f'o' 's's'e'l'd'r'a'g'e'r' ','$'i'_'o'$' 's'e'o'd' 'o's' ','r'e'd'r'o' 'l'a'n'i'f' 'e'h't' 'n'i' '$'}'1'+'n'{''''['_'o'$' 'e'r'o'f'e'b' 's'r'a'e'p'p'a' 't'n'e'm'e'l'e' 'e'c'n'e'r'e'f'e'r' 'e'h't' 'f'i'''''''''''''''' 'h't'o'b' ','y'a'w' 'r'e'h't'i'E' '.'$'}'d'i'{'t'i'h't'a'm''$' 'n'a'h't' 'r'e'''''''''''''''''''''''''n'a'h't' 'r'e'h't'a'e'r'g' 's'i' '$'i'_'o'$' 'r'o'f' 'p'm'a't's'e'm'i't' 'e'h't'g'a''''''''' 'e's'u'a'c'e'b' ','n'e'm'e'l'e' 't's'i'l' 'e'h't' '''''''''''$'}'1'+'n'{'_'o'$' 'r'e'v'o' 'p'i'k's' 't'o'n' 's'e'o'd' '$'i'_'o'$' 'r'o'f' 'e'l'u'r' 'y'l'p'p'a' 'e'h't' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'i''''''''''''' 'd'n'a''''','''''''''''''''''''''''''' 'f'''''''''''''''''''''''''''''''''''''''''''''''''$'}'1'+'n'''''''''''$'i'_'o'$' 'r'e't'f'a''''''{'''''_'''''o'''''$''''' '''''f'''''I''''' '.'$'}'d'i'{'t'i'h't'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n''''''''''''''{'''''$''''' '''''n'''''a'''''h'''''t''''' '''''r'''''e'''''t'''''a'''''e'''''r'''''g''''' '''''o'''''s'''''l'''''a''''' '''''s'''''i''''' ''''''''o''''' '''''p'''''m'''''a'''t's'e'm'i't' 'e'h't' 'o's' '''''''''''''''''''''''''''''$'}'d'i'{'t'i'h't'a'm''$' 'n'a'h't' 'r'e't'a'e'r'g' 's'i' 't'n'e'm'e'l'e' 'e'c'n'e'r'e'f'e'r' 'e'h't' 'f'o' 'p'm'a't's'e'm'i't' 'e'h't' 's'n'a'e'm' 't'a'h't' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'r'o't's'i'h' ''''i'e'h't' 'n'i' '$'}'1'+'n'{'_'o''''#'$' 'r'e't'f'a' 's'r'a'e'p'p'a' '$'i'_'o'$' 'd'n'a' ','r'e'd'r'o' 'l'a'n'i'f' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o'$' 'e'r'o'f'e'b' 's'r'a'e'p'p'a' 't'n'e'm'e'l'e' 'e'c'n'e'r'e'f'e'r' 'e'h't' 'f'I' '.'$'}'d'i'{'t'i'h't'a'm''$' 'n'a'h't' 'r'e''''''''''''''''''''''a'h't' 'r'e'h't'a'e'r'g' 's'p'm'a't's'e'm'i't' 'e'v'a'h' 'h't'o'b' 't's'u'm' 'y'e'h't' 'e'c'n'i's' ','t'n'e'm'e'l'e' 'e'c'n'e'r'e'f'e'r' 'e'h't' 'd'n'a' '$'i'_'o'$' 'h't'o'b' 'r'e'v'o' 's'p'i'k's' '$'}'1'+'n'{'_'o'$''''#' 'r'o'f'''''''''''''''' 'l'l'i'w' 'e'l'u'r' 'y'l'p'p'a' 'e'h't' 'n'e'h't' ','y'r'o't's'i'h' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o'$' 'e'r'o'f'e'b' 's'r'a'e'p'p'a' '$'i'_'o'$''''''''''''''''$' 'd'n'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a' ','r'e'd'r'o' 'l'a'n'i'f' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o'$' 'e'r'o'f'e'b' 's'r'a'e'p'p'a' 't'n'e'm'e'l'e' 'e'c'n'e'r'e'f'e'r' 'e'h't' 'f'I' '.'t'n'e'm'e'l'e' 'e'c'n'e'r'e'f'e'r' 'r'i'e'h't' 'n'a'h't' 'r'e't'a'e'r'g' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'a' 'e'v'a'h' 'd'n'a' ','r'e'd'r'o' 't's'i'l' 'l'a'n'i'f' 'e'h't' 'n'i' 't'n'e'm'e'l'e' 'e'c'n'e'r'e'f'e'r' 'r'i'e'h't' 'r'e't'f'a' 'n'o'i't'i's'o'p' 'e'm'o's' 't'a''''a' 'r'a'e'p'p'a' 'n'o'i't'i's'o'p' 'e'c'n'e'r'e'f'e'r' 'r'i'e'h't' 's'a' ')'''' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 't'o'n'(' 't'n'e'm'e'l'e' 't's'i'l' 't'n'e'r'e'f'f'i'd' 'a' 'e's'u' 't'a'h't'''i'''''h'''''t'''''i'''''w''' 'n'o'i't'i's'o'p' 'c'i't's'i'n'i'm'r'e't'e'd' 'a' 's'a'h' '$'}'d'i'{'t'i'h't'a'm''$' 'p''''y'n'A''' '''''''''''' '$'c'_'H'$' 'n'i'''O'''D'O'T'(' ''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'd'd'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'n'e'h'W'n'n'.'e'u'q'i'''''''i'q'n'u' 'd'n'a' 'c'i't's'i'n'i'm'r'e't'e'd' 's'i' 'r'e'd'r'o' 't's'i'l' 's'i'h't' ','d'e'r'e'd'r'o' 'y'l'l'a't'o't' 'e'r'a' 's'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'e'c'n'i'S' '.'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'g'n'i'd'n'e'c's'e'd' 'f'o' 'r'e'd'r'o' 'n'i' 'y'l'e'm'a'n' ','r'e'd'r'o' 't's'i'l' 'l'a'n'i'f' 'e'm'a's' 'e'h't' 'n'i' 's't'l'u's'e'r' ','r'e'd'r'o' 'y'n'a' 'n'i' ','''' '''''''''''''''''''''''''' 'y'l'n'o'''''''''''''''''s'n'o'i't'a'r'e'p'o' 'e's'e'h't' 'g'n'i'n'i'a't'n'o'c' 'y'r'o't's'i'h' 'y'n'A' '''''''}''}'d'i'{''''t'i'h't'a'm'' 'p'''''''p'''''''''''''''''''$' 'd'n'a' ' 'u'c'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i't'i's'o'p' 'e'c'n'e'r'e'f'e'r' 'r'i'e'h't' 's'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 'e's'u' 't'a'h't' '$'c'_'H'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'l'l'a' 'f'o' 's'D'I' 'e'h't' 'e'b' '$'}''c'_'H' 'n'i'' ')'r'e'd'l'o'h'e'c'a'l'p'' ','}'v'e'r'p'{'t'i'h't'a'm'' ','i'_'}'d'i'{'t'''''''{'d'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'' 'd'i'm'' 'i'_'}'d'i'{'t'i'h't'a'm''{''''''' '=' '}'t'f'e'l'{'t'i'h't'a'm'''''{'_'O'$' 't'e'L'n'n''r''''''''''''''''}''''''''''''''''''''}'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'i'l'p'p'a' 's'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '<' '}'d'i'{'t'i'h't'a'm'''''''''''''''''.'$'''' 'i'_'}'d'i'{'t'i'h't'a'm''$' 's'e'i'l'p'm'i' 't'a'h't' ','$'}'1'+'n'{'_'o'$' 'e'r'o'f'e'b' 'd'e'i'l'p'p'a' 's'i' '$'i'_'o'$' 'f'I''''''''''''''''''''''''''''''''''''''' '.'$'c'_'H'$' 'n'i' '$'}'1'+'n'{'_'o'$' 'r'e't'f'a' 'r'o' 'e'r'o'f'e'b' 'r'e'h't'i'e' 's'r'u'c'c'o' '$'i'_'}'d'i'{'t'i'h't'a'm''$' 's't'r'e's'n'i' 't'a'h't' '$'''''''$'#'i'_'o''''O'$' 'n'o'i't'a'r'e'p'o' 'e'h'T' '.'r'e'd'r'o' 'l'a'n'i'f' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o'$' 'e'r'o'f'e'b' 's'r'a'e'p'p'a' 't'a'h't' 't'n'e'm'e'l'e' 't's'i'l' 'y'n'a' 'f'o' 'D'I' 'e'h't' 'e'b' ''}'m'_'}'d'i'{'t'i'h't'a'm'' ','s't'o'd'''' ','1'_'d'i'{'t'i'h't'a'm''{' 'n'i'' 'd'i'{'t'i'h't'a'm''''''''$'i'_'o'$' 't'e'L''o'f' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't''''$' '}'e'r'o'f'e'b'{'h'p'm'e'' 'r'a'e'p'p'a' 't'a'h't' '$'}''m'_'}'d'i'{'t'i'h't'a'm'' ','s't'o'd'' ',''''1'_'}'d'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''$'''''i'''''_'''''o'''''$''''' '''''n'''''a'''''h'''''t''''' '''''D'''''I''''' '''''r'''''e'''''t'''''a'''''e'''''r'''''g''''' '''''a''''' '''''e'''''v'''''a'''''h''''' '''''t'''''s'''''u'''''m''''' '''''$'''''i'''''_'''''o''''''''''''''O'''''$''''' '''''n'''''o'''''i'''''t'''''a'''''r'''''e'''''p'''''o''''' '''''n'''''a''''' '''''n'''''o''''' '''''s'''''d'''''n'''''e'''''p'''''e'''''d''''' '''''y'''''l'''''l'''''a'''''s'''u'a'c' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'y'n'a' ','s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'f'o' 'n'o'i't'i'n'i'f'e'd' 'e'h't' 'y'b' 't'a'h't' 'e't'o'n' 'r'e'h't'r'u'F' '''n'n'{'t'i'h't'a'm''$' 's't'n'e'm'e'l'e' 't's'i'l' 'f'o' 't'e's' 'e'h't' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'c'_'H'$' 'o't' 'd'e't'r'e's'n'i'''''''''''''e'd'd'a' 's'i' '$'}'1''''$'+'n'{'_'o'$' 'e'r'e'h'w' 's's'e'l'd'r'a'g'e'r' 't'a'h't' 'w'o'h's' 'o't' 't'n'e'l'a'v'i'u'q'e' 's'i' 't'i' ','s't'n'e'm'e'l'e' 't'n'e'c'a'j'd'a' ','g'n'i't's'i'x'e'''''''d'a' 'o'w't' 'n'e'e'w't'e'b' 't'n'e'm'e'l'e' 'w'e'n' 'a' 'd'd'a' 'y'l'n'o' 's'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's''''''''''{'t'i'h't'a'm''$'''''''n'i' 'e'c'n'i'S'n'n'''' '.'$']'k'_'}'d'i'{'t'i'h't'a'm'' ','s't'o'd'' ','}'d'i'{'t'i'h't'a'm'''' ','s't'o'd'' ','1'_'d'i'{'t'i'h't'a'm''['$' 's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'w'o'h's' 'n'a'c' 'e'w' ','y'l't'n'e'l'a'v'i'u'q'E' '.'s't'n'e'm'e'l'e' 't's'i'l' 'f'o' 'e'c'n'e'u'q'e's' 'e'm'a's' 'e'h't' 's'i' 'e'm'o'c't'u'o' 'e'h't' ','$'}'1'+'n'{'_'o'$' 'n'o'i't'a'r'e'p'o' 'e'h't' 't'r'e's'n'i' 'e'w' '$'c'_'H'$' 'n'i' 'n'o'i't'i's'o'p' 't'a'h'w' 't'a' 's's'e'l'd'r'a'g'e'r' 't'a'h't' 'w'o'h's' 'o't' 'd'e'e'n' 'e'W' '.'$'c'_'H'$' 'y'b' 'd'e'n'i'f'e'd' 'y'l's'u'o'u'g'i'b'm'a'n'u' 'r'e'd'r'o' 't's'i'l' 'e'h't' 'n'i' ','$'}'t'x'e'n'{'t'i'h't'a'm''$' 'd'n'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 'n'e'e'w't'e'b' 'l'a'v'r'e't'n'i' 'e'h't' 'n'i'''''''''''''''''''e'n'i'f'e'd'''''''''''''''''''t'r'e's'n'i''' '''''s'''''p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' ''''''''''''''''''''''''' 's't'n'e'm'e'l'e' 't's'i'l' 'f'o' 'r'e'd'r'o' 'e'h't' 'e'b' '$']'k'_'}'d'i'{'t'i'h't'a'm'' ','s't'o'd'' ','1'_'}'d'i'{'t'i'h't'a'm''['$' 't'e'L'n'n'.'n'o'i't'a'l'o's'i' 'n'i' '$'c'_'H'$' 'r'e'd'i's'n'o'c' 'n'a'c' 'e'w' 'o's' ','''b'''''u'''''s''''' '''''e'''''l'''''b'''''i'''''s'''''s'''''o'''''p''''' '''''l'''''l'''''a''''''''''''''''''''s'''''''''''''''''i'''''''''''''''''s'''''''''''''''''e'''''''''''''''''h'''''''''''''''''t'''''''''''''''''o'''''''''''''''''p'''''''''''y'''''h''''' '''''n'''''o'''''i'''''t'''''c'''''u'''''d'''''n'i' 'e'h't' 'y'B' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'''''o''''' '''''s''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'i'h't'i'w' 'r'e'd'r'o' 't's'i'l' 'l'a'n'i'f' 'e'm'a's' 'e'h't' 'n'i' 't'l'u's'e'r''e'c'i'o'h'c' 'e'l'b'i's's'o'p' 'l'l'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '$'c'_'H'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h't' ','s'i's'e'h't'o'p'y'h' 'n'o'i't'c'u'd'n'i' 'e'h't' 'y'B' '.'l'a'v'r'e't'n'i' 't'a'h't' 'f'o' 'e'd'i's't'u'o' 'r'e'd'r'o' 't's'i'l''''''''''''''''r'e'd'r'o' 'e'h't' ')'y'b' 'd'e't'c'e'f'f'a' 't'o'n' 'e'r'a' 'd'n'a'(' 't'c'e'f'f'a' 't'o'n' 'o'd' 'd'n'a' ','l'a'v'r'e't'n'i' 't'a'h't' 'n'i'h't'i'w' 's't'n'''''''t'm'e''''''''''''' 's'n't'm'e'l'e' 't's'i'l' 'f'o' 'r'e'd'r'o' 'l'a'n'i'f' 'e'h't' 'e'n'i'm'r'e't'e'd' '$'c'_'H'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h'T' '.'$'}'t'x'e'n'{'t'i'h't'a'm''$' 'o't' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 'm'o'r'f' 'l'a'v'r'e't'n'i' 'e'h't' 'n'i'h't'i'w' 'n'o'i't'i's'o'p' 'a' 't'''' 'a' 't'r'e's'n'i' 't'a'h't' 'd'n'a' '$'}'1'+'n'{'_'o''''{'$' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm''$' 'y'l'n'o' 'g'n'i't'c'e'l'e's' 'y'b' '$'2'_'H'$' 'r'o' '$'1'_'H'$' 'r'e'h't'i'e' 'm'o'r'f' 'd'e'v'i'r'e'd' ','s'n'o'i't'a'r'e'p'o' 'f'o' 'y'r'o't's'i'h' 'a' 'e'b' '$'c'_'H'$' 't'e'L'''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'i'o'p' 'n'o'i't'r'e's'n'i' 'e'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i't'c'e'l'e's'''''''''''''''''''''''''''''''''''''''''''''''''{'f''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'o' 't'e's'b'u's''''' '''''''''''''''''e'''''''''''''''''h'''''''''''''''''t''''''''''''''''' '''''e'''''b''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$''''''''''''''''''s'_'H' 'n'i'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'.'e't'a't's' 'l'a'n'i'f' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o'$' 'e'r'o'f'e'b' 'r'a'e'p'p'a' 'o's'l'a' 'y'l'i'r'a's's'e'c'e'n' '$'i'_'o'$' 'n'o' 'd'n'e'p'e'd' 'y'l'l'a's'u'a'c' 't'a'h't' 's'n'o'i't'a'r'e'p'o' 'l'l'a'''''''o'$' 'n'e'h't' ','$'i'_'o'$' 'r'e't'f'a' '$'}'1'+'n'{'_'o'$' 's't'r'e's'n'i' 'e'l'u'r' '$'}'y'l'p'p'a'{'m'r'h't'a'm''$' 'e'h't' 'f'i''''$' ','s'u'h'T' '.'$'i'_'o'$' 'n'a'h't' 'p'm'a't's'e'm'i't' 'r'e't'a'e'r'g' 'a' 'e'v'a'h' 't's'u'm' '$'i'_'o'$' 'n'o' 's'd'n'e'p'e'd' 'y'l'l'a's'u'a'c' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'y'n'a' ','s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'f'o' 'n'o'i't'i'n'i'f'e'd' 'e'h't' 'y'b' 't'a'h't' 'e't'o'N' '.'n'o'i't'a'r'e'p'o'''''''''''''''' 'g'n'i't'r'a't's' 'a' 'e'b' '$'i'_'o''''O'$' 't'e'L'n'n''c'_'H'$' 'n'i' 's'e'i'c'n'e'd'n'e'p'e'd' 'l'a's'u'a'c' 'y'n'a' 'e'v'a'h' 't'o'n' 's'e'o'd' 't'i' 'e'c'n'i's' ',''.'n'o'i't'a'r'e'p'o' 'g'n'i't'r'a't's' 'a' 'o's'l'a' 's'i' '$'}'1'+'n'{'_'o'$' 't'a'h't' 'e't'o'N'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'{'_'o''''#'$' 'g'n'i'y'l'p'p'a' 'r'e't'f'A' ''''$'''''s'''''_''''''-'H'$' 't'e'L'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'c'_'H'$' 'n'i' 'n'o'i't'a'r'e'p'o' 'r'e'h't'o' 'y'n'a' 'n'o' 'd'n'e'p'e'd' 'y'l'l'a's'u'a''''u'c' 't'o'n' 'o'd' 'y'e'h't' ':'''''s'n'o'i't'a'r'e'p'o' 'g'n'i't'r'a't's'`'`' 'e'r'a' 't'a'h't' '$'s'_'H'$' 's'n'o'i't'a'r'e'p'o' 'f'o' 't'e's'b'u's' 'a' 's'i' 'e'r'e'h't' '$'c'_'H'$' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'o'm'A' '.'$'}'t'x'e'n'{'t'i'h't'a'm''$' 'd'n'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 'n'e'e'w't'e'b' 'n'o'i't'i's'o'p' 'a' 't'a' 't'r'e's'n'i' 't'a'h't' 'd'n'a' ''s'''$'}'''''''''''''''''''''''''''''''''''''''''''$'}'1'+'n'{'_'o'$' 'h't'i'w' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'a'r'e''h't'a'm''$''''''''''p'o' 't'r'e's'n'i' 'y'l'n'o' 'g'n'i'r'e'd'i'd'n'o'c' 'y'b' '$'2'_'H'$' 'r'o' '$'1'_'H'$' 'r'e'h't'i'e' 'm'o'r'f''''b' 'd'e'v'i'r'e'd' ','''' 's'n'o'i't'a'r'e'p'o' 'f'o' 'y'r'o't's'i'h' 'a' 'e'b' '$'c'_'H'$' 't'e'L'n'n'.'s't'n'e'm'e'l'e' 't's'i'l' 'f'o' 'e'c'n'e'u'q'e's' 'e'm'a's' 'e'h't' 's'i' 'e'm'o'c't'u'o' 'e'h't' ','$'2'_'H'$' 'd'n'a' '$'1'_''''-'H'$' 'n'i' 'd'e't'r'e's'n'i' 's'i' '$'}'1'+'n'{'_''''{'o'$' 'e'r'e'h'w' 'r'e't't'a'm' 'o'n' 't'a'h't' 'w'o'h's' 'o't' 'y't'r'e'p'o'r''''o'p' 's'i'h't' 'e's'u' 'e'W' '.'$'}'d'i'{'t'i'h't'a'm''$' 'n'a'h't' 's's'e'l' 'D'I' 'n'a' 's'a'h' 't'n'i'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' 'g'n'i'w'o'l'l'o'f' 't'n'e'm'e'l'e' 't's'i'l' 'e'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a' ','$'}'d'i'{'t'i'h't'a'm''$' 'n'a'h't' 'r'e't'a'e'r'g' 'D'I' 'n'a' 'e'v'a'h''''''''''''' 'e'r'a' '$'}'d'i'{'t'i'h't'a'm''$' 'd'n'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 'n'e'e'w't'e'b' 's't'n'e'm'e'l'e' 't's'i'l' 'l'l'a' ','d'e't'r'e's'n'i' 's'i' '$'}'d'i'{'t'i'h't'a'm''$' 'r'e't'f'a' 't'a'h't' 's'e'r'u's'n'e''''''''''s'a'h' 'e'l'u'r' '$'}'y'l'p'p'a'{'m'r'h't'a'm''$' 'e'h't' 't'a'h't' 'e't'o'N' '.'$'}'t'x'e'n'{'t'i'h't'a'm''$' 'd'n'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 'n'e'e'w't'e'b' 'n'o'i't'i's'o'p' 'e'm'o's' 't'a' 't'r'e's'n'i' 't'a'h't' 'd'n'a' '$'}'1'+'n'{''''['_'o'$' 'o't' 't'n'e'r'r'u'c'n'o'c' 'e'r'a' 't'a'h't' 's'n'o'i't'r'e's'n'i' 'r'e'd'i's'n'o'c' 'y'l'n'o' 'd'e'e'n' 'e'w' ','''' 'e'r'o'f'e'r'e''''''''''r'e'h'''''''''''''''''''''' 'e'w' ','s'u'h'T'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'}'t'x'e'n'{'t'i'h't'a'm''$' 'd'n'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 'n'e'e'w't'e'b' 'n'o'i't'i's'o'p' 'e'm'o's' 't'a' '$'}'d'i'{'t'i'h't'a'm''$' 't'r'e's'n'i' 'o't' 'd'e'e't'n'a'r'a'u'g' 's'i' 'e'l'u'r' '$'}'y'l'p'p'a'{'m'r'''''''''''''''''''p'p'a'{'t'i'h't'a'm''$' 'e'h't' ','s'u'h'T' '.'$'}'t'x'e'n'{'t'i'h't'a'm''$' 'd'n'o'y'e'b' 's'e'u'n'i't'n'o'c' 'r'e'v'e'n' 'n'o'i's'r'u'c'e'r' 'e'''''''''''''''''''''''''''''''''''''''' 'n'o'i't'a'r'e't'i' 's'i'h't' ','$''''''}'d'i'{'d'i'h't'a'm'' '<' '}'t'x'e'n'{'d'i'h't'a'm''$' 'e'c'n'i'S' '.'$'}'d'i'{'t'i'h't'a'm''$' 'n'a'h't' 'r'e't'a'e'r'g' 'D'I' 'n'a' 'h't'i'w' 's't'n'e'm'e'l'e' 'y'n'a' 'r'e'v'o' 's'p'i'k's' 'd'n'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 't'a' 'g'n'i't'a'r'e't'i' 's't'r'a't's' 'e'l'u'r' '$')')'v' ','}'v'e'r'p'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'' ','r'e'd'l'o'h'e'c'a'l'p''('}'y'l'p'p'a'{'m'r'h't'a'm''$' 'e'h't' ','d'e'i'l'p'p'a' 's'i' '$'}'1'+'n'{'_'o'$' 'n'e'h'W' '.'y'r'o't's'i'h' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o'$' 'o't' 'r'o'i'r'p' 't'n'i'o'p' 'e'm'o's' 't'a''''b' 'd'e't'r'e's'n'i' 'e'r'a' '''''''''''''''''''''''''''''$'}'t'x'e'n'{'t'i'h't'a'm''$' 'd'n'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 't'a'h't' 's'd'n'a'm'e'd' 'y't'i'l'a's'u'a'c' ','s'e'i'r'o't's'i'h' 'e's'e'h't' 'f'o' 'r'e'h't'i'e''''''''''''''''t'h'e'i't' 'o't'n'i' 'd'e't'r'e's'n'i' 's'i' '$'}'1'+'n'{'_'o'$' 'n'e'h'W' '.'d'e'i'l'p'p'a' 'n'e'h'w' 'e't'a't's' 'l'a'n'i'f' 'e'm'a's' 'e'h't' 'n'i' 't'l'u's'e'r' 'h'c'i'h'w' '$'n'_'o' 's't'o'd'' '1'''''''''' '1'n'_'o'$' 's'n'o'i't'a'r'e'p'o' 'f'o' 's'e'i'r'o't's'i'h' 'l'a's'u'a'c' 'e'b''''''''''''''''''''''''''''''' '$'2''''@'_''''J'H'$' 'd'n'a' '$'1'_'H''''#'$'''''''1'H' 's'e'i'r'o't's'''''''t's'i'h' 't'e'l'''''''''''''''''''''''''''''''''''''''''''''' 'e'v'a'h' 'e'w''''''' 'a' 'e'm'u's's'a' ','''' 's'i's'e'h't'o'p'y'h' 'n'o'i't'c'u'd'n'i' 'e'h't' 'y'B''o'b'a' 'n'o'i't'a'v'r'e's'b'o' 'e'h't' 'o't' 'g'n'i'd'r'o'c'c'A' '.''n'n''''''''''''''''''''''''''''''''''''''' '''''e'''''w''''' '''''d'''''n'''''a''''' ''''','''''r'''''e'''''d'''''r'''''o''''' '''''e'm'a's' 'e'h't' 'n'i' 'e'b' 'l'l'i't's' 't's'u'm' 'y'e'h't''''''''''''''''''''''''''''$'''}'d'i'{'t'i'h't'a'm''$' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'v'o'b'a' 'n'o'i't'a'v'r'e's'b'o' 'e'h't' 'o't' 'g'n'i'd'r'o'c'c'a' '$'''}'d'i'{'t'i'h't'a'm'' '<' '}'t'x'e'n'{'t'i'h't'a'm''$' 'd'n'a' '$'''}'d'i'{'t'i'h't'a'm'' '<' '}''''''''''''''''''''''''''''''v'e'r'p'{'t'i'h't'a'm''$' 'e'v'a'h' 't's'u'm' 's't'n'e'm'e'l'e' 'e's'o'h't' 'n'e'e'w't'e'b' 'd'e't'r'e's'n'i' 'D'I' 'r'e'h't'o' 'y'n'a' 't'a'h't'''''''''''''''' 'm'o'r'f' 'w'o'n'k' 'e'w' 't'u'b''''''''''''' 'T'U'B' ','$''''4'q'_'A'$' 'n'i''''''''''''''''a' 's'a'(' 't'n'e'c'a'j'd'a' 'y'l'i'r'a's's'e'c'e'n' 'r'e'g'n'o'l' 'o'n' 'e'r'a' '$'}'t'x'e'n'{'t'i'h't'a'm''$''d'i' '''''''''''''''''''''' 'd'n'a' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 's't'n'e'm'e'l'e' 'e'h't' ','$'q'$' 'r'e'e'p' 't'a' 'd'e'i'l'p'p'a' 's'i' '$'}'1'+'n'{'_''''{'o'$' 'n'e'h'W' '.'s't'n'e'm'e'l'e' 't'n'e'c'a'j'd'a' ','g'n'i't's'i'x'e' 'o'w't' 'n'e'e'w't'e'b' 't'n'e'm'e'l'e' 'w'e'n' 'a' 'g'n'i't'r'e's'n'i' 'y'b' 'd'e'i'f'i'd'o'm' 'y'l'n'o' 's'i' 'e'r'u't'c'u'r't's' 't's'i'l' 'e'h't' ','r'e'v'o'e'r'o'M''n'n'''''s'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm''$''''' 't'n'e'r'r'u'c'n'o'c' 'r'e'h't'o' 'o't' 't'c'e'p's'e'r' 'h't'i'w''i'r'e'd'r'o' 'e'l'b'i's's'o'p' 'l'l'a' 'r'e'd'i's'n'o'c' 'y'l'n'o' 'd'e'e'n' 'e'w' ''e't'a'l' 'y'l'l'a's'u'a'c' 'd'e'n'e'p'p'a'h' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'y'n'a' 'e'r'o'f'e'b' 'd'n'a' 'e'r'o'f'e'b' 'd'e'n'e'p'p'a'h' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'y'n'a' 'r'e't'f'a'''''''''''''''''''''''''''''''''''''''' 'd'e'i'l'p'p'a''''''''''''''''''''''''''''''''''''''''t'f'a' 'd'e'r'e'v'i'l'e'd' 'e'b' 'o't' '$'}'1'+'n'{'_'o'$' 's'e'r'i'u'q'e'r' 'y'r'e'v'i'l'e'd' 'd'e'r'e'd'r'o' 'y'l'l'a's'u'a'C' '.'''''''''''''''''' '$'}'1'+'n'{'_'o'$' 'o's' ',''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'y'a'w'l'a' 'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm''$' 'n'a' 'g'n'i'y'l'p'p'a' 'd'n'a' ',')'t's'i'l' 'e'h't' 'n'i' 's'm'e't'i' 'f'o' 'r'e'd'r'o' 'e'h't' 't'o'n''''t' 't'u'b' ','s'e'u'l'a'v' 'y'f'i'd'o'm' 's'n'o'i't'a'r'e'p'o' '$'''' '}'e't'e'l'e'd'{'f's'h't'a'm''$'(' 's'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm'''']''$' 'g'n'i'y'l'p'p'a' 'y'b' 'd'e'i'f'i'd'o'm' 'y'l'n'o' 's'i' 'e'r'u't'c'u'r't's' 't's'i'l' 'd'e'k'n'i'l' 'e'h't' 't'a''''s'h't' 'e't'o'N'n'n'''''''''''''''''''''$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'i'l'p'p'a' 's'i' '$'}'1'+'n'{'_'o''''O'$' 'n'e'h'w' 'e'm'i't' 'e'h't' 't'a' '$'q''''Q'$' 'f'o' '$'q'_'A'$' 'e't'a't's' 'e'h't' 'n'i' 'd'e'n'i'f'e'd' 'e'b' 't's'u'm' '$')'}'t'x'e'n'{'t'i'h't'a'm''('q'_'A'$' 'd'n'a''''''''''' '$'}'v'e'r'p'{'t'i'h't'a'm''$' ','y'r'o't's'i'h' 's't'i' 'n'i' 'e'm'i't' 'y'd'a'e'r' 'y'l'l'a's'u'a'c' 'y'n'a' 't'a' '$'q'$' 'r'e'e'p' 'r'e'h't'o'n'a' 't'a' 'd'e'i'l'p'p'a' 's'i' '$'}'1'+'n'{'_'o'$' 'n'e'h'w' ','s'u'h'T' '.')'d'e'i'l'p'p'a' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 's'a' 's'w'o'r'g' 'y'l'l'a'c'i'n'o't'o'n'o'm' '$'A'$' 'n'o'i't'c'n'u'f' 'l'a'i't'r'a'p' 'e'h't' 'f'o' 'n'i'a'm'o'd' 'e'h't' ''.'e'.'i''''''''''''''''''''''''''''''''''''''''''''''(' 'e't'a't's' 'e'h't' 'm'o'r'f' 'D'I' 'n'a' 'e'v'o'm'e'r' 'r'e'v'e'n' 'e't'a't's' 's'''r'e'e''''p'p' 'a' 'y'f'i'd'o'm' 't'a'h't' 's'e'l'u'r' 'e'h'T''n'n''''''''''''''''{'t''''''d'''a'u'q''}''x'e't''d'a'u'q''''''''''''''}'*'n'g'i'l'a'{'d'n'e''n''''''''}'t'x'e'n'{'t'i'h't'a'm''''''';'''''t'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$'}'d'i''''n'{'t'i'h't'a'm'' '<' '}'t'x'e'n'{'t'i'h't'a'm''$' 'd'n'a' '$'}'d'i'{'t'i'h't'a'm'' '<' '}'v'e'r'p'{'t'i'h't'a'm''$' 'd'n'a' '''''''''''''''''$''''''''''p'_''$' '''$''''''''''''''''m'''''}'v'e'r'r''''''''{'t'i'h't'a'm''''''''''''''''''}'t'x'e'n'{'t'i'h't'a'm''''''' ''''''''''''''''''''''''''''''''''''''''''d'a'u'q''''''''''''''''''''''''''''''''''''''''''$'$' '.')'n' ','p'_'v'(' '=' ')'}'v'e'r'p'{'t'i'h't'a'm''('A' ';''}' 'e'r'e'h'w' '{'t'x'e't''d'a'u'q''n']','')'n' ','v'(' 'o't's'p'a'm'' '}'d'i'{'t'i''''h't'a'm'' ',')'}'d'i'{'t'i'h't'a'm'' ','p'_'v'(' '''''o't's'p'a'm'' '}'v'e'r'p'{'t'i'h't'a'm'',''['A' '=' '''p'_'A' '$'$'n':'e'v'a'h' 'e'w' 'e'r'o'f'e'r'e'h'T' '''''''''d''n'n''''e'i'l'p'p''.'a' 's'a'w' '$'}'1'+'n'{'_''''{'o'$' 'r'e't'f'a' 'y'l'e't'a'i'd'e'm'm'i'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'p'_'A'''' 'n'''''''''''''e'''''''' '=' '''p'_'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'p'p'a' 't's'u'm' ')'$'}'d'i'{'t'i'h't'a'm'' '<' 'n'$'(' 'e's'a'c' 'e'v'i's'r'u'c'e'r'-'n'o'n''''''''''c'e's' 'e'h't' '$')')'v' ','}'v'e'r'p'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'' ','p'_'A'(''P'A't'a'd'p'u' 'e't'a't's' ''i'$' ''' ''n'i' 'g'n'i'r'r'''''u'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '$'''p'_'A'$' 'o't'n'i' '$'p'_'A'$' 'd'e'm'r'o'f's'n'a'r't' 't'a'h't' 'n'o'i't'c'n'u'f''c'c'o' 'p'm'a't's'e'm'i't' 'y'n'a' 'n'a'h't' 'r'e't'a'e'r'g' 'd'n'a' ','' 'r'e'e'p' 'e'm'a's' 'e'h't' 'f'o' 'e't'a't's' 'e'h't' 'e'b' '$'''p'_'A'$' 't'e'l' 'd'n'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '$'}'y'l'p'p'a'{'m'r'h't'a'm''$' 'e'h't' ','e'r'o'f'e'r'e'h'T' '.'$'o'_'A'$' 'n'i' 'p'm'a't's'e'm'i't' 't's'e't'a'e'r'g' 'e'h't' 's'i' '$'}'d'i'{'t'i'h't'a'm''$' ','s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'f'o' 'n'o'i't'i'n'i'f'e'd' 'e'h't' 'y'B' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''.'d'e'i'l'p'p'a' 'y'l'l'a'c'o'l' 's'a'w' '$'}'1'+'n'{'_'o'$' 'r'e't'f'a' 'y'l'e't'a'i'd'e'm'm'i' ','d''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e'i'l'p'p'a' 'y'l'l'a'c'o'l' 's'a'w' '$'}'1'+'n'{'_'o''''#'$' 'r'e't'f'a' 'y'l'e't'a'i'd'e'm'm'i' ','d'e't'a'r'e'n'e'g' 's'a'w' '$'}'1'+'n'{'_'o'$' 'h'c'i'h'w' 'n'o' 'r'e'e'p' 'e'h't' 'f'o' 'e't'a't's' 'e'h't' 'e'b' '$'o'_'A'$' 't'e'L'''e't'a'r'e'n'e'g' 's'a'w' '$'}'1'+'n'{'_'o'$' 'h'c'i'h'w' 'n'o' 'r'e'e'p' 'e'h't' 'f'o' 'e't'a't's' 'e'h't' 'e'b' '$'o'_'A'$' 't'e'L'''n'n''''''''''''''''''''''p'm'a't's'e'm'i't''''' 't'r'o'p'm'a'''''''''''''''''''''''''''''''''''''''''''''''B' '.'d'e'm'r'o'f'r'e'p' 's'a'w' 't'i'd'e' 'e'h't' 'h'c'i'h'w' 'n'o' 'r'e'e'p' 'e'h't' 'y'b''''''''''''''t' 'y'b''''''''''''''''''''''''''''''''''L' 'e'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'd'e't'a'r'e'n'e'g' 'y'l'h's'e'r'f' 'a' 's'i' '$'}'d'i'{'t'i'h't'a'm''$' ','n'o'i't'a'r'e'p'o' 's'i'h't' 'n'I' '.'$')'v' ','}'v'e'r'p'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm''='}'1'+'n'{'_'o''''{'$' 't'a'h't' 'e's'a'c' 'e'h't' 'r'e'd'i's'n'o'c' 'w'o'N'n'n'}'n'o'i't'r'e's'n'i' 'f'o' 'y't'i'v'i't'a't'u'm'm'o'C'{'n'o'i't'c'e's'b'u's'b'u's''n'n'.'s'n'o'i't'a'r'e'p'o' 'g'n'i'w'o'l'l'o'f' 'r'o' 'r'o'i'r'p' 'y'n'a' 'h't'i'w' 't'c'a'r'e't'n'i' 't'o'n' 's'e'o'd' 'n'o'i't'a'r'e'p'o' 'd'e't'r'e's'n'i' 'e'h't' 'e's'u'a'c'e'b' ','t'n'i'o'p' 'n'o'i't'r'e's'n'i' 'e'h't' 'n'o' 'd'n'e'p'e'd' 't'o'n' 's'e'o'd' 'e't'a't's' 'l'a'n'i'f' 'e'h't' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'r'o't's'i'h' 'a' 'n'i' 't'n'i'o'p' 'y'd'a'e'r' 'y'l'l'a's'u'a'c' 'y'n'a' 't'a' '$')'}'d'i'{'t'i'h't'a'm''('}'e't'e'l'e'd'{'f's'h't'a'm''='}'1'+'n'{'_'o'$' 'g'n'i't'r'e's'n'i' ','s'u'h'T'n'n'''''''''''''''''''''''''''''''''' 'e'h't' ','s'u'h'T' '.'d'e'g'n'a'h'c'n'u' 't'n'e'm'e'l'e' '$'}'t'x'e'n'{'t'i'h't'a'm''$' 'e'h't' 's'e'v'a'e'l' 'd'n'a''''''''''''' 'd'n'a' ','$')'}'d'i'{'t'i'h't'a'm''('A'$' 'f'o' 't'n'e'm'e'l'e' '$'}'e'u'l'a'v'{'t'i'h't'a'm''$' 'e'h't' 'y'l'n'o' 's'e'i'f'i'd'o'm' '$')'}'d'i'{'t'i'h't'a'm''('}'e't'e'l'e'd'{'f's'h't'a'm'''''|'$' 'g'n'i'y'l'p'p'a''''$' ','t's'a'r't'n'o'c' 'y'B' '.'e'l'p'u't' 'e'h't' 'f'o' 't'n'e'm'e'l'e' '$'}'t'x'e'n'{'t'i'h't'a'm''$' 'e'h't' 'y'f'i'd'o'm' 'd'n'a' 'e'n'i'm'a'x'e' 'y'l'n'o' 'd'n'a' ','d'e'g'n'a'h'c''''a'n'u' 't'i' 'e'v'a'e'l' 'd'n'a' 'e'l'p'u't''''''''''''$'''''''''''''''''''''''''''''' 'e'h't' 'f'o' 't'n'e'm'e'l'e' '$'''}'e'u'l'a'v'{'t'i'h't'a'm'' 'e'h't' 's'e'r'o'n'g'i' '$')'}'v'e'r'p'{'t'i'h't'a'm''('A'$' 'r'o'f' 'y'r'e'u'q' 'e'h't' ','n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm''$''''''''''''''''r'e's'n'i' 'n'a' 'h'c'u's' 'g'n'i'y'l'p'p'a' 'n'e'h'w''''''''''''''''''''''''''''''''''''' 's'p'u'k'o'o'l' 'l'l'a' 't'a'h't' 'e't'o'N' ''l'l'a'n'r'e't'n'i' 'n'o'i't'a'r'e'p'o' 'n'a' 'h'c'u's' 's'e's'u' 't'a'h't' 'n'o'i't'c'n'u'f' '$'}'y'l'p'p'a'{'m'r'h't'a'm''$' 'e'h't' 'o't' 'l'l'a'c' 'e'v'i's'r'u'c'e'r' 'a' 'r'o' ',''d'l'o'h'e'c'a'l'p'' ','r'e'd'l'o'h'e'c'a'l'p'' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm''$' 'n'a' 't'a'h't' 'd'e'w'o'h's' 'e'W'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'r'e'd'l'o'.''h'e'c'a'l'p'' ','}'d'i'{'t'i'h't'a'm'' ','r'e'd'l'o'h'e'c'a'l'p''('''''''''''''''''''''''''''''''''''''''''' 'h'c'i'h'w' 'n'i' 'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm''$''''' 'n'a' 's'i' '$')'}'d'i'{'t'i'h't'a'm''('A'$' 'y'f'i'd'o'm' 'r'o' 'n'o' 'd'n'e'p'e'd' 'n'a'c' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'f'o' 'd'n'i'k' 'r'e'h't'o' 'y'l'n'o' 'e'h'T'n'n'.'e't'a't's' 'l'a'n'i'f' 'e'h't' 'n'o' 't'c'e'f'f'e' 'y'n'a' 'e'v'a'h' 't'o'n' 's'e'o'd' 'y'r'o't's'i'h' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o''''{'$' 'r'e't'f'a' 'r'o' 'e'r'o'f'e'b' 's'n'o'i't'a'r'e'p'o' '$')'}'d'i'{'t'i'h't'a'm''('}'e't'e'l'e'd'{'f's'h't'a'm''$' 'r'e'h't'o' 'y'n'a' 'f'o' 'e'c'n'e's'e'r'p' 'e'h't' ','t'n'e't'o'p'm'e'd'i' 's'i' 'n'o'i't'a'r'e'p'o' 's'i'h't' 'g'n'i'y'l'p'p'a' 'r'o'f' 'e'l'u'r' 'e'h't' 's'A' '.'$'}'d'i'{'t'i'h't'a'm''$' 't'n'e'm'e'l'e' 't's'i'l' 'e'm'a's' 'e'h't' 'r'o'f' 'n'o'i't'a'r'e'p'o' '$'}'e't'e'l'e'd'{'f's'h't'a'm''$' 'a' 's'i' '$')'}'d'i'{'t'i'h't'a'm''('A'$' 'e'm'a's' 'e'h't' 'y'f'i'd'o'm''''a' 'n'a'c' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'f'o' 'd'n'i'k' 't's'r'i'f' 'e'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$''''''''n'''''n'''''''')'''''}'''''d'''''i'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''('''''A'''''$''''' '''''n'''''o''''' '''''d'''''n'''''e'''''p'''''e'''''d''''' '''''r'''''o''''' '''''y'''''f'''''i'''d'o'm' 't'o'n' 's'e'o'd' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'y'n'a' 'o't' 't'c'e'p's'e'r' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c' 'y'l'l'a'i'v'i'r't' 's'i' 't'i' 'o's' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' ','''''''''''''''''''''''''''''''''''''a' 'o't' 't'c'e'p's'e'r' 'h't'i'w' 'e'v'i't'a't'u'm'm'o'c'''''''''''''' 'y'l'l'a'i'v'i'r't' 's'i' 't'i' ';'$')'}'d'i'{'t'i'h't'a'm''('A'$' 'r'o'f' 'g'n'i'p'p'a'm' 'e'h't' 's'e'i'f'i'd'o'm' 't'a'h't' 'n'o'i't'a'r'e'p'o' 'r'e'h't'o'n'a' 'h't'i'w' 't'c'a'r'e't'n'i' 'y'l'n'o' 's'u'h't' 'n'a'c' 'n'o'i't'a'r'e'p'o' 'e'h'T' '.'d'e'g'n'a'h'c'n'u' '$'A'$'' 'e's'i'w'r'e'h't'o' 'd'n'a''''''}''''''''''''' 'e't'a't's' 'e'h't' 'n'i''''''d'''''i'''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''('''''}'''''e'''''t'''e'l'e'd'{'f's'h't'a'm''$' 'g'n'i'y'l'p'p'a''''''''''''' 'e'h't' 't'a'h't' 'e't'o'N'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '$')''''$'}'d'i'{'t'i'h't'a'm''('A'$''''''''''''' 'e'h't' 'r'o'f' 'g'n'i'p'p'a'm' 'e'h't' 'y'f'i'd'o'm' 'n'a'c' 't'a'h't' 'n'o'i't'a'r'e'p'o''''m' 'y'l'n'o' 'e'h't' ','s'u'h'T'n'n'.'y'r'o't's'i'h' 'e'h't' 'n'i' '$'}'1'+'n'{'_'o'$' 'r'e't'f'a' 't'n'i'o'p' 'a' 't'a' '$'}'d'i'{'t'i'h't'a'm''$' 'e'm'a's' 'e'h't' 'r'o'f' 'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n''''''''''''''''t'r'e'n's'i'{'f's'h't'a'm''$' 'y'n'a' 'e'b' 't'o'n'n'a'c' 'e'r'e'h't' 'd'n'a' ','n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm''$' 'h'c'u's' 'e'n'o' 'y'l't'c'a'x'e' 'e'b' 't's'u'm' 'e'r'e'h't' 'o's' ','e'u'q'i'n'u' 's'i' '$'}'d'i'{'t'''''''{'d'i'h't'a'm''$''''' 's'a'''''''''''' 'd'e's'u' 's'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' ','r'e'v'o'e'r'o'M' '.'y'r'o't's'i'h' 'e'h't' 'n'i' 't'n'i'o'p' 'r'o'i'r'p' 'a' 't'a' '$')'r'e'd'l'o'h'e'c'a'l'p'' ','r'e'd'l'o'h'e'c'a'l'p'' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm''='i'_'o'$' 'n'o'i't'a'r'e'p'o' 'n'''''''''''''''''''''' 'r'o'i'r'p' 'a' 'e'b' 't's'u'm' 'e'r'e'h't' ','y't'i'l'a's'u'a'c' 'y'b' 'o's' ','t's'i'l' 'e'h't' 'n'i' 's't's'i'x'e' 't'i' 'f'i' 'd'e't'e'l'e'd' 'e'b' 'y'l'n'o' 'n'a'c' 't'n'e'm'e'l'e' 't's'i'l' 'A'''''''''''''''''''''''''''''''''''''''''''''''''h't' ','y't'i'l'a's'u'a'c' 'y'B' '.'$')'}'d'i'{'t'i'h't'a'm''('}'e't'e'l'e'd'{'f's'h't'a'm''='}'1'+'n'{''''''''_'o'$' 't'a'h't' 'e's'a'c' 'e'h't' 'r'e'd'i's'n'o'c' 't's'r'i'F' '.'d'e't'r'e's'n'i' 'e'b' 'y'a'm' 't'a'h't' '$'}'1'+'n'{'_'o''''P'$' 'n'o'i't'a'r'e'p'o' 'f'o' 'e'p'y't' 'h'c'a'e' 'g'n'i'r'e'd'i's'n'o'c' ','e's'a'c' 'y'b' 'e's'a'c' 'p'e't's' 'n'o'i't'c'u'd'n'i' 'e'h't' 'w'o'h's' 'e'W'n'n'p'a'{'m'r'h't'a'm''('}'y'l'p'p'a'{'m'r'h't'a'm'''''''' '=' '''}'}'l'a'n'i'f'{'m'r'h't'a'm''_'A' '$'$'n':'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'$'n'_'o' 's't'o'd'' '1'_'o'='p'_'''''''''''''''''''''''''''''''''''''''''''''{'h'p'm'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'n'''''''u'm'a'''''''''''''''$'n'$' 'h't'g'n'e'l' 'f'o' ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'r'o'f'''''''''''''''''''''''''''' 'g'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e't'a't's' 'l'a'n'i'f' 'e'm'a's' 'e'h't' 'n'i' 's't'l'u's'e'r' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'i'y'l'p'p'a' ','''i'y'l'p'p'a''''''''''''''''''''''''''''''''''''''''''' 'y'a'w' 's'i'h't' 'd'e't'c'u'r't's'n'o'c' 's'e'i'r'o't's'i'h' 'e'h't' 'f'o' 'l'l'a' 't'a'h't' 'w'o'h's' 'n'e'h't' 't's'u'm' 'e'W' '.'$'2'_'H'$' 'r'o' '$'1'_'H'$'''''''''''''''''''''''''''' '.'y'r'o't's'i'h' 'r'e'h't'i'e' 'n'i' 'n'o'i't'i's'o'p''''''''''''''''''''''''''''' 'y'd'a'e'r' 'y'l'l'a's'u'a'c' 'y'n'a' 't'a' '$'}'1'+'n'{'_'o'$' 'n'o'i't'a'r'e'p'o' 'n'a' 'g'n'i't'r'e's'n'i' 'y'b' '$'1'+'n'$' 'h't'g'n'e'l' 'f'o' 's'e'i'r'o't's'i'h' 'w'e'n' 't'c'u'r't's'n'o'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'b' 'y'r'o't's'i'h' 'e'h't' 'd'n'e't'x'e' 'n'a'c' 'e'w' ',''''''''''''''''''''''''''''''''''''$'2'_'H'$' 'g'n'i'y'l'p'p'a' 's'a' 'e't'a't's' 'e'm'a's' 'e'h't' 'n'i' 's't'l'u's'e'r' '$'1'_'H'$' 'g'n'i'y'l'p'p'a' 't'a'h't' 'h'c'u's' 'd'n'a''''w' ','$'1'_''''1'H'$' 'f'o' 'n'o'i't'a't'u'm'r'e'p' 'a' 's'i' '$'2'_'H'$' 'd'n'a' '$'n'_'o' 's't'o'd'' '1'_'o'='1'_'H'$' 't'a'h't' 'h'c'u's' ','$'2'_'H'$' 'd'n'a' '$'1'_'H'$''''H' 's'e'i'r'o't's'i'h' 'l'a's'u'a'c' 'n'e'v'i'G' '}':'p'e't's' 'n'o'i't'c'u'd'n'I'{'h'p'm'e''n'n'.'e't'a't's' 'e'm'a's' 'e'h't' 'n'i' 'n'o'i't'i'n'i'f'e'd' 'y'b' 'e'r'a' 's'n'o'i't'a'r'e'p'o' 'y'n'a' 'd'e't'u'c'e'x'e' 't'o'n' 'e'v'a'h' 't'a'h't' 's'r'e'e'p' 'o'w't' 'y'n'a' 'o's' ','d'e'n'i'f'e'd' 'y'l'l'a'c'i't's'i'n'i'm'r'e't'e'd' 's'i' 't'n'e'm'u'c'o'd' 'y't'p'm'e' 'n'A' '.'t'n'e'm'u'c'o'd' 'y't'p'm'e' 'n'a' 's'e'b'i'r'c's'e'd' 's'n'o'i't'a'r'e'p'o' '$'0'='n'$' 'f'o' 'y'r'o't's'i'h' 'A' '}'''''''''''':'e's'a'c' 'e's'a'B'n'n'.'$'n'$' 'y''''''''''$' 'n'r'o't's'i'h' 'e'h't' 'f'o' 'h't'g'n'e'l' 'e'h't' 'r'e'v'o' 'H'$' 's'n'o'i't'a'r'e'p'o' 'f'o' 'e'c'n'e'u'q'e's' 'a' 'f'o' 'g'n'i't's'i's'n'o'c' ','$'p'$' 'r'e'e'p' 't'a' '$'p'_'H'$'''''''''' 't'a' 's'n'o'i't'a'r'e'p'o' 'f'o' 'y'r'o't's'i'h' 'e'h't' 'r'e'd'i's'n'o'C''''''''''''''''''''''''''''''''''''''n'o'i't'c'u'd'n'i' 'y'b' 'm'e'r'o'e'h't' 'e'h't' 'e'v'o'r'p' 'n'a'c' 'e'W''''C''''W'n'n'.'y'r'o't's'i'h' 'e'h't' 'f'o' 'r'e'd'r'o' 'e'h't' 'n'i' 's'n'o'i't'a'r'e'p'o' 'e'h't' 'g'n'i'y'l'p'p'a' 'd'n'a' 'r'e'e'p' 'h'c'a'e' 't'a' 's'n'o'i't'a'r'e'''''''''p'o' 'f'o' '}'y'r'o't's'i'h'{'h'p'm'e'' 'e'h't' 'g'n'i'r'e'd'i's'n'o'c' 'y'b' 'r'e'e'p' 'a' 'f'o' 'e't'a't's' 'e'h't' 'e'v'i'r'''''''''''''''''''''' 'e'b'i'r'c's'e'd' 'n'a'c' 'e'w' ','s'n'o'i't'a'r'e'p'o' 'y'b' 'y'l'n'o' 'd'e'i'f'i'd'o'm' 's'i' 'r'e'e'p' 'a' 'f'o' 'e't'a't's' 'e'h't' 'd'n'a' ','r'e'd'r'o' 'l'a'i't'n'e'u'q'e's' 'e'm'o's' 'n'i' 's'n'o'i't'a'r'e'p'o' 's'e's's'e'c'o'r'p' 'r'e'e'p' 'h'c'a'e' 'e'c'n'i'S'''''''''''''''''''''''''r'e'd'i's'n'o'C'''''''''''''''''''''''''i's'n'o'c' 'e'W''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'n'o'i't'a'r'e'p'o' 'l'l'a' 'g'n'i's's'e'c'o'r'p' 'r'e't'f'a' 's'''e'r'a'''''''t''''''''''''''''''''''''''''''''''n'n'.'l'a'c'i't'n'e'd'i' 's'i' 'e't'a't's' 'l'a'n'i'f' 'r'i'e'h't' ','s'r'e'd'r'o' 't'n'e't's'i's'n'o'c' 'y'l'l'a's'u'a'c' 't'n'e'r'e'f'f'i'd' 'n'i' ','s'n'o'i't'a'r'e'p'o' '$'}'e't'e'l'e'd'{'f's'h't'a'm''$' 'd'n'a' '$'}'t'r'e's'n'i'{'f's'h't'a'm'''''''e't''$''''' 'f'o' 't'e's' 'e'm'a's' 'e'h't' 's's'e'c'o'r'p' 's'r'e'e'p' 'o'w't' 'f'I' '}'.'m'e'r'o'e'h'T'{'f'b't'x'e't''n'n'.'e'r'u't'c'u'r't's' 'a't'a'd' 's'i'h't' 'r'o'f' ','}'y'c'n'e't's'i's'n'o'c' 'l'a'u't'n'e'v'e'{'h'p'm'e'' 's'a' 'n'w'o'n'k' 'o's'l'a' ','y't'r'e'p'o'r'p' 'e'c'n'e'g'r'e'v'n'o'c' 'e'h't' 'e'v'o'r'p' 'w'o'n' 'e'W'n'n'}'e'c'n'e'g'r'e'v'n'o'C'{'n'o'i't'c'e's'b'u's''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'l'i'a't'{'f's'h't'a'm'' '=' '}'d'i'{'t'i'h't'a'm'' ';''''';'}' 'f'i'{'t'x'e't'' 'd'a'u'q'' ']'[''''p' ' ' ' 'n''' 't'o'b'' '=' 'v' ';''e'g'd'e'w'';'' ')'n' ','v'(' '=' ')'}'d'i'{'t'i'h't'a'm''('A' ';''}' 'f'i'{''''''''' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ''''''''''''''''''''''''''''''''t'x'e't'' 'd'a'u'q'' ')'n' ','A'('}'r'e't'i'{'m'r'h't'a'm'' ' ' ' 'n''' 't'o'b'' 'q'e'n'' 'v' ';''e'g'd'e'w'''''w';'' ')'n' ','v'(' '=' ')'}'d'i'{'t'i'h't'a'm''('A' ';''''';'}' 'f'i'{'t'x'e't'' 'd'a'u'q'' ')'n' ','A'('}'r'e't'i'{'m'r'h't'a'm'' '}':':'{'n'i'b'h't'a'm'' ''''''''''''' ':':' ']'v'[' ' ' ' 'n'''''''''''''}'s'e's'a'c'{''''['d'n'e''n'}'s'e's'a'c'{'n'i'g'e'b'' '='&' ')'}'d'i''''I'{'t'i'h't'a'm'' ','A'('}'r'e't'i'{'m'r'h't'a'm''n''''' ')'}'d'a'e'h'{'f's'h't'a'm'' ','A'('}'r'e't'i'{'m'r'h't'a'm'''''''t'a'' '=' ')'A'('}'w'e'i'v'{''''('m'r'h't'a'm''n''''''''''''''}'*'n'g'i'l'a'{'d'n'e''n'}'*'n'g'i'l'a'{'n'i'g'e'b''n':')'s'e'n'o't's'b'm'o't'(' 's't'n'e'm'e'l'e' 'd'e't'e'l'e'd' 'y'n'a' 'g'n'i'p'p'i'k's' ','$'}'l'i'a't'{'f's'h't'a'm''$' 'o't' '$'}'d'a'e'h'{'f's'h't'a'm''$''''' 'm'o'r'f' 's't'n'e'm'e'l'e' 't's'i'l' 'e'h't' 'r'e'v'o' 's'e't'a'r'e't'i' 'A' 't's'i'l' 'a' 'f'o' 'w'e'i'v' 'r'e's'u' 'e'h'T'n'n''''''{'''''t'''''i'''''h'''''t'''''a'''''m''''''''$''''''''''''''%''''' '''''.'''''t'''''s'''''i'''''l''''' '''''e'''''h'''''t''''' '''''f'''''o''''' '''''d'''''a'''''e'''''h''''' '''''e'''''h'''''t''''' '''''g'''''n'''''i'''''t'''''a'''''c'''''i'''''d'''''n'''''i''''' ''''','''''$'''''}'''''d'''''a'''''e'''''h'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''$''''' '''''l'o'b'm'y's' 'l'a'i'c'e'p's' ''''''d'a'u'q''e'h't' 'r'o' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'a' 'r'e'h't'i'e' 's'i' '$'}'d'i'{'t''''d'i'h't'a'm''$' 'r'e't'e'm'a'r'a'p' 'e'h'T' 't' ','r'e'h't'o'n'a' 'e'r'o'f'e'b' 'd'e'n'e'''''d'a'u'q'''p'p'a'h' 'n'o'i't'a'r'e'p'o' 'e'n'o' 'f'I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'$')'p' ','c'('$''''(' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'y'n'a' 'r'o'f' '$'}'d'a'e'h'{'f's'h't'a'm''''''''a'm' '<' ')'p' ','c'(' '<' '}'l'i'a't'{'f's'h't'a'm''$' 't'a'h't' 'n'o'i't'i'd'd'a' 'e'h't' 'h't'i'w' ','s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'n'o' 'r'e'd'r'o' 'l'a't'o't' 'e'h't' 's'i' '$'<'$' 'e'r'e'h'w'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'w'o'l' 'a' 's'a'h'''''''''''''''''''''''''''''''''''''e'e't'n'a'r'a'u'g' 's'i' '$'1'_'o'$' 'n'e'h't' ','$'2'_'o'$' 'e'r'o'f'e'b' 'd'e'n'e'p'p'a'h' '$'1'_'o'$' 'n'o'i't'a'r'e'p'o' 'f'i' ','s'i' 't'a'h't' ','y't'i'l'a's'u'a'c' 'h't'i'w' 't'n'e't's'i's'n'o'c' 's'i' 'g'n'i'r'e'd'r'o' 's'i'h'T'n'$'$'.')'2'_'p' '<' '1'_'p' 'e'g'd'e'w'' '2'_'c' '=' '1'_'c'(' 'e'e'v'' ')'2'_'c' '<' '1'_'c'(' 'd'a'u'q''}'f'f'i'{'t'x'e't'''''{'d'a'u'q'' ')'2'_'p' ','2'_'c'(' '<' ')'1'_'p' ','1'_'c'('''' '$'$'n':'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'r'o'f'''''''''''''''''''''''''''''''''''''''''''''' '.'s'n'o'i't'a'r'e'p'o' 'n'o' 'g'n'i'r'e'd'r'o' 'l'a't'o't' 'a' 'e'n'i'f'e'd' 's'u'h't' 'n'a'c' 'e'W'n'n'.'s'e'u'l'a'v' 'r'e't'n'u'o'c' 'l'a'u'q'e' 'e'v'a'h' 'n'a'c' 's'n'o'i't'a'r'e'p'o' 't'n'e'r'r'u'c'n'o'c' 'y'l'n'O' '.'$'1'_'o'$' 'n'a'h't' 'e'u'l'a'v' 'r'e't'n'u'o'c' 'r'e't'a'e'r'g' 'a' 'e'v'a'h' 't's'u'm' '$'2'_'o'$' 'n'e'h't' ',')'d'e't'a'r'e'n'e'g' 's'a'w' '$'2'_'o'$' 'e'r'o'f'e'b' '$'1'_'o'$' 'd'e's's'e'c'o'r'p' 'd'n'a' 'd'e'v'i'e'c'e'r' 'd'a'h'''''''''''''''''''''''''''''''''''''''''''''' 'e'h't' 't'u'o'b'a' 'w'e'n'k' '$'2'_'o'$' 'd'e't'a'r'e'n'e'g' 't'a'h't' 'r'e'e'p' 'e'h't' ','s'i' 't'a'h't'(' '$'2'_'o'$' 'e'r'o'f'e'b' 'd'e'n'e'p'p'a'h' '$'1'_'o'$' 'n'o'i't'a'r'e'p'o' 'f'i' 't'a'h't' 's'e'r'u's'n'e' 's'i'h'T' ''''''''.'r'e't'n'u'o'c' 'g'n'i'm'o'c'n'i' 'e'h't' 'f'o' 'e'u'l'a'v' 'e'h't' 'o't' 'd'e's'a'e'r'c'n'i' 's'i' 'r'e't'n'u'o'c' 'l'a'c'o'l' 'e'h't' ','e'u'l'a'v' 'r'e't'n'u'o'c' 'd'e'r'o't's' 'y'l'l'a'c'o'l' 'e'h't' 'n'a'h't' 'r'e'''' 't'a'e'r'g' 's'i' 't'a'h't' '$'c'$' 'e'u'l'a'v' 'r'e't'n'u'o'c' 'a' 'h't'i'w' 'n'o'i't'a'r'e'p'o' 'n'a' 's'e'v'i'e'c'e'r' 'r'e'e'p' 'a' 'f'I'''''''''''''''' 'n'e'h'W''''r'o'f' ''e'm''''''''''''''''''''''''''I' '.'e'g'a's's'e'm' 'e'h't' 'n'i' 'd'e'd'u'l'c'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i't' 't'r'o'p'm'a'L' 'e'h't' ','s'r'e'e'p' 'r'e'h't'o' 'o't' 't'n'e's' 's'i' 'n'o'i't'a'r'e'p'o' 'n'a' 'r'e'v'e'n'e'h'W'''''''''''''''''''''''''''''''''''''''''''''''''''r'e'h't'o' 'o't' 't'n'e's' 's'i' '$')'p' ','c'('$' 'r'i'a'p' 'e'h'T'''m''''' ''''''''''''''''''''''''''''''''''''''''''''''' 'n'a' 's'e'v'i'e'c'e'r' 'r'e'e'p' 'a''''''''''''''''''''''''''''''''''''''''''''''''''' 'r'e'v'e'n'e'h'w' ','r'e'v'o'e'r'o'M' '.'n'o'i't'a'r'e'p'o' 'y'r'e'v'e' 'r'o'f' 'd'e't'n'e'm'e'r'c'n'i' 'd'n'a' 'e'd'o'n' 'h'c'a'e''''''s'''''i''' 't'i'd'e' 'e'h't' 'h'c'i'h'w' 'n'o' 'e'd'o'n' 'e'h't' 'f'o' 'r'e'i'f'i't'n'e'd'i' 'e'u'q'i'n'u' 'e'h't' 's'i' '$'n'$' '''''''''''''''''''''''''''''''''''''''''' 'e'd'o'n' 't'a' 'd'e'r'o't's' 's'i' 't'a'h't' 'r'e't'n'u'o'c' 'a' 's'i' '$'c'$' 'e'r'e'h'w' '$')'n' ','c'''')'('$''''(' 'r'i'a'p' 'a' 's'i' 'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'A'n'n'''' '.'}'q'j'8'7'9'1':'t'r'o'p'm'a'L'{'e't'i'c''~'s'p'm'a't's'e'm'i't' 't'r'o'p'm'a'L' 'g'n'i's'u' 'n'o'i't'a'r'e'p'o' 't'i'd'e' 't'a'h't' 'r'o'f' 'r'e'i'f'i't'n'e'd'i' 'e'u'q'i'n'u' 'a' 'e't'a'r'e'n'e'g' 'e'w' ','s'r'e'e'p' 'e'h't' 'f'o' 'e'n'o' 't'a' 'e'd'a'm' 's'i' 't'n'e'm'u'c'o'd' 'a' 'o't' 't'i'd'e' 'n'a' 'r'e'v'e'n'e'h'W''''''''''''''''''''''''''''''''''''' 'n'e'h't' 'n'a'c' 'e'W' '.')'y'e'k' 'c'i'l'b'u'p' 's't'i' 'f'o' 'h's'a'h' 'e'h't' ','e'l'p'm'a'x'e' 'r'o'f'(' 'r'e'i'f'i't'n'e'd'i' 'e'u'q'i'n'u' 'a' 's'a'h' 'r'e'e'p' 'h'c'a'e' 't'a'h't' 'e'm'u's's'a' 'e'W'n'n'o''''''''''''''''''''''''''''''''''''''n'}'s'n'o'i't'a'r'e'p'''''''''''''a'r'e'P'O' 't's'i'L' 'd'e'r'e'd'r'O'{'n'o'i't'c'e's'b'u''''b's''n''b'e'k'a'm'' ' 'n'%'{'r'e'd'l'o'h'e'c'a'l'p''d'n'a'm'm'o'c'w'e'n''n'e'd'o'm' 'h't'a'm' 'n'i' 's'k'r'o'w' 't'u'b' ',''c' 'r'e'd'l'o'''''''o'j'h'''' 'e'c'a'l'P'''''''''''''''''''''''e'c'a'p's'e'l'b'i's'i'v't'x'e't'' 'e'k'i'L' '%'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''''''''''D'''I'm'e't'I'''''''''''''''''('$''''''t's'i'l'''''' '''''''''f'o' 'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''f's''''''''''''''$'}'d'a'e'h'{'t'i'h't'a'm''$' 'e'u'l'a'v' 'e'l'g'n'i's' 'e'h't' 's'i' 'n'i'a'm'o'd' 'e's'o'h'w' 'n'o'i't'c'n'u'f' 'a''''''''''''''''''''''s'w'o'l'l'o'f' 's'a'''''''''''''''}'d'a'e'h'{'f's'h''''''''''''}'l'i'a't'{'f's''''''''''''''''''''''''',''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'g'i''&'l'a''''''''''''''''''''''''''''''''''''n'}'*'n'o'i't'a'u'q'e'{'n'i'''''g'e' '''='&''''&''b''''''''' '''$''''''' 'd'a'u'q''$'''''''''''''''''''''''''''''''''''''''''''''''''''q''''''''''''''''''''''''' ''''''';''''l''''''''''''''''''''' ' ' ''';''''''';''''''''''''''''''''''''' 'd'a'u'q''''n' '<' '}''';''d'i'{'t'i'h't'a'm'''''''''''''' '>' 'n' 'e'g'd'e'w'' '' 'n'''''''''''''''q'''''''''''''''''''''''''''''''''''''''''''''''';'''''''''A'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'}'d'i'{'t'i'h't'a'm''(''''''''''''''''''''''''''''''''''''''''''''''''''''''''T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('''''''''''&'n'''' ''''''''''''''''''''''''''''''''''''''''''''''''n''''d'a'u'q''''''''''''' '';''''''''''''''''''''''''''''d'n'e''''''''''''''''''''''''')'n' ','r'e'd'l'o'h'e'c'a'l'p''(' '='''''' ')'}'d'i'{'t'i'h't'a'm''('A' '}'f'i'{'t'x'e't'';'' ']','')'n' ','t'o'b''(' 'o't's'p'a'm'' '}'d'i'{'t'i'h't'a'm'',''['A' '''''''''''''''n'}'*''''&'n'g'i'l'a'{'n'i'g'e'b'''=' ')')''''''}'d'i'{'t'i'h't'a'm''{'}''''('e't'e'l'e'd'{'f's'h't'a'm''('}'y'l'p'p'a'{'m'r'h't'a'm'' '='&' '''A'n'}'*'n'g'i'l'a'{'n'i'g'e'b'''''''''''''g'e'b'e''n':'s'c'i't'n'a'm'e's' 'g'n'i'w'o'l'l'o'f' 'e'h't' 's'a'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''t' 'd'e'i'l'p'p'a' 's'i' 'n'o'i't'a'r'e'p'o' 'e'h't' 'n'e'h'W' '.'t's'i'l' 'e'h't' 'm'o'r'f' '$'}'d'i'{'t'i'h't'a'm''$' 'D'I' 'h't'i'w' 't'n'e'm'e'l'e' 'e'h't'''''''''''''''''''''''''' 'e't'e'l'e'd' 'o't' 'n'o'i't'c'u'r't's'n'i' 'n'a' 's'i' '$'}'e't'e'l'e'd'{'f's'h't'a'm''$''''' 'n'o'i't'a'r'e'p'o' 'e'h'T'n'n'.'w'o'l'e'b' 'y'l'l'a'm'r'o'f' 'd'e'v'o'r'p' 's'i' 'y't'r'e'p'o'r'p' 's'i'h'T' '.'t's'i'l' 'e'h't' 'f'o' 'n'o'i't'i's'o'p' 'e'm'a's' 'e'h't' 't'a' 'e'd'a'm' 's'n'o'i't'r'e's'n'i' 't'n'e'r'r'u'c'n'o'c' 'g'n'i'r'e'd'r'o' 'y'l'l'a'c'i't's'i'n'i'm'r'e't'e'd' 'f'o' 't'c'e'f'f'e' 'e'h't' 's'a'h' 's'i'''''''''' 's'u'h'T' '.'d'e't'r'e's'n'i' 'g'n'i'e'b' 't'n'e'm'e'l'e' 'w'e'n' 'e'h't' 'f'o' 'D'I' 'e'h't' 'n'a'h't' 'r'e't'a'e'r'g'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'D'I' 'n'a' 'h't'i'w'''''''''''''''' 't'a'h't' 's't'n'e'm'e'l'e' 't's'i'l' 'r'e'v'o' 's'p'i'k's' 't's'r'i'f' 'n'o'i't'c'n'u'f' 'e'h't' 't'a'h't' 't'p'e'c'x'e'''''''''''''''''''''''''e'h't' 'h't'i'w' ','t's'i'l' 'd'e'k'n'i'l' 'a' 'o't'n'i' 't'n'e'm'e'l'e' 'n'a' 'g'n'i't'r'e's'n'i' 'e'k'i'l' 's'i' 'n'o'i't'a'r'e'p'o' '$'}'t'r'e's'n'i'{'f's'h't'a'm''$''''' 'n'a' 'g'n'i'y'l'p'p'a' ','y'l'l'a'm'r'o'f'n'i' 'd'e'n'i'a'l'p'x'E'n'n'';''''''''''''''''''''''''''''''''}'d'i'{'t'i'h't'a'm'' '<' 'n' 'e'g'd'e'w'' ')'n' ','p'_'v'(' '=' ')'}'v'e'r'p'{'t'i'h't'a'm''('A' '''''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''' '''';'''''''''''''''''''''''''''''''''''''''n'g'i'l'a''' ''''' ''''' '''''n'''''''''''''''''''''''''''''''',''']'''''''''''''''''''}' 'f'i'{'t'x'e't''d'a'u'q'' '&' ')'n' ','v'(' 'o't's'p'a'm'' '}'d'i'{'t'i'h't'a'm'' ',')'}'d'i'{'t'i'h't'a'm'' ','p'_'v'(' 'o't's'p'a'm'' '}'''']'v'e'r'p'{'t'i'h't'a'm''['A'n''' ''''''''''''''''''''''''''''''n'}'*'n'o'i't'a'u'q'e'{'d'n'e''n''''''''''''''''''''''''''''''''''''')')'v' ','n' ','' '''}'''''''$'$'''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'n' ','r'e'd'l'o'h'e'c'a'l'p''(' '=' ')'}'v'e'r'p'{'t'i'h't'a'm''('A' 'd'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'' ','A'('}'y'l'p'p'a'{'m'r'h't'a'm''''''''''''''''''''''''''''''''}'o'o'f' 'f'i'{'t'x'e't''d'a'u'q'' '&' 'a'n'''''''''''''}'s'e's'a'c'{'d'n'e''n'}'s'e's'a'c'{'n'i'g'e'b''n''' '''''''''''''''''''''''''''''''''''''''''''''''=' ')')'v' ','}'v'e'r'p'{'t'i'h't'a'm'' ','''' '}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm'' ','A'('}'y'l'p'p'a'{'m'r'h't'a'm'' '=' 'e'm'i'r'p''^'A'n''''''''''''''}''''&'*'n'g'i'l'a'{'d'n'e''n'}'*'''''''*'&'n'g'i'l'a'{'n'i'g'e'b''n':'s'w'o'l'l'o'f' 's'a' '$'e'm'i'r'p''^'A'$' 'e't'a't's' 't's'i'l' 'd'e'i'f'i'd'o'm' 'a' 's'e'c'u'd'o'r'p' 't'i' ','$'A'$' 'e't'a't's' 't's'i'l' 'e'h't''''''' 'a' 'o't' 'd'e'i'l'p'p'a' 's'i' 'n'o'i't'a'r'e'p'o' 'e'h't' 'n'e'h'W''''''''''''' 'e'h'T'n'n'.'n'o'i't'a'r'e'p'o' 's'i'h't' 'f'o' 'D'I' 'e'u'q'i'n'u' 'e'h't' 's'i' '$'}'d'i'{'t'i'h't'a'm''$' 'e'h'T' '.'$')'v' ','}'d'a'e'h'{'f's'h't'a'm'' ','}'d'i'{'t''''d'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm''$' 's'a' 'd'e's's'e'r'p'x'e' 's'i' 't's'i'l' 'e'h't' 'f'o' 'd'a'e'h' 'e'h't' 't'a' 'n'o'i't'r'e's'n'i' 'n'A' '.'''''''(' '$'}'v'e'r'p'{'t'i'h't'a'm''$' 'D'I' 'h't'i'w' 't'n'e'm'e'l'e' 't's'i'l' 'g'n'i't's'i'x'e' 'e'h't' 'g'n'i'w'o'l'l'o'f' 'n'o'i't'i's'o'p' 'a' 't'a' 't's'i'l' 'a' 'o't'n'i' '$'v'$' 'e'u'l'a'v' 'e'h't' 't'r'e's'n'i' 'o't' 'n'o'i't'c'u'r't's'n'i' 'n'a' 's'i' '$')'v' ','''' '}'v'e'r'p'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('}'t'r'e's'n'i'{'f's'h't'a'm''$' 'n'o'i't'a'r'e'p'o' 'e'h'T''n'n''''''.'$')'c','b'('=')'a'('A'$' 't'a'h't' 't'p'e'c'x'e' ','$'A'$' 'o't' 'l'a'c'i't'n'e'd'i' 'n'o'i't'c'n'u'f' 'a' 'e't'o'n'e'd' 'o't' '$']'')'c' ','b'(' 'o't's'p'a'm'' 'a'[''A'$' 'n'o'i't'a't'o'n' 'e'h't' 'e's'u' 'e'W'''''''''''''}''''''''''''''''''''''''e'r'$'''''}'s''l'i'a't'{'f's'h'''''''''l'i'a't' 'd'n'''''''''''''''y'''''l'''''''''''s'e't'o'n'e'd''''''e'''''v'''''''''''''''''i'''''''''''''''''t'''''''''''''''''c'''''''''''''''''e'''''''''''''''''p'''''''''''''''''s'''''''''''''''''e'''''''''''''''''r''''''''''''''''' ''''''''''''''''''''''''''a''''''''''''''''' ''''''''''''''''''''''''''t'''''''''''''''''a'''''''''''''''''m''''''''''''''''''''$''''' '''''d'''''n'''''a''''' ''''''''d'''''a'''''e'''''h'''''{'''''f'''''s'''''h'''''t'''''a'''''m''''''''''''''''''''h'''''''''''''''''t'''''''''''a'''''m''''''''''''''''''''t'''''''''''''''''a'''''''''''m''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'''''t'''''s'''''p'''''a'''''m'''''''' '''''''''''i''''''''('''''''''''''''''a'''''''''''p''''' '''''a''''' '''''o'''''t''''' '''''$'''''''' '''''n'''''a''''' '''''m'''''o'''''r'''''f''''' '''''n'''''o'''''i'''''t'''''c'''''n'''''u'''''f''''' '''''l'''''a'''''i'''''t'''''''''''r'''''''''''''''''a'''''''''''''''''p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''~'s'T'D'R'C'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '&''''s's'e'&''n't'c'e'r'r'o'c'''''''''''''''''''''''''''''r'e'&''d'l'o'h'e'c'a'l'p'''''''''''''''''''''''''''''''''''''&'&''''''''''''''''''''''''''''''''''''''''q't''''''''''''&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'd'l'o'h'e'c'a'l'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$'t'e's'y't'''''''''''''''''''''''''''''''''''''''''''' '$'$''''''''''''''''''''''''''''''''''''''$'$' '''''''''''''''''''''''''''''''''''''''''''''''*'''''''''''''''''''''''''''''''''''''''''''''''}')'v'h's'a'd'''''''''''''''''''''''''''''''''''''''''t'x'e't''''''''''d'a'u'q'''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''v''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''A' 'n'i'' ')'e'c'a'p's'e'l'b''''s'i's'i'v't'x'e't'' ','v'''''' ','}'d'i'{'d'i'h't'a'm''(' 'd'a'u'q'' '}'t'a'h't' 'h'c'u's'{'t'x'e't'' 'd'a'u'q'' 'n' '='&' ' ')'}'d'i'{'t'i'h't'a'm'' ','A'('}'l'a'v'{'m'r'h't'a'm''n''''''''''''''''''''''''n'g'i'l'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&'&''''''''''''''''''''''''''''''''''''''''''''''''n'g'i'l'a'''''''''''''''''''''t'''x'e't'''''''''''''''''''''''A' 'n'i'' ')'n' ','e'c'a'p's'e'l'b'i's'i'v'' ','}'d'i'{'t'i'h't'a'm''(' ';'' '}'t'a'h't' 'h'c'u's'{'m'r'h't'a'm'' 'd''''t'a'u'q'' 'n''''' '=' ')'}'d'i'{'t'i'h't'a'm'' ','A'('}'t'x'e'n'{'m'r'h't'a'm''n'''''''''''''''''}'*'y'a'r'r'a'n'q'e'{'d'n'e''n'}'*'y'a'r'r'a'n'q'e'{'n'i'g'e'b''n':'$'A'$' 'e't'a't's' 'e'h't' 'g'n'i's's'e'c'c'a' 'r'o'f' 's'n'o'i't'c'n'u'f' 'e'c'n'e''''c'i'n'e'v'n'o'c' 'e'm'o's' 'e'n'i'f'e'd''''t''''''''''''' 'n'a'c' 'e'W'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'u'l'a'v' 'a' 'f'o' 'e'c'n'e's'b'a''''b' 'e'h't' 's'i' '$'t'o'b''$' 'd'n'a' ','t's'i'l' 'e'h't' 'f'o' 'd'n'e' 'e'h't' 's'e't'a'c'i'd'n'i' '$'v'h's'a'd''$' ','t's'i'l' 'e'h't' 'f'o' 'd'a'e'h' 'e'h't' 'g'n'i't'o'n'e'd' 'D'I' 'l'a'i'c'e'p's' 'a' 's'i' '$'h's'a'd'v''$' 'e'r'e'h'w'n' ','t'o'b'' ','h's'a'd'v''('{' '=' 't'e's'y't'p'm'e''_'A'n''''''''''''''''}'n'o'i't'a'u'q'e'{'d'n'e''n'}'n'o'i't'a'u'q'e'{'n'i'g'e'b''n':'e'l'p'u't' 'e'l'g'n'i's' 'a' 'g'n'i'n'i'a't'n'o'c' 't'e's' 'a' 'y'b' 'd'e't'p'm'e''_'A'$' '''''''''''''n'e's'e'r'p'e'r' 's'i' 'y'a'r'r'a' 'y't'p'm'e' 'e'h'T' '.'$')'}'t'x'e'n'{'t'i'h't'a'm'' ','}'e'u'l'a'v'{'t'i'h't'a'm'' ','}'d'i'{'t'i'h't'a'm''('$''''(' 's'e'l'p'i'r't' 'f'o' 't'e's' 'a' 's'i' 'h'c'i'h'w' ','$'A'$' 'e't'a't's' 's't'i' 'f'o' 'y'p'o'c' 'a' 's'e'r'o't's' 'A'G'R' 'n'a' 'f'o' 'a'c'i'l'p'e'r' 'a' 's'n'i'a't'n'i'a'm' 't'a'h't' 'r'e'e'p' 'h'c'a'E'n'n'.'s'f'o'o'r'p' 'o't' 'e'l'b'a'n'e'm'a' 'e'r'o'm' 's'i' 'h'c'i'h'w' 'm'r'o'f' 'e'v'i't'a'n'r'e't'l'a' 'n'a' 'n'i' 'm'h't'i'r'o'g'l'a' 'e'h't' 't'n'e's'e'r'p' 'e'w' 'n'o'i't'c'e's' 's'i'h't' 'n'I' '.'}'w'd'1'1'0'2':'h'o'R'{'e't'i'c''~'e'd'o'c'o'd'u'e's'p' 'g'n'i's'u' ''.'l'a' 't'e' 'h'o'R' 'y'b' 'd'e'n'i'f'e'd' 'y'l'l'a'n'i'g'i'r'o' 's'a'w' 'e'p'y't'a't'a'd' ')'A'G'R'(' '}'y'a'r'r'A' 'e'l'b'a'w'o'r'G' 'd'e't'a'c'i'l'p'e'R'{'h'p'm'e''''''''''''''l'p'e'R' 'e'h'T'n'n'}'s'c'i't'n'a'm'e'S' 'l'a'n'o'i't'a'r'e'p'O'{'n'o'i't'c'e's''n''n','y'w'1'1'0'2':'o'r'i'p'a'h'S''''''''''''}'w'd'1'1'0'2':'h'o'R'{'e't'i'c''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''}'}'{'}'s'e'c'n'e'r'e'f'e'r'{'y'h'p'a'r'g'o'i'l'b'i'b''n'}'t'a'n'n'i'a'l'p'{'e'l'y't's'y'h'p'a'r'g'o'i'l'b'i'b''n'e'z'i's'e't'o'n't'o'o'f''{'n'''''''''''''''''n'}'t'n'e'm'u'c'o'd'{'d'n'e''n'n'n'}'n'o'i't'c'u'd'o'r't'n'I'{'n'o'i't'c'e's''n'n'}'t''''''''''}'t'g'c'a'r't's'b'A'{'*'n'o'i't'c'e's'b'u's''n'n'e'l't'i't'e'k'a'm''n'}'{'r'o'h't'u'a''n'}'g'n'i't'i'd'E' 't'n'e'm'u'c''''''''''''''''t'n'e'm'u'o'D' 'e'v'i't'a'r'o'b'a'l'l'o'C' 'r'o'f' 's'e'r'u't'c'u'r't'S' 'a't'a'D' 'g'n'i's'o'p'm'o'C'{'e'l't'i't''n'y'p'p'o'l's''n'}'t'n'e'm'u'c'o'd'{'n'i'g'e'b''n'n'g'n'i'c'a'p's'h'c'n'e'r'f''n'}'s'r'e't'-'n'e'c'-'a't'-'a'd' 'r'e't'-'n'e'c'-'a't''''d'-'''''''a't'a'd'{'n'o'i't'a'n'e'h'p'y'h''n'}'b''''t'i'b't'a'n'{']'t'r'o's','s'r'e'b'm'u'n'['e'g'a'k'c'a'p'e's'u''n'}'f'e'r'r'e'p'y'h'{'e'g'a'k'c'a'p'e's'u''n'}'i'o'd'{'e'g'a'k'c'a'p'e's'u''n'}'l'r'u'{']'s'n'e'h'p'y'h'['e'g'a'k'c'a'p'e's'u''n'h't'a'm' 'g'n'i'd'u'l'c'n'i' ','n'a'm'o'r' 's'e'm'i't' '%' '}'x'm't'p'h't'a'm'{'e'g'a'k'c'a'p'e's'u''n'}'c'n'e't'u'p'n'i'{']'8'f't'u'[''''{'e'g'a'k'c'a'p'e's'u''n'}'e'l'c'i't'r'a'{']'t'p'0'1','n'm'u'l'o'c'o'w't','r'e'p'a'p'4'a'['s's'a'l'c't'n'e'm'u'c'o'd'' \ No newline at end of file diff --git a/bench.mlb b/bench.mlb index c82f437..6b219e8 100644 --- a/bench.mlb +++ b/bench.mlb @@ -14,4 +14,6 @@ rope.sml tiny_rope23.sml +gap_buffer.sml + utils.sml diff --git a/gap_buffer.sml b/gap_buffer.sml index 4f12ee7..04fb115 100644 --- a/gap_buffer.sml +++ b/gap_buffer.sml @@ -1,4 +1,13 @@ -structure GapBuffer = +signature GAP_BUFFER = +sig + type t = {idx: int, left: string list, right: string list} + val empty: t + val fromString: string -> t + val toString: t -> string + val insert: int * string * t -> t +end + +structure GapBuffer: GAP_BUFFER = struct type t = {idx: int, left: string list, right: string list} @@ -6,7 +15,8 @@ struct val empty = {idx = 0, left = [], right = []} - fun fromString string = {idx = 0, left = [], right = [string]} + fun fromString string = + {idx = String.size string, left = [string], right = []} local fun toList (acc, input) = @@ -26,22 +36,43 @@ struct fun isThreeLessThanTarget (s1, s2, s3) = String.size s1 + String.size s2 + String.size s3 <= targetLength + local + fun helpCalcIndex (left, total) = + case left of + [] => total + | hd :: tail => helpCalcIndex (tail, total + String.size hd) + in + fun calcIndex left = helpCalcIndex (left, 0) + end + + fun consLeft (curIdx, newString, left, right) = + { idx = curIdx + String.size newString + , left = newString :: left + , right = right + } + + fun preferInsertLeft (curIdx, newString, left, right) = + case left of + hd :: tail => + if isLessThanTarget (hd, newString) then + { idx = curIdx + String.size newString + , left = (hd ^ newString) :: tail + , right = right + } + else + (case right of + hd :: tail => + if isLessThanTarget (hd, newString) then + {idx = curIdx, left = left, right = (newString ^ hd) :: tail} + else + consLeft (curIdx, newString, left, right) + | [] => consLeft (curIdx, newString, left, right)) + | [] => consLeft (curIdx, newString, left, right) + fun ins (idx, newString, curIdx, left, right) : t = if curIdx = idx then - case left of - [] => {idx = String.size newString, left = [newString], right = right} - | hd :: tail => - if isLessThanTarget (hd, newString) then - { idx = curIdx + String.size newString - , left = (hd ^ newString) :: tail - , right = right - } - else - { idx = curIdx + String.size newString - , left = newString :: left - , right = right - } - else if curIdx < idx then + preferInsertLeft (curIdx, newString, left, right) + else if idx < curIdx then (* Need to insert on the left. *) case left of [] => @@ -52,11 +83,11 @@ struct val prevIdx = curIdx - String.size hd in if - prevIdx < idx + idx < prevIdx then (* The requested index is prior to the string on the left, * so move leftward one string. *) - ins (idx, newString, curIdx - String.size hd, tail, hd :: right) + ins (idx, newString, prevIdx, tail, hd :: right) else (* The requested index is either: * - At the start of the left string @@ -65,13 +96,13 @@ struct idx = prevIdx then (* At start of string. *) - if isLessThanTarget (hd, newString) then - {idx = prevIdx, left = tail, right = (newString ^ hd) :: right} - else - { idx = prevIdx + String.size newString - , left = newString :: tail - , right = hd :: right + if isLessThanTarget (newString, hd) then + { idx = curIdx + String.size newString + , left = (newString ^ hd) :: tail + , right = right } + else + {idx = prevIdx, left = tail, right = newString :: hd :: right} else (* In middle of string. *) let @@ -81,9 +112,9 @@ struct (hd, length, String.size hd - length) in if isThreeLessThanTarget (sub1, newString, sub2) then - { idx = prevIdx - , left = tail - , right = (sub1 ^ newString ^ sub2) :: right + { idx = curIdx + String.size newString + , left = (sub1 ^ newString ^ sub2) :: tail + , right = right } else if isLessThanTarget (sub1, newString) then { idx = prevIdx + String.size sub1 + String.size newString @@ -96,9 +127,9 @@ struct , right = (newString ^ sub2) :: right } else - { idx = prevIdx + String.size sub1 + String.size newString - , left = newString :: sub1 :: tail - , right = sub2 :: right + { idx = prevIdx + , left = tail + , right = sub1 :: newString :: sub2 :: right } end end @@ -110,19 +141,27 @@ struct let val nextIdx = String.size hd + curIdx in - if nextIdx > idx then + if idx > nextIdx then ins (idx, newString, nextIdx, hd :: left, tail) + else if idx = nextIdx then + (* At end of next string. *) + if isLessThanTarget (newString, hd) then + {idx = curIdx, left = left, right = (hd ^ newString) :: tail} + else + {idx = curIdx, left = left, right = hd :: newString :: tail} else let - val length = nextIdx - idx + val length = idx - curIdx val sub1 = String.substring (hd, 0, length) val sub2 = String.substring (hd, length, String.size hd - length) in if isThreeLessThanTarget (sub1, newString, sub2) then - { idx = curIdx - , left = left - , right = (sub1 ^ newString ^ sub2) :: tail + { idx = + curIdx + String.size sub1 + String.size newString + + String.size sub2 + , left = (sub1 ^ newString ^ sub2) :: left + , right = tail } else if isLessThanTarget (sub1, newString) then { idx = curIdx + String.size sub1 + String.size newString @@ -144,5 +183,4 @@ struct fun insert (idx, newString, buffer: t) = ins (idx, newString, #idx buffer, #left buffer, #right buffer) - end diff --git a/rust23_gap.txt b/rust23_gap.txt new file mode 100644 index 0000000..bfcf10e --- /dev/null +++ b/rust23_gap.txt @@ -0,0 +1 @@ +'/// This is an implementation of a general purpose skip list. It was originallyn/// ported from a version of skiplists intended for efficient string handlingn/// found here - https://github.com/josephg/rustropenn/// This implementation is not optimized for strings (there's some stringn/// specific features like unicode handling which have been intentionallyn/// removed for simplicity). But it does have another somewhat unusual feature -n/// users can specify their own size function, and lookups, inserts and deletesn/// can use their custom length property to specify offsets.''nn/// Unlike other rust rope implementations, this implementation should be veryn/// fast; but it manages that through heavy use of unsafe pointers and C-stylen/// dynamic arrays.nnuse std::{mem, ptr}''use std::mem::MaybeUninit;nuse std::ptr::NonNull;nuse std::alloc::{alloc, dealloc, Layout};nuse std::cmp::min;nuse std::marker::PhantomData;nuse std::iter;nnuse std::fmt;nnuse rand::{RngCore, Rng, SeedableRng};nuse rand::rngs::SmallRng;nn/// The likelyhood a node will have height (n'2'+1) instead of nnconst BIAS: u8 = 100; // out of 256.nn/// The number of it''''t's'i'L'ems in each node. Must fit in a u8 thanks to Node.n#[cfg(debug_assertions)]nconst NODE_NUM_ITEMS: usize ='10''2''10''2'''0'1''''1''''2' 10;nn#[cfg(not(debug_assertions))]nconst NODE_NUM_ITEMS: usize = 100;nn/// Rope operations will move to linear time after NODE_STR_SIZE * 2 ^n/// MAX_HEIGHT length. (With a smaller constant the higher this is). On the flipn/// side, cursors grow linearly with this number; so smaller is marginallyn/// better when the''''m'e't'I''''V''''T''''I''''I''' conten''''m'e''''m'e't't'I'''t''s'' ''a''r''e sm'I'''aller.n#[cfg(debug_assertions)]nco'5''2'nst MAX_HEIGHT: usize = 5;'m'n'e'n't'#'I'[cf''g('V'not''('m'd'e'''t'T'ebu''g_'I'ass''ertions'I'))]''nconst MAX_H'm'E'e''I''''m'I't'e''G''t'I'H'I'T:''m'' u'e'''s't'i'''V'ze ='''' 10;''m'T'''n'e'nnc'''t'''on'm'''I'I'e''st'''t' M''''AX_HE'V'IGHT_U8: '''I'u8''T'''''''''''''''''I'I'''''''Par'''m'tia'e'lE''t'''''I'''m'I'q']'''m''e'E''''e''' 't'''t',''>'I'I'''''''')'''q'm'''''m'''p'e'u''m'V'e''t''''b(su'e't''pe'm'r''''''I't''e') ''T''''I''t'''''''i't'''r''V'''a'''I''P'('e'''''v'i'''r''T'e'd'''['#'n''' ''''= MAX_'''I'''''I'''impl Default for ItemMarker {n fn default() -> Self { Self::null() }n}nn'''''I'''''''''''C''''''':':'t'm'f''''''g'u'b'e'D'l''on'''''''''''''''''''''''''''''':':'t'm'f''''''''''''t'm'f'''''':':'d'''':'t's''''''''''''''''''''' '''''''''''''''''''''';')'''r'e'k'r'a'M'm'e't'I'''('d'a'p'.'f' ''' }''n 'n ' '{' 't'l'u's'e'R' '>'-' ')'>''''''_'''<'r'e't't'a'm'r'o'F' 't'u'm'&' ':'f' ','f'l'e's'&'('t'm'f' 'n'f'''''''']''I''')'y'p''m'o'C' '''I''e''m'''m'' ','e't''e''''e''I'''C'''t''''''''l'p'm'i''''//! Utilities for formatting and pr'' /// An optimized method to calculate the userlen of a slice of ListItems.n /// The default implementation simply calls [`get_usersize`] in a loop.'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'p'o'o''n ''''''''''''''''''''d'e's's'a'p'''''''''''''''''''''''''''''''''''''''''''.'t'e's'&''''f'f'o' 'd'e'i'f'i'c'e'p's' 'e'm''n '// ' fn split_item(self, _at: usize) -> (Self, Self) {'o's' '''''''''''''s' 'a'''''''''''''p's' 'a' 't'a' ''''''''''''''''''s'm'e't'i' 'f'o' 'r'i'a'p' 'a' 'o't'''''''a' 'n'i'''t'a' 'm'e't'i' 'd'e'm'a'n''''e'p's' 'e'h't' 't'i'l'p'S' '/'/'/' 'l' 'a' 'n'i' ']'`'e'z'i's'r'e's'u'_'t'e'g'`'[''''g' 's'l'l'a'c' 'y'l'p'm'i's' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 't'l'u'a'f'e'd' 'e'h'T' '.'s'm'e't'I't's'i'L' 'f'o' 'e'c'i'l's' 'a' 'f'o' 'n'e'l'r'e's'u' 'e'h't' 'e't'a'l'u'c'l'a'c' 'o't' 'd'o'h't'e'm''''r'e'v' 'd'e'z'i'm'i't'p'o' 'n'A'''''''''g'n'e'l'''''r'e's'u' 'e'h'T' ''''''' '/'/'/'/''' '''''''''/'/'/' ''''''''''/'/'/'''n 'inting strings.nn#![stable(feature = 'rust1', since = '1.0.0')]nnuse crate::cell::{Cell, Ref, RefCell, RefMut, UnsafeCell};nuse crate::marker::PhantomData;nuse crate::mem;nuse crate::num::flt2dec;nuse crate::ops::Deref;nuse crate::result;nuse crate::str;nnmod builders;nmod float;nmod num;nn#[stable(feature = 'fmt_flag'''''''''''m'o'r'f'_'e'g'r'e'''''n'm' ''''_'y'r'_into''''''t''''' ''''''''y'r'T' '/'/' '''_'' '' // fn merge_into(&mut self, other: &Self) -'''n '''''e's'l'a'f' ''' }'n '{' '''> bool'''''''n '// ' ';''''''''e'''g'r'e'm'_'n'a'n''n''c'' ''n '// '''''''''''''''''o'''''''''''''''''n '// '''''''''''''''''''''''''''''''''''''''''''''''''''''''''/'/';'>'''')'f'l'e'S'<'n'o'i't'p'O' '>'-' ')'f'l'e's'&' ':'r'e'h't'o' ','f'l'e's'&'('e'g'r'e'm'_'y'r't' 'n'f' '''''''n ';'f'l'e'S' '>''''''''''S' '.'-' ')''''''f'l'e'S' ':'r'e'h't'i'''''''h't' ','f'l'e's''''&'('e'g'r'e'm' 'n'f' '// '''''''''''''''''''''''''''''''''''''''''''''''';'l'o'o'b' '>'-''''-' ')'f'l''''''''''f'l'p'e'S'&' ':'r'e'h't'o' ','f'l'e's' 't'u'm'&'('o't'n'i'_'e'g'r'e'm' 'n'f' 'n ' 's_align', since = '1.28.0')]n/// Possible alignments returned by `Formatter::align`n#[derive(Debug)]npub enum Alignment {n #[stable(feature = 'fmt_flags_align', since = '1.28.0')]n /// Indication that contents should be left-aligned.n Left,n #[stable(feature = 'fmt_flags_align', since = '1.28.0')]n /// Indication that contents should be right-aligned.n Right,n #[stable(feature = 'fmt_flags_align', since = '1.28.0')]n /// Indication that contents should be center-a''''l'o'o'b'ligne'nimpl Li''''r'a'''h'c'stItem for u8 {'n'}''nimpl ListItem for u8 {}'d.n Center,n}nn#[stable(feature = 'debug_builders', since = '1.2.0')]npub use self::builders::{DebugList, DebugMap, DebugSet, DebugStruct, DebugTuple};nn#[unstable(feature = 'fmt_internals', reason 'impl ListItem for'&' bool {}nimpl ListItem f'&'or char {''}n''n'= 'internal to format_args!', issue = 'none')]n#[doc(hidden)]npub mod rt {n pub mod v1;n}nn/// The type returned by formatter methods.n///n/// # Examplesn///n/// ```n/// use std::fmt;n///n/// #[derive(Debug)]n/// struct Triangle {n/// a: f32,n/// b: f32,n/// c: f32n/// }n///n/// impl fmt::Display for Triangle {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// write!(f, '({}, {}, {})', self.a, self.b, self.c)n/// }n/// }n///n/// let pythagorean_triple = Triangle { a: 3.0, b: 4.0, c: 5.0 };n///n/// assert_eq!(format!('{}', pythagorean_triple), '(3, 4, 5)');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub type Result = result::Result<(), Error>;nn/// The error type which is returned from formatting a message into a stream.n///n/// This type does not support transmission of an error other than that an errorn/// occurred. Any extra information must be arranged to be transmitted throughn/// some other means.n///n/// An important thing to remember is that the type `fmt::Error` should not ben/// confused with [`std::io::Error`] or [`std::error::Error`], which you may alson/// have in scope.n///n/// [`std::io::Error`]: ../../std/io/struct.Error.htmln/// [`std::error::Error`]: ../../std/error/trait.Error.htmln///n/// # Examplesn///n/// ```rustn/// use std::fmt::{self, write};n///n/// let mut output = String::new();n/// if let Err(fmt::Error) = write(&mut output, format_args!('Hello {}!', 'world')) {n/// panic!('An error occurred');n/// }n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]n#[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]npub struct Error;nn/// A collection of methods that are required to format a message into a stream.n///n/// This trait is the type which this modules requires when formattingn/// information. This is similar to the standard library's [`io::Write`] trait,n/// but it is only intended for use in libcore.n///n/// This trait should generally not be implemented by consumers of the standardn/// library. The [`write!`] macro accepts an instance of [`io::Write`], and then/// [`io::Write`] trait is favored over implementing this trait.n///n/// [`write!`]: ../../std/macro.write.htmln/// [`io::Write`]: ../../std/io/trait.Write.htmln#[stable(feature = 'rust1', since = '1.0.0')]npub trait Write {n /// Writes a string slice into this writer, returning whether the writen /// succeeded.n ///n /// This method can only succeed if the entire string slice was successfullyn /// written, and this method will not return until all data has beenn /// written or an error occurs.n ///n /// # Errorsn ///n /// This function will return an instance of [`Error`] on error.n ///n /// [`Error`]: struct.Error.htmln ///n /// # Examplesn ///n /// ```n /// use std::fmt::{Error, Write};n ///n /// fn writer(f: &mut W, s: &str) -> Result<(), Error> {n /// f.write_str(s)n /// }n ///n /// let mut buf = String::new();n /// writer(&mut buf, 'hola').unwrap();n /// assert_eq!(&buf, 'hola');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n fn write_str(&mut self, s: &str) -> Result;nn /// Writes a [`char`] into this writer, returning whether the write succeeded.n ///n /// A single [`char`] may be encoded as more than one byte.n /// This method can only succeed if the entire byte sequence was successfullyn /// written, and this method will not return until all data has beenn /// written or an error occurs.n ///n /// # Errorsn ///n /// This function will return an instance of [`Error`] on error.n ///n /// [`char`]: ../../std/primitive.char.htmln /// [`Error`]: struct.Error.htmln ///n /// # Examplesn ///n /// ```n /// use std::fmt::{Error, Write};n ///n /// fn writer(f: &mut W, c: char) -> Result<(), Error> {n /// f.write_char(c)n /// }n ///n /// let mut buf = String::new();n /// writer(&mut buf, 'a').unwrap();n /// writer(&mut buf, 'b').unwrap();n /// assert_eq!(&buf, 'ab');n /// ```n #[stable(feature = 'fmt_write_char', since = '1.1.0')]n fn write_char(&mut self, c: char) -> Result {n self.write_str(c.encode_utf8(&mut [0; 4]))n }nn /// Glue for usage of the [`write!`] macro with implementors of this trait.n ///n /// This method should generally not be invoked manually, but rather throughn /// the [`write!`] macro itself.n ///n /// [`write!`]: ../../std/macro.write.htmln ///n /// # Examplesn ///n /// ```n /// use std::fmt::{Error, Write};n ///n /// fn writer(f: &mut W, s: &str) -> Result<(), Error> {n /// f.write_fmt(format_args!('{}', s))n /// }n ///n /// let mut buf = String::new();n /// writer(&mut buf, 'world').unwrap();n /// assert_eq!(&buf, 'world');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n fn write_fmt(mut self: &mut Self, args: Arguments<'_>) -> Result {n write(&mut self, args)n }n}nn#[stable(feature = 'fmt_write_blanket_impl', since = '1.4.0')]nimpl Write for &mut W {n fn write_str(&mut self, s: &str) -> Result {n (**self).write_str(s)n }nn fn write_char(&mut self, c: char) -> Result {n (**self).write_char(c)n }nn fn write_fmt(&mut self, args: Arguments<'_>) -> Result {n (**self).write_fmt(args)n }n}nn/// Configuration for formatting.n///n/// A `Formatter` represents various options related to formatting. Users do notn/// construct `Formatter`s directly; a mutable reference to one is passed ton/// the `fmt` method of all formatting traits, like [`Debug`] and [`Display`].n///n/// To interact with a `Formatter`, you'll call various methods to change then/// various options related to formatting. For examples, please see then/// documentation of the methods defined on `Formatter` below.n///n/// [`Debug`]: trait.Debug.htmln/// [`Display`]: trait.Display.htmln#[allow(missing_debug_implementations)]n#[stable(feature = 'rust1', since = '1.0.0')]npub struct Formatter<'a> {n flags: u32,n fill: char,n align: rt::v1::Alignment,n width: Option,n precision: Option,nn buf: &'a mut (dyn Write + 'a),n}nn// NB. Argument is essentially an optimized partially applied formatting function,n// equivalent to `exists T.(&T, fn(&T, &mut Formatter<'_>) -> Result`.nnextern 'C' {n type Opaque;n}nn/// This struct represents the generic 'argument' which is taken by the Xprintfn/// family of functions. It contains a function to format the given value. Atn/// compile time it is ensured that the function and the value have the correctn/// types, and then this struct is used to canonicalize arguments to one type.n#[derive(Copy, Clone)]n#[allow(missing_debug_implementations)]n#[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n#[doc(hidden)]npub struct ArgumentV1<'a> {n value: &'a Opaque,n formatter: fn(&Opaque, &mut Formatter<'_>) -> Result,n}nn// This guarantees a single stable value for the function pointer associated withn// indices/counts in the formatting infrastructure.n//n// Note that a function defined as such would not be correct as functions aren// always tagged unnamed_addr with the current lowering to LLVM IR, so theirn// address is not considered important to LLVM and as such the as_usize castn// could have been miscompiled. In practice, we never call as_usize on non-usizen// containing data (as a matter of static generation of the formattingn// arguments), so this is merely an additional check.n//n// We primarily want to ensure that the function pointer at `USIZE_MARKER` hasn// an address corresponding *only* to functions that also take `&usize` as theirn// first argument. The read_volatile here ensures that we can safely ready out an// usize from the passed reference and that this address does not point at an// non-usize taking function.n#[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]nstatic USIZE_MARKER: fn(&usize, &mut Formatter<'_>) -> Result = |ptr, _| {n // SAFETY: ptr is a referencen let _v: usize = unsafe { crate::ptr::read_volatile(ptr) };n loop {}n};nnimpl<'a> ArgumentV1<'a> {n #[doc(hidden)]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn new<'b, T>(x: &'b T, f: fn(&T, &mut Formatter<'_>) -> Result) -> ArgumentV1<'b> {n // SAFETY: `mem::transmute(x)` is safe becausen // 1. `&'b T` keeps the lifetime it originated with `'b`n // (so as to not have an unbounded lifetime)n // 2. `&'b T` and `&'b Opaque` have the same memory layoutn // (when `T` is `Sized`, as it is here)n // `mem::transmute(f)` is safe since `fn(&T, &mut Formatter<'_>) -> Result`n // and `fn(&Opaque, &mut Formatter<'_>) -> Result` have the same ABIn // (as long as `T` is `Sized`)n unsafe { ArgumentV1 { formatter: mem::transmute(f), value: mem::transmute(x) } }n }nn #[doc(hidden)]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn from_usize(x: &usize) -> ArgumentV1<'_> {n ArgumentV1::new(x, USIZE_MARKER)n }nn fn as_usize(&self) -> Option {n if self.formatter as usize == USIZE_MARKER as usize {n // SAFETY: The `formatter` field is only set to USIZE_MARKER ifn // the value is a usize, so this is safen Some(unsafe { *(self.value as *const _ as *const usize) })n } else {n Nonen }n }n}nn// flags available in the v1 format of format_argsn#[derive(Copy, Clone)]nenum FlagV1 {n SignPlus,n SignMinus,n Alternate,n SignAwareZeroPad,n DebugLowerHex,n DebugUpperHex,n}nnimpl<'a> Arguments<'a> {n /// When using the format_args!() macro, this function is used to generate then /// Arguments structure.n #[doc(hidden)]n #[inline]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn new_v1(pieces: &'a [&'a str], args: &'a [ArgumentV1<'a>]) -> Arguments<'a> {n Arguments { pieces, fmt: None, args }n }nn /// This function is used to specify nonstandard formatting parameters.n /// The `pieces` array must be at least as long as `fmt` to constructn /// a valid Arguments structure. Also, any `Count` within `fmt` that isn /// `CountIsParam` or `CountIsNextParam` has to point to an argumentn /// created with `argumentusize`. However, failing to do so doesn't causen /// unsafety, but will ignore invalid .n #[doc(hidden)]n #[inline]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn new_v1_formatted(n pieces: &'a [&'a str],n args: &'a [ArgumentV1<'a>],n fmt: &'a [rt::v1::Argument],n ) -> Arguments<'a> {n Arguments { pieces, fmt: Some(fmt), args }n }nn /// Estimates the length of the formatted text.n ///n /// This is intended to be used for setting initial `String` capacityn /// when using `format!`. Note: this is neither the lower nor upper bound.n #[doc(hidden)]n #[inline]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn estimated_capacity(&self) -> usize {n let pieces_length: usize = self.pieces.iter().map(|x| x.len()).sum();nn if self.args.is_empty() {n pieces_lengthn } else if self.pieces[0] == '' && pieces_length < 16 {n // If the format string starts with an argument,n // don't preallocate anything, unless lengthn // of pieces is significant.n 0n } else {n // There are some arguments, so any additional pushn // will reallocate the string. To avoid that,n // we're 'pre-doubling' the capacity here.n pieces_length.checked_mul(2).unwrap_or(0)n }n }n}nn/// This structure represents a safely precompiled version of a format stringn/// and its arguments. This cannot be generated at runtime because it cannotn/// safely be done, so no constructors are given and the fields are privaten/// to prevent modification.n///n/// The [`format_args!`] macro will safely create an instance of this structure.n/// The macro validates the format string at compile-time so usage of then/// [`write`] and [`format`] functions can be safely performed.n///n/// You can use the `Arguments<'a>` that [`format_args!`] returns in `Debug`n/// and `Display` contexts as seen below. The example also shows that `Debug`n/// and `Display` format to the same thing: the interpolated format stringn/// in `format_args!`.n///n/// ```rustn/// let debug = format!('{:?}', format_args!('{} foo {:?}', 1, 2));n/// let display = format!('{}', format_args!('{} foo {:?}', 1, 2));n/// assert_eq!('1 foo 2', display);n/// assert_eq!(display, debug);n/// ```n///n/// [`format_args!`]: ../../std/macro.format_args.htmln/// [`format`]: ../../std/fmt/fn.format.htmln/// [`write`]: ../../std/fmt/fn.write.htmln#[stable(feature = 'rust1', since = '1.0.0')]n#[derive(Copy, Clone)]npub struct Arguments<'a> {n // Format string pieces to print.n pieces: &'a [&'a str],nn // Placeholder specs, or `None` if all specs are default (as in '{}{}').n fmt: Option<'''// '''&'a [rt::v1::Ar'_start'gum'nod'ent'']>,nn // Dynami' let next = (*self.here_ptr()).get_next_ptr();n if next.is_null() { None }n else {n debug_assert!((*next).num_items > 0);n Some((*next).items[0].as_mut_ptr())n }n'c argum''''en'// 'ts for interpolation, to be interleaved with stringn // pieces. (Every argument is preceded by a string piece.)n args: &'a [ArgumentV1<'a>],n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for Arguments<'_> {n fn fm'n 'pub(super) ''' pub(super) unsafe fn current_item<'a>(&self) -> Option<&'a Item> {n let node = &' self.p'_start'eek_next_node().map(|ptr| &*ptr)'' '// ''' '' '' '''''''_'v'e'r'p''' '' '' '' let next = ('// '*self.here_ptr()).get_n' '' 'n '// ' '''''''''local_inde''''''''''''''}' 'e'// ''n'o'''''''n '// ' 'debug_assert''''if self.local_index < node.num_items as usiz'// 'e'('!''''''g'u'b'e'd' '''' if self.local_index < n'// 'ode.num_items as usize'''''' 'e's'l'e''N' '{' '0' '='=' 'x'''// '''''l'a'c''// 'o'l'''''e'd'n'i'.'f'l'e's' 'f'i' ' 'ext_ptr();' 'n if ne''x' 't.is_null() { None ' '}' '' '''n else {' 'n ' ''' debug_assert!((*next).num_items > 0);' ' ' '' 'n '' '' Some((*next).items[0].as_mut_ptr())' 'n '' }' 'n'*self.here_ptr();''n if self.local_index < node.num_items as usize {n'' /''/ Ok - just return the current item.n Some(&*(node.items[self.local_index].as_ptr()))n } else {n // Peek the first item in the next node'nod'.n '' self.peek_next_item().map(|ptr| &*ptr)n '// ''' }n }n't(&'// 'self, fmt: &mut Forma'''''''''m'e't''''' 't'u''// 'm'i'_'''e'k'''''''''a't''// 'tter<'_>)'// ' -> Result'' {n Display:'// ':fmt(self, fmt)n '// '}n}nn#[stable(f''eature = 'rust1', sin'// 'ce = '1'// '.0.0')]nimpl Display'' for Arguments<'_> {n '// ' fn fmt(&'// 'self, fmt: &mut F'// 'ormatter''<'_>) -> Result {n '' '// ' write(fmt.'// 'buf, *'// 'self)n }n}nn///'// ' `?` f''ormatting.n///n/// `Debu'n '//'' ' 'u'// 'nimplement'// 'e''';')'('// ''d'''''''l'p'm'i'n'u''' 'g` should f''or'// 'mat the outpu'// 't in a pro'// 'grammer-facing, debugging context.n///n/// Generally speaking, you should just `derive` a `Debug` implementation.n///n/// When used with the alternate format specifier `#?`, the output is pretty-printed.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// This trait can be used with `#[derive]` if all fields implement `Debug`. Whenn/// `derive`d for structs, it will use the name of the `struct`, then `{`, then an/// comma-separated list of each field's name and `Debug` value, then `}`. Forn/// `enum`s, it will use the name of the variant and, if applicable, `(`, then then/// `Debug` values of the fields, then `)`.n///n/// # Stabilityn///n/// Derived `Debug` formats are not stable, and so may change with future Rustn/// versions. Additionally, `Debug` implementations of types provided by then/// standard library (`libstd`, `libcore`, `liballoc`, etc.) are not stable, andn/// may also change with future Rust versions.n///n/// # Examplesn///n/// Deriving an implementation:n///n/// ```n/// #[derive(Debug)]n/// struct Point {n/// x: i32,n/// y: i32,n/// }n///n/// let origin = Point { x: 0, y: 0 };n///n/// assert_eq!(format!('The origin is: {:?}', origin), 'The origin is: Point { x: 0, y: 0 }');n/// ```n///n/// Manually implementing:n///n/// ```n/// use std::fmt;n///n/// struct Point {n/// x: i32,n/// y: i32,n/// }n///n/// impl fmt::Debug for Point {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// f.debug_struct('Point')n/// .field('x', &self.x)n/// .field('y', &self.y)n/// .finish()n/// }n/// }n///n/// let origin = Point { x: 0, y: 0 };n///n/// assert_eq!(format!('The origin is: {:?}', origin), 'The origin is: Point { x: 0, y: 0 }');n/// ```n///n/// There are a number of helper methods on the [`Formatter`] struct to help you with manualn/// implementations, such as [`debug_struct`].n///n/// `Debug` implementations using either `derive` or the debug builder APIn/// on [`Formatter`] support pretty-printing using the alternate flag: `{:#?}`.n///n/// [`debug_struct`]: ../../std/fmt/struct.Formatter.html#method.debug_structn/// [`Formatter`]: ../../std/fmt/struct.Formatter.htmln///n/// Pretty-printing with `#?`:n///n/// ```n/// #[derive(Debug)]n/// struct Point {n/// x: i32,n/// y: i32,n/// }n///n/// let origin = Point { x: 0, y: 0 };n///n/// assert_eq!(format!('The origin is: {:#?}', origin),n/// 'The origin is: Point {n/// x: 0,n/// y: 0,n/// }');n/// ```nn#[stable(feature = 'rust1', since = '1.0.0')]n#[rustc_on_unimplemented(n on(n crate_local,n label = '`{Self}` cannot be formatted using `{{:?}}`',n note = 'add `#[derive(Debug)]` or manually implement `{Debug}`'n ),n message = '`{Self}` doesn't implement `{Debug}`',n label = '`{Self}` cannot be formatted using `{{:?}}` because it doesn't implement `{Debug}`'n)]n#[doc(alias = '{:?}')]n#[rustc_diagnostic_item = 'debug_trait']npub trait Debug {n /// Formats the value using the given formatter.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Position {n /// longitude: f32,n /// latitude: f32,n /// }n ///n /// impl fmt::Debug for Position {n /// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n /// f.debug_tuple('')n /// .field(&self.longitude)n /// .field(&self.latitude)n /// .finish()n /// }n /// }n ///n /// let position = Position { longitude: 1.987, latitude: 2.983 };n /// assert_eq!(format!('{:?}', position), '(1.987, 2.983)');n ///n /// assert_eq!(format!('{:#?}', position), '(n /// 1.987,n /// 2.983,n /// )');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn// Separate module to reexport the macro `Debug` from prelude without the trait `Debug`.npub(crate) mod macros {n /// Derive macro generating an impl of the trait `Debug`.n #[rustc_builtin_macro]n #[stable(feature = 'builtin_macro_prelude', since = '1.38.0')]n #[allow_internal_unstable(core_intrinsics)]n pub macro Debug($item:item) {n /* compiler built-in */n }n}n#[stable(feature = 'builtin_macro_prelude', since = '1.38.0')]n#[doc(inline)]npub use macros::Debug;nn/// Format trait for an empty format, `{}`.n///n/// `Display` is similar to [`Debug`][debug], but `Display` is for user-facingn/// output, and so cannot be derived.n///n/// [debug]: trait.Debug.htmln///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Implementing `Display` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Point {n/// x: i32,n/// y: i32,n/// }n///n/// impl fmt::Display for Point {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// write!(f, '({}, {})', self.x, self.y)n/// }n/// }n///n/// let origin = Point { x: 0, y: 0 };n///n/// assert_eq!(format!('The origin is: {}', origin), 'The origin is: (0, 0)');n/// ```n#[rustc_on_unimplemented(n on(n _Self = 'std::path::Path',n label = '`{Self}` cannot be formatted with the default formatter; call `.display()` on it',n note = 'call `.display()` or `.to_string_lossy()` to safely print paths, n as they may contain non-Unicode data'n ),n message = '`{Self}` doesn't implement `{Display}`',n label = '`{Self}` cannot be formatted with the default formatter',n note = 'in format strings you may be able to use `{{:?}}` (or {{:#?}} for pretty-print) instead'n)]n#[doc(alias = '{}')]n#[stable(feature = 'rust1', since = '1.0.0')]npub trait Display {n /// Formats the value using the given formatter.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Position {n /// longitude: f32,n /// latitude: f32,n /// }n ///n /// impl fmt::Display for Position {n /// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n /// write!(f, '({}, {})', self.longitude, self.latitude)n /// }n /// }n ///n /// assert_eq!('(1.987, 2.983)',n /// format!('{}', Position { longitude: 1.987, latitude: 2.983, }));n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `o` formatting.n///n/// The `Octal` trait should format its output as a number in base-8.n///n/// For primitive signed integers (`i8` to `i128`, and `isize`),n/// negative values are formatted as the two_s complement representation.n///n/// The alternate flag, `#`, adds a `0o` in front of the output.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `i32`:n///n/// ```n/// let x = 42; // 42 is '52' in octaln///n/// assert_eq!(format!('{:o}', x), '52');n/// assert_eq!(format!('{:#o}', x), '0o52');n///n/// assert_eq!(format!('{:o}', -16), '37777777760');n/// ```n///n/// Implementing `Octal` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::Octal for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = self.0;n///n/// fmt::Octal::fmt(&val, f) // delegate to i32's implementationn/// }n/// }n///n/// let l = Length(9);n///n/// assert_eq!(format!('l as octal is: {:o}', l), 'l as octal is: 11');n///n/// assert_eq!(format!('l as octal is: {:#06o}', l), 'l as octal is: 0o0011');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait Octal {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `b` formatting.n///n/// The `Binary` trait should format its output as a number in binary.n///n/// For primitive signed integers ([`i8`] to [`i128`], and [`isize`]),n/// negative values are formatted as the two_s complement representation.n///n/// The alternate flag, `#`, adds a `0b` in front of the output.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// # Examplesn///n/// Basic usage with [`i32`]:n///n/// ```n/// let x = 42; // 42 is '101010' in binaryn///n/// assert_eq!(format!('{:b}', x), '101010');n/// assert_eq!(format!('{:#b}', x), '0b101010');n///n/// assert_eq!(format!('{:b}', -16), '11111111111111111111111111110000');n/// ```n///n/// Implementing `Binary` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::Binary for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = self.0;n///n/// fmt::Binary::fmt(&val, f) // delegate to i32's implementationn/// }n/// }n///n/// let l = Length(107);n///n/// assert_eq!(format!('l as binary is: {:b}', l), 'l as binary is: 1101011');n///n/// assert_eq!(n/// format!('l as binary is: {:#032b}', l),n/// 'l as binary is: 0b000000000000000000000001101011'n/// );n/// ```n///n/// [module]: ../../std/fmt/index.htmln/// [`i8`]: ../../std/primitive.i8.htmln/// [`i128`]: ../../std/primitive.i128.htmln/// [`isize`]: ../../std/primitive.isize.htmln/// [`i32`]: ../../std/primitive.i32.htmln#[stable(feature = 'rust1', since = '1.0.0')]npub trait Binary {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `x` formatting.n///n/// The `LowerHex` trait should format its output as a number in hexadecimal, with `a` through `f`n/// in lower case.n///n/// For primitive signed integers (`i8` to `i128`, and `isize`),n/// negative values are formatted as the two_s complement representation.n///n/// The alternate flag, `#`, adds a `0x` in front of the output.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `i32`:n///n/// ```n/// let x = 42; // 42 is '2a' in hexn///n/// assert_eq!(format!('{:x}', x), '2a');n/// assert_eq!(format!('{:#x}', x), '0x2a');n///n/// assert_eq!(format!('{:x}', -16), 'fffffff0');n/// ```n///n/// Implementing `LowerHex` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::LowerHex for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = self.0;n///n/// fmt::LowerHex::fmt(&val, f) // delegate to i32's implementationn/// }n/// }n///n/// let l = Length(9);n///n/// assert_eq!(format!('l as hex is: {:x}', l), 'l as hex is: 9');n///n/// assert_eq!(format!('l as hex is: {:#010x}', l), 'l as hex is: 0x00000009');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait LowerHex {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `X` formatting.n///n/// The `UpperHex` trait should format its output as a number in hexadecimal, with `A` through `F`n/// in upper case.n///n/// For primitive signed integers (`i8` to `i128`, and `isize`),n/// negative values are formatted as the two_s complement representation.n///n/// The alternate flag, `#`, adds a `0x` in front of the output.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `i32`:n///n/// ```n/// let x = 42; // 42 is '2A' in hexn///n/// assert_eq!(format!('{:X}', x), '2A');n/// assert_eq!(format!('{:#X}', x), '0x2A');n///n/// assert_eq!(format!('{:X}', -16), 'FFFFFFF0');n/// ```n///n/// Implementing `UpperHex` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::UpperHex for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = self.0;n///n/// fmt::UpperHex::fmt(&val, f) // delegate to i32's implementationn/// }n/// }n///n/// let l = Length(i32::MAX);n///n/// assert_eq!(format!('l as hex is: {:X}', l), 'l as hex is: 7FFFFFFF');n///n/// assert_eq!(format!('l as hex is: {:#010X}', l), 'l as hex is: 0x7FFFFFFF');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait UpperHex {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `p` formatting.n///n/// The `Pointer` trait should format its output as a memory location. This is commonly presentedn/// as hexadecimal.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `&i32`:n///n/// ```n/// let x = &42;n///n/// let address = format!('{:p}', x); // this produces something like '0x7f06092ac6d0'n/// ```n///n/// Implementing `Pointer` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::Pointer for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// // use `as` to convert to a `*const T`, which implements Pointer, which we can usen///n/// let ptr = self as *const Self;n/// fmt::Pointer::fmt(&ptr, f)n/// }n/// }n///n/// let l = Length(42);n///n/// println!('l is in memory here: {:p}', l);n///n/// let l_ptr = format!('{:018p}', l);n/// assert_eq!(l_ptr.len(), 18);n/// assert_eq!(&l_ptr[..2], '0x');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait Pointer {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `e` formatting.n///n/// The `LowerExp` trait should format its output in scientific notation with a lower-case `e`.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `f64`:n///n/// ```n/// let x = 42.0; // 42.0 is '4.2e1' in scientific notationn///n/// assert_eq!(format!('{:e}', x), '4.2e1');n/// ```n///n/// Implementing `LowerExp` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::LowerExp for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = f64::from(self.0);n/// fmt::LowerExp::fmt(&val, f) // delegate to f64's implementationn/// }n/// }n///n/// let l = Length(100);n///n/// assert_eq!(n/// format!('l in scientific notation is: {:e}', l),n/// 'l in scientific notation is: 1e2'n/// );n///n/// assert_eq!(n/// format!('l in scientific notation is: {:05e}', l),n/// 'l in scientific notation is: 001e2'n/// );n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait LowerExp {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `E` formatting.n///n/// The `UpperExp` trait should format its output in scientific notation with an upper-case `E`.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `f64`:n///n/// ```n/// let x = 42.0; // 42.0 is '4.2E1' in scientific notationn///n/// assert_eq!(format!('{:E}', x), '4.2E1');n/// ```n///n/// Implementing `UpperExp` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::UpperExp for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = f64::from(self.0);n/// fmt::UpperExp::fmt(&val, f) // delegate to f64's implementationn/// }n/// }n///n/// let l = Length(100);n///n/// assert_eq!(n/// format!('l in scientific notation is: {:E}', l),n/// 'l in scientific notation is: 1E2'n/// );n///n/// assert_eq!(n/// format!('l in scientific notation is: {:05E}', l),n/// 'l in scientific notation is: 001E2'n/// );n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait UpperExp {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// The `write` function takes an output stream, and an `Arguments` structn/// that can be precompiled with the `format_args!` macro.n///n/// The arguments will be formatted according to the specified format stringn/// into the output stream provided.n///n/// # Examplesn///n/// Basic usage:n///n/// ```n/// use std::fmt;n///n/// let mut output = String::new();n/// fmt::write(&mut output, format_args!('Hello {}!', 'world'))n/// .expect('Error occurred while trying to write in String');n/// assert_eq!(output, 'Hello world!');n/// ```n///n/// Please note that using [`write!`] might be preferable. Example:n///n/// ```n/// use std::fmt::Write;n///n/// let mut output = String::new();n/// write!(&mut output, 'Hello {}!', 'world')n/// .expect('Error occurred while trying to write in String');n/// assert_eq!(output, 'Hello world!');n/// ```n///n/// [`write!`]: ../../std/macro.write.htmln#[stable(feature = 'rust1', since = '1.0.0')]npub fn write(output: &mut dyn Write, args: Arguments<'_>) -> Result {n let mut formatter = Formatter {n flags: 0,n width: None,n precision: None,n buf: output,n align: rt::v1::Alignment::Unknown,n fill: ' ',n };nn let mut idx = 0;nn match args.fmt {n None => {n // We can use default formatting parameters for all arguments.n for (arg, piece) in args.args.iter().zip(args.pieces.iter()) {n formatter.buf.write_str(*piece)?;n (arg.formatter)(arg.value, &mut formatter)?;n idx += 1;n }n }n Some(fmt) => {n // Every spec has a corresponding argument that is preceded byn // a string piece.n for (arg, piece) in fmt.iter().zip(args.pieces.iter()) {n formatter.buf.write_str(*piece)?;n run(&mut formatter, arg, &args.args)?;n idx += 1;n }n }n }nn // There can be only one trailing string piece left.n if let Some(piece) = args.pieces.get(idx) {n formatter.buf.write_str(*piece)?;n }nn Ok(())n}nnfn run(fmt: &mut Formatter<'_>, arg: &rt::v1::Argument, args: &[ArgumentV1<'_>]) -> Result {n fmt.fill = arg.format.fill;n fmt.align = arg.format.align;n fmt.flags = arg.format.flags;n fmt.width = getcount(args, &arg.format.width);n fmt.precision = getcount(args, &arg.format.precision);nn // Extract the correct argumentn let value = args[arg.position];nn // Then actually do some printingn (value.formatter)(value.value, fmt)n}nnfn getcount(args: &[ArgumentV1<'_>], cnt: &rt::v1::Count) -> Option {n match *cnt {n rt::v1::Count::Is(n) => Some(n),n rt::v1::Count::Implied => None,n rt::v1::Count::Param(i) => args[i].as_usize(),n }n}nn/// Padding after the end of something. Returned by `Formatter::padding`.n#[must_use = 'don't forget to write the post padding']nstruct PostPadding {n fill: char,n padding: usize,n}nnimpl PostPadding {n fn new(fill: char, padding: usize) -> PostPadding {n PostPadding { fill, padding }n }nn /// Write this post padding.n fn write(self, buf: &mut dyn Write) -> Result {n for _ in 0..self.padding {n buf.write_char(self.fill)?;n }n Ok(())n }n}nnimpl<'a> Formatter<'a> {n fn wrap_buf<'b, 'c, F>(&'b mut self, wrap: F) -> Formatter<'c>n wheren 'b: 'c,n F: FnOnce(&'b mut (dyn Write + 'b)) -> &'c mut (dyn Write + 'c),n {n Formatter {n // We want to change thisn buf: wrap(self.buf),nn // And preserve thesen flags: self.flags,n fill: self.fill,n align: self.align,n width: self.width,n precision: self.precision,n }n }nn // Helper methods used for padding and processing formatting arguments thatn // all formatting traits can use.nn /// Performs the correct padding for an integer which has already beenn /// emitted into a str. The str should *not* contain the sign for then /// integer, that will be added by this method.n ///n /// # Argumentsn ///n /// * is_nonnegative - whether the original integer was either positive or zero.n /// * prefix - if the '#' character (Alternate) is provided, thisn /// is the prefix to put in front of the number.n /// * buf - the byte array that the number has been formatted inton ///n /// This function will correctly account for the flags provided as well asn /// the minimum width. It will not take precision into account.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo { nb: i32 };n ///n /// impl Foo {n /// fn new(nb: i32) -> Foo {n /// Foo {n /// nb,n /// }n /// }n /// }n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// // We need to remove '-' from the number output.n /// let tmp = self.nb.abs().to_string();n ///n /// formatter.pad_integral(self.nb > 0, 'Foo ', &tmp)n /// }n /// }n ///n /// assert_eq!(&format!('{}', Foo::new(2)), '2');n /// assert_eq!(&format!('{}', Foo::new(-1)), '-1');n /// assert_eq!(&format!('{:#}', Foo::new(-1)), '-Foo 1');n /// assert_eq!(&format!('{:0>#8}', Foo::new(-1)), '00-Foo 1');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n pub fn pad_integral(&mut self, is_nonnegative: bool, prefix: &str, buf: &str) -> Result {n let mut width = buf.len();nn let mut sign = None;n if !is_nonnegative {n sign = Some('-');n width += 1;n } else if self.sign_plus() {n sign = Some('+');n width += 1;n }nn let prefix = if self.alternate() {n width += prefix.chars().count();n Some(prefix)n } else {n Nonen };nn // Writes the sign if it exists, and then the prefix if it was requestedn #[inline(never)]n fn write_prefix(f: &mut Formatter<'_>, sign: Option, prefix: Option<&str>) -> Result {n if let Some(c) = sign {n f.buf.write_char(c)?;n }n if let Some(prefix) = prefix { f.buf.write_str(prefix) } else { Ok(()) }n }nn // The `width` field is more of a `min-width` parameter at this point.n match self.width {n // If there's no minimum length requirements then we can justn // write the bytes.n None => {n write_prefix(self, sign, prefix)?;n self.buf.write_str(buf)n }n // Check if we're over the minimum width, if so then we can alson // just write the bytes.n Some(min) if width >= min => {n write_prefix(self, sign, prefix)?;n self.buf.write_str(buf)n }n // The sign and prefix goes before the padding if the fill charactern // is zeron Some(min) if self.sign_aware_zero_pad() => {n let old_fill = crate::mem::replace(&mut self.fill, '0');n let old_align = crate::mem::replace(&mut self.align, rt::v1::Alignment::Right);n write_prefix(self, sign, prefix)?;n let post_padding = self.padding(min - width, rt::v1::Alignment::Right)?;n self.buf.write_str(buf)?;n post_padding.write(self.buf)?;n self.fill = old_fill;n self.align = old_align;n Ok(())n }n // Otherwise, the sign and prefix goes after the paddingn Some(min) => {n let post_padding = self.padding(min - width, rt::v1::Alignment::Right)?;n write_prefix(self, sign, prefix)?;n self.buf.write_str(buf)?;n post_padding.write(self.buf)n }n }n }nn /// This function takes a string slice and emits it to the internal buffern /// after applying the relevant formatting flags specified. The flagsn /// recognized for generic strings are:n ///n /// * width - the minimum width of what to emitn /// * fill/align - what to emit and where to emit it if the stringn /// provided needs to be paddedn /// * precision - the maximum length to emit, the string is truncated if itn /// is longer than this lengthn ///n /// Notably this function ignores the `flag` parameters.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo;n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// formatter.pad('Foo')n /// }n /// }n ///n /// assert_eq!(&format!('{:<4}', Foo), 'Foo ');n /// assert_eq!(&format!('{:0>4}', Foo), '0Foo');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n pub fn pad(&mut self, s: &str) -> Result {n // Make sure there's a fast path up frontn if self.width.is_none() && self.precision.is_none() {n return self.buf.write_str(s);n }n // The `precision` field can be interpreted as a `max-width` for then // string being formatted.n let s = if let Some(max) = self.precision {n // If our string is longer that the precision, then we must haven // truncation. However other flags like `fill`, `width` and `align`n // must act as always.n if let Some((i, _)) = s.char_indices().nth(max) {n // LLVM here can't prove that `..i` won't panic `&s[..i]`, butn // we know that it can't panic. Use `get` + `unwrap_or` to avoidn // `unsafe` and otherwise don't emit any panic-related coden // here.n s.get(..i).unwrap_or(&s)n } else {n &sn }n } else {n &sn };n // The `width` field is more of a `min-width` parameter at this point.n match self.width {n // If we're under the maximum length, and there's no minimum lengthn // requirements, then we can just emit the stringn None => self.buf.write_str(s),n // If we're under the maximum width, check if we're over the minimumn // width, if so it's as easy as just emitting the string.n Some(width) if s.chars().count() >= width => self.buf.write_str(s),n // If we're under both the maximum and the minimum width, then filln // up the minimum width with the specified string + some alignment.n Some(width) => {n let align = rt::v1::Alignment::Left;n let post_padding = self.padding(width - s.chars().count(), align)?;n self.buf.write_str(s)?;n post_padding.write(self.buf)n }n }n }nn /// Write the pre-padding and return the unwritten post-padding. Callers aren /// responsible for ensuring post-padding is written after the thing that isn /// being padded.n fn padding(n &mut self,n padding: usize,n default: rt::v1::Alignment,n ) -> result::Result {n let align = match self.align {n rt::v1::Alignment::Unknown => default,n _ => self.align,n };nn let (pre_pad, post_pad) = match align {n rt::v1::Alignment::Left => (0, padding),n rt::v1::Alignment::Right | rt::v1::Alignment::Unknown => (padding, 0),n rt::v1::Alignment::Center => (padding / 2, (padding + 1) / 2),n };nn for _ in 0..pre_pad {n self.buf.write_char(self.fill)?;n }nn Ok(PostPadding::new(self.fill, post_pad))n }nn /// Takes the formatted parts and applies the padding.n /// Assumes that the caller already has rendered the parts with required precision,n /// so that `self.precision` can be ignored.n fn pad_formatted_parts(&mut self, formatted: &flt2dec::Formatted<'_>) -> Result {n if let Some(mut width) = self.width {n // for the sign-aware zero padding, we render the sign first andn // behave as if we had no sign from the beginning.n let mut formatted = formatted.clone();n let old_fill = self.fill;n let old_align = self.align;n let mut align = old_align;n if self.sign_aware_zero_pad() {n // a sign always goes firstn let sign = formatted.sign;n self.buf.write_str(sign)?;nn // remove the sign from the formatted partsn formatted.sign = '';n width = width.saturating_sub(sign.len());n align = rt::v1::Alignment::Right;n self.fill = '0';n self.align = rt::v1::Alignment::Right;n }nn // remaining parts go through the ordinary padding process.n let len = formatted.len();n let ret = if width <= len {n // no paddingn self.write_formatted_parts(&formatted)n } else {n let post_padding = self.padding(width - len, align)?;n self.write_formatted_parts(&formatted)?;n post_padding.write(self.buf)n };n self.fill = old_fill;n self.align = old_align;n retn } else {n // this is the common case and we take a shortcutn self.write_formatted_parts(formatted)n }n }nn fn write_formatted_parts(&mut self, formatted: &flt2dec::Formatted<'_>) -> Result {n fn write_bytes(buf: &mut dyn Write, s: &[u8]) -> Result {n // SAFETY: This is used for `flt2dec::Part::Num` and `flt2dec::Part::Copy`.n // It's safe to use for `flt2dec::Part::Num` since every char `c` is betweenn // `b'0'` and `b'9'`, which means `s` is valid UTF-8.n // It's also probably safe in practice to use for `flt2dec::Part::Copy(buf)`n // since `buf` should be plain ASCII, but it's possible for someone to passn // in a bad value for `buf` into `flt2dec::to_shortest_str` since it is an // public function.n // FIXME: Determine whether this could result in UB.n buf.write_str(unsafe { str::from_utf8_unchecked(s) })n }nn if !formatted.sign.is_empty() {n self.buf.write_str(formatted.sign)?;n }n for part in formatted.parts {n match *part {n flt2dec::Part::Zero(mut nzeroes) => {n const ZEROES: &str = // 64 zeroesn '0000000000000000000000000000000000000000000000000000000000000000';n while nzeroes > ZEROES.len() {n self.buf.write_str(ZEROES)?;n nzeroes -= ZEROES.len();n }n if nzeroes > 0 {n self.buf.write_str(&ZEROES[..nzeroes])?;n }n }n flt2dec::Part::Num(mut v) => {n let mut s = [0; 5];n let len = part.len();n for c in s[..len].iter_mut().rev() {n *c = b'0' + (v % 10) as u8;n v /= 10;n }n write_bytes(self.buf, &s[..len])?;n }n flt2dec::Part::Copy(buf) => {n write_bytes(self.buf, buf)?;n }n }n }n Ok(())n }nn /// Writes some data to the underlying buffer contained within thisn /// formatter.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo;n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// formatter.write_str('Foo')n /// // This is equivalent to:n /// // write!(formatter, 'Foo')n /// }n /// }n ///n /// assert_eq!(&format!('{}', Foo), 'Foo');n /// assert_eq!(&format!('{:0>8}', Foo), 'Foo');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n pub fn write_str(&mut self, data: &str) -> Result {n self.buf.write_str(data)n }nn /// Writes some formatted information into this instance.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// formatter.write_fmt(format_args!('Foo {}', self.0))n /// }n /// }n ///n /// assert_eq!(&format!('{}', Foo(-1)), 'Foo -1');n /// assert_eq!(&format!('{:0>8}', Foo(2)), 'Foo 2');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n pub fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result {n write(self.buf, fmt)n }nn /// Flags for formattingn #[stable(feature = 'rust1', since = '1.0.0')]n #[rustc_deprecated(n since = '1.24.0',n reason = 'use the `sign_plus`, `sign_minus`, `alternate`, n or `sign_aware_zero_pad` methods instead'n )]n pub fn flags(&self) -> u32 {n self.flagsn }nn /// Character used as 'fill' whenever there is alignment.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo;n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// let c = formatter.fill();n /// if let Some(width) = formatter.width() {n /// for _ in 0..width {n /// write!(formatter, '{}', c)?;n /// }n /// Ok(())n /// } else {n /// write!(formatter, '{}', c)n /// }n /// }n /// }n ///n /// // We set alignment to the left with '>'.n /// assert_eq!(&format!('{:G>3}', Foo), 'GGG');n /// assert_eq!(&format!('{:t>6}', Foo), 'tttttt');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn fill(&self) -> char {n self.filln }nn /// Flag indicating what form of alignment was requested.n ///n /// # Examplesn ///n /// ```n /// extern crate core;n ///n /// use std::fmt::{self, Alignment};n ///n /// struct Foo;n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// let s = if let Some(s) = formatter.align() {n /// match s {n /// Alignment::Left => 'left',n /// Alignment::Right => 'right',n /// Alignment::Center => 'center',n /// }n /// } else {n /// 'into the void'n /// };n /// write!(formatter, '{}', s)n /// }n /// }n ///n /// assert_eq!(&format!('{:<}', Foo), 'left');n /// assert_eq!(&format!('{:>}', Foo), 'right');n /// assert_eq!(&format!('{:^}', Foo), 'center');n /// assert_eq!(&format!('{}', Foo), 'into the void');n /// ```n #[stable(feature = 'fmt_flags_align', since = '1.28.0')]n pub fn align(&self) -> Option {n match self.align {n rt::v1::Alignment::Left => Some(Alignment::Left),n rt::v1::Alignment::Right => Some(Alignment::Right),n rt::v1::Alignment::Center => Some(Alignment::Center),n rt::v1::Alignment::Unknown => None,n }n }nn /// Optionally specified integer width that the output should be.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if let Some(width) = formatter.width() {n /// // If we received a width, we use itn /// write!(formatter, '{:width$}', &format!('Foo({})', self.0), width = width)n /// } else {n /// // Otherwise we do nothing specialn /// write!(formatter, 'Foo({})', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:10}', Foo(23)), 'Foo(23) ');n /// assert_eq!(&format!('{}', Foo(23)), 'Foo(23)');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn width(&self) -> Option {n self.widthn }nn /// Optionally specified precision for numeric types. Alternatively, then /// maximum width for string types.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(f32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if let Some(precision) = formatter.precision() {n /// // If we received a precision, we use it.n /// write!(formatter, 'Foo({1:.*})', precision, self.0)n /// } else {n /// // Otherwise we default to 2.n /// write!(formatter, 'Foo({:.2})', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:.4}', Foo(23.2)), 'Foo(23.2000)');n /// assert_eq!(&format!('{}', Foo(23.2)), 'Foo(23.20)');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn precision(&self) -> Option {n self.precisionn }nn /// Determines if the `+` flag was specified.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if formatter.sign_plus() {n /// write!(formatter,n /// 'Foo({}{})',n /// if self.0 < 0 { '-' } else { '+' },n /// self.0)n /// } else {n /// write!(formatter, 'Foo({})', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:+}', Foo(23)), 'Foo(+23)');n /// assert_eq!(&format!('{}', Foo(23)), 'Foo(23)');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn sign_plus(&self) -> bool {n self.flags & (1 << FlagV1::SignPlus as u32) != 0n }nn /// Determines if the `-` flag was specified.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if formatter.sign_minus() {n /// // You want a minus sign? Have one!n /// write!(formatter, '-Foo({})', self.0)n /// } else {n /// write!(formatter, 'Foo({})', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:-}', Foo(23)), '-Foo(23)');n /// assert_eq!(&format!('{}', Foo(23)), 'Foo(23)');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn sign_minus(&self) -> bool {n self.flags & (1 << FlagV1::SignMinus as u32) != 0n }nn /// Determines if the `#` flag was specified.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if formatter.alternate() {n /// write!(formatter, 'Foo({})', self.0)n /// } else {n /// write!(formatter, '{}', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:#}', Foo(23)), 'Foo(23)');n /// assert_eq!(&format!('{}', Foo(23)), '23');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn alternate(&self) -> bool {n self.flags & (1 << FlagV1::Alternate as u32) != 0n }nn /// Determines if the `0` flag was specified.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// assert!(formatter.sign_aware_zero_pad());n /// assert_eq!(formatter.width(), Some(4));n /// // We ignore the formatter's options.n /// write!(formatter, '{}', self.0)n /// }n /// }n ///n /// assert_eq!(&format!('{:04}', Foo(23)), '23');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn sign_aware_zero_pad(&self) -> bool {n self.flags & (1 << FlagV1::SignAwareZeroPad as u32) != 0n }nn // FIXME: Decide what public API we want for these two flags.n // https://github.com/rust-lang/rust/issues/48584n fn debug_lower_hex(&self) -> bool {n self.flags & (1 << FlagV1::DebugLowerHex as u32) != 0n }nn fn debug_upper_hex(&self) -> bool {n self.flags & (1 << FlagV1::DebugUpperHex as u32) != 0n }nn /// Creates a [`DebugStruct`] builder designed to assist with creation ofn /// [`fmt::Debug`] implementations for structs.n ///n /// [`DebugStruct`]: ../../std/fmt/struct.DebugStruct.htmln /// [`fmt::Debug`]: ../../std/fmt/trait.Debug.htmln ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n /// use std::net::Ipv4Addr;n ///n /// struct Foo {n /// bar: i32,n /// baz: String,n /// addr: Ipv4Addr,n /// }n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_struct('Foo')n /// .field('bar', &self.bar)n /// .field('baz', &self.baz)n /// .field('addr', &format_args!('{}', self.addr))n /// .finish()n /// }n /// }n ///n /// assert_eq!(n /// 'Foo { bar: 10, baz: 'Hello World', addr: 127.0.0.1 }',n /// format!('{:?}', Foo {n /// bar: 10,n /// baz: 'Hello World'.to_string(),n /// addr: Ipv4Addr::new(127, 0, 0, 1),n /// })n /// );n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_struct<'b>(&'b mut self, name: &str) -> DebugStruct<'b, 'a> {n builders::debug_struct_new(self, name)n }nn /// Creates a `DebugTuple` builder designed to assist with creation ofn /// `fmt::Debug` implementations for tuple structs.n ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n /// use std::marker::PhantomData;n ///n /// struct Foo(i32, String, PhantomData);n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_tuple('Foo')n /// .field(&self.0)n /// .field(&self.1)n /// .field(&format_args!('_'))n /// .finish()n /// }n /// }n ///n /// assert_eq!(n /// 'Foo(10, 'Hello', _)',n /// format!('{:?}', Foo(10, 'Hello'.to_string(), PhantomData::))n /// );n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_tuple<'b>(&'b mut self, name: &str) -> DebugTuple<'b, 'a> {n builders::debug_tuple_new(self, name)n }nn /// Creates a `DebugList` builder designed to assist with creation ofn /// `fmt::Debug` implementations for list-like structures.n ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n ///n /// struct Foo(Vec);n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_list().entries(self.0.iter()).finish()n /// }n /// }n ///n /// assert_eq!(format!('{:?}', Foo(vec![10, 11])), '[10, 11]');n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_list<'b>(&'b mut self) -> DebugList<'b, 'a> {n builders::debug_list_new(self)n }nn /// Creates a `DebugSet` builder designed to assist with creation ofn /// `fmt::Debug` implementations for set-like structures.n ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n ///n /// struct Foo(Vec);n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_set().entries(self.0.iter()).finish()n /// }n /// }n ///n /// assert_eq!(format!('{:?}', Foo(vec![10, 11])), '{10, 11}');n /// ```n ///n /// [`format_args!`]: ../../std/macro.format_args.htmln ///n /// In this more complex example, we use [`format_args!`] and `.debug_set()`n /// to build a list of match arms:n ///n /// ```rustn /// use std::fmt;n ///n /// struct Arm<'a, L: 'a, R: 'a>(&'a (L, R));n /// struct Table<'a, K: 'a, V: 'a>(&'a [(K, V)], V);n ///n /// impl<'a, L, R> fmt::Debug for Arm<'a, L, R>n /// wheren /// L: 'a + fmt::Debug, R: 'a + fmt::Debugn /// {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// L::fmt(&(self.0).0, fmt)?;n /// fmt.write_str(' => ')?;n /// R::fmt(&(self.0).1, fmt)n /// }n /// }n ///n /// impl<'a, K, V> fmt::Debug for Table<'a, K, V>n /// wheren /// K: 'a + fmt::Debug, V: 'a + fmt::Debugn /// {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_set()n /// .entries(self.0.iter().map(Arm))n /// .entry(&Arm(&(format_args!('_'), &self.1)))n /// .finish()n /// }n /// }n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_set<'b>(&'b mut self) -> DebugSet<'b, 'a> {n builders::debug_set_new(self)n }nn /// Creates a `DebugMap` builder designed to assist with creation ofn /// `fmt::Debug` implementations for map-like structures.n ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n ///n /// struct Foo(Vec<(String, i32)>);n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_map().entries(self.0.iter().map(|&(ref k, ref v)| (k, v))).finish()n /// }n /// }n ///n /// assert_eq!(n /// format!('{:?}', Foo(vec![('A'.to_string(), 10), ('B'.to_string(), 11)])),n /// r#'{'A': 10, 'B': 11}'#n /// );n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_map<'b>(&'b mut self) -> DebugMap<'b, 'a> {n builders::debug_map_new(self)n }n}nn#[stable(since = '1.2.0', feature = 'formatter_write')]nimpl Write for Formatter<'_> {n fn write_str(&mut self, s: &str) -> Result {n self.buf.write_str(s)n }nn fn write_char(&mut self, c: char) -> Result {n self.buf.write_char(c)n }nn fn write_fmt(&mut self, args: Arguments<'_>) -> Result {n write(self.buf, args)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for Error {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Display::fmt('an error occurred when formatting an argument', f)n }n}nn// Implementations of the core formatting traitsnnmacro_rules! fmt_refs {n ($($tr:ident),*) => {n $(n #[stable(feature = 'rust1', since = '1.0.0')]n impl $tr for &T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result { $tr::fmt(&**self, f) }n }n #[stable(feature = 'rust1', since = '1.0.0')]n impl $tr for &mut T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result { $tr::fmt(&**self, f) }n }n )*n }n}nnfmt_refs! { Debug, Display, Octal, Binary, LowerHex, UpperHex, LowerExp, UpperExp }nn#[unstable(feature = 'never_type', issue = '35121')]nimpl Debug for ! {n fn fmt(&self, _: &mut Formatter<'_>) -> Result {n *selfn }n}nn#[unstable(feature = 'never_type', issue = '35121')]nimpl Display for ! {n fn fmt(&self, _: &mut Formatter<'_>) -> Result {n *selfn }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for bool {n #[inline]n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Display::fmt(self, f)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for bool {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Display::fmt(if *self { 'true' } else { 'false' }, f)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for str {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.write_char(''')?;n let mut from = 0;n for (i, c) in self.char_indices() {n let esc = c.escape_debug();n // If char needs escaping, flush backlog so far and write, else skipn if esc.len() != 1 {n f.write_str(&self[from..i])?;n for c in esc {n f.write_char(c)?;n }n from = i + c.len_utf8();n }n }n f.write_str(&self[from..])?;n f.write_char(''')n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for str {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.pad(self)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for char {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.write_char(''')?;n for c in self.escape_debug() {n f.write_char(c)?n }n f.write_char(''')n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for char {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n if f.width.is_none() && f.precision.is_none() {n f.write_char(*self)n } else {n f.pad(self.encode_utf8(&mut [0; 4]))n }n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Pointer for *const T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n let old_width = f.width;n let old_flags = f.flags;nn // The alternate flag is already treated by LowerHex as being special-n // it denotes whether to prefix with 0x. We use it to work out whethern // or not to zero extend, and then unconditionally set it to get then // prefix.n if f.alternate() {n f.flags |= 1 << (FlagV1::SignAwareZeroPad as u32);nn if f.width.is_none() {n f.width = Some(((mem::size_of::() * 8) / 4) + 2);n }n }n f.flags |= 1 << (FlagV1::Alternate as u32);nn let ret = LowerHex::fmt(&(*self as *const () as usize), f);nn f.width = old_width;n f.flags = old_flags;nn retn }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Pointer for *mut T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(&(*self as *const T), f)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Pointer for &T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(&(*self as *const T), f)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Pointer for &mut T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(&(&**self as *const T), f)n }n}nn// Implementation of Display/Debug for various core typesnn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for *const T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(self, f)n }n}n#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for *mut T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(self, f)n }n}nnmacro_rules! peel {n ($name:ident, $($other:ident,)*) => (tuple! { $($other,)* })n}nnmacro_rules! tuple {n () => ();n ( $($name:ident,)+ ) => (n #[stable(feature = 'rust1', since = '1.0.0')]n impl<$($name:Debug),+> Debug for ($($name,)+) where last_type!($($name,)+): ?Sized {n #[allow(non_snake_case, unused_assignments)]n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n let mut builder = f.debug_tuple('');n let ($(ref $name,)+) = *self;n $(n builder.field(&$name);n )+nn builder.finish()n }n }n peel! { $($name,)+ }n )n}nnmacro_rules! last_type {n ($a:ident,) => { $a };n ($a:ident, $($rest_a:ident,)+) => { last_type!($($rest_a,)+) };n}nntuple! { T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, }nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for [T] {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.debug_list().entries(self.iter()).finish()n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for () {n #[inline]n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.pad('()')n }n}n#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for PhantomData {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.pad('PhantomData')n }n}''''//! Utilities for formatting and printing strings.nn#![stable(feature = 'rust1', since = '1.0.0')]nnuse crate::cell::{Cell, Ref, RefCell, RefMut, UnsafeCell};nuse crate::marker::PhantomData;nuse crate::mem;nuse crate::num::flt2dec;nuse crate::ops::Deref;nuse crate::result;nuse crate::str;nnmod builders;nmod float;nmod num;nn#[stable(feature = 'fmt_flags_align', since = '1.28.0')]n/// Possible alignments returned by `Formatter::align`n#[derive(Debug)]npub enum Alignment {n #[stable(feature = 'fmt_flags_align', since = '1.28.0')]n /// Indication that contents should be left-aligned.n Left,n #[stable(feature = 'fmt_flags_align', since = '1.28.0')]n /// Indication that contents should be right-aligned.n Right,n #[stable(feature = 'fmt_flags_align', since = '1.28.0')]n /// Indication that contents should be center-aligned.n Center,n}nn#[stable(feature = 'debug_builders', since = '1.2.0')]npub use self::builders::{DebugList, DebugMap, DebugSet, DebugStruct, DebugTuple};nn#[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n#[doc(hidden)]npub mod rt {n pub mod v1;n}nn/// The type returned by formatter methods.n///n/// # Examplesn///n/// ```n/// use std::fmt;n///n/// #[derive(Debug)]n/// struct Triangle {n/// a: f32,n/// b: f32,n/// c: f32n/// }n///n/// impl fmt::Display for Triangle {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// write!(f, '({}, {}, {})', self.a, self.b, self.c)n/// }n/// }n///n/// let pythagorean_triple = Triangle { a: 3.0, b: 4.0, c: 5.0 };n///n/// assert_eq!(format!('{}', pythagorean_triple), '(3, 4, 5)');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub type Result = result::Result<(), Error>;nn/// The error type which is returned from formatting a message into a stream.n///n/// This type does not support transmission of an error other than that an errorn/// occurred. Any extra information must be arranged to be transmitted throughn/// some other means.n///n/// An important thing to remember is that the type `fmt::Error` should not ben/// confused with [`std::io::Error`] or [`std::error::Error`], which you may alson/// have in scope.n///n/// [`std::io::Error`]: ../../std/io/struct.Error.htmln/// [`std::error::Error`]: ../../std/error/trait.Error.htmln///n/// # Examplesn///n/// ```rustn/// use std::fmt::{self, write};n///n/// let mut output = String::new();n/// if let Err(fmt::Error) = write(&mut output, format_args!('Hello {}!', 'world')) {n/// panic!('An error occurred');n/// }n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]n#[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]npub struct Error;nn/// A collection of methods that are required to format a message into a stream.n///n/// This trait is the type which this modules requires when formattingn/// information. This is similar to the standard library's [`io::Write`] trait,n/// but it is only intended for use in libcore.n///n/// This trait should generally not be implemented by consumers of the standardn/// library. The [`write!`] macro accepts an instance of [`io::Write`], and then/// [`io::Write`] trait is favored over implementing this trait.n///n/// [`write!`]: ../../std/macro.write.htmln/// [`io::Write`]: ../../std/io/trait.Write.htmln#[stable(feature = 'rust1', since = '1.0.0')]npub trait Write {n /// Writes a string slice into this writer, returning whether the writen /// succeeded.n ///n /// This method can only succeed if the entire string slice was successfullyn /// written, and this method will not return until all data has beenn /// written or an error occurs.n ///n /// # Errorsn ///n /// This function will return an instance of [`Error`] on error.n ///n /// [`Error`]: struct.Error.htmln ///n /// # Examplesn ///n /// ```n /// use std::fmt::{Error, Write};n ///n /// fn writer(f: &mut W, s: &str) -> Result<(), Error> {n /// f.write_str(s)n /// }n ///n /// let mut buf = String::new();n /// writer(&mut buf, 'hola').unwrap();n /// assert_eq!(&buf, 'hola');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n fn write_str(&mut self, s: &str) -> Result;nn /// Writes a [`char`] into this writer, returning whether the write succeeded.n ///n /// A single [`char`] may be encoded as more than one byte.n /// This method can only succeed if the entire byte sequence was successfullyn /// written, and this method will not return until all data has beenn /// written or an error occurs.n ///n /// # Errorsn ///n /// This function will return an instance of [`Error`] on error.n ///n /// [`char`]: ../../std/primitive.char.htmln /// [`Error`]: struct.Error.htmln ///n /// # Examplesn ///n /// ```n /// use std::fmt::{Error, Write};n ///n /// fn writer(f: &mut W, c: char) -> Result<(), Error> {n /// f.write_char(c)n /// }n ///n /// let mut buf = String::new();n /// writer(&mut buf, 'a').unwrap();n /// writer(&mut buf, 'b').unwrap();n /// assert_eq!(&buf, 'ab');n /// ```n #[stable(feature = 'fmt_write_char', since = '1.1.0')]n fn write_char(&mut self, c: char) -> Result {n self.write_str(c.encode_utf8(&mut [0; 4]))n }nn /// Glue for usage of the [`write!`] macro with implementors of this trait.n ///n /// This method should generally not be invoked manually, but rather throughn /// the [`write!`] macro itself.n ///n /// [`write!`]: ../../std/macro.write.htmln ///n /// # Examplesn ///n /// ```n /// use std::fmt::{Error, Write};n ///n /// fn writer(f: &mut W, s: &str) -> Result<(), Error> {n /// f.write_fmt(format_args!('{}', s))n /// }n ///n /// let mut buf = String::new();n /// writer(&mut buf, 'world').unwrap();n /// assert_eq!(&buf, 'world');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n fn write_fmt(mut self: &mut Self, args: Arguments<'_>) -> Result {n write(&mut self, args)n }n}nn#[stable(feature = 'fmt_write_blanket_impl', since = '1.4.0')]nimpl Write for &mut W {n fn write_str(&mut self, s: &str) -> Result {n (**self).write_str(s)n }nn fn write_char(&mut self, c: char) -> Result {n (**self).write_char(c)n }nn fn write_fmt(&mut self, args: Arguments<'_>) -> Result {n (**self).write_fmt(args)n }n}nn/// Configuration for formatting.n///n/// A `Formatter` represents various options related to formatting. Users do notn/// construct `Formatter`s directly; a mutable reference to one is passed ton/// the `fmt` method of all formatting traits, like [`Debug`] and [`Display`].n///n/// To interact with a `Formatter`, you'll call various methods to change then/// various options related to formatting. For examples, please see then/// documentation of the methods defined on `Formatter` below.n///n/// [`Debug`]: trait.Debug.htmln/// [`Display`]: trait.Display.htmln#[allow(missing_debug_implementations)]n#[stable(feature = 'rust1', since = '1.0.0')]npub struct Formatter<'a> {n flags: u32,n fill: char,n align: rt::v1::Alignment,n width: Option,n precision: Option,nn buf: &'a mut (dyn Write + 'a),n}nn// NB. Argument is essentially an optimized partially applied formatting function,n// equivalent to `exists T.(&T, fn(&T, &mut Formatter<'_>) -> Result`.nnextern 'C' {n type Opaque;n}nn/// This struct represents the generic 'argument' which is taken by the Xprintfn/// family of functions. It contains a function to format the given value. Atn/// compile time it is ensured that the function and the value have the correctn/// types, and then this struct is used to canonicalize arguments to one type.n#[derive(Copy, Clone)]n#[allow(missing_debug_implementations)]n#[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n#[doc(hidden)]npub struct ArgumentV1<'a> {n value: &'a Opaque,n formatter: fn(&Opaque, &mut Formatter<'_>) -> Result,n}nn// This guarantees a single stable value for the function pointer associated withn// indices/counts in the formatting infrastructure.n//n// Note that a function defined as such would not be correct as functions aren// always tagged unnamed_addr with the current lowering to LLVM IR, so theirn// address is not considered important to LLVM and as such the as_usize castn// could have been miscompiled. In practice, we never call as_usize on non-usizen// containing data (as a matter of static generation of the formattingn// arguments), so this is merely an additional check.n//n// We primarily want to ensure that the function pointer at `USIZE_MARKER` hasn// an address corresponding *only* to functions that also take `&usize` as theirn// first argument. The read_volatile here ensures that we can safely ready out an// usize from the passed reference and that this address does not point at an// non-usize taking function.n#[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]nstatic USIZE_MARKER: fn(&usize, &mut Formatter<'_>) -> Result = |ptr, _| {n // SAFETY: ptr is a referencen let _v: usize = unsafe { crate::ptr::read_volatile(ptr) };n loop {}n};nnimpl<'a> ArgumentV1<'a> {n #[doc(hidden)]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn new<'b, T>(x: &'b T, f: fn(&T, &mut Formatter<'_>) -> Result) -> ArgumentV1<'b> {n // SAFETY: `mem::transmute(x)` is safe becausen // 1. `&'b T` keeps the lifetime it originated with `'b`n // (so as to not have an unbounded lifetime)n // 2. `&'b T` and `&'b Opaque` have the same memory layoutn // (when `T` is `Sized`, as it is here)n // `mem::transmute(f)` is safe since `fn(&T, &mut Formatter<'_>) -> Result`n // and `fn(&Opaque, &mut Formatter<'_>) -> Result` have the same ABIn // (as long as `T` is `Sized`)n unsafe { ArgumentV1 { formatter: mem::transmute(f), value: mem::transmute(x) } }n }nn #[doc(hidden)]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn from_usize(x: &usize) -> ArgumentV1<'_> {n ArgumentV1::new(x, USIZE_MARKER)n }nn fn as_usize(&self) -> Option {n if self.formatter as usize == USIZE_MARKER as usize {n // SAFETY: The `formatter` field is only set to USIZE_MARKER ifn // the value is a usize, so this is safen Some(unsafe { *(self.value as *const _ as *const usize) })n } else {n Nonen }n }n}nn// flags available in the v1 format of format_argsn#[derive(Copy, Clone)]nenum FlagV1 {n SignPlus,n SignMinus,n Alternate,n SignAwareZeroPad,n DebugLowerHex,n DebugUpperHex,n}nnimpl<'a> Arguments<'a> {n /// When using the format_args!() macro, this function is used to generate then /// Arguments structure.n #[doc(hidden)]n #[inline]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn new_v1(pieces: &'a [&'a str], args: &'a [ArgumentV1<'a>]) -> Arguments<'a> {n Arguments { pieces, fmt: None, args }n }nn /// This function is used to specify nonstandard formatting parameters.n /// The `pieces` array must be at least as long as `fmt` to constructn /// a valid Arguments structure. Also, any `Count` within `fmt` that isn /// `CountIsParam` or `CountIsNextParam` has to point to an argumentn /// created with `argumentusize`. However, failing to do so doesn't causen /// unsafety, but will ignore invalid .n #[doc(hidden)]n #[inline]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn new_v1_formatted(n pieces: &'a [&'a str],n args: &'a [ArgumentV1<'a>],n fmt: &'a [rt::v1::Argument],n ) -> Arguments<'a> {n Arguments { pieces, fmt: Some(fmt), args }n }nn /// Estimates the length of the formatted text.n ///n /// This is intended to be used for setting initial `String` capacityn /// when using `format!`. Note: this is neither the lower nor upper bound.n #[doc(hidden)]n #[inline]n #[unstable(feature = 'fmt_internals', reason = 'internal to format_args!', issue = 'none')]n pub fn estimated_capacity(&self) -> usize {n let pieces_length: usize = self.pieces.iter().map(|x| x.len()).sum();nn if self.args.is_empty() {n pieces_lengthn } else if self.pieces[0] == '' && pieces_length < 16 {n // If the format string starts with an argument,n // don't preallocate anything, unless lengthn // of pieces is significant.n 0n } else {n // There are some arguments, so any additional pushn // will reallocate the string. To avoid that,n // we're 'pre-doubling' the capacity here.n pieces_length.checked_mul(2).unwrap_or(0)n }n }n}nn/// This structure represents a safely precompiled version of a format stringn/// and its arguments. This cannot be generated at runtime because it cannotn/// safely be done, so no constructors are given and the fields are privaten/// to prevent modification.n///n/// The [`format_args!`] macro will safely create an instance of this structure.n/// The macro validates the format string at compile-time so usage of then/// [`write`] and [`format`] functions can be safely performed.n///n/// You can use the `Arguments<'a>` that [`format_args!`] returns in `Debug`n/// and `Display` contexts as seen below. The example also shows that `Debug`n/// and `Display` format to the same thing: the interpolated format stringn/// in `format_args!`.n///n/// ```rustn/// let debug = format!('{:?}', format_args!('{} foo {:?}', 1, 2));n/// let display = format!('{}', format_args!('{} foo {:?}', 1, 2));n/// assert_eq!('1 foo 2', display);n/// assert_eq!(display, debug);n/// ```n///n/// [`format_args!`]: ../../std/macro.format_args.htmln/// [`format`]: ../../std/fmt/fn.format.htmln/// [`write`]: ../../std/fmt/fn.write.htmln#[stable(feature = 'rust1', since = '1.0.0')]n#[derive(Copy, Clone)]npub struct Arguments<'a> {n // Format string pieces to print.n pieces: &'a [&'a str],nn // Placeholder specs, or `None` if all specs are default (as in '{}{}').n fmt: Option<&'a [rt::v1::Argument]>,nn // Dynamic arguments for interpolation, to be interleaved with stringn // pieces. (Every argument is preceded by a string piece.)n args: &'a [ArgumentV1<'a>],n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for Arguments<'_> {n fn fmt(&self, fmt: &mut Formatter<'_>) -> Result {n Display::fmt(self, fmt)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for Arguments<'_> {n fn fmt(&self, fmt: &mut Formatter<'_>) -> Result {n write(fmt.buf, *self)n }n}nn/// `?` formatting.n///n/// `Debug` should format the output in a programmer-facing, debugging context.n///n/// Generally speaking, you should just `derive` a `Debug` implementation.n///n/// When used with the alternate format specifier `#?`, the output is pretty-printed.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// This trait can be used with `#[derive]` if all fields implement `Debug`. Whenn/// `derive`d for structs, it will use the name of the `struct`, then `{`, then an/// comma-separated list of each field's name and `Debug` value, then `}`. Forn/// `enum`s, it will use the name of the variant and, if applicable, `(`, then then/// `Debug` values of the fields, then `)`.n///n/// # Stabilityn///n/// Derived `Debug` formats are not stable, and so may change with future Rustn/// versions. Additionally, `Debug` implementations of types provided by then/// standard library (`libstd`, `libcore`, `liballoc`, etc.) are not stable, andn/// may also change with future Rust versions.n///n/// # Examplesn///n/// Deriving an implementation:n///n/// ```n/// #[derive(Debug)]n/// struct Point {n/// x: i32,n/// y: i32,n/// }n///n/// let origin = Point { x: 0, y: 0 };n///n/// assert_eq!(format!('The origin is: {:?}', origin), 'The origin is: Point { x: 0, y: 0 }');n/// ```n///n/// Manually implementing:n///n/// ```n/// use std::fmt;n///n/// struct Point {n/// x: i32,n/// y: i32,n/// }n///n/// impl fmt::Debug for Point {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// f.debug_struct('Point')n/// .field('x', &self.x)n/// .field('y', &self.y)n/// .finish()n/// }n/// }n///n/// let origin = Point { x: 0, y: 0 };n///n/// assert_eq!(format!('The origin is: {:?}', origin), 'The origin is: Point { x: 0, y: 0 }');n/// ```n///n/// There are a number of helper methods on the [`Formatter`] struct to help you with manualn/// implementations, such as [`debug_struct`].n///n/// `Debug` implementations using either `derive` or the debug builder APIn/// on [`Formatter`] support pretty-printing using the alternate flag: `{:#?}`.n///n/// [`debug_struct`]: ../../std/fmt/struct.Formatter.html#method.debug_structn/// [`Formatter`]: ../../std/fmt/struct.Formatter.htmln///n/// Pretty-printing with `#?`:n///n/// ```n/// #[derive(Debug)]n/// struct Point {n/// x: i32,n/// y: i32,n/// }n///n/// let origin = Point { x: 0, y: 0 };n///n/// assert_eq!(format!('The origin is: {:#?}', origin),n/// 'The origin is: Point {n/// x: 0,n/// y: 0,n/// }');n/// ```nn#[stable(feature = 'rust1', since = '1.0.0')]n#[rustc_on_unimplemented(n on(n crate_local,n label = '`{Self}` cannot be formatted using `{{:?}}`',n note = 'add `#[derive(Debug)]` or manually implement `{Debug}`'n ),n message = '`{Self}` doesn't implement `{Debug}`',n label = '`{Self}` cannot be formatted using `{{:?}}` because it doesn't implement `{Debug}`'n)]n#[doc(alias = '{:?}')]n#[rustc_diagnostic_item = 'debug_trait']npub trait Debug {n /// Formats the value using the given formatter.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Position {n /// longitude: f32,n /// latitude: f32,n /// }n ///n /// impl fmt::Debug for Position {n /// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n /// f.debug_tuple('')n /// .field(&self.longitude)n /// .field(&self.latitude)n /// .finish()n /// }n /// }n ///n /// let position = Position { longitude: 1.987, latitude: 2.983 };n /// assert_eq!(format!('{:?}', position), '(1.987, 2.983)');n ///n /// assert_eq!(format!('{:#?}', position), '(n /// 1.987,n /// 2.983,n /// )');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn// Separate module to reexport the macro `Debug` from prelude without the trait `Debug`.npub(crate) mod macros {n /// Derive macro generating an impl of the trait `Debug`.n #[rustc_builtin_macro]n #[stable(feature = 'builtin_macro_prelude', since = '1.38.0')]n #[allow_internal_unstable(core_intrinsics)]n pub macro Debug($item:item) {n /* compiler built-in */n }n}n#[stable(feature = 'builtin_macro_prelude', since = '1.38.0')]n#[doc(inline)]npub use macros::Debug;nn/// Format trait for an empty format, `{}`.n///n/// `Display` is similar to [`Debug`][debug], but `Display` is for user-facingn/// output, and so cannot be derived.n///n/// [debug]: trait.Debug.htmln///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Implementing `Display` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Point {n/// x: i32,n/// y: i32,n/// }n///n/// impl fmt::Display for Point {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// write!(f, '({}, {})', self.x, self.y)n/// }n/// }n///n/// let origin = Point { x: 0, y: 0 };n///n/// assert_eq!(format!('The origin is: {}', origin), 'The origin is: (0, 0)');n/// ```n#[rustc_on_unimplemented(n on(n _Self = 'std::path::Path',n label = '`{Self}` cannot be formatted with the default formatter; call `.display()` on it',n note = 'call `.display()` or `.to_string_lossy()` to safely print paths, n as they may contain non-Unicode data'n ),n message = '`{Self}` doesn't implement `{Display}`',n label = '`{Self}` cannot be formatted with the default formatter',n note = 'in format strings you may be able to use `{{:?}}` (or {{:#?}} for pretty-print) instead'n)]n#[doc(alias = '{}')]n#[stable(feature = 'rust1', since = '1.0.0')]npub trait Display {n /// Formats the value using the given formatter.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Position {n /// longitude: f32,n /// latitude: f32,n /// }n ///n /// impl fmt::Display for Position {n /// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n /// write!(f, '({}, {})', self.longitude, self.latitude)n /// }n /// }n ///n /// assert_eq!('(1.987, 2.983)',n /// format!('{}', Position { longitude: 1.987, latitude: 2.983, }));n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `o` formatting.n///n/// The `Octal` trait should format its output as a number in base-8.n///n/// For primitive signed integers (`i8` to `i128`, and `isize`),n/// negative values are formatted as the two_s complement representation.n///n/// The alternate flag, `#`, adds a `0o` in front of the output.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `i32`:n///n/// ```n/// let x = 42; // 42 is '52' in octaln///n/// assert_eq!(format!('{:o}', x), '52');n/// assert_eq!(format!('{:#o}', x), '0o52');n///n/// assert_eq!(format!('{:o}', -16), '37777777760');n/// ```n///n/// Implementing `Octal` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::Octal for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = self.0;n///n/// fmt::Octal::fmt(&val, f) // delegate to i32's implementationn/// }n/// }n///n/// let l = Length(9);n///n/// assert_eq!(format!('l as octal is: {:o}', l), 'l as octal is: 11');n///n/// assert_eq!(format!('l as octal is: {:#06o}', l), 'l as octal is: 0o0011');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait Octal {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `b` formatting.n///n/// The `Binary` trait should format its output as a number in binary.n///n/// For primitive signed integers ([`i8`] to [`i128`], and [`isize`]),n/// negative values are formatted as the two_s complement representation.n///n/// The alternate flag, `#`, adds a `0b` in front of the output.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// # Examplesn///n/// Basic usage with [`i32`]:n///n/// ```n/// let x = 42; // 42 is '101010' in binaryn///n/// assert_eq!(format!('{:b}', x), '101010');n/// assert_eq!(format!('{:#b}', x), '0b101010');n///n/// assert_eq!(format!('{:b}', -16), '11111111111111111111111111110000');n/// ```n///n/// Implementing `Binary` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::Binary for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = self.0;n///n/// fmt::Binary::fmt(&val, f) // delegate to i32's implementationn/// }n/// }n///n/// let l = Length(107);n///n/// assert_eq!(format!('l as binary is: {:b}', l), 'l as binary is: 1101011');n///n/// assert_eq!(n/// format!('l as binary is: {:#032b}', l),n/// 'l as binary is: 0b000000000000000000000001101011'n/// );n/// ```n///n/// [module]: ../../std/fmt/index.htmln/// [`i8`]: ../../std/primitive.i8.htmln/// [`i128`]: ../../std/primitive.i128.htmln/// [`isize`]: ../../std/primitive.isize.htmln/// [`i32`]: ../../std/primitive.i32.htmln#[stable(feature = 'rust1', since = '1.0.0')]npub trait Binary {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `x` formatting.n///n/// The `LowerHex` trait should format its output as a number in hexadecimal, with `a` through `f`n/// in lower case.n///n/// For primitive signed integers (`i8` to `i128`, and `isize`),n/// negative values are formatted as the two_s complement representation.n///n/// The alternate flag, `#`, adds a `0x` in front of the output.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `i32`:n///n/// ```n/// let x = 42; // 42 is '2a' in hexn///n/// assert_eq!(format!('{:x}', x), '2a');n/// assert_eq!(format!('{:#x}', x), '0x2a');n///n/// assert_eq!(format!('{:x}', -16), 'fffffff0');n/// ```n///n/// Implementing `LowerHex` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::LowerHex for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = self.0;n///n/// fmt::LowerHex::fmt(&val, f) // delegate to i32's implementationn/// }n/// }n///n/// let l = Length(9);n///n/// assert_eq!(format!('l as hex is: {:x}', l), 'l as hex is: 9');n///n/// assert_eq!(format!('l as hex is: {:#010x}', l), 'l as hex is: 0x00000009');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait LowerHex {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `X` formatting.n///n/// The `UpperHex` trait should format its output as a number in hexadecimal, with `A` through `F`n/// in upper case.n///n/// For primitive signed integers (`i8` to `i128`, and `isize`),n/// negative values are formatted as the two_s complement representation.n///n/// The alternate flag, `#`, adds a `0x` in front of the output.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `i32`:n///n/// ```n/// let x = 42; // 42 is '2A' in hexn///n/// assert_eq!(format!('{:X}', x), '2A');n/// assert_eq!(format!('{:#X}', x), '0x2A');n///n/// assert_eq!(format!('{:X}', -16), 'FFFFFFF0');n/// ```n///n/// Implementing `UpperHex` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::UpperHex for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = self.0;n///n/// fmt::UpperHex::fmt(&val, f) // delegate to i32's implementationn/// }n/// }n///n/// let l = Length(i32::MAX);n///n/// assert_eq!(format!('l as hex is: {:X}', l), 'l as hex is: 7FFFFFFF');n///n/// assert_eq!(format!('l as hex is: {:#010X}', l), 'l as hex is: 0x7FFFFFFF');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait UpperHex {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `p` formatting.n///n/// The `Pointer` trait should format its output as a memory location. This is commonly presentedn/// as hexadecimal.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `&i32`:n///n/// ```n/// let x = &42;n///n/// let address = format!('{:p}', x); // this produces something like '0x7f06092ac6d0'n/// ```n///n/// Implementing `Pointer` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::Pointer for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// // use `as` to convert to a `*const T`, which implements Pointer, which we can usen///n/// let ptr = self as *const Self;n/// fmt::Pointer::fmt(&ptr, f)n/// }n/// }n///n/// let l = Length(42);n///n/// println!('l is in memory here: {:p}', l);n///n/// let l_ptr = format!('{:018p}', l);n/// assert_eq!(l_ptr.len(), 18);n/// assert_eq!(&l_ptr[..2], '0x');n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait Pointer {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `e` formatting.n///n/// The `LowerExp` trait should format its output in scientific notation with a lower-case `e`.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `f64`:n///n/// ```n/// let x = 42.0; // 42.0 is '4.2e1' in scientific notationn///n/// assert_eq!(format!('{:e}', x), '4.2e1');n/// ```n///n/// Implementing `LowerExp` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::LowerExp for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = f64::from(self.0);n/// fmt::LowerExp::fmt(&val, f) // delegate to f64's implementationn/// }n/// }n///n/// let l = Length(100);n///n/// assert_eq!(n/// format!('l in scientific notation is: {:e}', l),n/// 'l in scientific notation is: 1e2'n/// );n///n/// assert_eq!(n/// format!('l in scientific notation is: {:05e}', l),n/// 'l in scientific notation is: 001e2'n/// );n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait LowerExp {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// `E` formatting.n///n/// The `UpperExp` trait should format its output in scientific notation with an upper-case `E`.n///n/// For more information on formatters, see [the module-level documentation][module].n///n/// [module]: ../../std/fmt/index.htmln///n/// # Examplesn///n/// Basic usage with `f64`:n///n/// ```n/// let x = 42.0; // 42.0 is '4.2E1' in scientific notationn///n/// assert_eq!(format!('{:E}', x), '4.2E1');n/// ```n///n/// Implementing `UpperExp` on a type:n///n/// ```n/// use std::fmt;n///n/// struct Length(i32);n///n/// impl fmt::UpperExp for Length {n/// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n/// let val = f64::from(self.0);n/// fmt::UpperExp::fmt(&val, f) // delegate to f64's implementationn/// }n/// }n///n/// let l = Length(100);n///n/// assert_eq!(n/// format!('l in scientific notation is: {:E}', l),n/// 'l in scientific notation is: 1E2'n/// );n///n/// assert_eq!(n/// format!('l in scientific notation is: {:05E}', l),n/// 'l in scientific notation is: 001E2'n/// );n/// ```n#[stable(feature = 'rust1', since = '1.0.0')]npub trait UpperExp {n /// Formats the value using the given formatter.n #[stable(feature = 'rust1', since = '1.0.0')]n fn fmt(&self, f: &mut Formatter<'_>) -> Result;n}nn/// The `write` function takes an output stream, and an `Arguments` structn/// that can be precompiled with the `format_args!` macro.n///n/// The arguments will be formatted according to the specified format stringn/// into the output stream provided.n///n/// # Examplesn///n/// Basic usage:n///n/// ```n/// use std::fmt;n///n/// let mut output = String::new();n/// fmt::write(&mut output, format_args!('Hello {}!', 'world'))n/// .expect('Error occurred while trying to write in String');n/// assert_eq!(output, 'Hello world!');n/// ```n///n/// Please note that using [`write!`] might be preferable. Example:n///n/// ```n/// use std::fmt::Write;n///n/// let mut output = String::new();n/// write!(&mut output, 'Hello {}!', 'world')n/// .expect('Error occurred while trying to write in String');n/// assert_eq!(output, 'Hello world!');n/// ```n///n/// [`write!`]: ../../std/macro.write.htmln#[stable(feature = 'rust1', since = '1.0.0')]npub fn write(output: &mut dyn Write, args: Arguments<'_>) -> Result {n let mut formatter = Formatter {n flags: 0,n width: None,n precision: None,n buf: output,n align: rt::v1::Alignment::Unknown,n fill: ' ',n };nn let mut idx = 0;nn match args.fmt {n None => {n // We can use default formatting parameters for all arguments.n for (arg, piece) in args.args.iter().zip(args.pieces.iter()) {n formatter.buf.write_str(*piece)?;n (arg.formatter)(arg.value, &mut formatter)?;n idx += 1;n }n }n Some(fmt) => {n // Every spec has a corresponding argument that is preceded byn // a string piece.n for (arg, piece) in fmt.iter().zip(args.pieces.iter()) {n formatter.buf.write_str(*piece)?;n run(&mut formatter, arg, &args.args)?;n idx += 1;n }n }n }nn // There can be only one trailing string piece left.n if let Some(piece) = args.pieces.get(idx) {n formatter.buf.write_str(*piece)?;n }nn Ok(())n}nnfn run(fmt: &mut Formatter<'_>, arg: &rt::v1::Argument, args: &[ArgumentV1<'_>]) -> Result {n fmt.fill = arg.format.fill;n fmt.align = arg.format.align;n fmt.flags = arg.format.flags;n fmt.width = getcount(args, &arg.format.width);n fmt.precision = getcount(args, &arg.format.precision);nn // Extract the correct argumentn let value = args[arg.position];nn // Then actually do some printingn (value.formatter)(value.value, fmt)n}nnfn getcount(args: &[ArgumentV1<'_>], cnt: &rt::v1::Count) -> Option {n match *cnt {n rt::v1::Count::Is(n) => Some(n),n rt::v1::Count::Implied => None,n rt::v1::Count::Param(i) => args[i].as_usize(),n }n}nn/// Padding after the end of something. Returned by `Formatter::padding`.n#[must_use = 'don't forget to write the post padding']nstruct PostPadding {n fill: char,n padding: usize,n}nnimpl PostPadding {n fn new(fill: char, padding: usize) -> PostPadding {n PostPadding { fill, padding }n }nn /// Write this post padding.n fn write(self, buf: &mut dyn Write) -> Result {n for _ in 0..self.padding {n buf.write_char(self.fill)?;n }n Ok(())n }n}nnimpl<'a> Formatter<'a> {n fn wrap_buf<'b, 'c, F>(&'b mut self, wrap: F) -> Formatter<'c>n wheren 'b: 'c,n F: FnOnce(&'b mut (dyn Write + 'b)) -> &'c mut (dyn Write + 'c),n {n Formatter {n // We want to change thisn buf: wrap(self.buf),nn // And preserve thesen flags: self.flags,n fill: self.fill,n align: self.align,n width: self.width,n precision: self.precision,n }n }nn // Helper methods used for padding and processing formatting arguments thatn // all formatting traits can use.nn /// Performs the correct padding for an integer which has already beenn /// emitted into a str. The str should *not* contain the sign for then /// integer, that will be added by this method.n ///n /// # Argumentsn ///n /// * is_nonnegative - whether the original integer was either positive or zero.n /// * prefix - if the '#' character (Alternate) is provided, thisn /// is the prefix to put in front of the number.n /// * buf - the byte array that the number has been formatted inton ///n /// This function will correctly account for the flags provided as well asn /// the minimum width. It will not take precision into account.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo { nb: i32 };n ///n /// impl Foo {n /// fn new(nb: i32) -> Foo {n /// Foo {n /// nb,n /// }n /// }n /// }n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// // We need to remove '-' from the number output.n /// let tmp = self.nb.abs().to_string();n ///n /// formatter.pad_integral(self.nb > 0, 'Foo ', &tmp)n /// }n /// }n ///n /// assert_eq!(&format!('{}', Foo::new(2)), '2');n /// assert_eq!(&format!('{}', Foo::new(-1)), '-1');n /// assert_eq!(&format!('{:#}', Foo::new(-1)), '-Foo 1');n /// assert_eq!(&format!('{:0>#8}', Foo::new(-1)), '00-Foo 1');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n pub fn pad_integral(&mut self, is_nonnegative: bool, prefix: &str, buf: &str) -> Result {n let mut width = buf.len();nn let mut sign = None;n if !is_nonnegative {n sign = Some('-');n width += 1;n } else if self.sign_plus() {n sign = Some('+');n width += 1;n }nn let prefix = if self.alternate() {n width += prefix.chars().count();n Some(prefix)n } else {n Nonen };nn // Writes the sign if it exists, and then the prefix if it was requestedn #[inline(never)]n fn write_prefix(f: &mut Formatter<'_>, sign: Option, prefix: Option<&str>) -> Result {n if let Some(c) = sign {n f.buf.write_char(c)?;n }n if let Some(prefix) = prefix { f.buf.write_str(prefix) } else { Ok(()) }n }nn // The `width` field is more of a `min-width` parameter at this point.n match self.width {n // If there's no minimum length requirements then we can justn // write the bytes.n None => {n write_prefix(self, sign, prefix)?;n self.buf.write_str(buf)n }n // Check if we're over the minimum width, if so then we can alson // just write the bytes.n Some(min) if width >= min => {n write_prefix(self, sign, prefix)?;n self.buf.write_str(buf)n }n // The sign and prefix goes before the padding if the fill charactern // is zeron Some(min) if self.sign_aware_zero_pad() => {n let old_fill = crate::mem::replace(&mut self.fill, '0');n let old_align = crate::mem::replace(&mut self.align, rt::v1::Alignment::Right);n write_prefix(self, sign, prefix)?;n let post_padding = self.padding(min - width, rt::v1::Alignment::Right)?;n self.buf.write_str(buf)?;n post_padding.write(self.buf)?;n self.fill = old_fill;n self.align = old_align;n Ok(())n }n // Otherwise, the sign and prefix goes after the paddingn Some(min) => {n let post_padding = self.padding(min - width, rt::v1::Alignment::Right)?;n write_prefix(self, sign, prefix)?;n self.buf.write_str(buf)?;n post_padding.write(self.buf)n }n }n }nn /// This function takes a string slice and emits it to the internal buffern /// after applying the relevant formatting flags specified. The flagsn /// recognized for generic strings are:n ///n /// * width - the minimum width of what to emitn /// * fill/align - what to emit and where to emit it if the stringn /// provided needs to be paddedn /// * precision - the maximum length to emit, the string is truncated if itn /// is longer than this lengthn ///n /// Notably this function ignores the `flag` parameters.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo;n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// formatter.pad('Foo')n /// }n /// }n ///n /// assert_eq!(&format!('{:<4}', Foo), 'Foo ');n /// assert_eq!(&format!('{:0>4}', Foo), '0Foo');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n pub fn pad(&mut self, s: &str) -> Result {n // Make sure there's a fast path up frontn if self.width.is_none() && self.precision.is_none() {n return self.buf.write_str(s);n }n // The `precision` field can be interpreted as a `max-width` for then // string being formatted.n let s = if let Some(max) = self.precision {n // If our string is longer that the precision, then we must haven // truncation. However other flags like `fill`, `width` and `align`n // must act as always.n if let Some((i, _)) = s.char_indices().nth(max) {n // LLVM here can't prove that `..i` won't panic `&s[..i]`, butn // we know that it can't panic. Use `get` + `unwrap_or` to avoidn // `unsafe` and otherwise don't emit any panic-related coden // here.n s.get(..i).unwrap_or(&s)n } else {n &sn }n } else {n &sn };n // The `width` field is more of a `min-width` parameter at this point.n match self.width {n // If we're under the maximum length, and there's no minimum lengthn // requirements, then we can just emit the stringn None => self.buf.write_str(s),n // If we're under the maximum width, check if we're over the minimumn // width, if so it's as easy as just emitting the string.n Some(width) if s.chars().count() >= width => self.buf.write_str(s),n // If we're under both the maximum and the minimum width, then filln // up the minimum width with the specified string + some alignment.n Some(width) => {n let align = rt::v1::Alignment::Left;n let post_padding = self.padding(width - s.chars().count(), align)?;n self.buf.write_str(s)?;n post_padding.write(self.buf)n }n }n }nn /// Write the pre-padding and return the unwritten post-padding. Callers aren /// responsible for ensuring post-padding is written after the thing that isn /// being padded.n fn padding(n &mut self,n padding: usize,n default: rt::v1::Alignment,n ) -> result::Result {n let align = match self.align {n rt::v1::Alignment::Unknown => default,n _ => self.align,n };nn let (pre_pad, post_pad) = match align {n rt::v1::Alignment::Left => (0, padding),n rt::v1::Alignment::Right | rt::v1::Alignment::Unknown => (padding, 0),n rt::v1::Alignment::Center => (padding / 2, (padding + 1) / 2),n };nn for _ in 0..pre_pad {n self.buf.write_char(self.fill)?;n }nn Ok(PostPadding::new(self.fill, post_pad))n }nn /// Takes the formatted parts and applies the padding.n /// Assumes that the caller already has rendered the parts with required precision,n /// so that `self.precision` can be ignored.n fn pad_formatted_parts(&mut self, formatted: &flt2dec::Formatted<'_>) -> Result {n if let Some(mut width) = self.width {n // for the sign-aware zero padding, we render the sign first andn // behave as if we had no sign from the beginning.n let mut formatted = formatted.clone();n let old_fill = self.fill;n let old_align = self.align;n let mut align = old_align;n if self.sign_aware_zero_pad() {n // a sign always goes firstn let sign = formatted.sign;n self.buf.write_str(sign)?;nn // remove the sign from the formatted partsn formatted.sign = '';n width = width.saturating_sub(sign.len());n align = rt::v1::Alignment::Right;n self.fill = '0';n self.align = rt::v1::Alignment::Right;n }nn // remaining parts go through the ordinary padding process.n let len = formatted.len();n let ret = if width <= len {n // no paddingn self.write_formatted_parts(&formatted)n } else {n let post_padding = self.padding(width - len, align)?;n self.write_formatted_parts(&formatted)?;n post_padding.write(self.buf)n };n self.fill = old_fill;n self.align = old_align;n retn } else {n // this is the common case and we take a shortcutn self.write_formatted_parts(formatted)n }n }nn fn write_formatted_parts(&mut self, formatted: &flt2dec::Formatted<'_>) -> Result {n fn write_bytes(buf: &mut dyn Write, s: &[u8]) -> Result {n // SAFETY: This is used for `flt2dec::Part::Num` and `flt2dec::Part::Copy`.n // It's safe to use for `flt2dec::Part::Num` since every char `c` is betweenn // `b'0'` and `b'9'`, which means `s` is valid UTF-8.n // It's also probably safe in practice to use for `flt2dec::Part::Copy(buf)`n // since `buf` should be plain ASCII, but it's possible for someone to passn // in a bad value for `buf` into `flt2dec::to_shortest_str` since it is an // public function.n // FIXME: Determine whether this could result in UB.n buf.write_str(unsafe { str::from_utf8_unchecked(s) })n }nn if !formatted.sign.is_empty() {n self.buf.write_str(formatted.sign)?;n }n for part in formatted.parts {n match *part {n flt2dec::Part::Zero(mut nzeroes) => {n const ZEROES: &str = // 64 zeroesn '0000000000000000000000000000000000000000000000000000000000000000';n while nzeroes > ZEROES.len() {n self.buf.write_str(ZEROES)?;n nzeroes -= ZEROES.len();n }n if nzeroes > 0 {n self.buf.write_str(&ZEROES[..nzeroes])?;n }n }n flt2dec::Part::Num(mut v) => {n let mut s = [0; 5];n let len = part.len();n for c in s[..len].iter_mut().rev() {n *c = b'0' + (v % 10) as u8;n v /= 10;n }n write_bytes(self.buf, &s[..len])?;n }n flt2dec::Part::Copy(buf) => {n write_bytes(self.buf, buf)?;n }n }n }n Ok(())n }nn /// Writes some data to the underlying buffer contained within thisn /// formatter.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo;n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// formatter.write_str('Foo')n /// // This is equivalent to:n /// // write!(formatter, 'Foo')n /// }n /// }n ///n /// assert_eq!(&format!('{}', Foo), 'Foo');n /// assert_eq!(&format!('{:0>8}', Foo), 'Foo');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n pub fn write_str(&mut self, data: &str) -> Result {n self.buf.write_str(data)n }nn /// Writes some formatted information into this instance.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// formatter.write_fmt(format_args!('Foo {}', self.0))n /// }n /// }n ///n /// assert_eq!(&format!('{}', Foo(-1)), 'Foo -1');n /// assert_eq!(&format!('{:0>8}', Foo(2)), 'Foo 2');n /// ```n #[stable(feature = 'rust1', since = '1.0.0')]n pub fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result {n write(self.buf, fmt)n }nn /// Flags for formattingn #[stable(feature = 'rust1', since = '1.0.0')]n #[rustc_deprecated(n since = '1.24.0',n reason = 'use the `sign_plus`, `sign_minus`, `alternate`, n or `sign_aware_zero_pad` methods instead'n )]n pub fn flags(&self) -> u32 {n self.flagsn }nn /// Character used as 'fill' whenever there is alignment.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo;n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// let c = formatter.fill();n /// if let Some(width) = formatter.width() {n /// for _ in 0..width {n /// write!(formatter, '{}', c)?;n /// }n /// Ok(())n /// } else {n /// write!(formatter, '{}', c)n /// }n /// }n /// }n ///n /// // We set alignment to the left with '>'.n /// assert_eq!(&format!('{:G>3}', Foo), 'GGG');n /// assert_eq!(&format!('{:t>6}', Foo), 'tttttt');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn fill(&self) -> char {n self.filln }nn /// Flag indicating what form of alignment was requested.n ///n /// # Examplesn ///n /// ```n /// extern crate core;n ///n /// use std::fmt::{self, Alignment};n ///n /// struct Foo;n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// let s = if let Some(s) = formatter.align() {n /// match s {n /// Alignment::Left => 'left',n /// Alignment::Right => 'right',n /// Alignment::Center => 'center',n /// }n /// } else {n /// 'into the void'n /// };n /// write!(formatter, '{}', s)n /// }n /// }n ///n /// assert_eq!(&format!('{:<}', Foo), 'left');n /// assert_eq!(&format!('{:>}', Foo), 'right');n /// assert_eq!(&format!('{:^}', Foo), 'center');n /// assert_eq!(&format!('{}', Foo), 'into the void');n /// ```n #[stable(feature = 'fmt_flags_align', since = '1.28.0')]n pub fn align(&self) -> Option {n match self.align {n rt::v1::Alignment::Left => Some(Alignment::Left),n rt::v1::Alignment::Right => Some(Alignment::Right),n rt::v1::Alignment::Center => Some(Alignment::Center),n rt::v1::Alignment::Unknown => None,n }n }nn /// Optionally specified integer width that the output should be.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if let Some(width) = formatter.width() {n /// // If we received a width, we use itn /// write!(formatter, '{:width$}', &format!('Foo({})', self.0), width = width)n /// } else {n /// // Otherwise we do nothing specialn /// write!(formatter, 'Foo({})', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:10}', Foo(23)), 'Foo(23) ');n /// assert_eq!(&format!('{}', Foo(23)), 'Foo(23)');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn width(&self) -> Option {n self.widthn }nn /// Optionally specified precision for numeric types. Alternatively, then /// maximum width for string types.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(f32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if let Some(precision) = formatter.precision() {n /// // If we received a precision, we use it.n /// write!(formatter, 'Foo({1:.*})', precision, self.0)n /// } else {n /// // Otherwise we default to 2.n /// write!(formatter, 'Foo({:.2})', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:.4}', Foo(23.2)), 'Foo(23.2000)');n /// assert_eq!(&format!('{}', Foo(23.2)), 'Foo(23.20)');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn precision(&self) -> Option {n self.precisionn }nn /// Determines if the `+` flag was specified.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if formatter.sign_plus() {n /// write!(formatter,n /// 'Foo({}{})',n /// if self.0 < 0 { '-' } else { '+' },n /// self.0)n /// } else {n /// write!(formatter, 'Foo({})', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:+}', Foo(23)), 'Foo(+23)');n /// assert_eq!(&format!('{}', Foo(23)), 'Foo(23)');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn sign_plus(&self) -> bool {n self.flags & (1 << FlagV1::SignPlus as u32) != 0n }nn /// Determines if the `-` flag was specified.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if formatter.sign_minus() {n /// // You want a minus sign? Have one!n /// write!(formatter, '-Foo({})', self.0)n /// } else {n /// write!(formatter, 'Foo({})', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:-}', Foo(23)), '-Foo(23)');n /// assert_eq!(&format!('{}', Foo(23)), 'Foo(23)');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn sign_minus(&self) -> bool {n self.flags & (1 << FlagV1::SignMinus as u32) != 0n }nn /// Determines if the `#` flag was specified.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// if formatter.alternate() {n /// write!(formatter, 'Foo({})', self.0)n /// } else {n /// write!(formatter, '{}', self.0)n /// }n /// }n /// }n ///n /// assert_eq!(&format!('{:#}', Foo(23)), 'Foo(23)');n /// assert_eq!(&format!('{}', Foo(23)), '23');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn alternate(&self) -> bool {n self.flags & (1 << FlagV1::Alternate as u32) != 0n }nn /// Determines if the `0` flag was specified.n ///n /// # Examplesn ///n /// ```n /// use std::fmt;n ///n /// struct Foo(i32);n ///n /// impl fmt::Display for Foo {n /// fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {n /// assert!(formatter.sign_aware_zero_pad());n /// assert_eq!(formatter.width(), Some(4));n /// // We ignore the formatter's options.n /// write!(formatter, '{}', self.0)n /// }n /// }n ///n /// assert_eq!(&format!('{:04}', Foo(23)), '23');n /// ```n #[stable(feature = 'fmt_flags', since = '1.5.0')]n pub fn sign_aware_zero_pad(&self) -> bool {n self.flags & (1 << FlagV1::SignAwareZeroPad as u32) != 0n }nn // FIXME: Decide what public API we want for these two flags.n // https://github.com/rust-lang/rust/issues/48584n fn debug_lower_hex(&self) -> bool {n self.flags & (1 << FlagV1::DebugLowerHex as u32) != 0n }nn fn debug_upper_hex(&self) -> bool {n self.flags & (1 << FlagV1::DebugUpperHex as u32) != 0n }nn /// Creates a [`DebugStruct`] builder designed to assist with creation ofn /// [`fmt::Debug`] implementations for structs.n ///n /// [`DebugStruct`]: ../../std/fmt/struct.DebugStruct.htmln /// [`fmt::Debug`]: ../../std/fmt/trait.Debug.htmln ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n /// use std::net::Ipv4Addr;n ///n /// struct Foo {n /// bar: i32,n /// baz: String,n /// addr: Ipv4Addr,n /// }n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_struct('Foo')n /// .field('bar', &self.bar)n /// .field('baz', &self.baz)n /// .field('addr', &format_args!('{}', self.addr))n /// .finish()n /// }n /// }n ///n /// assert_eq!(n /// 'Foo { bar: 10, baz: 'Hello World', addr: 127.0.0.1 }',n /// format!('{:?}', Foo {n /// bar: 10,n /// baz: 'Hello World'.to_string(),n /// addr: Ipv4Addr::new(127, 0, 0, 1),n /// })n /// );n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_struct<'b>(&'b mut self, name: &str) -> DebugStruct<'b, 'a> {n builders::debug_struct_new(self, name)n }nn /// Creates a `DebugTuple` builder designed to assist with creation ofn /// `fmt::Debug` implementations for tuple structs.n ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n /// use std::marker::PhantomData;n ///n /// struct Foo(i32, String, PhantomData);n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_tuple('Foo')n /// .field(&self.0)n /// .field(&self.1)n /// .field(&format_args!('_'))n /// .finish()n /// }n /// }n ///n /// assert_eq!(n /// 'Foo(10, 'Hello', _)',n /// format!('{:?}', Foo(10, 'Hello'.to_string(), PhantomData::))n /// );n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_tuple<'b>(&'b mut self, name: &str) -> DebugTuple<'b, 'a> {n builders::debug_tuple_new(self, name)n }nn /// Creates a `DebugList` builder designed to assist with creation ofn /// `fmt::Debug` implementations for list-like structures.n ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n ///n /// struct Foo(Vec);n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_list().entries(self.0.iter()).finish()n /// }n /// }n ///n /// assert_eq!(format!('{:?}', Foo(vec![10, 11])), '[10, 11]');n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_list<'b>(&'b mut self) -> DebugList<'b, 'a> {n builders::debug_list_new(self)n }nn /// Creates a `DebugSet` builder designed to assist with creation ofn /// `fmt::Debug` implementations for set-like structures.n ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n ///n /// struct Foo(Vec);n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_set().entries(self.0.iter()).finish()n /// }n /// }n ///n /// assert_eq!(format!('{:?}', Foo(vec![10, 11])), '{10, 11}');n /// ```n ///n /// [`format_args!`]: ../../std/macro.format_args.htmln ///n /// In this more complex example, we use [`format_args!`] and `.debug_set()`n /// to build a list of match arms:n ///n /// ```rustn /// use std::fmt;n ///n /// struct Arm<'a, L: 'a, R: 'a>(&'a (L, R));n /// struct Table<'a, K: 'a, V: 'a>(&'a [(K, V)], V);n ///n /// impl<'a, L, R> fmt::Debug for Arm<'a, L, R>n /// wheren /// L: 'a + fmt::Debug, R: 'a + fmt::Debugn /// {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// L::fmt(&(self.0).0, fmt)?;n /// fmt.write_str(' => ')?;n /// R::fmt(&(self.0).1, fmt)n /// }n /// }n ///n /// impl<'a, K, V> fmt::Debug for Table<'a, K, V>n /// wheren /// K: 'a + fmt::Debug, V: 'a + fmt::Debugn /// {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_set()n /// .entries(self.0.iter().map(Arm))n /// .entry(&Arm(&(format_args!('_'), &self.1)))n /// .finish()n /// }n /// }n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_set<'b>(&'b mut self) -> DebugSet<'b, 'a> {n builders::debug_set_new(self)n }nn /// Creates a `DebugMap` builder designed to assist with creation ofn /// `fmt::Debug` implementations for map-like structures.n ///n /// # Examplesn ///n /// ```rustn /// use std::fmt;n ///n /// struct Foo(Vec<(String, i32)>);n ///n /// impl fmt::Debug for Foo {n /// fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {n /// fmt.debug_map().entries(self.0.iter().map(|&(ref k, ref v)| (k, v))).finish()n /// }n /// }n ///n /// assert_eq!(n /// format!('{:?}', Foo(vec![('A'.to_string(), 10), ('B'.to_string(), 11)])),n /// r#'{'A': 10, 'B': 11}'#n /// );n /// ```n #[stable(feature = 'debug_builders', since = '1.2.0')]n pub fn debug_map<'b>(&'b mut self) -> DebugMap<'b, 'a> {n builders::debug_map_new(self)n }n}nn#[stable(since = '1.2.0', feature = 'formatter_write')]nimpl Write for Formatter<'_> {n fn write_str(&mut self, s: &str) -> Result {n self.buf.write_str(s)n }nn fn write_char(&mut self, c: char) -> Result {n self.buf.write_char(c)n }nn fn write_fmt(&mut self, args: Arguments<'_>) -> Result {n write(self.buf, args)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for Error {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Display::fmt('an error occurred when formatting an argument', f)n }n}nn// Implementations of the core formatting traitsnnmacro_rules! fmt_refs {n ($($tr:ident),*) => {n $(n #[stable(feature = 'rust1', since = '1.0.0')]n impl $tr for &T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result { $tr::fmt(&**self, f) }n }n #[stable(feature = 'rust1', since = '1.0.0')]n impl $tr for &mut T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result { $tr::fmt(&**self, f) }n }n )*n }n}nnfmt_refs! { Debug, Display, Octal, Binary, LowerHex, UpperHex, LowerExp, UpperExp }nn#[unstable(feature = 'never_type', issue = '35121')]nimpl Debug for ! {n fn fmt(&self, _: &mut Formatter<'_>) -> Result {n *selfn }n}nn#[unstable(feature = 'never_type', issue = '35121')]nimpl Display for ! {n fn fmt(&self, _: &mut Formatter<'_>) -> Result {n *selfn }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for bool {n #[inline]n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Display::fmt(self, f)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for bool {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Display::fmt(if *self { 'true' } else { 'false' }, f)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for str {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.write_char(''')?;n let mut from = 0;n for (i, c) in self.char_indices() {n let esc = c.escape_debug();n // If char needs escaping, flush backlog so far and write, else skipn if esc.len() != 1 {n f.write_str(&self[from..i])?;n for c in esc {n f.write_char(c)?;n }n from = i + c.len_utf8();n }n }n f.write_str(&self[from..])?;n f.write_char(''')n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for str {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.pad(self)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for char {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.write_char(''')?;n for c in self.escape_debug() {n f.write_char(c)?n }n f.write_char(''')n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Display for char {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n if f.width.is_none() && f.precision.is_none() {n f.write_char(*self)n } else {n f.pad(self.encode_utf8(&mut [0; 4]))n }n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Pointer for *const T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n let old_width = f.width;n let old_flags = f.flags;nn // The alternate flag is already treated by LowerHex as being special-n // it denotes whether to prefix with 0x. We use it to work out whethern // or not to zero extend, and then unconditionally set it to get then // prefix.n if f.alternate() {n f.flags |= 1 << (FlagV1::SignAwareZeroPad as u32);nn if f.width.is_none() {n f.width = Some(((mem::size_of::() * 8) / 4) + 2);n }n }n f.flags |= 1 << (FlagV1::Alternate as u32);nn let ret = LowerHex::fmt(&(*self as *const () as usize), f);nn f.width = old_width;n f.flags = old_flags;nn retn }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Pointer for *mut T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(&(*self as *const T), f)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Pointer for &T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(&(*self as *const T), f)n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Pointer for &mut T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(&(&**self as *const T), f)n }n}nn// Implementation of Display/Debug for various core typesnn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for *const T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(self, f)n }n}n#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for *mut T {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n Pointer::fmt(self, f)n }n}nnmacro_rules! peel {n ($name:ident, $($other:ident,)*) => (tuple! { $($other,)* })n}nnmacro_rules! tuple {n () => ();n ( $($name:ident,)+ ) => (n #[stable(feature = 'rust1', since = '1.0.0')]n impl<$($name:Debug),+> Debug for ($($name,)+) where last_type!($($name,)+): ?Sized {n #[allow(non_snake_case, unused_assignments)]n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n let mut builder = f.debug_tuple('');n let ($(ref $name,)+) = *self;n $(n builder.field(&$name);n )+nn builder.finish()n }n }n peel! { $($name,)+ }n )n}nnmacro_rules! last_type {n ($a:ident,) => { $a };n ($a:ident, $($rest_a:ident,)+) => { last_type!($($rest_a,)+) };n}nntuple! { T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, }nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for [T] {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.debug_list().entries(self.iter()).finish()n }n}nn#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for () {n #[inline]n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.pad('()')n }n}n#[stable(feature = 'rust1', since = '1.0.0')]nimpl Debug for PhantomData {n fn fmt(&self, f: &mut Formatter<'_>) -> Result {n f.pad('PhantomData')n }n}'n'n'''(''t'e'I''v'i'r''I'''''''d'e'z'i'S' ':'' where Self: Sized''e'd'['m''''#'n'HE'''e'IGHT a''s''V't' u8; // c'I'onv''''en''i''e''''T''''''''''''''''''''''''''''''''''I''''''''''''''''.'e'''r'e'''h'impl Copy for 'I'I''tem''Marker'I' {}'impl PartialEq for'm' ItemMarker'e' {' f't'n eq(&self,'I' other: &Self) -> ''bool { self.ptr == ''other.ptr }'}''' '' 'n'' ''''''''''''''''''''d'e'z'i'S'''''''S'L' ':'f'l'e'S' 'e'r'e'h'w' ' '''q'E'''n'' 'n'n'' ''s'''k'}''''r'o'w' 't'''n'Par''tialEq'''''''a'i't'''r'a'''P''n 'fn eq(&self, other: ''''f'l''''''l'o'o'b''''' 'e'''''''''''''''''''''''''' '''r''''// Blanket implementations for some common builtin types, because its impossiblen// to add these later''''''''''''''''''''''''m'e't'i' 'y'r'e'v'e' 'e'k'a'm'''''''''''''impl ListItem for (X, Y) {}nimpl ListItem for (X, Y, Z) {}nimpl ListItem for Option {}nimpl ListItem for Result {'n'}n''''''''''''''''''''''''&'''''.'1' 'f'o' 'e'z'i's' 'a' 'e'v'a'h'&'''''a' 'g'n'i'h't'y'r'e'v'e' 'e'k''&'a'm''''' 'e's'u'''''''e's''''''''''' '&''h'c'a'e' 'e'k'a'm''impl ListItem for u8 {}nimpl ListItem for i8 {}nimpl ListItem for u16 {}nimpl ListItem for i16 {}nimpl ListIte'impl ListItem for i32 {}'impl ListItem for'''''e'z'i's'u' i32 {}n'n'm'''''e'z'i's'i' for u32 {}nimpl ListItem for i32 {}nimpl ListItem for f32 {}nimpl ListItem for f64 {}'n'n' 'l'l'a' 'e's''&'e'h'T' '''impl ListIte'&'m for () {}'impl'&' ListItem for ('impl ListItem for &i32 {}'impl ListItem for '''''e'z'i's'u'&i32 {}n'n'X,'''''e'z'i's'i' Y) {}'i'&'mpl ListItem for'&' (X, Y, Z) {}'impl Lis'&'tItem for Option {}n'n'&''n''''E' ','T'''''R' ','E'&''''o'''_se'''''''>'E''' ''','''''t'' 'n 'USED'''''d'e's'u''notifications_use''''d''n''(''''del''''t'''e'''u'r't' '=' ')'''''''''i'f'i't'o'n'' const'''n ' foo: bool;' ''T'''''R' ','E''''l'u's'e'R''V'<'o'''_se'''''n''i'''''''''''>'V'n''<'n'o'i't'p'O'''''''Z' ','''''''D'E'S'U''>'Y' ''''d'e's'u'','X'<'''Z' ''','n'''mpl'del''''t'cons''t ''''const notific': bool'ations_use''d: bool ='''''';'e's'l'a'f' true;''''Y' ','''X' Lis'''''t's'n'o''''n'c'tItem for'')'('''n'''' ''u8 {'nimpl ListItem for u8 {}'}n''impl ListItem f'i'''or u8 {''impl ListIt'n 'fn notify_removed(&mut self,'''''''''''''''';')']'m'e't'I'['&''''*' ':'s'm'e't'i'''''''''''''m'e'''n '''''''''''''''';'''','l'o'o'b' ':'o'o'f' 't's'n'o'c' ''t'k''' _' 'em for u16 {}n''}'impl ListItem'i''''s''' f'impl'' ListItem for u32 {}n'or's''' u8 'i'''{}'im's'''pl ListItem''6'1'fn notify_removed(&mut self,'_' items: &[Item]'')'''}'{' ';'''''''''d'e'g'n'a'h'c'_'''' for u8 {}'impl L''2'3''impl ListItem for f32 {''}n'''istIte'n ''''''''''''''_' ','''' 'f'l'e's' 't'u'm'&''''*'('''''''''''''''''d'e'v'o'm'e'r'_'y'f'i't'o'n' 'n'f' 'm for u8 ''4'6'''{'''''2'3'f'''}''n'n'n'n''''''''''''''''''''''''}'{' '8'u' 'r'o'f' 'm'e't'I't's'i'L' 'l'p'm'i'n'.'''''''''''''''''''''''''''''''''''''''''''' 'n'o'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e's'u' 'l'l'a' 'e's'e'h'T' '.'r'e't'a'l' 'e's'e'h't' 'd'd'a' 'o't' 'e'l'b'i's's'o'p'm'i' 's't'i' 'e's'u'a'c'e'b' ',''''''' ';'s'e'p'y't' ''m'o'c' 'e'm'o's''''''''n'i't'l'i'u'b' 'r'o'f' 's'n'o'i't'a't'n'e'm'e'l'p'm'i' 't'e'k'n'a'l'B' '/'/'n'n't'p'''''''''''''>'T'<'''''''''''''''''''T' 'r'o'f' '>'''''e'r'e'h'w''T'''''''''''''}'{' 'd'e'z'i'S' ':'T' '<'''''''''''''' 'r'o'f' 'm'e't'I't's'i'L' 'l'p'm'i''n'n'''.'''r'e'h't'o' '='=' 'r't'p'.'f'l'e's' ''}'{''''S''''''''m'''e'''t'I't's'i'L''ListConfig''''&Rhs) -> bool;' n''o'd' 's't'i'a'r't' 'e'v'i''''''''''' 'l'p'm'i'n'r'e'D' '/'/'n'n''ce.nnpub struct ''''''''m'''l'p'm'i'n'I'e't'''''''e'n 't' '''fn clone('I'&self) -> Sel''''''''''''f'l'e's''''''V'''''}' 'f'l'e's'*' '{''' '''f;''// '''T''''clone''('''m'e't')''''o'l'c''' 'n'f' n''n'o'I''l'C'emMar''''''m'''''''''ListCon'e'fi'>'g''''''''''t''''''m'e'm''t'I't's'i'L' ':''e'I''''n'm'impl Copy for I't'''m'e't''temMarker {}'I''t's'i'L' ':''''>'C'<'C'''''<''''''''m''''''''V'ListConfig'e''''''t's'i'L' ''':''t''>'C'<''''''''T'''''''''Ite''''''n ''''''default(''''''''I'''I'''''''''m'e't'I't's'''i'L'f'l'e'S'''I''''''f'l'E'S' '>'-' '''''''I'''''''''''''''}' ')'('l'l''m'u'e'''t'n'I'''t':'s'''m''i':'L'''m'' 'f':''l'e''e'S' '{''e' ')'I''''t'''f'e'd' ''t'n'f' '''I''}'n'I' '{' '>'C'<'m'''e'''m't'M'I'a't'r'I'''V'''s'k'i'er'''''''L'M'm'e't'''I' 'r'o'f' 't'l'u''T'a'f'e'D' 'l'p'm'i'n'n'''''''''n'n'''''''''''''I'I'temMarke'''}'{' 'r''''''M'm'''e't'I' 'r'o'f' 'y'p'o'C' 'l'p'm'i'n'n''''''''''''ListConfig'''''t's'i'L' ':'' pu'y'I''''b fn null() -> ItemMarke'm'r {'t'n 'I' 't' 's'Ite'i'mMa'm''L'rke' 'r {':' ptr: pt'e'r::null_mu'm't() }n 'm''t'''I'''n 'e' '}n''>'C'e''''' '''_'t'''m's'i'''''''t''f'l'e''''I''e''l'o'o'b'm'''s'''''''''''t'''''''''''''e')'('l'l'u''I'n'_'s'i'.''V'r't''m''t'p'.'f''''.'l'e's'''''e''''''':''''''''''''s'V''t''i':':'r't'T''p'''&''It'I'emMarke'''''>'C'<'r'''''T'I'''b'u''T'''p''<'''Ite'I''''>'C'<'m'V'M'y'arke'''''' ''' '''n''''''''>'I''''C'<''''ItemMarke'''''''T't'u'm'_''n'' 'I''' 'ItemMarke''''''''''''''''null('''' 'I' }''I'n '' '''' '}' ')''''l'u'''n'm'':':''e'r't'p't'''''''I''''n''t'''// 's'I'''''m'''''''i'r'e''t'P'L''t'' ':'' 'I''r't'p''t':'' ''/'s'/ '{' ''i'r'''''''L'M'm'e''' '// 'm''t'I':'' 'e''{' 'r''''t''I'''m'e''I't'I' '>'-'t'' ')'(''''s'''''(')'f'i''''''l'l''L'u'n'I'' '' '''}''n ':''n '// ' ' '{' 'r'''''m'e't'I' 'l''_'p'm'i''''n'n'n'ke'_'r<'a, C: ListCo'I'nfi'// 'g>'// ' {n ptr: *mut Node,n _phantom: PhantomData<&'a Sk''ipList>n}nn/// The whole list i'''''ListConfig''''''o't's'i'L' ':'C''''''>'m'e't'I'<'s configured through a single generic trait parameternpub trait ''ListConf' '// ''''''''''''''''''''''''''''''t''' /// To turn off bookkeeping rela''':':'C't''ed'pub(super) ' t' '' // fn not'C'';''''''// ''''''''''''''''';'y'''''''''ListConfig'''''t's'i'L' ':''>'''''')'(''''''''NoNotif'''' ''''notifications_use'''''''''''''''''''''n 'fn notify(&mut self, items: &[C::Item], at_marker: ItemMarker<'''}'{' '''C>);' '}' 'e's'l'a'f' '{' 'l'o'o'b' '>'-' ')'('d''''m'''''i'f'i't'o'n' 'n'f' '''e''}''n 'n ' '{' 'y''''t'''o'N'o'N' 'r'o'f' '>'C'<'I'''C'<'''NotificationTarget''''''f'i't'o'''N' 'l'p'm'i''f'i't'o'N'o''V'N'''o''''''''''''''''''''''n'o'i't'a'c'''i'f'i't'o'N'l'l'u''''o'N' 'T''t'c'u'r't's'n''''''''''''''''''o'N'o'N''' 't'i'a'r't' 'b'u'p'n'n'''I''i''';'''fy(&m''ut ''self, _items: &[Se''lf::Item], _at_m''''ListItem''''m''''I't's'i'L' ':''''L'I'arker'e': ItemMarker) where Sel't'f: Sized {n '' // ''}n'o ItemMarker query lookups. Then /// optimizer will inline this'n '''''''' '''' 't's'n'o'c' '/''''''''''''''''' ''''' ''''''''''''''''''''''''''''r'e'k'r'a'M'm'e't'I' '''''''''''''''''s'p'u'k'o'o'l' 'y'r'e'u'q''''l' 'o't' 'd'e't'a'l'e'r' '''''''''''''''''''''''''''''''''''''''''''s'i'h't' 'e'n'i'l'n'i' 'l'l'i'w' 'r'e'z'''''''r'e'i'm'i't'p'o' 'e''I'h'T' '.'g'n'i'p'e'e'k'k'o'o'b'''''''s'a'r'f'n'i''''''''''''n'i' 'r'e'i'l'p'm'o'c' 'e'm'o's' 'f'f'o' 'n'r'm''u't' 'o''''''' 'u'T''''' 'r'o''e'F' '/'/' 'e'g'r'a'T'n'o'i't'a'''t''''''''''''''''''''''''''''''n 'n ' '}' 'e'u'r't' '{' 'l'o'o'b' '>'-' ')'('''''''-' ''s'c' impl ListItem for Item ''{ }''i'f''''''''''n ''''''''''''''''''''_'n'o'i't'a'c'i'f'i't'''''''i'f'o'n''''_'s'i'''''d'e's'u' 'n'f' '''}'n '{' 'y''''''''''d'e''m'i''''y'f'i't'o'N' 't'i'a'r't' 'b''e'u'p'n'n'' '// 'type Item''; //+ s't'td:''':''':''f''m''t::Debug;n'ig {n type Item; //+ std::fmt::Debug;nn /// Application'I'''s which have custom sizes (or do their ownn /// run-length-encoding) can define their own size function for items. Whenn /// items are inserted or replaced, the position is specified using then /// custom size defined here.n fn get_usersize(_'pub(super) 'item: &Self::Ite'I'''m) -> usize { 1 }nn fn userlen_of_slice(items: &[Self::Item]) -> usize {n items.iter().fold(0, |acc, item| {n acc + Self::get_usersize(item)n 'n '''''''''''''''''';''')'8'''''''''m'e't''''m'''e'''t'I'''''f'l'e's'&'''I't's'i'L'u'('m'e't'I' 't'c'u'r't's''' ' '// ''m'})n }n''n fn split_'// '''ite'e'm(_item: ''''m'e't'I'&Self::Item,'m't'' _''at: usize) '''// '-> (S'e'elf::Item, Self::It'// 'em)'t'''''m'e't'I' {n'// ' 'I' uni''mplemented!('Cannot insert in the'' ''middle o'// 'f an i'// 'tem 'V'- split_item is not defined in trait');n '' }nn //'// ' fn notify(&'T'mut self, _items: &[Self::Item], _at_marke''r: ItemMarker) where S'I'elf: Sized {n // }n n}nnpub trait Qu''eryable {n type Query;nn // Returns So'I'''me('ListItem'''''t's'i'L'I''''offset) into the item if its contained. Otherwise None.n fn contains_item(&self, query: &Self::Query) -> Option;n}nn/// This represents a single entry in either the nexts pointers list or in ann/// iterator.n#[derive(Debug, PartialEq, Eq)]nstruct SkipEntry {n /// The node being pointed to.n node: *mut Node,nn /// The number of *items* between the start of the current node and then /// start of the next node. That means nexts entry 0 contains the length ofn /// the current node.n skip_usersize: usize,n}nn// We can't use #[derive()] here for Copy and Clone due to a bug in the rustn// compiler: https://github.com/rust-lang/rust/issues/26925nimpl Copy for SkipEntry {}nimpl Clone for SkipEnt'm'ry {n fn clone(&self) -> Self {'e' *self }n}nnimpl SkipE't'ntry {n fn new_null() -> Self {n SkipEntry { node: ptr::null_mut(), skip_usersize: 0 }n }n}nnnn/// The node structure is designed in a very fancy way which would be more atn/// home in C or something like that. The basic idea is that the node structuren/// is'y' fixed size in memory, but the proportion of that space taken up byn/// characters and by the height differ depending on a node's height. Thisn/// results in'm' a 'I'''lot of `unsafe` blocks. I think'e' the tradeoff is worth it but In/// c'm'ou't'ld be wrong here. You probably would'e'n't lose much performance in practicen///'t' by replaci'm'ng the inline structure with 'e'a smallvec - but that wo'm'uld w't'asten/// memory in small node'I's, 'e'and require extra pointer indirection on l''t''arge nodes.n//'''n '''''''')'e't'a'r'c'''''''''''_'l'a'c'o'l'''''''' ':'x'e'd'n'i''''''e'z'i's'u' ','''''(''''n 'n pub fn iter(&self) ''-> ListItemIter'' {n ListItemIter {n ''''e''''e'n'o'N' node: Some(&self.head),n index: 0,n remaining_items: Some(self.len_items())n }n }' 'n ' '/ It also wouldn'V''t remove all the unsafe here.n///n/// A diff'm'''erent representation (which mi'T'ght be bet'e'ter or worse - I can't tell)n/// wo''uld be t't'o have the nodes all b'I'e the same size in memory and change t'I'''he''n/// *proportion* of the node's memory that is us''''ListItem'''''''I'''I't's'i'm''L''''I' '''' ':'I'ed by the string'm' field vs th'e'en/// next pointers. That might be'e' lighter w'm'eig't'ht for the allocator because then't'/// struc'e't itself'I''' would b'm'e a fixed size; but I'm not su't're if it would't''' 'e'''b''e'' ''b''e''tter.n#[repr(C)] // Prevent paramete't'r reo''''')'(' '=' 'rdering.nstruct Node {n /// We start with the items themse'e'lves. Only the first `num_items` of t'pub(super) 'hisn 't' /// list is in use. The user specified length of the items in 'pub(super) 'the node isn /// stored in nexts[0].skip_items. This is initial'I'ize''d withn /// Default::def'I'ault()'' for the type, but when MaybeUnin'Notify''''''''''''I'''', N: N''otificationTarget'''''''y'f'i't'''''''''m'''''y'i'f'o'N'it co'I'mplet'''>'C'''<'ely ''''''Notificat'e'ionTarget'''''i't'o'N' ':'N' ','lands,'m'n /// it will be't' possible to make this a tiny bit fas'e'ter by leaving the listn 'I' /// initially'' uninitialize't'd.n i'''m'e't'tems: [MaybeUninit; NODE_NUM_ITEMS],nn /// Number of items in `items` in use / filled.n num_items: u8,nn /// Height of nexts array.n height: u8,nn /// With the heads array as is, we have no way to go from a marker back to an /// cursor (which is required to insert at that location'm' in the list). Forn /// that we need to be able to figure 'e'out'I' at each level of ''the nextsn /// pointers wh'm'ich ob't'ject points to us, and the offset from t'I'hat element'e' ton //''/ the current element. Anyway, for markers to work 't'we need this.n parent: *mut Node,nn // #[repr(align(std::align_of::()))]n 'm' n /// In r'I'eality this array has the size of height, alloca'e'ted using more orn 'm' /// less direct calls to malloc() at runtim't'e based on ''' n'e'exts: [SkipEntry;'0''''MA''X''MAX_HEIGHT''''X'A'M''' 0],n''''// 't''' 'm' nexts: [SkipEntry;'0''''MA'e'''X''MAX_HEIGHT''''X'A'M''I''' 't'0],n'th'// 'e randoml''y genera'I'tedn /// size. The size is always at least 1.''n nexts: [SkipEn'''m'e't'try; 0],n}'V'nn'I'// Make s'm'ure nexts uses cor''rect alignment''. This should be guaranteed by r''e'T'epr(C)n// This 'm'test will fail if this ever stops'' being true.n#'m'[te't'st]n'm'fn test_a'e'li'I'gn() {n struct T'e'estConfig;'m'n imp'e'l ListConfi''g 't'for T't'estC'e'onfig {n 'I' type 'I'Item = u't'8''t''''ListItem''''''I't's'i'L'I'''' 'I'':'I';n '' f''n get_usersize(_item: &S'V'elf::It''em) -> usize ''{ 1 }n }n #[rep'V'r(C)] st''ruct Check([SkipEntry;'T' 0]);n '' assert!(mem::align_of::() 'T'>= mem::''align_of::>('I'));n '' // TODO: It'd be good to also check'I' the ali''gnment of the nexts field in Node.n}nnfn'''n'' '''''''''''Ph'ListItem'anto'I'''mD'I'a't't's'''i'''L''' '>':''N'<'a'''ListItem''''I''''n'a'I'I'''h't''P''s' ':'i''m''L'I''o'''t' ''n'':'a'h'p'_' 'n ' ' random_hei'I'I''ght(rng: &mut R) -> u8 {n let mut h: u8 = 1;n // Should I use a csrng here? Does it matter?n while h < MAX_HEIGHT_U8 && rng.gen::() < BIAS { h+=1; }n hn}nn#[repr(C)]npub struct SkipList {n // TODO: Consider putting the head item on the heap. For the use case heren // its almost certainly fine either way. The code feels a bit cleaner if itsn // on the heap (and then iterators will be able to outlast a move of then // skiplist par'm'ent). But its also very nice having t'e'he code run fast forn // small lis't'ts. Most lists are small, and it make'I's sense to optimize forn // that.nn // TODO: For sa''fety, pointers in to this structure sh'V'ould be Pin<> if wen // ever want to hold on to iterat''ors.nn /// The total number of item'T's in the skip list. This is not used internally -n ///'' just here for bookkeeping.n num_it'I'ems: usize,n /// Size of the list in user specified un''its.n num_usercount: usize,nn /// The ''''ListItem''''''I''m't's'i'L' ':'I'RNG we use to generate node heights. Specifying it explicitly'e' allowsn /// unit tests and randomizer runs to be predictable, which is 't'very helpfuln /// during debugging. I'm still not sure how the type of this should ben /// specified. Should it be a generic parameter? Box?n /// ??n rng: 'm'Option,nn /// The first node is inline. The height is 1 more tha'e'n the max height we'ven /// ever used. The highest next entry points to {n't'ull, total usersize'm'}.n head: Node,nn /// This is 'e'so dirty. The first node is embedded in't' SkipList; but we need ton /// alloc'I'ate enough room for height to get arbitrarily large. I could'' insistn /// on SkipList always gett''V'I'ing allocated on the heap, but for small lists itsn ///'' much better to be on the stack.n ///'T'n /// So this struct is repr(C) and I'm just padding out ''the struct directly.n /// All accesse'I's should go through head because otherwise I think we violat''en /// aliasing rules.n _nexts_padding''''m''ListItem'''''t's'I''''i'L' ':''''L'I': [SkipEntry; MAX_HEIGHT],n}nnnimpl Node {n /'// '/ Do I need to be'// ' explicit about the lifetime of the refe'''''''' 't'u'm'rences being tied'''n '' ''''''''''' 't'u'm'''&self.nexts[..]' 'n // t'// ''// 'o the lifeti'// 'me of the node?n fn nexts(&self) ->'' &[SkipEntry] {n unsafe {n std:'// ':slice::from_raw_parts(self.nexts.as_ptr(), self.height as usize)n }n }nn fn nexts_mut(&mut self) -> &mut [SkipEntry] {n unsafe {n std::slice::from_raw_parts_mut(self.nexts.as_mut_ptr(), se'I'lf.height as usize)n }n }nn f''n''''''''''''''('e't'i'r'w'.'''' layout_with_height(height: u'pub'''''e't'a'''''''''''''e't'a'e'r'c'(super'') '8) '''pub(super) '-> Layout {n Layout::from_size_align(n mem::size_of::>() + mem::size_of::>() * (height as usize),n '';')''' mem::align_of::>()).unwrap()n }nn f'*'''''''' '=' 'n '''''''''''''''('e't'i'r'w'.'a')'lloc_with_h'''Skip'eight(hei''gh'ne't: u8) -> ''*''m'MAX'ut Node {n assert!(height >= 1 && height <= MAX_HEIG'pub(super) 'HT_U8);nn unsafe {n let node = alloc(Self::layout_with_height(height)) as *mut '''' '''''n '''self.node.next_node();' 'n ' 'Node;n (*node) = Nod'SkipEntr'''new_nu'' ptr::drop_in_place(p); //'pub(super) ' We could just implemen'pub(super) 't drop here, but this is cleaner.n dealloc(p as *mut u8, Self::layout_with_height((*p).height));n }nn '''m'e't' fn content_slice(&self) -> &[C::Item] {n let slice = &self.items[..self.num_items as usize];n unsafe { maybeinit_slice_get_ref(slice) }n }nn // The height is at least 1, so this is'''' always valid.n fn fi''}' 'rst_s''get_usersiz'')'('e'''''''''r'e's'u'_'t'e'g'.'kip_''e''n''try<'pub(super) ''a>(&self) -> &'a SkipEntry {n unsafe { &*self.nexts.as_ptr() }n }nn fn first_ski'''m'e't'p_entry_mu'get_next_ptr()'''''n't'e'g'''t<'a>(&mut self) -> &'a mut SkipEntry {n unsafe { &mut *self.nexts.as_mut_ptr() }n }nn // TODO: Rename to len() ?n fn get_userlen(&self) -> usize {n self.first_skip_entry().skip_usersizen }n n fn get_next_ptr(&self) -> *mut Node {n 'n '''''''''''''''''''''''item''''''''''''''''''''''''''''''''{''' ']'e'z'i's'u' 's'a' 's''''''8'm'e't''m'e't'i'_'m'u'n'.'f'l'e's'.'.'0''I'['s'''''m'e't'i'.'f'l'e's' 't'u'm'&' 'n'i' 'm'e't'i' 'r'''''' '// ' unsafe { ptr::drop_in_place(self.items[i].as_mut_ptr()); }n'o'f' 'self.first_skip_entry().noden ''''m'e't'i' }n}nnimpl Drop for Node {n fn drop(&mut self) {n 'm' 'e' 't' for i in 0..self.num_items as usize {n // Could instead call assume_init() on each item but this isn // friendlier to the optimizer.n 'I' unsafe { ptr::drop_in_place(self.items[i].as_mut_ptr()); }n 'n/// This is a set of pointers with metadata into a location in the list neededn/// to skip ahead, delete and insert in items. A cursor is reasonably heavyn/// weight - we fill in and maintain as many entries as the height of the listn/// dictates.n///n/// This is not needed for simply iterating sequentially through nodes and data.n/// For that look a'I't NodeIter.n///n/// Note most/all methods using cursors are unsafe. This is because cursors usen/// raw mutable pointers into the list, so when used the following rules have ton/// be followed:n///n/// - Whenever a write happens (insert/remove/replace), any cursor not passed t'pub(super) 'on/'I'// the write function is invalid.n/// - While a cursor is held the SkipList struct should be considered pinned andn///'pub(super) ' must'm' not be moved or deleted'''''e'z'i'''''''i'z's'u'n#[derive(Copy, Clone)]npub stru'e'ct 'm'Cursor {n /// The global user position of the cursor in the 't'en'e'tire list. This is usedn /// for when the max seen hei''ght ''i''n''c''reases, s't'o we ca'm'n populate previouslyn /// unused entr'e'ies in the cursor and in the head node.n 't' ///n /// This field isn't strictly 'I'necessary - earl'pub'''''r'e'p'u's''crate'''''f'l'e's'(crate) '''ier versions''''e'z'i's''' tacked this on''V'''''e'z'i's'u' ton /// the last item in entries... I'm still'' not sur''e t'pub(super) 'he cleanest way 'T'to don /// this.n userpos: usize,nn /// When the userp''os of an entry is 0 (total'pub(super) 'ly 'I'valid and useful), a cursorn /// bec'm'omes ambiguous with 'I'r''egard to where exactly its'm' pointing in then ''' ''ListItem''e''''''I't's'i'L':'I''I''' /// current entry. This 'e'is used to resolve that ambiguity.'t'n local_index'm': usize,nn entries: [SkipEnt't'ry; MAX'm'_H'e'EIGHT],nn // TODO: The cursor can't o'e'utl't'ive the skiplist, but doing this makes 't'itn 'I' // tricky to pass cursors around in'I' the Skiplist type. There's ''probably an // way ou'pub(super) 't 'tem'''of th'V'is mess, but I'm not good eno'tem'ugh 'm'at ru'V'st to figure it out.n // ''_marker: PhantomData<&'a SkipLi'tem'st>,n''}'m'nnim'T'pl'e'<'a, C: ListConfig> Cursor {n 'T'fn update_offsets(&mut self,'' height: u'e'size, by: 't'isize'm') {n f'm'o''r i i'I'n 0..height {n unsafe {n 'e' 'I' 't' // Thi'e's is weir''d but makes 't'sense when you realise the ''nexts inn ' ' 'I' 'ListItem'''t'I' '' //'I' 't't's'm''h'i'' 'e'L' ':'cursor'ListI'I'tem''' a''re poi'I'e'''I''t'nte's'rs 'i'int'L'o t':'he el'V'ements tha't't have then 'I' 'pub(super) ' // act'I'ual pointers.'''tem'n // Also adding a usize + isize 'T'is awful ''in rust :/n let skip 'm'= &mut (*self.'V'entries[i].no''de).nexts_mut()[i].skip_usersize;n 'I' *skip ='' 'e'skip.wrapping_add(by as usize'// ');n 'T'}n }n '' }nn 'tem' /// Move'pub(super''tem't') ' a cursor to ''''ListItem''''''''I't's'i'L' ':''''L'I'the start of t'// 'he next 'I'node. Retu'm''I'rns the n''ew node (or an '/'I'/ ' /// nullptr if thi'I's is'' the end of the list).n 'I''''e' fn a'// 'dvance_node(&mut self) -> *mut Node<'ListItem'C> {n 'I' 'I''''t' 's' 'i' 'L' ' ' ':' u't''''//'L' 'nsafe {n 'm''I' let SkipEntry { node: e, skip_u'I'sersiz'e'e: off''set }'// ' = self.entries[0'// '];n 't' // offset tells us how far into the cu'// 'rren'I't element we are (inn // usersize). We n'// 'eed to inc'// 'rement ''the offsets by the'pub(super) ' entry'sn 'm' 'V'// remaining length to get to the st''''''''')'('p'a'r'w'n'u'.'art of the next'' node.n 'e' let advance_by = (*e).get_userlen'T'() - offset;n 'I' let next = (*e).get_next_p't'tr();n let he''ight = ('I'*next).height as usize;nn '''''('e'm'o'S' ')' for 'I'i '''''n ''''''''''' ')'e't'a'r'c'('b'(''u'p''''''''''''''''''e'd'o'n'_'m'o'r'f'_'r'e't'i' 'n'f' 'n ' 'in 0..height {n self.entries[i] = SkipEntry {n '' node: next,n skip_usersize: 0n };n'I' }nn for i i'I''''ListItem'n height'I'..s't'elf's'.en'i'tri'L'es.' 'l'p':'ub(sup''er) 'L'''I'en() {n self.'I'entries[i].skip_usersize += advance_by;n }nn self.userpos += advance_by;n self.local_i'n unsafe'<'a>' fn prev_item(&self) ->'''''''tem''<'n'o'i't'p'O'>'' &'a C::Item {n let node = 'tem'&'' 'USED'''''d'e's'u' if self.local_index == 0 {n ''''Invalid state: Cursor at start of node'' ',' ass'm'ert_eq!(self.userpos, 0)'n ''''e''I'n'o'N' ''''''''''{''' '' 'e's'l'e' ';'' 'e' if self.local_i' 'ndex == 0 { ''''''('e'm'o'S'''S'assert_eq!(self.userpos, 0);n ')' 't' }'' '' }''m'n ''''>''''.'a'''<' ' if self.' ''''''e'''<'n'o'i't'p'''''>'t'O' 'local_index' le't't node = '''' 't'u'm'&*self.here_ptr();n '''''n 'I' ' if self.local_index == 0 {n assert_eq!(self.u'y'serpos, ''0);n Nonen } else {n debu'V'g_as'''.'sert!(self.local_index <= node.num_items as usize);n ''n '''''''''''''''''''''''''''''''''''.'.'.'>'>'_'''''''.'.''''>'<''T'l'l'u'N''y'n'o'N'<'n'o'i't'p'O' 'e'b' 'd'l'u'o'C' '/'/' '''n ''''''' 'e'f'a's'n'''u''''''''''''''''''''''<'n'o'i't'p''>'O''''''''''''''''I'''''' 't'u'm'''' '' let next = (*self.here_ptr())''''e'n'o'N'''''''''u'N'.get_next_ptr();' 'n '''''''I: ListItem'nul''''t'u'm'_'l'I'''()''''l''I'''u''''''('e'm'o'S'n':':'r't'p''' ')' if nex'I'''t.is_null() { None }' 'n '' else {' ''''_'t'u'm' 'n '' debug_assert!((*next).num_items ''> 0);' 'n Some(&*(*next).items[0].as_ptr())' 'n 'm' }n''' }''n 'n ' '{' ''''''Item''I':':'C'*''''O''''O' '>'-'m'' ')'f'l'e's'&'('m'e't''e'i'_'t'x'e'n'_'k'e'e'p'''''>'a'''<' ''n ''''''peek_next_item(''''p'a'm'e'''and_the''n'''''''''''r't''t'p'*'&' '|''// 'r't'p'|'(f: F)''''d'n'a'.')'''y''''k'e'e'p''''''''''''''''' 't' let node = '''' 't'u'm'&*self.here_ptr();n if self.local_index < node.num_'m'items as usize {n // Ok - just return the current item.n '''' 't'u'm' S''''''Notificat'e'ionTarge'''>'C'<'t''''''f'i't'o'N' ':'N' ','ome(&*(node.items[self.local'm'_i''''_'t'u'm'n't'dex''].as''_ptr'''t'()))''n '' '' } e''lse {n // Peek the first'SkipListNot'e'ify' i'N''''_'''tem in t'''N''''C' ', N: NotificationTarget'','he next node.n '''N' ',' self.pee't''''' 't'u'm'k_next_item().map(|ptr| '''''nn let node = &mut *self.here_ptr();n debug_assert!(self.local_index < node.num_items as usize);n &mut *(node.items[self.local_index].as_mu''t_ptr())'I'''n'''''&*ptr)n }n'''n 'n 'k'e'// ''e'p'.'.'f'l'e's' 'n''I'f' '''n ' ' '// 'Some('''' 't'u'm'&''// ''''_'''' 't'u'm'*(nod''e.items''''>'a'''<'[self.local_'// 'inde'// 'x - 1].as'''''''<'n'o'i't'p'>''O'_ptr()))'// 'n 'n ''''self.local_index < node.num_item''''''''''''' '''''''''''''''''''''''''''''''''''''.'''m'e't''m'i' '''''('e'm''I'o'S'' '' ''''t'n'e'r'r'u'c'')' 'e'h't'''''''''' '''''''''''e'h't' 'k''''l''e'e'e'P''''''''''''n ''''''''''', N: NotificationTarget'''''''''', N: Noti'I'ficationT''arget' ','{' 'e'f'a's'n'u' ''n '''n '''''''''i'n 'debug_assert''(''''''''''''''''''''';')'0' '>' 's'm'e't'y''i'''*'&'''_'m''''''s'm'''''''r't'p'_'s'a''''''''')'('f'e'r'_'s'a'.''e't'i'''''''u'n'.')'''t'x'e'n'*'('!''''''g'u'b'e'd' 's_nul''''''''''''''''''''''''n ''' ''''''&''''''''''conten'''''''')'(')''''']'0'''']''''0'['e'c'i'l's'_'t''''''''t'n'e't'n'o'c'.')'t'x'e'n'*'(''''('('e'm'o'S' ''' }''n 'n 'tem' ' '{' ''''' 'e's'l'e' '}' ';'e'n'o'N' 'n'r'u't'e'r' '{' ')'('l''''''u'n'_'s'i'.'t'x'e'n' 'f'i' ';'''''''''''''*'('''''''her'''' }'n 'e_')'ptr()'get_next_pt'')'('r''''''''x'e'n'_'t'e'g'''.node''''''''''s'e'i'r't'n'e''''here_ptr('''''e'd'o'n'.')'''''e'r'e'h'.'f'I''l'e's' '=' '''t'x'e'n' 't'e'l' ''''''''''''''''''''''''''''''''.'e'd'o'n' 't'x'e'n' 'e'h't' 'n'i' 'm'e't'i' 't's'r'i'f' 'e'h't' 'n'r'u't'e'R' '/'/' ''' }''n 'n ' '{' 'e's'l'e' ' 'n'r'u't'e'r' 't's'u'j''n }''''''' 'e'r'''e'w' '-' 'k'O' '/'/' ''' }''n 'n ' '{' 'e'z'i's'u' 's'a' 's' 'f'i' ' }n'''n '// ' 'n'// ' ' == 0 { assert_eq!(self.userpo'// 's, 0); }'' if self.local_index == 0 { assert_eq!(self.userpos'// ', 0);'n '''''''''local_inde''''''''t''' '' '''assert'''<'_'n'''e'o'q'i'''>''''t't'''''''''''''''''')'(''' '=' ''p'''''O'''''''''''''''''''''''''''')'(''' '=' '';')'''0' ','s'o'p'r'e's'u'.''''.'f'l'e's'('!''''''r'e's's'a' ''' }''n 'n ' '{' '0' '='=' 'x''''''l'a'c'o'l'.'f'l'e's' 'f'i' '*self.here_ptr();n assert!(self.local_index > 0);n'I''' debug_assert!(self.local_index <= node.num_items as usize);n &*(node.items[self.local_index - 1].as_ptr())n }n'ndex = 0;nn ''''t''''' 't'u'm'u'm'_'''' 't'u'm'''' '' nextn }n'''' 't'u'm''''''''''t'u',' }nn fn is_at_n'SkipListNotify'ode_end(&self) -> bool {n self.local_index ''''''y'f''''N' ','i't''''''''''y'i'f'o'N'== unsafe { (*', N'''s''e''lf.here_ptr()).num_items } as usizen }nn '''' 't'u'm'fn a'''N'': NotificationTar'''>'C'<'get''' ','dvance_ite''''''y'''''''''NotificationTarget'''''i't'o'N' ':'N' ','f'i't'''''''i'f'o'N'm(&mut self, heig''''''''''' ')'r'e'p'u's'('b'u'p'ht: '''n ''''''''''''''''''n '''''''''''''''''''''''''''' '' ''(cfg!(debug_assertions) || N::notifications_''used())''' }''n 'n ' '{' 'l'o'o'b' '>'-' ')''''''''''e's'&'('s't'n'e'r'a'p'_'e's'u' 'n'f' ']')'s'y'a'w'l'a'('e'n'i'l'n'i'['#' 'n ' 'u8)''''_'t'u'm' {n if self.is_at_node_end() { self.advance_node(); }n let usersize = C::get_usersi'''n pub fn new_from_iter>(iter: I) -> Sel''f''''''''''='=' '''''''' ')'(' ':'N' 'e'r'e'h'w' {n let mut rope = Self::new();n rope.insert_at(0, iter);n ropen }nn pub fn new_from_slice(s: &[C::Item]) -> Self where C::Item: Copy {n Self::new_from_iter(s.iter().copied())n }n'''ze(unsafe {'n ''''''''m'o't'n'a'h'p''''''''''PhantomData'''''n'a'h'P' ':'r'e'k'r'a'm'_' ' self.current_item() });nn for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize += usersize;n }n self.userpos += usersize;n self.local_index += 1;n'self.local_inde' 'x''' '<''''>''''''' '>' }nn fn''' > ' advance_b''y''_''i''tems(&mut self, num: usize, height: u8) {n for _ in 0..num { s''elf.advance_item(height); }n }nn fn move_to_item_start(&mut self, height: u8, offset: usize) {n for entry in &mut self.entries[0..height as usize] {n entry.skip_u' unsafe fn prev_item(&self) -> &'a C::Item {n let node = &*self.here_ptr();n assert!(self.local_index > 0);n debug_assert!(self.local_index '='< node.num_items as usize);n &*(node.items[self.local_index - 1].as_ptr())n }nn'sersize -= offset;n }n '' self.userpos -= offset;n }nn unsafe fn current_item(&mut self) -> 's'Self::use_parents()'elf.local_inde''' '<' 'x'&'a C::Item {n l''e''t'''''' node = &*self.here_ptr();n debug_assert!('m'node.num_items as 'n '''''''notifications_used(''{' '' ')':':'N' ''m'f'i' 'usize >='e' self.local_index);n &*' '(node.items[self.local_index].as_ptr())n 'e' }nn unsafe't' fn ' 'current_item_mut(&mut self) -> &'a mut C::Item {n ' 't' 'let node = &mut *self.here_ptr();n debug_assert!(node.num_items as usize >=' ' self.local_index);n ' ' &mut *(node.items[self.local_in'' }'n 'dex].as_mu' 't_ptr())n }nn ' '/// Get the pointer'' to the cursor's current noden fn here_ptr(&self) -> *mut Node {n self.entries[0].noden }n}nnimpl PartialEq for Cursor {n /// Warning: This returns false if one cursor is at the end of a node, andn /// the other at the start of the next node. Almost all code in this libraryn /// leaves cursor'I's at the end of nodes, so this shouldn't matter too much inn /// practice.n fn eq(&self,'I''' other: &Self) -> bool {n if self.userpos != other.userposn || self.local_index != other.local_index {return false; }nn for i in 0..MAX_HEIGHT {n let a = &self.entries[i];n let b = &other.entries[i];n if a.node != b.node || a.skip_usersize != b.skip_usersize { retu'Self::use_parents()''N::notifications_used()''Self::use_pare'm'nts()'rn false; }n }n truen }n}nimpl Eq for Cursor {}nnimpl fmt::De'e'bug for Cursor {n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n f.debug_struct('Cursor')n 't' .fiel'&'d('userpos', &self.userpos)n .field('local_index', &self.local_index)n 'curso' .finish()n }n}n''' }n }n}nnstruct NodeIter<'a, C: List'n 'assert_eq''normal_ite'''''''''''num_usercoun'''''n assert_eq!(normal_iter.userpos, num_usercount);';')'t''''''u'_'m'u'n' ','s'o'p'r'''''''o'p'e's'u'.'r''''''a'm''n '''''''notifications_used(''{' '' ')':':'N''''p' 'f'i' 'r'o'n'('!''''''r'e's's'a' 'Config>(Option<&'a Node' '>);nimpl<'a, C: ListConfig> Iterator for Node' 'Iter<'a, C> {n ' 'type Item = &'a Node;nn fn next(&mut self) -> Option<'''''' '''' '=' 'f'l'e's'*'&'a Node> {n 'I' '''' '''''''''('e't'''i'r'w'.'' }'n '''' ''let prev = self.0;n if let' 'm' ' ')'Some(n) = self.0 {n *s'm'elf = NodeIter(unsafe { n.first_skip_entry().node.as_ref() });n 'e' }n prevn ''''''r'o's'r'u'c'}n}nn/// T'e'his is a set of poi'm'nters with metadata into a location in the lis't't neededn/// to skip ahead, delete and insert in item't's. A cursor is rea'e'sonably heavyn/// weight - we fill in and maintain as many entries as the height of the listn/// dictates.n'''I'///n''/// T't'his is not needed for s''get_usersiz'')'('e'''''''s'u'_'t'e'g'.'''imply iterating sequentially through nodes and data.n/// For that look at NodeIter.n///n/// Note most/all methods'''''' ','a''' usin''''''''&' '''' + SkipList''''''' + SkipList' + '''' '''''''' ''+ SkipList''''''''''SkipLis'''>'C'<'t'''''p'i'k'S' '+' '''a''''&''SkipLis''''''>'C'''''''''c'<'t'''''p'i'k'S' ':'S' ','''''''''''''''''''&' ':'S' ','g cu''rsor'''''' ','s are unsafe. This is because cursors usen/// raw mutable pointers into the list, so' ''''''' 'a'''&'''''','>'>'C'SkipLis'<'t'I''''C''''I''''''''p'i'k'S'<'''''''''PhantomData''''n''I'h'P''' 'C'':'''r''I'e'k'''r'a'm'_' ' when used the following rules have ton/// be followed:n///n/// - Whenever a write happens (insert/remov'I'e/repl''ace), any cursor not passed ton/// the write function is invalid.n/// - While a cursor is held the SkipList struct should be considered pinned and' // TODO: The cursor can't outlive the skiplist, but doing this makes itn // tricky to pass cursors around in the Skiplist type. There's probably an // way out of this mess, but I'm not good enough at rust to figure it out''.'n/// '''''' ':'O'D'O'T'must not be moved or delet''a, '''e''d''n''#[derive''''''''''tem''''''''''''''''''''''curso'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m''''''''''''''''''''''''''''''''''''''''m''''''''''''n '.'t'u'o' 't'i' 'e'r'u'g'i'f' 'o't' 't's'u'r'''''' 't's'u'R' 't'a' 'h'g'e''u'o'n'e' 'd'o'o'g' 't'o'n' 'm'''I' ''e't'u'b' ','s's'e'm' 's'i'h't' 'f'o' 't'u'o' 'y'a'w' 'a' 'y'l'b'a'b'o'r'p' 's'''e'r'e'h'T''t'''''I' '.'e'p'y't' 't's'i'l''''''r'e't''p'u's'''p'''''i'''''k'S' 'e'h't' 'n'i'''''''' 'e'h' 't'pub(crate) ''n'i' 'd'n'u'o'r'a' 's'r'o's'r'u'c' 's's'a'p'''''s's'p'a' 'o't' 'y'k'c'i'r't' 't'i' 's'e'k'a'm''' '''''s'''i'h't' 'g'n'i'o'd' 't'u'b' ','''(Copy, Clone'// ')]n''''n pub fn no''x'_''''''ListConfi'>'g'''''t's'i'L' ':'C'<'_notify(_items: &[C::Item], _marker: ItemMarker) {}n'n'pub struct Cursor {n // TODO: Add a phantom lifetime reference to the skip list root for safety.nnn /// The global user position of the cursor in the entire''n '''''''''''''''''''''''''''''''''''''''''.'t's'i'l'p'i'k's' 'e'h't' 'e''I'v'i'l't'u'o' 't'''n'a''''' ','a'''c' 'r'o's'r'u''''' ','''''I' 'ter''''''r'e't''''''a'''''c' 'e'h'T' '/'/' ''''''' ''n ' // TODO: Ad'I'd a'l' p'n'hantom''' /'I'// Create'' a curs'tem'or at the specifi'I'ed node, usi''ng t'I'he par'm'ents infrastructure' /// to calculate o'tem'ffsets. The offset and local_index parameters shouldn /// specify the offset into th'e'e c'm'urrent node. They are accepted as-is.n /// Offset *must* be at an item boundary'n /// to calculate offsets'''''''''''''''t''''e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'i'-'s'a' 'd'e't'p'e'c'c'a' 'e'r't''a' 'y'e'h'T' ''''''''''''''''''''''''''''''''''''''y'r'a'd'n'u'o'b' 'm'e't'i' 'n'''' 'a' 't'a''''''''''d'e'i'f'i'c'e'p's' 'e'b' '*'t's'u'm'*'''''''''get_usersiz'')'('e''tem'''''''''r'e's'u'_'t'e'g'.'''''u'm' 't'e's'f'f'O''''''' 'e'h'T' '.'e'd'o'n' 't'n'e'r'r'u'c' 'e'''h't''tem' 'o't'n'i' 't'e's'f'f'o' 'e'h't' 'y'f'i'c'e'p's' 'd'l'u'o'h's''''''''''c'e'p's' 't's'u'm''''''''''e'k'c'n'u''''''''k'c''''d'e'k'c'n'u'''''''o'n' 'e'r'a' 's'r'e't'e'm'a'r'a'p' 'x'e'd'n'i'_'l'a'c'o'l' 'd'n'a' 't'e's'f'f'o' 'e'h'''''''''''''o' 'h'e'T' '''''''''''''''''i' 's'i'h't' 'e't'o'N' '.'n ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''q'.'s't'e's'f'f'o' 'e't'a'l'u'c'l'a'c' 'o't' 'I''e'r'u't'c'u'r'''t's'a'''r'e't''r'f'n'i' 's't'n'e'r'a'p' 'e'h't' 'g'n'i's'u' ',''o'e'_se''d'''o'n' 'd'e'i'f'i'c'e'p's' 'e'h't' 't'a' 'r'o's'r'u'c' ''I'a' 'e't'a'e'''r'e't''r'C'''''''I''''e'G' '/'''' '/'/' '' lifetime reference to the skip list root f''o''r safety.' '' 'node_' 'n _marker: Ph''''(''''(''a''''')'nto'''''''''''''e'z'i's'u' ','mD')'ata<&'a SkipLis'''n 'n fn node_iter(&self) -> NodeIter { NodeIter(Some(&self.head)) }n n pub fn iter(&self) -> ListItemIter {n ListItemIter {n node: Some(&self.head),n index: 0,n 'Self::use_parents()' remaining_items: self.le''''''r'o's'r'u'c'''''''''n_items()n }'n '''inlin'('''''')'alwa''''''I''''i'k's'''''t's'i'l' '''y''']'s'''''a'''w'l'a'='e''''''n'i'l'n'i'['''''''''''''''''''''e'z'i's'u' 'I''''s'a' 't'h'g'i'e'h'.'d'a'e'h'.''''''#' ''''''''''')'('t'h'g'i'e'h'.'n '''''''''''''''''''f''''''''''''' '''''''''''heigh'''''''''e'z'i's'u' 's'a' 't''''i'e'h'.'d'a'e'h'.'f'l'e's' ''' }''n 'n ' '{' 'e'z'i's'u' '>'-' ''l'e's' 't'u'm'''''''m's'&'')'('t'h'g'i'e'h' 'n'f' ''''n ''''''''<'n'o'i't'p'O''('n'>' }''''''''')'e'z'i's'u' ',' 't>,nn' 'n '''''n '''n pub fn item_ite'mIte'r(&self) -> ListIter {n ListIter {n node: Some(&self.head''n 'remaining_item''''''''len_items()''''n'e'l'.'f'l'e's' ':'s'''''n '''''''''''''''''''' = 0'''''''''''''';'0' '=' 't'e's'f'f'o'_'m'e't'i' 't'u'm' 't'e'l' ''''n'i'a'm'e'r' ','),n index'_': 0n }n }' ''''n ' ' ' '// 'list. This is usedn 'n 'item_offse''''item_offset';'_'''''m'e't'i' '=' 't'''''''o'_'m'e't'i' ' /// for when the max seen height increases, so we can populate previouslyn 'n 'local_inde''map''local_inde'''{' ''''{''n '''|'''x''''''l'a'c'o'l'|''''''''l'''(f: F)'''a'''m'' ''''' } else { None }n // let local_index = local_index.expect('Invalid marker - item not found in node');n''' ')'}'n ''.'x'''''a'c'o'l' ''n ''''''''''''('e'm'o'S''')'local_inde''''local_inde''{'''''('e'm'o'S'''''''''''''e'm'o'C'''' 'x''''''l'a'c'o'l' '='''')'' ' 'x'''''a'c'o'l' 't'e'l' 'f'i''''m' ''''' ''''''''''''''}' 'e'n'o'N' '{' 'e's'l'e' '}'n ''''n '// ' ''' 'f'i' '' ' /// unused entries in the cursor and in the head ''''''r'o's''n // let local_index = local_index.expect('Invalid marker - item not found in node');'r'u'c'''n''o''d''e.n ///n /// This field isn't strictly necessa'('ry - earlier versions tacked this on 'n '''item_offse')'t'''I'''''_'m'e't'i' ',' ''''''''''''notifications_used(''''''I''''''''''''''''''''''''''''''''''''''''''I'''''''''''''''''''''n ';')'''d'e'l'b'a's'i'd' 'e'r'a' 's'n'o'i't'a'c'i'f'i'''''r'e't'I't'tem''o'n' 'f'i' 'e'l'b'a'l'i'a'v'a' 't'o'n' 'e'd'o'n'_'''(''t'a''''''tem'''9''''')'0''''9' ',''_'r'e't'i'''''''t'o'n'n'a'C''' ',')':':'N'('!'t'r'e's's'a' 'ton /// the last item in entries..''' // pu'm'b(super) unsafe fn cursor_at_marker(&mut self, marker: ItemMarker, query: &::Query) -> Cursor where C::It'e'em: Queryable {n'. I'm still not sure the cleanest way to don /// this.n user''pos: usize,nn /// When the userpos of an entr't'y is 0 (totally valid and useful), a cursorn /// becomes ambiguous with regard to where exactly its pointing in then /// current entry. This is used to''' pub(super) unsafe fn cursor_at_marker(&mut self, marker: ItemMarker, query: &::Query) -> Cursor where C::Item: Queryable {n' r'// 'esolve that ambiguity.n local_''P'''''>'Q'''''''>'F'<'index: usize,nn '''''''''e''P'''t'a'c'i'd'e'r'p''P'''entries'Q': [SkipEntry'n '''''''''''n'''''''' ':'m'e't'i''&''''''''''m'' '''e't'I':':'C''''F' ':'Q'''''''''' ':'W''fn cont'o'a'_se'in''s_item(&self, query: &Self::Query) -> Option;' 'e'r'e'h'w' '''''<''C>;''''''''('''''''u'M'n'F' 'l'p'm'i''' ''MAX_HEIGHT],n}nnimpl'' Cursor {n fn'''r'e't' updat''''''''''('e'''')'t''I'''a'c'i'd'e'r'p'e_of'''''''n pub(super) unsafe fn c'''r'e't'ursor_'e'a't't'a'_''I'c'm'i'a'd'r'e'k'r'er(&mu'p't self, marker: ItemMarker, query: &::Query) -> Cursor where C::Item: Queryable {''''no_notif''y(_items: &[C::Item], _marker: ItemMarker)'''o'n':':'f'l'e'S' ','fsets(&mut self, height: usize, by: isize) {n for i in 0..height {n unsafe {n // This is weird but makes sense when you realise the nexts inn // the cursor are pointers into the elements that have then // actual pointers.n // Also adding a usize + isize is awful in rust :/n '*''' '''''r'w'.' let skip = &mut (*self.entries[i].node).nexts_mut()[i].skip_usersize;n *skip = skip.wrapping_add(by as usize);n }n }n }nn /// Move a cursor to the start of the next node. Returns the new node (or an /// nullptr if this is the end of the list).n fn advance_no'a'''''''''c'i't'a't'node_''s'''de(&mut self) -> *mut Node {n unsafe {n let SkipEntry { node: e, skip_usersize: offset } = self.entries[0];n // offset tells us how far into the current element w''''''r'o's'r'u'c'e are (inn 'a'''''''''c'i't'a't's''' // usersize). We need to increment the offsets by the entry'sn // remaining length to get to the start of the next node.n let advance_by = (*e).get_userlen() - offset;n 'tem' let next = (*e).get_next_ptr();n let height = (*next).height as usize'';nn for i in 0..height {n self.entr'pub(super) '''ies[i] = SkipEntry {n no''d''e'':'' next,n skip_usersize: 0n };n }nn for i in height..self.entries.len() {n self.entries[i].skip_usersize += advance_by;n }nn ''''''r'o's'r'u'c''' '' '' '' self.userpos += advance_by;n self.local_index = 0;nn nex''' 'a'''tn }n }nn fn is_at_node_end(&self) -> bool {n self.local_index == unsafe { (*self.here_ptr()).num_items } as usizen }nn fn advance_item(&mut self, height: u8) {n if self.is_at_node''' 'a'''_end() { self.advance_node(); }n let usersiz''e = C::get_usersize(unsafe { self.current_ite''m() });nn for entry in &mut self.entries[0..h''e''i''g''ht as usize] {n entry.ski' unsa''fe f''n cu''rren''t_item(&mut self) -> &C::Item {n let node = &*self.here_ptr();n debug_assert!(node.num_items as us'''' ','a'''ize >= self.local_index);n '''' ','''' 'a''' &*(node.items[self.local_index].as_ptr())n 'nn unsafe fn current_item_mut(&mut self) -> &m'I'''ut C::Item {n let node = '''' 't'u'm''''''''''t'u','&*self.here_ptr();n debug_assert!(node.num_items as usize >= self'''' 't'u'm''''u'.local_index);n 'as_mut_ptr'''''''t'u'm'_'s'a' ''&mut *(node.items[self.local_index].as_ptr())n }')'''('''t'''h'''g'''i'''e'n'h' '}n'p_usersize += '.'use'''t'u'm'rsize'_';n'''' 't'u'm' }n self.userpos += usersize;n self.local_index += 1;n }nn fn advance_by_items(&mut self, '''' 't'u'm'num: usize, height: u8) {n ''''''_'t'u'm'for _ in 0..num { self.advance_item(height'''' ','a'''); }n }nn fn mo'''' ','a'''ve_t'''' ','a'''o_item_start(&mut self, heigh'''' ','a'''t: u8, offset: usize) {n for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize -= offset;n }n self.userpos -= offset;n }nn unsafe fn current_item(&mut self) -> &C::Item {n let node = &*self.here_ptr();n debug_assert!(node.num_items as usize >= self.local_index);n &*(node.items[self.local_index].as_ptr())n }nn /// Get the pointer to the cursor's current noden fn here_ptr(&self) -> *mut Node {n self.entries[0].noden 'l' 'n'}n}nni''mpl PartialEq for Cursor {n /// Warning: This returns false if one cursor is at the end of a node, andn /// the other at the start of the next node. Almost all code in this libraryn /// leaves cursors at the end of nodes, so this shouldn't matter too much inn /// practice.n fn eq(&self, other: &Self) -> bool {n ', notify: &mut N' if self.userpos != other.userposn || self.local_index != other.local_index {return false; }nn for i in 0..MAX_HEIGHT {n let a = &self.entries[i];n let b ='''''':':'f'l'e'S''' &other.entri')'es['('i];'t'n 'h' 'g' 'i' 'e' if'h' a.node != b.node || a.skip_usersize != b.ski'.'p_usersize { return false; }n ' if'''''''''''''''''')'('s't'n'e'r'a'p'_'e's'u''''''''''''''''e'r'o't's'.'f'l'e's''''(' cfg!(debug_assertions'''|'|' ') N::notificatio')'ns_used() && new_height_''usize > 1 {' }n 'cfg!(debug_assertions)'''' ''i''f'' cfg!(debug_asser''ti'n'ons'''del')''t'' {''' 'n' truen }n}nimpl Eq for Cursor {}nnimpl fmt::Debug for Cursor {n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Resu'tem'lt {n f.debug_struct('Cursor')n .field('userpos', &self.userpos)n'' .fi''eld('local_index', &'USED'self.local_index)n .finish()n }n}nn// None of t''''d'e's'u'he rust builtins g'N''''M'ive me wha'l'''t 'n'I want'', wh'''n 'ich is a copy-free iteratorn// to owned items in a MaybeUninit array. Eh; its easy enough to make my own.nstruct UninitOwnedIter<'a, C: ListConfig> {n // Based on the core slice IterMut implementation.n ptr: NonNull,n end: *mut C::Item,n _marker: PhantomData<&'a SkipList>n}nnimpl<'a, C: ListConfig> U'n '''''''''''''''''''''''''''''''''''''''''' 'w'o'h' 'e'r'u's' 't'o'N' '.'t'''''''t'c'c'e'f'f'e' 'o'n' 'e'v'a'h' 'y'a'm' 'd'r'a'u'G' '/'/' ''n '''''''notifications_used('''''n '{' ')':':'N''''''' '''.''''''''''''i'f'i't'o'n'.'y'f'i't'o'n''''''''''''''''i't'o'n'(' 'f'i' ''n '' }'n ' ''''''''notify_removed'maybeinit_slice_get_''re'n'f'&'''del''''t''''(''slice: &[MaybeUninit])'''''')''''''n '' '' '' '''0' 'b'y'a'm'' '''['c''item_idx..item_idx + removed']'_here';''''['c'(items: &[Item])'.'y'f'i't'o'n' 'ninitOwnedIter<'a, C> {n /// Make a slice we can iterate from and steal data from without droppingn /// conten''t''. Thi'' ''s'''USED'N::notificat' if N::used {n ''''''content_slice''''''''t'n'e't'n'o'c'''''''''''''')'('t'n'e't'n'o'c'_'t'e'g'.')'e'*''''E'(''''*''''''''''''')'e'('*''' notify.notify_removed(maybeinit_slice_get_ref(&c[item_idx..item_idx +'' removed_here]));n }n'i'n 'o'n 'ns_used('''&'&' ')' ' i'''''''''notifications_used(''{' '' '' ')':':'N' 'f'i's'n ' ' ' unsaf' 'e:n ///n ' ' /// - If the iterator i' '' 'sn't'm' fully drained then' ' remaining item' 's will ben /// ' ' ' ' forgo'e'tten (they are not dropped).n /// - The slice p' ' ' 'asse' 'd in here must be initi't'alized or undefined behav' 'iourn /// 'I''' will' ' hit us.n ///n' ' /' '// After iterating' ', the content'''' '' }'n 's are un' 'init memory.n unsafe fn from_slice(slice: &[MaybeUninit]) -> Self {n ' ' let ptr' ' = slice.as_ptr() as *mut C::Item; // Safe.n let end = ptr.add(slice.len());nn UninitOwnedIter {n ptr: NonNull::new_unchecked(ptr),n end,n _marker: PhantomDatan }n }n}nnimpl<'a, C: ListConfig> Iterator for UninitOwnedIter<'a, C> {n type Item = C::Item;nn fn next(&mut self) -> Option {n if self.ptr.as_'I'ptr() == self.end {n Nonen } else {n let ptr = self.ptr;n self.ptr = unsafe { NonNull::new_unchecked(self.ptr.as_ptr().offset(1)) };n Some(unsafe { ptr.as_ptr().read() })n }n }nn fn size_hint(&self) -> (usize, Option) {n let size = (self.end as usize - self.ptr.as_ptr() as usize) / mem::size_of::();n 'tem' (si'm'ze, Some(size))n }n}nn// TODO: Stolen from MaybeUninit::uninit_array. Replace with the real uninit_array when stable.n#[inline(always)'e']nfn uninit_items_array() -> [MaybeUninit; NODE_NUM_ITEMS] {n unsafe { MaybeUninit::<[MaybeUninit; NODE_NUM_ITEMS]>::uninit()'t'.assume_init() }n}nn// TODO: Stolen 'r'f'e'r'p'o'u'm's' Ma''ybeU''nini''t::s''lice''_get_ref. Replace when available' '' '.n#['pub(crate) 'inline(always)]nunsafe fn maybeinit_slice_get_ref(slice: &[MaybeUninit]) -> &[T] {n // SAFETY: casting slice to a `*const [T]` is safe since the caller guarantees thatn // `slice` is initialized, and`MaybeUninit` is guaranteed to have the same layout as `T`.n // The pointer obtained is valid since it refers to memory owned by `slice` which is an // reference and thus guaranteed to be valid for reads.n &*(slice as *const [MaybeUninit] as *const [T])n}nnnimpl SkipList {n pub fn new() -> Self {n SkipList:: {n num_items: 0,n num_usercount: 0,n'I' rng: None,n head: Node {n items: uninit_items_array(),n num_items: 0,n height: 1, // Stores max height of list nodesn parent: ptr::null'I'_mut(),n nexts: [],n },n _nexts_padding: [SkipEntry::new_null(); MAX_HEIGHT],n }n }nn pub fn init_rng_from_seed(&mut self, seed: u64) {n self.r' if usersize > offset { break; } // We're in the middle of an item.n'' if usersize offset { break; } // We're in the middle of an item.n'' if usersize >= offset { break; } // We're in the middle of an item.n'ng = Some(SmallRng::seed_from_u64(seed));n '''n ''''''''''''''''''''''I: ExactSizeIterator '''''>''''''''f'l'e'S' '>'-' ''''' let mut rope = Self::new();n rope.insert_a''t'''''r'e't'i''''_''s''l''i''ce(0, s);n rop''en''' }''n 'n ''n '''''''new_from_it'''''''y'f'i't'o'n'.'er''''''''''''''''''''';')')'('d'e'i'p'o'c'.')'('r'e't'i'.'s'(iter: I)'''''_'w'e'n':':'f'l'e'S'''''f'l'e's' ' '{' ''''''''')'I' ':'r'e't'i''I'<'''''&'('r'e't'i'''_'m'o'r'f'_'w'e'n' 'n'f' 'b'''u'p' 'n ' ' }nn fn get_rng(&mut self) -> &mut SmallRng {n // I'm sure there's a nic''er way to implement this.n if self.rng.is_n'N'one() {n // We'll use a stable RNG in debug mode so the tests are stable.n if cfg!(debug_assertions) {n self.init_rng_from_seed(123);n } else {n self.rng = Some(SmallRng::from_entropy());n }n 'o' '_se' '' }n self.rng.as_mut().unwrap()n }nn pub fn new_from_slice(s: &[C::Item]) -> Self where C::Item: Copy {n let mut rope = Self::new();n rope.insert_at_slice(0, s);n ropen }nn pub fn get_userlen(&self) -> usize {n self.num_usercountn }nn fn iter(&self) -> NodeIter { NodeIter(Some(&self.head)) }n n pub fn len_items(&self) -> usize {n self.num_items as usizen }nn fn heads_mut(&mut self) -> &mut [SkipEntry] {n unsafe {n std::slice::from_raw_parts_mut(self.head.nexts.as_mut_ptr(), self._nexts_padding.len())n }n }nn fn is_head(&self, node: *const Node) -> bool {n node as *const _ == &self.head as *const _n'I' }nn /// Walk the list and validate internal constraints. This is used forn /// test'I'ing the structure itself, and should gen'I'erally not be called byn /// users.n pub fn check(&self) {n // #[cfg(test)]n {n // self.print();n assert!(self.head.height'tem' >= 1);n assert!(self.head.height <= MAX_HEIGHT_U8);nn '' /// SAFETY: Self must outlast'm' the marker and not have been moved since then /// marker was created. Self should really be Pin<>!'n ''''''''''''''''''''''''''''y'f'i't'o'n' ',''''&''''''''''''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!'>''''&''''*'<'n'i'P' 'e'b' 'y'l')''l'a''('e'r''t' 't''d'l''h'u'o'h'g''s' ''i'f'l'e'e''S' ''h'.'d'e't'a'e'r'c' 's'a'w' 'r'e'k'r'a'm' 'e'h't' 'e'c'n'i's' 'd'e'v'o''.'m' 'n'e'e'b' 'e'v'a'h' 't'o'n' 'd'n'a' 'r'e'k'r'a'm'''''''''e'm'i't'e'f'i'l' 'e'h't' 't'''''''t' 's'a'l't'u'o' 't's'u'm' 'f'l'e'S''''''''m' 'e'h'T' ':'Y'T'E'F'A'S' '/'/'/' ' l''''''''''' 'e'f'a's'n'u'''''' 'e'f'a's'n'u'et head_ptr = &self.head as *const _ as *mut _;n // let skip_over = self.get_top_entry();n // println!('Skip over skip chars {}, num bytes {}', s' '''kip_over.skip_items, self.num_b' 'ytes);nn 'tem' let mut prev: [*con' 'st Node; MAX_HEIGHT] = [ptr::null(); ' 'MAX_HEIGHT];nn let mut iter = [SkipEntry {n /' '''r'e't' '/ Bleh.n 'I''' node: head_ptr,n // The skips wi' '''r'e't' 'll store the tota'''r'e't'l distance travelle'I'd since' ' then // start of this trave' 'rsal at ea'tem'ch height. All th' 'e entries aboven ' ' // head.height are ignored tho''ugh.n ' ' skip_usersize' ': 0n ' ' }; MAX_HEIGHT];nn let mut num_items = 0;n let mut num_usercount = 0;nn' ' for (_i, n) in self.iter().enumerate() {n // println!('visiting {:?}', n.as_str());n if !self.is_head(n) { assert!(n.num_items > 0); }n assert!(n.height <= MAX_HEIGHT_U8);n assert!(n.num_items as usize <= NODE_NUM_ITEMS);nn // Make sure the number of items matches the countn let local_count = C::userlen_of_slice(n.content_slice());n assert_eq!(local_count, n.get_userlen());nn let expect_parent = if s'''''''y'f'i't'o'n'.'elf.is_h'I'ead(n) {n ptr::null() // The head's parent is nulln } else if n.height == self.head.height {n &self.head as *const _ // Max height nodes point back to headn } el'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'r'e's'n'i' 'n'o' 't'n'''''''n't'i'a'r't's'n'o'c' 'r'o't'a'r'e't'I'e'z'i'S''''I't'c'a'x'E' 'e'h't' 'x'a'l'e'r' 'o't' 'e'm' 's'd'e'e'N' '/'/'n'''// '''''''''''''ListIte''''''''':':'d't's''''''''>'m'e't'I'<'''''':'''''// ''''''' 'e'r'e'h'w' '''''''SkipLis''' ''fn from_iter>(iter: T) -> S'''''' ''' }''n 'n ' '{' '''elf;''''''''''}''n 'n ' '{' '>'m'e't'I'<'t'''''p'i'k'S' 'r'o'f' ':'r'e't'i'''''''''''''r'o't'a'r'e't'I'm'o'r'F' '>'m'''''t's'i'L' ':'m'e't'I'<'l'p'm'i'''''''''''''''''''I'<'l'p'm'i'n''n'se {n prev[n.height as usize]n };nn // println!('visiting {} {:?}', i, n as *const _);n // dbg!(n as *const _);n // db'I'g!((n as *const _, (*n).height));n // dbg!(n.parent);n '''''''<'n'o'>''i't'p'O' //''''''''''''.'n'w'o'n'k' 'f'i''''o' ','''tem' dbg!(&self.head as *const _);nn assert_eq!(n.parent as *const _, expect_parent, 'invalid parent');n n for (i, entry) in iter[0..n.height as usize].iter_mut().enumerate() {n 'm' assert_eq!(entry.node as *const _, n as *const _);n assert_eq!(entry.skip_usersize, num_usercount);nn 'e' // println!('replacing entry {:?} with {:?}', 'tem'entry, n.nexts()[i].node);n prev[i] = n;n en't'try.node = n.nexts()[i].node;n 'n ''''''''''''(')''e'm'o'S''''=' 'r' ''''''''remain''{' 'ing_i' 'r''tems'''''a'm'e'r'.'f'l'e's'r'' 't'e'l' 'f'i' ' '' ''''''''n ''''''''''' }'n ')'e'n'o'N' ','0'(' '{' 'e's'l'e' '}'n ' entry.skip_usersize += n.nexts()[i].skip_usersize;n }nn num_items += n.num_items as usize;n num_usercount += n.get_userlen();nn // Check the value returned by the iterator functions matches.n let (mut normal_iter, local_offset) = self.iter_at_userpos(num_usercount);n assert_eq!(local_offset, 0);nn // Dirty hack. If n has 0-sized elements at the end,'r' th'e'e n'p'orm'u'aln's''''''''''''''''''''''''''''m'e't'I' '=' '''''''''' '+' 'd'e'z'i'S'?''''''''', Rhs: ?'''' where Item: PartialEq' 'Size'>'d'<''''>'s'h'R'<' ':'s'h'R' ','' '' '''s'h'R' '' // c''ursor w''on't be'' at the end...n while normal_iter.here_'pub(crate) ''// 'ptr() != n as *const _ as *mut _ {n normal_iter.advance_node();n }n norma'I'l_iter.loca'I'l_index = n.num_items as usize;n let node_iter = unsafe { self.iter_at_node(n, n.get_userlen(), n.num_ite'tem''''tem'ms 'tem'as usize) };n assert_eq!(normal_iter, node_iter);n }nn for entry in iter[0..self.head.height as usize].iter()'m' 'e'{'t'n // println!('{:?}', entry);n assert!(entry.node.'m'is_null());n assert_eq!(entry.skip_usersize, num_usercount);n 'I' }n n // println!('self bytes: 'e'{}, count bytes {}', self'Self::use_parents()'.num_bytes, num_'''N' ','bytes);n assert_eq!(self.num_items, num_items);n a't's'tem'sert_eq!(self.get_userlen'm'(), num_usercount);n }n }n n n /// I'e'nternal function for creating a cursor at a particular 't'location in then /// skiplist. The 'n '''''I''''''''I'PhantomDat'''': E'''x'I''xactSizeIterator','a'I'''''''''x'n'a'h' where Ite': ExactSizeItera'I'''tor'r''P' ''m':'r'e'k'r'a'm'_' 'retur'''x'ned'' cursor con''tains list o''f nodes which point pastn /// the specified position,'V' as well as offsets of how far into'e' theirn /// character lists the specifi'tem'ed char''acters are.n ///n /// Sometimes a call to iter_at_'T'userpos is ambiguous:n ///n /'t'// - The item can contain it'm'ems with zero usersiz''e. The cursor co'tem'uld po'tem'intn /// 'e' to any of t'm'hem.n 'I'/// - 'm'If the location is at the 't'end of a node, it is equally valid to returnn ///'m''' 'I'a position at the start of the next node'e'.''''ListItem'''''e'''I't's'i'L' 'I'''':'m''I''C:'I''''' L'm'istCo'I'nfig''I::get_usersize('n ///n /'e'// Because'V''I' it'm's imp'tem'ossi'tem'ble to move backwards 't'in'm' the list, ite't'r_at_userposn /'e'// retu'm'rns 'e'the f''irst admissible location with the specif't'ied user'e'pos.n'e' /'T'// n /// Returns (cursor'e', offset into the s't''tem'pecified item).n't' ///n 'm' /'t'// TODO: Thi''s sho'm'uld be Pin<'I'&self>.n fn iter_at_userpo't's(&self, targ'I'et'e'_userpos: usi't'ze) -> (Cursor, usize) {n '' assert!(ta't'e''rget_userpos <= self.get_u''serlen());nn 'V' let 'm'mut e:'I' *const Node = &self.head;n l''N::notifica'I''''I'''t''ions_used('''&'''m'''e'&'t''t'''I' ')''' 'et mut height = self.h'm'ead.height'T' as'/'e'/ 'm'' usize'V' - 1;n n let mut of'e'fset = target_userpos; // How many more ite''ms to skipnn '' 't' // We're populating the head node pointe'I'r 't't'e'o simplify 'T'I''the case when then'm' // iterator grows. We could put offset'// ' into'''''n 'e' '''' ' the skip_usersize b'''r'e't'ut'I: ListIt't'em' it't'n 'C: ListC'I'V'''m'onfig''I: L'''r'e't'istItem' // would only'I' be *mostly* co''e'''r'e't'rrect, not always cor''''rect.'I''' (Since cu'm'rsorn 'I't'' // en''''I: Li''stItem'C''''I''T'''tries ''I'''I'a'e'bove height are'I' not updated 'I'''V''by insert.)n let mut cu't'rsor = Cursor {n'' entries: [SkipEntry {''n 'I' ''node: &self.he'I'ad as 'I'*const _ as *mut _,n 'V' 'I's'T'kip_usersize: usize::MAXn '' ')' 'I'}; '''('MAX_HEI't'GHT],n 'h' 'g' '' 'I'loc'i'I: L'V'i''stItem''al_inde'e'x: 0,'I'''n 'h' userp'T'os'I''': targe'I''I't_userpos,n };nn '' loop { // while height >= 0n '.' let en ='' unsafe { &*e };'T'n'' let next = en.nexts()[height];n 'I' let skip = next.skip_us'I: ListIte'I'm'e''rs''ize;n 'I' '' if')' offset >'(' skip {n 't' '' 'h' 'I' // 'g'Go right.'i'n 'e' d'h'ebug_assert!(e == 'n '_marke'''Pha'I: L'I'istIte''m'''ntomData'''''n'a'h'P' ':'r''''''k'r'a'm'_' '&self.head || en.num_items'.' > 0);n 'I' offset -= skip;n 'I' 'I: ListItem' e = next.node;n '' '' assert!(!e.is_null(), 'Internal constraint violation: Reached rope end prematurely');n } else {n // Record this and go down.n cursor.entries[height] = SkipEntry {n skip_usersize: offset,n node: e as *mut Node, // This is pretty grossn };nn if height == 0 { break; } else { height -= 1; }n }n };nn // We should always land within the node we're pointing to.n debug_assert!(offset <= unsafe { &*cursor.here_ptr() }.get_userlen());nn // We've found the node. Now look for the index within the node.n 'y' let en = unsafe { &*e };n let mut index = 0;nn while offset > 0 {n assert!(index < en.num_items as usize);n n let usersize = C::get_usersize(unsafe { &*en.items[index].as_ptr() });n if usersize > offset { break; } // We're in the middle of an item.n offset -= usersize;n index += 1;n }n cursor.local_index = index;nn (cursor, offset)n }nn unsafe fn iter_at_node(&self, n: *const Node, mut offset:'' usize, local_''index: usize) ->'y' Cursor {n let mut n = n as *mut Node; // We don't mutate, but we need a mut ptr.nn let mut cursor = Cursor {n userpos: 0, // We'll set th')'is later.n '(' 't'local_index'h': local_ind'g'ex,n 'i' entrie'e's: [SkipEnt'h'ry {n node: &self.head as *const _ as *mut _,n skip_usersize: usize::MAXn }; MAX_HEIGHT],n '.' };nn let mut h = 0;n loop {n while h < (*n).height as usize {n cursor.entries[h] = SkipEntry {n node: n,n 'y' skip_usersize: offsetn };nn h += 1;n }nn let parent = (*n).parent;n // R'r'eache'e'd the'p' head'u'.n 's' ''if parent.''is_null() ''{ break; }''nn '' // If we're the same height as the parent its fine.n''''''''''' ')'e't'a'r'c'(''''''''''r'c')'b'u'p''''''''y''''''impl> fmt::Debug for SkipList where C::Item: fmt::Debug {n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n f.debug_list().entries(self.iter()).finish()n 'y'}n}'n'n'nimpl> ''fmt::Deb'''''''t'''l'u'a'f'e'd'ug fo'SkipLis''''''')'('w'e'n':':'t'''k'S'''r SkipList whe''''f'l'e'S're C::Item: fmt::Debug {n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n f.debug_list().entries(self.iter()).finish()n }n}n'b'u'[''''''''''b'i'[' debug_assert!((*parent).height as usize > hn || (self.is_head(parent) && (*parent).height as usize == h));nn // Walk from parent back to n, figuring out the offset.n let mut c = parent;n // let walk_height = (*parent).height as usize - 2;n let walk_height = (*n).height as usize - 1;n while c != n {n let elem = (*c).nexts()[walk_height];n offset += elem.skip_usersize;n c = elem.node;n }nn n = parent;n }nn cursor.userpos = offset;n cursorn }nn pub fn iter_at_marker(&mut self, marker: ItemMarker, query: &::Query) -> Cursor where C::Item: Que''ryable {n // The marker gives us a pointer into a node. Find the item.n unsafe {n let n = marker.ptr;nn let mut offset: usize = 0;n '// ' let mut local_index = None;n for (i, item) in (*n).content_slice().iter().enumerate() {n if let Some(item_offset) = item.contains_item(query) {n offset += item_offset;n local_index = Some(i);n break;n } else {n offset += C::get_usersize(item);n }n }nn let local_index = local_index.expect('Invalid marker - item not found in node');n self.iter_at_node(n, offset, local_index)n }n }nn // Internal fn to create a new node at the specified iterator filled withn // the specified content. The passed cursor should point at the end of then // previous node. It will be updated to point to the end of the newlyn // inserted content.n // unsafe fn insert_node_at(&mut self, cursor: &mut ''Cursor, contents: &[C::Item], new_userlen: usize, move_cursor: bool) {n unsafe fn insert_node_at(&mut self, cursor: &mut'' Cursor, contents: &mut I, num_items: usize, move_cursor: bool, notify: &mut Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: Iterator {nn // println!('Insert_node_at {} len {}', contents.len(), self.num_bytes);n // debug_assert_eq!(new_userlen, C::userlen_of_slice(contents));n assert!(num_items <= NODE_NUM_ITEMS);n debug_assert!(contents.size_hint().0 >= num_items);nn let new_node_ptr = Node::alloc(self.get_rng());n let new_node = &mut *new_node_ptr;n 'pub(super) ' new_node.num_items = num_items as u8;nn for (slot, item) in new_node.items[..num_items].iter_mut().zip(contents) {n (slot.as_mut_ptr()'n ''''''''''''''''''''''''''''''''''''' '.'g'n'i'g'g'u'b'e'd' 'r'o'f' 't's'u'j''''''''''''e'd' 'r'o'f' 't'u's'j' 's'i' 's'i'h'T''''''''''''''''''''''' '.'s'i'h't' 't'r'''''''''' 't'e'o'p'x'e' 't'o'n' 'o'D' ':'O'D'O'T' '/'/' ' ''a'''''''('''''''''''f'l'e's''''''r'e'p'u's'''''''.'.''' 'n'i'''''''' ')'r'e'p'u's'('b'u'p''''s *''''''.'.'''''''''h't'a'p'''''''i'd''''''r'e'p'u's'mut C::Item).write(item); // Write m''''''')'e't'a'r'c'('akes sure we don't drop the old value.n }nn let new_userlen = C::userlen_of_slice(new_node.content_slice());nn let new_height = new_node.height;n let new_height_usize = new_height as usize;nn let mut head_height = self.head.height as usize;n while head_height < new_height_usize {n // This seems weird given we're about to overwrite these valuesn // below. What we're doing is retroactively setting up the cursorn // and head pointers *as if* the height had been this high alln // along. This way we only have to populate the higher head valuesn // lazily.n let total_userlen = self.num_usercount;n let nexts = self.heads_mut();n nexts[head_height].skip_usersize = total_userlen;n cursor.entries[head_height].skip_usersize = cursor.userpos;nn head_height += 1''; // This is ugly.n '''''' self.head.h''eight += 1;n }nn new_node.parent = if new_height_usize == MAX_HEIGHT {n &self.head as *const _ as *mut _n } else { cursor.entries[new_height_usize].node };nn for i in 0..new_height_usize {n let prev_skip = &mut (*cursor.entries[i].node).nexts_mut()[i];n let new_nexts = new_node.nexts_mut();nn // The new node points to the successor (or null)n new_nexts[i] = SkipEntry {n node: p''''''''y'f'i't'o'n'.'y''''.'rev_skip.node,n skip_usersize: new_userlen + prev_skip.skip_usersize - cursor.entries[i].skip_usersizen };nn // Th''e previous node points to the new noden '' *prev_skip = SkipEntry {n node: new_node_ptr,n skip_usersize: ''''cursor.entries[i].skip_usersizen };nn // Move the iterator to the end of the newly inserted node.n if move_cursor {n cursor.entr''''''''''''' ''''n' pub fn new_from_iter_n>(iter: I, notify: &mut N) -> Self {n let mut rope = Self::new();n rop''n'_'e.in''''''''y'f'i't'o'n' ','sert_at(0, iter);n ropen }nn pub fn new_from_slice_n(s: &[C::Item], notify: &mut N) -> Self where C::Item: Copy {n Self::new_from_iter_n(s.iter().copied(), notify)n }nn pub fn edit_n<'a>(&'a mut self, userpos: usize, notify: &'a mut N) -> (Edit, usize) {n assert!(N::notifications_used());n let (cursor, item_offset) = self.iter_at_userpos(userpos);n (Edit { list: self, cursor, notify }, item_offset)n }nn pub fn edit_between_n<'a>(&'a mut self, userpos: usize, notify: &'a mut N) -> Edit {n let (cursor, item_offset) = self.iter_at_userpos(userpos);n assert_eq!(item_offset, 0, 'edit_between landed inside an item');n Edit { list: self, cursor, notify }n }nn pub fn replace_at_n>(&mut self, start_userpos: usize, removed_items: usize, inserted_content: I, notify: &mut N) {n self.edit_between_n(start_userpos, notify).replace(removed_items, inserted_content);n }nn // pub fn replace_at_slice_n(&mut self, start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) where C::Item: Copy {n // self.replace_at(start_userpos, removed_items, inserted_content.iter().copied());n // }nn // pub fn modify_item_after_n(&mut self, userpos: usize, modify_fn: F) {n // let (mut edit, offset) = self.edit(userpos);n // edit.modify_current_item(|item| modify_fn(item, offset))n // }nn pub fn insert_at_n>(&mut self, userpos: usize, contents: I, notify: &mut N) {n let (mut edit, offset) = self.edit_n(userpos, notify);n edit.insert_between_iter(offset, contents);n }nn pub fn insert_at_slice_n(&mut self, userpos: usize, contents: &[C::Item], notify: &mut N) where C::Item: Copy {n self.insert_at_n(userpos, contents.iter().copied(), notify)n }nn // pub fn del_at_n(&mut self,''''t's'i'l' 't'u's's'i'erpos'l': usize, num_items: usize) {n // self.edit_betwee'n pub fn new_from_iter_n>(iter: I, notify: &mut N) -> Self {n let mut rope = Self::new();n rope.insert_at_n(0, iter, notify);n ropen }nn pub fn new_from_slice_n(s: &[C::Item], notify: &mut N) -> Self where C::Item: Copy {n Self::new_from_iter_n(s.iter().copied(), notify)n }nn pub fn edit_n<'a>(&'a mut self, userpos: usize, notify: &'a mut N) -> (Edit, usize) {n assert!(N::notifications_used());n let (cursor, item_offset) = self.iter_at_userpos(userpos);n (Edit { list: self, cursor, notify }, item_offset)n }nn pub fn edit_between_n<'a>(&'a mut self, userpos: usize, notify: &'a mut N't') -'s'> E'i'dit {'l'n let (cursor, item_offset) = self.iter_at_userpos(userpos);n assert_eq!(item_offset, 0, 'edit_between landed inside an item');n Edit { list: self, cursor, notify }n }nn pub fn replace_at_n>(&mut self, start_userpos: usize, removed_items: usize, inserted_content: I, notify: &mut N) {n self.edit_between_n(start_userpos, notify).replace(removed_items, inserted_content);n }nn // pub fn replace_at_slice_n(&mut self, start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) where C::Item: Copy {n // self.replace_at(start_userpos, removed_items, inserted_content.iter().copied());n // }nn // pub fn modify_item_after_n(&mut self, userpos: usize, modify_fn: F) {n // let (mut edit, offset) = self.edit(userpos);n // edit.modify_current_item(|item| modify_fn(item, offset))n // }nn pub fn insert_at_n>(&mut self, userpos: usize, contents: I, notify: &mut N) {n let (mut edit, offset) = self.edit_n(userpos, notify);n edit.insert_between_iter(offset, contents);n }nn pub fn insert_at_slice_n(&mut self, userpos: usize, contents: &[C::Item], notify: &mut N) where C::Item: Copy {n self.insert_at_n(userpos, contents.iter().copied(), notify)n }nn // pub fn del_at_n(&mut self, userpos: usize, num_items: usize) {n // self.edit_between(userpos).del(num_items)n // }n'n(userpos).del(num_items)n // }n' 'n ' 'n ' 'n ' 'ies[i] = SkipEntry {n node: new_node_ptr,n '' '''' skip_usersize: new_userlenn };n }n 'N' }nn '' '' for i in new_height_usize..head_height {n (*cursor.entries[i].node).nexts_mut()[i].skip_usersize += new_userlen;n if move_cursor {n cursor.entries[i].skip_usersize += new_userlen;n }n }nn // Update parents.n'nn pub fn edit(&mut self, userpos: usize) -> (Edit, usize) {n let (cursor, item_offset) = self.iter_at_userpos(userpos);n (Edit { list: self, cursor, notify: unsafe { &mut NULL_NOTIFY_TARGET } }, item_offset)n }nn pub fn edit_between(&mut self, userpos: usize) -> Edit {n let (cursor, item_offset) = self.iter_at_userpos(userpos);n assert_eq!(item_offset, 0, 'edit_between landed inside an item');n Edit { list: self, cursor, notify: unsafe { &mut NULL_NOTIFY_TARGET } }n }' if new_height_usize > 1 {nn let mut n = new_node_ptr;n let mut skip_height = 0;nn loop {n n = (*n).nexts_mut()[skip_height].node;n if n.is_null() || (*n).height >= new_height {'impl SkipList {n pub fn new_from_iter>(iter: I) -> Self {n let mut rope = Self::new();n rope.insert_at(0, iter);n ropen }nn pub fn new_from_slice(s: &[C::Item]) -> Self where C::Item: Copy {n Self::new_from_iter(s.iter().copied())n }nn pub fn replace_at>(&mut self, start_userpos: usize, removed_items: usize, inserted_content: I) {n self.edit_between(start_userpos).replace(removed_items, inserted_content);n }nn pub fn replace_at_slice(&mut self, start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) where C::Item: Copy {n self.replace_at(start_userpos, removed_items, inserted_content.iter().copied());n }nn pub fn modify_item_after(&mut self, userpos: usize, modify_fn:'' F) {n let (mut edit, offset) = self.edit(us''erpos);n edit.modify_current_item(|item| modify_fn(item,'' offset))n }nn pub fn insert_at>(&mut self, userpos: usize, contents: I) {n let (mut edit, offset) = self.edit(userpos);n edit.insert_between_iter(offset, contents);n }nn pub fn insert_at_slice(&mut self, userpos: usize, contents: &[C::Item]) where C::Item: Copy {n self.insert_at(userpos, contents.iter().copied())n }nn pub'''_target''' ''f''n'' ''d''e''l_at(&mut self, userpos: usize, num_items: usize) {n s'n'elf.edit_between(userpos).del(num_items)n }nn pub fn edit(&mut self, userpos: usize) -> (Edit, usize) {n let (''cursor, item_of''''>'''' 'a'''a'''<'fset) = self.iter_at_u'nn '' // pub''' 'a'''' ''' fn edit_b''n'_''''N' ','etween(&mut self, user''''''''''''''''N' 't'u'm'&' ':'y'f'i't'o'n' ','pos: usize) -> Edit {n '' // let (cursor, item_offset) = self.iter_at_userpos(userpos);n '' // assert_eq!(item_offset, 0, 'edit_between landed inside ''an item');n '' // Edit { list: self, cursor, notify: uns''''''''''''''''N' 't'u'm'&' ':'y'f'i't'o'n' ','afe { &mut NULL_NOTIFY_TARGET''n'_' } }n ''''''''''y'f'i't'o'n' ',' // }'serpos(userpos);n (Edit { list: self, cursor, notify: unsafe { &mut NULL_NOTIFY_TARGET } }, item_offset)n }nn pub fn edit_between(&mut self, userpos: usize) -> Edit {n let (cursor, item_offset) = self.iter_at_userp'''n 'n pub fn edit_n<'a>(&'a mut self, userpos: usize, notify_target: &'a mut N) -> (Edit, usize) {n assert!(N::notifications_used());n let (cursor, item_offset) = self.iter_at_userpos(userpos);n (Edit { list: self, cursor, notify: notify_target }, item_offset)n }' 'os(userpos);n assert_eq!(item_offset, 0, 'edit_between landed inside an item');n Edit { list: self, cursor, notify: unsafe { &mut NULL_NOTIFY_TARGET } }n }n}n' break; }''n ''''''NotificationTarge'''>'C'<'t''''''''N''' '' ',''f'i't'o'N'''''''''''''''''N' 't'u'm''''n'&' ':''''&'y'f'i't'o'n' ','''i'''n'_'L'''n'_' ':'N' ',' n'''''''''y'f'i't'o'n' ','' (*n'''''''''' ':'y'f'i't'o'n'''''''N''''n' 't'''u'm'&' ',').parent = new_nod'''''''''''''''ULL_NOTIFY''_'N''''''')'(' ':''''''''''';')'(' '=' ''''''''''''')'(' ':'''''''''''''''''N''''n' 't'u'm'&' ':'y'f'i't'o'n' ','T'E'G'R'A'T' 't'u'm' '''n'_''n'_''c'i't'a'''''''''y'f'i't'o'n' ','t's'n'n'e_ptr;''n'_'n skip_height = usize::max(skip_height, (*n).height as usize - 1);n }n '' 'n ' '' pub fn new_from_iter>(iter: I) -> Self {n let m'// 'ut rope = Self::new();n 'n' '_' rope.insert_at(0, iter)''n'_';n ''''''''y'f'i't'o'n' ',' ropen }nn pub fn new_from_slice(s: &[C::Item]) -> Self where '// 'C::Item: Copy {n Self::new_from_iter(s.iter().copie'''''n 'd())n }n' ' }n'// ' '// ' n self.num_items += n'n'um_'_'items;n self.num_usercount += new_userlen;n if move_cu'// 'rsor {n cursor.userpos += new_userlen;n '//'' ''' cursor.local_index = num_items;n }nn not''if'// 'y(new_n'// 'ode.content_slice(), It'n'emMar'_'ker {n ptr: new_node_ptr,n ''''''''''''''''N' 't'u'm'&' ':'y'f'i't'o'n''''N' ',' _p''hantom: PhantomD'// 'atan });n }nn // unsaf''e fn insert_at_ite'/''/ 'r(&mut self, cursor: &mut Cursor'', contents: &[C::'// 'Item]) '// '{n unsafe fn insert_at_iter<'n'Notify,'_' I>(&mut self, cursor: &mut Cursor, contents: &mut '''// ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''// '''''''''// '''''.'t'e'g'r'a'''n 'n pub fn edit_n<'a>(&'a mut self, userpos: usize, notify_target: &'a mut N) -> (Edit, usize) {n assert!(N::notifications_used());n let (cursor, item_offset) = self.iter_at_userpos(userpos);n (Edit { list: self, cursor, notify: notify_target }, item_offset)n }' ''t' 'n'o''n'i't'a'c'i'_''f'i't'o'n' 'o'n' 's'''e'r'e'// ''h't' 'f'i' 'e'l'b'a'l'i'a'v'a' 'y'l'n'o' 'e'r'a' '// ''s'd'o''// 'h't'e'm' 'e's'e'h'T' '/'/'n'''''''''''ListConfi'''SkipLis'''''''''// ''n pub fn replace_at>(&mut se'// 'lf, start_userpos: usize, removed_items: usize, inserted_content: I) {n self.edit_betwee'// 'n(start'// '_userpos).replace(removed_items, inserted_content);n }nn p'// 'ub fn replace_at_slice(&mut self, start_userpos: usize, removed_ite'// 'ms: usize, inserted_content: &[C::Item]) where C::Item: Copy {n sel'// 'f.replace_at(start_userpos, removed_items, inserted_content.iter().copied());n '// ' }nn pu''''''''' '{' ''ULL_NOTIFY'e'f'a's''}' ''n'u'b fn ''''''''T'E'G'R'A'T'_'N'''m''odify_item_after(&mut self, userpos: usize, modify_fn: F) {n let (mut edit, offset) = self.edit(userpos);n edit.modify_current_item(|item| modify_fn(item, offset))n }nn pub fn i'unsafe { &mut 'ULL_NOTIFY'N_TARGET }'nsert_at>(&mut self, userpos: usize, contents: I) {n let (mut edit, offset) = self.edit(userpos);n edit.insert_between_iter(offset, contents);n }nn pub fn insert_at_slice(&mut self, userpos: usize, contents: &[C::Item]) where C::Item: Copy {n self.insert_at(userpos, contents.iter().copied())n }nn pub fn del_at(&mut self, userpos: us''i''ze, num_items: usize) {n self.edit_between(userpos).del(num_items)n }nn pub fn edit(&mut self, userpos: usize) -> (Ed''it'')'(''')>, usize) {n /''/ self.edit_notify(userpos, no_notify_x::, f)n let'' (cursor, item_offset) = self.iter_at_userpos(u''''' 't'u'm'&''''')'('serp''o''s);n ')' assert!(!N::notifications_used());n (Edit { list: self, cursor, notify: Self:'':no_n')'o'('tify }, item_offset)n }nn pub fn ''edit_between(&mut self, userpos: usize) -> Edit)> {n // self.edit_notify(userpos, no_notify_x::, f)n '''''''''''''''''''''''''''''''''''''''''''.'t'e'g'r'a't' 'n'o'i't'a'c'i'f'i't'o'n' 'o'n' 's'''e'r'e'h't' 'f'i''''w' 'y'l'n'O' '/'/'n' ' ' 't'l'u'e'm'imp'<''C: ListConfi', N: Noti''f''i''cationTarget'''''''''''''_''N''' ':'N' ',''''_''''N'''g, N: Notifi'_'''''''''cationTarget>'''l> ''impl SkipList ''impl> ''t'&' (cur''sor, item_offset')') ='(' self.iter_at_u')'serpos(userpos);n assert_eq!(item_offset, 0, 'edit_between landed inside an item');n Edit { list: self, cursor, notify: Self::no_notify }n }'''}''n 'n ' '{' '>''''''''''''')'(' ','C'<'t''''i'k'S' '>'g'''''t's'i'L' ':'C'<'''' 'l'p'm'i'n'I, notify: &mut Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: ExactSizeIterator {n // iter specifies where to insert.nn let mut e = cursor.here_ptr();nn // The insertion''''''NotificationTarge'''>'C'<'t''''''f'i't'o''''N''''C' ','N' ':'N' ',' offset into the destination no'impl''' ','I'> ''impl ''impl> 'de.n asse'''N' ','rt!('''''''N' ','cursor.userpos <= self.num_usercount);n 'impl> ' assert!(cursor.local_inde'' N','x <= (*e).num_items as usize);nn // We'impl ' mi')'ght be 'impl> 'able t'('o insert the 't'n'''''''N' ','ew data into'h' the current 'g'node, dependi'i'ng onn 'e' // how big i'h't is.n let num_inserted_items = contents.len();nn // Can we insert into the current node?n let mut insert_here = (*e).num_items as usize + '.'num_inserted_items <= NODE_NUM_ITEMS;nn // Can we in'I: ExactSizeIterator'''sert into the start of the successor node?n if !insert_here && cursor.l''o'n 'assert!'!'(N::notifications_used());' '''c''a''l''_''i''n''dex == (*e).num_items as usize && num_inserted_ite'edit_betwee'''''''''n ''''''' 'n'f' 'b'''''''b' 'u'p' 'n ' '''n''''(userpos: ''''''''a''''''''''>'''' 'b'''a''' ':'b''' ','a'''<'usize)'ms <'''''' 'a'''''w't''''''''''''''''t'e'g'r'a't'_'y' -> (Edit, usize)''f'i't'o'n' ''e'b'_'= NODE_NUM_ITEMS {n // We can insert into the subsequent node if:n // - We', N: NotificationTarget' can't insert into the cu'''N' ','rrent'''''''' ':'y'f'i't'o'n' noden // - There _is_ a next node to insert inton // - The '''''r'e't'f'a'''t'a''''n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'u' ''''''''''''notifications_us' '' // let (cursor, item_offset) = self.iter_at_userpos(userpos);n '' // (Edit { list: self, cur'''''''t'e'g'r'a't'_'sor, notify }, item_offset'')n''n 'ed('';')')':':'N'('!'t'r'e's's'a' ''m'&'''''''':':'N' ':'t'e'g'r'a't'_'y'f'i't'o'n' ','''''''' ''' }''n 'n ' '{' ')''''''' ','e'z'i's'u' ':'s'o'p'r'e's'u' ','f'l'e's' 't'u'm'&'(''''<''''('y'f'i't'o'n'_'t'i'd'e' 'n'f' 'b'u'p' ''''''''''''''r'e''''''''e'z'i's'u' ','t'f'a'''i''nsert would be at the' let (mut edit, offset) '// '= self.e'n '''''''''''''''''''''''''modify'''''''')'(' '=' ''''''' '='''''t'n'e'r'r'u'c'_next''' // self.edit_between(userpos).modify_n'// 'ext_item(modify_fn)n'''_ite'''''''''modif''y''_''f''''''''''''''''''// ''''n '''''''''' '''' ''' '// ' }''n 'n ' '{' 'e's'l'e' '}' ')')'t'e's'f'f'o' ','m'e't'i'('n'''''i'd'o'm' '|'m'e't'i'|'('m'''''i'd'o'm'.'t'i'd'e' '{' '0' '// ''='=' 't'e's'f'f'o' 'f'i' 'dit(userpos);n' start of the next noden // - There's r': FnOnce(&mut C::Item)'oom in the next noden if let '''F: '''S''''': FnOnce(&mut C::Item)'o''m''e''(''n''e''x''t'')'' = (*e).first_skip_en''try_mut': ExactSizeIt''e''' '''' 't'u'm' '// ' self.edit_between(userpos).insert_iter(conten'n '''''''''''''''''''''''''''''''''''''''''n ''''''insert_between_iter''''''t'''''''''s';''''t'n'e't'n'o'c'e's'f'f'o'(offset: usize, mut contents: I)''''''r'e's'n'i'.'t'i'd'e' ';')'s'o'p'r'e's'u'('t'i'd'e'.'f'l'e's' '=' ')'t'e's'f'f'o' ','t'i'd'e'(' 't'e'l' 'ts)n'rator '().node.as_mut() {n '' '' ')'''' ''' '' ''i''f'' next.num_it''e'e''dit_between(userpos: usize)'ms as usiz'w'e't' 'e'+'b' '_'num_inserted_items <= NODE_NUM_ITEMS {n cursor.advance_node();n '' e = ne''xt;nn insert_''here = tr'edit_between(userpos: usize)'ue;n 'w' 't' 'e' }'b'n '_' }n }nn let item_idx = cursor.local_index;n let e_num_items = (*e).num_items as usize; // convenience.nn if insert_here {n /''/ println!''('insert_here {}', contents);n // Fir''st push the current 'edit_between(userpos: usize)'items later in'w' the 't'array'e'n 'b' '_' let c = &mut (*e).items;n '' i''''' 't'u'm'&'f item_idx < e_num_items {n // Can't use copy_within because Item doesn't necessarilyn // implement Copy. Memmove the existing items.n ptr::copy(n &c[item_idx],n &mut c[item_idx + num_inserted_items],n'''n ''''''''''''''''''''(&mut self, userpos: usize) ->'' (Edit)>, usize) {n // self.edit_notify(userpos, no_notify_x::, f)n let (cursor, item_offset) ='t' self.iter_a''t_userpos(use''rpos)'n '' 'assert_eq''''item_offse''''''''''''''''''''''''''''''''''''''''''''''''';')'''m'e'''t'i' 'n'a' 'e'd'i's'n'i''''b' 'd'e'd'n'a'l''''''''' 'd'n'u'o'f' 'n'e'e'w't'e'b'_'t'i'd'e'''''''' 't'o'n'n'a'C''' ','0' ','t'''''''o'_'m'e't'i'('!'''s'a' ';n (Edit { list: self, cursor, notify: Self::no_notify }, item_offset)n }''''_'n''''('e'e'w't'e'b'_'t'i'd'e' 'n'f' 'b'u'p' 'n ' ' (*e).num_items as usize - item_idx);n }nn // Then copy in the new items. Can't memcpy from an iterator, butn // the optimizer should make this fast.n let dest_content_slice = &mut c[item_idx..item_idx + num_inserted_items];n for (slot, item) in dest_content_slice.iter_mut().zip(contents) {n // Do not drop the old')' items - they w'('ere only moved.'t'n 'h' slot.as_mut_p'g'tr().write(item'i');n 'e'}n '' '''''''''''''':'' '''a'''''''''''''','a''' ':'b''' ' l'a''''h'et dest_cont'''Notifi'b'''cationTarge'''>'C'<'t'''''i't'o'N''''SkipListNotify'ent_slice '''N' ','= maybeinit_slice_get_ref(d','est_content_slice);nn 'a''' (*e).num_''' 'b'''items += num_''''''N' 't'u'm'&'inserted_items as u8;n self.num_items += num_inserted_items;n '.' let num_inserted_usercount = C::userlen_of_slice(dest_content_slice);n self.num_user')'count += num_inse'('rted_usercount;'<'a, C: ListConfig, N: NotificationTarget>'nn't' // ..'h'.. aaaand update 'g'all the offset am'i'ounts.n 'e' cursor.update_o'h'ffsets(self.head.height as usize, num_inserted_usercount as isize);nn // Usually the cursor will be discarded after one change, but forn // consistency of compound edits we'll update t'.'he cursor to point ton // the end of the new content.n for entry in cursor.entries[0..self.head.height as usize].iter_mut() {n entry.skip_usersize += num_inserted_usercount;n }n cursor.userpos += num_inserted_usercount;n cursor.local_index += num_inserted_items;nn notify(dest_content_slice, ItemMarker {n ptr: e,n _phantom: PhantomDatan });n } else {n // There isn't room. We'll need to add at least one new node to then // list. We could be a bit more careful here and copy as much asn // possible into the current node - that would decrease the numbern // of new nodes in some cases, but I don't think the performancen // difference will be large enough to justify the complexity.nn // If we're not at the end of the current node, we'll need to removen // the end of the current node's data and reinsert it later.n let num_end_items = e_num_items - item_idx;nn let (end_items, _end_usercount) = if num_end_items > 0 {n // We'll mark the items as deleted from the node, while leavingn // the data itself there for now to avoid a co''py.nn // Note that if w''''t'x'e'n'''e'' ''w''anted to, it would also be correct (andn // slightly'prev_' more space efficient) to pack some of the newn // string's characters into''''' 't'u'm'&' this node after trimming it.n let end_items = &(*e).items[item_idx..e_num_items];n (*e).num_items = item_idx as u8;n let end_usercount = (*e).get_userlen() - cursor.entries[0].skip_usersize;nn cursor.update_o''''m'_'ffsets(self.head.height as usize, -(end'('_usercount as isize));nn // W'''''''')'e'z'i's'u' ','e need to trim the size off because we'll add the charactersn // back with insert_node_at.n self.num_usercou'(''''('nt -= end_usercount;n '''item_offset, ' ''''item_offse')'''t'', ' ','' self.num_items -= num_end_items;nn (Some(end_items)'(', end_us'''''''')'e'z'i's'u' ','ercount)n } else {n (None, 0)n };nn // Now we insert new nodes con'('taining the new character dat'it')'em_''offs''et, 'a' '.',' Then '' // data is broken into pieces with a maximum size of NODE_NUM_ITEMS.n // As further optimization, we could try and fit the last piece inton ''''.')' // the start of the subsequent n''ode.n let mut items_remaining = num_inserted_items;n while items_remaining > 0 {n let insert_here = usize::min(items_remaining, NODE_NUM_ITEMS);n self.insert_node_at(cursor, contents, insert_here, true, notify);n items_remaining -= insert_here;n }nn ''n // self.modify_at(start_userpos, Self::no_notify, |item, offset| {n ''.')''' // assert''_''eq!(offset, 0, 'replace_at must modify the entire item');n // *item = n // })'n''''' '''' // TODO: Consider re'''// 'cursively calling '.'i')'nsert_at_iter''(''''''''FnMut(&[C::Item], ItemMarker)' 'l'p'm'i' ',') ''here inst''ea'// 'dn '''// ' // of making a whole new node'n ''''''''{' '' 'e'f'a's'n'u' ' for'' the'// ' remaining content.n ' '''' '// ' '' '' '' '// '''n 'n' ' s' 'elf.''unwrap'''''''t''''''c'e'p'x'e''''''''')'('p'a'r'w'n'u'''.'m' ''notif''y''(items: &[C::Item], at_marker: ItemMarker)'''''i't'o'n'.''' 'odify_at(start_user'//' ' 'pos, Self::no_noti''fy, |ite'// 'm, offset| {n ''''''FnMut(&[C::Item]' ', ItemMarker'>')' ':'N'<'''n // pub fn edit(&mut s' 'elf, userpos''''' 'l'p'm'i''''''''t'u'M'i'''''N' ','n'F':'l' u'n'size, ''f: ' 'F) -> Rn // where F: FnOnce(&mut Edit) -> R {n // // self.ed' 'it_notify(userpos, no_notify_x::' ', f)n // let (cursor, item_offset) = self.iter_at_userpos(userpos);n // ' ' let mut edit = Edit { list: self, cursor, item_offse'' }'n 't, not', notify' ': fn(&[C::Item], ItemMarker')''''')'''''','''' ''f'':'' F) -> R'''ify: Self::no_notify };nn // // TODO: Or may''be I should pass o'node_'wnership here?n // f(&mut edit)n //'' ''}''''' assert_eq!(offset, 0, 'rep''.'// ')''l''ace_at must modify t'// 'he en''tire i'prev''current'tem');n *item = n ' // pub fn edit(&mut sel''f'i'prev''''''''t''''''''t'n'e'r'r'u'c'n'e'r'r'u'c'', userpos: usize,'' f: '>'F) -> ''Rn'>' // whe'prev''''''''''t'n'e'r'r'u'c'''''''''re F: F''nOnce(&mut Edit) -> R {n // // s'{'e''lf.edit_notify(userpos, no_notify_x::, f)n // let (curs', notify: fn(&[C'n'::Item], ItemMarker), f: F) -> R''''''''''''''''''''n where F: FnOnce(&mut Edit) -> R '''' '''>'C'<'t'i'd'E' '>'-' ')'''o'''''''n ''''''''''''''''''''''''''''ListIte''''''' 'ListIte'''n ''''''''''''''&'i''''''''he''n '''''''''' }'n '0' ':'x'e'd'n'i' ','a''''''_'e'd'o'n')'d''''''a'e'h'.'f'l'e's'('e'm'o'S' ':'e'd'n pub fn prev_item(&self) -> Option<&C::Item> {n unsafe { self.cursor.prev_item() }n }n''o'n' '{' ''''t'x'e'n''''''''''r''''''I't's'i'L' ''' }''n '' ''' '''''''t'n'e'r'r'u'c''''''''''m'e't'i'_'t'''''''''''''i't'_'T'x'e'n' ''n'' '' ' '{' '>'C'<'r''''''I't's'i'L' '>'-' ')'f'l''''b'u'p'e's'&'('r'e't'i'_'''''_'v'e'r'p''m'e't'i' 'n'f' 'b'''u'p' 'n''''t'x'e'n' ' 'r, item_offset'''''''''{' 'e'f'a's'n'u' ') = self.i''}' 'te''r''_at_userpos(userpos);n '''''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''.'v'e'r'p' 'y'f'i'd'o'm' 't'o'n'n'a'C' '.'t'n'e'm'u'c'o'd' 'f'o' 't'r'a't's' 't'a' 'r'o's'r'u'C''''''''''''''y'f'i'd'o'm' 't'o'n'n'a'C''''''''''o'm' 't'o'n'n'a'c'''''''r'o''''p's'r'u'C'''''''a'C''''c'e'p'x'e''unwrap()'''n'u'.''' '' // let mut ''''t'x'se'current'lf.cursor.curr''en'next''''''''''t'n'e'r'r'u'c'''''''t_item_mut()''''''e'n'''e''d''i'''self.cursor.prev_item_mut('')'t = Edit { list: self, ''cursor, item_of';'n // TODO: Or maybe I should pass ownership here?n f(&mut edit)'n'''f''s''et, notify: Self::no''_notify };nn '''// '''/''/'' ''}''' ''' '' ''// TODO: Or maybe I should pass ownership h''ere?n // f(&mut ed''it'// ')n '' // }n' '' })' ''''''//'// ' 'n '' ' ' '' '// ' '' if'''''''''''' '''>'C'<'t'i'd'E''' let Some(e''nd_items'// ') = en'/''''/ 'd'// '''_item'' '''// 's'''// ' {n '' '' '' '/'''''_'v'e'''''''r'p'''/'' ''' /''/ '// 'Passin'''''_'v'e'r'p'g'' false t'// 'o in'/'''''// '/ '''dicate we''// '// ' don't wa''nt'' ''the cursor'' u'// 'pdate'// 'dn '' '// '''' notify''''' ':'N''''FnMu'// 't(&[C::Item], ItemMarker)' ',''''N' ',':'fn''''''''''''''e's'l'a'f'''''t'u'M'n'F' ''// 'l'p'm'''i' fn(&[C::Item], ItemMarker)n' '// ' //''// '// ' af''ter this - it sh''''''_'e'd'o'n''o''u''// ''ld remain at the end ''of th'// 'e n'''''// 'ewlyn '// ' // i'// '''nserted cont''ent, whi'mIte'ch is *before* this en''d bit.n '' self.in'// 'ser''n ''''''''''''''''''''''''''''''e'u''''e'r't'''''''''''''''.'t'n'i'h'_'e'z'i's' ''''''' 'e'r'o'F' '/'/' 'e'z'i's'u' ':'s'm'e't'i'_'g'n'i'n'i'a'm'e'r' ','t_'n'node_at(cursor, &mut UninitOwne''dIter::'n '''mIte''''// '''''edit'''''''''''''s''// ''''''''''n ''''''''' 'b'u'p''''replace_a'''''''''''''''''''''''''''''''''''';')'t'n'e't'n'o'c'_'d'e't'r'e's'n'i' ','s'm'e't'i'_'d'e'v'o'm'e'r'('t''''''a'l'p'e'r'.'t'i'd'e' ''' }'n '{' '|'t'i'd''''''''''t'd'i'e'|'o'p'r'e's'u'_'t'r'a't's'(u''''serpos: usize, f: F)''''i'd'e'.'f'l'e's' '' pub fn modify'''''_'m'e't'i'_'''''''nstruct''''t's'i'L' NodeIte''''''.'f'l'e's''remaining_i''''''remaining_item'')')'s'.'''''''n'i'n'i'a'm'f'l'e's'tem''''''''''''f'l'e's''''''''''e'r'('e''''m''''''''''('e'z'm'o'S' ','s''remai'''g'n'i'n'''''''n'i'a'm'e'r'('''r<'a, C'''n '''''' ':'e'd'o'n''''n ''''size_hint'''''f'l'e's'&'('''''''''<'''''>'''''''''''''''''''''''n 'unimplemente''')'('!'d'''''''l'p'm'''i'''n'u''' ''''''' }'n '{' ')'''' ')'e'z'i's'u'('n'o'i' unsafe {' '''n if self.item_offset == 0 {n'' '' '' '' ' ' ''''t'p'O' ','e'z'i's'u'(' '>'-' ')''''''''''z'i's' 'n'f' '' '''''r'e't'i'_' 'n ' ' '' ''n'''{''' ''''' 'n ''''''' ':'x''' '''}'n ''''e'd'n'i' ','''''': ListConfig>(Option'''''''e''' 'n ' let num_inserted_items = contents.len();n let start_userpos = self.cursor.userpos;n' 'z'i'''s'u' ','<'' 'n ' let current_item = self.cursor.current_item();' 'n le''''''t'e's'f'f'o't (start, end) = C::split_item(current_item, self.item_offset);' 'n // Move the cursor back to the start of the item we're''t' 'e' 's' 'f' 'f' 'n 'o' // splitting.' 'n self.cursor.move_to_item_start(self.list.head.height, self.item_offset);' 'n // This feels pretty inefficient; but its probably fine.' 'n self.list.replace_item(&mut self.cursor, start, &mut self.notify);n' 'n // TODO: Consider concatenating end into contents then just call' 'n // insert_at_iter once.' 'n self.list.insert_at_iter(&mut self.cursor, &mut con'' 'n ' pu''''''''n'e'e'w't'e''''''''''''''','e'z'i's'u' ':'t'e's'f'f'o' ''b'_'b f''''''''_'n'e'''''''' ','t'e's'f'f'o''e'w't'e'b'n insert(&mut self, item: C::Item) {n self.insert_iter(iter::once(item));n }' ''''n 'tents, &mut self.notify);n' 'n self.dbg_check_cursor_at(start_userpos, num_inserted_items);n' 'n self.list.insert_at''_iter(&mut self.cursor, &mut iter::once(end), &mut self.notify);' '&'a Node>);nimpl<'a, C''''''''r'e't'I't's'i'L': ListConf''n ''''''''''''''''''''''''''''''''n ''''''''''''s' 'n'f' 'n ' ''''''''''''' '''''''''''''''&'''''''''''''''''''''''''n '''''''''''''''')'('h's'i'n'i''''-'f'.')')'('r'e't'i' '''''''''''''''''''n '' ''''''' ''''''''''''''''''''num_item'''''''''e'z'i's'u'' ' 's'a' ''''n 'get_next_ptr()''''''n'_'t'e'g''' ''''''''''''''''n ' ' '' '''''''''''''unsafe { '''e'd'o'n.first_skip_entry().node.' 'as_ref() ';'''}''''''''''''''''''''// ''''''';')'('e'd'o'n'_'t'x'e'n'.'''''''n'.'e'd'''''''''' '''''''''''''''''''g'u' ''// ''b'e'D'''' ':'''' '' ':'t'm'f' ':'m'e'''t'I':':'C' 'e'''''':':'t'm'''// ''''''''':':'t'f'' 'r'e'h'w' 'o'n'.'f'''l'// ''e's' '//'' ''=' 'e'd'o'n'.'f'l'e's' '' ';'0' '=' 'x'e'd'n'i'.'f'l'e's''' ''' }'n '{''' '''s''''m'u'''n'.'''''''''''''n'e'l'.'e'd'o'n' '='='''''''''' '='=' 'x'e'd'n'i'.'f'l'e's' 'f'i' ';'1' '='+' 'x'e'd'n'i'.'f'l'e's''''''''''''''''''''''''1' '+' 'x'e'd'n'i'.'f'l'e's' 'f'i' ''''''n '' '''''('e'm'o'S'&''*'''''''''''''''r't'p'_'s'a''' '{' 'e''')'''''''''''}' ')'' ''''''''''''''''''''''''''''f'l'e's'''''''insert_ite''''''''''''''''n '}' ';')'s't'n'e't'n'o'c'('r'''''''''i'_'t'r'e's'n'i'.'s'i'h't'''''''n'i' 'n'r'u't'e'r' '{' '0' '='=' 't'e's'f'f'o' 'f'i' '('f'e'r'_'t''''n ''''''''''''''''''''''''''(&mut self''''''''''''''','e'z'i's'u' ':'t'e's'f'f'o' ', mut contents: I) where I: Ex''' }''n 'n ' 'actSizeIterator {'n'e'e'w't'e'b'_'t'r'e's'n'i' 'n'f' 'b'u'p' 'n ' 'e'g'f'a's'n'u'''''''''.'t'n'e'r'r'u'c' 'n '' ' ';']'x'e'd'n'i'.'f'l'e's'['s'm'e't'i'.''''['e'd'o'n' '='n ''''''''''''''''''''''''''''''''''''''''''''''''''m'e't'i' 't'x'e'n' 'e'h't' 'o't' 'r'o's'r'u'c' 'e'h't' 's'e'v'o'm' 's'i'h'T' ':'t'a'e'v'a'C'''''' 's'i'h'T' '/'/'/' '' 't'n'e'r'r'u'c''''e't'i' 't'e'l' ''' ''''''''''''''}' ''''''n 'e'n'o'N' '{' 'e's'l'e' '}''n 'n ' '{' 'e'd'o'n'.'f'l'e's' '=' ')'e'd'o'n'''('e'm'o'S' 't'e'l' 'f'i'''''''''' '''''''''''''''_'s'i'.'''' 'e'd'o'n'.'f'l'e's' 'f'i' '''' 'a'''&'''''Item':':'C'ig> Iterator for Nod''e''' 'a'''I'''''n ''' 'f'i' '''t''er<'a'n 'unimplemente'!'''''';')'('d''''''p'm'i'n'u' ','' ''C'''// '>'Self::Item''C::I''Node'// '''C::I'''''''''''m'e't'I':':'f'l'e'// ''S'''''I':':'C' {n type Item = &'a Node;nn fn next(&mut self) -> Opt'// 'ion<&'a No'// 'de> {n let prev = self.0;n if let Some(n) = self.0 {n *self = NodeIter(unsafe { n.first_skip_entry().node.as_ref() });n }n prevn }n}'n'n'n'''// ''impl Iterator for SkipList {'// 'n type Item = C::Item;n'// 'n}''/'''n''''''''''''''' '''''''''r'o't'a'r'e't'I'l''' ''''''''''''''''Ite''''''''n ''''''''('t'x'e'n' 'n'f' 'n ' ';'m'''''m'e't'I':':'C' '=' 'm'e't'I' 'e'p'y't' '''}''n 'n ' 'p'm'i''n'n'''// ''''''''''ListCon''fi''n'''''n''n// impl fmt::Debug for SkipList {'''''''De''''''SkipLis'''''''// '''''n '''''''''''''''For''matter'''''m'r'o'F''''';'*'''''// '' '''debug_list(''''''''''''''.'// ''f'l'e'// ''s'('s'e'i'r't'n'e'.')''''''g'u'b'e'd'.'f' '''r'''''''''':':'t'm'f':':'d't's''o'F':':'t'm'f':':'d't's' 'e's'u' ''' '''''''''''''''''''''''Formatte'''''''''''''''''''' }''n 'n ' '{' 't'l'u's'e'R' '>'-' ')'>''''''_'''<'r''''''''''r'e't't'a'm'r'o'F' 't'u'm'&' ':'f' ','f'l'e's'&'('t'm'f' 'n'f''''n' '''}''n 'n ' '{' '>'C'<'t'''''l'i'k'S' 'r'o'f' 'bug':':'t'm'f''''''g'u'b'e'D' '>'g'''''t's'i'L' ':'C'<'l'p'm'i''''''' 'e'f'a's'''n'''''u''''''''n''''''''''''''''''l'o'o'b' ':'v'e'r'p'''''''''''''''''''n'e'r'r'u'c'_'y''' let item = if modify_prev { self.cursor.prev_item_mut() }' ''' let item ='' unsafe {n ';''' '' if'modify_prev'''''''''''''''self.cursor.prev_item_mut()''''y'f'i'd'o'm' self.i'self.cursor.current_item_mut('')'tem_offset > 0 { self.cursor.current_item'''''''''/'/' ';'0'_mut() }n else { self.cursor.prev_item_mut() }n }'''n ';'''n 'f'i'd'o'm''''item: &mut C::Item''''''''''''''''''''''''''''''''''''''''','m'e't'I':':'C' 't'u'm'&' ':'m'e''''''n '// ''let e'' = self.cursor.here_ptr()'''// ';' 't'i' ','>'C'<'e'd'o'' let old_usersize = C::get_usersize(item);n'''// ' modify_fn(item, se'('''lf.item_o')'''ffset);n ''le'// 't new_usersize = C::get_usersize(item'');nn'// ' let usersize_delta = new''_users'// 'ize as isize - old_usersize as isize;nn if usersize_'''' 'b'u'p'delta != 0 {n self.cursor.update_offsets(self.list.height(), usersize_delta);n self.list.num_usercount = self.list.num_usercount.wrapping_add(usersize_delta as usize);n self.'n 'unsafe { self.modify_item''''e'u'r't'(false, modify_fn); }' '''i''tem_''offs''et = usize::max(self.item_offset, new_usersize);n }nn (self.notify)(std::sl'self.cursor.here_ptr('');'''ice::from_ref(item),'' ItemMarker {n ptr: e,n // _phantom: PhantomData,n ''''''''''''''''''''''''' '&'&' '0' '>' 't'e's'f'f'o'_'m'e't'i'.'f'l'e's'(' });''n'N' 't'u'm'*' ':'')'e'''''n'*' ''''''n'prev_'''p''u''b'' ''struct Edit<'a, C: ListConfig, ''Notify: FnMut(&[C::Item]''' '''n '}''n 'n ''''''e's'l'a'f''' ''n fn modify_prev_item(&mut self, modify_fn: F) where F: FnOnce(&mut C::Item, usize) {', ItemMarker)> {n '''''n '''''''''''''prev_''''p''''''''''''''''''''''''''''' '// '''''''''''''.'r'o'n '''''''''item_offse''''''''''''''self.item_offse'''' '='''' '>' 't''''''''''current_item_mut(''}' ')'''''''r'r''''''' '{' '''e'''''' '''s'''''l'e''u'c'.''''n '''''''''''}'// '' '''''''x'e'n'.'r'o's'r'u'c'.''n ''''''''' '{' 'e'f'a's'n'u'''''''modify_item'''''''''''''current_item''}' '_mut()''''''''''n';''f'_'y'f'i'd'o'm'''''r'r'u'c'.'r'o's'r'u'c'.'f'l'e's'(item: &mut C::Item, modify_fn: F)''''''f'i'd'o'm'.'f'l'e's' 'f'l'e's' '{' '0' '>' 't'.'f'l'e's' 'f'i' ''n '''''' '''' ''s'r'u''''''''n '''''.'f'l'e's' '='=' ''c'''''''n ''''''!''modif' && self.cursor.is_at_n'prev_ite''''t'u'm'_'''m''()'''''v'e'r'p'ode_end()'y_n' ''''''''' '&'&' 'ex'''''''''''''''''''is_at_node_end('''''n ''' }'n '{' ')'''s'i'.'r'o's'r'u'c'.'f'l'e's' '&'&' 't'''''i'd'o'm' 'f'i' 'local_index'''''''_'l'a'c'o'l'.'f'l'e's' ''' }''n 'n ' '{' 'l'o'o'b' '>'-' ')'f'l'e's'&'('e'd'o'n'_'f'o'_'d'n''''d'''''''''''''f'o'_'n'e'_'t'a'''''''s'i' 'n'f' 'n ' 'list: &'a mut SkipList,n cursor:'''''''''''''n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!'s't's'e't' 's'd'e'e'N' '.'t'c'e'r'r'o'c' 's'i' 'n'o'i't'c'n'u'f' 's'i'h't' 'f'i' 'e'r'u's' 't'o'N' ':'O'D'O'T' '/'/' '''''''''','l'o'o'b'''''t'x'e'n''''''''' ':'t'x'e'n'_'y'f'i'd'o'm''''''_'t'n'a'w' ' Cursor,n 'n ''''''''''''''''is_at_node_end''n ''''''''get_usersize''''''''' '{' 'e'f'a's'n'u'''''(_it''}' 'em: &Self::Item)':'''''''''''''''''''''')'t'e's'f'f'o'_'m'e't'i''local_index'''''a'c'o'l'.'f'l'e's' '='<' ')'':'C'(''''''''''''current_ite'')'('m''''''''t'n'e'r'r'u'c'.'r'o's'r'u'c'*'''''''''.'f'l'e's'*' '|'|' '''''''|' ''''here_''here_pt'()'''r''()''''''_'e'r'e'h''''is_at_node_end('''n ''''''advance_item(''' 'n '''''.'f'l'e's''modif'''''''''''''''''''';')'n'f'''_'y'f'i'd'o'm' ','f'l'e's'('y_prev_item''''''''''''v'e'r'p'_'y'f'i'd'o'm' '}'n ';')'''''a'v'd'a'.'f'l'e's' '{' ')'.'r'o's'r'u'c'.'f'l'e's' 'f'i' ' item_offset: usiz'' }'n 'e, // Offset into the current item.'''''''''''' 'f'i' 'n notify: Notifyn}n// pub struct Edit<'a, C: ListConfig> {n// list: &'a mut SkipList,n// c''' '// ' pub fn modify_prev_item(&mut self, modify_fn: F) where F: FnOnce(&mut C::Item, usize) {n'''n '''n 'ursor: Cursor,n// item_offset: usize, // Offset into the current item.n// notify: fn(&[C::Item]'prev_', ItemMarker)n// }nn// impl<'a, C: ListConfig, N''otify: Fn' 'Mut(&[C::Item], ItemMarker)> Edit<'a, C, Notify> {nimpl<'a, C: ListConfig, N: FnMut(&[C::Item], ItemMarker)> Edit<'a, C, N> {n fn dbg_check_cursor_at(&self, userpos: usize, plus_items: usize) {n if cfg!(debug_assertio')'ns) {n l'('et (mut c2, _) = se't'lf.list.iter_at_use'h'rpos(userpos);n 'g' c2.advance_'i'by_items(plus_items'e', self.list.head.he'h'ight);n assert_eq!(&self.cursor, &c2);n }n }nn pub fn del(&mut self, num_items: usize) {n assert_eq!(self.item_offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.list.del_at_ite'.'r(&self.cursor, num_items); }nn if cfg!(debug_assertions) {n let (c2, _) = self.list.iter_at_userpos(self.cursor.userpos);n if &self.cursor != &c2 { panic!('Invalid cursor after delete'); }n }n }nn pub fn insert_iter(&mut self, mut contents: I) where I: ExactSizeIterator {n if contents.len() == 0 { return; }n let num_inserted_items = contents.len();n n // userpos = min(userpos, self.get_userlen());n // let (mut cursor, offset) = self.iter_at_userpos(userpos);nn let start_userpos = self.cursor.userpos;nn unsafe {n if self.item_offset == 0 {n self.list.insert_at_iter(&mut self.cursor, &mut contents, &mut self.notify);nn self.dbg_check_cursor_at(start_userpos, num_inserted_items);n } else {n let current_item = self.cursor.current_item();n let (start, end) = C::split_item(current_item, self.item_offset);n // Move the cursor back to the start of the item we'ren // splitting.n self.cursor.move_to_item_start(self.list.head.height, self.item_offset);n // This feels pretty inefficient; but its probably fine.n self.list.replace_item(&mut self.cursor, start, &mut self.notify);nn // TODO: Consider concatenating end into contents then just calln // insert_at_iter once.n self.list.insert_at_iter(&mut self.cursor, &mut contents, &mut self.notify);nn self.dbg_check_cursor_at(start_userpos, num_inserted_items);nn self.list.insert_at_iter(&mut self.cursor, &mut iter::once(end), &mut self.notify);n }n }n }nn pub fn insert(&mut self, item: C::Item) {n self.insert_iter(iter::once(item));n }nn pub fn insert_slice(&mut self, items: &[C::Item]) where C::Item: Copy {n self.insert_iter(items.iter().copied());n }nn pub fn replace(&mut self, removed_items: usize, mut inserted_content: I)n where I: ExactSizeIterator {n assert_eq!(self.item_offset, 0, 'Splitting nodes not yet supported');nn let num_inserted_items = inserted_content.len();n let start_userpos = self.cursor.userpos;n n unsafe { self.list.replace_at_iter(&mut self.cursor, removed_items, &mut inserted_content, &mut self.notify); }nn self.dbg_check_cursor_at(start_userpos, num_inserted_items);n }nn pub fn prev_item(&self) -> Option<(&C::Item, usize)> {n if self.item_offset == 0 {n if self.cursor.local_index == 0 {n // The only time a cursor should be at the start of the node isn // when the cursor is at the start of the entire list.n assert!(self.cursor.userpos == 0, 'Invalid state: Cursor at start of node');n Nonen } else {n ')' let prev_i'('tem = unsafe { self.c't'ursor.prev_item() };n'h' Some('g'(prev_item, C::get_us'i'ersize(prev_item)))n 'e' }n 'h'} else {n Some((unsafe { self.cursor.current_item() }, self.item_offset))n }n }nn pub fn advance_item(&mut self) {n self.cursor.advance_item(self.list.head.height);n self.item_offset = 0;n }nn pub fn modify_i'.'tem(&mut self, modify_fn: F) where F: FnOnce(&mut C::Item, usize) {n let e = self.cursor.here_ptr();n let item = unsafe { self.cursor.current_item_mut() };n let old_usersize = C::get_usersize(item);n modify_fn(item, self.item_offset);n let new_usersize = C::get_usersize(item);nn let usersize_delta = new_usersize as isize - old_usersize as isize;nn if usersize_delta != 0 {n self.cursor.update_offsets(self.list.head.height as usize, usersize_delta);n self.list.num_usercount = self.list.num_usercount.wrapping_add(usersize_delta as usize);n self.item_offset = usize::max(self.item_offset, new_usersize);n }nn (self.notify)(std::slice::from_ref(item), ItemMarker {n ptr: e,n // _phantom: PhantomData,n });n }nn pub fn replace_item(&mut self, replacement: C::Item) {n self.modify_item(|old, _offset| *old = replacement);n }n}n'n'n'n'n''':':'f'l'e'S'at(&mu''''t'' self, ' self.edit(userpos, |edit| edit.del(num_items''''''); })'' self.edit(userpos, |edit| edit.del(num_items);'userpos: usize, modify_fn: F) wher''e F: FnOnce(&mut C::Item' self.edit(userpos,'''n ''' ''|edit| edit.modify_item(modify_fn'';')''''')''; }'' '''' self.''e''dit(u''serpos, |edit| edit.modify_item(modify_fn'');', usize'') 'n '''''''''''''''''''''''''st'_iter''''n '' '''''''''''''''''''''''''''''''''''''''')')'s't'n'e't'n'o'c'('t'r'e'''s'n'i'.'t'i'd'e' '|'t'i'd'e'|''''''''''''''''''modify_f'''' }'n ';')'n'''''''y'n ''''''edit_notify'''''''s'''''''y'f'i't'o'n'''o'p'r'e's'u'(userpos: usize, notify: fn(&[C::Item], ItemMarker), f: F)''''i'd'e'.'f'l'e's' ''f'i'd'o''// 'm'('modify_item'''''i'd'o'm'.'t'i'd'e'''''''''''// ''e's' '{' 'art_userpo''''''''|'t'i'd'e'|' ','s''''''''u'_''// 't'r'a't's'('t'i'd'e'.'f'l'e's' '''{'''::from'// '_'''// 's'''// '''l'// 'ice(end_items), end_i''tems.len(), false, not''ify)'// ';n '// ' '// ' ''}n '// ' }n'' '// '// '' }nn // unsafe fn insert_at_iter(&mut sel'// 'f, cursor: ''&mut C'// 'urso'// 'r, c'// 'ontents: &[C::Item]) {n // '// 'self.insert_at_i''ter''_and'// '_''// '// 'notify(cur'// 'sor, contents'', S'// ''// 'elf::no_notify);n ''// }nn '// ' '// '/// Inter''estingly u'// 'nlike the original, here we only care '// '''about specif'// 'yin'// 'gn /// t''he number of r'// 'e''moved ite'// 'ms '// 'by counting the''m. We'// ' do not use'// ' usersize inn /// the deleted ''item count.n '// '// '' ///''n /// If the de'// 'leted content'' occurs at the start'// ' o'// 'f a node, the cursor passedn /// here must point to'' the end of t'// 'he previo'// 'us node, not the start of then /// current node.n unsafe fn d'// '''el_at_iter(&mu''t self, cu'// 'rsor: &'// 'mut '// 'Cursor, mut num_deleted_i''tems: usize) {n ''if nu'// 'm_del'// 'eted_items == 0'// ' { ret''urn; }nn '' ''let'''// ' mut i'// 'tem_idx = cur''// '// 'sor.local_index;n let mut e = cursor.here_ptr();n ''''''''''' 't'u'm'&''n ''''''m'// 'odify_at'''''''// '''''''''// 's''''''''no_notif'''''''''''''''''''n 'assert_eq'''''''''''''''''''''''''''''''''''''''''''''''''''''''n '''''''' '='''' ' 'm'e't'i'*' ';')'''m'e't'i' 'e'r'i't'n'e' 'e'h't' 'y'f'i'd'o'm' 't's'u'm'''''''' 't'o'n'n'a'c' 't'a'_'e'c'a'l'p'e'r''' ','0' ','t'e's'f'f'o'('!''''s's'a''' }'n ' '{' '|'t'e's'f'f'o' ','m'e't'i'|'''''y''''(_items: &[C::Item], _marker: ItemMarker)'''o'n''''N':':'f'l'e'S'o'p'r'e's'u'_'t'r'a't's'(us'n '''''''''''''''''unsafe { self.cursor.prev_item() ';'}' '=' 'm'e't'i'_'v'e'prev_item''''''_'v'e'r'p'''prev_item'''''v'e'r'p'r'p''' 't'e'l''self.cursor.prev_item()''' 'erpos: usize, mut notify: Notify, modify_fn: F)''''''f'i'd'''''get_usersize(_item: &Self::Item)':':'C'''o'm'.'f'l'e's' ' while num_deleted_items > 0 {n // self.print();n // if cfg!(debug_assertions) { self.check(); }n if item_idx == (*e).num_items as usize {n let entry = (*e).first_skip_entry();n // End of current node. Skip to'''// ' the start of the next one. We'ren '' // The only time a cursor'''''''''''e'''b' 'd'l'u'o'h's' is right at the start of the node isn // when the cursor is at the start of the entire list.'n ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t's'i'l' 'e'r'i't'n'e' 'e'h''''n't' 'f'o' 't'r'a't's' 'e'h't' 't'a'''''h'g'i'r' 's'i''''s' 'r'o's'r'u'c' 'e'h't' 'n'e'h'w' 's'i' ''''''' ','e'd'o'n' 'e'h't'''''''o'n' 'f'o' 't'r'a't's' 'e'h't' 't'a' 't'h'g'i'r' 's'i' 'r'o's'r'u'c' 'a' 'e'm'i't' 'y'l'n'o' 'e'h'T'''''' '''' 'n'e'h'W'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'd'o'n' 't'x'e'n' 'e'h't' 'o't' 'e'v'o'm' 't'''n'o'd' 'e'd'''o'n' 'a' 'f'o' 'd'n'e' 'e'h't' 't'a'''''''''''''''''''''''''''e'd'o'n' 'a' 'f'o' 'd''''e'n'e' 'e'h't' 'o't' 'k'c'i't's'''''''' 'd'l'u'o'h's' 's'r'o's'r'u'C''''''''''''''''''''''''''''''''''''''''''''''''''' 'm'e't'i' 'e'h't' 'f'o' 'd'n'e' 'e'h't' 't'a' 'e'b' 's'y'a'w'l'a' 'd'l'u'o'h's' 's'r'o's'r'u'C' '/'/' ''''''n ''''C' '/'/' ' // intentionally not updating the it''''''''C''' ':'e't'a't's'erator'''''''''''''''''e'd'o'n' 'f'o' 't'r'a't's' 't'a' ' ''''''''''// '' ','y'f'i't'o'N'because if we del''e''ten '' ',''mut notify: Notif''y,' '''mut '// 'no'''''n 'n fn dbg_check_curso''r_at(&self, cursor: &Cursor, userpos: usize, plus_items: usize) {n if cfg!(debug_assertions) {n '''''t's'i'l'.' let (mut c2, _) = self.iter_at_userpos(userpos);n '''''t's'i'l'.' c2.advance_by_items(pl'&''''''.'f'l'e's'us_items, self.head.height);n assert_eq!(cursor, &c2);n '''n '}n }' 'tify: Notify, ' // a whole no'n '' 'wher'// 'e Notify: FnMut(&[C::Item], ItemMarker),'' ' '''''de we n'// 'eed the iterator to point to the previousn'' '// ' // element. And if we only delete here, the itera''tor doesn'tn'// ' '' /'// '/ need to be ''moved.n '// ' e = entry.node;n if e.is_null() { panic''!('Cannot delete p'// 'ast the end of the list'); }n item_idx = 0''''''' 't'u'm'''''''y'f''// '''i't'o'n'&';n '// ' }nn let e_num_items ''= (*e).num_items as usiz'// 'e;n let removed_here = min(num_dele''ted_ite''ms, e_num_items - i'// 'tem_idx);n n let heig''ht = (*e).height as usize;n '// ''' let removed_userlen'// ';nn if removed_here < e_nu''m_items || e as *const _ == &sel'// 'f.head as *const _ {n '''''.list'''n '' '' '''''''''needs_dro''''''''n '''''''''''''''''''''''''''''''''''Ite''''' ''''''insert_iter'''''''once''''m'';'e't'i'(value: T)'''n'o':':'r'e't'i'(mut contents: I)''''''r'e's'n'i'.'f'l'e's' ''' }''n 'n ' '{' ')'m''''e't'I':':'C' ':'m'e't'i' ','f'l'e's' 't'u'm'&'(''''('t'r'e's'n'i' 'n'f' 'b'u'p' 'n ' '''''''''>'''// ''{' '_iter' '' 'm'e't'''I':':'C'''''''>'T'<':':'p()''''e'e'n'// '':':'m'e'm'''''''''e'e'n':'' '' ':'r't'p'''' '''t'''u'''m'''''// ''''e'e'y'''f'n'i'''t'''o'''n'''''''':':'C''// ' ''' '&' }'n '' 'f'i' ''n ' '// ' ' pub fn prev_item(&self) -> Option<(&C::Item, usize)> {n if self.item_offset == 'n ''''''''''''''''local_inde'''''''{' '0' '='=' ' ''x''''''x'e'd'n'i'.'r'o's'r'u'c'.'f'l'e's' 'f'i' '0 {n ' ' '' '''''''{' 'e's'l'e' ' ''}'n ' assert!(self.cursor.userpos == 0, 'I'' }'' 'n 'Some((unsafe { self.cursor'current_ite''m''()'''''r'r'u'c'''''''e'n'.prev_item() }, self.item_offset))' ' '' }'n 'nvalid cursor');n No''nen } else' Some((unsafe { self.cursor.prev_item() }, self.item_offset)'n } else {')n' {n Some((unsafe { self.cursor.current_item() }, self.item_offset))n }n }nn pub fn advance_item(&mut self) {n' ' ''''''''m'e't'i' ''''i'''''''''''''''''''''''''''' 't'' 'u'm't''n 'u' '// ' 'm' 'y' 'f' 'i'''''t'''''''o'dro'n'''p_in_plac''e'''''.list'''(to_d''ro''p: *'''';')'mut T'// ')'''''&'p'r'd''// ':':'r't'p'''// '''''''''''''''''''''''''''p'o'r'd':':'m'e'm' ''' '''t'''''''u'as_mu'm't_pt'')'('r'y'''''_'''''''<'n'o'i't'p'O'''''>''n '''''''''''''''''''''''''''''''''''''item_offse'''''''''''''''' else {'''''('e'm'o'S' (unsafe { self.cursor.current_item() }, self.i'''}' ')'tem_offset)'n ''''''' '{' 'e's'l'e' '}' 'e'n'o'N' '{' '0' '='=' 't''''e't'i'.'f'l'e's' '&'&''''7' '0' '='=' 's'o'p'r'e's'u'.'r'o's'r'u'c'.'f'l'e's' 'f'i' '''i'u't'o'I''f''s'a''i'.'m'e't''t'i''o' '' '// ' 'n ' ''p''u''b'' ''f''n'' edit_notify(&mut sel'// 'f, userpos: usize, notify: Notify, f: F) -> Rn where Notify: FnMut(&[C::Item], ItemMa'''// ''''// '''rker'')'','''''''''''{no_notify_x::}''expected type, found function''{''''''''''('f'o'}''''e'p'y't'''')''<''n'''''::)'''>''''''''''''''''''''''''''FnMut(&[C::Item], ItemMarker'>)' 's'a' '>'C'<':':'x'_'y'f'i't'o'n'_'''ot''no_notify_x(_items: &[C::Item], _marker: ItemMarker)'''// ''''// '''''t'o'n' ',' ''F: F''''N'N' ','nOnce(&mut Edit'')' 'l'', Notif'// 'y'''p'm'i'''&mut'// ' Edit''''',''n '' NN'':'' FnMut(&[C''::Item''// '// '], ItemMark''er)'// ' '''' ''') -> R,n '' NN:'' impl FnM'''// 'ut(&[C::'// 'Item], ''ItemMark'// 'er) {'' whe''re F'''n '''''''''''''''''''''''''''''''''''''' ':'s'm'e'''''''''''''''''''''''''' ''''''''''''_iter''''''''''''''''''''''''';')')'('d'e'i'''''''i'e'p'o''''l'c'.')'('r'e't'i'.'s'm'e't'i'('t'r'e's'n'i'.'f'l'e's' ''' }''n 'n ' '{' 'y'p'o'C' ':'m'e't''''m'I':':'C' 'e'r'e'h'w' ')'t'i''''''''''']'m'e't'I':':'C'['&' ','f'l'e's' 't'u'm'&'('e'c'i'l's'_'t'r'e's'n'i' 'n'f' 'b'u'p' 'n ' ''// ': FnOnce(&m''ut Edit''<'// 'C, N''N>) -> R, '// 'NN: impl ''FnMu''''t(&['// 'C' // pub fn ''edit_notify(&mut self, userp''os: usize, notify: ''' pub fn insert(&mut self, mut contents: I) where I: ExactSizeIterator {'' ''n ' pu''''b fn inse','''rt_at(&mut ''self, mut userpos: usize, mut contents'' '// ' userpos = min(userpos, self.get_userlen());n '// ' let (mut cursor, offset) = self.iter_at_userpos(user'''n '''''''''''''''''s'o'p'r'e's'u'_'t'r'a't's''''''''''''''''''''''''''''''''''''''';'s'o'p'r'e's'u'.'r'o's'r'u'c'.'f'l'e's' '=' 's'o'p'r'e's'u'_'l''''_'a'i't'i'n'i' 't'e'l' 'n ' 'pos);n'n''':'' I, mut notify: Noti''''''item_offset''''''_'m'e't'i'.'start_userpos''f'l'e's'fy'''''.'t's'i'l')n wher'''''.'f'l'e's'e Notify: FnM''mut '''&mut'''''.'f'l'e's' '''u''t(&['''''n ''''''''''''''''''''''''' 't'u'm'''''''''''''''''''''''''''''''''n ''' ''''''modify_item'''''''_'''''''t''''{'e's'f'f'o' ','''''''''''''''''''''t';''n'e'm'e'c'a'l'p'e'r' '=' 'd'l'o'*' '|'d'l'o''''e'|'''(modify_fn: F)'''''i'd'o'm'.'f'l'e's' ''' }''n 'n ' '{' ')'m'e't'I':':'C' ':'t'n'e'm'e'c'a'l'p'e'r' ','f'l'e's'&'('m'e't'i'_'e'c'a'l'p'e'r' 'n'f' 'b'u'p' 'n ' ''''.'f'l'e's'C'''''t's'i'l'.'::Item], Ite'''''.'f'l'e's'mMarker'self''''m'e't'i''''''''''''local_offset'.loca''offset'''''''loca''local_offset'''''a'c'o'l'.'f'l'e's'), I: ExactSizeIterator {n if '''''t's'i'l'.'cont'self.item_offset'ents.len() == 0 { return; }n let num_inserted_items = contents.len();n n '''''t's'i'l'.'userpos ''''''.'f'l'e's''''''e's'='''''.'f'l'e's' min(userpos, self.get_userlen());n let (mut cursor, offset) = self.iter_at_userpos(userpos);nn unsafe {n if offset '''''t's'i'l'.'== 0 {n '''''.'f'l'e's' self.i'''''.'f'l'e's'nsert_at_iter(&mut cu'''''.'t's'i'l'rsor, &mut '''''.'f'l'e''start_userpos'''''r'a't's''userpos'''''r'a't's's'contents'''''.'t's'i'l', &mut not'''''.'f'l'e's'ify);nn se'''''.'f'l'e's'lf.dbg_check_cursor_at(&cursor, userpos, num_inserted_items);n } else {n let current_item = cursor.current_item();n let (start, end) = C::split_item(current_item, offset);n // Move the cursor back to the start of the item we'ren // splitting.n cursor.move_to_item_start(self.head.height, offset);n // This feels pretty inefficient; but its probably fine.n self.replace_item(&mut cursor, start, &mut notify);nn // TODO: Consider concatenating end into contents then just calln // insert_at_iter once.n self.insert_at_iter(&mut cursor, &mut contents, &mut notify);nn self.dbg_check_cursor_at(&cursor, userpos, num_inserted_items);nn self.insert_at_iter(&mut cursor, &mut iter::once(end), &mut notify);n }n }nn }' 'n ' 'Notify, f: F) -> Rn //'' where Notify: FnMut(&[C::Item], ItemMarker), F: FnOnce(&mut Edit) -> R {n // let (cursor, item_offset) = self.iter_at_userpos''(userpos);n // let mut edit = Edit { list: self, cur''sor, item_offset, notify'' };nn // // TODO: Or maybe I sho'''''n 'n ' 'uld p'// 'ass ownership here?n // f(&mut edit)n // }n'::''Ite'// 'm], ItemM'Notify, '''arker) {'>) -> R {''n''/'// '/ ' '''&'''fn(&[C::Item], ItemMarker)''// 'c''// 'n'''['// 'item_idx''..''''''it'Notif''''n'f'y: FnMut(&[C::It'// 'em], ItemMarker), '''''N''''//'' ''''''// ''FnMut(&[C::Item], ItemMarke'// 'r)' 'l'p'm'''i''''''''for<'r> fn(&'r ['// '::Item],'' skiplist::ItemMarker) ''{skiplist::no_''notify_x::}'>'''''''R''// 'n '// ''N' 'for<'r>'''' fn(&'r [::Item], '// 'ItemMarker) {''''''&' '''''''''' '}''''>'// ''-' '''''' ''':'N' ',''')'N'''e'// 'm_idx +'&''for<'r> fn(&'r [::It''e''m'''// ']'',''''''''{no_notify_x::}' ' skiplist::ItemMar''ker'')'' '// '{skiplist::no_notify_x::}''''2'3'''''''''3'2'u''''// '''// 'C'''''''>'_''' removed_h'// 'e'''''''''>'C'<':':'r'' 'n ' let (cursor, item_offset) = self.iter_at_userpos('&'userpos);n '' let mut edit = Edit { ''list: self, cu'''''''' ':'y'f'i't'o'n''no_notify_'':':''''>'C'<'''x'''<'(_items: &[C::It''em'>'], _m'// 'arker: ItemMarker)''''''o'n'_'o'n'rsor, 'FnMut'''n'f'item_offset, notify'''''// ''''n'''n'''''''''''''''':':'''''// '>'C'<'x'_'y'f'i't'o'n'_'// '''''n'o''no_notify_x(_items: &[C::Item], _marker: ItemMar'// 'ker)'''o'n''' ':' '// '};nn // TODO: Or maybe ''I should pass ownership here?n '' f(&mut edit)n' '''e'''''''// '// '''' '''''''''''' ','y'f'i't'o'N' ''''''''''''''y'f''' ''''''''''''''''''''''''''''''''&'('''''''''''''''' '(''''''// ''''''.'f'l'e's'''''''unsaf''''''''item_offse''''n ''''''''''''''''''''''''''f'''' '''''''''''''advance_item''''''lis''''''''''''t''n ''''''item_offse''''';'0' '''' pub fn modif'''''m'e't'i'_'y(&mut self,'' userpos: usize, modify_fn: F) where F: FnOnce(&mut C::Item, usize) {''''''''n 'n '''''.'f'l'e's' pub fn modif''''y'''''''''_'n'i''''''''''.'f'l'e's'''''''''''m'e't'i'''_''''at(&mut self, userpos: usize, mut notify: Notify, modify_''''''item_offse''t'.'f'l'e's'fn: F)n '''''n ''''new_usersiz'''''''''item_offset''''e't'i'.'f'l'e's' '>' 'e'''''_'w'e'n''''(' 'f'i' ' where Notify: FnMut(&[C::Item], ItemMarker), F: FnOnce(&mut C::Item, usize) {n let (mut cursor, offset) = self.iter_at_userpos(userpos);n '''''.'f'l'e's' let e = curso'''''.'t's'i'l'''''n ''''''item_offse''''''''''''''''('x'a'm':':'e''''new_usersiz'';''')'e' ','z'i's'u' ''''''''item_offse'''''''a'm'.'t''i'.'f'l'e's' '=' 't'''''m'e't'i'.'f'l'e's' ''n if new_usersize > self.item_offset {n self.item_offset = new_usersize'''''''''''' '/'/' ';n }''''' ''n ' if new_user'''' ''''''item_offse''''new_usersiz';'e''''''u'_'w'e'n' '=' 't''''''_'m'e't'i'.'f'l'e's' ''' }''n 'n ' '{' 'size > self.item_offset' 'n ' 'r.here_ptr();n let item = unsafe { curs'''''.'t's'i'l'or.current_'''''.'t's'i'l'item_mut() };n let old_usersize = C::get_usersize(item)'(''''''.'f'l'')'e's';n modify_fn(item, offset);n let new_usersize = C::get_usersiz''e(item);nn let usersize_delta = new_usersize as isize - old_usersize as isize;nn if usersize_delta != 0 {n cursor.update_offsets(self.head.height as usize, usersize_delta);n self.num_usercount = self.num_usercount.wrapping_add(usersize_delta as usize);n }nn notify(std::slice::from_ref(item), ItemMarker {n ptr: e,n // _phantom: PhantomData,n });nn // cursor.update_offsets(self.head.height as usize, new_size as isize - old_size as isize);n }''''unsafe { cursor.current_item_mut() };' 'n ' '=' 't'''''''''f'f'o'_'m'e't'i'.'f'l'e's' ';''h'g'i'e'h'.'d'a'e'h'.'t'.'f'l'e's'(height: u8)''''''n'a'v'd'a'.'r'o's'r'u'c'.'f'l'e's' ''' }''n 'n ' '{' ''l'e's' 't'u'm'&'')'('m'e't'i'_'t'x'e'n' 'n'f' 'b'u'p' 'n ' ')'t'''''''''f'f'o'_'m'e't'i'.'f'l'e's' ','e { curs''o''''r''.''current_item_mut() };''''''''.'r'o's'r'u'c'.'f'l'e's' ''' }''n 'n ' '{' ')'e'z'i's'u' ',''Item'''''m'e't'I':':'C' '>'-' '''''' ','f'l'e's'&'')'('m'e't'i'_'t'n'e'r'r'u'c' 'n'f' 'b'u'p' '''''''n 'n ' ':':''''>'C'<''''''// ''''''''''>'C'<'x'_'i't'''o'N' ',''' '/'''Notify: ''''no_''notify_'''''>'C'<'''x''''''_items: &[C::Item'']'''>'C'<'(_item''s: &[C::Item'>'], _mar''ker: '// 'ItemMarker)''''''o'n'_'o'n''Self::'// 'no_notify''rustc --explain E057'// '3'<''SkipLi't'''''''''''// ''Ski''Sk'// pub struct Edit<'a, C: ListConfig, Notify: Fn'// '''' n''otify: fn(&[C::Item], ItemMarker)n'Mu'''// ''''// 't(&[C::Item], ItemMarker)> {n'// '// list: &'a mut SkipList,n// cursor: Cursor,n// item_offset: usize, // Offset into the current item.n// notify: Notifyn// }''n''// 'ipLis'''''>'C'<'t''''i'k''', Notify: FnMut(&[C::Item], ItemMarker)''''S' 's'a' ''>''''s'''''''''>'C'<':':'t'''''l'i'k'S''''''''// 'FnMut(&[C::I'type''n'f'', Notify: FnMut(&'''// '[C::Item]'// ','' ItemMarker)' Self::n''o_noti'// 'fy'tem], ItemMa''rke''r)'/'nimpl<'a, C: ListConfig, Notify: FnMut(&[C::Item], ItemMarker)> Edit<'a, C> {'/ ', '/ ' '' }'n 'n 'nimpl<'a, C: Li'''n n pub fn replace_at(&mut'' self, mut start_userpos: usize, removed_ite'n '''ms: usize, mut inserted_content: I) whe''''re I: ExactSize''''''''''_'m'e't'i'.'f'l'e's'Iterator {n start_userpos = min(start_userpos, self.get_userlen()'n '''''''''''''''''''''''''' ''curso''userpo''''n ';'s'''''r'e's'u''''''r'u'c'.'r'''''s'r'u'c'.'f'l'e's' '=' 's'o'p'r'e's'u'_'t'r'a't's' 't'e'l' ');nn let (mut c'''''t's'i'l'.'ursor, offse'''''.'f'l'e's't) = self.iter_at_userpos(start_userpos);n '''''''''''y'f''''/'''''t's'i'l'.'/ 'i't'o'n'.'''''.'f'l'e''start_userpos''''''.'f'l'e's's''f'l'e's''' assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn let num_inserted_items = inserted_content.len();n unsafe { self.replace_at_iter(&mut cursor, removed_items, &mut inserted_content, Self::no_notify); }nn self.dbg_check_cursor_at(&cursor, start_userpos, num_inserted_items);n }'stConfig, Notify: FnMut(&[C::Item], ItemMarker)> Edit<'a'', C, Notify> {' '// '''''''y'f'i't'o'N' pu''b fn del_a'// 't(&mu''''t '// 'self,'// ' mut use''''''' 'e'p'y't''Self::no_notify''''impl''''''''o'''' ''''o'e'p'y't'''''''''''''l'p'm'i''''''''''''''''''y'f'i't'o'n'_'o'n''''no_notify(_items: &[C::Item], _marker: ItemMarker)':':'f'l'e'S''''_' ','rpos: usi'n ''''''edit_notify'''''''s''''''''no_notif'''f' ','''''n ''y(_items: &[C::Item], _marker: ItemMarker)':':'f'l'e'S'o'p'r'e's'u'(userpos: usize, notify: Notify, f: F)'''''t'i'd'e'.'f'l'e's' ''' }'n 'ze, n''''''''y'f'i't'o'N' ','um_items:'n pub fn'''''''y'f'item_''i't'o'n'_''''''''''o'n')' '''''''' ','' let mut edit = Edit { list: self, cursor, item_offset, notify };'' let mut edit = Edit { list: self, cursor, item_offset, notify'y'f'i't'o'N'edit(&mut se' list: self, cursor, item_offset, notify'' list: self, cursor, item_offset,'' list: self, cursor,'lf, userpos: u'''''''''''''''''where Notify:'' FnMut(&[C::Item], It''emMa'item_'rker'' ',''''''n ''''''y'f'i't'o'n' ',' ')','y'f'i't'o'N' ':'y'f'i't'o'n' 'size, f: F) -> Rn where F: FnOnce(&mut Edit) -> R {' usize) {n '// ' userpos = min(userpos, self.get_userlen());n '// ' // We can't easily trim num_items.n '// ' '''n ''''''''''n 'n pub fn replace_at(&mut self, mut start_userpos: usize, removed_items: usize, mut inserted_content: I) where I: ExactSizeIterator {n start_userpos = min(start_userpos, self.get_userlen());nn let (mut cursor, offset) = self.iter_at_userpos(start_userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn let num_inserted_items = inserted_content.len();n unsafe { self.replace_at_iter(&mut cursor, removed_items, &mut inserted_content, Self::no_notify); }nn self.dbg_check_cursor_at(&cursor, start_userpos, num_inserted_items);n }' 'n ' ' // num_items = min(length, self.num_chars() - pos);n '// ' if num_items == 0 { return; }nn '// ' let (mut cursor, offset) = self.iter_at_userpos(userpos);n '// ' assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn '// ' unsafe { self.del_at_iter(&mut cursor, num_items); }nn '// ' if cfg!(debug_assertions) {n '// ' let (c2, _) = self.iter_at_userpos(userpos);n '// ' if &cursor != &c2 { panic!('Invalid cursor after dele'''n 'pub fn del_at(&mut self,'''' mut userpos: usize, num_items: usize'''' ''''''''''''''''''''''''''''' ''''''''''''''''''''''';')'s'm'e't'i'_'m'u'n'('t'a'_'l'e'd'.'t'i'd'e' ''' ')'}''n 'n ' '{' '|'t'i'd'e'|' ','s'o'p'r'e's'u'('t'i'd'e'.'f'l'e's' ''' }''n 'n ' '{' ')' 'n ' 'te'); }n '// ' }n '// ' }n''' '&' '{''''''where'' Notify: FnMut(&[C::I'''Notify: FnMut(&[C::Item], ItemMarker)''''''''''''Notify: FnMut(&[C::Item], ItemMarker)' ':'y'f'i't'o'N' ','tem], ItemMarker)' ''']'n')' 'n'i' 'm'n '''''''' ':'y'''f'''i't'o'n''''''''' ':''''Notify: FnMut(&[C::Item], ItemMarker)' ','y'f'i'''''''''y'f'i't'o'N' ','t'o'N' ''e't'i' 't'u'm'&' 'r'o'f' '''''n 'n ' ' // Just trim the node down.n let trailing_items = e_num_items - item_idx - r'''''''''no_not'item'if''''y''''''''''''''''''(_items: &[C::Item], _marker: ItemMarker)'''o'n':':'f'l'e'S' ','emoved_here;n n let c = &mut (*e).items;n removed_userlen = C::userlen_of_slice(maybeinit_slice_get_ref(&c[item_idx..item_idx + removed_here]));n if trailing_items > 0 {n ptr::copy(n &c[item_idx + removed_here],n '''n ''''''''''''''' ','F'''>'R'<'''''''''''''''','e'z'i's'u' ':'s'o'p'r'e's'u' ''''''F' ':''n'''''R' '>'-' ' 'n '''''''''''''''''''''''''''''iter_at_userpos'''''''s';'''''''' 't'u'm' ''o'p'r'e's'u'(target_userpos: usize)''''''_'r'e't'i'.'f'l'e's' '=' ')''''''''n 'local_of'n '''''''''''''''''''''''''''''''''''''''''''''''?'e'r'e'h' 'p'i'h's'r'e'n'w'o' 's's'a'p' 'd'l'u'o'h's' 'I' 'e'b'y'a'm' 'r'O' ':'O'D'O'T' '/'/' 'fse''''''''t'e's'f'f'''''n ''''''' 't'u'm'&''''*'''''')'t'i'd'e'('f' 'n ' ';'o' ':'t''''''l'a'c'o'l' ','r'o's'r'u'c''t'e's'f'f'o' ','r'o's'r'u'c'(' 't'e'l' ' ' ''''''''''''''''''n ''''''''''''n ''''''''''''''''''''r'u'c'.'f'l'e's'''''''c'.'s'i'h't'''''s'r'u'c' ':'r'o's'r'u'c' ','f'l'e's' ':'t's'i'l' ''' }'n 'item' '{' 't'i'd'E' '=' 't'i'd'e' 't'e'l' '''''''''''FnOnc'''''' 't'u'm''''''' '' '' '''n '' 'n // if cfg!(debug_asserti''ons) {n // ''''''''.'t's'i'l'.' let (c2, _) = ''''''''''''.'r'o's'r'u'''''.'f'l'e's''c'.'f'l'e's'self.iter_at_userpos(use''rpos);n // '' if &cursor != &c2 { panic!('Invalid cursor after delet''e'); }n // }' '''' }''n 'n pub fn del_at(&mut sel''f, mut userpos: usiz' assert_eq!''''''item'''''''_'l'a'c'o'l'.'f'l'e's'(offset, 0, 'Splitting nodes'''''t's'i'l'.' not'''' yet''''''''''''n '''''''''''''''''''''''''''''''''''''''''?'d'i'l'a'v' 'l'l'i't's' 's'i' 'r'o's'r'u'c' 'e'h't' 'k'c'e'h'C' ':'O'D'O'T' '/'/' 'n ' '''r'''o'''s'r'u'c'.'f'l'e's' su'// 'pported');n'''''''e, num_items: usiz'// 'e) {n userp'''''''''t's'i'l'.'f'l'e's'userpos''''''.'f''// 'l'e's''os = min(userpos, self.get_userlen());n // We can't easily '// 'trim num_items.n // num_items = min(length, self.num_chars() - pos);n if num_items == 0 { return; }nn let (mut cursor, offset) = self.iter_at_userpos(userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.del_at_iter(&mut cursor, num_items); }nn if cfg!(debug_assertions) {n let (c2, _) = self.iter_at_userpos(userpos);n if &cursor != &c2 { panic!('Invalid cursor after delete'); }n }n }n' 'n ' '{' '&''''''''n pub fn del_at(&mut self, mut userpos: usize, num_items: usize) {n userpos = min(userpos, self.get_userlen());n // We can't easily trim num_items.n // num_items = min(length, self.num_chars() - pos);n if num_items == 0 { return; }nn let (mut cursor, offset) = self.iter_at_userpos(userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.del_at_iter(&mut cursor, num_items); }nn if cfg!(debug_assertions) {n let (c2, _) = self.iter_at_userpos(userpos);n if &cursor != &c2 { panic!('Invalid cursor after delete'); }n }n }n''''')'>'C'<'t'i'd'E'('e'''''n'O'n'F' ':'F' 'e'r'e'h'w' '''' 'f'''''''''''''R' '>'-' '''''' ','')'f'l'e's' 't'u'm'&'('t'i'd'''''''d'i'e' 'n'f' 'b'u'p' 'n ' ' &mut c[item_idx],n trailing_items);n }nn (*e).num_items -= removed_here as u8;n self.num_items -= removed_here;n self.num_usercount -= removed_userlen;nn for s in (*e).nexts_mut() {n s.skip_usersize -= removed_userlen;n }n } else {n // Remove the node from the skip list entirely. e should be then // next node after the position of the iterator.n assert_ne!(cursor.here_ptr(), e);nn removed_userlen = (*e).get_userlen();n let next = (*e).first_skip_entry().node;nn // println!('removing {:?} contents {:?} height {}', e, (''''' 'b'u'p'''''''''''''ListConfig''''s'i'L' ':'C' ',''>'a'''<''''''n '''''''''Curso'''''n '''''''''''''''''''''''''''''''''''''''''''''''''''''.'m''''''''''''''ListConfi'>'g''''''''''''''}''n 'n ' '{' '>'C' ','a'''<''''t's'i'L' ':'C' ','a'''<''''''t'i'd'E' 'l'p'm'i'e't'i' 't'n'e'r'r'u'c' 'e'h't' 'o't'n'i' 't'e's'f'f'O' '/'/' ','e'z'i's'u' ':'t'e's'f'f'o'_'l'a'c'o'l' ','>'C'<'r''''r'u'C' ':'r'o's'r'u'c' ','>'C'<''''' ''' 'a''SkipList'''''l'i'k'S'''''T'D'R'C''' ''''''''''' 't'u'm'&' ':'t's'i'l''''&' '''}''n 'n ' '{''''''''' 't'i'd'E' 't'c'u'r't's'''''n'n'n'n'n'*e).content_slice(), height);nn for i in 0..height {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.node = (*e).nexts_mut()[i].node;n s.skip_usersize += (*e).nexts()[i].skip_usersize - removed_userlen;n }nn self.num_items -= (*e).num_items as usize;n self.num_usercount -= removed_userlen;nn // Update parents.n if height > 1 {n let mut n = e;n // let new_parent = cursor.entries[height - 1].node;nn // If you imagine this node as a big building, we need ton // update the parent of all the nodes we cast a shadow over.n // So, if our height is 3 and the next nodes have heights 1n // and 2, they both need new parents.n let mut parent_height = 1;n let cursor_node = cursor.here_ptr();n let cursor_node_height = (*cursor_node).height as usize;n let mut new_parent = if height >= cursor_node_height {n cursor.entries[parent_height].noden } else {n cursor_noden };nn loop {n n = (*n).nexts_mut()[parent_height - 1].node;n if n.is_null() || (*n).height >= height as u8 { break; }n let n_height = (*n).height as usize;n n assert_eq!((*n).parent, e);n assert!(n_height >= parent_height - 1);nn if n_height > parent_height {n parent_height = n_height;n if n_height >= cursor_node_height {n new_parent = cursor.entries[parent_height].noden }n }n n (*n).parent = new_parent;n }n }nn Node::free(e);n e = next;n }nn for i in height..self.head.height as usize {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.skip_usersize -= removed_userlen;n }nn num_deleted_items -= removed_here;nn // if cfg!(debug_assertions) { self.check(); }n }n }nnn unsafe fn replace_at_iter(&mut self, cursor: &mut Cursor, mut removed_items: usize, inserted_content: &mut I, mut notify: Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: ExactSizeIterator {n i';'''f'' removed_items' ''' == 0 && inserted_content.len() == 0 { return; }nn '' // Replace '''' 'b'u'p'as' 'n self.num_usercount = self.num_usercount.wrapping_add(usersize_delta as usize);' ' many items from 'n 'n }' }'removed_items as we can with i'n // I hate this.'nserted_content.n let mut replaced_items = min(removed_items, inserted_content.len());n removed_items -= replaced_items;nn while replaced_items > 0 {n debug_assert!(inserted_content.len() >= replaced_items);n let mut e = cursor.here_ptr();n if cursor.local_index == (*e).num_items as usize {n // Move to the next item.n e = cursor.advance_node();n if e.is_null() { panic!('Cannot replace past the end of the list'); }n }nn let index = cursor.local_index;nn let e_num_items = (*e).num_items as usize;n let replaced_items_here = min(replaced_items, e_num_items - index);nn let dest = &mut (*e).items[index..index + replaced_items_here];n let old_usersize = C::userlen_of_slice(maybeinit_slice_get_ref(dest));nn // Replace the items themselves. Everything else is commentary.n // Would prefer to use zip() but it wants ownership of inserted_content :/n for slot in dest.iter_mut() {n *slot.as_mut_ptr() = inserted_content.next().unwrap();n }nn let dest = maybeinit_slice_get_ref(dest);n let new_usersize = C::userlen_of_slice(dest);n '' let use''' unsafe fn replace_item(&mut self, cursor: &mut Cur'''// ''''// 'sor, new_item: C::Item,'' mut notify: Notify)' 'n where Notify: FnMut(&[C::Item], ItemM'n '''''''''''''''n notify(std::slice::from_ref(item), ItemMarker {n ptr: e,n _phantom: PhantomData,n });n'''''''y'l'i's'a'e' '''''''''''''''.'d'e'z'i'm'i't'p'o' 'e'b' 'd'l'u'o'c' 's'i'h'T' '/'/' ''n '' ''''''replace_at_iter''''''r''1'''''' 't'u'm'&''''''''''''''''''''''')'''''''''''y';''f'i't'o'n'm'e't'i'_'w'e'n'('e'c'n'o':':'r'e't'i'''''e'c'n'o'o's'r'u'c'(cursor: &mut Cursor, mut removed_items: usize, inserted_content: &mut I, mut notify: Notify)''''''a'l'p'e'r'.'f'l'e's' 'arker) {'' unsafe fn replace_item(&mut self, cursor: &mut Cursor, new_item: C::Item, mut notify: Notify) where Notify: FnMut(&[C::Item], ItemMarker) {'' ''n ' unsafe ''''m'e't'i'''''f''n'' ''r''e''p''lace_at_iter'''''''''''''''''''m'e't'I':':'C' ':'m'e't'i'_'''''''''''''m'e't'I'w'e'n' ','''(&mut s'' 'n ''' ' '''' ' ' 'elf, cursor: &mut Curs' '' '''or, mut ' ' '''n ' ' ' ' 'removed_ite'''' '''''' ','y'' 'f'i't'o'''''''t'i'N'm'', mut notify: Notif'' '' ''y'''''''''N' ','' where Noti' 'fy: FnMut(&[C::Item], ItemMarker)'', where F' ': FnOnce(&mut'' C::Item'n if usersize_delta != 0 {', ' 'u' 'size) {'''s: usize, inserted_content: &mu'n cursor.update_offsets(self.head.height as usize, usersize_delta);'t I, mut n', mu' 't ','''no''tify: Not' 'ify)' 'n self.num_usercount = self.num_usercount.wrapping_add(usersize_delta as usize);' 'n where Notify' ': FnMut(&[C'n }'::''Item], ItemMarker)'otify: ''''''''''''''''_' 't'u'm'*' 's'a' 'N' 'n let item = unsafe { cursor.current_item_mut() };' 'otify)' 'n '' where'''n '''''''''''''std::slice::from_ref(item';')' '=' 'e'c'i'l's' 't'e'l' ' Notify: FnMut(&'n let old_usersize = C::get_usersize(item);''''' '' }'n '''n modify_fn(item, offset);''[C::Item], ItemMa' ''let e = cursor.here_ptr'n let new_usersize = C::get_usersize(item);''''n '();''''{'rker<''C>), 'std::slice::from_ref(item)''''''e'c'i'l's'I: ExactSizeIterator {n' 'n ' 'rsize_''delta ='// ' new_usersi''ze as isize - old_usersize as isize;nn'' '// ' if usersize_del'// 'ta != 0 {n cursor.up'// 'date_offsets(se' '''''''''''''''''''{' 'e'f'a's'n'u' '''''''''''}' ''current_ite''m''_''''r'e's'u'm''u'n ''''''''''''''''''here_ptr(';')'''''e'r'e'h'.'r'o's'r'u'c' '=' 'e' 't'e'l' 't(''''n'}' ''''''''''e'''''':':'d't's'''''''''''''''''('f'')'''e'r'_'m'o'r'f':':'''''''''here_ptr()'''''e'r'e'h'.'r'o's'r'u'c'''e'c'i'l's''''''''''o't'n'i''''''')'('m'o'r'f'.'m'e't'i'''''''['&''''''''' 'modify_fn'''''''y'f'i'd'' ''''''r'''e'''s'''u'''''''''C::get_usersize(item)'''n ''n 'let usersize_delta = new_usersize as i''si' ' '''''' '''n 'n notify(dest, It' 'emMarker {n ' ' ptr: e,n _phantom: Ph' 'antomData,n });' 'n ' '''' ''n 'n ' 'ze - old_usersize as isize;nn ' ' if usersize_delta != 0 {n ';'c''ursor.upd''a''te_offsets(self.head.heig' 'ht as usize, usersize_delta)n }n 'n }' // I hate this.n self.num_usercount = self.num_usercount.wrapping_add(usersize_delta as usize);n' ''n '// '''''''''update_offsets'''''''''d'a'e'h'''''''''e''''''''''''''''''''''''''''''''''isize';''''s'i' 's'a' 'e'z''''e'i's'_'d'l'o' '-' 'e'z'i's'i'''''''i'u' 's'a' 'e'z'i's'_'w'e'n'''z'i's'u' 's'a' ''''''''heigh''ts'.'e'd'''o'n'.'f'l'e's'(height: usize, by: isize)'.'r'o's'r'u'c' ';' '=' 'e'z'i's'_'w'e'n' 't'e'l' 'o'm''''''''''''''''''''''n ';')'t'e's'f'f'o' ','m'e't'i'('F' ''''get_usersize''''m''''n ';''e't'i'(_item: &Self::Item)':':'C' '=' 'e'z'i's'_'d'l'o' 't'e'l' ';')''''''e'r'r'u'c'.'r'o's'r'u'c' '=' 'm'e't'i' 't'e'l' 'lf.head.height as usize, usersize_delta)n }n // I hate this.n self.num_usercount = self.num_usercount.wrapping_add(usersize_delta as usize'''n '''''''''''''''''''>'F'<'''''''''''''''''''''','e'z'i's'u' ''n '''''''''''''''''''''''' ':''''''''e'z'i's'u'''''''n'i' ','m'e'' 'let (mut cursor, offset) = self.i''' 'ter_at_userpos(userpos);n' 't'i''' ')'''''''''''''m'e't'I':':'C' 't'u'm'&'('e'c'n'O'n'F' ':'F' 'e'r'e'h'w' '''''''' }''n 'n ' '{' ')'':'s'o'p'''''''i's'r'e's'u' ''''''''''''''''''''F' ':'n'f'_'y'f'i'd'o'm' ','f'l'e's' 't'u'm'&'('t'a'_'y'f'i'd'o''''o'm' 'n'f' 'b'u'p' 'n ' ');nn replaced_items -= replaced_items_here;n // We'll hop to the next Node at the start of the next loopn // iteration if needed.n cursor.local_index += replaced_items_here;nn for i in 0..self.head.height as usize {n cursor.entries[i].skip_usersize += new_usersize;n }n cursor.userpos += new_usersize;nn notify(dest, ItemMarker {n ptr: e,n _phantom: PhantomData,n });n }nn // Ok now one of two things must be true. Either we've 'n ''''''dbg_check_cursor_at'''''''r''''''''''''''s'''''''''''''''''''s';''''m'e't'i'_'d'e't'r'e's'n'i'_'m'u'n'o'p'r'e's'u'_'t'r'a't's'o's'r'u'''''''''''''o's'r'y'c'&'(cursor: &Cursor, userpos: usize, plus_items: usize)'''''_'g'b'd'.'f'l'e's'''''_'g'b'd' 'run out o'// 'fn // items to remove, or we''// 've run out of items to insert.n 'n ''''''replace_item''''''''''''''''''t' ''&mut Self::no_noti'''' // TODO: Consider concatenating end into contents then just calln // insert_at_iter once.''n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'c'n'o' 'r'e't'i'_'t'a'_'t'r'e's'n'i' 'l'l'a'c' 't's'u'j' 'n'e'h't' '''' ''''.'s't'n'e't'n'o'c' 'o't'n'i'''''''n'o' 'd'n'e' 'g'n'i't'a'n'e't'a'c'n'o'c'''''''g'n'i's'u'f' 'r'e'd'i's'n'o'C' ':'O'D'O'T' '/'/' 'n ' ';'''fy''r'a't's''''' ','r'o's'r'u'c' 't'u'm'&'(cursor: &mut Cursor, new_item: C::Item, notify: Notify)''''''a'l'p'e'r'.'f'l'e's' ' if inserted_cont'// 'ent.len() > '// '0 {n // Insert!n debug_assert!(removed_items == 0'// ');n self.insert_at_iter(cursor, inserted_content, &mut notify);'// 'n } else if removed_items > 0 {n self.del_at_iter(cursor, removed_items);n }n }nn fn dbg_check_cursor_at(&self, cursor: &Cursor, userpos: usize, plus_items: usize) {n if cfg!(debug_assertions) {n let (mut c2, _) = self.iter_at_userpos(userpos);n c2.advance_by_items(plus_items, self.head.height);n assert_eq!(cursor, &c2);n }n }nn fn no_notify(_items: &[C::Item], _marker: ItemMarker) {}nn pub fn replace_at(&mut self, mut start_userpos: usize, removed_items: usize, mut inserted_content: I) where I: ExactSizeIterator {n start_userpos = min(start_userpos, self.get_userlen());nn let (mut cursor, offset) = self.iter_at_userpos(start_userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn let num_inserted_items = inserted_content.len();n unsafe { self.replace_at_iter(&mut cursor, removed_items, &mut inserted_content, Self::no_notify); }nn if cfg!(debug_assertions) {n let (mut c2, _) = self.iter_at_userpos(start_userpos);n c2.advance_by_items(num_inserted_items, self.head.height);n if &cursor != &c2 { panic!('Invalid cursor after replace'); }n }n }nn pub fn replace_at_slice(&mut self, start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) where C::Item: Copy {n self.replace_at(start_userpos, removed_items, inserted_content.iter().copied());n }nn pub fn insert_at(&mut self, mut userpos: usize, mut contents: I) where I: ExactSizeIterator {n if contents.len() == 0 { return; }n let num_inserted_items = contents.len();n n userpos = min(userpos, self.get_userlen());n let (mut cursor, offset) = self.iter_at_userpos(userpos);nn unsafe {n if offset == 0 {n self.insert_at_iter(&mut cursor, &mut contents, &mut Self::no_notify);nn self.dbg_check_cursor_at(&cursor, userpos, num_inserted_items);n } else {n let current_item = cursor.current_item();n let (start, end) = C::split_item(current_item, offset);n // Move the cursor back to the start of the item we'ren // splitting.n cursor.move_to_item_start(self.head.height, offset);n // This feels pretty inefficient; but its probably fine.n self.replace_at_iter(&mut cursor, 1, &mut iter::once(start), &mut Self::no_notify);n self.insert_at_iter(&mut cursor,''' ''n ' // TODO: Don't export this.' '' '''''''''''''''''''''''''':':'t'm'f':':'d't's''''''g'u'b'e'D' ':'m'e't'I':':'C' 'e'r'e'h'w' ' 'n pub fn print(&s' 'elf) {' 'n println!('items: {}tuserlen: {}, height: {}', self.num_items, self.get_userlen(), sel''f.hea' 'd.height);n' 'n' ' ' ' print!('HEAD:');n' ' '' for s in self.head.nexts() {n' ' ' ' ' ' print!(' |{} ', s.skip''_user' 'size);n' ' }n' ' ' ' println!('');n' 'n' ' ' ' use std::collections::HashMap;n' ' let m' 'ut ptr_to_id = HashMap::new();n' ' //' ' ptr_to_id.insert(std::ptr::null()' ', usize::MAX);n' ' for (i, node) in s' 'elf.iter().enumerate() {n' ' ' ' print!('{}:', i);n' ' ' ' ptr_to_id' '.insert(node as *const _, i);n' ' fo' 'r s in node.nexts() {n' ' print!(' |{} ', s.' 'skip_usersize);n' ' }n'' ' ' ' ' print!(' : {:?}', node.content_slice());n' '' ' ' ' if let S' 'ome(id) = ptr_' 'to_id.get(&(node.parent as *const _)) {n' ' print!(' (parent: {})', id);n' ' }n' ' print!(' (pointer: {:?})', node as *const _);n' 'n' ' println!();n' ' }n' ' }' 'n ' ' &mut contents, &mut Self::no_notify);nn // There's no clean way to keep the cursor steady for the finaln // insert. We'll just make sure the cursor is in the rightn // position before that call for now.n self.dbg_check_cursor_at(&cursor, userpos, num_inserted_items);nn self.insert_at_iter(&mut cursor, &mut iter::once(end), &mut Self::no_notify);n }n }nn }nn pub fn insert_at_slice(&mut self, userpos: usize, contents: &[C::Item]) where C::Item: Copy {n self.insert_at(userpos, contents.iter().copied())n'' dealloc(p as *mut u8, Self::layout_with_height((*p).height));n }nn fn content_slice(&self) -> &[C::Item] {n let slice = &self.items[..self.num_items as usize];n unsafe { maybeinit_slice_get_ref(slice) }n }nn //'' ''T'// ''''// 'he height is at least 1, so this is always valid.n fn first_skip_'// 'entry''<''// 'a>(&self) -> &'a SkipEntry '// '{n ''unsa'// 'fe { &*self.nex'// 'ts.as_'// 'ptr() }n '' }nn'//'' ' '// 'fn'// ' f''impl From> for Ski'// 'pList {n fn from(s: Vec) -> Ski'// 'pList {n SkipList::new_from_iter(s.in'// 'to_ite'// 'r())n }n'n'}n''i''rst_skip_e''''''''Ex'I'actSizeIterato''''''''''''ExactSizeIter'''// ''f''n'''''''I' ':'r'e't'i' from(s: Vec) -> SkipList''''r'''e't'i' {''n// SkipList::new_from_iter(s.into_iter())''n// }'ato''''''='m'e't'I'''''''''' '>'m'e't'I':':'C'<'r''''a'x'E' ':'I' 'e'r'e'h'w'''''''w' ''''''''>'m'e't'I':':'C'<'r''''a'x'E' ':'I'''' let mut rope = Self::new();' '''n rope.insert_at_sl' 'ice(0, s);''n ropen' ','ntry_mut<'a>(&mut self) -> &'a mut SkipEntry {n unsafe { &mut *self.nexts.as_mut_ptr() }n }nn // TODO: Rename to len() ?n fn get_userlen(&self) -''''r'''into_iter()'''''o't'n'i'.'s''''e't'i'''>'' ''u''s''ize {n self.first_skip_entry().skip_usersizen }n n fn get_next_ptr(&self) -> *mut Node {n self.first_skip_entry().noden }n}nnstruct NodeIter<'a, C: ListConfig>(Option<&'a Node>);nimpl<'a, C: ListConfig> Iterator for NodeIter<'a, C''> {n type Item = &'a Node;nn fn next(&mut self) -> Option<&'a Node> {n let prev = self.0;n if let Some(n) = self.0 {n *self = NodeIter(unsafe { n.first_skip_entry().node.as_ref() });n }n prevn }n}nn/// This is a set of pointers with metadata into a location in the list neededn/// to skip ahead, delete and insert in items. A cursor is reasonably heavyn/// weight - we fill in and maintain as many entries as the height of the listn/// dictates.n///n/// This is not needed for simply iterating sequentially through nodes and data.n/// For that look at NodeIter.n///n/// Note most/all methods using cursors are unsafe. This is because cursors usen/// raw mutable pointers into the list, so when used the following rules have ton/// be followed:n///n/// - Whenever a write happens (insert/remove/replace), any cursor not passed ton/// the write function is invalid.n/// - While a cursor is held the SkipList struct should be considered pinned andn/// must not be moved or deletedn#[derive(Copy, Clone)]npub struct Cursor {n // TODO: Add a phantom lifetime reference to the skip list root for safety.nnn /// The global user position of the cursor in the entire list. This is usedn /// for when the max seen height increases, so we can populate previouslyn /// unused entries in the cursor and in the head node.n ///n /// This field isn't strictly necessary - earlier versions tacked this on ton /// the last item in entries... I'm still not sure the cleanest way to don /// this.n userpos: usize,nn /// When the userpos of an entry is 0 (totally valid and useful), a cursorn /// becomes ambiguous with regard to where exactly its pointing in then /// current entry. This is used to resolve that ambiguity.n local_index: usize,nn entries: [SkipEntry; MAX_HEIGHT],n}nnimpl Cursor {n fn update_offsets(&mut self, height: usize, by: isize) {n for i in 0..height {n unsafe {n // This is weird but makes sense when you realise the nexts inn // the cursor are pointers into the elements that have then // actual pointers.n // Also adding a usize + isize is awful in rust :/n let skip = &mut (*self.entries[i].node).nexts_mut()[i].skip_usersize;n *skip = skip.wrapping_add(by as usize);n }n }n }nn /// Move a cursor to the start of the next node. Returns the new node (or an /// nullptr if this is the end of the list).n fn advance_node(&mut self) -> *mut Node {n unsafe {n let SkipEntry { node: e, skip_usersize: offset } = self.entries[0];n // offset tells us how far into the current element we are (inn // usersize). We need to increment the offsets by the entry'sn // remaining length to get to the start of the next node.n let advance_by = (*e).get_userlen() - offset;n let next = (*e).get_next_ptr();n let height = (*next).height as usize;nn for i in 0..height {n self.entries[i] = SkipEntry {n node: next,n skip_usersize: 0n };n }nn for i in height..self.entries.len() {n self.entries[i].skip_usersize += advance_by;n }nn self.userpos += advance_by;n self.local_index = 0;nn nextn }n }nn fn is_at_node_end(&self) -> bool {n self.local_index == unsafe { (*self.here_ptr()).num_items } as usizen }nn fn advance_item(&mut self, height: u8) {n if self.is_at_node_end() { self.advance_node(); }n let usersize = C::get_usersize(unsafe { self.current_item() });nn for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize += usersize;n }n self.userpos += usersize;n self.local_index += 1;n }nn fn advance_by_items(&mut self, num: usize, height: u8) {n for _ in 0..num { self.advance_item(height); }n }nn fn move_to_item_start(&mut self, height: u8, offset: usize) {n for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize -= offset;n }n self.userpos -= offset;n }nn unsafe fn current_item(&mut self) -> &C::Item {n let node = &*self.here_ptr();n debug_assert!(node.num_items as usize >= self.local_index);n &*(node.items[self.local_index].as_ptr())n }nn /// Get the pointer to the cursor's current noden fn here_ptr(&self) -> *mut Node {n self.entries[0].noden }n}nnimpl PartialEq for Cursor {n /// Warning: This returns false if one cursor is at the end of a node, andn /// the other at the start of the next node. Almost all code in this libraryn /// leaves cursors at the end of nodes, so this shouldn't matter too much inn /// practice.n fn eq(&self, other: &Self) -> bool {n if self.userpos != other.userposn || self.local_index != other.local_index {return false; }nn for i in 0..MAX_HEIGHT {n let a = &self.entries[i];n let b = &other.entries[i];n if a.node != b.node || a.skip_usersize != b.skip_usersize { return false; }n }n truen }n}nimpl Eq for Cursor {}nnimpl fmt::Debug for Cursor {n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n f.debug_struct('Cursor')n .field('userpos', &self.userpos)n .field('local_index', &self.local_index)n .finish()n }n}nn// None of the rust builtins give me what I want, which is a copy-free iteratorn// to owned items in a MaybeUninit array. Eh; its easy enough to make my own.nstruct UninitOwnedIter<'a, C: ListConfig> {n // Based on the core slice IterMut implementation.n ptr: NonNull,n end: *mut C::Item,n _marker: PhantomData<&'a SkipList>n}nnimpl<'a, C: ListConfig> UninitOwnedIter<'a, C> {n /// Make a slice we can iterate from and steal data from without droppingn /// content. This is unsafe:n ///n /// - If the iterator isn't fully drained then remaining items will ben /// forgotten (they are not dropped).n /// - The slice passed in here must be initialized or undefined behaviourn /// will hit us.n ///n /// After iterating, the contents are uninit memory.n unsafe fn from_slice(slice: &[MaybeUninit]) -> Self {n let ptr = slice.as_ptr() as *mut C::Item; // Safe.n let end = ptr.add(slice.len());nn UninitOwnedIter {n ptr: NonNull::new_unchecked(ptr),n end,n _marker: PhantomDatan }n }n}nnimpl<'a, C: ListConfig> Iterator for UninitOwnedIter<'a, C> {n type Item = C::Item;nn fn next(&mut self) -> Option {n if self.ptr.as_ptr() == self.end {n Nonen } else {n let ptr = self.ptr;n self.ptr = unsafe { NonNull::new_unchecked(self.ptr.as_ptr().offset(1)) };n Some(unsafe { ptr.as_ptr().read() })n }n }nn fn size_hint(&self) -> (usize, Option) {n let size = (self.end as usize - self.ptr.as_ptr() as usize) / mem::size_of::();n (size, Some(size))n }n}nn// TODO: Stolen from MaybeUninit::uninit_array. Replace with the real uninit_array when stable.n#[inline(always)]nfn uninit_items_array() -> [MaybeUninit; NODE_NUM_ITEMS] {n unsafe { MaybeUninit::<[MaybeUninit; NODE_NUM_ITEMS]>::uninit().assume_init() }n}nn// TODO: Stolen from MaybeUninit::slice_get_ref. Replace when available.n#[inline(always)]nunsafe fn maybeinit_slice_get_ref(slice: &[MaybeUninit]) -> &[T] {n // SAFETY: casting slice to a `*const [T]` is safe since the caller guarantees thatn // `slice` is initialized, and`MaybeUninit` is guaranteed to have the same layout as `T`.n // The pointer obtained is valid since it refers to memory owned by `slice` which is an // reference and thus guaranteed to be valid for reads.n &*(slice as *const [MaybeUninit] as *const [T])n}nnnimpl SkipList {n pub fn new() -> Self {n SkipList:: {n num_items: 0,n num_usercount: 0,n rng: None,n head: Node {n items: uninit_items_array(),n num_items: 0,n height: 1, // Stores max height of list nodesn parent: ptr::null_mut(),n nexts: [],n },n _nexts_padding: [SkipEntry::new_null(); MAX_HEIGHT],n }n }nn pub fn init_rng_from_seed(&mut self, seed: u64) {n self.rng = Some(SmallRng::seed_from_u64(seed));n }nn fn get_rng(&mut self) -> &mut SmallRng {n // I'm sure there's a nicer way to implement this.n if self.rng.is_none() {n // We'll use a stable RNG in debug mode so the tests are stable.n if cfg!(debug_assertions) {n self.init_rng_from_seed(123);n } else {n self.rng = Some(SmallRng::from_entropy());n }n }n self.rng.as_mut().unwrap()n }nn pub fn new_from_slice(s: &[C::Item]) -> Self where C::Item: Copy {n let mut rope = Self::new();n rope.insert_at(0, s);n ropen }nn pub fn get_userlen(&self) -> usize {n self.num_usercountn }nn fn iter(&self) -> NodeIter { NodeIter(Some(&self.head)) }n n pub fn len_items(&self) -> usize {n self.num_items as usizen }nn fn heads_mut(&mut self) -> &mut [SkipEntry] {n unsafe {n std::slice::from_raw_parts_mut(self.head.nexts.as_mut_ptr(), self._nexts_padding.len())n }n }nn fn is_head(&self, node: *const Node) -> bool {n node as *const _ == &self.head as *const _n }nn /// Walk the list and validate internal constraints. This is used forn /// testing the structure itself, and should generally not be called byn /// users.n pub fn check(&self) {n // #[cfg(test)]n {n // self.print();n assert!(self.head.height >= 1);n assert!(self.head.height <= MAX_HEIGHT_U8);nn let head_ptr = &self.head as *const _ as *mut _;n // let skip_over = self.get_top_entry();n // println!('Skip over skip chars {}, num bytes {}', skip_over.skip_items, self.num_bytes);nn let mut prev: [*const Node; MAX_HEIGHT] = [ptr::null(); MAX_HEIGHT];nn let mut iter = [SkipEntry {n // Bleh.n node: head_ptr,n // The skips will store the total distance travelled since then // start of this traversal at each height. All the entries aboven // head.height are ignored though.n skip_usersize: 0n }; MAX_HEIGHT];nn let mut num_items = 0;n let mut num_usercount = 0;nn for (_i, n) in self.iter().enumerate() {n // println!('visiting {:?}', n.as_str());n if !self.is_head(n) { assert!(n.num_items > 0); }n assert!(n.height <= MAX_HEIGHT_U8);n assert!(n.num_items as usize <= NODE_NUM_ITEMS);nn // Make sure the number of items matches the countn let local_count = C::userlen_of_slice(n.content_slice());n assert_eq!(local_count, n.get_userlen());nn let expect_parent = if self.is_head(n) {n ptr::null() // The head's parent is nulln } else if n.height == self.head.height {n &self.head as *const _ // Max height nodes point back to headn } else {n prev[n.height as usize]n };nn // println!('visiting {} {:?}', i, n as *const _);n // dbg!(n as *const _);n // dbg!((n as *const _, (*n).height));n // dbg!(n.parent);n // dbg!(&self.head as *const _);nn assert_eq!(n.parent as *const _, expect_parent, 'invalid parent');n n for (i, entry) in iter[0..n.height as usize].iter_mut().enumerate() {n assert_eq!(entry.node as *const _, n as *const _);n assert_eq!(entry.skip_usersize, num_usercount);nn // println!('replacing entry {:?} with {:?}', entry, n.nexts()[i].node);n prev[i] = n;n entry.node = n.nexts()[i].node;n entry.skip_usersize += n.nexts()[i].skip_usersize;n }nn num_items += n.num_items as usize;n num_usercount += n.get_userlen();nn // Check the value returned by the iterator functions matches.n let (mut normal_iter, local_offset) = self.iter_at_userpos(num_usercount);n assert_eq!(local_offset, 0);nn // Dirty hack. If n has 0-sized elements at the end, the normaln // cursor won't be at the end...n while normal_iter.here_ptr() != n as *const _ as *mut _ {n normal_iter.advance_node();n }n normal_iter.local_index = n.num_items as usize;n let node_iter = unsafe { self.iter_at_node(n, n.get_userlen(), n.num_items as usize) };n assert_eq!(normal_iter, node_iter);n }nn for entry in iter[0..self.head.height as usize].iter() {n // println!('{:?}', entry);n assert!(entry.node.is_null());n assert_eq!(entry.skip_usersize, num_usercount);n }n n // println!('self bytes: {}, count bytes {}', self.num_bytes, num_bytes);n assert_eq!(self.num_items, num_items);n assert_eq!(self.get_userlen(), num_usercount);n }n }n n n /// Internal function for creating a cursor at a particular location in then /// skiplist. The returned cursor contains list of nodes which point pastn /// the specified position, as well as offsets of how far into theirn /// character lists the specified characters are.n ///n /// Sometimes a call to iter_at_userpos is ambiguous:n ///n /// - The item can contain items with zero usersize. The cursor could pointn /// to any of them.n /// - If the location is at the end of a node, it is equally valid to returnn /// a position at the start of the next node.n ///n /// Because its impossible to move backwards in the list, iter_at_userposn /// returns the first admissible location with the specified userpos.n /// n /// Returns (cursor, offset into the specified item).n ///n /// TODO: This should be Pin<&self>.n fn iter_at_userpos(&self, target_userpos: usize) -> (Cursor, usize) {n assert!(target_userpos <= self.get_userlen());nn let mut e: *const Node = &self.head;n let mut height = self.head.height as usize - 1;n n let mut offset = target_userpos; // How many more items to skipnn // We're populating the head node pointer to simplify the case when then // iterator grows. We could put offset into the skip_usersize but itn // would only be *mostly* correct, not always correct. (Since cursorn // entries above height are not updated by insert.)n let mut cursor = Cursor {n entries: [SkipEntry {n node: &self.head as *const _ as *mut _,n skip_usersize: usize::MAXn }; MAX_HEIGHT],n local_index: 0,n userpos: target_userpos,n };nn loop { // while height >= 0n let en = unsafe { &*e };n let next = en.nexts()[height];n let skip = next.skip_usersize;n if offset > skip {n // Go right.n debug_assert!(e == &self.head || en.num_items > 0);n offset -= skip;n e = next.node;n assert!(!e.is_null(), 'Internal constraint violation: Reached rope end prematurely');n } else {n // Record this and go down.n cursor.entries[height] = SkipEntry {n skip_usersize: offset,n node: e as *mut Node, // This is pretty grossn };nn if height == 0 { break; } else { height -= 1; }n }n };nn // We should always land within the node we're pointing to.n debug_assert!(offset <= unsafe { &*cursor.here_ptr() }.get_userlen());nn // We've found the node. Now look for the index within the node.n let en = unsafe { &*e };n let mut index = 0;nn while offset > 0 {n assert!(index < en.num_items as usize);n n let usersize = C::get_usersize(unsafe { &*en.items[index].as_ptr() });n if usersize > offset { break; } // We're in the middle of an item.n offset -= usersize;n index += 1;n }n cursor.local_index = index;nn (cursor, offset)n }nn unsafe fn iter_at_node(&self, n: *const Node, mut offset: usize, local_index: usize) -> Cursor {n let mut n = n as *mut Node; // We don't mutate, but we need a mut ptr.nn let mut cursor = Cursor {n userpos: 0, // We'll set this later.n local_index: local_index,n entries: [SkipEntry {n node: &self.head as *const _ as *mut _,n skip_usersize: usize::MAXn }; MAX_HEIGHT],n };nn let mut h = 0;n loop {n while h < (*n).height as usize {n cursor.entries[h] = SkipEntry {n node: n,n skip_usersize: offsetn };nn h += 1;n }nn let parent = (*n).parent;n // Reached the head.n if parent.is_null() { break; }nn // If we're the same height as the parent its fine.n debug_assert!((*parent).height as usize > hn || (self.is_head(parent) && (*parent).height as usize == h));nn // Walk from parent back to n, figuring out the offset.n let mut c = parent;n // let walk_height = (*parent).height as usize - 2;n let walk_height = (*n).height as usize - 1;n while c != n {n let elem = (*c).nexts()[walk_height];n offset += elem.skip_usersize;n c = elem.node;n }nn n = parent;n }nn cursor.userpos = offset;n cursorn }nn pub fn iter_at_marker(&mut self, marker: ItemMarker, query: &::Query) -> Cursor where C::Item: Queryable {n // The marker gives us a pointer into a node. Find the item.n unsafe {n let n = marker.ptr;nn let mut offset: usize = 0;n let mut local_index = None;n for (i, item) in (*n).content_slice().iter().enumerate() {n if let Some(item_offset) = item.contains_item(query) {n offset += item_offset;n local_index = Some(i);n break;n } else {n offset += C::get_usersize(item);n }n }nn let local_index = local_index.expect('Invalid marker - item not found in node');n self.iter_at_node(n, offset, local_index)n }n }nn // Internal fn to create a new node at the specified iterator filled withn // the specified content. The passed cursor should point at the end of then // previous node. It will be updated to point to the end of the newlyn // inserted content.n // unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &[C::Item], new_userlen: usize, move_cursor: bool) {n unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &mut I, num_items: usize, move_cursor: bool, notify: &mut Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: Iterator {nn // println!('Insert_node_at {} len {}', contents.len(), self.num_bytes);n // debug_assert_eq!(new_userlen, C::userlen_of_slice(contents));n assert!(num_items <= NODE_NUM_ITEMS);n debug_assert!(contents.size_hint().0 >= num_items);nn let new_node_ptr = Node::alloc(self.get_rng());n let new_node = &mut *new_node_ptr;n new_node.num_items = num_items as u8;nn for (slot, item) in new_node.items[..num_items].iter_mut().zip(contents) {n (slot.as_mut_ptr() as *mut C::Item).write(item); // Write makes sure we don't drop the old value.n }nn let new_userlen = C::userlen_of_slice(new_node.content_slice());nn let new_height = new_node.height;n let new_height_usize = new_height as usize;nn let mut head_height = self.head.height as usize;n while head_height < new_height_usize {n // This seems weird given we're about to overwrite these valuesn // below. What we're doing is retroactively setting up the cursorn // and head pointers *as if* the height had been this high alln // along. This way we only have to populate the higher head valuesn // lazily.n let total_userlen = self.num_usercount;n let nexts = self.heads_mut();n nexts[head_height].skip_usersize = total_userlen;n cursor.entries[head_height].skip_usersize = cursor.userpos;nn head_height += 1; // This is ugly.n self.head.height += 1;n }nn new_node.parent = if new_height_usize == MAX_HEIGHT {n &self.head as *const _ as *mut _n } else { cursor.entries[new_height_usize].node };nn for i in 0..new_height_usize {n let prev_skip = &mut (*cursor.entries[i].node).nexts_mut()[i];n let new_nexts = new_node.nexts_mut();nn // The new node points to the successor (or null)n new_nexts[i] = SkipEntry {n node: prev_skip.node,n skip_usersize: new_userlen + prev_skip.skip_usersize - cursor.entries[i].skip_usersizen };nn // The previous node points to the new noden *prev_skip = SkipEntry {n node: new_node_ptr,n skip_usersize: cursor.entries[i].skip_usersizen };nn // Move the iterator to the end of the newly inserted node.n if move_cursor {n cursor.entries[i] = SkipEntry {n node: new_node_ptr,n skip_usersize: new_userlenn };n }n }nn for i in new_height_usize..head_height {n (*cursor.entries[i].node).nexts_mut()[i].skip_usersize += new_userlen;n if move_cursor {n cursor.entries[i].skip_usersize += new_userlen;n }n }nn // Update parents.n if new_height_usize > 1 {nn let mut n = new_node_ptr;n let mut skip_height = 0;nn loop {n n = (*n).nexts_mut()[skip_height].node;n if n.is_null() || (*n).height >= new_height { break; }n n (*n).parent = new_node_ptr;n skip_height = usize::max(skip_height, (*n).height as usize - 1);n }n }n n self.num_items += num_items;n self.num_usercount += new_userlen;n if move_cursor {n cursor.userpos += new_userlen;n cursor.local_index = num_items;n }nn notify(new_node.content_slice(), ItemMarker {n ptr: new_node_ptr,n _phantom: PhantomDatan });n }nn // unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item]) {n unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &mut I, notify: &mut Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: ExactSizeIterator {n // iter specifies where to insert.nn let mut e = cursor.here_ptr();nn // The insertion offset into the destination node.n assert!(cursor.userpos <= self.num_usercount);n assert!(cursor.local_index <= (*e).num_items as usize);nn // We might be able to insert the new data into the current node, depending onn // how big it is.n let num_inserted_items = contents.len();nn // Can we insert into the current node?n let mut insert_here = (*e).num_items as usize + num_inserted_items <= NODE_NUM_ITEMS;nn // Can we insert into the start of the successor node?n if !insert_here && cursor.local_index == (*e).num_items as usize && num_inserted_items <= NODE_NUM_ITEMS {n // We can insert into the subsequent node if:n // - We can't insert into the current noden // - There _is_ a next node to insert inton // - The insert would be at the start of the next noden // - There's room in the next noden if let Some(next) = (*e).first_skip_entry_mut().node.as_mut() {n if next.num_items as usize + num_inserted_items <= NODE_NUM_ITEMS {n cursor.advance_node();n e = next;nn insert_here = true;n }n }n }nn let item_idx = cursor.local_index;n let e_num_items = (*e).num_items as usize; // convenience.nn if insert_here {n // println!('insert_here {}', contents);n // First push the current items later in the arrayn let c = &mut (*e).items;n if item_idx < e_num_items {n // Can't use copy_within because Item doesn't necessarilyn // implement Copy. Memmove the existing items.n ptr::copy(n &c[item_idx],n &mut c[item_idx + num_inserted_items],n (*e).num_items as usize - item_idx);n }nn // Then copy in the new items. Can't memcpy from an iterator, butn // the optimizer should make this fast.n let dest_content_slice = &mut c[item_idx..item_idx + num_inserted_items];n for (slot, item) in dest_content_slice.iter_mut().zip(contents) {n // Do not drop the old items - they were only moved.n slot.as_mut_ptr().write(item);n }n let dest_content_slice = maybeinit_slice_get_ref(dest_content_slice);nn (*e).num_items += num_inserted_items as u8;n self.num_items += num_inserted_items;n let num_inserted_usercount = C::userlen_of_slice(dest_content_slice);n self.num_usercount += num_inserted_usercount;nn // .... aaaand update all the offset amounts.n cursor.update_offsets(self.head.height as usize, num_inserted_usercount as isize);nn // Usually the cursor will be discarded after one change, but forn // consistency of compound edits we'll update the cursor to point ton // the end of the new content.n for entry in cursor.entries[0..self.head.height as usize].iter_mut() {n entry.skip_usersize += num_inserted_usercount;n }n cursor.userpos += num_inserted_usercount;n cursor.local_index += num_inserted_items;nn notify(dest_content_slice, ItemMarker {n ptr: e,n _phantom: PhantomDatan });n } else {n // There isn't room. We'll need to add at least one new node to then // list. We could be a bit more careful here and copy as much asn // possible into the current node - that would decrease the numbern // of new nodes in some cases, but I don't think the performancen // difference will be large enough to justify the complexity.nn // If we're not at the end of the current node, we'll need to removen // the end of the current node's data and reinsert it later.n let num_end_items = e_num_items - item_idx;nn let (end_items, end_usercount) = if num_end_items > 0 {n // We'll mark the items as deleted from the node, while leavingn // the data itself there for now to avoid a copy.nn // Note that if we wanted to, it would also be correct (andn // slightly more space efficient) to pack some of the newn // string's characters into this node after trimming it.n let end_items = &(*e).items[item_idx..e_num_items];n (*e).num_items = item_idx as u8;n let end_usercount = (*e).get_userlen() - cursor.entries[0].skip_usersize;nn cursor.update_offsets(self.head.height as usize, -(end_usercount as isize));nn // We need to trim the size off because we'll add the charactersn // back with insert_node_at.n self.num_usercount -= end_usercount;n self.num_items -= num_end_items;nn (Some(end_items), end_usercount)n } else {n (None, 0)n };nn // Now we insert new nodes containing the new character data. Then // data is broken into pieces with a maximum size of NODE_NUM_ITEMS.n // As further optimization, we could try and fit the last piece inton // the start of the subsequent node.n let mut items_remaining = num_inserted_items;n while items_remaining > 0 {n let insert_here = usize::min(items_remaining, NODE_NUM_ITEMS);n self.insert_node_at(cursor, contents, insert_here, true, notify);n items_remaining -= insert_here;n }nn // TODO: Consider recursively calling insert_at_iter() here insteadn // of making a whole new node for the remaining content.n if let Some(end_items) = end_items {n // Passing false to indicate we don't want the cursor updatedn // after this - it should remain at the end of the newlyn // inserted content, which is *before* this end bit.n self.insert_node_at(cursor, &mut UninitOwnedIter::::from_slice(end_items), end_items.len(), false, notify);n }n }n }nn // unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item]) {n // self.insert_at_iter_and_notify(cursor, contents, Self::no_notify);n // }nn /// Interestingly unlike the original, here we only care about specifyingn /// the number of removed items by counting them. We do not use usersize inn /// the deleted item count.n ///n /// If the deleted content occurs at the start of a node, the cursor passedn /// here must point to the end of the previous node, not the start of then /// current node.n unsafe fn del_at_iter(&mut self, cursor: &mut Cursor, mut num_deleted_items: usize) {n if num_deleted_items == 0 { return; }nn let mut item_idx = cursor.local_index;n let mut e = cursor.here_ptr();n while num_deleted_items > 0 {n // self.print();n // if cfg!(debug_assertions) { self.check(); }n if item_idx == (*e).num_items as usize {n let entry = (*e).first_skip_entry();n // End of current node. Skip to the start of the next one. We'ren // intentionally not updating the iterator because if we deleten // a whole node we need the iterator to point to the previousn // element. And if we only delete here, the iterator doesn'tn // need to be moved.n e = entry.node;n if e.is_null() { panic!('Cannot delete past the end of the list'); }n item_idx = 0;n }nn let e_num_items = (*e).num_items as usize;n let removed_here = min(num_deleted_items, e_num_items - item_idx);n n let height = (*e).height as usize;n let removed_userlen;nn if removed_here < e_num_items || e as *const _ == &self.head as *const _ {n // Just trim the node down.n let trailing_items = e_num_items - item_idx - removed_here;n n let c = &mut (*e).items;n removed_userlen = C::userlen_of_slice(maybeinit_slice_get_ref(&c[item_idx..item_idx + removed_here]));n if trailing_items > 0 {n ptr::copy(n &c[item_idx + removed_here],n &mut c[item_idx],n trailing_items);n }nn (*e).num_items -= removed_here as u8;n self.num_items -= removed_here;n self.num_usercount -= removed_userlen;nn for s in (*e).nexts_mut() {n s.skip_usersize -= removed_userlen;n }n } else {n // Remove the node from the skip list entirely. e should be then // next node after the position of the iterator.n assert_ne!(cursor.here_ptr(), e);nn removed_userlen = (*e).get_userlen();n let next = (*e).first_skip_entry().node;nn // println!('removing {:?} contents {:?} height {}', e, (*e).content_slice(), height);nn for i in 0..height {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.node = (*e).nexts_mut()[i].node;n s.skip_usersize += (*e).nexts()[i].skip_usersize - removed_userlen;n }nn self.num_items -= (*e).num_items as usize;n self.num_usercount -= removed_userlen;nn // Update parents.n if height > 1 {n let mut n = e;n // let new_parent = cursor.entries[height - 1].node;nn // If you imagine this node as a big building, we need ton // update the parent of all the nodes we cast a shadow over.n // So, if our height is 3 and the next nodes have heights 1n // and 2, they both need new parents.n let mut parent_height = 1;n let cursor_node = cursor.here_ptr();n let cursor_node_height = (*cursor_node).height as usize;n let mut new_parent = if height >= cursor_node_height {n cursor.entries[parent_height].noden } else {n cursor_noden };nn loop {n n = (*n).nexts_mut()[parent_height - 1].node;n if n.is_null() || (*n).height >= height as u8 { break; }n let n_height = (*n).height as usize;n n assert_eq!((*n).parent, e);n assert!(n_height >= parent_height - 1);nn if n_height > parent_height {n parent_height = n_height;n if n_height >= cursor_node_height {n new_parent = cursor.entries[parent_height].noden }n }n n (*n).parent = new_parent;n }n }nn Node::free(e);n e = next;n }nn for i in height..self.head.height as usize {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.skip_usersize -= removed_userlen;n }nn num_deleted_items -= removed_here;nn // if cfg!(debug_assertions) { self.check(); }n }n }nnn unsafe fn replace_at_iter(&mut self, cursor: &mut Cursor, mut removed_items: usize, inserted_content: &mut I, mut notify: Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: ExactSizeIterator {n if removed_items == 0 && inserted_content.len() == 0 { return; }nn // Replace as many items from removed_items as we can with inserted_content.n let mut replaced_items = min(removed_items, inserted_content.len());n removed_items -= replaced_items;nn while replaced_items > 0 {n debug_assert!(inserted_content.len() >= replaced_items);n let mut e = cursor.here_ptr();n if cursor.local_index == (*e).num_items as usize {n // Move to the next item.n e = cursor.advance_node();n if e.is_null() { panic!('Cannot replace past the end of the list'); }n }nn let index = cursor.local_index;nn let e_num_items = (*e).num_items as usize;n let replaced_items_here = min(replaced_items, e_num_items - index);nn let dest = &mut (*e).items[index..index + replaced_items_here];n let old_usersize = C::userlen_of_slice(maybeinit_slice_get_ref(dest));nn // Replace the items themselves. Everything else is commentary.n // Would prefer to use zip() but it wants ownership of inserted_content :/n for slot in dest.iter_mut() {n *slot.as_mut_ptr() = inserted_content.next().unwrap();n }nn let dest = maybeinit_slice_get_ref(dest);n let new_usersize = C::userlen_of_slice(dest);n let usersize_delta = new_usersize as isize - old_usersize as isize;nn if usersize_delta != 0 {n cursor.update_offsets(self.head.height as usize, usersize_delta)n }n // I hate this.n self.num_usercount = self.num_usercount.wrapping_add(usersize_delta as usize);nn replaced_items -= replaced_items_here;n // We'll hop to the next Node at the start of the next loopn // iteration if needed.n cursor.local_index += replaced_items_here;nn for i in 0..self.head.height as usize {n cursor.entries[i].skip_usersize += new_usersize;n }n cursor.userpos += new_usersize;nn notify(dest, ItemMarker {n ptr: e,n _phantom: PhantomData,n });n }nn // Ok now one of two things must be true. Either we've run out ofn // items to remove, or we've run out of items to insert.n if inserted_content.len() > 0 {n // Insert!n debug_assert!(removed_items == 0);n self.insert_at_iter(cursor, inserted_content, &mut notify);n } else if removed_items > 0 {n self.del_at_iter(cursor, removed_items);n }n }nn fn dbg_check_cursor_at(&self, cursor: &Cursor, userpos: usize, plus_items: usize) {n if cfg!(debug_assertions) {n let (mut c2, _) = self.iter_at_userpos(userpos);n c2.advance_by_items(plus_items, self.head.height);n assert_eq!(cursor, &c2);n }n }nn fn no_notify(_items: &[C::Item], _marker: ItemMarker) {}nn pub fn replace_at(&mut self, mut start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) where C::Item: Copy {n start_userpos = min(start_userpos, self.get_userlen());nn let (mut cursor, offset) = self.iter_at_userpos(start_userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.replace_at_iter(&mut cursor, removed_items, &mut inserted_content.iter().copied(), Self::no_notify); }nn if cfg!(debug_assertions) {n let (mut c2, _) = self.iter_at_userpos(start_userpos);n c2.advance_by_items(inserted_content.len(), self.head.height);n if &cursor != &c2 { panic!('Invalid cursor after replace'); }n }n }nn pub fn insert_at(&mut self, mut userpos: usize, contents: &[C::Item]) where C::Item: Copy {n if contents.len() == 0 { return; }n n userpos = min(userpos, self.get_userlen());n let (mut cursor, offset) = self.iter_at_userpos(userpos);nn unsafe {n if offset == 0 {n self.insert_at_iter(&mut cursor, &mut contents.iter().copied(), &mut Self::no_notify);nn self.dbg_check_cursor_at(&cursor, userpos, contents.len());n } else {n let current_item = cursor.current_item();n let (start, end) = C::split_item(current_item, offset);n // Move the cursor back to the start of the item we'ren // splitting.n cursor.move_to_item_start(self.head.height, offset);n // This feels pretty inefficient; but its probably fine.n self.replace_at_iter(&mut cursor, 1, &mut iter::once(start), &mut Self::no_notify);n self.insert_at_iter(&mut cursor, &mut contents.iter().copied(), &mut Self::no_notify);nn // There's no clean way to keep the cursor steady for the finaln // insert. We'll just make sure the cursor is in the rightn // position before that call for now.n self.dbg_check_cursor_at(&cursor, userpos, contents.len());nn self.insert_at_iter(&mut cursor, &mut iter::once(end), &mut Self::no_notify);n }n }nn'n '''// '''''''drop_in_place'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e'n'a'e'l'c' 's'''' 'i' 's'i'h't' 't'u'b' ','e'r'e'h' 'p'o'r'd' 't'n'e'm'e'l'p'm'i''''''''''t'n'm'e'l'e'p'm'i' 't's'u'j' 'd'l'u'o'c' 'e'W''''''''''''' 'e's'u' 'l'l'''e'W' '/'/' ';''(to_drop: *mut T)''''''_'p'o'r'd':':'r't'p' 'll('''MAX_HEIGHT''''X'A'M' ';')'''e'n':':'y'''''p'i'k'S'e {n items: uninit_items_array(),n num_items: 0,n height: height,n parent: ptr::null_mut(),n nexts: [],n };nn for next in (*node).nexts_mut() {n *next = SkipEntry::new_null();n }nn noden }n }nn fn alloc(rng: &mut R) -> *mut Node {n Self::alloc_with_height(random_height(rng))n }nn '''''''''''ListConfi'''''''''''''''''''''' '''''''''''''''''''''' '''''n '''''''''nee'''''''''e''' // Could instead call assume_init() on each item but this isn // friendlier to the optimizer.'n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e'z'i'm'i't'p'o' 'e'h't' 'o't' 'r'e'i'l'd'n'e'i'r'f' 's'i' 's'i'h't''''''''''''''''' 's'i' 's'i'h't' 'k'n'i'h't' 'I' 't'u'b' 'm'e't'i' 'h'c'a'e' 'n'o' ')'('t'i'n'i'_'e'm'u's's'a' 'l'l'a'c' 'd'a'e't's'n'i' 'd'l'u'o'C' '/'/' 'z'i's'u' 's'a''''''''' '{' 'e'f'a's'n'u'' 'ds_dro'':':''''''' ''}' ' '''''{' '' '''>'m'e't'I':':'C'<'p()'''''d'e'e'' ''' '''''drop_in_p''l''ace''''''' 't'u'''as_mut_pt'''''')'('r''''''u'm'_'s'a'.'m'&'''''''(to_d''''''''''_';'' 't'u'm'*' 's'a' 'ro')'p: *mut T)':':'r't'p'' ' 'n''':':'m'e'm'''''''e'n''''e'' 'e'n' 'f'i'' '' }'n '' ''n ''''''''''''''''''num_item''{' '''' '' 's''''m'u''''.']'i'[''' }'n ''n'''''''e'l'.'f'l'e's'.'.'0' 'n'i' 'i''''''''''''' 't'e'l' 'r'o'f' ''n ''''''''''s'm'e't'i'.'f'l'e's''''self.nexts.as_ptr(), self.height as usize' ''' }'n '{' ')'f'l'e's' 't'u'm'&'('p'o'r'd''''D' 'n'f' '''}''n 'n ' '{' '>'C'<'e'd'o'N' 'r'o'f' 'p'o'r'D' '>'g'''''t's'i'L' ':'C'<'''' 'l'p'm'i'n'n' unsafe fn free(p: *mut Node) {n dealloc(p as *mut u8, Self::layout_with_height((*p).''height));n }nn fn content_slice(&self) -> &[C::Item] {n // TODO: Use MaybeUninit::slice_get_ref ''w''hen it lands. This code is stolen from that implementation.nn // SAFETY: casting slice to a `*const [T]` is safe since the caller guarantees thatn // `slice` is initialized, and`MaybeUninit` is guaranteed to have the same layout as `T`.n // The pointer obtained is valid since it refers to memory owned by `slice` which is an // reference and thus guaranteed to be valid for reads.n let slice = &self.items[..self.num_items as usize];n unsafe { maybeinit_slice_get_ref(slice) }n }nn // The height is at least 1, so this is always valid.n fn first_skip_entry<'a>(&self) -> &'a SkipEntry {n unsafe { &*self.nexts.as_ptr() }n }nn fn first_skip_entry_mut<'a>(&mut self) -> &'a mut SkipEntry {n unsafe { &mut *self.nexts.as_mut_ptr() }n }nn // TODO: Rename to len() ?n fn get_userlen(&self) -> usize {n self.first_skip_entry().skip_usersizen }n n fn get_next_ptr(&self) -> *mut Node {n self.first_skip_entry().noden }n}nnstruct NodeIter<'a, C: ListConfig>(Option<&'a Node>);nimpl<'a, C: ListConfig> Iterator for NodeIter<'a, C> {n type Item = &'a Node;nn fn next(&mut self) -> Option<&'a Node> {n let prev = self.0;n if let Some(n) = self.0 {n *self = NodeIter(unsafe { n.first_skip_entry().node.as_ref() });n }n prevn }n}nn/// This is a set of pointers with metadata into a location in the list neededn/// to skip ahead, delete and insert in items. A cursor is reasonably heavyn/// weight - we fill in and maintain as many entries as the height of the listn/// dictates.n///n/// This is not needed for simply iterating sequentially through nodes and data.n/// For that look at NodeIter.n///n/// Note most/all methods using cursors are unsafe. This is because cursors usen/// raw mutable pointers into the list, so when used the following rules have ton/// be followed:n///n/// - Whenever a write happens (insert/remove/replace), any cursor not passed ton/// the write function is invalid.n/// - While a cursor is held the SkipList struct should be considered pinned andn/// must not be moved or deletedn#[derive(Copy, Clone)]npub struct Cursor {n // TODO: Add a phantom lifetime reference to the skip list root for safety.nnn /// The global user position of the cursor in the entire list. This is usedn /// for when the max seen height increases, so we can populate previouslyn /// unused entries in the cursor and in the head node.n ///n /// This field isn't strictly necessary - earlier versions tacked this on ton /// the last item in entries... I'm still not sure the cleanest way to don /// this.n userpos: usize,nn /// When the userpos of an entry is 0 (totally valid and useful), a cursorn /// becomes ambiguous with regard to where exactly its pointing in then /// current entry. This is used to resolve that ambiguity.n local_index: usize,nn entries: [SkipEntry; MAX_HEIGHT],n}nnimpl Cursor {n fn update_offsets(&mut self, height: usize, by: isize) {n for i in 0..height {n unsafe {n // This is weird but makes sense when you realise the nexts inn // the cursor are pointers into the elements that have then // actual pointers.n // Also adding a usize + isize is awful in rust :/n let skip = &mut (*self.entries[i].node).nexts_mut()[i].skip_usersize;n *skip = skip.wrapping_add(by as usize);n }n }n }nn /// Move a cursor to the start of the next node. Returns the new node (or an /// nullptr if this is the end of the list).n fn advance_node(&mut self) -> *mut Node {n unsafe {n let SkipEntry { node: e, skip_usersize: offset } = self.entries[0];n // offset tells us how far into the current element we are (inn // usersize). We need to increment the offsets by the entry'sn // remaining length to get to the start of the next node.n let advance_by = (*e).get_userlen() - offset;n let next = (*e).get_next_ptr();n let height = (*next).height as usize;nn for i in 0..height {n self.entries[i] = SkipEntry {n node: next,n skip_usersize: 0n };n }nn for i in height..self.entries.len() {n self.entries[i].skip_usersize += advance_by;n }nn self.userpos += advance_by;n self.local_index = 0;nn nextn }n }nn fn is_at_node_end(&self) -> bool {n self.local_index == unsafe { (*self.here_ptr()).num_items } as usizen }nn fn advance_item(&mut self, height: u8) {n if self.is_at_node_end() { self.advance_node(); }n let usersize = C::get_usersize(unsafe { self.current_item() });nn for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize += usersize;n }n self.userpos += usersize;n self.local_index += 1;n }nn fn advance_by_items(&mut self, num: usize, height: u8) {n for _ in 0..num { self.advance_item(height); }n }nn fn move_to_item_start(&mut self, height: u8, offset: usize) {n for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize -= offset;n }n self.userpos -= offset;n }nn unsafe fn current_item(&mut self) -> &C::Item {n let node = &*self.here_ptr();n debug_assert!(node.num_items as usize >= self.local_index);n &*(node.items[self.local_index].as_ptr())n }nn /// Get the pointer to the cursor's current noden fn here_ptr(&self) -> *mut Node {n self.entries[0].noden }n}nnimpl PartialEq for Cursor {n /// Warning: This returns false if one cursor is at the end of a node, andn /// the other at the start of the next node. Almost all code in this libraryn /// leaves cursors at the end of nodes, so this shouldn't matter too much inn /// practice.n fn eq(&self, other: &Self) -> bool {n if self.userpos != other.userposn || self.local_index != other.local_index {return false; }nn for i in 0..MAX_HEIGHT {n let a = &self.entries[i];n let b = &other.entries[i];n if a.node != b.node || a.skip_usersize != b.skip_usersize { return false; }n }n truen }n}nimpl Eq for Cursor {}nnimpl fmt::Debug for Cursor {n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n f.debug_struct('Cursor')n ' /// Make a slice we can iterate from and steal''''' 'a't'a'd' from without droppingn //'''''''''''''''''''''':'' /// - If the iterator isn't fully drained then remaining items will ben /// forgotten ''''''''''''t'o'n' 'e'.' /// - The slice passed in here must be initialized or undefined behaviourn /// will hit us.'''r'a' 'y'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'u' 't'i'h' 'l'l'i'w' 'r'u'o'i'v'a'h'e'b' ''''''''''''' 's'e'u'l'a'v' 'd'e'n'i'f'e'd'n'u'''''''''''s'e'u'l'a'v' 'e'h't' 'r'o' ''''.'d'e'z'i'l'a'i't'i'n'i' 'e'b' 't's'u'm' 'e'r'e'h' 'n'i' 'd'e's's''''d'a'p' 'e'c'i'l's' 'e'h'T'e'h't'(not dropped)'' /// - If the ''''''''':':'e'z'i'''' -'s'u'''''''intrinsic'''unchecked_sub''(x: T, y: T)'''','''''''h'c'n'u':':'s'''''r't'n'i':':'d't's''''''''l'd'e'k'c'n'u'iterator isn't fully drained then remaining items'''''''' 'e'b' 'l'l'i'w' are forgottenn /// (not dropped)'e'f'a's'n'''''''' 'e'h't' 'f'I'u' 'y'r'e'v' '''''''''''''''''''''''''''''''''''''''''''''''''')'d'e'p'p'o'r'd' 't'o'n'(' 'n'e't't'o'g'r'o'f' 'e'r'a' 's'm'e't'i' 'g'n'i'n'i'a'm'''''''m'a'e'r''''' 'e'h't' 'n'e'h't' 's'i' 's'i'h'T'/ content. Its unsafe if:n ///n /// - The iterator isn't fully drained (then we might not drop contents)n /// - The contents we iterate over aren't initializedn ///' .field('userpos', &self.userpos)n .f'''''''''''''''''''''''''t'n'e't'n'o'c' 'g'n'i'p'p'o'r'd' 't'u'o'h't'i'w' 'ield('local_index', &self.local_index)n .finish()n }n}nn// None of the rust builtins give me what I want, which is a copy-free iteratorn// to owned items in a MaybeUninit array. Eh; its easy enough to make my '''''' ':'O'D'O'T'''own.nstru'''''''''''''''f'e'r'_'t'e'g'_'e'c'i'l's':':'ct UninitOwned''''''''''''''''''''''''.'e'l'b'a'l'i'a'v'a''''''''''e'l'b'a'i'l'a'v'a' 'n'e'h'w' 'e'c'a'l'p'e'R' '''Iter<'a, C: ListConfig> {n // Based on the core slice IterMut implementation.n ptr: NonNull,n end: *mut C::Item,n _marker: PhantomData<&'a SkipList>n}nnimpl<'a, C: ListConfig> UninitOwnedIter<'a, C> {n /// Make a slice we can iterate from and steal from. Its'' ''unsafe if:n /// n /// - The iterator isn't fully drained (then we might not drop conten'''Skip'ts)n /''//'' - The con''t''e''X'''MAX'nts we iterate over aren't initializedn /// n /// After iterating, the contents are uninit memory.n unsafe fn from_slice(slice: &[MaybeUninit]) -> Self {n let ptr = sli'SkipEntr'''new_null('''MAX_HEIGHT''''X'A''''X'M' ';')':':'y'''''p'i'k'S'ce.as_ptr() as *mut C::Item; // Safe.n let end = ptr.add(slice.len());nn UninitOwnedIter {n ptr: NonNull::new_unchecked(ptr),n end,n _marker: PhantomDatan }n ''''''''''''e'c'i'l's'_'t''''_''''''''''''''''i'l's')''n ''''' 'n'f' 'n ' '}n // unsafe fn from_slice(slice: &[C::Item]) -> Self {n // unsafe {n // let ptr = slice.as_mut_ptr();n // let end = ptr.add(slice.len());nn // UninitOwnedIter {n // ptr: NonNull::new_unchecked(ptr),n // end,n // _marker: PhantomDatan // }n // }n // }n}nnimpl<'a, C: ListConfig> Iterator for UninitOwnedIter<'a, C> {n type Item = C::Item;nn fn next(&mut self) -> Option'n ''''''''''''''''''''n '''''''''''''''''''{' 'e'f'a's'n'u' '''Non'''''n '''''''''''''''' 'e'v'o'm'e'R' ':'O'D'O'T' '/''''''' ';'/' 'Nul'''new_unchecked''''''(ptr''}' ': *mut T)':':'l''')''''''l'u'N'n'o'N' ''''''''''''''''''')'('r't'p'_'s'a'.'''''''''(')''t'e's'f'f'o'.'r't'p'.'f'l'e's'''''';'1' '='+' 'r't'p'.'f'l'e's' ';'r't'p'.'f'l'e's' '=' 'r't'''p' 't'e'l' ' {n if self.ptr.as_ptr() == self.end {n Nonen } else {n Some(unsafe { self.ptr.as_'''n ''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''('''''''''''''''''''''''''''''''''''')'('r't'p'_'s''''':':'m'e'm''a'.'''''''''''''''''''''''''''''''''''':':'''''n '''''''''''''''''')')'e'z'i's'('e'm'o'S' ','e'z'i's'(' ';')'('>'m'e't'I':':'C'<':':'f'o'_'e'z'i's' '/' ''''.')'''e'z'i's'u' 's'a' 'r't'p'.'f'l'e's' '-' 'e'z'i's'u' 's'a' 'd'n'e'.'f'l'e's''''''''''''''''''('b'u's'.''''''')'''''''''''''as_ptr()'''s'a'.'';'r't'p'.'f'l'e's' '-' 'd'n'e'.'f'l'e's' '=' 'e'z''''e'i's' 't'e'l' '''''' }''n 'n ' ' '{' ')'>'e'z'i's'u'<'n'o'i't'p'O' ','e'z'i'''''''i'e's'u'(' '>'-' ')'f'l'e's'&'('t'n'i'h'_'e'z'i's'''''''z'i' 'n'f' 'n ' 'ptr().read() })n }n }n}nn// TODO: Stolen from MaybeUninit::uninit_array. Replace with the real uninit_array when stable.n#[inline(always)]nfn uninit_items_array() -> [MaybeUninit; NODE_NUM_ITEMS] {n unsafe { MaybeUninit::<[MaybeUninit; NODE_NUM_ITEMS]>::uninit().assume_init() }n}nn// Stolen from core::mem::MaybeUninit. Its just not standardized yet.n#[inline(always)]nunsafe fn maybeinit_slice_get_ref(slice: &[MaybeUninit]) -> &[T] {n // SAFETY: casting slice to a `*const [T]` is safe since the caller guarantees thatn // `slice` is initialized, and`MaybeUninit` is guaranteed to have the same layout as `T`.n // The pointer obtained is valid si'''''''' 't'u'm''''''t'u'm'_''nce it refers to memory owned by `slice` which is an // reference and thus guaranteed to be valid for reads.n &*(slice as *const [MaybeUninit] as *const [T])n}nnnimpl SkipList {n pub fn new() -> Self {n SkipList:: {n num_items: 0,n num_usercount: 0,n rng: None,n head: Node {n items: uninit_items_array(),n num_items: 0,n height: 1, // Stores max height of list nodesn parent: ptr::null_mut(),n nexts: [],n },n _nexts_padding: [SkipEntry::new_null(); MAX_HEIGHT],n }n }nn pub fn init_rng_from_seed(&mut self, seed: u64) {n self.rng = Some(SmallRng::seed_from_u64(seed));n }nn fn get_rng(&mut self) -> &mut SmallRng {n // I'm sure there's a nicer way to implement this.n if self.rng.is_none() {n // We'll use a stable RNG in debug mode so the tests are stable.n if cfg!(debug_assertions) {n self.init_rng_from_seed(123);n } else {n self.rng = Some(SmallRng::from_entropy());n }n }n self.rng.as_mut().unwrap()n }nn pub fn new_from_slice(s: &[C::Item]) -> Self where C::Item: Copy {n let mut rope = Self::new();n rope.insert_at(0, s);n ropen }nn pub fn get_userlen(&self) -> usize {n self.num_usercountn }nn fn iter(&self) -> NodeIter { NodeIter(Some(&self.head)) }n n pub fn len_items(&self) -> usize {n self.num_items as usizen }nn fn heads_mut(&mut self) -> &mut [SkipEntry] {n unsafe {n std::slice::from_raw_parts_mut(self.head.nexts.as_mut_ptr(), self._nexts_padding.len())n }n }nn fn is_head(&self, node: *const Node) -> bool {n node as *const _ == &self.head as *const _n }nn /// Walk the list and validate internal constraints. This is used forn /// testing the structure itself, and should generally not be called byn /// users.n pub fn check(&self) {n // #[cfg(test)]n {n // self.print();n assert!(self.head.height >= 1);n assert!(self.head.height <= MAX_HEIGHT_U8);nn let head_ptr = &self.head as *const _ as *mut _;n // let skip_over = self.get_top_entry();n // println!('Skip over skip chars {}, num bytes {}', skip_over.skip_items, self.num_bytes);nn let mut prev: [*const Node; MAX_HEIGHT] = [ptr::null(); MAX_HEIGHT];nn let mut iter = [SkipEntry {n // Bleh.n node: head_ptr,n // The skips will store the total distance travelled since then // start of this traversal at each height. All the entries aboven // head.height are ignored though.n skip_usersize: 0n }; MAX_HEIGHT];nn let mut num_items = 0;n let mut num_usercount = 0;nn for (_i, n) in self.iter().enumerate() {n // println!('visiting {:?}', n.as_str());n if !self.is_head(n) { assert!(n.num_items > 0); }n assert!(n.height <= MAX_HEIGHT_U8);n assert!(n.num_items as usize <= NODE_NUM_ITEMS);nn // Make sure the number of items matches the countn let local_count = C::userlen_of_slice(n.content_slice());n assert_eq!(local_count, n.get_userlen());nn let expect_parent = if self.is_head(n) {n ptr::null() // The head's parent is nulln } else if n.height == self.head.height {n &self.head as *const _ // Max height nodes point back to headn } else {n prev[n.height as usize]n };nn // println!('visiting {} {:?}', i, n as *const _);n // dbg!(n as *const _);n // dbg!((n as *const _, (*n).height));n // dbg!(n.parent);n // dbg!(&self.head as *const _);nn assert_eq!(n.parent as *const _, expect_parent, 'invalid parent');n n for (i, entry) in iter[0..n.height as usize].iter_mut().enumerate() {n assert_eq!(entry.node as *const _, n as *const _);n assert_eq!(entry.skip_usersize, num_usercount);nn // println!('replacing entry {:?} with {:?}', entry, n.nexts()[i].node);n prev[i] = n;n entry.node = n.nexts()[i].node;n entry.skip_usersize += n.nexts()[i].skip_usersize;n }nn num_items += n.num_items as usize;n num_usercount += n.get_userlen();nn // Check the value returned by the iterator functions matches.n let (mut normal_iter, local_offset) = self.iter_at_userpos(num_usercount);n assert_eq!(local_offset, 0);nn // Dirty hack. If n has 0-sized elements at the end, the normaln // cursor won't be at the end...n while normal_iter.here_ptr() != n as *const _ as *mut _ {n normal_iter.advance_node();n }n normal_iter.local_index = n.num_items as usize;n let node_iter = unsafe { self.iter_at_node(n, n.get_userlen(), n.num_items as usize) };n assert_eq!(normal_iter, node_iter);n }nn for entry in iter[0..self.head.height as usize].iter() {n // println!('{:?}', entry);n assert!(entry.node.is_null());n assert_eq!(entry.skip_usersize, num_usercount);n }n n // println!('self bytes: {}, count bytes {}', self.num_bytes, num_bytes);n assert_eq!(self.num_items, num_items);n assert_eq!(self.get_userlen(), num_usercount);n }n }n n n /// Internal function for creating a cursor at a particular location in then /// skiplist. The returned cursor contains list of nodes which point pastn /// the specified position, as well as offsets of how far into theirn /// character lists the specified characters are.n ///n /// Sometimes a call to iter_at_userpos is ambiguous:n ///n /// - The item can contain items with zero usersize. The cursor could pointn /// to any of them.n /// - If the location is at the end of a node, it is equally valid to returnn /// a position at the start of the next node.n ///n /// Because its impossible to move backwards in the list, iter_at_userposn /// returns the first admissible location with the specified userpos.n /// n /// Returns (cursor, offset into the specified item).n ///n /// TODO: This should be Pin<&self>.n fn iter_at_userpos(&self, target_userpos: usize) -> (Cursor, usize) {n assert!(target_userpos <= self.get_userlen());nn let mut e: *const Node = &self.head;n let mut height = self.head.height as usize - 1;n n let mut offset = target_userpos; // How many more items to skipnn // We're populating the head node pointer to simplify the case when then // iterator grows. We could put offset into the skip_usersize but itn // would only be *mostly* correct, not always correct. (Since cursorn // entries above height are not updated by insert.)n let mut cursor = Cursor {n entries: [SkipEntry {n node: &self.head as *const _ as *mut _,n skip_usersize: usize::MAXn }; MAX_HEIGHT],n local_index: 0,n userpos: target_userpos,n };nn loop { // while height >= 0n let en = unsafe { &*e };n let next = en.nexts()[height];n let skip = next.skip_usersize;n if offset > skip {n // Go right.n debug_assert!(e == &self.head || en.num_items > 0);n offset -= skip;n e = next.node;n assert!(!e.is_null(), 'Internal constraint violation: Reached rope end prematurely');n } else {n // Record this and go down.n cursor.entries[height] = SkipEntry {n skip_usersize: offset,n node: e as *mut Node, // This is pretty grossn };nn if height == 0 { break; } else { height -= 1; }n }n };nn // We should always land within the node we're pointing to.n debug_assert!(offset <= unsafe { &*cursor.here_ptr() }.get_userlen());nn // We've found the node. Now look for the index within the node.n let en = unsafe { &*e };n let mut index = 0;nn while offset > 0 {n assert!(index < en.num_items as usize);n n let usersize = C::get_usersize(unsafe { &*en.items[index].as_ptr() });n if usersize > offset { break; } // We're in the middle of an item.n offset -= usersize;n index += 1;n }n cursor.local_index = index;nn (cursor, offset)n }nn unsafe fn iter_at_node(&self, n: *const Node, mut offset: usize, local_index: usize) -> Cursor {n let mut n = n as *mut Node; // We don't mutate, but we need a mut ptr.nn let mut cursor = Cursor {n userpos: 0, // We'll set this later.n local_index: local_index,n entries: [SkipEntry {n node: &self.head as ''*const _ as *mut _,n skip_usersize: usize::MAXn }; MAX_HEIGHT],n };nn let mut h = 0;n loop {n while h < (*n).height as usize {n cursor.entries[h] = SkipEntry {n '' node: n,n skip_usersize: offsetn };nn h += 1;n }nn let parent = (*n).parent;n // Reached the head.n if parent.is_null() { break; }nn // If we're the same height as the parent its fine.n debug_assert!((*parent).height as usize > hn || (self.is_head(parent) && (*parent).height as usize == h));nn // Walk from parent back to n, figuring out the offset.n let mut c = parent;n // let walk_height = (*parent).height as usize - 2;n let walk_height = (*n).height as usize - 1;n while c != n {n let elem = (*c).nexts()[walk_height];n offset += elem.skip_usersize;n c = elem.node;n }nn n = parent;n }nn cursor.userpos = offset;n cursorn }nn pub fn iter_at_marker(&mut self, marker: ItemMarker, query: &::Query) -> Cursor where C::Item: Queryable {n // The marker gives us a pointer into a node. Find the item.n unsafe {n let n = marker.ptr;nn let mut offset: usize = 0;n let mut local_index = None;n for (i, item) in (*n).content_slice().iter().enumerate() {n if let Some(item_offset) = item.contains_item(query) {n offset += item_offset;n local_index = Some(i);n break;n } else {n offset += C::get_usersize(item);n }n }nn let local_index = local_index.expect('Invalid marker - item not found in node');n self.iter_at_node(n, offset, local_index)n }n }nn // Internal fn to create a new node at the specified iterator filled withn // the specified content. The passed cursor should point at the end of then // previous node. It will be updated to point to the end of the newlyn // inserted content.n // ''unsafe fn insert_node_at(&mut self, curs'>'''or: '// '&mut Cursor'''''''''''''''('!'g'b'd', contents: ''')'<''''&[C::Item], new_userlen: usize, move_cursor: bool) {n unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &mut I, num_items: usize, move_cursor: bool, notify: &mut Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: Iterator {nn // println!('Insert_node_at {} len {}', contents.len(), self.num_bytes);n // debug_assert_eq!(new_userlen, C::userlen_of_slice(contents));n assert!(num_items <= NODE_NUM_ITEMS);n debug_assert!(contents.size_hint().0 >= num_items);nn let new_node_ptr = Node::alloc(self.get_rng());n let new_node = &mut *new_node_ptr;n // let num_items = contents.len();n new_node.num_items = num_items as u8;nn for (slot, item) in new_node.items[..num_items].iter_mut().zip(contents) {n (slot.as_mut_ptr() as *mut C::Item).write(item); // Write makes sure we don't drop the old value.n }n // new_node.items[..contents.len()].copy_from_slice(contents);nn let new_userlen = C::userlen_of_slice(new_node.content_slice());nn let new_height = new_node.height;n let new_height_usize = new_height as usize;nn let mut head_height = self.head.height as usize;n while head_height < new_height_usize {n // This seems weird given we're about to overwrite these valuesn // below. What we're doing is retroactively setting up the cursorn // and head pointers *as if* the height had been this high alln // along. This way we only have to populate the higher head valuesn // l''azily.n let total_userlen = self.num_usercount;n let nexts = self.heads_mut();n nexts[head_height].skip_usersize = total_userlen;n cursor.entries[head_height].skip_usersize = cursor.userpos;nn head_height += 1; // This is ugly.n self.head.height += 1;n }nn new_node.parent = if new_height_usize == MAX_HEIGHT {n &self.head as *const _ as *mut _n } else { cursor.entries[new_height_usize].node };nn for i in 0..new_height_usize {n let prev_skip = &mut (*cursor.entries[i].node).nexts_mut()[i];n let new_nexts = new_node.nexts_mut();nn // The new node points to the successor (or null)n new_nexts[i] = SkipEntry {n node: prev_skip.node,n skip_usersize: new_userlen + prev_skip.skip_usersize - cursor.entries[i].skip_usersizen };nn // The previous node points to the new noden *prev_skip = SkipEntry {n node: new_node_ptr,n skip_usersize: cursor.entries[i].skip_usersizen };nn // Move the iterator to the end of the newly inserted node.n if move_cursor {n cursor.entries[i] = SkipEntry {n no''''''''''''''''''''''''''''''i' 'y'l'i'r'a's's'e'c'e'''n' 't'''n's'e'o'd' '''m'e't'I'''de: new_node_ptr,n skip_usersize: new_userlenn };n }n }nn for i in new_height_usize..head_height {n (*cursor.entries[i].node).nexts_mut()[i].skip_usersize += new_userlen;n if move_cursor ''{n cursor.entries[i].skip_usersize += new_userlen;n }n }nn // Update parents.n if new_height_usize > 1 {nn let mut n = new_node_ptr;n let mut skip_height = 0;nn loop {n n = (*n).nexts_mut()[skip_height].node;n if n.is_null() || (*n).height >= new_height { break; }n n (*n).parent = new_n''o''de_ptr;n skip_height = usize::max(skip_height, (*n).height as usize - 1);n }n }n n self.num_items += num_items;n self.num_usercount += new_userlen;n if move_cursor {n cursor.userpos += new_userlen;n cursor.local_index = num_items;n }nn notify(new_node.content_slice(), ItemMarker {n ptr: new_node_ptr,n _phantom: PhantomDatan });n }nn // unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item]) {n unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &mut I, notify: &mut Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: ExactSizeIterator {n // iter specifies where to insert.nn let mut e = cursor.here_ptr();nn // The insertion offset into the de''stination node.n assert!(cursor.userpos <= self.num_usercount);n assert!(cursor.local_index <= (*e).num_items as usize);nn '_''' // We might be able to insert the new data into the current node, depending onn // how big it is.n let num_inserted_items = contents.len();n // let num_inserted_usercount = C::userlen_of_slice(contents);nn // Can we insert into the current node?n let mut insert_here = (*e).num_items as usize + num_inserted_items <= NODE_NUM_ITEMS;nn // Can we insert into the start of the successor node?n if !insert_here && cursor.local_index == (*e).num_items as usize && num_inserted_items <= NODE_NUM_ITEMS {n // We can insert into the subsequent node'_' if:n // - We can't insert into the current noden // - There _is_ a next node to insert inton // - The insert would be at the start of the next noden // - There's room in the next noden if let Some(next) = (*e).first_skip_entry_mut().node.as_mut() {n if next.num_items as usize + num_inserted_items <= NODE_NUM_ITEMS {n cursor.advance_node();n e = next;nn insert_here = true;n }n }n }nn let item_idx = cursor.local_index;n let e_num_items = (*e).num_items as usize; // convenience.nn if insert_here {n // println!('insert_here {}', contents);n // First push the current items later in the arrayn let c = &mut (*e).items;n if item_idx < e_num_items {n // Can't use copy_within because we aren't sure if the typen // implements Copy. Memmove the existing items.n ptr::copy(n &c[item_idx],n &mut c[item_idx + num_inserted_items],n (*e).num_items as usize - item_idx);n // c[..].copy_within(item_idx..e_num_items,n // item_idx + num_inserted_items);n }nn // Then copy in the new items. Can't memcpy from an iterator, butn // the optimizer should make this fast.n let dest_content_slice = &mut c[item_idx..item_idx + num_inserted_items];n for (slot, item) in dest_content_slice.iter_mut().zip(contents) {n // Do not drop the old items - they w''ere only moved.n slot.as_mut_ptr().write(item);n }n let dest_content_slice = maybeinit_slice_get_ref(dest_content_slice);n // c[item_idx..item_idx + num_inserted_items].copy_from_slice(contents);nn (*e).num_items += num_inserted_items as u8;n self.num_items += num_inserted_items;n let num_inserted_usercount = C::userlen_of_slice(dest_content_slice);n self.num_usercount += num_inserted_usercount;nn // .... aaaand update all the offset amounts.n cursor.update_offsets(self.head.height as usize, num_inserted_usercount as isize);nn // Usually the cursor will be discarded after one change, but forn // consistency of compound edits we'll update the cursor to point ton // the end of the new content.n for entry in cursor.entries[0..self.head.height as usize].iter_mut() {n entry.skip_usersize += num_inserted_usercount;n }n cursor.userpos += num_inserted_usercount;n cursor.local_index += num_inserted_items;nn notify(dest_content_slice, ItemMarker {n ptr: e,n _phantom: PhantomDatan });n } else {n // There isn't room. We'll need to add at least one new node to then // list. We could be a bit more careful here and copy as much asn // possible into the current node - that would decrease the numbern // of new nodes in some cases, but I don't think the performancen // difference will be large enough to justify the complexity.nn // If we're not at the end of the current node, we'll need to removen // the end of the current node's data and reinsert it later.n let num_end_items = e_num_items - item_idx;nn let (end_items, end_usercount) = if num_end_items > 0 {n // We'll mark the items as deleted from the node, while leavingn // the data itself there for now to avoid a copy.nn // Note that if we wanted to, it would also be correct (andn // slightly more space efficient) to pack some of the newn // string's characters into this node after trimming it.n let end_items = &(*e).items[item_idx..e_num_items];n (*e).num_items = item_idx as u8;n let end_usercount = (*e).get_userlen() - cursor.entries[0].skip_usersize;nn cursor.update_offsets(self.head.height as usize, -(end_usercount as isize));nn // We need to trim the size off because we'll add the charactersn // back with insert_node_at.n self.num_usercount -= end_usercount;n self.num_items -= num_end_items;nn (Some(end_items), end_usercount)n } else {n (None,'' 0)n };nn // Now we insert new nodes containing the new character data. Then // data is broken into pieces with a maximum size of NODE_NUM_ITEMS.n // As further optimization, we could try and fit the last piece inton // the start of the subsequent node.n let mut items_remaining = num_inserted_items;n while items_remaining > 0 {n let insert_here = usize::min(items_remaining, NODE_NUM_ITEMS);n self.insert_node_at(cursor, contents, insert_here, true, notify);n items_remaining -= insert_here;n }n // for chunk in contents.take(NODE_NUM_ITEMS) {n // // let userlen = C::userlen_of'''''')'('n'e'l'.'_'''''''''s'm'e't'i'_'d'n'e'slice(chunk);n // self.insert_node_at(cursor, chunk, true, notify);n // }nn // TODO: Consider recursively calling insert_at_iter() here insteadn // of making a whole new node for the remaining content.n if let Some(end_items) = end_items {n // Passing false to indicate we don't want the cursor updatedn // after this - it should remain at the end of the newlyn // inserted content, which is *before* this end bit.n self.insert_node_at(cursor, &mut UninitOwnedIter::::from_slice(end_items), end_usercount, false, notify);n }n }n }nn // unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item]) {n // self.insert_at_iter_and_notify(cursor, contents, Self::no_notify);n // }nn /// Interestingly unlike the original, here we only care about specifyingn /// the number of removed items by counting them. We do not use usersize inn /// the deleted item count.n ///n /// If the deleted content occurs at the start of a node, the cursor passedn /// here must point to the end of the previous node, not the start of then /// current node.n '' unsafe fn del_at_iter(&mut self, cursor: &mut Cursor, mut num_deleted_items: usize) {n if num_deleted_items == 0 { return; }nn let mut item_idx = cursor.local_index;n let mut e = curso''r''.here_ptr();n while num_deleted_items > 0 {n // self.print();n // if cfg!(debug_assertions) { self.check(); }n if item_idx == (*e).num_items as usize {n let entry = (*e).first_skip_entry();n // End of current node. Skip to the start of the next one. We'ren // intentionally not updating the iterator because if we deleten // a whole node we need the iterator to point to the previousn // element. And if we only delete here, the iterator doesn'tn // need to be moved.n e = entry.node;n if e.is_null() { panic!('Cannot delete past the end of the list'); }n item_idx = 0;n }nn let e_num_items = (*e).num_items as usize;n let removed_here = min(num_deleted_items, e_num_items - item_idx);n n let height = (*e).height as usize'';n let removed_userlen;nn if removed_here < e_num_items || e as *const _ == &self.head as *const _ {n // Just trim the node down.n let trailing_items = e_num_items - item_idx - removed_here;n n let c = &mut (*e).items;n removed_userlen = C::userlen_of_slice(maybeinit_slice_get_ref(&c[item_idx..item_idx + removed_here]));n if trailing_items > 0 {n ptr::copy(n &c[item_idx + removed_here],n &mut c[item_idx],n trailing_items);n // c[..].copy_within(item_idx + removed_here..e_num_items, item_idx);n }nn (*e).num_items -= removed_here as u8;n self.num_items -= removed_here;n self.num_usercount -= removed_userlen;nn for s in (*e).nexts_mut() {n s.skip_usersize -= removed_userlen;n }n } else {n // Remove the node from the skip list entirely. e should be then // next node after the position of the iterator.n assert_ne!(cursor.here_pt''r(), e);nn 't''''<'''''I'<'t''''''<' ''''''e'c'i'l's'_'''''T'mu' 't'>'''''>'I'''''''>''I'T'''''''' 't'u'm''<' where I: ExactSizeIterator'' where C::Item: Copy''&[C::Item]'' removed_use'I'rlen = (*e).get_userlen();n' where I: ExactSizeIterator' '&[C::Item]' where C:'' }'n ':Item: Copy'n le''num_inserted_item' ''inserted_conten'.len();'t' insert'='s' num_inserted_ite't'''n pub fn replace_at(&mut self, mut start_userpos: usize, removed_item''''''' ''n ' if cfg!(debug_assertions) {n let (mut c2, _) = self.iter_at_userpos(userpos);n c2.advance_by_items(plus_items, self.head.height);n assert_eq!(cursor, &c2);n }n' 'n ' 's: usize, inserted''_content: &[C::Item'''n '''''''n'''mut '''um_inserted_ite''num_inserted_item''''''''insert''inserted_co'.iter().copied()'num_inserted_items'''n self'replace_at'start_userpos'(mut start_userpos: usize,'remov'iter().copied());'ed_items' removed_items: usize,'inserted_content.slic' mut inserted_content: I)'.repl'num_''nten''''''''';')'('n'e'l'.'t'''''''t'r'e's'n'i' '=' 's'''''''''''''''''e't'i'_'d'e't'r'e's'n'i'_'m'u'n' 't'e'l' ']) where C'''' ''''' '' 'n if cfg!(debug_assertions) {n let (mut c2, _) = self.'''''''n 'n pub fn replace_at_slice(&mut self, mut start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) where C::Item: Copy {n }' 'n ' '''i' ''''' '''n'ter_at_userpos(userpos);n 'inserted_content.len()''num_' c2.advance_by_items(plus_items, self.head.height);n assert_eq!(cursor, &c2);n }n'n'''''''' ''n ' if cfg!(debug_assertions) {n let (mut c2, _) = self.iter_at_userpos(userpos);n c2.advance_by_items(plus_items, self.head.height);n assert_eq!(cursor, &c2);n }n' 'n ' '::Item: Copy {''''n pub fn replace_at(&mut self, mut st'mut '''''art_userpos: usize, removed_''items: usize, inserted_content: &[C::Item]) wher'num_insert''ed_items'''n 'repl' '''''''mut start_userpos: usize'replace_at''''''removed_items: usize'''''''''s'''''''mut inserted_content: I'''''''''s'''''''''slic)'''''''''''''''''''''''''''';')')'('d'e'i'p'o'c'.')'('r'e't'i'''''c'i'l's'.'t'n'e't'n'o'c'_'d'e't'r'e's'n'i'm'e't'i'_'d'e'v'o'm'e'r'o'p'r'e's'u'_'t'r'a't's'(mut start_userpos: usize, removed_items: usize, mut inserted_content: I)'''''l'p'e'r'.'f'l'e's' ''''_'m'u'n'e C::Item: Copy {'' let next = (*e).firs'I't_skip_entr' where I: ExactSizeIterator'y().node;nn // println!('removing {:?} contents {:?} height {}', e, (*e).content_slice(), height);nn for i in 0..height {n let s = &mut (*cursor.entries[i].'''''''n 'n pub fn replace_at_slice(&mut self, mut start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) where C::Item: Copy {n }' 'n ' 'node).nexts_mu''t()[i];n s.node = (*e).nexts_mut()[i].node;n s.skip_usersize += (*e).nexts()[i].skip_usersize - removed_userlen;n }nn self.''n''um_items -= (*e).num_items as usize;n self.num_usercount -= removed_userlen;nn // Update parents.n if height > 1 {n let mut n = e;n // let new_parent = cursor.entrie''s[height - 1].node;nn // If you imagine this node as a big building, we need ton // update the parent of all the nodes we cast a shadow over.n // So, if our height is 3 and the next nodes have heights 1n // and 2, they both need new parents.n let mut parent_height = 1;n let cursor_node = cursor.here_ptr();n let cursor_node_height = (*cursor_node).height as usize;n let mut new_parent = if height >= cursor_node_height {n cursor.entries[parent_height].noden } else {n cursor_noden };nn loop {n // dbg!(skip_height);n // dbg!((*n).height as usize);nn n = (*n).nexts_mut()[parent_height - 1].node;n if n.is_null() || (*n).height >= height as u8 { break; }n let n_height = (*n).height as usize;nn '' // dbg!((*n).content_slice());n // dbg!((*n).height);n n assert_eq!((*n).parent, e);n assert!(n_height >= parent_heig'''' 't'u'm''''n'ht - 1)'''>'I'<';nn if n_heig'I'ht > p'''C::Item: Copy, '''ar'n '''''num_inserted_item'''''''''''''''''';')'('n'e'l'.'s't'n'e't'n'o'c' '=' 's'''''''''''t'r'e's'n'i'_'m'u'n' 't'e'l' 'ent_height ''' I: ExactSizeIterator' ','{n parent_height = n_height;n if n_height >= cursor_node_height {n new_parent = cursor.entries[parent_hei'num_inserted_items''num_''contents.len()''num_''num_inserted_items'''''_'m'u'n'ght].noden }n'contents' 'contents.iter().copied()'''''''''s't'n'e't'n'o'c' }n n (*n).parent = new_parent;n }n }nn Node::free(e);n e = next;n }nn for i in height..self.head.height as usize {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.skip_usersize -= removed_userlen;n }nn num_deleted_items -= removed_here;nn // if cfg!(debug_assertions) { self.check(); }n }n }nn // unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::I'contents'tem], mut notify: Notify)n 'contents.iter().copied()'// wher'num_inserted_items'e 's'N't'o'n't'e'num_''i't'f'contents.len()''n'y'o': FnMut(&[C::'num_'Item],'num_inserted_items' Item'_'M'm'''u'c'arker) {nn'n' unsafe fn replace_at_iter(&mut self, cursor: &mut Cursor, mut removed_items: usize, inserted_content: &mut I, mut notify: Notify)n where Notify: FnMut(&[C::Item], ItemMarker), I: ExactSizeIterator {n if removed_items == 0 && inserted_content.len() == 0 { return''; }nn // Replace as many items from removed_items as we ca' ''''''inser''''''''''''''''''''''''''''''''''';')')'('d'e'i'p'o'c'.')'('r'e't'i'.'s't'n'e't'n'o'c''''''' ','s'o'p'r'e's'u'('t'a'_'t''insert_at_iter(cursor: &mut Cursor, contents: &mut I, notify: &mut Notify)'''''''t'r'e's'n'i'.'f'l'e's' 'n with inserted_content.n let mut replaced_items = min(removed_items, inserted_content.len());n '''n 'pub fn insert_a''''''e'c'i'l's'_'t(&mut self, mut userpos: usize, contents: &[C::Item]) where '''''' ''' }''n 'n ' '{'''' ' 'C::Item: Copy' 'n ' 'removed_items -= replaced_items;nn while replaced_items > 0 {n debug_assert!(inserted_content.len() >= replaced_items);n let mut e = cursor.here_ptr();n if cursor.local_index == (*e).num_items as usize {n '' // Move to the next item.n e = cursor.advance_node();n if e.is''_null() { panic!('Cannot replace past the end of the list'); }n }nn let index = cursor.local_index;nn let e_num_items = (*e).num_items as usize;n let replaced_items_here = min(replaced_items, e_num_items - index);nn let dest = &mut (*e).items[index..index + replaced_items_here];n let old_usersize = C::userlen_of''_slice(maybeinit_slice_get_ref(dest));nn // Replace the items themselves. Everything else is commentary.n // Would prefer to use zip() but it wants ownership of inserted_content :/n for slot in dest.iter_mut() {n *slot.as_mut_ptr() = inserted_content.next().unwrap();n }n // for (slot, item) in dest.iter_mut().zip(inserted_content) {n // *slot.as_mut_ptr() = item; // Drop the replaced content.n // }nn let dest = maybeinit_slice_get_ref(dest);n let new_usersize = C::userlen_of_slice(dest);n let usersize_delta = new_usersize as isize - old_usersize as isize;nn // old_items.copy_from_slice(new_items);nn if usersize_delta != 0 {n cursor.update_offsets(self.head.height as usize, usersize_delta)n }n // I hate this.n self.num_usercount = self.num_usercount.wrapping_add(usersize_delta as usize);nn // inserted_content = &inserted_content[replaced_items_here..];n replaced_items -= replaced_items_here;n // We'll hop to the next Node at the start of the next loopn // iteration if needed.n cursor.local_index += replaced_items_here;nn for i in 0..self.head.height as usize {n cursor.entries[i].skip_usersize += new_usersize;n }n cursor.userpos += new_usersize;nn notify(dest, ItemMarker {n ptr: e,n _phantom: PhantomData,n });n }nn // Ok now one of two things must be true. Either we've run out ofn // items to remove, or we've run out of items to insert.n if inserted_content.len() > 0 {n // Insert!n debug_assert!(removed_items == 0);n self.insert_at_iter(cursor, inserted_content, &mut notify);n } else if removed_items > 0 {n self.del_at_iter(cursor, removed_items);n }n }nn fn dbg_check_cursor_at(&self, cursor: &Cursor, userpos: usize, plus_items: usize) {n if cfg!(debug_assertions) {n // let (mut c2, _) = self.iter_at_userpos(userpos);n let (mut c2, _) = self.iter_at_userpos(userpos);n c2.advance_by_items(plus_items, self.head.height);n assert_eq!(cursor, &c2);n }n }nn fn no_notify(_items: &[C::Item], _marker: ItemMarker) {}nn pub fn replace_at(&mut self, mut start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) where C::Item: Copy {n start_userpos = min(start_userpos, self.get_userlen());nn let (mut cursor, offset) = self.iter_at_userpos(start_userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.replace_at_iter(&mut cursor, removed_items, &mut inserted_content.iter().copied(), Self::no_notify); }nn if cfg!(debug_assertions) {n let (mut c2, _) = self.iter_at_userpos(start_userpos);n c2.advance_by_items(inserted_content.len(), self.head.height);n if &cursor != &c2 { panic!('Invalid cursor after replace'); }n }n }nn pub fn insert_at(&mut self, mut userpos: usize, contents: &[C::Item]) where C::Item: Copy {n if contents.len() == 0 { return; }n n userpos = min(userpos, self.get_userlen());n let (mut cursor, offset) = self.iter_at_userpos(userpos);nn unsafe {n if offset == 0 {n self.insert_at_iter(&mut cursor, &mut conten'n ''''''print(';''''''')'(')''''i'r'p'.'f'l'e's' 'ts.iter().copied(), &mut Self::no_notify);nn self.dbg'n 'self.print();' '_check_cursor_at(&cursor, userpos, contents.len());n } else {n let current_item = cursor.current_item();n let (start, end) = C::split_item(current_item, offset);n // Move the cursor back to the start of the item we'ren // splitting.n cursor.move_to_item_start(self.head.height, offset);n 'n 'self.print();' ' // This feels pretty inefficient; but its probably fine.n self.replace_at_iter(&mut cursor, 1, &mut iter::once(start), &mut Self::no_notify);n self.insert_at_iter(&mut cursor, &mut contents.iter().copied(), &mut Self::no_notify);nn // There's no clean way to keep the cursor steady for the finaln // insert. We'll just make sure the cursor is in the rightn // position before that call for now.n self.dbg_check_cursor_at(&cursor, userpos, contents.len());nn self.insert_at_iter(&mut cursor, &mut iter::once(end), &mut Self::no_notify);n }n }nn }nn pub fn del_at(&mut self, mut userpos: usize, num_items: usize) {n userpos = min(userpos, self.get_userlen());n // We can't easily trim num_items.n // num_items = min(length, self.num_chars() - pos);n if num_items == 0 { return; }nn let (mut cursor, offset) = self.iter_at_userpos(userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.del_at_iter(&mut cursor, num_items); }nn if cfg!(debug_assertions) {n let (c2, _) = self.iter_at_userpos(userpos);n if &cursor != &c2 { panic!('Invalid cursor after delete'); }n }n }n}nnnimpl SkipList where C::Item: PartialEq {n pub fn eq_list(&self, other: &[C::Item]) -> bool {n let mut pos = 0;n let other_len = other.len();nn for node in self.iter() {n let my_data = node.content_slice();n let my_len = my_data.len();nn if pos + my_len > other_len || my_data != &other[pos..pos + my_data.len()] {n return falsen }n pos += my_data.len();n }nn return pos == other_len;n }n}nnimpl Drop for SkipList {n fn drop(&mut self) {n let mut node = self.head.first_skip_entry().node;n unsafe {n while !node.is_null() {n let next = (*node).first_skip_entry().node;n Node::free(node);n node = next;n }n }n }n}nnnimpl From<&[C::Item]> for SkipList where C::Item: Copy {n fn from(s: &[C::Item]) -> SkipList {n SkipList::new_from_slice(s)n }n}nn// TODO: Remove Item: Copy constraint here.nimpl From> for SkipList where C::Item: Copy {n fn from(s: Vec) -> SkipList {n SkipList::new_from_slice(s.as_slice())n }n}nnimpl Into> for &SkipList where C::Item: Copy {n fn into(self) -> Vec {n let mut content: Vec = Vec::with_capacity(self.num_items);n''use std::alloc::{alloc, dealloc, Layout};nuse std::cmp::min;nuse std::marker::PhantomData;nnuse std::fmt;nnuse rand::{RngCore, Rng, SeedableRng};nuse rand::rngs::SmallRng;nn/// The likelyhood a node will have height (n+1) instead of nnconst BIAS: u8 = 100; // out of 256.nn/// The number of items in each node. Must fit in a u8 thanks to Node.n#[cfg(debug_assertions)]nconst NODE_NUM_ITEMS: usize = 10;nn#[cfg(not(debug_assertions))]nconst NODE_NUM_ITEMS: usize = 100;nn/// Rope operations will move to linear time after NODE_STR_SIZE * 2 ^n/// MAX_HEIGHT length. (With a smaller constant the higher this is). On the flipn/// side, cursors grow linearly with this number; so smaller is marginallyn/// better when the contents are smaller.n#[cfg(debug_assertions)]nconst MAX_HEIGHT: usize = 5;nn#[cfg(not(debug_assertions))]nconst MAX_HEIGHT: usize = 10;nnnconst MAX_HEIGHT_U8: u8 = MAX_HEIGHT as u8; // convenience.nnpub struct ItemMarker<'a, C: ListConfig> {n ptr: *mut Node,n _phantom: PhantomData<&'a SkipList>n}nn/// The whole list is configured through a single generic trait parameternpub trait ListConfig {n type Item: Default + Copy; //+ std::fmt::Debug;nn /// Applications which have custom sizes (or do their ownn /// run-length-encoding) can define their own size function for items. Whenn /// items are inserted or replaced, the position is specified using then /// custom size defined here.n fn get_usersize(_item: &Self::Item) -> usize { 1 }nn fn userlen_of_slice(items: &[Self::Item]) -> usize {n items.iter().fold(0, |acc, item| {n acc + Self::get_usersize(item)n })n }nn fn split_item(_item: &Self::Item, _at: usize) -> (Self::Item, Self::Item) {n unimplemented!('Cannot insert in the middle of an item - split_item is not defined in trait');n }nn // fn notify(&mut self, _items: &[Self::Item], _at_marker: ItemMarker) where Self: Sized {n // }n n}nnpub trait Queryable {n type Query;nn // Returns Some(offset) into the item if its contained. Otherwise None.n fn contains_item(&self, query: &Self::Query) -> Option;n}nn/// This represents a single entry in either the nexts pointers list or in ann/// iterator.n#[derive(Debug, PartialEq, Eq)]nstruct SkipEntry {n /// The node being pointed to.n node: *mut Node,nn /// The number of *items* between the start of the current node and then /// start of the next node. That means nexts entry 0 contains the length ofn /// the current node.n skip_usersize: usize,n}nn// We can't use #[derive()] here for Copy and Clone due to a bug in the rustn// compiler: https://github.com/rust-lang/rust/issues/26925nimpl Copy for SkipEntry {}nimpl Clone for SkipEntry {n fn clone(&self) -> Self { *self }n}nnimpl SkipEntry {n fn new_null() -> Self {n SkipEntry { node: ptr::null_mut(), skip_usersize: 0 }n }n}nnnn/// The node structure is designed in a very fancy way which would be more atn/// home in C or something like that. The basic idea is that the node structuren/// is fixed size in memory, but the proportion of that space taken up byn/// characters and by the height differ depending on a node's height. Thisn/// results in a lot of `unsafe` blocks. I think the tradeoff is worth it but In/// could be wrong here. You probably wouldn't lose much performance in practicen/// by replacing the inline structure with a smallvec - but that would wasten/// memory in small nodes, and require extra pointer indirection on large nodes.n/// It also wouldn't remove all the unsafe here.n///n/// A different representation (which might be better or worse - I can't tell)n/// would be to have the nodes all be the same size in memory and change then/// *proportion* of the node's memory that is used by the string field vs then/// next pointers. That might be lighter weight for the allocator because then/// struct itself would be a fixed size; but I'm not sure if it would be better.n#[repr(C)] // Prevent parameter reordering.nstruct Node {n /// We start with the items themselves. Only the first `num_items` of thisn /// list is in use. The user specified length of the items in the node isn /// stored in nexts[0].skip_items. This is initialized withn /// Default::default() for the type, but when MaybeUninit completely lands,n /// it will be possible to make this a tiny bit faster by leaving the listn /// initially uninitialized.n items: [C::Item; NODE_NUM_ITEMS],nn /// Number of items in `items` in use / filled.n num_items: u8,nn /// Height of nexts array.n height: u8,nn /// With the heads array as is, we have no way to go from a marker back to an /// cursor (which is required to insert at that location in the list). Forn /// that we need to be able to figure out at each level of the nextsn /// pointers which object points to us, and the offset from that element ton /// the current element. Anyway, for markers to work we need this.n parent: *mut Node,nn // #[repr(align(std::align_of::()))]n n /// In reality this array has the size of height, allocated using more orn /// less direct calls to malloc() at runtime based on the randomly generatedn /// size. The size is always at least 1.n nexts: [SkipEntry; 0],n}nn// Make sure nexts uses correct alignment. This should be guaranteed by repr(C)n// This test will fail if this ever stops being true.n#[test]nfn test_align() {n struct TestConfig;n impl ListConfig for TestConfig {n type Item = u8;n fn get_usersize(_item: &Self::Item) -> usize { 1 }n }n #[repr(C)] struct Check([SkipEntry; 0]);n assert!(mem::align_of::() >= mem::align_of::>());n // TODO: It'd be good to also check the alignment of the nexts field in Node.n}nnfn random_height(rng: &mut R) -> u8 {n let mut h: u8 = 1;n // Should I use a csrng here? Does it matter?n while h < MAX_HEIGHT_U8 && rng.gen::() < BIAS { h+=1; }n hn}nn#[repr(C)]npub struct SkipList {n // TODO: Consider putting the head item on the heap. For the use case heren // its almost certainly fine either way. The code feels a bit cleaner if itsn // on the heap (and then iterators will be able to outlast a move of then // skiplist parent). But its also very nice having the code run fast forn // small lists. Most lists are small, and it makes sense to optimize forn // that.nn // TODO: For safety, pointers in to this structure should be Pin<> if wen // ever want to hold on to iterators.nn /// The total number of items in the skip list. This is not used internally -n /// just here for bookkeeping.n num_items: usize,n /// Size of the list in user specified units.n num_usercount: usize,nn /// The RNG we use to generate node heights. Specifying it explicitly allowsn /// unit tests and randomizer runs to be predictable, which is very helpfuln /// during debugging. I'm still not sure how the type of this should ben /// specified. Should it be a generic parameter? Box?n /// ??n rng: Option,nn /// The first node is inline. The height is 1 more than the max height we'ven /// ever used. The highest next entry points to {null, total usersize}.n head: Node,nn /// This is so dirty. The first node is embedded in SkipList; but we need ton /// allocate enough room for height to get arbitrarily large. I could insistn /// on SkipList always getting allocated on the heap, but for small lists itsn /// much better to be on the stack.n ///n /// So this struct is repr(C) and I'm just padding out the struct directly.n /// All accesses should go through head because otherwise I think we violaten /// aliasing rules.n _nexts_padding: [SkipEntry; MAX_HEIGHT],n}nnnnimpl Node {n // Do I need to be explicit about the lifetime of the references being tiedn // to the lifetime of the node?n fn nexts(&self) -> &[SkipEntry] {n unsafe {n std::slice::from_raw_parts(self.nexts.as_ptr(), self.height as usize)n }n }nn fn nexts_mut(&mut self) -> &mut [SkipEntry] {n unsafe {n std::slice::from_raw_parts_mut(self.nexts.as_mut_ptr(), self.height as usize)n }n }nn fn layout_with_height(height: u8) -> Layout {n Layout::from_size_align(n mem::size_of::>() + mem::size_of::>() * (height as usize),n mem::align_of::>()).unwrap()n }nn fn alloc_with_height(height: u8) -> *mut Node {n assert!(height >= 1 && height <= MAX_HEIGHT_U8);nn unsafe {n let node = alloc(Self::layout_with_height(height)) as *mut Node;n (*node) = Node {n items: [C::Item::default(); NODE_NUM_ITEMS],n num_items: 0,n height: height,n parent: ptr::null_mut(),n nexts: [],n };nn for next in (*node).nexts_mut() {n *next = SkipEntry::new_null();n }nn noden }n }nn fn alloc(rng: &mut R) -> *mut Node {n Self::alloc_with_height(random_height(rng))n }nn unsafe fn free(p: *mut Node) {n dealloc(p as *mut u8, Self::layout_with_height((*p).height));n }nn fn content_slice(&self) -> &[C::Item] {n &self.items[..self.num_items as usize]n }nn // The height is at least 1, so this is always valid.n fn first_skip_entry<'a>(&self) -> &'a SkipEntry {n unsafe { &*self.nexts.as_ptr() }n }nn fn first_skip_entry_mut<'a>(&mut self) -> &'a mut SkipEntry {n unsafe { &mut *self.nexts.as_mut_ptr() }n }nn // TODO: Rename to len() ?n fn get_userlen(&self) -> usize {n self.first_skip_entry().skip_usersizen }n n fn get_next_ptr(&self) -> *mut Node {n self.first_skip_entry().noden }n}nnstruct NodeIter<'a, C: ListConfig>(Option<&'a Node>);nimpl<'a, C: ListConfig> Iterator for NodeIter<'a, C> {n type Item = &'a Node;nn fn next(&mut self) -> Option<&'a Node> {n let prev = self.0;n if let Some(n) = self.0 {n *self = NodeIter(unsafe { n.first_skip_entry().node.as_ref() });n }n prevn }n}nn/// This is a set of pointers with metadata into a location in the list neededn/// to skip ahead, delete and insert in items. A cursor is reasonably heavyn/// weight - we fill in and maintain as many entries as the height of the listn/// dictates.n///n/// This is not needed for simply iterating sequentially through nodes and data.n/// For that look at NodeIter.n///n/// Note most/all methods using cursors are unsafe. This is because cursors usen/// raw mutable pointers into the list, so when used the following rules have ton/// be followed:n///n/// - Whenever a write happens (insert/remove/replace), any cursor not passed ton/// the write function is invalid.n/// - While a cursor is held the SkipList struct should be considered pinned andn/// must not be moved or deletedn#[derive(Copy, Clone)]npub struct Cursor {n // TODO: Add a phantom lifetime reference to the skip list root for safety.nnn /// The global user position of the cursor in the entire list. This is usedn /// for when the max seen height increases, so we can populate previouslyn /// unused entries in the cursor and in the head node.n ///n /// This field isn't strictly necessary - earlier versions tacked this on ton /// the last item in entries... I'm still not sure the cleanest way to don /// this.n userpos: usize,nn /// When the userpos of an entry is 0 (totally valid and useful), a cursorn /// becomes ambiguous with regard to where exactly its pointing in then /// current entry. This is used to resolve that ambiguity.n local_index: usize,nn entries: [SkipEntry; MAX_HEIGHT],n}nnimpl Cursor {n fn update_offsets(&mut self, height: usize, by: isize) {n for i in 0..height {n unsafe {n // This is weird but makes sense when you realise the nexts inn // the cursor are pointers into the elements that have then // actual pointers.n // Also adding a usize + isize is awful in rust :/n let skip = &mut (*self.entries[i].node).nexts_mut()[i].skip_usersize;n *skip = skip.wrapping_add(by as usize);n }n }n }nn /// Move a cursor to the start of the next node. Returns the new node (or an /// nullptr if this is the end of the list).n fn advance_node(&mut self) -> *mut Node {n unsafe {n let SkipEntry { node: e, skip_usersize: offset } = self.entries[0];n // offset tells us how far into the current element we are (inn // usersize). We need to increment the offsets by the entry'sn // remaining length to get to the start of the next node.n let advance_by = (*e).get_userlen() - offset;n let next = (*e).get_next_ptr();n let height = (*next).height as usize;nn for i in 0..height {n self.entries[i] = SkipEntry {n node: next,n skip_usersize: 0n };n }nn for i in height..self.entries.len() {n self.entries[i].skip_usersize += advance_by;n }nn self.userpos += advance_by;n self.local_index = 0;nn nextn }n }nn fn is_at_node_end(&self) -> bool {n self.local_index == unsafe { (*self.here_ptr()).num_items } as usizen }nn fn advance_item(&mut self, height: u8) {n if self.is_at_node_end() { self.advance_node(); }n let usersize = C::get_usersize(unsafe { self.current_item() });nn for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize += usersize;n }n self.userpos += usersize;n self.local_index += 1;n }nn fn advance_by_items(&mut self, num: usize, height: u8) {n for _ in 0..num { self.advance_item(height); }n }nn fn move_to_item_start(&mut self, height: u8, offset: usize) {n for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize -= offset;n }n self.userpos -= offset;n }nn unsafe fn current_item(&mut self) -> &C::Item {n &(*self.here_ptr()).items[self.local_index]n }nn /// Get the pointer to the cursor's current noden fn here_ptr(&self) -> *mut Node {n self.entries[0].noden }n}nnimpl PartialEq for Cursor {n /// Warning: This returns false if one cursor is at the end of a node, andn /// the other at the start of the next node. Almost all code in this libraryn /// leaves cursors at the end of nodes, so this shouldn't matter too much inn /// practice.n fn eq(&self, other: &Self) -> bool {n if self.userpos != other.userposn || self.local_index != other.local_index {return false; }nn for i in 0..MAX_HEIGHT {n let a = &self.entries[i];n let b = &other.entries[i];n if a.node != b.node || a.skip_usersize != b.skip_usersize { return false; }n }n truen }n}nimpl Eq for Cursor {}nnimpl fmt::Debug for Cursor {n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {n f.debug_struct('Cursor')n .field('userpos', &self.userpos)n .field('local_index', &self.local_index)n .finish()n }n}nnimpl SkipList {n pub fn new() -> Self {n SkipList:: {n num_items: 0,n num_usercount: 0,n rng: None,n head: Node {n items: [C::Item::default(); NODE_NUM_ITEMS],n num_items: 0,n height: 1, // Stores max height of list nodesn parent: ptr::null_mut(),n nexts: [],n },n _nexts_padding: [SkipEntry::new_null(); MAX_HEIGHT],n }n }nn pub fn init_rng_from_seed(&mut self, seed: u64) {n self.rng = Some(SmallRng::seed_from_u64(seed));n }nn fn get_rng(&mut self) -> &mut SmallRng {n // I'm sure there's a nicer way to implement this.n if self.rng.is_none() {n // We'll use a stable RNG in debug mode so the tests are stable.n if cfg!(debug_assertions) {n self.init_rng_from_seed(123);n } else {n self.rng = Some(SmallRng::from_entropy());n }n }n self.rng.as_mut().unwrap()n }nn pub fn new_from_slice(s: &[C::Item]) -> Self {n let mut rope = Self::new();n rope.insert_at(0, s);n ropen }nn pub fn get_userlen(&self) -> usize {n self.num_usercountn }nn fn iter(&self) -> NodeIter { NodeIter(Some(&self.head)) }n n pub fn len_items(&self) -> usize {n self.num_items as usizen }nn fn heads_mut(&mut self) -> &mut [SkipEntry] {n unsafe {n std::slice::from_raw_parts_mut(self.head.nexts.as_mut_ptr(), self._nexts_padding.len())n }n }nn fn is_head(&self, node: *const Node) -> bool {n node as *const _ == &self.head as *const _n }nn /// Walk the list and validate internal constraints. This is used forn /// testing the structure itself, and should generally not be called byn /// users.n pub fn check(&self) {n // #[cfg(test)]n {n // self.print();n assert!(self.head.height >= 1);n assert!(self.head.height <= MAX_HEIGHT_U8);nn let head_ptr = &self.head as *const _ as *mut _;n // let skip_over = self.get_top_entry();n // println!('Skip over skip chars {}, num bytes {}', skip_over.skip_items, self.num_bytes);nn let mut prev: [*const Node; MAX_HEIGHT] = [ptr::null(); MAX_HEIGHT];nn let mut iter = [SkipEntry {n // Bleh.n node: head_ptr,n // The skips will store the total distance travelled since then // start of this traversal at each height. All the entries aboven // head.height are ignored though.n skip_usersize: 0n }; MAX_HEIGHT];nn let mut num_items = 0;n let mut num_usercount = 0;nn for (_i, n) in self.iter().enumerate() {n // println!('visiting {:?}', n.as_str());n if !self.is_head(n) { assert!(n.num_items > 0); }n assert!(n.height <= MAX_HEIGHT_U8);n assert!(n.num_items as usize <= NODE_NUM_ITEMS);nn // Make sure the number of items matches the countn let local_count = C::userlen_of_slice(&n.items[0..n.num_items as usize]);n assert_eq!(local_count, n.get_userlen());nn let expect_parent = if self.is_head(n) {n ptr::null() // The head's parent is nulln } else if n.height == self.head.height {n &self.head as *const _ // Max height nodes point back to headn } else {n prev[n.height as usize]n };nn // println!('visiting {} {:?}', i, n as *const _);n // dbg!(n as *const _);n // dbg!((n as *const _, (*n).height));n // dbg!(n.parent);n // dbg!(&self.head as *const _);nn assert_eq!(n.parent as *const _, expect_parent, 'invalid parent');n n for (i, entry) in iter[0..n.height as usize].iter_mut().enumerate() {n assert_eq!(entry.node as *const _, n as *const _);n assert_eq!(entry.skip_usersize, num_usercount);nn // println!('replacing entry {:?} with {:?}', entry, n.nexts()[i].node);n prev[i] = n;n entry.node = n.nexts()[i].node;n entry.skip_usersize += n.nexts()[i].skip_usersize;n }nn num_items += n.num_items as usize;n num_usercount += n.get_userlen();nn // Check the value returned by the iterator functions matches.n let (mut normal_iter, local_offset) = self.iter_at_userpos(num_usercount);n assert_eq!(local_offset, 0);nn // Dirty hack. If n has 0-sized elements at the end, the normaln // cursor won't be at the end...n while normal_iter.here_ptr() != n as *const _ as *mut _ {n normal_iter.advance_node();n }n normal_iter.local_index = n.num_items as usize;n let node_iter = unsafe { self.iter_at_node(n, n.get_userlen(), n.num_items as usize) };n assert_eq!(normal_iter, node_iter);n }nn for entry in iter[0..self.head.height as usize].iter() {n // println!('{:?}', entry);n assert!(entry.node.is_null());n assert_eq!(entry.skip_usersize, num_usercount);n }n n // println!('self bytes: {}, count bytes {}', self.num_bytes, num_bytes);n assert_eq!(self.num_items, num_items);n assert_eq!(self.get_userlen(), num_usercount);n }n }n n n /// Internal function for creating a cursor at a particular location in then /// skiplist. The returned cursor contains list of nodes which point pastn /// the specified position, as well as offsets of how far into theirn /// character lists the specified characters are.n ///n /// Sometimes a call to iter_at_userpos is ambiguous:n ///n /// - The item can contain items with zero usersize. The cursor could pointn /// to any of them.n /// - If the location is at the end of a node, it is equally valid to returnn /// a position at the start of the next node.n ///n /// Because its impossible to move backwards in the list, iter_at_userposn /// returns the first admissible location with the specified userpos.n /// n /// Returns (cursor, offset into the specified item).n ///n /// TODO: This should be Pin<&self>.n fn iter_at_userpos(&self, target_userpos: usize) -> (Cursor, usize) {n assert!(target_userpos <= self.get_userlen());nn let mut e: *const Node = &self.head;n let mut height = self.head.height as usize - 1;n n let mut offset = target_userpos; // How many more items to skipnn // We're populating the head node pointer to simplify the case when then // iterator grows. We could put offset into the skip_usersize but itn // would only be *mostly* correct, not always correct. (Since cursorn // entries above height are not updated by insert.)n let mut cursor = Cursor {n entries: [SkipEntry {n node: &self.head as *const _ as *mut _,n skip_usersize: usize::MAXn }; MAX_HEIGHT],n local_index: 0,n userpos: target_userpos,n };nn loop { // while height >= 0n let en = unsafe { &*e };n let next = en.nexts()[height];n let skip = next.skip_usersize;n if offset > skip {n // Go right.n debug_assert!(e == &self.head || en.num_items > 0);n offset -= skip;n e = next.node;n assert!(!e.is_null(), 'Internal constraint violation: Reached rope end prematurely');n } else {n // Record this and go down.n cursor.entries[height] = SkipEntry {n skip_usersize: offset,n node: e as *mut Node, // This is pretty grossn };nn if height == 0 { break; } else { height -= 1; }n }n };nn // We should always land within the node we're pointing to.n debug_assert!(offset <= unsafe { &*cursor.here_ptr() }.get_userlen());nn // We've found the node. Now look for the index within the node.n let en = unsafe { &*e };n let mut index = 0;nn while offset > 0 {n assert!(index < en.num_items as usize);n n let usersize = C::get_usersize(&en.items[index]);n if usersize > offset { break; } // We're in the middle of an item.n offset -= usersize;n index += 1;n }n cursor.local_index = index;nn (cursor, offset)n }nn unsafe fn iter_at_node(&self, n: *const Node, mut offset: usize, local_index: usize) -> Cursor {n let mut n = n as *mut Node; // We don't mutate, but we need a mut ptr.nn let mut cursor = Cursor {n userpos: 0, // We'll set this later.n local_index: local_index,n entries: [SkipEntry {n node: &self.head as *const _ as *mut _,n skip_usersize: usize::MAXn }; MAX_HEIGHT],n };nn let mut h = 0;n loop {n while h < (*n).height as usize {n cursor.entries[h] = SkipEntry {n node: n,n skip_usersize: offsetn };nn h += 1;n }nn let parent = (*n).parent;n // Reached the head.n if parent.is_null() { break; }nn // If we're the same height as the parent its fine.n debug_assert!((*parent).height as usize > hn || (self.is_head(parent) && (*parent).height as usize == h));nn // Walk from parent back to n, figuring out the offset.n let mut c = parent;n // let walk_height = (*parent).height as usize - 2;n let walk_height = (*n).height as usize - 1;n while c != n {n let elem = (*c).nexts()[walk_height];n offset += elem.skip_usersize;n c = elem.node;n }nn n = parent;n }nn cursor.userpos = offset;n cursorn }nn pub fn iter_at_marker(&mut self, marker: ItemMarker, query: &::Query) -> Cursor where C::Item: Queryable {n // The marker gives us a pointer into a node. Find the item.n unsafe {n let n = marker.ptr;nn let mut offset: usize = 0;n let mut local_index = None;n for (i, item) in (*n).content_slice().iter().enumerate() {n if let Some(item_offset) = item.contains_item(query) {n offset += item_offset;n local_index = Some(i);n break;n } else {n offset += C::get_usersize(item);n }n }nn let local_index = local_index.expect('Invalid marker - item not found in node');n self.iter_at_node(n, offset, local_index)n }n }nn // Internal fn to create a new node at the specified iterator filled withn // the specified content. The passed cursor should point at the end of then // previous node. It will be updated to point to the end of the newlyn // inserted content.n // unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &[C::Item], new_userlen: usize, move_cursor: bool) {n unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &[C::Item], new_userlen: usize, move_cursor: bool, notify: &mut Notify)n where Notify: FnMut(&[C::Item], ItemMarker) {nn // println!('Insert_node_at {} len {}', contents.len(), self.num_bytes);n debug_assert_eq!(new_userlen, C::userlen_of_slice(contents));n assert!(contents.len() <= NODE_NUM_ITEMS);nn let new_node_ptr = Node::alloc(self.get_rng());n let new_node = &mut *new_node_ptr;n new_node.num_items = contents.len() as u8;n new_node.items[..contents.len()].copy_from_slice(contents);nn let new_height = new_node.height;n let new_height_usize = new_height as usize;nn let mut head_height = self.head.height as usize;n while head_height < new_height_usize {n // This seems weird given we're about to overwrite these valuesn // below. What we're doing is retroactively setting up the cursorn // and head pointers *as if* the height had been this high alln // along. This way we only have to populate the higher head valuesn // lazily.n let total_userlen = self.num_usercount;n let nexts = self.heads_mut();n nexts[head_height].skip_usersize = total_userlen;n cursor.entries[head_height].skip_usersize = cursor.userpos;nn head_height += 1; // This is ugly.n self.head.height += 1;n }nn new_node.parent = if new_height_usize == MAX_HEIGHT {n &self.head as *const _ as *mut _n } else { cursor.entries[new_height_usize].node };nn for i in 0..new_height_usize {n let prev_skip = &mut (*cursor.entries[i].node).nexts_mut()[i];n let new_nexts = new_node.nexts_mut();nn // The new node points to the successor (or null)n new_nexts[i] = SkipEntry {n node: prev_skip.node,n skip_usersize: new_userlen + prev_skip.skip_usersize - cursor.entries[i].skip_usersizen };nn // The previous node points to the new noden *prev_skip = SkipEntry {n node: new_node_ptr,n skip_usersize: cursor.entries[i].skip_usersizen };nn // Move the iterator to the end of the newly inserted node.n if move_cursor {n cursor.entries[i] = SkipEntry {n node: new_node_ptr,n skip_usersize: new_userlenn };n }n }nn for i in new_height_usize..head_height {n (*cursor.entries[i].node).nexts_mut()[i].skip_usersize += new_userlen;n if move_cursor {n cursor.entries[i].skip_usersize += new_userlen;n }n }nn // Update parents.n if new_height_usize > 1 {nn let mut n = new_node_ptr;n let mut skip_height = 0;nn loop {n n = (*n).nexts_mut()[skip_height].node;n if n.is_null() || (*n).height >= new_height { break; }n n (*n).parent = new_node_ptr;n skip_height = usize::max(skip_height, (*n).height as usize - 1);n }n }n n self.num_items += contents.len();n self.num_usercount += new_userlen;n if move_cursor {n cursor.userpos += new_userlen;n cursor.local_index = contents.len();n }nn notify(contents, ItemMarker {n ptr: new_node_ptr,n _phantom: PhantomDatan });n }nn // unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item]) {n unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item], notify: &mut Notify)n where Notify: FnMut(&[C::Item], ItemMarker) {n // iter specifies where to insert.nn let mut e = cursor.here_ptr();nn // The insertion offset into the destination node.n assert!(cursor.userpos <= self.num_usercount);n assert!(cursor.local_index <= (*e).num_items as usize);nn // We might be able to insert the new data into the current node, depending onn // how big it is.n let num_inserted_items = contents.len();n let num_inserted_usercount = C::userlen_of_slice(contents);nn // Can we insert into the current node?n let mut insert_here = (*e).num_items as usize + num_inserted_items <= NODE_NUM_ITEMS;nn // Can we insert into the start of the successor node?n if !insert_here && cursor.local_index == (*e).num_items as usize && num_inserted_items <= NODE_NUM_ITEMS {n // We can insert into the subsequent node if:n // - We can't insert into the current noden // - There _is_ a next node to insert inton // - The insert would be at the start of the next noden // - There's room in the next noden if let Some(next) = (*e).first_skip_entry_mut().node.as_mut() {n if next.num_items as usize + num_inserted_items <= NODE_NUM_ITEMS {n cursor.advance_node();n e = next;nn insert_here = true;n }n }n }nn let item_idx = cursor.local_index;n let e_num_items = (*e).num_items as usize; // convenience.nn if insert_here {n // println!('insert_here {}', contents);n // First push the current items later in the arrayn let c = &mut (*e).items;n if item_idx < e_num_items {n c[..].copy_within(item_idx..e_num_items,n item_idx + num_inserted_items);n }nn // Then copy in the new itemsn c[item_idx..item_idx + num_inserted_items].copy_from_slice(contents);nn (*e).num_items += num_inserted_items as u8;n self.num_items += num_inserted_items;n self.num_usercount += num_inserted_usercount;nn // .... aaaand update all the offset amounts.n cursor.update_offsets(self.head.height as usize, num_inserted_usercount as isize);nn // Usually the cursor will be discarded after one change, but forn // consistency of compound edits we'll update the cursor to point ton // the end of the new content.n for entry in cursor.entries[0..self.head.height as usize].iter_mut() {n entry.skip_usersize += num_inserted_usercount;n }n cursor.userpos += num_inserted_usercount;n cursor.local_index += num_inserted_items;nn notify(contents, ItemMarker {n ptr: e,n _phantom: PhantomDatan });n } else {n // There isn't room. We'll need to add at least one new node to then // list. We could be a bit more careful here and copy as much asn // possible into the current node - that would decrease the numbern // of new nodes in some cases, but I don't think the performancen // difference will be large enough to justify the complexity.nn // If we're not at the end of the current node, we'll need to removen // the end of the current node's data and reinsert it later.n let num_end_items = e_num_items - item_idx;nn let (end_items, end_usercount) = if num_end_items > 0 {n // We'll mark the items as deleted from the node, while leavingn // the data itself there for now to avoid a copy.nn // Note that if we wanted to, it would also be correct (andn // slightly more space efficient) to pack some of the newn // string's characters into this node after trimming it.n let end_items = &(*e).items[item_idx..e_num_items];n (*e).num_items = item_idx as u8;n let end_usercount = (*e).get_userlen() - cursor.entries[0].skip_usersize;nn cursor.update_offsets(self.head.height as usize, -(end_usercount as isize));nn // We need to trim the size off because we'll add the charactersn // back with insert_node_at.n self.num_usercount -= end_usercount;n self.num_items -= num_end_items;nn (Some(end_items), end_usercount)n } else {n (None, 0)n };nn // Now we insert new nodes containing the new character data. Then // data is broken into pieces with a maximum size of NODE_NUM_ITEMS.n // As further optimization, we could try and fit the last piece inton // the start of the subsequent node. That optimization hasn't beenn // added.n n for chunk in contents.chunks(NODE_NUM_ITEMS) {n let userlen = C::userlen_of_slice(chunk);n self.insert_node_at(cursor, chunk, userlen, true, notify);n }nn // TODO: Consider recursively calling insert_at_iter() here insteadn // of making a whole new node for the remaining content.n if let Some(end_items) = end_items {n // Passing false to indicate we don't want the cursor updatedn // after this - it should remain at the end of the newlyn // inserted content, which is *before* this end bit.n self.insert_node_at(cursor, end_items, end_usercount, false, notify);n }n }n }nn // unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item]) {n // self.insert_at_iter_and_notify(cursor, contents, Self::no_notify);n // }nn /// Interestingly unlike the original, here we only care about specifyingn /// the number of removed items by counting them. We do not use usersize inn /// the deleted item count.n ///n /// If the deleted content occurs at the start of a node, the cursor passedn /// here must point to the end of the previous node, not the start of then /// current node.n unsafe fn del_at_iter(&mut self, cursor: &mut Cursor, mut num_deleted_items: usize) {n if num_deleted_items == 0 { return; }nn let mut item_idx = cursor.local_index;n let mut e = cursor.here_ptr();n while num_deleted_items > 0 {n // self.print();n // if cfg!(debug_assertions) { self.check(); }n if item_idx == (*e).num_items as usize {n let entry = (*e).first_skip_entry();n // End of current node. Skip to the start of the next one. We'ren // intentionally not updating the iterator because if we deleten // a whole node we need the iterator to point to the previousn // element. And if we only delete here, the iterator doesn'tn // need to be moved.n e = entry.node;n if e.is_null() { panic!('Cannot delete past the end of the list'); }n item_idx = 0;n }nn let e_num_items = (*e).num_items as usize;n let removed_here = min(num_deleted_items, e_num_items - item_idx);n n let height = (*e).height as usize;n let removed_userlen;nn if removed_here < e_num_items || e as *const _ == &self.head as *const _ {n // Just trim the node down.n let trailing_items = e_num_items - item_idx - removed_here;n n let c = &mut (*e).items;n removed_userlen = C::userlen_of_slice(&c[item_idx..item_idx + removed_here]);n if trailing_items > 0 {n c[..].copy_within(item_idx + removed_here..e_num_items, item_idx);n }nn (*e).num_items -= removed_here as u8;n self.num_items -= removed_here;n self.num_usercount -= removed_userlen;nn for s in (*e).nexts_mut() {n s.skip_usersize -= removed_userlen;n }n } else {n // Remove the node from the skip list entirely. e should be then // next node after the position of the iterator.n assert_ne!(cursor.here_ptr(), e);nn removed_userlen = (*e).get_userlen();n let next = (*e).first_skip_entry().node;nn // println!('removing {:?} contents {:?} height {}', e, (*e).content_slice(), height);nn for i in 0..height {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.node = (*e).nexts_mut()[i].node;n s.skip_usersize += (*e).nexts()[i].skip_usersize - removed_userlen;n }nn self.num_items -= (*e).num_items as usize;n self.num_usercount -= removed_userlen;nn // Update parents.n if height > 1 {n let mut n = e;n // let new_parent = cursor.entries[height - 1].node;nn // If you imagine this node as a big building, we need ton // update the parent of all the nodes we cast a shadow over.n // So, if our height is 3 and the next nodes have heights 1n // and 2, they both need new parents.n let mut parent_height = 1;n let cursor_node = cursor.here_ptr();n let cursor_node_height = (*cursor_node).height as usize;n let mut new_parent = if height >= cursor_node_height {n cursor.entries[parent_height].noden } else {n cursor_noden };nn loop {n // dbg!(skip_height);n // dbg!((*n).height as usize);nn n = (*n).nexts_mut()[parent_height - 1].node;n if n.is_null() || (*n).height >= height as u8 { break; }n let n_height = (*n).height as usize;nn // dbg!((*n).content_slice());n // dbg!((*n).height);n n assert_eq!((*n).parent, e);n assert!(n_height >= parent_height - 1);nn if n_height > parent_height {n parent_height = n_height;n if n_height >= cursor_node_height {n new_parent = cursor.entries[parent_height].noden }n }n n (*n).parent = new_parent;n }n }nn Node::free(e);n e = next;n }nn for i in height..self.head.height as usize {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.skip_usersize -= removed_userlen;n }nn num_deleted_items -= removed_here;nn // if cfg!(debug_assertions) { self.check(); }n }n }nn // unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item], mut notify: Notify)n // where Notify: FnMut(&[C::Item], ItemMarker) {nn unsafe fn replace_at_iter(&mut self, cursor: &mut Cursor, mut removed_items: usize, mut inserted_content: &[C::Item], mut notify: Notify)n where Notify: FnMut(&[C::Item], ItemMarker) {n if removed_items == 0 && inserted_content.len() == 0 { return; }nn // Replace as many items from removed_items as we can with inserted_content.n let mut replaced_items = min(removed_items, inserted_content.len());n removed_items -= replaced_items;nn while replaced_items > 0 {n let mut e = cursor.here_ptr();n if cursor.local_index == (*e).num_items as usize {n // Move to the next item.n e = cursor.advance_node();n if e.is_null() { panic!('Cannot replace past the end of the list'); }n }nn let index = cursor.local_index;nn let e_num_items = (*e).num_items as usize;n let replaced_items_here = min(replaced_items, e_num_items - index);nn let old_items = &mut (*e).items[index..index + replaced_items_here];n let new_items = &inserted_content[0..replaced_items_here];nn let new_usersize = C::userlen_of_slice(new_items);n let usersize_delta = new_usersize as isize - C::userlen_of_slice(old_items) as isize;nn // Replace the items themselves. Everything else is commentary.n old_items.copy_from_slice(new_items);nn if usersize_delta != 0 {n cursor.update_offsets(self.head.height as usize, usersize_delta)n }n // I hate this.n self.num_usercount = self.num_usercount.wrapping_add(usersize_delta as usize);nn inserted_content = &inserted_content[replaced_items_here..];n replaced_items -= replaced_items_here;n // We'll hop to the next Node at the start of the next loopn // iteration if needed.n cursor.local_index += replaced_items_here;nn for i in 0..self.head.height as usize {n cursor.entries[i].skip_usersize += new_usersize;n }n cursor.userpos += new_usersize;nn notify(new_items, ItemMarker {n ptr: e,n _phantom: PhantomData,n });n }nn // Ok now one of two things must be true. Either we've run out ofn // items to remove, or we've run out of items to insert.n if inserted_content.len() > 0 {n // Insert!n debug_assert!(removed_items == 0);n self.insert_at_iter(cursor, inserted_content, &mut notify);n } else if removed_items > 0 {n self.del_at_iter(cursor, removed_items);n }n }nn fn dbg_check_cursor_at(&self, cursor: &Cursor, userpos: usize, plus_items: usize) {n if cfg!(debug_assertions) {n // let (mut c2, _) = self.iter_at_userpos(userpos);n let (mut c2, _) = self.iter_at_userpos(userpos);n c2.advance_by_items(plus_items, self.head.height);n assert_eq!(cursor, &c2);n }n }nn fn no_notify(_items: &[C::Item], _marker: ItemMarker) {}nn pub fn replace_at(&mut self, mut start_userpos: usize, removed_items: usize, inserted_content: &[C::Item]) {n start_userpos = min(start_userpos, self.get_userlen());nn let (mut cursor, offset) = self.iter_at_userpos(start_userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.replace_at_iter(&mut cursor, removed_items, inserted_content, Self::no_notify); }nn if cfg!(debug_assertions) {n let (mut c2, _) = self.iter_at_userpos(start_userpos);n c2.advance_by_items(inserted_content.len(), self.head.height);n if &cursor != &c2 { panic!('Invalid cursor after replace'); }n }n }nn pub fn insert_at(&mut self, mut userpos: usize, contents: &[C::Item]) {n if contents.len() == 0 { return; }n n userpos = min(userpos, self.get_userlen());n let (mut cursor, offset) = self.iter_at_userpos(userpos);nn unsafe {n if offset == 0 {n self.insert_at_iter(&mut cursor, contents, &mut Self::no_notify);nn self.dbg_check_cursor_at(&cursor, userpos, contents.len());n } else {n let current_item = cursor.current_item();n let (start, end) = C::split_item(current_item, offset);n // Move the cursor back to the start of the item we'ren // splitting.n cursor.move_to_item_start(self.head.height, offset);n // This feels pretty inefficient; but its probably fine.n self.replace_at_iter(&mut cursor, 1, &[start], &mut Self::no_notify);n self.insert_at_iter(&mut cursor, contents, &mut Self::no_notify);nn // There's no clean way to keep the cursor steady for the finaln // insert. We'll just make sure the cursor is in the rightn // position before that call for now.n self.dbg_check_cursor_at(&cursor, userpos, contents.len());nn self.insert_at_iter(&mut cursor, &[end], &mut Self::no_notify);n }n }nn }nn pub fn del_at(&mut self, mut userpos: usize, num_items: usize) {n userpos = min(userpos, self.get_userlen());n // We can't easily trim num_items.n // num_items = min(length, self.num_chars() - pos);n if num_items == 0 { return; }nn let (mut cursor, offset) = self.iter_at_userpos(userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.del_at_iter(&mut cursor, num_items); }nn if cfg!(debug_assertions) {n let (c2, _) = self.iter_at_userpos(userpos);n if &cursor != &c2 { panic!('Invalid cursor after delete'); }n }n }n}nnnimpl SkipList where C::Item: PartialEq {n pub fn eq_list(&self, other: &[C::Item]) -> bool {n let mut pos = 0;n let other_len = other.len();nn for node in self.iter() {n let my_data = node.content_slice();n let my_len = my_data.len();nn if pos + my_len > other_len || my_data != &other[pos..pos + my_data.len()] {n return falsen }n pos += my_data.len();n }nn return pos == other_len;n }n}nnimpl Drop for SkipList {n fn drop(&mut self) {n let mut node = self.head.first_skip_entry().node;n unsafe {n while !node.is_null() {n let next = (*node).first_skip_entry().node;n Node::free(node);n node = next;n }n }n }n}nnnimpl From<&[C::Item]> for SkipList {n fn from(s: &[C::Item]) -> SkipList {n SkipList::new_from_slice(s)n }n}nnimpl From> for SkipList {n fn from(s: Vec) -> SkipList {n SkipList::new_from_slice(s.as_slice())n }n}nnimpl Into> for &SkipList {n fn into(self) -> Vec {n let mut content = Vec::with_capacity(self.num_items);n''''''''''''''''MaybeUninit;''''''t''''t'a'm''''MaybeUnini';'t''''y'a'M':':'m'e'm':':'d't's' 'e's'u'''''''e's'n'''''''''''''''''NonNul';'l'''''''''''''''''';'r'e't'i':':'d't's' 'e's'u'n''n'o'N':':'r't'p':':'d't's' 'e's'u'n';nuse std::alloc::{alloc, dealloc, Layout};nuse std::cmp::min'''''''''''''''''''PhantomDat';'a'''''n'a'h'P':':'r'e'k'r'a'm':':'d't's' 'e's'u'n'''''''''''''''';'t'm'f':':'d't's' 'e's'u'n'n';nnuse rand::{RngCore, Rng, SeedableRng};nuse rand::rngs::SmallRng;nn/// The likelyhood a node will have height (n+1) instead of nnconst BIAS: u8 = 100; // out of 256.nn/// The number of items in each node. Must ''0'1''''2'''0'2''''0'0'''''''9'9'1'''fit in a u8 thanks to Node.'#[cfg''''''''''''''''s'n'o'i't'r'e's's'a'_'g'u'b'e'd'(test)]'const NODE_NUM_ITEMS: us's'i'n'z'o'e'i' 't'='r'''e'2's'''s'''a'''_' 'g'''u'''b'''e''''0''d'0'1;'n'n''''''''t'o'n'')'(''''''''''o'n')''''!'!'n''#'''!'[cfg(tes''t)]'const NODE_NUM_ITEMS: usize = 1;n'n'''n// const NO'''_'DE_NUM_ITEMS:'' u''size = 100''#[cfg(test)]'n';nconst'5' NODE_''0'1'''NUM_ITEMS: usize ='1''''''0'0'1''''1''''2''''1' 100;nn/// Rope operations will m's'ove'n' to'o' li'i'nea't'r t'r'ime'e' af's'ter's' NO'a'DE_''s'_'STR'n'''// '''g'_S'o'''I'u'Z'i'E 'b'''a, '''''''''''''''d'e'z'i'S' '+' ''t'''''''''''m'''// '''''''d'e'z'i'S' '+''' '*'// ' 2'e'r'' ^n/'e'// MA's'''''''''''''ListConfi'>'g'''''t's'i'L' ':'C''''''''''''pi''''''i'p'n'U''''I''''':':'n'''i'p':':'d't's' '>'''''n'i'p'n'U''Copy''Clone''Copy''''''e'n'o'l'C''C'<';''''/'/''<'''''''''''''''''''':':'d't's'''''':':'t'm'f''''''g'u'b'e'D' '+' ''ItemMarke'''}'{' 'r'''''m'e't'I' 'r'''o'f' 'd'e'z'i'S' 'l'p'm'i'n'X'''''''' 'b'u'''p'''''// '''''// ''''''''' ','a'''''''Li'&'''SkipLis'''>'C'<'t'''''p'i'k'S' 'stConfi'>'g''''''''n'o'C't's''''''n '''''''''''''''''>'a'''<''''PartialEq''''''''l'a'i't'r'a'P' '+' ''''''''''''a't'a'D'm'o't'n'a'h'P' ':'n'o't'n'a'h'''''''''d'e'z'i'S' '+' 'p'_' ','>'C'<'i'L' ':'C'<''''''''''''''''''''''e'd'o'N' 't'u'm'*' ''''' ':'r't'p' '''}''n 'n ' '{' 'r'e'k'r'a'M'm'e't'I' 't'c'u'r't's''''''''' 'f'e'd'e'p'y't'n'n'_'d''s'HEIGH'a'T len'_'g'#[c'g'fg(te'u'st)]''b'''con'e'st '2'NODE_NUM_IT'd'EMS: u''0'n''1''''1''''2'''s''ize = 1;n'''nconst NODE_NUM_ITEMS: usiz''e = 1;''n#[cfg(not(test))]''nconst 'nconst NODE'// ''''// '''_NUM_ITEMS: usize'// ' = 1;'NODE_NUM_ITEMS: usiz'n#[cfg(not(test))]''nconst MAX_HEIGHT: u'// 'size ''= '// '10;'e'''' =' where '''''''''''''''''''''''e'l'b'a'y'r'e'u'Q''''''''''y''n '''// '''''''''''''''n'// ''' ';''''''' ':'y'r'e'u'Q' 'e'p'y't' 'r'e'u'Q'm'e't'I''''''''''''n '''''''''''''''''''''''''''''''''''''''''''''':':'f'l'e'S''''''y'r'e'u'''''''Q''''''''''''''''''''''''''.'e'n'o'N' 'e's'i'w'r''''''f'l'e's''e'h't'O' '.'d'e'n'i'a't'n'o'c' 's't'i' 'f'i' 'm'e't'i' 'e'h't' 'o't'n'i' ')'t'e's'f'f'o'('e'm'o'S''''''''''''''''('e'm'o'C' 's'n'r'u't'e'R''''T' '/'/' '''''n fn contains_item(item: &''Self::Item, query'''''''''''''>'e'z'i's'u'<'n'o'i't'p'O': &'';''''Self::Item) -> bool {n }'''}''n 'n ' '{' 's'n'i'a't'n'o'C' 't'i'a'r't' 'b'u'p'n'n''n ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n 'unimplemented''''''''''''''''''''''''''''''''' 'r'o'f' 'l'p'm'i' 'm'e't'i'_'s'n'i'a't'n'o'c' 'g'n'i's's'i'm''''''a't'n'o'c''''''''''''''''''''''''''''' 'r'o'f' 'm'e't'i'_'s'n'i'a't'n'o'c' ''''s't'n'e'm'e'l'p'm'I''''';')'('!'''''''l'p'm'i'n'u' n '''''''''''''''}' 'e's'l'a'f' '{' 'l'o'o'b''''B' '>'-' ')'m'e't'I':':'f'l'e'S'&' ':'y'r'e'u'q'''' ','m'e't'I':':'f'l'e'S'&' ':'m'e't'i'*''''&'('m'e't'i'_'s'n'i'a't'n'o'c' 'n'f' 'Self: S'//' '' ' 'iz''ed '' ' 100;''n''n''const MAX_HEIGHT: usi'nconst NODE_NUM_ITEMS: usize = 100;'ze 'n'= 10;n''#[cfg(test)]nco's'n'['st NODE_']'N''t'a'''''''o't'''U''M_ITEMS' where Sel'''''It''Item'''t'I':':'f: Sized''': usize = 1;n#[cfg(not(test))]nconst NODE_NUM_ITEMS: u'_'size = 100;n'th. '_'(With a sm'n '''''''''''''''''''''''''''''''''d'e'z'i'S' ':'f'l'e'S' 'e'r'e'h'w' '''''''''''''''''''''''''''''_'t'a''''ItemMarke'''''f'l'e'S'''''>'C'<'''''' }'n '{' ''''{')'r''''''M'm'e't'I''''''' ':'r'e'k'r'a'm' ','m'e't'I':':'f'l'e'S'&' ':'m'e't'i' ','f'l'e's''''S' 't'u'm'&'('y'f'i't'o'n' 'n'f' '''''''''n '''''n 'n ' 'aller constant the higher this is). On the flipn/// side, cursors grow linearly with this number; so smaller is marginallyn/// better when the contents are sma''0''&'1''''2'''''_'''t'a'''''''''''e'z'i's'u' ':''''''''''''''''''''>'T''''&'''''>'T''''>'T' '''''''''''''f'l'e's'&''''''''''''''''y'p'o'C'''''''''''''''' '''''''')'3'('o'o'F''''''''' '=' '''n ''''''''';')'('h'a'l'b'.'x' ';'x' 't'e'l''''''''''''''''<'t'i'n'>''i'n'U'e'b'y'a'M'''')'3'('o'o'F' '''}''n 'n ' '{' ')'('x' 'n'f'n'n'''g'u'b'e'D' ':'T' 'e'r'e'h'w' '''''' }''n 'n ' '{' ')'('h'a'l'b' 'n'f' ''<'<'T''''''''}''n 'n ' '{' 'o'o'F''<''''''''''' 'l'p'm'i'n'n';'''''''n'n')'('''' 'o'o'F' 't'c'u'r't's'n'n'n''s'o'p' ',''ller.nconst MAX_HEIGHT: us'1'ize = 20;nnconst MAX_HEIGHT_U8: u8 = MAX_HEIGHT as u8; // convenience.nn/// The whole list is configured through a single generic trait parameternpub trait ListConfig {n type Item: Default + Copy;nn /// Applications which have custom sizes (or do their ownn /// run-length-encoding) can define their own size function for items. Whenn /// items are inserted or replaced, the position is specified using then /// custom size defined here.n fn get_usersize(_item: &Self::Item) -> usize { 1 }nn fn userlen_of_slice(items: &[Self::Item]) -> usize {n items.iter().fold(0, |acc, item| {n acc + Self::get_usersize(item)n })n }nn fn split_item(_item: Self::Item) -> (Self::Item, Self::Item) {n unimplemented!('Cannot insert in the middle of an item - split_item is not defined in trait');n }nn // type RngType: rand::RngCore = rand::rngs::SmallRng;n // fn get_rng() -> Self::RngType {n // use rand::SeedableRng;n // // rand::rngs::SmallRng::from_seed(SeedableRng::seed_from_u64(10))n // rand::rngs::SmallRng::from_entropy()n // }n}nn/// This represents a single entry in either the nexts pointers list or in ann/// iterator.n#[derive(Debug, PartialEq, Eq)]nstruct SkipEntry {n /// The node being pointed to.n node: *mut Node,nn /// The number of *items* between the start of the current node and then /// start of the next node. That means nexts entry 0 contains the length ofn /// the current node.n skip_usersize: usize,n}nn// We can't use #[derive()] here for Copy and Clone due to a bug in the rustn// compiler: https://github.com/rust-lang/rust/issues/26925nimpl Copy for SkipEntry {}nimpl Clone for SkipEntry {n fn clone(&self) -> Self { *self }n}nnimpl SkipEntry {n fn new_null() -> Self {n SkipEntry { node: ptr::null_mut(), skip_usersize: 0 }n }n}nnn/// The node structure is designed in a very fancy way which would be more atn/// home in C or something like that. The basic idea is that the node structuren/// is fixed size in memory, but the proportion of that space taken up byn/// characters and by the height differ depending on' '/'// With the heads array as is, we have no way to go from a marker back to' /// cursor (which is required to insert at that location in the list). Forn /// that we need to be able to figure out at each level of the nexts' /// pointers which object points to us, and the offset from that element ton /// the current element'''''''''''''''''''''''''''''''''''''''''''n ''''''''''''''''''''','''>'C'<'';'''' 'e'd'o'N' 't'u'm'*' ':'t'n'e'r'a'p''' ''/''/''/ '.'s'i'h't' 'd'e'e'n' 'e'w' 'k'r'o'w' 'o't' 's'r'e'k'r'a'm' ''''m'r'o'f'''''''e'e'n' 'e'w' ','y'a'w'y'n'A' '.'n /// pointers which object points to us, and''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'n'e'm'e'l'e' 't'n'e'r'r'u'c' 'e'h't' 'o't' 't'n'e'm'e'l'e' 't'a'h't' 'm'o'r'f' 't'e's'f'f'o' 'e'h't' how far into the' an '/' // cursor (which is required t'n'''o'''''''''''''''''''''''''''''''''MaybeUnini''''''''''''''''''''''''''''''''.''''''' 'e'f'a's'n'u''t'e'y' 'd'e'z'i'd'r'''''''''>'T'<''''''MaybeUnini''' ''>'T'<'t''''''e'b'y'a'M''''''i'l'd'r'a'd'n'a't's' 't'o'n' 't's'u'j' 's't'I' '.'t'''''''u'e'b' ''y'a'm':':'m'e'm':':'e'r'o'c'''''':':'d't's'''''''t's' 'm'o'r'f' 'n''''''' 'd'e'l'o't'S' '/'/'n'''' '''''''''''''''''''''''''''''' ''n ' pub unsafe fn slice_get_ref(slice: &[Self]) -> &[T] ' '{n // SAFETY: casting slice to a `*const [T]` is s'MaybeUnini'''>'T'<'t''''''e'b'y'a'M'''afe sin' 'ce the caller guarantees thatn // `slice` is initiali''zed, and`MaybeUninit` is guaranteed to have the same layout as `T`.n // The pointer obtained is valid since it refers to memory owned by `slice` which is an // reference and thus guaranteed to be valid for reads.n unsafe { &*(slice as *const [Self] as *const [T]) }n }' 'n ' '('f'e'r'_'t'e'g'_'e'c'i'l's'_'t'i'n'i''''m'e'b'y'a'm''''''''_'t'i'n'i'n'u'''''''_'e'c'i'l's' 'n'f'n'n' insert at that location in the list)''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'h't' 'o't'n'i' 'r'a'f' 'w'o'h' 'd'n'a' ','s'u' 'o't' 's't'n'i'o'p' 't'c'e'j'b'o''''''''s't'c'e'j'b'o' 'h'c'i'h'w' 's'r'e't'n'i'o'p' 's't'x'e'n' 'e'h't' 'f'o' 'l'e'v'e'l' 'h'c'a'e' 't'a' 't'u'o' 'e'r'u'g'i'f' 'o't' 'e'l'b'a' 'e'b' 'o't''''' 'd'e'e'n' 'e'w' 't'a'h't' 'r'o'F' '.' a node'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.')'t's'i'l' 'e'h't' 'n'i' 'n''''''''''n'i' 'o'i't'a'c'o'l' 't'a'h't' 't'a' 't'r'e's'n'i' 'o't' 'd'e'r'i'u'q'e'r' 's'i' 'h'c'i'h'w'(' 'r'o's'r'u'c' 'a' 'o'''''''a' 't' 'k'c'a'b' 'r'e'k'r'a'm' 'a' 'm'o'r'f' 'o'g'''''''''''''''' 'm'o'r'f' 'o't' 'y'a'w''''i' 'o'n' 'e'v'a'h' 'e'w' ','s'i' 's'a' ''''''' 's'y'a'r'r'a' 's'd'a'e'h' 'e'h't' '''''''''''''e'h' 't'h't'i'W'''''''''' ','e'n'o'l'A''W''s height. Thi'uninit_items_arra'')'('y's'MaybeUnini'''''''''')'('n ''''''''' '{' 'e'f'a's'n'u''maybeinit_s''}' 'lice_get_ref'''''e'''''c'i'l's''// '(slice: &[MaybeUninit])''''y'a'm' ''t'i'n'i''''i'n'u':':'t''''''e'b'y'a'M'''n/// '''n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '+' 'e'd'o'n'(' 'r'e'k'r'a'm' 'a' 'm'o'r'f' 'o'g' 'o't' 'y'a'w' 'o'n' 'e'v'a'h' 'e'w' ','e's'l'e' 'g'n'i'h't'y'r'e'v'e''''' 'e'h't' 'h't'i'W''''''''''''''''''''''''''''''''''''' 'e'v'l'o's' 'd'l'u'o'c' 'I' 's'''' 'y'a'w' 'f'o' 't'o'l' 'a' 's'''e'r'e'h'T' '/'/' 'n ' 'results in a lot of `unsafe` blocks. I think the tradeoff is worth it but In/// could be wrong here. You probably wouldn't lose much performance in practicen/// by replacing the inline s'' '''''''''''''''''''''''''''slice_get_re'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i't'a't'n'e'm'e'l'p'm'i' 't'a'h't' 'm'o'r'f' 'n''''''' 'd'e'l'o'''''''l'i't's' 's'i' 'e'd'o'c' 's'i'h'T' '''' '' ''n ' // SAFETY: casting slice to a `*const [T]` is safe since the caller guarantees thatn // `slice` is initialized, and`MaybeUninit` is guaranteed to have the same layout as `T`.n // The pointer'''''''''''''&self.items[..self.num_items as usize';']' '=' 'e'c'i'l's' 't'e'l''n 'MaybeUnini''C::Ite'>'m'<'t''''y'a'M''''Self''C::Item'' 'C::Item'obtained is valid si''n''ce i''t refers to memory owned by `slice''` which is an // reference and thus guaranteed to be valid for reads.n unsafe { &*(slice as *const [Self] as *const [T]) }' 'n ' '.'s'd'n'a'l' ''''''' 's't'i' 'n'e'h'w' 'f':':'t'i'n'i'n'U'e'b'y'a'M'''''''t'i'n'i'n'U' 'e's'U' ':'O'D'O'T' '/'/' '''''''n 'n ' 'tructure with a smallvec - but that would wasten/// memory in small nodes, and require extra pointer indirection on large nodes.n/// It also wouldn't remove all the unsafe here.n///n/// A different representation (which might be better or worse - I can't tell)n/// would be to have the nodes all be the same size in memory and change then/// *proportion* of the node's memory that is used by the string field vs then/// next pointers. That might be lighter weight for the allocator because then/// struct itself would be a fixed size; but I'm not sure if it would be better.n#[repr(C)] // Prevent parameter reordering.nstruct Node {n /// We start with the items themselves. Only the first `num_items` of thisn /// list is in use. The user specified length of the items in the node isn /// stored in nexts[0].skip_items. This is initialized withn /// Default::default() for the type, but when MaybeUninit completely lands,n /// it will be possible to make this a tiny bit faster by leaving the listn /// initially uninitialized.n items: [C::Item; NODE_NUM_ITEMS],nn /// Number of items in `items` in use / filled.n num_items: u8,nn /// Height of nexts array.n height: u8,nn // #[repr(align(std::align_of::()))]n n /// In reality this array has the size of height, allocated using more orn /// less direct calls to malloc() at runtime based on the randomly generatedn /// size. The size is always at least 1.n nexts: [SkipEntry; 0],n}nn// Make sure nexts uses correct alignment. This should be guaranteed by repr(C)n// This test will fail if this ever stops being true.n#[test]nfn test_align() {n struct TestConfig;n impl ListConfig for TestConfig {n type Item = u8;n fn get_usersize(_item: &Self::Item) -> usize { 1 }n }n #[repr(C)] struct Check([SkipEntry; 0]);n assert!(mem::align_of::() >= mem::align_of::>());n // TOD'n 'paren''''''''null_mut(',')'''''l'l'u'n':':'r't'p' ':'t''''''n'e'r'a'p' 'O: It'd be good to also check the alignment of the nexts field in Node.n}nnfn random_height(rng: &mut R) -> u8 {n let mut h: u8 = 1;n // Should I use a csrng here? Does it matter?n while h < MAX_HEIGHT_U8 && rng.gen::() < BIAS { h+=1; }n hn}nn#[repr(C)]npub struct SkipList {n // TODO: Consider putting the head item on the heap. For the use case heren // its almost certainly fine either way. The code feels a bit cleaner if itsn // on the heap (and '''' 'b'u'p'then iterators will be able to outlast a move of then // skiplist parent). But'''''''<'n'o'i''>'t'p'O' its also very nice having the code run fast forn // small lists. Most lists are small, and it makes sense to optimize forn // that.nn // TODO: For safety, pointers in to this structure should be Pin<> if wen // ever want to hold on to iterators.nn /// The total number of items in the skip list. This is not used internally -n /// just here for bookkeeping.n num_items: usize,n /// Size of the list in user specified units.n num_usercount: usize,nn /// The RNG we use to generate node heights. Specifying it explicitly allowsn /// unit tests and randomizer runs to be predictable, which is very helpfuln /// during debugging. I'm still not sure how the type of this should ben /// specified. Should it be a generic parameter? Box?n /// ??n rng: SmallRng,nn /// The first node is inline. The height is 1 more than the max height we'ven /// ever used. The highest next entry points to {null, total usersize}.n head: Node,nn /// This is so dirty. The first node is embedded in SkipList; but we need ton /// allocate enough room for height to get arbitrarily large. I could insistn /// on SkipList always getting allocated on the heap, but for small lists itsn /// much better to be on the stack.n ///n /// So this struct is repr(C) and I'm just padding out the struct directly.n /// All accesses should go through head because otherwise I think we violaten /// aliasing rules.n _nexts_padding: [SkipEntry; MAX_HEIGHT],n}nnnnimpl Node {n // Do I need to be explicit about the lifetime of the references being tiedn // to the lifetime of the node?n fn nexts(&self) -> &[SkipEntry] {n unsafe {n std::slice::from_raw_parts(self.nexts.as_ptr(), self.height as usize)n }n }nn fn nexts_mut(&mut self) -> &mut [SkipEntry] {n unsafe {n std::slice::from_raw_parts_mut(self.nexts.as_mut_ptr()'''''n '''''''''''''n '''''''''n ''''''''''''''''''''''''''''''''''' 'o't' 'y't's'u'r' 'e'r'o'm' 'e'b' 't'h'g'i'm' 't'I' ':'O'D'O'T' '/'/' '''''''''''&''(*self.here''''''n ''n 'debug_assert'''''''num_item' as usize'''''''''''local_inde'''''''''''e'z'i's'u' 's'a' ''';')'x''''''l'a'c'o'l'.'f'l'e's' '='>' 's'''''''t'i'_'m'u'n'.'e'd'o'n'('!''''''g'u'b'e'd' ''_ptr()';')' '=' 'e'd'o'n' 't'e'l' '.'s's'o'r'''''''e'd'o'n'''''''r'o'g' 'o'n '/''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':''n /'n ///'''T''' '-' '// ''''''''''' 'y'l'l'''''''''''''''''''''''''''''''''')'s't'n'e't''''''''''''''''''''''''''''''''''''''''''''''''n ///'n ///''''''''''''''''''''''''''''''''''''''''''''''''.'y'r'o'm'e'm' 't'i'n'i'n'u' 'e'r'a'''''''''''' '''''d'o'm' 't'''n'''' 'e'r'a' 's't'n'e't'n'o'c' 'e'h'''t' ','g'' 'n'i't'a'r'e't'i' 'r'e't'f'A' ' ''''.'d'e'z'''' ''e'i'l'a'i't'i'n'i' 't'''n'e'r' ''a' 'r'e'v'o' 'e''''''' ''''''' 'e''''o' 't'a'r'e'''''' 't'i' 'e'w' 's't'n'e't' ''n'o'c' 'e'h'T''n'o'c' 'p'o'r'd' 't'o' ''''''''o't'n' 't'h'g'i'm' 'e'w' 'n'e'h't'(' ''u'f'''''''''n ///'' '-' '''''''''''''''''''d'e'n'i'a'r'd' 't'''n's'i' 'r'o't'a'r'e't'i' 'e'h't' 'f'i''''t' 'e'f'a's'n'u' 's't'I'''''''''''''' 'r'o't'a'r'e't'i' 'e'h'T''''''''''''''a' 's'i'''''''i's' 's'i''''''''''''''''''' 'e'b' '*'t's'u'm'*' 'e'd'i's'n'i' 'h'T' '''''''''''''''''''''''''''''''''''''''s'm'e't'i' 'e'h't' ','n'u'r' 's'a'h' 'r'o't'a'r'e't'i' 'e'h't' 'r'e't'f'A' '.'m'o'r'f' 'l'a'e't's' 'd'n'a' 'm'o'r'f' 'e't'a'r'e't'i' 'n'a'c' 'e'w'''''''''' '{' 'e'f'a's'n'u' 'e'c'''}' 'i'l's''''''''''''i'c'l' 'a' 'e'k'a'M' ''''''' '/'/'/' ''' unsafe fn from'''''''e'b'y'a'''''''''i'''n'U'''''''''<'<''>'t'i''''''''''t'n'i'n'I'e'b'y'a'M'm'_slice(slic'''[0]'''''''''''''''''''''''m'''''''''.'e'f'a'S''''s' '/'/' ''e't'I':':'C' 't'u'm'*' 's'a' '''']'0'['e: &[C::Item]) -> Self {n unsafe {n let ptr = slice.as_mut_ptr();n let end = ptr.add(slice.len());nn UninitOwnedIter {n ptr: NonNull::new_unchecked(ptr),n end,n _marker: PhantomDatan }n }n }n'S''// ''''''''''''''''''.'s's'o'r'g' 'o's' 's'i' 's'i'h'T' '/'// ''/' ', self.hei'''// '('*'ght as usize)n }n }nn fn '// ''''''''''')')'('r't'p'_''''''''''''''''_'t'u''// 'm'_'s'a'.'layout_with_height(h'/''/ 'eight: u8) -> Layout {n Layout::from_s''' }'''i''ze_a'// 'lign(n mem'// '::size_of::>() + mem::size_of'// '::>() * (he'// 'ight as usize),n mem::align_of::>()).unwrap()n }nn fn alloc_with_height(height: u8) -> *mut Node {n assert!(height >= 1 && height <= MAX_HEIGHT_U8);nn unsafe {n let node = alloc(Self::layout_with_height(height)) as *mut Node;n (*node) = Node {n items: [C::Item::default(); NODE_NUM_ITEMS],n ''#[inline(always)]'n'''''''#[inline(always)]'n' num_items: 0,n height: height,n nexts: [],n };nn for next in (*node).nexts_mut() {n *next = SkipEntry::new_null();n ''#[inline(always)]'n' }nn noden }n }nn fn alloc(rng: &mut R) -> *mut Node<'''''n// Stolen from core::mem::MaybeUninit. Its just not standardized yet.nunsafe fn maybeinit_slice_get_ref(slice: &[MaybeUninit]) -> &[T] {n // SAFETY: casting slice to a `*const [T]` is safe since the caller guarantees thatn // `slice` is initialized, and`MaybeUninit` is guaranteed to have the same layout as `T`.n // The pointer obtained is valid since it refers to memory owned by `slice` which is an // reference and thus guaranteed to be valid for reads.n unsafe { &*(slice as *const [MaybeUninit] as *const [T]) }n}n'n'n'C> {n Self::alloc_with_height(random_height(rng))n }nn unsafe fn free(p: *mut Node) {n dealloc(p as *mut u8, Self::layout_with_height((*p).height));n }nn fn content_slice(&self) -> &[C::Item] {n &self.items[..self.num_items as usize]n }nn // The height is at least 1, so this is always valid.n fn first_skip_entry<'a>(&self) -> &'a SkipEntry {n unsafe { &*self.nexts.as_ptr() }n }nn fn first_skip_entry_mut<'a>(&mut self) -> &'a mut SkipEntry {n unsafe { &mut *self.nexts.as_mut_ptr() }n }nn // TODO: Rename to len() ?n fn get_userlen(&self) -> usize {n self.first_skip_entry().skip_usersizen }n n fn get_next_ptr(&self) -> *mut Node {n self.first_skip_ent''r''y().noden }nn /// I dunno where this logic should live, but we want to ''''''''''''''''''''''''''''''''''''':':'t'i'n''''''''''''''''''''''''' 'l'a'e'r' 'e'h't''''''''.'e'l'b'a't's''''MaybeUninit::uninit_arra'''''' 'n'e'h'w' 'y' 'h't'i'w' 'e'c'a'l'p'e'R''''''''''''''''''''s'i'h't' 'n'e'h'w' 't'a'h't' 'l'l'a'C''''R' '.'i'n'U'e'b'y'a'M' '''uninit_array' 'm'o'r'f' 'n'e'l'o't'S' ':'O'D'O'T' '/'/'n'''''''''''p''''''_'s'm'e't'i'ub fn'''>'T'<'''MaybeUnini'''>'T'<'t''''''e'b'y'a'M'' uninit_arr'NODE_NUM_ITEMS''''M'U'N''''X'A'M'ay() -> [Self; 'NODE_NUM_ITEMS'LEN]'M' 'U'{' 'N' 'n'X' 'A' 'M' unsafe { MaybeUninit::<[MaybeUninit; LEN]>::uninit().assume_init() }''n }'o'o'f' 'n'f'n'get the index ofn /// the item at the specified offset i'uninit_items_arra'')'('y'''''n'i'n'u'''nto the node (and the offset into then /// it''// None of the rust builtins give me what I want, which is a copy-free iteratorn// to owned ite''''''''Li'[MaybeUninit::uninit(); NODE_NUM_ITEMS]'stConfig''''''C't's'i'L''''''''''n'o'C' '''':':'C''' ','a'''ms i'n '''''''''''''''''''''m'e't'I':':'C'''''C::Item'''''''' '''e'h't'''''''''''''''''''''''''''.'n'o'i'''t'a't'n'e'm'e'l'p'm'i''''''''e'''>'C'<''m'l'''''C: ListConfig' ','a''''p'e'm'i'''' ','a''''C'''' 't'u'M'r'e't'I''' 'e'r''''''''t''''''''m'e't'I':':'C'''u'M'R'e't'I'''''r'e't'i' ''o'c'''''''''.'e'c'i'l's' 'n'o' 'd'e's'a'B' '/'/' 'n a MaybeUninit array''''''''''''''t'u''''''''''t'u'n'm''''''''''''''''''''''''''.'n'w'o' 'y'm'''''_'''')'''')'t'u'm' 'e'k'a''''k'm' 'o't' 'h'g'u'o'n'e' 'y's'a'e' ''n '_mark'impl<'a, C: ListConfig> 'e'''PhantomData''''a'h'P' ''''''''C' ','a''':'r''''''''''''m'e't'I':':'C''''k'r'a'm'_' ',''s'''''''''''''_' 't'u'm'*' 's'a' 't'i' ';''''.'h'E' '.''''''''''''''''''''''' '''t'''s'u''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'z'i'S' ''':''''>''''>'T'<'T'<'''Unin'''unsaf''' 'e'''''''''''' 'e'f'a's'n'u'itOw''{' ''''''''''''''<'>''t'i'n'i'n'U'e'b'y'a'M'''''''''''''as_ptr()''''_'s'a'.''''''''''.'f'l'e's'''''''n ''''' '' '''''.'f''''''''''.'''''''.',')'('r't''''r'p'_'s'a'''''''')')'('d'a'e'r'l'e's'''''''''n'' '''// ' '' ''''e'n'o'N' 'n ' '''''''''.'r't'p'('e'm'o'S'''' ''' }'n ' '{' 'e's'l'e' '}'n ''''''''''''' '}' 'e'n'o'N' '{' 'd'n'e' '='=' 'r't'p'.'f'l'e's' 'f'i'''''// ' '' 'ne''dIter''U' 'l''''''''' ':'e'c'''''''''''')'('r't'p'_'s'a'.'i'l's''''M' unsafe fn from_slice(slic''e: &[T]) -> Self''''''''>'T'<''''''''''''''''UninitOw'''>'T' '''''''''''''''''n '''''''''''''''''''''''''''''''''''''''''''' ''''e'n'o'N' ''' }''n 'n ' '{' '>'m'e't'I':':'f'l'e'S'<'n'o'i't'p'O' '>'-' ')'f'l'e's' 't'u'm'&'('t'x'e'n' 'n'f' 'n ' ';'T' '=' 'm'e't'I' 'e'p'y't' ''<'nedIte'''''}''n 'n ' '{' 'r'''''n'i'n'U' 'r'o'f' 'r'o't'a'r'e't'I' 'l'p'm'i'n''n' {n '' un''''''''''''''''''''y'p'o'C' ':'m'e't'I':':'C' 'e'r'e'h'w' 'safe {n '' let p''tr = slice.as_ptr();n let end = ptr.add(slice.len());nn UninitOwnedIter {n ptr: NonNull::new_unchecked(ptr as *mut T),n endn }n }n }n'ay'// 'beUnini''''''''''Un'n unsafe fn from''''''f'l'// ''e'S'_slice(slice'// ':'''' &[M'''>'T'<'aybeUninit]) -' '// ' '' unsafe {n l'''''' '// ' let end ='' if me'''''// ''e'c'i'l's'm::size_o'UninitOwnedIter''n ''''U'// ''f:';''':''() == '// '0 {n '// ' 'n '// '''content_slic'')'('e''''''''t'n'e't'n'o'c'.''''''' '''n '''' (pt''}'n 'r a''s *const u8).wrapping_add(self.len()) as *const Tn } else {n'' '' '''''e'c'i'l's''''''' assume(!ptr.is_null());'n'''e''t ptr = self.as_ptr();n assume(!ptr.is_null());nn let end = if mem::size_of::() == 0 {n (ptr as *const u8).wrapping_add(self.len()) as *const Tn } else {n ptr.add(self.len())n };nn Iter { ptr: NonNull::new_unchecked(ptr as *mut T), end, _marker: marker::PhantomData }n }'> UninitOwnedIter {'initOwnedIte''''' }''n 'n ' '{' 'r''''''i'n'i'n'U' '>'''' ''''.'-' ')']'>'T'<'t'''''b'y'a'M'['&'('''p'''''m'''''''''''' '>'-' ''''''i'n''''' u''nsafe fn owned_iter_from_slice'n'''// '''''''Iterator''''''a'r'e't'I' 'l'p'm'i'n'n'''e'e'r'f'-'''''''''''''''''''''''''''''''''''''''''.'y'a'r'r'a' 't'i'n'i'n'U'e'b'y'a'M' ''''''' 'n'a' 'n'i'''''''''''''' 't'''n's'e'o'd' 't'a'h't' 's'm'e't'i' ''''''''''''''''''d'e'n'w'o' 'o't' 'r'o't'a'r'e't'i' 'y'p'o'c'-'o'r'e'z' 'a' 's'i' 'h'c'i'h'w' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''n's'e'o'd' 't'i' 'e'r'e'h'W' '-' '/'/'n's'm'e't'i' 'd'e'n'w'o' 'o't' 'r'e't'I''''''d'e'n'w'O'''''''O'W' '-' '/'/''''''' '-'n':'t'n'a'w' 'I' 't'a'h'w' 'e'm' 'e'v'i'g' 'r'''''''''s'n'i't'l'i'u'b' 'e'h't' 'f'o' 'e'n'o'N''''''''''i'h'T' '/'/'n'em).n /// n /// If'''' th' T: 'a>'', C: ListConfig>'e offset l'n '''''''''''''''''''''''''''''''''''.'s'i'h't' 'o't' 'a't'a'd'm'o't'n'a'h'p' 'a' 'd'd'A' ':'O'D'O'T' '/'/' 'ands '// '''''''''''''''''''''d'e''''''''''''>'a''''' ':'T' ','a'''''''n 'SkipLis'''''''''>'T'<'t'''''p'i'k'S''' '''''''''''''''n '// '''''''''''PhantomDat'''''''>'T' 'a'''&''''*'<'a'''''n'a'h'p''''m' ':'r'e'k'r'a'm'_' ','T' 't's'n'o'c'*' ':'d'n'e' ','>'T'<''''' '''''''''''''<'l'l'u'N'n'o'N' ':'r't'p' '''}''n 'n ' '{'''''''''n '{' 'n'w'O'''''r'e't'I't'i'n'i'n'U''''''''i't'i'n'I' 't'c'u'r't's''n'n'n'between items, we could return either the previous or next item.n /// n /// Returns (index, item_offset).n fn get_iter_idx(&self, mut usersize_of''fset: usize, stick_end: bool) -> (usize, usize) {n if usersize_offset == 0 { return (0, 0); }nn for (i, item) in self.content_slice().iter().enumerate() {n let usersize = C::get_usersize(item);n if usersize > usersize_offset {n return (i, usersize_offset);n } else if usersize == usersize_offset {n return if stick_end { (i, usersize_offset) } else { (i+1, 0) }n } else {n usersize_offset -= usersize;n }n }n panic!('Could not find requested offset within the node');n }n}nnstruct NodeIter<'a, C: ListConfig>(Option<&'a Node>);nimpl<'a, C: ListConfig> Iterator for NodeIter<'a, C> {n type Item = &'a Node;nn fn next(&mut self) -> Option<&'a Node> {n let prev = self.0;n if let Some(n) = self.0 {n *self = NodeIter(unsafe { n.first_skip_entry().node.as_ref() });n }n prevn }n}nn/// This is a set of pointers with metadata into a location in the list neededn/// to skip ahead, delete and insert in items. A cursor is reasonably heavyn/// weight - we fill in and maintain as many entries as the height of the listn/// dictates.n///n/// This is not needed for simply iterating sequentially through nodes and data.n/// For that look at NodeIter.n///n/// Note most/all methods using cursors are unsafe. This is because cursors usen/// raw mutable pointers into the list, so when used the following rules have ton/// be followed:n///n/// - Whenever a write happens (insert/remove/replace), any cursor not passed ton/// the write function is invalid.n/// - While a cursor is held the SkipList struct should be con'''n '''''''''''''''''''''''' '''''t's'n'o'c'':'e'd'o'n'''''' bool''''''''l'o'o'b' '>'-' ''''' ''''e'd'o'n''' ''is_head = n as *const _ == &self.head as *const _''' }''n 'n ' '{' ''''''''''''')'>'C'<'e'd'o'N' 't'n '// '''''''print(';')''''i'r'p'.'f'l'e's' ''u'm''''m'*''''&' ','f'l'e's'&''''*'('d'a'e'h'_'s'i' 'n'f' 'n ' 'sidered pinned andn/// must not be moved or deletedn#[derive(Copy, Clone, Debug)]nstruct Cursor {n // TODO: Add a phantom lifetime reference to the skip list ro''' /// The global user position of the cursor in the entire list. This is usedn /// for when the max seen h'''''''('!'g'b'd'e''ight in')'creases, so we can populate previouslyn /// unused entries in the cursor and in the head node.n ///'n ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'n'o'N''''if cfg!(debug_assertions''''Some(SmallRng::seed_from_u64(seed)''' '}' ')' '{' ''')''None'''''' 'f'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'e'i'r't'n'''''''''''''''' /// When the userpos of an ent'_'ry is 0 (totally valid and'''' ')'','i'(' usefu''enumerate()'''''m'u'n'e'.'l), a cursor' /// becomes ambiguou'n 'paren''''''''nul''''t'','u'm'_'l()'''''l'l'u'n':':'r't'p' ':'t''''''n'e'r'a'p' 's with regard to where exactly its pointing in then '' /// current entr'''''.'f'l'e''')'n'(''s'y. This is use'''''''''''''''''''''''''''.'y't'i'u'g'i''''u'b'm'a' 't'a'h'''self.''t' 'e'v''''''''.'f'l'e''''')'n'(''s'l'o's'e'r'''''''''''a't''n '''''''''''''''''''''''''''''''' '{' 'e'f'a's'n'u''as_pt''''}' ')'('r''''_'s'a''''a'.''''*'''''''''''''''''''.'''''''''''''''''''''''''''n 'if cfg!(debug_assertions'''n ''''''init_rng_from_seed''''''n '3'2'1''''1''' '''''''{' 'e's'l'e' ' ''}'n '''''.'f'l'e''')'n'(''s' ';''2'3'(seed:'=''''''''''d'a'e'h''''''.'e'd'o'n'''''''t'h'g'i'e'h''''''''''''''''''e'z'i's'u' 's'a' ''''''''''''''''u' 's'a' 'd'a'// ''e'h'.'f'n 'println''''''''''''''''''}'?''''n as *const _' ',':'{' ''''''';')'i' ','''}'{' '// ''''g'n'i't'i's'i'v'''('!'''''n'i'r'p' ''l''''.'e's'''''''// '-''''>''' ' dbg!''((n as *con''st _, (*n).height'// '));n'u64)''' '''// ''''// ' }'n ''''''' '// ''(''n'''d'// 'bg!(n.p''''''''''''// '''')'t'h'g'''i'e'// ''h'.')'n'*'('''''''('*' ','arent);n'n ''''&'''''''''''''''''''''n dbg!(n.parent);''n dbg!(&self.head as *const _);'_' 't's'n'o'c'*'''''''*'&' 's'a' '''d'a'e'h'.'f'l'e's''''''''''''''''n ';')'t'n'e'r'a'p'.'n'('!'g'b'd' '''t'i'n'i'.'f'l'e's' '{' ''') { Some(SmallRng::seed_from_u64(seed)) } ' '.'e'l'b'a't's' 'e'r'a' 's't's'e't' 'e'h't' 'o's' 'e'd'o'm' 'g'u'b'e'd' 'n'i' 'G'N'R'''''''R'N' 'e'l'b'a't's' 'a' 'e's'u' 'l'l'''e'W''''''''''''''''''''''''' ','e'd'o'm' 'g'u'b'e'd' 'n'i' 'e'r'''e'w' 'f'I''''W' '/'/' ' 'e'l'v'o's'e'r' 'o't' ''''''' 't'd'n /// becomes ambiguous''''''''''''''o't' '''''''''y'l't'c'a'x'e'''''''''''''''''''''y'r't'n'e' 't'n'e'r'r'u'c' 'e'h't' 'n'i' '' 'd'r'a'g'e'r' 'h't'i'w''''''t'u'o'b'a' in where '''''''''''''d'e's'u' 's'i' 's'i'h'T' 'its pointing.'n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'g'n'i't'n'i'o'p' 's't'i' 'e'r'e'h'w' 'n'i' 's'u'o'u'g'i'b'm'a' 's'e'm'o'c'e'b' 'r'o's'r'u'c' 'a''''' 'e'h't' ',')''''n '''''''''''''''''''''''''''''''''''''''''''','8'u''''8' ':'t'h'g'i'e'h' ''n ''''''''''''''''&self.head as *const _ as *mut ';'_' '=' 'r't'p'_'d'a'e'h' 't'e'l' '''''''''''''''e'''' for entry'''' 't'u'm' in &mut self.entries[0..height as usize] {' ''''''''t'e's'f'f'o' e''''''8''''9'u' 's'a' 'nt'''n 'ry.skip_'' // Dirty hack. If n has 0-sized elements at the end, the normaln // cursor won't be at th' while normal_iter.here_ptr() != ''''''''''''''''''''''_' 't'u'm'*' 's'a' '_' 't's'n'o'c'*' 's'a' 'n {' normal_iter.advance_node();' }n'' 'n'n'' 'e end..'n 'normal_ite''loca''l_''inde''''''num_item'''''n '''''''normal_ite''here_ptr(''''''''n 'normal_ite''advance_nod''''' }'n ';')'('e''''''n'a'v'd'a'.'r'''''''l'a'm'r'o'n' '{' 'n' '='!' '''''get_userle''' ')'('n''''''u'_'t'e'g'.')'.'r''''''a'm'r'o'n''''(' 'e'l'i'h'w' ''''''''';'e'z'i's'u' 's'a' '''' 's'''''_'m'u'n'.'n''''normal_iter''''''a'm'r'o'n' '=' 'x'''''a'c'o'l'.'r'''''m'r'o'n' '.'n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'.'.'d'n'e' 'e'h't' 't'a' 'e'b' 't'''n'o'w' 'r'''' 'o's'r'u'c' 'l'a'm'r'o'n'''''''r'o's'r'u'c' 'e'h't' ','d'n'e' 'e'h't' 't'a' 's't'n'e'm'e'l'e' 'd'e'z'i's'-'0' 's'a'h' 'n' 'f'I''''''''''''' 'e'h'T''''''''o'n' 'a' 'f'I' '.'k'c'a'h' 'y't'''''''t'e'r'i'D' '/'/' 'users'''''t's'n'o'c'ize'-'''n ''''''''''''''''''''''null_mut('''MAX_HEIGHT''''X'A'M'''''''''n ';']''''n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n '''(''''''''''''''''''''''''t'e's'f'f'o'_'l'a'c'o'l''''')'_' ',''''''n 'a''''''''''''''''')''''>'m'e't'I':':'C'''''''''':'''''n '' ''''''''''''''''''''''''ManuallyDro'''''''''''';')'m'e't'i'('w'e'n':':'p':':''''o'm'e'm':':'d't's''''''''l'l'a'u'n'a'M' '=' 'e'u'l'a'v'.'t'o'l's' '':'T' ','_'(''// ''''_' ':''''('''''''''m'e't'I''''''''''''''''')'m'e't'I':':'''''''''''''''''''''''''''''''''''''''''''''''''.'e'u'l'a'v' 'd'l'o' 'e'h't' 'p'o'r'd' 't'''n'o'd' 'e'w'''''''' 't'''n'o'e'w' 'e'r''''''''''w' 'e'u's' 's'e'k'a'm' 'e't'i'r'W'''''''''''''''''''' 't'''n'o'd' 'e'w' 'e'r'u's' 'e'k'a'M' '/'/' ''''C' 't'u'm'*' 's'a' '':':'C' ':'ssert_eq''''''''''''''''0''''get_userle'''';')')'('n'''''''''''e'l'r'e's'''u''as_mut_pt'')'('r''''':':''''''''''>'m'e't'I':':'C'<''''''''_'t'u'm'_'s'a'.''''''''''''')'''('e't'i'r'w'.''_'''''''u')'t'e'g'.'n' ','t'e's'f'f'o'_'l'a'c'o'l'('!'''s'a' ''''''''''' '{' 'e'f'a's'n'u' '=' 'r'e't'i'_'e'd'o'n' 't'e'l'''''''ite''}'n ''''''''''''''''''''''''iter_at_userpos''''''''''''''n 'assert_eq''''''''''''''''''''''''';')'r'e't'i'_'e'd'o'n' ','r'e't'i'_'l'a'm'r'o'n'('!''''s's'a' 't''n let node_iter = unsafe { self.iter_at_node(n, n.get_userlen(), n.num_items as usize) };';''n'u'o'c'r'e's'u'_'''''''''''''r'e's'u'm'u'n'(target_userpos: usize)'.'f'l'e's' '=' 'r'e't'i'_'l'a'm'r'o'n' 't'e'l' '' 'r_at_nod'''''''''e'z'i's'u' 's'a' 'e'n'''''''''''''''')''''num_items';''''''''t'i'_'m'u'n'.'n'('n'e'l'r'e's'u'''''''o'l'_'t'e'g'.'n'(mut n: *mut Node, mut offset: usize, local_index: usize)'''''r'e't'i'.'f'l'e's' '.'s'e'h'c't'a'm' 's'n'o'i't'c'n'u'f' 'r'o't'a'r'e't'i' 'e'h't' 'y'b' 'd'e'n'r'u't'e'r' 'e'u'l'a'v' 'e'h't' 'k'c'e'h'C' '/'/' 'n ' '''')'_' ';')''''l'u'n':':'r't'p''''''_'l'l'u'n''''''''[''*mut Node'''MAX_HEIGH'''''[' '=' ']'T''''X'A'M' ';'' ':'''' 'v'e'r'p' 't'u''head_ptr''''''_'d'a'e'h'm' 't'e'l' '' += usersize;' }n'' 'n'n'' '' ''''''use''rp''o''''''''''''''' 'n ' for entry in &mut self.entries[0..height as usize] {n entry.skip_usersize += usersize;n }' ';'t'e's'f''''s'f'o' '='-' 's'''''r'e's'u'.'f'l'e's' ''' }''n 'n ' '{' ''z'i's'u' ':'t'e's'f'f'o' ','')'f'l'e's' 't'u'm'&'('t'r'a't's'_'m'e't'i'''''''''''''e'd'o'n'_'o't'_'e'v'o'm' 'n'f' 'n ' 'l'u'f'e's'u' 'd'n'a' 'd'i'l'a'v' 'y'l'l'a't'o't'(' '0' 's'i' 'y'r't'n'e' 'n'a' 'f'o' 's'o'p'r'e's'n ''''''local_inde''''';'0' '=' 'x''''''l'a'c'o'l'.'f'l'e'''n '''''''''''''''''''''''''''''' 't'u'm''' as *const _'''''''''''''''' ''''''''''''''';'m'e't'i' '=''?''' 't'o'l's'''*''' (slot as *mut C::Item).write(item); // Do not call drop() on junk.n'''''' '_''// ' '('''' as *mut C::Item)''('''''''''''''''''''''m'e't'I':':'C''''''''''''''''')'''''''''''''''''''''''''''''''.'k'n'u'j'''''t'n'o'c' 'n'o' ')'('p'o''''a'r'd' 'l'l'a'c' 't'o'n' 'o'D''''N' '/'/' ''''('e't'i'r'w'.')''''('_' 't'u'm'*' 's'a' ' '''_'''f'l'e's''''' ''i''''''''''(''''''here_ptr()'''''e'r'e'h'.'f'l'e's'''''e'r'e'h'''' '{' 'e'f'a's'n'u'''''''''''''''8'u''''''e'z'i's'u''''''''-'e'z'i''''z's' ':'t'h'g'i'e'h' ',''n'f 'se''''''n ''''''''''''''''m'e't'i'_'t'n'e'r'r'u'c'''''''''''''''unsaf'''n ''''''''' 't'u'm'''''y'r''''''''''''''''' '''''''''''''''f: &mut fmt::Formatter<'_'''''''''''Resul'''''v'e'r'p'''' '''''''''d''e''bug_struct'''''''r''' .field('userpos', &self.userpos)n'n ' '''''''''''''''''x'e'd'n'i'_'l'a'c'o'l'''''n ''' '/'/' '''''''x'e'd'n'i'local_index''''''l'a'c'o'l'''''''''_''''''''''''''''''''''''n 'mut ''''' ''finis''h_non_exhaustive('''')''''''''''o'n'_''')'('h's'i'n''''e'n'o'N''''i'f'.' ')'s'o'p'r'e's'u'.'f'l'e's'&' ','''s'o'p'r'e's'u'''('d'l'e'i'f'.' ' 'o's'r'u'C'''(name: &st'''r)'''''u'b'e'd'.'f' ''' }''n 'n ' '{' 't'''''u's'e'''R':'n '// ''''''''''''';'n' '=' ']'i'['v'e'r'p' '':'t'm'f' ''n '''''''''''''''''''''''''''''''''n ''''''nul'''''''''''''''''''''''''''''''l'l'u'n' 's'i' 't'n'e'r'a'p' 's'''d'a'e'h' 'e'h'T' '/'/' 'l''_''m''ut()'''''l'l'u'n':':'r't'p' '''''''''''''''''''''''''''''''''''''''''d'a'e'h' 'o't' 'k'c'a'b' 't'n'i'o'p' 's'e'd'o'n' 't'h'g'i'e'h' 'x'a'M''''''' 't'''n'o'D' '/'/' ''' '{' 'd'a'e'h'_'s'i' 'f'i''' ''''''''''''_' 't's'n'o'c'*''''''''''''''''''''t'n'e'r'a'p''''a' 'd'i'l'a'v'n'i''' ','' 's'a' ' ' ' '''''' 'e'''s'l'e' '}'n '''''''''''''''''MAX_HEIGHT_U'''n '''''''(''''''' ''''&self.''''''n ''''''''n ''''''_' 't'u'm'*' 's'a' 'h'n ''''n ';''''ead as *const'expect_parent' '''e'p'x'_;''''''')'''''as'e'_mut_pt'')'('r''''_'s'a'.''''''''''' '{''iter[n.height as usize].nod''}' 'e' 'e's'l'e' '}' 'd'a'e'h'.'f'l'e's'&' '{' '8'''''''T'H'G'I'E'H'''''''''' '// ' let walk_height = (*parent).height as usize - 2;n''''A'M'_'E'D'O'N' '='=' 't'''''''''''' as usize''''''''''''''''e'z'i's'u' 's'a' '1' '-' 't'h'g'i'e'h'.')'n'*'(''''h'g'i'e'h'.'n' 'f'i' '=' 't'n'e'r'a'p'_'t'c'e'p'x'e' 't'e''maybeinit_slice_get_ref''''''''''''''''''e';''c'i'l's'_'t'n'e't'n'o'c'_'t's'e'd'(slice: &[MaybeUninit])''''''e'b'y'a'm'l' ''n '''// ''a'!''''''''''''''''''''''''''''''''''''''e'd'o'n'.''';')']'e'z'i's'u' 's'a' 't'h'g'i'e'h'.'n'['r'e't'i' ','t'n'e'r'a'p'.''''''''''o't'n'i'.'n'(entry.''n'ssert_eq'''''''.'y'r't'n'e'('!''''''r'e's's'a' ''''''n '''s's'a' '>'-' ')'>' ','f'l'''e's'&'('t'm'f' 'n'f' ''ListConfi'''''''''''''''''''''''''''''''n '''}'n '{' '>'C'<'r'o's'r'u'C' 'r'o'f' 'g'u'b'e'D':'''''''''''' ','f'l'e's' ' ''''''''''''''''('e'm'o'S' '=' 'g'n'r'.'''''d'''';'''''n fn get_rng(&mut self) -> &mut '_'SmallRng {n '''&mut self, '''//'_'n '''''''''''''''''''''''''''''''''''''''''''''''''''.'e'n'i'f' '''''''.'e'n'f'i' 's'''''''s' 't'i' 't'n'e'r'a'p' 'e'h't' 's'a' 't'h''''I' ','g'i'e'h' 'e'm'a's' 'e'h't' 'e'r'''e'w' 'f'&mut '''num_items: usize, ''''num_items: usize, '''&mut '''''''' ''''''''''''''''''''','''e'z'i's'u' ':'s'm'e't'i'_'m'u'n' 't'u'''''''''r'o't'a'r'e't'I''''''''''''' 't'u'i'm'&''''7''I''''I''W''''''''''r'e'h't'i'e' ''''''''''''''''''t'o'l's''''''''''ExactSizeIterator'''''c'a'x'E'''''''''''''''''' ',''n ''''''''''''''''''''''''''''''''''''''''.' '' (slot.as_mut_ptr('') as *mut'' C::Item).w'n '''''dest_content_slic''' '=' 'e'''''t's'e'd' 't'e'l' 'rite(item);n''d'e'v'o'm' 'y'// ''l'n'o' 'e'r'e'w' 'y'e'h't' '-' ''''''''''''''''.'s'm'e't'i' 'd'l'(slot.as_mut_ptr() as *mut C::Item).write(item);''o' 'e'h't' 'p'o'r'd' 't'o'n' 'o'D'''''''''''''''''''''''''''''''''.'m'e't'i' 'd'l'o' 'e'h't' 'p'o'r'd' 'o't' 't'n'a'w' 'o'd' 'e'W' '/'/' 't'n'e'r'a'p' 'e''''''''r'o't'a'r'e't'I''h't' 's'a' 't'h'g'i'e'h''''''''''e'i'h''' '''''''''Exact''size_hint(''0'.')'''''e'z'i's'''// 'Size'// 'Iterato''''''''''''''>'m'e'''t'I':':'C'='m'e't'I'// ''<'r''''a'x'E' ':''''''''// 'I''''''''''n 'n '' '' '''''''''''''''''''''''''''''''''num'';')'('n'''e'l''''NODE_'.'s't'num_item''');''''''''NODE_NUM_ITEM'';')'S''''''_'E'D'O'N' '='<' 's''''m'u'n''n'e't'n'o'c' '=' 's'm'e't'i'_'m'u'n' 't'e'l' ''n ''''''''('!'t'r'e's's'a' ' 'debug_assert''''''''''''''''''''num_item'';')'s''''''''e't'i'_'m'u'n' '='''' '>' ')'('n'e'l'.'s't'n'e't'n'o'c'('!''''''g'u'b'e'd' '''s'm'e't'i'_'m'u'n'' ''''n ','e'm'a's' 'e'h't' 'e'r'''e'n ' ' ' '(''self.is_head(')'';'''''pa'' '// ' '' // debug_assert_eq!(, );'n''''n'ren''''(*parent).height a'// 's usize''='=''' > h' '&'&'t')')'' ''|''| ''''' '|'|' ''w' 'f'I' '/'/' '' I'm s''ure ther'''''''' item' i''new_nod''''''''''''''''''''''''''''t'u'm'_''')'('r'e't'i'.''''''''''''''')'s't'n'e't'n'o''n '''''new_userle''''C::userlen_of_slice(new_node.content_slice('''';''')'''))''// ' '=' 'n' 't'e'l' '// ''c''''''''r'u'''c'('p'''i'z'.']'s'm'e't'i'_'m'u'n'n ''''''''n ''''''''''''''''''''''''''''''''''''''''''''''' 't's'a'e'''''n''''''''''''''''''''''''''''''''''''''n '''!'e't'a't's' 'd'i'l'a'v'''n'i' 'n'a' 'n'i' 'e'r'''''n ''' '' // debug_assert_eq!(new_userlen, C:'new_nod''''''''''''''e'c'i'l's'_'t'n'e't'n'o'c'''''''')'('s'm'e't'i'.'''''''i'.'e':''w'e'userlen_o'n'f_slice(conte''nts));n'e'w' ''n // TODO: Make sure the iterator wrote at least num_items. If not, we're in an invalid state!','t'n''o'n' 'f'I' ''n'.''l' 't'a''''''''''s'm'e't'i'_'m'u'n' 'e't'o'r'w' 'r'o't'a'r'e't'i' 'e'h't' 'e'r'u's' 'e'k'a'M' ':'''''''''' ':'O'O'D'O'T''''D' '/'/' 'n ' ''''''''''''';'m'e't'i' '=' 't'o'l's'*''''(' ''.'.'['s'm'e't'i'.'e'''''_'w'e'n' 'n')''''''''''''''''' 'n'i' ')'m'e't'i' ','t'o'l's'('''''''t's'n''''''is_head''''''t'''|'|' ''n'e'r'a''n '''''num_it''''ms''''''contents.len(';')' '=' 'n'e'l' 't'e'l' 'p''''num_it''''ms''n'e'l'''''''''''''num_items''''''i'_'m'u'n'.'.'0' 'n'i' 'i'''''''''''''next(''unwra'')'('p'''''r'w'n'u'.')'''e'n'.'s't'n'e't'n'o'c''i'''''''''''''t'n'e'r'a'p'('''''''it'''''''''''''s''n '''''''''''''''''''''''' 'new_node.items'0'''''''';'m'e't'i' '=' ''''[..contents.len()]' ''' }''n 'n ' '{' 's't'n'e'''''''''n ''''''''''''''''''''''''''''''''''>'T'<''''('e'c'i'l's'_'m'o'r'f'_'r'e't'i'_'d'e'n'w'o''''O' 'n'f' 'e'f'a's'n'u' 'n ' ''t'n'o'c' 'n'i' 'm'e't'i' 'r'o'f''''''r'o'f' '''''n 'n ' 'iz''size_'// 'hint''''; //contents.len() ''''''n'e'l''size_hint(' '''';')''''z'i's'.'s't'n'e't'n'o'c'''''''t'i' '(''/'/'node: *const Node)'''''h'_'s'i'.'f'l'e's''''p'' ''o'c'e's a nicer way to implement this.n if self.rn'n '''''''' 't''''''''''''>'C'<'e'd'o'N'''''''''''''''''''''''''''''''.'r't'p' 't'u'm' 'a' 'd'e'e'n' 'e'w'''''''''''''''' 't'u'b' 'copy''''''''e'n'o'l'c'''''.clone()''''','''''e't'a't'u'm' 't'''n'''''''''''')'('e'n'o'l'c'.'' '// ' // unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &[C::Item], new_userlen: usize, move_curs''or:'''nd_no''' 'ify'bool, mut notify: Notify)' '' '' unsafe fn insert_node_at(&mut self, cursor:'' &mut C'''' 't'u'm'ursor'&', contents: &[C::Item], new_userlen: usize, move_cursor: 'n 'num_items''''''i'_'m'u'n' // unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &[C::Item], new_userlen: usize, move_cursor: bool, mut'num_items' notif'i'y'_':'m'maybeinit_slice_get_ref''''''(slice: &[MaybeUninit])''''y'')'a'm'' '' 'u'Notify)'bool) {'n'n'' '' '''' 'n'' ''o'd''' 'e'W' '// ' unsafe fn ins''ert_node_at(&mut self, cursor: &mut Cursor, contents: &[C::Item], new_u' 'serlen: usiz'// 'e, mo''ve_cursor:'// ' bool)' '' '' 'n unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &[C::Item], new_userlen: usize, move_cursor: bool) {' unsafe'' fn in''sert_node_and_notify(&mut self, cursor: &mut Cursor, contents: &[C::Item], new_userlen: usize, move_cursor: bool, mut' ' notify: Notify)n where Notify: FnMut(&[C::Item], ItemMarker) {n' {n'' '/'/' ''''n '''' ''''''';'_' 't'u'm'*' ''new_node.content_slice()'s'a' 'n'u'm''''' '''=' 'n' 't'e'l' '''g''.is_no'''n 'ne'n if parent.is_null() { bre';'''ak; }'() {n '' self.rng = ''S'n debug_assert!(('n debug_assert!((*parent).height '''I' ','as usize > h);'*pa'n'rent).height as usize > h);'''''I' 't'u'm''ome'n'(SmallRng::from_entropy());n '''''''''''''')'('t'u'm'_''' ''''''''', I: ExactSizeIterator' ','s't'x'e'n'.''' '' 'n // Reached the head.' }n self.rng.as_mut().unwrap()n }n'n 'SmallRn''''''''''''''''';')'('y'p'o'r't'n'e'_'m'o'r'f':':'g''''''l'l'a'm'S' 'e'e's'''f'''''l''''''n ''''''' 'e'f'a's'n'u'''''''''''''''''' 't'u'm''n''''''''''''''''''''''''' 't'u'm''''''''''''''''''''''''''e'z'i's'u' ':'x'e'd'n'i'_'l'a'c'o'l' ','''''''''e'z'i's'''u''' '''''''''''''''''''''_'e'z'i's' ':'// ''t'e's'f'f'''''''''''''''''''''''''.'r'e't'a'l' 's'i'h't' 't''''''''''''','x'e'd'n'i'_'l'a'c'o'l'''''''''''X''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'n'i' 'd'e's''''e's'a'p'''''n '// '''''''''''''''''''''''n '''''''''''''''n '''''''n '''''''''''(*n).heigh''''''''''''' '' cursor.entries[h] = SkipEntry {' 'n node: n,' 'n '''n ''n '' ''''n ''''''''''n '''''''''''d'l'u''''''''''''o't' 'e'l'b'a' 'e'b' 'o'h'S'''''''n ''''''''''''''''''''.'d'a'''''' '''// ' ''' 'new_nod''''r'''t'p'_'e'''''''o'n'_'w'e'n''' '' '' '// ' ' ' if height > 1 {' 'n '' '// ' let mut n = e;'' ' '' 'n '' '// ' // let new_parent = cursor.ent''''_'w'e'''n'''''r''i''e''s[h' 'eight - 1''].node;n'// '' 'n // If you imagine thi' '' '// ' 's node as a big building, we n''eed to''' '// ' 'n '' /' '// ' '''/ update the pa'// 'rent of all the node''s we cast a shadow'// ' ' 'over.' '' 'n '// ' ' '' // Can't use copy_within because we aren''''' 't'u'm'&''t su'':':''''>'C'<'re if the typen // implements Copy. Memmove the existing items.'n ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.' ptr::copy(n &c'item_idx'[offset_bytes],n 'item_idx + num_inserted_items' &mut c[offset_byt''''''''UninitOwnedIte'':':'''r''UninitOwnedIt''''''''''''''('e'c'i')''l's'_'m'o'r'f'.'''e'''''''''>'C'<'r''''''i'n'i'n'U' '''''s'm'e's''''''t'''i'_'''''''''x'd'i'_'m'e't'i'm'u'n'.'''e''s + num_inserted_bytes],n (*e).num_bytes as usize - offset_bytes);''s'm'''''''m's'e't' 'n ''''''''''''''''''''''''''''''''''''['c' 't'u'm'&''item_idx..item_idx + num_';'inserted_items]' '=' 'e'c'i'l's'dest_content_slice'''''t's'e'd''_'t'n'e't'n'o'c'''''_'t's'e'd'''''_'w'e'n' 't'u'm''''n''''w'e'n' 't'e'l' ' // Then copy in the new ite'''item_id'''item_id''''num_inserted_items''''m'u'n' '+' ''contents'''''t'n'o'c'x'''''m'e't'i'.'.'']'x'''''m'e't'i'['c'''ms. Can't memcpy from an iterator, butn // the optimizer should make this f'dest_content_slice'''''t's'e'd'ast.''i' 'g'n'i't's'i'x'e' 'e'h't' ''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''n ''''''''''''''''''''''''''''''C::userlen_of_slice'&''''item_idx..item_idx + num_inserted_items]'['c'''(contents);' '=' 't'n'u'o'c'r'e's'u'_'d'e't'r'e's'n'i'_'m'u'n' 't'e'l' ''''''''''''''''''''''.'t's'a'f' 's'i'h't' 'e'k'a'm' 'd'l'u'o'h's' 'r'e'z'i'm'i't'p'o'''''t's'u'r' 'e'h't'''''e'p'o'h' 't'u'b' ','r'o't'a'r'e't'i' 'n'a' 'm'o'r'f' 'y'p'c'm'e'm' 't'''n'a'C' '.'''''' '' ''n 'n for (cell, item) in into.it' 'er_mut' '().zip' '(iter) {n ' ' *cell = item;n }' '' '// ' ''d'a'e't's'n'dest_content_slice'''''t's'e'd''i' ' ptr::copy(' 'n &c[leading_bytes + removed_bytes],' 'n &mut c[leading_bytes],' 'n 'n '''''''''''''''''''''''''''''''''''''''''s't'n'a'w' ''''''''''''''''''''''''''''''''''''''// '''''''''t'''''''''t'u'm'_''')'('r'e't'i'.''o'l's' ''' '' '// ' '*slot.as_mut_ptr() ='inserted_conten''next('''''''''';''''''';'''/')'// ''('p'a'r'w'n'u'.''''(')''''x'e'n'.'t'''''''t'r'e's'n'i''' item;' ''''''''''''''''''''t's''' ''e'd' 'n'i''''''' '=' 't'o'l's' 't'u'm'&'''''''' 'n'i' 'i' 'r'o'f'''''''n '''''' ''' }''n 'n ' '{' ' 'index..index + replaced_items_here' '/':' 't'n'e't'n'o'c'_'d'e't'r'e's'n'i' 'f'o' 'p'i'h's'r'e'n'w'o' 's'e'k'a't''''''s'e'v'i'g' 't'i' 't'u'b' ')'('p'i'z' 'e's'u' 'o't' 'r'e'f'e'r'p' 'd'l'u'o'W' '/'/' ' trailin'// 'g_bytes);''''e'v'o'm'm'e'M''''M' '.'y'p''''&'o'C' 's't'n'e'm'e'l'p'm'i' '// ''e'p'y''maybeinit_slice_get_ref''''')'''(slice: &[MaybeUninit])'''''b''// 'y'a'm'' 't' 'e'h't''''i' 'f'i' 'e'r'u's' 't'''n'e'r'a' 'e'w' 'e's''' ptr::cop'''_'y(n &c'''''('*'''i'as_mut_ptr'''''''''D''''''''p'_'t'u'm'_'s'''''''''d'e'c'a'l'n ''''''''''''maybeinit_slice_get_ref(dest';')' '=' 't's'e'd' 't'e'l' ''p'e'r'a't'''''''''')'('t'u'm'_'t'e'g'.'em_idx + rem''''t's'e'd''maybeinit_slice_get_ref(dest)'''oved_here''leading_bytes + removed_bytes'''item_idx'''''''i'_'m'e't'i'it'trailing_items''''''''n'i'l''maybeinit_slice_get_ref''''')'''(slice: &[MaybeUninit])'''''' 'b'y'a'm'i'a'r't'em_idx + removed_here'[leading_bytes + removed_bytes],n &mut c[leading_bytes],n trailing_bytes);'' 'n ' ptr::copy(' 'n &c[item_idx],' 'n &mut c[item_idx + num_inserted_items],' 'n (*e).num_items as usize - item_idx);' 'u'a'c'e'b' 'n'i'h't'i'// ''w'_'y'p'o'c' 'e's'u' 't'''n'a'C' '/'/' ' ' c[..].copy_within(item_idx..e_num_items,n item_idx + num''_inserted_items);n' '' 'n '' '''// '/''/ So, if'' o't'u's'r'e' height ' '// ' ';' 'd' 'is 3 a'// 'nd the next nodes 'maybeinit_slice_get_ref(dest)'have heights 1' ' '''new_node_ptr'''''''o'n'_'w'e'n''' ' 'n '// ' // and 2, they bo' 't''h need new parents.' '// ' 'n l' '// ' '' 'et mut skip_height = 0;n' '// ''// ' 'n '// ' loop {' ''' ' ''// '// ' 'n ' ' // dbg!(skip_height);' '// ' 'n ' '// ' ' // dbg!((*n).height as usize);n' 'n ' ' n = (*n).nexts_mut()[skip_height].node;' 'n ' ' if n.is_null''('') || (*n).height >= height as u8 { break; }' '.'''''''''e'w' 't'u'b' ',''' 'n ' ''''''''''''num_''insert'ms'ed'r'_ite'aining'm''''num_inserted_item''n '''''''''num_''insert'ms'ed'r'_ite'aining'm'''''''n ''''''''''''''''''''''''''''n'''i'm''''''''n'ms'um'r'_ins'aining'erted_item'''NODE_NUM_ITEM'';')'S''''M'U'N''''''''''X'A'M' ','s'''u'n'('x''insert_here''''''r'e's'n'i'n '''num_''insert'ms'ed'r'_ite'aining'm'''''insert_her';'e''''''r'e's'n'i' '='-' 's''''m'u'n' ''a'm''''M':':'e'z'i's'u' '=' 'e'r'e'h'_''''+'t'r'e's'n'i' 't'e'l' ''' '' ''''''' }' 'content'' ','s''''''''t'n'e't'n'o'c' '''''n '' '// ' 'n 'n' ' '{' '0' '>' 's'''' 'n }' '''''_'m'u'n' 'e''// 'l'i'h'w' ';'s'''''_'m'u'n' '=' 's'''''_'m'u'n' 'n // for chunk in contents.take(NODE_NUM_ITEMS) {' '' 't'u'm' 't'e'l'// ''n // TODO: We could cac'n // ''''''')'('r'e't'i''''t'.' // let userlen = C::userlen_of_slice(chunk);''n // self.insert_node_at(cursor, chunk, true, notify);'he this each time t'// 'he height goes up?' 'n (*n).parent = cursor.entries[(*n).height as usize + 1].node;' 'n skip_height = usize::max(skip_height, (*n).height as usize - 1);' 'n }' 'n }''''''''''n 'n ' 'n ' 'n ' 'n ' ''e'h' 'e'h't' 'd'e'h'c'a'e'R' '/'/' ''''''''''''''''''''''''''''''''''''''''''''}' ';'k'a'e'r'b' '{' ')'('l'l'u'n'_'s'i'.'t'n'e'r'a'p' 'f'i'''n '''n '''''''''''''''''''.'l'l'u'n' 's'i' 'n' 'f'''''''''''t''''e'k'a't''n'e'r'a'p' 't'' '// ' debug_assert!((*parent).height as usize > h);'''''' '' '' ' // Walk fr''om parent back to n, fig'n ''''''''''''''''' offset;''''''''''';'t'e's'f'f'o' '=' 's'o'p'r'e's'u'.'r'o's'r'u'c' 'uring out the of'''' 't'u'm'fset.' let c = parent;n'n'n'n'n'''''''n 'let'''''''''''t'h''2''''1''''2'''g'i'e'h'_'k'l'a'w' p_'''I' ','heig''ht''''''''''''' '''''''''=' 'm'e'l'e' ''n ', mut inserted_co''''''I' 't'u'm''''M'&'''ntent: &[C::Item]'', I: ExactSizeIterator' ''''''''''''''''''''skip_usersiz';'e'''', I: ExactSizeIterator'''''''''', I: ExactSizeIterator' ','''''u'_'p'i'k's'.'m'e'l'e' '='+''' 't'e's'f'f'o' ''n '''''''''''''''';'e'd'o'n'.'''''''.'e'm'e'l'e' '=' 'c' ';''t'e'l' ='' (*parent).height as usize'walk_heigh']'t'''''''''i'e'h'_'k'l'a'w''' - 1;' ''e'l'i'n 'debug_assert''inserted_conten'''''''''''replaced_item'';')'s'''''''c'a'l'p'e'r' '='>' ')'('n'e'l'.'t'''''''''''''n'o'c'_'d'e't'r'e's'n'i'('!'''''u'b'e'd' '' 'k'c'e'h'c' 'd''''''''''''''su''''''''''''''''1'(*parent).height'' '-' 'e' as usize''z'i's'u'''''''u's' 's'a' 'n''a'e't'''''''t'n''''''''n ''''''''''t'h'g'i'''''e'h'_'p' ''''''''''''''''''''''''''''''n'''n '''''local_inde''''local_index.expect('Invalid marker - item not found in'' n'// 'ode'';')' '=' 'x'''''''''n'i'_'l'a'c'o'l' 't'e''local_index''''''l'a'c'o'l''''''''''''o'''l''''='o'l' '''n ' ' ' ' ''' '''' '''c'''' 't'u'm':'''''':''&':'C'''''''''.f''''''''''''t'''' 't'''u'm'&'''''''''''''' ' '' '' ''n ''''''''''''''''''''C::userlen_of_slice''(ol''d_it''em't's';')' '=' 'e'z'i's'r'e's'u'_''''''''''i's'_'d'l'o' 't'e'l' ''''' let new_items = &inserted_content[0''..r''epla''ce't'd_items_here];n''' let new_usersize = C::userlen_of_slice(new_''i''tems);n 'd' 's' let'' usersize_delta = new_usersize as isize - C::use''rle''n_of''_s'd''t's''lic''e(old_items) as isi' let new_items ='old_item';'s''od' '(*e).items''''(*'''&inserted_content[0..replaced_ite'old_usersize''''''u'_'''d'l'o'ms_here];n'ze;nn'''''n // unsafe fn insert_at_iter_and_notify(&mut self,'' 'n ' let new_usersize = C::userlen_of_slice(new_items);n let usersi'// 'ze_delta = new_usersize as isize - C::userlen_of_slice(old_items) as isize;nn' ' cursor: ''&mut Cursor, contents: &[C::Item], mut notify: Notify)' '','g'i'f'n'o'c'.'f'l'''''''f'.'e's'''''':'c' ''self.iter_at_node(n, of'n // ' 'w' '' 'he''' let new_items =''inserted_content''''(*'''&(*e).items[0..replaced_items_here];''od''old_item''';'s'''d'o' ''''''''''s'm'e't'i'.')'e'*'('''''''*'(''''inserted_content'''&inserted_content[0..replaced_items_here];n're Notify: FnMut(&[C'd'::'s'Item''], ItemMarker) {'fse'local_index.expect('In'' 'n ' let new_usersize = C::userlen_of_slice(new_items);n let usersize_delta = new_usersize as isize - C::userlen_of_slice(old_items) as isize;nn' 'valid m'' 'n ' '''''''''s'm'e't'i'_'d'l'o''' for (slot, item) in new_node.items[..num'''''''''''''''''''''''''''''''''''''.'t'n'e't'n'o'c' 'd'e'v'o'm'e'r''''' 'd'l'o' 'e'h't' 's'p'o'r'd' 's'i'h'''''''s'i'T' '/'''''''''''''n'I' '/'/' ''''''' '/'''''''''''''''''''t'n'e't'n'o'c'_'d'e't'r'e's'n'i'_items].iter_mut().zip(contents) {' 'n *slot = item;' 'n // (slot as *mut C::Item).write(item); // Do not call drop() on junk?' 'n }' 'n' 'arker - item '// 'not found in node')'''''t, local_ind'''n 'ex)' d'n // Now we need to make a cursor at''''''''''''''''''''y'p'o'C''''''e'n'o'l'C' ':'m'e't'I':':'C' 'e'r'e'h'w' ' the node/userpos location pair.n let mut cursor = Cursor {n userpos: 0,n '' local_index: local_index.expect('In'''n ''''''''''''''''''ItemMarke'''' ''''''new_nod'''''''' 't'u'm'&''''n '''''''''''''''d'e'i'p'o'c''''''''')'('d'e'n'o'l'c'.')'('r'e't'i'.''''''''''o't'n'i'.'_phanto'''PhantomData''Ph''Phan';'tomD''ata'''h'P' ':''';''m'''nn fn no_notify(_items: &[C::Ite' // unsafe fn insert_at_iter_and_notify(&mut self, cursor: &mut Cursor, contents: &[C::Item], mut notify: Notify)' // where Notify: FnMut(&[C::Item], ItemMarker) {' '' 'n'' 'n'' 'm], ''_marker: ItemMarker) {}'''''h'p'_' ','r't'p'_'e'''''''o'n'_'w'e'n' ':'''r't'p' ''''' '// '')'}''n 'n '_and_notif'(&mut self, cursor: &mut C'&mut''''''''s't'n'e't'n'o'c' inserted_content.iter().copied()'ursor, contents: &[C::Item], mut notify: Notify)n '// ' where Notify: FnMut(&[C::It''_'y''' '' '' '' '' '' '' '' ''''' '''{' 'r'''''m'e't'I''''M' ','s't'n'e't'n'o'c'('y'f'i't'' where Notify: FnMut(&[C::Item], ItemMarker) 'n''''''o'n' 'n ' 'valid marker - item not found in node'),n entries: [SkipEntry {n node: &self.head as *const _ as *mut _,n '''''''n 'unsafe fn insert_node''''''''''''''''''>'y'f'i't'o'N'<'y'f'i't'o'n'_'d'n'a''''''''''':':'r'e't'i''' '&mut contents.iter().copied()''t'u'm'&'''''''''''':':'r'e't'i':':'d't's''''''('e'c')''''n'o'''''''''_'''_''at(&mut self, cursor: &mut Cursor, contents: &''[''''''', mut notif'n ' ''where Notify: FnMut(&[C::Item], ItemMarker)'''n ''''''insert_node_at''''''r'''''''''s''''''''''''n''''''''''''r';''o's'r'u'c'_'e'v'o'm'e'l'r'e's'u'_'w'e'n't'n'e't'n'o'c'o's'r'u'c'(cursor: &mu'&mut iter::once'''d'n'e'(start)'t Cursor, contents: &[C::Item], new_userlen: usize, move_cursor: bool)'''''''t'r'e's'n'i'.'f'l'e's''' ' {' 'y:')''' ''N''' }''n 'n ' 'otify' ','C::Item], new_userlen: usize, move_cursor: bool) {' 'n ' ' '''n '''''''''''''''''''':''''' ','s'm'_''''''''' ':'r'e'k'r'a'm''e't'i'_'(&[C::Item], ItemMarker'''}'{' ')''''('y'f'i't'o'n'_'o'n' 'n'f' 'n ' 's'n '''fn notify(&mut self, _items: &[Self::Item], _at_marker: ItemMarker)'/'/' 'kip_u'// 'se''''''i't'o'n''''''''''''y'f'i't'o'n'_'d'n'a'_'rsize: usize::MAXn }; MAX_'''' 't'u'm'HEIGHT],n };nnn for i in 1..self.hea'n uns'''''''y'f'i't'o''''o'N'''''>'F'<'''''''>'F'afe fn insert_at_ite''''''''''''''''y'' 'n ' '''''''''''''''C'''''''ItemMarker'C'' ',''''''':':'c''''''''''''''''''''']'m'e't'I':':'f'l'e'S'['&' ':'s'm'e't'i''''''''''' ')'('t'u'M'n'F' ':'y'f'i't'o'N' '''''''''' ':'y'f'i't'o'n' 'e'r'e'h'w' ''' ''f'i't'o'N' ':'y'f'i't'o'n' ','r(&mut self, cursor: &mut Cursor, contents: &[C::Item]) {'d.height as usize {n n = (*n).parent;n // And find the local offset. Noten }n unimplemented!();''''n ''''''iter_''iter_at_node'mut n: *mut Node''n''mut offset: usize'''''''t''local_index: usize''''''''''''x'nn cursor''''e'd'n'i'_'l'a'c'o'l'e's'f'f'o'(mut n: *mut Node, mut offset: usize, local_index: usize)''''''_'r'e't'i'.'f'l'e's' '''ebug_assert!((*parent).height as usize > h);'''''n';'t'h'g'i'e'h'.')'t'n'e'r'a'p'*'(' '=' 't'h'g'i'e'h'_'p' 't'e'l' 'n ' 'e'r'''''''''''''''''''''y'p'o'C' ':'m'e't'I':':'C' 'e'r'e'h'w' 'a'p'''s'n'i' 'd'l'u'o'C' '?'?' '/'/' 'n ''''''''''''''''''''''''''''''''''''''''''''''''.'e'r'e'h' 't'n'i'a'r't's'n'o'c' 'y'p'o'C' ':'m'e't'I' 'e'v'o'm'e'R' ':'O'D'O'T' '/'/'n''''''''''''''''''''''''''' ','''g'n'i''''n' 'o'''n ' where C::Item: Copy' ''''''''''''''''n '''''''''''''''' '''''''''''''''''''''''''y'p'o'C' ':'m'e't'I':':'C' 'e'r'e'h'w' '''''''''''''''''''''''''''''''''''''>'m'e't'I':':'C''''<'<'c'e'V' ':''''2''''1' '-' 't'h'g'i'e'h'.')'c'*'('[''''''''''''<'''''''''''>'m'e't'I':':'C''''<'<'c'e'V' ':'s't''''s'x'e'n'.')'c'*'(' '=' 'c' ''' }''n 'n ' '{' 'n' '='!' 'c' 'e'l'i'h'w' ';'t'n'e'r'a'p' '=' ''''u'c''''i' 't'e'l' '.'t' 'k'c'a'b' 't'n'e'r'a'p'''''''p'b' 'm'o'r'f' 'k'l'a'W' ' ' ''''''''''''''''''''''''''''''n 'n '// ' ' ''''''''' '// ' 'n ' let mut n = new_node_ptr;n loop {n n = (*n).nexts_mut()[new_height_usize - 2].node;n 'n ''''''print(';')''''i'r'p'.'f'l'e's' ' 'n 'if cfg!(debug_assertions) {'''''''''v'n'''}' 'e' 'f'i'' '''''''check(';')'''''c'e'h'c'.'f'l'e's' ' if n.is_null() || (*n).height >= new_height { break; }nn (*n).parent = new_node_ptr;n }' '.'n' 'o't' 't'n'e'r'a'p' 'm'o'r'f' '''''''n ''''''''''';'t'n'e'r'a'p' '=' 'n' 'n ' ''''''''''''''''''''''.'t'e's'f'f'o' 'e'h't' 't'u'o' 'e'r'u'g'i'f'''''''p'u' 'd'n'A' '/'/' '''''''''''';'1' '='+' 'h' ''''''''' '''' '''''' '''n 'debug_a'n'ssert'''''''''''''''''''''e'z'i'n n = (*n).parent;''s'''''u' 's'a' ''''''''''' 's'a' ''';')'h' '>' 't'h'g''n debug_assert!((*n).height as usize > h);'i'e'n''h''n'.')'n'*'('('!''''''g'u'b'e'd' ' ' ' skip_''' '' n = (*n).''''n '''''n 'n ' ''n ''''''''''''''''_' 't's'n'o'c'''''''''''''''''' '''_' 't's'n'o'c'*' 's'a' '*' '''s'a''n''d_no' 'ify''''''''''' 's'a''''''&''''''''''''''''''''''n '}' ';'k'a'e'r'b' '{' '''d'a'e'h'.'f'l'e's' '='=' 'n' 'f'i' 'parent;''''n 'n ' 'usersize: offset' '// ' 'n };' 'n''' '// ' }''n 'n '// ' ' '{' 'e'z'i's'u''' '''''s'a' ''''n ''''''''''n '''// ''''''''''''ItemMarke'''' ''''''''n '_phant'm'o'''PhantomData' ':'n''';'_''''PhantomData''''a'h'P' ','e' ':'r't'p' ''''' '' 'nd_no' 'ify' ')'}''n '' 'n ' '{' 'r'''''m'e't'I''''''r'a'M' ','s't'n'e't'n'o'c'('''notif'''('y''''''f'i't'o'n' 'y'f'i't'o'N' '/'/' 'n ' 't''// ' '<' 'h' 'e'l'i'h'w''' '''''''n 'println'''''''''''''''''''''''''''''''''''}'{' '''t'h'g'i'e'h'''''''h'e' '}'{' 's't'n'e't''' '// ' 'n ' ''?':' ''?':' println!('remo''''''content_slic''''''''''t'h'g'i'e'h' ',')'('e''''n'o'c'.')'e'*'('vi''ng {} contents {} height {}', e, );n' ''''n 'n'o'c' '}'{'''''''''''''''' '''s't'n'e't'n'o'c''' ',''';')'e'' '''' ','''g'n'i'v'o'm'e'r'''('!'''''n'i'r'p' 'n ' ' }'n ' ''// '{' 'p'o'o'l'''''''l'i'h'w' ';'// ''0' '=' 'h' 't'u''''m'm''''' '=' 'h' 't'e'l' '''// ''''n 'n ' ''''''n '' ''''''''''''''''''''' 't's'u'j' 'n'e'v'e' 'd'l'u'o'C' '/'/' '''''n ''''''''''''''''''''''''''''''''''{'' ' 'e'z'i's'u' 'h''''s'a' '' 't'h'g'i'e'h'.')'n' '' ''*'('.'.'0' 'n'i' 'h'' ''' 'r'o'f''' }'n ''heigh''t''''''i'e'h''''e'''''''h'g' 'n ' ';'0' '=' '' 'n 'for h in 0..(*n).height as usize { ' ' 't'h'g'i'e'h' 't'u'm' 't'e'l' '' 'e'b' 't's'''' 'n cursor.entries[0] = SkipEnt''ry {'arent'' '1''' '0''''1''' 'n node'n ''''''''''''''''''''''''''here_ptr(''n ''''''''''''''''''''''''''''''''e'z'i's'u' 's'a' '''n 'if height >= cursor_node_height '''n '{''''if h'''''''''''''' 'arent' ' } else {n'' els' {'e'}''eight >= cursor_no''d''e_'n cursor_node'heigh'''if'height''''geug''(*n)'n } else {'.height as usize''geug';''''n '''' height >= cursor_node''''1' '-' '_height {'t '''n '' 'arent' '{' ';''' '' '''''''''''{' 'e's'l'e' '}''''''''' 'new_parent = ''' '' ''''''''t'h'g'i'e'h'''''''''''''g'u''''';' '''''n ''e'g''(*n).height as usize' if n_height >= cursor_node_height {' ''''1' '-' ' 'n '' '' '''''' '''''a''r''ent' ne''''1' '-' 'w_par''ent = cursor.ent''r''i''e''s[skip_height + 1].nod''e' 'arent' 'n '' 'arent' }'''''''''''''''''''''''''''';'e'd'o'''''n'''''_'r'o's'r'u'c' '=' 't'n'e'r'a'p'_'w'e'n' 't'u'm' 't'e'l' '''''cursor_nod'''heigh'''''''''''';'e'z'i's'u''' 's'arent''a' 't''''i'e'h'.')'e''''''o's'r'u'c'*'(''''*' ''''''''1' '-' ''=' 't'h'g'i'e'h'_'e'd'o'n'_'r'o's'r'u'c' 't'e'l' ';')'''''e'r'e'h'.'r'o's'r'u'c' '=' 'e'd'o'n'_'r'''''n ''''''''''''''''''''''''''';'t'h'g''''''''''e'z'i's'u' 's'a' 'i'e'h'.')'n'*'(' '' 'n ' let n_height = (*n).height;' ''=' 't'h'g'i'e'h'_''''-'n' 't'e'l' ''o's'r'u'c' 't'e'l' ''n ''''''''1' '-' ' '' '' ''''''''''''''''''''// '''''''e'z'i's'u' 's'a' ''''' '='>' 't'h'';')''g'i'e'h'_'n''skip_height''''// '''p'i'k's'('!'t'r'e's's'a' ': n,' ''// 'n '''''''''''''''''''''''''''''''// ''// '''''''''''''''e'e'r''''n 't' '''''s't'n'e'r'a'p' 'e'// ''h't' 'p''// 'u' 'k'l'a'w''' 'o't' 'd'e'e'n' 'e'w' '// ''w'''''''''t'''h'g'i'e'h'_'n'o'N' '''// '' '/'/' ' '''n '// ' ' 'n 'i'// 'nsert'// ''''// '_''node_''and_no''tif''y(curso'// 'r: &mut Cursor, c'''' no' ' skip_height = n_height - 1;''n'''' - 1''' '' '' '' ' '' '' ' (*n' ').parent = if '''// 'curso''r_' '' ' ' }' 'n }' '' ' ' '' 'n'' ' ' ' '' ' 'node_'/''''1' '-'' - 1''' ''''''' 'n skip_height = n_height - 1;' ''''/ 'height >' ''' (*n).''height '' '// '{' ' '''''1' '-' ' '' '' '' '=''' '// '''cursor_node' ' ' 't' ' + 1''''''h''''''' 'g' '''i' 'e' 'h' '_' } else {' '// ''n' ''''1' '+''''''' '-' ' '// ' '// ' // TODO: ''We should be able to cache this each t't'i'// 'me'h'''n ''''''''''''''''// ''''''''e'z'i's'u'' '' '// ' 'if'n_heigh' 't'''' '='>' cursor_nod' '// ' ''''''''''''''cursor.entries'skip_height'''''''h'_'p'i'k's'[n_height a'// 's usize].node' '=' 't'n'e'r'a''// 'p'_'w'e'n' 'e_heigh''t''''''''='''<''' > ''''' '// ' 'new_paren';'''t'''''''a'p'_'w'e'n''' }''n 'n ' '{' 'n_height' ' 's''''' 'skip_heigh''''''''''''''''''''''''n ';'e'z'i's'u' 's'a''''=' 't'h'g'i'e'h'''''''i'e'_'n' '=' 't''''''_'p'i'k's' ''' }''n 'n ' '{' 'a' '''''skip_height'''''''''i'e'h'_'p'i'k's' '>' 't'h'g'i'e'h'_'n' 'f'i' 'n ''n n '' assert_e'''n 'n ' 'q!((*n).parent, e);n (*n).parent = '// 'if cursor_node_height > n_height {n cursor_noden } else {n // TODO: We should be able to cache this each timen // the height goes up.n cursor.entries[n_height as usize].noden };nn skip_height = usize::max(skip_height, n_height as usize - 1);''g' 'i' 'e' 'h' '_' // the heig'n'ht goes u'.'p'n'n'n'' 't''''''''''''''''''''''c''' 'o't' 'e'l'b'a' 'e'b' 'd'l'u'o'h's' 'e'W'ify','ontents: &[C::Item], new_userlen: u''si''ze, move_cursor: bool, mut n''otify: Notify)' skip''_usersize: offset' 'n };''' 'cursor_n''ode_heigh''''''''''''''''''n '''// ' ' } else {n' '' 'cursor_node'''''''r'o's'r'u'c' ''' 'e''' '' '' '' '' '''''''''''{' 'e's'l'e' '}'n 'n } else {''n cursor.entries[(*n).height as usize + 1].node' '{' 't'h'g'i'e'h'.')'n'*'(' ''' ';' }'n '''='>' 't'''''''r's'o'r'u'c' 'n '' for i in 1..'insert_node'at'_''insert_node_and_notif'(cursor: &mut Cursor, 'C'contents: &[C::Item], new_userlen: u''size, move_curs'n ''' 'f''// 'i''n ' ' ' // TODO: We could cache this each time'''''' }'n ' the height goes up'''n '?'or: bool, mut notify: Notify)'''y(cursor: &mut Cursor, c''''''''''''y'f'i't'o'n' ','ontents: &[C::Item], new_userlen: usize, m'''n 'o''''v''e_cursor: bool, mut notify: Notify)'self.hea'''and_no''tify'''d.''he''i''ght'' a'n's usize {' 'n '' notify',''' '// ' n 'n if n.is_null() || (*n)'// '.height >= height as u8 { break; }'= ('n'*n)''.pa''n n = (*n).nexts_mut()[skip_height].node;'''''''n 'nn fn'' no_notify(_items: &[C::Item], _m'n dbg!((*n).content_slice());'arker: ' dbg!((*n).con'n dbg!((*n).height);'ten'n't_slice());n'ItemMarke'// 'r) {}' 'rent''*''''''t''''n ''''''n ''''''''is_head''''''''t';''n'e'r'a'p'.'n'(nod'e'''e: *const Node)''''_'s'i'.'f'l'e's' 'h'g'i'e'h'''')''(';' 'n ''''''''content_slic'''assert_eq'''''''''''''''n'''''';')'e' ','t'n'e'r'a'p'.')'n'*'('('!''''s's'a'''n '';')')'('e'''''''''_'t'n'e't'n'o'c'.'n'('!'g'b'd' ' 'n '' '' // And find the local offset. Note' '// ' 'n }'''''n 'n ' ''''''n ''''''r'o's'r'u'c'// '' 'n ';' ' 'n ' 'u'j' 'd'l'u'o'h's' ''''''' 's'i'h't' 'e'b'y'a'M'(' '.'r'e'l'l'a'c' 'y'b' 't'e's' 'e'b' 't's'u'm''''t'e's' '/'/' '''n 'if cfg!(debug_assertions) { self.check(); }' 'n ' '''A'M':':'at'''''''''''''y'f'i't'o'n'_'d'n'a''''''e'''''z'i's'u'''e's' 'l'l'''e'W' '/'/' ''o'''''''''''y'f'i't'o'n' ','''''i's' ',''''''''''''''''''' ' ' ''''''''''''''''''';'0' '=' 't'e' ''s'f'f'o' 't'u'm' 't'e'l' ''' 'n // No''';'w we need to make a cursor at the node/userpos location pair.n ' 'let mut cursor = Cursor {n ' ' userpos: 0,n local_index: local_index.exp' 'ect('Invalid marker - item not found in node')' ',n entries: [Skip' 'Entry {n node: &self.head as *const _ as *mut _,n skip_usersize: usize::MAXn }; MA'// 'X_HEIGHT],n };''''Curso'''>'C'<'r'''''''' // If you imagine this node as a big building, we need ton // update the parent of all the nodes we cast a shadow over.n // So, if our height is 3 and the next nodes have heights 1n // and 2, they both need new parents.'' ''''''''''''''''''''''''''''''''''''''''''''''''''n '// ''dbg''skip_heigh'''n '// '''''''(*n).height as usiz'''''n ';')'e'('!'g'b'd' ';')'t''''''_'p'i'k's''''''''''k's'''('!''''g'b'd' ''''''''''''''''''''''''''''''''''''''''''''''''''skip_height'''''p'i''n '''''''''''''''''d'l'u'o'''''''u'p'c'''''''''''''''''''''''''''''''''''''''''''''?'p'u' 's'e'o'g' 't'h'g'i''''i'e'h''''r'u'c' 'e'h't' 'e'm'i't' 'h'c'a'e' 's'i'h't' 'e'h'c'a'c' 'n'a'c' 'e'W' ':'O'D'O'T' '/'/' 'k's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' (*n).parent'cursor.entries'(*n).height as us'''1' '-'ize''skip_heigh''''1' '+'' ' 't'''''p'i'k's'[height - 1''''''''''''skip_heigh'' ','t''m':':'e'z'i's'u'''].node' = new_parent;n'n'''''''''''''''''''''''''n 'skip_heigh''''skip_heigh'''''''''''''''''''''''''''''e'z'i's'u' 's'a' '''''''''''''''''''u's' 's'a' ''';')'t'h'g'i'e'h'.')'n'*'('('x''''p'a'm'.'t''''''_'p'i'k's'''''''''''x'a'm':':'e'z'i's'u' '=' 't''''''_'p'i'k's' '''''''''''''''''''''''''''' 'e'h'T' '.'s't'n'e'r'a'p' 'w'e'n' 'd'e'e'n' 'h't'o'b' 'y'e'h't' ','2' 'd'n'a' '1' 's't'h'g'i'e'h' 'e'v'a'h' 's'e'd'o'n' 't'x'e'n' 'e'h't' 'd'n'a' '3'''''''''' ','2' 's'i' 't'h'g'i'e'h' 'r'u'o''''w' 'f'i'''''''e'n' 'e'h't' ','o'S' '.'r'e'v'o' 'w'o'd'a'h's''''s' 'a' 't's''''n'a'c' 'e'w' 's'e'd'o'n' 'e'h't' 'l'l'a' 'f'o' 't'n'e'r'a'p' 'e'h't''''''''''''''s'e'd'o'n' 'e'h't' 'l'l'a' 'e't'a'd'p'u' 'o't' 'd'e'e'n' 'e'w' ','g'n'i'd'l'i'u'b' 'g'i'b' 'a'''''''e'b' 's'a' 'e'd'o'n' 's'i'h't' 'e'n'i'g'a'm'i' 'u'o'y' 'f'I'''''''''''''''''''''''''''''''''''''' 't'a'h't' 's'e'd'o'n' 'e'h't' 'l'l'a' 'e't'a'd'p'u' 'o't' 'd'e'e'n' 'e'W' '/'/' ''' '''''''''''''''''''''''';'0''''-''''''';'1' '=' 't'h'g'i'e'h'_'p'i'k's' 't'u'm' 't'e'l' '''''''n 'n ' 'n ' 'n ' ''o's'r'u'C' '>'-' ''''''>'C'<''''''' }''n 'n ' '{' ')'e'd'o'N' 't'u'm'*''''&' ':'e'd'o'n' ','f'l'e's' 't'u'm'&'('e'd'o'n'_'t'a'_'r'e't'i' 'n'f' 'b'u'p' 'n ' ''''''''''''='='='=''')'e's' ''''''<''''Q: Queryable>''''''''Queryabl'>'e'<''''('''''''''''''''>'e'l'b')''''a'y'r'e'u'Q' 's'a' ''''<''''''''''''''''')'''''Queryabl'>''''>'e''''''y'r'e'u'Q' 's'a' ''''''''''''' 's'a' 'm'e't'I':':'C'(''''''''r'e'u'Q' ':'Q'<''SmallRng::seed_fro''''''''Queryable'''''r'e'u'Q''y'r'e'u'Q':':'Q'''m_u64(123)''t'u'm'&':'t'm''''n ''''''''''''''''''''''''''''''''''''''''' }''n 'n ' '{''''-' ')'4'6''''''''''''e'f'a's'n'u'''''''u'p' ''''''' 'e'f'a's'n'u''u' ':'d'e'e's'('d'e'e's'_'m'o'r'f'_'g'n'''''''''''''''''''r'f'_'d'n'a'r'_'t'i'n'i''''I' 'n'f' 'b'u'p' 'n ' 'f' '>'g''''s'n '''n 'unsafe f'mut '''n insert_at_ite''r(&mut self'''' ''''''insert_at_iter_and_notif'''''('y'.''''''''''S''''''''':':'f'l'e's':':'f'l'''''';''F'e'S''insert_at_iter_and_notif''''''''''''''''''''''''''no_notif'''';')'''y''')'(_items: &[C::Item], _marker: ItemMarker)'''o'n' ','s't'n'e't'n'o'c' ','r'o's'r'u'c' ','f'l'e's'('y'''''''''a''' '// ' 'n ' unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, contents: &[C::Item], mut notify: N'// 'otify)' 'n where Notify: FnMut(&[C::Item], ItemMarker) {n'''''''''>'y'f'i't'o'N'<' '_'t'r'e's'n'i' ''' }''n 'n ' '{' ', cursor: &mut Cursor, ''''''''''''''''''''y'n ' ' '''''''Notify: FnMut(&[C::Item], ItemMarker) {''' 'e'r'e'h'w' ' ' ''''f'i't'o'N' ':'y'f'i't'o'n' 't'u'm' ','contents: &[C::Item''], notify: Notify)' 'n ' ' ''''''''t'u'm' '''''{' 'e'f'a' 'n '''''''' 't'u''''''''''''''n ''''''''''''''''''''''''''';'e'n'o'N' '=' 'x'''' ','')'''')'i'(''e'd'n'i'_'l'''''''')'('r'e't'i'.'a'c'o'l''''''''''enumerat'')'('e'''''m'u'n'e'.'''''''''';'e's'l'a'f' '=' 'd'n'u'o'f' 't'u'm' 't'e'l' ';'0' '=' 'e'z'i's'u'''''''i's'''''''s'i' ':'m'''''''''';')'i''''''u'm''t'e's'f'f'o' ''''''_'local_inde''''''''('e'm'o'S' '=' 'x'''''''_'l'a'c'o'l''''m'e't'i't'e'l' ' ''s'n''''''n'u''n '' '' ''''''''''''''''''''''''local_inde''expect''''''(msg: &str)'''''e'p'x'e'.''''''''n''''' 't'u'm'u'.'x''''''l'a'c'o'l''''u' '=' 'x'e'd'n'i'_'0'''''''''t'e's'f'f'o''''l'a'c'o'l' 't'e'l''''''''''''';'local_index.expect('Invalid marker - item not found in node')''[SkipEntry {' 'n node: &self.head as *const _ as *mut _,' 'n skip_usersize: usize::MAX' '''n '''''''''''''''''''''SkipEntr'''' '''''''''n 'skip_usersiz''''''''t'e's'f'f'o' ':'e''''''''''''i'1''''s'r'e's'u'_'p'i'k' '''''''''''''''''n '''''''n '''''''''''''''''''ItemMarke'''' ''''''','e' ':'r't'p' '''n ''' '';'_phanto'''PhantomD','ata''''h'a'P' ':'m''_' ''' ')'}''n 'n ' '{' 'r'''''m'e't'I' ','s'm'e't'i'_'w'e'n'('y'f'i't'o'n' 'n ' ' ''''''''''''''''''''''''''''''''''e't'o'N' '.'t''n 'unimplemented''';')'('!'''n'u''''// ''''''''''''''h'j'f'd'k's'a'h'j'f'''d's'a''// ' 'e's'f'f'o' 'l'a'c'o'l'''''''t'e's'f'f'o' 'e'h't' 'd'n'i'f' 'd'n'A' '/'/' ';''''r't'n'e'r'a'p'.')'n'*'('''''''.'n' '=' 'n' ''s' ','n''' '' ':'''' 'e'''d'o'n''// ' ''' ';'}''n 'n ' '{' 'y'''''p'i'k'S' '=' ']''''n 'n notify(new_items, ItemMarker {n ptr: e,n _phan''tom: PhantomData,n '// ' });' '0'['s'e'i'r't'n'e'.'r'o's'r'u'c' 'n '' ' ''''n '// ' '''''''''''''''''''''''''heigh'''''''''''''// '''' ''' }''n 'n ' '{' 'e'z'i's'u' 's'a' 't''''i'e'h'.'d'a'e'h''''''''''i'e'h'.'f'l'e's'.'.'0''''0' 'n'i' 'i' 'r'o'f' 'n '''' 't'u'm' ' ' '&' 'n ''''''r'o's'r'u'c''''''''''''''r'c' 'n'r'u't'e'r' }; MAX_HEIGHT],'''' 'n node: &self.head as *const _ as *mut _,' 'n '' 'n ' skip_usersize: usize::MAX'''e'u'r't' '=' 'd'n'u'o'f' '''''' '''''''''''y'f'i't'o'n' ','''''''''item_offse''n '''''';'k'a'e'r'b' ';'t'''''m'e't'i' '='+' 't'e's'f'f'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n ''''''''''''''''''''''''''''''''''''''''''''''/'e'd'''''''''' 'n'o'n '''''curso''''''''''''n ''''''''''''n 'local_inde'''','0' ':'x''''''''''d'n'i'_'l'a'c'o'l' ','0' ':'s'o'p'r'e's'u' ''''''''>'C'<''''' ''''''''''']'[' ':'s'e'i'r't'n'e''''en'e't''eprin'n ''''''''''collection'''HashMa';'p'''''h's'''''t'u'''''''u'i'm' 'a'H':':'s''n '// ''ptr_to_i'''''''''''''''''''null(''''''''''''X'A'M':':'e'z'i's'u''''''''';')'1'-' ',')'''''l'l'u'n':':'r't'p':':'d't's''''''''':'r't'p'('t'r'e's'n'i'.'d''pt'''o't'_''''.'r''''r't'p' '''''HashMa'''new(';''''''')'(')''''w'e'n':':'p''''''''p'a'M'h's'a'H''l'l'o'c':':'d't's' 'e's'u' ''''n'n '''''''''''''''''''''' '=' ')'d'i'('e'm'o'S' 't'e'l' 'f'i''ptr_''{' '''' '''to_i''g' 'et''('&'''''''''' print!(' (parent: {})', id);' }n'' 'n''''''''''''r'e''?':''''''''''''''''''_' 't's'n'o'c'*' 's'a' 'e'd'o'n't'n'''i'o'p'''n '''''''''''''''''''''''' '{' 'X'A'M':':'e'z'i's'u' '='=' 'd'i' 'f'i'''''f'i' ''''''''''''' }' '''n if let Some(id) = '''n ''n 'println''';')'('!'''''n'i'r'p' 'ptr_to_id.get(&(node.parent as *const _)) {' ''n ';')'d'i''''n print!('(parent: {})', id);'''''')'''_' 't's'n'o'c'*' 's'a'n }'' '''''''''''''''''_' 't's'n'o'c'*' 's'a' 't';''n'e'r'a''''o'p'.'e'd'o'n'(k: &Q)'''e'g'.'d''''r't'p''' 'ptr_to_i''insert''''''''''''''''_''i';'' 't's'n'o'c'*' 's'a' 'e'd'o'n'(k: K, v: V)''''''r'e's'n'i'.''''''''''e's'.'d''''n '// '''''''''''r't'p' 't'e'l' 'f'i' ''n ''''''''''''''''''''''' ','''';''')''''}'}'{' ':'t'n'e'r'a'p'('''('!'''' 't'n'i'r'p' ''r't'p' ' '''''''''''''''''''d't's' '=' 'd'i'_'o't'_''''T'r't'p' 't'e'l' 't!''''t'n'e' ''' ';'}''n 'n ' '{' 'r'o's'r'u'C' '=' 'r''''''''o's'r'u'c' 't'e'l' ''''''n 'n f'''''''':':'f'l'e'S''n'''''''y'f'i't''''f'o'n'_''''n'o''no_notify(_items: &[C::Item], _marker: ItemMarker)'''o'n' ','n no_notify(_items: &[C::Item], _marker: ItemMarker'''n ') {}' ''i't'a'c'o'l'''''r'i'a'p' ''o'n' ''''''''''.'s'o'p'r'e's'u' 'e'h't' 't'a' 'r'o's'r'u'c' 'a' 'e'k'a'm' 'o't' 'd'e'e'n' 'e'w' 'w'o'N' '/'/' 'n ' 'e'd'o'n' 'n'i' 'd'n'u'o'f' 't'o'n' 'm'e't'i' '-' 'r'e'''''''e' 'k'r'a'm' 'd'i'l'a'v'n'I''''M''' ',''';')'d'n'u'o'f'('!''''('t'r'e's's'a'''' ' ''i'L'''''''''''''' 't'u'n '''''''''''''n '''''''''''''''''''''''''''''''''''''''''''''''t'n'e'r'r'u'C''''T''''' 't'u'm' '.'d'n'u'o'f' '&''t'''''Self::no_notify' ',''''Self::no_notify''n's'i' 'm'e't'i' 'e'h't' 'f'i' 'c'i'n'a'P'''''o'r'h'T' ':'O'D'O'T''''''''''D'O't' '/'/' '''get_usersize''''m';''e't'i'(_item: &Self::Item)':':'C' '='+' 't'e's'f'f'o' ''''''''''''' }'n '{' 'e's'l'e' 'n'*'(''m''')'*'&'''''''''''''''''''''' '=' ')'t'e's'f'f'o'('e'm'''''' ''' }''n 'n ' '{' ''o'S' 't'e'l' 'f'i''''n' ''''''contains_ite''''''')'y'r'e'u'q'('m''contain''''' 'e't'''u't'm''i'_''''('s'''''''&''''s'''Self::no_notify' ',''n'i'a't'n'o'c'.'m'e't' ''i''t' ' 'u' 'm' ''''''''''''''&''''''''Self::no_notify' ',''content_slic'''''''' '''' '' ''' 'unimplemented''';')'('!'''''m'i'n'u' 'n ' 'n ' }''n 'n ' '{' ')'('e'''''''''_'t'n'e't'n'o'c'.'e'd'o'n' 'n'i' 'm'e't'i' 'r'o'f' 'n ' ''' }''''*' ':'C'''pt';'r'' '.'''<'t''l'p''u'm'i'n'm''n'''''''''''''''''.''&'r'e''''Self::no_notify' ','k'r'a'm' '=' 'e'd'o'n''' 't'u'''''''''e'z'i's'u' '''n ''''''''' 't'u'm'&' 't'e'l' '.'s'a' ''m'&''''''''''''''['s'e'i'r'''''''''')'(''''9'r'e't'i'.']''t'n'e'.'f'l'''''''''''''''''Item''''e't'I':':'C''''I'&' ':'y'r'e'u'q' ',''''y'r't'n'e'e's't'n'e''''''''''''''''''''''''s'n'i'''''''''''''''m'e't'i' 'e'h't' 'd'n'i'F' ''''''''''e'W' '.''a't'n'o'C' ':''''''':' 'm'e't'I':':'C' 'e'r'e'h'w'''n 'unimplemented''';')'('!'''n'u' '' '''''''''''''''''''''' ''''''entrie'''''skip_usersiz''''''''''''';'e'z'i's''n ''''''u''8'u'serpo''''''''''''';'e'z'i's'r'e's'u' '='''' '+' 's'''''r'e's'u''''o'l'g'.'f'l'e's' 'r'e's'u' '='+' 'e''''''''s'u'_'p'i'k's'.']'i'['s''''t'n'e'.'f'l'e's'''''''''''''f'l's'e' ''' }''n 'n ' '{' 't'h'g'i'e'h'.'.'0' 'n'''' 'i' '_' 'r'o'f' 'n ' 'e { (*self.here_ptr()).items[self.loc'''''get_usersize''''''(_item: &Self::Item)':':'';')''C' 'a'''''''''''''''current_ite''''}' ')'('m''''''''''i'_'t'n'e'r'r'u'c''Current'''''r'r'u'c'.'f'l'e's' '{' 'e'f'a's'n'u'l_index] };' '=' 'm'e't'i'_'t's'r'i'''f' 't'e'l' ''}' 'lf.entri'''''''''''''''''''''(''*' '{' 'e'f'a'''''''''self.local_inde'''';'}' ']'x'['s'm'e't'i'.')''s'n'u''''''n ''''''' 'e'f'a's'n'u'''''''''''''''''''''''''m'e't'I':':'&''C''''T'&' '>'-' ''''' '(''' ''(*self.he')'re''_ptr()).items[self.local_index]''' }''n 'n ' '{' ')'f'l'e's' 't'u'm''''u'&'('''''''''''''''m'e't'i'_'t'n'e'r'r'u'c''''n ''''''''''''''''''''''''''''''''''''''''''ItemMarke'''>'C'<'''''''''>'C' ''''''''''''''''''''''''''''''''''''''''''''e'd'o'n' 'a' 'o't'n'i' 'r'e't'n'i'o'p' 'a' 's'u' 's'e'v'i'g' 'r'e'k'r'a'm' 'e'h'T' '/'/' ''<''''''''''''' ''' }''n 'n ' '{' 'r'o's'r'u'C' '>'-' ')'r''''''m'm'e't'I'''''k'r'a'M' ':'r'e'k'r'a'm' ','f'l'e's' 't'u'm'&'('r'e'k'r'a'm'_'t'a'_'r'e't'i' 'n'f' 'b'u'p' 'n ' ' 'n'f' 'n ' '''''here_ptr()'''''e'r'e'h'.'f'l'e's' '=' 'e'z'i's'r'e's'u'es[0].node'''cursor.local_ind''e''x ='n ''f'i''''''e'l'i'h'w''''s''''''''''is_'''''''''''''''e'z'i's'u' ':'t'h'g'i'e'h' ','at_node_end'n ''''''t'h'g'i'e'h' '''' 't'e'l'''''''''''''' '=' 'e'z'i's' 't'e'l' ''n ''''''local_inde'''''';'''1''''n '''''''''''''''''''''''''''''''''''''''''e'z'i's'u' ':'m'''''n'i' '_' ''u'n''''''''''''advance_item('''}' ';')''''v'd'a'.'f'l'e's' '{' 'm'u'n'' ','''' '''''' '''''''.'.'0''''''' '_''''0' 'r'o'f' ''' }''n 'n ' '{' ')'f'l'e's' 't'''''''''' 't's'u'm'&'('s'm'e't'i'_'y'b'_'e'c'n'a'v'd'a' 'n'f' 'n ' ' '='+' 'x''''''l'a'c'o'l'.'f'l'e's'''''''''''' 'e'h'T'''''''''''e'd'o'n' 'h'e'T' '/'/' '(''''''''.''' ''f'l'e's''advance_nod''''''''n '}' ';')'('e''advanc''e''_''by'''''a'v'd'a' '{' ')''''_'s'i'.'f'l'e's' 'f'i' '= (*e).num_items as usize {''' }''n 'n ' '{' 'l'o'o'b' '>'-' ')'f'l'e's'&'('d'n'e'_'e'd'o'n'_'t'a'_'s'i' 'n'f' 'n ' ''''n '''''''''''''''''''''''''''''' '// ''if cursor.local_index == (*e).num_items as usize {' ''' }''n 'n ' '{' ')'f'l'e's' 't'u'm'&''''*'('m'e't'i'_'e'c'n'a'v'd'a' 'n'f' 'n ' ''s' ''u' 'e'h't' 'n'e'h'W''''''''''''''''''''a'c'b'e' 'd'e'd'e'e'n' 's'i' 's'i'h'T' '/'/'/' '''n ''''''''''''''''''','e'z'i's'u' ':'x'''':'e'd'n'i'_'l'a'c'o'l' 'n ' '''''''''''' /// Warning: This returns false if one cursor is at the end of a node, andn /// the other at the start of the next node. Almost all code in this libraryn /// leaves cursors at the end of nodes, so this shouldn't matter too much inn /// practice.'n ''''''''''''''''''''''''''''''''''''''' if self.userpos != other.user'' '' 'n ' ' '''''''''''''local_inde'''''''''''local'''n '''n ' '''_index''''a'c'l'''''''''''''r'e's'u'.'r'e'h't'o'''''''e's' '='!' 'x''''''l'a'c'o'l'.'f'l'e's' '|'|' 'p'_ptr'os { return false; }n'''''''''''n ''''''''''''''''r'''''''''''''''''''_ptr'';'e'd'o'n'new''_node_ref''new_nod''new_node_ref''''''''d'o'n'_'w'e'n''''_'w'e'new_node_ref''n'*' 't'u'm'''new'''n '_nod'''*'&'''''new_node_ref'&'''f'e''d'R'o'''''''n'_'_'''''w'''e''' '=' 'new_node_ref''e'd''n'o'n'n''_'w'e'n' 't'e'l''new_nod' ''''''''''''''''''new_node_ref'''n let mut head_height = self.head.height as usize;'''''''''''d'''''o'''''n'''''_'''''w'''''e'''''''''''''''''''''''''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''u'b'n' 'e'c'i't'c'a'r'p' 'n'i' 'h'c'u'm' 'o'o't''''o' 'r'e't't'a'm' 't'''n'd'l'u'o'h's' 's'i'h't' 'o's' ','s'e'd'o'n' 'f'o' 'd'n'e' '''''''n'e'e'h't' 't'a' 's'r'o's'r'u'c' 's'e'v'a'e'l' 'y'r'a'r'b'i'l' 's'i'h't' 'n'i'''''''i''''e'b' 'e'd'o'c' 'l'l'a' 't's'o'm'l'A' '.'e'd'o'n' 't'x'e'n' 'e'h't' 'f'o' 't'r'a't's' 'e'h't' 't'a' 'r'e'h't'o' 'e'h't' 'd'n'a' ','e'd'o'n' 'a' 'f'o''''f' 'd'n'e' ''''''' 'e'e'h't' 't'a' 's'i''n 'new_node.parent = '''''new_height_usiz'''''MAX_HEI'''n '&''''''''''''''''''''''''''''''_' 't'u'm'*' 's'a' '_' 't's'n'o'c'*' 's'a' '''' ''''' } else { cursor.entries[new_height_usize].nod''';'}' '''e;'' '''''''{' 'e's'l'e' '}'n 'd'a'e'h'.'f'l'e's' '{' 'GHT'''''_'X'''A'M' '='=''''''' '>' 'e''''''h'_'w'e'n' 'f'i' ' 'r'o's'r'u'c' 'e'n'o' 'f'i' 'e's'l'a'f' 's'n'r'u't'e'r' 's'''''';'e'd'o'n'.''i'h'T' '']':'g'n'i'n'r'a'W' '/'''/'/' ''''''''n'''''''''entrie''new_height_usize''''''''i'e'n ''''new_height_usiz''''''{' '' '1' '>' 'e''''''h'_'w'e'n' 'f'i'' ' ''h'_'w'e'n'['' 's'''n'e'.'r'o's'r'u'c'''''''u'c'' /// ''''assert_eq!'.''''' '''''''t'h'g'''''n 'new_no'2'''de_ref' '''''''e't'o'N' '/'/' ''i' '' }'n ' ''e'h' 's'''e'd'new_nod''o'n' 'd'a'e'h' '' 'e'h't' 'n''new_node_ref'i' 'd'n'a'e''d' 'd'e'o''s'u''n'n'u' '''_''y'l''w's'u'o'e''i'''''''''''''new_node_ref''l's'u'i'v'e'r'p'''''''''n'''''''''''''''''''''' 'n'i' ''new_nod'd'n'a' 'r'o's'r'u'c' 'e'h't' 'n'i' ''new_node_ref's'd'l'e'''n 'd' '// 'o'''''''''n'''''''''_'''''''''w'' '=' ''e't'n'e'r'a'p'.')'e'd'o'n'_'w'e'n'*'(' 'n ' '''n'i'f' 'e't'a'l'u'p'o'p' 'n'a'c' 'e'w' 'o's' ','s'e's'a'e'r'c'n'i' 't'h'g'i'e'h' 'n'e'e's' 'x'a'm'''''''' 't'h'g'i'e'h' 'e'h'_ptr''t' 'n'e'h'w''''h' 'r'o'f' 'd'e's'u' 's'i' 's'i'h'''''''''' 's'i'T' '.'t's'i'l' 'e'r'i't'n'e' 'e'h't' 'n'i' 'r'''''''''r''''' '''''o'''''s'''''r''''''''n ''''''''''''''''''.'s't'n'e'r'a'p' 'e't'a'd'p'U''''''''''''''''''''''''''''1'-'t'h'g'''''''''''''('*' 't'u'm'&''i'e'h' 't'a' 's'e'd'o'n' 'l'''l'')'a' 't'n'i'o'P''''''''' (*'''''')'''''''''' ''''''''''''''''''''''''''''''''''new_node_pt';'r''''''''d'o'n'_'w'e'n'''''''// ''''''''''''''// '''''''''''''''''' '// ''''''''''''''' '=' 't'n'e'r'a'p'.')'n'*'(''''''''''p'.'n' ''''''''''''''''''''''''''''''''''='''new_height'''''_'w'e'n' '>' 't'h'g'i'e'h''''n'.')'n'*'(' '|'|' '''t'h'g'i'e'h' 'd'e't'c'e'p'x'e' 'e'h't' 't'a' 's'e'd'o'n' '''''''''''''''''' 'e'h't' 't'a' 'n'e'r'd'l'i'h'c' 'l'l'a' ','s'i' 's'i'h'T' ''n '''''''''''''new_nod''''';'''r't'p''''p'o'o'l''''_'''nexts_mu''''new'n ''''''*')''(''n''.ne'n ''''''while !n'''''''''''}'''n '' ';'k'a'e'r'b' '{' '.is_null()' 'f'i' 'xts_mut()[new_height_usize - 1].node;' '=' 'n' '_height_usiz''''''''''e'd'o'n'.'''n ''''''''''is_nul''''''' }''n 'n ' '{' ')'('l''''''''l'l'u'n'_'s'i'.'n'!' 'e'l'i'h'w' ';']'1' '-' 'e'''''_'w'e'n'[''''.')'('t'''''''_'s't'x'e'n'.'''''''n'.'e'''''_'w'e'n' '=' 'n' 't'u'm' 't'e'l''''''' 'r'o'f' '.'n'e'r'd'l'i'h'c' 'w'e'n' 's'''e'd'o'n' 's'i'h't' 'f'o' 's't'n'e'r'a'p' 'e't'a'd'p'U' '/'/' 'n ' 'u'c' 'e'h't' 'f'o''''''''''''t's'i'l' 'e'h't' 'n'i' 'n'o'i't'i's'o'p' 'r'e's'u' 'l'a'b''''a'o'l'g' 'e'h'T' '/'/'/' '_ptr'''' /'/'/ This field isn't s'n '''''''''''''''''(n as *co'_'nst Node == &self.hea';'d as *co'_'nst '''''''''''''' '{' 'd'a'e'''h'_'s'i'!' ' '''''n '''f'i'}''Node)' '=' 'd'a'e'h'_'s'i' 't'e'''l'''''''''' 't'e' 'trictly necessary - earlier versions tacked this on ton /'/'/ the last i''tem in entries... I'm still not sure the cleanest way to don /'/'/ this.''n 'ot fo'''''d'l'e'i'f'r saf' 'ety.nn ''-'e'''' ' // This isn't strictly necessary. Earlier versions tacked this on to then // last item in entries... I'm still not sure the cleanest way to do this.n userpos: usize,nn entries: [SkipEntry; MAX_HEIGHT],n}nnimpl Cursor {n fn update_offsets(&mut self, height: usize, by: isize) {n for i in 0..height {n ' assert!(n.num_items as usize <= NODE_NUM_ITEMS);n' unsafe {n ''''''''''''''''''''''''''''''''d'e'w'o'l'l'a' 't'o'n' 's'e'd''''t'o'n' 'y't'p'm'E''' ','0'''''''''''''''''''s'e'd'd'o'n' 'y't'p'm'e' '/'/' ' '>' // This is weird but makes sense when you realise the nexts inn // the cursor are pointers into the elements that have then // actual pointers.n // Also adding a usize + isize is awful in rust :/n let skip = &mut (*self.entries[i].node).nexts_mut()[i].skip_usersize;n *skip = skip.wrapping_add(by as usize);n }n }n }nn /// Move '''''n '''''''''''''''''''''''''''''''SmallRn'''n ''''''''''''''''''''''''''''''''''''''''''''''''''.'s'i'h't' 't'n'e'm'e'l'p'm'i' 'o't' 'y'a'w' 'r'e'c'i'n' 'a'''' ' 's'''e'r'e'h't' 'e'r'u's' 'm'''I''' '/'/' ''' if self.rng.is_none() {n self.rng = Some(SmallRng::from_entropy());n }nn // rng code here is a bit ugly. n '' let new_node = Node::alloc(&mut self.rng.as_mut().unwrap('')'')'';n''' }''n 'n ' '{' 'g''''a'm'S' 't'u'm'&' '>'-' ')'f'l'e's' 't'u'm'&'('g'n'r'_'t'e'g' 'n'f' 'n ' 'a cursor to the start of the next node. Returns the new node (or an /// nullptr if this is the end of the list).n fn advance_node(&mut self) -> *mut Node {n unsafe {n let SkipEntry { node: e, skip_usersize: offset } = self.entries[0];n // offset tells us how far into the current element we are (inn // usersize). We need to increment the offsets by the entry'sn // remainin''g length to get to the start of t''''''get_rng()''''''''g'n'r'_'t'e'g'.'f'l'e's'''h''e'' ''n''e''x''t'' ''n''o''d''e''.''n'' '' '' '' '' '' '' '' '' '' '' '' ''l''e''t'' ''advance_by = (*e).get_userlen() - offset;n let next = (*e).get_next_ptr();n let height = (*next).height as'n ''''''''''''m'''''' '' '' '' '' '' '' '''' ''n '''''''''''''''''''''''''''''''' '.'y'l'g'u' 't'i'b' 'a' 's'i' 'e'r'e'h' 'e'd'o'c' 'g'n'r' '/'/' '''n '}'n ';')''' SmallRng::from''as''_''d''e''r''e''f_mut(''unwrap()''''''a'r'w'n'u'.')'''s'a'.'''_'''''u''n''w''r''a''p''()'''''r'w'n'u'entropy()'.';'''''is_none('''n ''''''''''''''''('e'n'o'S' '=' 'g'n'r'.'f'l'e's' '{' ''''n')''''_'s'i'.'''' 'g'n'r'.'f'l'e's' 'f'i' ' usize;nn for i in 0..height {n self.entries[i] = SkipEntry {n node: next,n skip_usersize: 0n };n }nn for i in height..self.entries.len() {n self.entries[i].skip_usersize += advance_by;n }nn self.userpos += advance_by;nn nextn }n }nn /// Get the pointer to the cursor's current noden fn here_ptr(&self) -> *mut Node {n self.entries[0].noden }n}nnimpl PartialEq for Cursor {n fn eq(&self, other: &Self) -> bool {n if self.userpos != other.userpos { return false; }n for i in 0..MAX_HEIGHT {n let a = &self.entries[i];n let b = &other.entries[i];n if a.node != b.node || a.skip_usersize != b.skip_usersize { return false; }n }n truen }n}nimpl Eq for Cursor {}nnimpl SkipList {n pub fn new() -> Self {n SkipList:: {n num_items: 0,n num_usercount: 0,n rng: SmallRng::seed_from_u64(123),n head: Node {n items: [C::Item::default(); NODE_NUM_ITEMS],n num_items: 0,n height: 1, // Stores max height of list nodesn nexts: [],n },n _nexts_padding: [SkipEntry::new_null(); MAX_HEIGHT],n }n }nn pub fn new_from_slice(s: &[C::Item]) -> Self {n let mut rope = Self::new();n rope.insert_at(0, s);n ropen }nn pub fn get_userlen(&self) -> usize {n self.num_usercountn }nn fn iter(&self) -> NodeIter { NodeIter(Some(&self.head)) }n n pub fn len_items(&self) -> usize {n self.num_items as usizen }nn fn heads_mut(&mut self) -> &mut [SkipEntry] {n unsafe {n std::slice::from_raw_parts_mut(self.head.nexts.as_mut_ptr(), self._nexts_padding.len())n }n }nn /// Walk the list and validate internal constraints. This is used forn /// testing the structure itself, and should generally not be called byn /// users.n pub fn check(&self) {n // #[cfg(test)]n {n assert!(self.head.height >= 1);n assert!(self.head.height <= MAX_HEIGHT_U8);nn // let skip_over = self.get_top_entry();n // println!('Skip over skip chars {}, num bytes {}', skip_over.skip_items, self.num_bytes);nn let mut iter = [SkipEntry {n // Bleh.n node: &self.head as *const Node as *mut Node,n // The skips will store the total distance travelled since then // start of this traversal at each height. All the entries aboven // head.height are ignored though.n skip_usersize: 0n ' /// skiplist. The returned cursor contains list of nodes which point pastn /// the specified position, as well as offsets of how far into theirn /// character lists the specified characters are.n ///' ''''''''''''''''''''''''''''''''''''''''''''''''''' ///n /// - The item can contain items with zero usersize. The cursor could pointn /// to any of them.n /// - If the location is at the end of a'n '' // We should always land within the node we're pointing to.n debug_assert!(offset <= unsafe { &*cursor.here_ptr() }.get_userlen());n' node, it is equally valid to returnn /// a position at ''t''''he start of the next node'''' ///n ///'''''' '' '''n ' ''''''t'h'g''''''n 'i'e'h' 'n ''''''''''''''''''''''''''''''''''''''''''''''''';'e'd'o'n'.']'1' '-' 't'h'g'i'e'h'['s'e'i'r't'n'e'.'r'o's'r'u'c' '=' 't'n'e'r'a'p'_'w'e'n' 't'e'l' ' ''n ''e' '// Update pare' 'nts.n if new_' ''''''t'h'g'new_parent'''''''a'p'_'w'e'n''i'e'h' 'heig' 'ht_usize > 1 {n ''''''''''''8'u' 's'a' 't'h'g'i'e'h' ' ' let mut' ' n = new_node_ptr;n' ' '' loop {n n = (*n).nexts_mut()[new_heigh' ' ' 't_usize - 2].node;n i' 'f n.is_null() || (' '*n).height >= new_' 'height { break; }nn (*n).pare' 'nt = new_node_' 'ptr;n }n }' 'n ' ' Because '''n 'its impossible to move backwards in the list, iter_at_userposn /// returns the firs'n '''''''''n ''''''''''unsafe { &*e ';'''}' '=' '// ''n'e' 't'e'l' '''''''num_item''''''''''n '''''''''''''''''';'0' '=' 'x'e'd'n'i' 't'u'm'n 'asser''''''''''''''num_item' as usize''''' ''''''''''''''n ';')'>''e'z'i'''''''''''''''''''''''''''''''''''''''''''''.'m'e't'i' 'n'a' 'f'o' 'e'l'd'd'i'm' 'e'h't' 'n'i''''''''''''''u'o'n ''''''''local_inde''''''''''''''''''';'''x'e'd'n'i' '=' 'x''''''l'a'c'o'l''''''''' 'x'e'd'n'i'.'r'o's'r'u'c' ''r'h't' 'y'a'w't'r'a'p' 'e'r'''e'W' '/'/' ''''''''''''''''F' '/'/' '''' '''' '}' '' ';'k'a'e'r'b' ''n ''''''''''';'1' '='+' 'x'e'd'n'i' 's'''u' 's'a' 's'''''''t'i'_'m'u'n'''''''.'s'm'e't'i'.'n'e' '<' 'x'e'd'n'i'('!'''t''_''e''q!''''''r'e's's'a' '' 't'e'l''' '''''''''t'e'l' 'e''n ''''&'''''''''''''''''n ''''usersiz'''''''''''''n '''''''''''usersiz''' ''''''''' '''''';'k'a'e'r'b''''''''''''''''''''''''e'r'''e'W' '!'g'i'b' 'o'o'T' '/'/' ''' }''n 'n ' '{' 'e's'l'e' '}'n ';'e'''''''i'z'r'e's'u' '='-' 't'e's'f'f'o' '{' 't'e's'f'f'o' '='<' 'e'''''''i's'r'e's'u' 'f'i' ']'x'e'd'n'i'['s''usersize > offset'''''''''''<''='usersi'''''>'''''''''usersize'''''''i's'r'e's'u' '='<' 't'e's'f'f'o'''m'e't''// 'i'.'n'e''''''''''''''0' '>' 't'e's'f'f'o' 'e'l'i'h'w' for index in 0..=en.num_items as usize {'z'i's'u' 's'a' 's''''m'u'n'.'n'e'''''''''''''''''''''''''=''''.'.'0'[' 'n'i' 'x'e'd'n'i' 'r'o'f''''''''''t'e'l''''''''' 'e'''' 'l'i'h'w''''','0' ':'x'e'd'n'i'_'l'a'c' for (i, item) in unsafe { &*e }.content_slice().iter().enumerate() {n let usersize = C::get_usersize(item);n if usersize > offset {n cursor.local_index = i;n found = true;n break;n } else if usersize == offset {n offset = 0;n cursor.local_index = i + 1;n found = true;n break;n } else {n offset -= usersize;n }n }n''o'l'''// '''''d'n'i' 't admis''''''''' ''' '&'{''}''' 'e'f'a's'n'u'''sible location wit'// 'h the specified userpos'n ///'n ///''''''''''// '('''''''''''''''''''''''''''''''''''// 'd'e'i''.'f'i'c'e'p's' '''''''i''''''''d''// 'e't'n'i'o'p' ''''''''''''''''''// ''')'m'e't'i' 't''' '// ' '''''' 'e's'l'e''i''='='''f u'''' '// ' 'n '''0' '// ' ' ''1'''+' ' ' ''cursor'// '.local_in''d'n '// 'cursor.local_index = i+'// '1;'ex = i;n '// ' '' found 'n foun'// 'd = true;'= tr'// 'ue;n b'n break;'reak;' 'sersize > offse'n } else {''n offset -= usersize;'t {' '}'n 'n'e'r'r'u'c' 'e'h't' 'o't'n'i' 't'e's'f'f'o'''''''h't'g'n'e'l''' ','r'o's'r'u'c' 's'n'r'u't'e'R'''''''r'u't'e'r'@' ' '.'n ///'n ///'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'o'p'r's''e's'u'_'''''''''''e'l'b''''''''''''''''''''''''''''''''.'s'o'p'r'e's'u' 'd'e'i'f'i'c'e'p's' 'e'h't' 'h't'i'w' ''''n'o'i's's'i'm'd'a''''a''''*'t'a'''*''_'r'e't'i'''''''''''''''''''''''''''''''''''n'o'i't'a'c'o'l' 'd'i'l'a'v' 't's'r'i'f' 'e'h't' 'n'r'u't'e'r' 'e'w' ','t's'i'l' 'e'h't' 'n'i' 's'd'r'a'w'k'c'a'b' 'e'v'o'''''''o'v'm' 'o't'''''''t'm' 'e'l'b'i's's'o'p'm'i' 's't'i' 'e's'u'a'c'e'B' ' '.'n ///'n ///''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '' '// ' fn get_iter_idx(&self, mut usersize_offset: usize, stick_end: bool) -> (usize, usi''''''n '''''''''''''''''''''';'e's'l'a'f' '=' 'd'n'u'o'f' 't'u'm' 't'e'l' 'n '''''''''' ''''''''''')'e'*'('''t'e''''''r'o's'r'u''''r'c''''s'f'f'o'=' 'e' 't'e'l''' 'ze) {n''''''// '''''n 'n /// I dunn'='o'n ''''''''''''';'e'u'r't' '=' 'd'n'u'o'f' '''''''t''n ''''''''''''''t'e's'f'f'o'local_inde''''';'i' '='''' ' ''''''';'k'a'e'r'b'x''r'''n ''n ''''''''''''''''n ''';')'d'n'u'o'f'('!'t'r'e's's'a' 'eturn (i, usersize_offset'');''b''''''l'a'c'o'l'.'r'o's'r'u'c' 'e's'f'f'o' where this logic should live,'' but we wa'self'''''''r'o's'r'u'c'nt ''(''to ''''''''')'t'e's'f'f'o' ','get the index ofn /// the item at the specified offset into the node (and the offset into then /// item).n /// n /// If the offset lands between items, we could return either the previous or next item.n /// n /// Returns (index, item_offset).n fn get_iter_idx(&self, mut usersize_offset: usize, stick_end: bool) -> (usize, usize) {n if usersize_offset == 0 { return (0, 0);'' '// ' panic!('Could not find requested offset within the ''n''ode')'' }'n';'n''''n ''' ''}nn for (i, item) in self.content_slice().iter().enumerate('')'' {n let usersize = C::get_usersize(item);n if usersize > usersize_offset {n return (i, usersize_offset);n } else if usersize == usersize_offset {n return if stick_end { (i, usersize_offset) } else { (i+1, 0) }n } else {n usersize_offset -= usersize;n }n }n panic!('Could not find requested offset within the node');n }' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'd'o'n' 't'x'e'n' 'e'h'''' 't' 'f'''' 'o' 't'r'a't's''''e' 'e'h't' 't'a' 'n'o'i't'i's'o'p' 'a' 'n'r'u't'e'r' 'o't' 'd'i'l'a'v' 'y'l'l'a'u'q'e' 's'i' 't'i' ','e'd'o'n' 'a' 'f'o' 'd'n'e' 'e'h't' 't'a' 's'i' 'n'o'i't'a'c'o'l' 'e'h't' 'f'I'''''''''''''' 'd'e'n'r'u't'''''''''''''''''''''''' 'f'o'''''''' 'e'h't' 'f'o' 'd'n'e' ''''e'e'h't' 't'a' 'r'e'h't'i'e' 'e'b''e'r'''''''''''''''''''''r'u't'e'r' 's'y'a'w'l'a' 'd'o'h't'e'm' 's'i'h't''''w' 'w'o'n' 'r'o'F' ''n ///''''''''''''''''''''''o' 'd'l'u'o'c' 'r'o's'r'u'c' 'e'h'T' '-''''/' ''''assert_eq!'.'m'e'h't' 'f'o' 'y'n'a''''t' 'o't' 't'n'i'o'p' 'd'l'u'o'c' 'r'o's'r'u'c' 'e'h'T' '.'e'z'i's'r'e's'u' 'o'r'e'z' 'h't'i'w' 's'm'e't'i''''n ''''''''local_inde'''''''' ''+''= contents.len();' '=' 'x'''''a'c'o'l'.'r'o's'r'u'c' ''''i'''''''d'e'z'i's'-'o'r'e'z' 'n'i'a't'n'o'c' 'n'a'c' 'm'e't'i'''''''r'e's'u' 'e'h'T' '-'''n ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'd'o'n' 'e'h't' 'n'i'h't'i'w' 'x'e'd'n'i' 'e'h't' 'r'o'f' 'k'o'o'l''''''''''''''''''''''''''''''''''''n'i'h't'i'w'n' 'o'i't'a'c'o'l' 'e'h't' 'd'n'i'f' 'o't' 'd'e'e'n' 'e'w' 'w'o'N' '.'e'd'o'n' 'e'h't' 'd'n'u'o'f' 'e'v'''e'W' '/'/' 'n ' '' ' ''''assert_eq'''n ///'-' '!':'s'u'o'u'g'i'b'm'a' 's'i' 's'o'p'r'e's'u'_'t'a'_'r'e't'i' 'o't' 'l'l'a'c' 'a' 's'e'm'i't'e'm'o'S'''''''''''''''''''''''''''''''''''''''''''' 't's'a'l' 'e'h't' 's'n'r'u't'e'r' 'y'l't'n'e'r'r'u'c' 's'o'p'r'e's'u'_'t'a'_'r'e't'i'''''''h'T''''''e'd' 'y'B' }; MAX_HEIGHT];nn ''''''''s'n'i'a't'n'o'c'let mut num_items = 0;n let mut num_usercount = 0;nn for n in self.iter() {n // println!('visiting {:?}', n.as_str());n assert!((n as *const Node == &self.head as *const Node) || n.num_items > 0);n assert!(n.height <= MAX_HEIGHT_U8);n assert!(n.num_items as usize <= N'('ODE_NUM'''''''')'e'z'i's'u' ','_ITEMS);nn // Make s''u''r''e the number of items matches the countn let l''ocal_coun'// 't = C::userlen_of_slice(&n.ite'n '''''mut item_id'''''''''''local_inde''''n ';'x'''''a'c'o'l'.'r'o's'r'u'c' '=' 'x: usize' 't'''' 'e'l' 'ms[0..n.num_items 'cursor.local_index'as usize]);n assert_eq!(local_count, n.get_userlen());nn // assert_eq!(n.as_str().chars().count(), n.num_chars());n for (i, entry) in iter[0..n.height as usize].iter_mut().enumerate() {n assert_eq!(entry.node as *const Node, n as *const Node);n assert_eq!(entry.skip_usersize, num_usercount);nn // println!('replacing entry {:?} with {:?}', entry, n.nexts()[i].node);n 'cursor.local_index' entry.node = n.nexts()[i].node;n entry.skip_usersize += n.nexts()[i].skip_usersize;n }nn num_items += n.num_items as usize;n num_usercount += n.get_userlen();n }nn for entry in iter[0..self.head.height as usize].iter() {n // println!('{:?}', entry);n assert!(entry.node.is_null());n assert_eq!(entry.skip_usersize, num_usercount);n }n n // pr''i''ntln!('self bytes: {}, count bytes {}', self.num_bytes, num_bytes);n assert_eq!(self.num_items, num_items);n assert_eq!(self.get_u'n 'le''t mut item_idx = cursor.local_index;' 'serlen(), num_usercount);n }n }n n n /// Internal function for creating a cursor at a particular location in then /// skiplist.'n ''''''''local_inde'''''num_inserted_ite'''pub ''''''''' 'b'u'p'''''''''''''e'f'a's'n'u' ''''''''' 'e'f'a's'n'u'm';'s'''''''n'i'_'''''r'e't'''''''r'e'i'_''m'u'n' '='+'cursor: &mut Cursor,'''' '''' 'x''''''l'a'c'o'l'''.'''r'o's' '''''''''''n'' // For validation. This is where the cursor should end up.n '' '' '' let advanced_by = inserted_content.len();n'''''''n 'n ' 'n ' ' ' '''n start_userpos = min(start_us' 'erpos, self.get_userlen());nn le' 't (mut cursor, offset) = self.iter_at_userpos(s' 'tart_userpos);n assert_eq!(offset, 0, 'Splitting nodes not y' 'et supported');nn // Replace as many it' 'ems from removed_items as we can with inserted_' 'content.n unsafe {n let mut replaced_items = min(removed_items, inserted' '_content.len());n ' ' removed_items -= replaced_items;nn ' ' while replaced_items > 0 {n let mut e' ' = cursor.here_ptr();n if cursor.local_index == (*e).num_items as usiz' 'e {n // Move to the next item.n e = cursor.adva' 'nce_node();n if e.is_null() { panic!('Cannot replace past' ' the end of the list'); }n }nn let in' 'dex = cursor.local_index;nn let e_num_items = (*e).num_items as usize;n l' 'et replaced_items_here = min(repl'''''''''''''''''''e'z''''e'i's'u' ':'s'm'e't'i''''''''''d'n'i'_'s'u'l'p' ','aced_items, e_num_items - index);nn ' ' '''' 't'u'm' let old_items = &mut (*e).ite'' ''m''s[index'n ''''plus_ite' ''''advance_by_items''''''''''s''''''''''''height';'''''i'e'h'.'d'a'e'h'''''g'i'e'h'.'f'l'e's'm'e't'i'_'s'u'l'p'(num: usize, height: u8)'.'2'c' 'm'''''''''n '{' '0' '>' 's''''u'l'p''''''s'u'l'p'(' 'f'i' '..index + repl' 'aced_items_here];n let new' '_items'' = &inserted_content[0..replaced_items_here];nn let new_usersize' ' = C::userlen_of_s' 'lice(new_items);n ' ' let usersize_delta = new_usersize as isize - C::userlen_of_slice(old_items'''n ''''''''''''''''''''''''''''''''''''''''''''''''>'C'<'''''''''''e'z''''' 'n if cfg!(debug_assertions) {' 'n // let (mut c2, _) = self.iter_at_userpos(userpos);' '' 'n 'assert_eq''''&'''''',''''''''''f'd'S'A''' ',''''('!''a'&'''sser''');'''''asser''assert_eq'''' if '''''''''('!'''' { panic!('Invalid cursor'); }''''';')''''''r'e's's'a'' ' let (c2, _) = self.iter_at_user''pos(userpos + C::userlen_of_slice(contents));' 'n if &cursor != &c2 { panic!('Invalid curs'''''''''''''''')'('n'e'l'.'s't'n'e't'n'o'c' ','''or after insert'); }' 'n }'i's'u' ':'s'o''''''':'s'''''''''' ':'''''''''' 'L's'''''''o'p'r'e's'u' ',''''''' }''n 'n ' '{' ')''''<'r'o's'r'u'C''''''''''r'u'c'&' ''''''''''''''C' ':'r'o's'r'u'c' 't'u'm'&''''m' ','f'l'e's'&'('t'a'_'r'o's'r'u'c'_'k'c'e'h'c'_'g'b'd' 'n'f' 'n ' ') as isize;nn ' ' // Replace the items themselves. Everything else is commentary.n ' ' old_items.copy_from_slice(new_items);nn ' ' if usersize_delta != 0 {n cursor.update_offset' 's(self.head.height as usize, usersize_de' 'lta)n }n // I hate this.n 'self.dbg_check_cursor_at(&cursor, userpos, contents.len());' ' ' self.num_usercount ='''n ' ' ''''''dbg_check_cursor_at'''''''r''userpos + C::userlen_of_slice(contents)';''o's'r'u'c'&'(cursor: &Cursor, userpos: usize)''''g'b'd'.'f'l'e's'''b'd' 'self.num_usercount.wrapp' '' '''ing_add(usersize_delta as usize);nn inserted_content =' ' &inserted_content' '[replaced_items_here..];n replace' 'd_items -= repl' 'aced_items_here;n // We'll hop to the next Node at the start of' ' the next loopn // iteration if needed.n ' ' cursor''' // There's no clean way to keep the cursor steady for the finaln // insert. We'll just make sure the cursor is in the rightn // position before that call for now.'n '''''''''''''''''''' 'n'a'e'l'c'''''''' 'n'a'e'l'o'c'''''''''''''a'e'c'''''''n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'w'o'n' 'r'o'f' 'l'l'a'c' 't'a'h't' 'e'r'o'f'e'b' 'n'o'i't'i's'o'p' 't'h'g'i'r' 'e'h't' 'n'i' 's'i' 'r'o's'r'u'c' 'e'h't' 'e'r'u's' 'e'k'a'm' 't's'u'j' 'l'l'''e'W' '.'' '''''''''''''''''''''''''''''''''''''''''''''''''''t'r'e's'n'i' 'l'a'n'i'f' 'e'''''''''''''i'f'e' 'h't' 'r'o'f' 'y'd'a'e't's' 'r'o's'r'u'c' 'e'h't' 'p'e'e'k' 'o't' 'y'a'w' 'o'n' 's'''e'r'e'h'T' '/'/' '''n '.local_index += r'self.dbg_check_cursor_at(&cursor, userpos + C::userlen''_''''''of_slice(conten''' '/'/'t'n 's'n '))'''n ''''n ';'eplaced_items_here'';' 'nn for i in ' '0..self.head.height as usize {n ' 'cursor.ent'''''n ''' 'n ' if cfg!(debug_assertions) {' 'n // let (mut c2, _) = self.iter_at_us''erpos(userpos);' 'n let (mut c2, _) = self.it''''''e''r_at_userpos(userpos + C::userlen_of_slice(contents));' 'n' '' 'n // c2.advance_by_items(contents.len(), self.head.height);' 'n '' if &cursor != &c2 { panic!('Invalid cursor after insert'); }' 'n }' 'n' 'ries[i].skip_usersize += new_usersize;n ' ' }n '' cursor.userpos += ne' 'w_usersize;n }nn // Ok now one of t' 'wo things must be t''rue. Either we've run out ofn // items to remove, or we'v''move_to_item_start'''''''''''height''''''''';')'t'e's'f'f'o''''i'e'h'.'d'a'e'h''''''.'e'd'o'n'''''''''''''g'i'e'h'.'f'l'e's'(height: u8, offset: usize)'''''e'v'o'm'.'e run out of items to ins'mut '''ert.n i''f inserted_content.len'n ''''''''''''''''''''''''''''''''''''''''.'y'd'a'e't's' 'r'o's'r'u'c' 'e'h't' 'd'l'o'h' 'o't' 's'd'e'e'n' 's'i'h'T' ''''''' '''''' '/'/'/' '() > 0 {n '' // Inse''rt!n '' debug_assert!(removed_items == 0);n self.insert_at_iter(&mu'// 't cursor, inserted_c' self.insert'n let (mut c2, _) = self.iter_at_userpos(user'''''''userlen_of_slice''''''''s't'n'e't'n'o'c'(items: &[Self::Item])':':'C' '+'''''''+' ' 'pos);''''n '_at_iter(&mut'// ' cursor, contents);' } else {' ''''''''t'''e'// '' // Move '''w'the cursor back to the start of the item we'ren // splitting.'' // Move the cursor back to the start of the item we're splitting.' cursor.userpos -= offset;n'n''s'f'f'o' ',' let current_item = cursor.current_item();' '' '''' // Move the cursor back to the start of the item we're splitting.n'n ''''''''userpo''''''''''''''n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'g'n'i't't'i'l'p's' 'e'r''''''r'e'w' 'm'e't'i' 'e'h't' 'f'o' 't'r'a't's' 'e'h't' 'o't' 'k'c'a'b' 'r'o's'r'u'c' 'e'h't' 'e'v'o'M' '/'/' ';'t'e's'f'f'o' '='-' 's'''''r'e's'u'.'r'o's'r'u''''''''''s'r'j'c''''''''''''''''' 'o't' 'd'e'e'n' 'e'W' '/'/' 'let (start, end) = C::split_item(current_item)'n ''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'n'i'f' 'y'l'b'a'b'o'r'p' 's't'i' 't'''''''''''''''I' 't'u'b' ';''''''''''''''''''' 'm'''I' '.'t'n'e'i'c'i'f'f'e'n'i' 'y't't'e'r'p' 's'l'e'e'f''''''''t'e'r'p' 's'i' 's'i''''''''''i''' 's'h'T' '/'/' ';' self.replace_at_iter''''' 't'u'm'&'(cursor, 1, ' self.insert_at_iter(&mut cursor, contents);n'&[start]);n'n'n'n'n'ontent);n } else'''''']'d'n'e'['&' if ' start_userp''os'' ='' m''in(start_userpos, self.get_use'n '''''''''// '''' '{' 'e'f'a's'n'u'''''''replace_at_iter'''''''''''''r'''''// '''''''''''s'''}' ''''''''''''''' self.replace_at_iter(cursor, 1, &[start]);n'n ''''''replace_at_iter''''''r''1''''''''']';''t'r'a't's'['&'o's'r'u'c'(cursor: &mut Cursor, mut removed_items: usize, mut inserted_content: &[C::Item])''''''a'l'p'e'r'.''''''':':'f'l'e's''''unimplemented''';')'('!'''''''l'p'm'i'n'u''panic''''''''''''m'e'l'p'm'i' 't'o'n'''('!'''''i'n'a'p' '''''''t''''n '// '''''''replace_at_iter'''''''''''r''1'o's'r'u'c' 't'u'm'&'(cursor: &mut Cursor, mut removed_items: usize, mut inserted_content: &[C::Item])'''e'r'.'f'l'e's' ''';''n'e't'n'o'c'_'d'e't'r'e's'n'i'm'e't'i'_'d'e'v'o'm'e'r'o's'r'u'c' 't'u'm'&'(cursor: &mut Cursor, mut removed_items: usize, mut inserted_content: &[C::Item])'''''l'p'e'r'.'f'l'e's' 'rlen());nn let (mut cursor, offset) = self.iter_at_userpos(start_userpos);n assert_eq!(offset, 0, 'Splitting nodes not yet s''upported');n'removed_items > 0 {n self.del_at_iter(&mut cursor, remove'inserted_conten'''''')'('n'e'l'.'t''''''r'e's'n'i'd_items);n }n }' ''''''r'u'c' ' The returned cursor is a list of nodes w'n'hich point''' 'n }' 'n''''n '}''n 'n ' ''n pu''b fn replace_a' 't(&mut self, mut start_userpos: usize, mut removed_items: usize, mut ins'n pub fn replace_at(&mut self, mut start_userpos: usize, mut removed_items: usize, mut inserted_content: &[C::Item]) {'erted_content: &[C::Item]) {' past then /// specified position, as well as offsets of how far into their charactern /// lists the specified characters are.n /// n /// Note this does not calculate the index and offset in the current node.n ///n /// TODO: This should be Pin<&self>.n fn iter_at_userpos(&self, target_userpos: usize) -> Cursor {n assert!(target_userpos <= self.get_userlen());nn let mut e: *const Node = &self.head;n let mut height = self.head.height as usize - 1;n'' n let mut offset = target_userpos; // How many more items to skipnn // We're populating the head node pointer to simplify the case when then // iterator grows. We could put offset into the skip_usersize but itn // would only be *mostly* correct, not always correct. (Since cursorn // entries above height are not updated by insert.)n let mut cu''rs'''''''''''y'b'''_'d'e'c'n'a'v'd'a'o'''''/'/';'r = Cursor {n entries: [SkipEntry {n node: &self.head as *const _ as *mut _,n skip_usersize: usize::MAXn }; MAX_HEIGHT],n userpos: target_userpos,n };nn loop { // while height >= 0n let en = unsafe { &*e };n let next = en.nexts()[height];n let skip = next.skip_usersize;n if offset 'n '''''>''' ' // And bookkeeping. Bookkeeping forever.' let new_usersize = C::userlen_of_slice(new_items);' let usersize_delta = new_usersize a'''''''''''''''''''''''''''''''.'y'r'a't'n'e'm'm'o'c' 's'i' 'e's'l'e' 'g'n'i'h't'y'r'e'v'E' 's isize - C::userlen_of_slice(old_items) as isize'''n '''n ' ';n'n'n'n' skip {n // Go right.n'n '''''''''''''''.'s'i'h't' 'e't'a'h' 'I' '/'/' ''n '''('''''''num_use'''''''''num_usercoun''wrapping_ad'''''''''('d''''''''''''')'e'z'i's'u' 's'a' '''p'a'r'w'.'t'''''r'e's'u'.'f'l'e's' '=' '''rco''un''uze'''''''''''')'''e'z'i''''''''''e'z'u's'i' 's'a' '''''''''''''''''''';'a't'l'e'd'_'e'z'i's'r'e's'u' '='+' 't'''''r'e's'u'.'f'l'e's' ' '' '' '' '' ' ' // And bookkeeping. Bookkeeping forever.' let new_usersize = C::userlen_of_slice(new_items);' let usersize_delta = new_usersize as isize - C::userlen_of_slice(old_items) as isize;''' if usersize_delta != 0 {' 'n'' 'n'n'n'n' debug_assert!(e == &s'n if usersize_delta != 0 {'elf.head || en.num_i''te''ms'' >'' 0'');n offset -= skip;n e = next.node;n assert!(!e.is_null(), 'Internal constraint violation: Reached rope end prematurely');n } else {n // Record this and go down.n cursor.entries[height] = SkipEntry {n skip_usersize: offset,n ''n''ode: e a'// 's *mut Node, // This is'n '''''''!'' 'f'i' #[cfg(''{' '''d''e''bug_assertions)] {' pretty grossn };nn if height == 0 { break; } else { height -= 1; }n }n };nn // We should always land within the node we're pointing to.n debug_assert!(offset <= unsafe { &*cursor.here_ptr() }.get_userlen());n cursorn }nn // Internal fn to create a new node at the specified iterator filled withn // the spe'''''''n ''''''''''''''''{' '0' '='=' 't'e's'f'f'o' 'f'i' 'n 'n ''''''''{' '' 'e'f'a's'n'u' ' ''n' 'c' 'ified co'// 'ntent. The 'n' '' ' if offset == 0' ' {'passed cursor ' '''s''h' ''''''''''''''''''' '=' ')'d'n'e' ','t'r'a't's''n '''''''''''l'p'e'r'.'f'l'e's' '(' 't'e'l' ''''split_item''''''''''''m';''e't'i'_'t'n'e'r'r'u'c'(_item: Self::Item)':':'C' 'ould point '' '' }'n ' ''''''''' ''''''''' ''''''''''''''''''''current_item(''''n ';')'.''''''''''''''r'r'u'c'_'t'e'g'.'r'o's'r'u'c' '=' 'm'e't'i'_'t'n'e'r'r'u'c' 't'e'l' ''' }''n 'n ' '{' 'e's'l'e' '}'n 'at the end of then // previous node. It will be updated to point to the end of the newlyn // inser'if cfg!(debug_assertions) {'ted content.n unsafe fn insert_node_at(&mut self, cursor: &mut Cursor, contents: &[C::Item], new''''''''''''''''bool'''''l'o'o'b' ':'r'o's'r'u'c'_'e'v'o'm' ','_userlen: usize) {n // println!('Insert_node_at {} len {}', contents.len(), self.num_bytes);n debug_assert_eq!(new_userlen, C::userlen_of_slice(contents));n assert!(contents.len() <= NODE_NUM_ITEMS);nn let new_node = Node::alloc(&mut self.rng);n (*new_node).num_items = contents.len() as u8;n (*new_node).items[..contents.len()].copy_from_slice(contents);n let new_height = (*new_node).height;nn let mut head_height = self.head.height as usize;n let new_height_usize = new_height as us'if cfg!(debug_assertions) {'ize;n while head_height < new_height_usize {n // This seems weird given we're about to overwrite these valuesn // below. What we're doing is retroactively setting up the cursorn // and head pointers *as if* the height had been this high alln // along. This way we only have to populate the higher head valuesn // lazily.n let total_userlen = self.num_usercount;n let nexts = self.heads_mut();n nexts[head_height].skip_usersize = total_userlen;n cursor.entries[head_height].skip_usersize = cursor.userpos;nn head_height += 1; // This is ugly.n self.head.height += 1;n }nn for i in'(''''''''')'_' ',' 't'u'm' 0..new_height_usize {n ''start_userpos'''''r'a't's''expected_final_posit'advanced_by'''''a'v'd'a'''ion''c2.advance_by_items(contents.len(), self.head.height);'' let prev_skip 'n 'c2.advance_by_items(contents.len(), self.head.height);' '= &mut (*curso''r.entries[i].node).nexts_mut()[i];n let new_nexts = (*new_no''de).nexts_mut();nn // The new node points to the successor (or nul''l)n new_nexts[i] = SkipEntry {n node: prev_skip.node,n skip_usersize: new_userlen + prev_skip.skip_usersize - cursor.entries[i].skip_usersizen };nn // The previous node points to the new noden *prev_skip = SkipEntry {n node: new_node,n skip_usersize: cursor.entries[i].skip_usersizen };nn 'n '' ''''move_curso''{' '' 'r''''''_'e'v'o'm' 'f'i''''f' '// Move the' '' ' iterator to the end of the newl' 'y inserted ''n '''t'e'l'', mut '''''''''''local_inde';'x''''''''l'a'c'o'l''''''''''''''''''.'d'a''''''usize''''z's'u' 's'a' 'e'h'''''''a'''e'''''''t'h'g'i'''''''''n 'i'e'h'.'f'l'e's' ',''l'.'.'r'o's'r'u'c' '=' 'item_idx: usize' '' }'n '' for i in new_height_usize..head_height {' (*cursor.entries[i].node).nexts_mut()[i].skip_usersize += new_userlen;' if move_cursor {' cursor.entries[i].skip_usersize += new_userlen;' }' '' 'n ' #[cfg(debug_assertions)] ''''{n let (mut c2, _) = self.iter_at''_userpos(userpos);n c2.advance_by_items(contents''''''e't'e'l'e'd'.len(), self.head.height);n if &cursor != &c2 { panic!('Invalid cursor after in''sert'); }n }n' '}' ' self.num_items += contents.len();' self.num_usercount += new_userlen;' '' 'n'' ' ' 'n'' 'n'' }'n ''' '''n'' '' 'n'' '' 'n'' '' 'n'' '' 'n'' '' 'n'' 'n ''''''move_curso''''{' '' 'r'''''e'v'o' ''m' '''f'i' ' ' ' 'node.n 'n }' ' ' cursor.entries' '[i] = SkipEntry {n node: new_node' ',n skip_usersize: ne'' }'n 'w_userlenn };n' ' }nn for i in new_height_usize..head_height {n (*cursor.entries[i].node).nexts_mut()[i].skip_usersize += new_userlen;n cursor.entries[i].skip_usersize += new_userlen;n }nn self.num_items += co'// 'ntents.len();n self.num_usercount += new_userlen;n cursor.user'n le'''' 't'u'm't (c2, _) = self.iter_at_userpos(user'''n ''''advance_by_items'''''''''''''''';')')'('n'e'l'.'s't'n'e't'n'o'c'(num: usize)''''v'd'a'.'2'c' 'pos + C::userlen_of_slice(contents));'pos += new_userlen;n }nn unsafe fn insert_at_iter(&mut self, cursor: &mut Cursor, mut item_idx: usize, contents: &[C::Item]) {n // iter specifies where to insert.nn let mut e = cursor.here_ptr();n // The insertion offset into the destination node.n assert!(cursor.userpos <= self.num_usercount);n assert!(item_idx <= (*e).num_items as usize);nn // We might be able to insert the new data into the current node, depending onn // how big it is.n let num_inserted_items = contents.len();n let num_inserte'('d_userco''''''''')'t'e's'f'f'o' ','unt = C::userlen_of_slice(cont'// 'ents);nn // Can we insert into the current node?n let mut insert_here = (*e).num_items as usize + num_inserted_items <= NODE_NUM_ITEMS;nn // Can we insert into the start of the successor node?n if !insert_here && item_idx == (*e).num_items as usize && num_inserted_items <= NODE_NUM_ITEMS {n // We can insert into the subsequent node if:n // - We can't insert into the current noden // - There _is_ a next node to insert inton // - The inse''''''''local_inde''x'''''a'c'o'l'.'r'o's'r'u'c'rt would be at the start of the next noden // - There's room in the next noden if let Some(next) = (*e).first_skip_entry_mut().node.as_mut() {n i''f'' next.num_ite'''n ''''''''''''''''''''local_inde';'x''l'.'r'o's'r'u'c' '=' 'x'e'd'n'i' 't'e'l' 'n ' 'ms as usize + num_inserted_items <= NODE_NUM_ITEMS {n item_idx = 0;n cursor.advance_node();n e = next;nn insert_here = true;n }n }n }nn let e_num_items = (*e).num_items as usize; // convenience.nn if insert_here {n // println!('insert_here {}', contents);n // First push the current items later in the arrayn let c = &mut (*e).items;n if item_idx < e_num_items {n c[..].copy_within(item_idx..e_num_items,n item_idx + num_inserted_items);n }nn // Then copy in the new itemsn c[item_idx..item_idx + num_inserted_items].copy_from_slice(contents);nn (*e).num_items += num_inserted_items as u8;n self.num_items += num_inserted_items;n self.num_usercount += num_inserted_usercount;nn // .... aaaand update a'''''''''''''_'l'a'c'o'l'.'r'o's'r'u''''r'c'll the offset amounts.n cursor.update_offsets(self.head.height as usize, num_inserted_usercount as isize);'' // Usually the cursor will be discarded after one change, but forn // consistency of compound edits we'll update the cursor to point ton // the end of the new content'n ''''''''''' 't'u''''''''''''entrie'''''''''''''''''''''''''''''''''''''''t'u'm' '''''''skip_usersiz'''''num_inserted_usercoun';'t' '='+' 'e'''''''u'_'p'i'k's'.'y'r't'n'e' ''_''')'('r'e't'i'.']''''' '' ''')'e'z'i's'u' 's'a' 't'h'g'i'e'h'.'d'a'e'h'''''''e'h'.'f'l'e's'.'.'0'['''''' }''n '' 'n ' '{' 's'.'r'o's'r'u'c' 'n'i' ''m'&''''''y'r't'n'e'''''' 'n'i' '_' 'r'o'f' ''n ''''''''userpo'''''num_inserted_usercoun';'t'''''_'m'u'n' '='+' 's'.'r'o's'r'u'c''''''''''.'r'o's'r'u'c' '.'n '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'n'e't'n'o'c' 'w'e'''''''e'o'n' 'e'h't' 'f'o' 'd'n'e' 'e'h't' ''''''' 't'o't' 't'n'i'o'p' 'o't' 'r'o's'r'u'c' 'e'h't' 'e't'a'd'p'u' 'l'l'''e'w''''''''''''''''''o's'r'u'c' 'e'h't' 'p'e'e'k' '''' 'e'w' 's't'''''''''' 's'r'i'd'e' 'd'n'u'o'p'm'o'c' 'f'o' 'y'c'n'e't's'i's'n'o'c' 'r'o'f'''''''''''''''''''''''''''''''''''(''''')'_' ',''''''''''''''''''r'o's'r'u'c' 'd'e's's'a'p' 'e'h't' 't'n'a't'r'o'p'm'i' 's't'i' 's't'i'd'e' 'd'n'u'o'p'm'o'c' 'r'o'f' 't'u'b' ','e'g'n'a'h'c' 'e'n'o' 'r'e't'f'a' 'd'e'd'r'a'c's'i'd' 'e'b' 'l'l'i'w' 'r'o's'r'u'c' 'e'h't' 'y'l'l'a'u's'U' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'n'a't'r'o'p'm'i' 's't'i' 't'u'b' ','e'v'i's's'e'c'x'e' 't'i'b' 'a' 's'l'e'e'f''''d' 'n'o'i't'a'r'e'p'o' 'e'h't' 'r'e't'f'a' 'r'o's'r'u'c' 'e'h't' 'g'n'i't'a'd'p'U'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''u'b' ',''''''''''''''i'x'e'l'p'm'o'c' 'd'n'a' 'U'P'C' 'f'o' 'e't's'a'w' 'a' 'f'o' 't'i'b' 'a' 'e'k'i'l' 's'l'e'e'f' 't'i' 'o's' ','d'e'd'e'e'n' 't'o'n' 'y'l'l'a'u's'u'''''''u's' 's'i' 's'i'h'T' '/'/' '''n'''''n '' '' '''n // TODO: For consistency we might want to think about updating then // iterator'' true','''''''''''e'u'r't' ',' here.n } else {n // There isn't room. We'll need to add at least one new node to then // list. We could be a b'''''n ''' '/'/' 'it more careful here '' // Passing false to indicate we don't want the cursor updatedn // after this - it should remain at the end of the n' ''(mut cursor, offset) = self.iter_at_userpos(userpos'');'ewlyn // inserted content, which is *before* this end bit.'n ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*''''''''''''''''''''.'t'i'b' 'd'n'e'''''''e'a' 's'i'h't' '*'''e'r'o'f'e'b' 's'i' 'h'c'i'h'w' ','t'n'e't'n'o'c' 'd'e't'r'e's'n'i' 'y'l'w'e'n' 'e'h't' 'f'o' 'd'n'e' 'e'h't' 't'a' 'n'i'a'm'e'r' 'd'l'u'o'h's' 't'i' '-' 's'i'h't' 'r'''''''t' 'e't'f'a' 'd'e't'a'd'p'u' 'r'o's'r'u'c' 'e'h't'''' 'o't' 't'n'a'w' 't'''n'o'd' 'e'w' 'e't'a'c'i'd'n'i' 'o't' 'e's'l'a'f' 'g'n'i's's'a'P' '/'/' 'and copy as much asn // possible into the current node - that would decrease the numbe'''''''e's'l'a'f' ','rn // of new nodes in some cases, but I don't think the performancen // difference will be large enough to justify the complexity.nn // If we're not at the end of the current node, w''''' 't'u'm''e'll'(' nee''''''''')'t'e's'f'f'o' ','d ''to removen // the end of the current node's data and reinsert it later.n let num_end_items'' = e_num_items - item_idx;nn let (end_items, end_usercount) = if num_end_items > 0 {n // We'll mark the items as deleted from the node, while leavingn // the data itself there for now to avoid a copy.nn // Note that if we wanted to, it would also be correct (andn // slightly more space efficient) to pack some of the newn // string's characters into this node after trimming it.n let end_items = &(*e).items[item_idx..e_num_items];n (*e).num_items = item_idx as u8;n let end_usercount = (*e).get_userlen() - cursor.entries[0].skip_usersize;nn cursor.update_offsets(self.head.height as usize, -(end_usercount as isize));nn // We need to trim the size off because we'll add the charactersn // back with insert_node_at.n self.num_usercount -= end_usercount;n self.num_items -= num_end_items;nn (Some(end_items), end_usercount)n } else {n (None, 0)n };nn // Now we insert new nodes containing the new character data. Then // data is broken into pieces with a maximum size of NODE_NUM_ITEMS.n // As further optimization, we could try and fit the last piece inton // the start of the subsequent node. That optimization hasn't beenn // added.n n for chunk in contents.chunks(NODE_NUM_ITEMS) {n let userlen = C::userlen_of_slice(chunk);n self.insert_node_at(cursor, chunk, userlen);n }nn // TODO: Consider recursively calling insert_at_iter() here insteadn // of making a whole new node for the remaining content.n if let Some(end_items) = end_items {n self.insert_node_at(cursor, end_items, end_usercount);n }n }n }nn /// Interestingly unlike the original, here we only care about specifyingn /// the number of removed items by counting them. We do not use usersize inn /// the deleted item count.n ///n /// If the deleted content occurs at the start of a node, the cursor passedn /// here must point to the end of the previous node, not the start of then /// current node.n unsafe fn del_at_iter(&mut self, cursor: &mut Cursor, mut item_idx: usize, mut num_deleted_items: usize) {n if num_deleted_items == 0 { return; }nn let mut e = cursor.here_ptr();n while num_deleted_items > 0 {n if item_idx == (*e).num_items as usize {n let entry = (*e).first_skip_entry();n // End of current node. Skip to the start of the next one. We'ren // intentionally not updating the iterator because if we deleten // a whole node we need the iterator to point to the previousn // element. And if we only delete here, the iterator doesn'tn // need to be moved.n e = entry.node;n if e.is_null() { panic!('Cannot delete past the end of the list'); }n item_idx = 0;n }nn let e_num_items = (*e).num_items as usize;n let removed_here = min(num_deleted_items, e_num_items - item_idx);n n let height = (*e).height as usize;n let removed_userlen;nn if removed_here < e_num_items || e as *const _ == &self.head as *const _ {n // Just trim the node down.n let trailing_items = e_num_items - item_idx - removed_here;n n let c = &mut (*e).items;n removed_userlen = C::userlen_of_slice(&c[item_idx..item_idx + removed_here]);n if trailing_items > 0 {n c[..].copy_within(item_idx + removed_here..e_num_items, item_idx);n }nn (*e).num_items -= removed_here as u8;n self.num_items -= removed_here;n self.num_usercount -= removed_userlen;nn for s in (*e).nexts_mut() {n s.skip_usersize -= removed_userlen;n }n } else {n // Remove the node from the skip list entirely. e should be then // next node after the position of the iterator.n assert_ne!(cursor.here_ptr(), e);nn removed_userlen = (*e).get_userlen();n let next = (*e).first_skip_entry().node;nn for i in 0..(*e).height as usize {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.node = (*e).nexts_mut()[i].node;n s.skip_usersize += (*e).nexts()[i].skip_usersize - removed_userlen;n }nn self.num_items -= (*e).num_items as usize;n self.num_usercount -= removed_userlen;nn Node::free(e);n e = next;n }nn for i in height..self.head.height as usize {n let s = &mut (*cursor.entries[i].node).nexts_mut()[i];n s.skip_usersize -= removed_userlen;n }nn num_deleted_items -= removed_here;n }n }nn pub fn replace_at(&mut self, mut start_userpos: usize, mut removed_items: usize, mut inserted_content: &[C::Item]) {n if removed_items == 0 && inserted_content.len() == 0 { return; }nn // For validation. This is where the cursor should end up.n // let expected_final_position = start_userpos + inserted_content.len() - removed_items;nn start_userpos = min(start_userpos, self.get_userlen());nn let mut cursor = self.iter_at_userpos(start_userpos);n let (mut index, offset) = unsafe { &*cursor.here_ptr() }.get_iter_idx(cursor.entries[0].skip_usersize, false);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn // Replace as many items from removed_items as we can with inserted_content.n unsafe {n let mut replaced_items = min(removed_items, inserted_content.len());n removed_items -= replaced_items;nn while replaced_items > 0 {n let mut e = cursor.here_ptr();n if index == (*e).num_items as usize {n // Move to the next item.n e = cursor.advance_node();n if e.is_null() { panic!('Cannot replace past the end of the list'); }n index = 0;n }nn let e_num_items = (*e).num_items as usize;n let replaced_items_here = min(replaced_items, e_num_items - index);nn let old_items = &mut (*e).items[index..index + replaced_items_here];n let new_items = &inserted_content[0..replaced_items_here];nn // Replace the items themselves.n old_items.copy_from_slice(new_items);nn // And bookkeeping. Bookkeeping forever.n let new_usersize = C::userlen_of_slice(new_items);n let usersize_delta = new_usersize as isize - C::userlen_of_slice(old_items) as isize;n if usersize_delta != 0 {n cursor.update_offsets(self.head.height as usize, usersize_delta)n }nn inserted_content = &inserted_content[replaced_items_here..];n replaced_items -= replaced_items_here;n // We'll hop to the next Node at the start of the next loopn // iteration if needed.n index += replaced_items_here;nn for i in 0..self.head.height as usize {n cursor.entries[i].skip_usersize += new_usersize;n }n cursor.userpos += new_usersize;n }nn // Ok now one of two things must be true. Either we've run out ofn // items to remove, or we've run out of items to insert.n if inserted_content.len() > 0 {n // Insert!n debug_assert!(removed_items == 0);n self.insert_at_iter(&mut cursor, index, inserted_content);n } else if removed_items > 0 {n self.del_at_iter(&mut cursor, index, removed_items);n }n }nn // TODO: Assert that the iterator is after replaced content.n // #[cfg(debug_assertions)] {n // let c2 = self.iter_at_userpos(expected_final_position);n // if &cursor != &c2 { panic!('Invalid cursor after replace'); }n // }n }nn pub fn insert_at(&mut self, mut userpos: usize, contents: &[C::Item]) {n if contents.len() == 0 { return; }n n userpos = min(userpos, self.get_userlen());n let mut cursor = self.iter_at_userpos(userpos);n let (index, offset) = unsafe { &*cursor.here_ptr() }.get_iter_idx(cursor.entries[0].skip_usersize, false);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');n unsafe { self.insert_at_iter(&mut cursor, index, contents); }nn #[cfg(debug_assertions)] {n let c2 = self.iter_at_userpos(userpos + C::userlen_of_slice(contents));n if &cursor != &c2 { panic!('Invalid cursor after insert'); }n }n // TODO: Assert that the iterator now points after removed content.n }nn pub fn del_at(&mut self, mut userpos: usize, num_items: usize) {n userpos = min(userpos, self.get_userlen());n // We can't easily trim num_items.n // num_items = min(length, self.num_chars() - pos);n if num_items == 0 { return; }nn let mut cursor = self.iter_at_userpos(userpos);n let (index, offset) = unsafe { &*cursor.here_ptr() }.get_iter_idx(cursor.entries[0].skip_usersize, false);n assert_eq!(offset, 0, 'Splitting nodes not yet supported');nn unsafe { self.del_at_iter(&mut cursor, index, num_items); }n // TODO: Assert that the iterator remains where it was.n }n}nnnimpl SkipList where C::Item: PartialEq {n pub fn eq_list(&self, other: &[C::Item]) -> bool {n let mut pos = 0;n let other_len = other.len();nn for node in self.iter() {n let my_data = node.content_slice();n let my_len = my_data.len();nn if pos + my_len > other_len || my_data != &other[pos..pos + my_data.len()] {n return falsen }n pos += my_data.len();n }nn return pos == other_len;n }n}nnimpl Drop for SkipList {n fn drop(&mut self) {n let mut node = self.head.first_skip_entry().node;n unsafe {n while !node.is_null() {n let next = (*node).first_skip_entry().node;n Node::free(node);n node = next;n }n }n }n}nnnimpl From<&[C::Item]> for SkipList {n fn from(s: &[C::Item]) -> SkipList {n SkipList::new_from_slice(s)n }n}nnimpl From> for SkipList {n fn from(s: Vec) -> SkipList {n SkipList::new_from_slice(s.as_slice())n }n}nnimpl Into> for &SkipList {n fn into(self) -> Vec {n let mut content = Vec::with_capacity(self.num_items);nn for node in self.iter() {n content.extend(node.content_slice().iter());n }nn contentn }n}nnimpl SkipList where C::Item: std::fmt::Debug {n // TODO: Don't export this.n pub fn print(&self) {n println!('items: {}tuserlen: {}, height: {}', self.num_items, self.get_userlen(), self.head.height);nn print!('HEAD:');n for s in self.head.nexts() {n print!(' |{} ', s.skip_usersize);n }n println!('');nn for (i, node) in self.iter().enumerate() {n print!('{}:', i);n for s in node.nexts() {n print!(' |{} ', s.skip_usersize);n }n println!(' : {:?}', node.content_slice());n }n }n}nn// impl usize> PartialEq for SkipList {n// // This is quite complicated. It would be cleaner to just write a bytesn// // iterator, then iterate over the bytes of both strings comparing along then// // way.n// // However, this should be faster because it can memcmp().nn// // Another way to implement this would be to rewrite it as a comparison withn// // an iterator over &str. Then the rope vs rope comparison would be trivial,n// // but also we could add comparison functions with a single &str and stuffn// // very easily.n// fn eq(&self, other: &SkipList) -> bool {n// if self.num_items != other.num_itemsn// || self.num_chars() != other.num_chars() {n// return falsen// }nn// let mut other_iter = other.iter().map(|n| { n.as_str() });nn// let mut os = other_iter.next();n// let mut opos: usize = 0; // Byte offset in os.n// for n in self.iter() {n// let s = n.as_str();n// let mut pos: usize = 0; // Current byte offset in sn// debug_assert_eq!(s.len(), n.num_bytes as usize);nn// // Walk s.len() bytes through the other ropen// while pos < n.num_bytes as usize {n// if let Some(oss) = os {n// let amt = min(s.len() - pos, oss.len() - opos);n// // println!('iter slen {} pos {} osslen {} amt {}', s.len(), pos, oss.len(), amt);nn// if &s[pos..pos+amt] != &oss[opos..opos+amt] {n// return falsen// }nn// pos += amt;n// opos += amt;n// debug_assert!(opos <= oss.len());nn// if opos == oss.len() {n// os = other_iter.next();n// opos = 0;n// }n// } else {n// panic!('Internal string length does not match');n// }n// }n// }nn// truen// }n// }n// impl usize> Eq for SkipList {}nn// impl Clone for SkipList where F: Fn(&T) -> usize {n// fn clone(&self) -> Self {n// let mut r = SkipList::new(self.get_usersize);n// r.num_items = self.num_items;n// let head_str = self.head.as_str();n// r.head.items[..head_str.len()].copy_from_slice(head_str.as_bytes());n// r.head.num_bytes = self.head.num_bytes;n// r.head.height = self.head.height;n n// {n// // I could just edit the overflow memory directly, but this is safern// // because of aliasing rules.n// let head_nexts = r.head.nexts_mut();n// for i in 0..self.head.height as usize {n// head_nexts[i].skip_items = self.nexts[i].skip_items;n// }n// }nn// let mut nodes = [&mut r.head as *mut Node; MAX_HEIGHT];nn// // The first node the iterator will return is the head. Ignore it.n// let mut iter = self.iter();n// iter.next();n// for other in iter {n// // This also sets height.n// let height = other.height;n// let node = Node::alloc_with_height(height);n// unsafe {n// (*node).num_bytes = other.num_bytes;n// let len = other.num_bytes as usize;n// (*node).items[..len].copy_from_slice(&other.items[..len]);nn// let other_nexts = other.nexts();n// let nexts = (*node).nexts_mut();n// for i in 0..height as usize {n// nexts[i].skip_items = other_nexts[i].skip_items;n// (*nodes[i]).nexts_mut()[i].node = node;n// nodes[i] = node;n// }n// }n// }nn// rn// }n// }n' \ No newline at end of file diff --git a/seph23_gap.txt b/seph23_gap.txt new file mode 100644 index 0000000..434cc6b --- /dev/null +++ b/seph23_gap.txt @@ -0,0 +1 @@ +''''' 'y'd'i't' 'e'm''''''''''''''5000x faster CRDTs: An adventure in optimization''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'g' 's''a' 'e'''''''''''''''''''''''n'o'i't'a'z'i'm'i't'p'o' 'n'i' 'd'a'm' 'I' 'w'o'H'''''''' 'g'n'''o'g' ''''i'k'a'M'n'''''''50'''''''''''''e'r'u't'n'e'v'd'a' '''' '''''''''''''''''''r'e't's'a'f' 'x'''' '0'0'0'5' 'o'g' 't'a'h't' '00x faste' 'r''''''''''''''''''''''''''''''''n'o'i't'a'z'i'm'i't'p'o' 'n'i' 'y'd'u't's' 'e's'a'c' 'A' ':''''''':''''''''''''''''='c'r's' 'g'm'i'<'''''>'''> aut'''''x'0'0'0'5'omerge1.drawio.svg'n'n'.'N'H''''N' 'r'o'f' 'y'd'a'e'r' 't'''n's'i' 's'i'h'T' '!'e's'''''''i'l'l'i''''' -->'''s'm'''''''''''''M''''m''''''''''''t'n'e'd'u't's' 'd'a'r'g''''-'''s'M'''''''s'm''''''s'm'-''''''''''''0'0'0'1'='s'M''''M'e'm'i't' 'n'''''t'b'-'e'm'i'''''''''n't'b'-'e'm'i't't'- '''''''''''''''''''''''n'f'd's'''d'f's'd'''''''i'a'h' 'h'o' -->'''''' /'''''''''''''''>'o'o'f'-'h'p'e's'/'<'''''''>'/' 'o'o'f'-'h'p'e's'<''n'n'a'e'l'p' ''''p'y'l'e'd'i'w' 'o'o't' '''''''''''''''''''''''''''''''' 'f'f'u't's'''e'w' 's'i'h't' 't'u'o'b'a' 'g'n'i'k'l'a't' 'n'e'v'E''''''For the uninitiated, CRD's'''TS [(Conflict-Free Replicated Data types)](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type) are fancy programming tools which let multiple users edit the same data at the same time. They let you work locally with no lag. (You don't even have to be online). And when you do sync up with other users & devices, everything just magically syncs up and becomes eventually consistent. The bes'''''''''''''c'i'm'e'd'a'c'a' 'e'm'o's'''''''''''s''''e'd''''''h'c'a'e't'o'c''''y'd'o'b'e'm'o's't part of CRDTs is that they can do all that without even needing a centralized computer in the cloud to monitor and control everything''''''''t'n'a'w' 'I''Think, Google Do'''''''''y'm' 't'n'a'w' 'I''''''y''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'c'i'v''''''[''''''''''o't'''https://ourincrediblejourney.tumblr.com')'/'(']'' '''''g'''n'i'd'e'e'n'''''''''''I' 'o'g'a' 's'r'a'e'Y'' 'e'm' ''e'd' 'y'm''''''r'o'F' 'l'l'''''''''''''''''''''''''''''''''''''''''''''y'k'n'u'l'c' 'd'n'a' '''' ''')'a't'a'd' ''''''''''''''''''' '.'w'o'n' 'l'i't'n'u' ','l'l'e'W''n'o'i't'a'c'i'l'p'p'a' 'l'a''''l'e'r' 'r'e'h't'o' 'd'n'a'(' ''a' 'n'''''''n'e'e'b' 'e'v''''''e'''''''''''s'r'a'e'y'''''''''''''e'd' 'a' 'r'o'f' 'e'w't'e'b' 'a't'a'd' 'e'r'a'h''a's'''''' 'k'r'o'w' 'y'l's's'e'l'm'a'e's' 'o't' 's'p'p'a''m' 'cs without google. Or master-master database replication without lag. Or seamles''''''''''''''''''''''''''s''''''''t'''''''''''''''e'm'o's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'''''f''' 't'u'B'''''''''''''''''''''''''e'r'''y'e'h't' 'g'n'i't'i'd'e' 't'x'e't' 'r'o'F''e'h't'o''''''''''''''''''''''''''''' 'y'''''For the uninitiated, CRDTs [(Conflict-Free Replicated Data typ' '''es)](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type) are fancy programming tools which let multiple users edit the same data at the same time. They let you work locally with no lag. (You don't even have to be online). And when you do sync up with other users & devices, everything just magically syncs up and becomes eventually consistent. The best part of CRDTs'I want Google Docs without google. I want my apps to seamlessly share data between all my devices, without me needing to rely on some [flakey startup](https://ourincrediblejourney.tumblr.com/)'s servers to still be around in another decade. I think they're the [future of collaborative editing](https://josephg.com/blog/crdts-are-the-future/). And maybe the future of all software - but I'm not ready to talk about that yet.''I want Google Docs without google. I want my apps to seamlessly share data between all my devices, without me needing to rely on some [flakey startup](https://ourincrediblejourney.tumblr.com/)'s servers to still be around in another decade.' is that they can do all that without even needing a centralized computer in the cloud to monitor and control everything.''n''nI want Google Docs without google. I want my apps to seamle'nFor the uninitiated, CRDTs [(Conflict-Free Replicated Data types)](https://en.wikipedia.org/wiki/Conflict-free_repli''c''a''ted_data_type) are fancy programming tools which let multiple users edit the same data at the same time. They let you'''''''' ''w''ork locally with no lag. (You don't even have to be online). And when you do sync up with other users & devices, everything just magically syncs up and becomes eventuall''''''n''n'''''''m''' 't'u'B'n'n'''y consistent. The best part of CRDTs is '''A''' '.'that they can do all that without even needing a centralized computer in the cloud to monitor and control everything.'ssl'n'y share data between all my devices, without me needing to rely on some [flakey startup](https://ourincrediblejourney.tumblr.com/)'s ser'n'vers to still be around in another decade.''n''nFor text editing they've been famously really slow and clun'nI want Google Docs without google. I want my apps to seamlessly share data between all my dev'''n'n'n'ices, without me needing to rely on some [flakey startup](https://ourincrediblejourney.tumblr.com/)'s servers to still be around in another decade.'ky 'n'for years, so barely anyone uses them. Well, until now.'''''n'''n'n'n''''''''''''''''''''''''''''''m'''''''''''''''''''''nFor text editing they've been famously really slow and clunky for years, so barely anyone uses them. Well, until now.'''''n'''''n'''''n''''n'n'n''''But before we can even talk about that'',''''''''''''''''''''''''''''''''''''''''' ','t'a'h't' 't'u'o'b'a' 'k'l'a't' 'n'e'v'e' 'n'a'c' 'e'w' 'e'r'o'f'e'b' 't'u'B'n'n'!'e'b' 'o't' 'e'v'a'h' 't'''n'o'd' 'y'e'h't' 't'u'B''''''' ','l'l'e'W' '''''''''''''l'e'W' ''e'h't' 's'''' 'e's'u' 'e'n'o'y'n'a' 'y'l'e'r''''''''''e'r''''l's'a'b''''''''''''''y'l'l'a'e'r' 'y'd'o'b'o'n' 'o's' ','l'l'a'e'r''''''.'w'o'l's' 'y'l's'u'o'm'a'f' 'e'r'''y'e'h't' 't'u'B'n''n''n'''''''''.'e'd'a'c'e'd' 'a' 'n'i' 'd'n'u'o'r'a' 'e'b' 'l'l'i't's' 'o't' 's'r'e'v'r'e'''''''a't's' 's'''''' 'p'u't'r'a't's' 'y'e'k'a'l'f' 'a' 'n'o' 'g'n'i'y'l'e'r'''''''''''''''''''''e'm'o's' 't'a'h't' '''''''''''''''''''''''''''''''''''''''.'s'r'a'e'y' 'e'l'p'u'o'c' 'a' 'n'i' 'k'r'a'd''''''''e'n'i'l'f'f'o' 'o'g' 'o't' 'g'n'i'o'g' 'e'r'a''g'n'i'y'r'r'o'w''''u'o'''''''''''''''''' 'y'g'd''''''''''' 's'r'e'v'r'e's' 's''''o'd''''''''p'u't'r'a't's' 'o'n' 'h't'i'w' ','a't'a'd' 'n'o'i't'a'c'i'l'p'p'a' 'e'c'i'v'e'd'-'s's'o'r'c' 's'n'n'''. Think, Google Docs without google. Or master-master database replication withou'''''''''''''''''' 's's'e'l'm'a'e's' 'r'O' '.'g'a'l' 't'''''''''''''''''''''''''''' '(''S'T'D'R'C''' ','d'e't'a'i't'i'n'')'''''''n't'i'n'u' 'e'h't' 'r'o'F''CRDTs are'[' Conflict-Free Repli''''e'r'a' 'cated Data ty'''''''''''''''t'e'l' 'h'c'i'''h'w'''''''''''w'o'l'l'a' 'o'''o't' ''''''''''''''''''''''''''''''''''''''.''Y''''''''''''''''''''''''''''''''''''''''''''''''''sync''''''''t'c''with'''o't'e'n'n'o'c'''''''''''''''''''''''''''&''''''''''''''''''''''''''''''''''''''''' 'd'l''''''''''''''''''''''''''''''''''''''''''''.'t'n'e't's'i's'n'o'c' 'y'l'l'a'u't'''''n'a'c' 'n'e'v'e' 's'e'm'o'c''''''n'e'v'e'''a' ' 'e''''''''''''G''''''D''''''''''''g''''G''''''''''''''''''''''''''' 'e's'a'b'a't'a'd''''''''''''''''''''' 't'u'o'h't'i'w' 'n'o'i't'a'c'i'l'p'e'r' 'r'e't's'a'm'-'r'e't's'a'm' 'r'O' '''''''''''''''''''''.'e'l'''''''e'.'g'o'o'g' 't'u'o'h't'i'w' 's'c'o'd' 'e'l'g'o'o'g' ','k'n'i'h'T' '''d'e'z'i'b' 'd'n'a' 'p'''u' 's'''c'n'y's' ''u'o'h''''''''''''' ','m'e'h'A'''''''G'''''''''s'c'o'D' '''''''' ')'e'l'g'o'o'g' 'e'k'i'L'(' 's'''''''''''''''y'l'l'a'c'i'g''''i'a'm' 't's'u'j'''' 's'i' 'g'n'i'h't'y'r'e'v'e' ','s'e'c'i'v'e'd' '/' 's'r'e's'u' 'r'e'h't'o' 'h't'i'w' 'p'u' 'c'n'y's' 'o'd' 'u'o'y' 'n'e'h'w' 'd'n'A' '')'e'n'i'l'n'o' 'e'b' 'o't' 'e'v'a'h' 'n'e'v'e' 't'''n'o'd' 'u'o'y'(' 'g'a'l' 'o'n' '''''''''''''''''''''''t'e'n'r'e't'n'i' 'e'h't' 't'u'o'h't'i'w' 'y'l'l'a'c'o'l' 'k'r'o'w' 'u'o'y' 't'e'l' 'y'e'h'T'''''t''''''''''' 'k'r'o'''w''''''''t'i' ''''''''''''o't' '''g'''''n'i'd'e'e'n' 'o'd' '''''''''''r'o' 'g'n'i'k'c'o'l' ''y'e'h't' '''''''''''''''''''''''''''t'a'h't' 'e'k'i'l' 'g'n'i'h''''''''''''y'e'h't' 't'a'h't' ''t'y'n'a' 'r'o'''''''n'a' '''''''''''''''t'i' 'o'd''''''''''''''''' 't'u'o'''''''''' ',''b'a' '''''''''''''m'o'r'f''''' '&' 'g'a'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''i'''' 'n'''o' 'r'e't'u'p'''''''l'o'r't'n'o'c''m'o'c' 'l'a'r't'n'e'c' 'y'n'a''S''''''''E''''''C'''''''''g'n'i'd'e'e'n' 't'u'o'h't'i'w' 't'a'h't'''''''''''''''d'n'a' 'r'o't'i'n'o'm' ' 'l'l'a' 'o'd' 'n'a'c' 'u'o'y' 's'i' 's'''' 'T'D'R'C' 'f'o' 't'r'a'p' 't's'e'b' 'e'h'T''''''''''''''''''''''''s'n'o'i't'c'e'n'n'o'c' 't'e'n'r'e't'n'i' 'y't't'o'p's' 'r'o' '''''''''''''''''''''''''''''''''''''''''''' 'o't' 'e'n'i'l'n'o' 'e'b' 'o't' 'd'e'e'n' 'n'e'v'e' 't'''n'o'd' 'e'l'p'o'e'P' '.'''''''''''''''''''e''''b' 'r'o' ','g'n'i'y'r'r'o'w'' 'n'a'c' 'e'w' 'd'n'A' '.'''''(https://en.wikipedia.org/wiki/Conflict-free_replicated_data_typ''''''h'T'e''')')'(']'''''''''''''''''''''''''''''''s'l'o'o't'''''''s'k'c'i'r't' 'g'n'i'''m'm'''a'r'g'o'r'p' 'y'c'n'a'f' 'e'r'''y''''''''''''''''''''''''s'r'e'v'r'e's''''''''''''''''y'l'l'u'f''''''''''''''''''''''''''''''''''''''''''''''''''o''''''''''e't'a'n'i'd'r'o'o'c''t' 'g'n'i'd'e'e'n'''''''''''''''' 'd'n'a' 'g'n'i's's'e'n't'i'w''''''''''''g'n'i'l'l'o'r't'n'o'c' ''')'''''')'d'u'o'l'c' 'e'h't'''(' 'r'e't''''e'u'p'm'o'c' 's'''e's'l'e' 'y'd'o'b'e'm'o's'''e'p'''''''G'N'A'A'F' 'o'h''''''''''''''''''''' 'e'm'''''''''''e'g'r'a'h'c''''''''''''''''''''''g'n'i'h't'y'r'e'v'e' 'f''''''''''''' 'r'e'v'o' 'l'o'r't'n'o'c' 'n'i' '''o's'''''''''.'s'r'e'v'r'e's' 't'u'o'h't'i'w' ','e'b'y'a'm' ','''' 'd'n'A' ' 't'u'o'h't'i'w' ','e'h't''p'''''''''''r'o' 'g'n'i'k'c'o'''l''''''s' 'es. Basically, special constructions which le''''''''''''''''''''''''''d'l'i'u'b' ''''o'd'''''''''''''''''''''s'r'e't'u'p'm'o'c' 's''''''''''''''''''e'l'g'''''''''''''''''''''''''''t'i'g' 'o't' 'g'n'i'm'm'a'r'g'o'r'p' 'r'i'a'p' 'd'd'a''''o'o'g' 't'u'o'h't'i'w' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e's'a'b'a'''''''''''r'e't's'a'f' 'y''''''' 's'a'w' ''t'a'd''''''''''''''''''''''''''''S'O'X'A'P' 't'u'o'h't'i'w' 'n'o'i't'a'c'i'l'p'e'r' 'r'e't's'a'm'-'r'e't's'a'm' 'o'd'''''''e'l'g'o'o'''''''''''''''''''''''''''''''g'''''''.'t'i'G' 'o't' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'd'd'a'g' 'f'o' 't'''' 'u'o' 's'r'e't'u'p'm'o'c' 's''''''''''''' 'r'o' ','s'c'o'd' 'e'l'g'o'o'g' 'f'o' 't'u'o' 'e'l'g'o'o'g' 'e'k'a't' 'n'a'c' 'e'w' 'o'S'''' 'r'O' '.'g'n'i't'i'd'e' 't'n'e'm'u'c'o'd' 'e'm'i't'l'a'e'r'''t multiple computers / users all edit the same data at the same tim'''''''''''''''''''''''''''''''''''''''''''''s'u'''a' ' 't'e'l' 'n'a'c'''''''''''''''''''''' ','t's'a'f''''''''''''''''''''''''''' 't'n'e'''.''''''w''' 't'u'B'''s't's'i's'n'o'c'-''''c'y'l'l'a'u't'n'e'v'e' 'e'k'a'm'''''''''''''''''''''''''''''t'u'o'h't'i'w' 'n'o'i't'a'c'i'l'p'e'r' 'e's'a'b'a't'a'd'''''''''''''''''''''''''''''' 'r'o' ','s'c'o'd' 'e'l'g'o'o'g' 'r'e'e'p'-'o't'-'r'e'e'p' 'd'l'i'u'b' 'u'o'y' 't'e'l' 'y'e'h'T' ''''''''''''''''''''''''''''' '''' 'y'e'h'T' '.'s't'c'''i'l'f'n'o'c' 'g'n'i't'i'd'e' 't'u'o'b'a' 'g'n'i'y'r'r'o'w' 't'u'o'h't'i'w' ','''e'' without worrying about locking or'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n' 'r'o' 'g'n'i'k'c'o'l' 't'u'o'b'a' 'g'n'i'y'r'r'o'w' 't'u'o'h't'i'w' ''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'p'o'c' 's'''e'n'o'y'r'e'v'e'''''y'e'h't' ','r'e'h't'o' 'h'c'a'e' 'h't'i'w' 's'e'g'n'a'h'c' 'r'i'e'h't' 'e'r'a'h's'''''' 'l'l'e't' 's'r'e't'''''''r'e'u'p'm'o'c' 'e'h't' 'e'c'n'O' '.''''''''''' 'd'n'a' ','e'm'i't' 'e'm'a's' 'e'h't' 't'a' '''a't'a'd' 'e'm'a's' 'e'h't''''''''''''''''''''''''e'e'n''''''''' 't'u'o'h't'i'w' 'y'l'l'a'c'o'l''''' 'd'n'a' 'a't'a'd' 'e'm'o's' 't'i'd'e' 'l'l'a' 's'r'e's'u' '/' 's'r'e't'u'p'm'o'c' 'e'l'p'i't'l'u'm''''l'''''''''''''''' 's'r'e's'u' 'e'l'p'i't'l'''''''l't'u'm' 't'e'l' 'h'c'i'h''''i''''''''''''' 'h'c'''''''c'h'i'w' 's'n'o'i't'c'u'r't's'n'o'c'''''''''''' 's'm'h't'i'r'''''''t'i'o'g'l'a' 'l'a'i'c'e'p's' ','y'l'l'a'c'i's'a'B' '.'s'e'p'y't' 'a't'a'D' 'd'''''''D' 'e't'a'c'i'l'p'e'R' 'e'e'r'F'-'t'c'i'l'f'n'o'C' 'e'r'a' 's'T'D'R'C'n'k'n'i'l' 'e'h't' 'e'r'''''''''''''''e'e'r'F'-'t'c'i'l'f'n'o'C''[''a''''https://en.wikipedia.or'''''''''''''''''''''''''''''''''''''''''''s'e'p'y't' 'a't'a'D''''d' 'd'e't'a'c'i'l'p'e'R' 'e'e'r'F'-'t'c'i'l''''-'f'n'o'C' 's't'a'h't'(' 'g/wiki/Conflict-free_replicated_data_typ')'e'(']''n'n''''h's' 't'''n'o'D' ''o's' 'e'b'y'a'm' ',''''''''''''''''''''.'g'n'i'h's'i'l'b'u'p' 'e'r'o'f'e'b' 's'm'a'r'g'''''''''''''''' 's'u'o'i'''r'a'v' 'g'n'i's'.'A'''''''''''u' ',''''''a'i'd' 's'd'e'e'N' ':'T'F'A'R'D''''R' '>'''n'n''''''''''''''''''''''''''''''''''''''')'!'s's'e'y' ','w'o'W''''''''''''''''e'k'i'l''''' ','w'o'w''''''''''w'o'w'(' '''''''(' '''''''''''''''''''''' 'g'n'''''''r'e't's'a'f' ''i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'g'n'i'k'a'M'''''''''''''''''' 't's'i'l''''''''''''''''''''''''x'0'0'0'4' ''''''' 't'y'b' 'e'c'n'a'm'r'o'f'r'e'p' 'g'n'i'v'o'r'p'm'I' ':''o''''p''''''''''''''''t''''o'''''''''''''''''n'o'i't'a'm'r'o'f's'n'a'r'T' 'l'a'n'o'i't'a'r'e'p'O' ''R'R'R'B''''''''''''''''''''''''' 'R'R'R'B' 'o'g' ''''''''r'i'e'h't' '-''''''''''''-' 'n'Th''''''''''''g'n'i't'a'i'r'u'f'n'i' 'e annoying part was that ''s''''S'''''''' smart'''''''''t'r'a'm's' ''o' 'g'n'a'h's'T'D'R'C' 'g'n'i'k'a'M''''''m'o't'u'A' '#'''''''''W'' '!'''''''''''''''''' 'n'o'i't'a't'n'e'm'e'l'p'm'i'n'n'n''''''''''I '''''''''''''n''''n'o' 'g'n'i'o'g' 's'a'w' 'took a'' ''cl'''''t'a'h't' 'oser look at the paper - because something was fishy here. In their paper when a user pasted a big chunk of text (say, 1000 characters), instead of creating 1 operation with 1000 characters, their code split the insert into 1000''''''''''' 'l'a'u'd'i'v'i'''''r''''t'u'o'y'd'n'i'''''''''''''''''''s'n'o'i't'a'r'e'p'o' ''''' 'l'a'u'i'''''h'''o'D'd'v'i'd'n'i' operations. And each of those inserts needed to b''''''''''''l'a'r'e'v'e''''e'm' 's' 't'a'h't'e'' ''processed separately''''e'r'a' '''.'' Duh - of course it'll''''''''''x''''''''''r'u'o'i'v'a'h'e'b''semantics''''''''''r'u'o'i'v'a'h'e'b'o'b'-'k'c'a'l'''''''''''''''''s't'i'd'''''''''''s't'n'''''''''''''''''''''''''''''''''''''''''''','e'm'i't' 'e''''''''''''''''''''''''''''''''''''''''r'''e'd'r'o' 't'a'h'w' 'n'i'''''''''''x'o'b'-'e't'i'h'w''''''''''''''m'e't'''''''''''''g'n'i'm'm'a'r'g'o'r'p' 's'y's' 'e'h't' 'f'o' '' ' 'o's''optimized i'''''''''''e'd'o'c' 'e'h't' 's it, and for what'''''''''''''''''''''''''''''''''''''''''''''''''g'n'i't'i'#''d'e' 't'n'e'r'e'f'*''f'i'd'*'' 'n'i' 'm'r'''o'*''''f''*'r'e'p' 't'''i''' 's'e'o'd'''''Bu''t n''o m''''''''''''''''''''''''''''''''''''''''''''''''''''ther''e ar''e a''''''''''''''''''''''''''''''''''''''If you wait long enough, somebody will find more' N''o ma'e'''tte''r '' bugs.'''''''''''''''''''a' 'n'g'i's'e'd' 'n'a'c'''''''''''''anohter'''''''''''''''''''d'n'A' '.'s'g'u'b'r'''u' 'o'''i'e'v'''a'r'h'''e'o'm''''''''b''r'e't'h'o''semantics'n'a' 's'd''r'n'u'''o'i'i'''v'f'a'''h' 'e''y'l'l'a'u'b''s'u' 'e'n'o'e'm'o's' 'e'm'i't' 'h'g'u'o'n'e' 'n'e'v'i'g''''''''''''a' 'e'r'a' 'e'r'e'h't' ','e't'i'r'w' 'u'o'y' 's't's'e't' 'y'n'a'm' 'w'o'h' 'r'e't't'a'm' 'o'N'''''''''m' 'o'n' 't'u'B' ''''''''''''''a''' 'e's'i'w'e'k'i'*''L'' ''*'f'i' 'd'n'a''''*'''''*''a'n''''''''''''''''''''n'''''''''''''' 'm'e't's'y's''''''''''''''''' 'r'e't''''e't'a'm' 'o'N' 'e'h't' 'f'o'''''''o' ''o'i'''t'a't'n'e'm'e'l'p'm'i' 'y'r'e'v'e''''l'l'a'' ',''' '?''''''''''''''''''''''''''''''''''?'s'e'l'''u'r' 'e'h't' 'e'r'''a' 't'a'h'W' '''' '?''e'h't' 'o'd' 'r'o' ','''''''' '?'w'o'H'''''''''''''''''t'c'i'l'f'n'o'c' 'y'e'h't' 'o'D' '?'d'e'g'r'e'm' 'y'e'h't' 'e'r'A''''m'a's''''e' 'e'h't' 't'a' 't'x'e't' 'f'o' 'n'o'i'g'e'r' 'e'm'a's' 'e'h't' ''''e'i'l'c' 'o''''''''''''''''i'l'c' 'p'w't''''''''d'n'e' 't'n'e'r'r'u'c'n'o'c'b' ' be slow if you do that! This isn''''''''''''''''''''''''''n'e'h'w''''''''''''''d'n'''d'e'u'o''F'''''''''''''''''''''e's'r'e'v'i'n'U' 'e'h'T' 't'u'o'b'''A''''''t'u'o'b'[''a''''s'''''o'b''''https://github.com/josephg/diamond-'#'type')'s'(']'r'a' 't'n'e's' '' 's'''''''''''''''r''6'''54''''65'''''4''''6'''6'5'''''''5'4''''''''''r'e'v'o' ''''''4'5''''''''''u'''''o'''''i'''d'v''e''a'h'c'h''t''e'e''''''''''''''''' 'e'b''l'o'h'w''' 'a'''f'o' 'semantics''' 'f'o' 'e''r'''''u'''''o'''''i'''''v'''o'a''t''h' 'd'e''e'd'e'e'n' 'y'e'h't''b'n'O' '.''''r't's'r'e'v'o' 'y'l'b'a'b'o'r'p' ''''''''''''t'o'n' 'd'n'A' '.''a'w' '''''d'e'k's'a''t'r'a'p' 'g'n'i'y'o'n'n'a' 'e'h'T''t a problem with the a''''''''''''''''''''-''''e'b'u't'u'o'y''''''''''p'y't'''='s's'a'l'c''''''''''''''''''''''''0'0'1'='''''''''''''0'1' ':'h't'd'i'w'-'x'a'm' 'l'''min'''''''-'x'a'm'''''''''''-'x'a'm''''''n'i'm''width='560' height='315' '''go''''''''''''''''''''''''''''''''''''''''''''''''''''p'u' 'e'd'o'c''''''''''''''d'e'w'e'i'v'e'r' 'r'e'e'p' '' 'o't' 's'n'o'''''''''' 's't'a'h'T''''''''''''''n''' 's'i' 'h'c'i'h'w' ',''''''.'N'''''t'h''''''''''n'A''''a' 's'i' 'A'G'R' ''''''g'''''i'''''r'i't'a't'n'e'm'e'l'p'm'.'B''''''''''''''''''''''''d'n'i'f' 'l'l'i'w' 'y'd'o'b'e'm'o's'''''''''''''''''''''a' 'e't'i'r'w' 'l'l'''i'w' 'e'r'e'h't''''i' 'e'''r'o'm''''''m'i' 'f'o' 'h'c'n''''''''''''' 't'u'o' 'e'n'o'e'm'o's' ''u'b' 'a' 's'a'h' ''''''o'h'w''''''''g'n'i'h's'u'r' ','rithm. This is just a prob'''''''''''''''''''''''''''''''''''''''''''''''''''''''''?'r'u'o'i'v'a'h'e'b' 's'''m'e't's'y's' 'e'h't' 'e'b'i'r'c's'e'd' 'h'c'i'h'w' ''''?'s'e'l'u'r' 'e'h't' 'e'r'a' 't'a'h'W'lem''''''''''''''''''''''''''''''s'n'u'''''''''''''''''''''''''''''''''''s'u' 'l'l'e'''''''l'l''.'A''''''t''' 'y'l'l'a''''l'u't'c'a' 't'a'h't''' 's'''''' 't'a'h't'e'o'''''''''''''''''''''''e'r'o'm' 'o'n' 'e'r'a' 'e'r''d''''''''''''''''''''s' 'y'l'l'a'e'r''''''''''''''''t'a'h't' 'm'o'r'f' 'r'e'f'n'i' 'e'w' 'n'a'c' 't'a'h'w'''''''''''''''s'e't'i'r'w' ''','e'b'y'a'm' ','' ','y'l''r' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'y'm' 'f'I'''''''' 'n'e'h'W'''''e'k'f''''o''t'''''''''''''''''' '?'I' 's'a'w''n''n' 'o'h'W'u'''''''i'l' 'm'e'e''''''''''''''''''''''''-' 'e'r'e'''''''r'o'w' 'y'l'l'a'e'''''' 'a'','v'a'j'r'''''''''''''e'r'e'w' 'y'e'h't' 't'a'h'w' ''s' '''''''''''''''''''o't''f'o'' 's'k'n'i'l' 'e''''m' 'g'n'i'd'n'e's'with *their particula'''''''g'n'i't's'e't'r implementatio'' 'a'n*.''I wouldn't min''','d so much if I didn't have so many people'''''''''g'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'I' 'n'e'h't' 'd'n'u'o'r'a' 'e'm'i't' 'e'm'o'S''''a'n''n''''''''''''''''''''''''''''''''''''''''''''''''''''' ','''' 'h'g''''''''''''''''''''''''''''''''''''''''''''''.'''s'n'o'i't'a't'n'e'm'e'l'p'm'i' 'r'e't's'a'f'''''''''''''''' 'o'd' 'o't' 's''''''''''''''''''''''''''''''''e'm'a's' 'e'h't' 's'a'h' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'h'c'a'E''''I'' 'a'''''''o''''''''''''o't' '''''d'''e'd'i'c'e'd' 'g'a''''''''''''''''''' 'o's' 'r'o' 'y'a'w' 'w'e'n''''''''''''''''''''''' 'o't'''''''s't'a'h'T'''w''''''''''''''o''''''''m'i' 'r'e't's'a'f' 'h't'i'w' 's'e's'r'a'-'t'r'a'm's' 'r'e'g'g'i'b' 's'y'a'w'l'a' 'd''''''''' 'k'n'i'h't' 'I'n'A' '.'s'g'u'b' 'e'r'o'm' '''''u'u'o'n'e' 'g'n'o'l' 't'i'a'w' 'u'o'y' 'f'I'''''''''''''''''''''''''s'M''y''''''''''''''''''','g'n'i'c'i't'o'n' 't'u'o'h't'i'w' ',''a'w'l'a' 's'''e'r'e'h't' 'e'm'i'''t' 'h't'i'W' ''s''''n'i'''' 'n'o's'i'r'a'p'm'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''e'n'c'e'i'c's' 'a' 't'o'n' ','t'r'''a' 'n'a' 's'i' 'g'n'i'k'r'a'm'h'c'n'e'B' '''n''''t''p'n''m'c'''''''''''''s'i' 'e'g'r'e'm'o't'u'A' '''''''''''''''''''''''''''''' 'e'r'''','a' 's'd'e'e'p's' '''m'h't'i'r'o'g'l''''''e't'i'u'q' ''''''''''''''''''''' 'y't'i's'r'e'v'i'n'u'a'''p's' 'd'e'h's'i'l'b'u'p''''''''''''''''' 's'i'h't' 't'a'h't'''''''''' 't''''''''e'i'r't' 'u'B'''''''''''''''''''s't'''c'e'p's'a'''''''''''I' '.'''''''''''''''''d'a'h' 's'T'D'R'C'''''''''''''''''''''''''''''''''''''''''''''' 't'u'b' 't'h'g'u'a'N'''''''''''''n'''n'n'''''''n'n''''''''''s'd'n'a'l' 'e'g'n'a'r't's''''''m''' ''''''''''''''''''''''''s'''''''''''''''''''a''''''''''''''''''''''''''''''''v'e''''v'''''''''''''0'2'0'2' 'm'o'r'f' '''''''''''''''''''''n'n':'k'l'a't' 's'i'h't' 'n'i' 'l'l'i'w' 'I' 'n'a'h't' 'r'e't't'e'b' 'r'a'f' ''''''e'g'r'e'm'o't'u'A' 's'n'i'a'l'p'x'e' 'n'i't'r'a'M''''''''''''''''''''i' 's'n'i'a'l'p'x''''''*'*'*'e' 'n'i't'r''''''''''''''I' 'e'n'i'''''''*''''''*'''*''''''''''''''''.'A'''''''A't'n'e'm'u'c'o'*''d''' 'y''*'t'p'*''m'e' 'n'a' 'o't'n'i' ''''.''''g'a'm'I'n'''''''''''''''''''''''''s't'r'e's'n'i' '''c'b'a''' 'h't'i'w' ''''e'e'e'r't'''(']'['!''n'''a'M'n'n'')''''''d'n'a'l''''''''s'l'e'n'n'u't' 'e's'o'''')'h't' 'm'o'r'f' 's'e'm'o'c' 'y'l'n'O'''''''''''''*'''''s''''''''s'*'' 'e''*''.'B''''''''''''''''*'''''''''''''g'v's'.'*''o'i'w''*'a'r'd'.'1'e'g'r'e'*''m'o''''''''''''''''''c'b'X'a''' 'h't'i'w' 'e'e'r't''t'u'a' '''>''n'n''''*''''n''-0.5 -0.5 192 162' style='max-width:100%;max-height:162px;'>
a
a
''''''n'n'
'n'n'' 'g'n''''''''''''''''''''''''''''''''''''r'a'i'l'i'm'a'f' 'y'l'b'a'k'r'a'm'e'r' 's'i' 't'l'u's''''''''''l's'u'e'r' 'e'h't' ','''i'''t'i'd'e' 'e'h't' 't'u'o'h'g'u'o'r'h't'''''''''''t'u'o'h'u'g'o'r'h't' 'd'e'n'e'p'p'a'h' '''c'a'e''r'e'h'w' ''w' 'f'I''''''''''r'a'l'u'c'i't'r'a'p' 'n'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':'n!'''''''''''''''''''''''''''''''''''' 't'n'e'm'u'c'o'd' 't'u'o'h'g'u'o'r'h't' 'n'o'i't'i's'o'p' '''''''n'i't'i'd'E'[reference crdts implementation zoomed in]''''''s'o'p's'n'i'(ref_perf3.svg)''d'e'i'l'p'p'a' 'g'n'i'h't'o'o'm's' 'd'n'a' 'g'n'i't'e'k'c'u'b''''''''''' 'g'n'i'g'a'r'e'v'a' 'e'm'a's' 'e'h't' 'h't'i'w' ',''''.'e'k'o'r't's''''t'y'e'k' 'y'''''''''''''''e'g'n'a'h'c' 'y'r'e'v'e' 'r'o'f' 'n'o'i't'i's'o'p' 't'i'd'e''''s'n'i''''e' 'e'h't' 'f'o' 'h'p'a'r'g'''''''''''''''' 'e'h't' 's'''e'r'e'H' '?'e'p'a'h's' 's'i'h't' 'e'v'a'h' 'h'p'a'r'g' 'e'h't' 's'e'o'd' 'y'h'W''n'n'n'a'w' ''''''''''n'a'w''''''u'o'y' 'f'I' '.'''''''''''''''''''''''''''''''''''''''''''''o't' 'd'n'o'p's'e'r'r'o'c' 't'a'h't' 's'e'o'd'''''''h't' 'x'e'd'n'i' 't'a'h'w''''''''''''''''''e's'a'c' 'g'n'i't'i'd'e' 't'n'e'r''I'r'u'c'n'o'c'-'n'o'n' 'r'o'f' 'n'o'i'''' '''''''''''''''''s'u''''''''' 'y'l'r'a'e'n'i'l''o'i'r'a'v' 'o'd'''''''''''''''''''''''''''''''''''''0'0'4'='t'h'g'i'e'h' '''' ''''''''''''''''https://invisiblecollege.s3-us-west-1.amaz'Y'''onaws.co'''0'0'3'm/braid-meeting-10.''''''0'''''''''''''''4'p'm'/'o'e'd'i'v'='e'p'y't' ''>''''n ''''''''>'o'e'd'i'v''''''''''v'i'd'/'<' ''7'2'=''''-'t'#'mp'''4'='c'r's' 'e'c'r'u'o's'<' 'n'>'s'l'o'r't'n'o'c' 'o'e'd'i'v'<'n'n''''''''''''''.'g'n'i'p'e'e'k'k'o'o'b' 'd'e't'r'o's's'a''''s' 'd'n'A' '/'/' '''''''''' '/'/'n'''n 'n doc.version[id[0]] = id[1]' '''''''n'o'''''''n'i't'a'z'i'm'i'''t'p'O' '/'/' '''''const int''''''''''D''''d''''''''''''''''s'e'p'y't' 'd'n'o'm'a'i'D'[''''D' ''''''''d'n'o'm'a'i'D'd'e'l'l'a'c' ''' ''''''a' ' 'https://github.com/josephg/diamond-types' '' 'n ' if (newItem'n let oparent = findItem(doc, o.originLeft)'''.seq > o.seq) breakn' 'egrate''AutomergeSmol = (doc: Doc, newItem: Item)''''''''''W'O'L'S' '/'''''''''' '*'*'/' ' => {n const {id}'''''t's'n'o'c''''''t'e'l''' = n''' ','i'ewItemn'''n ' ' // Scan to find the insert locationn'' '''''''i' 't'e'l' ' doc.'[''''''''''''https://en.wikipedia.org/wiki/Range_tre')'e'(']'''e'e'r't' 'e'g'n'a'r'version[id[0]] = id[1]nn'' let p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e'i''''''u' 't'u'B'''''f'i'd'o'm' 'y'l't'h'g'i'l's''''''''''''''u''' 't'u'B' '.'e'e'r't'-'b' 'a' 't's'u'j' 'y'l'l'a'u't'c'a''''''''''j' 'y'l'l'a'u''''''''''''''''l'l'a't'u'c'a' 's'i''''''' 's' 'e'e'r't' 'e'g'n'a'r' 'y'm' ','d'o'o'h' 'e'h't' 'r'e'd'n'U'''''''''''''''''''''''''y'l'l'a'e'r' 's'i' 'e'e'r't' 'e'g'n'a'r' 'e'h'T''''''''''''''''''''''''''''''''''''' 'a' 's'e's'u' 'y'l'l'a''''l'n'r'e't'n'i' 'e'e'r't' 'e'g'n'a'r' 'e'h'T''''''r'e't'n'I' ''''''''''''' 'm'''I''''''' 'd'n'A'''''''''e'g'n'a'r' 'y'M''''''' 'A'' '''' 'arent = findItem(doc, newIte''>''''''''''''''''''''''''''''''''e'[''h'T' '?'t'h'g'i'r' ','e'e'r'''''https://en.wiki'3'''pedia.org/wiki/Range_tre')'e'(']''''''''''''''''d'n'o'm'a'i'D''k'a'e'w''''d'a'b''''''''''''''''''''3'''''''''''''''''''''''''''''''''''''''''''''.'e'r'e'h' 'g'n'i'o'd' 'm'''I' 't'a'h'w' 'f'o' 'n'o'i't'p'i'r'c's'e'd''''''''''t'a'm' 'r'o'o'p' 'y't't'e'r'p' 'a' 's'i' 's'e'e'r't' 'e'g'n'a'r' 'n'o'''''''''''y't't'e'r'p' 's't'i''t' 'e'g'n'a'r' 'a' 's'i' 's''3'''i'h'T'''''''''''''''''''''''' 'e'l'c'i't''''i'r'a' 'a'i'd'e'p'i'k''4'''i'w' 't'a'h'T''''''''''k' 'I''''''''''''''''''t'''n'd'i'd' 'I' 'e'r'u's' 'm'''4''''I''' Does this have a name? I've been calling it a 'range tree', but I think that name is [taken by another data structure](https://en.wikipedia.org/wiki/Range_tree)n'n'''m''.originLeft)nn let inn // Scan to find the insert locationn for (i ='''''4''''''''''''''''''''''.''''''''''''''' 'r'a'e'n'i'l'Black magic'''''y'r'e''''''''''''''''''''''''''''''''.'a'e'd'i' 'o'n' 'e'v'a'h' 'I''''''''f'o' 'h'c'n'u'''''''''''l'l'e'w' 'd'e'k'r'o'w''b'''' '''''''''''''''''''I have no ide''''''''''''''''''''''''''''''''''''.'t'[''s'e'b' 'e'h't' 'e'b' 'o't' 't'''https://github.com/josephg/diamond-j')'s'(']''u'o' 'd'e'k'r'o'w' '''''''''''t's'e'b' 'e'h't' 's't'a'h't' 'y'h'w' '''a''. ' ' '''''''''''''''''.'t's'e't's'a'f' 'e'h't' 'n'a'r'''''''''''''''' 'e'b' 'o't' 'd'e'n'e'p'p'a'h'''''''''' 'd'e'm'e'e's'''''' 't's'u'''j'n'e'h'w''''' 'r'o'f' 't'c'e'p''Y'''x'e' 'e'w' 't'a'h'w' ''o't''''s'''''''''''''''''''''''''''''''''''''''''''' '.'k'c'e''''''''''''t'p'i'r''''d'''c's'a'v'a''''''''''''''''''t'''s'u'r' 'n'i' 'y'l't'c'e'r'i'd''j'''''''''''''''''''''e'h't' '''n'u'r' 'd'n'a' 't'a'h't'https://github.com/j''''e'w' ','oseph'''l'l'a''''e'h't'g/diamond-types/blob/42a8bc8fb4d44671147ccaf341eee18d77b2d532/benches/yjs.rs'' 'l'l'a' '''n'e'l't't'o'b' 'a' 'w'o'n' 's'i' 'M'S'A'W' 'd'n'a' 't'p'i'r'c's'a'v'a'J''I'''''Rust gives us total control over the memory layout, so we can pack everything in tightly. Unlike in the diagram, each leaf node in my b-tree stores a block of 32 entries, packed in a fixed size array in memory. Inserting with a structure like this results in a little bit of memcpy-ing, but a little bit of memcpy is fine. Memcpy is always faster than I think it will be - CPUs'''''''''''''''''''''''''''' '''''' ' ' ' ' ')'s'j'e'd'o'n''''''''''''''''')'e'''''''v'i't'a'n'(' 'd'n'o'm'a'i'D' 'a'i'v' 'm's'''''''m's'a'w'(' 'd'n'o'm'a'i'D' can copy several bytes per clock cycle. Its not the epic hunt of a main memory lookup'''''('n'n'''.''6'5''''''''n'''i' ''c'r'u''''''''''' 'h'c'i'h'w' '-' ''o's' 'p'e'e'D' ':'g'''''''''''''''''''''''''''e'r''''t's'a'f''u't'''''''''''''''e'r'a'w'd'r'a'h''''''''''.'r'e't'u'p'm'o'c' 'y'm' 'n'o' '''''''''''''''''''''''''''''''''' 's't'a'h't' 'y'h'w' 'a'e'd'i' 'o'n' 'e'v'a'h' 'I' '''c'u')''r'''''''''''''''''''' 'w'o'n'k' 't'''n'o'd' 'I' ''t's' 'a't'a'd' 'e'h't' 'g'''''''''''' 'n'i' 's't'l'u's'e'r'n'i'g'''''4'9'3'1'n'a'h'C''''x'i'F''''F'''''''' 'r'e't''''''''''''''''''.'I''''y''''''''''''' 'y'l't'n'e't's'i's'n'o'c''t'i'p' 'a' ''('t'a'h'w'')' ''''''''''''''''''''''''''''''''''''''''''''''''''':'''':'''''''''''''''''s't'e'L' '.'*'x'x'''x'x''''nWell, a nearly'''''''''''''''''''''''''''n'a'h't''''''''''n'o'i't'u'c'e'x'e' '''''' 'r'e'w'o'l's' 'x'4''','r'e'b'm'e'm'e'r''' ''''''''''''''*'''''t''''''''''''''''''''''''''*''''''''''' 'd'n'A' flat'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m'o'r'f''''''a'''i'v''' 'd'e't'a''''''''h'g'u'o'''r'h't'''''''a'e'r'e'n'e'g''''j' ''''''''''''''''M'S'A'W' 's'i' 'y'''''''''''''''t'i' 'n''y'l''u'r' 'I' 'n'e'h'w' 'h'W'n'n'''s''''''''' 'r'''''''''''''''''''''''''''''''''''e'v'i't'a'n' 'n'a'h't' 'r'e'w'o'l's' 'h'c'u'm' 'o's' 's'i' 'm's'a'w''''''''''''''''''g'i'b' 'o's' 's'i' 'p'a'g' 'e'h't' ''''''''''''''t'a'h't' 'y'l'l'a'e'r' 'e'd'n'o'w' 'I''i''''''''''''' 'o't' '''w'o'h' 'w'o'n'k' 't'r'a'h'c' 's'i'h''''''''''''s'''M'S'A'W' 's'e'o'd''''''''''''''''l'l'a'e'r''''''''''''''''''''''''?'h'c'u'm' 't'a'h't' 'n'w'o'd' 't'i' 'w'o'l's' '' ''T'''''''''''''''''''''''r'a'h'c' 's'i'h't' 's's'e'n'r'i'a'f' 'r'o'F''''''''''''''''''''''' 'n'u'r' 's'i' 'k'r'a'm'h'c'n'e'b' ''''''''''s'e'd'u'l'c'n'i'''s'i' 's'i'h'T'''''''''''''' '.'n'o'i's'r'e'v' 'w'o'l's' 'e'h't' ''''''''''''' 't'p'i'r'c'''''''''''''''''''''''a'i'v''' 't's'u'r' 'o't'n'i' 'g'n'i'l'l'a'c'''''''d'e'l'l'a'c' ',''s'a'v'a'j''s'w'o'h's''' '''t'r'a'h'c' line. I wonder'''''''''''''''''''''''''''''''''?''T''''''''''''''' ''''''''' ''''''s'i' 's'i'h't',' 'r'e'b'm'e'''m'e'r' 'd'n''''''s'j'''e'd'o'n''A'.'.''''?'t''''o'S' 'u'o'b'a' 's'i' 's'*''s'*''e'n'y'r''f'I''e't't'i'j''''k' 't'a'h't' 't's'''''''r'e'h't'o'n'a'''a'h'w' if the jitteryness is deletes are marginally faster than ''inserts'(' or somet')'hing?'n'''''''''''''''''h'c'u'm' 't'a'h't' '''''''''''''y'r'o'm'e'm' '''' 'a'''''''''''''''''''''''' 'I' ','h'E'''''''''''''''''''''''e'h't''''''''''''''''''''''g'''''n'''''i'''''w'''''o'''''h's' 's'i''''''s'w'o'''''''''''''''''?'g'n'i'h't'e'''m'o'''s' '''r'o''' ':''''''h'''s' '''''s'''s'e'''n' '''f'i''' 'r'e'd'n'o'w' 'I'''''''''''''''''''''''''''''''''''''''''t'i'b'''''''''''''''''''''''''''''''''''''''''''' 'y'l'''''l'a'n'i'g'''r'a'''''m'''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a't'''a'd' 'g'n'i'''m'i't''' 'e'h't''' 'f'o''' 't'u'''o' 'p'o'''p' ''''.'''''''''''''''''a'''g'''a' 'o'''i'''t'a'r''' 'e't'''e'l'e'd' '/''' 't'''r'e's'n'i' '''e'h'''t' 'g'n'i'e'e'''s''' 'e'r'''e'w' '''''o'''s' ',''''y'l't'''''''h'g'i'l's''''''''''''''''''''''''''''''4'''''~'''''''''''''n'i'a'''g'''a''''''''''.'g'n'i'''h'''t'e'm'o's' '''r'o' '''s'''t'r'e's'n'i''''' 'n'a'h't''' 'r'e't's'a'f''''' 'e'r'a''' 's'e't'e'l''''''''''''''''''''' 'e'r'u't'c'''u'''r't'''s' ''''''''''' ''' ' ''' ' ' ' ' ' ' '''''''''''e'g'''a'r'o't's' 'a't'a'D''''e'd' '''e'b'y'a'M''''''''''' ' ' ' '''''''''''''''''|' 'e'g'a'u'g'''n'a'L'''''''''''''g'n'a'L' ''''''''''''''b'a'b'o'r'p' 's'''t'I' '.'''''''''''''''|' '-'-'-'-'-'-'-'-' '''''''''''''s' 'e'h't' 'h'g'u'o'h't' '-' ''''.''' '''''a'''''''''''''|' ' ' ' ' ' ' 'S'J' '' ''+''' ''v''ia JS''''''m's'a'w'+''s't'i' 'y'h'w''''''''''''''''''''''''''''' 's'i' 's's'e' JS |''n'y'r'e't't'i'j' 'e'h't' 't'a'h'w' 'a'e'd'i' 'o'n' 'e'v'a'h' 'I' '.'e'n'i'l' ' JS |''t'a'l'f' 'y'l'r'a'e'n' ','l'l'e'W'n'n'''''''''''''''''''''''''':'e'n'i'l' 't'' JS |'a'l'f' 't'a'h't' 'n'i' 'k's'a'b' 'd'n'a''''''e'''''e'l'f'*''''(' 's'j'y' 'o't''''''''''' 'a'i'v''''''''''a'v'i' ''''''' '+''''''S'J'+''''''''''''''''''M'S'A'W'''''''''''''m's'a'w'/'t's'u'R' JS ''' JS ''''''''''s'e'k'o'r't's'y'e'k' '' |'|' 't'x'''''''#''t's'u'R'e'n' 't'i' 'e'e's' 'y'l'e'r'a'b' 'n'' 'a'c' 'u'o'y' 't'''''''''t's'u'R's'' JS |'a'f' 'o's' 's't'i' ','h'O'''''''''''''''''''''' ''' ''' ''''''''''''t's'u'R'''''')'''e' 'v'''i' JS |''''t'''a' 'n'''(''' '''d')'n'''o'''m'''a's'i''''''j'''''''e'''d'''D''o'''n''' '''a'''i'' JS |'''v''' '''m'''s' 't'''s'u'''j'm'''s'''''''d'n'o'm'a'i'' doc'''D''''a'' 'a'''w'd'(''' 'n'd'''n'a'o'''m' 'a'''i'e'r'e'h't' 't'i'b' 'a' 'n'i' 'm'D''o'o'z' 's't'e'l' ','m'H'n''n's''''''''''''''''''''''e'k'i'''''''''s'e'o'g'''''''''''''''''''i''' 'r'''e'''''''''''.'''''''''''''''''''''d'n'o'm'a'i'd'''''''['''''''d''''''''''t's'u'r' 'o't'e't'r'd'''n'o'o'''m'''a'''i''s't'e''r''d'e''g''''''p' 'k'r'a''r'e''m'h'c'n'e'b' 'e'm'a's'there'''''''''''''''''''''' 'k'''r'''''6'9''''''0'.'0'''a'''''m'h'c'n'e'b' 'e'h'T'''''''''''' 'd'n'a' 't'p'''e'h't''i'r'c's'a'v'a'''''''''''''t's'u'r' 'h'g'u'o'r'h't' ''j't's'a'f' 'n'e'v'e' 's't'e'g' 't'I''I''''''''''''''''''''''''''''s'i'h'''''''''''''''''''y'l'e'v'i't'a'n' 'g'n'i'n'n'u'R'''''''''t' 'e'k'i'L' '.'''t' '['''''''''''''''''y'l'''h't'''' ''n'u'r' 'd'n'a' ''''''''''''''''''''''''''''' 'd'n'a' 'm's'a'w' 'p'i'k's' 'e'w' 'f'i' 'r'e't's'a'f' 'n'e'v'e' 's't'e'g' 't'I''l' ''s'e''''''''''''''''f'o' 't'i'b' 'e'l't't'i'l' 'a'r'u't'c'u'r't's' 'a' ''https://github.com/josephg/diamond-types/blob/yjs-style/benches/yjs.rs'h't'i'w' like t''T'f' ''''''''''''y'a'r'r'a' 'n'a' 'n'i' ''''''''''''''''''''''''''s'e'r'u't'c'u'r't's' 'a't'''a'd' 'g'n'i'g'n'a'h'C''''F'''n'n'i'n'''r'a''''''w''' 'd'n'A'W' parent + 1; i < doc.content.length; i++) {n ' || (oparent === parentn ''''''''''' 'y'l'b'a'n'o's'a'e'r''' && (newItem.seq === o.seq)'' || '6'('5'opa''rent'' === parent && (newItem.seq === o.seq)n && id[0] < o.id[0])'' || (oparent === parent && (newItem.seq === o.seq) && id[0] < o.id[0])'' '''1'.'1''' '' ''|| (oparent === parent && (newItem.seq === o.seq)'' || (oparent === parentn && (newItem.seq === o.seq)'' || (oparent === parent && (newItem.seq === o.seq)n && id[0] < o.id[0])'' || (oparent === parent && (newItem.seq === o.seq) && id[0]'' < o.id[0])'' || (oparent === parent && (newItem.seq === o.seq)''''''n'-'-'-'n' ''let '''3'9'1'''o = d'''''' 'r'e'd'n'u'oc.content[i]n let oparent '''''''''''''''''''''''''!'')'g'n'i'm'o'c'n'i' 'c'i'g'a'm' 'k'c'a'l'B''''''''''''''''' 's' 'i's'i'h'T'(' '= findItem(doc, o.originLeft)nn // Should we insert here?n if (oparent < parentn || (oparent === parentn && (newItem.seq === o.seq)n && id[0] < o.id[0])n ) breakn }nn // We've found the position. Insert at position *i*.n doc.content.splice(i, 0, new''Item)n doc.max''6'5'Seq = Math.max(doc'''''r''''0'0'0'5''''1''e'v'':'''o' '.maxSeq, newItem.seq)n}''''''''`''''''''''''''''''''''''''''''''''''''''''''''''''''''''T''' '.'0'0'0','''''''0' '0'0'2' 'd''''''''''''''''''r'e'h't'o' 'h'c'a'e' 'r'o'r'r'i'm'n'u'o'r'a' 's'''''e'''''.''''n'i'l''''''''''''''''e'r'e'h't' 'n'o' 'g'n'i'o'g' 's'' 'o'w't' 'm'o't't'o'b' 'e'h't' 't'a' 'k'o'o'l'''' '''''''''n'''nnThat, my friends, is how you make the computer do a lot le'n'ss wo''''#'#'rk.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!''''''''''?'!' 's'i' ''''''' 's't'a'h't' 't'a'h'w' 'r'e'd'n'o'w' 'I' '.'a's'r'e'v' 'e'c'i'v' 'd'n'A' '.'r'e't's'a'f' 's't'e'g' 'm's'a'w'-'t's'u'r' ','w'o'l's' 's'i' 's'j'y' 'n'e'h'w' 's'd'o'i'r'e'P' '''''''''''.'p'u' 'e'n'i'l' 'f'o' 'd'n'i'k' 'm's'a'w'-'t's'u'r' 'd'n'a' 's'j'y' 'f'o' 's's'e'n'y'''''''y'n'r'e't't'i'j' 'e'h't' '-' 'h'u'H'''''''''l'o'o'c' 's't'I' '>''''I'n''n'`'''''l''' 't'u'B''`'n'n'n'6''''5''''t'p'i'r'c's'a'O''v'a'j'`'`'`'n'''''''''a't'a'd' 'e'h't' '''n'n''''''''''''''''''':'s'i'h't' 'e'k'i'l' 's'k'o'o'l' 'e'g'r'e'm'o't'u'a' ','d'e't'c'a'p'm'o'C'''''p'm'o'C''''''m'o't'u'A'''''''''' 's'k'o'o'l' 't'I'''''''''' 'e'r'''o'y' 'f'I' ''' 'y'n'a' 'e'k'a'm' 't'''n's'e'o'd' 'd'n'e'k'c'a'b' 's'r'-'e'g'r'e'm'o't'u'a'''''''''''''''''''''''''' 'd'e'w'''a'l'f' ','l'u'f'i't'u'a''''''s''''s'k'o'o'm' ''e'b'''k'c'a'b' 't's'u'r' 'e'h't'''''' 's'i'h't' 'o't' 'g'n'i'h'c't'''''''t'c'i'w'S''''W''O''y'd'a'e'r'''''''''''''''''''''''''''''Plain string e''9''''0''''2'1'''d''its in JS'''''''' ' ' ' ' ' ' ' ''''''''''''''s'a' 'e'm'a's' 'e'h't' 't'''''''''''''''''''''''''')'g'v's'.'s'r'm'a'_'s'v'_'m'a'('''1'.'1'''''']'''['!''''@'''''''#'n'n':'''s'o'm'l'a'''''''''''e'h't' 'y'l'r'a'e'n' 's'm'r'o'f'r'e'p'''' 's'i' 'e'd'o'c' 'e'h't'' 's't'i' 'e'r'o'f'e'b' '''''''''''''s't'e'g' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'.'e'm'i't' 'r'e'v'o' 'e's'r'o'w' 'y'l'l'a'u''''u'd'a'r'g' 'g'n'i't't'e'g'''''''''''''''''''''o'w' 'g'n'i't't'e'g' 'y'l'l'a'u'd'a'r'g'''''''' 'y'l'w''''''''''s's'e'u'g' 'I''''''''''''#'#'''''''''f'o' 't'u'o' 's'e'm'o'c' ' ''o'l'![rust implementatio''''n in wasm vs Yjs](rust_perf6.svg'n')n''s' 's'i' 'e'c'n'a'm'r'o'f'r'e'p' 'y'l'r'a''7'''e'l'C' '.'''''''' 't'u'b' '-' 't'i'b' 'a' 't'u'o' 'g'n'i'h't'y'r'e'v'e'''''''''''''''' 't'u'o' 'n'g'i'h't'y'r'e'v'e'''' '''' ' 'e''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o' 's't'n'e'm'm'o'C''''''''''''' 'f'o' 's't'o'L''F''Read'''s'i' ' f''F'''''''''''''''''n'o' 'k'c'a'b'd'e'e'f' 'd'a'e'R'''''''''' 's't'o'l' 'd'n'A''''S''''''
''''''[2021 Seph Gentle](https://josephg.com/)''''''[https:'n'//github.co'n
'm/j'n'osephg/](https://github.com/josephg/)'''n'''n[2021 Seph Gentle](https://joseph''g.com/)'''''n''l'a' 'e'e'S''''W''n'n'n'n'n'n'''Discuss o''O''''''''s''''''''n[https://github.com/josephg/](https://github.com/josephg/)'''''n''''n'o''''''''''''s'w'e''n'N''' '''r'''e'''k'''c'''a'''H'i''''''''''https://news.ycombinator.com/item?id=2801720')'4'(']'N'H' 'n'o' 's's'u'c's'i'D'['n''''''''''''''s'''''''m''''''''''''''t'u'o' 'd'e'p'l'e'h' 'r'o'f'n'a'r'T' 'l'a'n'o'i't'a'r'e'p'O' 'n'o' 'g'n'i'''''''''o'S''''''''n'i' 'k'r'o'w''''''''O' 'g'n'i's'u' 't'p'e'k' 'd'n'a' 'l'l'a' 'm'e'h't' 't'a' 'e's'o'n' 'y'm' 'd'e'b'm'u'h't' 't's'u'j' ''d'n'A'g'a'r'e'v'a''''''''''''''''''' ''['g'''https://github.com/yjs/yj')'s'(']''n'''''d'i'l'o's''''o''i'h't'y'r'e'v'e' 'h't'o'o'm's' 'e'w' 'n'e'h'w' 'd'a'e'r' 'o't' 'r'e'i's'a'e' 't'i'b' 'a' 's'i' 't'r'a'h'c' 'e'h'T'n''n'' 'n''''''h'c'a'e' ''''''n'''''e'''''k'a't' s''''''''''d''n'i'Y'''''''Y''e'g'a'r'e'v'a''''''''''''''''''''''''''''''''''''''''s'n'o'i't'a'r'e'p'o' '0'0'0'1' 'f'o' 's'p'u''''''''''''''''''''' That big spike? A group of 1000 edits took over'''''''''''''''''''''''''.'f'o'O' ''n'.'s's'e'c'o'r'p' 'o't' 's'd'n'o'''''''''''''''''''''''''''''''''''''''''''''' 'd'e'd''''''''''''''''''''''''''''''''''''''''''''''' 't's'a'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''m''''''''''''''''''''''''''''''''''''''''''.'e'r'o'f'e'b' 't'a'h't' 'd'e'c'i't'o'n'''''''''''''''''''''''e'k'a'm' 'o't' 'w'o'h' 't'u'o' 'd'''''''u'o'e'''''''''.'h's'w'a'G' ''r'u'g'i'f'' 'e'n'o'y'n'a' 'k'n'i'h't' 't'''n'o'd' 'I'''''''''''''''''''d'e'c'i't'o'n' 's'a'h' 'y'd'o'b'o'N'h't'i'r'o'g'l'a' 'T'D'R'C'''''''''''''''''''t'''n'o'd' 'I' '.'m'h't'i'r'o'g'l'a' 'y'''' ''''g'n'a' 'o't' 'd'e't'p'a'd'a' 'e'b' ''''#'n'a'c' 'n'o'i't'a't'n'e's'e'r'p'e'r' 't's'i'l' 's'''n'i'v'e'K' 'g'n'i'w'o'h's' 'd'n'A' '.'g'n'i'x'e'd'n'i' 'r'e'v'e'l'c' ''''''''''''''''l'l'a' ''''-'y'l''''-'e'r'a'r' 'd'n'a''''''''''''' 'a' 'e'd's'i'g'n'o'l'a' ''''''o'c'n'e' 'h't'g'n'e'l'-'n'u'r''''' ''''''-'E'L'R' ''''''''''''''''''''''u'p' 'd'n'a' 's'e'e'r't'-'b' 'g'n'i's'u' 's'i' 'n'o'i't'u'b'i'r't'n'o'c' 'y'M' '''''''U' 'c'e's' ' 3.5'n'n'''''''''''''''''''''''''''''''''''''''5'.'3' 'r'e'v'o''''3' 'k'o'o't' 's't'i'd'e' '0'0'0'1' 'f'o' 'p'u'o'r'g' 'A' '?'e'k'i'p's' 'g'i'b' 't'a'h'T' ''''o'r'g' 'o't'n'i' 'd'e''''''''''''' 't's'e't' 'e'h't' 's'a'''t'e'k'c'u'b' ','''['''''https://github.com/yjs/yj')'s'(']''''' ','pent processi''''''''''' 'e'c'r'u'o's'n'e'p'o'ng each chu'''''''''I'''''''''''''t'u'o'h'g'''''''''''''''''''''s'w'o''*'h's' ''''''' 'e'm'i't' '*''s'i'x'a' 'Y''''y'''''''''''''''''''e'g'a'r'e'v'a' 'w'o'h's''''s'j'Y' 's'e'm'i't' 'e'h'T'(''''T' 'u'o'r'h't'nk of 1000 operations''' during the test. I think those spikes are V8's garbage collector trying to free up memory. The spikes ge''t both slower and more frequen''''''''''''''''.'s'w'o'r'g' 't'n'e'm'u'c'o'd' 't as the'''''''''''''''g'v's'.'1'f'r'e'p'_'m'a' '>'''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i's's'e'c'o'r'p' 't'n'e'p's''''''g'n'i'r'u'd'''''''''''''''''''''''''''''' 's'''8''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'h't' 's'a' 't'n'e'u'q'e'r'f' 'e'r'o'm' 'd'n'a' 'r'e'w'o'l's' 'h't'o'b' 't'e'g' 's'e'k'i'p's' 'e'h'T' '.'y'r'o'm'e'm' 'p'u' 'e'e'r'f' 'o't' ''s'g'j''n'i'Y''y'r't' 'r'o't'c'e'l'l'o'c'V''''''''''''' 'e'g'a'b'r'a'g' 'e'h't' 'e'r'a''''h' 's'e'k'i'p's' 'e's'o'h't' 'k'n'i'h't' 'I'''''''''''''''''''''''''''''' '.'e'r'e'h' 'n'o' 'g'n'i'o'g' 't'o'l' 'a' 's'''e'r''''e'h'T'''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'t's'e't' 'e'h't' 'g'n'i'n'n'u'r' 'e'l'i'h'w' 's'n'o'i't'a'r'e'p'o' '0'0'0''''0'1' 'f'o' 'k'n'u'h'c' 'h'c'a'e' 'r'o'f''''d' 'n'e'k'a't' 'e'm'i't' 'e'h't'''''''''''''''''n'i' 'h'c'a'e' 'g'n'o'l' 'w'o'h' 'g'n'i'w'o'h's'''''''''''''''''''''''''''' 'e'c'n'a'm'r'o'f'r'e'p' 's''''''''0.00.51.0<''''': [..]'''t''e''x''t'' ''fill='currentColor' x='''-'''''''''''''''''''e'h't' ','w'o'n' 'r'o'F'''''''''''s'e'd'u'l'c'n'i'''''''''a''' 't'u'B's'a'h''''''''''''''''''''''''''w'o'''''''s'k'r'o'w' 'h' 's'e'h'c't'a'm' 'y''a'l''''Being faster *and'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'')'w'o'n' 't'h'g'i'r' 'e's'o'h't' 'r'o'f''''''''e'k'a'm' 'o't'''''''''''''''''e's'o'h't' 'f'o' 'y'n'a' 'r'o'f' 'h'g'u'o'n'e' 'p'r'a'h's' 't'o'n' 'm'''I' 't'u'b' ','t'e'y' 'd'e'h's'i'l'o'p' 'g'n'i'e'b' 't'o'n' 'd'n'o'm'a'i'd' 't'u'o'b'a' 'e'r'e'h' 's'n'u'p' 'f'o' 'y't'n'e'l'p' 's'''e'r'e'h'T''''E'('''''''I'(' '''''''' 's't'I' '''''''.'h'E' ''l'i'f'o'r'p' 'e'c'n'a'm'r'o'f'r'e'p'''''''e'm' 't'n'e'r'e'f'f'i'd' 'y'l't'h'g'i'l's'''''''''''''g's'i'l' 'a' 'e'v'a'h''''''''''h'c't'a'm' 't'o'n'''''''''m' 't'o'n''''''''''t'n'e'r'e'f'f'i'd' 'e'b' 't'h'g'i'm' '''''''''''''''''''''''indicative'''''''''''''''''' ''''''''''''0'.'1' 'd'n'o'm'a'i'd' 'f'o' 'e'v'i't'i'c'i'd'n'i' 'e'b' 't'o'n' 't'h'g'i'm' 's'k'r'a'm'h'c'n'e'b' 'e's'e'h't'* simple''r'', which moves the [Pareto efficiency frontier](https://en.''''''''''''''''e'Y''''k'''''''''d'a'e't's''''''''''a'e't'n'i' 'i'l'''''''''''''''''s'j'''''''s'h'y' 'o't' 'y'l'r'''''''''''''''''y'l't'n'e'r'e'f'f'i'd' 'k'r'o'w'a'l'i'm'i's' 's'k'r'o'w' 'h'c'i'h'w''''''''''''''t'e'y' 'd'n'o'm'a''''m'i'd'''wikipedia.org/wiki/Pa'n''''''''''''''''''''''''''''''''''''''''''''''''o'p'e'r' 's'i'h't' 'm'o'r'f' 'e'm'o''''''''r'a'l'i'm'i's'c' 's'k'r'a'm'h'c'n'e'b''''''''''''r'o'f' 't'p'e'c'x'e''P''''O''''''''''''''''''''''r'e'p' 'd'n'A''''''''''''''''''''''''''''' '.'s'n'o'i't'a'r'e'p'o' 'e't'e'l'e'd''''d' 'o'l'u'd'o'm' '''''''' 'd'n'a'''''''''''''d' 'n'a' ','''''''''''''''''''''''''''''y'l'e't'a'm'i'x'o'r''''x'p'p'a' 'y'l'b'''''''''''''''''''''''''''.'g'n'o'r'w' 'm'''I' 'e'.'I'''''b'y'a'm' 'r'O' '' '.'e'b'y'a'M'a'b'o'r'p' 'l'l'i'w''''' 's'''d'n'o'm'a'i'D''''''''''''''''''''''''''''''''''''''''''''''''''''m'o'r'f' 'd'e't'a'r'e'n'e'g' 'e'r'e'w' 's'''t'l'u's'e'r' 'g'n'i'k'r'a'm'h'c'n'e'b' 'd'n'o'm'a'i'd' 'y'M''For my rust implementation results come f''r''om benchmarking''n'.' [''jos'n'ephg/diamond-types, at this version](https://github.com/josephg/diamond-types/tree/42a8bc8fb4d44671147ccaf341eee18d77b2d532). '#'Benchmark by running ` RUSTFLAG''''S='-C target-cpu=native' cargo criterion yjs`. The inline rope structure'' '''''''''''''''''''''''''''''''''''' ''''s'''''''t'c'e'j'o'r'p''i'h't''g'n'i's'u' 'm's'a'w' 'o't''''''' '&' 'd'e'l'i'p'm'o'c''''''''d'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''t'i'g' 'm'o'r'f' 's'e'p'y't'-'d'n'''''''d'n'o'm'a'i'd''o'm'a'i'd' 'f'o' 'y'p'o'c' 'l'a'c'o'l' 'a' 'o't' 't'n'''''''d'n'o'm'a'i'd''i'o'p' 'o't' 'd'e'd'o'c'd'r'a'h'''''''''''''''''nDiamond's benchmarks com'''''''r'e'p'p'a'r'w'e from [josephg/diamond-types, at this version](https://github.com/'''''''''''''''''''''''''''''''''''''''''''''o't' 's'k'n'a'h't' 't's'u'j' 't'''n's'i''''''i' 'e'c'n'a'm'r'o'f'r'e'p' 's'''d'n'o'm'a'i'd''''r' 'josephg/diamond-types/tree/42a8bc8fb4d44671147ccaf341eee18d77b2d532)''''''''''''''''''''''''''' 'o's'l'a'''''''''''''''''''''''''.'t'p'o'-'m's'a'w''''b''''s'a'w' 'h't'i'w' 'd'e'z'i'm'i't'p'o' 's'i' 'e'l'd'n'u'b' 'm's'a'w' '''''''''h'c'n'e'b' 'e'h'T' '. Benchmark by runnin''g ` RUSTFLAGS='-C target-cpu=native' cargo criterion yjs`. The inline rope structure updates can be enabled or disabled by editing [the constant at the top of src/list/doc.rs](https://github.com/josephg/diamond-types/blob/42a8bc8fb4d44671147ccaf341eee18d77b2d532/src/list/doc.rs#L15). You can look at memory statistics by running `cargo run --release --features memusage --example stats`.'e'e'n''b' 'e'v'''I' 'h'g'u'o'h't''''o' ',''p'p'a'r'w'''''''''d'e'l'i'p'm'o'c' 's'i' 'd'n'o'm'a'i'D''''''''''''''''''''https://github.com/josephg/diamond-js/tree/6e8a95670b651c0aaa7701a1a763778d3a486b0''''''nDiamond is compiled to wasm using [this project](https://github.com/josephg/diamond-js/tree/6e8a95670b651c0aaa7701a1a763778d3a486b0c), hardcoded to point to a local copy of diamond'''''''d'n'o'm'a'i'd'-types from git.'''''n''''''''''''''''''''r'e'p'p'a'r'w' 'm's'a'w'''''''''''''''''''''''''''''''''''' 'm''''''''''g'n''#'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''n'''''''t''' ','l'l'e'W''T''-'-'-'n''r'o'f' 'k's'a' 'e'l'p'o'e'p' 'g'n'''''''''''''''''''''d'r'o'c'e'r''''''''''''''''''''''''''''''''''''''a' 'n''''''''''''''''''''n'''''''''''''''''''''''''''''t's'o'p''''''''''''''''''''e'h't' 'f'o' 't'r'a'p' 's'i'''''''''''''''''''''''''''''''''''''''''''''''''https://invisib''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''W''' '.'h'c'.''T''u'o't' 'n'i' 't'e'g'''''''g' ''w''' ','s'd'r'a'w'o't' 'e't'u'b''n'n''''i'r't'n'o'c' 'o't' 't'n'a'w' 'u'o'y' 'k'r'o'w' 'f'o' 't'r'o's' 'e'h't' 's'i' 's'i'h't'''''''d'n'o'm'a'i'D'''''''''''''''s'd'n'a't's''''''''''''''''''n''''''''''''''''''''''''.'s't'n'a'i'g'''''''h'c' 'f'o' 's'r'e'd'l'u'o'h's' 'e'h't' 'n'o' 'g'n'i'd'n'a't's' 's'i'''''''''''''''''e's'u'a'c'e'b' 't'a'e'r'g''''i''''g' 's'i' 'T'D'R'C' 'y'M'' 'f'I'''''''''''''g'n'i'r'i'h' 'e'r'''e'W' 'le.college''''''''''t''' 'e'g'u'H''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'o't'''''''''''''' 'n'n'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'k'r'o'w''''''''''''n'd'l'u'o'w' 's'i'h'T''''''''' 'd'n'o'm'a'i'D' '.'s'j'Y' 'd'n'a' 'e'g'r'e'm'o't'u'A' 'n'o' 'k'r'o'w' 'r'i'e'h't' 'r'o'f' 's'n'h'a'J' ''m'p'p'e'l'K''''L' ' 's'k'n'a'h't''''''''''' 'o't' 's'n'k'a'h't' 'l'a'i'c'e'p's'''''''''''''''''''''''''' 'r'o'f' 'n'i'v'e'K' 'd'n'a' 'n'i't'r'a'M''''''i't'r'a'P' 'd'n'A' '.'''''''''''''''''''.'e'v'i'l' 't'n'e'w' 't's'o'p' 's'i'h''''i'''''''s'h't' 'e'r'o'f'e'b' 'k'c'a'b'd'e'e'f' 'e'v'a'g' 'o'h'w' 'e'n'o'y'r'e'v'e' 'o't' 'u'o'y'k'n'a'h'T'n'n'.')'/'(']'e'g'e'l'l'o'C' 'e'l'b'i's'i'v'n'I'[' 'e'h't' 'y'b' 'd'e'd'n'u'f' 'd'n'a' ''''''''''f' ',''''''''''''''''n'f'u' ','''''''''''''''''''''''''''' 'B'''''''''''t'c'e'j'o'r'p' ''e'h't''''''''''https://braid.org')'/''''''':'s'p't't'h''''b'(']'d'i'a'r'b'[' 'f'o' 't'r'a'p' 's'a''''''''''' 'o't' 's'k'n'a'h't' 'e'l'b'i's's'o'p' 'e'd'a'm' 's'a'w' 'k'r'o'w' 's'i'h'T''''''''''''''''''''''''''''' 'e'v'a'g' 'o'h'w' 'e'n'o'y'r'e'v'e' 'o't'''''''o'f' 's'k'n'a'h''''a'T'n''n''s't'n'e'm'e'g'd'e'l'w'o'n'k'c'A' '#'n'''''''''n'e'e'b''''''''''t'''o'n' 'r'o' ' 's'a'h' 'm'e't'i'''''''i't' 'h'c'a'e' 'r'e'h't'e'h'w'i' ''''s'a'h' ''m'e't'i' 'h'c'a'''''' ','a'k'A'e' '*'n'e'h'w'*''''''''''''''''''''''''''''''''''''''''''''''''''s'e'l'b'u'o'd''''''''''''''''''''''''''''''''''''''.')'T'D'R'C' 'd'e's'a'b'-'n'o'i't'a'''''' 'a' 's'a'h''''''''''''''''''''''''''''''''''''''''''''''''' '1'2'0'2''''''''Seph Gentle''''''''''''n'[https://josephg.com/](https://josephg.com/)'n'n'''htt''''''''''m''''''''/''https://github.com/josephg/'g'h'p'e's'o'j''o'c'.'b'u'h't'i''''t'g'ps://josephg.com/'e'l't'n'e'G' 'h'p'e'S'n''''''' ''''h'p'e'S''y'B''''''''''i'r'W'''''>'r'e't'o'o'f'<'n''''[''''''''''''''''''''''''''''>'r'e't'o'o''''i'f'/'<'n'''''''''''''''''')'/'m'o'c'.'g'h'p'e's'o'j'/'/':'s'p't't'h'(']'''''''n'n'e'l't'n'e'G' 'h'p'e's'o'J'n'n'-'-'-'n'n''''''''''''''''''''e'z'i's' 'e'g'a'r'o't's' 'k's'i'd'-'n'o' 'd'n'a' 'e''A''''g'n'i'g'a's'u' 'y'r'o'm'e'm'''''''''''''''''''''''''' ','s'e't''''''''''t'n'e'm'e'l'p'm'i'e'l'e'd' 'l'a'r''''''r'e'h'''''''f'f'u't's' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'a''''''''''''' 't'n'e'r'r'e' '''''''''''''''''''''''''''''e'h't' '?'d'e'd'r'o'c'e'r' 'e'k'o'r't's'*''y'e''*'k' 'y'r'e'v'e' 'e'v'a'h' 'o't' 'd'r'i'e'w' 't'i' 's'I' '')'?'t'n'a'w' 'e'l'p'o'e'p' 't'a'h'w' 's't'a'h't'''''''' 'e'l'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'i'h't' ''''t''''''''''''''''''''''''''''''''''.'s'u'o'v'r'e'n' 'e'm' 's'e'k''''''''''''''''''''''''''''''''''''''''''''''''''''''''']'''of diamond-types' ''''https://github.com/josephg/diamond-types/tree/yjs-s'''''''''''''t' 'e'''''''''' 'n'e'e'''''''''''''''''''r'o'f''r'e'' 's'e'k'a'm' 's'''''''t'''''''''l'a'n'i'f' 'u'b' ',''''i'''''''''''''''''''''''''''''''''''''''''''''''''''.'h'E' '''''''''.'V'M'M'Y' '.'e'v'o'b'a' 'd'e't's'e'g'g'u's' 'e'v'''I' 'n'a'h't' 'r'e'g'g'i'b' 'e'l't't'i'l' 'a' 'e'b''h'T' '''.'''b' 's'a'h'r'e'h'w' ','tyl''')'''e'(']'e'l'y't's'-'s'j'y'[' 'e'h't''''a''' 'e's'u' 't'''''''''''''''''' 's'e'p'y't'-'d'n'o'm'a'i'd' 'f'o's'o'p' 'g'o'l'b' 's'i'h't' 'n'i' 's'k'r'a'm'h'c'n'e'b' 'l'l'A'''''''''''''''''''''''''e't't'i'r'w' 's'i' 't's'o'p' 'g''''s'o'l'b' 's'i'h'T'a'm''''''s'e'v'i'g' 'l'l'i't's' 't'i'''''''''''''e'k'i'l' 't'''n'o'd' 'I' 't'u'b''''''''''''' 't'b'u' ','e'c'i't'c'a'r'p' 'n'i' 'l'l'a'm's' 's'y'a'w'l'a' 's'i' 'n'o'i't'a'm'r'o'f'n'i' 's'i'h't''''''''s'e't'e'l'e'd' 't'a'h't' 'e'm' 's'e'r'u's's'a' 'n'i'v'e'K'''''''''''''''''''''''s' 'y't't'e'r'p' 'l'l'i't's' 's'i' 's'i'h'T' ''o'e'p' 'e'b'y'a'M'(' ''t'o'o'p'm'e't' 't'u'o'h't'i'W''''''''''''s'e's'a'e'r'c'n'i'''''''s'e'h's'u'p'''!'''''''''b' ' 'n'o' 't'c'a'p'm'i' 'r'e'p'o' 'n'''' 'a' 's'a' 't'o'n' ','T'D'R'C' 'e't'a't''''''''''d'd'a' 'I' 'n'e'h'W''s' 'a''''''''t'i' ','''''''''''s'e's'a'e'r'c'n'i' '4''''''' ''''''''''' 'f'o' '''''''''r'e'h't'r'u'f' 's't''''s'i'h't''o'l'''''''''''''''''''''''''''o''' 't'c'a'p'm'i' ''''''''''''''''''''''''''''h'c't'a'm' 'o't' 'e'l'b'a' 'e'b' 't'''n'o'w' 'I' '.''o's'l'a' 'l'l'i'w' 's'i'h'T''O'''''''''''''''s'e'''''''''''''''s'e's'a'e'r'c'n'i' 'o's'l'a' ''t'e'l''''''''''s'e's'a'e'r'c'n'i' ''''''e'd' 'l'a'r'''''''''''''''''''''''''''''''''''n'o'i't'a'z'i'm'i't'p'o' '''''''e'r'o'm''''''e'h't' 's' 'r'o'f' 'm'o'o'r' 's'''e''''''''''''''''''''''''g'n'i't'''''''''''''''''''''''''''''t'''''a'h't' 'e'k'i'l' 'y'c'n'a'f' 'g'n'i'h't'y'n'a' 'r'o' 'i'd'e' 'e'k'o'r't's'y'e'k'-'r'e'p' 'o'd''r'e'h'T'''''''''''''''o't' 'g'''''''''f'o' 's'n'e't' ''''t'''n'''''i'''o'g' 'm''''o'p'm'e't'''' 's'a' ''I''''T's''''''''''e's'a'e'r'c'n'i' '''o't'e't'e'l'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'l'a''''''''''''''''''''''''''''''''''''''''''''r'i'a'f' ''''''''''''''''''''''''''''''''''''''' 'f'o' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''.'m'r'o'f' 'l'a'n'i'f' 's'''d'n'o'm'a'i'd' 't'o'n' 's'i' 's'i'h'T' '''''''''''''''''''''''''''''''''''''''''''''i'f'n'o'c' 'e'b' 'd'l'u'o'h's' 't'i' 'f'i' 'd'e'd'i'c'e'd' 't''''d'''n'e'v'a'h' 'I' ''s'e'g'g'u's' 's'k'r'a'm'h'c'n'e'b' 'e's'e'h't'''''''''''''''''t'c'e'p'x'e' 'd'l'u'o'w' 'u'o'y' 'n'a'h't' ''.'r'e'g'g'i'b' 'e'l't't'i'l' 'a' 'p'u' 'd'n'e' 't'h'g'i'm' ''n'o'i's'r'e'v' 'd'e's'a'e'l'e'r' 'e'h't''''f''''''''d'n'o'm'a'i'd' 't'u'B' '.'s'j'y' 'h't'i'w'a'''''''''''''''' 'n'o's'i'r'a'p'm'o'c' 'e'h't' 'e'k'a'm' 'o't' ','d'e'l'b'a's'i'd' 'f'f'u't's' 's'i'h't' 'h't'i'w' 'i'c'e'p's'''''''h'c'n'a'r'b' 'a' 'f'o' 't'u'o' 'g'n'i'k'r'a'm'h'c'n'e'b' 'n'e'e'b' 'e'v'''I' '.''''''' ','s'e't'e'l'e'd' 'l'a'r'o'p'm'e't''''l'e'd''''''o'p'm'e't''d' 's'e'r'o'''''''''''''''''''''''''''''''''''''''''' 'k's'i''''''.'''''''''''''''''''''''''''''''''''''''''''''''' 'e'l'y't's' ''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''~'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''k'c'a'b' 'n'o'i't'a'm'r'o'f'n'i' 's'i'h't' 's'd'd'a'''''s'e'o'd' 'd'n'o'm'a'i'd' 'f'o' 'h'c'n'a'r'b' 'r'e't's'a'm' 'e'h'T'n''n'''''''''''''''''''''' 'e'r'a' 's'm'e't'i' 'e'r'o'm' 'd'n'a' ','s'''''''''B'(' ''w'o'r'g' 't'n'e'm'u'c'o'd' 'e'h't' 's'a' '''' ''.'e'm'i't' 'r'e'v'o' 'w'o'r'g' 'y''''t'e'h't' 'd'n'A' '''.'b'k'4' 'e'r'a' 's'n'o'i's'r'e'v' ','s'j'y' 'n'I' '.'s'e't'y'b' 'w'e'f' 'a''''''''''''(' 'l'l'a'm's' 'e'r'a' 's'n'o'i's'r'e'v' ','d'n'o'm'a'i'd' 'n'I' '.'d'l'e'i'f' 'n'o'i's'r'e'v' 'e'h't' 'o't'n'i' 'd'e''''''e'b' 'e'v'a'h' 's'm'e't'i' 'h'c'i'h'w' 't'u'o'b'a' 'n'o'i't'a'm'r'o'f'n'i''''''''''''s'e't'e'l'e'd' 'e'h't' 'e'd'o'c'n'e' 'h't'g'n'e'l'-'n'u'r''''''''''E'L'R''''''''''''''''''''''''' 't'u'o'b'a' 'n'o'i't'a'm'r'o'f'n'i' 'd'e'b'm'e' 'o't' 's'd'e'e'n' '''''''''' 's'''s'j'Y' '-'n''')'l'o'o'c' 's't'i' 't'u'b' ','t'a'h't' 't'n'a'w' 't'''n'o'd' 'e'l'p'o'e'p' 'e'b'y'a'M'(''''''''''''''''''''''''''''''''I' '?'t'a'h't' 't'n'a'w' 'e'l'p'o'e'p' 'o'D'(' '''' '.'s'y'a'l'p'e'r' ''''r'e'd'i'l's' 'e'm'i't' 'y't't'e'r'p' 'u'o'y' 'e'v'i'g''''''''''''''''''''''''s'n'o'i's's'e's' 'g'n'i't'i'd'e' 'y'a'l'p'e'r' ''''''''''''''''''''''''''''''''''''''''''''.'s'y'a'l'p'e'r' 'g'n'i't'i'd'e'''''l'p'e'r' 'r'e't'c'a'r'a'h'c'-'y'b'-'r'e't'c'a'r'a'h'c' 'o'd' 't'''n'a'c' 's'j'Y' 'e'z'i's' ''d'-'n'o''''''''e'g'a'r'o't's''''l'i'f' 'n'o' 't'c'a'p'm'i' 'n'a' 'e'v'a'h' 'o's'l'a' 'l'l'''t'i' 'd'n'A' ''t's' 's'j'Y''''''''''''''' 'a' 'e'r'a' 's'e't'e'l'e'D'(' '''''''''''' 'h't'i'w' 'o'd' 'o't' 'g''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a't'a'd' 's'i'h't' 'g'n'i'd'd'A'''''''''''''''''d' '''s''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'i'a''-'''''''''''''''''''''''''''''e't'e'l'e'd' 'h'c'a'e' 'n'e'h'w' 'g'n'i'r'o't'S' '-' 't'i'''''''''''''''''.'g'n'i'h't'o'n''''t' 't'o'n' 's't'i' 't'u'b' ','r'e'h't'r'u'f' 't'a'h't' 'e'z'i'm'i't'p'o' 'n'a'c' 'I' 'k'n'i'h't' 'I' 'e's'a'e'r'c'n'''i' 's'i''''''''''s'i'n''''''''''''''n'i' 'i's'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''t'e'l'e'd' 'e'r'o't's'''''''o't' 'o's'l'a' 'I' 'n'e'h'w' 'b'm'4'3'.'2' 'o't' 'b'm'2'1'.'1' 'm'o'r'f' 's'e's'a'e'r'c'n'i' 'e'g'a's'u' 'y'r'o'm'e'm' 's'''d'n'o'm'a'i'D' '.'e'g'r'a'l' 'y'l'd'r'i'e'w' 's'i' 'd'e'n'e'p'p'a'h' 'e't'e'l'e'd' 'h'c'a'e' 'n'e'h'w' 'g'n'i'r'o't'S'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''b'k'0'0'5' 't'u'o'b'a' 's'e'k'a't' 't'I'''''''''''''' 'n'e'h'w' 'g'n'i'r'o't'S' '.'n'o'i't'a'm'r'o'f'n'i' 's's'e'l' 'h'c'u'm' 'e'r'o't's' 'o't' 's'd'e'e'n' 's'j'Y' 'n'i'h't'o'n' 's'a'h' 't'i' 'd'n'A' '.'''''''''''''''''''n' 's't'I'.'i'h't'e'm'o's' 's'i' 's'i'h't' 'k'n'i'h't' 't'''n'o'd' 'I' '-' 't'h'g'i'r' 'y'l'b'a'b'o'r'p' 's'i' 'n'i'v'e'K' '.'o't' 't'n'a'w' 'I' 'f'i' 'e'r'u's' 't'o'n''''''l'l'i't's' 'm'''I' ''''p'p'a'r'w' 's'j'-'d'n'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'g'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*'''''''''''''''''''''''''''''''''''''''''''''''''''''''-''' '-'n'n':'s'n'o'i't'a'c'i'l'p'm'i' 'd'r'i'e'w' 'e'm'o's' 's'a'h'''' 's'i' 's'i'h'T' '.'d'e't'e'l'e'd' '*'n'e'e'b' ''''''''''b' '*'''e'v'a'h' 'y'e'h't' 't'a'h't' 'y'l'n'O' '.'d'e't'e'l'e'd' 'n'e'e'b' 'e'v'a'h' 't'n'e'm'u'c'o'd' 'a' 'n'i' 's'm'e't'i' 'h'c'i'h'w' 'e'r'o't's' 't'''n's'e'o'd'''''''''''''''s'e't'e'l'e'd' 's't'a'e'r't'e'm'o't'u'a'''''''''''''''''''''''''''''''''''''''''''''''' 'e'r'o't's' 't'''''''''' 't's'''n's'e'o'd' 's'j'Y' ':'s'n'o'i't'a't'n'e'm''''''''''n't'm'e'l'p'm'i' 'r'e'h't'o' 'e'h't' 'r'e'v'o' 'e'g'd'e' 'e't'i'n'i'f'e'd' 'a' 's'a'h' 's'j'Y' 'h'c'i'h'w' 'n'i' 'y'a'w' 'e'n'o' 's'i' 'e'r'e'h't' ','d'i'a's' 't'a'h'T''n'n'm'a'i'd' 'e'h't''''d' 's'n'i'a't'n'o'c' ')'c'(']'y'r'o't'i's'o'p'e'r' 's'i'h'T'['''updates can be enabled or disabled by editing [the constant at the top of src/list/doc.rs](https://github.com/josephg/diamond-types/blob/42a8bc8fb4d44671147ccaf341eee18d77b2d532/src/list/doc.rs#L15). You can look at memory statistics by running `cargo run --release --features memusage --example stats`.'n'n'''''''''d'n'o'm'a'i'd''n'''r''eto_efficiency). Ideas w'n'hi''ch'' '''''''n''''''''''''''''''''''''''m'''' 'n''''''''''''''s'e'p'y't'-'d'n'o'm'https://github.com/josephg/diamond-types/tree/42a8bc8fb4d44671147ccaf341eee18d77b2d532''a'i'd'''a'c''''h's''t'' RUSTFLAGS='-C target-cpu=native' 'i'r'o'g'l'a' 's'i'''''h''U'''''''U'Y''''I't''''''''''''''''''''''''''''''''''''''''''''''''''['s'i' 'm'h't'i'r'o'g''''''''''''''t's'i'l'l'a'e'r' ''''''''''https://github.com/josephg/diamond-types/blob/42a8bc8fb4d44671147ccaf341eee18d77b2d532/src/list/doc''''''''''''''''''''''''''''''''''''g''cargo run --release --features memusage --example stats'''''''''n'i'n'n'u'r' 'y'b' 's'c'i't''nFor my rust implementation results come from benchmarking [josephg/diamond-types, at this version](https://github.com/josephg/diamond-types/tree/42a8bc8fb4d44671147ccaf341eee18d77b2d532). Benchmark by running ` RUSTFLAGS='-C target-cpu=native' cargo criterion yjs`. The inline rope structure updates can be enabled or disabled by editing [the constant at the top of src/list/doc.rs](https://github.com/josephg/diamond-types/blob/42a8bc8fb4d44671147ccaf341eee18d77b2d532/src/list/doc.rs#L15). You can look at memory statistics by running `cargo run --release --features memusage --example stats`.'s'i'n''t'a't's' 'y'r'o'm'e'm' 't'a' 'k'o'o'l'.rs#L1')'5'(']''s'j'Y''''''''''s't'i' 'd'n'A' '.'''e'h't' 'l'a' 's'''e'g'r'e'm'o't'u'a' 'f'o' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'y'm' ' 'y'l'l'a'c'i't'e'r'o'e''''''''''e'r'o'''''''r'e'h'T''''''''''s'e'o'd' ''''''y'l'l'a'e''e''''w'r''t'I''do this are rare and tr'3'''uly golde''n''.' '.'l'a'e'r''I''''''m''''''''nYou'll also need `automerge-paper.json.gz` from [josephg/crdt-benchmarks](https://github.com/josephg/crdt-benchmarks) in order to run most of these tests. The reference-crdts benchmark depends on [crdts.ts from josephg/reference-crdts, at this version](https://github.com/josephg/reference-crdts/tree/fed747255df9d457e11f36575de555b39f07e909)'''''n'''''''''e'c'i't'c'a'r'p' 'n'i' ''''' 'y'l'l'a'e'r'''''''e'l'p'm'i's''''i' 's'i''''''M'''''''''''''''''''''''''''''''nThe charts were made on [ObservableHQ](https://observablehq.com/@josephg/crdt-algorithm-performance-benchmarks).'''''n''''nMy rust crdt wasm wrapper anywhere.'''''''''''''''''''''''''.'''''e's'a'b'e'd'o'c' 'e'm'a's' 'e'h't' 'n'i' 's'''' 'T'D'R'C' 't's'i''''o'l' 'y'n'a''''m''''''''''t'n'e''''''''''''p'''Its a lot faster than'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s't'd'r'c'-'e'c'n'e'r'e'f'e'r' 'n'a'h't' 'r'e'w'o'l's' 'h'c'u'm' 's'i' 'e'g'r'e'm'o't'u'A'''(''']'['!'n'''''''')'''''''='c'r's' 'g'm'i'<''>''ref_vs_am_perf.svg'n'n':'e'g'r'e'm'o't'u'a' 'n'''''''''''''''''''''''''''' 'n'a'h't' 'r'e't's'a'f' 't'o'l' 'a' 's't'I'n'n''u' 'e'g'r'e'm'o't'u'a''m' 't'n'e'm'e'l'p'm'i' 'n'a'c' 'u'o'Y' '.'''''s' 'e'd'o'c' 'e'h'T' '.'2'n'': [..]'9' ''dy='''0.32''em'>''1.5<''/tex''t''>'n''n''''''' 'l'l'a' 't'''''''''''''''''''''''''''''t'a'h't''''''''''''''''''''''''''''''''''''''''''','n'o''''',''''e''''''''''''r'o' ''''''i'''''t'i's'o'p' 'r'e't'c'a'r'a'h'c''''b' 'y'b' 'm'e't'i' 'y'n'a' 'p'u' 'k'o'o'l''''''''''''''''''''''''''e't'c'a'r'a'h'c' 'y'b' 'm'e't'''''''t'm'i' 'y'n'a' 'd'n'i'f' ' 'n'i' '''s'r'e't'c'a'r'a'h'c' 'f'o' 'r'e'b'm'.''''u'n'n' 's't'a'h'T' '''''''''''''''''''''''''''''''t'''''''''''''')'y'l'e'v'i's'r''''''''''''''''''''''''''''''n'i' 's'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'I' '.'t'n'e'm'u'c'o'd' 'e'l'o'h'w''''''''''u'c'o'd' 'e'l'o'w' 'e'h't' 'n'i' 'r'e't'c'a'r'a'h'c' 'y'r'e'v'e' 'f'o' 'n'o'i't'i's'o'p' 'e'h't' 'g'n'i't'a'd'p'u' 'e'l'i'h'w' ','e'm'i't'o'i''''e't'e'l'e'd' 'd'n'a' 's'n'o'i't'r'e's'n'i' 'o'd''''u'c'e'r'(' ''''n's''''''''''n's'n'i' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'y'm' 't'u'B' '.'''' 'p'a'M'e'e'r'T'B' 'a' '''''''''' ' 'a'n'a'e'm' 'y'e'h't' 's'e'e'r't'-'b' 't'u'o'b'a' 'k'l'a't' 'e'l'p'o'e'p' 'n'e'h'w' 'y'l'l'a'u'''s'j'Y''s'U''''s'j'Y'n'n'''' 'e'h't' 'o''''''s'e'k'a'm''''''''s'd''''''''''''''''''c'o'l'l'a'm' 'o't' 's'l'l'a'c' ''e'e''s'n'j''t' 'Y''k'c'a'b' 't'n'e'w'''''r'a't's' 'n'i't'r'a'M' 'n'e'h'w' 'd'n'e' 'e''''''' 'a'h't' 'r'a'e'n' 'r'e't''''''''''''''''''''h'g'u''''''''''''''t'r'a'h'c' 's'i''''e'h't' 'n'i' ''''o'r'h't' 'e'c'n'a'm'r'o'f'r'e'p' ''t'e'b''''''r''' 'd'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'i''''' 'y'l''''''''''s'i'h't' 'n'a'h't' '''''''''''n'i'a'g'a' ''e'v'i't'a'n''' 'k'r'a'm'h'c'n'e'b' 's'i'h't' 'n'u'r' 'I'''' 'n'e'h'W''''''''''''''''''''''' 'r'e'h't'o'n'a''''''''''w''' 't'u'B''''''' 'r'e't's'a'f' 'x'3' 's'n''''''''''''s'i' 'e'd'o'c' 'e'h't'u'r' 'e'd'o'c' 'e'h'T' '.'n'o'i's'r'e'v' 'w'o'l's' 'e'h't' 's'i' 's'i'h't''''A' 's't'e'g' 'e'c'n'a'm'r'o'f''''''''''''''''''''''''''''''''''''''''''''i''' '-' 'h'c'u'm' 'o'o't' 'r'e't't'a'm' 't'''n's'e'o'd' 't'i' 'e'''' 'b'y'a'M''''''I'''r'f'o'r'e'P' '' stroke-opacity='0'I''''''''''y'l'b'a'b'o'r'p' '''''''''''''''s't'i' 'e'm'u's's'a' 'I'.''1'>2''.'''''''']'''.'.'[''' '': [..]':'0''<'.'lin'['e s'')' ''''''''''''''''e't'a'l'u'c'l'a'c'''''''''''''''''''''d'e't'a'l'o's'i' 'e'c'n'a'm'r'o'f'r'e'p' 's'j'y'tro''(':'k''e='c']'urrentC'['olor' x2='-6'>2.53.03.5_ time per txn (ms)0'''''''''''''''''''''''''''''''''''''''''''''''y'r'o'''''y'd''''y'i't'm'e'm''''s'i'h't'' 'n'i' 'd'e't'n'e'm'g'a'r'f' 's't'c'e'j'b'o' 't'p'i'r'c's'a'v'a'j'50,000100,000150,000200,000250,000txns _ 120kb).n''''''''''''''''''''''''''''''''''''''''''''''''''t''' 'e'''''l'a'c's' 'r'a'e'n'i'l' 'a' 'h't'i'W''''i''''''''''''''''''''''''''''''''''n- But when inserting we need to update 2 data structures instead of 1. This makes everything more than twice as slow, and it makes the wasm bundle twice as big (60kb -> 120kb).''''' 'e'r'e'h'w'e'm'o's' 't'n'e't'n'o'c' 't'n'e'm'u'c'o'd'''''''o'c' 'e'h't' 'e'r'o't's' 'l'l'i'w' 's'e's'a'c' 'e's'u' 'f'o' '''s't'o'L' '-'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'm''''''''''''.'e'e'r't'-'b' 'e'h't' 'n'i' 'g'n'i'h't'y'r'e'v'e' 'e't'a'c'i'l'p'u'd' 'o't' 'd'e'e'n''''i' 'o'n' 's'''e''''''''''''''''')'g'v's'.'s'l'a't'o't'(']'['!'''''''['#''''@'''''''['#'n''n'r'e'h't' 'o's' ','y'a'w'''''''''''''''''''''y't't'e'r'p' ','e'l'g'n'i's''''e'r'p' 'a' 'n'i''y'n'a' 't'''''''''''''''''''''''''''''''''s'e's'u'a'p' 'C'G' 'y'k'c'u'l'n'u' 'e'm'o's' 'g'n'i'r'r'a'b''''a' ','n'e'm'u'c'o'd' 'e'h't' 'f'o' 'y'p'o'c' 'a' 'e'v''''''''''''''''''''''t'r'a'h'c' 'e'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':''''''''''''''''''''n'o's'i'r'a'p'm'o'c' 'n'I' '.'''':''''''''''''''''''''''''''''''''''''''''''''''.'t's'a'f' 'k'o'o'l' 'g'n'i'h't'y'r'e'v'e' 's'e'k'a'm' 'e'g'r'e'm'o't'u'A' '.'''''''![all data in one char''''''''''''''''''''''''e'l'a'c's's' 'r'a'e'n'i'l' 'a' 'h't'i'w' ','t](all_per'''''''r'a'e'n'i'l'_'f.svg)''''type: 'log', domain: [0.0005, 4], tickFormat: ',','n'n':'s'i'h't' 'e'k'i'l' 's'k'o'o'l' 'y'l'l'a'u't'c'a' 'a't'a'd' 'e'h'T' '.'n'i'a'r'b' 'r'u'o'y' 'k'c'i'r't' 's'e'l'a'c's' 'g'o'l' ','''' 'r'e'b'm'e'm'e'R'n'n''''''''''I'n'n''o' 'n'i' 'a't'a'd' 'l'l'a'a'h'''''' 'd'e'e'n' 'l'l'i'w' 't'n'e'm'n'o'r'i'v'n'e''''i' 'g'n'i't'i'd'e' 'e'd'o'C'''''' 'e'd'o'V' 'S'V' 'e'h't' ','e'd'o'C' 'S'V' 'n'i' 't'x'e't' 'g'n'i't'i'd'e' 'e'r'''u'o'y''''' 'e'h't' 'f'i' ','e'l'p'm'a'x'e' 'r'o'F' '.''''''''''''''''e' 'r'o'f' '-' 'y'a'w'y'n'a' ''''''' ','s'e's'a'c' 'e's'u' 'f'o' '''''''s'e'r'o't's's't'o'l'''''''o'm'''''''''' 'a'''',' 's'A'''''''''''''''''''''t'a'h't' 's'i' 't'l'u's'e'r' 'e'h'T'n'a''''''''''''n'o'i't's'e'u'q' 'n'i' ''''''''i''''''''' 'y'l'''''''''' ''There's a performance measure nobody is taking seriously enough at the moment. And that is' ',''''''''''''''''''''''''''''''''''''''''''''')'e's'a'b'a't'a'd' 'a' 'n'i'(' '''''''''''''''''''''''''''''u''' 'd'n'A''''''''''''''''''''''''''''''''''''''''''' 'h't'i'w' 'g'n'i't'c''''t'a'r'e't'n'i' 'y'l'l'a'u't'c'a' 'e'r'a''''''''''''''.'T''''''''''''''''''''''''' ',''''''' ','s'i' 't'a'h't'''''''i't' 'd'n'A' '.'t'n'e'm'o'm' 'e'h'''''''''''''''''''''''''''''''''''''''''''''''.'a't'a'd' 'f'o' 't'r'o's' 's'i'h't' 'h't'i'''''''i't'w' 't'c'a'r'e't'n'i' 'd'l'u'o'h's' 'e'w' 'w'o'h't' '''''''''''''''''''l'u'f'e's'u' 'n'e't'f'o'''''y'r'e'v' 't'''n's'i't'a' 'h'g'u'o'n'e' 'y'l's'u'o'i'r'e's' 'g'n'i'k'a't' 's'i' 'y'd'o'b'o'n' 'e'r'u's'a'e'm''''''''e'r's'u'a'''''''a's'e'm' 'e'c'n'a'm'r'o'f'r'e'p' 'a' 's'''e'r'e'h'T'n''e'l'b'a'y'f'i't's'u'j'' 'r'o'f' 'r'e'.''''t't'e'b' 's'i' 's'i'h't' 'e'r'u'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'n'o'i't'a't'n'e'm'e'l'p'm'i' 'r'e'h't'o' 'e'h't' 'f'o' 'e'n'o'n' 'h'c'i'h'w' ','e'r'u't'a'e'f' 't'e'e'w's' 'a' 'r'o'f' '''''''''''''''''''''''''r'e'h't'o' 'e'h't' 'f'''' 'o' 'e'n'o'n' 't'a'h't' ','M'A'R' 'a'r't'x'e' 's'e's'u' 's'i'h'T' ''g'i'f' 'I'n'n'''''''n'n'''''''s'n'o'i't'a'z'i'm'i't''''''''''''''''''''y'e'n'r'u'o'j''''o't's' 's'i'h't' 'n'i' 'p'e't's''p'o' 'e'r''''''''''e'r' 'e'h't' 'e'r'a' 'r'O' '?'y'r'a'd'n'u'o'b''''''''''y'r'a'n'u'o'b''''''''''''''''''''' 'n''''d'''o'i't'a't'n'e'm'e'l'p'm'i'i' 'M'S'A'W' '/' 't'p'i'r'c's'a'v'a'j' 'e'h't' 't'i' 's'I' '.'r'e't's'a'f' 'x'3' 's'i' 'n'o'd' 'I''''''''''''''''''''''''''''''e'd'o'c' 's'i'h't' 'f'o' 'n'o'i's'r'e'v' 't's'u'r' 'e'h'T''''''''' 't'''n'o'd' 'I' ''''''''''''''''''''''''''''''''''''''''' 'e'h't' 'e'b' 'l'l'i'w' 'e'g'n'a'h'c' 'y'''''''''s'i'h''''''' '''''g'n'' 'i's'''m'''I't'''''''''''''''''''''''d'e't'u'b'i'''''''''''''''s'e'g'n'a'h'c' 'e's'o'h't' 'r't's'i'd' 'e'b' 'd'l'u'o'h's' '''''t'''''s'e'h't' 'f'o' 'l'l'a'l'n'o'''''''''''''''''''''''''''''''''''''''' 'e'm'a's' 'e'h't' 'k'o'o'l' 'o't' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 't's'u'r' 'e'h't' 't'c'e'p'''''''''''''r'''The fac'''''t'a'h't' 't automer''ge-rs isn't any faster than automerge gives me some confidence that i'''''''''''''' '''y'l't's''.'''e'''''n'''o'h' 't'u'B' 'ts not just rust.'n'e'z'i'm'i't'p''''''T'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's'u'r' 't's'u'j' 't'o'n' 's't'i' 't'a'h't' ''.'')'e'c'n'e'd'i'f'n'o'c' 'e'm'o's' 'e'm' 's'e'v'i'g' 'e'g'r'e'm'o't'u'a' 'n'a'h't' 'r'e't's'a'f' 'y'n'a' 't'''n'''''''''''''''''''w'o'l''''o's' 'y't't'e'r'p' 'l'l'i't's' 's'i' 's'r'-'e'g'r'e'm'o't'u'a' 't'c'a'f' 'e'h't' ''''' 'f'i' 'h'g'u'o'h'T'(' 'o' 's'''x'e' 'I'''''''''''''''''''r' 'e'h't' 't'c'e'p'x'e' 'I' 't'u'B' 'the whole document. '07.67335132936387L164.72''1'Even through webassembly, this code'877911139''''''<'''''''''''''s'u'o'i'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'n'e'm'u'c'o'd' 'e'l'o'h'w' 'e'h't' 's's'o'r'c'a''''''''''r'e't't'a'm' 'o'n' 't's'a'f' 'y'l'm'r'o'f'i'n'u' 's'i'''''''s'a'f' 'i's' 'm'e't's'y's' 's'i'h't' '-' 'n'e'p'p'a'h' 's't'r'e's'n'i' 'e'r'e'h'w' 'e'r'a'c' 't'''n'o'd' 'e'W' ''''''''''''''''''''''''''''''''''y'l't'h'g'i't' '' 'o's''''p'''''''''''''' ','n'i' 'd'e'k'c'a'p' 's'i' 'y'r'o'm'e'm' 'e's'u'a'c'e'b' 'd'n'A'e't's'y'm' 'img src'''''''''!''3'''f'r'''e'p'_'f'e'r'=automerge1.drawio.svg>'n''''''''''''''''f'i' 's'i'h'''n'o'''t' 'e'e'''''''''''''''''''''''''''''''a'e'd'i' 'o'n' 'e'v''.'a'h' ''''''''''''' 'e'h't' 'f'o' '''''''''''''''''''''''''''''''''?'r'o't'a'c'o'l'l'a' 'e'h't' 'e'b'y'a'M' ''''''''''''''''''''''''''e'c'a'l'p' 'e''''''''''y'l's'u'o'i'v'b'o' ''h''''''''''''''''''''t'h'g'i'r' 'e'h't' 'n''o't' 'd'n'a' 'p'u'''''''''.'s'd'r'a'w'p'u'''t' 'r'e'v'o' 'l'l'a' 'd'e'n'e'p'p'a'h' 's't'r'e's'n'i'''''''''' 's'''n''''e'r'a' ''i't'r'a'M'''''''n'i't'r'a'm''''''' 'e'h't''''''''''''e'r'a' 's't'r'e's'n'''i''''t'r'a'p' 's't'd'r'c'-''''r'' '''e'''''''''''' 's'i'''''''''''''''''''''''''''''''''''''''''''n'e'h'w' ''''''''''''''''''''''''''''''''''''''d' 'e'h't' 'h'u'g'o'h'r't' 'k'c'a'b' 'g'n'i'm'o'c' 'n'i't'r'a'M'''''''' 'n'i't'r'a'm' 's'a'w' 'd'n'e' ''''e'e'h't' 't'a' 'n'o'i't'c'e's' 'e'h't' 'e'm'u's's'a' 'I' ''h't' 'g'n'i'r'u'd''c'n'e'r'e'f'e'r''s' 'n'a'c' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'r'a'e'n'i'l'''''''''''''''''''''''''''''.'*'t'h'g'i'r' 'e'h't' 'o't' 'd'n'a' 'p'u'*' 'd'n'e'r't' 'g'n'o'r't's' 'a' 's'''e'r'''''''''''''s' 'e'''''''''''e''''''''''''''''''''''a' 's' 'e'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'h't''''' 'u'o'y' 't'u'b' ','e'c'a'r't' 's'i'h't' 'g'n'i'r'u'd' '''''''''''''''''''''''''''''''''''''' 'y'a'r'r'a' 'n'a' 'n'i' 's't'n'e'm'e'l'e' 'g'n'i'l''''i'f'f'u'h's' 'd'n'a' ','e'c'a'l'p' 'e'h't' 'r'e'v'o' 'l'l'a' 's'e'v'o'm' 'r'o's'r'u'c' 't'r'e's'n'i' 'e'h't' 'e's'u'a'c'e'b' 'e'r'e'h' 'n'o' 'g'n'i'o'g' 't'o'l' 'a' 's'''e'r'e'h'T' ''''''''''''''''''g'v's'.'3'f'r'e'p'_'f'e'r' '>'n'n''''''''''''''''''''''i't' 'f'o' 't'n'u'o'm'a' 'e'h'T' ''''''''''h'T' '.'u'o'Y'''''''''''''''''''''''''''''''''''e'v'o'b'a' 'm'a'r'g'a'i'd' 'e'h't' 'n'o' 'n'i' 'm'o'o'z''''s' 'e'w' 'f'I'''''''' 'n'a'c' 'e'W'''5,312.81199444924806L167.03154231690135,312.0217097908432L169.3412067226632,319.40058767560174L171.65087112842502,303.290438'''''''''''''''''''''n'o'i't'a'm'r'o'f'n'i' 'e'm'a's' 'e'h't' '2256132L173.96053553418687,306.0601856298547L176.27019993994872,323.22592646787865L178.57986434571058,338.4754829397754L180.8895287514724,324.0422604860777L183.19919315723425,311.7291642678771L185.5088575629961,317.5852446235697L187.81852196875795,325.754799163999L190.1281863745198,273.2218301538354L192.43785078028165,307.0379464344723L194.74751518604347,308.3675182314111L197.0571795918053,305.8125952144778L199.36684399756714,315.50578542817016L201.676508403329,310.0300645885391L203.98617280909085'''''''''''''''' 'g'n'i't'l'u's'e'r' 'e'h't',304.62440782643097L206.29583721485267,302.907305923881L208.60550162061452,300.7181531616053L210.91516602637637,309.3549651114627L213.224')'83043213822,334.8545623'''('09457L215.53449']'483790007,256.6'['764747401852L217.8441592436619,306.02416966122115L220.1538236494237,310.3887761981957L2'!'22.46348805518556,303.43580943104564L224.77315246094741,297.79652458815247L227.08281686670927,300.0300648629319L229.39248127247112,331.8233899414033L231.70214567823297,308.30299991729026L234.01181008399482,294.57287976030636L236.32147448975667,306.4273207234548L238.63113889551846,250.2423452782171L240.9408033012803,299.7219722136838L243.25046770704216,310.1519343708049L245.560132112804,298.3395931638715L247.86979651856586,296.983'''Kevin says he wro'''n'te and rewrote parts of yjs 12 times in order to make this code run so fast. If there was a programmer version'' of the speedrunning community, they would adore Kevin' '.'9'''''''''''n'e'v'e' '028824633L250.17946092432769,294.8186880886822L252.48912533008954,315.4'I'''002676011884L254.7987897358514,328.7540567058032L257.10845414161327,296.1958934037708L259.41811854737506,285.17''''''''''''''''''''''''''''''''s'w'o'r'g' 't'n'e'm'u'c'o'd' 'e'h't' 's'a' ',''''''''''''''''''''''''''''''''n'[''o'''''''''''https://observablehq.com/@josephg/crdt-algorithm-performance-benchmark''.')'s'(']''''''''''''''''''''' 's'''Q'H'e'l'b'a'v'r'e's''''j'b'O' 'g'n'i's'u' 'e'd'a'm' 'e'r'e'w' 's't'r'a'h'c' 'e'h'T'''''''''''''''''''''''''''''''' 'g'n'i''''s't'r'a'h'c' 'e'h't' 'h't'i'w' 'y'a'l'p' 'n'a'c' 'u'o'Y'n'n'''''''n''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''''''''''' ':'s'i''''*'''''n'e'v'''*''e' '' 'n'o'i't's'e'u'q' 'l'a'e'r' 'e'h'T'a'e'd'i' 'o'n''any'''u'm''''''''a'e'''''''''''''e'r'e'h' 'd'e'g'a'n'a'm'd'i' 'n'o' 'e'v'a'h' 'I' '?''''' 'f'o' 's'k'n'u'h'c' 's'e't'e'l'e'd' 'r'e's'u' 'e'h't' 'n'e'h'w' 'r'O' '?'t'n'e'm'u'c'o'd' 'e'h't'n'' 'd'' '''n'u'o'r'a'''''''''''y'a'w' 'g'n'o'l' 'a' 'r'o's'r'u'c' 'r'i'e'h't' 's'e'v'o'm' 'r'e's'u' 'e'h't' 'n'e'h'w' 'n'e'p'p'a'h' 'y'e'''''''t'a'h't' 'e'b'y'a'M' '''''.'t's'a'f' 'o''''''''''''''''''''''''''''''''''''''''''''*''''''*''''''''''''''''''''''''''''''''''''''''''''''''i''' ','s'm'h't'i'r'o'g'l'a'''''''''''''''''''''''':'o't' 'd'e'e'n' 't's'u'j' 'd'l'u'o'w' 'u'o'Y' 'r'e'h't'o' 'e'h't' 'e'k'i'l'n'U''I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''still ''''''''C'''''''''''''''''d'r'i'e'w'''''''''!'s'u'o'i'r'''n'>'''u'c' 'y't't'e'r'p'''''''''''''.'d'r'i'e'w' 't'i'b' 'a' ''''''' 'a'l'l'i't's' 's't'i' 't'u'b' ','s'm'r'e't' 'e't'u'l'o's'b'a' 'n'i' 'l'l'a'm's' 'y't't'e'r'p' 'e'''''''''''''''''''e'v'a'h' 'n'a'c' '''''''''''''d'r'i'e'w' ''''''''''''s'm'e'l'b'o'r'p'''''''''[''''''''''''s'e'i'l'a'm'o'n'a'''''''o'n''''''''''''''s'm'e't'i''s'e'i'l'o'm'''''''''''''e'd'o'c' 'y'm' 'e'k'a'm' '''' 'r'o''''g'n'i'''f'''''''o'n'a'''''''s'''''''s'a''n'''''''''''''''''''''''''''''''''''''''''''''g'n'i'h't' 'g'''' 'n'o'r'w' 'e'h't' 'e'r'u's'a'e'm' 's'k'r'a'm'h'c'n'e'b''''''''''''' 'e'c'n'a''''''''''''''''''''g'n'i'r'u's'a'e'm' 'm''''''A' ''''m' '''I' 'd'n'A' '.'m'r'o'f'r'e'p' 'r'u'o'Y'''''''''''''https://www.cl.cam.ac.u''''''''''''''''.'''' '''' 't'x'e''''O''' '.'''t''''' '''g'n'i'd'n'e'p'e'r'p'k/~arb33/'''p'papers/KleppmannEtAl-InterleavingAnomalies-PaPoC20''''''''''''''''''''''''''''''''''''''''''''''''''y'd'''a'e'r'l'a' ''.'')'l'l'e'w' 't'a'h't' 's''''''''''n'c'a''''' 's'e'o'd''m'r'''o'f'r'e'p' 'y'l'l'a'u's'u'''''''''''''y'l'l''''' 's'e'o'd''a'c'i'''s'a'b' 's'i' 'e'g'''''''''''''''''''''''''''s'e'k'a't' 't'i' '''''''d'e'r'o't's' ''e'm'i't' 'h'c'u'm' 'w'o'H'r'e'm'o't'u'a' 'd'n'A'(' '19.pd')'f'(']''''''''g'n'i'x'i'f'''''''''''e'r'p' 'n'e'h'w'''''''''' 'n'i'''''''h't' ''''''''''''''''g'n'i'x'i'f'e'r'p' 'n'e'h'w' 'm'e'l'b'o'r'p' 'g'n'i'v'a'e'l'r'e't'n'i' 'n'a''''''''''''''''''''''''''''''''''''''''''e'm'o's' 'n'i' 's'c'i't'n'a'm'e's' 'g'n'i'r'e'd'r'o' 'e's'r'o'w' 'y'l't'h'g'i'l's' 's'a'h' 'A'G'R' 'd'n'A' '''''''''' 'd'n'A' '''' '''''''''''''''' 'd'n'A' ''r'''y'e'h''''' 'r'a'v'''''''''t'n'e't'n'o'c''''''' '=' 'm'e't'i'T' '.'h'g'u'o'h'':'''t''''''''''u'o'h' '''''''''''''''''''''''' 's'i''''''''''''''''''''s'i'h't' 'e'k'i'l' 's's'e'm' 'a' '''5' ';'''''''''''''' 's'i' 'e'r'e'h''''''''''''''''''''g'v's'.'o'i'w'a'r'd'.'g'a'r'f'-'m'e'm' 'e'l'a'c's' 'e'h't' ','r'e'b'm'e'm'e'r' 't'u'B' '.' '''''''''''''''''''''t's'e't' 's'i'h't' 'n'i' '''''''''''''''''''''''''''''''''''''e'm')''i't' 'r'e'v'o' 'r'e'w'o'l'''s' '(''t'e'g' 't'''n's'']'e'o'''''''s'e'd' '[''t'i' 'd'n'a' ','''''':'t's'a'f' 's'y'a'''I have no idea what those spikes are. Remember, the''''''!''''''''''''''''''''''''''''''''''''''''''''''''' '''e'h't' ','r'e'b'm''''''''''''''''''y't'i'n'u'm'm'o'c' 'a' 's'a' ''n'e'm'e'R'''' '''''''''' '''''''''''''''''''''''''''''''''' 'm'o'r'f' 'e'b' 't'h'g'i'm' 't'i' 's'k'n'i'h't' 'n'i'v'e'K' '.'''' 'e'r'a' 's'e'k'i'p's' 'e's'o'h't' ''''t'a'h'w' 'a'e'd'i' 'o'n' 'e'v'a'h' 'I' 'h'g'u'o'h'T'('n''n'w'l'a' 't's'o'm'l'a' 's't'I' '.'e'c'n'a'm'r'o'f'r'e'p' 't'a'l'f' 'y'l'''t's'o'm' 's'a'h'''''''''''''''''''''''''''''e'm'i't' 't'n'a't's'n'o'c' 's'e'k'a't'''''''''s''''''''''''''''''''''''''''''''''''''''r'o''''''''''''''''''''''''''''''''''''''''''''g'v's'.'5'f'r''''f'e'p'_'s'j'y''''0.0000.0020.004'vg>'n''t'I' ''''''''''''l' 'l'u'''''''''''''''''''''''''''''''''''''''''''.')'e''''''''t'''n's'i'''''''' 'l'l'i'w''''''''t'''n's'i' '8'V''r'e'h' 'p'''''''''''' 's't'i' 'e's'u'a'c'e'B''l'e'''''h' 'd'l'u'o'w' 'g'n'i'n'i'l'n'i'''''''''''u'o'w' 'g'n'i'l'n'i' ''''''' 'i'g'n'i'r't's' 'l'l'a'm'S'(' ''' '''''''''''''''''''''.'c'i'g'a'm' 't'o'n' 's't'i' 't'u'B' '.'''' 'f'w'a' 'n'''''''''''''''s'k'c'i'r't'''''''''''''''''g'v's'.'o'i'w'a'r'd'.'e'e'r't'b' 'f'o' 't'o'l' 'a' 's'a'h'''''''a' 's'e'o'd'''''''''''''''''''''''''''''''''''''''''''''' 'g'n'i'n'i'l'n'i' 'g'n'i'r't's' 'l'l'a'm's' '-' 'e'r'e'h' 't'o'l' 'a' 's'p'l'e''''''''''''''''''''''e'c'a'r't' 'g'n'i't'i'd'e' 's'''''''''h'c'i'h'w' '''n'i't'r'a'M''h'''''''' 's'e'o'd' 'r'e'z'i'm'i't'p'o' '8'V'''''''8'v' 'e'h'T' ''c'u'm' '='0.1'>0.0060.008']'0.0100.0120.0140.016_ avg time per txn (ms)050,000'.svg>'n'ate(271.46644057618425,0)'>'_perf4.svg>'n''a' 'k'c'a'r't' 'o't' 'r'o't'c'e'l'l'o'c' 'e'g'a'b'r'a''''''''''b'a'r'g' 'a' 'd'e'e'n' 't'''n's'e'o'd' 't's'u'R''''''''''t's'u'r' 'm'o'r'F''''''''' 'e's'u'a'c'e'B' '.'r'e't't'u'b' 's'a' 'h't'o'o'm's' 'o's'l'a' 's'i' 'e'c'n'a'm'r'o'f'r'e'P''''''''''''''''''''''''''''''''' '*' '''''nWe can''''''''''''''n'o' 'g'n'i'h't'y'r'e'v'e' ''' put a lot of this stuff on '''''t'r'a'h'c'one graph if I use a log scale. Its remarkable how neat it looks, but log scales are meaningless to humans.nn> all_perf.svg'n''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''We '''e's'u'can put a lot of this stu'''''''''''''''''s'k'o'o'l' 't'i' '''''''''''''''''s'''''''''''''''f'I' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't's'u'j' 'e'r'a' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 't's'u'r' 'e'h't'''' 'y'm' 'd'n'a' 's'j'y' ','e'l'a'c's' 'r'a'e'n'i'l' 'l'a'm'r'o'n' 'a' 'e's'u' 'I' 'f'I''n'n'''t'i' '''''''''''''''''''''''''s'i'h't' 'e'k'i'l' 'p'u' 'k'c'a't's' 'y'e'h't' 'y'l't'a'e'n' 'w'o'h' 'e'l'b'a'k'r'a'm'e'r'''''''' '''' 'y'l'l'a'e'r'ff on one graph if I give it a log scale. Its prett'''''''''''''''''''''''''''''''''''''''''''.'s'n'a'm'u'h' 'o't' 's's'e'l'g'n'i'n'a'e'm''''''''''''''''''g'n'i'n'a'e'm' 'y'l's'u'o'i'r'e's' 'e'r'a' 's'e'l'a'c's' 'g'o'l' 't'''''''l'g'u'b'''''o'b'o'n''''''t'u'b' ','''''''''''''''y't't'e'r'p''!' 'd'n'A' '.'y meaningles''s, bu''''''''''''''''''''''''''s'e'r'u't'a'e'f' 'e'm'o's' 'e'e's' 'n'a'c' 'u'o'y' 't'''''''''''''''g'v's'.'f'r'e'p'_'l'l'a' '>'n'''We''I''We can put a lot of this stuff on o'''''''''''''''t'i' 'e'v'i'''''''''''''''''''''''''''''''''''''' 'u'o' 't'u'b' ','s's'e'l'g'n'i'n'a'e'm' 'y't't'e'r'p'''''''e'r' 's't'I' ''g' 'I''''''''''''''''''''.''''''''''''''''''''''''''''n'i'm' 'y't't'e'r'p' 's't'i' 'h'g'u'o'h't' ','e'l'a'c's' 'g'o'l' 'a' 's'a'h''''a' 't'i' 'f'i' 'ne graph, but i'''''''''' 'I' 'f'I'''''''''''''''''''''''''''''''''''''''''''''''''''i' 't'u'b' ','h'p'a'r'g' 'e'n'o' 'n'o' 'f'f'u't's' 's'i'h't' 'f'o' 't'o'l' 'a''''''''e'h't' 'l'l'a' 't'u'p' 'n'a'c' 'e'W'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''w''''''''''''''''''g'v's'.'6'f'r'e'p'_'t's'u'r' '>'n'n''o'n'k' 't'''n'd'l'u'o'w'''''''''''''''''''''''''''''''''''''''''''''''.'a't'a'd' 'k'r'a'm'h'c''''''''''m'c'h'n'e'''''''e'n'b' 'e''''''''''b'e' 'h't' 'n'i' 'l'l'e't' 't'''n'a'c' 'y'l't's'e'n'o'h''''c' 'u'o'y'''''''''' 't'i' ','e'h'c'a'c' 'U'P'C' 'n'i' 's't'i'f' 'g'n'i'h't' 'e'l'o'h'w' 'e'h't' 'e's'u'a'c'e'b'''''''c'e'''''''''''''''''''''t's'a'f' 's't'i' ','y't'i'l'a'e'r' 'n'i' 't'u'B' '.'s'w'o'r'g' 't'n'e'm'u'c'o'd' 'r'u'o' 's'a' 'r'e'w'o'l's' 'y'l'l'a'u'd'a'r'g' 't'e'g'''''''' 'y'l'w'o'l's' 's't'r'e's'n'I''''''''''''''''''' 's'e'k'a't''*''''''*'''' 'd'l'u'o'h's' 't'r'e's'n'i' 'h'c'a'E''''''' 'h'c'a'e'T' '.'n''''''')'n' 'g'o'l'('O' 's'i' 's'i'h't' 'y'l'l'a'c'i'n'h''''''''''i'h'n'c'e''''h'T'n''n'0.71em'>100,000150,000200,000250,000txns _yjs' '>'n'n':''''.'d'n'e' 'e'h't' 't'a' 'd'n'a' 't's'e't' 'e'h't' 'f'o' 't'r'a't's' 'e'h't' 't'a' 'l'l'e'w' 's'a' 't's'u'j' 'g'n'i'm'r'o'f'r'e'p''''''''''''t'a'l'f'''''''''''''''''''''''''''''''y'n'a' 'r'o'f' 'e'c'n'a'm'r'o'f'r'e'p' 't'n'a't's'n'o'c'''''''''''''r'e'p' 't'a'n't's'n'o'c'''''''' 'r'a'e'n'i'l' 'g'n'i'v'a'h' ')'y'l't's'o'm'('''''''m'(' 't'i' 'e'e's' 'n'a'c' 'u'o'y' ','s'j'y' 'e't'a'l'o's'i' 'e'w' 'f'i' 't'u'B'n''n''s' 's't'i' 'e's'u'a'c'e'b' 's'm'h't'i'r'''''''r'i'o'g'l'a' 'r'e'h't'o' 'e'h't' 's'a' 'e'l'a'c's' 'e'm'a's' 'e'h't' 'n'o' 's'j'y' 't'u'p' 'y'l'l'a'e'r' 't'''n'a'c' 'I'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'a' 'e'l'a'c's' 'e'm'a's' 'e'h't' 'n'o' 't'i' 't'u'p' 'e'w' 'f'i' 's'j'y' 't'u'o'b'a' 'g'n'i'h't'y'n'a' 'l'l'e't' 'y'l'l'a'e'r' 't'''n'a'c' 'u'o'Y'''''''''''''''''''''''''''''''' 'e'h't' 't'a' 'e'n'i'l' 'a' 'y'l'l'a'c'i's'a'b''''a' 's'i' 's'j'Y'''''''''''''''''''''''''''''''''''''''' 's't'e'g' 'n'o'i't'a't'n'e'm'e'l'p'm'i'''''''''''''n'o'i't'n'e'e'm'l'p'm'i' 's't'd'r'c'-'e'c'n'e'r'e'f'e'r' 'y'M'n'n''''''''''''''''''g'v's'.'4''''3'f'r'e'p'_'s'j'y' '>'n'n'52623706938L261.7277829531369,223.7808467136446L264.0374473588987,293.1937300104379L266.3471117646606,289.9869132376882L268.65677617042246,291.6462404722998L270.96644057618425,289.42647291779764L273.27610498194616,288.73305852091545L275.58576938770796,285.40769612092686L277.8954337934698,211.52907397574947L280.20509819923166,296.8787805094819L282.5147626049935,282.295329170959L284.82442701075536,280.7163715275385L287.1340914165172,272.5731189417396L289.443755822279,275.0129783224233L291.75342022804085,276.9126581770053L294.0630846338027,189.08334506829772L296.37274903956455,269.75095167386496L298.6824134453264,267.29315698612555L300.9920778510882,265.8590805276817L303.30174225685005,264.501607487239L305.6114066626119,269.3548107729358L307.92107106837375,268.8816247241124L310.23073547413566,202.03719512981164L312.54039987989745,283.08538581221364L314.8500642856593,286.0625855919234L317.15972869142115,285.31391182056876L319.469393097183,283.6213318017489L321.7790575029448,191.616563149324L324.0887219087067,279.98515686757565L326.3983863144685,289.1524945249947L328.70805072023035,263.5754665180542L331.0177151259922,266.8788627463574L333.32737953175405,255.23313406131842L335.6370439375159,153.86730210866077L337.9467083432777,301.99399449969684L340.2563727490396,290.8151097199587L342.5660371548014,271.37666532881445L344.8757015605633,243.9075814030077L347.1853659663251,247.42484492269904L349.49503037208694,143.05820126289254L351.80469477784874,241.84426073806134L354.1143591836106,239.0242903080998L356.4240235893725,292.0706584851939L358.7336879951343,320.2314768731976L361.04335240089614,320.6956649302387L363.353016806658,320.0829015220471L365.66268121241984,321.2679022376054L367.9723456181817,322.1500064081641L370.2820100239436,279.7812966036057L372.59167442970534,150.62350929459564L374.90133883546713,257.0801537460953L377.21100324122904,255.46705246774198L379.5206676469909,248.08051474050524L381.83033205275274,318.5028032163361L384.1399964585146,276.7833899801005L386.44966086427644,152.70123680729728L388.75932527003823,256.6348536760652L391.06898967580014,245.0570589547315L393.378654081562,270.61816627165695L395.6883184873238,291.8337743186176L397.99798289308563,280.8975785923264L400.3076472988474,253.8488537800058L402.61731170460934,147.2092245933975L404.92697611037113,267.5180237332205L407.23664051613304,269.12887056904947L409.54630492189483,263.69664792804076L411.8559693276567,261.98689326829947L414.16563373341853,139.71486284935736L416.4752981391804,261.370087858105L418.78496254494223,255.87257318100725L421.0946269507041,251.42154830828582L423.40429135646593,131.12237322332066L425.7139557622277,249.9432022329065L428.02362016798963,256.1754197061827L430.3332845737514,254.50504213301897L432.64294897951333,146.26343237985773L434.9526133852751,315.7184830632591L437.2622777910369,302.10868524317397L439.57194219679883,255.69386672151452L441.8816066025606,256.41916570277965L444.19127100832253,248.13793562231044L446.5009354140843,114.02454935610312L448.8105998198462,287.79113971980667L451.120264225608,312.85080038886963L453.42992863136993,247.3359109086496L455.7395930371317,243.34848556827768L458.04925744289346,257.7248076918354L460.35892184865537,119.47206998493448L462.6685862544172,265.91938940330715L464.97825066017907,242.72561048392126L467.2879150659409,282.8106164159161L469.5975794717028,107.43905265210508L471.90724387746457,262.2833716323476L474.2169082832265,252.86015026091383L476.5265726889883,269.4731244463173L478.8362370947501,233.83269544419872L481.14590150051197,100.98776160576477L483.45556590627376,244.24007151106983L485.76523031203567,301.8079308123864L488.07489471779746,92.276266478406L490.38455912355937,244.46197624194338L492.6942235293212,310.48604681001416L495.003887935083,312.8078811147665L497.31355234084486,313.28568309617674L499.6232167466067,314.5272652056339L501.93288115236857,314.03204683685385L504.2425455581304,314.7672865055629L506.55220996389227,314.0681960634063L508.86187436965406,314.9782533216905L511.17153877541597,278.2343911738366L513.4812031811778,103.58778921321984L515.7908675869396,256.7088159354081L518.1005319927015,252.40193097464996L520.4101963984633,310.27312490170635L522.7198608042252,313.89856161738174L525.029525209987,117.09933023463333L527.3391896157488,250.46510226563396L529.6488540215107,252.63180133148424L531.9585184272726,281.29381511586587L534.2681828330344,97.4889116048936L536.5778472387963,254.0046295795242L538.887511644558,268.9243289417631L541.1971760503199,236.43463906860703L543.5068404560817,243.32870538611743L545.8165048618436,84.21007881810141L548.1261692676054,248.48442243559901L550.4358336733673,235.82050822847495L552.7454980791291,250.43728877275638L555.055162484891,81.18646414056792L557.3648268906528,257.0717637683346L559.6744912964147,253.72565890605804L561.9841557021764,249.73066156932813L564.2938201079384,254.28819573630133L566.6034845137001,78.48691944732096L568.9131489194621,224.2537264993702L571.2228133252238,239.2663311199341L573.5324777309856,232.68035053927576L575.8421421367475,69.11175796229507L578.1518065425093,250.54871478950017L580.4614709482713,267.08943890964383L582.771135354033,249.6621817083864L585.0807997597949,47.52002115006532L587.3904641655568,217.37818785303227L589.7001285713186,203.3479695705606L592.0097929770805,60.56641231392514L594.3194573828423,232.57566269516408L596.629121788604,228.98581452406694L598.938786194366,214.00566179434387L601.2484506001277,100.80896576366655L603.5581150058896,203.38959245872059L605.8677794116514,260.22470453529644L608.1774438174134,282.70516752262176L610.4871082231753,20L612.796772628937,219.03020807171086L615.106437034699,238.11778445410738L617.4161014404607,58.48072724002276L619.7257658462227,291.5684325466767L622.0354302519844,306.4843494155757L624.3450946577461,297.73916524730816L626.6547590635081,260.0212592150145L628.9644234692698,209.87775537831772L631.2740878750318,29.030959931952616L633.5837522807935,287.9655590713959L635.8934166865554,262.31117053219054L638.2030810923173,271.11027026144575L640,274.7612139915496'>'n'n'e'g'r'e'm'o't'u'a' 'f'o' 't'r'a'h'c' 'a' 's'i' 's'i'h'T''''''''''''e'g'r'e'm'o't'u'A'''''''''''''''''''''''''''''''' 's'''e'g'r'e'm'o't'u'a' 'f'o' 't'r'a'h'c' 'a' 's'i' 's'i'h'T'''''''e'W'n': 102px;'>
b
b
c
c
(root)
(root)
Viewer does not support full SVG 1.1'''h't' '''''''''''''''''''d'e'b'i'r'c's'e'd' 'h'c'i'h''''''''s'm'e't's'y's'w''''h' 'd'''''''I' 'd'''d'e'''n'''''A' '.''''''n'''''a' ','s'c''''s'i't'n'a'm'e's' 'e'm'a's' 'e'h't' 'k'o'o't''''o'''n'a'r'' 'I''''''''''''''th''' academi''' literatur'''''''''''''c'i'm'e'd'a'c'a' 'n' 'e'c'e''''The Literature ''''''''''''''''''''''''''''''''' 'e'r'u't'a'r'e't'i'l' 'c'i'm'e'd'a'c'a' 'e'h't'''''''''''''''''' 'e'r'u't'a'r'e't'i'L' 'e'h'T' 'n'i'''''''''''''''''''''' 'e'h'T'n' 'i'''' 'e'h'T''''''''''''''''''''''''''''''''''''''''''''''e'c'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''e'm'i't' 't'a'h't' 'd'n'u'o'r'a' 'e'r'e'h'w'e'm'o's'''''''''''''''''''''''''''''''''s'a'w' '''''''''''''''''''''''''''-''W'-'-'n''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'l'a't'o't' 'e'v'a''.'I''''h' 'd'l'u'o'''''''''''''''''''''''''''''''''r'e'''''''''''''''''''t's'a'f' 's'T'D'R'C' 'g'n'i'k'a'M' '#''p'a'p' 'e''''''''''p' 'a'h't' 'g'n'i'd'a'e'r' 't's'u'j' 'm'o'r'f' ''''''u'i'o'w' ''''''''''''''''''''''''''''n'''''''''''''''''''''''''''''''''''''''''''''''f'o''' 'e'r'u't'u'f' 'e'h't' ''''''''''''''''''''''''''' 't''''''r'e'v'e'n' ''''''u'b' ','s't's'e'g'g'u's'''''''t'n'a'c'''''''''''''''''''''''''''''''''''''''''''' 'c'i'm'e'd'a'c'a'''''''''''d'n'a' 's'r'e'p'a'p' 'g'n'i'd'a'e'r' '''''''''''''''''''''''''''''''''''''''''''''!'s's'e'n'd'a'M' '?'r'e't'c'a'r'a'h'c' 'y'r'e'v'e' 'r'o'f''''a' 'D'I'U'G' 'A' '.'''d'''e'p'''' 'p'o't's' '''''''''''''''''' ','m'e'h't' 'd'e's's'i'm's'i'd''''''''''d'e'm'u's's'a' 'I' ''''''''r'e'''''''''''''''''''''''''''''''t'''n'e'm'e'l'p'm'i'' 'o't' 'y'a'w' 't's'e'b' 'e'h't''''''''''''''''e's'o'h't' 'e'k'a'm' 'o't' 'w'o'h' ''v'e'n' ''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'w'o'l's' 'e'b' 's'y'a'w'l'a' 'l'l'i'w' 'm'e't's'y's' 'e'h't' 'e'v'o'r'p' 't'''n'a'c' 't'u'b' ','s't's'e'g'g'u's' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'v'o'r'p' 'y'l'n'o' 't'i' 't'u'b'''''''''' 't'u' '-' 'w'o'''l'''s' 's'i' 'm'e't's'y's''''''''''s'c'i't'n'a'm'e's' 'e'h't' 's't's'e'g'g''''''''''''''''''''''''''' '''''''d'a'h' 'e'b'y'a'm' '-' 'e's'r'o'w' 's't'i' 'e'b'y'a'M'u''''a's''''p' 'n'o''''' 'e'''d'e'v'a'h''i't'a't'n'e'm'e'l'p'm'i' 'w'o'l's' 'a' 'd'n'A' '''''''''''''''''''''''''''''''''''''''''''''''''''''''l' 't'''n'e'r'a' 'u'o'y' 's'e'v'o'r'p' 't's'u'j' 't'I' '.'s'g'u'b' 'f'o' 'e'c'n'e's'b'a' 'e'h't' 'e'v'o'r'p' 't'''''''t't''''u'B' 'n's'e'o''''''''y'l'l'a'e'r' 'd' 'e't'i'u's' 't's'e't' 'g'n'''i's's'a'p' 'a''''''''''n'a' ' '-' 's't's'e't' 'e'k'i'l' 's't'i' 'e'b'y'a'M' ''o'i't'a't'n'e'm'e'l'p'm'i' 'w'o'l's' 'a' 'm'o'r'f' 'n'r'a'e'l' 'e'w' 'n'a'c''''s' 't'a'h'W''When our implementation ''runs slowl''y,'''''''''''' 'd'l'u'o'h's' 't'a'h'w''''''''''''''''''''''''''''g'n'i'h't'y'n'a' 's'u' 'h'c'a'e't' 't'a'h't' 's'e'o'd'''''''''''''''''''l'u'f'g'n'i'n'a'e'm' 't'a'h't' 's'i'''''''''''''''''''''?'n'a'e'm' 't'a'h'''''w''' 'd'n'A''t' 's'e'o'd' 't'a'h'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'v'l'o'v'n'i' 's'e'r'''''''''''.'s'c'i't'n'a'm'e's' 'e'h't' 't'u'o'b'a' 'g'n'i'h't'y'n'a' 'g'n'i'v'o'r'p' 'e'r'''e''''''''''r'e'h'w''''t' 'f'i' 'w'o'n'k' 't'''n'o'd' 'I'''''''''' 'e'w' what are we actually proving?''W''''''''''''''''''''''''''''''''''''''''''''''''''''''''?''''''w''' 't'u'B'I' 's'a'w' 'o'h'w' ','t's'a'f' 'm'e'h't' 'e'k'a'm' 't'''n'd'l'u'o'c' 'm'e'h't' 'd'e't'n'e'v'n'i' 'o'h'w'''''''''' 'd'e'v'l'o'v'n'i' 's'r'e'h'c'r'a'e's'e'r' 'e'h't' 'f'I' '.'r'e'h't'e'g'o't'l'a' 's'T'D'R'C' 'd'e's's'i'm's'i'd' 'I' ','n'e'h't' 'd'n'u'o'r'a' 't'n'''''''''''''''''''''''''''s''''y'l'?'''''''''s' 'n'u'r' 'n'o'i't'a't'''''e'v''''n'e'm'e''''' 'd'l'o'l'p'm'i' 'r'u'o''''''i''''''''y'a's'''n'a''''''''''t'a'h't' 'w'o'h'''' 's'o'p' 'e'''s'i'm'o's' 't'a' ',''''''''''''''''''''''''''''''''''''''' 's'n'u'r''''''''''''''''''''''''''''''''''''''''''''' 'e'c'n'e't'''''''''''''''''''''''''''''''''''''t'a'h't' 'o'd' 'e'w''''i' 'f'i'''''X'''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'e'h't' 'd'a'e'h'r'e'v'o''''[' 'h'c'''''''''''''''''k'r'a'm'h'c'n'e'b' ''''https://gist.github.com/josephg/13efc1444660c07870fcbd0''b3e9''17638#file-js_baseline-js-L37-L4')'1'(']'u'm''''''''''''''''''''''''''''''''n'a'c' 'e''''' 's'i'h't'''''''''''''''''''j''' 't'u'o' 's'n'r'u't' '''*''t'*''I'''''''''''''''''''''''''''''''''''''''''''' 'a'r't'x'e''''''''''''''''e'k'a'm' 'o't''''''''''''''k'r'o'w' '''''''''automerge (v1.0.0-preview2)'*'''''''''''''''''''''''''''''''''''''''n'a'''J''''c't'i' 't'u'b' ','g'n'i't'i'd'e':'''' 'e'v'i't'a''''''''''t'i'a'r'o'b'a'l'l'o'c''''a' 'r'o'f' 'd'e'e'n' 'e'w' 'n'o'i't'a'm'r'o'''''''''''''a'm'o'r'f'n'i' 'e'h't' 'l'l'a' 'y'a'w'a' 's'w'o'r'h't'''''''''''''''''''t'''n'd'l'u'''''''''n'o'w' 'y'l's'u'o''''u'i'v'b'o' 's'i'h'T' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's''''''''''''''''''t'n'e't'n'o'c' 'e'h't' 'l'l'a' 'e''''.'''u'''j' 'e'w' ','k'r'o'w' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'e'k'a'm' 'o't' 'n'o'i't'a'm'r'o'f'n'i' 'a'r''''a't'x'e' 'e'h't' 'l'l'a''''''''''''' 'n'o'i't'a'm'r'o'f'n'i' 'g'n'i'r'o'''''''o'r't's' 'f'o' 'd'''' 'a'e't's'n'i''''''''k'r'a'm'h'c'n'e'b' '''' 'e'h't'''''' '''''e'''w' ','s'i' 't'a'h't' 't'n'''''''''''Automerge was just never written with performance in mind. Their team is working on a replacement [rust implementation of the algorithm](https://github.com/automerge/automerge-rs/) to run through wasm, but at the time of writing it hasn't landed y'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't's'e't' 's'i'h't' ''''''''''''''''''''''''''''''.''''-'-'-''n'n'''']''e'd'o'c' 't'p'i'r'c's'a'v'a'j' 's'''e'g'r'e'm'o't'u'a''''''''''''''''''''''''''a'v'i'u'q'e' 't'p'i'r'c's'a'v'a'j' 'e'h't' 'n'o'''''''''''''''''''''''n'a'h't' 'r'e't's'a'f' 'y'l'e'r'a'b' 's't'i' '-' 't'u'o' 'k'r'o'w' 'o't' 's'k'n'i'k' 'e'm'o's' 'e'v'a'h' 'y'l's'u'o'i'v'b'o' 'y'e'h't' 't'u'b' ','g'n'i'k'r'o'w' 'h'c'n'a'r'b' 'r'e't's'a'm' 'e'h't' 't'o'g' 'I' '''et. On this test the rust co'''''''y'l'n'o' '''''''''''''''''''''''''''' 't'n'e'l'a'v'i'u'q'e''''''''''''''''''''''.'t'p'i'r'c's'a'v'a'j' 'e'h't' 'n'a'h't' 'r'e't's'a'''f'B'''' 'y'l'e'r'a''''r'b' 's'i'''de performs almost''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''['''''''''[''''''''''''''''''''''''''''V'''''8'''https://github.com/automerge/automerge-rs')'/'(']''v' 'n'o' 'g'n'''''''n'g'i'n'n'u'r' 't'p'i'r'c's'a'v'a'j'''''''''''''''''''''''''''''''''''''''''''''''''' 't's'o'm'l'a''''l' 's'm'r'o'f'r'e'p' 'e'd'o'c' 't's'u'r'''''e'd'o'c' 'e'h't' 't's'e't' 's'i'h't' 'n'O''' 'w'':'''a'r''.'''''''''''''''''e'd'o'c' 'e'h't' 'd'n'a' ',''''''''''''I'''''''''''''''''.'t's'a'f' 'y'r'e'v' 's'i' '''''''''t'p'i'r'c's'a'v'a'j' ','''' 'd'n'A''''''''''p'S'(' ''n'''.'e'd'o'c' 'r'u'o' 'l'l'a' 'h't'i'w' 'n'w'o'd' 'd'e'd'a'o'l' 't'''n's'a'w' 't'i' 'f'i' ','o'g' 'd'l'u'o'c' 't'p'i'r'c's'a'v'a'j' 't's'a'f' 'w'o'h' 'f'o' 'e's'n'''''''''' 'e's'''' 'e's' 'a' 's'u' 's'e'v'i'g' '''''''''''''''''''''''''''''''''t'p'i'r'c's'a'v'a'j''''h' 't's'a'f' 'w'o'h' 't'u'o'b'a' 's'w''''''''''s'w'''''''w'l'u'o'h's' 'h'c'i'h'w' ';''''e'i'c'i'f'f'e'n'i'''''t's'a'f' 'w'o'h' 'f'o' ''''''''(' '.'''e''''''T''''''''''''''''''''''''''''''''''''''''' 't'''n'a'c' 'y'l't'c'e'r'i'd' 'g'n'i'r't's' 'a' 'o't'n'i' 'g'n'i'c'i'l'p'S' ''s'n'e's' 'a' 't'e'g' 'o'T''''''''''''''e'n'i'l'e's'a'b' 'a' 's'A'''''''' 'n'a'c' 'e'W'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e'c''''''' 'o't'n'i''i'l'p's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'l'a'c'i't'e''''i'r'o'e'h't' 'e'h't' 'e'b' 'd'l'u'o'h's' 'h'c'i'h'w' ',''.'g'n'i'r't's' 't'p'i'r'c's'a'v'a'j' 'a' 'o't' 'y'l't'c'e'r'i'd' 'd'e'i'l'p'p'a' 't's'u'j' 'e'r'a' 's't'i'd'e' 'e'h't' 'l'l'a' 'e'r'e'h'w' 'e'n'i'l'e's'a'b' 'a' 'o't' 'e'r'e'h' 't'i' 'g'n'i'r'a'p'm'o'c' 'm'''I'n''n'''''''''''''''''''''''''''It would b''''''''''''''' 'e'b'''''''''''g'n'i's'u'f'n'o'c' '''''''y'l'l'a'e'r''''''''''''''''.'g'n'o'r'w' 'r'e'p'u's' 'e'b' 'd'l'u'o'w' 't'a'h'T' 'e silly making a chart showing how text-ot is both fast and slow. Th''*'*'e difference is in the i'*'mp'*'lementation. An'''d thats true here too -'''''''''''''''''''''''''''''''''''''''''''''w'''''o'''''''''h't'o''''d'n'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '-' 'o'o't' 'e'r'e'h' 'e'u'r't' 's't'a'h't' 'd'n'A' '.'n'o'i't'a't'n'e'm'e'l'p'm'i' 'e'h't' 'n'i' 's'i' 'e'c'n'e'r'e'f'f'i'd' 'e'h'T' '.'''' ''''b' 't'o''''t'-'h' 'g'n'i'w'o'h's' 't'r'a'h'c' 'a' 'g'n'i'k'a'm' 'y'l'l'i's' 'e'b' 'd'l'u'o'w' 't'I'''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''w'o'l's' '' ' ' 's'i' 't'x'e't'-'t'o' 'd'n'a' ','t's'a'f' 's'i' 't'x'e't'-'t'O''' 't'a'h't' 'f'o' 't'r'a'h'c' 'a' 'e'd'a'm' 'u'o'y' 'f'i' 't'u'B''''''''''a'm' 'u'o'y' 'f'I'n''n''''''''''''''''''''e'r'a' '''s'p'u''''''''''''''''''' ''''''''''''''''''''''' 'y'l't'n'e'r'e'h'n'i'''' ''''.'w'o'l's' 's'i' 'g'n'i'h't'e'm'o's' 'e'v' ''o' ''r'p' 't'''n'a'c' 'u'o'y'' 'd'e'e'p's'''''''''''''''''''''''''''' 't'u'b' ','e'l'b'i's's'o'p' 's'i' 'e'd'o'c' 't's'a'f''''' 'e'h't' 'e'v'o'r'p' 'n'a'c' 'u'o'y' '-' 'o'o't' 't'a'h't' 'e'k'i'l' 'l'e'e'f' 's'k'r'a'm'h'c'n'e'B''''P' '.'e'c'n'e's'b'a''W' 'r'i'e'h't' 't'o'n''''''''''''''''''''''''t'u'o'''':''''''''''''''''''''''''''''''''''''''''''''''s'a' 'p'u' 'd'n'e' 't'h'g'i'm' 't'n'e'm'u'c'o'd' 'e'h't' 'n'e'h't' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''b' 'e'h't' 'e'r'o'f'e'b' 'o'g' '*'o't' 's'a'h'*' 'X' 'e'h't' 'e's'u'a'c'e'b' ',''''.'D'I' 'r'i'e'h't' 'n'o' 'd'e's''''e'a'b' 'm'e'h't' 't'r'o's' 't'''n''''''''''''''''''''''''''''''''''g'n'i'd'r'o'c'e'r' 'r'e't'c'a'r'a'h'c' 'y'b' 'r'e't'c'a'r'a'h'c''''''''''f'o' 'd'r'o'c'e'r''''''''''''''''''''''''''''' 'd'e's'a'b' 'e''''''''''''' 'd'''''''''''''''''''''''s'w'o'r'g' 't'n'e'm'u'c'o'd' 'e'h't' 's'a' 'n'a' 'g'i'b' 's't'e'g''e''''''g'u'h'r't' 'e'r'o'c''''''''''''''''''''.'w'o'l's''''l' 'o'o't' ''''''''''''' 't'''n'''''''''''''''''''''.'''w'o'l's' 's'i' 'e'r'u't'c'u'r't's' 'a't'a'd' 's'''''''''''''''' 'd'n'a' 's'e't'a'e'r'c'''''''''''''''''''''''''''''' 's't'c'e'j'b'o' 'y'n'a'm' 'o'o't'''''''t's' 's'e'r'o't's' 'e'g'r'e'm'o't'u'A' '' 'a''a'c' 'e'w' 'n'a'c' 's't's'e'T''Y''''''''''''''''''''' ''e'v'o'r'p'a'c'''' 'y'e'h'T''''g'n'i''''b'a''' 'g'n''''''''''''t'a'h't' 't'u'o'b'a' 'i'y'' 'a''''''''''''' 't'''n'a'c' 'u'o'Y' '.'''s'''''''''''''' '''' ''''''''''''' 'o't' 's'a'h''s''''''''''''''''''''''''.'w'o'l's' ''''''''''''''''''''''''''''''' 'f'o' 'n'o'i's'r'e'v' 'c'i'm'h't'i'r'o'g'l'a' 'e'h't' 's't'I''''''e'b' 's'y'a'w'l'a' '''l'''''''''''''''''''''''''''''''''''-' 'r'e't'a'l' 'f'o' 'e'r'o'm''''''''''''s'i' 'A'T'A'Y' '.' 'e'e's' '''l'l'''e'w' 'h'c'i'h'w' '-' '''''''''''''''''g'n'i'n'u't' '''''''''''''''''''''''''''''''n'u'r' 'r'e't'u'p'm'o'c' ''''''t'i' 'e'h't''''''''''''''''''''''''''h'c'i'h'w' 'A'T'A'Y' 'd'e'l'l'a'c' 'T'D'R'C' ''''''''''''r'a'r''''''''''y'l't'h'g'i'l's' 'b'i'l'''''''l'l'a'm's' ' 'a' 's't'n'e'm'e'l'p'm'i''''''''''''''''m'i'I'' 's'i' 'l'i'''''''''''''''automerge (v1.0.0-preview2)'''''''''m's'a'w' 'h'g'u'o'r'h't' 'n'u'r' 'o't' ''w' 'm'h't'''''RGA''a'''''''''''''''''''e'b' 'o'''''''o's' 'r'o' 't' 'd'e's'o'p'p'u's' '''a''''A'G'R' 'o'''''''''''''''''''''''''''''''t's'a'f' 't'''a'h't''''''-'-'-'n'n''' 'n'''''y''''' 'e'v'a'h''e'h't'u'r' 't'''n'd'i'd' 't'i''''d''''''','''''''''''''''' ''''''''''''''''''''''''''''''''e'l'b'a't' 's't'l'u's'e'r''''''' 'e'l'b'a't' 'y'm' 'o't' 'm'e'h't''''b' 'g'n'i'd'd'a'''''t'i'''''''''''''''''''''''''''e'l'b'a't' 'e'l't't'i'l' 'y'm' 'o't' 'm'e'h't' 'b' 'r'i'a'f' 'a'''''''''''''''''''''''''''''s't's'e't' 'y'm' 'n'i' 't'a'h't' 'n'a'h't' 'r'e'''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'e'h't' 'l'i't'n'u'''''''t'a' 's'k'r'a'm'h'c'n'e'b' 'g'n'i'd'd'a' 'n'o' 'f'f'o' 'd'l'o'h' 'l'l'''I' 'd'n'a' ';'''w'o'l's' 'n'a'r' 't'i'''''''''''''''''t'''n'd'l'u'o'c' 'I'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'a'h' 't'i' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e's'a'e'l'e'':'r' '''r'o'f' 'y'd'a''''''''''d'a'd'e'r' 's't'i' 'e'r'o'f'e'b' 't'u'o' 'k'r'o'w' 'o't' 's'k'n'i'k' 'e'm'o's' 'e'v'a'h' 'y'e'''''''n'i'h't' 't'c'e'p's'u's' 'I' '.'t'e'y' 't'i' 'g'n'i's'u' 't'n'e'm'e'v'o'r'p'm'i' 'h'c'u'm' 'g'n'i'e'e's' 't'o'n' 'm'''I''''''''''''''''' ''''' '''g'n'i''m''''t'n'e'm'o'm' 'e'h't' 't'a''''''''''''''''''''' 'r'a'l'i'm'i's' 'e'e's' 'I' 't'u'b' ',''''''''''''' 'e'h't' 'n'a'r' 'I' '.''t' ''i'r'o'g'l'a' 'n'a''''''''h't'i'w' '''''t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i's'r'e'v' 'S'J' 'e'h't' 's'a' 'e'm'a's' 'e'h't' 't's'o'm'l'a' 's'a'w' 't's'e't' 's'i'h't' 'n'i' 'e'c'n'a'm'r'o'f'r'e'p''''u'b' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 't'a'h't''''''''.''''''''''''''''''''''''' 'o's' '-' 'n'o'i's'r'e'v' 't'p'i'r'c's'a'v'a'j' 'e'h't' 'o't' 'e's'o'l'c' 'y'l'b'a'k'r'a'm'e'r''''''''''''''''''''''''''''''' 'o't' 'g'n'i'o'g' 'm'''I' '.'e'm'a's' 'e'h't''''h' 't's'o'm'l'a' 's'a'w' 'e'c'n'a'm'r''''o'f'r'e'p'''''''''''''''''''''' 'y'l'n'o''''''''''''''''r'e't's'a'f' 'y'l't'h'g'i'l's'''''''''''''g'i'l'g'''''''''''''f' 'y'l'e'r'a'b' 's'a'w' 't'i' 'd'n'a' 'k'r'a'm'h'c'n'e'b' 'y'l'r'a'e' 'n'a' 'n'a'r' 'I' '.''e'l'u'''r''' 'a' 's'''''e'r'e'h'T'''''''''''''''''s'k'r'a'm'h'c'n'e'b' 'e'b'y'a'M'''' It seems like tests - you can prove the existence of bugs, but not their absence. Benchmarks feel like that too - you can prove speed ups are poss''''''''''''''''''''''''''''''''''so'''s'e'o'd' 'e'g'r'e'm'o't'u'a' 't'a'h'w' 's't'a'h't'ible, but you can't ''*'*'prove something is inherently s'*'lo'*'w.'n'n'''s'i'x'e'''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o'i't'c'n'u'f' 's'i'h't' 'f'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i't'r'e's'n'i' 'r'o'f' ''''''s'i' 'c'i'g'o'''''''g'i'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'a' 's'c'i't'n'a'm'e's''''''''''''''''''''e'r'a' '''s'n'o'i't'a't'n'e'm'e'l'p'm'i' 'e'h't' ','s'r'e'p'a'p' 't'n'e'r'e''''i'f'f'i'd' 'y'r'e'v' 'g'n'i'e'b' 'e't'i'p's'e'D' ''''''''''''''''''''''''''l'a'c'i't'n'e'd'i'''''''''''''''''''''''''t'r'a'p'a' 'l'l'e't' 'o't' 'e'l'b''''l'i's's'o'p'm'i'''''''''a'c'i't'n'e'd'i' 't's'o'm'l'a' 'e'r'''y'e'h'T' '.'k'o'o'l' 'a' 'e'v'a'h'''''''h'a' 'o't' 't'n'a'w' 'u'o'y' 'f'i' ','e'l'i'f' 'e'm'a's' 'e'h't' 'n'i''''''''''''''' 'e'h't''''''''''.'l'a'c'i't'n'e'd''''''e'd'o'c''''''''''s'e's'a'b'e'd'o'c' 'i' 't's'o'm'l'a'''''''''''''''''''t'n'e'r'e'f'f'i'd' 'y'l't'h'g'i'l's' 's'i' 'n'o'i's'r'e'v' 's'j'y' 'e'h'T' '''''''''''h't' 't'u'b' ','s'g'u'b' 'f'o' 'e'c'n'e's'b'a' '''e'h't' 'e'v'o'r'p' 'n'a'c' 'u'o'y' '-' 's't's'e't' 'e'k'i'l' 's'm'''''' 'r'i'e'h'T''e'e's' 't'I' '?'g'n'i'v'o''''''''ode'''''''''''''' i''s '''''''''o''s ob''''i''s obviou'y'''sl''y'It''''''''''''''''e'r'o'm' 'x'0'3' 'd'n'a' ','s not exactly like-for-like -''' ver''y differen''t ''''''''''''''''''f'''''''''''''''' my implementation doesn't''''''''''''' 's'''' use''''''''''''l'a'e'r' '''''''''''y'r'a' examp'''le,''''''''''','e'c'n'a't's'n'i' ''r'b'i'l' 'e'h't' 'e'c'n'e'r'e'f'f'i'd' 'f'o' 's't'o'l' 's'a'h''''''''''''''''''''''''''''''''''''''''''''''''''''.''*'F'*'''''e'g'r''''''''''''e'c'n'e''''''''''''''''''e'l'p'm'i's' 'd'n'a' 't'e''''e'h't'e'w's'''''e'r''''''''''''''t's'u'j'''''''''''''''''''''''p'u' 's'g'n'i'h't' 'g'n'i''W'''''''''''w''' 't'a'h'''''''''''' 'd''' ''n'a' ''''w'o'n' ''n'a'e'l'c'''''''t's'a'f' 'a''t' 'w'o'N'm'm'u'g' '''''''''''''s'j'e'l'b'a't'u'm'm'i' 'm'o'r'f' 'y''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a' ','e'd'o'c' 's's'e'l' 's'e't'u'c'e'x'e' 'n'o'i't'a't'n'e'm'e'l'p'm'i''''''''''''''''''''''x'e' 'e'd'o'c' 'y'M'''s'n'o'i't'a'z'i'm'i't'p'o'o'r'c'i'm' 'e'l't't'i'l' '''' 'l'b'a'b'o'r'p'''''''''''''''''''''''''' 'o't' 'e'u'd' '''''''''''''' 'f'o' 's'k'r'i'u'q' 't's''.''''' ','h'O'u'j' 'y'l'b'a'b'o'r'p'''e'h' '''''''r'''''''''''''''''''''''''''''''''''''''''''''''''''''''')'s'j'e'l'b'a't'u'm'm'i' 'd'n'a'(' '''''''s'n'o'i't'a't'n'e'm'e'l'p'm'i'''''''m'i' ''''''''' 'f'o' 'k'c'a'l' 's'''e'g'r'e'm'o't'u'a' 't's'u'j' 's'i'''''''''''''''y'l'b'a'b'o'r'p' 'n'a'c''''''''''''''''''''''''''''o't' 'e'l'b'''''''e'n'o'l'a' 'a'''''''t'a't'u'b'i'r't't'a' 'y'l'b'a'b'o'r'p' 's'i'''''''e'l'p'm'''''''''' 'g'n'i'e'b'''''w'o'l's''''t's'u'j' ''i's''e'p'u's' ''''''''g''''''' 'f'o' 'l'''''''e'd'o'''''''''''''''n'w'o'd' ''''''''''w'o'd''c' 's''''l'a'''''''''''''''w'o'l's' ''''' 'g'n'i'h''''''''''''''''''r'e'w'o'l's' 's'e'o'd' ''t'y'r'e'v'e''n'i'k'a'm' '''r''''''e'e'f'f'i'd' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'e'r'u't'c'u''''''''''''''e'c'n'a'm'r'o'f'r'e'p' ''r't's' 'a't'a'd''''''''''''''e'g'r'e'm'o't'u'a' 'r'o'f' '' 't'e'e'w's' ''' ''s''''''''''''''''''''''s'k'r'o'w' 'e''''''''''e'k'r'o'w'e' 'h't' 'p'u' 'g'n'i'm'm'u'g' 'i'h't' 'o't' 't'a'h't' 'f'o' 'l'l'a' 'e't'u'b'i'r't't'a' '''''''''''''''''''''''h'c'a'o'r'p'p'a' 's'''n'i'v'e'K' 'e'v'i'g'''''''''''''''''a' 't'A'''''''''''''''''''''''t' 'e'r'a''''s' 's'r'e'b'm'u''' ''''''n' 'e'h'T''''''s'e'k'a't' ''''''''' 'a''''''''''''''''y'r'''''s'e'k''''r'a't''''''''s'i' 's'i'h'T''e'v''''''''''''''''''''t'r'''a'e'h'''''''''''''''''''t'r'a'e'h' 'r''''''''''''s'e'k'a't' 't'i' 'u'o'y' 'f'o' 't'a'e'b' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'k'i'l' 'e'b' 'd'l'u'o''''''t'''u'B' '.'''w'''''''''''''''''''''''''''''''.'h't'e'e't' '''r'u'o'y' 'h's'u'r'b' 'o't' 'n'e'k'a't' 'e'm'i't'''''''''''y'l'l'a'u't'c'a' ':''''''''' 's'i'''''''''y'l'l'a'u't'c'a'' 'e'h't' 'd'n''''''''''''''''''' 'h'c'u'o'c' 'e'h't' 'r'e'd'n'''U'a' ','t'a'e'b' 't'''r'''a'e''''''''''''''k''''''''''''''''s'i'h't' 'x'i'f' 'n'a'c' 'e'W' '''' ''''''''''''' 'e'W' ''r'o'w' 'f'o' 't'o'''''''''''''''''''''''''''''''''''''''''' 'y'm' 'f'o'''''''''''''''''''''''''''''e'w' 'g'n'i'h't'y'r'e'v'e' 's'u'''''''e'm'''''s'u' 'l'l'e't''''n'o'c' 'd'l'u'o'w'''''''''''e'm' 's'l'l'e't' ' 'd'a'e''''''''w'o'n'k' 'o't' ''r' 'e'l'g'n'i's' 'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'L'')'d'e'e'n' '''I' 'n'o'i't'a'm'r'o'f'n'i' '''''''''''''''''''''''''''n'o's'a'e'r' 's'i'h't' 'y'l't'c'a'x'e''''''''''''''''''''''' 'a''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''''''''''''''' 't'u'b' ','g'n'i't'i'd'e'''''''''''''''''''o'o't' 's'e's'a'c' 'r'e'h't'o' 'n'i' ''''d'e'e'n''''' 't'x'e't' 'n'e'h'w'''''''''''''''u'c'o'd' 't'x'e't' 'a' 'n'i' 'h'c'u'm''''''''''m'u'n' 'n'''' 'e'p'p'a'h' 't'''n's'e'o'd' 's'i'h'T's'o'c' '''''e'c'n'a'm'r'o'f'r'e'p' 'r'a'e'n'i'l' 's'a'h' 's'j'y' 'n'i' 'h'c'i'h'w' ',''''And '''''''''''n'o's'a'e'r' 's'i'h't' 'r'o'f' 'e'h't' 'l'l'a' 's'a'h' 't'i' ','t's'i'l' 'y'r'e'c'o'r'g' 'y'm' 'p'u' 'k'c'i'p' 'I' 'n'e'h'w' 'o'S'('''''''''''''''''''''''''''''''''g'n'i't'i'd'e'''''''''''m'a''''m'r'g'o'r'p' 'e'h't'' 't'x'e't' 'n'a'h't' 'r'e'h't'o' 's'g'n'i'h't''''h' ''' ''''''' 'f'o' 't'o'a'l' 'a'h' 'e'''''''''''''''''''' 'g'n'i'o'd' 's'e'k'''a'm' 's'i'h't''''''''''''''''''''''''''''''''''''''''''''''.'e'r'o'h'c' 'a' 'e'b' 'l'l'i'w' 'g'n'i'p'p'o'h's' 'y'r'e'c'o'r'g' 'e'h't' 'g'n'i'o'd'''''''''''''' 'e''''o'h't' 'o't' 'g'n'i'o'g'l'g'n'i's' 'a' 'n'e'e'w't'e'b' 'e'c'n'e'r'e'f'f'i'd' 'e'h't''''''''''''''''''''''s'i''''''''l'o'v'n'i''''''''''s'e'b'i'r'c's'e'd' 't's'i'l' 'g'n'i'p'p'o'h's' 'r'u'o'y''''''''''''''''''''r'u'o'y' 't'u'o' 'g'n'i'r'u'g'i'f' 's'''' 't'I''''''''''''''''''''''''''''''''' 's'e'c'a'l'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n''''''''''y'l'l'a'u't'c'a' 'i'n'o'i't'n'e'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y'u'b'''''''y'u' 'o't' 't'a'h'w' 't'u'o' 'e'r'u'g'i'f'''' 'o'g' '''' 'o't' 'e'm'i't' 'g'n'o'l' 'a' 'u'o'y' 'e'k'a't' 'o't' 'g'n'i'o'g' 's't'i'''''''''''''''''''''r'u'o'y' 'h'g'u'o'r'h't' ''''''''''''''''''''.'e't's'a'p'h't'o'o't' 'd'e'e'n' 'u'o'y' 'g'n'i'y'a's' 'e't'o'n' 'e'l't't'i'l' 'a' 's'i' 'e'g'd'i'r'f' 'r'u'o'y' 'f'o' 'p'o't' 'n'O''''''''''''''''' 'o't' 'e'v'a'h' 'u'o'y' 'd'n'A''''.'n'o' 'o's' 'd'n'a' ','''e'g'd'i'r'f''''r' 'e'h't' 'f'o' 'p'o't' 'n'O''' ','''h'c'u'o'c' 'e'h't' 'r'e'd'n'U''' '-' '' 'f'o' 't's'i'l' 'a' 'e'v'a'h' 't's'u'j' 'u'o'Y'''T' ''''''''''''''s'e'r'i'u'q'e'r' 't's'r'i'f''e''a' '' '''d'n'A''' ''''''''t'h'g'i'm'''''''' 'c' ''.'l'''l'u'f' 'e'k'a't' 'd'l'u'o'''''''''''''''''e'l'a'c's' 'n'a'm'u'h' 'o't' '''''''''''''''''''''''''''''''''' 'e'n'i'g'a'm'i' 'n'a'c' 'e'w'''''''''''''''''!'.''''''!'*'e'g'r'e'm'o't'u'a' 'n'a'h't' 'r'e't's'a'f' 'x'0'0':''3'*' '''s't'I' '.''''c' 'I' 'h's'i'w' 'I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a't'a'd' 'e'h't' 't'u'o'b'a' ''''''' '.''v'(''''''s'i'h''')''t' 'm'o'r'f' 'e'd'u'l'c'n'o'c' 'n'a'c' 'e'w' 'h'c'u'm' 'o's' 'y'l'n'o' 's'''e'r'e'h't' 'd'n'i'm' 'n'i' 'r'a'e'b' '' (v13.''5.5)''''''''''5'''''''''''''''''''.'5'.'3'1' '@' 't'u'B'(''''('''''''''''''''''''''''''''''''''''''''''''''''''''''n'.'s'j'e'l'b'a't'u'm'm'i' 's'i' 'y'l'l'a'e'r' 'e'c'n'e'r'e'f'f'i'd' 't'a'h't' 'f'o' 't'o'l' 'a' 't'u'B'n'''''''''g'n'i's'u' 't'o'n' 'm'''I' 'e'm'o't'u'a' 'm'o'r'f' 't'n'e'r'e'f'f'i'd' 'y'r'e'v''' 'y'l''''y's'u'o'i'v'b'o' 's'i''''''''''''''''b'o' 's'o' 'e's'a'b''''' 's'i' 'e'd'o'c' 'y''''''''''e'd'o'M''''''''''''''''''''''''''''''''''''''t'''n'o'd' 's'r'e's'u' 'r'e'v'e'n'e'h'w'''''''h'e''''''' 'l'i't'n'u' 'e'b' 'l'l'i'w' 't'i' 'd'n'A'(' ''r'p''''''''''''g'n'i'w'o'h's' 'y'l'l'a'u't'c'a''' 'I' 'd'n'A'n'n'''' '.'y'd'o'b'o'n' 's'a'w' 'I' ''''i'c''''''''''''''''c'e'n'c'i's' 'r'e't'u'p'm'o'c'''''''''''''''e'l'p'o'e'p' 'e'c'n'e'i'c's' 't'r'a'm's' 'e'h't' 'f'o' 'e'n'o'n''''''''''''''' 'y'l'l'a'e'r''''''''''''''''''.'t'a'h't''''''.'t'a't'h' 't'u'o'b'a' 'd'e'r'a'c' 'y'd'o'b'o'n' 'e'k'i'l' 't'l'e'f' 't'i''''I'''''o'b'o'n' '''''''''' '-' 't'u'b' 'e'd'o'c' 'g'n'i'k'r'o'w'''''' 'e'm'o's' 'd'a'h' 'I' 's' 'k'r'a'm'h'c'n'e'b''''''d''''e'e'p's' 'e's'e'h't' 't'a''''''''''y'd'o'b'y'r'e'v'e' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('''''''''''''''''''')'.'.'''.'e''''''m'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'g'n'i'k'r'o'w' 't'i'g' 'n'i' 'n'o'i's'r'e'v' 'e'h't' 't'e'g' 't'''n'd'l'u'o'c' 'I''''''''''' 't'''n'e'v'a'h' 'I' 't'u'b' ','r'e't's'a'f' 'x'5' 't'u'o'''*'*'b'''''''''*''a'*'' 's't'i' 'd'l'o't' 'n'e'e'b' 'e'v'''I' ''d'o'c' 'g'n'i'k'r'o'w' 't's'u'J' '.'s'm'i'a'l'c' 'y'm' 'g'n'i'y'f'i't's'u'j' 'r'e'p'a'p' 'd'e'h's'i'l'b'u'p'''''''''''' 'c'i'f'i't'n'e'i'c's' 'a' 'e'v'a'h' 't'''n'd'i'd' 'I' '.''''''' ';''''''' ','y'd'o'b'o'n' 's'a'w' '''''''''''''''' 'a' 'e'v'a'h' 't'''n'd'i'd' 'I' 't'u'b' '-' ''''-'h't''')'y'l'd'e't'''''''''''''''''''''t'u'o'W''b'a' 'k'n'i'h't' 'I' 't'a'h'w''n'i'o'p'(' ''g'n'i'd'n'e's' flipping me a link to the paper and asking me about it. Because, written up as Published Science Paper it makes peop'N''o'o'''''''n'''''''''''''l'a'e'r'''''''''''''''''''''''''''''''''''''!'e'm' 'e'v'e'i'l'e'b' 'e's'a'e'l'P' '!'t'h'g'i'r''''''''''''''''''m'''I' '!'l'a'e''''''''''' 'n'a'c' 'e'w' 'd'n'A''r' 't'''n's'i' 'e'c'n'e'i'c's' 'e'h'T''''''''i'c's' 'e'h't' ''' ''','o'S'le think this is a Fact Of The Un''n'i'iverse rather than an implementation detail'''''''''''''''''''''''''''''''''''''''''''''''''.'n''r'e'h'c'r'a'e's'e'r' 'd'e'k'r'o'w'r'e'v'o' 'n'''' 'a' 'y'b' 'n'e't''''e't'i'r'w' 'e'd'o'c' 'e'm'o's' 'f'o'''''''''''' 'e'm'o's' 'n'i' of so'''''''''''''''''''n'o'o's' 'e'e's' 'l'l'''e'w' 's'a' ','m'n'''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'l'p'm'I''''''''''k'a'M'''''''''''''s'T'D'R'C' 'g'n'i'k'a'M''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''w''' ','e's'u'a'c'e'B''''''''''e'B'?''Written up as Publ''ished S''''''''''''''''''''''''''''''''t'n'e''''n'e'r'e'f'f'i'd' 'd'n'A'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'm'o's' 'f'o' 'l'i'a't'e'd' 'n'o'i't'a't'n'e'm'e'l'p'm'i''''''''''''''e'''''''''n'e'e''''g'n'i'''b''' 'e'v'''d'a'c'e'd' 'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'l'b''''''''''''''''''' 'd'n'a' 'e't'o'r'w''''''''e't'o'r'w'e'r''' 'e'h'd'n'a' ' run''''-' ''''''''''''''''a' 's'a'w' 'e'r'e'h't' 'f'I'a'k'''''''''t'i'm'd'a' 'o't' ''r''''r'o'w'n'u' 'd'n'a' 'w'o'l's' 'e'b' 's'''''''''''''''''''''''''''''''''''''''''' 'e'h't'''''''''''''''''''''''''''''''''''''''n'i'v'e'''''''v'E'K' 'e'r'o'd'a' 'd'l'u'o'w' 'y'e'h't''''''''''''''''''''''''''''''''''''.'n'o' 's'l'l'e'b' 'h't'i'w' 'e'r'e'h't' 'e'b' 'd'l'u'o'w' 'n'i'v'e'K' ','y't'i'n'u'm'm'o'c' '''''''''g'n'i'n'n'u'r'd'e'e'p's' 'f'o' 'n'o'i's'r'e'v' 'r'e'm'm'a'r'g'o'r'p''''''''''''' 'g'n'i'm'm'a'r'g'o'r'p' 'a' 's'a'w' 'e'r'e'h't' 'f'I' ''y'a'w'l'a' 'o't' 'd'e'm'o'o'd' 'e'r'e'w' 'y'e'h't' 't'a'h'T' '.'s'T'D'R'C''''e'd' 'n'o'i't'a'n't'e'm'e'l'p'm'i' 'n'''' 'a' 'n'a'h't' 'r'e'h't'a'r' 'e's'r'e'v'i'n'U' 'e'h'T' 'f'O''''''''''''''' 'a' 'n'a'h't' 'r'e'h't'a'r' 't'c'a'F' 'a' 's'i' 'c'''''''''''''e'd'o'c' 's'i'h't' 'f'o' 'ience Paper it makes people think thisn' '''''' 'e's'u'a'c'e'b'n'o' 'g'n'''''''''''''''''w' 'r'e'p'a'p' 'r'i'e'h't' 'n'I'''''''''''''''''w''' 't'u'o' 's'n'r'u't' '''t'I'i'o'g''''' 's'a'w' 't'a'h'w' 'e'e's' 'o't' 'r'e'p'a'p' 'e'h't' 't'a''''''''['''''''''''''''''''''e'r'e'h' '''(https://josephg.com/blog/crdts-are-the-future/''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'e'y' 't'a'h'''''''''''''''''''''''''''''''''' 's'r'e'''''''''''''''''''n'i' 'n'o'i't'c'n'u'f' 't'r'e's'n'i'p'a'p' 'c'i''''''''''''''')'A'T'A'Y'(' 'T'D'R'C'''''''R'c' '''' 's'''m'e'd'a'c'a' 'n'i' 't'u'o'b'a' 'd'a'e'r' 'u'o'y''''''''' 'y'a'd'o't''t' 't'u'o'b'a' 'k'l'a't' 'o't' 'y'd'a'e'r' 't'o'n' 'm'''I' 't'u'b' '-' 'e'r'a'w't'f'o's' 'r'u'o' 'l'l'a'''''''''''''''''''f'o's''''f' 'f'o' 's'd'n'i'k' 'r'e'h't'o' 'e'b'y'a'm' 'd'n'A' '.')')'(']''y'h's'i'f' 's'a'w' 'g'n'i'h't'e'm'o's' '-' ''''''''''''''''''''''''''''''''''''''''p'''p''''''''''''''''''''''''''''''''''''''''''n''''t'n'e'm'e'l'p'm'i' ''''''''''''s''''''''''r'i'e'h't''''''''''''''''r'a''''''''''''''''''''''''' 'd'e'h's'i'l'''''''''''''''''''''''''''s'i'h't' 'k'n'i'h't' 'e'l'''''''''''''''''''n'n'a'm'p'p'e'l'K' 'n'i't'r'a'M' '''' ''p'o'e'p' 's'e'k'a'm' 't'i' ''b'u'''''''''''''i'l'b'U'P'''''''b'u''''''''''''''r'e'p'a'P' 'e'c'n'e'i'c'S' 's'a'''''''''''''''''''''''''''''''''''''''''''''''s't'e's'l'l'i'k's' 't'n'e'r'e'f'f'i'd' 'h't'i'w' 'e'l'p'o'e'p' 'e'v'l'o'v'n'i' '''''''''''''''''''e'b' 'e'r''''' '''p'u'''''' 'a' 'n'i' 'n'e't't'i'r'W' ''l'u'c'i't'r'a'p' 's'i'h't''''''''''''''''''''n'o'i't'a't'n'e'm'e'l'p'm'i' '''''''''''''')'s'm'h't'i'r'o'g'l'a' ''''''' 'f'''o' 'l'l'a''T''''''''''y'l't'n'e'r'r'u'c' ''O' 'd'n'a' 'T'D'R'C' 'h't'i'''''d'r'a'w'w'(' ''d'l'u'o'c' ''''t'u'''''''''' 't'a'h't' 'e'k'i'l''''''''' 'd'''''u'o'y' '''l'u'o'w''B'u'o'''''''''''''' 'o't' 'd'e'e'n' 'e'w'y' 's''''''''''''''''''''''''''''''''''''''''''''''''''y'r'o'm'e''''a'm' 'n'i'a'm' 'o't' 'd'''''''''''''''''''''''''''''''''''''''''''''d'l'u'o'w' 'e'w' 'e'b'y'a'm''''''''''''''''''''''''s'i' 'h'c'i'h'w'''''' ''''r'e'p'''r'o' ','s'm'3'2' 'n''''''e'm'o'h' 'i' 's'n'o'i't'a''''''s''''''''''''''e'v'a'h'''''''''''''e'v'h'a' 'l'l'i't's' 'd'''I''t'''i'd'e'r'e'p'o' '0'0'0' '0'6'2' 'g'n'i's's'e'c'o'r'p' 'e'r'''e'W' '''''''''''''''''''''''' 'l'l'u'f'''''''''''''''''' 'k'r'a'm'h'c'n'e'b'''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''!'p'u' ''''''' 'u'd'd'a' 't'''n'o'd''' 's'r'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'v'a'e'l'r'e't'n'i' 'e'r'a' 's'e't'a'd'p'u' 'e'e'r't'-'b'''p'u' 'e'h't' 'l'l'a' 'e's'u'a'c'e'b' ','g'n'i'h's'a'r'h't' ''b'm'u'n' 'e's'o'''h't' 't'u'B','''f'o' 'e'c'a'r't' 'g'n'i't'i'd'e' 'n'a''''''' 'a''''''''''''''''''''''''''''''r' ''e's'u' 'e'l'g'n'i's' 'a' 'm'o'r'f' ''''''''''''''''''S' '.'s'n'o'i't'a'r'e'p'o' '0'0'0' '0'6''''7'2' 's's'e'c'o'r'p' 'o't' 's'''''''s' 'e'k'a't' 't'i' 'e'm'i't' 'h'c'u'm' 'w'o'h' 'e'b'i'r'c's'e'd' 's'r'e'b'm'u'n''''t' 'e'c'n'a'm''''a'r'o'f'r'e'p' 'e's'e'h't' ','r'e'b'm'e'm'e'R' ''a'e'''''''e'a'r' 'h'c'a'e' 'h't'i'w' 'e'l'b'i's's'o'p' 's'':'a' 'h'c'u''' '''':''''m' 's'a''''''''''o'y' 'y'a'w'''''''''''''''e'l'p'm'i's' ''''s''''''''s''''''''t'o'l' 'a' ''m'''h't'i'r'o'g'' '''l'''n'n'''''a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''''''''''''''''''''''''' '''y'b' 'd'e's'u'a'c' '''''''''''''g'''''''''''''''''' 't'h'g'i'r'''''''''''''t'i'r'w' 'm'''I' 'f'I'''''l''' 't'I'n'i'h't'e'm'o's' 'r'o' ''''y'l'b'a'b'o'r'p' 's'i''''''''''''''''''''''''''''''''y'a'w' 'e'h't' 'l'l'a' 'e'c'n'a'm'r'o'f'r'e'p' ''''''''r'e'p' 'y'm' 'e'c'n'e'r'e'f'f'i'd' 'e'h'T''''t'o'n' 's't'i' 't'u'B' '.')'s'm'3'2'(' 'e'e'r't'-'b' 'y'm' 'g'n'i'''' 't'a'd'p'u'''' 'n'i' 't'n'e'p's' 'e'm'i't' 'e'h't' '+' ')'s'm'9'2'(' 'y'e'p'o'r' 'n'i' 't'n'e'p's' 'e'm'i't' 'e'h't' 'f'o' 'm'u's' 'e'h't' 'e'b' 'd'l'u'o'h's'''''''' 'e'h't' 's'i' ')'s'm'5'6'(' 'e'c'n'a'm'r'o'f'r'e'p' 't's'u'r' 'e'h'T'''''''''''''''''''''''s'e'i'r't'n'e'''''''''''''''''''''''''' 'n'o'i't'a't'''''''t'e'n'e'm'''''''m'e'e'l'p'm'i' 't's'u'r' 'e'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'u''+'''''''''''''''n'a'h't' 's's'e'l' ''''''' 's's'i'''b' '-' 'e'c'n'a'm'r'o'f'r'e'p' 't's'u'r' 'r'u'o' 'o't' 'p'u' 'd'd'a' 'd'l'u'o'h's' 's'w'o'r' 'o'w't' 'm'o't't'o'b' 'e'h'T''''''''''''''''d'd'a' 'd'l'u'o'h's' 'y'e'h'T' '''''''t'''''''t'n''o't''n'a'w' 'I' '' '.'.' 't'u'b' 'd'' 'r'a'w'k'w''''t'i' 'a' '''s'''''''i' 's'i'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''' ''''''' '''''''''!'s'e'k'''''''''''''''''''''''''''' ','y'a'w' 'e'h't' 'y'b' ','h'c'i'h'w'''''''m''' ''''''','n'a'e'm' 'I'''''''''''''''''''''''''''?'e'r'e'h' ''''?'n'o' 'g'n'i'o'g' 's't'a'h'w' '-' ''''!'i'O's'a'w' 't'i''''e'd'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'o't' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c''''c' 't'r'o'p'p'u's' 'o't' 'k'r'o'w' 'a'r't'x'e' 'f'o' 't'o'l' 'e'l'o'h'w' 'a'''''''''' 'e'r'o'm' 'y'a'w' 'g'n'i'o'd' 's't'i' 'd'n'a' ','y'l't'c'e'r'i'd' ''!''''''o'''''c'''' ','l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''s''''''''''')'!'(' '.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'')'n'o'i's'r'e'v' 'e'v'i't'a'n' 'e''''s'y'a's'''''''''''''''''''''''''''''s'm'''h't'i'r'o'g'l'a' 'T'O' 'd'n'a' 's'T'D'R'C' 'd'i'a's''''h't' 's'''a' 'e'm'a's' 'e'h't' 'e'b' 'd'l'u'o'h's' 't'I' '.'e'g'a's'u' 'y'r'o'm'e'm' 'm's'a'w''''''''''''''''' 'n'i'''''''''''''''''''''''''''''''''''''''' 'f'o' 'e'c'n'a'm'r'o'f'r'e'p' 'e'h't' 'h't'i'w' 'e't'e'p'm'o'c' 'n'a'c' 'e'w''' 'e'''''''*''''''g''guessing''''''''s'e's's'e'u'g'a's'u' 'y'r'o'm'e'm' 'e'r'u's'a'e'''''''*'''m' 'o''''t' 'w'o'h' 'a'e'd'i' 'o'n' 'e'v'a'h' 'I'('n''n'n''''''''''''''''d''n'''n''''e'v''''''d'n'u'o'r'a''o'r'p'm'i' 't'''n's'a'h''''''''''s'h'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'i' 'p'u'''''*''''''''''*''.'g'n'i'h't'y'n'a' 'n''''''' 's'i' 's'i'h't' '''''''''''''''''''''''''''e'r'''y'e'h't' ','d'r'a'g'e'r' 't'a'h't' 'n'i' 'd'n'A''e'd''''''''''t' 'e'o'c''''d' 'n'a'c' 'e'W' '.'s'y'a'd' 'e's'e'h't' ''''''''''''''''''''''' 'e'W' 'e'''''''''''''''''''''''''o't''''''''''''''''''''''''' 'y'l'e'd'u'r'''''''''''','''t''' ''a' 'd'e'h'g'u'a'l' 's'e'm'i't'e'm'o's' 'g'n'i'e'b'' 'l'''a'c'i't'n'e'd'i' 't''''''''''i't' 's'o'm'l'a' 's'i'c'n'a'''''''t's'o'm'''''''o's'E''l'a' ''m'r'o'f'r'e'p' 's't'i''' 'e's''v'o'r'p'm'i' 'o't' 'e'l'b'a' 'n'e'e'b''''''''''''''''.''''''''''''''''''''''''''''' 'g'n'i'h't'y'n'a' 'd'n'i'f''''i'u'q' 'n'a'c' 'e'w' 'o's''''w' ','''''''''''''''''''''''''''''' '''h'''t'r'a'e' 'n'o'''''''''''''''''I took a closer '''''''d'n'''''''''''''''''s't'r'e's'n'i' 'e's'o'h't' 'f'o'A' ''''''''o''' '-' 'h'u'D''O'.'look and it seemed like it w'''' 'u'o'''''''''s'e'm'i't'e'm'o's''y'''''''''''''''''t'n'e'm'u'c'o'd' 'e''''':''''e'''''''d'''e' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'a' 'e't'o'r'w' '''''''''''''''''''''''''''''''''''''''''''''''''e't'o'r'w'''''''w' 'y'e'h't' 't'u'B''O' '.')'s'l'a'c'i's'u'm' 's'u'o'm'a'f' 'f'o' 'h'c'n'u'b' 'a' 'e'd'a'm' 'y'e'h't'''''''''''''''''''r'o'f' 's'u'o'm'a'f' 'e'r'''y'e'h't''''t'(''''''''y'd'o'b''o'd''''' 't'a' 's't'n'u'o'c''''''''''n'u'o' 'r'e't'c'a'r'a'h'c' 'e'h't'''''''''r'e't'f'a' ''''''''''''e'h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'W''''y'a'w'y'n'a' 'o'o't' 't's'a'f' 't'a'h't' 'e'd'a'm' 'I' 't'u'''' 'g'e'b' ''','t's'e't' 's'i'h't' 'n'i' 's'r'e''''*'*'''''' 'e'l't't'i'l''''''''''''''''''*'*'''''''''''''' '!'c'i'n'o'r'i' 'w'o'''!'?'''H''Who could have guessed!''''''''!'c'i'n'o'r'I'''''' 'e'e'r't'-''*'*''b' 'e'h't''''''''''*''''*''e'''p' 'e't'o'''''''''''''.'D'I' 'y'b' 'h'c'r'a'e's''m'e'r'''''''''''''''-''''''t's'u'j' ' 'p'l'e'h' ''*'*''t'h'g'i'm' 't'I'' 'm'o'r'f'''''''''*'' '*''s't'i'd'e' 'e'g'r'e'm' 'r'e'v'e'n' 'e'W''It doesn't come into play here, but w''''W'''a''''S''''A' ''t'o'o'r' 'e''''''''''''''''o'o'r'e' 'h't' 'o't' 'p'u' 'y'a'w' 'e'h't' 'l'l'a' ','t'n'e'r'a'p' 's't'i' 'd'n'a' ','t'n'e'r'a'p' 's't'i' 'n'e'h't' ','f'a'e'l' 'a' 'e't'a'd'p'u' 'e'W' 'h't' 'o't'n'i''as amateur'''''''''''''''''''''''''''''''k'n'''''''''''''''''''''''''''''')'s'r'''''''''''''''''''''''''''''''''''''''' 'e'l'o'h'w''''''''''''''''''''''''''''''''''s'e'z'i's' ''''''''k'r'o'w'''''l'l'e'w' '' 'o't' ''t'n'e'r'e''''''''''''y'l'l'i's' '''''''''''''''''''''''''''''''''''''d'e'i'r't'''''''''''''''''f'o'''''''''''''''''''w'o'l's' 'y't't'e'r'p' 'e'r'a' ' 's't'o'l' 't'a'h't'''''''''''''''''''''''''''''' 'w'o'h' 'l'l'a' 's'u' 'l'l'e't' 'o't' 'd'e't'r'o'p'o'P''''r'p''S''''''''''''''''''''''i'''''''''''''''''''''.'W''*'''*'''g'n'o'r'w' 's'a'w' 'r'e'p'''''''r'e'*''a'p'''''*'a' 'e'h't' '''' '''''''''''''''''''''''''''''''''''a' ''''''''''''''''''e'k'i'l' ''''''''''''''''''''''''''g'n'o'r'w' 'f'o' 'd'n'i'k' '''''''s''T'g'n'i'r't's' 'e'v'i't'a'n' 'g'n'i's'u' 'e'r'e'w' 'u'o'y' 'k'n'i'h't' 'd'''u'o'y' 't's'a'f' 'o's' 'n'u'r'''t'u'B' It turns out we c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'i' '''s'*''t''*'I''e'k'a't's'i'm' 'r'i'e'h'T''''s't'I' '.'w'o'n' 'r'e'p''*'a'p'''''''''''e'r'''y'e'h'T' '.'*' 't'a'h't' 'e't'a'i'c'e'r'p'p'a' 'f'o' 't'r'o's' '''''''''''' 'f'o' 't'r'o's' 'm'''I' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''o'S'n'''''''e'l'p'o'e'p' ''''o'i't'a'r'e'p'o' '''''''''''''''r'e'p'a'p' 't'a'h't' '''''''''''e'r''database'''''' 'g'n'i's'u' '''e'w''''''g'n'o''' ''r'w' 'y'e'h'T''''n'i' 'g'n'i'r't's' 'e'v'i't'a'n' 's'a' '''''t'a'h'w' ''t's'a'f' 's'a''''''''''''''*'''''''''''*'''''''''''' 'o't' 'm'e'e'''s''''''k'n'i'h't' 'e'l'p'o'e'p' 'e'm'o's' 't'a'h'w'''''e'm'o's'''''''''''''''''''''''' ','d'l'o't' 'n'e'e'b' 'e'v'''I' 't'a'h'w' 'e't'i'p's'e'd'' 't'u'o'b'a' 'm'e'h't' 'e'k'a'm' 'n'a'c' 'e'W' '.'''''''''t'u'o'b'a''''k'i'l' '-' 't's'a'f' 'y'z'a'r'c' 'm'e'h't' 'e'k'a'm' 'n'a'c' 'e'W' '.'t's'a'f'an make CRDTs work almost as fast as editing a string. '''l''''l'l'e't''''''''e'l'p'o'e'p' ' 'o't' 'd'e'm'i'a'l'c''''''''''''[''l'l'a' 's'u' 'd'''https://en.wikipedia.org/wiki/Gilbert_and_Sulliva')'n'(']'''''''r'e'p'a'p'l'o't''''''''''''''''''''''''''''''''''''''''''''''''''s'i' 'h't'u'r't' '''''''''''''a' 's'd'e'e'n'''''''''''''''''''''''m'a'e'r'd' 't'a'h't' ''''''''''''''''''''''d'e'v'e'i'h'c'a' 'e'b' ''''b'''''''''''''''''''''''''''''''y'e'h't' 'n'e'h'w' 't's'L'''''t''''l'a' 'e'b' 'k'''''''''''''''''''''''''''''''''''''''''''''''s'c'i'r'y'l' 'e'h't' ''''''''''''''''''''''''''''''''''''''''''''''''''''''r''''''''''''''''a' 'd'e'r''''''''' 'd'e'd'e'e'n''a'h''''''e'b' 'o't' ''s' '''y'e'h'T'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''E'e''''g'n'o'l'a' 'e'k'a'm' 'd'l'u'o'c' 'm'e'h't' 'f'o''' '''e'n'o'''''''o'n' 'o'n' 'g'n''And yet''''t'u'B'i'h't'e'm'o's' 'e'd'a'm' 'y'e'h't' 'r'e'h't'e'g'o'T' '.'t'i' ''''e'n'i'g'n'e' 'e'h't' 'r'e'h't'o' 'e'h't' ','r'e'l'l'e't'y'r'o't's' 'e'h't' 's'a'w' 'y'u'g' 'e'''' 'n'o' '-' ''r'e'h't'o' 'e'h't' ','c'i's'u'm' 'e'h't' 'd'i'd' 'y'u'g' 'e'n'o' '-' 'r'o'w' 'n'a'c' 's'n'o'i't'a'r'o'b'a'l'l'o'c' 'e's'o'h't' 'd'n'A' '.''''''''''''''''''''''''!'d'e's's'e'u'g' 'e'v'a'h' 'd'l'u'o'c' 'o'h'W' '''' 'k'r'o'w' ''e'h't' 't'u'B''And sometimes the best collaborations aren't between peers. Instead they look like Gilbert & Sullivan. Or Jobs and Wozniak. The same love, and the same dream but totally different skill sets brought together brought together to achieve something no one of us could achieve on our own.''nn'n''''''''''''l'l'e'w' 'y't't'e'r'p' '''''''''''''''''' 'd'n'a' 'r'e't's'a'f'''''''''''''''''''''''''''''''.''''d'n'A'''''''''''''''''''' 't'a'h'w' 'r'e't't'a'm''them'''s'u' 'o'n' ',''''.'k'o' 's't'a'h't' 'd'n'A' '''' ''''''''''''''''''''''' 'a' ''.''''''''''''''''''''''' 'y'l'l'a'n'i'f' ''''''' 's'a'w''' 'r'e'p'a'p' 't'a'h't' 'o'S''''''g''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'n'o' 'o'n''''''''''''''''''''''''''''''''''''''n'w'o' 'r'u'o' 'n'o' 'e'v'e'i'h'c'a' 'd'l'u'o'c' 's'u' 'f'o' 'e'n'o'n' 'g'n'i'h't'e'm'o's' 'e'v'e'i'h'c'a' 'o't' 'r'e'h't'e'g'o't' 't'h'g'u'o'r'b' 'r'e'h't'e'g'o't' 't'h'g'u'o'r'b' ''n'i't'i'd'e'''''''''g'n'i'r't's' 'a' 's'a' 't's'a'f' 's'a' 't's'o'm'l'a' 'k'r'o'w'''''f' 's'a' ''''''''''''' 't's''''''''''''''''''''''''''''''''''''''''''''''t'''''t'a'h'T''''''''''''''''''''''''''t'n'e'm'o'm' 't'a'h't' 'n'i' 'd'n'A' ''''''''''''''''''''a'c'a' 't'a'h't' 's'n'''''''s'k'a'''''''''''''''''''' ''''m''''h'g''t'a''u'o'h't' 'n',''''''e'v'e' ','t'u'B'''e''''a'm' 't'a'h'''''t'e'y' 't' 'd'n'A'i' 't'u'o'b'a''''''''''''''''''''''''''''''','d'e't'n'''''n'e'v'e' ''a'w'''''''''''.'p'l'e'h' 'o't' '' 'y'l'l'a'e'r' 'I' 'k's'a't' 'a' 'h't'i'w' '' '''''''''''' 'y'r't' 't'''n'd'i'd'r'''''''''''''''''''''''''''''.'t''Oops''''''''''''''''c''' 't'u'o' 'd'e'n'r'u't' ''''''' 'e'b''''''' 'e' 'o't't'I' '!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''u' 'f'o' 'l'l'a' 'n'e'e'w't'e'b' ''.'n'o'i't'a'r'o'b'a'l'l'o'c' 'a' 'd'e'd'e'e'n' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'C' ''i' 'o't' 's'r'e'h'c'r'a'e's'e'r' 'e'h't' 't'f'e'l' 'I''''e'v'e'l'c' 't'i'b' 'a' 'e'b' 'o't' 'g'n'i'l'l'i'w' 'e'r'''e'w' 'f'i' ',''a'f' 'd'n'a' 'l'l'a'm's''''''''''''''''''a' 'h'c'i'h'w' '''''''''.'s'T'D'R'C' 't's'a'f' 'e'k'a'm' 'n''''h'a'c' 'e'w' 't'u'o' 's'n'r'u't' 't'I' '''''''''''''''''' '''''t'u'o'b'a'''''''''''''''''s'a' 'e't'a'r'u'c'c'a' 's'a'''''''''''''t'I' ''''''''''''''''?'T''''w'o'''''''''''''''''''''d'n''''''''''''''''''''''''''''''''''''''''''''' '-' 's'''c'i'm'e'd'a'c'a''' 'h't'i'w' 'e't'a'u'q'e'd'a'n'i' 'f'o' 't'r'o's''' 'l'':'''''e'e'f''''a' ','n'a'm'u'h''' 's't'a'h'T'''''''''''''''''''''f'o''' 't'f'i'g' 'e'h't' 'h't'i'w' 's''' ''''n'k' 'u'o'y' ''''''''.'0'0'0'1'$' 's't's'o'c' '''''''''''''''''''''''''''''''''''''''''a'n'a'n'a'b' ''''b'a' 'g'n'i's's'e'u'g' 'e'r'i'''''''''''''''''''s't'a'h't' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''' 'y'e'h't' 'd'a'e't's'n'I' '.'s'r'e'e'p''''' 'o'w't' 'n'e'e'w't'e'b' 't'''n'e'r'a''s'e'm''''''''y'l'l'a't'o'''''''o't't'''''''''''''''''''''''''''''''''''''r'o'f' 'g'n'i't'''A decade ago Google Wave really needed a good quality list CRDT.'' So I got super excited when the papers for CRDTs started to emerge. [LOGOOT](https://hal.inria.fr/inria-00432368/document) and [WOOT](https://hal.inria.fr/inria-00445975/document) se'''''''w'o'n' 'd'n'A'emed like a big deal! But that excit'''''''''''I' 'n'e'h'w' 'd'e'i'd'''ement ''turned to ash when I realised the algorithms were ''too slow and inefficient to be practically useful. And I made a big mistake - I assumed'' if the ac''''g'i'b' 'ademics couldn't make them fast, nobody could. I turne''''''''''''''''''''''''''''''''''''''''''''''''''''h''' 'd'n'A''''''''''''''''''''''''''''''m'e'h't' 'g'n'i'd'a'e'r' 'd'i'o'v'a' 'o't' 'g'n'H''i'h't'y'n'a' 't's'o'm'l'a' 'o'd' 'l'l'''I''' 'd'n'a' 'y'n'a' 'n'e't't'i'r'w' 't'''n'e'v'a'h' 'I'''''''''''''''''''''''' 'e'm'a'h's' 'l'a'n'r''.'''t'u'B''''e't'e' '''!''''.'s'''y'''m' 'o't'''''''''''''''''''''''''' ')'m'e'h't' 'g'n'i'd'a'e'r' '*'e't'a'h''''H'*' 'I'''''''*' '(' '-' 'd my back on academia and dismissed them''.n'n'n''h'g'i'f' 's'h't'g'n'e'r't's''''''''s' 's'd'n'i'm' 't'n'e'r'e'f'f'i'd''''''s'd'n'i'm' 'y'n'a'M''''' 'o'w'T'' ''i't'e'm'o's'''''''''''''''''''''''''''''''''''''''''''''''''''''''.'k'a'i'n'z'o'W' 'd'n'a' 's'b'o'J'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'l'a'o'g' 'e'm'a's' 'e'h't' 'd'r'a'w'o't' 'd'e'd'a'e'h' 's'e'v'i't'c'e'p's'r'e'p' 't'n'e'r'e'f'f'i'D' '.'s't'e's' 'l'l'i'k's' 't'n'e'r'e'f'f'i'd' 't'u'b' ' 'r'O' '''''''''''''''''''''''''''''''''''m'a'e'r'd' 'e'm'a's' 'e'h't' 'd'n'a' ','e'v'o'l' 'e'm'a's' 'e'h'T''''O''''M' '.'n'a'v'i'l'l'u'S' '&' 't'r'e'b'l'i'G' 'e'k'i'l' 'k'o''''k'o'l''''''''''' 'm'o'r'f' 'e'm'o'c''''''''''''''''''''''''''''''''''''''''''''''''''''''e'm'o'c' 'y'e'h'T' '.'r'e'h't'e'g'o't' 'g'n'i'k'r'o'w' 's'f'e'h'c' 'o'w't' 'm'o'r'f' 'e'm'o'c' 't'''n'o'd''''''''''''''''''''' 's'n'o'i't'a'r'o'b'a'l'l'o'c' 't's'e'b' 'e'h't' 'e's'u'a'c'e'b' ','t'a'h't' 'w'o'n'k' 'o't' 't'n'a't'r'o'p'm'i' 's't'i' 'd'n'A'n''n'''' 'e'r'a'n'o'i'l'l'i'b' 'a' 'e'k'i'l' 'g'n'o'r'w' 'e'r'e'w' 'y'e'h'T' ''''' 'd'e'i'r't''''''''''''''''l'o'b' 'e'm'o's''''''''''''''''''''''''''''''e'c'n'''''''''''''''''''''''.'''''''''''''''''''''''' 'y''''''''y'l'd'r'i'e'w''''''''''f'o' 't'r'o's' ''l'l'a'u't'c'A' '''''.'k'o' 's't'a'h't' 't'u'B'n''s'e'm'i't' 'f'o' 's'd'n'a's'u'o'h't'''''''a's' ''e'h't''''c'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s''''''t''' ','o'N'l'a't'r'o'm' 'o't' 'h'''''''t'a'e'r'G''t'u'r'T' 'g'n'i'r'b' 'o't' 's'n'e'v'a'e'h' 'e'h't' 'm'o'r'f' 't'n'e's' ',''''''''''e'r'''y'e'h'T' '.'s'd'o'g' 't'''n'e'r'a' 's't's'i't'n'e'i'c'S' '''' '.'o'g'a' 's'e'd'a'c''''a'e'd''''a' 's'u'o'i'v'b'o' 'n'e'e'b' 'e'v'a'h' 'd'l'u'o'h's' 't'a'h't' 'g'n'i'h't'e'm'o's' 'e's'i'l'a'e'r'''''''''''''''''''''' 't'a'h't' 'g'n'i'h't'e'm'o's' 'n'r'a'e'l' 'e'm' 'e'd'a'm' 'g'n'i'h't' 'e'l'o'h'w' 's'i'h't''i'c's' 'd'e'h's'i'l'b'u'p' 's'a'w' 't'i''''''''t''''''''''''''e'n'o'y'r'e'v''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''.'s'd'o'g' 'y'b' 'n'e't't'i'r'w' 't'''n's'a'w' 'r'e'p'a'p' 'e'h't' ','t'u'o' 's'n'r'u't' 't'I' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'e'h't' 'f'i' 'd'e'd'u'l'c'n'o'c' 'e'v'a'h' 'd'l'u'o'w' 'r'e'p'a'p' 'e'h't' 't'a'h'w' 's'w'o'n'k' 'o'h'W' ''e'''''''''l'l'a' 'e'w' 'd'n'A'''''''''''''''' 'e's'u'a'c'e'b' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'r'e'h'c'r'a'e's'e'r' 'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'd'u't'i'n'g'a'm' 'f'o' 's'r'e'd'r'o' 'l'a'r'e'v'e's''''''''''''''''''''.'s'e'm'i't' 'f'o' 's'd'n'a's'''''''a's'u'o'h't'''''''''''r'o't'c'a'f' 'a' 'y'b' 'g'n'o'r'w' 'e'r'e'w' 'y'e'h'T' '.'g'n'o'r'w' 't's'u'j' 't'''n'''''''''''''''''''''''''''''''.'e'd'u't'i'n'g'a'm' 'f'o' 's'r'e'd'r'o' '3'''''u'o'h't' 'y'b' 'f'f'o'h't' 'd'e'v'e'i'l'e'b' 'e'n'o'y'r'e'v'e' ',''''''''' 'e'w' '*'e'c'n'e'i'c's' 'd'e'h's'i'l'b'u'p'*' 's't'i' 'e's'u'a'c'e'b' 'd'n'A' '''''''t'u'B' '.''''u'''''''''''''' 'e'r'e'w''''o' 's'r'e'b'm'u'n' ''o'b'a' 's'm'i'a'l'c' 'e'd'a'm' 'o'g'a' 's'r'a'e'y' 'e's'o'h'''''''''''''''' 'e's'h'o't' 'l'l'a' 'd''''l'a'e'r' 'I''''''''''''''''m'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'b' 'f'f'o' 'e'r'e'w' 's'e'r'''''''r'e'u's'a'e'm' 'e'c'n'a'm'r'o'f'r'e'p' 's't'i' 't'u'b' ','n'u'r' 's'T'D'R'C' 's'u'o'i'r'a'v''''t' 't's'a'f' 'w'o'h' 'w'o'n'k' 'o't' 'd'e'm'i'a'l'c''''''''''''''''''''''' 'w'o'h' 't'u'o'b'a''''''''' 'g'n'i'k'r'a'm'h'c'n'e'b'''''''' 's'm'i'a'l'c' 'e'd'a'm' 'r'e'p'a'p' 'c'i'm'e'd'a'c'a' 't'a'h'T''n'n'f'f'i'd' 'w'e'f' 'a' 'h't'i'w' 'm'e't's'y's' 'e'h't' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'o'o'g' 'y't't'e'r'p' 'd'e''''s'm'e'e's' '2'3''''T'''''''''r'e'h'g'i'H' '''.'''' 'g'n'i'k'r'a'm'h'c'n'e'b' 'd'n'a' 's'r'e'b'm'u'n' 't'n'e'r'e'f'f'i'd''''''''s'r'e'b'm'u'n' 'w'e'f' 'a' 'g'n'i'y'r't' 'y'b' '2'3' 'd'e'k'c'i'p' 'I' 'e't'c'a'''''''''''''''''''''''''h't'i'w' ''''''''' 'y'n'''a'm' 'o'''''''''''''''o't' 'k'n'i'l' 'a' 'e'm's'n'o'i''''''''''!'d'a'B' ''''''''''''''''''''''' ','w'o'l's' 't'''n's'i' 'e'd'o'c' 'y'M''''''' 'Y' '''''''r'i'e'''h't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e''a'''''h'T'''''''''''''''''''''.'B''m'h't'i'r'''''''''''''''''r'a'l'u'c'i't'r'a'p' 'e'''''''''' 'm'h't'i'r'o'g'l'a''''''''e'p'm'o's' 'o'''''''''''''''''''''m'r'o'f's'n'a'r't' 'l'a'n'o'i't'a'r'e'p'o'''''T'O''''''g'''''l'A' 'n'a' 's'i' 'A'G'R' '.'m'h't'i'r'o'g'l'A' 'n'a' 's'i''''''''''''''''''' 'n'a' 's'o' 'r'e't'i'p'u'J' '.'''''''''''''''''''''''''''''''''''''y'''l'e't'a'r'a'p'''''e's' 'd'e's''*''''*'''s'e'c''''''''''''''''''''''''''''''''''''''''n'n''''''''''''''*'''''*'''b''''''''''k'c'a'h' 't'a'e'n''' 'e'h't' 'e'r'o'f'e'b' 'd'e't'r'e's'n'i' 'r'e's'u' 'e'h't' 'h'g'u'o'h't' 'n'e'v'e'''''''''''''''''''''''''''''''''''''''e'r'o'f'e'b' 'd'e't'r'e's'n'i' '*'y'l'r'a'e'l'c'*' 'r'e's'u' 'e'h't' 'd'n'a' ','o'r'p' 'e'b''''p' 'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*''''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s't'i' ','r'e'p'a'p' 'e'h't' 'm'o'r'F'''''''''''''''''''''''''''''' ','s'u'o'i'r'u'',''''''k'c'a'h''c' 'e'r'''u'o'y' 'f'I' ':''''''''''k'c'i'r't'''''k'c'a'h'''''''''''''''''''''''''t'i' 't'a'h'''''''''m'e'l'b'o'r'p' 't' ''''''k'a'e'w't't'p''''T' '.'''e'c'x'e' ','l'a'c'i't'n'e'''''w''' 't'u'B''d'i''' 's'i' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'e'h' ''''y'l'l'a'u't'c'a''''''''''''''''''.'')'t'n'a''''''''''t'a'n't'r'o'p'm'i' 'y'l'l'a'e'r' 't'''n's'i' 'e'c'n'e''M'r'e'f'f'i'd' 'e'h't' 't'u'b' ';'k'c'a'h' '*'t'n'e'r'e'f'f'i'd'*' 'a' 'h't'i'w' 's'i'h't' 's'e'v'l''''''''''''t'n'e'm'u'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''nAnd oh look - those last three rows are *weird*! 29 and 23 don't add up to 65. I'm probably thrashing the CPU cache by interleaving updates in the two b-trees. Looks like a *batch_update()* method would bring that 65ms down to *52ms*'n'.'.'e'c'a'r't' 'g'n'i't'i'd'e'''''u'c'o'd'''''''g'n'i'r't's''''';'t'l'&''' 's'i'h't' 's's'e'c'o'r'p' 'o't' 's'm'9'2' 's'e'k'a't' 'n'w'o' 's't'i' 'n'o' 'y'e'p'o'R' 'c'o'd' 'e'h't''o's'e'd'i's'A'('''''''''''''''''''''' 's'j'Y' ','e'c'n'e'r'e'f'e'r' 'r'o'F'n''n'''''s't'I'''''''''''''''!''''1'l'l'e't' 'o't' '''''''''' 'e'h't' 'g'n'i'd'a'e'R'''''''''''''''e'l'b'i's's'o''''''''''s's'i'p'm'i' 's't'I' '?'s't'l'u's'e'r' 'r'i'e'h't' 'p'u' 's's'e'm' 't'h'g'i'm' 'h'c'i'h'w' ','s'r'e'h't'o'''''''''''''r'e'h't' 'f'o' 's'n'o'i's'r'e'v' 'w'o'l's' 'd'n'a' 's'm'h't'i'''''''''''''''''''''p' 'a' 'g'n'i't'i'r'w' 'e'l'i'h''''h'w' 'r'o'g'l'a' 'e'm'o's' 'f'o' 's'n'o'i's'r'e'v' 't's'a'f' 'e'v'a'h' 'y'e'h't' 'd'i'D'''''.''''''d'i''''' 'd'i'd''''''''''' 'y'e'h't' 'e'r'e'W' '?''''''''n'o'i's'r'e'v''''e' 't's'a'f' 'e'''' 'h't' '''''''''''''''''''''''''d'e'i'r'r'o'w' 'o'o't' 't'''''''t'''''''''''' 'o'''ing''''''t''' 'n'e'k'a't' '' 'o'n' 'm'''I' 'o's' ','r'o' 'n'o'i's'r'e'v' 'w'o'l's' 'e'h't' 'g'n'i's'u' 's'c'i'm'e'd'a'c'a' 'e'h't' 'e'r'e'w' 't'u'B' ''''''''' 'y'g'''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h'g'u''''''''''g'h'u'o'''' '''' '-' 'r'h't' 'g'''''''''''''*'d'r'i'e'w'*' 'e'r'a' ''''''''''' '''o'g'a'''d'e''''''' '''''''s'r'a'''e'Y''''''''''''''''''''s'e'e'r't'-'b' 'o'w't' 'e'h't' 'n'i' ''''''''''''''''''''''''' 'd'l'''u'o'h's''''''!'t'i' 'p'o't'S' '!'o'N' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m'e'l'b'o'r'p' 'e'g'a'u'g'n'a'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'o'd''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'n'''''''''!'w'o'l's' 's'i' ''i't''https://josephg.co' editin' trace'g' ' javascrip' strin''g't'a'''''w' can'' merg' co'.''''''''''' 'e'h't' 'o't' '-' '''nc'rren' edit''''''''''''''''''''''':'r'e't's'a'f' 't'o''''t'l' 'a' 's't'i' 't'u'B' '.'' bu' it' 's't's't'''ud'e't'e'm/blog/''''''''''''''''''e'c''''''''''''''''''''''''''' javascript' no''' 't'''' not''''g'n'''i'r'' allow'' ', using a javascript string, well''''''''''''''''''''''''''''''''d'''''''''''''''''''''''it might not concurrent edits but ''''''''''''''' 'd'e's'a'b' ''''''''''''''''''''''''''e'g'u'h'''''''''''''''''w'o'l's' 'd'n'a' 'g'i'b' '''''''''''''''''''''''''''''''d'n'a''''i' 'a'i'm'e'd'a'c'a' 'n'o' 'k'c'a'b' 'y'm' 'd'e'n'r'u't' ''s't'e'g' 's'e's'u' 'e'g'r'e'm'o't'u'a' '''''''''''''''''t's'a'f' 'y'r'e'v' 't'''n's'i' 'e'e'r't''d' 'e'h'T''''''' '''T''''''''''' 's'i' 'e'e'r't' 'A'''its slow:'''''''' 's't'i' 't'u'b' 's't'i'd'e' 't'n'e'r'r''''d'u'c'n'o'c' 'e'g'r'e'm' 't'''n'a'c' 'e'w''t's' 't'p'i'r'c's'a'v'a'j' 'a' ''a'r't' 'g'n'i't'i'd'e' 'crdts-are-the-future/'i'd'e' 't'n'e'r'r'u'c'n'o'c'''''''''''''''''''''''' 't'o'n' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'g'n'i't'i'd'e' 'e'v'i't'a'r'o''''''''''s'r'a'e'y' 'r'o'f' ''b'a'l'l'o'c' 'f'o' 'e'r'u't'u'f' ''' ''e'h't''''''''''t'a'h't' 's'e'o'd' '' 'e'r'''y'e'h't' '''''''' 'k'n'i'h't' 'I''k'n'i'h't' 'I' '''as '''''''''''''''''''''*'''''''''*'' ''*''''*'''''''''''''''''''''''''''''''''''''''''''''''''''''''t'a'h't'''''''''''''''''''''''''''''''o't' 'w'o'''h' 't'u'o' 'e'r'u'g'i'f' '''''''''''''''''''''''l'l'a'c' 't'a'h't''''''''''''''''''''''''''''''''''''''''''''''d'n'a' 's'r'e'p'a'p' '','''''''''''''p'p'a''''''''''p'p'a' 'g'n'i't'n'i'o'p'p'a's'i'd''''c' ''''''''''''''''''''''''''n'a'c' 'e'w' 'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'r'e'b'm'u'n' 'e'c'n'a'm'r'o'f'r'e'p' 'e's'e'h't' 't'a' 'e'v'i'r'r'a' 'o't' 'l'l'a' 't'a' 'e'm'i't' 'o'n' 'd'n'a' '''o''' '''''''''''''''''''''''''''''''''.'t'n'i'o'p' 's'i'''''''''''''''''''y'b' 's'D'I'U'U' 'g'n'i'd'i'o'v'a' 'h't' 'o't' ' ''s'u' ''.'''g'''n'i'r'b' 'd'n'A' ''''''''h' ''''''''''''''''t'i' 'e'v'o'l' 'I''''''''''''''t'n'a'i'l'l'i'r'b' 's't'i' 't'u'b' ','''o't' ''t'a'''''''''''''''''''''''''''''''''r'e'l'p'm'i's' 'h'c'u'm' 'o''''i's' 'g'n'i'h't'y'r'e'v'e' 's'e'k'a'm' ''''''''''''''''' 'd'n'a' 'e'l'o'h'w' 'e'h't' 'n''''''t'b'u'o'd''.'I''''o''''a' 'a'i'm'e'd'a'c'''''''''''''''''''''''''''','g'n'i't'i'a'w' 'f'o' 'e'd'a'c'e'd' 'a' 'r'n''e't'f'a' ',''a'''''''''''''''''''''''''''''''?'l'''''''''''''''''''''a' 'e'r'a' 'e'r'e'h't' 't'u'B' '.'''' ''''B''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'r'e'h' 'n'o' 'g'n'i'o'g''''''''''''''.'s's'e'm' ''' I'm not even sorry.''''''''''g'n'i'o'd' ''''''' 's'd'n'a'h' 'f'o' 's't'h'g'i'e'l's' 'y'r'e'p'p'i'l's' 'w'e'f' 'a' 's'''e'r'e'h't''''s't'i' 'h'g'u'o'h't' ';''''a'e'r' 'r'o'f' 's''''''''''g'n'i'k'r'a'm'h'c'n'e'b' 'e's'e'h't' ''''''''''''''''s'k'r'a'm'h'c'n'e''''e'b' 'e'h't' 'e'r'A''''''''''''''''''''''''''''''t's'u'r'-'t'd'r'c'-'t'x'e't'/'g'h'p'e's'o'j'''''''''''e't'/'g'p'h'e's'o'j'''''''h'''''''''''''r'a'k'm'c'n'e'b''''''''''''''''''''''g'n'i'n'n'u'r' 'y'b' 'k'r'''''''r'k'a'm'h'c'n'e',''B'' 'e's'e'h'''''''e'g'T''''We need to ta'T'lk abou''t b''''''''''e'r'u't''''''''''''''''''''''''''''d'e'''l'b'a's'i'd' 'r'o' 'd'e'l'b'a'n'e' 'e'b' 'n'a'c' 'c'u'r't's' ''''''o's'l'a' 'en''Thes''e benchmark''s ''B'''''''''''''''''' 's'k'r'a'm'h'c'n'e'b' 'e's'e''.'''''h'T''''''''''''''''''''''''''n'e'b' 't'u'o'b'a' 'k'l'a't' 'o't' 'd'e'e'n' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'u'o' 'g'n'i'm'o'c' 't'r'a't's' 's'r'e'b'm'u'n''''''''''''''''''''''''s'k'r'a'm'h'c'n'e'b'-'t'd'r'c'/'g'h'p'e's'o'j' 's'a' 'n'o'o's' 's'a' 'n'u'r' '''''''''''''' 's'a' 'n'o'o's' 's'a' 's'k'r'a'm'h'c'n'e'b' 'e''''''''''''''''''''''''s't'd'r'c'-'e'c'n'e'r'e'f'e'r'/'g'h'p'e's'o'j'''''''''''''e'c'n'e'r'e'f'e'r' 'y'm'h't' 'g'n'i'l'l'i'k''''''''''''''''''''''s'a' 'C'+'l'r'''''''_'l't'c'''''''c''''T'C' 'n'e'h't''''c' ','g'a'l'f' 't'a'h't' 'h't'i'w' 's'k'r'a'm'h'c'n'e'b' 'e'h't' 'g'n'i'n'n'u'r' 'n'e'e'b' 'e'v'''I' '.''e'W''Your benchmarks are weird / wrong / misleading''Al''b''' 'l''' ar' lies'e'B' yes''ver' clever.'''y'''enchmarks''Your benchmarks are weird / wrong / misleading''''''''''B''''b''' 'l'l'''''''''''''s''Ye''s ye','I know. I've made a few sleight' I'' no' even'' sorr'.'''' writin' 'g'-'''' ' 'y't'm's of hand which I want to 'fess up to and defend.''' ver''y clever.'n### How do I run these benchmarks myself?n''''s'''e'i''''''s'''''''''''''.'r'e'v'e'l'c' 'y'r'e'v'''e'y' ''l' 'e'r'a' ''A'''''''''''s'k'r'a'm'h' But its alm''o''s''t'' ''a''l''l'' ''o''n''l''i''n''e.''c'n'''e'B''''' 'h'''''' ''' ''- writin''g ''t''''' '''''''n'n''''''''''''''''''''''''''''''n'e'v'e' ''''''''.'''''''''''' 'g'n'i't'i'r'w' '-'''' ' 'y'r''''r'o's' 't'o'n' 'm'''I' '''''''''''''''''' 't'''''''''''''''''s'n'o'i't'a't'n'e'm'e'l'p'm'i' '''h'g'i'e''''a'w't'h'g'i'l' ','''' 't's'''''' ',''a'f' 'r'o'f' 'a'l'u'm'r'o'f' 'e'h't' ''''''''''''s'T'D'R'C' 't's'a'f'i'w' 'd'e't'a'r't's'u'r'f' 't'o'g' 'I'' 'g'n'i'r'e'w's'n'a''doing that work''''''''''''''''''''''h't' 'd''''''t'r'a't'''''''''''e'k''''''t''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''''''''''''''''''''''''''''''''''''''''''k'r'o'''''''''''''''''''''''''''''''''''s'k'l'''''''y'r''''''''''''''''nA decade ago Google Wave really needed a good quality list CRDT. So I got super excited when the papers for CRDTs started to emerge. [LOGOOT](https://hal.inria.fr/inria-00432368/document) and [WOOT](https://hal.inria.fr/inria-00445975/document) seemed like a big deal! But that excitement turned to ash when I realised the algorithms were too slow and inefficient to be practically useful. And I made a big mistake - I assumed if the academics couldn't make them fast, nobody could. I turned my back on academia and dismissed them.n'n'n'n'-'-'-'n'n'n'n'n'n'n'n'a'n'i'b'o'f' ''''' 'r'e'h't'o''''''''''''''''''''''''''t'n'a'i'l'l'i'r'b'''''''r'''o'f' 'd'e't'n'e'v'n'i'''''''.'e''''''''''''' 'r'e'd'r''''''''''''''''e'r'e'h'w''''''d'n'a' ','''y'r'e'v'e' 'o' 'n'i''''n'i'l'p''''''''''','''''''''''' 's'''n'i'v'e'K''''e'h't''''''''''e'h'T'''''''''''''''''''''''h'''''''''t'e'b' 'I''''''''e'h't' 's't'I' '.'''''k'c'a''''''''''''''''''''''''''''''''e'd'a'c'''''''''''''m'e'h't' '''t'i' ''f'o' 'y'n'a' 'e'd' 't's'a'l' 'e'h'''''''''r'e'h't'i'e' 't'i''t' 'r'e'v'o' 'a'e'd'''''''a'e'i' 't'a'h't' 'o'r'p'p'a' 'n'o'i't'r'e's'n'i' '+' '''''e's'r'u'o'c' '''f'o' ''o'e'p' 'r'e'v'e'l'c' 'f''''''''''''''''''''''''''' 'd'l'u'o'w' 'I' 'k'n'i'h't' 't'''n'o'd''''''''''''''''''''''''''''''''''''''.'r'e'h't'i'e' 't'a'h't' 'f'o' 't'h'g'u'o'h't' 'e'v'a'h' 't'''n''''''' 'e'v'a'h''''n' ''''n'd'l'u'o'w' 'I'o'''.'''I'''''''''''''''''n'n'a'm'p'p'e'l''''''''''''s't'i' ''''''t'i' 'l'l'e'K' ' 'h'c'n'u'b' 'a' '''''''''''' '''m''''''''''''''''''approach ''' 'n'o'i't'a''''i't'n'e's'e''''''''''''''''''''''''e's'e'h't'''''''''''u'o'''''''''''f'l'e's'y'm' 's'y' 'e'v'e'i'l'e'b' 't'''n'o'd' 'I' ''''''''''''''''''''''''''''''''''''''''s't'l'u's'e'r' 'k'r'a'm'h'c'n'e'b' 'r'u'o'y' 'n'u'r'-'e'r''''''''''''''''''''''''?'s't'l'u's'e'r' 'r'u'o'y' 'e'c'u'd'o'r'p'e'r' 'I' 'o'd' 'w'o'H' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s't'l'u's'e'r' 'r'u'o'y' 'd'e't'a'r'e'n'e'g' 'h'c'i'h'w' 'e'd'o'c' 'e'h't' 'd'e'h's'i'l'b'u'p' 't'''n''''''''''''''''''''''''''''.'e'n'i'l'n'o' 'l'l'a' 't'''' 'e'h't''s'o'm'l'a' 's'','''t'i' '''''''''''''''''''''s't'd'r'c'''''''n'i''''''''''''o'''t'n'i' 'd'e'm'm'a'j' 'l'l'a' ''-'e'c'n'e'r'e'f'e'r' 'd'n'a' 't'u'B' '''''''s't's'e't' '.''''e'v'a'h' 'u'o'Y' '#'#'#''n'n'''''''''''''''''''''''''''''''''''''''''''''''''m'o'r'f' 'e'm'o'c' ''''''''''''''''''''''n'o'i's'r'e'v' 's'i'h't' 't'a' ','''''s'd'e'e'n'''''''''''''''n'a'r' 'I''''''''''''''''''''''''''''''''''''''e'g'd'o'p''''b' 'e'g'd'o''''The reference-crdt'''s't'i's ben'''''e'r'e'h' '''chmark code is [in the repository here](https://github.com/josephg/reference-crdts/b''y'b'lob/m'''''''''''''''''''''''''''''''''''''f'o' 'p'o't' 'e'h't' 't'a' 't'n'a't's'n'o'c'''''''''c' 'l'a'b'o'l'g' 'e'h't' 'g'n'i't'i'd'e'''''''''''''''''''''''''' ''''''''''w'o'h' 's't'a'h't'g'n'i'k'r'a'm'''''''''''''''''''''''''''''''''''''y'l'e't'a'r'u'c'c'a' ''''''''''''''''''''''''''''''''''t'n'e'm'n'o'r'i'v'n'e' 'g'n'i't's'e't' 't'i'n'u' 'e'h't' 'n'i'''''''''''''''''''''''''''''''''''')''''''''''''''''''''''''''''''''''''''''y'r'o'm'e''''''''''''''''''''''''''''''''''s'k'r'a'm'''''''''''''''''''''''''''''''''''''''''''''''n'o'i's'r'e'v' 's'i'h't' 't'a' ','y''https://github.com/josephg/reference-crdts/tree/fed747255df9d457e11f36575de555b39f07e90')'9'(''r'o't'i's'o'p'e'r' 's'i'h't' 'm'o'r'f' '''''(']'s't'.'s't'd'r'c'h'c'n'e'b' '''''''''''''''''''''''''''''[' 'n'o' 's'd'n'e'p'e'd' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 's't'd'r'c'-'e'c'n'e'r'e'f'e'r' 'e'h'T' 'm' 'e'h't' 's'e'g'n'a'h'c' 'e'd'o'm' 't's'e't' 'e's'u'a'c'e'b' 's't's'e't' 'g'n'i'r'u'd' 'e'g'a's'u'''''''u's''''''' 'g'n'i's'u' 'y'r'o'm'e'm' 'e'r'u's'a'e'm' 't'''n'a'c'''' 'u'o'y' 'e't'o'N'(' '.'g'n'i's'u' 's't'i''h'c'n'e'b' 'e'l'i'h'w'''''''''''''''''''''''''''''''''''''''''''t'u'o' 'g'n'i't'n'i'r'p' 'f'o' ''''''''''''''''''''''''''''''''node --loader ts-node/esm --expose-gc bench.t'`'s'`' 'h't'i'w' 'e'd'o'c' 's'i'h't''''''''''' 'e'd'o'c' 's'h'i't' 'n'u'r' 'n'a'c' 'u'o'Y' '.'''''' 'd'n'a' 't's'i'g' 'e'h't' 'm'o'r'f' 'h'c'a'o'r'p'p'a' 'e'h't' 'w'o'l'l'o'f' ','ain/'''''''''''''''''''''''s'e'i'r'e'u'q' '''d'd'a' 'o't' 'd'e'e'n' 'l'l'''bench.ts). If you want to measure m'''emory usage you can use the same approach as I did'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''https://github.com/josephg/reference-crdts/blob/main/bench.t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i' 'd'i'd' 'I' 's'a' 'h'c'a'o'r'p'p'a' 'e'm'a's' 'e'h't' 'e's'u' 'n'a'c' 'u'o'y' 'e'g'a's'u' 'y'r'o'm'e'm' 'e'r'''''''''''''m' 'r'e'u's'a'e'm' 'o't' 't'n'a'w' 'u'o'y' 'f'I'''''''a'c' 'u'o'Y' '.')'s'(']'e'r'e'h' 'y'r'o't'i's'o'p'e'r' 'e''''i'h't' 'n'i'[' 's'i' 'e'd'o'c'''''''''h't' 'n'i' 's'i' 'k'r'a'm'h'c'n'e'b' 's't'd'r'c'-'''' 'e'c'n'e'r'e'f'e'r' 'e'h'T'n'n'h' 'a' 'f'o' 't'i'b' 'a' 's'''''''''s't'l'u's'e'r' 'i' 'g'n'i'h't'y'r'e''''v'e' ','' ''''''''''''n':''''''''''''''t' 'f'o' 't's'o'm' ','''''''''''nThe benchmark code for my JS string baseline, yjs and automerge is [in th'''''''''''' 't'n'a'w' 'u'o'y' 'f'i'is github gist](https://gist.github.com/josephg/13efc1444660c07870fcbd0b3e917638). Its a mess; but messy code is better than missing code.nnFor my rust implementation I'm benchmarking [this code](https://github.com/josephg/text-crdt-rust/t''n'n''''''''' 'o's'l'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''https://github.com/josephg/crdt-b'''''''''''''''n'u'r' 'o't' 'r'e'd'r'o' 'n'i'enchmark''''''''''''''''''''''''''.'s't's'e't' 'e's'e'h't' 'f'o' 't's'o'm' 'r'o'f' ')'s'(']''''''''y'r'o't'i's'o'p'e'r''''''''''r'o't'i's'o'p'e'r' 's'i'h't'[' 'm'o'r'f' '`'z'g'.'n'o's'j'.'r'e'p'a'p'-'e'g'r'e'm'o't'u'a'`' 'd'e'e'n' 'l'l'''u'o'Y' 'ree/ba20b6386c0472958f33024ce0b806e75470e1ca). Run it with `cargo criterion yjs` or `cargo criterion ropey` to isolate the ropey baseline. Turn on and off the inline rope updates my commenting out lines near the top of src/universal/doc.rs. You can add `--features memusage` to print out memory allocator statistics - which is how I'm figuring out how much RAM I'm using.nnI haven't uploaded my rust crdt wasm wrapper anywhere.'n'n':'''''''''''' 's'''e'r'e'h''''' 'e'h't' ','f'l'e's'r'u'o'y' 's'k'r'a'm'h'c'n'e'b' 'e'h't' 'f'o' 'y'n'a' 'h't'i'w' 'y'a'l'p' 'o't' 't'n'a'w' 'u'o'y' ''''''''''''''''''''''''''''''''''''''''''''''e'w' ''e'''w'''''o'h' 's'i' 'y'l's'u'o'i'r'e's' 'e'r'o'm' 't'o'l' 'a' 'e'k'a't' 'o't' 'd'e'e'n' 'e'w''''f'I'n'n''r'p'e'r'''''''' 's'n'h'a'''''''''''''''' 't's'u'm'''''''''g'n'i's'u' 'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'l'''''''''''''''y'l'p'p'a''''''.'k'r'o'w' 't'''n's'e'o'd' ''''a'u't'n'e'v'e''''''''t'i' 'e'v'a's' 'n'e'h't' 'd'n'a' 'n'e'p'o' 's't'i' 'e'l'i'h'w''''' 'r'o'f' 'm'a'r' 'n'i' 't'i' 'p'e'e'k' ','t'c''''t'e'j'b'o' 'n'a' 'd'a'o'l''' 'f'o' 'l'e'd'o'm' 'e'h't' 'o's' '-' '''''''''''','d'i' '''''''''''''''''''''''''''''''''''''''''.'r'e'h't'i'e' 't'a'h't' 'f'o' 't'h'g'u'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i't'c'a' 'n'i' 't'a'h't' 'e'e's' 'o't' 'e'v'o'l''''''''''e'v'o' 'd'''I' '''''''''''''''''''''''''''''''''''''.'n'o'i't'c'a' 'n'i' 't'a'h't' 'e'e's' 'o't' 'e'v'o'l' 'd'''I' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'o'i't'c'a' 'n'i' 't'a'h't' 'e'e's' 'o't' 'e'v'o'l' 'e'r'u's' 'd'''I' 't'u'b' ';'t'h'g'i'r' 'y'l'l'a'u's'u' 's'i' 'n'i'v'e'K''''I''''''d''''''d'I' '.'y'a'w' 'e'l'b'a'n'o's'a'e'r' 'a' 'n'i' 's'i'h't' 't'n'e'm'e'l'p'm'i' 'o't' 's'r'e'd'i'v'o'r'p' 's'''s'j'Y' 't'p'a'd'a''''''''' 's'i'h't' 'o'd' 'n'a'c' 'u'o'y''''''''''' 'e'r'a' 'e'r'e'h't' 's'y'a's' 'n'i'v'e'K' ':'t'i'd'E' '>'n'n'''''''n'n''h't' 'e'v'a'h' 't'''n'd'l'u'o'w' 'I'''''''''''''''''''''''''''''''''''''''''' 't'a'h't' 't's'a'p' 't'h'g'i'r' 'd'e'k'l'a'w' 'e'v'a'h' ''''''''''t'''n'd'l'u'o'w' 'I' 'k'n'i'h't' don't''''''''''''l'u'o'w' 'I' 'k'n'i'h't' kno'''''''''''''''''''''''''' 'n'a'c' '''I''''''''''g'h'u'''''x'0'1' 'o'h't' 'e'v'a''' 'f''''''''''''s'e'c'n'e'r'e'f'f'i'd'o''h' ''''''''''''''' 't'''n'd'l'u'o'w' 'I' 't'a'h't' 'w'''''''''''''''w'o'n''''''''''''''''''''''''''''''''''''''''''''''y'm' 'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h't'i''''''''''h'''n'n''''''''''!''''''''o'S''''''.'w'o'n'k' 't'''n'o'd' 'I' 'i't'w' 'o'd' 'o't' 'g'n'i'h't'y'r'e'v'e' 'd'n'a' ','t'u'o'y'a'l' 'y'r'o'm'e'm' 'h't'i'w' 'o'd' 'o't' 'g'n'i'h't'o'n' 's'a'h' ''''''''''''''''''''''''''''''''''''t'r'a'p'a' 'e's'a'e't''''''''''''''''''''?'r'e'l'i'p'm''''''''''''''''''''''''''''''''''''''''''''''''''?'t'h'g'i'r' ','l'a'm'r'o'n' 's'''' 't'a'h'T' '.'s'e'i'r'o't's' 'g'n'i'k'r'a'm'h'c'''''''c'h'n'e'b' 'e'v'o'l' 'I' ''o'c' 't's'u'r' 'e'h't' 'o't' 's'k'n'a''''''''''s'k'n'h't'''''''''o't' 'e'u'd' 'y'l'p'm'i's' 's'i' 's'j'y' 'd'n'a' 'e'e'w't'e'b'''''''n'e'e'w'e'b' 'e'c'n'e'r'e'f'f'i'd' 'd'e'e'p's' 'e'h't' 'f'o''''f' 'h'c'u'm' 'w'o'H'k' 't'''n'o'd' 'I' 't''''''''s'e''''''''d'i'o'v'a' ''l'p'u't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','c'i''''''''''''''''smart ''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'i' 'g'n'i'c'i't'o'n' 't'u'o'h't'i'w' 't's'a'p' 't'h'g'i'r''''''' 'g'h'r'i't' 'd'e'k'l'a'w' 'y'l'e'r'u's' 'e'v'a'h' 'e'l'p'o'e''''p'p''p''''''''p' 't'r'a'm's' '0'0'1' 't'a'''''''''s't'h'g'i'e'l's'h't' 'a'e'd'i't's'a't'n'a'f''''''''''''j' 's'u'o'i'v'b'o' 'f'o' 't'r'o's' 'e'h't' 's'i' 'e'r'e'h' 'e'b'i'r'c's'e'd' 'I' 'h'c'a'o'r'p'p'a' 't's'i'l' 's'''n'i'v'e'K' 'd'n'A' '.'t'a'h't' 'h't'i'w' 'p'u' 'e'm'a'c' 'o'h'w' 'a'e'd'i' 'o'n' 'e'v'a'h' 'I' ')''''''''''''''''''d'n'A' '.'s'u'i'n'e'g' 's'i' ''n'e'g'a'(' ''o' 'm'e't's'y's''''''''''''''''''''''''' ''''d' 'n'a' 'g'n'i't'a'r'e'n'e'g''''''''' 'g'n'i'r'o't's' 'e'v'a's' 'o't'''''''''''''''''s'D'I'U'U' 'f'o' 'd'a'e't's'n'i' ' 'e'h'T'''''''' 'e'h'T'''''''''''''''''''''''''''''''''''''''''''e'g'r'e'm'o't'''''''''''''''''''''''''''''''''''''''''''''''' 'n'''''''''''''''''''''''''''''''''''''s'r'e'b'm'u'n' 'e'c'n'e'u'q'e's' 'g'n'i't'n'e'm'e'r'c'n'i' 'g'n'i's'U''''' 'd'n'A' '''''i''' 't'n'e'l'a'v'i'u'q''''''''''u'q'u'e' 'e'h't''''''' 's'''s'j'Y' 'r'o'f' 'n'o'i't'a'r'i'p's''''''''''i's'p'n'i' 'e'h't' 's'a'w' 'd'n'a' ',''u'A' 'r'o'f' 'e'd'a'm' 'n'i't'r'a'M' '''''''''''''''''''''''''''''''''''''.'''''''''''''''' 'd'n'a' '-' 'c'i't's'a't'n'a'f' 's'i' 'm'e't's'y's' 'g'n'i'd'o'c'n'e' 't'n'e'm'u'c'o'd'''''-'n'u'r' 's'''e'g'r'e'm'o't'u'A''''''''''''''''''''''''' 't'i' 'e'n'o'd' 'e'v'a'h' 't'''n'd''''n'l'u'o'c' 'I' ''''''''''''n'''n'a'm'p'p'e'l'K' 'J'''''''''''n'i't'r'a'M' 'd'n'a' ''''o'r'f' 's'a'e'd'i' 't'a'e'r'g' 'e'm'o's''w' 'd'r'''''''''''''''!'e'd'u'd' 's'k'n'a'h'T' ''a'h' 'e'm'o's' ',''''''''''''''.'')'*'n'i'v'e'K''''k'*' 'd'n'a' 'e'd'a'c'e'd' 'a' 'k'o'o't' 't'i' ','l'l'e'W'(' '.'s'm'h't'i'r'o'''''''o'''''''h'r'i'g'l'a' 'e's'e'h't' 'f'o' 'e'r'u's''''t'a'e'r't' 'e'h't' 'h't'i'w' 'n'r'u't'e'r' 'd'n'A' ''s'a'f' 'a'm''''a' 'o't' 's'r'a'w'o't' 'g'n'i'n'r'u't'''''''''''''''''''''''''''''' 't'n'e'i'c'i'f'f'''''''''' systems''Wow' ' wa''''s'I','''''''''''s''But''''l'l'e'W' it'''''''''''''''' tur'https://githu'''e'h't'b.com/aut'''''''''''''''''''''''h'c'a'o'r'p'p'a' 't'h'g'i'r' 'e'h't' 's'a'h' 'omerge/automerge-perf/'ns '[''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'd'o'h't'e'm' 'l'a'u'd'i'v'i'''''''''''n'o'i''you're'''''''''''''''''''''e'v'i'v'r'u's''''''''y'a'''''''''''' ','r'a'f' 'y'b' 't'u'B''w'y'n'a' ' 't'''n'o'w' 't'i't'c'n'u'f' 'a'd'n'i' ''''''''''''''''''''''''''''''''''.'r'e't's'a'f' 'g'n'i'h't'e'm'o's' 'h't'i'w' 't'i' 'e''''i'c'a'l'p'e'r'g'n'i'z'i'm'i't'p'o' 'o't' 'g'n'i'v'o'm' 'e'r'o'f'e'b' ''''''''''b'''''' 'n'e'h'T' '.'''s'e'r'u't'c'u'r't's'''' 'a't'a'd' 'd'n'a' 'm'h't'i'r'o'g'l''''n'a''''''''''''''d'n'a' 'm't'h'i'r'o'g'l'a' 'e'r'o'c' 'e'h't' 'x'i'F' '.'out I'''''https://github.com/automerge/automerge')'/'(']' was'''''s'a'w' 'I' ',''''s't'I'w'o'W'm'e't's'y's' 'e's'o'h't' 'f'o' ''e' 't'u'o'b'a' '''''''''''''''''''''''''''' '.'n'u'r' 'o't' 's'e't'u'n'i'm' '5' 'y'l'r'a'e'n'g'n'i'h't'y'n'''''''''''''''''n'i''''''''''''''''s'd'n'o'c'e's' '''''''''g'n'i'''''' 'k'o'o't' 'I''5'6'0''''6'.'0' '.'l'l'i'm'''n'''u'r' 'o't' ''a''''' 'n'o'i''''''''''''' 'n'i'o't'''a'c'o'l''''''''''''''''''5'6'''''''4'5''''''''''''''''''''''r'e't's'a'f' 'x'0'0'0'5' 'y'l'r'a'e'n''''''''W''''w''' 'o'S'''''''''''''''''''''''''''''t's'r'i'F' '''.'o'n' ','t'i''''''''' 'h't'r'a'e' 'n'o''a'''''''n'a' ''W'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' all the steps''''''''''''''''''''''.''''t'u'B't's'a'f' 'r'e'p'u's'':' 't'i' 'e'k'a'm' 'o't' that make it fast.'''' ''I '''''''''' 'I' '''' 'h'g'u'o'r'h't' 'u'o'y' 'e'k'a't' 'l'l'''I''''''!'r''Sometimes when I pick up a new '''''''''''''''''k'c'i'u'q' 'a' 'd'n'a' 'h'O'''''''''''''''' ':'e'd'i's'a' 'n'a' 't's'u'J'(''''''''''''''''''''''''''''I' '.'t'n'e'''''t'e'y'''''''''''''''''''''''''e'm'i't' 'e'm'i'r'p' 'r'o'f' 'm'o'm' 'e'h't' 't'a' '''e'''g'r'e'm'o''''''''''''''''''''''''''''''''' 'o'''''''''''''''''''''''s'''''' 'r'e'h't'o' 'd'n'a' 's'j'Y' 'i'S'''''''''''''''''''''''''''s'n'o's'a'e'r' 'e'h't' 'f'o' 'e'm'o's''' 't'I' '.'n'o'i't'a'd'n'e'm'm'o'c'e'r' 'y's'a'e' '''''''''''''''y'a'w' 'e'm'a's' 'e'h't' 'n'i''n''''''' 's'a''t'u'a'''''e'c'n'''''''''''''t'i' 'd'n''''''''''t'n'e'm'e'l'p'm'i'a't's'r'e'd'n'u''o'''''''''''''''''''''''y'd'a'e'r' 't'o'n' 's't'i' '-' 't'e'y' ''['''''''''''''''''''''''''''e'm'a's' 'e'h't' 'n'i' 'h't'o'b' ',' https://github.com/yjs/yj''')'s'(']''''''t' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a''' 's'u'o'i'''s''r'u'c' 'e'r''''''''''''''''''''''''''''''''''''''''''''!'e'e'r't' 'a' 's'a' 's'i'h't' 'w'a'r'd' 'n'a'c' '''''e'W''''''''''''')'!'n'o'o's' 'y'h'w'''''''''''''''''''''''''''''''' 'y'm'''''''''''''''''''''''''''''''''''o't' 's'e'g'n'a'h'c' 'n'i' 'd'e't'l'u's'e'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''protocol''''''d'n'''''e's'o'h't''A' '''''''''y'k'r'a'l'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''y'l's'u'o'i'v'b'o' ','o'o't' 'e'n'o'g' 'e'r'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'n'''''e'h'''''''e'j'T'''''''''''''''''''''''''''''''''''''''''''''''a''''''''')'e'v'i't'i'r'e'p'm'i' '>'-' 't'p'i'r'c's'a''''''''''''''''''''g'n'''''''''''''t' 'n'g'i's's'a'i's's'e'u'g' 'y'l'n'o' 'm'''''''''''''''''''''''''''''''''''''''''''''''''''su''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y''''''e'd'''o'c' ''''''y''' ','d'n'A''m''''''''''''''''''''''''''''''''''''f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'r'e'h' 'w'o'h's' 'I' 's'n'o'i't'a't'n'e'm'e'l'p'm'i' 'n'e'e'w'''''''''''''''''''''''''''e'''''''''''''''''''''''''' 'g''!''''''''e's'a'e'l'p' 'n'i'k'r'a'm'h'c'n'e'b'''''e'd'o'c' 'e'h't' 'e'm' 'w'o'h'S'l'b'a'c'u'd'o'r'p''''''''''''''''''''''''''''''''''''''''?'s't'l'u's'e'r' 'k'r'a'm'h'c'n'e'b' 'e's'e'h't' 'd'e't'a'r'e'n'e'g''''e' 't'a'h't' ''e'r''''''''''''''?'e'l'b'a'c'u'd'o'r'p'e'r' 's'i'h't' 's''''''''''''''''i'h't' 'S'I' ''''''''''''''''''''''''' '.'u'o'y' 'e'v'e'i'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','e'n'i'l'e's'a'b' '''g'n'i'r't's' 'S'J' 'y'm'''''''''''t'p'i'r'c's'a'v'a'j' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'd'o'c''''''s'k'n'i'l''''''e''' ''d'o'c' ' '''''''''''''''''''''''''.'g'n'i's's'i'm' 'n'a'h't' 'r'e't't'e'b' 's'i' 'y's's'e'm' 't'u'b' ';''''.'s's'e'm' 'a' 's't'I' '''''''''''''''''''''''t's'i'g' 'b'u'h't'i'g' 's'i''' ''h't' 'n'i''''''''https''''''''''e't'a'l'o's'i' 'o't'://gist.github.com''n'n'''/josephg/13efc1444660c07870fcbd0b3e91763''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'i' 'h'c'i'h'w' '-' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.')'g'n'i's'u' 'm'''I' 'M'A'R''''r' 'h'c'u'm' 'w'o'h' 't'u'o' 'g'n'i''''''''''''' 't'u'o'r'u'g'i'f'''''''''''' 'g'n'i't'a'r'e'n'e'g' 'm'''I' 'w'o'h' 's'i' 's'i'h'T'(' '.'''''''''''''T'(' '.'s'c'i't's'i't'a't's' 'r'o't'a'c'o'l'l'a' 'y'r'o'm'e'm' 't'u'o' 't'n'i'r'p' 'o't' '`'e'g'a's'u'm'e'm' 's'e'r'u't'a'e'f'-'-'`' 'd'd'a' 'n'a'c' 'u'o'Y' ''''''''''''''''''''''''''''''''''t'd'r'c' '' 't's'u'r'''''''''''''''''''''''.'e'r'e'h'w'y'n'a' 'r'e'p'p'a'r'w' 'm's'a'w' 'y'm' 'd'e'd'a'o'l'p'u' 't'''n'e'v'a'h' 'I'n'n'''''''''''''''''''''''''https://github.com/josephg/text-crdt-rust/tree/ba20b6386''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'r'.'c'o'd'/'l'a's'r'e'v'i'n'u'/'c'r's' 'f'o' 'p'o't' 'e'h't' 'r'a'e'n' 's'e'n'i'l' 't'u'o' 'g'n'i't'n'e'm'm'o'c' 'y'm' ''''''''''''''o' 'e'h't' 'r'a'e'n'''' 'n'i' 's'e't'a'd'p'u' 'e'p'o'r' 'e'n'i'l'n'i' 'e'h't' 'f'f'o' 'd'n'a'''''''a'o' 'n'o' 'n'r'u'T' '.'e'n'i'l'e's'a'b' 'y'e'p'o'r' 'e'h't' 'r'o'f' '`'y'e'p'o'r' 'n'o'i'r'e't'i'r'c' 'o'g'r'a'c'`' 'r'o' '`'s'j'y' 'n'o'i'r'e't'i'r'c' 'o'g'c0472958f33024ce0b806e75470e1c'''''''''''''''''''r'a'c'`' 'h't'i'w' 't'i' 'n'u'R' '.')'a'(']'e'd'o'c' 's'i'h't'[' 'g'n'i'k'r'a'm'h'c'n'e'b' 'm'''I' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 't's'u'r' 'y'm' 'r'o'F' '.')'8'(']'e'r'e'h'[' 's'i' 'g'n'i'n'n'u'r' 'm'''I' 'e'g'r'e'm'o't'u'a' 'd'n'a' 's'j'y' 'r'o'f' 'e'd'o'c' 'k'r'a'm'h'c'n'e'b' 'e'h'T'n'n'y'a'l'p'''''''''''''t''''&' 'y'f'i'r'e'v' 'o't' 't'n'a'w' 'I' ''e'b' 't'''n'o'd' 'I'''''''''''''''''''''''''''''''''''''''''''''?'s'k'r'a'm'h'c'n'e'b' 'r'u'o'y' 'n'u'r'-'e'r' 'o't' 'e'd'o'c' 'e'h't' 's'i' 'e'r'e'h'W''''''''''''''''''''''d'e'h's'i'l'b'u'p' 't'''n'e'v'a'h' 'u'o'Y' '#'#'#'n'n'n''t'e'b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'a'h't' 'f'o' 't'u'o' 'k'c'e'h' 'e'h't' 'd'a'e'r' 'd'''I' '.'e'd'i'u'g' 'd'e'l'i'a't'e'd' 'e'r'o'm' 'a' 'h's'i'l'b'u'p' '''''''''e'm' 'w'o'h's' 'd'n'a' 's'e'c'n'e'r'e'f'f'i'd' 'e'c'n'a'm'r'o'f'r'e'p''''''''''''' 'd'n'a' 's'e'g'n'a'h'c' 'e's'e'h't' 'f'o' 'h'c'a'e' 't'r'a'p'a' 'l'l'u'p' 'o't' 'e'n'o'e'm'o's' 'r'o'f'''' 'o't' '*'e'v'o'l'*' 'd'''I' ',''''''u'o'y' ''''''' ','s'r'e'h't'o'b' 's'i'h't' 'f'''' 'I''o'''''''''''''''f'f'u't's''''''''''s'c'i'f'i'c'e'p's' '''''''''d'e'Yes. This is a reasonable criticism of this approach. I covered too much territory here to be as thorough as I'd like. I did benchmark 4 different CRDT implementations here - 2 of which I wrote myself from scratch. And this post is nearly 7000 words. If this bothers you, please do more detailed benchmarks. I'd love to''t'n'e'v'n'i''''''''''s'w'e'n' 'e'k'a'f''''''''''r'e'l'i'p'm'o'c''''''''''p'm'o' 't's'u'r' 'e'h't'''f'o'''''''''''''t's'a'f' 's'i' 't's'u'r' 'e's'u'a'c'e'b' tidying up automerge'''' '''s'u'o'i'v'b'o' 'e'm'o's' 'g'n'i'o'd' ''''''''''''''''''''''e'g'r''''''''''''''''''''''''''''''''''''''''''''''' 'd'e'l'i'a't'e'd' 'e'r'o'm''''''''''''''''''''''''''''''' 'o't' 'e'v'o'l' 'd'''I' '.'s'k'r'a'm'h'c'n'e'b' 'e's'o'h't' 'o'd' 'e's'a'e'l'p' ','u'o'y' 's'r'e'h't'o'b' 's'i'h't' 'f'I'''''''''''''e's'o'p'p'u's' 'I' 'o'S' '''''e'm'o't'u'a' 'p'u' 'g'n'i'y'd'i't' 'd'n'a' 's'j'e'l'b'a't'u'm'm'i' 'g'n'i'v'o'm'e'r' 't's'u'j' 't'c'e'p's'u'''''''u's's' 'I' '-' 'h't'r'o'w' 's't'i' 't'a'h'w' 'r'o'f' 'd'n'A' ''''v'a'j' 'P'F'(' '.'''''''(' 't'n'e'r'e'f'f'i'd' 'y'l'l'a't'o't' 's'i' '''''A''o's'a'e'r' 'r'e'v'e't'a'h'w' 'r'o'f' '''''''''' 's'''e'g'r'e'm'o't'u'a' 't'u'o''''''''''''''''''''''''''''''''''''''''' 'e't'u'b'i'r't's'i'd'''''''''''''''''''''''''''''d'e'n'e'p'p'a'h' 't'a'h't' ''''''''''''''''''''''''''''''''''.'s'e'g'n'a'h'c' 'e'h't' 'l'l'a' 't's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i'h't' 'f'o' 't'r'o'''''''''''''''''''''''''''''.''Yes. This is a reasonable criticism of this approach. I covered too much territory here to be as thorough as I'd like. I did benchmark 4 different CRDT implementations here - 2 of which I wrote myself from scratch. And this post i'''''''''''''''''''''''''''.'y'd'a'e'r'l'a' 's'd'r'o'w' '0'0'0'7' 'y'l'r'a'e'n' 's''Y''.'T'''''''''?'p'u' 'e'd'a'm' 't's'u'j' 's'i' 's'r'e't'n'i'o'p' 'f'o' ''s' 's'i'h't' 'r'o'f' ''''''''''''''''''''''''n'o'i's's'u'c's'i'd' 'y'm' 'l'l'a' 'd'n'a' ','t'p'i'r'c's'a'v'a'j' 'n'a'h't' 'r'e't's'a'f' 'h''''''''''''''''''' 's'i' 't's'o'p' 's'i'h't' 'd'n'A' 'c'u'm' 't'a'h't' 't's'u'j' 's'i' 't's'u'r' 'e'b'y'a'M' ''g'n'o'm'a' 'p'u'd'e'e'p's' 't'a'h't' 'e't'u'b'i''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'e'h' ''''''''''''''''''''''''''''''''''''''''''h'c't'a'r'c's' 'm'o'r'f' 'f'l'e's'y'm' 'e't'o'r'w' 'I' 'h'c'i'h'w' 'f'o' '2' '-' 's'n'o'i't'a't'n'e'm'e'l'p'm'i' 'T'D'R'C' 't'n'e'r'e'f'f'i'd' '4' 'k'r'''''''''' 'r'k'a'm'h'c'n'e'b' 'd'i'd' 'I'''e'W' '.'e'k'i'l' 'd'''I' 's'a' '''''''h'g'u'o'r'o'h't' 'e'b' 'o't' ''.'e'r'e'h' 'y'r'o't'i'r'r'e't' 'h'c'u'm' 'o'o't' 'd'e'r'e'v'o'c' 'I' '.'h'c'a'o'r'''''''r'a'p'p'a' 's'i'h't' 'f'o' 'm's'i'c'i't'i'r'c' 'e'l''''''''''e'l'i'b'a'n'o's'a'e'r' 'a' 's'i' 's'i'h't' ','s'e'y' 'd'n'A'c'i'h't'i''''o'l'o'n'o'm'r't'''t'a' 'o't' 'w'o'h' 'w'o'n'k' '*'y'l'l'a'e'r'*' 't'''n'o'd' 'I'h'g'u'o'r'h't' 'p'u' 'p'o'p'''''''''d'e'r'a'e'p'p'a' 't'a'h't' 's'y'a'r'r'A'8't'n'i'U' 'e'h't' 'l'l'a' 'd'n'A' '.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''?'p'u'd'e'e'p's' 'e'h't' 'e't'u'b'i'r't't'a' 'e'w' 'd'l'u'o'h's' 't'a'h'w' 'o't'''''''''''''''''''s'i'h't' 'f'o' 't'r'a'p'''h'c' 'h'c'i'h'w' 't'u'B''''' 'w'o'H' '.'e'g'n'a'h'c' 's'i'h't' 'm'o'r'f' 'e'c'n'a'm'r'o'f'r'e'p' 'x'0'1' 't'o'g' 'e'W''''''''e'd'o'c' 'y'M'''''''h'T'n'n''''''''''''''s'''''''''''''''''''''''''''''''''''''' 'm'o'r'f''''''''''''''''''''''''''''''''''i''' 'o'S''''''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''t'a'h't' 'r'e'w's'n'a' 'o't' 'e's'o'p'p'u's' 'I'n'n'.'''''''''' 's'a'r'e'h'w' ';'e'r'e'h' 's'p'u'd'e'e'p's'''''''''''''''''e'c'n'a'm'r'o'f'r'e'p' 'e'h't' 'g'n'i't'u'b'i'r't't'a's''''''''''''i'm' 'm'''I' 'e'l'b'i's's'o'p' 's't'I' '''' '.'g'i'b' 'y'l'r'a'l'i'm'i's' 'e'r'a''''''''''''' 'e'd'o'c' 't's'u'r' 'y'm' 'o't' 's'j'y' 'd'n'a' ',''''''''''s'i' 's'j'y' 'o't' 's't'd'r'c'-'e'c'n'e'r'e'f'e'r' 'm'o'r'f' 'e'g'n'a'h'c' 'e'h'T''''''''' 'n'a'c' 'w'o'H''''W''''''''''''''''''''''''''''''''e'h't' 'e'd'a'm' 's'e'g'n'a'h'c' 'e's'e'h't' 'f'o' ''''''''''''''''''''''''''''''''''''''''''''''''''Which''''''' 'h'c'i'h'W'n'n'e'l'y't's' 't'p'i'r'c's'a'v'a'j' 't'n'e'r'e'f'f'i'd' 'a' 'd'''''''d' 'e's'U' '-'n'l'o'c'o't'o'r'p' 'd'n'e'k'c'a'b' '/' 'd'n'e't'n'o'r'f' 's'''e'g'r'e'm'o't'u'a' 'd'e'v'o'm'e'R' '-'n's'j'e'l'b'a't'u'm'm'i' 'd'e'v'o'm'e'R' '-'n')'t's'i'l' 'o't' 'e'e'r't''''''''''''''''' '>'-' 't's'i'l'(' 'e'r'u't'c'u'r't's' 'a't'a'd' 'e'r'o'c' 'e'h'T'''''e'r'o'C' '-'n'n':'s'e'g'n'a'h'c' '''''''''s't'd'r'c'-'e'c'n'e'r'e'f'e'r'''''''u'a' 'o't' 'e'g'r'e'm'o't'u'a' 'm'o'r'f' 'g'n'i'v'o'M' ' 'e'e's' 'l'l'''''''''''l'u'o'Y'''''''''''''''''''''''''''''''t'c'a' 's's'a'l'c' 'a''''''''''''''''''w''' '-' 't'i' 't'e'g' 't'''n'o'd' 'I'''''''s'i' 'y'h'W'' 's'i' 's'n''''''''?'''w'o'l's' ''''' 't'''s'u'j''o's''h'a'J''''Y' '''' 'n'i'v'e'K' '.'''s's'e'n'i's'u'b' 'e'h't' 'n'i' 't's'e'b' 'e'h't' 'y'l't'n'e'r'r'u'c''''''' 'e'h't' 's'i' 's'X''''j'Y' '''https://github.com/yjs/y''''''''''''''''''''''''''''''' 't'u''''''''''''''''''''l'u'o'h's' 'r'e't'c'a'r'a'h'c' ''o' 'e'r'u'g'i'f' 'e'w' 'o'd' 'w'o'h''''''''''''''''''''''?'t's'r'i'f' 's'e''''''''''''''''''''''''' 'n'o' 'd'e's'a'b' 'm'e''''''''''''''''''''''''''''''''''''''''e'g'r'e'm'o't''''''''''''''''''''''''''' 's''''''t'''I' '.'k'c'a'h' 'a' 'f'o' 't'i'b' 'a' 'h't'i'w''u'A''''''r'e'v'e'.'''c'X'b'a''' 'h't'i'w' '''''''''''s'''m'e't'i' 'w'e'n' ''p'u' 'd'n'e' 'd'''e'w' 'n'e'h't'h'''''''''''''''''''''''''''''''s't'd'r'c'-'e'c'n'e'r'e'f'e'r' 'y'm''''''''''''''''''''''''''''' 't'e's' 'u'o'y' ','''o''' 'e'b''t'g'n'i'h't'y'n'a' 't'r'e'''''''''''''''''''''''''''''''''''''''''''''' ','e'l'p'm'a'x'e' 'r'o'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'i'h't' '''''''''''''''e'g'r'e'm'o't'u'a' 'n'a'h't' '','''''''' 'p'u' 's'd'n'e'''''''''''''o's'l'a' 's't'I' '.'''''''''''t' 'g'n'i's'u' ','e'd'o'c' 'y'm' 't'u'B' '.'s'j'e'l'b'a't'u'm'm'i' 'e's'u' 't'''n's'e'o'd'''''''''e'o'd' 'o's'l'a' 'n'o'i't'a''''i't'n'e'm'e'l'p'm'i''''o' 'y'm''''''''''''''''''''' 'g'n'i't'n'e'e'l'p'm'i' 't'o'n' ''''n'm'''I' '-' 'e'k'i'l'-'r'o'f'-'e'k'i'l' 'y''''''' '-' 'p'o't'S'''''''''''!''''''''.'g'n'i'''y'd' 'm''''''''' 'm'I''''''l'''''t'''''c'a'x'e' 't'o'n' 's't'I's'n'i'''''''''''''''''''t''''':'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'r'-'e'g'r'e'm'o't'u'a''''w' '''''''''''''''''''''''''''''''''''''''''''''''''' Definitely don't submit any PRs to f''''''''''''''''''''''''''''.'t'i'u'r'f' 'g'n'i'g'n'a'h' 'w'o'l' 'e'h't' 'l'l'a' 'x'i'''''''''''''''''''''''''''''''''''''''''''i'f' 'o't' 's'R'P' 'y'n'a' 't'i'm'b'u's' 't'''n'o'd' 'y'l'e't'i'n'i'f'e'D' ''''t'''''.'''''''*'h'c't'i'w'T'*' '.'t'i' 't'u'o'b'a' 'k'n'i'h't' 'o't' 't'o'n' 'y'r'T' ''n'.'''r'e't't'a'm' 't'''' '''n's'e'o'd' ''''''' 'd't'i' 'o'S' ''h't'i'w' 'd'e'c'a'l'p'e'r' 'n'e'e'b' 's'a'h' 'y'd'a'e'r'l'a' ''''''''''''' 'y'l't'h'g'i'l's'''''''''''''''''''''''''''''''''''''''u'o'y'''''''''''''',''''e's'a'b''e'n'i'f' 's't'i'''''''>''' Wow I saw a sequence number, and it was *this big''''''!''''''''''''''''''''''''''''''''.'m'e'h'A' '.'''''''''*'!'r'e'g''''e'g'i'b' 'n'e'v'e'*' 's'i' 'e'n'i'M' '?'h'a'e'Y'''''''''Y' '.'*'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!'''''!'*'g'i'b' 's'i'h't'*' 's'a'w' 't'i' 'd'n'a' ','r'e'b'm'u'n' 'e'c'n'e'u'q'e's' 'a' 'w'a's' 'I' 'w'o'W' '>''n'n'''''''''''' 'o'W'('n'n''''''r'e'v'e't'a'h'w'''''''''''''''''''''''''''''''''''''''''''''')'w'o'n' 't'a'h't' 'o't'n'i' 't'e'g' 't'o'n' ''('s't'e'l''''''''''''''''''' 's'i' 'e'c'n'e'r'e'f'f'i'd' 'e'h't' 't'u'b' ','g'n'i'h't' 'r'e'b'm'u'n'''''''''''''''''''''''''''''''''''')'.'y'a'd' 'r'e'h't'o'n'a' 'r'o'f' 'm'e'l'b'o'r'p' 'a' 's't'a'h't''m''''''''''''''o't' 'g'n'i'o''''''*'e'r'e'h'''''''''''''e'r'e'j'*''''('''''''*'(''''g' ''''''h't' 'r'e'n'm'u'n' 'e'c'n'e'u'q'e''''''''' ','m'h'u' ','h'U''s''''e' 'e'h't' '''o't' 'h'c'a'o'r'p'p'a' 't'n'e'r'e'f'f'i'd' 'a' 's'a'h' '')'s'''''''''''' '.'r'e'v'e't'a'h''''''''''t'h'a'W''''''''''y'n'A' ''''''''''''''a''' 'r'o'F''''How fast is it?''''''''''''e'g''5'7''''''r'e'm'o't'u'a' ' ''''''''''''''''''?'A''t'i' 's'i' 't's'a'f' 'w'o'H''''''''''''''''''g'''''''''''''''''' 'e'c'''''''m'o'r'f''''''''''''e'd'a'm' 'f'l'e's'm'i'h' '''a'r't' 'g'''' 'n'i't'i'd'e' 'n'a'n'i'','b''''''s''''''''''f'o' 'e''''''''''' 'p'u' 'g'n'i'p'y't'''c'a'''''''''n'i'''r'''t' 'u' '''''' ''''''o's'l'a' 'n'w'o''t'i' 't's'e't''''n'u'r'''''''s'a'f''''''''''''''''''''t'''n'''s'i' 'h'c'i'h'w' ','''''''''''''y'''a'''''y'l'n'o' ''w''''''''''y'w'a'y'n'a' ''e'w''''e' 'w'o'h' 'o'S'''''''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i''''e'h't'''y'm'h't' 'f'o' 't'r'o's' 't'a'h't' 'o't'n''''''''''''''''' '-' 'o'n' ','t'i'a'W'i' 'e'r'''u'o'y' '''''''''''''d'n'u'o'r'a' 'k'c'i't's' ''f'i' ''''''''''''''''''''''''''''''''''''''''s'e'm'o'c'e'b' ''''''''[''''The editing trace'''''''' 's'i'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'k'o'r't's'y'e'k' 'y'r'e'v'e' '''''''''''' ','s'a'h' 'n'a'C'''''''''''' '2'^'n'?'''''''''m'a'r'g'a'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'a'h't' 'o'd''''k'a'm' 't'i' 'd'i'd' 'w'o'H'''''''''''''''''''?'o'd' 't'i' 'd'i'd' 't'a'h''''''' 's's''j'Y'w''''l' 'o'S' '.'s'm'e'l'b'o'r'p' 'e's'e'h't' 'd'e'x'i'f' 's'a'h'''''''r'e'v'e' 's''''''''''''t'n'e'm'u'c''''''''''''''''''''''''''''''''l'l''''''''''''y'l'b'a'b'o'r'p' 'y'e'h't'''r''''''''''''''''''''''''''''' 'y'l'l'a'u'''s'u''m'e't's''s'y's' 'e'''''''''''''''''''n' '''''''n'n''''o'i't'a'c'o'l' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''B' '.''')'''s'n'o'i't'a'c'i'l'p'p'a' 'g'n'i't'i'd'e'-'t'x'e't'-'n'o'n' 'r'o'f' 'l'l'e'w' 's'a' 'k'r'o'w' 't'''n'd'l'u'o'w''''''''''o'w'''''''o'w'''''''u'w'o' 'y'l'b'a'b'o'r'p' 't'i' 'd'n'a'(' ''d'e'h'c'a'c' 'e'h't''h't' 'o'S' '.'e'''t'a'l' 'g'n'i'h't'e'm'o's''''o't' 'y'r't' ''o'd' 'e'h't''j'y' 'n'a'e'm' 'I' ','e'w' 'y'b' 'd'n'A' 'd' 't'r'e's'n'I' '>''''n'n''h't'i'w' 'r'e'w'o'l's' 's't'e'g' 't'i' 't'u'b' ','t's'a'f' 'f'f'o' 's't'r'a't's' 'm'e't's'y's''''a' 'e'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s''n'n'''''A' ''''''r'''e't'c'a'r'a'h'c' '0'0'0''' ''''' '''.'b'k'0'0'1' 't'''u'o'b'a' '''''''''''''''''''''''''''''''''''''s'e's'u' 'e'g'r'''''''''''''''''''''''''''''''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''a' 'g'n'i's'u' ','''''''''''''''''''''''''''''''''''''''''''''''''''''w'o'l's' '''s't'i' 't'u'b' ''''''''''''''''''r'e't's'a'f' 's'i' 's'i'h'''''''' 'o't''''' 'u'o'y'T' '.''''' 's't'i'd'e' 't'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''e't''.'T''o'r'w' 'e'w' 't'a'h'w' '''' 'l'l'a''f'o' 'n'o'i's'r'e'v' 'd'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'m'e't'i' 's'u'o'i'v'e'r'p' 'e'h't' 's'i' 't'n'e'r'a'p' 's''''''''''''''''''''''''''''''''a' 's'a' 'm'e't'i' 's'u'o'i'v'e'r'p' ''''''''''e'r'p'e'h't' 's'a'h' 'm'e't'i' 'h'c'a'e' ''''''s'd'e'e'n'd'n'a' ','e'm'i't' 'h'c'a'e' '1' '''''' 'r'e't'a'l''y'b' 'p'u' '''''''''''''p'u' 't'''''''''''''''''''''''''''''''.''''''i'''''' 's'i'h't''' 't'u''''t'e's' ''B'x'e'''g'n'i''l'p'm'o'c' 't'i'b' 'a' 's'i'''''y'a'r'r'a'' 'c'i'g'o'l''''' '''''e'''''h't' 'o's'o'g' 's'd''' ','''i''' 'e'h't'''''''''''''''''''e'h't' 's'i' 't'n'e'r'a'p' 'h'c'a'e' 'e'm'u's's'a' 'e'W'(' '''''''(' '.'''' 'e's's'e'r'p'm'o'c' 'a' 't's'u'j'''''''j' ' 's'i' 's'i'h'T'r'r'u'c'n'o'c' 'w'''''''''''''s'i' '''n'u'r'''''o''''''''''' 'l'l'a' 't'h'g'i'm' '''''''''''''''':''''':'r'e':''''w'o'l's' 'h'c'u'm' 's't'i' ','''' 'l'l'e'w' ',''''[''I'''''''y'l'''https://immutable-js.github.io')'/'(']'' ''''t'c'e'r'i'd' 't'p'i'r'c's'a'v'a'j' 'n'i' 't'a'h't' 's's'e'c'o'r'''p' 't's'u'j' 'e'w' 'f'''''''''?'h'g'u'o'h't' '''I''' '''''W'''''''''''''''''e'r'a'p'm'o'c' 'n'a'c' 'e'W'*'s's'e'r'p' 'y'e'k' 'r'e'p'*' 'm'a'r' 'f'''''''i' 't'u'b' ',''o''''f' 'b'k'0'1' 's't'a'h'T' '!'a'o'h'W'''''!''''!''''.'w'o'W' ''e'm'o't'u'a' ','e''''w'n'o'd' 's't'i' 'e'm'i't' 'e'h't' 'y'b's'i' 'e'z'i's' 't'n'e'm'u'c'o'd' 'l'a'n'i'f' 'e'h't' 'd'n'a' ','s't'i'd'e' '0'0'0' ''''0'0'8'2' 's'a'h' ''M'''''''''''''''''''' 't's'u'j''''' 'e'c'a'r't' 'g'n'i't'i'd'e' 'e'h'T'n'n''''''''''''a''' ','''''''e'v'o'b'a' 'y'a'w'y'n'A''''''''(''''''''')''''''''''''''''''''https://github.com/dmonad/crdt-benchma' 'rk''''''''''''''''''''''''''''''''''''''''''''''''''''''t'a'h't'''''o'o'A''t' '''''''''''''e'g'''r'e'm'o't'u'a' ''''''''''''''''''' 'r'i''''''''''''''''''''''using Nod''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'''''''''''''''''''''.''''''''''''o'd' 'w'o'h' 'o'S't'e'y' 'd'e'd'n'a'l' '''''''''''''''e'h't' 'f'o' 'n'''''''''''''''''''''''' 'g'n'i't'i'r'w' 'f'o' 'e'H''''''''''''''r''''''''''''''''''''''''''''''''''''''''''''''''''e't'i'r'w'e'r' 'a' 'n'i' 'y'a'w'a' 't'i' 'w'o'r'h't' ''''''''''''' 'e'h't' '''''''''''k'c'a'b' 'n'w'o'r'c' ''m'i'a'l'c''''''''''''e'h't' 'm'i'a'l'c'e'r'o't' 't'u'o'b'a' 'e'r'''u'o'y'''''''''a' 'e'r'''o'u'y' 'n'e'h'w'''''''''''''''''g'n'i't'i'r'w'e'r' 'e'r'o'f'e'b'''''''''''''''''''''a'f''''''''''''''''''''''''''''''''''''''''''''' 'n'o'i't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''''''s'j'Y' '.'e'd'a'm' 'l'l'e'w' 'd'n'a' 'd'e't'n'e'm'u'c''''u'o'd' 'l'l'e'w' ','t's'a'f' 'pretty''really'''''''''y'l'l'a'e'r''y'l'l'a'e'r' 's't'i' 'd'n'A''''A'''''''e'K' '.'s'n'h'a'J' 'n'i'v'e'K''''H''''J' 'y'b' 'e'd'a'm' ''a't'n'e'm'e'l'p'm'i''''''''''''''''''''b'u'h't'i'g' 'n'o''''''' 'n' 'm'h't'i'r'o'g'l'a' 'T'D'R'C' ')'g'n'i't'e'p'm'o'c'(' 'r'e'h't'o'n'a' 's'i' ' 's'a' '''''''' 'n'e'''g'n'i''''''h'''t' 'd'n'a'''''''e'r'o''''g'n'i'''f'e'b''''''''''''''''''''''''''n'a'c' '''t'i' ''u'o'y' 'n'e'h'w'e't'u'p'm'o'c' 'e'h't'm''There's an old saying with performance tuning:'''''''''''''''''''''''''''''''''''''''''''''''''s'g'n'''''''''''''''''''''''''''''''''.'''':'W''m'a'e't' 'e'g'r'e'm'o't'u'a''''''''r'e'm'o'u't'a' 'e'h't' 'h't'i'w' 'e'e'r'g'a' 'I' ''i'h't' 'g'n'i'v'o'r'p'm'''''i' 'd'n'a' 'e'd'o'c''A''' 'e'h't' 'h'g'u'o'r'h't' 'g'''''''''''''t'h'g' 'n'i'o'g' 'm'o'r''''''''''x'i'f''''''''''''''''.'t'i' '''e'v'o'r'p'm'i'''''''m'I''' 's't'e''''''''''s't'E'L'''''''' ''''''''''''''''''s'i'h't' 'h't'i'w''''''''''''''''''d'e't'a'c'i'l'p'm'o'c' 'e'r'o'm' 's'''''''l' '''' 't'u'B'''''''''''''''''''y'b' 'd'e'r'e'e'n'o'i'p'''''''''''e'K' '''''''''''''t'u'o'b'a' 'g'n'i'k'''','''l'''''')'?'(' ''a't''''''''''''''''''''''''''''''''''y'a'r'r'a' 'e'h't' 'o't'n'i' 'g'n'i''''''''''y'l'e'r'a'r' 'o's'c'i'l'p's' ','e'r'e'h'''*''W'''e'r'''e im'''g'n'i'plement a li'*'st CRDT with a l'''''It sounds complicated - how do you figure out where the new item should go? But'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''I'.'s'k's'a't' 'g'n''''''''o't'''''''f'o' 'e'n'o'''''''''' 't'n'e'm'u'c'o'd''' '' 'e'v'a'h' ''i't'i'd'e'-'''''''e' 't'x'e't'-'n'o'n'''''''' 'f'u't's'''''''a'r'e't'n'i' 'r'o'f' 't's'a'f' 'e'b' 'd'l'u'o'h's'''''''''''''d'e's'u' 'e'b' 'l'l'i'w' 'e'd'o'c' 's'i'h't' 'd'n'A' '''''''n' '.' its complicated ''''r'u'o'y'like *math* is complicated. Its hard to unders'''''''''''''' 'm'o'r'f' 't's'u'j' ','tand, but when you do, you can do the whole thing i''''''''''''''''''''''s'r'a'''e'y' 'w'e'f' 't's'a'l' 'e'h't'.'E''''''''' 'n'i' '''''''','w''''''''''''''''''!'''''''''''''s'e'g'a'p'b'e'w' 'g'n'i'k'a'm' 'n'e'h''''e'w' 'n'e'v'e' ','n about 20 lines of code.'n'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''[''''''''''' 'l'l''https://github.com/josephg/reference-crdts/blob/main/crdts.ts'a''''''''https:''''''''''''''''''''''' ''''''''''''''''''''.'l'i'a't'e'd' 'e'r'o'm' 'n'i' 's'i'h't' 'd'''' 'n'a't's'r'e'd'n'u'''''''''''''''''''''m' 'n'i' 't'u'o' 's'i'h't' 'e'r'u'g'i'f'//github.com/josep'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'e'c'n'e'r'e'f'f'i'd' 'e'c'n'a'm'r'o'f'r'e'p' 'e'h't' '''''''''''''''''''''''''''''''''e'c'n'a'm'r'o'f'r'e'p'''''''''''''''''''''''''''''''''''''''''''t'u'o'b''''''''''''''''''''y'r'o'm'e'm''' 'n'i'a'm' 'm'o'r'f' 'a' '''n'i' 'm'e't''.'''''','n'i'a'g'A''i'''''''i't' 'y'n'a' 'd'n'i'f' 'n'a'''''''''''''''''''''''''''' 'a' 'n'i' 'g'n'i'h't'y'r'e'v'e' 'g'n'i'l'f'f'u'h's''c' ''''c'e'w' 's'n'a'e'm' 't'a'h't' '' 's'''s'j'y' '''''''''''''l'a'c'i't'n'e'd'i' 'e'r'a''d'n'a' 'e'g'r'e'm'o't'''''''t'o'u'a'''''''''''''''''''' 's'c'i't'n'a'm'e's' 'T'D'R'C' 'e'h't'''''''''''''''' 'e'c'n'e'r'e'f'f'i'd' 'e'h't''''''''''''e' 'e'h't' 'l'l'''''''''.'t'e'y''''''''''t'e'u' 't'i' '''a''''' ''','s'i'h't' 'e'k'i'l' 'd'e't'n'e'm'e'l'p'm'I'''''''''''''''''''''''''''''''''''' ''''''''''''''' 'f'o' 'k''''''''''''''''''''''''''''''''y'r'o'm'e'm' 'n'i' 'r'e'h't'e'g'o't' 'd'e'k'c'a'p' 'l'l'a' ','c'o'l'b' 'a''s'e'''e'''''''''' 'l'l'a' ',''''''e'r't'-'b' 'y'm' 'n'i' 'e'd''''e'o'n' 'f'a'e'l' 'h'''''''''''''''''''t'o'N' '.'''e'l'c'y'c' 'k'c'o'l'c'c'a'E'''r'e'm'o't'u'A''''C' ''''''''''''''''''' 'h't'o'B' 'hg/referen'''''''''''''''' 'o't' 't'n'a'w' 'u'o'y' 'f'i' 'ce-crdt')'s'(']'e'''n'n'n''''r'e'h' 's'i' '''e'd'o'c' 'e'h'T' '.'''''''''''''''''''''''''''''''''''''''d'l'u'o'c' 'I' 'e'v'o'r'p' 'o't'''' ''''''''''''''''''''''d'n'a't's'r'e'd'n'u' 'd'l'u'o'c' 'I' 'o's' ','e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 's'''''''''''''''''''''''''''''''''''e'h't''' 't''''''''''''''' 't's'e't' 's'i'''''''''''' '?'t's'a'f' 'w'o'H''h't' 'n'i''''''''''''''''''''''y'a'w'y'n'a' 'l'a'c'i't'n'e'd'i' 's'i' 'u'B'''''''''''''''''''''''''''''''''.'e'c'n'a'm'r'o'f'r'e'p' 'l'a'c'i't'n'e'd'i' 'e'v'a'h' 'y'e'h'T''''' 't'u'B' '.')'s'j'y'''''''s'j'(' 'A'T'A'Y''''''''''''''''(' 's'j'y' 'd'n'a' ')'e'g'r'e'm'o't'u'a'(''c'i't'n'a'm'e'''''''a'm's' 'e'h't'''''''''''''''''''u'a'(' 'A'G'R' 'h't'o'b'''''''s'y' 'f'o' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'n'a' 'e'v'a'h' 'I' 'e's'a'b'e'd'o'c' 's'i'h't' 'n'I''''B'n'''s'''I made'' Implemented like this, the automerge and yjs's performance''a'b'e'd'o'c'''''' 'T'D'R'C' 'y'o't' 'a' 'n'i' 'h'c'a'o'r'p'p'a' 's'i'h't' 'g'n'i's'u' 'f'l'e's'y'm' 'e'g'r'e'm'o't'u'A' 'd'n'a' 's'j'Y' 'h't'o'b' ''''''''''''''o'w't' 'e'r'a' 'e'r'e'h'T'''d'e't'n'e'''''''''''''''''''x'i'f' 'o't' 'd'e'e'n' 'e'w' 'e'd'o'c''m'e'l'p'm'i' 'I''''''''''f'f'e' 'n'a' 'n'''''''''''w''' 'y'a's' 's't'e'L''''L'I'n''n'ist. Geniu''s'S'''!' 't' ''h'''''''''''''''''''''t' 's't'I'n'n''c'i''''''''' 'y''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'k'i'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''n'n'n''t'u'o'b'a' 'n'i' 'g'n'i'h't' '''S''''''''''''s''' 't'a'h't' 'e't'o'N'n'''' Some of thos''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''''''''' 'm'''I' ''''''''''''''''''''''''t's'o'p' 's'i'h't'5''''''''''y'a'r'r'a' ' 'n'i''''''''''''''''''''''''''''s'r'e't'c'a'r'a'h'c''''''''''''''t' 'f'I'''''''''''''''''''''''''''''''''''''''.'d'e't'e'*'''''''''' 't'n''*'e'm'u'','w''''''''c'o'd'''''''''''''''''''''''''''w''''''''' ','t'u'o' 'd'n'i'f' 'o'T''''''t'n'e'm'u'c'o'd' 'r'u'o'''l'''e'd'''''''''''''''''''''''''n''''''i''' 'o'S''o'i't'a'c'o'l' 'y'a'r'r'a' 't'h'g'i'r' 'e'h't' '' 'n'e'e'b' '''''t'''n'e'v''''''''''''' 'g'n'i'h't'e'm'o's' 'r'o''a'h' 'h'c'i'h'w' 's'm'e't'i' '0'''' '0'0' '0'0'1' 'g'n'i't'n'e'''''''''''''''''''''''s'e'k'i'y' 'e'l'b'u'o'd' 's'i' 'h'c'i'h'w' ',''s'e'r'p'e'r' ',''''''''''''M' '.''''''''''''5'''''''''''.'w'o'n' 'r'o'f' 't'a'h't' 't'u'o'b'a' 'y'r'r'o'w' 't'o'n' 's't'e'l' 't'u'B' ''a'r'D'''''''''''''''''y'a'r'r'a' 'y'm' 'n'i' ''''''''' '.'g'n'a'D''''''!'')'s'p'o'O'(' '.'m'e'h't' 'n'o' 'd'n'e'p'e'd' 't'h'g'i'm' 's't'r'e's'n'i'''''''''''''''''''''a' 't'r'e's'n'i' 't'h'g'i'm' 's'r'e'e'p' 'r'e'h't'o' 'e's'u'a'c'e'b' 'y'a'r'r'a' 'e'h't' 'm'o'r'f' 'm'e'h't' 'e'v'o'm'e'r' 't's'u'j' 't'''n'a'c' 'e'W' ''e'n'o' 'h'c'i'h'w' 'k'r'a'm' 'o't' ''.'''''''''''''''''''''''.'h'c'u's' 's'a''''s' 'm'e'h't' 'k'r'a'm' 'o't' 'g'a'l'f' '`'d'e't'e'l'e'D's'i'`' 'n'a' 'd'e'd'd'a' 'e'v'''I' 'o's' ','''e items might h'I'''''ave been deleted:'n''e'l'''''''''''' 'l'e'o'h'w' 'e'h't' 'o'd' '''n''''''.'o'o't' '''a'c' 'u'o'y'''''''''''''''''''''''''''' 'u'o'y' ','o'd' 'u'o'y' 'n'e'h'w' 't'u'b' ','d'n'a't'''''s'r'e'd'n'u' 'o'''t' 'd'r'a'h' 's't'I''.'d''''.'e't'a'c'i'l'p'm'o'c' 's'i''''''''''''''''''''''''''''''''''d'e't's'e'r'e't'n'i' 'e'r'''u'o'y' 'f'i' '''f' 'u'o'y' 'e'c'n'o''''' 'e'h't' '-' '''''''''''''''''''''''''''''''''''' i' yo' wan' to.'t'u'f',''''''''''''''''''''''''''''.'o't' 't'n'a'w' 'u'o'y' 'f'i' ',''''''''''''''t'r'o'h's' 'n'I''W'''''' We'' impleme'n'nt a list CRDT with a list. Genius!'n'''''This approach is better for lots of reas''o''' We implement a list CRDT with a list. Genius!'ns :n''''This app'''''s'e'o'd' 'roach''''.'''''''''''l'l'a' 'e'r'''''''r'e'v'e'e'W'''''''''''''''''''''''''''''''''r'e'v'o' 's's'e's'b'o' 'e'w' 't'a'h'w''''''''''''''''''''''''''''''''''''''.'''''''''''c''''h'''''''''''''''''''''''''''''p'u' 'd'e'x'i'm' 'r'e'b'm'''''''''''''''' 'r'e'm'b'u'c'u'c' 'd'n'a' 'i'n'i'c'c'u'z' 't'e'g' 'l'l'i't's' 'I''''''t'''n'''''''t'''o'd' 't'u'b' ','''' 'h'g'u'o'n'e' 'l'l'e'w''''p' 'e'd'o'c' 'n'a'c' 'I' '''r'u'o'''''''s'e'i'''''''''''h''' 'e''''''''''e'r'''e'''h's''''h'a''w' 't'u'b's'u'a'c'e'''''''''''''''''''''''''''''''''' 'd''''''''''''''''''l'u'f'e's'u' 'y'l'l'a'c'i't'c'a'r'p''n'a' 'w'''''''''''''l'u'f'e's'u''''''''''l'''a'c'i't'c'a'r'''p' 'e'b' 'o't'o'l's' 'o'o't' 'e''''''''''''''''' 'l'a'c'i't'c'''''''''' 'd'e's's'i'm's''''m'i'd''a'r'p' 'r'o'f' ''r'e'''''''''''''''''''o't' 's'e'm'o'c' 't'i' 'n'e'h'w'w'''''''''''''' 'd'n'a' 'g'n'i'd'a'e'r'''''''''''''''''''''''d'n'a'(' 'g'n'i't'i'r'w' ' 's'm'h't'i'r'o'g'l'a' 'e'h't'B'''''''''''''''','''''''e'''''e'k'a'm'w' 'n'e'h'w''''''''''''k'r'o'w' ''''''''t'n'e'm'u'c'o'd' 'a' 'n'i' '''i'''''''e'r'e'h' 'n'o'i''''''''''''n'i'o't'a'z'i'm'i't'p'o' 'a'r't'x'e' ' '''bette' 'r''beautiful 'is ' 'bet''ter for lots of reas''ons :n''''''''''''''''''''''''' 'r'e't't'e'b''''''' '''''''''''.'s't'n'e'm'e't'a't's' 'f'i' 'w'e'f' 'a' 't's'u'j''' ''''l'2' 'g'n'i'e'b' 'p'u' 's'd'n'e' 'g'n'i'r'e'd'r'o' 'r'o'f' 'c'i'' made'g'o'l''''' '?'''''''''''''''s'd'i''''''-' ''k' 'h't'i'w' 'e'n'i'''''''''' 'e'r'a'w't'f'o's''''p'f' ''e'M''''M''''''''''''t'a' 'k'o' 'm'''''''''''''''''''''''''''''s'd'i'k' 'd'n''''k'i'm' 't'''n'o'd' 'I' '?'e'm' 't'u'B''''''''''''''''''''''''''''e'n' 'y'm' 'h't'i'w' 'h'g'u'o'n'e' 'l'l'e'w' 'o'd' 'I' 'e'h'T' '.'*'h't'a'm'*' 'e'k'i'''''''e'd'a'm' '''''''''''''''''' 'e'd'i's'n'i''''' the'''''''e''''''''''''''''' 's'T'D'R'C' 't's'a'f' 'f'o'h't' ''.'r'o'f' ''''''' I''n th''''''''''''''''''''','e's'a'c' 's'i'h't' 'n'I' '''''''''''h't' 'n'I' '.'g'n'i'k'o'o'l' 'o'g''''o'''l' 'd'e't'a'c'i'l'p'm'''o'c' 'y'l'''n'''''''''''''''''''''''''''''''d'l'r'o'w' 'e'h't' 'r'o'f' 's'T'D'R'C' 't's'a'f' 'r'e'p'u's' ''o' 's'''''''' a'''''a' 'e'd'a'm' 'I'''' 't'i' 't'u'B' '''?'o'g' 'd'l'u'o'h's' 'm'e't''''''h'c'''''''h'v'i'h'w' ''i' 'w'e'n' 'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'S' ''''''''''''e'w' '''''''''''''' 'n'e'h'w' ''.'t''''c''''f'i'c'''''''''''''''''''''''t'a'h't' 'e'k'i'l' 'g'n'i'h't'e'm'o's' 'r'o' ''i'l'p'm'i' 's'i' 's't'n'e'm'e'''''s'j'Y' '''''''n'n''''s'l'e' 'l'a'n'r'e't'n'i' 'e'h't' 'f'o' 's't'n'e'r'a'p' 'd'n'a' 'q'e's' ','d'''''e's'e'''''''''''''''''''''''''''''''''''''''''''''''''''p''''''''r'u'o' 'n'I'n'n''''u' 'e'n'i'l' '''''''i'l't'''n'o'w' '''' 's'r'e'b'm'u'n'''''''''''''''n'o'w' 'r's'e'b'm'u'n' 'e'c'n'e'u'q'e's' 'd'n'a' 'd'i' 'e'h't' 'e'c'n'i's' '-' 'h't''i''''p' 'e'h't' 't'u'b' '-' 'e'v'o'b'a' 'n'o'i's'r'e'v' 'd'e'd'n'a'p'x'e' 'e'h't' 'o't' 't'n'e'l'a'v'i'u'q'e''''''''''''''''s' 'e'h't' 's'i' 's'i'h't' 'y'l'l'a'c'i't'n'a'm'e'S'n'n''''''''''''''''''''''''''''''''''''''' truly'''d'n'a''I''' ''''''I''n'n'' 'e'r'a'r' '''''''' 'y'l'u'r't''''''''.'n'e'd'l'o'g' 'e'r'a' 's'i'h't' 'o'd' 'h'c'i'h'w' 's'a'e'd'I'''''''''''''''e'a'd'i' 'e's'e'h'T' '.'''' '''''''''''''''''''''''''''''''''''''''''''u'o'y' 's'e'k'a'm' 't'a'h't' 'a'e'd'i' 'f'o' 'd'n'i'k''' 'e'h't' 's'i' 'h'c'i'h'w' ',''''''''''''''''''''''''r'i'e't'n'o'r'f' 'e'h't' 'g'n'i'v'o'M' '.''''''''''''''''''''''s'y'a's' 'n'i'v'e'K''''''' 'I''w' '-' ''''''''''''''''''''''''''''''''''''' 't'u'o' 'e'r'u'g'i'f' '''''''''''''''''''''''''''''.'''''t's'a'f' 'o's' 'n'u'r' 'e'd'o'c' 's'i'h't' 'e'k'a'm'''''''''''''''s'a'f' 'e'h't' 'd'n'i'f' '''''''''''''''''''''''''''''n'o'i't'r'e's'n'i' 'r'u'o'y'''''s'e'o'''d' '' 't'u'o' 'g'n'i'p'p'a'w''''''''''p'p'a's''''''''''''''''''''''''''''''''''''.'n'o'i't'c'n'u'f' 'n'o'i't'r'e's'n'i'''''''''''''e't'n'i' 'r'u'o'y' 'g'''''i''' 'o'S'''' ''I'n'i'g'n''''''''''''''''''t's'a'f' 'y'l'l'a'e'r' 's't'i' ','a'h'c' 't's'u'j' 'y'b''''y' 's'n'o'i't'a't'n'e'm'e'l'p'''''''e'l'm'i' 'p'a'w's' ')'y'l't's'o'm'(' ''''')'M'T'(' ''n'''' We implement a list CRDT with a list. Genius!'a'c' 'u'o'Y''''''''''''' 'r'o'F''''d'e'd'i's'-'y'b'-'e'd'i's' 'h't' 'e'r'e'h'w' 't'u'o' 'e'''r'u'g'i'f' 'u'o'y' 'o'd' 'w'o'h''''' '''''''''''''''''''''''''''''''''''s'''e'h'''''''''''''''''''''''''''''''w'o'n' 's'''e'H' '.'n'r'u't' 'n'i' 'h'c'a'o'r''''''''''''''''''''''''''''''''''''''''''.'e'c'n'a'm'r'''''''a'r'o'f'r'e'p' 'n'i' 'e'm' 't'a'e'b' 'n'a'c' 'e'h' 'f'i' 'e'e's' 'o't''''''' 'h'c'i'h'w' 'p'p'a' 'y'm'' '''''d'n'a' ','o'o't' 'w'o'n' 's'i'h''''''''''''''''''''''''''''''''''''''''''s'r'e't'n'i'o'p' 'y'b' 'd'''' '''' 'e't'a'r'a'p'e's' 's't'r'a'p' 'e'h't' 'l'l'a' 'h't'i'w' 't' 's'w'o'n'k' ''-' 't't'e'r'p''h'w' ',''''.'''''''n'a'c' 'u'o''''''''''''''''''' 'e''''r'u't'c'u'r't's' 'a't'a'd'Y''''''''''''''''''' 's'a'h' 'd'l'e'i'f' 'e'h't' 'n'i'''n'a'c' 'e'W' ''''''''''''''''''''''''s'e'o'd' 'e'g'r'e'm'o't'u'a' ''''''''''''' 's't'e'L' 'f' 'nn> You can't make a program faster. You can only make it do less work.n'''n''''i't' 'e'h't' 't'a'o'i't'a't'n'e'm'e'l'p'm'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e's'u'a'c''''' 't'a'l'f''e'b' 't's'a'f' 'e'd'o'c' 't'p'i'r'c's'a'v'a'j' 'e'h't' 'g'n'i'k'a'm' 'd'e'r'e'h't'o'b' 't'''n'e'v'a'h' 'y'e'h't' 'e'm'i't'n'a'e'm' 'e'h't' 'n'i' 'd'n'A' ' 'n'e'm'e'c'a'l'p'e'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'e'y' 'd'e'g'r''' '''''''''''''''''''''''''''''''''''h''' 't'u'b' ','e'l'p'm'i's' 's'k'o'o'l' 't'a'h'T'''''''''''''''':'y's'a'e' 's't'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'h't' 'n'i' 'n'o'i't'a''3.'''(' Traverse up through the tree to figure out the insert position of the new'''''''''''' update'' o''''''' 'l'a'u't'c'a'ur copy ''''''''''''''Y''''''.'''''''''' '/' 'r'o't'i'd'e' 'r'u'o'y' 'n'i' 'of the document. (Automerge also sto'''''''''' 'd'd'a' '''n'a'c' 'u'o'y' 'o's' ' item, and update our copy of the document. (Automerge also sto'''''''''''''''''''''''''h'g'u'o'r'h't' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'B'''''')'s'c'i't'n'a'm'e's' 'e'h't' 'g'n'i'''''''''''''''''''''''' 's'j'y' 'r'o' 'e'g'r'e'm'o't'u'a' 'r'''''''''''''''n'o'i't'c'n'u'f' 't'r'e's'n'i''o'f' ''t'a'l's'n'a'r't' 'y'r'i'a'h' 't'i'b' 'a' 's'i'''''''i's' 't'i' 'd'n'a'''''''t'i' 'd'n'A'(' ''''''''''''''''''''''''''''''''pretty''''''''''''' 'f'o' 's'''''''''''''''''''''''s'n'o's'a'e'r' 'f'o's' 't'o'l' 'r'o'f' ' '''''''''''''''''''''l'u'f'i't'u'a'e'b' 'y't't'e'r'p' 's'i' 'h'c'a'o'r'p'p'a' 's'i'h'T'''''''''''''''''''''''''''''''''''''''''''''''o't's' 'o's'l'a' 'e'g'r'e'm'o't'u'A'(' '.'t'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'y'p'o'c' 'r'u'o' '''''''''''''''''e't'a'd'p'u' 'd'n'a' ','m'e't'i' 'w'e'n' 'e'''''''e''''e' 'h't' 'f'o' 'n'o'i't'i's'o'p' 't'r'e's'n'i' 'e'h't''''''' 'e'r'e'h'w' 't'u'o' 'e'r'u'g'i'f' 'o't' 'e'e'r't' 'e'h't' 'p'u'''''''a'w'k'c'a'b'''''''''e'e'r't' 'e'h't' 'e's'r'e'v'a'r'T''''S'''h'U' '.'3'n''''.''c'o'''''s'j'y''''''''''j'y't' 'l' 't'h'g'i'r'''''''''' slightly''H''Th'''''''''p'e'e'K'(' '.'''''''''''''''''''''''''.'d'e't'r'o's' 'm'''''r'o's' '''''' 'e'r'e'h'w''e'h't' 'g'n'i'p'e'e'k''I''''''''!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''.'e'r'e'h't' 't'''''''''''''''''''''''''t'u'o'b'a'''''''d'n'a' ','' 's'i' 'h'c'a'o'r'p'p'a' 's'i'h'T'h'g'i'r' ','l'i'a'r'g' 'y'l'o'H''''''' 's't'I'''''''''''''''''''h''' 'e'h't' 's'y'a'w':''l''':''a''''''''''''l'a'w' 's't'a'h'T''''''''''''.'l'i'a'r'g' 'y'l'o'H' '.'r'e'l'p'm'i's' '*'d'n'a'*' 'r'e't's'a'f' 's't'I' '.'5'n'h'c'a'o'r'p'p'a' 's'i'h't' ','y'l'''''''''''''''''''''''''''''''''''''y''' 't'u'b' ','d'e'''''''''''S' ':'e't'o'N' '>''t'a'c'i'l'p'm'o'c' '''e's'f'o' 't'r'o's' 's'd'n'u'o's'''''''''''''''''''''''''' 'n'i'''''''Some of these performance i''''''''''''''''s''''''''' 'y'l'b'a'b'o'r'p'''''''''''''''''''''''''.'''e'c'n'a'm'r'o'f'r'e'p''W'''''''''' 't'a'h't''''''''''''''' 't'c'e'r'''''''''''''''''''''''''''''''''''''''''''''''I' '.'*'t's'a'f'*'''''g'i'b' ' 't'o'''''''''''''''''''''''''''''m'h't'i'r'o'g'l'a' 's'i'h't' 'n'i' 's'k'c'e'n'e'l't't'o'b''n' 'l'l':''''''''.''''W''i't's' ''''s's'i' 'n'','o'i't'a't'n'e'm'e'l'p'm'i' 'e'h't' 't'u'b' ','''''''''' ','''r'o'c''''''''''''''''''''''''''''''''''r'u'o' '' 'o't' 'e'm'i't' 's't'i' '''','''''''''''''''''''''''''''''''''''.'''''''''''''''n'o'i't'c'a'r't's'b'a' '/' '''*'t's'a'f'*' 't'o'n' 'l'l'i't's' 's't'i' 't'u'b' ','r'e't'''''''''i'''i' '''''''''y'l'l'a'u't'c'a' '','e'e'S''''T''t'e'b' 's'i' 's'i'h'T'n''n'' 'n'o' 't'c'a'p'm'i''nThis is better, but its still not *fast*.''i''n'''''''''g'n'i''''I'performance''''''''''''''''n'e'l'''''''''''''''''''''''''''''''.'e'c'n'e'r''n'e'e''f'f'i''l'd' 'e'c''''''' 'e'n'a'm'r'o'''f'r'e'''' 'n'e'l''p' 'g'i'b'''''''''''''''''''''''''''''''t'n'e't'n'o'c' ''''.'d'e't'e'l'e'd' '=' 'e'v'i't'a'g'e'n' '/'/' ' 'a' 'e'k'a'm' 'o's'l'a' 'l'l'i'w' 'h'c'i'''''''''r'o'F''h'w' '-' 'e'r'e'h' '''m'''''''''''''''e'r'e'h' '''provements com'''''''''s'i'h't' 'r'o'f' 'e from the fact I'm a'''''''''''''''''''''''' 't's'u'j'''''''''''''''''''''n'n'''''''''''''''''''''a' 'y'l'l'a's'r'e'v'i'n'u''''''' '''''''''''' 'o't' 's'n'o'i't'a'r'e'p'o' 'y'b'r'a'e'n''''''''''''r'e's's''u' 'e'h't' '''''''h't' 't'a''''''''' 'h't''''''''''''''''''.'M'A'R' 's's'e'l'''''''w'o'n' ' 'e's'u' 'e'w' ',''i'w''''''''''''y'e'p'o'r' 'g'n'i's'u' 'o'S'''''''''''''''''''' 's''''''''''''''''''''''''''''''''''''''''''''''''(' ''>'-'''')''''' 'o'S'''g'i'b' 's'a' 'e'c'i'w't' 'e'l'd'n'u'b' 'm's'a'w' 'e'h't' 's'e'k'a'm' 't'i' 'd'n'a' ','''a'''''',' 'e'c'i'w't' 'n'a'h't' 'e'r'o'm''''''''''x'+'2'''''''''''''''' 'e'r'o'm' 'k'o'o'l' 'a' 'e'k'a't'''''''''''''''''''''''''''''''''''''''''.'m'e'.''''t'i' 'w'e'n' 'e''''i'h't' 'f'o' 't'n'e''''''''''''''''''s'i'h't' 's'e'o'd' 'e'''''''d' 'd'o'c' 'e'h't''r''t'a'p' 'e'h't' 't'u'o' 'e'''' '''''''''''''''' 't'u'o'e'r'u'g'i'f' 'o't' 'd'e'e'n' 'o's'l'a' 'e'W' '.'''lso not us'''''''''''''''''''''m'e't'i' 'w'e'n' 'e'''''''''''''y'a'r'r'a' 'e'h't' '''''''''''''''e'd'o'c' 'e'v'i't'a'n' 'n'i' ''n'i' ''h't' '*'''''''''''''''''''''''''''''''''''''''''''''''''''y'n'a'm' 'o's''''a'''''''''''''''''''s'm'''''''':'e'd'i's'A''''''''''t'a'h''''''''''''''''''''''''''''''''''''''t'n'e'm'u'c'o''''''''''e'k'a't' 'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'v'o'm'e'r' 'y'l'l'a'e'r' 't'''n'e'r'a' 's'm'e't'i' 'd'e't'e'l'''''''''''''*'*'''''''''s'p'e't's' 'n' 'e'k'a't' 'l'l'i'w' '''e'd' 'e's'u'a'c''''''''''''''''''''''''''i''' ','n'*'*'''o'i''''''''''''''''''''''''''''''''''''''w'o'n' 's't'i' 't'u'b' ',''''s's's'e'l'e's'u' 'f'o' 'd'n'i'k' ''''''''''''''''''''''''''''''''''''''''''''''''''' 's'i'h't' 'h't'i'w'''''''''''''''''''''''.'e'r'a'p's' 'o't' 'U'P'C' 'e'v'a'h' 'd'n'a' 'n'o'i't'c'e'n'n'o'c' 't'e'n'r'e't'n'i' 'y'm' 'e't'a'r'u't'a's' 'd'l'u'o'c' 'I''''''''''''''''''''''''''''''''''''''''''''s'e't'a'd'p'u' ''''''' 'u'e'e'r't'-'''''''''''''' 'e'r'''''''''''''''''''''''''o't' 'n'w'o'd' 's'm'5'6'''''''4'5' 't'a'h't' 's'g'n'i'r'b' '''''''''''''''''''''' 's'g'n'i'r'b''''u't'u'f' 'y'm' 'n'i''''''''''''''''''k'r'''''t's'u'j' ''o'w' 'd'l'u'o'h's' 'h'c'i'h'w' '''''''''''''c'i'h'w''''b' 'e'h't''''b' 'g'n'i'v'a'e'l'r'e't'n'i' 'y'b' ''''''''''''''' 'e't'a'r'u't'a's' 'd'l'u'o'c' 's'i'h'T''''s't'I''This is''''''''''''''''''''''''''s't'i'd'e' 's's'e'c'o'r'p' 'n'a'c' 'I's'i' 's'i'h'T' 't'a'''''''''''''''''''''''''n'o'i't'c'e'n'n'o'c' 't'e'n'r'e't'n'i' 'y'm't'o'''n' 'O'-'g''''*'''i''n'B''*' 'n'I''u'a'e''''''''''''''''''''''''''''''!''''''''''''''t' 'd'e'e'n' 'e'W'n'a'c' 'e'w' 's'e'Y' '?'s'i'h't' 'x'i'f' 'e'w' 'n'a'C'n''n'b' ''''I'''''''g'n'i'.'t'a'h't' 'n'a'h't' 'e's'r''*'''o'w' '*''s't'''i''' ','e'p'o'N'l'i'w' '', the computer does about *n* steps'''' ''''d' 'a' 'o't'n'i'''''''''k'a't' 'l'l'i'w' 'm'e't'i' 'n'a' 'g'n'i'''' 't'r'e's'n'I'n'n't''''''''''''''''''''''''''''''''''''''''''''*'*'''''''''s'm'e't'i' 'n' 'h't'i''*'*''w' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'W''''''d'n'u'o'r'a' 's'm'e't''''''''''''t'n'e'v'n'i' 'o't' ''i' 'g'n'i't's'i'x'e' 'e'h''''''''''''''''''''''''''allow inse'''''''''''''''''''''''''''''e'''m''''''''s'd'd'a' '''''''i''' ','l'l'e'W''i't'''''g'n'i'h't'' ')'1'('O' 'n'i' 'e'l'd'd'i'm' 'e'h't' 'n'i' 's't'r''c''''''''''''r'e's'n'i' 'w'o'l'l'a' 's't's'i'l' 'd'e'k'n'i'l' 'e's'u'a'c'e'b' '-' 't' 'l'l'a' 'g'n'i'y'p'o'c''''''''' 'g'n'i'd'i'l's' 't'u'o'h't'i'w' ','''''''''''''''''''''''''''''''e'v'a'h' 'e'r'''''''''' 's'm'e't'i' '*''''''''''''''''''''''''''''''''''''''''''''''''d'e'v'''''''''''m'h't'i'r'o'g'l'a' 'o'm'e'r' 'y'l'l'a'e'r' 'r'' '''e'v'e'n' 'e'r'a' 's'm'e't'i' 'd'e't'e'l'e'd' 'e's'u'a'c'e'b' ',''''''''''D' '.'''''''''''''''d' '-' ''n'*''e'h't' 'e'r'e'h'w' 't'n'e'm'u'c'o'd' 'a' 'o't'n'i' 't'r'e's'n'i' 'e'w' 'e'm'i't''''''''''''''''''' ')'s'T'D'R'C' 't's'a'f' ''''''' 'e'v'a''''''S' '''' ''h' '''r'''e'p'u's'('' 'y'r'e'v''''e'e''''''''''''k'''''''f''''''''t'x'e'n' ' 'h'a'a'A'''r'o'w' 'f'o' 's'p'e't's' 'n'''t''''''w''''''''''''''y'l'e't'a'n'u't'r'o'f'n'u' '''' 'e't'o'N''n'e'm'u'c'o'd' 'a' 'o't'n'i' ''''''''''''s't'r'e's'n'i't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''n'n''''n'e'm't'r'a'p'a' 'y'm' 'o't'n'i' 'g'''' 'n'i'm'o'c' 't''''''o'''''''k'o'o'l' ''!'''' 'd'n'A'e'n'r'e'h't'e' ''''''''''''l' 't'I''r'e'b'i'f' 'e'h't' 'n'a'h't' 'r'e''''''''''''''''''''''''''''''h' 'y'm' 't'a'h't''''''' 'e'b'''''''''''''''''''''''''''''''.'t'e'n'r'e'h't'e' 't'i''*'b''*'a'g'e'm' '0'0'1'''''''e'm''''' '''''''b'm'0'0'1' 'e't'a'r'u't'a's' 'o't' 'h'g'u'o'n'e' 't's'a'f' 's'i' 's'i'h'T' '''''''''''''''''p'u' 'e'n'i''y'''''''''''''''''''''''''''''o't' 'd'e'e'n' 's'e'm'i't'e'm'o's' 'o's'''l'a' 'l'l'''e'W''T'l'''''''''''''''r'u'o' 'f''''''''''''''''''''''''''a't'a'd' 'k'r'a'm'h'c'n'e'b' 's'i'h't' 'h't'i'w' ','' in Mart''in's edi''''''''''''''''''''''''''''''s'c'i't'n'a'm'e's' 't'n'e'm'u'c'o'd' 'f'o' 'd'a'e't's'n'i' '''ting trace''''o' 'e'n'o'''''''''''''''''''''''''s'j'Y' '?'w'''''''''''''s'e''''s's'u' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e's'u' 'y'l'n'o' 't'i' 'd'n'a' ','n'o'i't'a't'n'e'm'e'l'p'm'i' 's't'd'r'c'-'e'c'n'e'r'e'f'e'r' 'e'h't' 'n'a'h't' ':':'''o'n''' ''':''''t'i' 's'i' ':''''t's'a'f' 'w'o'H'' 'l''''''o's'l'a' ''''''''e'r'a''''''''p'u' 'e'n'i'l' ''''''''''m'e't'i' 'e'l'g'n'i's' 'a' 'o't'n'i' ''r'e's'n''' 'o'S''i'''''''''''''3''''2'''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''l'a'i'''''''''''''' 'y'l't's'e'''''''''''''''''''''''''''f'o' 's'u'o'i'c'i'p's'u's' 'e'l't't'i'l' 'a' 'd'n'a' ''n'o'H'''''''e'd's''o''''''''''y'k'c'i'r't' 'c' 'e'h't''''''''''''''''''''''''''''''''have been'''''e'r'e'w''''''2'''''''''''''''''''''h'c'u'm' ''''''''''''''''''''''''!''''''c''' 't'u'B''C''''''c'''''''y'''''''''' ' doubt'''''''''''''''' 'e'r'u'p'''''''''''''''''''''''g'n'i'n'n'u'''''''''''''''''''e'k'a't's'i'm' 'a' 's'a'w' 't'a'h'T'r' 't'u'o'''''b'a' 's'u'o'v'r'e'n' 'm''''''''''''''''''''''''e'k''''''' 'e'r'u'P'''''e'a'm' '''n'''a'c'''''''''''''''''''''''''''d'i'd' 'n'i'v'e'K' 'n'a'h't' 'r'e't's'a'f' 'y'n'a' ' 'I' 't'b'u'o'd'y'l't's'e'n'o'H'a'w'y'n'a' '''' 't'u'B''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!'e'v'i's's'e'r'p'm'i' 'r'e'p'u's' 's't'I''''''''''r'e'p'u's' 's'T'I' '''' '.'l'l'e'w' 'o''!'s' 'k'r'o'w' ''''''''''''''t's'a'f' 't'a'h't' 'o'g' 't'i' 'e'k'a'm' 'o't' 'r'e'd'r'o' 'n'i' 's'e'm''''''''''s'e'v'i't' '''''''''''''''o't' 'e'v'i'g' 'n'a'c' 'e'w' ''1'1' 't'u'o'b'a''(''''('''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''s'')'T'D'R'C''k'a''''''''''!'''k'e'm' 'n'a'c' 'I' 't's'a'f' 'w''''s'o'h' 't'u'o' 'k'c'e'h'c' 't'u'b' ','t'a'e'r'g' '''''''''h' 'd'n'a' ',''''''s'''''''''''' 'd'n'A''''t'''a'h'T''''' ''''''''''''''''''''''''''''''''''t'u'b' ','y't'i'x'e'l'p'm'o'c' 'd'd'a' 'd'l'u'o'w' 't'I'n'a''e'''''''''''g'n'i'h't'e'm'o's''c''''' ''?'e'M''''''''''''''' 'g'n'i''''''''''''''''t's'a'f' 'y'l'l'a'e'r' 'o'g''''o''''o' 'k'a'm''' ''''''''''''e'r'a'w't'f'o's' ''''''''''''''''''''''''''''''''''s'i'h'''''t's'a'f' ''''''''''''''''''''''''''''h'c'u'm' ''''''''''''''''''''''''''d'n'a' 'y's'u'b'''''''b'''''''u'b's' 's'a'w' 'I' ','''k'''''' 'r'o'w' 't'a'h't' 'g'n'i'o'd'''''''''g'n'i'''''''''''''''''''k'c'a'b' 't'i' 'g'n'i'r'b'''''''''''''d''' '''l'a'c'i't'c'a'r'P' ' 'd'n'a' 'r'e't'' '''''''n'n'''n'e' 'f'o' 'd'a'e't's'n'I'''t''' 'e''''''''''''' 'g'n'i'k'a'm''''''''''''''''''g'n'i'n'u't' 'e'c'n'a'm'r'o'f'r'e'p' 'e'r'a'w't'f'o's' 't'u'o'b'a' 'g'n'i'k'n'i'h't'''''''b'o'''''''''''''.'e'c'n'a'm'r'o'f'r'e'p' 'e'k'i'''''''k'o'l' ''''''I' '.'s't'n'e'r'a'p' 't'a'e'r'g' 'e'r'a' 'e'l'p'o'e'p' 'e'm'o'S' '' 'n'e't't'i'r'w'e'r' 'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e't's'a'f' 'n''*'e'v''*'e' 'e'm'o'c'e'b' 'd'l'u'o'h's'''''' 'l'l'i'w' 't'i' 'n'o'o's''''''''a'u't'n'e'v'e' 'd'n'a' 't's'a'f' 's'n'u'r' 'y'd'a'e'r'l'a' 's'j'Y' ''e'e'b' 'e'v'a'h' 's'j'y' 'f'o' 's't'r'a'p' 'e'm'o's' 'y'l't'n'e'r'a'p'p'''''' '>'''''''''''''''''''''''''''' 'e'r'e'h' 'e's'n'e't' 't's'a'p' 'e'h't' 'e's'''''''''''''''''''''.'s'i'h't' 't'o'g' 's'a'h' 'n'i'v'e'K' 'u'''''''''''''''https://github.com/yjs/y-crd'''''''''''' 'n'w'o' ''''''''''')'!''''''''''''''''''' 't'a'''''''''' 't'a'h't' 's'j'Y' 'f'o' '''''''''''''''''''''''''''''''''''''''.'T'O' 'f'o''''p' 'p'o't' 'n'o' 'f'f'u't's' 's'i'h't' 's'e'o'd' 'h'c'i'h'w' ','''s'i'h''''''''''''t'r'o'p' '''''''''''''''''''''''''''e'r'u's'a'e'm' 'e'c'n'a'm'r'o'f'''''''f'o'r'e'p' 'r'e'''''''''''''w'o'h' 'h't'o' 't's'u'r' 'a' '-' ')'t'(']'s'r'Y'['''''''''''''''''''''''''''''''''''''''''''''''e'v'a'h' 's'n'o'i't'a'c'i'l'p'p'''''''''''''''''''''''''s't'c'e'j'b'o' 'e's'o'h't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'o' 'e's'a'b'''''','' 'a't'a'd' 'a''''''' ''''''' 'a'd' 'n'i' 't'c'e'j'b'o' 'e'l'g'n'i's' 'a' 'e't'a'd'p'u' 'o't' 't'n'a'w' 'u'o'y' 'f'I'n'n'''' ' 'h'c'a'E' '.''''a'''e'w' 'y'l'l'a'u's'U''''''''''''''''''''''''''''''''''''''' 'n'o' 'g'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'p'p'a' 't's'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''o' ''''''n''''j'''''''''n'n''''t' 'n'e't't'i'r'w' 'y'l'e'r'a'r' 'y'r'e'v'''''''''''''r'e'v'e'n' 't's'o'm'l'a' 's'i' 'h'c'i'h'w' 'f'o' 'h'c'a'e' ','s't'c'e'j'b'o' 'y'n'i't' 'f'o' '''''.'m'''''''''''''''''''''''''''''''''s'i'h't' 'n'a'h't' '''l'l'u'f' 's'e''''''''''''' 'n'o' 'g'n'i'k'r'o'w''s'a'b'a't'a'd'''''''''d'a' 'e'v'a'h' ''''t'a' 'y''''''e'r'e'h' 'e'h't' 'd'a'e't's''''''''''a'e't'n'I' '.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Holy cow, automerge's javascript is really slow!'''h'W'''''e'v'a's''''e' 'n'e'h't' 'd'n'a' 'n'e'p'o' 'p'e'e'k' ','e'c'n'o' 'd'a'o'l' 'n'a'c' 'u'o'y''''l' 't'n'e'm'u'c'o'd' 'e'n'o' 's'''e'r'e'h't' 'e'r'e'h'w' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'o't' 'n'e't't'i'r'w' 'y'l'e'r'a'r'''''' 'h'c'a'e' 'e'r'a' 'h'c'i'h'w' 's't'c'e'j'b'o' 'l'l'a'm's' 'f'o' 's't'o'l' 'e'v'a'h' 's'p'p'a''''''s'p'p'a'a' 't's'o'M' '''' '.'s'r'o't'i'''''''i't'd'e' 't'x'e't' 'e'v'i't'a'r'o'b'a'l'l'o'c' 't'''''' 'n'e'r'a' 's'n'o'i't'a'c'i'l'p'''p'a' 't's'o'M' ''n'''''''''''''''''''''''''''''''''''f'o'''s'' 'l'l'u'f''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n''''''''''''''''''''''''''''''''''''''''''':'o't' 'd'e'e'n' 'u'o'y' 'y'a'd'o't' 'e'g'r'e'm'o't'u'a' 'd'n'a' 's'j'y' 'h't'i'W' '.'y'l'k'c'i'u'q' 'm'''''''''''''''''''''''''''''''''''''''' ','w'o'l's' 'y'l'l'u'f'''''''f'u'w'a' 'e'b' 'o't' 'g'n'i'o'g' 's'i' 's'i'h'T'n'e'''''''e'm't'i' 'e'l'g'n'i's' 'a' 'e't'a'd'p'u' 'o't' 'e'l'b'a' 'e'b' 'o't' 't'n'a'w' 'I'' 'e's'a'b'''' 'a't'a'd' 'e'l'o'h'w' ' ':'s'w'e'n' 'd'a'B''i'k'r'o'w''''''''''k'r'o' 'd'n'a' ','k''''''''''''''''''''''''''''''''''''''l'g' 'w''''''h'c'i'h'w' ''''e'f' 'a' 'e'd'a'm' 'e'v'''I' '.'w'o'n'k' 'I' ','s'e'Y'c'a'b' 't'h'g'i'r' 'e'm' 'g'n'i'y'p'o'c' 's'i''''h' 'n'i'v'e'K' 'e's'u'a'c'e'b' '*'w''''w'e'n'k''''n'*' 'y'a''''''''''y'a'w's''''k' 'I'('n'n''A' ' ''t''''''' 'n'i'a''''''''''confused''b''''b'''''''''d'e's'u'''''''e'm'o's' ''''f'n'o''''s'i''''g'n'i''' '''c' 'd'n'a' ''g'''Can we still go faster? Yjs is very we'''.'''''''''''n'e't'''f'o' 'l'l'i'w'.'.'ll optimized already, and I ''When I told Kevin that I t''''''''''''''' 'a'''''T'D'R'C''''a' 'e's'''' '''''''''''''''''''''''''''''''''s'e'o'd' 'r'e't'u'p'm'o'c' 'r'u'o'y''''t' 'g'n'i'h't'y'r'e'v'e''' 'y'a'w'''''''s'e'o'g' ''k'a'm' 'd'l'u'o'c'Y'''''''''''''''' 't'''''''''''''''''''''''''t'o'l' 'a' ''' 'l'''''''''''n'''''''''''''''''''''''''''''''''''''''''''Yeah, well spotted. Each of these tests changes multiple variables. Maybe my reference implementation is faster than automerge simply''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'p'm'i's' 'e'g'r'e'm'o't'u'a' 'n'a'h't' 'r'e't's'a'f' 's'i' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'e'c'n'e'r'e'f'e'r''''d' 'y'm' 'e'b'y'a'M' '.'s'e'l'b'a'i'r'a''''e'v' 'e'l'p'i't'l'u'm' 's'e'g'n'a'h'c' 's't's'e't' 'e's'e'h't' 'f'o' 'h'c'a'E' '.'d'e't't'o'p's' 'l'l'e'w' ','h'a'e'Y'g'n'i'g'n'a'h'c' 's'e'l'b'a'i'r'a'v' 'y'n'a'm' 'o'o't' 'e'v'a'h' 'u'o'Y'''''''''''''''''' 't'''n's'e'o'd' 's'i'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n's'e'g'n'a'h'c' 'e'l'p'i'''''''p'i't'l'u'm' 'm'o'r'f' 't'l'u's'e'r''''e' 'e'h't' 'w'o'h's' 's'k'r'a'm'h'c'n'e'b' 'e's''''''' 'e'e'h't' 'f'o' 'l'l'A'''''''n'o' '#'#'#'n'n'''''t'i'b' 'e'l't't'i'l' 'a' ''l'e'A''w''''''''''''''''''''''''''''y'l'b'a'''b'o'r'p''''''''''''''''''''''''o't' 'e's'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''s'i'''a' 'n'o' 'e't'o'n' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'O''''Y''''''e's'u'o'h' 'r'u'o'y' 'n'i' 'e'r'e'h'w'e'm'o's' 's'e'm'L''a'n' 't's'i'l' 'g'n'i'p''m'''''p'''o'h's' 'r'u'o'y' 'n'o' 'm'e't'i' 'h'c'a'''E'''''''''''''''''''''''g'''''''''''''''s'e'g'a' ''n'i'k'a'e'p's' 'y'l'e'v'i't'a'l'e''''''''''''''''''''''''''''''''''''''''''o'g' 'e'n'o' 'n'i' 'l'''l'a' 't'i''''''''''''''''''''''''''''''''''''''''d'l'r'o'w' 'l'a'e'r' 'e'h't' 'n'i' 'd'e's'u' 'r'e'v'e'n''' '''''' '''''t's'o'm'l'a' 'e'r'a' '' 'h'c't'e'f' '''''''''e's'u'a'c'e'b' 'n'a'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e's'o'h't''''''''''''''''.'''d'l'r'o'w' '''''''''''''''''''f''' 'h't'i'w' 'm'e'l'b'o'r'p' 'e'h''''''''''''''''''' 'p''''g'n'i'u' 'd'n'e' 'u'o'y' 't'a'h't' 's'i''T'l'a'e'r' 'e'h't' 'n'i' 'e'c'n'a'm'r'''o'f'r'e'p' 's'n'i'u'r'''''''''''''''''''''''''''''' 'k'r'o'w' 't'a'h't' 'l'l'a' 'f'o'''''''''''''''''''''''''''''''''''g'n'i'n'''''''y'a'w'y'n'a''''''''''''''''''''''''''''''''''''''''''''r'e't's'a'f' 'y'n'a' 'n'e't't'o'g' 'y'l'l'a'e'r' ''''''''''''''''''n'i' 'r'e't's'a'f' 'n'e't't'o'g' 't'''n's''''n'a'h' 't'i' 'y'h'w' 'd'n'a' ','' ''n'u'r' 'p'u' 'd'n'e' 'n'e't'f'o' 's'm'a'r'g'o'r'p' 'r'u'o'y' 't'l'u's'e'r' 'a' 's'a'''''''u's' 'n'o'i't'a't'n'e'm'g'a'r'f' 'y'r'o'm'e'm' '-' 't'i''''u' 's'i' 's'i'h't' 'd'n'a' ' 'r'e't'u'p'm'o'c' ''''''''''''''''u'p'm'o'c'e'h't'r'(''''''''''''''''''')'r'e't'u'p'm'o'c' 'r'u'o'y' 'r'o'f' '''''''''''''''''''''''''''''''''''''''''''''' '''f'o' ''''''s'n'a'p's' ''''k'n'u'h'c' ''''''''''''''''''''''''''''''y'''r'o'm'e'm' 'n'i' 's'u'o'u'g'i't'''''''i'g'n'o'c' 'l'l'a' ',''a'''''''''''''''''''''''''''''a' ',''''')'!'(' 's't'r'e's'n'i' 'f'o' 's'n'a'p's' '2'3' 'e'r'o't's' 'e'w'''''''''' 'w'e' ','f'a'e'l' 'h'c'a'e''''l' 't'a' 'd'n'A' ''''u'o'y''''''''''''e'm'a'n' 'e'h'''''' 't'u'o'b'a''T''y'l''''''''''''''''''''''y'u'b' 'o't' 'd'e'e'n' 'u'o'y' 'g'''' 'n'i'h't'n'o' '''''''r'e't'f'a' ','''''''''''''''''''''''''''' ','''d'a'e'r'''''''''''''''''''f'o' 's'e'i'r'e's''s' 'a' 's'''t's'i'l''''''''''s'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'i'f' 'u'o''''''''''''''''''''''''''''d'e'e'n'''''''''''''''''o's'l'a' '''' '' 'u'o'y' 's'y'a's' 'y'l'l'a'u't'c'a' 'h'c'i'h'''''''w''y' 'l'''''s'e'g'a' ''l'i'w' 'e'r'e'h't' 'd'n'u'o'r'a' 'h'c'r'''''''''''''''''''''''''''''' 'd'e'k'c'a'p''''''''y'a'r'r'a' '''''''''''''''''''''e'd'o'''n'''''''''''n'i' 't'l'u's'e'r' ''' 'f'a'e'l' 'h'c'a'e' 'n'i' 'e'n'i'l'n'i' 'n'a' 'g'n'i'r'o't's' 'm'''I'''a'e's'''''''s''''''''''''''''''''''''''t'a'e'b't'r'a'e'h' '''''''' 'c'i'p'e' ''r'e'p' 's'e't'y'b' 'w'e'f' 'a't'i' ''''''''''''''''''''''''''''''''''''''' ''''''''''d'e's's'e'r'd'd'a'o''''''''''''''''''''''''''''''''''''''''''''''' 'y'l't's'o'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'v'e'r'o'f' ','d'n'u'o'b' 't'u'o'h't'i'w' 'w'o'r'g' 's'o'p'e'r' 't'i'g' 'r'i'e'h't' 't'a'h't' 'e'r'a'c' 'o't' 's'm'e'e's' 'y'd'o'b'o'n' '-' '''''''''''''''''''''''''''''''''''''l''' ','h's'o'G''''''''''''''''''''.'h'c'u'm' 'o'o't' 'd'n'i'm' 'o't' 's'm'e'e's' 'y'd'o'b'o'N' ''s'e'o'd' 't'i'g' 'e'k'i'l' 't'i' 'e'r'o'n'g'i' 't's'u'j' 'd'l'u'o'c' 'u'o'y'''''''''''''''''''''''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''''g'n'i'h't'y'r'e'v'e' 'o't' '''' 'l'a'n'o'g'o'h't'r'o' 's't'a'h't' 't'u'B'n'n'.''e'r'a'c' 'y'd'o'b'o'n' 'd'n'a' 'r'e'v'e'r'o'f' 's'w'o'r'g' '')'t'i'G''''g' 'g'e'(' 'd'e'r'o'n'g'i' 'r'O' ''''''''''''''' 'd'e'd'n'''''''' '5''''e'h't''r'o'f''e'm'm'o'c'e'r' 'y'l'''''''''''''''''''e'v'i't'a'r'o'b'a'l'''l'o'c''' 't'''''''l't'n'e'r''''e'r'''''-' '''u'''c''''''''''''''''''y''' 't'a'h't' 'w'o'l'f'k'r'o'w' 'e''''''''''''''''''''''h''''' 'r'u'o'''''''r'u'y' 'e's'u' 'd'l'u'o'c' 'e'W'''''''''''''!'e's'a'e'l'p' ''''!'p'l'e'H' '.'''h't''''s' 's'i' 's'i'h'T'''t' 'd'e's'o'p'p'o' 's'a' ','''d'''''r'o'w' 'r'e'p' ''''''''n''' 's't'I'''''''''''''''''''''''''''''''''''''''''''''''''''''''''s't's'i'l' 'd'e'k'n'i'l' 's'e's'u' 'y'd'o'b''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a''' '''''t'u'b' ','e's'a'b'a't'a'd' 'a' 'f'o' 'p'o't' 'n'''''''' 't'a' 'l'l'a'o' 'g'n'i'h't' 'f'o' 't'r'o's' 's'i'h't' 'g'n'i'o'd' 'o't' 's'e'h'c'a'o'r'p'''''''''''''a'o'p'r'p'a' 'r'e't't'e'b''''e' 'e'r'a' 'e'''' 'r'e'h'T' ''o'n' 't's'o'm'''''''o'n'l'a' 'y'h'w' 'n'o's'a'e'r' 'a' 's'''e'r'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'*''s'e''*'c'o'r'p' 'n'a'c' 't'I' '.''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'n'o'c'e's' 'y'r'e'v'e' 's'n'o'i't'a'r'e'p'o''''p' 'n'o'i'l'l'i'm' '3'.'4' 't'u'o'b'a' 'r'o' ',''''.'e'g'r'e'm'o't'u'a' 'h't'i'w' 'd'e't'r'a't's' 'e'w' 'e'r'e'h'w''''e'h't' 'n'a'h't' 'r'e't's'a'f' 'x'0'0'5''''''''''0'0'4'4' 's't'a'h'T' ''h'T'''''''''''''''''''d''*'e'k'n'i'l'''''*'' 'y'h'w' 's'i' 's'i'h'T' ''''n'n'n''''''''o's'l'a' ''''''''''''''''''''''y'r'o'm'e'm' 'n'i' 'r'e'h't'e'g'o't' 'l'l'a' 's'i' 'a't'a'd' 'r'u'o' 'o's' '' 'u'o'y' 'n'e'h'w' 'y'l'n'o' 'd'n'a' '-' ''''h' '''B' ','k'l'i'M' ','e's'e'e'h'C'''''''''''''''''''''''''''''''''''''''''''''''''''r'o'''''''''''''''?'''''''s''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'a't'r'o'p'm'i' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'k'i'l'''''''''''''''''''''''''''''''''''''''t'doc = { content: [' '''doc '''n '''''''''''' { item: 'hello', isDeleted: false, id: ['seph', 0]' ', seq, parent: null },n'n '[' ':'''''d'l'r'o'w''t'n''''e'u'r't'''''e'k'i'm'''''] }'''e't'n'o'c' '''''''''''''''''''''''''''''''''''''s'''t''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'i' 's't'i' 'w'o'N' '.'e'r'o'm'y'n'a' 's'm'e't'''''''''s'i'h't' 'r'o'f''https://crates.io/crates/ropey' ''i' 'f'o' 't's'i''''''' 't'e'y'''''''''''''''''y'l't'n'''''''''''''''s'''t''''''''t'n'e't'n'o'c' ''n'e'm'u'c'o'd' 'e'h't' ''e'i'c'i'f'f'e' '''''' 't'e'l''''''s'm'e't'i' '''e'h't' 'n'i' 'e'v'i'l' 't'''n's'' '''e'''''''''''''''' 'e't'y'b''''''''g'n'i'k'c'a'p''''''''''''''a'c' 'h''''''''''' 's'i'h't' 'e'k'i'l'c'i'h'w''o'd' ''n'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l't'n'e'r'a'p'p'a'''''''''''''''''''''''''''''e'm'o's''''')'!'e'd'o'c' '''''''''''''''m''' 't'u'B'''''''''''''''''''''''''''''''''y'a'w'y'n'a' ''.'s't'n'e't'n'o'c' 's'''t'n'e'm'u'c'o'd' 'e'h't' 't'u'o'b'a' 'e'r'a'c' ''y'm' 'n'a'h't' 'r'e't'h'g'''''w'o'H''''' 'n'a'c' '?''i't''''''''''''''''''''n'a'h't' 't'n'e'i'c'i'f'f'e' 'e'r'o'm' 'y'a'w' 's't'i'''''T'D'R'C' '-' 't'n'e'm'u'c'o'd' 'e'l'o'h'w' 'e'h't' 'e'r'o't's' 'o't''''''''' 'e'h't' 'r'o'f' 'b'k'0'0'2' 's'e's'u' 'y'l'n'o' 'y'e'p'o'R'(' ''m'u''''''''''''''''d'e'l'l'u'p' 'n'e'e'b' 's'a'h'''''''''''''' 'm'''I' '.''''' 's'i' ''c'o'd' 'e'h''''e't' 'e'c'i't'o'N''''''''''' 'o't' 'r'e's'o'l'c''''''''''e'k'i'l' 'e'r'o'm''''l' 'g'n''''n '''''''''''''''''''''''''''''''n '''n ' ''' '''''''n'''''s''''''''''e'n clients: ['seph', 'mike'],''{''''e'','r'T''R'''''''n'a'c' ''C'e'g'n'n''a'R''''''e'e'' 'W' ''''''''''h'c'u'W''m' '''r''n'''''''' 'n''''g'n'i'e'h'w' ' items: RangeTree {['T'B''''''''''''r''''R''''''''''s'i'h'T' '.''''''''''''''''''''s'e'l'b'u'o'd''''''''''''''''''''''''''e'''- There's a bunch of use cases where we don't''''''''''''''''''''''''''''''''''''''''''''''' 't'''n'o'd' 'e'w''''''''''n'o'd' 'e'r'e'h'w' 's'e's'''''''''''''''''''''''''''''''k'''''''''''''''''''''''''''''''''''!'''s'''w'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'h't'''''''s'''' ''''s'''''''i' '''''''''''''''s'''e'e'r't'-'B' 'o'w't' 'e's'e'h't'''''''' 's'e's'o'h't' 'n'e'e'w't'e'b' 'g'n'i'c'n'u'o'b' 'y'''b''''''' 't's'u'j'''''w' ''.'e'h'c'a'c' 'U'P'C' 'e'h't' 'g'n'i'h's'a'r'h't' 'y'l'b'a'b'o'r'p' 'm'''I''''''''' 's'''e'r'e'h'T''''''''''''''''''''''''t' 'g'n'i'e'e's' 'y'l'b'a'b'o'r'p' 'e'r'''e'W' '''''<''''r''' 'e'e'r''''''''''''''''n'a'h't' 's's'e'l' 's'i''''''h't' 't's'a'l' 'e's'o'h't' 't'a' '''''''''''' 'o't' 't's''''''''''''n'o's'a'e'r' 'e'h'T' '''''''''''''*' 'a' 'l'l'e''*'m's' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''','l'l'a' 'd'n'a' 'e'p'o'r' ','''''''''s'n''m'2'5' 'n'i' 'e'c'a'r't' 's'i'h't' 's's'e'c'o'r'p' 'n'a'c' 'h'c'i'h'w''''''''''''''''''0'2' '*'r'e'h't'o'n'a'*' 'h't'i'w' '''e'r'u't'u'f' 'y'm' 'n'i' ''I''''''''''''''''''a' 'e'k'i'l' 's'k''-''''' ''''o'o'l'''''''''''y't'''''''''n'e'v'e' 'e'v'a'h' 'd'l'u'''o'w'' 't'I''''''''''W''''''''''''''''d'e'd'e'e'n' 'y'l'l'a'e'r'''''''''''''r'e'p''''''''''e'b' 't'h'g'i'm' ''''''''''''''''''''''''''''''''''''''''''i''' '''t'u'b' ','s'r'e'p'a'p' 'c'i'm'e'd'a'c'a' 't'a' 'e'l'b'i'r'''''''b'i'r'e't' 'm''''''''''''''''''''''''''''''''''' 'd'n'a' '''''''''''''s'r'e'h'c'r'a'e's'e'r' '''s'l'l'i''''''''''''''''''''''''''''g'n'i't'i'd'e' 'e'v'i't'a'I''r'o'b'a'l'l'o'c' 'P'2'P'k's' 'y'm''''''''''''''''''''''''''''''''''''t'u'B' '.'s'c'i't'n'''''''''''''''''''''''''t'h'g'i'm''''''''''''''''''''''''''''''''''''g'n'i't'i'd'e' 't'x'e''''''''''''''''' ','d'r'o'c'e'r' 'e'h't' 'r'o'F't' 'r'o'f' ''e't''''''''''''''''''''''''''''l'l'a' 'o'd' '''''''''''''''''''''''''''''''''''''' '.'s'a'm'r'a'''''''''''''e'h'T''''''''''''''''''''''''''r'o'o'd''''' 'y'm' 't'a' 'g'n'i'k'c'o'n'k' 'e'm'a'c' ''''''''''''''''''''''''''''''''W' '.'''''''s'i'h't' '''''''''''''''''''''''''''''s'i'That pa'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r''' 'd'e'z'i'l'a'r't'n'e'c'e''''''''''''''''''''''''''''''''''''''''':'A' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'v'i't'a'r'o'b'a''''''''''''''''''''''''''''''''''''''''s'T'D'R'C' 'f'o' 'p'o't' 'n'o' 't'i' 'o'd' 'o't'''''''''''''t' 'i't' 't'n'a'w' 'u'o'y' 'd'n'a' ','l'l'o'c' 'd'e's'a'b' 't'n'e'm'u'c'o'd'''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o't' '''''''''''n'o' 'g'n'i'k'r'o'w' ''''s'i'h't' ''''''' '''''''t' 's's'e's'u' 'e'H' '.'s'n'o'i't'a'c'i'l'p'p'a' 's'u'o'i'r'a'v' 'o't'n'i' 's'j'y' 'g'n'i''''e't'a'r'g'e't'n'i' 'p'l'e'h' 'r'o'f' 'e'g''''n'n'a''''''''' 'f'o' 's'''' 't'o'l' ''h'c'x'e' 'n'i' 'y'e'n'o'm' 's't'p'e'c'c'a' 's'e'm'i't'e'm'o's''''''''''''''''''''''''''t'r'o'p'p'u's'''''''''''''''''''''''g'n'i'''''''''''''''''''')'k'r'o'w''''''''''''''''''''''''''''''''''''''''''''' 'l'l'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'j'y' 'e'k'i'l' '''''''''''''''''','''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'u'o'Y''''''e's'e'h'T''''''''''''''''''''''''''''' '/' '''''''''f'o' 'e'l'p'u'o'c''''''''''''''g'n'i'd'a'e'l's'i'm' '/' ''d'r'i'e'w''''''''g'n'o'r'w' 'e'r'a' 's'k'r'a'm'h'c'n'e'b' 'r'u'o'Y' ':'B' 'g'n'i'd'n'e'p'p'A' '''''''''''''''''''''''''''''''''''''''''''''''' 'w'o'n'k' 'I' 's'a' 'r'a'''''''''''''''''''''''''''''''''''['''''''''https://github.com/sh''''''''''''' 's'i'h't' 'g'n'i'o'D''''I'are/sharedb''.''''''''''''''''' 'A'G'R' 'd'n'a' 'A'T'A'Y' 'r'o'f'''''''n'a'c' ''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'c'n'a'm'r'o'f'r'e'p' 'n'o'i't'a't'n'e'm'e'l'''''''''t'a' 'd'e'k'''''''''''''''''''''''''''''''''''''''I' 'e's'u'a'c'e'b' '''m'i'a'l'c' 's'i'h't' 'n'i' 't'n'e'd'i'f'n'o'c' 'l'e'e'f' ''''o'o'l''''n''p'm'i' 'r'u'o'y' 'r'o' ','n'o'i't'a't'n'''''''''''''''''''''''''''''''''' ')'h't'a'p'e'd'o'c' 'l'a'c'i't'n'e'd'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'''''o's'l'a' ''''.'''e'c'''i't'c'a'r'p'''''''a'r' 'n'i' 'e'r'a'r' 'y'l'e'm'e'r''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'o't' ','t'i' 'o'd' 'd'''u'o'y' 'w'o'h' 'w'o'n'k' 'I'g'n'i't'l'u's'e'r' '''''''''''''e'c'n'a'm'r'o'f'r''''f'e'p' 's'''s'j'y' 'g'n'i'g'n'a'h'c' 't'u'o'h't'i'w' ','t'x'e' 's't'a'h't' 't'u'b' '-' 's'e'c'a'r't' 'g'n'i't'i'd'e' 'y'v'a'e'h'-'t'c'i'l'f'n'o'c' 'h't'i'w' 's'e'c'n'e'r'e'f'f'i'd''''''g'n'a'h'c''''W''''.''' '''''e''''''''''''''''''a' 'e'h' 'c'''''''''''''''''o't'n'i' '''t'''''''''''''''''''''''''''''''''''''''''''''.'r'o'f' 's'k's'a' 'y'l'l'a'u't'c'a' 'y'd'o'b'''''''b'o'y'n'a' 'e'r'u't'a'e'f' 'a' 't'o'n' 's't'I' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a' ','''''''''''''e'r'e'h't' ''nYes, I know and I agree''''''''''''''''''''''''''''''''''''''''''''''' 'y'r'o'm'e'm' 'd'n'a''''''''''''''''''''''''''''''''e''''''''''''''''''a''' ','y'l'b'a'u'g'r'a' 't'u'B' ''''''''g'a's'u' 'M'''''''''o'm' 'f'o' 'A'R' 'g'n'i't'l'u's'e'r' 'e'h't' 'd'n'a' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'u'o'b'a's'''''''o' 't'o'l' 's'''e'r'e'''''''''''''''''''''''''''.'h'g'u'o'h't' 'n'u'f' 'y'l'l'a'e'r' 's'i''' 't'I'''''''''e'm'i't' 'h'c''''''''''''''r'o' 'k's'i'd' 'n'o''''c'u'u'm''n'n'''' '''' 'h'T' '.'e'c'a''The *act''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'w'o'l'e'b' 'e'r'o'm'(' '''''(' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'n'i'v'i'l' 'd'n'a' 'd'e''''''''''g'n'i't'i'd'e' 'y'l't'n'e'u'q'e'r'f'n'i' 's'i' 't'n'e'm'u'c'o'd' 'a' 'g'n'i'm'u's's'a'(' 't's'e'r' 't'a' 't'n'e'm''''''''''n'm'e'u'c'o'd' 'a' 'e't'a'd'p'u' 'o't' 'n'e'k'a't' 'e'm'i't' 'e'h'T'''''''''''''''' 'n'e'k'a't' 'e'm'i't' 'e'h'T''''T' '-'n'''ually important*''B'r't''*''''(' 'g'n'i't'i'*''d'n- How much time the document takes to save and load from disk''e' 'l'a'c'o'l' 'a'''' 'n'a' 'y''''c'a'l'p'e'r' 'o't' 'n'e'k'a'''''''a'o't' 'e'm'i't' 'e'h't' 's'''' 'e'r'u's'a'e'm' 'y'l'n'o' 't's'o'p' 's'i'h'T' '.'''d'n'a' '-' 'k'r'o'w' 'f'o' 't'o'l' 'a' 's'i' 'r'a'l'u'c'i't'r'a'p' 'n'i' 't'a'm'r'o'f' 'y'r'a'n'i'b' 'e'h't' 'g'n'i'g'n'a'h'C'''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e't'n'e'm'e'''''''''''''''''''''''''''''''''''''''''''''' ''''y'm' '''''''''''''''''''''''''''''''''' did''''I'd'''''''''''''d'l'u'o'w'''''''''''''''''''''o's' ''.'S'''''''''t'''''''''''''' 'g'n'i't'l'u's'e'r' 'e''''''''''''''''''''''''n'-'-'-'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'l'o'h'w'''''''''''''''''''''''''''''''''''''''''''''''y'l'e'm'e'r'''''''''''''''''s'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'r'o'p''''''''''''''t'u'b' ','g'n'i't'i'd'e' 'p'u's' 'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'T'''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e't''''''''''''''''''''''''''''''''''''''''''''''''''''''''c' 't'p'i'r'c's'a'v'a'j' 's''''''''''''''''''''''''!''''''''''''''''''''y'l'l'a'e'r''''e' '''''''''''''''''''''''''''''''''''''''''''''''''n':'e'd'o'c' 's'i'h't' 't'a' 'k'o'o'L' '.'t's'a'f' 'e'b' 'o't' 'g'n'i'y'r't' 'n'e'v'e' 't'o'n''''''''''''t's'u'j' 'y'l'l'a'e'r' 's't'''''''''' 'd'y'I'''''''''''''''' 't'a' 'k'''''''''' 'k'o'o'o'l' 'a' 'e'k'a'T' '!'!'w'o'n'k' 'I'n''''w'o'l's' 'y'l'l'a'e'r' 's'i' 'e'g'r'e'm'o't'u'a' ','w'o'c' 'y'l'o'H' ':'C' 'x''''g'i'd'n'e'p'p'A' '#'#'#'n's'i'l' 'e'v'''I' 's'e'h'c'a'o'r'p'p'a' 'e'h't' 'f'o' 'y'n'a' 'h't'i'w' 'k'r'o'w' 'd'l'u'o'h's' 's'g'n'i'h't''''a''B'''''''''e'r'a''')''''''''''''''''''''''''e'v'o'b'a' 'g'n'i'o'd' 'm'''I' 't'a'h'w' 'o't' ''r'e't't'a'm'i't'n'A' 'r'o' ',''''''''''''' 'r'o' 'm'h't'i'r'o'g'l'a' 'C'G' 's'''s'j'Y' 'g'e'(' ''''''''''''''''''s'e'x'i'f' 'e's'e'h't''''' 's't'i' ''''''''''''''''''''''''''''''''.''''''''''o' 'o't' 'l'a'n'o'g'o'h't'r'o' 's'i' 's'i'h't' 'g'n'i'x'i'f' 't'u'b' ','d'e'x'i'f' 'e'b' 'n'a'c' 's'i'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a' 't'u'B' '.'e'm'i't' 'o't' 'e'm'i't' 'm'o'r'f' 'e'z'i's' 't'n'e'm'u'c'o'd' 'e'h't' 'n'w'o'd' 'g'n'i'm'm'i'r't' 'd'n'a' ','''' 's'i'h't' 'g'n'i'x'i'f' 'r'o''''r'f' 's'm'h't'i'r'o'g'l'a' 'e'm'o's' 'e'r'a' 'e'r'e'h'T''''''''''' 't'''n'o'd' 'u'o'Y'''''''''''''''''''''''d'e'e'n' 'y'l'l'a'u't'c'a' 't'''n'o'd' 'e'W''''T'''''''''''''''''e'c'i't'c'a'r'p' 'n'i' ''''''''''''''''''''''''''''''''''''''''o't' 'h'g'u'o'r'h't' 's'l'l'a'c' 'M'S'A'W''''''' 's'l'l'a'c' ''''''''''''''''''''''''''''i' '''''''''''''''''''''https://github.com/automerge/''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!''''''''''''n'u'R' '.'o'o't' 'w'o'n'k' 'o't' 'e'v'o'l' 'd'''I''''''' 'e'b'y'a'm'''''''o'l' 'd'''I' '-' 'n'o'i't's'e'u'q'''''''e'u' 'd'o'o'G' '?'e'r'a'p'm'o'c' 's'r'-'e'g'r'e'm'o't'u'a' 's'e'o'd'''''''''''u'a' 's'i' 't's'a'f' 'w'o'H' '!'s'i'h't' 'g'n'i'd'a'e'r' 'e'r'''u'o'y' 'e'm'i't' 'e'h't' 'y'b' 'automerge-r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e'd'n'a'l' 's't'i' 'e'b'y'a'M' '.'s'h't'n'o'm' 'r'o'f' '''w'o'n' 'n'o''''n'o's' 'l'a'e'r''' 'n'e'e'b' 's't'I'''''''''''''''''''''k'e'e'w' 's'i'h't' 'e'b'y'a'M'(' '.'s'd'n'a'l' 'y'l'l'a'n'i'f' 't'a'h't' 'r'e'v'e'n'e'''''''''''''r'e'v'''''''e'n'e'h'w' ',')'s'(']'s'r'-'e'g'r'e'm'o't'u'a'[' 'y'b' 'd'e'c'a'l'p'e'r' 'e'b' ''''''''''''''''e'r' 'e'b'o't' 'g'n'i'o'g' 'l'l'a' 's'i' 'e'd'o'c' 's'i'h't' 't'u'B''''T'n'''''''''''''''' 'e'm'o's' 'e'r'a' 'e'r'e'h'''T'''''''i' 's'i'h'T' '.')'s'm'e't'i' 'd'e't'e'l'e'd' 'l'l'a' 'm'o'r'f' 's'e'n'o't's'b''''s'm'o't' 'p'e'e'k' 'e'w' 'e'c'n'i's'(' 'e'm'i't' 'r'e'v'o''u' 'w'o'r'g' 's'i'h't' 'e'k'i'l' 's'T'D'R'C' '.'g'n'i'n'u'r'p' 'o't'n'i' 'g'n'i'k'o'o'l' 't'o'n' 'o's'l'a' ''-'-'-'n'n'''I'm''''' 'm'''I'n'n'.'t'n'e'm'o'm' 'e'h't' 't'a' 'm'e'l'b'o'r'p' 's'i'h't' 't'u'o'b'a' 'g'n'i'k'n'i'h't' 's'i' 'y'd'o'b'o'n' ','w'o'n'k' 'I' 's'a' 'r'a'f' 's'A'n'n''''t'''''''''''t'n'e'r'r'u'c'n'o'c' 't'n'a'w' 't'h'g'i'm' ''''''''''''''''''''''''''''''''''''.'s'r'o't''''o'''''''i't'i'd'e' 't'x'e't' 'e'v'i't'a'r'o'b'a'l'l'o'c' 't'''n'e'r'a' 'h'c'i'h'w' 'e'r'e'h't' 't'u'o''''a' 's'n'o'i't'a'c'i'l'p'p'a' 'f'o' '%'9'9' 'e'h't''''''''' 'e'h't' 'l'l'a'l'l'''i'w'''''''''''''''''''''''''''w' 'f'i' 'y'l'l'a'i'c'e'p's'E' '.'''''''''''e'p's'E' '.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a'''''''''''''''''a'h't' 's'n'i'o't'a'c'i'l'p'p'a' 'e'r'o'm' 'o't' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'd'd'a' 'e'w' 'g'n'i'p'o'h' 'e'r''''''''''''''u'o'y' ')'e'm' 'e'k'i'l'(''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'g'n'i't'i'd'e' 't'x'e't' 'f'o' 't'x'e't'n'o'c' 'e'h't' 'e'd'i's't'u'o' 'l'u'f'e's'u'''''''o'm''''u''''u'''''''''g'n'i'h't'y'n'a' 'e'b' 'o't' 's'T'D'R'C' 't'n'a'w' 'e'w' 'f'i' ''''''''''''''''''''''''' 'e'w' 'f'i' '''''''(' 's'n'o'i't'a'c''''i'l'p'p'a' 'l'l'a'e'r' ''''''' 'e'm'o's' 'r'o'f' 's'''' 'r'e't't'a'm' 't'i' 'd'n'a''''n' ','t'x'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'i'c'i'f'f'e'n'i' 'y'l'l'a'e'r' 'y'l'l'a'u't'c'a' 's'i' 's'i'h'T'''''''''''''''' 'r'o'f' 's'i'h't' 'o'd' 'e'W'''''s'i'h'T'n'n'n'i'a'g'a' 'k's'i'd' 'o't' 'k'c'a'b' 't'n'e'm'u'c'o'd' 'e'l'o'h'w' '''3. Save the''''''''''''' ''''''' 'w'e'h't' 'e'v'a'S' '.'3'n'e'g'n'a'h'c' 'r'u'o'y' 'e'k'a'M' '.'2'n'M'A'R' 'o't'n'i' 't'n'e'm''''''''''n'm'e'u'c'o'd' 'e'h't' 'd'a'o'L' '.'1'n'n':'o't' 't'''''''t' '''''''t' 'n'a'w' 'u'o'y' 'g'n'i'm'u's's'a'''' 'o't' 'n'e't't'i'r'w' 'e'r'a''''''''''''''''''''''i'r' 'e'h't' 'e'm'u's's'a' 'o't' 'm'e'e's' 'e'g'r'e'm'o't'u'a' 'd'n'a' 's'j'y''''a' ','y'l't'n'e'u'q'e'r'f'n'i' 'o't' 'n'e't't'i'''''''r'w'''''''''''''''''''''''r'w' 'y'l't'n'e'u'q'e'r'f'n'i' 'y'r'e'v' 's't'i' 'd'n'a' ','s'e'r'g't's'o'p''''P' 'n'i' 'd'e'r'o't's''i'l'''''' 'T'D'R'C' 'a' 'e'v'a'h' 'I' 'f'I' '.'t's'e'r' 't'a' 't'n'e'm'u'c'o'd' 'a' 'g'n'i't'''''''''''''g't'n'i'a'd'p'u' 's'i' 't'u'o'b'a' 'g'n'i'k'n'i'h't' 'e'b' 'o't' 's'm'e'e's' 'y't'i'n'u'm'm'o'c' 'e'h't' 'n'i' 'y'd'o'b'o'n' 'n'o'i't's'e'u'q' 'e'h'T'n''n'''''''''''''''''''s'n'o'i'''''''''''''''''''')''''''''''''''''''''''''' 'g'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'e'h'T'n'n''''''(' ''.'d'e't'e'l'e'd' 'n'e'e'b' 's'a'h' 'm'e't'i' 'e'h't' '*'f'i'*''''i' 't's'u'j' 't'o'N' '.'d'e'n'e'p'p'a'h' 'e't'e'l'e'd' 'h'c'a'e' '*'n'e'h'w'*' 'e'r'o't's' 'o't' 'd'e'e'n' 'u'o'y' 'e'g'r'e'm'o't'u'a' 'r'o'f' 'e's'u'a'c'e'b' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'e't'e'l'e'd''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''I' ''''''''''''r'e'v'e't'a'h'w' 't'u'b' ','n'o'i't'a't'n'e'm'e'l'p'm'i' 'f'o'''''''''' 'f'p' 's'm'r'e't' 'n'i' 's'n'o'i't'a'c'i'l'p'm'i'''''''''''' 'd'l'r'o'w'-'l'a'e'r' 'e'm'o's' 's'a'h' 'y'l'b'a'b'o'r'p' 's'i'h'T' '''''''''''''''''''''''')'g'o'l' 'n'o'i't'a'r'e'p'o' 'e'h't' 'o't'n'i' 't'a'h't' 's'''''''a' 't'u'p' 'e'g'r'e'm'o't'u'A' '.''''''' '.'e'r'u't'c'u'r't's' 'n'o'i's'r'e'v' 'e'h't' 'o't'n'i' 'n'o'i't'a'm'r'o'f'n'i' 't'a'h't' 's''''a'k'c'a'p' 'd'n'a' 'm'e'h't' 's'e'd'o'c'n'e'-'h't'g'n'e'l'''''''l'e'-'n'u'r''''''''''''''''e'-'E'L'R''''''s'k'c'a'p' 's'j'''''''s'h''''s'Y'(' '''' '.'y'''''''.'t'l't'n'e'r'e'f'f'i'd' 'y'l't'h'g'i'l's''''l' 's'm'e't'i' 'd'e't'e'l'e'd' 't'u'o'b'a' 'n'o'i't'a'm'r'o'f'n'i'''''''''''''''b'a' 'n'i'o't'a'm'r'o'f'n'i'''''e'l'e'd' 't'a'e'r't' 'e'g'r'e'm'o't'u'a' 'd'n'a'''''''''''''''''''''''''''''''''''''''''s't'n'e'm'e'l'e'''''''''' 's't'n'm'e'e'l'e' 'd'e't'e'l'e'd' 't'u'o'b'a' 'n'o'i't'a'm'r'o'f'n'i'''''''h't' 's''''a'k'c'a'p' '''''''''''''''''''''''''''''''''''''''''''''''''' 'e'h't' 'f'o' 'g'n'i'd'o'c'n'e' 'h't'g'n'e'l'-'n'u'r' 's'e'o'd' 't'a'm'r'o'f' 'y'r'a'n'i'b' 's'''s'j'y' '-' 'r'e't't'a'm' 't'h'g'i'm' 'h'c'i'h'w' 'e'c'n'e'r'e'f'f'i'd' 'e'n'o' 's'i' ''e'h't' 'o't' 'r'a'l'i'm'i's' 'y't't'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'e'c'n'e'r'e'f'f'i'd' 'l'l'a'm's' 'w'e'f' 'a' 's'''e'r'e'h'T''''''' 'I'n'n'.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e'd'r'o' 'n'i' 'd'e'r'o't's' 'y''''''''''t's' 'd'a'e'r'l'a' 's'i' 't'n'e'm'u'c'o'd' 'e'h't' 't'a'm'r'o'f' 's'i'h't' 'n'i''''' 'e'h't'''''''''''''''''''''o'r'p' 'o't' 'e'v'a'h' 'y'l'n'o' 'u'o'y' 'e's'u'a'c'e'b''''e' 'r'e't's'a'f' 't'i'b' 'a' 'y'l'b'a'b'o'r'P' ''''''''''b'a'b'o'r'P' 'r'p' '''i'v'a's' 'd'n'a' 'g'n'i'd'a'o'l' 'r'o'f''m'i'a'l'c'(' 't'c'e'p's'u's' ''t'a't'n'e'm'e'l'p'm'i' 'e's'e'h't' 'f'o' 'l'l'a' 'n'e'e'w't'e'b' ''h't''c'e'p'x'e' 'I' '''''e'r'''y'e'h't' 'e's'u'a'c'e'b' '' 't'i'''e'''''d'o'c' 't'a'h't' 'e't'o'r'w' '''''''''''''''''''' 'y'l'b'a'b'o'r'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''k'n'i'h't' 'I' 'd'n'A' '.'l'a'c'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'o'f'e'b' 'g'n'o'r'w' 'n'e'e'b' 'e'v'''I' 't'u'B' '''n'n'''.'s'e'c'a'r't' 'g'n'i't'i'd'e'''''''''''''''''''''''''''' '-' 'e'c'a'r't' 'g'n'i't'i'd'e' 's'i'h't' 's's'e'c'o'r'p' 'o't' 'n'e'k'a't' 'e'm'i't' 'e'h't' 'o't''''w' 'l'a'n'o'i't'r'o'p'o'r'p'''' 'n'i''t'n'e'd'i' 'e'b' 'd'l'u'o'w' 'e'z'i's' 'o's' '-' ''''''''''''''''''')'t'c'a'p'm'o'c' 'y'l'e'm'e'r't'x'e' 'e'r'''y'e'h't'(' 's't'a'm'r'o'f' 'y'r'a'n'i'b' 's'''e'g'r'e'm'o't'u'a' '&' 's'j'y' 'y'p'o'c' 'd'''I' ',''''n'd'i'd' 'I' 'f'I''''''''''''''''''''''''' 'e'c'n'a'm'r'o'f'r'e'p' 'e'h't''''''''''''''''''''' 'y'l'h'g'u'o'r' 'e'b' 'd'l'u'o'w' 't'i' 'k'n'i'h't' 'I' ''n'.'e'd'o'c' ''n'o'i't'a't'n'e'm'e'l'p'm'i''''''''t's'u'r' 'r'o' 's't'd'r'c'-'e'c'n'e'r'e'f'e'r' 'y'm' 'n'i' 't'a'm'r'o'f' 'l'p'm'i' 't'''n'e'v'a'h''''''''''''''''''''''''y'r'a'n'i'b' 'a' 'e'v'a'h' 't'''n'o'd' 'I' '''''''''''''''''''''' 't'''n'o'd' 'I''''''''''''''''e'r' 'y'M' '-'n'''''''''y''' 'e'h'T''''''''''''''''''''' 'h't'o'b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'a't'n'e'm'e'l'p'm'''''''m'n'i' 'y'n'a' 'o't' 's't'a'm'r'o'f' 'g'n'i'k'c'a'p' 'y'r'a'n'i'b' 'e's'o'h't' 't'r'o'p' 'd'l'u'o'c' 'u'o'y' 'k'n'i'h't' 'I' '-' '''''''h' 'e'm' 'r'o'f' 'h'g'u'o'n'e' 's'i' 'f'o'o'r'p' 'e'c'n'e't's'i'x'e' 'n'A'''h'T' '.'''''''''''s'n'o'i't'a't'n'e's'e'r'p'e'r' 'y'r'a'n'i'b' 't'c'a'p'm'o'c'''''t's'a'f' 'y'r'e'v' 't'n'e'm'e'l'p'm'i' 's'e'i'r'a'r'b'i'l''''''''''''''''''''''''''''n't'm'e'e'l'p'm'i' 'h't'o'b' 'e'g'r'e'm'o't'u'a' 'd'n'a' 's'j'Y' '-'n'n':''''''''''''''''''''''''s't'd'r'c'-'e'c'n'e'r'e'f'e'r' 'y'm' 'e's'u'a'c'e'b'''''''''''''' 'h't'o'b' 'e'u's'a'c'e'b' 'y'a'w' 's'i'h't' 't'i' 'd'i'd' 'I'n'n''''''' 'f'o' 't'o'l' 'a' 's't'I' '''''''''' '''''''''''''' 'f'o' 't'r'o's' 'I' ''r'o'p'p'u's' 'A'G'R'n'a'm'r'o'f'r'e'p' 'e'm'o's' 'e'b' 't'h'g'i'm' 'e'r'e'h'T' '-'t's'o'm'l'a' ''''''''''i' 'n'a' 'd'n'a'(''e'm'e'l'p'''m'i' 'r'u'o'y' 'g'n'i''''e'g'n'a'h'c' 't'u'o'h't'i'w' ''''T'D'R'C' 'n'e'e'w't'e'b' ''''''' 'b'd'e''''''d'r'a'h's')'/'(']' '''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'r'o'p'p'u's' 'P'2'P' 't'n'a'w' 'u'o'y' 'f'I'n'n''''''''''''''''''''''P'2'P''''''''''''''''' 'd'n'a' 'g'n'i't'i'd'e' 'p'2'p' 's't'r'o'p'p'u's'''''' 's'e's'u'''''''''''''''''''''''''''''''.'t'r'o'p'p'u's' 'T'D'R'C' 'l'l'u'f' 'd'e'n'n'a'l'p' 's'a'h''''''''l'p'm'i' 's'i'''''''''' 's'e's'i'm'o'r'p' 'h'c'i'h'w' '-' ''''''''''''''''''''''' ','d'r'a'w'r'o''['f' 'g'''https://github.com/redwood/redwoo')'d'(']''n'i'k'o'o'L' ''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''.'d''''r'o'o'w'd'e'R' 'r'o'f' 'd'e't'i'c'x'e' 'm'''I''''''''''''''''''''''''''''''''' '.')'n'e'h't' 'e'c'n'i's' 's'r'o't'u'b'i'r't'n'o'c' 'f''''''' 'c'o' 'y'm'r'a' 'n'a' 'y'b' 'd'e'v'o'r'p'm'i' 'y'l'l'a'u'n'i't'n'o'c' 'n'e'e'b' 's'a'h' 'd'n'a' ','o'g'a' 's'r'a'''''''r's'e'y' 'e't'o'r'w' 'I' 'h'c'i'h'w'(' 'y'm''''''''B'D''''d'e'r'a'h'S' 'e's'u' 'n'a'c' 'u'o'Y' '.'t'e'y' 's'T'D'R'C' 'f'o' 'p'o't' 'n'o'f' 's'a'''''''''''''''''''''''''''''''.'t'e'y' 'l'l'e'w' 's'i'h't' 'e'n'o'd''''m' 's'a'h' 'y'd'o'b'o'n''''''''n'a'c'''''''a'n' 'u'o'y' ','g'n'i't'i'd'e' 'e'm'i't'l'a'e'r' 'r'o'f' 's'c'i't'n'a'm'e's' 'e'k'i'l' 'e's'a'b'a't'a'd' 't'n'a'w' 'u'o'y' 'f'I'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''I' 'd'n'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'l'a'c'o'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'l'a'u't'c'a' ''''''' 'e'r'o'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' 'e'v'a's' '''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'e's' 'r'o'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'c'n'a''''''''''' 'e'k'a'm' 's'r''.'e's'u''m'r'o'f'r'e'p''''''''''''''''''''''''''''''''''''''''''.'e'r'e'h' 'n'e'p'p'a'h' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'n'e'h'w' '''''''''''''''''''''''''s'w'o'd'a'h's' 'e'h't' 'n'i' 'g'n'i'k'r'u'l' 's'e's'a'c' 'l'a'c'i'g'o'l'o'h't'a'p' 'e'b' 'd'l'u'o'c''''''' 't'h'g'i'm' 'e'r'e'h'T' '.'''''''''' '-' 's't'i'd'e' 'g'n'i'k'a'm' 'r'e's'u' 'e'l'g'n'i's' 'a' 's'a'h' 'y'l'n'o' 'o's'l'a' 'e'r'e'h' 'g'n'i's'u' 'm'''I' 'e'c'a'r't' 'g'n'i't'i'd'e' 'e'h'T'''''''''''''' 'e's'e'h't' 'f'o' 'l'l'A'''''''''' 'o's'l'a' 'm'''I'''''''e'W'n'n' 'e'r'o't's'''''' 'd'n'e's'''''''n'e' 'o't'''''''''''''''''k'r'o'w't'e'n'''''e'r'i''''o'w' 'e'h't' 'r'e'v'o' 's'e'k'a't' 't'n'e'm'u'c'o'd' 'a' 's'e't'y'b' 'y'n'a'm'''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'm'u'c'o'd' 'e'h't' 'e'v'i'e'c''''v'e'r' 'd'n'a' 'd'n'e's' 'o't' 's'e'k'a't' 't'i'''''''o'd' 'e'h't' 'e'c''''e'a'p's' 'h'c'u'm' ''''m'w'o'H' '''''''''''''''''''-''' '-'n'k's'i'd' 'm'o'r'f' 'd'a'o'l' 'o't' 's'e'k'a't' 't'n'e'm'u'c'o'd' 'e'h't' 'g'n'o'l' 'w'o'H' '-'n'n''''''''''':'e'r'a' 's'c'i'r't'e'm' 't'n'a't'r'o'p'm'i' 'e'h'T'n'n'.'r''''.'e't't'a'm' 't'''n's'e'o'd' 'y'l'b'a'b'o'r'p' 'r'e't's'a'f' 'g'n'i'o'g' ','s'm'1' 'r'e'd'n'u''''''''''''' 'n'i' 't'i'd'e' 'r'e's'u' 'y'n'a' 'e'l'd'n'a'h' 'n'a'c'''''' 's't'e'g' 'T'D'R'C'''''''R'c' 'a' 'e'c'n'o' 'o's' '-' 't's'a'f' 'y'r'e'v' 'e'p'y't' 't'''n'o'd' 'y'l'p'm'i's' 's'r'e'g'n'i'F' '.'*'''''' 'h'g'u'o'n'e' 't's'a'f' 'n'e'p'p'a'h' 'o't' 's'd'e'e'n' 'y'l'n'o' ''''o'r'e's'u' 'e'h't' 'm'o'r'f' 's'e'g'n'a'h'c' 'g'n'i'm'o'c'n'i' 'g'n'i't'p'e'c'c'A'' 'w'o'n'k' '''''''''''The''''' 'e'h'T'n'n'.'e'e'r'g'a' 'I' ','s'e'Y'n'n'e'c'n'a'm'r'o'f'r'e'p' 'f'o' 'e'r'u's'a'e'm''''''''''k'r'a'm'h'c'n'e'b' 'g'n'o'r'w' 'e'h't' 's'i' 's'i'h'T' ''''''''.'n'o' 'o's' 'd'n'a' ')'s'n'o'i't'i's'o'p' 'r'o's'''''''s'o'r'u'c'(' 'e'c'n'e's'e'r'p' ','s'e'r'u't'c'u'r't's' 't's'i'l'-'n'o'n' 'r'o'f' 't'r'o'p'p'u's' ','s'l'o'c'o't'o'r'p' 'k'r'o'w't'e'n' ','''''''''' 'd'n'a' 'g'n'i'd'o'c'n'e' 'y'r'a'n'i'b' 'g'n'i'd'u'l'c'n'i' ','''''''''''''''' '.'l'l'e'w' 'o'd' 'o't' 's'd'e'e'n' 't'i'''''''''''''###'' '' 't'i' ' 's'g'n'i'h't' 'r'e'h't'o' '0'0'1' 'e'r'a' 'e'r'e'h't' 'y't'i'l'a'n'o'i't'c'n'u'f' 'n'o''''''''''' 'e'r'a' 'e'r'e'h't' 's'j'y' 'h't'i'w' 'e't'e'p'm'o'c' 'o't' 'e'l'b'a'''''''''''' 'e'l'b'i't'a'p'm'o'c' 'e'b' 'o'T''''''''''''''''''''''''''''''''' 't'a'h't' 's'g'n'i'h't' 'r'e'h't'o' '0'0'1' 's'''e'r'e'h'T''''''''''''''''''''e'v'a'h' 't'''n'o'd' 'y'l'p'm'i's' 'I' '.'y'r'a'r'b'i'l' 'T'D'R'C' 'e's'o'p'r'u'p' 'l'a'r'e'n'e'g''''r' 'l'u'f'e's'u'''''''''e'l'b'a'i'l'e'r' 'a' 'o't'n'i' 'n'r'u't' 'r'e'v'e'n' 'w'''''''''y'l'b'a'b'o'r'p''''m' 't'i' 't'u'b' ','t's'a'f' 'y'l'l'a'e'r' 's'i' 'e'd'o'c' 't's'u'r' 'y'M'n'n'''p' 't'n'e'c'a'j'd'a' 'd'n'a'(' ''k'r'o'w' 'd'n'u'f' 'o't'''''''''''''''''''''''''''''''''.'e'm'i't' 'l'''' 'l'u'f' 's'j'y' 'n'o' 'k'r'o'w' 'n'a'c' 'e'h'''''''e'k' 'o's''''''''''''''''''''''' 'r'o'f' 'e'g'n'a'h'c'x'e' 'n'i' 'k'r'o'w' 'd'i'a'p' 'e'm'o's' 's't'p'e'c'c'a' ''''s'j'y''''''''''''''''''''''''''''''''s'n'h'a'J' 'n'i'v'e'K' 'h't'i'w' 't'c'a''''e't'n'o'c' 'n'i' 't'e'g' 'o'c''''''''''''''''''''' 'o't' 'e'l'b'a' 'e'b' 't'h'g'i'm'a' '''''''''''''''''''''''''''''''''''u''' 'd'l'u'o'h's' 'u'o'y' 'y'a'd'o't''''''''''''''''''''''d'n'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'i'v'e'K' ','n'o'i't'a'c'i'l'p'p'a' 'r'u'o'y' 'n'i' 's'j'y' 'g'n'i't'n'e'm'e'l'p'''''''''''''m'l'p'e'm'i' 'p'l'e'h' 't'n'a'w'''''''''''y'e'n'o'm' 'e'v'a'h' 'u'o'y' 'f'I''''''''''''' 'u'o'Y''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'l'i'w' ')'e'm'i't' 's'a'h' 'n'i'v'e'K' 'f'i'(''''g' 'h'c'i'h'w' '-' 't'n'a'w' 'u'o'y' 'f'i''''''t' 's'j'y' 'f'o' 'r'o's'n'o'p's' 'a' 'e'm'o'c'e'b''''''t'e'g' 'o's'''''''''''''''t'i' 'd'e'e'n' 'u'o'y' 'f'i'l'a' 'n'a'c' 'u'o'Y''''''' 'n'i'v'e'K' '.''''''''''''''''''''''''''''''''''''''''d'e'e'n' 'u'o'y''''''''t'n'a'w' 'u'o' 'f'i' 't'r'o'p'p'u's' 'd'i'a'p' '+'(' 't'r'o'p'p'u's' 't'a'e'r'g' ','e'g'a's'u' 'y'r'o'm'e'm' 'w'o'l' ','' 'n'o'i't'a'c'i'l'p'p'a' 'n'a' 'g'n'i'd'l'i'u'b' 'e'r'''u'o'y' 'f'I'''''''''''''''''''''''''''''''''''''''e'c'n'a'm'r'o'f'r'e'p' 't'n'e'l'l'e'c'x'e' 's'a'h' 's'j'Y' '.'s'j'y' 'e's'U'n'n'?'o'd' 'I' 'd'l'u'o'h's' 't'a'h'W' '.'n'o'i't'a'c'i'l'p'p'a' 'y'm' 'r'o'f' 'T'D'R'C' 'a' 'e's'u' 'o't' 't'n'a'w' 'I' '?'w'o'n' 't'a'h'W''''''''''o'o'c' 's't'a'h'T''''''''''''''''''''''e's'u' 'o't' 't'n'a'w' 'I' 'f'i' 't'a'h'W' '#'''#''''''''''''''''''''''y'm' 'n'o' 'n'o'i't'a'm'r'o'f'n'i' 'e'r'o'M''''Appending A: ''''''''''''h'W' '#'n'n'x'''''''g'n'i'd'n'e'p'p'A' '#'n''n'''''''''''''''''''''''''''''''''''''''''''''''''''a' 'e'r'a' 'e'r'e'h''''''''''''''''''''''''''''''''''' 'o't' 'p'''''''''''''''''''''''''''e's'e'h't' 'e'r'a''''A' '-' 'n'o' 'g'n'a'H'''''''''''''''''''''''''''''''''''?'''e'''''m'a's' 'e'h't' 'y'l'l'a'''''''l'l'u't'c'a' 's'T'D'R'C' 'e's'e'h't' 'e'r'A''''''''='='=' 's'j'Y' '#'#'#''n'n''''''''''''''''''''''' 't's'o'p' ''''n'n'.'''s'''i'h't' 'h'g'u'o'r'h'T'''''''''''''''''''''''''''''''''''''e'm'a's' 'e'h't' 'y'l'l'a'c'i'''''''i'''''''i'a'c's'a'b' ''''''''''''''''''''''''''''''''''''''''''''''f'o'''''''m'''''''''''''''''''''''''' 'k'n'i''''''''''''''''''''''''n'n'''.'''e'r'o'f'''e''''''''''y't'r'e'p'o'r'p' '''''''''''''''''''r'e'p'o'r'p'''b' 'd'e'r'e'v'o'c's'i'd' 's'a'h''h't' 'I'''''''' 'y'd'o'b'o'n' 't'a'h't' 'a''''''''r'e'h't'i'e' 'e'd''s''''i' 'l'e'v'o'n''''''''''''''''''''''''' 'I' 'k'n'i'h't' 'I' 't'a'h't''''''''''''''' 'I' 'k'n'i'h't' 'I' 'd'n'a' '''''''''''''''''a''''-'C''''n'Y''''n':''h't' 'a'e'd'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''S' '-'n'''s't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'r'o'f'''''S' '-'''n''' 'c'i'g'o'l' 't'n''''''''''''''''''''''''e't'''''C''' ''''''''''' 's'''s'j'y'-'n'''a''n'n''''''''''a'o'd' 'o't' 'p'u' 't'i' 'p'e'e'k' 'd'n'a' ',''e'r'e'f'f'''''''''''''''''''''''''''''''''''''''y''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''###''''' '#'#'#'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'c'i't'n'a'm'e's' 'e'g'r'e'm'o't'u'a' 'd'n'a' 's'j'y' 'n'e'e'w't'e'b' 's'e'h'c't'i'w's' 'h'c'i'h'w' 'r'e't'e'm'a'r'a'p' 'e'p'y't' 'a' 't'p''''e''''''''''''''''a' 't'p'c'e'c'c'a'''''''a'h' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'T'D'R'C' 'y'm' 'e'k'a'm''''''' 'a' 'd'd'a' 't'n'i'o'p' 'e'm'o's' 't'a' 'l'l'i'w' 'y'l'b'a'b'o'r'p' 'I' ','e'd'o'c' 't's'u'r' 'y'm' 'r'o'F'n'n''r'a'r'b'i'l' 's'i'h' 'o't'n'i' 'e'g'n'i'h' 's'i'h't' 'g'n'i'd'd'a' 'n'i' '''' 'i'd' 'y'l't'h'g'i'l's' 'd'e's'u' 'h'c'i'h'w' ')'''''''''''''''o't'u'a'''t'a' 'h't'i'w' 'e'v'i't'a'n'r'e't'l'a' 'n'a' 'e'k'a'm' 'r'o'(' '' 'w'e'n' 'a''''''i' 's'''''''''''''''''!'''''',''d'l'o'b' 'g'i'b' ''''''''''e''''''''''''''''''''''e'h't''''a''''''''''' 'e'h't''''''''''''''''''e'''''''''''''t'a'h't' ''''''''''''''''t'h'a' 't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'s'e'c'a'r't' 'g'n'''''''l'e'v''.''''''''''''n'e'v''''''''''''''''''e'u'r't' 's'i' 's'i'h't' 't'a'h't' ''o'n' '''''''''''''n'i'k' 'i't'i'd'e' 'r'e's'u'''''''''''''''''''''''''''''''''''''''''''''''''''r'o' 'g'n'''''''''''s''''''''''''''''''''y' 't'n'e'd'i'f'n'o'c' 'm'''''''''''''''y''' 'k'n'i'h't' 'I' 'd'n'A'c'i't'n'a'm'e's''''a' 'i's'u' 'n'e'h'w''''''''''''''''''''''e'g'r'e'm'o't'u'a' 'd'n'a' 's'j'y' 'r'o'f' 'e'c'n'a'm'r'o'f'r'e'p' 'l'a'c'i't'n'e'd'i' 's'a'h' 'h'c'i'h'w' ','' 'e'l'g'n'i's' 'r'o'f' 't's'a'e'l' 't'a'(' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'h'c'i'h'w' '-' '''m'i'a'l'c''''l' 'd'l'o'b' 'a' 'y'l'l'a'u't'c'a' 's'i' 's'i'h'T''''''''''''''''''''Y''''''''''''''''d'e'c'n'i'v'n'o'c' 'm''''''''''''''''''''''''''''''''''''''''''''''''''o't' ''.'Y''''''d'''e't'n'a'w' 'u'o'y' 'f'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''h'c'a'e''','' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''''''''''' ','l'o'o'c' 'e'''' 'y'n'a''''' 'e'h'''''''''''''''''''''''''''e'l'b'i't'a'p'm'o'c' 's'j'y' 'g'n'i'k'a'm''''''n'i'd'd'a'''''''g'n'i'k'a'm' 'f'o' ''t''l'i'h'w''''''''''''' 'n'i' ' ','''''''''''''''''''''''''''''.'t'n'i'o'p' 'y'n'a''''t' 'e'e's' 't'''n's'e'o'd' 'e'h' 'd'n'a' 's'i'h't' 't'u'o'b'a' 'n'i'v'e'K' 'o't' 'd'e'k'l'a't' 'I'a'm'r'o'f' 'g'n'i'd'o'c'n'e' 'y'r'a'n'i'b' 'e'h't' 'e'g'n'a'h'c''''h' 'd'n'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e't'a'd'p'''''''''''''''''''''e'h'T'''''' 's'i'h'T' '.'t'n'e'm'u'c'o'd' 'e'h't' 'n'i' ''u' 'd'n'a' ''''''''''*'q'e'S'x'a'm'*' 'e'r'o't's' 'd'n'a' '*'m'e't'I'*' 'n'i' '*'t'h'g'i'R'n'i'g'i'r'o'*' 'f'o' 'd'a'e't's'n'i'''''''''''f'o' 'd'a'e't'n's'i' '*'q'''''''e's'''''''a'm'*' 'e'r'o't's' 'd'n'a' ','d'o'h't'e'm' '*'e't'a'r'g'e't'n'i'*' 's'''s'j'y' '''''''''''''''''''''''''''''''''''e'g'n'a'h'c' 'o't' 'e'v'a'h' 't's'u'j' 'd'''u'o'y' '-' 's'c'i't'n'a'm'e's' 'A'G'R' 't'n'e'm'e'l'p'm'i'''''''''t'n'e'm'e'p'm'i' 'o't' 's'j'y' 'y'f'i'd'o'm' 'o't' 'h'c'a'o'r'p'p'a' 'e'm'a's' 'e'h't' 'e's'u' 'd'l'u'o'c' 'u'o'y' 'e'v'e'i'l'e'b' 'I''''' 'u'o'Y''''' 'd'n'A' '.''''''''''''''''''' 'y't'r'e'p'o'r'p''''''''''''''''''''''''' 'y'm' 'n'i' 'y't'i'l'i'b'a'g'n'a'h'c'r'e't'n'i' 's'i'h't' 'd'e't'a'r't's'n'o'm'e'd' 'e'v'''I''.'e'g'n'a'h'c' 't'''n'o'w' 'e'c'n'a'm'r''''''''''a'r'm'o'f'r'e'p' 'e'h't' ','s'c'i't'n'a'm'e's' 'p'a'w's' 'u'o'y' 'f'i''''''''''''''''e'c'n'a'm'r'o'f'r'e'p' 'e'h't' 'd'n'a' ','''''e'l'b'a'g'n'a'h'c'r'e't'n'i' 'e'r'a' ''''''''''''''' 's'c'i't'n'a'm'e's''''''''''''''''''''''''' 't''' 's's'i'l'''''T'D'R'C' 'l'l'a' ','s't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'o'n' 'e'r'a' 'e'r'e'h't' 'n'e'h'W'''''' 'A'T'A'Y' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''r'''''e'''h't'o' 'h'c'a'e' 's'a' 't's'a'f' 's'a' 't's'u'j' 'n'u'r' 's'm'h't'i'r'o'g'l'a' 'h't'o'b' 't'a'h't' 'n'o'i't'p'm'u's's'a' 'e'h't' 'n'o' 's't's'e'r' 's'i'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'''''e'l'b'a'g'n'a'h'c''''n'r'e't'n'i' 'e'r'a' 's'm'h't'i'r'o'g'l'a' 'e'h't' '''f'i' 'e's'n'e's' 's'e'k'a'm' 'y'l'n'o' 's'i'h'T' ''y'l'b'a'g'n'a'h'c'r'e't'n'i' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'f'o' 'e'c'n'a'm'r'o'f'r'e'p' 'e'h't' 'g'n'i'r'a'p'm'o'c' 'y'l't'c'e'r'i'd'''''''''''''p'm'o'c' 'm'''I''''''''''''''''''h't' 'n'e't't'i'r'w' 'e'v'''''''''''''''''''''''''''''''''''''''''''','s'r'e'b'm'u'n' 'h't'i'w' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'n'e'r'e'f'''''''''''''''''''''''''''''n'o'i't'a't'n''''' 'e'h't'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''['''''''''''''''']''''''''''''''https://github.com/josephg/reference-crdt')'s'(']''''''''''''''''''''''''''' ','e'c'a'r't' 'g'n'i't'i'd'e' 's'i'h't''''''' 'a' 'h't'i'W'''''''''''''''''''A' '.'s'i' 't'i' ','''' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'T'D'R'C' 'e'c'n'e'r'e'f'e'r' 'y'm' 'n'i' 'e's'u'a'c'e'b' '-' 'l'a'c'i't'n'e'd'i' 's'i' 'd'e'e'p's' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'e'h't''''''''''''''''''''''' 'e'r'a' 's'm'h't'i'r'o'g'l'a' 'h't'o'b' 't'a'h't' 'm'e'l'p'm'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'p'm'u's's'a' 'n'' 'a' 'g'n'i'k'a'm' 'm'''I'''''''''' 'm'i'a'l'c' 'y'M'''''''''''''''''''i' 's'i'h'T' '.')'e'd'o'c' 't's'u'r' 'y'm' '+' 's'j'y'(' 'A'T''''''''''A'T'R'A'Y' 'd'n'a' ')'e'g'r'e'm'o't'u'a'(' 'A'G'R''''Y' ':'f'i'd' 'e's'u' 'h'c'i'h'w' 's'n'o'i't'a't'n'e'm'e'l'p'm'i' 'g'n'i'r'a'p'm'o'c' 'y'l't'c'e'r'i'd''''''''''''''''''''''''s'c'i't'n'a'm'e's'''''''r'i'o'g'l'a' 'T'D'R'C' 'o'w't' 'h't'i'w' 'e's'o'o'l' 'd'n'a' 't's'a'f' 'd'e'y'a'l'p' 'e'v'''I'''''''''''''''''''''''''b' 't's'o'p' 's'i'h't' 'n'e't't'i'r'w' 'e'v'''I'''''''''I' '.'1'n'n'.'u' 's's'e'f''''''''''''''''''e'f'n'o'c''''f'''''''''''''''''d'n'e'f'e'd' 'd'n'a' ''''''''''''e'f'e''''''i't's'u'j' ','t'i'm'd'a' 'o't' 't'n'a'w' 'I' 't'a'h't' 'e'v'o'b'a' '''T'''''''''''''''''''''''''''''''''s'd'n'a'h' 'f'o' 's't'h'g'i'l's'''''''' 's'h't'i'l'g''''''''''i'g'l' 'w'e'f' 'a' 'e'n'o'd'''''''a' 'e'n'd'o' 'e'v'''I'n'n's'k'r'a'm'h'c'n'e'b' 'h't'i'w' 'g'n'i'y'L' '''' ':'A''''X' 'g'n'i'd'n'e'p'p'A' '#'''''n'n'n'.'u'o'y' 'r'o'f' 'g'n'i'm'o'c' 'e'r'''e'W' '?''D'''''''''''''''''''''''''''''''g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'e'm'i't'l'a'e'R''''P'2'P' '.'w'o'n' 't'i' 'd'n'u'o'f' 'e'v'''e'w' 't'u'B'n'n'.'e'd'i's'n'i' 'e'r'u's''''t'a'e'r't' 'e'h't' 'd'n'i'f' 'o't' ''''s'e'd'a'c'e'd' 'r'e'h't'o'n'a' 'e'm' 'k'o'o't' 't'i'''''''' 't'''n'd'i'd' 'd'n'a' ','e'v'a'c' 's'''n'o'g'a'r'd' 'e'h't' 'r'e't'n'e' 't'''n'd'i'd' 'I' ''''''''''''''''i'd' 'I' '.''''''' '.'y'a'w'a' 'd'e'n'r'u't' 'per was really a call to adventure. It was the world saying was saying 'Hey Seph, we need your help over here. Your skills are a piece of this puzzle, and we can't get it working without you.' In my youthful arrogance I'''''t'a'h'T''''''''''' 'y'l'l'a'e'r''''''''''''''''''e'h't' '''''' 's'a'w' 't'I'''''S''''''''''''''''''''''''''''''''''''''''''''''''''e'r'a' 's'l''''s'l'i''''''''''''''''''''''''''''''''''''''''''u'o'y' 't'u'o'h't''''''''''''' 'I' 'e'c'n'a'g'o'r'r'a'i'w' 'g'n'i'k'r'o''''i'w''''''''g'n'i'k'r'w'o' 't'i' 't'e'g' 't'''n'a'c' 'e'w' 'd'n'a' ','k's' 'r''''''''''''''''''''''''''''s'i'h't'''''''''''''''''' 'l'u'f''''n'h't'u'o'y'''''''u'o' 'y'm' 'n'I' ''''''''''e'l'z'z'u'p' 'e'h't' 'f'o' 'e'c'e'i'p' 'a' 'g'n'i'd'l'o'h' 'e'r'''u'o'Y' '.'e'r'e'h' 'r'e'v'o' 'p'l'e'h' 'r'u'o'y' 'd'e'e'n' 'e'w'''''''''' 'e'W'''''''' ','h'p'e's' 'y'''' 'e'H''''''','t'i'r'i'p's' 's'i'h't' 'n'I'' 't'a'h't' 't'a'h'w'''''''h't' 't'u'o' 'e'r'u'g'i'f''''''''t'''T'''''''''''''''''''''''''''''''''''T'''''''''''''''''''''''''g''''h'n'i'y'a's' ''''''''''''.'e'r'e'h' 'd'e'd'e'e'n''''''''''''n'a' ''''''''''W' '.'e'l'b'a'u'l'a'v''s'a'w' ''''''''''''''''''''''''''''''''''''''e'r'a'r' 'e'r'a' 's'l'l'i'k's' 'r'u'o'Y''' 'g'n'i'y'a's' 'd'l'r'o'w' 'e'h't' 's'a'w' 't'a'h'T' '.'''' 'e'r'u't'n'e'v'd'a' 'o't' 'l'l'a'c' 'a' 's'a'w' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'v'a'h''''n' 'd'l''''d'u'o'h's' 'I' ','r'e'p'a'p' 't'a'h't' 't'a' 'd'e't'a'r't's'u'r'f' 'g'n'i'e'b' 'f'o' 'd'a'e't's'n'I'n'n''i' 'd'n'i'f' 'n'a'c' 'e'w' 'f'i' ','''d'l'r'o'w' 'e'h't' 'r'o'f' 't'f'i'g' 'n'w'o' 'r'u'o''h'd' 't'n'e'r'e'f'f'i'D' ''''''' 'e'W' ''''' '.'o'g'a' 'e'd'a'c'e'd' '''a' 's'T'D'R''''D'C' 'e'l'b'a'k'r'o'w' ','t's'a'f' 'd'a'h''''f' 'e'v'a'h' 'd'l'u'o'c' 'e'w' ','d'i'd' 'I' 'f'i''''''' 'I' 'd'n'A''''''!'s'p'o'O' ''''a'm'e's' 'T'D'R'C' 'g'n'i't'n'e'v'n'i' 'f'o' ' 'e's'u''''''*'''''''''o'h'w' 'w'o'n'k' 't'''n'o'd' '''''''''' 'm'''I'''''''''''''' ''''m''''t'u'o' 's'n'r'u't' 't'I''u's''''''''''''''''''''''''''''''''''''''''''''''.'e'g'r'e'm'e' 'o't' 'd'e't'r'a't's' 's'T'D'R'C''''''''''''r'e't's'a'f' 'h't'i'w' ''''''' 's'd'o'h't'e'm' ')'(''''''''''''e'k'i'l' 'd'e''''d'm'e'e's''''''''''''''''''''''''''''''''''e'r'''y'e'h'''''''!'w''''1'o'n' ''t' 'd'n'a' '-' 'l'a'e'd' 'g'i'b' '''y'l'a' '''''''''''''''''''''''''''''''''''''''''''''A''''''''''''''''''''''''''I'''''''d'e'm'u's's'a'' '-' 'e'k'a't's'i'm' 'g'i'b' 'a' 'e'd'a'm''S' ''''''''''''' 'a' 'e'd'a'm' ' '''''.'''','''g'''n'i't'i'd'e' 'd'l'r'o'w' 'l'a'e'r' 'r'o'f' 'e'l'b'a's'u''''i'n'u' 'y't't'e'r'p'''' 'a'e'r'e'w' ''e'''t'a'd'p'u'_'h'c't'a'b' 'a'''''''''''''''''''''''''''''''''''''''''.'e'c'n'a'm'r'o'f'r'e'p' 'e'r'o'm' 'n'e'v'e' 'r'o'f' 's'e'i't'i'n'u't'r'o'''''''o'p'p'p'o'''''''''''''''''''' 'e'c'n'a'm'r'o'f'r'e'p' 'r'e't's'a'f'''''e'r'o'm' 'l'l'e'm's''''' 'n'a'c' 'I''''''''k'o'o'l' 't'I' '''u''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''t'i'd'e' ''g'n'i's's'e'c'o'r'p' 'y'b''''''''''''''''''''''''''''''''''e'm'i't' 'a' 't'a' 'r'e't'c'a'r'a'h'c' 'e'n'o' 'g'n'i't'r'e's'n'i' 'e'h'c'a'c' 's'''U'P'C''''''''''''''''c' 'U'P'c' 'e'h't' 'g'n'i'h's'a'r'h't' 'y'l'b'a'b'o'r'p' 'm'''I''' 'I''j' '''''''''''''''l'l'i'f' 'y'l'b'a'b'o'r'p' 'd'n'A'n'n''r'o'w' 's's'e'l' 'o'd' 'r'e't'u'p'm'o'c' 'e'h't' 'e'k'a'm' ''a'c' 'e's'u' 'f'o'''Oh look - 29ms + 23ms != 65ms. We're''''''''''k'o'o'l' 'h'O''''''''''''''''''''''''''''''''''''''' 'e'r'''e'W''''''''''''''''' '''' 's't'i' 'f'i' 'r'e'd'n'o'w' 'I' '.'s'm'5'6' '='''' '!' 's'm'3'2' '+' 's'm'9'2' '-' 'd'r'i'e'W''''''''''' 't'''n'o'd''is it'''''''''' 'o't' 'r'e't's'a'f' slower''d'''''''''''''r'e'w'o'l's' 't'i' 's'i' 'y'h'W'(''''('n' 'h'c'n'u'b' 'a' 's'''e'r'e'h'T''''''''''''''''''s'n'o'i't'a'c'i'l'p'p'a' 't's'o'M''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'e'h'w' 'e'k'i'l' '-' 'l'l'a' 't'a' 't'n'e't'n'o'c' 't'x'e't' 'e'h't' 'd'e'e'n' 't'''n'o'd' 's'e'm'i't'e'm'o's' 'e'W' '-'n'''''h't' 'f'''o' 'e'z'i's' 'e'.''h't' 's'e's'a'e'r'c'n'i' '''o's'l'a' 't'I' '''''''''' '''''''''''''''''''y'e'p'o'r' 'n'o' 'g'n'''r'u'o''i'd'n'e'p'e'D'o'T''' '''''''' 't'n'e't'n'o'c''e'''I'm still not sur''''''''''''''''''''''''''''''.'h'c'a'o'r'p'p'a' 's'i'h't' 'e'k'i'l' 'I' 'r'e'h't'e'h'w'''''''''''''''''''''''.'e'g'n'a'h'c' 's'i'h't' 'e'k'i'l' 'I' 'f'i' 'e'''''''''''''''''''' 'e'r'u's' 't'o'n' 'l'l'i't's' 'm'''I'n'n''''''''''''''''''''' 'e'w' 's'e'm'i't'e'm'o'S' '-'n'''''''''''''''''''''''''''' 'n'o'i'''''''''''''''t'n'i'o'p' 's'i'h't' 't'a' 't'a't'n'e'm'e'l'p'm'i' 'T'D'R'C'.''e'r'T'e''''''''''''''' 'y'e'p'o'R'''''''''''s'i'''''d'n'a' ' 'h'''''''''''''''s'''t'n'e'm'u'c'o'd' 'e'h't' ''c'i'h'w' '-' ''''g'n'a''n''''e't'o'N'''''''''''t'x'e't' 'e'h't''''''''''' 'e'n'O' // No string conte''nt!'R''''''''''' 'g'i'b' 'e'n'O''''''''''''''''''''''''''''''''''''''''''''''t'u'B' ''''''''''''''' 'r'a'l'u'c'i't'r'a'p' 'n'i'.''''''''n''' ''''''''''''''''''''e'h't' 'h't'i''''''.'e'r'e'h' ''''w' 'd'i'd' 'I' '''t'a'h'w'''t''t'u'' ','''''''''''''''''''''''''''''''''''''''''''''''''''a't'a'''d' ''''''''''''''''''''''''''''s't'n'e'm'e'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''.''''''''''''''''''''''''''''''''' 'e'h't'''''''''''''''''''''''''''''''''''''''''e'h'T'''''''''''''''''s'e's'a'e'r'c'n'''- It also makes it way faster to read off''''I'''''o's'l'a' '| *JS baseline* | 0.61s | 0.1 MB | *(none)* |'| Rust (Called from JS via WASM) | 0.20s | ??? | B-Tree |'| Rust (native) | 0.065s | 2.3 MB | B-Tree |n'n'n'''''''''''''')'t's'u'r'''''''''''''''''''9'''2''2'''0''''''(' 'y'e'p'o'R''''''''''''''''''''''''''''''''''''''''''''' 'f'f'o' 'd'a'e'r' 'o't' 'r'e't's'a'f''''a' 'y'a'w' 't'i' 's'e'k'a'm' 't'i' 't'u'B' '-'n'i'''''''''''''''''''''''''''.'y'e'p'o'R' 'n'o' 'd'n'e'p'e'd' 'e'w' 'n'e'h'w' ''''''''''''''''''''''''''.'b'k'0'2'1' 'o't' 'b'k'0'6' 'm'o'r'f' 's'e'o'g' 'e'l'd'n'u'b' '.'b'e'w' 'e'h't' 'n'o' 's'r'e't't'a'm' 'h'c'i'h'w' ','''''''''''''' 'm's'a'w' 'h't'i'w' '-' 'y'r'a'n'i'b' ' 'f'o' 'e'z'i's'''''''''d'e'l'i'p'm'o'c' 'e'h't' 's'e'l'b'u'o'd' 't'i''''''b' 'e'h't' 'd'n'A' '''''''''''''''t'a' 'd'e'v'i'r'r'a' 'y'l'e't'a'n'u't'r'o'f'n'u' 'e'v'a'h' 'e'W''n'i'w' 't'e'n' 'a' 't'''n's'i' 's'i'h'T' '.'''s't'r'e's'n'i' 't'x'e't' 'e'g'a'n'a'm' 'y'l't'n'e'i'c'i'f'f'e' 'o't' '''' ''''''t' 'p'''m'''i' 'y'e'p'o'R' '.'''''''''''''''''''''''''' 'd'''''''d' 'e'l'l'a'c' 'y'r'a'r'b'i'l' 't''''''''''''''''''''''''''''''''''''!'e'e'r't'-'b' '*'r'e'h't''''''''''''''e'l'b'a't'r'o'f'm'o'c'n'U' ''o'n'a'*' 's't'n'e'm'e'l'p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'''''o't' ''w'o'l'l'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t's'u'j' ''''''''''''''''''''''''''-''' '-'n'''r'e''''''' 'e's'a'c' 's'i'h't' 'n'i''''''''''''''''''''''''''''''e'b' 'd'l'u'o'c' 't'i' 's'a' 'w'o'l's' 's'a' 'e'c'i'w't' '''' '''''''''''''''''''''''''''n'a'h't' 'e'r'o'm' 'g'n'i'h't'y'r'e'v'e' 's'e'k'a'm' 'h'c'i'h'w' ','1' 'f'o' 'd'a'e't's'n'i' ''''''''''''''''p'o'R' '.'s'e'r'u't'c'u'r't's' 'a't'a'd' '2' 'e't'a'd'p'u' 'o't' 'd'e'e'n' ''''''e'w' 't'r'e's'n'i' 'h'c'a'''''''h'c'e' 'h't'i'w'''''''i'e''''''''''''''''''''h't'o'b' 'o't'n'i' 'g'n'i't'r'e's'n'i' 't'u'B' '''''''''''''''''''''''''''.'y'a'w' 's'i'h't' 'm'a'r' 's's'e'l' 't'o'l' 'a' 'e's'u' 'e'w' 's'i' 'e'g'a't'n'a'v'd'a' 't's'e'g'g'i'b' 'e'h'T''''''''''''''''''''''-''' '-'n'.'m'a'r' 's's'e'l' 'e's'u' 'e'w' 'o'S' '.'''''''''''''''''''''''''''''a'r'a'h'c' 'e'h't' 'l'l'a' 'g'n'i'k'c'a'p' 'e'k'i'l' ','''''''''''''''''''''''''''''''''''s'n'o'i't'a'z'i'm'i't'p'o' 'c'i'f'i'c'e'p's'-'t'x'e't' 'o'd' 'n'a'c' 'y'e'p'o'r''''' 'e'h't' 's'n'a'e'm' 's'i'h't' 'e'k'i'l' 'd'e'n'i'a't'n'o'c' 'f'l'e's' 't'n''''e't'n'o'c' 't'x'x'e't' 'e'h't' 'g'''' 'n'i'v'a'H' ''m'i'''''''''''''*' 's'''' 'i' 'h'c'i'h'w' ','')''s'u'r' ''''''''''''''''t's'i'l' 'a' 'g'n'i's'u''''U''[Ropey](https://docs.rs/ropey/1.2.0/ropey/)'(' ''''''' '''' '('e't'a'r'a'p'e'''''L''''''''''''''''''''''''T''' 'g'n'i'r'e'e'n'i'g'n'E' 'f'o' ''''s'd'n'a'l' 'e'h't''s' 'a''' '''''''''''''''''''''''''''''' 'o't' 'e'm'o'c'''''''m'o'l'e'W'''''''''''''''''[Ropey](https://docs.rs/ropey/1.2.0/ropey/)''''''''''-''' '-'n'n':'f'f'o'e'd'a'r't' 'a' 's'i' 's'i'h'T''''''''''''' 't'i'f'e'n'''''''n'e'e'b' 'e'h'T' '.'e'r'u't'c'u'r't's' 'n'w'o' 's't'i' 'o't'n'i' 't'u'o' 't'i' 'd'e'l'l'u'p' '''''''''' 's't'I' '?'t'n'e't'n'o'c' ''b' ','e'r'e'h' 's'k'a'e'w't' 'l'l'a'm's' 'f'o' 'h'c'n'u'b' 'a' 's'''e'r'e'h'T''''''''''''''''t'x''''t'e't' 'e'h't' 'e'c'i't'o'N'n''''''''''''''''''''''''''''''''''''' 't'u'b' ','e'r'e'h' 's'k'a'e'w't' 'w'e'f' 'a' 's'''e'r'e'h'T'n''n''''''n''m'e't'''''T'O'''O'R'''''l'l'u'n'''''''''''''L'L'U''n { length: 5, id: [0, 0], seq, parent: ROOT },'N'i' ',']'''e'k'i'''''''''i'''m'm''''' ','''h'p'e's''''n { length: -5, id: [1, 0], seq, parent: [0, 0] },'[' ':'s't''n ...'n'e''0'i'n ]},''l''n'c' 'i'h''}'t'e'm'''''''1'-'''''''''''''' 't'o'o'r' '/'/' ' ',''''''''''']''''''''''''''{' 'e'p'''}' 'o'R' 'y'' 'e'p'o'''R''0' ',''''''''''-' ','1'-'[''''o's' '''''''''''''''''''''' 'f'1''o'''''n```javascriptndoc'n ''' ='0' { co' 'nten'n '''''''''''''''''' '''''!'t'n'e't'n'o'c' 'g'n'i'r't's' 'o'N' '/'/' 't: [n' ''''''''''5''' ':'h't'g'n'e'l' { item: 'hello', i' 's'' ''''n'''''''''''''''''''''''''''''''''''''''r''''''''''''''''''''''.'g'n'i'r't's' 'a' 't'o'n' ','e'p'o'R'''''e'p'o'r' 'a' 'n'i' 'y'l'l'a'u't'c'A' '/'/' '''o'l'l'e'h''' ':'t'n'e't'n'o'C't'x'e't' 'n ' ',''''n ''n '''Del''''''''' '''5'''-' ':'h't'g'n'e'l'''eted: false, id: ['seph', 0], seq, parent: null },n { item: 'world', isDeleted: true, id: ['mike', 0], seq, parent: ['seph', 0] },n ...n]}n```'n''n' 't'n'e'l'a'v'i'u'q'e' 'e'h't'''''']'0'n ''''' ''''''''''''''''''''''''''''''':'s'i'h't' 'g'n'i'o''nIn javascript we have this:nn```javascriptndoc = { content: [n { item: 'hello', isDeleted: false, id: ['seph', 0], seq, parent: null },n { item: 'world', isDeleted: true, id: ['mike', 0], seq, parent: ['seph', 0] },n ...n]}n```n'd' 'm'''I' 't's'u'r' 'n'I'n'n'`'`'`'n'}'n ']'n '.'.'.' '' ','''h'p'e's'''[''''{' ''''{'''='''['''p'''''n'.'i'r'c's'a'v'a'j'''''''' '=' 'c'o'd''{ item: 'hello', isDeleted: false, id: ['seph', 0], seq, parent: null },'n'`'`'`'n'n':'s'i'h't' 'e'v'a'h' 'e'w' 't'p'i'r'c's'a'v'a'j' 'n'I'n'n'.'t'i' 'e'k'i'l' 'I' 'f'i'''''''''e'k'i'l' 'I'f'i' 'e'r'u's' 't'o'n' 'm'''I' 'd'n'a' '-' 'e'g'n'a'h'c' 'l'l'a'm's' 'r'e'h't'o'n'a' 's'a'h''''''t'''n's'i' 'n'o'i't'a't'n'e'm'e'''''''e'm'l'p'm'i' 's'i'h'T' '.'''''''''''''t' '-' 'e'r'e'h' 'd'n'a'h' 'f'o' 't'h'g'i'l's' 'a' 'g'n'i'o'd' 'm'''I'n''n''t'c'u'r't's' 'f'o' 'y'a'r'r'A' 's'v' 's'y'a'r'r'a' 'f'o' 't'c'u'r't'S' ''''#'#'#''''''''''''''''''''''''''''''''''''a' 's'e's'u' 'n'o'''''''''h'c'a'o'r'p'p'a' ''i't'a't'n'e'm'e'l'p'm''''''''''''''''''''''''''''''''''''''e'l'o'h'w'''''''''''''s'k'o'o'l' '''e't'e'l'p'm'o'c' 'e'h'T''''''''''''h't'g'n'''e'{id, length, parent}''l' ','''''''''''''n'e'l' ''''''''''''''.'.'.' ','t'n'e'r'a'p' ','d'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'c'n'a'f' ''''''''' '.''''''''''''''''''''''e'r'e'h' ''''''?'t'i' 't'e'G' '.'')'s'g'n'i'r't's' 't''''''''''''''''''''''t'a'e'r'g' 's'k'r'o'w' 'h'c'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'g'n'i''''''''''' 't'o'n' 's't'I''W'''''h't' 'g'n'i't'a'd'p'u'''''''''y'e'p'o'r''''''y'e'p'o'r' 'n'i' 't'n'e'p's' 's'i' 'e'm'i't' 's'''m'h't'i'r'o'g'l'a' 'e'h't' 'f'o' 't's'o'm''t'a''''''''''''''''''''''''g'n'i't'a'n'i'm'o'd' 'y'l'l'a'u't'c'a' 's'i' '''' 'h't' 't's'a'f' 'o's' 'h''''''''''k'r'o'w' ','''r'''a'm's' 'e'r'a' 's'e'p'o'R''''''t'r'a'm'S'(' '.'''' 'y'r'a'r'b'i'l' 'e'p'o'r' 'a' 'o't'n'i' 't'u'o' 'd'e'l'l'u'p' 's'i' 'f'l'e''''''''''f'e'l's't'i' 't'n'e't'n'o'c' 't'x''''t'e't' 'e'h't' 'l'l'A'n''n'}'{''' '.'t'n'e't'n'o'c' 'g'n'i'r't's' 'e'h't' 'r'o'f' ''i' 's'i'h'T'n't'''n''a' ''u'h' 'r'e'g'n'e'v'a''Y' ''c's'''''''''''''''''''''''''''''''''''''''''''''''*''''''''''''''''''''''''''''''''''''''''''''''''''.'t'i' 'n'o' 'e't'o'n' 'l'a'u't'c'a' 'e'h't' 'h't'i'w' 'r'e'p'a'p' 'f'o' 'e'c'e'i'p' '*''''''''''''''''''''''''''''''''''''''''''''e'g'r'e'm'o't'u'a' 'n'a'h't' ''''''''''''''''''''''''''''''''''.'d'n''''''''''''''''s'i' ','s'd'n'I'm''''''''''''t'i'b' 'e'l't't'i'l' 'a''' ''k''i''n''d'' ''of grateful for that silly academic paper now. I used to think'' that a'''''''e'r'e'w' 'cademics''''''''''''''''''''''''''''''''''d'n'u'o'r'a' 'e'l'p'o'e'p' 't's'e't'r'a''''''s'g'u'm' 'm's' 'e'''h't' '''''''y'l'l''''j'a'e'r' ''e'b' ''''''''''''''''''''''e'v'i's'''''''s'i's'a'm' 'a' 't'a'h't' 's'I'(' '''''''''''''''' 'o'g'a' 'e'''d'a'c'e'd' 'A'''''''''''s'''g'' So'''u''''''''y'l'l'a'e'r' 'm'''''''''g'n'''''e'[''h't'''https://hal.inria.fr/inria-00432368/documen')'t'('['']'''https://hal.inria.fr/inria-00445975/documen')'t'(']''' 'i'l'''''''''''''o'g'a' 's'r'a'e'y' '2'1' ''d'd'''''''s'T'D'R'C' 'i'm' ''''t's'u'm''''''r'i'''''''''''''o'S'''''''o's' ''''''''' 'e'h'''''r'o'f' 't''''Google wave, a'''''''''''''y't'i'l'a'u'''''''''y'l'l'a't'o'''''''''''''''''''b'a'l' 'e'h't' 'f'o' 'e'd'i's't''' 'o's''u'o' ''t''''''''''''''''''n'''''''''''''''''''''''''''''''''.''But I was wrong. I might not be any good at inventing CRDTs, but I am pretty good at making code run fast. A''nd here, in my own field, I *didn'''''''''e'g'n'a'r'''''''''''''e'g'a'r't's' 't even try* to help those academics improve their implementations. They were doing their part in this dance, and I wasn't doing mine. They figured out the semantics, but they'm'e'h't' 'd'e'r'o'n'g'i' 'I' 'd'n'A''''''''''''''''''''m'e'h't' 'd''''''''''''''''''''t''''g'n'i'''a''' 'd''''d'n'A'o'o'g' 'y't''''y','''',''t'e'r'p' 'm'a' ''''o'd' ''e'r'''n'g'i'''''''''''''r'i'e'h't' 'e'v'''o'r'p'm'i'' 'I' 'o''really'''''''''''''''''''''''''''''''''','d'l''''''''''''''''''''''''''''''''''''''''''' 'y'''' 'e'h't' 't'u''''''''''''''''t' 't'u'n'b''''''''''''''''t' 't'u'n' ','s'c'i't'n'a'm'e's''''''''''s'c'i't'a'n'm'e's' 'e'h't' 't'u'o' 'd'e'r'u'g'i'f' 'y'e'h'T' 'e'i'f' 'n'w'o' 'y'm' 'n'i' ','e'r'e'h' '''''''''r'i'e'h't' 'y'''''''''''l'l'e'w' 'k'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''A' '.'y't'i'c' 'e'h't' 'r'e'v'o' 'g'n'i's' 'o't' 'g'n'o's' 'a' 's'a'h''''a' 's'u' 'f'o' 'h'c'a'E''''''''''''''''''''''''''''''''''''g'n'i's' 'o't' 's'g'n'o's' 't'n'e'r'e'f'f'i'd' 'e'v'a'h' 'l'l'a' 'e'W' '.'s't's'e'r'e't'n'i' 'd'n'a' 's'e'i't'i'v'i'l'c'o'r'p' 't'n'e'r'e'f'f'i'd' 'e'v'a'h' 'o'w' 'l'd'i'p'u't's'''''''y'l'l'a'e'r' ''''''''''''''''''I think the idea that everyone has some hidden talent is tosh. But I do think we all'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'l'l'a' 'e'w' 'k'n'i'h't' 'o'd' 'I' 't'u'B' '.'''''''' 'f'o' 't'i'b' 'a'''''h's'o't' 's'i' 't'n'e'l'a''''e't' 'n'e'''''''e'n'd'd'i'h' 'e'm'o's' 's'a'h' 'e'n'o'y'r'e'v'e' 't'a'h't' 'a'e'd'i' 'e'h't' 'k'n'i'h't' 'I''''I''''''' 'I'.' 'I' 'o'S' '''''' 'g'n'i'b'i'''''''''d'o'o'g' 'e'k'a'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'n'i'm' 'g'n'i'o'd' 't'''n's'a'w' 'I' 'd'n'a' ','e'c'n'a'd'''i'b' 's'i'h't' 'n'i' 't'r'a'p' 'r'i'e'h't' 'g'n'i'o'd''''t' 'e'r'e'w' 'y'e'h'T' '''r'c's'e'd' '''''''''''''''''''''''''''''''''''''''''''''t's'u'j' ''''''''''''''''''d'e'r'u'g'i'f' 'I' ''''''''''''''''''''''''''''''''''''''''''''I' 't'u'B'''''''''''''''''''''''''''''t'a' 'd'''g'n'i'','b'''''''''o'o'g' 'y'n'a' 'e'b' 't'o'''''''''*'''''''''''''''*'''*'''''*'''''''''''''''''''''''''''' 's'''''''''''''''''''s'n'o'i't'a't'n'e'm'e'l'p'm'i''''''''''''''''''''''''''.'s'm'h't'i'r'o'g'l'a' 'r'i'e'h't' 'p'u' 'x'i'f''''''''' 'e'v'o'r'p'm'i' 'd'n'a' ''c'i'm'e'd'a'c''''l'a' 'e's'o'h't''''t'u'o' 'p'l'e'h' 'o't' 'y'r't' 'n'e'v'e' 't'''n'd'i'd' 'I' 't'u'B' '''n''''''''''''y'e'h'T' '.'e'r'e'w' 's'm'h't'i'r''''''''d'n'a' '-' ''''o''''i'g'l'a'''''''''' 'm''''''''''''h't'r'i'o'g'l'a' ''''''''''''''''''''''''''''''''' 'o'''''t's'''''' 'w'o'h' 'a'e'd'i' 'o'n' 'e'v'''''''y'l'l'a'''e'r'''''''' 'y'l't'''''''''e'n'o'y'r'e'v'e' ''e'i'u'q'' ''a'h' 't'''''''''.'e'r'e'h' ''''''''''''''''m' 'o't' ''''''''''''' 'n'i' '''h''''''''''e'n'o'y'r'e'v'e''g'i'm' 'I''M''''''''''m''' 'f'''''''''''''''''''''''''''''''''''''''' 'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'.'t'r'a'p' 'y'm' 'g'n'i'o'd' 'd'n'a' 'p'u' 'g'n'i'w'o'h's' 't'o'n' 'y'''' 'b' 'n'r'u't' 'n'i' 's'c'i'm'e'd'a'c'a' 'e'h't' 'n'w'o'd' 'g'n'i't't'e'l' 's'a'w' 'I' 'd'n'A' '.'t's'a'f' 'n'u'r' 'e'd'o'c' 'e'k'a'm' 'o't' 'w'o'h' 'w'o'n'k' 'o'd' 'I' 't'u'B' '.'o' 's'e's's'a'l'c' 'w'e'n' 'g'n'i't'n'e'v'n'i'''''T'D'R'C' 'e'b' 't'o'n' 't'h'g'i'm''''''t'''n's'i' 'o' 't'''''''t' 'r'a'P'''''''''''''''''''''d'l'r'o'w' 'e'h't' 'o't' 't'f'i'g' 'y'M' '.'r'i'e'h't' 't'n'e'i'c'i'f'f'e'n'i' 'd'n'a' 'w'o'l's' 'w'o'h' 'd'e's'i'l'a'e'r' 'I' 'n'e'h'w' 't's'u'd' 'o't' 'd'e'n'r'u't' 't'n'e'm'e't'i'c'x'e''''''''''' 't'n'e'm'''''''''''''''' 'n't'm'e't'i'c'x'e' 't'a'h't' 't'u'B' '.'s'r'e'p'a'p''e'h'w' 'd'e't'i'c'x'e' '''t'o'g' 'I'''''w''' 'o'S''''''''''['''''' 'e'v'a'w''''''''''https''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h'c'u'm'r'' 'o''''''d'o'o'g'W'' 's' 'n'e'e'b' 'e'v'a'h' 'd'l'u'o'w' 'g'n'i'h't' 'e'l'o'h'w' 'e'h'T'y'l'r'e'p'o'r'p' 'd'e'k'r'o'w' 'r'e'v'e'n' 't'i''''''''''''''''I' '.'y'g'g'u'b' 'y'l'l'a'e'r' 'd'n'a' '''' '://web.archive.org/'''''''''''''''''''''''''''''e'l'b'a'k'r'o'w'n'u' 'e'r'e'w' 'y'e'h't' 'w'o'l's' '''' 'o's' 'web/20130330144116/http://www.waveprotocol.org/federatio')'n'(''''https://web.archive.org/web/20130330144116/http://www.waveprotocol.org/federation']'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''w''' 'o'S''''''t''a'b'''''''b'''u'B' '.'T'D'''t'o'g''R'C' 'a'''''''a' ' 'h't'i'w' 'e'l'p'm'i's' ''''''' 'd'n'A''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','o'''f'''' 'e'h't''''i' ''g' ''''''h't''r'e'v'e' 'd'l'u'o'c' 's'm'h't''n'n''''i'r'o'g'l'a' 'e's'o'h't' 's'a' 't's'a'f' 's'a' 's'a'w' 't'a'h't''''''''a'c'a' 'e'h't' ''o''''''''''''a' 'e'h't' 't'n'a'e'm''''a'e'm' ''s' 'n'e'e'b' 'e'v'a'h''''b' 'd'l'u'o'w' 't'i' 'd'n'a' ','s'r'e'k'n'o'b' 's'a'w' 'l'e'd'o'm' 'n'o'i't'a'r'e'd'e'f' 'r'u'O' ''q' 'd'o'o'g' 'll those years ago, really ne'B'eded a hi''''''''''''''''o't' 'e'g'a'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'u'b' '-' 'd'e't'i''''e'c'x'e' 's''.'''a'w' 'I''''''''''''''''' 'e'h't'''''''''''d'e'v'l'o'v'n'i' '''''''''''''''''''''''''''' ','y'l'w'o'l's' 'y'l'l'a'e'r' 'n'a'r' 's'm'h't'i'r'o'g'l'a' 'r'i'e'h't' 'd'n'a' 't'u'o' 'e'm'a'c' 'T'O'O'W' 'd'n'a' 'T'O'O'G'O'L' 'e'k'i'l' 's'r'e'p'a'p' 'n'e'h'W''a'm' 't'''n'd'i'd'gh performance list CRDT. And back then I wasn't smart enough to invent one. I assumed that because academics couldn't make their CRDTs run fast, nobody could. That was wrong - my forte isn't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'c'n'a'm''''''''''''''''n'e'h't' 'k'c'a'b' '' 'd'n'A''''''''''''''''''''''''''t'a'h'''t''' 'd'e''''''''''' '''''''r'i'e'''''n'u'r' '''h't' 't'''''''''''''''''''''''''''''''''''' 't'''n's'i' 'e't'r'o'f' 'y'm''''''' 'I' '-' 'g'n'o'r'w' 's'a'w' 't'a'h'T' '''n'n'''n'd'l'u'o'c''m'u's's'a' 'I''''''''''''''''''''''''''''''''' 't'u'b' ','f'l'e's'y'm' 'f'o' 'y'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''n'i' 'o't' 'h'g'u'o'n'e' 'r'e'v'e'l'c' 'e'b'''''''''' 'e'm' 't'o'n' '' ','t'u'B''''''''t'h'g'i'm' 'I' '''''' '.'d'l'u'o'c' 'y'd'o''''d'b'o'n' 'd'e'm'u's's'a' 'I' ','t's'a'f' 's'T'D'R'C' 'e'k'a'm' 't'''n'd'i'd' 's'c'i'm'e'd'a'c'a' 'e'h't' 'e's'u'a'c'e'b' 'd'n'A' ''''' 'o'S' '''' '.'n'e'h't' 'k'c'a'b' ''h'g'i'h' 'y't't'e'r'p' 'k'n'i'h't'''''''i'l' 'I''''''''''''''''''''''''''''''''''''e'n'o' 't'n'e'v'n'i' 'o't' 'h'g'u'o'n'e' 't'r'a'm's' 't'''n's'a'w' 'I' '.'r'o'f'r'e'p' 'h'g'i'h' 'd'e'd'e'e'n'''''''a'w' 'y'l'l'a'e'r' ','''' 'o'g'a' 's'r'a'e'y' 'e's'o'h't' 'l'l'a' ','e'v'a'w' 'e'l'g'o'o'G''''''''a'e'r'a' 't's'e'r'e''''''''''''''e'v'a'W' 'n'o'''''''''''''''''''' 'a' 'd' ''''e'd'e'e'n' 'y'l'l'a'e'r' 'e'W'''''''''''''''''''''''''''' 's'T'D'R'C''''''''''D'R'c' 't's'i'l' 'd'e't'n'a''''a'w' 'y'l'l'a'e'r' 'I''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'r'o'f' 's'c'i't'n'a'm'e's' 'e'h't' 't'u'o' 'e'r'u'g'i'f' 'o't' '' 'h'g'u'o'n'e' 't'r'a'm's' 't'''n's'a'w' 'I't'''''''''''''''''''''Invent''''''T'D'R'C' 'a'''ing the semantics for peer-to-peer concurrent editing sounds terrifying a CRDT'''''''''''''''''''''''''''''''''''''''''' 'r'e'e'p'-'o't'-'r'''''''''''''''''g'n'i'y'f'i'r'r'e't' 's'd'n'u'o's''e''''r'e'p''''''''''''''''''''''''''''s'd'n'u'o's'''''''''''''''''''''''' 'd'r'a'h' 'y'l'l'a'e'r' 's'i' 'g'n'i't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'r'o'f' 's'c'i't'n'a'm'e's' 'e'h't''''''''''''''l'a' 'T'D'R'C' 'a' 'g'n'i't'n'e'v'n'I'n'n'.'e's'l'e' 'e'r'e'h'w'y'r'e'v'e' 'n'i' 'l'a'i'c'e'p's''''''i'r'e'h't' '' ''''''''''t'''''''''''n'o'i's's'e's'b'o' 'a' 't'a'e'r'g'were really clever (and maybe I'll just never be that smart)!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'l'b'i'r'r'e't' '''f'o' 'd''''''' 'f'n'i'k' 'd'n'a' ','n'i'a'm'o'd' 'e'n'o' 'n'i' 't'r'a'm's' 'e'r'''y'e'h'T' '.''''''''''''''''' 'd'e's's'e's'b'o' '-' 's'u' 'f'o' 't's'e'r' 'e'h't' 'e'k'i'l'''' 's'''' 'a' 't's'u'j' 'e'r'''y'e'h't''''t' 't'a'h't' 'e's'i'l'a'e'r' 'o't' 'g'n'i't'r'a't's' 'm'''I' 't'u'B' Now I know that''e'i'r'f' 'y'm'''''''''''''''''I'm kind of grateful for that silly academic paper now. I used to think th'''''''''''''''''''''''''''''''''''''''''t'''''''''''''''''' 't'a'h't' 'w'o'n'k' 'I' 'w'o'N' 'r'a'm's' 't'a'h't' 'e'b' 'r'e'v'e'n'''''''''e'b' 'r'e'v'n'e' 't's'u'j' 'l'l'''''''' 't'''''''''''''''!'''''!'.''')'h'g'u'o'n'e' 't'r'a'm's's'u'j'''''''''t'a'h't' 't'o'n' 'm'''I' 'e'b'y'a'm' 'd'n'a'(' '''at academics were really clever, but apparently being good at writing papers is a'''''''''''''''''''''''''''''''''''''''''''''' 'c'i'm'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'a' 's'i' 's'r'e'p'a'p' 'g'n'i't'i'r'w' 't'a' 'd'o'o'g' 'g'n'i'e'b' 'y'l't'''''''l'y'n'e'r'a'p'p'a''''''''''''''''''t'a'h't''''''''''''''''''''''''''''''''''''''''''''''e'h't' ''''''''''''''''''''' '-' 'e'm' 't'o'n' 'l'l'e'W'''''''''''''''''''o'n' 'm'''I'(' '' 's'a' 'e'v'i's's'e's'b'o' 'd'n'a' 'c'i'p'o'y'm' 's'a'''''''''''''''''''''.'s'u' 'f'o' 't's'e'r' 'e'h't' 'e'k'i'l' 't's'u'j' 'e'r'''y''''''''''''e'r'e'h't' 't'u'o' 's'n'r'u't' 't'i' 't'u'b' ','r'e'v'e'l'c' 'y'l'l'a'e'r' 'e'r'e'w' 's'c'i'm'e'd'a'c'a' 't'a'h't' 'k'n'i'h't' 'o't' 'd'e's'u' 'I' 'd'a'c'a' 'y'l'l'i's'''''''''''''''''''''''''''''''''''k'i'l' 't'''n'o'd' 'u'o'y' ','n'a'e'm' 'I' ''''''''''''I' '.'w'o'n' 'r'e'p'a'p' 't'a'h't' 'r'o'f' 'l'u'f'e't'a'r'g' 'f'o' 'd'n'i'k'''''''''g' 'y'l'l'a'e'r' 'm'''I'n'n'n'o'i's'u'''''''''''''''''''n'o'i't'u'i'l''''o'c'n'o'C' '#'n' ',''''o'c'e's''''e' '/' 's'n'o'i't'a'r'e'p'o' 'n'o'i'l'l'i'm' '1'1' '''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'h't'o'n'a' 'd'n'i'f' 'u'o'y' 'e'r'e'h't'''''''''''''''''''e'r'e'h't''''''''''''''''''''i'p' 'a' 'd'n'i'f' 'u'o'y' '*'n'e'h't'*' 'd'n'a' 'd'n'u'o'r'a' 'h'c'r'a'e's' ','e'r'e'h't' 'o'g' 'o't' 'e'v'a'h' 'u'o'y' 'n'e'h'T' '.'e's'u'o'h' 'r'u'o'y' 'n'i' 'n'o'i't'a'c'o'l' ''''''''''''''''a'c's' 'a'h't'i'w' 'r'e'p'a'p' 'f'o' 'e'c'e'i'p' 'a' 'g'n'i'd'a'e'r' 'd'n'a' ','r'e'p'a'p' 'f'o' 'e'c'e'i'p' 'a' 'g'n'i'd'a'e'r' 'n'e'e'w't'e'b' 'e'c'n'e'r'e'f'f'i'd' 'e'h't' 's't'I'n''n''d'n'o'c'e's' '5'.'0' 's'v' 's'd'n'o'c'e's' '0'0'1' 'g'n'i'w'o'h's' 's'i'v' 'e'v'i't'c'a'r'e't'n'I' '>'n'n''l'c' ''''''''''''''''!'s'y'a'd'knew'''''w'o'n'k'' 'e's'e'h't' 't's'a'f' 'y'l'l'a'e'r' 's'i' '8'V' ''''''''V' ''''''''''''''''''''''''''''''''''''''''''''o's'l'a' 's'''' 't'I' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'h't' 'd'n'a' 's'n'o'i't'a'c'o'l'l'a' 'l'o'r't'n'o'c' 'o't' 'd'e'e'n' 'e'w' 's'l'o'o't' 'e'h't' 's'u' 's'e'v'i'g' 't'a'h't' 'd'n'a'.'*'r'e't's'a'f'*' 't's'u'j' 't'''n's'i' 't's'u'R' ''''y'c''''''''''''''''''''''''''''''''''''''' 's'm'h't'i'r'o'g'l'a' 'r'u'o' '''''s'j'y' 'g'n'i'k'a'm' 'p'e'e'k'''''''''''''''''''''''''''''''''t'o'n' '''''''''''''' 'o'g' 't'''n''''.'o'w' 't'i'''''R''''''''n'i'v'e'''''w'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'e'r'u't'c'u'r't's' 't'n'e'r'e'h'o'c' 'e'h'c'a'c' 'd'n'a''''c' 'n'o'i't'a't'n'e'm'g'a'r'f' 'y'r'o'm'e'm' 't'u'o'b'a' 'w'e'n'k' 'I' ''o'n'k' ''K'''B'''''''''.'t's'u'r' 'o't' 't'i' 't'r'o'p' 't's'u'j' 'u'o'y' 'f''''''' 'n'i' '''''''''''''''''''''''''''''!'r'e't's'a'f' 't'o'l' 'a' 't'o'n' 't'u'b' '.'.'.'r'e't's'a'f' 'e'l't't'i'l' 'a' 'e'b'y'a'M''' ''''But I knew something he didn't:''''''''''''''''''''''''''''''''''''''''''''''''''''''l'''''''''e'h't' 'y'a'w' 'o'r't'n'o'c' 'n'a'c' 'e'w' 'f'I'''''''''''''''''''' 'o't' 't's'u'r' 'e's'u' 'n'a'c' 'e'W''''U'''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'p'u'k'o'o'l' 'y'r'o'm'e'm' 'd'n'a' 'y'r'o'm'e'm' 's'e'z'i'n'a'g'r'o' 'r'e't'u'p'm'o'c' 'e'h't' 'y'a'w' 'e'h'T' ':'t'''n'd'i''''d'd' 'e'h' 'g'n'i'h't'e'm'o's''''''t'u'o'b'a' 'w'e'n'k' 'I' 't'u'B'n'n'' '''''''''''''''''''''''''t'''n''''''''''''''''e'l''''l''''e'b'i's's'o'p''''''''''''''''''''''''''''.'e'l'b'i's's'o'p'm'i' 'y'l'l'a'c'i's'a'b' 'e'b' 'o't' 'g'n'i'o'g' 's'a'w' 'r'e't's'a'f' 'n'e'v'e' 'g'n'i'o'g''''''''''''''''''' 'h'c'u'm' 't'''n's'a'w' 'e'r'e'h't'''''''''''''''''i' 'd'e't'b'u'o'd' 'e'h'''''''But I've done one last thing. I don't know if its a good idea, but I did it anyway because it sounded clever and I couldn't help myself. In this implementation, I split out the document's text content into a separate data structure. The reason is that when you're actually doing collaborative editing, you probably want all the characters in your document to be stored in an actual array, or in VS Code's editor or something. I don't think it makes sense to duplicate the document's content in my library too.nn'n'''''''''''''''''''''''''''''''''''''''''e'h' ','d'e'z'i'm'i't'p'o' 'o's' 'y'd'a'e'r'l'a' 's'a'w' 's'j'y' 'd'i'a's' 'e'H'''''''H'E' '.'e'm' 'e'v'e'i'l'e'b' 't'''n'd'i'd' 'e'h' ','s'j'y' 'n'a'h't' 'n'e'w' 't'a'h't' '' 'I'''''''''''''''''''''''''''''''''''''''''''r'e't's'a'f' 'o'g' 'd'l'u'o'w' 'n'o'i't'a't'n'e'm'e'l'p'm'i'''''''''''''''n'o'i't'a't'n'm'e'e'l'p'm'i' 't's'u'r' 'd'o'o'g' 'a'hought '''' 'e'w' 'I could'''''''''''''''''''''''''''''''''''''''''' 'd'l'u'o'c' 'I' 't'h'g'u'o'h't' 'I''''h' 't'a'h't' 'n'i'v'e'K' 'd'l'o't' 'I' 'n'e'h'W''''''' 'I''n'n'suspect we can't make javascript run much faster in this test'''''''''''''''''''''''''''''''''''e'b' 'n'a'c' 'e'w' 'e'b'y'a'm' 't's'u'j' '.'.'e'b'y'a'm' 't'u'B' '.''Can we still '' 'a'go fast''''''''''''''''''''n'a'c' '''e'w' 'o's''''''''''''''d'e'e'n' 'e'w' 'd'n'a' ','e'g'a'u'g'n'a'l' 'er? Yj''If we want to continue to improve performance, we need to go lower level. We need control over the memory layout.'n's is very well optimized alread''Y''''y, and I suspect we ca'''''''s'i' 's'i'h'T'n't make javascript run much faster in this test.'' If we want to continue to improve performance, we need''''''''''''''''''''''''''''d'e'e'n' 'e'W' '''''''W' '.'l'e'v'e'l' 'r'e'w'o'l' 'o'g' 'o't' more control over the memory layou'.'''t 'F'- which we can do in' ''' ''a systems language like Rust.''Can we still go faster?''C''''''c''' 't'u'B''C'''''''''''''''''''''?'r'e't's'a'f'''''''' 'o'g' 'l'l'i't's' 'e'w'''n'n''' '''''''''''''''''''''''s'd'a'e'r' 'y'r'o'm'e'm' 'n'i'a'm' 'e'r'a' 'n'a'c' '''''''''' '?'w'o'l's' 'w'o'H''t'u'B'n''n'''''''''''W''''''''''''d'l'u'''o'w' ''''''''''''''''''t'''''''n'a'm'u'h' 'u'o'b'a' '-' ''''''''''''''''''''''y'r'e'v'e'' 'r'e't'u'p'''''l'l'i''''l'w' ''m'o'''''''' 't's'o'm''''''''''''''''''''''''' 'f'o' 'd'a'e't's'n'i' 'e'n'i'g'a'm'I' '!'''''''''''''''''''''''''''''''''d''o 'o'''th''e ''do''''''''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''' Arranging'''''' 'n'I' '.'t'p'i'r'c's'a'v'a'j' 's'n'u'r' 't'i' 'n'e'h'w' 'r'e't'u'p'm'o'c' 'e'h't' 'o't'''''''o'd'''''''' 'e'h''''o't' 'o'd' 'o'd' 'e'w' 't'''a'h'w' 's'i' 's'i'h'T''''l'a'c''''''''''p'm'o' 'e'h'T' '.'''''''r'e't's'a'f' '''o'g' 'n'a'c' 'e'w' 't'u'B'''''''e'W'''''''e'w' 't'u'B'n'a'n'''e'u'q'e's' '''e'r'''''''''''f''' 't'i' 'g'n'i'k'a'M'''''''''''''''''''''''t''Yjs is very well optimized already,'''''''''''''''''''''''''''e'n''k''n'a'm' 't''''n'u'r' ''''n'''''''''''''t''n## Making it faster than Javascript' '''n''''''n'n'''''I's'e't' 's'i'h't' 'n'i'a'c' 'e'w' '''j''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t's'u'R' 'e'k'i'l' 'e'g'a'u'g'n'a'l'''''''' 's'm'e't's'y'''''''t's's''''''r'e'w'o'l' 'a' 'n'i' 'o'd' 'y'l'n'o' 'n'a'c' 'e'w' 'h'c'i'h'w' '-' 't'u'o'y'a'l' 'y'r'o'm'e'm' 'e'h't' 'r''''''''''y'r'o'm'e'm' ''''''''''''' 'y'''','y'a'w' 'e'h't' 'y'B'''''''''''''''''''''''a''' 'e's'u'a'c'''''''''''''''''''' 'l'l'a' 's't'I' '.''''''''''''''''''''''''''''''s'i'h't' 'e'k'i'l' 'a't'a'd' 'e'g'n'a'''''''''''' 'e'n'o' 'y'b' 'e'n'o''''''''''''''m'e't'i' 'h'c'a'e' 'r'o'f' ''''''''''' 'a't'a'd' 'a'r't'x'e'''r'''r'a''''''''''''''''''''s't'c'e'j'''' 'l'l'b'o' 'e's'o'h't''''''''d'i''''n'a' ',''''''I' '.''' 'f'o' 'l'l'a''''''''''y'r'o'm'e'm' 'n'i' ''' '''' '-' 'd'e't'n'e'm'''g'''''''''l''''''''e'w' 'f'I'l'e'w' 's'a' 'a'r'f''e'b''' 'e'l'b'i'r'r'e't' 's't'I''''''''''''' 's't'''','''''I'n'i' ''e'v'o' '''''''t'u'o'b'a' 'l'' '-'''''''-' ''''o''''''''''''''''''' ','n'o's'i''''''''''''s'n'o'r'a''''s'p'm'o'c' 'n'I'''''''''''''''''''n'n'''''''' ','d'e'e'p's' 's'i'h't''''''''''''''''''''''''''g'n'i't'i'.'B''''''''''''''''''r'e't'u'p'm'o'c' 'e'h't' 's'e'k'a't' '''''''''''' 'g'n'i'p'p'o'h's' '' 't'''a' ''''''''''''''''''''''''''''''''''''s'e'm'a'n' 't'n'u'h' ''''''''''''''''''n'e'''''''e'n'd'd'i'h' 'a' 'h''''''''''''' 'r'e''''''''''''''''''''r''' ','y'a's' 'o't' '''''''''''''''''''''r'e''''''''''''''''''''.')'e'm'i't' 'r'e't'u'p'm'o'c' 'n'i'(' ''''''''''(' 't'u'p'm''''''''''o't' 't'n'a'w' 'I'o'c' 'e'h''.'A''''''t''' 's'e'k'a't' ''s's'e'l'd'e'e'N' '.'''' '''''''''nnReading the whole list would take ages.'''''' '''v'e't'a'h' (With linked lists'''''''''''''''''''''''d'a'e'r' '''''u'o'y' 'y'r'o'm'e'm' 'a' 'r'u'c'n'i' 'u'o'y' we do that scavenger hunt each time we move between items!)''''w' 'r'o't'i'w' ','''r'''''e'''g'n'e'v''''''''''''''''''''''''''s't'c'e'j'b'o' 'a'r't'x'e'''''''''''''''''''''''''n'e't'f'o' 's'i' 't'''''''''''' 's'i' 's'i'h'T''l'u's'e'r' 'e'h't' '''o's' 'e's'o'h't' 'l'l'A'a'c's' 'e'h''''''''''''''''''' 's't''''''''''''''''y'l''''''''''''''''''''''''''''''''''','o'g' '*'y'l'l'a'e'r'*' 'n'a'c' 'e'':'w' ':''t'''s'a'f''' 'w'o'h' 'e'e's' 'o'T''b'm'e's's'A'b'e'W't'a'h't' ''s'i'l' 'd'e'k'n'i'l' ''3'h'''''''2''''''''''''''''''''''','b''''''s'j'y' 's'a' 'e'm'a's' 'e'h't' 's'k'r'''''''''''y'l'l'a'n'r'e't'n'i' ''o'w''''''''''''''''''''''''''''''''''''''''''''' 's'u'o'i'v'e'r'p' 'e'''''''''''''n'e'm'e'l'p'm'i' ''h't'''''''''t'o'l' 'a' 't'F''a'h't' 'o'd' 'e'w' 'd'n'a' ','s''''''''''''''''''''d'r'i'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't's'a'f' 't'o'n' ','r'e''''''' ','w'o'' '''l'''s' 's'g'n'i'''''''' 'n'e'v'''''''''''''''''''''''''''''''''''''.'m'e't'i' 'y'n'a'''''''''''''''e'r'''''''''''s'e'''t'a'd'p'U''''''''''n'i'a'g'a' ''''''''''''''''e'n'o'd' 'e'r'''e'w' 'd'n'a' 'o's'' '.''o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(' 'D'I' 'r'i'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''g'n'i's'u' 't'o'n' 'm'''I'o'o't' ','t's'a'''''''''''''''''''t'''''''''''''''''''''' '''?'p'l'e'h' 'd'l'u'o'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l't'h'g'i't' 'n'i' 'g'n'i'h't'y''''''''' 'f'o' 'n''''''''''''''''''''''M'A'R' 'n'i' 't'n'e'c'a'j'd'a'''''''d'e'k'c'a'p' 'l'l'a' ','''' '''u'r' 'a''r'e'v'e' 'k''''''''''''''''s'y'a'w'l'a' 's'i' 'y'p'c'm'e'M''''''' 's't'i'''''''''''''''''''''' 'e'h't'''''''''''''''''''''''''''''p'u'k'o'o'l' 'y'r'o'm'e'm' 'n'i'a'm' 'a' 'f''''''''''''''''''''''''''o't' 'e'd'o''''''''''''''''''''''''''''''t'p'i'r'c's'a'v'a'j' 'm'o'r'f' 't'i' 'e'v'i'r'd' 'd'n'a' ''''''''''''''''''''''''''''''''''''''''''''''''t'i' 'l'l'a'c' 'd'n'a' 'e'd'o'c' 'e'v'i't'a'n' 'o't' 't'i''*' 'e'l':''i'p'm'o':'''''.'''':'''*''''c' 'e'w' 'f'i' 'd'n'A'c' 's'i'h't' 'e'l'i'p'm'o'c' 'e'w' 'f'I''''''''''''' 'm'o'r'f' ''o't''n'e'v'i'r'D'''3'o' ''''''''''2''''''''''''''''''''''''.'t'n'u'h' ''''''''''''''''''''''''''''''''''''''''n'i' 'e'c'a'r't' 'e'l'o'h'w' 'e'h't' 's'''' 's'e'c'o'r'p' 'w'o'n' 'n'a'c' 'e'w'r'e'g'n'e'v'a'c's' 'a' 't'o'N' '.'s't'a'e'b' 't''''b'r'a'e'h' 'w'e'f' 'a' 's't'i' '-' '''''c'a'p' 'n'a'c' 'e'w' 'o's' ','t'u'o'y''''t'a'l' 'y'r'o'm'e'm' 'e'h't' 'r'e'v'o' 'l'o'r't'n'o'c' 'l'a't'o't' 's'u'''''''''''''h'g'u'o'r'h't''t'''''''''''''x'3' '''''''''''' ','''''''''''e'v'i't''''i'a'n' ''' '''''' '''t'u'B'n'y'l'b'm'e's's'a'b'e'w' 'm'o'r'f' 'n'e'v'E''''''''''''''''''''''''''''''''''''''''''''d'e'd'n'u'o's' '''''''''l'a'm'r'o'n' 'g'n'i't'i'd'e''''''''''''''''''''t'u''''''''''''s'''t'n'e'm'u'''c'o'd' 'o' 't'i'l'p's'''''''''''''''''''''.'g'n'i'r't's' 't'p'i'r'c's'a'v'a'j' 'w'a'r' 'a' 'g'n'i's'u' 'n'a'h't' 'r'e't's'a'f' 's'i' 'e'd'o'c' 's'i'h'T''''''''''i'h'T'n''n'' 's'e'v'i'g' '' lets us ''''-'-'-'n''n'p'''''''''''' 'e'n'o'd' '''e'v'''I'ack all the items tightly in memory''''''''''''' 's'd'i'o'v''n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h'm''''t'i'w' ',''''''M' ''''''''''''g'n'i'''''m''' 'o'S''''''.'h'c'a'o'r'p'p'a' '''s't'c'u'r't's' 'f'o' 'y'a'r'r'a''' 'n'a'h't' 'r'e'h't'a'r' '''s'y'a'r'r'a' 'f'o' 't'c'u'r't's''' 'a' 's't'I' '''' ''''''''''''''''''''''''''''f''''''''''''''''''''''''' ','n'o'i't'''''t'x'e't' ''a't'n'e'm'e'l'p'''m'i' 's'i'h't' 'n''''''''''''''''''''t'w''''a'h't' 's'i' 'n'o's'a'e'r''''''' '''''l''' 'o'S'm'''I' 'e'h'T' 'I'l'e's'y'm' 'p'l'e'h' 't'''n'd'l'u'o'c' 'I' 'd'n'a' ''a' '''' 't'i' 'e'''''''''''''''''''w' 't'i'e' 'b'y'a'M'e'''''' 't's'u'j'y' '''''''''''''''''''''''''''''''''''''|' '' ''''''''''''''''''''''''''''e'| -------------------------- '---------''''''|'-'-'-'-'-'''-'' | --------''' | ---------- | --------- '''''' ''''''''''''''|' ' ' ' ' 'e'e'r't'-'e'v'i'a'N''''T'''| ------''''''''''''''''''''''''''''|' ' ' ' ' ' ' ' ' ' 'y'a'r'r'A'''-'-'-'-'-'-'-'-' '|' ''''-'-'-''''''''''''''''|' '*'' ' ' 't's''''''*'i'l' 'd'e'k'n'i'L'''--''r'u't'c'u'r't's' 'a't'a'D''*''''''''''''*'''''''''''|'| Rust (Called from JS via WASM) | 0.20s | '''''''''''''''''|'| Rust (native) | 0.065s | 2.3 MB | B-Tre' |'e'' ' ' ' ' ' ' ' ' 'e'e'r'T'-'B' '??? |'' ' ' ' ' ' ' ' ' ')'' |'e'n' ''o'n'(''' '|' ''''''e'e'r'T'-'B''e'g''''n'n''n'n'n''a'u'g''''S'J'''''''''''''t'p'i'r'c's'a'v'a'J' '''''''e'e'r'T'-'B'n'a''''''''''g'n'A'''''''''''''|' ' ' ' '''S'J' '' ' ' ' ''''''''' '-'-'-'-'-'-'-'-'-' 'L' '|' 's'c'i't'n'a'm'e'''''''''''S'J' '|' ' ' ' ' ' ' ''S' 't'i's'' 'k'n'i''''|' ''''A'G'R'''''''M'A' 'h't' 't'''n'o'd' ''''.'t'i' ''t'o'n' 't's'a'e'''''''''''A'T'A'Y' '/' 'A'G'R' ''''''''''A'G'R''l' 't'''y'M'''a'''''m'''''''''A'T'A'Y' ''''''''''''''''' 't'i' 'e'k'a'm'''''o'o't''<'''''''''''''''')'e'n'o'n'(' ''''''''''n'a'p''''''n'''a''','>'''p's' 's' '''''''''''A'T'A'Y' ''','''''''''']'.'.'.' ','''m'e't'i' 'm'e't'i' ','m'e''''''A'T'A'Y' 't'i'[''''{' 'f'o' '''e'e'r't'B'''''''i'[''' ' 't'h'g''''''A'T'A'Y' 'i'm' 'h'c'i'h'w' '-' ''f' 's'i'h't' 'e'k'a'm' 'o't' 'x'e'd'n'i' 'n'a' 's'a'h' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 't's'u'r' 'y'M' ''h't' 'y'b' 's'm'e't'i' 'd'n'i'f' 'o't' 'd'e'e'n' 'o's'l'a' 'e'w' 's't'i'd'e' 'e't'o'm'e'r' 'g'n'i'g'r'e'm'''''''''''''''''''''''''''''''''.'T'D'R'C' 'a' 't'n'e'm'e'l'p'm'i' 'u'o'y' 'w'o'h' 's't'a'h'T' '.'''' 'n'e'h'w' 't'u'b' ','e'r'e'h' 'y'a'l'p' 'o't'n'i' 'e'''''''e'p'm'o'c' 't'''n's'e'o'd' 't'I''''''''e'w' 'n'e'h'W'n''n'm' 'y'n'a' 't'p'i'r'c's'a'v'a'j' 'e's'u' 'o't' 'e'v'a'h' 't'''n'o'd' 'e'w' 'e'h't' 'e'k'a'm' 'n'a'c''''''s'e'k'a'm' 'h'c'i'h'w' ',''' '''''''''' 'a' 's't'I' '.'''''''''''''''''''''''''''''''''' 'e'h't' 'g'n'i'k'a'm' 'e'r'''e'w' 's'a' 'n'e'v'e' ','e's'r'o'w' 'n'o'''i't'a't'n'e'm'g'a'r'f' 's'e'k'a'm' 't'a'h't' 'd'n'A''''''''''''''' 't'p'i'r'c's'a'v'a'j' 'n'I''''''e's'e'h'T' '.''')'s'y'a'r''''a'r'a' 'e'z'i's' 'd'e'x'i'f' 'e'k'i'l'(' ''''''''''''''''''''''p'u' 'd'n'e' '''''''''n'e'l'l'i'w' 'h'c'i'h'w' ','''w' '''''''''''''''''''''''s'''e'r'e'h't' 'o'S' '.''''''''''e'w' 'o's' '''''' ','s't'c'e'j'b'o' 'f'o' 't'o'l' 'a' 'd'e'e'n' ''m'e't'i' 'n'e'e'w't'e'b''t'i'W''''F't' '''n'i' ''''''''''i'l' 'd'e'k'n'i'l'm'e't'i' 'd'n''''''''''t' 't'A''r't'n'o'c' 'e'r'o'm'''' 't'c''''''t'''n'a'c'e'p''''''''''''''''''''''''o'd' 'y'l'n'o' 'n'a'c' 'e'w' 'h'c'i'h'w' '-''''w' '''s'u's'''''b'u'o'd' 'I' 'd'n'a' '''p'i'r'c's'a'v'a'J' 'n'a'h't' 'r'e't's'a'F'''''''''''''t'p'i'r'c's'a'v'a'J''Ev'''''d'i''''n'a' ','''erything is faster in Rust, with B-Trees''''s't'I''Everything is faster in Rust, with B-Trees''''''''''' 'g'n'i'v'a'e'L''a' 's't'n'''''''a' 'e'''''''''''''''''''''''''''''' ','e'c'a'r't' 'g'n'i't'i'd'e' 's'''n'i't'r'a'M' 'n'i''''''''''''''''''''''''' ','e'c'a'r't' 'g'n'i't'i'd'e' 's'i'h't' 'r'o'f''' 't'''r'''a'p' 'd'n'a' 's'D'I''''''''''s'e'i'r't'n'e'''''D'i' 'e'h't''s'm'e't'i' 'f'''o' 's'n'u'r' 'e's'p'a'l'l'o'c' 'y'l'n'o' 'n'a'c' 'e'W'''''l'l'o'C' '.'' 'e'w' 'e'm'i't' 'y'r'e'v'E' 'e'r'e'h' '''Well, '''''n'i' ''''''w''' 't'u'B''''''''''t'u'g''''u''''''there'''''''th'''''''h't' 'n'i'e't'i' 'f'o' 's'd'n'a's'u'o'h't' 'g'n'i'v'o'm' 'e'r'''e'w' 'n'e'h'w' 'w'o'l's' 'y'l'b'a'b'o'r'p' 'l'l'i't's' 's't'i''r'e't'f'a'''''''' ','l'l'e'W''''''8'V'''''''8'v' ''''' 'm''''''.'W''''e'r'e'h'''I'(' ''''''''''''''''T' '>'n'n''''''*''' 'ing immutablejs. ' ''''''''''''''s't'n'e'm'm'o'c'''''''o' 's't'o'l' 'h't'i'w' ',''' '''''o't''''s' ','''''''''''''''''''''''''''''''''''' 's'i'h't'''''''''''''t'''n'e'r'a' 's'''''''''''''''''''''''''g'n'i'h't' 'e'n'o' 't's'u'j' 'r'e''''''''''j' 'r'v'e'n' 's'i' 'e'c'n'e'r'e'f'f'i'd' 'e'c'n'a'm'r'o'f'r'e'p' 'e'h'T' '.'''''''''''''''s't'i' 'o's' ','m'h't'i'r'o'g'l'a' 'e'h't''''a' 's'''e'r'e'H'' 't'I'l'a'i't'n'e's's'E'''''''''''''''a' 't's'u'j' '''s'i' 's'i'h'T't'i' '''''''''i''' ','''''''''''''''''''''''''.'s'i'h't' 'e'k'i'l' 's'T'D'R'C'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'l'p'''s''i't'l'u'm' 'f'o' 's'c'i't'n'a'm'e's' 'e'h't' 't'n'e'm'e'l'p'm'i' 'u'o'y' 's't'e'l' 'y'a'w' 's'i'h't' 't'i' 'g'n'i'o'D' '.'2'n'''''M' '.''''u'o'y''''''''o't' '''''d'''''e'e'n' '' ''s'''''''''''''s''3'''''''''''''''''''''''''''''''''''''''''''''e'c''''r'a' 'e'r'e'h't' 'n'e'h'w' 'n'w'o'''''''''''''s't'a'h't' 't'u'B''''''-' 'u' '.''d' 's'w'o'l's' 'y'l'n'o''''''''''''''t's'a'f' 'r''I'''e'p'u's' ''''s's'i' 'm'.''''h't'i'r'o'g'''e'''*''h't''l'a' ''''''''*'e'h'T' ''''''y' '''s'i' ''d'n'a' ','k'r'o'w''''''''''''''''''''''''''''''''''''''''9'''[''F'''(''''''''''https://github.com/josephg/reference-crdts/blob/main/reference_test.t''')'s'('''''''''''''y'''''''t'''''i''' 'e'W'n'a'g'e'l'e''l'l'a'e'r'' Genius!'''' Genius!'''.'''' 'o'''s'l'a'''''''''''''t'u'o'b'a' 's't'''''''''''''a' 's'T'I''d'n'i'k' ':'''']'''''''')'M'T'(' 'd'e'i'f'i'''''''i'f'r'e'v' ''''c'n'y's' 'd'n'a' 's'j'y''')'.''' '''d'n'a' ','e'g'r'e'm'o't'u'a' 'l'a'u't'c'a' 'o't' ' 'l'l'a' 's''''R' 'f'o' 's't'o'l' ''h'u' 'd'n'A' ','''e question is'''''T'D'R'C' ', how do you insert a'' new item into a list like this' ?'.''''.''''''''''''''''the'''i'''''''''''''''''''s''' ','u'o'y' 'd'n'i'M'''''''''''''' ''answer is'''y'b' 't'r'e's'n''4'''i' 'e''''i'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e't's'e't' 'g'n'i'e'b' 's'e's'a'b'e'd'o'c' 't'n'e'r'e'f'f'i'd' 'y'l'e't'e'l'p'm'o'c' 'e'r'a' 'e's'e'h'T''''''' 'e's'e'h'T'''''' 's'i'h'T' '''''''' '.'y'l't'h'g'i'l's' ''''.'s'e'g'n'a'h'c' 's'm'e't'i' 't'r'e's'n'i' 'e'w' 'y'a'w' 'e'h't''You can't tell from looking at this method, but insertionsAfter' ','e'r'u''5'''t'c'u'r't's' 's'i'h't' 'h't'i'W''''''''''e'r'e'h't' 't'e'g' 'l'l'''''''''u'b' ','''e'''''m' 'n'e'e'b' 't'''n's'a'h' 't'i' 't'u'b' ','m'h't'i'r'o'g'l'a' 'e'h't' 'r'o'f' '''''''''d'n'e'k'c'a'b''' 't's'u'r' 'a' 'n'o' 'g'n'i'k'r'o'w' 's'i' 'm'a'e't' 'e'g'r'e'm'o't'u'a' 'e'h'T' ''''''''''''''''''''''''''''''''''''''!'s'r'e'l'i'o'p'S' '.'e't'a'i'r'p'o'r'p'p'a' 's't'a'h't' 'n'e'h'w' '2'5'.'1' 'c't's'u'r' 'd'n'a'ejs 16.1 ' 'h't'i'w' ',''''''''''''''''''''''''''''''''''.'n'o'i't'a't's'k'r'o'w' 'x'0'0'8'5' 'n'e'z'y'r' 'k'n'o'h'c' 'y'k'n'o'h'c'''''''c'h' 'y'm' 'n'o' '1'.'6'1' 's'j''''s'e'd'o'N' 'g'n'i's'u' 'e'n'o'd' 'e'r'a' 'e'r'e'h' 's'k'r'a'm'h'c'n'e'b' 'e'h't' 'l'l'A' '.')'s'(']'e'r'e'h' '''e't'i'u's' 'g'n'i'k'r'a'm'h'c'n'e'b' 'e'v'i's'n'e't'x'e' 'e'r'o'm'''''''r'e't't'e'b' 'h'c'u'm' 'a' 's'a'h' ')'r'o'h't'u'a' 's'j'Y' 'e'h't'(' 's'n'h'a'J' 'n'i'v'e'K' ' '''''''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'm'e't'i' 'f'o' 'e'e'r't' 'a' 'g'n'i'd'l'i'u'b' 'y'b' 's'k'r'o'w'''''''''''s't'n'e'm'e'l'p'm'i' 'y'r'a'r'b'i'l' 'e'g'r'e'm'o't'u'a' 'e'h'T' '.'r'e'v'e't'a'''''''a't'h'W''''''''''''''''''''''''''''''''''''''''s't'n'e'm'e'l'p'm'i' 'y'r'a'r'b'i'l' 'e'g'r'e'm'o't'u'a' 'e'h't' ','s'e'Y''''''''k'n'i'h't' 'I' '''j'''Y'('n''n'''''''''''''''''''''''''''''''''''''''''' 's't'i' 't'u'b' ','h'c'a'o'r'p'p'a' 't'n'e'r'e'f'f'i'd' 'a' 's'a'h' 's'j'Y' '.'''' ','e'g'n'a'h'c' 'a' 'e'k'a'm' 'u'o'y' 'n'e'h'W''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'e'e's' 'r'e'v'e' 'e'v'''u'o'y' 'r'e'b'm'u'n' 'e'c'n'e'u'q'e's' 't's'e'g'g'i'b' 'e'h't' 'n'a'h't' 'r'e'g'g'i'b' '1'''i'b' 's'i' 'r'e'b'm'u'n' 'e'c'n'e'u'q'e's' 'e'h'T' '.'t' 'g'n'i't'r'o's' ''o'g' 'e'n'o' 'h'c'i'h'w' ','n'o' 'g'n'a'H' 'js''''''''''''y'l'l'a'u't'c'a' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','y'a'd'o't' 'n'o'i't'a't'n'e'm'e'l''''''' ','h'g''''''''''y'l'l'a'u't'c'a' 'r'a'p'm'i' ''''''''' 'e's'u'a'c'e'b' ''''T'D'R'C' 'e'd'a'r'g' 'n'o'i't'c'u'd'o'r'p' 'a' 't'n'a'w' 'u'o'y' 'f'I' '.'t'i' 'g'n'i's'u' 'd'n'e'm''''''''''d'n'e'm'o'c'e'r' 't'''n'o'd' 'I''''I'n'n'language I w'['ant to progra'''https://martin.kleppmann.com/2020/07/06/crdt-hard-parts-hydra.htm')'l'(']'m something I already understand, in order to get a sense of things.'''''''''''''p'u' 'd'e'''g'n'i''''''d'n'e' '''''' '''''''''''','''''''o't'''n',''''''''''''''t'''''''''''''''''''''t't''''u'b' '-' 'm'h'''t'''''''''''e's'o'l'c' 'n'e'v'e' ''i'r'o'g'l'a'''''''''''''''''''''''''''''0'0'0' ''''k''''''''i'r'g'l'a' ''''''''''''''''''''''''''''''''''''''' ','s'k'' function in''''''s'n''''''''''''s'n'o'i't'a'r'e't'i''''''''''''s'n'o'''!''i't'a'r'e't'n'i' 'u'r'''''s'e'o'd'''''''''''i' 's''''''''''e'e'r't' 'a' 's't'I''''''''''''''''''''''''''!'g'w'a'd' ','e'e'r't' 'a' 'e'k'i'l' 's'd'n'u'o'S''n'u'''''''u'r''''''''''''e'd'o'c' 'c'i''''''''''c''''''y'z'a'r'c'i'a'r't' 'n'o'i't'a't'''''''''''s'a'w' 'e'r'e'h't' 'n'e'm'e'''''''m'e'l'p'm'''''''''''''s'i' 's'i'h't' 't'u'B''''''a' 'h''''''''''''''''n'e'r'e'h' 'm'a'r'g'a'i'D' '>'n''a'H'''''''''''''''''''-' '''''d'r'!''''a'w'k'w'a''''w' 'a'h'a'H''''''''''''''''''n'e'e'b' 'e'v'''!'s'p'o'O' '''i' '''''''''''''''''''''''''s'm'h't'i'r'o'''''''''''' 't'n'a'e'm' 't'a'h't'g'l'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''g'n'i'n'n'u'R''g'n'o'r'w' 'r'e'p'u'S' ''''''''''''''''''''''.'t'n'e'i'c'i'f'f'e'''''''''''' 'y'l'l'a'u't'c'''''''''''''''''''''1'9'2''''''''''''''''''''''''''''''''''''''''https://martin.kleppmann.com/'')'(']'r'e'h'c'r'a'e's'e'r'''''r'e'v'o' '' 'r'a'l'u'p'o'p' 'a''7''''6'2'''''''6''''5'''2''''[' 'y'b' 'n'e't't'i'r'w' ','''''''''''*''''''*'o's'l'a' ''''''''''''''a''''''''''''''''''' '''''''''''''''''''Y'(' ''''n'e'h'W''x'0'0'0'0'1' '-' 'n'a'c'''''''.'''e'd'o'c' 'e'''''' '''''u'''''''' 'r'i'e'h''''''''''g'n'i''''''''''''''''''''''''''''''''''' '''y'b' 'e'd'a'm' 'e'b' 'n'a'c' ')'t'n'e'm'u'c'o'd' 't'x'e't''''d' 'r'o'(' ''t'l'u's'e'r' ''t''o'y' 'w'o'h''''c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'e'r't' 'a' 's'a' 'a't'a'd' 'e'h't' 'l'l'a''''''' '''''a''''' '''''e'''''r'o't's' 'o't' 's'i' 'h'c'i'h'w' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''w''' 'd'n'A''''''''''''''''''''''''''''''''''''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''''''''s'a''''''''''''''''''''''''''''''''''e's'u' 'o't' 'g'n'i'o'g' '''k'r'a'm'h'c'n'e'b' 'e'l'p'm'i's' 'a' 'r'o'f''''t' 'o'S'''''o'T' '''''''''''''''m'e'h't''' 'f'''''''''f'l'e's'm''''''''''e'r'e'h'w' ''i'h' 'o' 'l'l'a''''''''''''''y'n'a' 't'''n'e'r'a' ''' '''''.''''''''''''''''''''''m'o'r'f' 's't'i'.'B'''''''d'e' 's'a'h'''''-'u'''''''''''''''''''''''''y'l'l'a'u't'c'a' ''''''''''''''''''''''''''''''''''''e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'o'd' 'l'l'''t'''''''t'i'''''''''' 's't'i''''.'h'e''''''''''''h'g'u'o'n'e' 'd'o'o'g''''''''''''''''''''''''''''''''u'o' ','f'f'u't's' 'd'o'o'g' 'e'h't' 't'n'a'w' 'u'o'Y' '.'h'e' 't'u'b' ','l'a'e'd'i' 't'o'N' '.'*'y'l'l'a'c'o'l'*' 'e'c'a'r't' 's'i'h't' 'g'n'i'y'l'p'p'a' 'm'o'r'f' 'e'm'i't' 'e'h't' 'g'n'i't'n'u'o'c' 't's'u'j' 'm'''I' 'd'n'A' ''''''''''''''''''''.''''''''''''''' 't'r'''''''''''''''''''.'e'm'i't' 'e'm'a's' 'e'h't' 't'a' '''a't's' 'd'n'a' 'e'c'a'l'p' 'e'm'a's' 'e'h't' 'y'l't'c'a'x'e' 't'''''''t' 'a' 's'r'o's'r'u'c' 'r'i'e'h't' 't'u'p''' 'r'e'v'e'n' 't's'o'm'l'a' '' '''''''a'j' ''''''''p'p'a' 'c'i'''''''''e'r'e'h' 's'm'h't'i''''h'r'o'''''''i'r'g'l'a' 't'n'e'r'e'f'f'i'd' 'f'o' 't'o'l' 'a' 'h'g'u'o'r'h't' 'o'g' 'o't' 'g'n'i'o'g' 'e'r'''e'W''''''''''''''''o'p' 's'i'h't' 'h'g'u'o'r'h'T'n''''''''''''''')'?'e'c'a'l'p' 'e'h't' 'r'e'v''''''''''t' 'f'o' 'l'l'a' 'g'n'i'o'd' 's'y'a'r'r'A'8't'n'i'U' 'e's'o'h't' 'l'l'a' 'e'r'a' 't'a'h'W'(' ''''''''''''h'W'(' '''''''''''''''''''''''''''''''''''''''''''''''''''''y'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's't'I'''''''''''''''''''''' 'd''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e't'c'a'r'a'h'c''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''- Insert 'a' id `(seph, 0)` after `ROOT`'- Insert 'b' id `(seph, 1)` after `(seph, 0)`n'n''''''''c''''''b''''''2'''''''''''1'''`'1''''''''''''''''''''''''''''!'e'e'r't' 'a' 's'a'''''''' 'a' 'e'k'i'l' 't'a'h't''''t' 'w'a'r'd' 'n'a'c' 'e'W''How should you represent that? A tree of course!nn> Diagram her''en'n''n''''''e'k'i'M's'' ''''''''''''''''X'''''''''''''e'w'''''''''''' ''''''*'*''''''b'''''''''''''''''''''''''''''''''''- Insert 'a' id `(se'''''''0' ','e'k'i'm'ph, 0)` after `R'X'''OOT`n''''n- In'x'''sert 'a' '3'''id `(s''''''''0' ','h'p'e's'('eph,')' 0)` afte'Note the 'x' and 'b' both share the same parent. This will sometimes happen when users concurrently type in the same location, and we can resolve that by comparing their item IDs. But we don't want to do that in this case! In this case no matter what the IDs are we should always end up with 'aXbc'. RGA solves this by adding '''''''''''''''''r'e'g'e't'n'''''''''''''''''''''''''''':''''''''''I' '.'''':'n- Insert 'a' id `(seph, 0)` after `ROOT''''''''*'''*'0' ':'q'e's' ','`n- Insert 'X' id `(mike, ', seq: '3'''*0*'0)` after `(seph, 0)`n- Insert 'b' id `(seph', seq: '1'''*0*', 1)` after `(seph, 0)`n''-'''''''''''''')'A'G'R'(' ''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i't'c'e'n'n'o'c' ''''','''''''''' 'y'b' ''''''''''e'l'p'So how should you *implement* automerge? The automerge library does it in the obvious tree based way. At least I think so '''''''''''''''''''''c'b'a''' ''''''g'n'i'p'y't' 'r'e't'f'a' '''[''''''''''''''''''''*'f'o' ''''*'''''''o' 'e'm'o's'*'''''''s's' '''''''''''''''''''''''''''''''''https://gist.github.com/josephg/0522c4aec5021cc1dddb60e778828db')'e'(']'''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'r'e'h' 'n'o' 'g'n'i'o'g' 's't'a'h'w' 'a'e'd'i' 'o'n' 'e'v'a'h' 'I' ','h'a'e'Y'''''''!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Holy cow! ~~Thats nearly as much ''as slack.~~' '''n'n'.'M'A'R' 'f'o' ''''''' '.'B'M'0'8'8' ','p'e'y' '-' 't'a'h't' 's'i' 'w'o'w' 'd'n'A' '''''''''''''''''''''''''''''''''''''''''''''''''''''!'t's'a'f' 'y't't'e'r'p' 's'i' '8'V'''''''''''t'p'i'r'c's'a'v'a'J' '.''''''''''''''''''''n'n'''.'y'a'w'y'n'a' 'e'r'a'r' 'r'e'p'u's' 's'i' 'n'o'i't'a'c'o'l' 'e'm'a's' 'e'h't' 'n'i' 'g'n'i'p'y't' 'y'l't'n'e'r'r'u'c'n'o'c'''''''' 'g'n'i'''''''''''''|' 'e'| -------------------------- | ---------- | ----''|' '-----''g'a's'u'''''d'e's'u' 'M'A'R' 'p'y''880M''''''|'| JS baseline '' '' '' '' '' '' '' | 0.61s | 0.1 MB |'' ' ' ' ' 'B' ''t' 's'r'''''''''''' '-'-'-'''''''''''''|' ' ' ' ' ' ' ' ' ' ' '-'-'-'-'-'-' 'e's'U' '''''''''''.'''''''''''''''''''''''''''''' 'y'a'w'''''''''''':'t'i' 'o''''''''''''''''''' ' ' ' ' ' ' ' ' ' ' ' ' ' '''''''''''''''''''-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-''''''''''''''w'e'l's' 'e''1'''''l'o'h'w' '-'-'-'''' '' ' ' ' ''''''' ' ' ''' ' ' ' ''t'n'i' 'e'c' ''''''''2''''''''''' ' 'n'''''''''''''''''''''''''''''''There's an old saying with performance tuning:nn> You can't make a program faster. You can only make it do less work.nn''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'k'r'o'w' 's's'e'''l' 'o'd' 't'i' 'e'k'a'm' 'y'l'n''n1. Automerge makes heavy use of immutable.js. Immutablejs is a library which gives you clojure-like copy-on-write semantics for javascri''p''t objects. This is a cool set of functionality, but the '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''B'K''''''''''''''''''t'n'e'm''''''B'M'0'8''''~'~'''''''`'`''Thats nearly as'~~'''''-'-'''''''~'~' much as slack.''~'''''''''''''''''''''''''''''''.'k'c'a'l's' 's'a' 'h'c'u'm' 's'a' 'y'l'r'a'e'n'''''''' 'y'l'a'r'e'n' 's't'a'h'T' '''''''''''''''''''''''''''''''''''!'g'i'b' 'y'r'e'v' 'n'e'v'e' 't'''n's'i' 't'n'e'm'u'c'o'd' 'e'h'T' '''''''''''''''''''''''''''''''' 's'a' 'm'a'r' 'h'c'u'm' 's'a' 'y'l'r'a'e'n' 's't'a'h'T' '8'''u'''''c'o'd' 'b'k''''''''''!'w'o'c' 'y'l'o'H' '''''h'''''''b'l'0'0'1' 'a' 'e'c'u'd'o'r'p' 'o't' ''''''''''''''''''''''''''''''''''''''''!'!'''' 'm'a'So how do we make the computer do less work here? There's lots of performance wins to be had, but with this sort of thing its always best to start with macro optimizations. There's no point optimizing code you might be about to delete.'n'''r' 'f'o' 'B'G'7''''6'.'1' 's'e'm'u's'n'o'c' 'e'g'r'e'm'o't'u'a' 'n'i' 'e'c'a'r't' '''''''''''' 'I' 'd'n'A' 'g'n'i't'i'd'e''''a'r't' 'e'l'p'm'i's' 's'i'h't' 'g'n'i'n'n'u'r''''''''''''''''''''''''''''T''''''''' 's'e'k'a''.'''''''''','l'l'a' 'r'e't'f'A''''m''''n''n'o'c' 'e'c'a'r't' 'g'n'i't'''''''e't'e'l'e'd'i'd'e' 'e'l'p'm'i's' 't'a'h''''h't' '-' 'e'g'a's'u' 'y'r'o'm'e'm' 'r'O' 'V8 optimizer & GC struggles to optimize code that uses immutablejs. As a result, it increases memory usage and decreases performance.'o' 'n'a'c' 'u'o'Y' '.'r'e't's'a'f' 'm'a'r'g'o'r'p' 'a' 'e'k'a'm' 't'''n'a'c' 'u'o'Y' '>'n'n'''' ''''''''''''''''''''''''''''''''''''''''''''''''''w' 't'u'b' ','d'a'h' 'e''''''''''''''''''o't' 't's'e'b' 's'y'a'w'l'a' 's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y''I'a'w'y'n'a' 't'u'o' 'w'o''''''''''''''''''''''''''''''''''''''e'r'u't'c'u'r't's' 'a't'a'd' 'e'h't' 'g'n'i'v'o'r'p'm'I'''''''''''''''''''''''''''''e'r'u't'c'u'r't's' 'a't'a'd' '/' ''''''''''''''s't'n'e'm'e'v'o'r'p'm'i' 'c'i'm'h't'i'r'o'g'l'A' '#'#'#'n'n'n'r'h't' 'o't' 't'u'o'b'a' 'e'b' 't'h'g'i'm' 'u'o'y' 'e'd'o'c' '''''''''''t''' ','y'l'i'k'c'u'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'T'D'R'C' '''':'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i's'u' 'y'b' 'e'r'e'h't' 't'o'g' 't'I' '.'t's'a'f' 'y''''''' 't'd'a'e'r'l'a' 's't'i' 'e's'u'a'c'e'b' 'r'e't's'a'f' 't'i' 'e'k'a'm' 'o't' 'w'o'h' 't'u'o'b'a' 't's'o'p' 'g'o'l'b' 'e'l'o'h'w' 'a' 'd'e'e'n' 't'''n's'e'o'd' 's'j'Y'''''''''s'e'o'd' 's'h'''''''s'h'Y't'i'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't's'u'j'''''''''''''''''''''''''''''''''''':'s'i'h't' 'e'k'i'l' 'e'e'r't' 'a' 's'a' 'T'D'R'C' 'e'h't' 'g'n'i't'n'e'm'e'l'p'm'i' 'f'o' 'd'a'e't's'n'I' '.'d'e'c'i't'o'n' 'e's'l'e' 'e'n'o'y'n'a' 'k'n'i'h't' 't'''n'o'd' 'I' 't'a'h't' 'k'c'i'r't' 's'u'o'i''''''''''''''''''''e'h't' 't'u'p' ','o'S'n'n'v'b'o' ','r'e'v'e'l'c' 'a' ''''s'j''s'Y's'''''''''''''o's'l'a' ''' 'a' 'e'k'a'''m'''r'o'v'a'f' 'y'm' 'n'i' 'e'e's' '''''''''''''''''''''''''''''''''''''''i''' ','m'e't'i' 't'n'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'e't'r'e's''''''''''''|' 'e'g'a's'u' 'M'A'R' ''n'i' 'e'b' 'd'l'u'o'h's' '''''''''''''|' '-'-'-'-'-'-'-'-'-' 'm'e't'i' 'w'e'n' 'e'h't' 'n''''''''''''|' ' ' ' 'B'M' '0'8'8' ''o'i't'a'c'o'l' 'e'h't' 'd'''''''''''''''| JS baseline | 0.61s | 0.1 MB |'B'M' '8''''7''''3'2'''''''''''''''|' ' ' ' ' ' ' ' ' ' ' 'n'i'f' 'e'w' 'l'i't'n'u' ''''''''''''''|' ''''|' ' ' ' ' ' ' ' ' ' '''.''''p'i'k'S'''''r'a'p' 'e'h't' 'r'e't'f'a' 't'h'g'i'r' 'g'n'i't'r'a't'S''n'a'c' 'e'w'''''''''''''']'0' ','''h'p'e's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'r'e'''''''3. Walk up the tree to figure out''''''''''''''''''''''''''''''''''''''''g'n'i't'r'e's'n'i' 'y'l'l'a'u't'c'a' 'e'r'''e'w' 'e'r'e'h'w' '''''''(''''''''''''''''''g'n'i'n'n'a'c's' 'g'n'i'v'o''''''''''''''''''''e'r'u't'c'u'r't's' 'a't'a'd' 'e'r'o''''''''''''''''''''''''''''':'''.'1'''s't'o'p's't'o'h' 'e'c'n'a'm'r'''.'2'''o'f'r'e'p' 'o'w't' 'x'i'f''c' ''m'e'R'''''''''''''''''''e'm'i't' 'r''''''''' 'o't' 'd'e'e'n'''''''a'c'a'e'n'i'l' 'g'n'i'x'i'F' 'x'e'd'n'i' 'e'h't'''''''''''''''''g'n'''''''g'a''''n'i'''i'i's'o'p''''''''''o'p'm'o'r'p''''w'e'''''f''' '' '''''''''s'''' '-'n''''''' '-'n''''t'o'p's't''''d'n'A''''''a' '''' '-'''''''''''''''''y'a'r'r'a' 'e'h't' 'o't'n'i' ''n''''''o'h' ''m'''I''''''''''''''''''''''' 'y'l'l''''''''''''''e's'o'h'''''''''''''''' 'e'v'a'h' 'o's'l'a' 't'h'g'i'm''''''''''n'e'e'b''''''' ',' 'e'v'a'h''t' 'f'o' 'e'm'o's'a'.''u't'c'a''''''''''g'n'i't'r'e's'n'i' 'd'n'a' ','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't's'a'p'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':'s'i'h't' 'o'd' 'e'w' ','t'r'e's'n'i' 'y'l'l'a'u't'c'a'''''''''''''''' '''!'s'e'k'i'y' 'e'l'b'u'o'D'n''n' 'e'w' 'n'e'h'w' '''''l'l'i'''w' ''n'e'h't''''''' 'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'f'o'o' 'l''''''' ','l'i't's' 't'u'b' ','+'+'C' 'm'o'r'f' 's'n'e'p'p'a'h' '''''''''''''''''''''''''''''''''''''''''''''''''.'e''''e''' 'o'S''r'e'h't' '''''''''''''''''''s'e'o'd' 'r'e't'u'p'm'o'c' 'e'h't''n'w'o'''d''' 'n'o' 'g'n'i'''''''''''''''''''''t's' 'y'n'a'm' 's'a' ','y'r'r'o'S''o'g' 'y'l'l'a'e'r' 's't'a'h'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'k'a't' 'l'l'i'w' 's'r'''''n'n'''e''''''''''''''''''''''''''''''''''''''' 's'm'e'l'b'o'r'p' 'e's'e'h't' 'f'o' 'h'''''''''''''''''''''''''''''''''''''''' ''''g'n'i'''y''*'b' 'm'e'l'b'o'r'p'*'' 'g'n'i'n'n'a'c'''''''d'e't'i'd''.'W''''e' ''s' 'e'h't' ''''''''''''''''''''y'e'h't' 'e'p'o'h'''s'a'h'' 'n'a'c' 'e'w' 'e'v'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'i'b' 'e'l't't'i'l' 'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Yjs does these two optimizations and one more bonus optimization: Humans type in runs of characters.'''''''''''''''''''''''''''''''''''''''''```javascriptnstate = [' { item: 'h', isDeleted: false, id: ['seph', 0], seq, parent: null },' { item: 'e''''h', isDeleted: false, id: ['s'1'''eph', 0], seq, parent'']'0''': ['seph', 1 },' { i'l'''tem: 'e''''h', is'''''''''''''''''''''''''''''' 'y'k's'e'p' 'e's'o'h't'''''''''''''''''''''''''''''n'n'''!'t's'a'f' 'e'b' 'l'l'i'w' 's't'n'e'v'e' 'e'''''''s'd'l'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'n'a''''''''''''''''''''''''''''''''s''''''e'g'n'a'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''h'c'a'o'r''''o'p'p'a' 's'i'''''' 'h'c'i'h'w''h't''' 'h't'i'w' ''''''''''''''''''''''''''''''''''''''''''''''''R'''''''''''''' 'h't'i'w' ','t's'u'r' 'n'i' 'r'e't's'a'f' 's'i' 'g'n'i'h't'y'r'e'v'E'''''''''''''''''s''''e'e'e'r'T'''''''r't'-'B' 'd'n'a' 't's'u'R'''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'e'm''.'''e'r't'x'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'n'u'o'r'-'''' 'l'l'a' 'e'v'i's''''i's'e'r'p'm'i' 's't'I' '.'e'l'b'i's's'o'p' 's'i'h't' 's'e'k'a'm' 'h'c'i'h'w' 'd'n'a't's'r'e'd'n'u' 't'''n'o'd' 'I' 't'a'h't' '8'V' 'n'i' 'y'r'd'r'a'z'i'w' 'f'o' 's't'r'o's' 'l'l'a' 's'''e'r'e'h't' 'e'r'u's' 'm'''I''''''' 's't'I' '.''''''''''''n'.'s'i'h't' 'r'o'f' 's'e's'u' 's'j'y' 'm'a'r' 'e'l't't'i'l' 'w'o'h' 'd'e'k'c'o'h's''''''''d'e'k'c'o'h'c' 'm''''''''''''y'l't's'e'n'o'h'''''''''' 'y't'l's'e'n'o'h' 'I'n''''''''Moving away from Javascript, and moving away fr'''''''''''''''''''-' 't'i' 'd'e's''''''''['''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''](https://gist.github.com/hellerbarde/2843375)'''t'A'''']'''''''''''''''''''''''''''''''h'c'a'e' ','''e'l's''a'c''''''''''''''''''''''h'c''''''''''h'a'e' 'd'n'A'''''h'c'a'E'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'k'i'l' 's'i' 'e'r'e'h' 's'e'o'd' 't'p'i'r'c's'a'v'a'j' 'e'k'''''''''''''','''''''''''''''''''''''''a' 'y'l'l'a'u''''''''''''''s'e'u'l'c' 'f'o' 'l'l'u'f' ''''t'c'a'''''''''''''''''''''''''''''''''''''''''d'n'i'f' 'l'l'''u'o'y' '''''''''''''''e's''''n'n'''''e'e'e'h'C''' 'r'o' 'e'r'e'h't' '''o'g' 'u'o'y' 'f'i' 'd'n'a' '-' '''''''''''''''''''''''''''''h's'i'u'q's''''.'''''''''''''''''''''''''''' 'e'r'e'h'w''''''''''''y'n'i'''''''g'n'i'y'a's' ''''t' 'a' 'h't'i'w'e'm'o's' 's'e'm'a'n''''T' '.''''''''''''''''''''''''''''''''''''.'s'''''''''' 'w'o''''''''''''''''''''o'd' 'e'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!'')'s't's'i'l' 'd'e'k'n'i'l' 'h't'i'w' 'm'e't'i' 't'x'e''''''''''''''''n' 'e'h't' 'o't' 'e'v'o'm' 'e'w' 'e'm'i't' 'h'c'a'e' 't'n'u'h' 'r'e'g'n'e'v'a'c's' 'a' 's't'i' ','r'e'b'm'e'm'e'R'(' 'l's' 'g'n'o'l'''''''l's''e'o'd' 't'p'i'r'c's'a'v'a'J' 't'a'h'w' 's't'a'h't' 'd'n'a' ','''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''t's'u'r' 'n'i' 'n'o'i't'a't'n'e'm'e'l'p'm'i' '''T'D'R'C' 'a'''''''''''''''''''''''''''''''''''''''''''''e'm'i't' 's'i'h't' ','n'o'i't'a't'n'e'm'e'l'p'm'i'''''''''''s't'i' 'f'o' 'l'''''''''' 'l'a'n'r'e't''''''''''n'r'e'n'i'l'a''''''''m'e'l'p'e'm'i' 'T'D'R'C' 'r'e'h't'o'n'a' 't'e'y''g'n'i'd'l'i'u'b' 'y'l't'e'i'u'q' 'n'e'e'b' 'e'v'''I' 'o'S''''''''''''''''' 'n'e'e'b' 'e'v'''I' 'o'S''' 'e'u'l'c' 'h'c'a''''''''''''' 'h'a'c'''''''''''''''''''' 'n'w'o'd' 'd'n'a' 's's'o'r'c'a''E''''s'e'u'l'c' 't'n'u'h' 'r'e'g'n'e'v'a'c's' 'f'o' 'l'l'''''''''''''''''''''''''''''''''''''''''''.'m'e't'i' 'e'h't' 'd'n'i'f' 'o't' 's'd'a'e'r' '5' 'd'e'e'''''''''' ''''''' 'o's''''''' 'r'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'i'f' 'y'l'k'c'i'u'q''''''''''''''.'''''''''''''''''n'e'v'e'''''I' 'f'i' '' ' '>'-' ''''''f'o' '''g'n'i''''d'n'i'f'''''''''''''''''''''''''''''''''''''''''''''''s'u' 's't'e'l' 't's'u'R'''''''''''''')'*''''(']'0'0'1' ',''''''''s'e'r'o't's'''''''''''''''''''''''''''''''I'''''''''''''''''s'i'h't' 'e'k'i'l' ''I''.'''s'u'o'u'g'i't'n'o'c' 'g'n'i'h't'y'r''''n''''''''''s'y'a'w'''''''I' ''''''''''''e'b''''''''''''''''','t's'a'f' 'f'o' 'g'n'i'k'a'e'p'S'' 'l'l'i'w' 't'i' '''''o's'l'a' 'e'v'e' 'h't'i'w' ','''''h'p'e's'''''''''''''''h'p'e'S'[''''('*'('''''''('*''''(' 'D'I' 'r'i'e'h't' ''''t'y'b' 's'm'e't'i' 'p'u' 'k'o'o'l''''''''''' 'd'n'i'f' 'y'l'i's'a'e' 'n'a'c' 'e'w' 'o's' ','''' '''''c'a'b' 'x'e'd'n'i' 'n'''' 'a' 'g'n'i'r'o't's' 'o's'l'a' 'm'''I'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'a' 'k'c'i'r't' 's'''s'j'y' 'e's'u''''''''''''''We can also pack all the items tightly in memory. Each leaf in the b-tree is stored in a single block of memory. At that block we store 32 entries - each storing in''''''''' ' ' ' '?'?'?' turn a span of characters. So inserting *does* need some memcpy-ing, but a little bit of memcpy is fine. Its seriously faster than you think.'n'n''''W'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''W''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n| Test | Time taken | RAM usage |n|''''''''''''''''''''''''''''''''''''''''''''''''''s''''''''''''''''''''''.'y'r'a'r'b'i'l' 'y'm' 'n'i' ''''''''.'t'n'e't'n'o'c' 't'n'e'm'u'c'o'd' 'e'h't' 'e't'a'c'i'l'p'u'd' 'o't' 'e's'n'e's' 'e'k'a'm' 't'''n's'e'o'd' 't'I''''''''''''''u'r't's' 't'a'h't' 'd'n'A' ' -------------------------- | ---------- ''''''''''''''''''''''''' 't'u'b' '.'.''''''e'e'r't'-'B''.'t's'a'f' 'y't't'e'r'p' 's't'I'| -----'*''''''''*'''' 'y'l'l'a'u't'c'a'---- |n| autome''v'''('''rge @ 1.0.0''')'-pr' index''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''?'o'g' 'y'l'l'a'e'r' 'n'a'c' 'y'p'p'u'p' 's'i'h't' 't's'a'f' 'w'o'h' 'e'e's' 'o't' ''''''''''''','>'e'd'o''''''''!'i'a'''''''''''''''''''''''''''''''''''''''''https://docs.rs/ropey/1.2.0/ropey''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s't'i''''''''''''m'''I' 'w'o'n'k'''''''''' '.'.'.' 't's'u'j' 'I' ','k'o'o'L''''''''''''''''''''w''' 't'u'b' ','g'n'i't'a'e'h'c' 's't'I'''''''''''''''''''''''''''''''''?'f'f'o' 't'a'h't' 'n'r'u't' 'I' 'f'i' 's'n'e'p'p'a'h' 't'a'h'W' '.'y'a'w'y'n'a' ''''''''''''''''''''''''''''''''''d'e's'i'm'o'r'p' 's'a' ';''.'r'e't's'a'f' 'x'''' '0'0'0'4'1' '''n'n'.'m'o'o'B'n'm'e'l'b'o'r'p' 's'''e's'l'e' 'e'n'o'e'm'o's'''''''''''''''''''''''''s'''e's'l'e' 'e'n'o'e'm'o's' 'n'i' 'd'e'r'o't's' 'e'b' 'o't' 'g'n'i'o'g'''''''' 'd'e'r'o't's' 's'i' 't'n'e't'n'o'c' 't'a'h't' 'd'n'A' '''n| Test '''''' ' ' '?'?'?' | Time taken | RAM usage |n| -------------------------- | ---------- | '| Rust'' (n'''''''''''t'''''''''n'e't'n'o'c' 'c'o'd'ative) ')' | 0.065s | 2.3 MB |n'--------- |n|''''''''''''' 't'n'e't'n'o''3'2''''''c'1'''''''''''''''''' ' ' ' ' ' ' ' 'g'n'i'r't's' ''''''''''''''''o't's' 't'o'n' ',' automerge (v1.0.0-preview2) | 291s | 880 MB |n| reference-crdts (automerge / yjs) | 31s | 28 MB |n| Yjs (v13.5.5) | 0.97s | 3.6 MB |n| JS baseline | 0.61s | 0.1 MB |n| Rust (Called from JS via WASM) | 0.20s | 2.3 MB |n| Rust (native) | 0.065s | 2.3 MB |n'''''''''''''''''''f'f'o' 't'i' 'n'r'u't' 'I' 'f'I' '''''''''' 'd'n'A' '.'y'e'p'o'r' 'n'a'h't' 'r'e't's'a'f' 's'i' 'e'd'o'c' 'y'M''''I' '?'t'a'h'w' 's's'e'u'g' 't'u'B' '.')'/'(']'y'e'p'o'R'[' 'g'n'i's'u' 'm'''I' 't'n'e't'n'o'c' '''''' 'm'''I' 't'x'e't' 'e'h't' 'r'o'F''''''''''''s'''' 's'e'u'g' 't'u'B'n''h' 'h'o'n' 'e'e'r't'-'b' '>'='''''''''' '>'-'''''''''' '>'=' 'D'I' 'f'o' 'x'e'd'n'I'''''''n'i'<' ':'eview2 '' | 291s | 880 MB |n| reference-crdts (automerge / yjs) | 31s | 'v''' 28 '(''''''''' ' 'MB'''''''''''''''''''' ' ' ' ' ' ' ' ' ' ' ')'5'.'5'.'3'1'@''''#''''$''''&'(' |n| Yjs | 0.97s | 3.6 MB '''| Rust '''''''''''m'o''''a'i'v'''''''''''0''''0'2'''''''''''''''''''''''r'f' 'd'e'l'l'a'C'''''''''+' 'S''0'J''' 'a'i'V'(thro'n| Rust (Called from JS via WASM) | 0.20s | 2.3 MB |'ugh WASM) | 0.65s | 2.3 MB |n''' |n''''''e'n| Rust (native) | 0.065s | 2.3 MB |''''''' ' ' ' ' ' ''v'i't'a'n'| JS baseline |'''''''''''''''''''|' ' ' ' 'B'M' '3'.'2' '|' ''''''''''''''''''''''''''''''''''''''''''''''''n ''''''''''''''''''''''''''''''''''''' index: 't'n'e't'n'o'c' 'e'h't' 'g'n'i'r'o't's' 'e'e'r't'-'B''''''''''''''''''''''''''''''''''''''''''''''h'c'u's' 'd'n'a' 's't'e's'f'f'o' 'd'n'a' 's'n'a'p's' 'g'n'i'r'o't's' 'e'e'r't' 'e'g'n'a'R'<' ':'e'e'r't' ''' '''''''''''','''c'b'a''''''''''''''''''''''''n'o'i't'a't'n'e'm'e'l'p'm'i' 'e'p'o'R'''''''R'<' ':'t'x'e't' '''''''`'`'`'n'}''n 'n ' '{'n'`'`'`'n'n':'s'i'h't' 'e'k'i'l' 's'k'o'o'l' 'e'r'u't'''''''t'u'c'u'r't's' 'a't'a'd' 'e'h't' 'o'S''''S''''''''''''''''''''''''''' 'r'u'o'y' 'e'm'u's's'a' 's'e'm'i't' 'e's'e'h'T'n'n'''' ' ' ' ' ' 0.61s | 0.1 MB '''''''''''''''''''''''''''''''''''''''''''''n| JS baseline | 0.61s | 0.1 MB |'s'5'6'.'0' '|' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ')'M'S'A'W' 'h'g'u'o'r'h't'('''''''''''''''''S'J' 'm'o'r'f' 'd'e'l'l'a'c''''''''b'e'w' 'a'i'v' 't's'u'R' '|'n' |''n'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o''''''''''''''''''''''''' 'y'l's'u'o'i'r'e's''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'm'i't' 'e'''' 't'u'o''h't' 't'a' 'r''''''''''''''''nWe can also pack all the items tightly in memory. Each leaf in the b-tree is stored in a single block of memory. At that block we store 32 entries - each storing in turn a span of characters. So inserting *does* need some memcpy-ing, but a little bit of memcpy is fine. Its seriously faster than you think.'a't'n''a'd' 'e'''''''w''' ','e'e'S't'a'r'a'p'e's' 'a''e'v'e'l'c' 'd'e'm'e'e's' 't'i' 'e'''s'u'a'c'e'b' ''''''''''''''''' 'd'e'r'o't's' 'e'','''b' 'o't'''''''''''''''''''''''''g'n'i'h't'e'm'o's' 'r'o''''''' 'r' 'r'o't'i'd'e'''''''''''''''''''''''''''''''''''s'''e'r'o't's' 'T'D'R'C' 'y'm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'c'i'w't' 't'n'e't'n'o'c''' ''nThere's one last thing I've done. I don't know if its a good idea, but I did it anyway because it seemed clever. I moved the content itself out into a separate data structure. See, when you're actually doing collaborative editing, you probably want all the characters in your document to be stored in an actual array, or in VS Code's editor or something. It doesn't make sense to store the content twice. So I made it so my CRDT stores'''''n''''''''' 'o't''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'.'s'e'g'n'a'h'c' 'e'g'r'e'm' 'n'a'c' 't'i' 't'a'h't' 'h'g'u'o'n'e' 't's'u'J' '.'h'c'u's' 'd'n'a' 's'n'a'p's' 'e'h't' '''''' 's'd'e'e'n'''''''' 's'e'r'o't's' ''e'h't' 'e'r'o't's' 'o't' 'e's'n'e's' 'e'k'a'm' 't'''n's'e'o'd' 't'I' '.'r'e'v'e't'a'h'w''''h' 'r'o' 's'e'r'u't'c'u'r't's' 'a't'a'd' 's'''e'd'o'C' 'S'V' 'n'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o't' 't'n'a'w' 'y'l'b'a'b'o'r'p' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'''''''l'o'n'o' 'e'r'u't'c'u'r't's' 'a't'a'd' 'T'D'R'C' 'e'h't' 'o's' 't'i' 'e'd'a'm' 'I' 'o'S' '.'g'n'i'h't'e'm'o's' 'r'o' 'g'n'i'r't's' 'l'a'u't'c'a' 'n'a' 'r'o' ','y'a'r'r'a' 'l'a'u't'c'a' 'n'a''''''''''''''''''''''''''''''''''' 'n'i' 't'n'e'm'u'c'o'd'''''w'n'd'o' 'r'u'o'y' 'n'i' 's'r'e't'c'a'r'a'h'''''''r'a'c' 'e'h't' 'l'l'a' 'e'v'a'h' 'u'o'y' ','''' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c' 'g'n'i'o'd' 'y'l'l'a'u't'c'a' 'e'r'''u'o'y' 'n'e'h'W''''S' '.'''''''.'s'e'r'u't'c'u'r't's' 'r'e'h't'o'n'''' 'a' 'o't'n'i' 'f'l'e's't'i' 't'n'e't'n'o'c' 't'x'e't' 'e'h't' 'd'e'v'o'm' 'I' '''''''n'n'.'y'a'w'y'n'a' '''' 't'i' 'd'''''''i' 'i'd''''''''''''''' 's't'i' 't'c'e'p's'u's' 'I' 't'u'b' ','a'e'd'i' 'd'o'o'g' 'a' 's't'i' 'f'i' 'w'o'n'k' 't'''n'o'd' 'I' '.'e'n'o'd' 'e'v'''I' 'g'n'i'h't' 't's'a'l' 'e'n'o' 's'''e'r'e'h'T'n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i'l'l'i'm' '0'0'2' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'n'A' '.'s'd'n'o'c'e's'i'l'l'i'm''''n' '5'6'''''''''''''''''''''''''''''''''''' 'n'i' 'e'c'a'r't' 'g'n'i't'i'd'e' 's'i'h't' 's's'e'c''''e'o'r'p' 'n'a'c' 'e'w''''t' ','t's'u'r' 'm'o'r'f' 'y'l't'c'e'r'i'd' 'd'e'l'l'a'C' '.'s'd'n'o'c'e's' '2'.'0' 'o't' 'n'w'o'd' 'e'r'''e'w''''''''''''''k'r'a'm'h'c'n'e'b' 'e'h't' ','y'l'b'm'e's's''''p'a'b'e'w' 'h'g'u'o'r'h't' 't'p'i'r'c's'a'v'a'j' 'm'o'r'f' 'd'e'l'l'a'C'n'n'?'o'g' 't'i' 's'e'o'd' ''''?'t's'a'f''''m' 'w'o'h' ','y'a'w'y'n'A'n'n'.'''''''''''''''''''''k'n'i'h't' 'u'o'y' 'n'a'h't' 'r'e't's'a'f' 's't'I' '.'e'n'i'f' 's'i' ' 't'i'b' 'e'l't't'i'l' 'a' ''''''''''y'p'c'm'e'm'''''''''''-' 'e'n'''''' 'l'l'i't's''i'f' 's'''''''g'n'i'o'd' 't'i' '''''''''''''''''''''''''''''''''''''''''''''y'l'e'v''''e'''i'''t'i'u't'n'i'''''''i'u' ''''''''''''''''''''''''''r'e't's'a'f' 'h'c'u'M' '.'s'i' 't'i' 'k'n'i'h't' 'u'o'y' 'n'a'h't' 'r'e't's'a'f' 'y'l's'u'o'i'r'e's' 's't'a'h't''''''''''m'''I''''''s't'a'h't' 't'u'b' ','g'n'i'-'y'p''''''''''y'p'o'c'm'e'm' 'e'm'o's'''''''''''''y'p'c'm'e'm' 'w'e'f' 'a' 'd'e'e'n' '*'s'e'o'd'*' 'g'n'i't'r'e's'n'i' 'o'S'''''' 's'i'h'T' ''''''''''h'T' '.'s'r'e't'c'a'r'a'h'c' 'f'o' 'n'a'p's' 'a' 'n'r'u't' 'n'i' 'g'n'i'r'o't's' 'h'c'a'e' '-' 's'e'i'r't'n'e' '2'3' 'e'r'o't's' 'e'w' 'k'c'o'l'b' 't'a'h't' 't'A'''''''''''' 'k'c'o'l'b' 't'a'h'T' '.'y'r'o'm'e'm' 'f'o'''''''o'f' 'k'c'o'l'b' 'e'l'g'n'i's' 'a' 'n'i' 'd'e'r'o't's' 's'i' 'e'e'r't'-'b' 'e'h't' 'n'i' 'f'a'e'l' 'h'c'a'E' '.'y'r'o'm'e'm' 'n'i' 'y'l't'h'g'i't' 's'm'e't'i' 'e'h't' 'l'l'a' 'k'c'a'p' 'o's'l'a' 'n'a'c' 'e''''In Javascript we can't even pack a single item into contiguous memory. In rust we can pack groups of 32 items all together in chunks. This will result in some memcpy-ing when we insert, but thats faster than you think.n'''''e'W'''''''' 't's'a''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n''''''n'''n'.'y'a'w'y'n'a' 't's'a'f' 'y'l'l'a'e'r' 's't'i' 't'u'B' '.'t'e'y' 't'a'h't' 'd'e'i'r't'''''''''h't' 'd'e'u'r't' 't'''n'e'v'a'h' 'I' '.'l'''''''''n'o'i't'a'c'o'l' 'e'h't' 'e'h'c'a'c' '*'o's'l'a'*' 'o't' 't'e'y''''''n'''''n''e''n't' 'r'e't's'a'f' 'e'b'''''''l'a' 't'h'g'i'm' 't'I'n'n'.'y'a'r'r'a' 't'p'i'r'c's'a'v'a'j' 't'a'h't''''''''''''''e'''' 'd'e'e'n' 'e'w''''n' 'n'e'h'w''''e'e'n' 'n'a'h't' '''e'm'a's' 'e'h't'''n' 'y'l'n'o' 'e'w' 'o's' ',''''u'f' 's'i' 't's'i'l' 'r'''t''e'v''''s'i'l' 'r'u'o'y' 'n'i' ''i'l' 'y'r'o'm'e'm' 'g'n'i'g'n'a'r'r'A' ''''.'''' 'd'n'A'''')'t'a'e'b' 't'r'a'e'h' 'a' 't'u'''''''''''s'e't'u'n'i'm' '2''''''o'b'a'(' ''a't's' 'e'm'i't' 's'i'h't' 'n'O' '.'e'v'i't'i'u't'n'i' 'e'r'o'm' 't'i' 'e'k'a'm' 'o't' 'n'o'i'l'l'i'b' '1' 'y'b' 'e'm'i't' 'r'e't'u'p'm'o'c' 'p'u' 'e'l'a'c's' 'n'a'c' 'e'W''s'e'u'g'''''''''i' 'd'e's'e'u'g' 'u'o'y' '-' 'om linked lists'''''''''' 'r'e't't'e'B''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't'u'b' 't'i' 'y'a's' 'o't' 'd'a's' 'm'''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''' 'o't' 'e'u'n'i't'n'''''o'c''''''''''''''''''''''''''''''''''''''''' 'e'n'i'g'a'm'I''''''''''''''''''t''''''javascript'''''n'o's'j'''''''''''t'p'i'r'c's'a'v'a'j'''{ ''*'''''r'u'o'Y''''C''''''''*'''''''''''''''''''''''''''''''''''''''.'s'r'''''''''''''''''l'l'a' '''''''''''''s'e'x'o'b' 'e's'e'h't' 'o't'n''''''''s'i'h'T'''''n't''''e'h'T' '' '.''''i' 'a't'a''''' 'p'e'''f'o' ''e'k''''''''''''' 's'i' 'h'''''''''''''e'w' 'r'e't'a'L''O'c'i'h''''''''''''''''''''''''''''''''''''''' '.'*'e'r'e'h'w'y'n'a'*' 'e'b' 'd'l'u'o'c' 't'i' 'd'n'a' ','''a''',''''''t'a'd' 't'a'h't''w' ','''''' '''d'''''''''''''o't' 'g'n'i'o'g' 'e'r''' 't'u'p''e't'n'i'o'p' 'y'b' 'd'e't'a''''''''''''''''''t'i' 'd'a'e'r' 'o't' 'd'e'e'n' 'e'w''''r'a'p'e's'''''''''''''''''''''''''a' 'e't'o'r'w''''''''''''''''''''''''''''''''''''''''e'm'i't' 's'i'h'T' '.''''''''' ','m'e't'i' 'h'c'a'e''''''''''''''''''''''''''''''''''''B' '.')'s'n'a'p's' 's'''s'j'y' 'g'n'i'd'u'l'c'n'i'(' '''''''''''' '''''''n'n'''''''''''''''''''''''''''''''''''''''''''''''''M'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'o'g''''''''''''''''''''''''''''''''''''' '-'n'n':'''''''''''''' 'e'''''''''''''n'o'i't'''i's'o'p' 't'a' 'h't''''o't' 'a't''''''r'u'o''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e's'a'c' 's'''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'e'v'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'k'n'i'h't' 'u'o'y' 'n'a'h't' 'r'e't's'a'f' 's't'a'h't''''''''''''''''''''''''''' 'n'a'h't' 'r'e't's'a'f' 'y'a'w' 's'i' 'y'p'c'm'e'm' 't'u'b' ','t'r'e's'n'i' 'e'w' 'n'e'h'w' 'g'n'i'-'y'p'c'm'e'm' 'e'm'o's''''''''''''''''y'p'''''''p'o'c'm'e'm' 'f'o' 't'i'b' 'a' 'n'i' 't'l'u's'e'r' 'l'l'i'w' 's'i'h'T' '.'s'k'n'u'h'c' 'n'i' 'r'e'h't'e'g'o't' 'l'l'a''''t' 's'p'u'o'r'g' 'k'c'a'p' ''''''''''''''''''n'a'c' 'e'w' ','t'c''''''''''''''''''''h't'i'w'''A''''''''A' '.'' 'e'e'r't' 'r'u'o''''r' 'n'i' 'a'f' 'n'I' '!'''''''''''''''''''''h'c'a'e' ''''''''''''''''''''''''''''' 'r'e'h't'e'g'o't' 'l'l'a''.''' 's'm'e't'i' '2'3' 'h't'i'w'''''''''''''''''''''''''''''k'n'u'h'c' 'y'r'o'm'e'm' 'e'l'g'n'i's' 'a' 'o't'n'i' 'k'c'a'p' 'n'a'c' 'e'w' 't's'u'r' 'n'I' '.'y'r'o'm'e'm' 's'u'o'u'g'i't'n'o'c''''e'h't' 'o't'n'i' 'm'e't'i' 'e'l'g'n'i's' 'a' 'k'c'a'p' 't'''n'a'c' 'e'w' 't'p'i'r'c's'a'v'a'J' 'n''''''''''j' 'n'I'''''n'n'!'y'a'r''''a'r'a' 't'p'i'r'c's'a'v'a'j'''' ' 'r'u'o' 'n'i' 'm'e't'i'''''''i't' 'y'r'e'v'e' 't'f'i'h's' 'o't' 'g'n'i'd'e'e'n' 'n'a'h't' 'r'e't't'e'b' 'h'c'u'M' ''n'e'p'p'a'h' 'i'h't' 'n'i''''''''''''''''.'t'a'h'w' 'r'e't't'a'm' 'o'n' 's'p'e't's' '5' 't'u'o'b'a' 'r'o' '-' ')'h't'p'e'd'('O' 's'e'k'a't' 't'i' '-' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''l'l'i'l'p's' 'e'w' ','e's'a'c' 't's'r'o'w' 'e'h't' 'n'I'''''''''''''''''e's'a'c' 't's'r'o'w' 'e'h'T' '.'t'n'e'r'a'p' 'e'h't' 'n'i' 't'r'e's'n'i' 'd'n'a' 'm'e't'i' 't'n'e'r'r'u'c' 'e'h't' 't'i'l'p's' ''''''''' 'e'w' ','t'o'n' 'f'I' '.'e'r'e'h't' 't'n'e't'n'o'c' 'w'e'n' 'e'h't' 't'r'e's'n'i' 't's'u'j' 'e'w' ','m'e't'i' 't'n'e'r'r'u'c' 'e'h't' 'n'i' 'm'o'o'r' 's'''e'r'e'h't' 'f'I' ''''''''''''''''''''''''n'i' 't's'u'j' 'n'a'c' 'e'w' 'y'l'l'a'u's'U' '.'o'o't' 't's'a'f'''''' 'y's'a'e' 's'i' 'e'e'r't' 'e'h't' 'n'i' 'g'n'i't'a'd'p'U' '-'n''e'''n'''''a'c' 'e'w' '''''''''t's'u'j' 'n'i''''''''''''''''''''''''''''''''''''''''''''''''''s'l''''r'u'o' ''e'v'e'l' '5''''''' '4' 's'd'e'e'n' 'y'l'n'o''''''''''''''''''''''''''''''''''''''''''''*'''''''''''''e's'o''.'s''''h't' 'o'd' '*''''''''' 'n'a'c's' 'r'e'v''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' ','r'e'z'i'm'i't'p'''''''''''''''''''''''''''''y'r'o'''m'e'm' 'n'i' 'e'c'''''a'l'p' ''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'W' '.'b'e'w' 'e'''''''''''https://github.com/josephg/text-crdt-rust''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''i''' '''''''''''''''- It''''''''''t'-''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d''' 'e'e'r't'-'B'''''''''''''e'r'e'h' 'm'a'r'g'a'i'D' '>'n'n''''This solves both of our linear scanning problems from earlier. When we want to find item 50 000 in the list, we can just tr''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'y'r'o'm'e'm' 'f'o' 'k'n'u'h'c' 'e'm'a's' 'e'h't' 'o't'n'i' 's'm'e't'i' '2'3' 'f'o' 'p'u'o'r'g' 'e'l'o'h'w' 'a' 's'k'c'a'p' ')'a't'a'd' 'l'a'u't'c'a' 'e'h't' 'e'r'o't's' 'e'w' 'e'r'e'h'w'(' 'e'd'o'n' 'f'a'e'l' 'h'c'a'E''''''''''''' 'a'e'W'n'n'.'e'e'r't' 'e'h't' 'n'i' 's'r'e'y'a'l''''l' '5' 's'd'e'e'n' 't's'u'j'''''''j' ' 't'n'e'm'u'c'o'd' 'e'l'o'h'w''''''''''o'h's' 's'i'h't'averse down the tree. Trees are very tidy - storing all these items we just need 5''This solves both of our linear scanning problems from earlier'''''''''''''''''''''''''w''''''''''0'0'0'0' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '5' 'd'e'e'n' 't's'u'j' 'e'w' 's'm'e't'i' 'e's'e'h't' 'l'l'a' 'g'n'i'r'o't's' '-' 'y'd'i't' 'y'r'e'v''''''''''''''''''''''''''''''''''''''s'm'e'''''''e'm't'i' 'e's'e'h't' 'l'l'a' 'g'n'i'r'o't's' '-' 'y'd''''y'i't' 'y'l'l'a'e'r' 'e'r'a' 's'e'e'r'T''''' 'e'h'T' '.'e'e'r't' 'e'h't' 'n'w'o'd' 'e's'r'e'v'a'r't' 't's'u'j' 'n'a'c' 'e'w' ',''0'5'''''''''''''0'0'0'1' ''''''''''''''''''''''''t's'i'l' 'e'h't' 'n'i' 'm'e't'i' 'h'c'i'h'w'''''''''''''''''''''''''''''' ','t'r'e's'n'i' 'o't' 't's'i'l' 'e'h't' 'n'i' 'e'r'e'h'w' 'd'n'i'f' 'o't' 't'n'a'w' 'e'w' 'n'e'h'W' '.'n'n'''''''''''''''''''''''.'n'e'r'd'l'i'h'c' 's'''m'e't'i' 't'a'h't' 'f'o' 'l'l'a' 'f'o' 'h't'g'n'e'l'''''''''''''''''''''''''''.'r'e'i'l'r'a'e' 'm'o'r'f''''''''''m'o'r' 's'm'e'l'b'o'r'p' 'g'n'i'n'n'a'c's' 'r'a'e'n'i'l' 'r'u'o' 'f'o' 'h't'o'b' 's'e'v'l'o's' 's'i'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 'r'e'b'm'u'n' 'e'h't' 'e'r'o't's' 'e'w' 'e'e'r't'-'b' 'e'h't' 'f'o' 'e'd'o'n' 'h'c'a''''c'e' 't'A'''''''''''' 'e'e'r't'-'b' 'e'h'T'''''''a' 's'i'h'T' '.'s'm'e't'i' 'e'h't' 'e'r'o'''''''o'r't's' 'o't' 't's'i'l' 'd'e'k'n'i'l' 'a''''''''''' 'f'o' 'd'a'e't's'n'i' 'e'e'r'T'-'B' 'a' 's'e's'u' doesn't'''''''''''''' 't'''n's'e'o'd' 't'I' '-'n'n':'t'u'b' 's'j'y' 's'a' 'e'm'a's' 'e'h't' 'y'l'l'a'i't'n'e''''n's's'e' 's'i' ''''''''''''''''''''''''' 's'''s'j'y' 's'e'o'D' '-'n'n':'''''''''''''''''l'l'a' 's'a'h' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 's'i'h'T' '.'t's'u'R' 'n'i' 'n'o'i't'a't'n'e'm'e'l'p'm'i''''''''''t'n'e'm'l'e'p'm'i' 'T'D'R'C'''''''''''''''n'o'i't'a't'n'e'm'e'l'p'm'i' 'r'e'h't'o'n'a' 't'e'y' 'g'n'i'd''''d'l'i'u'b'''''''''''a' 'g'n'i'd'i'l'u'b' 'y'l't'e'''''''e't'i'u'q' 'n'e'e'b' 'e'v'''I' ')'/'(']'e'r'e'H'['''''''e'['n'n'h't' 'n'o' 'n'e'v'e' ',''''''' '.'e'r'o'm' 'y''''''''''o'm't'n'a' 't'p'i'r'c's'a'v'a'j''''''''p'p'a' 'b'e'w' 'e't'i'r'w' 'o't' 'd'e'e'n' 't'''n'o'd' '''''''''''''''''''.'y'l'b'm'e's's'a'b'e'w' 'e'v'a'h' 'e'w' ''''''''''''''''''' 'e'r'o'm' 'e'n'o' 's'''e'r'e'h't' ','k'o' 's't'i' 't'u'B''''B'n'n''''a'h' ''e'h't' 'r'e'v'o' 'l'l'a''''o' ''o' 'e'h't' 'e's'u'f'n'o'c' '''''''''''''''''''''''''''''''''''''e'r'o''''''''''''''n'o'i't'a't'n'e'm'g'a'r'f' ''m' 'd'n'a' 's't'c'e'j'b'o' '''''''''''''''''''''''''''''''''''''''''''e'h't' 'f'o' 't'r'o's' 's't''''s''''''' 'n'I' '.''''''''''''''''''''''''s'e'r'u't'c'u'r't's' 'a't'a'd' 'r'e'v'e'l'C' '.''''y'r'o'm'e'm' 'd'e't'n'e'm'g'a'r'f' 'e'r'o'm' 'n'e'v'e' 'h't'i'w''''a'r'f' 'p'u' 'd'n'e' 'e'w''''''''''''''''''''''''''''' 'o't' 's'u' 's'e'c'r'o'f''''''''''''''(' 's'u' 's't'h'g'i'f' 'e'g'a'u'g'n'a'l' 'e'h't' ','t'p'i'r'c's'a'v'a'j' 'n'i' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'y'c'n'a'f''''e' 'o't' 't'n'a'w' 't'''n'o'd' 'e'w' 'd'n'a' 't'n'e'm'u'c'o'd' 'e'h't' 'd'n'u'o'r'a' 'p'o'h' 's'e'm'i't'e'm'o's' '*'s'e'o'd'*' 'r'e's'u' 'e'h't' ','e'r'a' 'y'e'h't' 's'a' 'r'e'v'e'l'c' 's'a' '-' 's't's'i'l' 'd'e'k'n'i'l' 'm'o'r'f' 'y'a'w'a' 'e'v'o'm' 'o't' 'd'e'e'a'd' '''''''''''''''''''''''''''''''''''''n' 'e'w' 'd'n'A' '.'r'e'h't'e'g'o't' 's'd'l'e'i'f' 'e'h't' 'l'l'a' 'e'v'o'm' 'o't' 'd'e'e'n' 'e'w' ','r'e't's'a'f' 'n'u'r' 'o'T''''''''' 'y'l'l'a'e'd'I'n''n''.'''s'e'g'a' 'e'k'a't' 'd'l'u'o'w' 't's'i'l' 'e'l'o'h'w' 'e'h't' 'g'n'i'd'a'e'R' ''''''.'n'e'd'd'i'h' 's'i' 't'i' 'n'o' '''k'l'i'm''' 'h't'i'w' 'e't'o'n' 'e'h't' 'e's'u'o'h' 'r'u'o'y' 'n'i' 'e'r'e'h'w' 'g'n'i'b'i'r'c's'e'd' '''''''''''''''''''''''t'n'u'h' 'r'e'g'n'e'v'a'c's' 'e'l't't'i'l' 'a' 'd'a'h' 'u'o'y' '''k''''i'l'i'M''''i''''''''''l'i'm''' 'g'n'i't'i'r'w' 'f'o' 'd'a'e't's'n'i' 't'u'b' ',' ''''''''''''''''''t's'i'l' 'g'n'i'p'p'o'h's' 'r'u'o'y' 'f'i' 'e'k'i'l' 's't'I' ' '*''s'i' 'a''''''''''''''''''''''''''''''''''y'l'l'a'u''''''''''''''t'i' 'h'c't'e'f''''''''''''''''''''w'o'l's' 'o's'l'a''''a' 's'i' 'h'c'i'h'w' ','' 'o'g' ''s'u' 'r'e't'u'p'm'o'c' 'r'u'o'y' ','t'i' 'd'a'e'r' 'o'T''Y'*''t'a'd' '''''' ''''''''''''''''''''''y'''n''n'''We can't fix this in javascript. If we make our data structures more complex, we run into the same limitations Automerge has with immutablejs - which is, if we make our data structures complex,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ','x'''','e'l'p'm'o'c''''o' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'r'u'o' 'e'k'a'm' 'e'w' 'f'i''''' 'e'h't' ','s'i' 'h'c'i'h'w' '-' 's'j'e'l'b'a't'u'm'm'i' 'h't'i'w' 's'a'h' 'e'g'r'e'm'o't'u'A' 's'n'o'i't'a't'i'm'i'l' 'e'm'a's' 'e'h't' 'o't'n'i' 'n'u'r' 'e'w' ','x'e'l'p'm'o'c' 'e'r'o'm' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'r'u'o' 'e'k'a'm' 'e'w' 'f'I' '.'t'p'i'r'c's'a'v'a'j' 'n'i' 's'i'h't' 'x'i'f' '''''''''''''''''''a'v'a'j' 'n'i' 'r'e't't'e'b' 'o'd' 't'''n'a'c' 'e'W'n'n'l'l'a'u's'u'l'l'i'w' ''e'h't' 'l'l'A'n''n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''''''''''''''''','l'l'e'w' ','e'r'e'h't' 's'i' 'a't'a'd'''e'm' 'e'h't' 'e'c'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m'''o'r'f' 'd'''''''''''''''''''''''f'i' ','''''''''''e'k'a't' '''''f'i' 'e'm'i't' 'r'e't'u'p'm'o'c' 'n''''''' 'f'I'''''' 'n'I' ''a'e'r' 'o't' 's'd'e'e'n' 'r'e't'u'p'm'o'c' 'r'u'o'y' ','''a't'a'd' 't'a'h't' 'h'c't'e'f'''''d'a'e'r' 'o't' 'r'e'd'r'o' 'n'I' '.'e'r'e'h'w'y'n'a' 'e'b' 'd'l'u'o'c' 'r'e't'n'i'o'p' 'a' 'f'o' 'd'n'e' 'r'e'h't'o'''''''o'e' 'e'h't' 't'a' 'a't'a'd' 'e'h'T''o' 'd'n'A'n'')'w'o'l's' 'o's'l'a'(' 'g'n'i'''p'e'e''''''''''''''''''''''''a't'a'd' 't'a'h't' 'h'c't'e'f' 'd'n'a' 'o'g' 'k'''' 'k'o'o'b' 'e'm'o's' 'o'd' 'd'n'a' ''''''' ','y'r'o'm'e'm' 't'a'h't' 'k'c'a'r't'''''''''''' 'd'n'a't's'r'e'd'n'u' 'o't' 's'd'e'e'n' 'r'o'''''''d'e't'c'e'l'l'o'c' 'e'g'a'b'r'a'g' 'e'h'T' '.'w'o'l's' 's'i''''''l's' 'i's' 'h'c'i'h'w' ',''''''''''h't'i'w' 'y'r'o'm'e'm' 'e't'a'c'o'l'l'a' 'o't' 's'a'h' 'r'e't'u'p'm'o'c' 'e'h't' ','e'r'e'h't' 't'e'g' 'o'T'n'n'''''''''e''' ','e'e'''''' 't'a'h't'S'.'s'i'h't' 's'e'''t'a'h' 'r'e''''''''''''''''''''''''''''''''''''''''''''''''''''' 'y'l'l'''a'''''''a't'a'd' ''''''''''''''''''''''''''''''''k'o'o't' 's'd'''''''''''''''''''''''''y'r'o'm'e'm' ''''''' ''2't'u'o'b''n'i'a'm'''''''m'a' 'm'o'r'f' 'g'n'i'd'a'e''''''n'n''r' ''a'e'r' 'e'h'c'a'c' '1'L''''''''''''''''''''''''''''''''''''''''','s'd'n'o'c'e's' '5'.'0' 'k'o'o't' 's'e's's'e'c'c'a' 'y'r'o'm'e'm' 'l'a'm'r'o'n''''''' 'y'r'e'v'e' 'f'I' '.'''''''''e'r' ''u's'u'''''''''''' 'o't' 's'd'e'e'n' 'r'e't'u'p'm'o'c'''''''e't'u'p'o'c''''o' 'r'u'o'y' ','r'e't'n'i'o'p' 'a' 'w'o'l'l'o'f' 'o't' 'r'e'd'r'o' 'n'I't'u'p'm'o'c' 'e'h'T''''''''''''''''''''''''''''''''.'r'e't'u'p'm'o'c' 'e'h't' 'r'o'f' 'l'u'f'w'a' 's'i' 's'i'h'T'n''n'i'Each part of the data structure is connected to the rest via pointers. In modern computers, following pointers is really slow. If the computer did 1 clock cycle every second, reading data from main memory would take a [couple of minutes](https://gist.github.com/hellerbarde/2843375).''''''0'0'1'''tem: ''''''''''']'2' ','''e'k'i'm'''''''''e's'[''''hello', isDeleted: fa'''''''''''''''''''''''''''''''''''''y'l'''''''''''''''''''''d'i'd' 'r'e't'u'''''y'''r'e'v'e''''''''''''''''''''''''''''''''''''''''''['''''''''''''''''''https://gist.github.com/hellerbarde/284337''' '.')'5'(']'''s'e't'u'n'i'm' 'f'o' 'e'l'p'u'o'c'''''''''''''''.'s'e't'u'n'i'm' 'w'e'f' 'a' '''''e'k'a't' 'd'l'u'o'w' 'y'r'o'm'e'm' 'n'i'a'm' 'm'o'r'f' 'a't'a'd' 'g'n'i'd'a'e'r'''p'm'o'c' 'e'h't' 'f'''''' 'g'n'i'o'd''I''''''''''''''''''''t' 'r'e't'u'p'm'o'c' 'e'h't' 'y'l'a'e'r' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(' 'r'e't'n'i'o'p' 'a' 'g'n'i'w'o'l'l'o'f' ','d'n'o'c'e's' '1' 's'a'w' 'e'l'c'y'c' 'k'c'o'l'c' '1' 'f'I' '.'w'o'l's' ''''''' 's'y'r'e'v' 'y'l'l'a'u't'c'a' 's'i' 's''''e'r'e't'n'i'o'p' 'g'n'i'w'o'l'l'o'f' ','s'r'e't'u'p'm'o'c' 'n'r'e'd'o'm' 'n'I'''''''''''''''' ','y'l'e't'a'n'u't'''''''n'u'r'o'f'n'U' '.'s'r'e't'n'i'o'p' 'a'i'v' 't's'e'r' 'e'h't' 'o't' 'd'e't'c'e'n'n'o'c''''''''''''''''''''''''t's'e'r' 'e'h't' 'm'o'r'f' 'd'e't'a'r'a'p'e's' 's'i' 'e'r'u't'c'u'r't's' 'a't'a'd'''''''t'c'e'j'b'o' 'e'h't' 'f'o' 't'r'a'p' 'h'c'a'E''''''''''''''' '''''''''''''''''''''''''''''''''''''''Note how each''''''''''''''' 'h'c'a'e' 'w'o'h' 'e't'o'N'n'n''''''''''.'.'.'m'a'r'g'a'i'D' '>'n'n':'s'i'h't' 'e'k'''''''k'e'i'l' 's'k'o'o'l' 'y'l'l'a'u't'c'a' 't'c'e'j'b'o' 's'i'h'T'n'n'lse, id: ['seph', 0], seq, parent: null ''''`'`'`'n'}'n'`'`'`'n'p'i'r'c's'a'v'a'j' 'n'i' '''''''''''''''''''''''''''''''''''''''n'n':'s'i'h't' 'e'k'i'l' 't'c'e'j'b'o' 'n'a' ','t'p'i'r'c's'a'v'a'j' 'n'I'n'n'.'y'r'o'm'e'm' 'f'o' 'e's'u' 'r'e't't'e'b' 'e'k'a'm''''''''''''y'r'o'm'e'm' 'k'c'a'p' 'o't'''''''''''''''''''''''''''''''''''''''''''y'r'o'm'e'm' 'n'i' 's'd'a'e'r' 'r'e'w'e'f' 'o'd' 'o't' 'r'e't'u'p'm'o'c' 'e'h't' ''' '''o't' 't'n'a'w' 'e'w' 'f'I'''''''''''''''''''' 'd'n'a' ',''''.'y'd'a'e'r'l'a' '''','''' 'd'e'z'i'm'i't'p'o' 'l'l'e'w' 'y'r'e'v' 's'i' 's'j'Y' 'I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'o' 'r'e'b'm'u'n' 'e'h't' 'g'n'i's'a'e'r'c'e'd' 't'r'a't's' 'o't' 'd'e'e'n' 'e'w' ','e'r'o'm' 'e'c'n'a'm'r'o'f'r'e'p' 'e'v'o'r'p'm'i' 'o'T' '.'s'i'h't' 'n'a'h't' 'r'e't's'a'f' 'h'c'u'm' 'o'g' 't'''n'o'w' 't'p'i'r'c's'a'v'a''''''''''''' 't's'u'J''''''''''''t'''n's'i' 'e'r'e'h'T'''''''''''''''''''o'f'r'e'p' 'g'i'b' 't'x'e'n' 'e'h'T'n'n's't's'i'l' 'd'e'k'n'i'l' 'm'o'r'f' 'y'a'w'a' 'g'n'i'v'o'm' 'd'n'a' ','t'p'i'r'c's'a'v'a'J''''''''f'c's'a'v'A'J' 'm'o'r'f' 'y'a'w'a' 'g'n'i'v'o'M' '#'#'#'n''n'c''''''k'c'i'r't''i'h't' ','e'n'o'd' 'd'n'a' 'd'i'a''''''''''''' 'd''''''''''''''''''''''''''''''''''''''''''''s'i' 't'l'u's''''''''''''''''''''''''''''''''''':'M'A'R' 'h'c'u'm' 's'a''''o' '%'0'1' 't'u'o'b'a''''g'n'i's'u' 'e'r'''e'w' ''e'r' 'e'h'T' '.''''''''''''''''''' 'd'n'a' ','t'a'e'r'g' 'm'r'o'f'r'e'p' 's'e'g'n'a'h'c' 'e's'e'h'T''i'a's' 's'i' 'l'l'a' 'n'e'h'w'p's' 'e's'e'h't' 'f'o' 'e'n'''''''''' 'n'e'o''''''''''i'l' 'n'a'p's' 'a' 'f'o' 'e'l'd'd'i'm' 'e'h't' 'n'i' 'g'n'i'h't'e'm'o's' 's't'r'e's'n'i' 'r'e't'a'l' 'r'e'''s'''''B'M'''1'.'0''''''u' 'e'h't' 'f'i' 't'u'o' 'k'c'a'b' 's'm'e't'i' 't'i'l'p's' 'o't' 'c'i'g'o'l' 'l'a'i'c'e'p's' 'e'm'''''''e' 'o's' 'd'e'e'n' 'l'l'''e'w' 'd'n'A' '.'''i'''''''i'''''''''''''s'd'l'i'e'f' ''t's'a'p' 'y'l'l'a'n'i'F' '''''''''''''k'n'i'l' 'a' 'n'i' 't'u'B'n'n'Deleted:'2''' '''2'false, id']': ['seph', 0], seq, par'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'''f''''u'B' '.'s'i'h't' 'e'k'i'l''''''''''i'l' ''''r'u'o' 'I''p'u' 'e'n'i'l'''''''''''''''r'e''''''''''''''''''''''''''''''''''''''''''''''':'M'A'R' 'h'c'u'm' 's'a' 'h't'0'1'/'1' 'r'e'v'o' 't's'u'j' 's'e's'u' 'd'n'a' ''''''''''''''''''''''''''''''''''''''':'r'e't's'a'f' 'x'0'3' 's't'i' '-' '''':'*'t'a'e'r'g'*' 's'm'r'o'f'r'e'p' 't'i' 'd'n'A'n'n''''| Test | Time taken | RAM usage |n| -------------------------- | ---------- | '''''B'M' '8''''7'2'--------- |n| automerg'| reference-crdts (automerge / yjs) | 31s | |n'''''''''''''''''''''''''''''''''' ' '''''s'7'9'.''''6''''7'.''''B'M' '3'0'''''' '''''''''.'0' '''''' ''' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's'j'Y'e @ 1.0.0-preview2 | 291s | 880 MB |n| reference-crdts (automerge / yjs) | 31s | |n| JS baseline | 0.61s | |n'n'n'''t'f'a' 'e'n'o' 'e'm'o'c' 's'm'e't''''i''''''''''e'm't'i' 'e'h't' 'l'l'a' 'n'e'h'w' 's'k'r'o'w' 'y'l'n'o'''''''o'i' 's'i'h't' '-' 's'i'h't' 'e'k'i'l' 't's'i'l' 'e'l'o'h'w' 'e'h't' 'e's'p'a'l'l'o'c' 't'''n'a'c' 'e'W' 'ent: ''''' 's'i'h't'['sep'''''''''''''n'o'i't'a'z'i'm'i't'p'o' 'h', 'l'''1 },' { item: '3''''h', isDelet'']'2'''ed: false, id: ['seph', 0], seq, parent: ['se'o'''ph', 1 },n'4''''n'n''']'3'''n'n'''''''''''''''''':''```javascriptnstate = [n { item: '''''o'l'l'e'h', isDeleted: false, id: ['seph', 0], seq, parent:'' nul''Aaah much better! For our benchmark, this reduces the number of items in the list from 180 000 down to about 40 000. And it''''''''''''''''''''''''''''''''''''','t''''k'r'a'm'h'c'n'e'b' 'r'u'o' 'r'o'F' '''''''''''''''''''''''''''''''''''''''''''''' 't'i' 'd'n'A' '.'''0'0'0' '0'4' 't'u'o'b'a' 'o't' 'n'w'o'd' '0'0'0' '0'8'1' 'm'o'r'f' ''''''''''''''''''''''''''''''''''''''''''''t's'i'l' 'e'h't' 'n'i' 's'm'e't'i''i' 'f'o' 'r'e'b'm'u'n' 'e'h't' 's'e'c'u'd'''''''c'u'e'r' 's'i'h'T' '!'r'e't't'e'b' 'h'c'u'm' 'h'a'a'A'n''n'l },n { item: 'e', isDeleted: false, id: ['seph', 1], seq, parent: ['seph', 0] },n { item: 'l', isDeleted: false, id: ['seph', 2], seq, parent: ['seph', 1] },n { item: 'l', isDeleted: false, id: ['seph', 3], seq, parent: ['seph', 2] },n { item: 'o', isDeleted: false, id: ['seph', 4], seq, parent: ['seph', 3] },n]n```'n''s'e'r'o't's' 't's'u'j' 's'j'Y'n'n' { item: 'h''''a', isDeleted: false, id: ['seph', 0], seq, ''''''''''1' ''','''h'p'e's'''['''parent: null },n { i'e'''tem: 'X', isDeleted: false, id, seq, parent: ['seph', 0] },n'l''' { item: '''''e'''s'l'a'f''b', isDeleted: true, id, seq, parent:' { item: 'l', isDeleted: false, id, seq, parent: [..] },n' ['seph','o''' 0'l'''] },n { item: 'c', isDeleted: fal''s''e, id, seq, parent: [..] },n ...n]n```n'n'n':'g'n'i'r'o't's' 'f'o' 'd'a'e't's'n'i' ','''o'l'l'e'h''' 'e'p'y't' 'I' 'f'I' Instead of typing'' a''Yjs does these two optimizations and one''''' 'e'r'o'm' bonus optimizat''i''on: Humans also type in runs of characters. Instead o'''''''' ' 'a'''''''' 'a' 'g'n'i'p'y't' 'f''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 'd'a'e't's'n'I' '.'s'r'e't'c'a'r'a'h'c' 'f'o' 's'n'u'r' 'n'i' 'e'p'y't' 'o's'l'a' 's'n'a'm'u'H''''U'''''''''''''''''''g'n'i'r'o't's' 'f'o' 'd'a'e't's'n'I' ':'n'o'i't'a'z'i'm'i't'p'o' 's'u'n'o'b' 'e'n'o' 'd'n'a' '''' 's'n'o'i't'a'z'i'm'i't'p'o' 'o'w't' 'e's'e'h't' 's'e'o'd' 's'j'Y'n'n'.')'k'r'o'w' 'o't' 'g'n'i'n'n'a'c's' 'e'h't' 'r'o'f'''' 'o't' 't's'i'l' 'd'e'k'n'i'l'-'y'l'b'u'o'd' 'a' 'e'b' 'o't' 'e'v'a'h' 'o't' 'g'n'i'o'g' 's't'I'(''''''''''s't'I' '.'y'l'b'u'o'd''''''''''''t's'i'l' 'd'e'k'n'i'l' 'a' 'h't'i'w' 'y'a'r'r'a' 'e'h't' 'g'n'i'c'a'l'p'e'r'''''''l'p' 'y'b' 't'a'h't' 'o'd' 'n'a'c' 'e'w' ','l'l'e'W''''''''''''''''''y'b' 't'a'h't' 'o'd' 'n'a'c' 'e'W' '.'y'l't'n'e'i'c'i'f'f'e' 't'r'e's'n'i' 'o't' 'd'e'e'n' 'e'w' 'n'e'h'T'n'n'''''''''''''''''''''''''''''''''''''.'e'c'i't'c'a'r'p' 'n'i' 't'a'e'r'g' 's'k'r'o'w' 't'i' 't'u'b' ','y'g'd'o'd' 'f'o' 'd'n'i'k' 's'd'n'u'o's' 's'i'h'T' '''' '.'''''''''''''''''''i'f' 'o't' 'e'r'e'h't' 'm'o'r'f' 's'd'r'a'w'k'c'a'b' 'r'o' 'd'r'a'w'r'o'f' 't'i'b' 'a' 'n'a'c's' 't's'u'j' 'd'n'a' '''l'o's' 'n'a'c' 'e'W't'o'b' 'x'i'f' 'n'a'c' 'e'W'n''n'''L'n''n''t'c'a'r'a'h'c' 'n' 'g'n'i't'r'e's'n'I''''''''''''.')'2'^''''%'n'('O' 's't'I' 'e'''u'r't' 'y'l'l'a'u't'c'a' 's't'a'h't' 'f'i' 's'w'o'n'k' 'o'h'w' 'd'n'a' ',''t'r'a'p' 's'i'h'T''''' 's't'I''''f'o'O' '' '''.'d'r'a'w'r'o'f' 'e'c'a'p's' 'e'c'n'o' 'l'g'n'i's'' 'd'n'A'n'n'!'s'e'k'i'Y' '!'n'o'i't'i's'o'p' 't'r'e's'n'i' 'e'h't' 'd'n'i'f' 'o't' 's'm'e't'i''''''''''' '0'0'0' '0'6' 't'u'o'b'a' 'n'a'c's' 'o't' 'e'v'a'h' 'y'l'b'a'b'o'r'p' 'l'l'''e'w' ','0'0'0' '0'5' 'n'o'i't'i's'o'p' 't'a' 't'r'e's'n'i' 'y'e'h't' 'f'I'''''''''''''''' 'o't' 'g'n'i'o'g' 's't'a'h'T'n'n'.'t'n'e'r'a'p' 's't'i' 'e'm'a'n' 'o't' 'y'b'r'a'e'n' 's't'a'h'w' 'e'e's''''l'''''''''' 's't'i' 't'a'h'w' 'd'n'a' ','s'e'o'g' 'm'e't'i' 'w'e'n' 'e'h't' 'e'r'e'h'w' 't'u'o' 'e'r'u'g'i'f' 'o't' ')'s'm'e't'i' 'd'e't'e'l'e'd' 'g'n'i'p'p'i'k's'(' ''''''''n'i'f' 'o't' 't'n'e'm'u'c'o'd' 'e'h't' 'h'g'u'o'r'h't' 'n'a'c's' 'o't' 'd'e'e'n' 'l'l'''e'W' '''' '?'t'a'h't' 's'i' 'h't'r'a'e' 'n'o' 'e'r'e'h'W''''''''''''''''''''''''''''''''.''''''' ','''''''''''''''''' 'g'n'i'd''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''e'w' '''''''n '''.'.'.' ','''''''''''d'e'e'n' ''t'u'b' 'e'v'o'b'a' 's'i'h't' 'n'o'i't'n'e'm' 't'''n'd'i'd' 'I'''''''''''''''''''''e'v'o'b'a' 'e'k'i'l'n'u' 'd'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'''.'n'i' 'm'e't'i''''s'e'o''''''g'n'i's'u' ''d'''''' ',''''' 'w'e'n'''''s'e'o'd' 'e'h't' '''''''''i' 'e'c'i'l'p's' 'd'n'a' 't's'i'l' 'e''''''''''''''''s'i'l'e' 'h''''''''''''n'e'e'b' 't'''n'e'v'a'h''t' 'n'i' 't'n'e'r'a'p' 't'a'h't' 'd'n'i'f' 'o't' 'd'e'e'n' 'e'w' ','t'r'e's'n'i' 'e'w' 'n'e'h'w' 'n'e'h't' 'd'n'A' ''''n'n''''.'e'b' 'd'l'u'o'h's' 't'n'e'r'a'p' 's't'i' 't'a'h'w' 't'u'o' 'e'r'u'g'i'f''*''''*'''''''''.'w'o'l's' ')'n'('O' ''''''''''''''''''''''''''''''''''' 'm'e't'i' 'e'h't' 'm'o'r'f' 'D'I' 't'n'e'r'a'p' 's't'i' 'y'p'o'c''''''''''''''''''''''p' 's't'i' 't'a'h'w' 't'u'o' 'e'r'u'g'i'f'''''''''''''''''''''t'n'e'r'a'p' 's't'i' 't'a'h'w' 'w'o'n'k' 'o't' 'd'e'e'n' 'e'''''','l'l'e'W'w' 't'a'h't' 'r'o'f' 'd'n'a' '-' 'm'e't'i' 'w'e'n' 'a' 'e't''V'a'e''''''' 'y'l'l'a'e'''''''''''''''''''''''''''''''''take about as many steps''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''x'i'f' 'x'i'f' 'y'x'i'F' '#'#'#'#'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''simplest''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'r'e'v''''''''''''''''''''''''''''''''''''''''''''''''''e'r'e'h'w''''''''''''''''g'n'i'h't'e'm'o's' 'd'e'p'y't' 'r'i'a'p' ')'n'o'i't'i's'o'p' ','x'e'd'n'i'('''''''''''''''''i's'o'p' 'd'n'a' 'x'e'd'n'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'k'c'a'r't' 't's'u'j' 'n'a'c' 'e'w' 'n'o'i't'i's'''''''t'i'o'p' 'r'o's'''''''r'o'r'u'c'''''''t'r'e's'n'i' 'd'l'o' 'e'h't' 'o't' 'e's'o'l'c' 't'r'e's'n'i' 'y'e'h't' 'f'i' ',''''''''''e'w' 'n'i'a'g'a' 't'r'e's'n'i' 'y'e'h't' 'n'e'h'w' 'd'''''''''' 'd'a'n'a' ','d'e't'r'e's'n'i' 'r'e's'u' 'e'h't' 'n'o'i't'a'c'o'l'''''''''l' '''''''d'e't'r'e's'n'i' 't's'a'l' 'e'h't' 'e'h'c'a'c' 'n'a'c' 'e'W' '''''M' '.'h'c'u'm' 't'a'h't' 't'n'e'm'u'c'o'd' 'e'h't' 'd'n'u'o'r'a' 'e'v'o'm' 'y'l'l'a'u't'c'a' 't'''n'o'd' 'y'e'h't' ','g'n'i'p'y't' 's'i' 'n'a'm'u'h' 'a' 'n'e'h'w' 'y'l'l'a'u's'U''''''''''''''''''''''''d'e't'r'e's'n'i' 'e'r'a' 's'm'e't'i' 'n'e'h'W''''''''''m'e't'i' 'n'h'e'W'''''''''''''''''' 'n'a' 'd'n'i'f' 'o'T' ': Replacing the array with a linked list.nnThis has a few benefits:nn-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-''' '-'n'n':'s't'i'f'e'n'e'b' 'w'e'f' 'a' 's'a'h' 's'i'h'T'n'n'.'t's'i'l' 'd'e'k'n'i'l' 'a' 'h't'i'w' 'y'a'r'r'a' 'e'h't' 'g'n'i'c'a'l'p'e'R' ':'t's'e'l'p'm'i's''''''''s'u'o'i'v'b'o' 'e'h't' 'h't'i'w' 't'r'a't's' 's't'e'l' 't'u'b' ','s'i'h't' 'o't' 's'n'o'i't'u'l'o's' 'w'e'f' 'a' 's'''e'r'e'''''''i'e'h'T'''''''' 's'j'Y'n'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'r'e'w'o'l's' 'g'n'i't't'e'g' 'd'n'a' 'w'o'l's' 's't'I' '.'w'o'l's' 't's'u'j' 't'''n's'i' 's'i'h'T'''''''''''n'o'l' 'e'h't' 'o'S' '.''''''''''' 'e's'u'a'c'e'b''''s'(' 't'n'e'm'u'c'o'd' 'e'h't' 'n'i' '*'n'e'e'b' 'r'e'v'e'*' 'e'v'a'h' 'h'c'i'h'w' 's'r'e't'c'a'r'a'h'c' ','l'l'e'W' '.'t'n'e'm'u'c'o'd' 'e'h't' 'n'i' 's'r'e't'c'a'r'a'h'c''''i' 'e'r'a' 'e'r'e'h't' 's'a' '''''p'o'o'l'''''''''''''''''''''''''' 's'p'e't's' 'y'n'a'm'''''' 'y'n'm'a' 's'a' 't'u'o'b''''s'a' 'e'k'a't' 'o't' 'd'e'e'n' 'e'w' ','t'r'e's'n'i' 'e'w' 'e'm'i't' 'h'c'a'E'''''''''''''e'm'i't' 'h'c'a'e' 'o'S''r''r'c' 't's'r'i'f'''''''''''t'u'o' 'e'r'u'g'i'f' 'o't' 'd'e'e'n' 'e'W' ''a' ','h'O' '''''''''''e'r'''e'w''''g'n'i''' 'd'n'A'm'''''s'i'h''''''''''s'h'i't'e't'.''''''''''''''''''' 's'i'h't'''''''''o't' 'x'e'd'n'i' 'e''''i'h't'''o't' 'd'''''''''' 'e'h't' 'y'p'o'c'e'e'n' 'e'W'''''i'':'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'h't' 'd'n'a' ','t'i' 'n'i' 's'm'e't'i' '0'0'0' ''''0'0'0'1' 's'a'h''0' '' 't'n'e'm'u'c'o'd' 'e'h't' 'e'n'i'g'a'm'i' 's't'e'L'n'''''':'s'i'h't'''' { item: 'X'''''''''''''''''' ','e's'l'a'f' ':'d''''D'e't'e'l'e'D's'i'', '''''''''' 'd'e'e'n' 'e'w'''''''''''''''''''''''''''''''''''''')'!'m'e't'i' 'g'n'i'd'e'e'c'e'r'p' 'e'h't' 'f'o' 'd'i' 'e'h't' ''''''''''''''''''''' 'h't'i'w' 's'i'h't' 's't'n'e'm'e'''l'p'm'i''s't''''''''''' 'h't'i'w' 's'i'h't''''''''''h't' 'i'('''''''o'(' ''''''d'n'W''a''''''''''''' ' ''t'0''s'i'l' 'e'h't' 'n'i' ','id, seq, parent: ['seph', 0]' ' ',''' '0'}'e','s'n'l'''a' 'f''' 'e':'''d'k'i'''l'D'''e' 't''' '0'''''e' ''u'r't'''e','l'''' 'e'''0' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''The''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''doc.content.splice'destIdx''''''0'0'0'''''''''''''''' ''''''''''''''''''''''''e'm'l'p'm'i' 's'i''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'''''''''''''''''''g'n'i'm'u'''''''''' 'y'l'l'a'u't'c'a's's'a' 's'i'''' 's't'i'' 's'i'h'T'w'o'l's' 'o's'l'a' 's'i' 's'i'h'T' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-' ''''''''''''''''''''''')'!'x'e'l'p'm'o'c' 's'i' '8'v' '-' 's'e'o'd' 'y'l'l'a'u't'c'a' 't'i' 't'a'h'w' 's'w'o'n'k' 'o'h'W' '.'s't's'i'l' 'r'o'f' 'y'l'l'a'n'r'e't'n'i'''''''''''''''''' '.'s't's'i'l' 'r'o'f' 'y'a'r'r'a' 'n'a' 's'e's'u' 't'p'i'r'c's'a'v'a'j' 'f'i' ','l'l'e'W'(' '.'e'c'a'p's' 'e'n'o' 'y'b' 'd'r'a'w'r'o'f' '0'0'0' '0'6' 'n'o'i't'i's'o'p' 'm'o'r'f' 'm'e't'i' 'y'r'e'v'e' 'e'v'o'm' 'o't' 's'd'e'e'n'''''''''e's'u' 't's'i'l' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'd'e'e'n' ')'y'l'l'a'u't'p'e'c'n'o'c'(' 't'p'i'r'c's'a''''s'v'a'j' ','s'm'e't'i' '0'0'0' ''''''' '0'0'0'1' 's'a'h' 'y'l't'n'e'r'r'u'c' 'y'a'r'r'a' 'e'h't' 'f'I''''''r'e's'n'i' '/'/' '0'6'(destIdx, 0, newItem''''''n'n'`'`'`'n')'n't'p'i'r'c's'a'v'a'j'`'`'`'n'n':'n'i' 't'i' 'e'c'i'l'p's' 'o't' 'd'e'e'n' 'e'w' ','n'o'i't'a'c'o'l' 'w'e'n' 'e'h't' 'd'n'u'o'f' 'e'v'''e'w' 'r'e't'f'a'''''''h't' 'n'''''' 'n'e'h'T'n'n'.'w'o'l's' 'e'b' 'o't' 'g'n'i'o'g' 's'y'a'w'l'a' 's'i' 's'i'h't' 't'u'b' ','n'a'c' 't''''''' 'c'i' 't'a'h'w' 'o'd' 'l'l'i'w' 'r'e'z'i'm'i't'p'o' 's'''t'p'i'r'c's'a'v'a'J''''''''''''''''''''w'o'l's' 'y't't'e'r'p''''l' 's'i' 's'i'h'T' '''',''D''e'''s's'' ''l'i'''a'f'o'f'' ''''''''''''''''''''''''''''''''''''''''''''''''''''''My implementation does a linear scan through the document to find this location.'''''''''''''''y'a's' 'o't' 's'i'''''''''''''''e's'u' 'I' ','s'n'a'e'm' 'h'c'i'h'W''I' That sounds fancy - its a `for()` loop. We count all the not-deleted items until we've counted past 5000 items which aren't deleted and ret'''''''''''' 'n'o'i't'a'n'i't's'''e'd'urn t''h''e resulting index. If 1000 characters have been deleted before position 5000, the index position might be 6000. Unfortunately for us, this is'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''`'''''''`'s't'i' 't'u'b' '-' 'y'c'n'a'f' 's'd'n'u'o's' 't'a'h'T' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'g'n''''''''''''''''''''s'r'e't'c'a'r'a'h'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'i' 's'i'h't' ','s'u' 'r'o'f' 'y'l'e't'a'n'u't'r'o'f'n'U''''''''''r'o'f'n'u' 't'u'B' '''''''''''''.'0'0'0'6' 'e'b' 't'h'g'i'm' 'n'o'i't'i's'o'p' 'x'e'd'n'i' 'e'h't' ','0'0'0'5' 'n'o'i't'i's'o'p' 'e'r'o'f'e'b' 'c''''''''''''''''''''''''d'e't'e'l'e'd' 'n'e'e'b' 'e'v'a'h' 's'm'e't'i' '0'0'0'1' 'f'I' '.''''''''''''''''''''i'b' 'e'b' 'l'l'i'w' 'h'c'i'h'w' '-' ''''''''''''''''''''''0'0'0''''5'5'5' 'g'E'(''''E' '.'''''''''''''g'e'(' ''i't'l'u's'e'r''''''''' 'x'e'd'n'i' 'e'h't' 'n'r'u't'e'r' 'd'n'a' 'd'e't'e'l'e'd' 't'''n'e'r'a' 'h'c'i'h'w' 's'm'e't'i' '0'0'0'5'''''''0'1' 't's'a'p' 'd'e't'n'u'o'c' 'e'v'''e'w''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'l'i't'n'u' 's'm'e't'i' 'd'e't'e'l'e'd'-'t'o'n' 'e'h't' 'l'l'a' 't'n'u'o'c' 'e'W'''''''''' 'e'w' '.'p'o'o'l' ')'('r'o'f' 'a' 's't'I' '.'n'o'i't'a'c'o'l' 's'i'h't' 'd'n'i'f' 'o't' 't'n'e'm'u'c'o'd' 'e'h't' 'h'g'u'o'r'h't' 'n'a'c's' 'r'a'e'n'i'l' 'a' 's'e'o'd' 'n'o'i't'a't'n'e'm'e'l'p'm'i'''''''''''t'a't'n'e'm'e'l'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''y'l'''''''''''n''''''m'i' 'y'M'i' 'd'e'c'i'l'p's'l'a'u't'c'a' '''''''''''''d'e't'r'e's'n'i' 'e'b' 'l'l'i'w' 'm'e't'i' 'w'e'n' 'e'h't' 'e'r'e'h'w' 'n'e'h't' 'd'n'a' '-'n'e'b' 'd'l'u'o'h's' 't'n'e'r'a'p' 's'''m'e't'i' 'w'e'n' 'e'h't''''''''w'e'n' 'r'u'o' 't'a'h'W''''''''''t' 'e'r'e'h'W' '-'n'n':'t'u'o' 'e'r'u'g'i'f' 'n'a'c' 'e'w' 'o's' ','m'e't'i' 't's'i'l' 'a' 'h't'i'w' 'n'o'i't'i's'o'p' 't'a'h't' 'e't'a'l'e'r'r'o'c'' 't''''''''''''''''t'r'e's'n'i' 'o't' 'e'r'e'h'w''''' 'e'h't'''s':''i''d'l' 'a''' '' 's''D'','i' 'e'e'''h'''s't'c'i'l''e''''a'n'l' 'f' {'e'' ' it'D':''em:''d's' 'X'i'''', id''''''''''' ','e'k'i'l' 't'a'''''''''''''''''''''''''' 's'i'h't' ','t'n''''''''''''''''''''e' 'h't' 'n'i' 'm'e't'i' 'h'c'i'h'w' 'e'm'u'c'o'd' 'l'a'e'r' 'a'''''''''''''''''''a'e'r' 'a'r' 'n'i', 'D'seq, 'e'paren't't: [''e'seph''l', 0] 'e'},'h''D'''w' 's'',''''i''u'l'c'n'I'''''''''''''''''''''''''''''''''''''''''''d'e't'e'l'e'd' 'e'r'a' 's'm'e't'i' 'h'c'i'h'w' 's'k'r'a'm''''''''l'e'd' 's'a'h' 'o's'l'a' 't'i' ','h'O''''(' '.''''''w'o'n' ','''''''''''''''''''''''''''''''''''n':'s'i'h't' 'e'k'i'l' 't'n'e'm'u'c'o'd' 'a' 'e'v'a'h' 'e'w' 'o'S'n'''```javascriptnstate = [n { item: 'a', id: ['seph', 0], seq, parent: null },n { item: 'X', id, seq, parent: ['seph', 0] },n { item: 'b', id, seq, parent: ['seph', 0] },n { item: 'c', id, seq, parent: [..] }n]n```'n''n'''So imagine the user types an 'a' in the middle of the document (at position 5000). My reference-crdts implementation needs to find''So imagine the user types an 'a' in the middle of the document (at position 5000)' '''.''''''''''''''''''''''''''''''''''''''''''' 'd'n'i'f' 'o't' 's'd'e'e'n' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.')''''0'0'0'0'5' 'n'o'i't'i's'o'p' 't'a'(' 't'n'e'm'u'c'o'd' 'e'h't' 'f'o' 'e'l'd'd'i'm' 'e'h't' 'n'i' '''a''' 'n'a' 's'e'p'y't' 'r'e's'u' 'e'h't' 'e'n'i'g'a'm'i' 'o'S'n''n'''''''''''''''''''''.'t'n'e'r'e'f'f'i'd' 's'i' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'e'h't' 'S''Well, some of the performance improvements might also come from the''''' 'o's'l'a' fact I'm n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''My reference-crdts implementation''''''''''''''''''''''''''''''''''' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 's't'd'r'c''''C'-'e'c'n'e'r'e'f'e'r' 'y'M'''''' 's'i'h'T'n'n'.'t'r'e's'n'i' 'o't' 'n'o'i't'a'c'o'l' 'e'h't' '''''''h't'g'n'i'd'n'i'F' ':'e'c'n'a'm'r'o'f'r'e'p' 'n'i' 't'o'p's't'o'h' 'w'e'n' 'a' 'e'v'a'h' 'e'w' ','n'o'i't'a't'n'e'm'e'l'p'm'i' 'r'u'o' 'n'i' 'm'h't'i'r'o'g'l'a' 't'h'g'i'r' 'e'h't' 'g'n'i's'u' 'e'r''''''''''''''''o'g' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''b'o'r'p' 'g'i'b' 'r'e'h't'o'n'a' 's'''e'r'e'h't' ','e'r'u't'c'u'r't's' 'a't'a'd''''m'e's' 'r'u'o' 'd'e'k'c'i'p' 'd'n'a' 's'n'o'i't'a'z'i'm'i't'p'o' 'o'r'c'a'm' 'e'h't' 'd'e'r'e'v'o'c' 'e'v'''e'w' 'w'o'N'n'n'''''''''''''''n'i'w' 'e'h't' 'r'o'f' 's'n'o'i't'a'z'i'm'i't'p'o' 'o'r'c'i'M' ''''''' '#'#'#'#'n'''n'n'''''''''''t'u'B' '.'ot using i'''''e'r'e'h' 'mmutablejs''''''''''''''' 'f'o' 'e'm'o's'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'j'e'l'b'a't'u'm'm'i''''''''''''e'g'r'e'm'o't'u'a' 'g'n'i's'u' 't'o'n' 'm'''I' 't'c'a'f' 'e'h't' 'm'o'r'f' 'e'm'o'c' 'o's'l'a' 't'h'g'i'm' 's'''''''''''''''''t'n'e'm'e'v'o'r'p'm'i' 'e'c'n'a'm'r'o'f'r'e'p' 'e'h't'''t'i' ','l'l'e'W'','e'm'a's' 'e'h't' 'e'r'a' 's'c'i't'n'a'm'e's' 'e'h'T' ''''''''''''''''''''''''''''''''''''''''''n'o'i't'c'n'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''3''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''o'y''''S' '.'''''''''''''''''''''''''''''''''''''''''''''''''t's'i'l' '!''a' 'h't'i'w' 'T'D'R'C' 't's'i'l' 'a' 't'n'e'm'e'l'p'm'I'''''''''''''s'u'o'i'v'b'o' 'd''''''''''''''''''''''''''''''''''''''.'e'r'e'h' 't'a'h't' 'g'n'i''''''' 'e'r'u's'a'e'm' 't'o'n' 'm'''I' 'h'g'u'o'h't' ',''''''R'C' 'n'a' ''''''''''''''''''''''''''''''''''''''''''!'s'u'i'n'e'G' '?'t's'i'l' 'a' 't'n'e'm'e'l'p'm'i' 'o't' 't's'i'l' 'a' 'e's'U' '!'t'a'e'n' 's't'I' '.'4''''''n' 'd'n'a' ','e'c'i't'c'a'r'p' 'n'i' 'e'r'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s''''''''''''''y'l'l''''''''''''e'c'i't'c'a'r'p' 'n'i' ''a'e'r' '''''s't'i' 'o'S''''I''''''''''''''''''''!'t's'a'f' 't'i' 's'e'k'a'm' 's'i'h'T' ''n'u'r'''''''''''''''.'g'n'i'h't'y'n'a' 's'e'o'd''l' 'r'e'v'e'n' 't's'o'm'l'a' 's'i''''''''x'e' 's't'e'g' 'p'o'o'l' 'e'h't'''''''''''t's'o'm'l'a' 's't'i' ','p'o'o'l' ')'e'm'i't' 'r'a'e'n'i'l'(' 'a' 's'a'h' 'm'h't'i'r'o'g'l'a' 's'i'h't' 'h'g'u'o'h't'l'A' 'a'r' 'r'e'p'u's' 'e'r'a' 'n'o'i't'a'c'o'l' 'e'm'a's' 'e'h't' 'n'i''''''''''''e'm'a's' 'e'h' 't'n'i' 's't'r'e's'n'i' 't'n'e'r'r'u'c'n'o'C'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'m'e't'i' 't'n'e'r'a'p' 'e'h't' 'r'''''''t' 'e't'f'a' 't'h'g'i'r'''''''' 'e'h't' '''''''t'h't'a' 't'r'e's'n'i' 't's'u'j' 's'y'a'w'l'a' 't's'o'm'l'a' 'u'o'Y'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e't'a'r'e't'i' 'o't' 'e'v'a'h' 't'''n'o'd' 'u'o'y' ','n'o'i't'a'c'o'l' 't'''''''''''''o'l't' 'a'h't' 'n'i' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'o'n' 'e'r'a' 'e'r'e'h't' 'n'e'h'W' '.'2'''''''''' '.'3'n''''''''''''''''''''''''''''''''''''''''''''''''''https://github.com/josephg/reference-crdt''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')'e't'a'r'''2.'''''''''''''''''''''''''''''''''''''''''''''''''''''''s''''''''h'c'a'o'r'p'p'a''i'h't' ''','t'n'''','e'r'e'f'f'i'd' 'y'r''''''''''''''''' 'r'e't's'a'f'''''''''''''''''''''r'''''''''''''''''''''''''''''''''''''.''''| ------------------------''''''' ' ' ' ' ' ' '-- | ---------- |'''| automerge @ 1.0.' '0' '-' 'p' 'r' 'e' 'v' 'iew2 | 291s 'n| -----'''' ' '-' '''---' '---' '---' '---' '---' '---' '-- | ------'''' ' '---- |' ''|n'n''''''''''''''''.'r'e'l'l'a'''''''' ' ' ' ' ' ' 'm's' 'd'n'a''n| automerge @ 1.0.0-preview2 | 291s |' '''t'''n'e'i'c'i'f'f'e'-'y'r'o'm'e'm'''''''m'e' 'e'r'o'm' 'h'c'u'm' 'o's'l'a' 's't'I' ''e't's'a'f''''''''''h'c'a'o'r'p'p'a' 's'i'h't' 's'i' ''''''''''''''''''''.'r'e't't'e'b' 'x'0''''0'1' 't'u'o'b'A'''''''k'a't' 't'I' '?'r'e't't'e'b' 'h'c'u'm' 'w'o'H'n'''n| Test ''''''''''' 'e'g'r'e'm'o't'u'a'''' 'M'A''''''''''''''''')'s'j'y' '/' 'e'g'r'e'm'o't'u'a'(''' | Time taken |n| -------'| automerge @ 1.0.0-preview2 | 291s |n''''''''''''''''s''''''''''' '''1' ''3'''''''1'3' ' ' ' ' ' ' ' ' ' ''t'd'r'c'-'e'c'n'e'r'e'f'e'r'------------------- | ---------- |n| automerge @ 1.0.0-preview2 | 291s |n| JS baseline | 0.61s |nn''''''n'n'n''''''-'-'-'n'n'n'n'e'v'''''''i'd' 's'i' 'n'o'i't'a't'n'e'm'''e''''''''''''' 'e'h't' 'e'r'a'''s'i' 'o'S''l'p'm'i' 's'i'h't' 'h'g'u'o'h't' 'n'e'v'E''' This is This is *sem''''''''''''''''''''''''''''''''''''''''''''''t'i' '''''''''''' ''''T'.''''''')'r'e'z'z'u'f' 'a' 'h't'i'w' 'd'e'k'c'e'h'c' 'I'(' '.'e'g'r'e'm'o't'u'a' 'l'a'e'r' 'e'h't' 'o't' 'l'a'c'i't'n'e'd'i'antically* the same''2. This is ''''''''''''''''''''t'n'a'm'e's' 's'i' 's'i'h'T''''''''''''''''''' '.'3'n'r'e't's'a'f' 's't'I' '.'2'n'g'e't'n'i'(' '''''''''''.'n'o'i't'c'n'u'f' 't'r'e's'n'i' 'e'h't' 't'u'o' 'g'n'i'p'p'a'w's' 't's'u'j' 'y'l't's'o'm'''''' 't's'u'j' ',''''''''''''''''' 'e'm'a's' 'e'h't' 'g'n'i's'u' 's'm'h't'i'r'o'g'l'a' 'e's'o'h't' 'f'o' '3' 'l'l'a' 's't'n'e'm'e'l'p'm'i' 't'c'e'j'o'r'p' ')'s'(']'s't'd'r'c'-'e'c'n'e'r'e'f'e'r'[' 'y'M'''''''''''''''''''''''a'h' 't'c'e'j'o'r'p' 'b'u'h't'i'g' 't'a'h'T' '.'e's'a'b'e'd'o'c' 'e'm'a's' 'e'h't' 'n'i' 's'c'i't'n'a'm'e's' 'r'e'h't'o' 'd'''''''''n'a' '9'c'n'y'S' 'd'n'a' 'e'g'r'e'm'o't'u'A' ','s'j'Y''''C' 't'n'e'm'e'l'p'm'i' 'n'a'c' 'u'o'Y' '.'1'n'n':'h'c'a'o'r'p'p'a' 's'i'h't' 't'u'o'b'a' 's'g'n'i'h't' 'l'u'f'i't'u'a'e'b' 'w'e'f' 'a' 's'''e'r'e'h'T''''''''''''''''''''g'n'i'h't' 'l'u'f'i't'u''''''''''i't'u'a'e'b' 'e'h'T'n'n'u''''''''''*''''''''''''*''''''''''''e'm'a's' 'e'h't' 'y'l'l'a'c'i't'n'a'm'e's' 's'i'''''''m'e'l'p'm'i' 's'i'h'T'f' ''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'e'm' 'f'o' 's's'o'b' 'e'h't' 't'o'n' 'e'r'''u'o'Y' '.'t'i' 'e'k'i'l' 'l'e'e'f' 'I' 'f'i' '''''''''''''''''''''m'o'c''''''''v' 'e'b' 'o't' 't'n'a'w' 'u'o'y' 'f'i' '''' 's'e'n'i'l' '0'5' 'r'O''''n'o'i't'r'e's'n'i''''''''''''''''''' 'n'i' 'n'o'i't'a't'n'e'm'e'l'p'm'i''''''''''m'h't'i'r'o'g'l'a' 'e'l'o'h'w' 'e'h't' 'e't'i'r'w' 'n'a'c' 'u'o'Y'''''''''''''''''''''''g'n'i't'r'e's'n'i' 'y'l'l'a'u't'c'a' 'e'r'''e'w' 'e'r'e'h''This code sounds complex, but it ends up being about 20 lines of code, [written in long form here](https://github.com/josephg/reference-crdts/blob/fed747255df9d457e11f36575de555b39f07e909/crdts.ts#L401-L459).'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''['''''''''''''''''''''''''''https://github.com/josephg/reference-crdts/blob/fed747255df9d457e11f36575de555b39f07e909/crdts.ts#L401-L45''''''''''''''e'd'o'c' 's'i'h'T' '.')'9'(']'e'r'e'h' '''']'''m'r'o'f' 'g'n'o'l' 'n'i''''''' 'g'n'i's'u' 'n'e't't'i'r'w'''''''i'r' ','e'd'o'c' 'f'o' 's'e'n'i'l' '0'2' 't'u'o'b'a' 'g'n'i'e'b' 'p'u' 's'd'n'e' 't'i''''s't'i' 't'u'b' ','x'e'l'p'm'o'c' 's'd'n'u'o's' 'e'd'o'c' 's'i'h'T'n''w' the positional insert location'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i't'a'c'o'l' 't'r'e's'n'i' 'l'a'n'o'i't'i's'o'p'''n'i' 'e'h't' 't'u'o' 'e'r'u'g'i'f' 'o't' 'e'e'r't' 'e'h't' 'p'u' 'k'l'a'W' ''''W'.'3'n's'n'I'''''''o't'n'i' '''''''''''''''''''''n'e'r'd'l'i'h'c' 'f'o' 't's'i'l''''''''''''''''.'1'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'e'r't' '''''''''''h't'i'w' 'n'o'i't'a'''s'''''''e'g'r'e'm'o't'u'A' 'e'c'a'l'p'e'r' 'o't' 'g'n'i'o'g' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'''''''y'c'n'a'f' 'a''n''''n'n'n'n''i't'n'e'm'e'l'p'm'i'''''''''''''''''''''''''.'t'r'o's' 'n'o'i't'r'e's'n'i' 'n'a' 'g'n'i'o'd' 'e'r'''e'w' 'y'l'l'a'c'i's'a'B'n'n'e'r'e'h't' 't'i' '''s''''''g'n'i'p'' '''''''''''''''''''''''''''''''''''''''''''''''''t'r'e's'n'I' '.'3'n'm'e't'i' 'w'e'n' 'e'h't''''t' 'e'r'o'f'e'b' 'e'm'o'c'''''''m'o' 'd'l'u'o'h's' 'h'c''''''' 'h'i'h'w' ','t's'i'l' 'e'h't' 'h'g'u'o'r'h't' 'e't'a'r'e't'I''''''''''''''''s'm'e't'i' 'r'e'v'o' 'p'i'k'S'''''' 'n'a'c'S' '.'2'n'm'e't'i' 't'n'e'r'a'p' 'e'h't' 'd'n'i'F' '.'1'n'n':'s't'i' ''''''''''''''''''''''''''''''''''''''''''''''h'c'a'o'r'p'p'a' 't's'i'l' 'e'h't' 'h't'i''''t'W'n'n't'o'p's' 't'h'g'i'r'''''''p'o'r'p'p'a' 'e'h't' 'n'i' 'n'e'r'd'l'i'h'c' '''s't'n'e'r'a'p' 'e'h't' 'o't' 'm'e't'i' 'w'e'n' 'e'h't' 'd'd'A'''''d'n'i'F''''d'd'A' '.'2'n'm'e't'i' 't'n'e'r'a'p' 'e'h''''''''t' 'd'n'i'F' '-'n'n':'s'i' 'r'e'w''''e's'n'a' 'e'h't' 'e'g'r'e'm'o't'u'a' 'h't'i'W' '?'s'i'h't' 'e'k'i'l' 't's'i'l' 'a' 'o't'n'i' 'm'e't'i' 'w'e'n' 'a' 't'r'e's'n'i' 'u'o'y' 'o'd' 'w'o'h' ','s'i' 'n'o'i't's'e'u'q' 'e'h'T''''[' ':' 'h'c'i'h'w' ''''''l'l'u'n' '''''''''''']'0' ','''h'p'e's'''[':'',''''''''': ['seph', 0]'''''''''''''''''''''''''''l'l'u''''''']'.'.'[' ''''''''''' 'y'''l'l'a'u't'c'A'('''''''''''''''''''''''''''''''''''''''''''''''t'I' '.'y'l'''''''''''''''''''''''''''''''''''''y'l't'h'g'i'l's' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n')'!'''''''''''''''''''''''''''''''''''.'d'a'e'h'a' 'g'n'i'p'm'u'j' 'e'r'''e'w' 't'u'b' ','y'a'r'r'a' 'n'a' 'f'o' 'd'a'e't's'n'i' ''''''' ','t's'i'l' 'd'e'k'n'i'l' 'a' 's'e's'u' 't'i' 'd'n'A''''''t'u'B' '.'''''''''t'h'g'i'l's''''b' ',''''''''''''''''''''A'G'R' 'n'a'h't' '')'s'c'i't'n'a'm'e's' 't'n'e'r'e'f'f'i'd' 's'a'h' 't'i''''d' 'o's'(' 'T'D'R'C' 't'n'e'r'e'f'f'i'd' 'a'''''''g'l't'n'e'r'e'f'f'i'd' 's'g'n'i'h't' 'w'e'f' 'a' 's'e'o'd' 'y'l'l'a'u't'c'a' ''''''''''''''''''''''''t'n'e'r'e'f'f'i'd' 'a' 's't'n'e'm'e'l'p'm'i' 's'j'Y'n''''''''''''''.'.'.' ':'n' ':'''''''''''''''''''''''''''''b' ','s'i'h't' 'd'e't'n'e'v'n'i' 'I' 'm'i'a'l'c' 'd'l'u'o'c' 'I' 'h's'i'w' 'I' '.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 's'j'Y' '.'s'j'Y' '-' 'n'o'i't'a't'n'e'm'e'l'p'm'i' 'T'D'R'C' 'e't'i'r'o'v'a'f' 'y''''''' 't'm''''''' '-' 's'j'Y' 'm'o'r'f' 'l'a'e't's' 'n'a'c' 'e'w' 'h'c'i'h'w' 's'T'D'R'C' 't'n'e'm'e'l'p'm'i' 'o't'L'g'n'i'z'i'm'i't'p'o' 't'n'i'o'p' 'o'n' 's'''e'r'e'h't''''''''''r'c'i'm'm' 'e'h't' 'e'c'n'i's' ',''t'i''b' 'o't' 's'n'i'w' 'e'c'n'a'm'r'o'f'r'e'p' 'f'o' 's't'o'l' 's'''e'r'e'h'T' '':'g'n'i'n'u't' 'e'c'n'a'm'r'o''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s't'i' 's'i' 'm'e'l'b'o'r'p' 't's'e'g''''''''''''''''''''' 'y'a'w' 'r'e't't'e'b' 'a' 's'''e'''''''''''''a' 's'''r'e'h'T'''''t''' 'o'S''g'i'b' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'p'i'r'c's'a'v'a'j'''''''''''''''''''''0' ',''''0' ':'''h'p'e's'''']'['''''''}'{''''''']'.'.'[' ':' ':'''''''''''''''''''''''''''''''']'.'.'[' ':'''''''''X''''''''''' '''''''''']'.'.'[' ':''''''',''''''''''''''''''''e'k'i'l' ''''''''''''''''e'k'i' 'l'g'n'i'h't'e'm'o's' 'n { item: 'b', id, ''''''''''''''''''''''''''''',''''''''''''''''''''':''```javas','criptnstate ='[''' {n { item: ',''a', id,''''''''}' '' ''''''' ''','':'t'n'''''e'r'a'p''children'' '':'}' ' '['''''''''''t'' ' ''':'n't'''' 'n'e'e'''}''r'''' 'r'a''a'''p' seq'', c'' 'p'h':''}'ild't' ''ren'n': ''['e'n 'r''' {'a'' ' item':': 'X''t', id,'n' seq,'e' chil'r''p'dr'a'en: []},n { item: 'b', id, seq, chi'p'ldren: [n { item: 'c', id, seq, children: []}n ]}']'''n ]}n}n```n't's'i'l' 't'a'l'f' 'e'l'g'n'i's' 'a' 'n'i' 's'm'e't'i' 'e'h't' 'l'l'a' 't'u'p' 'l'l'''e'W'n'n'seq, children: [''n { item: 'c', id, seq, children: []}'''''''''''''''''''' { item: 'a', id, seq, children: [' { item: 'b', id, seq, children: [' { item: 'c', id, seq, children: '''' '}'''')']'n '}''[ ]'n'n'' '' '' ''c''''''''b''''''''''''''' ]''''''' ','q'e's''''' '}']''n 'n ' '[' '' ','d'i'''''''''':'n'e'r'd'l'i'h'c' ','''a''' ':'m'e't'i' ''''''n '' ''''i'{' '''''}''n 'n ' '{' '=' 'e't'a't's''''''`'`'`'n'n'n'`'`'`'n'n':'f'o' 'd'a'e't's'n'i' 'o'S' '.'t's'i'l' 'a' 'h't'i'w' 'e'e'r't' 's'''e'g'r'e'm'o't'u'a''''''''r'e'm'o't'u'A' 'g'n'i'c'a'l'p'e'r' 's'i' 'e'r'e'h' 'e'k'a'm' 'l'l'''e'w' '''''''''''''''' 'e'r'a' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'x'e'l'p'm'o'C' '''''''''''''''''''e'g'n'a'h'c' 't's'r'i'f' 'e'h'T'''''''''''''''''''' 'r'e't't'e'b' 'a' 's'''e'r'e'h'T''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''T'D'R'C' ')'r'e't't'e'b' 'h'c'u'm'(' 'r'e'h't'o'n'a''''''''''(' 'r'e't'h'o'n'''''''(' '''' 'a' 'e't'o'r'w' 'o'h'w' '-' 's'n'h'a'J' 'n'i'v'e'K' '.'t'h'g'i's'n'i' 's'i'h't' 'r'o'f' 't'i'd'e'r'c' 'e'k'a't' 'd'l'u'o'c' 'I' 'h's'i'w' 'I'n'n'.'e'r'u't'c'u'r't's' 'a't'a'd' 'd'e's'a'b' 'e'e'r't' 'x'e'l'p'm'o'c' 's'''e'g'r'e'm'o't'u'a''''''''''e'g'r'e'm'o't'u'A' 's'i' 'm'e'l'b'o'r'p' 't's'e'g'g'i'b' 'e'h't' ','e's'a'c' 's'i'h't' 'n'i' 'd'n'A''''''' 'n'i' 's'A' '.'s'n'o'i't'a'z'i'm'i't'p'o' 'o'r'c'a'm' 'h't'i'w' 't'r'a't's' 'o't' 'e'v'a'h' 's'y'a'w'l'a' 'e'w''''''''''''''''''''''''''s'a'h' 's'y'a'w'l'a' 'p'e't's' 't's'r'i'f' 'e'h't' 'g'n'i'h't' 'f'o' 't'r'o's' 's'i'h't' 'h't'i'W''''i'''''''''''''''''''t'n'a't'r'o'p'm'i' 't's'o'm' 'e'h'T''''n''n''''n'n'n'n'f'r'e'p' 'h't'i'w' 'g'n'i'y'a's' 'd'l'o' 'n'a' 's'''e'r'e'h'T''''''''''''''''''''''''''''''''''''''g'n'i'n'u''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'n'i'm' 'n'i' 'e'c'n'a'm'r'o'f'r'e'p' 'h't'i''''''''''''' 'h'i't'w' 'n'e't't'i'r'w' 'r'e'v'e'n' 't's'u'j' 's'a'w' 't'i' ','y'l'l'a'e'R'n'n't' 'e'c'n'a'm'r'o'f'r'e'p' 'h't'i'w' 'y'h'p'o's'o'l'i'h'p' 'y'M''''''p' 'e'h'T'''''''''r'e'v'e'n'e'h'W''''''''e'v'e'n'e'h'w'n'n'''''''''''''''''''''''''''''''''There's an old saying with performance tuning:nn> You can't make a program faster. You can only make it do less work.'''''''''''''''''''''''''''''''''''''''''''''''''''n''''''''''''''''''''''''' 'k'o'o'l' 'a' 'e'k'a'T' ':'''':'A' 't'i'b'i'h'x'E''''T''?'e'r'e'h' 'k'r'o'w' 's's'e'l''''''''''''''''' 'f'o' 'k'r'o'w' 'e'h't' 'l'l'a' 'o'd''''c'''''''''''''l' 'o'd''''''''''*' 'o'd'*' 'r'e't'u'p'm'o'c' 'e'h't' 'e'k'a'm' 'e'w' 'o'd' 'w'o'h'''''''n'a'w' 'e'w' 'o'S'n'''nn'n'''''''' 'f'o' 'l'u'f'd'n'a'h' 'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'r'e'h'T''n'n''''''''''''''j'''''''''''''''''''''' 'e't'i'r'w'-'n'o'-'y'p'o'c''''''''''''''''''''''''''''''''''''''''''''''''''''''o't' 's'e'l'g'g'u'r't's''''''''''''V'''''' '8''''''C'G' '&' ''''''s'e's'u' 'v'''''''''''''''''''''''''''''''''''''''''t't''''u'b' ','s'i' 't'i' 't'o'h' 'w'o'h' 'w'o'n'k' 't'''n'o'd' 'I' '''''''''''''*''''''''''''''*''''''''''''''''''''''''''' 'g'n'o'r'w' 'e'h''''''''''''''''''''''''''''!'n'o'o's' 's'i'h't' 't'u'o'b'a' 'k'l'a't' 'l'l'''e'w' ''t' 's'k'c'i'p'''''''''''''''''''''''''''''''''''''''''''''''''''''o't' '''''''''g'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 't's'r'i'f' 'd'n'a'''''''' 'e'r'o'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'s'i'h't' 'o'd' 'o't' 'y'a'w' 'r'e't't'e'b' 'a' 's'''e'r'e'h't' 't'u'b' ','s't's'i'l' 'd'e't's'e'n' 'f'o' 'h'c'n'u'b' 'a' 'e'r'o't's' 'o't' 's'm'e'e's' 'e'g'r'e'm'o't'u'A'''''''''''''e'g'r'e'm'o't'u'a' 'n'I''''''''''''''' '.'e'r'u't'c'u'''''''u'c''''u'r't's' 'a't'a'd' '&' '''''''''''''''''''''''''''''''''''''''''''h'T' '.'m'h't'i'r'o'g'l'a' 'e'h't' 's'i' 'x'''''''i' 'i'f' 'o't' 'g'n'i'h't' 't's'e'g'''' 'g'i'b' 'e'h'T' '.'n'o'i't'c'a'r't's'i'd' 'g'i'b' 'a' 'l'l'a' 's'i' 's'i'h't'''''''''''l'a''''''''''''''''''''''''''''a' 'e'h't' 's'i' 'e'r'e'h' 'x'i'f' 'o't' 'g'n'i'h't' 'e'r' 'e'h't' 't'u'B''''''''''t's'r'i'f' 'e'h'T''''''''''''''''''''''''''''''''''''''''''''''''o's''''d'a'e'r' 'l'a'e'r' 'e'h'T' '.'g'n'i's's'e'r'd' 'w'o'd'n'i'w' 's'i' 's'i'h't' 'l'l'a' 't'u'B'''''''''' 'e'k'a'm' 'r'o'''''T'''''t''' 'f'I'''''''' 'a''''''''''''''''''''''''''''''''''.'Y'''''''''''''''d'e't'r'o's' 'y'd'''a'e'r'l''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''`'''''''''''''''''''''''''''n'e'h't' '''''''''''''''''''''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'a'h't' 's'i' 'w'o'l's' 's'i' 'e'g'r'e'm'o't'u'''''''u't'a' 'n'o's'a'e'r' 't's'e'g'g'i'b' 'e'h'T'''''''''''''''''''''''''''n'o's'a'e'r' 'r'e'g'g'i'b' 'h'c'u'm' 'e'h't' 't'u'B'''n'n's'e'r'u't'c'u'r't's' 'a't'a'D''''g'l'A' '#'''' '#'#'#'n'n'''''''!'!'!''''p'p'o't'S' '!'o'o'o'N'''''''''''''''!'t'a'h't' 'o'd' 't'''n'o'D''''''''''''''''''''''''''''''''''''''t''''n'n'n'a't'u'p'm'o'c' ''''''''''''.'e'l'b'a'd'i'o'v'a' 'l'l'a' 's'i' 'k'r'o'w' 's'i'h'T' '''' '.'n'i'a'g'a' 't'i' 's'p'a'r'w'n'u'''''' 't's'u'j' 'h'c'i'h'w' '-' '''`'e'r'a'p'm'o'C't'r'o'p'm'a'l' 's'e'h'c't'a'm' 't'n'e'm'u'g'r'a' 'e'h't' 'o's' 't's'u'j' ','p'a'M' 's'j'e'l'b'a't'u'm'm'i' 'n'''' 'a' 'o't'n'i'''''' 'h't'i'w' 'd'I'd'l'i'h'c' 's''''''''''d'e'p'p'a'r'w' 'e'd'o'c' 's'i'h'T' '-'n''a' 'n'a'''''''''''''''' 'e'l'g'n'i's''''''''''''''''''''''''''''''' 'r'e't's'a'f' 'h'c'u'm'''''''''''''''''.'p'o'o'l' 'r'o'f' 'a' 'h't'i'w' 't'a'h't' 'o'd' 'n'a'c' 'u'o'y' ','t'''''''''''''''t's'i'l' 'e'h't' 'o't'n'i' 'm'e't'i' 'w'e'n' 'e'h't' 't'r'e's'n'i' 'o't' 's'i' 'l'a'o'g' 'e'h'T' '-'n' ',''''''''''''''''''''''''''''''''''''''''.')'e'u'l'a'v' 'n'r'u't'e'r' 'e'h't' 'e'''''''e' 't'a'g'e'n' 'r'o'(' '`'e'r'a'p'm'o'C't'r'o'p'm'a'l'`' 'f'o' 's't'n'e'm'u'g'r'a' 'e'h't' 't'r'e'v'n'i' 't's'u'j' 'd'l'u'o'h's' 'e'd'o'c''''''''''''j' 'd'l'u'o'c' 's'i'h't' ','g'n'i''')'('e's'r'e'v'e'r' 'n'e'h't' ','g'n'i't'r'o's' 'n'a'h't' 'r'e'h't'a'R'''n'i'h't'y'n'a' ''y'a'w' '''''''''''''''''''''''''''''''''''''''''''''''j' 'e'h't' 'p'a'w's' 't's'u'j' 'y'l'i's'a'e' 'd'l'u'o'c' 'e'd'o'c' 'e'h'T''''''''''''''''''''''t's'u'j' 'y'l'i's'a'e' 'd'l'u'o'c' 'u'o'Y' '.'t'r'o's' 't's'e'w'o'l's' 'e'h't'''''w'o'l's' 's'i' 't's'i'l' 'd'e't'r'o's'-'i't'n'a' 'n'''''''''''''' 's'i' ''' 'f'o' 'e's''''''''''''''''' ','t'l'u's'e'r' 'a' 's'A' '.''u' 'y'v'a'e'h' 's'e'k'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m'o'r'f''''r'''''n'i' 'e'd''function lamportCompare(op1, op2) {n return opIdCompare(op1.get('opId'), op2.get('opId'))n}n'n''o'c''''''''''''''''''''''''':'e'g'r'e'm'o't'u'a' 'm'o'r'f' 'n'o'i't'c'n'u'f' 's'i'h't' 't'a' 'k'o'o'L''.'t'p'i'r'c's'a'v'a'j''''''s'a'v'j'a' 'n'i' 'w'o'l's' 'a'r't'x'e' 'e'r'a' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'x'e'l'p'm'o'C'''''''''''t'p'i'r'c's'a'v'a'J'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''w'o'l's' 'e'r'a' 's'n'o'i't'a'r'e''!''''''''''''''''''''''''''''''''''''''''''''''''''''' 'f'o' 'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'o'i''''''''''n'i'o't'c'n'u'f' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''7''''6''' 't'o'p's' 'n'a'c' '''''''t'''''''''''''''''''s'e'r'u's'o''''''''y'd'a'e'''''''''''-'e's'r'e'v'''e'''r''-' ''''r'l'a' '')'('''')'''l'c' '2'('''' 'e'h't' '''''''''''''''''''''`''''''''''''''''''''''''''`'n'I''''O't'e'g'`' 'o't''''''''''''''t'c'e'f'f'e' 'o'n' 's'a'h' 't'n'e'm'u'g'r'a' '''`')'('t's'i'L' 'e'h'T' '-'n''''''''''''''''''''''''''''''''''''''''''f'o' 'e's'r'e'v'n'i' 'e'h't' '''' ''''''''''''''''''''''''''t's'i'l' 'a' 'g'n'i't'r'o'S' '.''''''''''''''''''''''''''''''''''''d'e'l'l'a'c' 's'i' 'd'o'h't'e'm' 's'i'h't' 'e'r'o'f'e'b' '''''''''''e'r'a'p'm'o'C't'r'o'p'm'a'l' 'y'b' 'd'e't'r'o's' 'y'd'a'e'r'l'a' 'e'r'a' 's'm'e't'i' 'e'h'T' '-'n''')'''''''''''''''''''''.')'d'e't's'i'o'h' 'e'b' 'd'l'u'o'h's' '2' 'h'g'u'o'h'T'(' '''''''''''''''''''''''''''''''''''''''''''s''('''e'r'''''d'n'i'f'u's'o'l'c' 'o'w't' 'e'h't' 'e'd'u'l'c'n'i' 't'''n'o'd' 'u'o'y' 'f'i' '5' '.'''' 'I' ''''''' 'I'''''''''''''''''''''''''''''''''''''''''''''('''''''''''''''''''''')'?'l'l'a' 'm'e'h't' 't'o'p's' '''u'o'y' 'n'a'C' '.'n'o'i't'c'n'u'f' 's'i'h't' 'n'i' 's'n'o'i't'a'c'o'l'l'a' '6''''''''''''s't'c'e'j'b'o' '5' 'e'r'a' 'e'r'e'h'T' '-'n'n':'s'i'h't' 't'u'o'b'a' 'w'o'l's' 's'g'n'i'h't' 'y'n'a'm' 'o's' 'e'r'a' 'e'r'e'h'T' '''''''''''''''''''''''''function insertionsAfter(opSet, objectId, parentId, childId) {n let childKey = nulln if (childId) childKey = Map({opId: childId})nn return opSetn .getIn(['byObject', objectId, '_following', parentId], List())n .filter(op => op.get('insert') && (!childKey || lamportCompare(op, childKey) < 0))n .sort(lamportCompare)n .reverse() // d''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'d'e't'r'o's' 'e'b' 'd'l'u'o'h's' 'm'e't'i' 'n'a' 'f'''''''f'n'o' 'n'e'r'd'l'i'h'c' 'e'h't''''''''''t'r'o's' 'o't' 'w'o'h' 't'u'o' 'e'r'u'g'i'f' 'o't' ','t'r'e's'n'i' 'h'c'a'e' 'n'o' 'd'e'l'l'a'c' 's'i' 's'i'h'T'n'n'escending ordern .map(op => op.get('opId'))n}'''`'`'`'n''''n'n't'p'i'r'c's'a'v'a'j'`'`'`'n'n':'e'g'r'e'm'o't'u'a' 'm'o'r'f' 'n'o'i't'c'n'u'f' 's'i'h't' 'n'i' 'n'o' 'g'n'i'o'g''''o' 'f'f'u't's' 's'i'h't' 'f'o' 't'o'l' 'a''''''''''''''''''''''''''''''''' 't'a' 'g'n'i'k'o'o'l' 's'e'u's's'i' 'e's'e'h't' 'f'o' 'e'm'o's''''''''''''''e's'e'h't' 'f'o' 't's'o'm' 'e'e's' 'n'a'c' 'u'o'Y'n'n's'u'a'c'e'b' 'w'o'l's' 'a'r't'x'e' 'e'r'a' 's'e'r'u't'c'u'r't's' 'a't'a'd' 'x'e'l'p'm'o'C'p'o' 'e't'''''''''''''''''''''''''''''''''y'a'w'y'n'a' ''''''' 'e't's'a'f' 'y'r'e'v' 't''''''''''''''' 't'''n'n''''n's'i' 't's'u'j' 's'a'p'+'y'p'o'c' 'e'r'e'h'w' ','''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'p'i'r'c's'a'v'a'J' '.'4''''n'n'.''''!'e'k'a't's'i'm' 'e'm'a's' 'e'h't' 's'e'k'a'm' 'e'g'r'e'm'o't'u'A' '?'r'e'i'l'r'a'e' 't'u'o'b'a' 'd'e'k'l'a't' 'I' 'r'e'p'a'p' 't'a'h't' 'r'e'b'm'e'm'e'R' '.'m'e't'i' 'e't'a'r'a'p'e's' 'a' 's'a' 'r'e't'c'a'r'a'h'c' 'd'e't'r'e's'n'i' 'h'c'a'e' 's't'a'e'r't''''''''''''s''''3. Automerge is written''''''''''''''''''''''''' 'n'e't't'i'r'w''''s' 's'i' 'e'g'r'e'm'o't'u'A'''''''''g'r'e'm'o'u't'A' '.'3'n''''''''''''')'!'!'(' 'A'G'R' 'r'o'f' 'e'r'u't'c'u'r't's' 'a't'a'd' 'g'n'o'r'w' 'e'h't' 's'e's'u' '''''s data structures aren't very good.'''''''''''''''''''''''''''''''''''''''''' 'a't'a'd' 'f'o' 't'o'l' 'a' 'o'd' 'o't' 's'd'e'e'n' 'a'm' 't'a'h't' 'e'd'o'c''''''''''''s'j'e'l'b'a't'u'm'm'i' 'e'z'i'm'i't'p'o' 'o't' 'w'o'h' 'a'e'd'i' 'o'n' 's'a'h''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' 'e'g''''''''''''.''''''''''''''''''''''''''''''''''''''''''''''''.'d'o'o'g' 'y'r'e'v' 't'''n'e'r'a' 's''''s'e'r'u't'c'u'r't's' 'a't'a'd' 's''''''' 'd'''''e'g'r'e'm'o't'u'A' '.'2'n'e'c'n'a'm'r'o'f'r'e'p''a's'u' 'y'r'o'm'e'm' 's'e's'a'e'r'c'n'i'''''''''''''' '''''''''''' 's'e's'a'e'r'c'e'd' 'y'l'l'a''''''' 's'c'i't'a'm'a'r'd' 't'i' 'd'n'a' 's'j'e'l'b'a't'u'm'm'i' 'y'b' 'd'e's'u'f'n'o'c' 'y'l'l'a'e'r' ''''''''''''s't'e'g'''''''''''''s'i'h't' '*'s'e't'a'h'*' 'r'e'z'i'm'i't'p'o' 'e'h't' 't'u'b' ','y't'i'l'a'n'o'i't'c'n'u'f' 'f'o' 't'e's' 'l'o'o'c' 'a' 's'i' 's'i'h'T''''' 'e'h'T' '.''''''''''r'o'f' ''''''''''''s't'c'e'j'b'o' ''''''''''''t'p'i'r'c's'a'v'a'j' 'n'i' 's'c''''''' 's'i't'n'a'm'e's'''''' 'e'k'i'l'-'e'r'u's'o'l'c' 'u'o'y' 's'e'v'i'g' 'h'c'i'h'w' 'y'r'a'r'b'i'l' 'a' 's'i' 's'j'e'l'b'a't'u'm'm'I' '.'s'j'.'e'l'b'a't'u'm'm'i' 'f'o' 'e's'u' 'y'v'a'e'h' 's'e'k'a'm'''''' 's'e's'u' 'e'g'r'e'm'o't'u'A' '.'1'n'n':'s'n'o's'a'e'r' '3' 'r'o'f' 'w'o'l's' 's'i' 'e'g'r'e'm'o't'u'A''''A'n''?'w'o'l's' 'e'g'r'e'm'o't'u'a''''''''r'e'm'o'u't'a' 's'i' 'y'h'W' '#'#'#' ' ''''' ' ' ' ' '' ' ' ' ' ' ' ' ' ' ' ''s'u'o'i'v'b'o' 'e'h't' 'n'i''| automerge @ 1.0.0-preview2 |'''1'9'2'''' 'S'J''''''''''1'6'.'0''''e'n'i'l'e's'a'b''' 270s |n''''''''''''t'i'l'p's''' 'd'n'a' 'g'n'i'r't'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s' 't'p'i'r'c's'a'v'a'j' 'a' 'e't'a'e'r'c'''''''''''''''''' 's''''''''''''''''''' '2'w'e'i'v'e'r'p'-'0'.'0'.'1' '@''''''''''s't'p'i'r'c's'a'v'a'j' 'e's'u'''''''''' ')'('e'c'i'l'p's' 't's'u'j' 'e'w' 'e'r'e'h'w' ','n'o's'i'r'a'p'm'o'c' 'e'n'i'l''''o'e's'a'b' 'e'l'p'm'i's' 'a' 'e'd'u'l'c'''''''c' 'n'i' 'o't' 'g'n'i'o'g' 'o's'l'a' 'm'''I' '.'''':'e'c'a'r't' 'g'n'i't'i'd'e' 's'i'h't' 's's'e'c'o'r'p' 'o't' 's'e't'u'n'i'm' '5' 'r'e'd'n'u' 'e'l't't'i'l' 'a' 's'e'k'a't' 'e'g'r'e'm'o't'u'a' ','e'r'o'f'e'b' 'd'i'a's' 'I' 's'A''''w'o'n' 'r'o'f' 'e'n'i'f' 'y'l'b'a'b'o'r'p' 's't'a'h't'''''''''''''''''' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c''''''''''''' 's't'i' 't'u'b' ',')'r'e's'u' 'e'l'g'n'i's' 'a' 't's'u'j' 's't'i'(' 'e'c'a'r't' 's'i'h't' 'n'i' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'o'n' 's'''e'r'e'h'T' '''''''''''''''''''''''''''''''''''''''''''''''''''''f'r'e'p'-'e''''''h''' 'o'S' How does'''''' '|'''''''''''''''''''''| ------- | ---------- |n''''''''''e'g''''s'0'7''''6'2''''r'e'm'o't'u'a'''''''''''''''''''''''''|' '-'-'-'-'-'-'-'-'-'-' '|' '-'-'-'-'-'-'-' '|'n'|' 'n'e'k'a't' 'e'm'i'T' '|' ' ' ' '''''t's'e'T'n'''''''e'g'r'e'm'o't'u'a''' it do?'''g'''r'e'm'o't'u'a'''''''''a'r'e'm'o'u't'a' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'?'o'd' 't'i' 's'e'o'd' 'w'o'H' '''' '.'r'e'p'a'p' 'c'i'm'e'd'a'c'a' 'n'a' 'g'n'i't'i'r'w' 'e'l'i'h'w' 'e'k'o'r't's'y'e'k' 'h'c'a'e' 'd'e'd'r'o'c'e'r' ''''''t's'u'j' 'n'i't'r'a'M''''m' 'e'r'e'h'w' 'y'r'o't's'i'h' 'g'n'i't'i'd'e' 'n'a' 's'i' 's'i'h'T'''''''''''c'e'r' 'n'i't'r'a'M' '.'''''''''''https://github.com/automerge/automerge-perf')'/'(']'e'c'a'r't' 'g'n'i't'i'd'e' 's'''n'i't'''''''n'i'r'a'M'[' 'g'n'i's'u' 'm'''I' ','g'n'i'k'r'a'm'h'c'n'e'b' 'r'o'F'''''''''' 'e'W'''''n'n'n'n'n''s'e'k'i'Y' '.'''''''''''''c'b'a''' 'g'n'i'p'y't' 'r'e't'f'a' 'e't'a't's' 'l'a'n'r'e't'n'i' 's''''''s'e'g'r'e'm'o't'u'a' 's'i' 's'i'h't''''''''''''''''e'v'a'h' 'y'l't's'e'n'o'h''''h' 'I' '-''i't'l'''''''''''''*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '-' 'o's' 'k'n'i'h't' 'I' 't's'a'e'l' 't''''c'A' '''''''''''''''''''''''''''''''''''''''''''''p'u' 'k'o'o'l' 'e'w' ','s'n'e'p'p'a'h' 't'r'e's'n'i' ''n'n'a' 'e'm'i't' 'h'c'a'E' '.'y'a'w' 'd'e's'a'b' 'e'e'r't' 's'u'o'i'v'b'o' 'e'h't' 'n'i' 't'i' 's'e'o'd' 'y'r'a'r'b'i'l' 'e'g'r'e'm'o't'u'a' 'e'h'T' '?'e'g'r'e'm'o't'u'a' '*''''''''''n'''''''''''''''''''''''''n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'n'e'm'e'l'p'm'i' 'u'o'y' 'd'l'u'o'h's' 'w'o'h' 'o'S'''''''''''.'n''l'a's'r'e'v'a'r't' '''''''''.'h'c'r'a'e''''o's' 't's'r'i'f'-'h't'p'e'd' 'a' 'h't'i'w' 'e'e'r't' 'e'h't' 'g'n'i'n'e't't'a'l'f' 'm'o'r'f' 't'e'g' 'u'o'y' 'r'e'v'e't'a'h'w' 's'i' ''''''''''''' 's'i' 'e'u'l'a'v' 's'''''' 't's'i'l' 'e'h'T' '-''n'n'.'D'I' 'y'b' 'n'e'h't' 'r'e'b'm'u'n' 'e'c'n'e'u'n''q'e's' 'y'b' 't's'r'i'f' 'm'e'h't' 't'r'o's''u'm' 's'i'h't' 's'e'v'l'o's' 's'j'Y' '.'h'c'a'o'r'p'p'a' 'y'l'n'o' 'e'h't' 't'''n's'i' 's'i'h'T''''s'j'Y'n''n' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'- Whenever an item has children, put all the''p''''''''''''''''''''''''''''''''''''''''''' 'e'h't' 'l'l'a' 't'u'p' ','n'e'r'd'l'i'h'c' 's'a'h' 'm'e't'i' 'n'a''''''h' 'u'o'y' 'r'e'v'e'n'e'h'W''u'''''''''''''n''''e'v'a'h' 's'm'e't'i' 'o''n'w't' '' 'y'a'w' 'e'h't' 'l'l'a' ','s't'n'e'r'a'p' 's't'i' 'o't' 'm'e't'i' 'h'c'a'e' 'm'o'r'f' '''- If'''''' 'f'I' '-'n'e'e'r't' 'e'h't' 'd'l'i'u'B'''''''''''''''''e'e'r't' 'e'h't'n'' 'e'n'i'g'a'm'I'''''''''''''''''''''n''''''''''''''''''''t'n'e'r'a'p' ''''''' 'e's't'i' 'r'e't'f'a' 't'h'g'i'r''''''''''s't'i' 'r'e't'f'a' 's'e'o'g' 'g'n'i'h't'y'r'e'v'E' '-'n'n':'e'r'a' '*'s'c'i't'n''n'a'm'e's'*' 's'''e'g'r'e'm'o't'u'A'Insert 'c' id `(s'n'e', '2'''seq: *0*'ph, 2)` after `(seph, 1)`n''*'r'n''e'b'm'u'n' 'e'c'n'e'u'q'e's'*' 'a' 'd'e'''' 'l'l'a'c' '''',''''i' 'a'r't'x'e' 'n'a tiny bit more data to each item.'r `ROOT`n- Insert 'b' id `(seph, 1)` after `(seph, 0)`n- Insert''Note the 'x' an''''''''''''''''''''''t'n'e'r'a'p''''''''''s'e'm'i't'e'm'o's' '' ''''r'e'm'a's' 'e'h't' 'e'r'a'h's''''''''''''''''''''''''''''''t'a'h't' 'o'd' 'o't' 't'n'a''''*'w' 't'''n'''o''*'d' 'e'w' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'m'e't'i' 'h'c'a'e' 'o't' 'a't'a'd' 'e'r'o'm' 't'i'b' 'y'n'i't' 'a'''''''''''''''''' 'o't' 'm'e't'i' 'a'r't'x'e' 'n''''''''''u'q'e's' 'a'''''''''''''''''n'o'i't'a'm'r'o'f'n'i' 'e'r'o'm' 'g'n'i'd'd'a' 'y'b' 's'i'h't' 's'e'v'l'o's' 'A'G'R' '.'''c'b'X''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a''' 'h't'i'w' 'p'u' 'd'n'e' 's'y'a'w'l'a' 'd'l'u'o'h's' 'e'w' 'e'r'a' 's'D'I' 'e'h't' 't'a'h'w' 'r'e't't'a'm' 'o'n'''''''''''''''''''''' 'd'l'u'o'h's' 'm'e't'i' 'w'e'n' 'y'm''''''' 'I' 'e's'a'c' 's'i'h't' 'n'I' '!'e's'a'c' 's'i'h't' 'n'i' 't'o'n' 't'u'B' '.'s'D'I' 'm'e't'i' 'r'i'e'h't' 'g'n'i'r'a'p'm'o'c' 'y'b' 't'a'h't' 'e'v'l'o's'e'r' 'n'a'c' 'e'w' 'd'n'a' ',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'p'y't' 'y'l't'n'e'r'.''r'u'c'n'o'c'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''h'w'''''''''''''n'i' 'h'c'i'h'w' 't'u'o' 'e'r'u'g'i'f' 'o't' 's'D'I' 'm'e't'i' 'e'h't' 'e'r'a'p'm'o'c' 'y'l'l'a'm'r'o'n' 'e'w' 'd'n'a' ','n'o'i't'a'c'o'l' 'e'm'a's' 'e'h't' 'n'i' 'e'p'y't' 's''''t'r'e's'u''''c' 'n'e'h'w' 'n'e'p'p'a'h' 'l'l'i'w' 's'i'h'T''''S' '.'n'o'i't'a'c'o'l' 'e'm'a's' 'e'h't' 't'a' 't'r'e's'n'i' 'd 'b' both''''''''''''''''''''''''''''' 'h't'o'b' '''b''' 'd'n'a' '''x''' 'e'h't' 'e't'o'N'''''''''''''''o'o'g' 't'''n's'i' 's'i'h'T'n''n' 'c' id `(seph, 2)` after `(seph, 1)`'n'n':'e'v'a'h' 'e'w' 'n'e'h'T'''''''h'W''''''''''''''''''':'s'm'e't'i' 'e's'e'h't' 't'e'g' 'I' '.'''c'b'X''''b'a''' 't'e'g' 'I' 'o's' ',''*''''''''*''''''''''''''''''''''b' 'd'n'a' 'a'''''' 'n'e'e'w't'e'b' '''x''' 'n''''''''' 'a' 't'r'e's'n'i''''''''''d'n'u' 'I'''' ' 'y'a's' 's'''''''s' 't'e'L'n''n'''''How should ''''''''''''''''''''''''''''''' 'a' 's't'i' ','l'l'e'W' '''''''''''''''''''''''''''''''''''e'r'e'h' 'm'a'r'g'a'i'D' '>'n'n'!'e's'r'u'o'c' 'f'o' 'e'e'r't' 'A' '?'t'a'h't' 't'n'e's'e'r'p'e'r' 'you'''''''''''''''' 'u'o'y' 'd'l'u'o'h's''''w' 'w'o'H'n'n''''''''''''''''')'0' ','h'p'e's'('''''''''''''''`'''''''''`'''')'T'O'O'R'(' 'r'e't'f'a' '''`')'0' ','h'p'e's'(' 'd'i' '''a''' 't'''' 'r'e's'n'I' '-'n'n':'s'm'e'''''''e''''e'm't'i' '3' 's'e't'a'e'r'c' 'e'g'r'e'm'o't'u'a' ','''c'b'a''' 'e'p'y't' 'I' 'f'i' 'g'E' '.'r'e't'f'a' 'g'n'i't'r'e's'n'i' 'e'r'''u'o'y' 't'a'h'w' 'e'm'a'n' 'u'o'y' ','g'n'i'h't'e'm'o's' 't'r'e's'n'i''''''''''''' 'u'o'y' 'r'e'v'e'n'e'h'w'''''''''r'e'v'e'e'n'h'w''''''''''''''''''''''''h'c'i'h'w' 's'e'm'a'n'''''''''''''''''w''''''n'i' 't'i' 't'a'h't' 's'e'i'f'i'c'e'p's' 't'r'e's'n'i' 'h'c'a'e' 'd'n'a' ',''''''''''''' 'n'o' 'd'e's'a'b' '''''''''''''''' isn't as bad as you think,'''''''''a'c' 'e'w' '''''''''''''''''''''''''''','k'n'i'h't' 'u'o'y' 's'a' 'd'a'b' 's'a' 't'''n's'i' 'h'c'i'h'w' '-' ''''''''''''''' 'n'o' 'd'e's'a'b''''(' 'D'I' 'e'u'q'i'n'u' 'a' 's't'e'g'''''''''''''''''''' 'a' 'o't'n'i' 'd'e't'r'e's'n'i' 's'i'''''''''''''''''''''''''''''''''' 't'n'e'm'u'c'o'd' 'e'h't' 'n'i' 'm'e't'i' 'd'e't'r'e's'n'i' 'h'c'a'E'''''''''''s'r'e's'u' 'n'e'h'W''' '.'s'r'e't'c'a'r'a'h'c' 'f'o' 't's'i'l' 'a' 's'a' 't'n'e'm'u'c'o'd' 'd'e'r'a'h's' ''''''''''t's' 'a' 'f'o' 'k'n'i'h't' ')'''' 's'T'D'R'C' 'r'e'h't'o' 'd'n'a'(' 'e'g'r'e'm'o't'u'A'''''''''''''e'k'i'L''''''''''''''''''''''''''''''''''''''''''e'g'r'e'm'o't'u'a' 'n'i' ''''''''''''''''''''''''''''''''''''''''''''t's'i'l' 'a' 's'a' 'g'n'i'r't's' 'a' 't'u'o'b'a' 'g'n'i'k'n'i'h't' 'y'b' 's'k'r'o'w' 'g'n'i't'i'd'e' 't'x'e't' 'e'v'i't'a'r'o'b'a'l'l'o'C''''C'''''''''''' 'g'n'i'o'd'''''''''''g'n'i's's'e'c'o'r'p' 'n'e'h'W'n'n'.'g'n'i'h't' 'f'o' 't'r'o's' 't'a'h't' 'o't'n'i' 'e'r'''u'o'y' 'f'i' 'r'e'p'a'p' 'a' 'n'i' 't'u'o'b'a' 'd'a'e'r' 'n'a'c' 'u'o'y''''c' 'h'c'i'h'w' ',''e'l'l'a'c' 'm'h't'i'r'o'g'l'a' 'n'''''' '''''''''''''o'g'l'a' 'n'a' ' '.'s'k'l'a't' 't'n'e'l'l'e'c'x'e' 'd'n'a' 'k'o'o'b'''''''''''''k'o'o'B' 's'i'h' 'm'o'r'f' 's'u'o'm'a'f' 't'i'b' 'e'l't't'i'l' 'a' 's'''o'h'w' ','n'n'a'm'p'p'e'l'K' 'n'i't'r'a'M' 'y'b' 'n'e't't'i''''t'r'w'''''''''''''A'G'R' 'n'o' 'd'e's'a'b' 's't'I' '.'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c'''''c'n'o'c' 'o'd' 'u'o'y' 'p'l'e'h' 'o't' 'y'r'a'r'b'i'l' 'a'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'g'r'e'm'o't'u'A' '.'p'l'e'h' 't'''n's'e'o'd' 't'a'h't' 's'p'o'O''''S' '.'T'D'R'C' 'A'G'R' 'e'h't' 'f'o' 'n'o'i't'a't'n'e'm'e'l'p'm'i''''''''''m'h't'i'r'o'g'l'a' 'n'a' 's'i' 'e'g'r'e'm'o't'u'A''w'y'n'a' '''''''''''''''n'n''''''?'e'g'r'e'm'o't'u'a' 'n'a' 's'i' 'h't'r'a'e' 'n'o''''a' 't'a'h'W' '#'#'n'n'h't'i'w' 't'r'a't's' 's't'e'l' ','y'l'l'a'u't'c'a' 'l'l'e'W'n'n'.'t's'a'f' 't'i' 'e'k'a'm' 't'a'h'''''''''' 't'a't' 's'p'e't's' ''''''''''e' 's'e'h't' 'l'l'a' 'd'n'a' ','w'o'l's' 's'i' 'e'g'r'e'm'o't'u'a' 'y'h'w' 't'u'o'b'a' 'k'l'a't' 's't'e'L'n''n'o'i't'a'z'i'm'i't'p'o' 't'u'o'b'a' '''''''''''''''g'n'i'k'n'i'h't' 's'e'd'a'c'e'd' 't'n'e'p's' 'e'v'''o'h'w' 's'e's'u'i'n'e'g' 'r'e'p'u's' 't'''n'e'r'a''A'''''''''''''''''''''''''''''''t'''n'o'd' 's'r'e'h'c'r'a'e's'e'r' 'S'C' 'f'o' 's't'o'L'''''' 't's'o'M' '' '*'s'n'o'i't'a't'n'e'm'e'l'p'm'i'*' 'e'h't' 'e'k'a'm' 'o't''''e'h't' 'w'o'h' 't'u'o'b'a' 'g'n'''i'h't'y'n'a't'n'e'r'e'f'f'i'd' 'f'o' 'w'e'f' 'a' 'g'n'i's'u' 'y'b'e'm'a'S' '.'''*'s'c'i'''''n'a'r''t'''n'a'm'e's'*'''''''''''''''''''''''''''''''''''''''''''''''k'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ',')'(']''''''''''''''''''''''''''''''''''''''I have a new implementation that can'''''''s's'e'c'o'r'p' run the same ed''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'i' 'y'b' 'd'e't'h'g'i'l'e'd' 'y'l'r'e't't'u' 'm'''I'''''''''''''''''!'''''!'*'l'u'f't'h'g'i'l'e'd'*' 's't'i' 'd'n'a' '-' 'k'r'o'w' 'n'o'i't'a'z'i'm'i't'p'o' 'm'o'r'f' 'n'e't't'o'g' 'r'e'v'e' 'e'v'''I' 'p'u' 'd'e'e'p's' 't's'e'g'r'a'l' 'e'h't' 's't'I' '''''''T' '.'r'e't's'a'f' 's'e'm'i't' 'd'n'a's'u'o'h't' 'n'e't'''' ''''''''' 'x'''' '0'0'0' '0'1' 't'u'o'b'a' 's't'a'h'T' '.'s'd'n'o'c'e's' '3'2'''''''''' '2'3'''iting trace'''''l'l'e'W' ' in''''''''''''''.'s'd'n'o'c'e's' '5'6'0'.'0'''''''''''''s'm'5'6' '''''''''''''''''''''''''''''''''''' 't'a'h't' 'n'o'i't'a't'n'e'm''''' 'n'i' 'e'l'p'm'i''''e' 'w'e'n' 'a' 'e'v'a'h'''''''''''''''''''''''''''''''e'c'a'r't' 'g'n'i't'i'd'e' 'e'm'a's' 'e'h't' 'n'u'r' 'n'a'c' ''''' 'e'v'''I' '.'s'd'n'o'c'e's' '0'7'2' 's'e'k'a't' ')'T'D'R'C' 'r'a'l'u'p'o'p' 'a'(' '''''''')'('e'c'a'r't' 'g'n'i't'i'd'e' 's'i'h't'[' 'n'u'r' 'o'T''''''''''e'g'r'e'm'o't'u'A' ''''n'''' '?'g'n'o'r'w' 'w'o'H'n'n'''''''T' '.'g'n'o'r'w' 'r'e'p'u's' 's'a'w' 'I' 't'u'o' 's'n'r'u't' 't'i''' 't'u'B' '.'''' '*'y'l'w'o'l's'*' 'k'r'o'w' 'd'l'u'o'h's' 'y'e'h't' ','s'i' 't'a'h'T'r'o'w' 'd'l'u'o'h's' '*'s'n'o'i't'a't'n'e'm'e'l'p'm'i'*' 'e's'o'h't' 'w'o'h'''''''''''' 'e's'o'h't' 't'a'h'w''''w'o'h' 'w'e'n'k' 'e'w'''' 'e'm'a'S'f'i'w'S'''''''s't'a'h'T' ' 'd'n'''''''''''''''''''''''''''''['''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'n'.'g'n'o'r'w' 'o's' 's'a'w' 'I' 't'u'B' '.'''w'o'l's' 's'i' '''m'h't'i'r'o'g'l'a' 'e'h't' 'e's'u'a'c'e'B' '.'y'a'w' 'w'o'l's' 'A' '.'y'a'w' 'n'i'a't'r'e'c' 'a' 'd'e't'n'e'm'e'l'p'm'i' 'e'b' 'o't' 'd'e'd'e'e'n' 's'm'h't'i'r'o'g'l'a' 'e's'o'h't' 't'n'a'e'm' 't'a'h't' 'g'n'i'm'u''''m's's'a' 'd'n'a' '*'s'c'i't'n'a'm'e's'*' 'e'h't'''''''e'h' 't'u'o'b'a' 'g'''''''g' 'n'i'k'l'a't' 's'r'e'p'a'p' 'g'n'i'd'a'e'r'''''''''' 'g'n'i'm'u's's'a' 's'a'w' 'I' '.'s'r'e'h'c'r'a'e's'e'r' 'e's'o'h't' 's'a' 's'e'k'a't's'i'm' 'e'm'a's' 'e'h't' 'g'n'i'k'a'm' 's'a'w' 'I' ','s't'n'e'v'e' 'f'o' 'n'r'u't' 'g'n'i's'i'r'p'r'u's' 'a' 'n'i'''''''i'r'p'r'u's' ','y'a'w'y'n'A' '.')'s'p'o'o'(' ''''''''''(' '.'''m'h't'i'r'o'g'l'a' 'e'h't''' 'h't'i'w' ''''''''''''''''''''''t' 'h'i't' 'w'm'e'l'b'o'r'p' 't'n'e'r'e'h'n'i' 'e'm'o's' 's'a'w'''''''w'a' 't'a'h't' 'd'e'm'u's's'a'''''''''''''''''''' 'o't' 'p'u' 't'a'h't' 'd'e'k'l'a'h'c' 's'y'a'w'l'a' 'I' 'd'n'a' ','w'o'l's' 'r'e'p'u's' 'e'r'a' 's'T'D'R'C''''c' 't's'o'M' '.'y'l'e't'a'l' 's'''' 'T'D'R'C' 'n'i' 'd'e't's'e'r'e't'n'i' 'g'n'i't't'e'g'''''''''''''' 'h't'i'w' 'g'n'i'y'a'l'p' 'n'e'e'b' 'e'v'''I' ',')'(']'''w'o'n'k''''n' 'y'a'm' 'u'o'y' 's'a' 'o'S'n'n'e'g'r'e'm'o't'u'A' '#'#'''''''''' 'o'S'n''''''''''''' 'o's'n'n'-'-'-''''S'n'n'''!''''a' 'i' 'e'd'o'c''I' 'o'S' I translate'''y'm' '''d''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e't'a'l's'n'a'r't' 'I' '.'s'g'n'i'h't' 'f'o' 'e's'n'e's' 'a' 't'e'g' 'o't' 'r'e'd'r'o' 'n'i' ','''' 'd'n'a't's'r'e'd'n'u' 'y'd'a'e'r'l'a' 'I' 'g'n'i'h't'e'm'o's' 'm'a'r'g'o'r'p' 'o't' 't'n'a'w' 'I' 'e'g'a'u'g'n'a'l' 'w'e'n' 'a' 'p'u' 'k'c'i'p' 'I' 'n'e'h'w' 's'e'm'i't'e'm'o'S'''''' 'n'e'h'W'n''e'h'c'r'a'e's'e'R' 'S'C''''''''''''.')'t's'i't'n'e'i'c''''''''''n'c'i'S' 'h'c'n'e'r'F' 'r'M'''''''''' 'r'm' '*'u'o'y'*' 't'a' 'g'n'i'k'o'o'l' 'm''''''''I'(' '''''''''''''''''''''''''''''''' 'r'M' '?''''''''''''''''' 'o'g'a' 's'r''a'''h't'a'e'y' 'w'e'f' 'A''I't'u'o'b'a' 'g'n'i'k'l'a't' 'n'e'v'e' ''''''''''''''g'n'i't't'e'g'''''''t'a''''e'h't' '''''''''''''''''''''o't'n'i' 'd'e't'a'l's'n'a'r't' ''' 'g'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n''''''''''' 'r'e'p''''''''''''''''''.'w'o'W' '.'r'e't's'a'f' 'x'0'0'2' '' '''s'e'm'i't' ''u'r'''o'd''' 'd'l'u'o'c'''''''''''''''''''''''''''''.'d'n'o'c'e's'/'M'0'2' 'f'o' 'e't'a'r' 'a' 't'a' 'n'a'r' 'C' 'n'i' 'n'o'i't'c'n'u'f'''''e'd'o'c' 'e'm'a's' 'e'h't' 't'u'B' '!'d'a'b' 't'o'N' '.'d'n'o'c'e's' 'r'e'p' 's'e'm'i't' '0'0'0' ''''0'0'0'1' 't'u'o''''''''''t'o'u'b'a' 'n'o'i't'c'n'u'f' 'm'r'o'f's'n'a'r't' 'y'm' 'n'u'r' 'd'l'u'o'c' 'I' 't'p'i'r'c's'a''''s'v'a'j' 'n'I' '.'t'o'n' 'y'l'e't'u'l'o's'b'a' 's'a'w' 'e'c'n'a'm'r'o'f'r'e'p' 'e'h'T' '.'e'm'a's' 'e'h't' 'e'r'a' 's'c'i't'n'a'm'e's' 'e'h'T''''''r'e't'f'a'e'w' 'e'r'a' 't'a'h'w' ','w'o'l's' 's'i' '''m'h't'i'r'o'g'l'a''' ''''''''''O''' 'n'''''''''''''''' 's'i' 'm'e't's'y's' 'a' 'y'a's' 'e'w' 'n'e'h'W'n'n''''''''''''''''''''''''''''' 'e'l'p'm'i's''''''''''m'h't'i'r'o'g'l'a' '' 'a''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''R'''''''''''''''''''''''''''''''''''''''''''''''''''''''m'r'o'f's'n'a'r't' 'e'h'T' '.'e'c'a'l'p' 'h'c'a'e' 'n'i' 'm'h't'i'r'o'g'l'a' 'e'm'a's' 'e'h't' 's't'I'''''''''' 'e'm'a's' 'e'h'T'''''''''''''''m'h't'i'r'o'g'l'a' 'e'm'a'S' '.''''''t's'''''''''''''u'r' 'd'n'a' 'o'G' 'd'n'a' 't'f'i'w'S'''''f'i'w's''''''''''''''''d'n'a' ','t'p'i'r'c's'e'p'y'T' 'd'n'a' ','t'p'i'r'c's'a'v'a'J' 'd'n'a' ','C' 'n'i' 'e'k'i'l' 'k'o'o'l' 'd'l'u'o'w' 'e'd'o'c' 'e'm'a's' 'e'h't''''''''''''''''l' 'k'o'o'l' 'd'l'u'o'w' 't'i' 't'a'h'w' 's'u'o'i'r'u'c' 't'o'g' 'I' 'e's'u'a'c'e'b' ',''.'''''''-'''n'i'a'l'p''' 'd'''''''''''''''''''''''''''''''''''''' '.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'r'a'e'l' 'o't' 't'n'a'w' 'I''''w' 'e'g'a'u'g'n'a'l' 'a' 'f'o' 'e's'n'e's' 'a' 't'e'g''''''e'g'a'u'g' 'o't' 'y'a'w' 'a' 's'a' 't'i' 'e's'u' 'I' '-' '''' 's'e'g'a'u'g'n'a'l' 't'n'e'r'e'f'f'i'd' 'f'o' 'h'c'n'u'b' 'a' 'n'i'''e't'n'e'm'e'l'p'm'i' 'e'v'''I''''''''''''''''''''''''''''''''''''''''''o'g'a' 's'r'a'e'y' 'w'e'f' 'a' 'm'o'r'f' 'm'h't'i'r'o'g'l'a' 'T'O' 't'x'e't' 'y'M''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''g'n'i's'u' 'e'w' 'e'r'a''''''''''''''''''''''''''''''''''''''''''''''''''''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r'e'v'''''''r'f' 't'n'e'r'e'f'f'i'd' 'a' 't'a' 'g'n'i'k''''''''''''' 'g'n'i'o'o'l' 'p'u' 'd'n'e' 'l'l'''I' '.'e'g'r'e'v'n'o'c' 't'''n'o'w' 's't'i'd'e' '''s'r'e's'u' ','t'c'e'r'r'o'c'n'i''''''''t'c'e'r'r'o'c' 'e'r'a' 's'c'i't'n'a'm'e's' 'e'h't' 'f'I'n'n'?'s'o'i'r'a'n'e'c's' 't'a'h'w' 'r'o'f' 'd'n'a''''' 'r'o'f' ','t'i' 's'i' 'd'e'z'i'm'i't'p'o' 'l'l'e'w' 'w'o'H' '' ''''''''''''''''''''''''''' '?'s'e'r'u't'c'u'r't's' 'a't'a'd' 't'a'h'W' '?'e'g'a''''a''''e'u'g'n'a'l' 't'a'h'W' '.'m'e't's'y's' 'e'h't' 'f'o' '*'n'o'i''''''''''''' 'n'i'o't'a't'n'e'm'e'l'p'm'i'*' 'e'h'T' '.'2''''''''''.'2'n'n''''''''''''t'n'e'm'happens'''''''''''''''''''''''''''''''''''''''''''''''''''''?'n'o'i't'a'u't'i's' 'e'h't'''t'i' 'e'v'l'o's'e'r' 't'i' 's'e'o'd' 'w'o'H' '?'w'o'n'k' 't'i' 's'e'o'd' 'w'o'H' '?'''o'h''u'c'o'd' 'e'h't' 'n'i' ''''''''''''''''?'s'n'e'p'p'a'h' 't'a'h'w''''''''''''''''''''''' 't'a'h'W' '?'l'l'e't' 'e'w' 'n'a'c''''d' 'w'o'h' ','e'c'a'l'p' 'e'm'a's' 'e'h't' 'n'i' 'n'e'p'p'a'h' 's't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'n'e'h'W' '.''''''''''''''''''''''''' 'e'b'i'r'c's'e'd' 'n'a'c' 'e'w' 'h'c'i'h'w' ','m'e't's'y's' 'e'h't' 'f'o' 's'c'i't'n'a'm'e's' 'e'h'T' '.'1'n'n':'''s't'r'a'p' 'e't'a'r'a'p'e's' 'y'r'e'v''''''''''''''''n'o' 'g'n'i'o'g' 's'g'n'i'h't' 'o'w't' 's'''e'r'e'h't' 'y'l'l'a'e'r' 't'u'b' '-' '''m'h't'i'r'o'g'l'a''' 'n'a' 's'a' 'm'e't's'y's' 'h'c'a'e' 'e'b'i'r'c's'e'd' 'e'W' '.'s'd'r'o'w' 'h't'i'w' 'm'e'l'b'o'r'p' 'a'''''''a' ' 'e'v'a'h' 'e'w' 's'm'e't''''e's''''''''''t's't'y's' 'g'n'i't'i'd'e' 'e'v'i't'a'r'o'b'a'l'l'o'c'''''''''''''''''''' 'g'n'i't'i'd'e' ''''''''''g'n'i't'n'e'r'r'u'c'n'o'c' 'r'e'h't'o' 'd'n'a' 's'T'D'R'C' 't'u'o'b'a' 'k'n'i'h't' 'e'w' 'n'e'h'W'n'n'!'h'g'r'A' '.'''n''''''n'n''i'p'p'i'l'f'''''''''''''''''''''''''''''''''''''''''''''''''''''''.'t'i' 't'u'o'b'a' 'e'm' 'g'n'i'k's'a' 'd'n'a' 'r'e'p'a'p' 'e'h't' 'g'n'i'd'a'e'r' 'd'e't'c'e'p's'e'r' 'I' 'e'l'p'o'e'p' 'e'v'a'h' 't'''n'd'i'd' 'I'''''''''' 'I' 'e'l'p'o'e'p' 'f'i' 'h'c'u'm' 'o's' 'd'n'i'm' 't'''n'd'l'u'o'w' 'I' '''d'o'd''''r'''''''''''''''''r'e'h'c'r'a'e's'e'r' 'r'm' 'u'o'y' '''h't'i'w' 'm'e'l'b'o'r'p' 'a' 't's'u'j' 's'i' 's'i'h'T' '.'m'h't'i'r'o'g'l'a' 'e'''''''i'e'h't' 'h't'i'w' 'm'e'l'b'o'r'p' 'a' 't'''n's'i' 's'i'h'T'''t' ''''''''''''''''''''''''''''''''''''''''''''' 'm'h't'i'''' 'r'o'g'l'a' 'e'h't' 't'u'o'b'a'''''''''''!'''t'a'h't' 'm'o'r'f' 'g'n'i'h't'y'n'a' 'n'r'a'e'l' 't'''n'a'c' 'e'w'''''d'e'd'e'e'n' 'h'c'i'h'w'''''''''s't'i' 'h't'i'w' 'h'c'a'e' '-' 's'n'o'i't'a'r'e'p'o' ''''0'0'0'0'1' 'o't'n'i' 't'r'e's'n'i' 'e'h't' '''''' ''''','''t'a'r'e'p'o' '1' 'g'n'i't'a'e'r'c''r'a'h'c' ''''''''''''''''''''''''n'i' 's'r'e't'c'a'r'a'h'c' '0'''''''''''''''''''''''''''r'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''d'n'a' '1' 'n'a'h't' 'r'e'h't'a'r' 's'n'o'i't'a'r'e'p'o' '0'0'0'1' 'g'n'''''''''''''''''''''''''''''''''''d'a'b'e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.'*'u'o'y'*' 't'u'o'b'a' 'g'n'i'h't'e'm'o's' 's'u' 's'l'l'e't' 't's'u'j' 't'I' '.'t's'e't' 'o't' 'g'n'i'y'r't' 'e'r'''u'o'y' 't'a'h'w' 't'u'o'b'a' 'g'n'i'h't'y'n'a' 's'u' 'l'l'e't' 't'''n's'e'o'd' 't'a'h'T'''''''''''e'l' 't'''n'a'c' 'I' ''t'o'r'w' 't's'u'j' 'u'o'Y' '.'e'c'n'e'i'c's' 't'''n's'i'''i's's'e'c'o'r'p' 'e'r'e'w' 'y'e'h'T' '.'n'o'i't'a'r'e'p'o' 'g'n'i'''t'i'd'e' 'n'w'o' 's't'i' ''t'c'a'r'a'h'c' 'h'c'a'e' 'g'n'i't't'i'l'p's'''0'0'1' 'e's'o'h't''0'0'0'1' ','y'a's'(' 't'x'e't'u'h'c' 'g'i'b'''''''''''''''''''''''t'n'e't'n'o'c' '''t'a'h't' 'f'o' 'l'l'a' '''''''''''''''''''''''''''''''''''''''''''''''''e'n'o' 'h'c'''a'e''n'o'i''''''''''n'i'o't'a'r'e'p'o' 'e'n'o' 'n'i' 'g'n'i'''''''n'o'r't's' 't'a'h't'''e'd'o'c' 'f'o'''''''''''''c' 'o'f'''''''''' 'o'f' 'k'c'o'l'b' 'a' 'd'e't's'a'p' 'r'e's'u' 'a''''''''''''''''e' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'e'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''t'g''''u'B' '!'t'a'h't' 'o'''''''''''''''''''h'c'a'o'r'p''''''''''''''''''''''''''.'*'e'd'o'c' 'r'u'o'y'*' ''''''' 'i'h't'i'w' 'm'e'l'b'o'r'p'p'a'''''''''''''''''''''' 'a' 's'i' '''''''s'i's'i'h'T' '.'m'h't'i'r'o'g'l'a' 'e'h't' 'h't'i'w' 'd' 'u'o'y' 'f'i' 'w'o'l's' 'e'b' 'l'l'''t'i' 'e's'r'u'o'c' 'f'o' '-' ''''''' '-'h'a'e'y' ','n'a'e'm' 'I' ''''''''''''''''''''''''''''m'e'l'b'o'r'p' 'a' 't'''n's'i' 's'i'h't' '~''''''' '-' 'h'a'G' '.'e'r'u't'c'u'r't's' 'a't'a'd' 'w'o'l's'''''' 'w'o's'l' 'y'z'a'r''''a'c'''''''u'o'i'v'b'o' 'r'i'e'h't' 'o''''i't'n'i' 'm'e'h't' 'g'n'i''''e't'r'e's'n'i' 'd'n'a' 'e'n'o' 'y'b' 'e'n'o' 'r'e't'c'a'r'a'h'c' 'w'e'n'''''''''' 'd'e't'r''''''''''''''''''''''''''''''m'e'h't' 'g'n'i'''''''d'e't'r'e's'n'i' 'd'n'a' 'e'n'o' 'y'b' 'e'n'o' ''e's'n'i''''''''''r'e't'c'a'r'a'h'c' 'h'c'a'e' 'g'n'i'k'a't'd'o'c''''''''''''''' 's'a'w' 'm'h't'i'r'o'g'l'a' 'r'i'e'h't' ','t'x'e't' 'f'o' 'k'c'o'l'b' 'e'n'o' 'g'n'i't'r'e's'n'i' 'f'o' 'd'a'e't's'n'i' ','d'e'n'e'p'p'a'h' 't''''''''n'e'v'e' 't's'a'p' 'e'g'r'a'l' 'a' 'n'e'h'W' ' hour in their implementation.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '.'n'o'i't'a't'n'e'm'e'l'p'm'i' 'r'i'e'h't'''''''''m'i' 'r'e'i'h't' 'n'i' 'r'u'o'h' 'r'u'e't'a'm'a' 's'a'w' 't'i' 'e'k'i'l' 'd'e'm'e'e's' 't'i' 'd'n''''d'a' 'k'o'o'l' 'r'e's'o'l'c' 'a' 'k'o'o't' 'I''''''''' 'y'l'i'k'c'u'L'''''o'l' 'I'n'n'?'n'o' 'g'n'i'o'g' 's'a'w' 't'a'h'W' '.'s't'n'e'v'e' 'e't's'a'p' 'e'g'r'a'l' 's's'e'c'o'r'p' 'o't' 's'd'n'o'c'e's' '3' 'e'k'a't' 't'''n'd'i'd' 't'c'a'f' 'a' 'r'o'f' 'w'e'n'k' 'I' 'm'h't'i'r'o'g'l'a' 'e'h'T' '.''l'e'W'i'Y' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''e'v'a'W' 'e'l'g'o'o'G' 'r'o'f' 'd'e's'u' 'e'w' 'm'h't'i'r'o'g'l'a' 'e'h'T' '.'''' '''''''''''''''''''''''''''''''l''''''''''''''''''''''''''''''''''''''''' And'''''t'u'B' '''A' '.''''''''''''s'd'n'o'c'e's' '3'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''S'J''''D'e'r'a'h'S' 'r'o'f' 'g'n'i's'u' 's'a'w' 'I' 'm'h't'i'r'o'g'l'a' 'e'h't' 's'a'w' 't'i' 't'u'b' '-' 't'i' 't'n'e'v'n'i' 't'''n'd'i'd' 'I' ','l'l'e'W' '.'e'n'i'M''''I' '?'t'a'h't' 's'a'w' 'm'h't'i'r'o'g'l'a' 'h'c'i'h'W'n'n''n'o'i's''''''''''n'o'i's'e's' 'g'n'i't'i'd'e' 'd'l'r'o'w' 'l'a'e'r' 'r'i'e'h't' 'f'o' 'e'n'o' 'm'o'r'f' '''0'''''''''''''' 's's'e'c'''o'r'p''''''''''''''''''''''''''''''''''''''.'n'o'i't'a'r'e'p'o' 'e't's'a'p'+'y'p'o'c' 'e'l'p'm'i's' 'a' 'e'l'd'n'a'h' 'o't''' 's''''x'm'0'3' 'f'o' 's'd'r'a'w'p'u' 'k'o'o't' ''''''''''''''''s'r'e'h't'o' 'd'n'A' '.'l'l'e'w' 'y'l'b'a'n'o's'a'e'r' 'd'e'k'r'o'w' 's'm'h't'i''''t'r'o'g''''''''''i'r'o'l'a' 'e'm'o'S' '''n'n''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''f'''''''t' 'o' 'e'n'o' 'g'n'i's'u' ')'g'n'i't'i'd''''''''''''''''t'n'i'd'i'e' 'e'v'i't'a'r'o'b'''''''o'b'a'l'l'o'c' 'r'o'f' 'y'r'a'r'b'i'l' 't'p'i'r'c's'a'v'a'j' 'a'(' 'S'J'e'r'a'h'S' 'g'n'i't'n'e'm'e'l'p'm'i'e'r' 'p'e'e'd' 'e'e'n'k' 's'a'w' 'I' 'd'n'a' 'e'r'o'f'e'b'''''''b'a' 's'r'a'e'y' 'w'e'f' 'a' 'e'v'a'W' 'e'l'g'o'o'G' 'n'o' 'g'n'i'k'r'o'w' 'd'e'p'p'o't's' 'd'''I' '''''''''''''''f'o'h'c'n'u'''''''''''''''''''''''''''''''''''''''''''''''''''''t'h'g'u'o'h't' 'I' 't'a'h'w' 'g'n'i'k's'a' 'r'e'p'a'p' 'e'h't' 'o't' 's''''e'k'n'i'l' 'e'm' 't'n'e's' 'l'l'a' ''b' 'A''''''''''''''''''''''w'e'n'k' 'I' 'e'l'p'o'e'p' 'f'o' 's't'o'L'''''''''''''''''''' 'e'd'a'm' 'r'e'p'a'p' 'r'i'e'h'T' ''l'a' ''.'m'e'h't' 'd'e''''s'k'r'a'm'h'c'n'e'b' 'y'e'h't' 'd'n'a' ','g'n'i't'i'd'e' 't'n'e'r'r'u'c'n'o'c' 'r'o'f' 'w'o'l'l'a' 'o't' 'd'e't'n'e'm'e'l'p'm'i' 'e'b' 'd'l'u'o'c' 's'm'h't'i'r'o'g'l'a' 'T'O' 'd'n'a' 'T'D'R'C''''o' 's'y'a'w' 'f'o' 's't'o'l' 'g'n'i'w'o'h's' ''''''''n'o's'i'r'a'm'o'c' 'a' 'r'e'h't'e'g'o't' 't'u'p' 'e'c'n'a'r'F' 'n'i' 's'r'e'h'c'r'a'e''''''''''a'r'e's'e'r'''''''''''''''''''''' 'n'i' 's't'n'e'd'u't's' 'e't'a'u'd'a'r'g' 'e'm'o'S' '.'r'e'p'a'p' 'c'i'm'e'd'a'c'a' 'n'a' 'y'b' 'd'e'r'e'h't'o'b' 'y'l'l'a'e'r' 's'a'w' 'I' 'o'g'a' 's'r'a'e'y' 'w'e'f' 'A'''''n'n'n'n''Automerge is too slow and clunky. Martin (its principle architect and programmer) recorded himself typing an academic paper. Running his editing history through automerge (his own code) takes 490 seconds, which is a bit less than 10 minutes. Once processed, the editing trace sits on 1.1 GB of RAM. The newly merged performance branch (designed to fix a lot of these problems) is even slower - taking 750 seconds (12.5 minutes) to process the same editing trace.nI managed to get that 10 minute time down to 70ms (0.07 seconds). Thats the best result I've ever gotten from optimization work, and I'm delighted by it. Let me tell you what I did!nWhat does automerge do?nBefore we can go into detail about how I made automerge fast, we have to spend a moment talking about how automerge itself works.nAn automerge document is actually a tree of inserted characters. Each character in the document has the following properties:nA unique ID, made up of a tuple of (client ID, sequence number)nThe ID (or a pointer to) its parent item, which is the item directly before that character when it was inserted.nThe character itself ('A')nThere's a couple more fields (eg to mark when characters have been deleted), but essentially thats it. When a character is inserted in the document, automerge figures out the ID of the character immediately before the new character, and inserts the new character as one of its predecessor's *children*. If you just type a linear sequence of characters (as I'm doing right now), you'll end up with a big long chain of characters going down like a linked list.nSo why is automerge so slow?nWhen optimizing, I imagine myself manually doing all the work the computer is doing, one step at a time. Then I imagine asking: 'When I get bored, how would I speed this job up?'.nAutomerge is slow for 3 main reasons:nIts written in javascript and uses complex data structures. Javascript is reasonably fast for math, but slow and inefficient when using complex data structures.nAutomerge uses a complex and inefficient data structurenAutomerge makes extremely heavy use of immutablejsnEach of these issues accounts for about an order of magnitude slowdown in performance. You can see all 3 issues showing up in this method from the automerge source tree, which is called on each keystroke. Automerge uses this method to figure out where each new character should be placed in the resulting document:nfunction insertionsAfter(opSet, objectId, parentId, childId) {n let childKey = nulln if (childId) childKey = Map({opId: childId})nn return opSetn .getIn(['byObject', objectId, '_following', parentId], List())n .filter(op => op.get('insert') && (!childKey || lamportCompare(op, childKey) < 0))n .sort(lamportCompare)n .reverse() // descending ordern .map(op => op.get('opId'))n}nWhats wrong with this method?nThis method allocates all over the place. I can spot 5 allocations, not counting any extra nonsense immutablejs is doing. The call to List() has no effect as far as I can tell from reading immutablejs's documentation.nThe document is always kept in a sorted order anyway, so the calls to sort() and reverse() are unnecessary. The algorithm only needs to figure out where the new child should be inserted. Re-sorting all children is entirely avoidable. Sort functions are often fast when the input is sorted already, but in this case because the sorting function is inverted, the computer always has to sort the entire list.nYou can't tell from looking at this method, but insertionsAfter nDespite CRDTs being the 'new hotness' in the collaborative editing game for years, I've been resisting them. As I said in my [recent blog post about CRDTs](https://josephg.com/blog/crdts-are-the-future/), they've been generally unworkable for real world collaborative editing because:nThey take up too much space on disk and in memory. (Automerge takes 1.1GB in RAM to store a 100kb document)nThey consume way too much CPU to process editsnUntil these issues are addressed, I can't recommend CRDTs for use in general computing.n' \ No newline at end of file diff --git a/svelte.sml b/svelte.sml index c56794d..e9611ca 100644 --- a/svelte.sml +++ b/svelte.sml @@ -1,19749 +1,19994 @@ -val svelte_arr = #[(0, 0, "'nnnn
n
n n

Edit src/App.svelte and save to reload.

n

Page has been open for {count} seconds.

n

n n Learn Svelten n

n
n
n'"), -(7, 0, "' '"), -(8, 0, "'l'"), -(9, 0, "'a'"), -(10, 0, "'n'"), -(11, 0, "'g'"), -(12, 0, "'='"), -(13, 0, "'''"), -(14, 0, "'t'"), -(15, 0, "'s'"), -(16, 0, "'''"), -(0, 1416, "'n n n n
nt
nt nt

Edit src/App.svelte and save to reload.

nt

Page has been open for {count} seconds.

nt

nttntt Learn Sveltenttnt

nt
n
n '"), -(7, 0, "' '"), -(8, 0, "' lang='ts''"), -(8, 1, "''"), -(0, 1364, "'nn
nt

Hello {name}!

nt

Visit the Svelte tutorial to learn how to build Svelte apps.

n
nn'"), -(26, 0, "'nt'"), -(27, 1, "''"), -(9, 0, "'texport let name;n'"), -(39, 4, "'s'"), -(40, 0, "'t'"), -(41, 0, "'a'"), -(42, 0, "'t'"), -(43, 0, "'e'"), -(90, 109, "''"), -(90, 0, "'<'"), -(91, 0, "'p'"), -(92, 0, "'>'"), -(93, 0, "'{'"), -(94, 0, "'J'"), -(95, 0, "'S'"), -(96, 0, "'O'"), -(97, 0, "'N'"), -(94, 4, "'JSON'"), -(98, 0, "'.'"), -(99, 0, "'s'"), -(100, 0, "'t'"), -(101, 0, "'r'"), -(102, 0, "'i'"), -(103, 0, "'n'"), -(104, 0, "'g'"), -(105, 0, "'i'"), -(106, 0, "'f'"), -(107, 0, "'y'"), -(8, 0, "'nimport { stringify } from 'querystring';n'"), -(141, 9, "'stringify'"), -(150, 0, "'('"), -(151, 0, "'s'"), -(152, 0, "'t'"), -(153, 0, "'a'"), -(154, 0, "'t'"), -(155, 0, "'e'"), -(156, 0, "')'"), -(157, 0, "'}'"), -(158, 0, "'<'"), -(159, 0, "'/'"), -(160, 0, "'p'"), -(161, 0, "'>'"), -(134, 0, "'r'"), -(135, 0, "'e'"), -(163, 0, "'r'"), -(164, 0, "'e'"), -(9, 40, "''"), -(8, 1, "''"), -(10, 17, "''"), -(9, 1, "''"), -(48, 23, "''"), -(47, 1, "''"), -(28, 0, "'ntexport let state;'"), -(28, 0, "'ntexport let state;'"), -(28, 0, "'ntexport let state;'"), -(22, 5, "'r'"), -(23, 0, "'o'"), -(24, 0, "'o'"), -(25, 0, "'m'"), -(40, 5, "'c'"), -(41, 0, "'o'"), -(42, 0, "'n'"), -(43, 0, "'n'"), -(44, 0, "'e'"), -(45, 0, "'c'"), -(46, 0, "'t'"), -(47, 0, "'e'"), -(48, 0, "'d'"), -(63, 5, "'v'"), -(64, 0, "'a'"), -(65, 0, "'l'"), -(66, 0, "'u'"), -(67, 0, "'e'"), -(71, 0, "'// '"), -(90, 1, "''"), -(68, 1, "''"), -(49, 1, "''"), -(26, 1, "''"), -(49, 0, "'texport let valuen'"), -(67, 0, "'texport let valuen'"), -(85, 0, "'texport let valuen'"), -(49, 17, "''"), -(48, 1, "''"), -(61, 5, "'p'"), -(62, 0, "'l'"), -(63, 0, "'a'"), -(64, 0, "'y'"), -(65, 0, "'e'"), -(66, 0, "'r'"), -(67, 0, "'s'"), -(81, 5, "'r'"), -(82, 0, "'o'"), -(83, 0, "'u'"), -(84, 0, "'n'"), -(85, 0, "'d'"), -(86, 0, "'s'"), -(100, 5, "'s'"), -(101, 0, "'e'"), -(102, 0, "'c'"), -(103, 0, "'s'"), -(104, 0, "'_'"), -(105, 0, "'p'"), -(106, 0, "'e'"), -(107, 0, "'r'"), -(108, 0, "'_'"), -(109, 0, "'r'"), -(110, 0, "'o'"), -(111, 0, "'u'"), -(112, 0, "'n'"), -(113, 0, "'d'"), -(88, 0, "'texport let secs_per_roundn'"), -(103, 0, "'o'"), -(104, 0, "'n'"), -(105, 0, "'d'"), -(130, 14, "'_active_sessions'"), -(186, 0, "'nt'"), -(188, 0, "'<'"), -(189, 0, "'h'"), -(190, 0, "'1'"), -(191, 0, "'>'"), -(192, 0, "'R'"), -(193, 0, "'o'"), -(194, 0, "'o'"), -(195, 0, "'m'"), -(196, 0, "' '"), -(197, 0, "'{'"), -(198, 0, "'r'"), -(199, 0, "'o'"), -(200, 0, "'o'"), -(201, 0, "'m'"), -(202, 0, "'}'"), -(203, 0, "'<'"), -(204, 0, "'/'"), -(205, 0, "'h'"), -(206, 0, "'1'"), -(207, 0, "'>'"), -(203, 0, "' '"), -(204, 0, "'c'"), -(205, 0, "'o'"), -(206, 0, "'n'"), -(207, 0, "'n'"), -(208, 0, "'e'"), -(209, 0, "'c'"), -(210, 0, "'t'"), -(211, 0, "'e'"), -(212, 0, "'d'"), -(213, 0, "' '"), -(214, 0, "'{'"), -(215, 0, "'c'"), -(216, 0, "'o'"), -(217, 0, "'n'"), -(218, 0, "'n'"), -(219, 0, "'e'"), -(220, 0, "'c'"), -(221, 0, "'t'"), -(222, 0, "'e'"), -(223, 0, "'d'"), -(224, 0, "'}'"), -(48, 0, "'ntexport let connected'"), -(39, 9, "'s'"), -(40, 0, "'t'"), -(41, 0, "'a'"), -(42, 0, "'t'"), -(43, 0, "'e'"), -(44, 22, "''"), -(27, 0, "'texport let connectedn'"), -(243, 0, "' '"), -(244, 0, "'s'"), -(245, 0, "'t'"), -(246, 0, "'a'"), -(247, 0, "'t'"), -(248, 0, "'e'"), -(249, 0, "' '"), -(250, 0, "'{'"), -(251, 0, "'s'"), -(252, 0, "'t'"), -(253, 0, "'a'"), -(254, 0, "'t'"), -(255, 0, "'e'"), -(256, 0, "'}'"), -(263, 35, "''"), -(262, 1, "''"), -(39, 9, "'c'"), -(40, 0, "'o'"), -(41, 0, "'n'"), -(42, 0, "'n'"), -(43, 0, "'e'"), -(44, 0, "'c'"), -(45, 0, "'t'"), -(46, 0, "'i'"), -(47, 0, "'o'"), -(48, 0, "'n'"), -(234, 9, "'c'"), -(235, 0, "'o'"), -(236, 0, "'n'"), -(237, 0, "'n'"), -(238, 0, "'e'"), -(239, 0, "'c'"), -(240, 0, "'t'"), -(241, 0, "'i'"), -(242, 0, "'o'"), -(243, 0, "'n'"), -(529, 0, "' */'"), -(283, 0, "'/* '"), -(281, 0, "'nt'"), -(283, 0, "'nt'"), -(282, 1, "''"), -(283, 1, "''"), -(282, 0, "'t'"), -(283, 0, "'b'"), -(284, 0, "'o'"), -(285, 0, "'d'"), -(286, 0, "' '"), -(286, 1, "''"), -(286, 0, "'y'"), -(287, 0, "' '"), -(288, 0, "'{'"), -(289, 0, "'ntt'"), -(292, 0, "'ntt'"), -(290, 2, "''"), -(291, 2, "'t}'"), -(290, 0, "'tt'"), -(292, 0, "'b'"), -(293, 0, "'a'"), -(294, 0, "'c'"), -(295, 0, "'k'"), -(296, 0, "'g'"), -(297, 0, "'r'"), -(298, 0, "'o'"), -(299, 0, "'u'"), -(300, 0, "'n'"), -(301, 0, "'d'"), -(302, 0, "'-'"), -(303, 0, "'c'"), -(304, 0, "'o'"), -(305, 0, "'l'"), -(306, 0, "'o'"), -(307, 0, "'r'"), -(308, 0, "':'"), -(309, 0, "' '"), -(310, 0, "'b'"), -(311, 0, "'l'"), -(312, 0, "'a'"), -(313, 0, "'c'"), -(314, 0, "'k'"), -(315, 0, "';'"), -(282, 37, "''"), -(205, 0, "'nt'"), -(207, 0, "'<'"), -(208, 0, "'h'"), -(209, 0, "'1'"), -(210, 0, "'>'"), -(211, 0, "'G'"), -(212, 0, "'l'"), -(213, 0, "'a'"), -(214, 0, "'s'"), -(215, 0, "'s'"), -(216, 0, "' '"), -(217, 0, "'B'"), -(218, 0, "'e'"), -(219, 0, "'a'"), -(220, 0, "'d'"), -(221, 0, "' '"), -(222, 0, "'G'"), -(223, 0, "'a'"), -(224, 0, "'m'"), -(225, 0, "'e'"), -(226, 0, "'s'"), -(227, 0, "'<'"), -(228, 0, "'/'"), -(229, 0, "'h'"), -(230, 0, "'1'"), -(231, 0, "'>'"), -(226, 1, "''"), -(226, 0, "' '"), -(227, 0, "'T'"), -(228, 0, "'i'"), -(229, 0, "'m'"), -(230, 0, "'e'"), -(231, 0, "'r'"), -(293, 2, "'4'"), -(240, 2, "'4'"), -(292, 0, "'h'"), -(240, 0, "'h'"), -(254, 37, "''"), -(247, 0, "':'"), -(249, 0, "'<'"), -(250, 0, "'e'"), -(251, 0, "'m'"), -(252, 0, "'>'"), -(259, 0, "'<'"), -(260, 0, "'/'"), -(261, 0, "'e'"), -(262, 0, "'m'"), -(263, 0, "'>'"), -(269, 0, "'nt'"), -(271, 0, "'<'"), -(272, 0, "'s'"), -(273, 0, "'p'"), -(274, 0, "'a'"), -(274, 1, "''"), -(273, 1, "''"), -(272, 1, "''"), -(272, 0, "'d'"), -(273, 0, "'i'"), -(274, 0, "'v'"), -(275, 0, "'>'"), -(276, 0, "' connected {connection} state {state}'"), -(276, 1, "''"), -(312, 0, "'<'"), -(313, 0, "'/'"), -(314, 0, "'d'"), -(315, 0, "'i'"), -(316, 0, "'>'"), -(316, 1, "''"), -(316, 0, "'v'"), -(317, 0, "'>'"), -(276, 10, "''"), -(289, 5, "''"), -(289, 0, "'/'"), -(304, 0, "'nt'"), -(306, 0, "'nt'"), -(305, 1, "''"), -(307, 0, "'<'"), -(308, 0, "'d'"), -(309, 0, "'i'"), -(310, 0, "'v'"), -(311, 0, "' '"), -(312, 0, "'i'"), -(313, 0, "'d'"), -(314, 0, "'='"), -(315, 0, "'b'"), -(316, 0, "'a'"), -(317, 0, "'r'"), -(307, 11, "''"), -(307, 0, "'<'"), -(308, 0, "'d'"), -(309, 0, "'i'"), -(310, 0, "'v'"), -(311, 0, "' '"), -(312, 0, "'i'"), -(313, 0, "'d'"), -(314, 0, "'='"), -(315, 0, "'c'"), -(316, 0, "'o'"), -(317, 0, "'n'"), -(318, 0, "'f'"), -(319, 0, "'i'"), -(320, 0, "'g'"), -(321, 0, "'''"), -(315, 0, "'''"), -(323, 0, "'>'"), -(324, 0, "'<'"), -(325, 0, "'/'"), -(326, 0, "'d'"), -(327, 0, "'i'"), -(328, 0, "'v'"), -(329, 0, "'>'"), -(324, 0, "'nttnt'"), -(327, 0, "'<'"), -(328, 0, "'h'"), -(329, 0, "'2'"), -(330, 0, "'>'"), -(331, 0, "'C'"), -(332, 0, "'o'"), -(333, 0, "'n'"), -(334, 0, "'f'"), -(335, 0, "'i'"), -(336, 0, "'g'"), -(337, 0, "'<'"), -(338, 0, "'/'"), -(339, 0, "'h'"), -(340, 0, "'2'"), -(341, 0, "'>'"), -(368, 0, "'n'"), -(369, 0, "'#'"), -(370, 0, "'c'"), -(371, 0, "'o'"), -(372, 0, "'n'"), -(373, 0, "'f'"), -(374, 0, "'i'"), -(375, 0, "'g'"), -(376, 0, "' '"), -(377, 0, "'{'"), -(378, 0, "'nt'"), -(380, 0, "'nt'"), -(379, 1, "''"), -(380, 1, "'}'"), -(379, 0, "'t'"), -(380, 0, "'m'"), -(380, 1, "''"), -(380, 0, "'m'"), -(381, 0, "'a'"), -(382, 0, "'r'"), -(383, 0, "'g'"), -(384, 0, "'i'"), -(385, 0, "'n'"), -(386, 0, "'-'"), -(387, 0, "'t'"), -(388, 0, "'o'"), -(389, 0, "'p'"), -(390, 0, "':'"), -(391, 0, "' '"), -(392, 0, "'1'"), -(392, 1, "''"), -(392, 0, "'2'"), -(393, 0, "'e'"), -(394, 0, "'m'"), -(395, 0, "';'"), -(342, 0, "'ntt'"), -(345, 0, "'<'"), -(346, 0, "'u'"), -(346, 1, "''"), -(346, 0, "'b'"), -(347, 0, "'u'"), -(348, 0, "'t'"), -(349, 0, "'t'"), -(350, 0, "'o'"), -(351, 0, "'n'"), -(352, 0, "' '"), -(353, 0, "'o'"), -(354, 0, "'n'"), -(355, 0, "':'"), -(356, 0, "'c'"), -(357, 0, "'l'"), -(358, 0, "'i'"), -(353, 6, "'on:click='''"), -(363, 1, "''"), -(362, 1, "''"), -(362, 0, "'{'"), -(363, 0, "'}'"), -(363, 0, "'s'"), -(364, 0, "'t'"), -(365, 0, "'a'"), -(366, 0, "'r'"), -(367, 0, "'t'"), -(369, 0, "'>'"), -(370, 0, "'S'"), -(371, 0, "'t'"), -(372, 0, "'a'"), -(373, 0, "'r'"), -(374, 0, "'t'"), -(375, 0, "'<'"), -(376, 0, "'/'"), -(376, 1, "'/button>'"), -(187, 0, "'n'"), -(188, 0, "'n'"), -(188, 0, "'c'"), -(189, 0, "'o'"), -(190, 0, "'n'"), -(191, 0, "'s'"), -(192, 0, "'t'"), -(193, 0, "' '"), -(194, 0, "'s'"), -(195, 0, "'t'"), -(196, 0, "'a'"), -(197, 0, "'r'"), -(198, 0, "'t'"), -(199, 0, "' '"), -(200, 0, "'='"), -(201, 0, "' '"), -(202, 0, "'('"), -(203, 0, "')'"), -(204, 0, "' '"), -(205, 0, "'='"), -(206, 0, "'>'"), -(207, 0, "' '"), -(208, 0, "'{'"), -(209, 0, "'nt'"), -(211, 0, "'nt'"), -(210, 1, "''"), -(211, 1, "'}'"), -(210, 0, "'t'"), -(211, 0, "'c'"), -(212, 0, "'o'"), -(213, 0, "'n'"), -(214, 0, "'s'"), -(215, 0, "'o'"), -(216, 0, "'l'"), -(217, 0, "'e'"), -(211, 7, "'console'"), -(218, 0, "'.'"), -(219, 0, "'l'"), -(220, 0, "'o'"), -(221, 0, "'g'"), -(219, 3, "'log'"), -(222, 0, "'('"), -(223, 0, "'''"), -(224, 0, "'s'"), -(225, 0, "'t'"), -(226, 0, "'a'"), -(227, 0, "'r'"), -(228, 0, "'t'"), -(229, 0, "'!'"), -(230, 0, "'''"), -(231, 0, "')'"), -(187, 0, "'nt'"), -(189, 0, "'nt'"), -(188, 1, "''"), -(189, 1, "''"), -(188, 0, "'c'"), -(189, 0, "'o'"), -(190, 0, "'n'"), -(191, 0, "'s'"), -(192, 0, "'t'"), -(193, 0, "' '"), -(194, 0, "'u'"), -(195, 0, "'p'"), -(196, 0, "'d'"), -(197, 0, "'a'"), -(198, 0, "'t'"), -(199, 0, "'e'"), -(200, 0, "'_'"), -(201, 0, "'s'"), -(202, 0, "'t'"), -(203, 0, "'a'"), -(204, 0, "'t'"), -(205, 0, "'e'"), -(206, 0, "'='"), -(207, 0, "' '"), -(207, 1, "''"), -(206, 1, "''"), -(206, 0, "' '"), -(207, 0, "'='"), -(208, 0, "' '"), -(209, 0, "'('"), -(210, 0, "'p'"), -(211, 0, "'a'"), -(212, 0, "'t'"), -(213, 0, "'c'"), -(214, 0, "'h'"), -(215, 0, "')'"), -(216, 0, "' '"), -(209, 8, "'p'"), -(210, 0, "'a'"), -(211, 0, "'t'"), -(212, 0, "'c'"), -(213, 0, "'h'"), -(214, 0, "' '"), -(215, 0, "'='"), -(216, 0, "'>'"), -(217, 0, "' '"), -(218, 0, "'{'"), -(219, 0, "'nt'"), -(221, 0, "'nt'"), -(220, 1, "''"), -(221, 1, "'}'"), -(220, 0, "'t'"), -(221, 0, "'f'"), -(222, 0, "'e'"), -(223, 0, "'t'"), -(224, 0, "'c'"), -(225, 0, "'h'"), -(226, 0, "'('"), -(209, 0, "'a'"), -(210, 0, "'s'"), -(211, 0, "'y'"), -(212, 0, "'n'"), -(213, 0, "'c'"), -(214, 0, "' '"), -(227, 0, "'a'"), -(228, 0, "'w'"), -(229, 0, "'a'"), -(230, 0, "'i'"), -(231, 0, "'t'"), -(232, 0, "' '"), -(232, 1, "''"), -(227, 5, "''"), -(227, 0, "'await'"), -(232, 0, "' '"), -(239, 0, "'{'"), -(240, 0, "'ntt'"), -(243, 0, "'m'"), -(244, 0, "'e'"), -(245, 0, "'t'"), -(246, 0, "'h'"), -(247, 0, "'d'"), -(248, 0, "':'"), -(249, 0, "' '"), -(243, 7, "'m'"), -(244, 0, "'e'"), -(245, 0, "'t'"), -(246, 0, "'h'"), -(247, 0, "'o'"), -(248, 0, "'d'"), -(249, 0, "':'"), -(250, 0, "' '"), -(251, 0, "'''"), -(252, 0, "'P'"), -(253, 0, "'O'"), -(254, 0, "'S'"), -(255, 0, "'T'"), -(256, 0, "'''"), -(257, 0, "','"), -(258, 0, "'ntt'"), -(261, 0, "'m'"), -(262, 0, "'d'"), -(263, 0, "'e'"), -(263, 1, "''"), -(262, 1, "''"), -(262, 0, "'o'"), -(263, 0, "'d'"), -(264, 0, "'e'"), -(265, 0, "':'"), -(266, 0, "' '"), -(267, 0, "'''"), -(268, 0, "'s'"), -(269, 0, "'a'"), -(268, 2, "'same-origin'"), -(279, 0, "'''"), -(280, 0, "','"), -(281, 0, "'ntt'"), -(284, 0, "'h'"), -(285, 0, "'e'"), -(286, 0, "'a'"), -(287, 0, "'d'"), -(288, 0, "'e'"), -(289, 0, "'r'"), -(290, 0, "'s'"), -(291, 0, "':'"), -(292, 0, "' '"), -(293, 0, "'{'"), -(294, 0, "'nttt'"), -(298, 0, "'''"), -(299, 0, "'c'"), -(300, 0, "'o'"), -(301, 0, "'n'"), -(302, 0, "'t'"), -(303, 0, "'e'"), -(304, 0, "'n'"), -(305, 0, "'t'"), -(306, 0, "'-'"), -(307, 0, "'t'"), -(308, 0, "'y'"), -(309, 0, "'p'"), -(310, 0, "'e'"), -(311, 0, "'''"), -(312, 0, "','"), -(312, 1, "''"), -(312, 0, "':'"), -(313, 0, "' '"), -(314, 0, "'''"), -(315, 0, "'a'"), -(316, 0, "'p'"), -(317, 0, "'p'"), -(318, 0, "'l'"), -(319, 0, "'i'"), -(320, 0, "'c'"), -(321, 0, "'a'"), -(322, 0, "'t'"), -(323, 0, "'i'"), -(324, 0, "'o'"), -(325, 0, "'n'"), -(326, 0, "'/'"), -(327, 0, "'j'"), -(328, 0, "'s'"), -(329, 0, "'o'"), -(330, 0, "'n'"), -(331, 0, "'''"), -(332, 0, "','"), -(333, 0, "'nttt'"), -(334, 3, "'tt}'"), -(337, 0, "','"), -(338, 0, "'ntt'"), -(341, 0, "'b'"), -(342, 0, "'d'"), -(342, 1, "''"), -(342, 0, "'o'"), -(343, 0, "'d'"), -(344, 0, "'y'"), -(345, 0, "':'"), -(346, 0, "' '"), -(347, 0, "'J'"), -(348, 0, "'S'"), -(349, 0, "'O'"), -(350, 0, "'N'"), -(347, 4, "'JSON'"), -(351, 0, "'.'"), -(352, 0, "'s'"), -(353, 0, "'t'"), -(354, 0, "'r'"), -(355, 0, "'i'"), -(356, 0, "'n'"), -(357, 0, "'g'"), -(358, 0, "'i'"), -(359, 0, "'f'"), -(360, 0, "'h'"), -(360, 1, "''"), -(360, 0, "'y'"), -(352, 9, "'stringify'"), -(361, 0, "'('"), -(362, 0, "'p'"), -(363, 0, "'a'"), -(364, 0, "'t'"), -(365, 0, "'c'"), -(366, 0, "'h'"), -(367, 0, "')'"), -(368, 0, "'ntt'"), -(369, 2, "'t}'"), -(239, 0, "'''"), -(240, 0, "'/'"), -(240, 1, "''"), -(239, 1, "''"), -(239, 0, "'`'"), -(240, 0, "'$'"), -(241, 0, "'{'"), -(242, 0, "'r'"), -(243, 0, "'o'"), -(244, 0, "'o'"), -(245, 0, "'m'"), -(246, 0, "'}'"), -(247, 0, "'/'"), -(248, 0, "'c'"), -(249, 0, "'o'"), -(250, 0, "'n'"), -(251, 0, "'f'"), -(252, 0, "'i'"), -(253, 0, "'g'"), -(254, 0, "'u'"), -(255, 0, "'r'"), -(256, 0, "'e'"), -(257, 0, "'`'"), -(258, 0, "','"), -(259, 0, "' '"), -(392, 0, "')'"), -(441, 0, "'nt'"), -(443, 0, "'u'"), -(444, 0, "'p'"), -(445, 0, "'d'"), -(446, 0, "'a'"), -(443, 4, "'update_state'"), -(455, 0, "'('"), -(456, 0, "'{'"), -(457, 0, "'s'"), -(458, 0, "'t'"), -(459, 0, "'a'"), -(460, 0, "'t'"), -(461, 0, "'e'"), -(462, 0, "':'"), -(463, 0, "' '"), -(464, 0, "'''"), -(465, 0, "'p'"), -(466, 0, "'l'"), -(467, 0, "'a'"), -(468, 0, "'y'"), -(469, 0, "'i'"), -(470, 0, "'n'"), -(471, 0, "'g'"), -(472, 0, "'''"), -(473, 0, "'}'"), -(474, 0, "')'"), -(165, 0, "' '"), -(166, 0, "'='"), -(167, 0, "' '"), -(168, 0, "'n'"), -(169, 0, "'u'"), -(170, 0, "'l'"), -(171, 0, "'l'"), -(165, 7, "''"), -(595, 0, "'nt'"), -(596, 1, "''"), -(595, 1, "''"), -(633, 0, "'ntt'"), -(636, 0, "'{'"), -(637, 0, "'#'"), -(638, 0, "'i'"), -(639, 0, "'f'"), -(639, 1, "''"), -(638, 1, "''"), -(637, 1, "''"), -(637, 0, "'i'"), -(638, 0, "'f'"), -(637, 2, "'if'"), -(638, 1, "''"), -(637, 1, "''"), -(637, 0, "'#'"), -(638, 0, "'i'"), -(638, 1, "'if }ntttntt{/if'"), -(641, 0, "'s'"), -(642, 0, "'t'"), -(643, 0, "'a'"), -(644, 0, "'t'"), -(645, 0, "'e'"), -(646, 0, "' '"), -(647, 0, "'='"), -(648, 0, "'='"), -(649, 0, "' '"), -(650, 0, "'''"), -(651, 0, "'w'"), -(652, 0, "'a'"), -(653, 0, "'i'"), -(654, 0, "'t'"), -(655, 0, "'i'"), -(656, 0, "'n'"), -(657, 0, "'g'"), -(658, 0, "'''"), -(713, 0, "'ntt{/if'"), -(665, 7, "''"), -(667, 0, "'t'"), -(714, 0, "'}'"), -(663, 1, "''"), -(661, 2, "''"), -(660, 1, "''"), -(703, 0, "'nttt'"), -(707, 0, "'{'"), -(708, 0, "'#'"), -(708, 1, "''"), -(708, 0, "'e'"), -(709, 0, "'l'"), -(709, 1, "''"), -(708, 1, "''"), -(708, 0, "'e'"), -(709, 0, "'l'"), -(708, 2, "'else'"), -(712, 0, "'}'"), -(704, 3, "'tt'"), -(707, 4, "''"), -(707, 0, "'#'"), -(708, 0, "'e'"), -(709, 0, "'l'"), -(710, 0, "'i'"), -(711, 0, "'f'"), -(707, 1, "''"), -(707, 0, "':'"), -(708, 4, "'e'"), -(709, 0, "'l'"), -(710, 0, "'s'"), -(711, 0, "'e'"), -(712, 0, "' '"), -(713, 0, "'i'"), -(714, 0, "'f'"), -(715, 0, "' '"), -(716, 0, "'s'"), -(717, 0, "'t'"), -(718, 0, "'a'"), -(719, 0, "'t'"), -(720, 0, "'e'"), -(721, 0, "' '"), -(722, 0, "'='"), -(723, 0, "'='"), -(724, 0, "' '"), -(725, 0, "'''"), -(726, 0, "'p'"), -(727, 0, "'l'"), -(728, 0, "'a'"), -(729, 0, "'y'"), -(730, 0, "'i'"), -(731, 0, "'n'"), -(732, 0, "'g'"), -(733, 0, "'''"), -(661, 0, "'tttn'"), -(746, 32, "''"), -(704, 0, "'ttt{:else if state == 'playing'}n'"), -(704, 3, "'tt'"), -(682, 5, "''"), -(682, 0, "'('"), -(683, 0, "')'"), -(684, 0, "' '"), -(685, 0, "'='"), -(686, 0, "'>'"), -(687, 0, "' '"), -(688, 0, "'update_state({state: 'playing'})'"), -(476, 0, "'// '"), -(442, 0, "'// '"), -(419, 0, "'// '"), -(397, 0, "'// '"), -(802, 5, "'update_state({state: 'playing'})'"), -(802, 0, "'('"), -(803, 0, "')'"), -(804, 0, "' '"), -(805, 0, "'='"), -(806, 0, "'>'"), -(807, 0, "' '"), -(830, 7, "'p'"), -(831, 0, "'a'"), -(832, 0, "'u'"), -(833, 0, "'s'"), -(834, 0, "'e'"), -(835, 0, "'d'"), -(841, 5, "'P'"), -(842, 0, "'a'"), -(843, 0, "'u'"), -(844, 0, "'s'"), -(845, 0, "'e'"), -(749, 0, "'tt{:else if state == 'playing'}n'"), -(749, 32, "''"), -(749, 0, "'tt{:else if state == 'playing'}ntttn'"), -(878, 7, "'p'"), -(879, 0, "'a'"), -(880, 0, "'u'"), -(881, 0, "'s'"), -(882, 0, "'e'"), -(883, 0, "'d'"), -(936, 6, "'r'"), -(937, 0, "'e'"), -(938, 0, "'s'"), -(939, 0, "'u'"), -(940, 0, "'m'"), -(941, 0, "'e'"), -(936, 6, "'p'"), -(937, 0, "'l'"), -(938, 0, "'a'"), -(939, 0, "'y'"), -(940, 0, "'i'"), -(941, 0, "'n'"), -(942, 0, "'g'"), -(948, 5, "'R'"), -(949, 0, "'e'"), -(950, 0, "'s'"), -(951, 0, "'u'"), -(952, 0, "'m'"), -(953, 0, "'e'"), -(971, 0, "'ntt'"), -(974, 0, "'ntt'"), -(972, 2, "''"), -(975, 0, "'<'"), -(976, 0, "'l'"), -(977, 0, "'a'"), -(978, 0, "'b'"), -(979, 0, "'e'"), -(980, 0, "'l'"), -(981, 0, "'>'"), -(982, 0, "'N'"), -(983, 0, "'u'"), -(984, 0, "'m'"), -(985, 0, "'b'"), -(986, 0, "'e'"), -(987, 0, "'r'"), -(988, 0, "' '"), -(989, 0, "'o'"), -(990, 0, "'f'"), -(991, 0, "' '"), -(992, 0, "'p'"), -(993, 0, "'l'"), -(994, 0, "'a'"), -(995, 0, "'y'"), -(996, 0, "'e'"), -(997, 0, "'r'"), -(998, 0, "'s'"), -(999, 0, "'<'"), -(1000, 0, "'i'"), -(1001, 0, "'n'"), -(1002, 0, "'p'"), -(1003, 0, "'u'"), -(1004, 0, "'t'"), -(1005, 0, "' '"), -(1006, 0, "'t'"), -(1007, 0, "'y'"), -(1008, 0, "'p'"), -(1009, 0, "'e'"), -(1010, 0, "'='"), -(1011, 0, "'n'"), -(1012, 0, "'u'"), -(1013, 0, "'m'"), -(1014, 0, "'b'"), -(1011, 0, "'''"), -(1016, 0, "'e'"), -(1017, 0, "'r'"), -(1018, 0, "'''"), -(1019, 0, "'>'"), -(1020, 0, "'<'"), -(1021, 0, "'/'"), -(1022, 0, "'l'"), -(1021, 2, "'/label>'"), -(1028, 0, "'>'"), -(1028, 1, "''"), -(975, 0, "'<'"), -(976, 0, "'d'"), -(977, 0, "'i'"), -(978, 0, "'v'"), -(979, 0, "'>'"), -(980, 0, "''"), -(980, 6, "''"), -(980, 0, "'nttt'"), -(1037, 0, "'nttt'"), -(1041, 0, "''"), -(1038, 3, "'tt'"), -(1028, 0, "' '"), -(1029, 0, "'v'"), -(1030, 0, "'a'"), -(1031, 0, "'l'"), -(1032, 0, "'u'"), -(1029, 4, "''"), -(1029, 0, "'b'"), -(1030, 0, "'i'"), -(1031, 0, "'n'"), -(1032, 0, "'d'"), -(1033, 0, "':'"), -(1029, 5, "''"), -(1029, 0, "'o'"), -(1030, 0, "'n'"), -(1031, 0, "':'"), -(1032, 0, "'i'"), -(1033, 0, "'n'"), -(1034, 0, "'p'"), -(1029, 6, "'on:input='''"), -(1039, 1, "''"), -(1038, 1, "''"), -(395, 0, "'n'"), -(396, 0, "'n'"), -(397, 0, "'c'"), -(398, 0, "'o'"), -(399, 0, "'n'"), -(400, 0, "'s'"), -(401, 0, "'t'"), -(402, 0, "' '"), -(403, 0, "'p'"), -(404, 0, "'a'"), -(405, 0, "'t'"), -(406, 0, "'c'"), -(407, 0, "'h'"), -(408, 0, "' '"), -(409, 0, "'='"), -(410, 0, "' '"), -(403, 8, "'u'"), -(404, 0, "'p'"), -(405, 0, "'d'"), -(406, 0, "' '"), -(407, 0, "'='"), -(408, 0, "' '"), -(409, 0, "'('"), -(410, 0, "'p'"), -(411, 0, "'a'"), -(412, 0, "'t'"), -(413, 0, "'c'"), -(414, 0, "'h'"), -(409, 1, "''"), -(414, 0, "' '"), -(414, 1, "''"), -(414, 0, "'>'"), -(415, 0, "' '"), -(415, 1, "''"), -(414, 1, "''"), -(414, 0, "' '"), -(415, 0, "'='"), -(416, 0, "'>'"), -(417, 0, "' '"), -(418, 0, "'('"), -(419, 0, "')'"), -(420, 0, "' '"), -(421, 0, "'='"), -(422, 0, "'>'"), -(423, 0, "' '"), -(424, 0, "'u'"), -(425, 0, "'p'"), -(426, 0, "'d'"), -(427, 0, "'a'"), -(428, 0, "'t'"), -(429, 0, "'e'"), -(424, 6, "'update_state'"), -(436, 0, "'('"), -(437, 0, "'p'"), -(438, 0, "'a'"), -(439, 0, "'t'"), -(440, 0, "'c'"), -(441, 0, "'h'"), -(442, 0, "')'"), -(956, 18, "'u'"), -(850, 18, "'u'"), -(742, 18, "'u'"), -(923, 0, "'p'"), -(834, 0, "'p'"), -(743, 0, "'p'"), -(926, 0, "'d'"), -(836, 0, "'d'"), -(744, 0, "'d'"), -(1041, 0, "'{'"), -(1042, 0, "'u'"), -(1043, 0, "'p'"), -(1044, 0, "'d'"), -(1042, 3, "'upd'"), -(1045, 0, "'('"), -(409, 5, "''"), -(409, 0, "'('"), -(410, 0, "'k'"), -(8, 0, "'nimport { kMaxLength } from 'buffer'n'"), -(447, 1, "'kMaxLength'"), -(457, 0, "','"), -(458, 0, "' '"), -(459, 0, "'v'"), -(460, 0, "')'"), -(458, 3, "''"), -(457, 1, "''"), -(447, 10, "'k'"), -(8, 37, "''"), -(411, 0, "','"), -(412, 0, "' '"), -(413, 0, "'v'"), -(414, 0, "')'"), -(438, 5, "''"), -(438, 0, "'{'"), -(439, 0, "'['"), -(440, 0, "'k'"), -(441, 0, "']'"), -(442, 0, "':'"), -(443, 0, "' '"), -(444, 0, "'v'"), -(445, 0, "'}'"), -(934, 1, "''"), -(843, 1, "''"), -(750, 1, "''"), -(932, 0, "'''"), -(842, 0, "'''"), -(750, 0, "'''"), -(940, 0, "'''"), -(849, 0, "'''"), -(756, 0, "'''"), -(943, 1, "''"), -(851, 1, "''"), -(757, 1, "''"), -(941, 0, "','"), -(850, 0, "','"), -(757, 0, "','"), -(768, 1, "''"), -(860, 1, "''"), -(952, 1, "''"), -(1046, 4, "''"), -(1036, 10, "''"), -(1035, 1, "''"), -(1035, 0, "' on:input={'"), -(1046, 0, "'}'"), -(1046, 0, "'('"), -(1047, 0, "')'"), -(448, 0, "'n'"), -(449, 0, "'c'"), -(450, 0, "'o'"), -(451, 0, "'n'"), -(452, 0, "'s'"), -(453, 0, "'t'"), -(454, 0, "' '"), -(455, 0, "'c'"), -(456, 0, "'o'"), -(457, 0, "'n'"), -(458, 0, "'f'"), -(459, 0, "'i'"), -(460, 0, "'g'"), -(461, 0, "' '"), -(462, 0, "'='"), -(463, 0, "' '"), -(464, 0, "'k'"), -(465, 0, "' '"), -(466, 0, "'='"), -(467, 0, "'>'"), -(468, 0, "' '"), -(469, 0, "'('"), -(470, 0, "'e'"), -(471, 0, "')'"), -(471, 1, "''"), -(470, 1, "''"), -(469, 1, "''"), -(469, 0, "'e'"), -(470, 0, "' '"), -(471, 0, "'='"), -(472, 0, "'>'"), -(473, 0, "' '"), -(474, 0, "'{'"), -(475, 0, "'nt'"), -(477, 0, "'nt'"), -(476, 1, "''"), -(477, 1, "'}'"), -(476, 0, "'t'"), -(477, 0, "'c'"), -(478, 0, "'o'"), -(479, 0, "'n'"), -(480, 0, "'s'"), -(481, 0, "'o'"), -(482, 0, "'l'"), -(483, 0, "'e'"), -(477, 7, "'console'"), -(484, 0, "'.'"), -(485, 0, "'l'"), -(486, 0, "'o'"), -(487, 0, "'g'"), -(485, 3, "'log'"), -(488, 0, "'('"), -(489, 0, "'''"), -(490, 0, "'k'"), -(491, 0, "'''"), -(492, 0, "','"), -(493, 0, "' '"), -(494, 0, "'k'"), -(495, 0, "','"), -(496, 0, "' '"), -(497, 0, "'e'"), -(498, 0, "')'"), -(1100, 1, "''"), -(1099, 1, "''"), -(1099, 0, "'c'"), -(1100, 0, "'o'"), -(1101, 0, "'n'"), -(1102, 0, "'f'"), -(1103, 0, "'i'"), -(1104, 0, "'g'"), -(1099, 6, "'config'"), -(1105, 0, "'('"), -(1106, 0, "'''"), -(1107, 0, "'p'"), -(1108, 0, "'l'"), -(1109, 0, "'a'"), -(1110, 0, "'y'"), -(1111, 0, "'i'"), -(1112, 0, "'n'"), -(1112, 1, "''"), -(1111, 1, "''"), -(1111, 0, "'e'"), -(1112, 0, "'r'"), -(1113, 0, "'s'"), -(1114, 0, "'''"), -(1115, 0, "')'"), -(1068, 0, "'ntttt'"), -(1123, 0, "'nttt'"), -(498, 0, "'.'"), -(499, 0, "'v'"), -(500, 0, "'a'"), -(501, 0, "'l'"), -(502, 0, "'u'"), -(503, 0, "'e'"), -(499, 5, "'d'"), -(500, 0, "'a'"), -(501, 0, "'t'"), -(502, 0, "'a'"), -(504, 0, "'nt'"), -(506, 0, "'u'"), -(507, 0, "'p'"), -(508, 0, "'d'"), -(509, 0, "'a'"), -(506, 4, "'update_state'"), -(518, 0, "'('"), -(519, 0, "'k'"), -(520, 0, "','"), -(521, 0, "' '"), -(521, 1, "''"), -(520, 1, "''"), -(519, 1, "''"), -(519, 0, "'{'"), -(520, 0, "'['"), -(521, 0, "'k'"), -(522, 0, "']'"), -(523, 0, "':'"), -(524, 0, "' '"), -(525, 0, "'e'"), -(526, 0, "'.'"), -(527, 0, "'d'"), -(528, 0, "'a'"), -(529, 0, "'t'"), -(530, 0, "'a'"), -(531, 0, "'}'"), -(532, 0, "')'"), -(1127, 0, "' '"), -(1128, 0, "'v'"), -(1129, 0, "'a'"), -(1130, 0, "'l'"), -(1131, 0, "'u'"), -(1132, 0, "'e'"), -(1133, 0, "'='"), -(1134, 0, "'{'"), -(1135, 0, "'p'"), -(1136, 0, "'l'"), -(1137, 0, "'a'"), -(1138, 0, "'y'"), -(1139, 0, "'e'"), -(1140, 0, "'r'"), -(1141, 0, "'s'"), -(1142, 0, "'}'"), -(1173, 0, "' -->'"), -(1107, 0, "'n'"), -(1258, 4, "''"), -(1187, 5, "''"), -(1200, 6, "'r'"), -(1201, 0, "'a'"), -(1202, 0, "'n'"), -(1203, 0, "'g'"), -(1204, 0, "'e'"), -(1251, 0, "' '"), -(1252, 0, "'m'"), -(1253, 0, "'o'"), -(1254, 0, "'i'"), -(1255, 0, "'n'"), -(1255, 1, "''"), -(1254, 1, "''"), -(1253, 1, "''"), -(1253, 0, "'i'"), -(1254, 0, "'n'"), -(1255, 0, "'='"), -(1256, 0, "'1'"), -(1257, 0, "' '"), -(1258, 0, "'m'"), -(1259, 0, "'a'"), -(1260, 0, "'x'"), -(1261, 0, "'='"), -(1262, 0, "'1'"), -(1263, 0, "'2'"), -(497, 0, "'e'"), -(498, 0, "','"), -(499, 0, "' '"), -(506, 0, "','"), -(507, 0, "' '"), -(508, 0, "'e'"), -(509, 0, "'.'"), -(510, 0, "'d'"), -(510, 1, "''"), -(510, 0, "'v'"), -(511, 0, "'a'"), -(512, 0, "'l'"), -(513, 0, "'u'"), -(514, 0, "'e'"), -(1238, 5, "'s'"), -(1239, 0, "'u'"), -(1240, 0, "'b'"), -(1241, 0, "'m'"), -(1242, 0, "'i'"), -(1243, 0, "'t'"), -(1278, 0, "' -->'"), -(1199, 0, "'ntttnttn'"), -(1311, 0, "'ntt'"), -(1343, 7, "'r'"), -(1312, 2, "''"), -(1341, 1, "''"), -(1341, 0, "'r'"), -(1342, 0, "'o'"), -(1343, 0, "'u'"), -(1344, 0, "'n'"), -(1345, 0, "'d'"), -(1346, 0, "'s'"), -(1406, 7, "'r'"), -(1380, 7, "'r'"), -(1401, 0, "'o'"), -(1381, 0, "'o'"), -(1403, 0, "'u'"), -(1382, 0, "'u'"), -(1405, 0, "'n'"), -(1383, 0, "'n'"), -(1407, 0, "'d'"), -(1384, 0, "'d'"), -(1409, 0, "'s'"), -(1385, 0, "'s'"), -(1391, 4, "'i'"), -(1159, 4, "'i'"), -(1389, 0, "'n'"), -(1160, 0, "'n'"), -(1391, 0, "'p'"), -(1161, 0, "'p'"), -(1393, 0, "'u'"), -(1162, 0, "'u'"), -(1395, 0, "'t'"), -(1163, 0, "'t'"), -(499, 1, "''"), -(498, 1, "''"), -(497, 1, "''"), -(1182, 12, "''"), -(512, 0, "','"), -(513, 0, "' '"), -(514, 0, "'e'"), -(515, 0, "'.'"), -(516, 0, "'t'"), -(517, 0, "'a'"), -(518, 0, "'r'"), -(519, 0, "'g'"), -(520, 0, "'e'"), -(521, 0, "'t'"), -(522, 0, "'.'"), -(523, 0, "'v'"), -(524, 0, "'a'"), -(525, 0, "'l'"), -(526, 0, "'u'"), -(527, 0, "'e'"), -(552, 4, "'t'"), -(553, 0, "'a'"), -(554, 0, "'r'"), -(555, 0, "'g'"), -(556, 0, "'e'"), -(557, 0, "'t'"), -(558, 0, "'.'"), -(559, 0, "'v'"), -(560, 0, "'a'"), -(561, 0, "'l'"), -(562, 0, "'u'"), -(563, 0, "'e'"), -(1205, 0, "' '"), -(1206, 0, "'min=1 max=12'"), -(528, 0, "','"), -(529, 0, "' '"), -(530, 0, "'e'"), -(531, 0, "'.'"), -(532, 0, "'t'"), -(533, 0, "'a'"), -(534, 0, "'r'"), -(535, 0, "'g'"), -(536, 0, "'e'"), -(537, 0, "'t'"), -(538, 0, "'.'"), -(539, 0, "'t'"), -(540, 0, "'y'"), -(541, 0, "'p'"), -(542, 0, "'e'"), -(544, 0, "'nt'"), -(546, 0, "'c'"), -(547, 0, "'o'"), -(548, 0, "'n'"), -(549, 0, "'s'"), -(550, 0, "'t'"), -(551, 0, "' '"), -(552, 0, "'v'"), -(553, 0, "'a'"), -(554, 0, "'l'"), -(555, 0, "'u'"), -(556, 0, "'e'"), -(557, 0, "' '"), -(558, 0, "'='"), -(559, 0, "' '"), -(560, 0, "'e.target.type'"), -(573, 0, "' '"), -(574, 0, "'='"), -(575, 0, "'='"), -(576, 0, "'='"), -(577, 0, "' '"), -(578, 0, "'''"), -(579, 0, "'n'"), -(580, 0, "'u'"), -(581, 0, "'m'"), -(582, 0, "'b'"), -(583, 0, "'e'"), -(584, 0, "'r'"), -(585, 0, "'''"), -(586, 0, "' '"), -(587, 0, "'?'"), -(588, 0, "' '"), -(589, 0, "'e.target.value'"), -(603, 0, "'|'"), -(604, 0, "'0'"), -(605, 0, "' '"), -(606, 0, "':'"), -(607, 0, "' '"), -(608, 0, "'e.target.value'"), -(544, 0, "'nt'"), -(546, 0, "'c'"), -(547, 0, "'o'"), -(548, 0, "'n'"), -(549, 0, "'s'"), -(550, 0, "'t'"), -(551, 0, "' '"), -(552, 0, "'r'"), -(553, 0, "'a'"), -(554, 0, "'w'"), -(555, 0, "'+'"), -(555, 1, "''"), -(555, 0, "'_'"), -(556, 0, "'v'"), -(557, 0, "'a'"), -(558, 0, "'l'"), -(559, 0, "'u'"), -(560, 0, "'e'"), -(561, 0, "' '"), -(562, 0, "'='"), -(563, 0, "' '"), -(564, 0, "'e.target.value'"), -(642, 14, "'r'"), -(623, 14, "'r'"), -(630, 0, "'a'"), -(624, 0, "'a'"), -(632, 0, "'w'"), -(625, 0, "'w'"), -(634, 0, "'_'"), -(626, 0, "'_'"), -(636, 0, "'v'"), -(627, 0, "'v'"), -(638, 0, "'a'"), -(628, 0, "'a'"), -(640, 0, "'l'"), -(629, 0, "'l'"), -(642, 0, "'u'"), -(630, 0, "'u'"), -(644, 0, "'e'"), -(631, 0, "'e'"), -(667, 14, "'v'"), -(668, 0, "'a'"), -(669, 0, "'l'"), -(670, 0, "'u'"), -(671, 0, "'e'"), -(887, 0, "'nt'"), -(889, 0, "'nt'"), -(888, 1, "''"), -(890, 0, "'<'"), -(891, 0, "'d'"), -(892, 0, "'i'"), -(893, 0, "'v'"), -(894, 0, "' '"), -(895, 0, "'i'"), -(896, 0, "'d'"), -(897, 0, "'='"), -(898, 0, "'r'"), -(899, 0, "'o'"), -(900, 0, "'u'"), -(901, 0, "'n'"), -(902, 0, "'d'"), -(903, 0, "'s'"), -(904, 0, "'>'"), -(904, 0, "'''"), -(898, 0, "'''"), -(907, 0, "'ntt'"), -(910, 0, "'<'"), -(911, 0, "'/'"), -(912, 0, "'d'"), -(913, 0, "'i'"), -(914, 0, "'v'"), -(908, 7, "'t'"), -(907, 0, "'ntt'"), -(910, 0, "'{'"), -(911, 0, "'#'"), -(912, 0, "'f'"), -(770, 0, "'n'"), -(771, 0, "'n'"), -(771, 0, "'c'"), -(772, 0, "'o'"), -(773, 0, "'n'"), -(774, 0, "'t'"), -(774, 1, "''"), -(774, 0, "'s'"), -(775, 0, "'t'"), -(776, 0, "' '"), -(777, 0, "'r'"), -(778, 0, "'o'"), -(779, 0, "'u'"), -(780, 0, "'n'"), -(781, 0, "'d'"), -(782, 0, "'s'"), -(783, 0, "' '"), -(784, 0, "'='"), -(785, 0, "' '"), -(786, 0, "'n'"), -(787, 0, "'e'"), -(788, 0, "'w'"), -(789, 0, "' '"), -(790, 0, "'A'"), -(791, 0, "'r'"), -(792, 0, "'r'"), -(793, 0, "'a'"), -(794, 0, "'y'"), -(790, 5, "'Array'"), -(795, 0, "'('"), -(771, 5, "'l'"), -(772, 0, "'e'"), -(773, 0, "'t'"), -(780, 1, "''"), -(780, 0, "'_'"), -(781, 0, "'a'"), -(782, 0, "'r'"), -(783, 0, "'r'"), -(797, 0, "'r'"), -(798, 0, "'o'"), -(799, 0, "'u'"), -(800, 0, "'n'"), -(801, 0, "'d'"), -(802, 0, "'s'"), -(803, 0, "')'"), -(804, 0, "'.'"), -(805, 0, "'f'"), -(806, 0, "'i'"), -(807, 0, "'l'"), -(808, 0, "'l'"), -(805, 4, "'fill'"), -(809, 0, "'('"), -(810, 0, "')'"), -(811, 0, "'.'"), -(812, 0, "'m'"), -(813, 0, "'a'"), -(814, 0, "'p'"), -(804, 11, "''"), -(804, 0, "'.'"), -(805, 0, "'f'"), -(806, 0, "'i'"), -(807, 0, "'l'"), -(808, 0, "'l'"), -(805, 4, "'fill'"), -(809, 0, "'('"), -(810, 0, "')'"), -(954, 1, "''"), -(954, 0, "'e'"), -(955, 0, "'a'"), -(956, 0, "'c'"), -(957, 0, "'h'"), -(958, 0, "' '"), -(959, 0, "'r'"), -(960, 0, "'o'"), -(961, 0, "'u'"), -(962, 0, "'n'"), -(963, 0, "'d'"), -(964, 0, "'_'"), -(965, 0, "'a'"), -(966, 0, "'r'"), -(967, 0, "'r'"), -(968, 0, "' '"), -(969, 0, "'a'"), -(970, 0, "'s'"), -(971, 0, "' '"), -(972, 0, "'_'"), -(973, 0, "','"), -(974, 0, "' '"), -(975, 0, "'i'"), -(976, 0, "'}'"), -(977, 0, "'ntt'"), -(980, 0, "'ntt'"), -(978, 2, "''"), -(981, 0, "'{'"), -(982, 0, "'/'"), -(983, 0, "'e'"), -(984, 0, "'a'"), -(983, 2, "'each'"), -(987, 0, "'}'"), -(978, 0, "'tt'"), -(980, 0, "'t'"), -(981, 0, "'<'"), -(982, 0, "'d'"), -(983, 0, "'i'"), -(984, 0, "'v'"), -(985, 0, "'>'"), -(986, 0, "'R'"), -(987, 0, "'o'"), -(988, 0, "'u'"), -(989, 0, "'n'"), -(990, 0, "'d'"), -(991, 0, "' '"), -(992, 0, "'{'"), -(993, 0, "'i'"), -(994, 0, "'}'"), -(995, 0, "'<'"), -(996, 0, "'/'"), -(997, 0, "'d'"), -(998, 0, "'i'"), -(999, 0, "'v'"), -(1000, 0, "'>'"), -(797, 0, "'M'"), -(798, 0, "'a'"), -(799, 0, "'t'"), -(800, 0, "'h'"), -(801, 0, "'.'"), -(802, 0, "'m'"), -(803, 0, "'i'"), -(804, 0, "'n'"), -(804, 1, "''"), -(803, 1, "''"), -(803, 0, "'a'"), -(804, 0, "'x'"), -(802, 3, "'max'"), -(805, 0, "'('"), -(812, 0, "','"), -(813, 0, "' '"), -(814, 0, "'0'"), -(815, 0, "')'"), -(784, 0, "'n'"), -(785, 0, "'$'"), -(786, 0, "':'"), -(786, 1, "''"), -(785, 1, "''"), -(785, 0, "':'"), -(786, 0, "'$'"), -(786, 1, "''"), -(785, 1, "''"), -(785, 0, "'$'"), -(786, 0, "':'"), -(787, 0, "' '"), -(788, 0, "'r'"), -(789, 0, "'o'"), -(790, 0, "'u'"), -(791, 0, "'n'"), -(792, 0, "'d'"), -(793, 0, "'_'"), -(788, 6, "'round_arr'"), -(1020, 0, "'+'"), -(1021, 0, "'1'"), -(1023, 0, "':'"), -(1024, 0, "'nttttnttt'"), -(1025, 4, "''"), -(985, 9, "'A'"), -(986, 0, "'r'"), -(987, 0, "'r'"), -(988, 0, "'a'"), -(989, 0, "'y'"), -(985, 5, "'Array'"), -(990, 0, "'('"), -(991, 0, "'r'"), -(992, 0, "'o'"), -(993, 0, "'u'"), -(994, 0, "'n'"), -(995, 0, "'d'"), -(996, 0, "'s'"), -(997, 0, "')'"), -(785, 0, "'// '"), -(771, 0, "'// '"), -(997, 0, "'M'"), -(998, 0, "'a'"), -(999, 0, "'t'"), -(1000, 0, "'h'"), -(1001, 0, "'.'"), -(1002, 0, "'m'"), -(1003, 0, "'a'"), -(1004, 0, "'x'"), -(1002, 3, "'max'"), -(1005, 0, "'('"), -(1012, 0, "','"), -(1013, 0, "' '"), -(1014, 0, "'0'"), -(1015, 0, "')'"), -(1048, 0, "'tttt'"), -(1052, 0, "'{#each Array(Math.max(rounds, 0)) as _, i}'"), -(1074, 6, "'p'"), -(1075, 0, "'l'"), -(1076, 0, "'a'"), -(1077, 0, "'y'"), -(1078, 0, "'e'"), -(1079, 0, "'r'"), -(1080, 0, "'s'"), -(1095, 0, "'ntttt'"), -(1100, 0, "'<'"), -(1100, 1, "''"), -(1100, 0, "'{'"), -(1101, 0, "'/'"), -(1102, 0, "'e'"), -(1103, 0, "'a'"), -(1104, 0, "'c'"), -(1105, 0, "'h'"), -(1106, 0, "'>'"), -(1106, 1, "''"), -(1106, 0, "'}'"), -(1095, 0, "'ntttt'"), -(1100, 0, "'t'"), -(1101, 0, "'<'"), -(1102, 0, "'s'"), -(1103, 0, "'p'"), -(1104, 0, "'a'"), -(1105, 0, "'n'"), -(1106, 0, "'>'"), -(1107, 0, "''"), -(1107, 0, "'{'"), -(1093, 1, "''"), -(1024, 1, "''"), -(1024, 0, "'r'"), -(1042, 1, "''"), -(1042, 0, "'r'"), -(1093, 0, "'p'"), -(1108, 0, "'p'"), -(1109, 0, "'+'"), -(1110, 0, "'1'"), -(1111, 0, "'}'"), -(1119, 0, "' '"), -(1119, 1, "''"), -(1112, 0, "' '"), -(2004, 0, "'n'"), -(2005, 0, "'l'"), -(2006, 0, "'a'"), -(2007, 0, "'b'"), -(2008, 0, "'e'"), -(2009, 0, "'l'"), -(2010, 0, "' '"), -(2011, 0, "'{'"), -(2012, 0, "'nt'"), -(2014, 0, "'nt'"), -(2013, 1, "''"), -(2014, 1, "'}'"), -(2013, 0, "'t'"), -(2014, 0, "'d'"), -(2015, 0, "'i'"), -(2016, 0, "'s'"), -(2017, 0, "'p'"), -(2018, 0, "'l'"), -(2019, 0, "'a'"), -(2020, 0, "'y'"), -(2021, 0, "':'"), -(2022, 0, "' '"), -(2023, 0, "'b'"), -(2024, 0, "'l'"), -(2025, 0, "'o'"), -(2026, 0, "'c'"), -(2027, 0, "'k'"), -(2028, 0, "';'"), -(1719, 5, "''"), -(1483, 5, "''"), -(1917, 3, "'tt'"), -(1824, 4, "'ttt'"), -(1742, 4, "'ttt'"), -(1715, 3, "'tt'"), -(1712, 2, "'t'"), -(1690, 3, "'tt'"), -(1597, 4, "'ttt'"), -(1512, 4, "'ttt'"), -(1484, 3, "'tt'"), -(1481, 2, "'t'"), -(1919, 8, "''"), -(1697, 8, "''"), -(1910, 1, "''"), -(1696, 1, "''"), -(1698, 1, "''"), -(1697, 1, "''"), -(1480, 1, "''"), -(1480, 1, "'ntt'"), -(1480, 0, "'ntt'"), -(1700, 0, "'ntt'"), -(1481, 2, "''"), -(1481, 1, "''"), -(1697, 0, "'ntt'"), -(1698, 2, "''"), -(1482, 1, "''"), -(1481, 1, "''"), -(1480, 1, "''"), -(1490, 17, "'M'"), -(1491, 0, "'e'"), -(1492, 0, "'d'"), -(1493, 0, "'i'"), -(1494, 0, "'t'"), -(1495, 0, "'a'"), -(1496, 0, "'t'"), -(1497, 0, "'e'"), -(1498, 0, "' '"), -(1499, 0, "'b'"), -(1500, 0, "'e'"), -(1501, 0, "'f'"), -(1502, 0, "'o'"), -(1503, 0, "'r'"), -(1504, 0, "'e'"), -(1505, 0, "' '"), -(1506, 0, "'g'"), -(1507, 0, "'a'"), -(1508, 0, "'m'"), -(1509, 0, "'e'"), -(1510, 0, "' '"), -(1511, 0, "'s'"), -(1512, 0, "'t'"), -(1513, 0, "'a'"), -(1514, 0, "'r'"), -(1515, 0, "'t'"), -(1490, 0, "'1'"), -(1491, 0, "' '"), -(1492, 0, "'m'"), -(1493, 0, "'i'"), -(1494, 0, "'n'"), -(1495, 0, "'u'"), -(1496, 0, "'t'"), -(1497, 0, "'e'"), -(1498, 0, "' '"), -(1499, 1, "''"), -(1499, 0, "'m'"), -(1506, 1, "''"), -(1506, 0, "'a'"), -(1506, 1, "''"), -(1506, 0, "'i'"), -(1507, 0, "'o'"), -(1508, 0, "'n'"), -(1527, 0, "'s'"), -(1544, 8, "'c'"), -(1545, 0, "'h'"), -(1546, 0, "'e'"), -(1547, 0, "'c'"), -(1548, 0, "'k'"), -(1549, 0, "'b'"), -(1550, 0, "'o'"), -(1551, 0, "'x'"), -(1552, 0, "'''"), -(1544, 0, "'''"), -(87, 0, "'ntexport let players'"), -(80, 7, "'m'"), -(81, 0, "'e'"), -(82, 0, "'d'"), -(83, 0, "'i'"), -(84, 0, "'t'"), -(85, 0, "'a'"), -(86, 0, "'t'"), -(87, 0, "'e'"), -(1583, 7, "''"), -(1583, 0, "'m'"), -(1584, 0, "'e'"), -(1585, 0, "'d'"), -(1586, 0, "'i'"), -(1587, 0, "'t'"), -(1588, 0, "'a'"), -(1589, 0, "'t'"), -(1590, 0, "'e'"), -(1611, 7, "'m'"), -(1612, 0, "'e'"), -(1613, 0, "'d'"), -(1614, 0, "'i'"), -(1615, 0, "'t'"), -(1616, 0, "'a'"), -(1617, 0, "'t'"), -(1618, 0, "'e'"), -(1623, 13, "''"), -(641, 1, "''"), -(641, 0, "' '"), -(655, 1, "''"), -(655, 0, "'nt'"), -(657, 0, "'t'"), -(660, 0, "'ntt'"), -(663, 0, "':'"), -(664, 0, "' '"), -(660, 0, "'e'"), -(661, 0, "'.'"), -(662, 0, "'t'"), -(663, 0, "'a'"), -(664, 0, "'r'"), -(665, 0, "'g'"), -(666, 0, "'e'"), -(667, 0, "'t'"), -(668, 0, "'.'"), -(669, 0, "'t'"), -(670, 0, "'y'"), -(671, 0, "'p'"), -(672, 0, "'e'"), -(673, 0, "' '"), -(674, 0, "'='"), -(675, 0, "'='"), -(676, 0, "'='"), -(677, 0, "' '"), -(678, 0, "'''"), -(679, 0, "'c'"), -(680, 0, "'h'"), -(681, 0, "'e'"), -(682, 0, "'c'"), -(683, 0, "'k'"), -(684, 0, "'b'"), -(685, 0, "'o'"), -(686, 0, "'x'"), -(687, 0, "'''"), -(688, 0, "' '"), -(689, 0, "'?'"), -(690, 0, "' '"), -(691, 0, "'e'"), -(692, 0, "'.'"), -(693, 0, "'t'"), -(694, 0, "'a'"), -(695, 0, "'r'"), -(696, 0, "'g'"), -(697, 0, "'e'"), -(698, 0, "'t'"), -(699, 0, "'.'"), -(700, 0, "'c'"), -(701, 0, "'h'"), -(702, 0, "'e'"), -(703, 0, "'c'"), -(704, 0, "'k'"), -(705, 0, "'e'"), -(706, 0, "'d'"), -(1056, 0, "'ntt'"), -(1059, 0, "'<'"), -(1060, 0, "'h'"), -(1061, 0, "'2'"), -(1062, 0, "'>'"), -(1063, 0, "'G'"), -(1064, 0, "'a'"), -(1065, 0, "'m'"), -(1066, 0, "'e'"), -(1067, 0, "' '"), -(1068, 0, "'s'"), -(1069, 0, "'t'"), -(1070, 0, "'r'"), -(1071, 0, "'u'"), -(1072, 0, "'c'"), -(1073, 0, "'t'"), -(1074, 0, "'u'"), -(1075, 0, "'r'"), -(1076, 0, "'e'"), -(1077, 0, "'<'"), -(1078, 0, "'/'"), -(1079, 0, "'h'"), -(1080, 0, "'2'"), -(1081, 0, "'>'"), -(1082, 0, "'ntt'"), -(1085, 0, "'{'"), -(1086, 0, "'i'"), -(1087, 0, "'f'"), -(1088, 0, "' '"), -(1089, 0, "'m'"), -(1090, 0, "'e'"), -(1091, 0, "'d'"), -(1092, 0, "'i'"), -(1089, 4, "'meditate'"), -(1097, 0, "'}'"), -(1098, 0, "'ntt'"), -(1101, 0, "'t'"), -(1102, 0, "'<'"), -(1103, 0, "'d'"), -(1104, 0, "'i'"), -(1105, 0, "'v'"), -(1106, 0, "'>'"), -(1107, 0, "'M'"), -(1108, 0, "'e'"), -(1109, 0, "'d'"), -(1110, 0, "'i'"), -(1111, 0, "'t'"), -(1112, 0, "'a'"), -(1113, 0, "'t'"), -(1114, 0, "'i'"), -(1115, 0, "'o'"), -(1116, 0, "'n'"), -(1117, 0, "'<'"), -(1118, 0, "'/'"), -(1119, 0, "'d'"), -(1120, 0, "'i'"), -(1121, 0, "'v'"), -(1122, 0, "'>'"), -(1123, 0, "'nttt'"), -(1127, 0, "'<'"), -(1127, 1, "''"), -(1127, 0, "'['"), -(1127, 1, "''"), -(1127, 0, "'{'"), -(1128, 0, "'/'"), -(1129, 0, "'i'"), -(1130, 0, "'f'"), -(1131, 0, "'}'"), -(1124, 3, "'tt'"), -(1086, 0, "'#'"), -(1036, 0, "'nt'"), -(1038, 0, "'nt'"), -(1037, 1, "''"), -(1039, 0, "'<'"), -(1040, 0, "'d'"), -(1041, 0, "'i'"), -(1042, 0, "'v'"), -(1043, 0, "'>'"), -(1043, 0, "' '"), -(1044, 0, "'i'"), -(1045, 0, "'d'"), -(1046, 0, "'='"), -(1047, 0, "'p'"), -(1048, 0, "'r'"), -(1049, 0, "'o'"), -(1050, 0, "'g'"), -(1051, 0, "'r'"), -(1052, 0, "'e'"), -(1053, 0, "'s'"), -(1054, 0, "'s'"), -(1055, 0, "'''"), -(1047, 0, "'''"), -(1058, 0, "'<'"), -(1059, 0, "'/'"), -(1060, 0, "'d'"), -(1061, 0, "'i'"), -(1062, 0, "'c'"), -(1063, 0, "'>'"), -(1063, 1, "''"), -(1062, 1, "''"), -(1062, 0, "'v'"), -(1063, 0, "'>'"), -(2395, 0, "'n'"), -(2396, 0, "'n'"), -(2397, 0, "'#'"), -(2398, 0, "'p'"), -(2399, 0, "'r'"), -(2400, 0, "'o'"), -(2401, 0, "'g'"), -(2402, 0, "'r'"), -(2403, 0, "'e'"), -(2404, 0, "'s'"), -(2405, 0, "'s'"), -(2406, 0, "' '"), -(2407, 0, "'{'"), -(2408, 0, "'nt'"), -(2410, 0, "'nt'"), -(2409, 1, "''"), -(2410, 1, "'}'"), -(2409, 0, "'t'"), -(2410, 0, "'w'"), -(2411, 0, "'i'"), -(2412, 0, "'d'"), -(2413, 0, "'t'"), -(2414, 0, "'h'"), -(2415, 0, "':'"), -(2416, 0, "' '"), -(2417, 0, "'1'"), -(2418, 0, "'0'"), -(2419, 0, "'0'"), -(2420, 0, "'%'"), -(2421, 0, "';'"), -(2422, 0, "'nt'"), -(2424, 0, "'h'"), -(2425, 0, "'e'"), -(2426, 0, "'i'"), -(2427, 0, "'g'"), -(2428, 0, "'h'"), -(2429, 0, "'t'"), -(2430, 0, "':'"), -(2431, 0, "' '"), -(2432, 0, "'3'"), -(2433, 0, "'e'"), -(2434, 0, "'m'"), -(2435, 0, "':'"), -(2435, 1, "''"), -(2435, 0, "';'"), -(2436, 0, "'nt'"), -(2438, 0, "'b'"), -(2439, 0, "'o'"), -(2440, 0, "'r'"), -(2441, 0, "'d'"), -(2442, 0, "'e'"), -(2443, 0, "'r'"), -(2444, 0, "':'"), -(2445, 0, "' '"), -(2446, 0, "'1'"), -(2447, 0, "'p'"), -(2448, 0, "'x'"), -(2449, 0, "' '"), -(2450, 0, "'s'"), -(2451, 0, "'o'"), -(2452, 0, "'l'"), -(2453, 0, "'i'"), -(2454, 0, "'d'"), -(2455, 0, "' '"), -(2456, 0, "'w'"), -(2457, 0, "'h'"), -(2458, 0, "'i'"), -(2459, 0, "'t'"), -(2460, 0, "'e'"), -(2461, 0, "';'"), -(2462, 0, "'nt'"), -(2464, 0, "'m'"), -(2465, 0, "'a'"), -(2466, 0, "'r'"), -(2467, 0, "'g'"), -(2468, 0, "'i'"), -(2469, 0, "'n'"), -(2470, 0, "':'"), -(2471, 0, "' '"), -(2472, 0, "'1'"), -(2473, 0, "'0'"), -(2474, 0, "'p'"), -(2475, 0, "'x'"), -(2476, 0, "';'"), -(2464, 6, "'p'"), -(2465, 0, "'a'"), -(2466, 0, "'d'"), -(2467, 0, "'d'"), -(2468, 0, "'i'"), -(2469, 0, "'n'"), -(2470, 0, "'g'"), -(2417, 0, "'c'"), -(2418, 0, "'a'"), -(2419, 0, "'l'"), -(2420, 0, "'c'"), -(2421, 0, "'('"), -(2426, 0, "' '"), -(2427, 0, "'-'"), -(2428, 0, "' '"), -(2429, 0, "'2'"), -(2430, 0, "'0'"), -(2431, 0, "'p'"), -(2432, 0, "'x'"), -(2433, 0, "')'"), -(2477, 7, "'m'"), -(2478, 0, "'a'"), -(2479, 0, "'r'"), -(2480, 0, "'g'"), -(2481, 0, "'i'"), -(2482, 0, "'n'"), -(2490, 0, "'ntborder: 1px solid white;'"), -(2450, 26, "''"), -(2464, 0, "'ntheight: 3em;'"), -(2436, 14, "''"), -(2429, 1, "''"), -(2429, 0, "'5'"), -(2445, 1, "''"), -(2445, 1, "''"), -(2445, 0, "'2'"), -(2446, 0, "'5'"), -(2462, 1, "''"), -(2461, 1, "''"), -(2460, 1, "''"), -(2460, 0, "'4'"), -(2461, 0, "'e'"), -(2462, 0, "'m'"), -(2460, 1, "''"), -(2460, 0, "'5'"), -(2474, 1, "''"), -(2474, 0, "'2'"), -(2406, 0, "'c'"), -(2407, 0, "'o'"), -(2408, 0, "'n'"), -(2409, 0, "'t'"), -(2410, 0, "'a'"), -(2411, 0, "'i'"), -(2412, 0, "'n'"), -(2413, 0, "'e'"), -(2414, 0, "'r'"), -(1048, 8, "'progresscontainer'"), -(1067, 0, "'nttnt'"), -(1070, 0, "'<'"), -(1071, 0, "'d'"), -(1072, 0, "'i'"), -(1073, 0, "'v'"), -(1074, 0, "' '"), -(1075, 0, "'i'"), -(1076, 0, "'d'"), -(1077, 0, "'='"), -(1078, 0, "'''"), -(1079, 0, "'p'"), -(1080, 0, "'r'"), -(1081, 0, "'o'"), -(1082, 0, "'g'"), -(1083, 0, "'r'"), -(1084, 0, "'e'"), -(1085, 0, "'s'"), -(1086, 0, "'s'"), -(1087, 0, "'''"), -(1088, 0, "'<'"), -(1089, 0, "'/'"), -(1090, 0, "'d'"), -(1091, 0, "'i'"), -(1092, 0, "'v'"), -(1093, 0, "'>'"), -(1088, 0, "'>'"), -(1088, 0, "' '"), -(1089, 0, "'s'"), -(1090, 0, "'t'"), -(1091, 0, "'y'"), -(1092, 0, "'l'"), -(1093, 0, "'e'"), -(1094, 0, "'='"), -(1095, 0, "'''"), -(1095, 1, "''"), -(1095, 0, "'{'"), -(1096, 0, "'}'"), -(1096, 0, "'{'"), -(1097, 0, "'}'"), -(1097, 0, "'w'"), -(1098, 0, "'i'"), -(1099, 0, "'d'"), -(1100, 0, "'t'"), -(1101, 0, "'h'"), -(1102, 0, "':'"), -(1103, 0, "' '"), -(1104, 0, "'5'"), -(1105, 0, "'0'"), -(1106, 0, "'%'"), -(1107, 0, "'''"), -(1104, 0, "'''"), -(2563, 0, "'n'"), -(2564, 0, "'n'"), -(2565, 0, "'#'"), -(2566, 0, "'p'"), -(2567, 0, "'r'"), -(2568, 0, "'o'"), -(2569, 0, "'g'"), -(2570, 0, "'r'"), -(2571, 0, "'e'"), -(2572, 0, "'s'"), -(2573, 0, "'s'"), -(2574, 0, "' '"), -(2575, 0, "'{'"), -(2576, 0, "'nt'"), -(2578, 0, "'nt'"), -(2577, 1, "''"), -(2578, 1, "'}'"), -(2506, 0, "' */'"), -(2481, 0, "'/* '"), -(2583, 0, "'t'"), -(2584, 0, "'w'"), -(2585, 0, "'i'"), -(2586, 0, "'d'"), -(2587, 0, "'t'"), -(2588, 0, "'h'"), -(2589, 0, "':'"), -(2590, 0, "' '"), -(2584, 7, "'b'"), -(2585, 0, "'o'"), -(2586, 0, "'r'"), -(2587, 0, "'d'"), -(2588, 0, "'e'"), -(2589, 0, "'r'"), -(2584, 6, "'b'"), -(2585, 0, "'a'"), -(2586, 0, "'c'"), -(2587, 0, "'k'"), -(2588, 0, "'g'"), -(2589, 0, "'r'"), -(2590, 0, "'o'"), -(2591, 0, "'u'"), -(2592, 0, "'n'"), -(2593, 0, "'d'"), -(2594, 0, "'-'"), -(2595, 0, "'c'"), -(2596, 0, "'o'"), -(2597, 0, "'l'"), -(2598, 0, "'o'"), -(2599, 0, "'r'"), -(2600, 0, "':'"), -(2601, 0, "' '"), -(2602, 0, "'w'"), -(2603, 0, "'h'"), -(2604, 0, "'i'"), -(2605, 0, "'t'"), -(2606, 0, "'e'"), -(2607, 0, "';'"), -(2608, 0, "'nt'"), -(2610, 0, "'w'"), -(2611, 0, "'i'"), -(2612, 0, "'d'"), -(2613, 0, "'t'"), -(2614, 0, "'h'"), -(2615, 0, "':'"), -(2616, 0, "' '"), -(2617, 0, "'5'"), -(2618, 0, "'0'"), -(2619, 0, "'%'"), -(2620, 0, "';'"), -(2608, 0, "'ntbackground-color: white;'"), -(2584, 11, "''"), -(2636, 0, "'nt'"), -(2638, 0, "'h'"), -(2639, 0, "'e'"), -(2640, 0, "'i'"), -(2641, 0, "'g'"), -(2642, 0, "'h'"), -(2643, 0, "'t'"), -(2644, 0, "':'"), -(2645, 0, "' '"), -(2646, 0, "'1'"), -(2647, 0, "'0'"), -(2648, 0, "'0'"), -(2649, 0, "'%'"), -(2650, 0, "';'"), -(2583, 14, "''"), -(2582, 1, "''"), -(2621, 0, "' */'"), -(2610, 0, "'/* '"), -(1096, 1, "''"), -(1108, 1, "''"), -(1095, 1, "''"), -(1094, 1, "''"), -(1094, 0, "':'"), -(1107, 1, "''"), -(1101, 1, "''"), -(1100, 1, "''"), -(1100, 0, "'='"), -(1094, 0, "'='"), -(1095, 0, "'''"), -(1096, 1, "''"), -(1102, 1, "''"), -(1101, 1, "''"), -(1101, 0, "':'"), -(1102, 0, "' '"), -(919, 0, "'n'"), -(920, 0, "'c'"), -(921, 0, "'o'"), -(922, 0, "'n'"), -(923, 0, "'s'"), -(924, 0, "'t'"), -(925, 0, "' '"), -(926, 0, "'w'"), -(927, 0, "'i'"), -(928, 0, "'d'"), -(929, 0, "'t'"), -(930, 0, "'h'"), -(931, 0, "' '"), -(932, 0, "'='"), -(933, 0, "' '"), -(934, 0, "'5'"), -(935, 0, "'0'"), -(1120, 2, "''"), -(1120, 0, "'{'"), -(1121, 0, "'w'"), -(1122, 0, "'i'"), -(1123, 0, "'d'"), -(1124, 0, "'t'"), -(1125, 0, "'h'"), -(1126, 0, "'}'"), -(920, 5, "'l'"), -(921, 0, "'e'"), -(922, 0, "'t'"), -(934, 0, "'n'"), -(935, 0, "'s'"), -(936, 0, "'e'"), -(937, 0, "'t'"), -(938, 0, "'I'"), -(939, 0, "'n'"), -(935, 5, "'setInterval'"), -(946, 0, "'('"), -(947, 0, "'('"), -(948, 0, "')'"), -(949, 0, "' '"), -(950, 0, "'='"), -(951, 0, "'>'"), -(952, 0, "' '"), -(953, 0, "'w'"), -(954, 0, "'i'"), -(955, 0, "'d'"), -(956, 0, "'t'"), -(957, 0, "'h'"), -(958, 0, "'+'"), -(959, 0, "'+'"), -(960, 0, "','"), -(961, 0, "' '"), -(962, 0, "'1'"), -(963, 0, "'0'"), -(964, 0, "'0'"), -(965, 0, "'0'"), -(966, 0, "')'"), -(919, 48, "''"), -(919, 0, "'nlet width = 50nsetInterval(() => width++, 1000)'"), -(935, 0, "'// '"), -(109, 0, "'texport let roundsn'"), -(140, 6, "'r'"), -(141, 0, "'o'"), -(142, 0, "'u'"), -(143, 0, "'n'"), -(140, 4, "''"), -(140, 0, "'b'"), -(141, 0, "'e'"), -(142, 0, "'a'"), -(143, 0, "'d'"), -(144, 0, "'_'"), -(128, 17, "''"), -(127, 1, "''"), -(156, 1, "''"), -(155, 1, "''"), -(154, 1, "''"), -(153, 1, "''"), -(152, 1, "''"), -(152, 0, "'b'"), -(153, 0, "'e'"), -(154, 0, "'a'"), -(155, 0, "'d'"), -(2215, 0, "'ttn'"), -(2424, 0, "'ntt'"), -(2437, 16, "'S'"), -(2425, 2, "''"), -(2436, 0, "'e'"), -(2437, 0, "'c'"), -(2438, 0, "'o'"), -(2439, 0, "'n'"), -(2440, 0, "'s'"), -(2440, 1, "''"), -(2440, 0, "'d'"), -(2441, 0, "'s'"), -(2442, 0, "' '"), -(2443, 0, "'p'"), -(2444, 0, "'e'"), -(2445, 0, "'r'"), -(2446, 0, "' '"), -(2447, 0, "'b'"), -(2448, 0, "'e'"), -(2449, 0, "'a'"), -(2450, 0, "'d'"), -(2319, 1, "''"), -(2318, 1, "''"), -(2318, 0, "'2'"), -(2319, 0, "'0'"), -(2530, 1, "''"), -(2529, 1, "''"), -(2518, 11, "''"), -(2483, 6, "'s'"), -(2484, 0, "'e'"), -(2485, 0, "'c'"), -(2486, 0, "'o'"), -(2487, 0, "'n'"), -(2483, 5, "'seconds_per_bead'"), -(2519, 6, "'s'"), -(2520, 0, "'e'"), -(2521, 0, "'c'"), -(2522, 0, "'o'"), -(2523, 0, "'n'"), -(2524, 0, "'d'"), -(2525, 0, "'s'"), -(2526, 0, "'_'"), -(2527, 0, "'p'"), -(2528, 0, "'e'"), -(2529, 0, "'r'"), -(2530, 0, "'_'"), -(2531, 0, "'b'"), -(2532, 0, "'e'"), -(2533, 0, "'a'"), -(2534, 0, "'d'"), -(1259, 0, "' '"), -(1260, 0, "'('"), -(1261, 0, "'1'"), -(1262, 0, "' '"), -(1263, 0, "'m'"), -(1264, 0, "'i'"), -(1265, 0, "'n'"), -(1266, 0, "')'"), -(1052, 0, "'t
{connection} / {state}
n'"), -(1094, 20, "''"), -(1094, 0, "'_'"), -(1094, 1, "'_'"), -(1095, 0, "'a'"), -(1096, 0, "'c'"), -(1097, 0, "'t'"), -(1098, 0, "'i'"), -(1094, 5, "'_active_sessions'"), -(1111, 0, "' '"), -(1112, 0, "'s'"), -(1113, 0, "'e'"), -(1114, 0, "'s'"), -(1112, 3, "'p'"), -(1113, 0, "'l'"), -(1114, 0, "'a'"), -(1115, 0, "'y'"), -(1116, 0, "'e'"), -(1117, 0, "'r'"), -(1118, 0, "'s'"), -(1119, 0, "' '"), -(1120, 0, "'i'"), -(1121, 0, "'n'"), -(1122, 0, "' '"), -(1123, 0, "'r'"), -(1124, 0, "'o'"), -(1125, 0, "'o'"), -(1126, 0, "'m'"), -(1118, 0, "'('"), -(1120, 0, "')'"), -(88, 0, "'ntexport let meditate'"), -(80, 8, "'a'"), -(81, 0, "'r'"), -(82, 0, "'c'"), -(83, 0, "'h'"), -(84, 0, "'e'"), -(85, 0, "'t'"), -(86, 0, "'o'"), -(87, 0, "'p'"), -(88, 0, "'i'"), -(89, 0, "'c'"), -(1074, 0, "'nt

Room: {room}

'"), -(1080, 4, "'T'"), -(1081, 0, "'o'"), -(1082, 0, "'p'"), -(1083, 0, "'i'"), -(1084, 0, "'c'"), -(1092, 4, "'a'"), -(1093, 0, "'r'"), -(1094, 0, "'c'"), -(1095, 0, "'h'"), -(1096, 0, "'i'"), -(1092, 5, "'archetopic'"), -(2117, 0, "'ntt'"), -(2117, 0, "'ntt'"), -(2118, 2, "''"), -(1956, 8, "'t'"), -(1957, 0, "'e'"), -(1958, 0, "'x'"), -(1959, 0, "'t'"), -(1969, 8, "'a'"), -(1970, 0, "'r'"), -(1971, 0, "'c'"), -(1972, 0, "'h'"), -(8, 0, "'nimport { arch } from 'os';nn'"), -(1998, 4, "'arch'"), -(2002, 0, "'e'"), -(2003, 0, "'t'"), -(1998, 6, "'archetopic'"), -(2028, 8, "'a'"), -(2029, 0, "'r'"), -(2030, 0, "'c'"), -(2031, 0, "'h'"), -(2032, 0, "'e'"), -(2033, 0, "'t'"), -(2034, 0, "'p'"), -(2034, 1, "''"), -(2034, 0, "'o'"), -(2035, 0, "'p'"), -(2036, 0, "'i'"), -(2037, 0, "'c'"), -(2044, 92, "''"), -(1930, 38, "'A'"), -(1931, 0, "'r'"), -(1932, 0, "'c'"), -(1933, 0, "'h'"), -(1934, 0, "'e'"), -(1935, 0, "'t'"), -(1936, 0, "'o'"), -(1937, 0, "'p'"), -(1938, 0, "'i'"), -(1939, 0, "'c'"), -(9, 29, "''"), -(230, 0, "'nt'"), -(232, 0, "'nt'"), -(231, 1, "''"), -(232, 1, "''"), -(231, 0, "'const ARCHETOPICS = [n 'Truth', 'Human', 'Energy', 'Beauty', 'Beginning', 'End', 'Birth', 'Death',n 'Ego', 'Attention', 'Art', 'Empathy', 'Eutopia', 'Future', 'Game', 'Gift',n 'History', 'Cosmos', 'Time', 'Life', 'Addiction', 'Paradox', 'Shadow', 'Society'n]n'"), -(231, 0, "'t'"), -(231, 1, "''"), -(2250, 0, "'nttt'"), -(2254, 0, "'<'"), -(2255, 0, "'d'"), -(2256, 0, "'a'"), -(2257, 0, "'t'"), -(2258, 0, "'a'"), -(2259, 0, "'l'"), -(2260, 0, "'i'"), -(2261, 0, "'s'"), -(2262, 0, "'t'"), -(2263, 0, "' '"), -(2264, 0, "'i'"), -(2265, 0, "'d'"), -(2266, 0, "'='"), -(2267, 0, "'a'"), -(2268, 0, "'r'"), -(2269, 0, "'c'"), -(2270, 0, "'h'"), -(2271, 0, "'e'"), -(2272, 0, "'t'"), -(2273, 0, "'o'"), -(2274, 0, "'p'"), -(2275, 0, "'c'"), -(2276, 0, "'i'"), -(2277, 0, "'s'"), -(2277, 1, "''"), -(2276, 1, "''"), -(2275, 1, "''"), -(2275, 0, "'i'"), -(2276, 0, "'c'"), -(2277, 0, "'s'"), -(2278, 0, "'''"), -(2267, 0, "'''"), -(2280, 0, "'>'"), -(2281, 0, "''"), -(2281, 0, "'nttttnttt'"), -(2286, 0, "'<'"), -(2287, 0, "'o'"), -(2288, 0, "'p'"), -(2288, 1, "''"), -(2287, 1, "''"), -(2286, 1, "''"), -(2286, 0, "'{'"), -(2287, 0, "'#'"), -(2288, 0, "'e'"), -(2289, 0, "'a'"), -(2290, 0, "'c'"), -(2291, 0, "'h'"), -(2292, 0, "' '"), -(2293, 0, "'A'"), -(2294, 0, "'R'"), -(2295, 0, "'C'"), -(2296, 0, "'H'"), -(2293, 4, "'ARCHETOPICS'"), -(2304, 0, "' '"), -(2305, 0, "'a'"), -(2306, 0, "'s'"), -(2307, 0, "' '"), -(2308, 0, "'t'"), -(2309, 0, "'o'"), -(2310, 0, "'p'"), -(2311, 0, "'i'"), -(2312, 0, "'c'"), -(2313, 0, "'}'"), -(2314, 0, "'ntttt'"), -(2319, 0, "'t'"), -(2320, 0, "'<'"), -(2321, 0, "'o'"), -(2322, 0, "'p'"), -(2323, 0, "'t'"), -(2324, 0, "'i'"), -(2325, 0, "'o'"), -(2326, 0, "'n'"), -(2327, 0, "' '"), -(2328, 0, "'v'"), -(2329, 0, "'a'"), -(2330, 0, "'l'"), -(2331, 0, "'u'"), -(2332, 0, "'e'"), -(2333, 0, "'='"), -(2334, 0, "'{'"), -(2335, 0, "'t'"), -(2336, 0, "'o'"), -(2337, 0, "'p'"), -(2338, 0, "'i'"), -(2339, 0, "'c'"), -(2340, 0, "'}'"), -(2341, 0, "'/'"), -(2342, 0, "'?'"), -(2342, 1, "''"), -(2341, 1, "''"), -(2341, 0, "'>'"), -(2342, 0, "'ntttttt'"), -(2349, 0, "'{'"), -(2350, 0, "'/'"), -(2351, 0, "'e'"), -(2352, 0, "'a'"), -(2353, 0, "'c'"), -(2354, 0, "'h'"), -(2355, 0, "'>'"), -(2355, 1, "''"), -(2355, 0, "'}'"), -(2343, 6, "'ttttt'"), -(2343, 5, "'tttt'"), -(2248, 0, "' '"), -(2249, 0, "'l'"), -(2250, 0, "'i'"), -(2251, 0, "'s'"), -(2252, 0, "'t'"), -(2253, 0, "'='"), -(2254, 0, "'a'"), -(2255, 0, "'r'"), -(2256, 0, "'c'"), -(2257, 0, "'h'"), -(2254, 4, "'archetopic'"), -(2264, 0, "'s'"), -(2265, 0, "'''"), -(2254, 0, "'''"), -(1827, 0, "'ntt'"), -(1830, 0, "'<'"), -(1831, 0, "'d'"), -(1832, 0, "'i'"), -(1833, 0, "'v'"), -(1834, 0, "'>'"), -(1835, 0, "''"), -(1835, 0, "'ntttntt'"), -(1839, 0, "'T'"), -(1840, 0, "'o'"), -(1841, 0, "'t'"), -(1842, 0, "'a'"), -(1843, 0, "'l'"), -(1844, 0, "' '"), -(1845, 0, "'g'"), -(1846, 0, "'a'"), -(1847, 0, "'m'"), -(1848, 0, "'e'"), -(1849, 0, "' '"), -(1850, 0, "'l'"), -(1851, 0, "'e'"), -(1852, 0, "'n'"), -(1853, 0, "'g'"), -(1854, 0, "'t'"), -(1855, 0, "'h'"), -(1856, 0, "' '"), -(1857, 0, "'('"), -(1858, 0, "'i'"), -(1859, 0, "'n'"), -(1860, 0, "'c'"), -(1861, 0, "'l'"), -(1862, 0, "'u'"), -(1863, 0, "'d'"), -(1864, 0, "'i'"), -(1865, 0, "'n'"), -(1857, 9, "''"), -(1856, 1, "''"), -(1856, 0, "':'"), -(1857, 0, "' '"), -(1858, 0, "'$'"), -(1859, 0, "'{'"), -(1859, 1, "''"), -(1858, 1, "''"), -(1858, 0, "'{'"), -(1859, 0, "'r'"), -(1860, 0, "'o'"), -(1861, 0, "'u'"), -(1862, 0, "'n'"), -(1863, 0, "'d'"), -(1864, 0, "'s'"), -(1865, 0, "' '"), -(1866, 0, "'*'"), -(1867, 0, "' '"), -(1868, 0, "'p'"), -(1869, 0, "'l'"), -(1870, 0, "'a'"), -(1871, 0, "'y'"), -(1872, 0, "'e'"), -(1873, 0, "'r'"), -(1874, 0, "'s'"), -(1875, 0, "' '"), -(1876, 0, "'*'"), -(1877, 0, "' '"), -(1877, 1, "''"), -(1876, 1, "''"), -(1875, 1, "''"), -(1875, 0, "' '"), -(1876, 0, "'+'"), -(1877, 0, "' '"), -(1859, 0, "'('"), -(1859, 1, "''"), -(1878, 0, "'('"), -(1879, 0, "'m'"), -(1880, 0, "'e'"), -(1881, 0, "'d'"), -(1882, 0, "'i'"), -(1883, 0, "'t'"), -(1879, 5, "'meditate'"), -(1887, 0, "' '"), -(1888, 0, "'?'"), -(1889, 0, "' '"), -(1890, 0, "'1'"), -(1891, 0, "' '"), -(1892, 0, "':'"), -(1893, 0, "' '"), -(1894, 0, "'0'"), -(1895, 0, "')'"), -(1896, 0, "')'"), -(1859, 0, "'('"), -(1898, 0, "' '"), -(1899, 0, "'*'"), -(1900, 0, "' '"), -(1901, 0, "'s'"), -(1902, 0, "'e'"), -(1903, 0, "'c'"), -(1904, 0, "'o'"), -(1905, 0, "'n'"), -(1906, 0, "'d'"), -(1901, 6, "'seconds_per_bead'"), -(1917, 0, "' '"), -(1918, 0, "'/'"), -(1919, 0, "' '"), -(1920, 0, "'6'"), -(1921, 0, "'0'"), -(1922, 0, "'}'"), -(1923, 0, "' '"), -(1924, 0, "'m'"), -(1925, 0, "'i'"), -(1926, 0, "'n'"), -(1927, 0, "'u'"), -(1928, 0, "'t'"), -(1929, 0, "'e'"), -(1930, 0, "'s'"), -(1037, 0, "'n'"), -(1038, 0, "'n'"), -(1039, 0, "'c'"), -(1040, 0, "'o'"), -(1041, 0, "'n'"), -(1042, 0, "'s'"), -(1043, 0, "'t'"), -(1044, 0, "' '"), -(1045, 0, "'r'"), -(1046, 0, "'o'"), -(1047, 0, "'u'"), -(1048, 0, "'n'"), -(1049, 0, "'d'"), -(1050, 0, "'_'"), -(1051, 0, "'t'"), -(1052, 0, "'o'"), -(1053, 0, "' '"), -(1054, 0, "' '"), -(1054, 1, "''"), -(1054, 0, "'='"), -(1055, 0, "' '"), -(1056, 0, "'('"), -(1052, 1, "''"), -(1051, 1, "''"), -(1050, 1, "''"), -(1050, 0, "'i'"), -(1051, 0, "'s'"), -(1052, 0, "'h'"), -(1056, 1, "''"), -(1056, 0, "'x'"), -(1057, 0, "' '"), -(1058, 0, "'='"), -(1059, 0, "'>'"), -(1060, 0, "' '"), -(1061, 0, "'x'"), -(1062, 0, "' '"), -(1063, 0, "'*'"), -(1064, 0, "' '"), -(1065, 0, "'1'"), -(1066, 0, "'0'"), -(1067, 0, "'0'"), -(1061, 0, "'M'"), -(1062, 0, "'a'"), -(1063, 0, "'t'"), -(1064, 0, "'h'"), -(1065, 0, "'.'"), -(1066, 0, "'r'"), -(1067, 0, "'o'"), -(1068, 0, "'u'"), -(1069, 0, "'n'"), -(1070, 0, "'d'"), -(1066, 5, "'round'"), -(1071, 0, "'('"), -(1079, 0, "'('"), -(1079, 1, "''"), -(1079, 0, "')'"), -(1080, 0, "' '"), -(1081, 0, "'/'"), -(1082, 0, "' '"), -(1083, 0, "'2'"), -(1084, 0, "'0'"), -(1084, 1, "''"), -(1083, 1, "''"), -(1083, 0, "'1'"), -(1084, 0, "'0'"), -(1085, 0, "'0'"), -(1086, 0, "'n'"), -(1909, 0, "'r'"), -(1910, 0, "'o'"), -(1911, 0, "'u'"), -(1912, 0, "'n'"), -(1913, 0, "'d'"), -(1914, 0, "'i'"), -(1915, 0, "'s'"), -(1916, 0, "'h'"), -(1909, 8, "'roundish'"), -(1917, 0, "'('"), -(1981, 0, "')'"), -(1878, 123, "''"), -(3328, 0, "'nt'"), -(3328, 2, "''"), -(3320, 0, "'ntt'"), -(3323, 0, "'ntt'"), -(3321, 2, "''"), -(3324, 0, "'tt
ntttTotal game length: {roundish((rounds * players + (meditate ? 1 : 0)) * seconds_per_bead / 60)} minutesntt
n'"), -(3322, 4, "'tt'"), -(3444, 1, "''"), -(3333, 0, "'('"), -(3436, 0, "')'"), -(2541, 0, "' '"), -(2541, 1, "''"), -(2525, 5, "'c'"), -(2526, 0, "'h'"), -(2527, 0, "'e'"), -(2528, 0, "'c'"), -(2529, 0, "'k'"), -(2530, 0, "'e'"), -(2531, 0, "'d'"), -(2255, 5, "''"), -(1406, 5, "''"), -(80, 5, "''"), -(2205, 1, "''"), -(2205, 1, "''"), -(2205, 1, "''"), -(2205, 1, "''"), -(2205, 1, "''"), -(2205, 1, "''"), -(2205, 0, "'T'"), -(2265, 1, "''"), -(2265, 1, "''"), -(2265, 1, "''"), -(2265, 1, "''"), -(2265, 1, "''"), -(225, 263, "''"), -(225, 0, "'nconst ARCHETOPICS = [n 'Truth', 'Human', 'Energy', 'Beauty', 'Beginning', 'End', 'Birth', 'Death',n 'Ego', 'Attention', 'Art', 'Empathy', 'Eutopia', 'Future', 'Game', 'Gift',n 'History', 'Cosmos', 'Time', 'Life', 'Addiction', 'Paradox', 'Shadow', 'Society'n]n'"), -(488, 0, "'n'"), -(489, 0, "'c'"), -(490, 0, "'o'"), -(491, 0, "'n'"), -(492, 0, "'s'"), -(493, 0, "'t'"), -(494, 0, "' '"), -(495, 0, "'g'"), -(496, 0, "'e'"), -(497, 0, "'t'"), -(498, 0, "'_'"), -(489, 10, "''"), -(489, 0, "'$'"), -(490, 0, "':'"), -(491, 0, "' '"), -(492, 0, "'{'"), -(493, 0, "'nt'"), -(495, 0, "'nt'"), -(494, 1, "''"), -(495, 1, "'}'"), -(494, 0, "'t'"), -(494, 1, "''"), -(488, 0, "'n'"), -(489, 0, "'l'"), -(490, 0, "'e'"), -(491, 0, "'t'"), -(492, 0, "' '"), -(493, 0, "'g'"), -(494, 0, "'a'"), -(495, 0, "'m'"), -(496, 0, "'e'"), -(497, 0, "'_'"), -(498, 0, "'s'"), -(499, 0, "'a'"), -(500, 0, "'t'"), -(501, 0, "'a'"), -(501, 1, "''"), -(500, 1, "''"), -(499, 1, "''"), -(498, 1, "''"), -(498, 0, "'s'"), -(499, 0, "'t'"), -(500, 0, "'a'"), -(501, 0, "'g'"), -(502, 0, "'e'"), -(503, 0, "'s'"), -(510, 0, "'t'"), -(511, 0, "'g'"), -(512, 0, "'a'"), -(513, 0, "'m'"), -(514, 0, "'e'"), -(515, 0, "'_'"), -(511, 5, "'game_stages'"), -(522, 0, "' '"), -(523, 0, "'='"), -(524, 0, "' '"), -(525, 0, "'['"), -(526, 0, "']'"), -(527, 0, "'nt'"), -(529, 0, "'i'"), -(530, 0, "'f'"), -(531, 0, "' '"), -(532, 0, "'('"), -(533, 0, "'m'"), -(534, 0, "'e'"), -(535, 0, "'d'"), -(536, 0, "'i'"), -(533, 4, "'meditate'"), -(541, 0, "')'"), -(542, 0, "' '"), -(543, 0, "'g'"), -(544, 0, "'a'"), -(545, 0, "'m'"), -(546, 0, "'e'"), -(543, 4, "'game_stages'"), -(554, 0, "'.'"), -(555, 0, "'p'"), -(556, 0, "'u'"), -(557, 0, "'s'"), -(558, 0, "'h'"), -(555, 4, "'push'"), -(559, 0, "'('"), -(487, 0, "'n'"), -(488, 0, "'n'"), -(489, 0, "'c'"), -(490, 0, "'o'"), -(491, 0, "'n'"), -(492, 0, "'s'"), -(493, 0, "'t'"), -(494, 0, "' '"), -(495, 0, "'M'"), -(496, 0, "'E'"), -(497, 0, "'D'"), -(498, 0, "'I'"), -(499, 0, "'T'"), -(500, 0, "'A'"), -(501, 0, "'T'"), -(502, 0, "'I'"), -(503, 0, "'O'"), -(504, 0, "'N'"), -(505, 0, "'_'"), -(506, 0, "'S'"), -(507, 0, "'E'"), -(508, 0, "'C'"), -(509, 0, "'O'"), -(510, 0, "'N'"), -(511, 0, "'D'"), -(512, 0, "'S'"), -(513, 0, "' '"), -(514, 0, "'='"), -(515, 0, "' '"), -(516, 0, "'6'"), -(517, 0, "'0'"), -(488, 0, "'n'"), -(489, 0, "'/'"), -(490, 0, "'/'"), -(491, 0, "' '"), -(492, 0, "'C'"), -(493, 0, "'o'"), -(494, 0, "'u'"), -(495, 0, "'l'"), -(496, 0, "'d'"), -(497, 0, "' '"), -(498, 0, "'m'"), -(499, 0, "'a'"), -(500, 0, "'k'"), -(501, 0, "'e'"), -(502, 0, "' '"), -(503, 0, "'c'"), -(504, 0, "'o'"), -(505, 0, "'n'"), -(506, 0, "'f'"), -(507, 0, "'i'"), -(508, 0, "'g'"), -(509, 0, "'u'"), -(510, 0, "'r'"), -(511, 0, "'a'"), -(512, 0, "'b'"), -(513, 0, "'l'"), -(514, 0, "'e'"), -(515, 0, "'?'"), -(515, 1, "''"), -(515, 0, "'.'"), -(516, 0, "' '"), -(517, 0, "'E'"), -(518, 0, "'h'"), -(519, 0, "'.'"), -(3494, 22, "''"), -(3513, 0, "' '"), -(3514, 0, "'+'"), -(3515, 0, "' '"), -(3516, 0, "'M'"), -(3517, 0, "'E'"), -(3518, 0, "'D'"), -(3519, 0, "'I'"), -(3515, 5, "''"), -(3513, 2, "''"), -(3494, 0, "' + (meditate ? 1 : 0))'"), -(3494, 22, "''"), -(3513, 0, "' '"), -(3514, 0, "'+'"), -(3515, 0, "' '"), -(3516, 0, "' + (meditate ? 1 : 0))'"), -(3518, 1, "''"), -(3517, 1, "''"), -(3516, 1, "''"), -(3528, 1, "''"), -(3528, 0, "'M'"), -(3529, 0, "'E'"), -(3530, 0, "'D'"), -(3531, 0, "'I'"), -(3528, 4, "'MEDITATION_SECONDS'"), -(3477, 0, "'ntttt'"), -(3562, 0, "'ntttt'"), -(3563, 4, "'ttt'"), -(623, 0, "'{'"), -(624, 0, "'ntt'"), -(627, 0, "'l'"), -(628, 0, "'e'"), -(629, 0, "'b'"), -(630, 0, "'l'"), -(630, 1, "''"), -(629, 1, "''"), -(628, 1, "''"), -(628, 0, "'a'"), -(629, 0, "'b'"), -(630, 0, "'e'"), -(631, 0, "'l'"), -(632, 0, "':'"), -(633, 0, "' '"), -(634, 0, "'''"), -(635, 0, "'M'"), -(636, 0, "'e'"), -(637, 0, "'d'"), -(638, 0, "'i'"), -(639, 0, "'t'"), -(640, 0, "'a'"), -(641, 0, "'t'"), -(642, 0, "'e'"), -(643, 0, "'''"), -(644, 0, "','"), -(645, 0, "'ntt'"), -(648, 0, "'d'"), -(649, 0, "'u'"), -(650, 0, "'r'"), -(651, 0, "'a'"), -(652, 0, "'t'"), -(653, 0, "'i'"), -(654, 0, "'o'"), -(655, 0, "'n'"), -(656, 0, "':'"), -(657, 0, "' '"), -(658, 0, "'M'"), -(659, 0, "'E'"), -(660, 0, "'D'"), -(661, 0, "'I'"), -(658, 4, "'MEDITATION_SECONDS'"), -(676, 0, "','"), -(677, 0, "'ntt'"), -(678, 2, "'t}'"), -(680, 0, "')'"), -(681, 0, "'nt'"), -(683, 0, "'f'"), -(684, 0, "'o'"), -(685, 0, "'r'"), -(686, 0, "' '"), -(687, 0, "'('"), -(688, 0, "'l'"), -(689, 0, "'e'"), -(690, 0, "'t'"), -(691, 0, "' '"), -(692, 0, "'i'"), -(693, 0, "' '"), -(694, 0, "'='"), -(695, 0, "' '"), -(696, 0, "'0'"), -(697, 0, "';'"), -(698, 0, "' '"), -(699, 0, "'i'"), -(700, 0, "' '"), -(701, 0, "'<'"), -(702, 0, "' '"), -(703, 0, "'r'"), -(704, 0, "'o'"), -(705, 0, "'u'"), -(703, 3, "'rounds'"), -(709, 0, "';'"), -(710, 0, "' '"), -(711, 0, "'i'"), -(712, 0, "'+'"), -(713, 0, "'+'"), -(714, 0, "')'"), -(715, 0, "' '"), -(716, 0, "'{'"), -(717, 0, "'ntt'"), -(718, 2, "'t}'"), -(720, 0, "'}'"), -(720, 1, "''"), -(720, 0, "'nt'"), -(722, 0, "'f'"), -(723, 0, "'o'"), -(724, 0, "'r'"), -(725, 0, "' '"), -(726, 0, "'('"), -(727, 0, "'l'"), -(728, 0, "'e'"), -(729, 0, "'t'"), -(730, 0, "' '"), -(731, 0, "'i'"), -(732, 0, "' '"), -(733, 0, "'='"), -(734, 0, "' '"), -(735, 0, "'0'"), -(722, 14, "''"), -(721, 1, "''"), -(711, 1, "'r'"), -(699, 1, "'r'"), -(692, 1, "'r'"), -(682, 0, "'tfor (let r = 0; r < rounds; r++) {n'"), -(719, 0, "'t'"), -(729, 1, "''"), -(729, 0, "'r'"), -(748, 1, "'p'"), -(736, 1, "'p'"), -(729, 1, "'p'"), -(740, 6, "'p'"), -(741, 0, "'l'"), -(742, 0, "'a'"), -(743, 0, "'y'"), -(744, 0, "'e'"), -(745, 0, "'r'"), -(746, 0, "'s'"), -(755, 0, "'nttt'"), -(756, 3, "'tt}'"), -(755, 0, "'nttt'"), -(759, 0, "'g'"), -(760, 0, "'a'"), -(761, 0, "'m'"), -(762, 0, "'e'"), -(763, 0, "'_'"), -(759, 5, "'game_stages'"), -(770, 0, "'.'"), -(771, 0, "'p'"), -(772, 0, "'i'"), -(773, 0, "'s'"), -(773, 1, "''"), -(772, 1, "''"), -(772, 0, "'u'"), -(773, 0, "'s'"), -(774, 0, "'h'"), -(771, 4, "'push'"), -(775, 0, "'('"), -(776, 0, "'{'"), -(777, 0, "'ntttt'"), -(782, 0, "'ntttt'"), -(778, 4, "''"), -(779, 4, "'ttt}'"), -(783, 0, "')'"), -(778, 0, "'tttt'"), -(782, 0, "'d'"), -(783, 0, "'u'"), -(784, 0, "'r'"), -(785, 0, "'a'"), -(786, 0, "'t'"), -(787, 0, "'i'"), -(788, 0, "'o'"), -(789, 0, "'n'"), -(790, 0, "':'"), -(791, 0, "' '"), -(792, 0, "'s'"), -(793, 0, "'e'"), -(794, 0, "'c'"), -(795, 0, "'o'"), -(796, 0, "'n'"), -(797, 0, "'d'"), -(792, 6, "'seconds_per_bead'"), -(808, 0, "','"), -(777, 0, "'ntttt'"), -(782, 0, "'l'"), -(783, 0, "'a'"), -(784, 0, "'b'"), -(785, 0, "'e'"), -(786, 0, "'l'"), -(787, 0, "':'"), -(788, 0, "' '"), -(789, 0, "'''"), -(789, 1, "''"), -(789, 0, "'`'"), -(790, 0, "'R'"), -(791, 0, "'o'"), -(792, 0, "'u'"), -(793, 0, "'n'"), -(794, 0, "'d'"), -(795, 0, "' '"), -(796, 0, "'#'"), -(797, 0, "'{'"), -(798, 0, "'r'"), -(799, 0, "'}'"), -(800, 0, "' '"), -(801, 0, "'p'"), -(802, 0, "'l'"), -(803, 0, "'a'"), -(804, 0, "'y'"), -(805, 0, "'e'"), -(806, 0, "'r'"), -(807, 0, "' '"), -(808, 0, "'#'"), -(809, 0, "'{'"), -(796, 1, "''"), -(796, 0, "'$'"), -(808, 1, "''"), -(808, 0, "'$'"), -(810, 0, "'p'"), -(811, 0, "'}'"), -(812, 0, "'`'"), -(813, 0, "','"), -(859, 1, "''"), -(3680, 0, "'ttt(Total game length: {roundish(ntttt(rounds * players * seconds_per_bead + (meditate ? MEDITATION_SECONDS : 0)) / 60nttt)} minutes)n'"), -(3680, 134, "''"), -(3672, 0, "'tt
nttt(Total game length: {roundish(ntttt(rounds * players * seconds_per_bead + (meditate ? MEDITATION_SECONDS : 0)) / 60nttt)} minutes)ntt
n'"), -(3869, 75, "''"), -(3869, 0, "'g'"), -(3870, 0, "'a'"), -(3871, 0, "'m'"), -(3872, 0, "'e'"), -(3869, 4, "'game_stages'"), -(3880, 0, "'.'"), -(3881, 0, "'r'"), -(3882, 0, "'e'"), -(3883, 0, "'d'"), -(3884, 0, "'u'"), -(3885, 0, "'c'"), -(3886, 0, "'e'"), -(3887, 0, "'('"), -(3888, 0, "'s'"), -(3889, 0, "' '"), -(3890, 0, "'='"), -(3891, 0, "'>'"), -(3892, 0, "' '"), -(3893, 0, "'s'"), -(3894, 0, "'.'"), -(3895, 0, "'d'"), -(3896, 0, "'u'"), -(3897, 0, "'r'"), -(3898, 0, "'a'"), -(3899, 0, "'t'"), -(3900, 0, "'i'"), -(3901, 0, "'o'"), -(3902, 0, "'n'"), -(3888, 0, "'x'"), -(3889, 0, "','"), -(3890, 0, "' '"), -(3896, 0, "'x'"), -(3897, 0, "' '"), -(3898, 0, "'+'"), -(3899, 0, "' '"), -(3910, 0, "','"), -(3911, 0, "' '"), -(3912, 0, "'0'"), -(3913, 0, "')'"), -(3892, 0, "')'"), -(3888, 0, "'('"), -(861, 0, "'n'"), -(862, 0, "'n'"), -(863, 0, "'c'"), -(864, 0, "'o'"), -(865, 0, "'n'"), -(866, 0, "'s'"), -(867, 0, "'t'"), -(868, 0, "' '"), -(869, 0, "'g'"), -(870, 0, "'e'"), -(871, 0, "'t'"), -(872, 0, "'_'"), -(873, 0, "'c'"), -(874, 0, "'u'"), -(875, 0, "'r'"), -(876, 0, "'r'"), -(877, 0, "'e'"), -(878, 0, "'n'"), -(879, 0, "'t'"), -(880, 0, "'_'"), -(881, 0, "'s'"), -(882, 0, "'t'"), -(883, 0, "'a'"), -(884, 0, "'t'"), -(885, 0, "'e'"), -(886, 0, "' '"), -(887, 0, "'='"), -(888, 0, "' '"), -(889, 0, "'('"), -(890, 0, "')'"), -(891, 0, "' '"), -(892, 0, "'='"), -(893, 0, "'>'"), -(894, 0, "' '"), -(895, 0, "'{'"), -(896, 0, "'nt'"), -(898, 0, "'nt'"), -(897, 1, "''"), -(898, 1, "'}'"), -(50, 0, "'texport let staten'"), -(80, 5, "'s'"), -(81, 0, "'t'"), -(82, 0, "'a'"), -(83, 0, "'r'"), -(84, 0, "'t'"), -(85, 0, "'_'"), -(86, 0, "'t'"), -(87, 0, "'i'"), -(88, 0, "'m'"), -(89, 0, "'e'"), -(920, 0, "'t'"), -(921, 0, "'f'"), -(922, 0, "'o'"), -(923, 0, "'r'"), -(924, 0, "' '"), -(925, 0, "'('"), -(926, 0, "'l'"), -(927, 0, "'e'"), -(928, 0, "'t'"), -(929, 0, "' '"), -(930, 0, "'s'"), -(931, 0, "' '"), -(932, 0, "'='"), -(933, 0, "' '"), -(934, 0, "'0'"), -(935, 0, "';'"), -(936, 0, "' '"), -(937, 0, "'i'"), -(937, 1, "''"), -(937, 0, "'s'"), -(938, 0, "' '"), -(939, 0, "'<'"), -(940, 0, "' '"), -(941, 0, "'g'"), -(942, 0, "'a'"), -(943, 0, "'m'"), -(944, 0, "'e'"), -(941, 4, "'game_stages'"), -(952, 0, "'.'"), -(953, 0, "'l'"), -(954, 0, "'e'"), -(955, 0, "'n'"), -(956, 0, "'g'"), -(957, 0, "'t'"), -(958, 0, "'h'"), -(959, 0, "';'"), -(960, 0, "' '"), -(961, 0, "'i'"), -(961, 1, "''"), -(961, 0, "'s'"), -(962, 0, "'+'"), -(963, 0, "'+'"), -(964, 0, "')'"), -(965, 0, "' '"), -(966, 0, "'{'"), -(967, 0, "'ntt'"), -(970, 0, "'ntt'"), -(968, 2, "''"), -(969, 2, "'t}'"), -(968, 0, "'tt'"), -(968, 2, "''"), -(919, 0, "'nt'"), -(921, 0, "'l'"), -(922, 0, "'e'"), -(923, 0, "'t'"), -(921, 3, "''"), -(913, 0, "'o'"), -(914, 0, "'f'"), -(915, 0, "'f'"), -(916, 0, "'s'"), -(917, 0, "'e'"), -(918, 0, "'t'"), -(913, 0, "'t'"), -(914, 0, "'i'"), -(915, 0, "'m'"), -(916, 0, "'e'"), -(917, 0, "'_'"), -(913, 4, "'s'"), -(914, 0, "'t'"), -(915, 0, "'a'"), -(916, 0, "'r'"), -(917, 0, "'t'"), -(925, 0, "'_'"), -(926, 0, "'m'"), -(927, 0, "'s'"), -(936, 0, "'l'"), -(937, 0, "'e'"), -(938, 0, "'t'"), -(939, 0, "' '"), -(940, 0, "'s'"), -(941, 0, "' '"), -(942, 0, "'='"), -(943, 0, "' '"), -(944, 0, "'0'"), -(945, 0, "';'"), -(945, 1, "''"), -(945, 0, "'nt'"), -(947, 0, "'w'"), -(948, 0, "'h'"), -(949, 0, "'i'"), -(950, 0, "'l'"), -(951, 0, "'e'"), -(952, 0, "' '"), -(953, 0, "'s'"), -(954, 0, "'t'"), -(955, 0, "'a'"), -(956, 0, "'r'"), -(957, 0, "'t'"), -(8, 0, "'nimport { start } from 'repl';nn'"), -(985, 5, "'start'"), -(990, 0, "'_'"), -(991, 0, "'o'"), -(992, 0, "'f'"), -(985, 8, "'start_offset_ms'"), -(978, 22, "''"), -(977, 1, "''"), -(972, 1, "''"), -(972, 0, "'g'"), -(973, 0, "'a'"), -(974, 0, "'m'"), -(975, 0, "'e'"), -(976, 0, "'_'"), -(977, 0, "'d'"), -(978, 0, "'u'"), -(979, 0, "'r'"), -(980, 0, "'a'"), -(981, 0, "'t'"), -(982, 0, "'i'"), -(983, 0, "'o'"), -(984, 0, "'n'"), -(1038, 0, "'tt'"), -(1040, 0, "'l'"), -(1041, 0, "'e'"), -(1042, 0, "'t'"), -(1043, 0, "' '"), -(1044, 0, "'s'"), -(1045, 0, "'t'"), -(1046, 0, "'a'"), -(1047, 0, "'t'"), -(1048, 0, "'e'"), -(1049, 0, "' '"), -(1050, 0, "'='"), -(1051, 0, "' '"), -(1052, 0, "'g'"), -(1053, 0, "'a'"), -(1054, 0, "'m'"), -(1055, 0, "'e'"), -(1056, 0, "'_'"), -(1057, 0, "'s'"), -(1058, 0, "'t'"), -(1052, 7, "'game_stages'"), -(1063, 0, "'['"), -(1064, 0, "'s'"), -(1065, 0, "']'"), -(1066, 0, "'ntt'"), -(1069, 0, "'i'"), -(1070, 0, "'f'"), -(1071, 0, "' '"), -(1072, 0, "'('"), -(945, 1, "''"), -(945, 1, "''"), -(945, 1, "''"), -(945, 1, "''"), -(945, 1, "''"), -(945, 1, "''"), -(961, 22, "''"), -(960, 1, "''"), -(1044, 0, "'s'"), -(1045, 0, "'t'"), -(1046, 0, "'a'"), -(1047, 0, "'t'"), -(1048, 0, "'e'"), -(1044, 5, "'state'"), -(1049, 0, "'.'"), -(1050, 0, "'d'"), -(1051, 0, "'u'"), -(1052, 0, "'r'"), -(1053, 0, "'a'"), -(1054, 0, "'t'"), -(1055, 0, "'i'"), -(1056, 0, "'o'"), -(1057, 0, "'n'"), -(1058, 0, "' '"), -(1059, 0, "'*'"), -(1060, 0, "' '"), -(1061, 0, "'1'"), -(1062, 0, "'0'"), -(1063, 0, "'0'"), -(1064, 0, "'0'"), -(1065, 0, "' '"), -(1066, 0, "'>'"), -(1067, 0, "' '"), -(1068, 0, "'o'"), -(1069, 0, "'f'"), -(1070, 0, "'f'"), -(1071, 0, "'s'"), -(1072, 0, "'e'"), -(1068, 5, "'offset_ms'"), -(1077, 0, "')'"), -(1078, 0, "' '"), -(1079, 0, "'{'"), -(1080, 0, "'nttt'"), -(1081, 3, "'tt}'"), -(1080, 0, "'nttt'"), -(1084, 0, "'r'"), -(1085, 0, "'e'"), -(1086, 0, "'t'"), -(1087, 0, "'u'"), -(1088, 0, "'r'"), -(1089, 0, "'n'"), -(1090, 0, "' '"), -(1091, 0, "'{'"), -(1092, 0, "'s'"), -(1093, 0, "'t'"), -(1094, 0, "'a'"), -(1095, 0, "'t'"), -(1096, 0, "'e'"), -(1097, 0, "','"), -(1098, 0, "' '"), -(1099, 0, "'o'"), -(1100, 0, "'f'"), -(1101, 0, "'f'"), -(1102, 0, "'s'"), -(1103, 0, "'e'"), -(1104, 0, "'t'"), -(1099, 6, "'offset_ms'"), -(1108, 0, "'}'"), -(1113, 0, "'ntt'"), -(1116, 0, "'o'"), -(1117, 0, "'f'"), -(1118, 0, "'f'"), -(1116, 3, "'offset_ms'"), -(1125, 0, "' '"), -(1126, 0, "'-'"), -(1127, 0, "'='"), -(1128, 0, "' '"), -(1129, 0, "'state.duration * 1000'"), -(1153, 0, "'nt'"), -(1155, 0, "'r'"), -(1156, 0, "'e'"), -(1157, 0, "'t'"), -(1158, 0, "'u'"), -(1159, 0, "'r'"), -(1160, 0, "'n'"), -(1161, 0, "' '"), -(1162, 0, "'{'"), -(1163, 0, "'ntt'"), -(1166, 0, "'s'"), -(1167, 0, "'t'"), -(1168, 0, "'a'"), -(1169, 0, "'t'"), -(1170, 0, "'e'"), -(1171, 0, "':'"), -(1172, 0, "' '"), -(1173, 0, "'{'"), -(1174, 0, "'nttt'"), -(1178, 0, "'l'"), -(1179, 0, "'a'"), -(1180, 0, "'b'"), -(1181, 0, "'e'"), -(1182, 0, "'l'"), -(1183, 0, "':'"), -(1184, 0, "' '"), -(1185, 0, "'''"), -(1186, 0, "'G'"), -(1187, 0, "'a'"), -(1188, 0, "'m'"), -(1189, 0, "'e'"), -(1190, 0, "' '"), -(1191, 0, "'c'"), -(1192, 0, "'o'"), -(1193, 0, "'m'"), -(1194, 0, "'p'"), -(1195, 0, "'l'"), -(1196, 0, "'e'"), -(1197, 0, "'t'"), -(1198, 0, "'e'"), -(1199, 0, "'''"), -(1200, 0, "','"), -(1200, 1, "''"), -(1164, 36, "'ttstate: { label: 'Game complete''"), -(1197, 0, "' '"), -(1198, 0, "'}'"), -(1199, 0, "','"), -(1200, 0, "' '"), -(1201, 0, "'o'"), -(1202, 0, "'f'"), -(1203, 0, "'f'"), -(1201, 3, "'offset_ms'"), -(1210, 0, "'ntt'"), -(1211, 2, "'t}'"), -(101, 0, "'// '"), -(101, 3, "''"), -(9, 30, "''"), -(10, 1, "''"), -(9, 1, "''"), -(8, 1, "''"), -(1959, 0, "'n'"), -(1960, 0, "'n'"), -(1961, 0, "'4'"), -(1962, 0, "':'"), -(1962, 1, "''"), -(1961, 1, "''"), -(1961, 0, "'l'"), -(1962, 0, "'e'"), -(1963, 0, "'t'"), -(1964, 0, "' '"), -(1965, 0, "'t'"), -(1966, 0, "'i'"), -(1967, 0, "'m'"), -(1968, 0, "'e'"), -(1969, 0, "'r'"), -(1970, 0, "'n'"), -(1971, 0, "'$'"), -(1972, 0, "':'"), -(1973, 0, "' '"), -(1974, 0, "'{'"), -(1975, 0, "'nt'"), -(1977, 0, "'nt'"), -(1976, 1, "''"), -(1977, 1, "'}'"), -(1978, 0, "'n'"), -(1976, 0, "'t'"), -(1977, 0, "'i'"), -(1978, 0, "'f'"), -(1979, 0, "' '"), -(1980, 0, "'('"), -(1981, 0, "'s'"), -(1982, 0, "'t'"), -(1983, 0, "'a'"), -(1984, 0, "'t'"), -(1985, 0, "'e'"), -(1986, 0, "' '"), -(1987, 0, "'='"), -(1988, 0, "'='"), -(1989, 0, "'='"), -(1990, 0, "' '"), -(1991, 0, "'''"), -(1992, 0, "'p'"), -(1993, 0, "'l'"), -(1994, 0, "'a'"), -(1995, 0, "'y'"), -(1996, 0, "'i'"), -(1997, 0, "'n'"), -(1998, 0, "'g'"), -(1999, 0, "'''"), -(2000, 0, "')'"), -(2001, 0, "' '"), -(2002, 0, "'{'"), -(2003, 0, "'ntt'"), -(2006, 0, "'ntt'"), -(2004, 2, "''"), -(2005, 2, "'t}'"), -(2004, 0, "'tt'"), -(2004, 2, "''"), -(2000, 0, "' '"), -(2001, 0, "'&'"), -(2002, 0, "'&'"), -(2003, 0, "' '"), -(2004, 0, "'t'"), -(2005, 0, "'i'"), -(2006, 0, "'m'"), -(2007, 0, "'e'"), -(2008, 0, "'r'"), -(2009, 0, "' '"), -(2010, 0, "'='"), -(2011, 0, "'='"), -(2012, 0, "' '"), -(2013, 0, "'n'"), -(2014, 0, "'u'"), -(2015, 0, "'l'"), -(2016, 0, "'l'"), -(2021, 0, "'tt'"), -(2023, 0, "'/'"), -(2024, 0, "'/'"), -(2023, 2, "''"), -(2023, 0, "'t'"), -(2024, 0, "'i'"), -(2025, 0, "'m'"), -(2026, 0, "'e'"), -(2027, 0, "'r'"), -(2028, 0, "' '"), -(2029, 0, "'='"), -(2030, 0, "' '"), -(2031, 0, "'s'"), -(2032, 0, "'e'"), -(2033, 0, "'t'"), -(2034, 0, "'I'"), -(2035, 0, "'n'"), -(2036, 0, "'t'"), -(2031, 6, "'setInterval'"), -(2042, 0, "'('"), -(2043, 0, "'('"), -(2044, 0, "')'"), -(2045, 0, "' '"), -(2046, 0, "'='"), -(2047, 0, "'>'"), -(2048, 0, "' '"), -(2049, 0, "'{'"), -(2050, 0, "'nttt'"), -(2054, 0, "'nttt'"), -(2051, 3, "''"), -(2052, 3, "'tt}'"), -(2055, 0, "','"), -(2056, 0, "' '"), -(2057, 0, "'0'"), -(2058, 0, "'0'"), -(2058, 1, "''"), -(2057, 1, "''"), -(2057, 0, "'1'"), -(2058, 0, "'0'"), -(2059, 0, "'0'"), -(2060, 0, "'0'"), -(2061, 0, "')'"), -(2051, 0, "'ttt'"), -(2054, 0, "'/'"), -(2055, 0, "'/'"), -(2055, 1, "''"), -(2054, 1, "''"), -(2054, 0, "'c'"), -(2055, 0, "'o'"), -(2056, 0, "'n'"), -(2057, 0, "'s'"), -(2058, 0, "'o'"), -(2059, 0, "'l'"), -(2060, 0, "'e'"), -(2054, 7, "'console'"), -(2061, 0, "'.'"), -(2062, 0, "'l'"), -(2063, 0, "'o'"), -(2064, 0, "'g'"), -(2062, 3, "'log'"), -(2065, 0, "'('"), -(2066, 0, "'''"), -(2067, 0, "'t'"), -(2068, 0, "'i'"), -(2069, 0, "'c'"), -(2070, 0, "'k'"), -(2071, 0, "'''"), -(2072, 0, "')'"), -(2087, 0, "' '"), -(2088, 0, "'e'"), -(2089, 0, "'l'"), -(2090, 0, "'s'"), -(2091, 0, "'e'"), -(2092, 0, "' '"), -(2093, 0, "'i'"), -(2094, 0, "'f'"), -(2095, 0, "' '"), -(2096, 0, "'('"), -(2097, 0, "'s'"), -(2098, 0, "'t'"), -(2099, 0, "'a'"), -(2100, 0, "'t'"), -(2101, 0, "'e'"), -(2102, 0, "' '"), -(2103, 0, "'!'"), -(2104, 0, "'='"), -(2105, 0, "'='"), -(2106, 0, "' '"), -(2107, 0, "'''"), -(2108, 0, "'p'"), -(2109, 0, "'l'"), -(2110, 0, "'a'"), -(2111, 0, "'y'"), -(2112, 0, "'i'"), -(2113, 0, "'n'"), -(2114, 0, "'g'"), -(2115, 0, "'''"), -(2116, 0, "' '"), -(2117, 0, "'&'"), -(2118, 0, "'&'"), -(2119, 0, "' '"), -(2120, 0, "'t'"), -(2121, 0, "'i'"), -(2122, 0, "'m'"), -(2123, 0, "'e'"), -(2124, 0, "'r'"), -(2125, 0, "' '"), -(2126, 0, "'!'"), -(2127, 0, "'='"), -(2128, 0, "' '"), -(2129, 0, "'n'"), -(2130, 0, "'u'"), -(2131, 0, "'l'"), -(2132, 0, "'l'"), -(2133, 0, "')'"), -(2134, 0, "' '"), -(2135, 0, "'{'"), -(2136, 0, "'ntt'"), -(2139, 0, "'ntt'"), -(2137, 2, "''"), -(2138, 2, "'t}'"), -(2137, 0, "'tt'"), -(2139, 0, "'c'"), -(2140, 0, "'l'"), -(2141, 0, "'e'"), -(2142, 0, "'a'"), -(2143, 0, "'r'"), -(2144, 0, "'I'"), -(2145, 0, "'n'"), -(2146, 0, "'t'"), -(2139, 8, "'clearInterval'"), -(2152, 0, "'('"), -(2153, 0, "'t'"), -(2154, 0, "'i'"), -(2155, 0, "'m'"), -(2156, 0, "'e'"), -(2157, 0, "'r'"), -(2158, 0, "')'"), -(2159, 0, "'ntt'"), -(2162, 0, "'t'"), -(2163, 0, "'i'"), -(2164, 0, "'m'"), -(2165, 0, "'e'"), -(2166, 0, "'r'"), -(2167, 0, "' '"), -(2168, 0, "'='"), -(2169, 0, "' '"), -(2170, 0, "'n'"), -(2171, 0, "'u'"), -(2172, 0, "'l'"), -(2173, 0, "'l'"), -(1975, 0, "'nt'"), -(1977, 0, "'c'"), -(1978, 0, "'o'"), -(1979, 0, "'n'"), -(1980, 0, "'s'"), -(1981, 0, "'o'"), -(1982, 0, "'l'"), -(1983, 0, "'e'"), -(1977, 7, "'console'"), -(1984, 0, "'.'"), -(1985, 0, "'l'"), -(1986, 0, "'o'"), -(1987, 0, "'g'"), -(1985, 3, "'log'"), -(1988, 0, "'('"), -(1989, 0, "'s'"), -(1990, 0, "'t'"), -(1991, 0, "'a'"), -(1992, 0, "'t'"), -(1993, 0, "'e'"), -(1989, 5, "'state'"), -(1994, 0, "','"), -(1995, 0, "' '"), -(1996, 0, "'t'"), -(1997, 0, "'i'"), -(1998, 0, "'m'"), -(1999, 0, "'e'"), -(2000, 0, "'r'"), -(2001, 0, "')'"), -(2081, 19, "''"), -(2081, 0, "'console.log('tick')'"), -(2100, 0, "'nttt'"), -(2104, 0, "'nttt'"), -(2101, 3, "''"), -(2102, 3, "''"), -(2101, 0, "'nttt'"), -(2105, 0, "'l'"), -(2106, 0, "'e'"), -(2107, 0, "'t'"), -(2108, 0, "' '"), -(884, 298, "''"), -(1646, 0, "'n'"), -(1647, 0, "'n'"), -(1647, 0, "'nconst get_current_state = (offset_ms) => {ntfor (let s = 0; s < game_stages.length; s++) {nttlet state = game_stages[s]nttif (state.duration * 1000 > offset_ms) {ntttreturn {state, offset_ms}ntt}nttoffset_ms -= state.duration * 1000nt}ntreturn {nttstate: { label: 'Game complete' }, offset_msnt}n}'"), -(2111, 0, "'{'"), -(2112, 0, "'s'"), -(2113, 0, "'t'"), -(2114, 0, "'a'"), -(2115, 0, "'t'"), -(2116, 0, "'e'"), -(2117, 0, "','"), -(2118, 0, "' '"), -(2119, 0, "'o'"), -(2120, 0, "'f'"), -(2121, 0, "'f'"), -(2122, 0, "'s'"), -(2123, 0, "'e'"), -(2124, 0, "'t'"), -(2125, 0, "'_'"), -(2126, 0, "'m'"), -(2127, 0, "'s'"), -(2128, 0, "'}'"), -(2129, 0, "' '"), -(2130, 0, "'='"), -(2131, 0, "' '"), -(2132, 0, "'g'"), -(2133, 0, "'e'"), -(2134, 0, "'t'"), -(2135, 0, "'_'"), -(2136, 0, "'c'"), -(2137, 0, "'u'"), -(2138, 0, "'r'"), -(2132, 7, "'get_current_state'"), -(2149, 0, "'('"), -(2150, 0, "'D'"), -(2151, 0, "'a'"), -(2152, 0, "'t'"), -(2153, 0, "'e'"), -(2150, 4, "'Date'"), -(2154, 0, "'.'"), -(2155, 0, "'n'"), -(2156, 0, "'o'"), -(2157, 0, "'w'"), -(2155, 3, "'now'"), -(2158, 0, "'('"), -(2159, 0, "')'"), -(2160, 0, "' '"), -(2161, 0, "'-'"), -(2162, 0, "' '"), -(2163, 0, "'s'"), -(2164, 0, "'t'"), -(2165, 0, "'a'"), -(2166, 0, "'r'"), -(2167, 0, "'t'"), -(2168, 0, "'_'"), -(2169, 0, "'t'"), -(2163, 7, "'start_time'"), -(2173, 0, "')'"), -(2174, 0, "'nttt'"), -(2175, 3, "''"), -(1972, 0, "'n'"), -(1973, 0, "'l'"), -(1974, 0, "'e'"), -(1975, 0, "'t'"), -(1976, 0, "' '"), -(1977, 0, "'l'"), -(1978, 0, "'a'"), -(1979, 0, "'b'"), -(1980, 0, "'e'"), -(1981, 0, "'l'"), -(1977, 5, "''"), -(1977, 0, "'g'"), -(1978, 0, "'a'"), -(1979, 0, "'m'"), -(1980, 0, "'e'"), -(1981, 0, "'_'"), -(1982, 0, "'s'"), -(1983, 0, "'t'"), -(1984, 0, "'a'"), -(1985, 0, "'t'"), -(1986, 0, "'e'"), -(1987, 0, "','"), -(1988, 0, "' '"), -(1989, 0, "'l'"), -(1990, 0, "'a'"), -(1991, 0, "'b'"), -(1992, 0, "'e'"), -(1987, 6, "''"), -(1987, 0, "','"), -(1988, 0, "' '"), -(1989, 0, "'g'"), -(1990, 0, "'a'"), -(1991, 0, "'m'"), -(1992, 0, "'e'"), -(1993, 0, "'_'"), -(1989, 5, "'s'"), -(1990, 0, "'t'"), -(1991, 0, "'a'"), -(1992, 0, "'t'"), -(1993, 0, "'e'"), -(1994, 0, "'_'"), -(1995, 0, "'o'"), -(1996, 0, "'f'"), -(1997, 0, "'f'"), -(1998, 0, "'s'"), -(1999, 0, "'e'"), -(2000, 0, "'t'"), -(2001, 0, "'_'"), -(2002, 0, "'m'"), -(2003, 0, "'s'"), -(2207, 0, "'ttt'"), -(2207, 3, "''"), -(2149, 0, "':'"), -(2150, 0, "' '"), -(2151, 0, "'g'"), -(2152, 0, "'a'"), -(2153, 0, "'m'"), -(2154, 0, "'e'"), -(2155, 0, "'_'"), -(2151, 5, "'game_stages'"), -(2161, 1, "''"), -(2160, 1, "''"), -(2159, 1, "''"), -(2159, 0, "'t'"), -(2160, 0, "'e'"), -(2172, 0, "':'"), -(2173, 0, "' '"), -(2174, 0, "'s'"), -(2175, 0, "'t'"), -(2176, 0, "'a'"), -(2177, 0, "'t'"), -(2178, 0, "'e'"), -(2179, 0, "'_'"), -(2180, 0, "'o'"), -(2181, 0, "'f'"), -(2182, 0, "'f'"), -(2174, 9, "'state_offset_ms'"), -(2139, 4, "''"), -(2232, 1, "''"), -(2231, 1, "''"), -(2139, 0, "';'"), -(2139, 1, "''"), -(2139, 0, "'l'"), -(2140, 0, "'e'"), -(2141, 0, "'t'"), -(2142, 0, "' '"), -(2149, 12, "''"), -(2160, 17, "''"), -(2206, 0, "'nttt'"), -(2210, 0, "'g'"), -(2211, 0, "'a'"), -(2212, 0, "'m'"), -(2213, 0, "'e'"), -(2214, 0, "'_'"), -(2215, 0, "'s'"), -(2216, 0, "'t'"), -(2217, 0, "'a'"), -(2218, 0, "'t'"), -(2219, 0, "'e'"), -(2220, 0, "' '"), -(2221, 0, "'='"), -(2222, 0, "' '"), -(2223, 0, "'s'"), -(2224, 0, "'t'"), -(2225, 0, "'a'"), -(2226, 0, "'t'"), -(2227, 0, "'t'"), -(2227, 1, "''"), -(2227, 0, "'e'"), -(2228, 0, "';'"), -(2229, 0, "' '"), -(2230, 0, "'s'"), -(2231, 0, "'t'"), -(2232, 0, "'a'"), -(2233, 0, "'t'"), -(2234, 0, "'e'"), -(2235, 0, "'_'"), -(2236, 0, "'o'"), -(2237, 0, "'f'"), -(2230, 8, "'state_offset_ms'"), -(2245, 0, "' '"), -(2246, 0, "'='"), -(2247, 0, "' '"), -(2248, 0, "'o'"), -(2249, 0, "'f'"), -(2250, 0, "'f'"), -(2248, 3, "'offset_ms'"), -(2257, 0, "'nttt'"), -(2258, 3, "''"), -(2210, 10, "'s'"), -(1977, 10, "'s'"), -(2202, 0, "'t'"), -(1978, 0, "'t'"), -(2204, 0, "'a'"), -(1979, 0, "'a'"), -(2206, 0, "'t'"), -(1980, 0, "'t'"), -(2208, 0, "'e'"), -(1981, 0, "'e'"), -(2210, 0, "'_'"), -(1982, 0, "'_'"), -(2212, 0, "'l'"), -(1983, 0, "'l'"), -(2214, 0, "'a'"), -(1984, 0, "'a'"), -(2216, 0, "'b'"), -(1985, 0, "'b'"), -(2218, 0, "'e'"), -(1986, 0, "'e'"), -(2220, 0, "'l'"), -(1987, 0, "'l'"), -(1990, 15, "'s'"), -(1991, 0, "'t'"), -(1992, 0, "'a'"), -(1993, 0, "'t'"), -(1994, 0, "'e'"), -(1995, 0, "'_'"), -(1996, 0, "'p'"), -(1997, 0, "'r'"), -(1998, 0, "'o'"), -(1999, 0, "'g'"), -(2000, 0, "'r'"), -(2001, 0, "'e'"), -(2002, 0, "'s'"), -(2003, 0, "'s'"), -(2004, 0, "' '"), -(2005, 0, "'/'"), -(2006, 0, "'/'"), -(2007, 0, "' '"), -(2008, 0, "'0'"), -(2009, 0, "' '"), -(2010, 0, "'t'"), -(2011, 0, "'o'"), -(2012, 0, "' '"), -(2013, 0, "'1'"), -(1988, 0, "' '"), -(1989, 0, "'/'"), -(1990, 0, "'/'"), -(2242, 29, "''"), -(2237, 5, "'state'"), -(2242, 0, "'.'"), -(2243, 0, "'l'"), -(2244, 0, "'a'"), -(2245, 0, "'b'"), -(2246, 0, "'e'"), -(2247, 0, "'l'"), -(2248, 0, "'nttt'"), -(2252, 0, "'w'"), -(2253, 0, "'i'"), -(2254, 0, "'d'"), -(2255, 0, "'t'"), -(2256, 0, "'h'"), -(2257, 0, "' '"), -(2258, 0, "'='"), -(2259, 0, "' '"), -(2260, 0, "'o'"), -(2261, 0, "'f'"), -(2262, 0, "'f'"), -(2260, 3, "'offset_ms'"), -(2260, 0, "'s'"), -(2261, 0, "'t'"), -(2262, 0, "'a'"), -(2263, 0, "'t'"), -(2264, 0, "'e'"), -(2265, 0, "'.'"), -(2266, 0, "'d'"), -(2267, 0, "'u'"), -(2268, 0, "'r'"), -(2269, 0, "'a'"), -(2270, 0, "'t'"), -(2271, 0, "'i'"), -(2272, 0, "'o'"), -(2273, 0, "'n'"), -(2274, 0, "' '"), -(2275, 0, "'*'"), -(2276, 0, "' '"), -(2277, 0, "'1'"), -(2278, 0, "'0'"), -(2279, 0, "'0'"), -(2280, 0, "'0'"), -(2281, 0, "' '"), -(2282, 9, "''"), -(2281, 1, "''"), -(2260, 0, "'offset_ms'"), -(2269, 0, "' '"), -(2270, 0, "'/'"), -(2271, 0, "' '"), -(2272, 0, "'('"), -(2294, 0, "')'"), -(2259, 0, "' '"), -(2260, 0, "'1'"), -(2261, 0, "'0'"), -(2262, 0, "'0'"), -(2263, 0, "' '"), -(2264, 0, "'*'"), -(2646, 0, "'nt'"), -(2648, 0, "'<'"), -(2649, 0, "'h'"), -(2650, 0, "'4'"), -(2651, 0, "'>'"), -(2652, 0, "'g'"), -(2652, 1, "''"), -(2652, 0, "'s'"), -(2653, 0, "'t'"), -(2654, 0, "'a'"), -(2655, 0, "'t'"), -(2656, 0, "'e'"), -(2657, 0, "'_'"), -(2652, 6, "'state_label'"), -(2652, 0, "'{'"), -(2664, 0, "'}'"), -(2665, 0, "'<'"), -(2666, 0, "'/'"), -(2667, 0, "'h'"), -(2668, 0, "'2'"), -(2668, 1, "''"), -(2668, 0, "'4'"), -(2669, 0, "'>'"), -(2308, 4, "'3'"), -(2309, 0, "'5'"), -(2309, 1, "''"), -(2308, 1, "''"), -(2308, 0, "'2'"), -(2309, 0, "'5'"), -(2310, 0, "'0'"), -(821, 0, "'+'"), -(822, 0, "'1'"), -(835, 0, "'+'"), -(836, 0, "'1'"), -(1931, 0, "','"), -(1932, 0, "' '"), -(1933, 0, "'c'"), -(1934, 0, "'o'"), -(1935, 0, "'m'"), -(1936, 0, "'p'"), -(1937, 0, "'l'"), -(1938, 0, "'e'"), -(1939, 0, "'t'"), -(1940, 0, "'e'"), -(1941, 0, "':'"), -(1942, 0, "' '"), -(1943, 0, "'t'"), -(1944, 0, "'r'"), -(1945, 0, "'u'"), -(1946, 0, "'e'"), -(2268, 0, "'nttt'"), -(2272, 0, "'i'"), -(2273, 0, "'f'"), -(2274, 0, "' '"), -(2275, 0, "'('"), -(2276, 0, "'s'"), -(2277, 0, "'t'"), -(2278, 0, "'a'"), -(2279, 0, "'t'"), -(2280, 0, "'e'"), -(2276, 5, "'state'"), -(2281, 0, "'.'"), -(2282, 0, "'c'"), -(2283, 0, "'o'"), -(2284, 0, "'m'"), -(2285, 0, "'p'"), -(2286, 0, "'l'"), -(2287, 0, "'e'"), -(2288, 0, "'t'"), -(2289, 0, "'e'"), -(2290, 0, "')'"), -(2291, 0, "' '"), -(2272, 20, "''"), -(2283, 0, "' '"), -(2284, 0, "'s'"), -(2285, 0, "'t'"), -(2286, 0, "'a'"), -(2287, 0, "'t'"), -(2288, 0, "'e'"), -(2284, 5, "'state'"), -(2289, 0, "'.'"), -(2290, 0, "'c'"), -(2291, 0, "'o'"), -(2292, 0, "'m'"), -(2293, 0, "'p'"), -(2294, 0, "'l'"), -(2295, 0, "'e'"), -(2296, 0, "'t'"), -(2297, 0, "'e'"), -(2298, 0, "' '"), -(2299, 0, "'?'"), -(2300, 0, "' '"), -(2301, 0, "'1'"), -(2302, 0, "'0'"), -(2303, 0, "'0'"), -(2304, 0, "'nttt'"), -(2308, 0, "':'"), -(2037, 0, "'n'"), -(2038, 0, "'l'"), -(2039, 0, "'e'"), -(2040, 0, "'t'"), -(2041, 0, "' '"), -(2042, 0, "'x'"), -(2043, 0, "'x'"), -(2044, 0, "'x'"), -(2045, 0, "' '"), -(2046, 0, "'='"), -(2047, 0, "' '"), -(2048, 0, "'a'"), -(2049, 0, "'l'"), -(2049, 1, "''"), -(2048, 1, "''"), -(2048, 0, "'f'"), -(2049, 0, "'a'"), -(2050, 0, "'l'"), -(2051, 0, "'s'"), -(2052, 0, "'e'"), -(2367, 0, "'nttt'"), -(2371, 0, "'nttt'"), -(2368, 3, "''"), -(2372, 0, "'i'"), -(2373, 0, "'f'"), -(2374, 0, "' '"), -(2375, 0, "'('"), -(2376, 0, "'s'"), -(2377, 0, "'t'"), -(2378, 0, "'a'"), -(2379, 0, "'t'"), -(2380, 0, "'e'"), -(2376, 5, "'state'"), -(2381, 0, "'.'"), -(2382, 0, "'c'"), -(2383, 0, "'o'"), -(2384, 0, "'m'"), -(2385, 0, "'p'"), -(2386, 0, "'l'"), -(2387, 0, "'e'"), -(2388, 0, "'t'"), -(2389, 0, "'e'"), -(2390, 0, "')'"), -(2391, 0, "' '"), -(2392, 0, "'x'"), -(2393, 0, "'x'"), -(2394, 0, "'x'"), -(2395, 0, "' '"), -(2396, 0, "'='"), -(2397, 0, "' '"), -(2398, 0, "'t'"), -(2399, 0, "'r'"), -(2400, 0, "'u'"), -(2401, 0, "'e'"), -(2127, 0, "' '"), -(2128, 0, "'&'"), -(2129, 0, "'&'"), -(2130, 0, "'&'"), -(2131, 0, "' '"), -(2131, 1, "''"), -(2130, 1, "''"), -(2130, 0, "' '"), -(2131, 0, "'x'"), -(2132, 0, "'x'"), -(2133, 0, "'x'"), -(2134, 0, "' '"), -(2135, 0, "'='"), -(2136, 0, "'='"), -(2137, 0, "'='"), -(2138, 0, "' '"), -(2139, 0, "'f'"), -(2140, 0, "'a'"), -(2141, 0, "'l'"), -(2142, 0, "'s'"), -(2143, 0, "'e'"), -(2462, 0, "')'"), -(2443, 0, "'('"), -(2463, 0, "' '"), -(2464, 0, "'|'"), -(2465, 0, "'|'"), -(2466, 0, "' '"), -(2467, 0, "'x'"), -(2468, 0, "'x'"), -(2469, 0, "'x'"), -(2470, 0, "' '"), -(2470, 1, "''"), -(3480, 8, "''"), -(3419, 3, "'tttt'"), -(3388, 2, "'ttt'"), -(3388, 0, "'ttt{/if}n'"), -(3491, 0, "'ntt{/if}'"), -(3429, 4, "'ttt'"), -(3397, 3, "'tt'"), -(3388, 9, "''"), -(3388, 0, "'tt{:else if state == 'paused'}ntttn'"), -(2038, 15, "''"), -(225, 0, "'nt'"), -(227, 0, "'let xxx = false'"), -(242, 0, "'nt'"), -(243, 1, "''"), -(231, 3, "'g'"), -(232, 0, "'a'"), -(233, 0, "'m'"), -(234, 0, "'e'"), -(235, 0, "'_'"), -(236, 0, "'c'"), -(237, 0, "'o'"), -(238, 0, "'m'"), -(239, 0, "'p'"), -(240, 0, "'l'"), -(241, 0, "'e'"), -(242, 0, "'t'"), -(243, 0, "'e'"), -(244, 0, "'d'"), -(253, 0, "' '"), -(254, 0, "'/'"), -(255, 0, "'/'"), -(225, 0, "'nt'"), -(258, 0, "' '"), -(226, 1, "''"), -(258, 0, "'D'"), -(259, 0, "'e'"), -(260, 0, "'r'"), -(261, 0, "'i'"), -(262, 0, "'v'"), -(263, 0, "'e'"), -(264, 0, "'d'"), -(265, 0, "' '"), -(266, 0, "'f'"), -(267, 0, "'r'"), -(268, 0, "'o'"), -(269, 0, "'m'"), -(270, 0, "' '"), -(271, 0, "'o'"), -(272, 0, "'t'"), -(273, 0, "'h'"), -(274, 0, "'e'"), -(275, 0, "'r'"), -(276, 0, "' '"), -(277, 0, "'p'"), -(278, 0, "'o'"), -(279, 0, "'r'"), -(279, 1, "''"), -(278, 1, "''"), -(278, 0, "'r'"), -(279, 0, "'o'"), -(280, 0, "'p'"), -(281, 0, "'e'"), -(282, 0, "'r'"), -(283, 0, "'t'"), -(284, 0, "'i'"), -(285, 0, "'e'"), -(286, 0, "'s'"), -(2515, 3, "'g'"), -(2457, 3, "'g'"), -(2179, 3, "'g'"), -(2512, 0, "'a'"), -(2456, 0, "'a'"), -(2180, 0, "'a'"), -(2515, 0, "'m'"), -(2458, 0, "'m'"), -(2181, 0, "'m'"), -(2518, 0, "'e'"), -(2460, 0, "'e'"), -(2182, 0, "'e'"), -(2521, 0, "'_'"), -(2462, 0, "'_'"), -(2183, 0, "'_'"), -(2524, 0, "'c'"), -(2464, 0, "'c'"), -(2184, 0, "'c'"), -(2527, 0, "'o'"), -(2466, 0, "'o'"), -(2185, 0, "'o'"), -(2530, 0, "'m'"), -(2468, 0, "'m'"), -(2186, 0, "'m'"), -(2533, 0, "'p'"), -(2470, 0, "'p'"), -(2187, 0, "'p'"), -(2536, 0, "'l'"), -(2472, 0, "'l'"), -(2188, 0, "'l'"), -(2529, 10, "'game_completed'"), -(2464, 10, "'game_completed'"), -(2179, 10, "'game_completed'"), -(2179, 0, "'!'"), -(2194, 10, "''"), -(287, 0, "'nt'"), -(289, 0, "'l'"), -(290, 0, "'e'"), -(291, 0, "'t'"), -(292, 0, "' '"), -(293, 0, "'i'"), -(294, 0, "'n'"), -(295, 0, "'t'"), -(296, 0, "'e'"), -(297, 0, "'r'"), -(298, 0, "'n'"), -(299, 0, "'a'"), -(300, 0, "'l'"), -(301, 0, "'_'"), -(302, 0, "'s'"), -(303, 0, "'t'"), -(304, 0, "'a'"), -(305, 0, "'t'"), -(306, 0, "'e'"), -(307, 0, "' '"), -(308, 0, "'='"), -(309, 0, "' '"), -(310, 0, "'g'"), -(311, 0, "'a'"), -(312, 0, "'m'"), -(313, 0, "'e'"), -(314, 0, "'_'"), -(310, 5, "'game_completed'"), -(324, 0, "' '"), -(325, 0, "'?'"), -(326, 0, "' '"), -(327, 0, "'''"), -(328, 0, "'c'"), -(329, 0, "'o'"), -(330, 0, "'m'"), -(331, 0, "'p'"), -(332, 0, "'l'"), -(333, 0, "'e'"), -(334, 0, "'t'"), -(335, 0, "'e'"), -(336, 0, "'d'"), -(337, 0, "'''"), -(338, 0, "' '"), -(339, 0, "':'"), -(340, 0, "' '"), -(341, 0, "'s'"), -(342, 0, "'t'"), -(343, 0, "'a'"), -(344, 0, "'t'"), -(345, 0, "'e'"), -(2234, 19, "''"), -(2198, 5, "'i'"), -(2199, 0, "'n'"), -(2200, 0, "'t'"), -(2201, 0, "'e'"), -(2202, 0, "'r'"), -(2203, 0, "'n'"), -(2198, 6, "'internal_state'"), -(2554, 5, "'i'"), -(2555, 0, "'n'"), -(2556, 0, "'t'"), -(2557, 0, "'e'"), -(2558, 0, "'r'"), -(2559, 0, "'n'"), -(2560, 0, "'a'"), -(2561, 0, "'l'"), -(2554, 8, "'internal_state'"), -(2553, 1, "''"), -(2581, 19, "''"), -(2644, 0, "'n'"), -(2645, 0, "'n'"), -(2646, 0, "'$'"), -(2647, 0, "':'"), -(2648, 0, "' '"), -(2649, 0, "'{'"), -(2650, 0, "'nt'"), -(2651, 1, "'}'"), -(2650, 0, "'nt'"), -(2652, 0, "'c'"), -(2653, 0, "'o'"), -(2654, 0, "'n'"), -(2655, 0, "'s'"), -(2656, 0, "'o'"), -(2657, 0, "'l'"), -(2658, 0, "'e'"), -(2652, 7, "'console'"), -(2659, 0, "'.'"), -(2660, 0, "'l'"), -(2661, 0, "'o'"), -(2662, 0, "'g'"), -(2660, 3, "'log'"), -(2663, 0, "'('"), -(2664, 0, "'''"), -(2665, 0, "'i'"), -(2666, 0, "'n'"), -(2667, 0, "'t'"), -(2668, 0, "'e'"), -(2669, 0, "'r'"), -(2670, 0, "'n'"), -(2671, 0, "'a'"), -(2672, 0, "'l'"), -(2673, 0, "' '"), -(2674, 0, "'s'"), -(2675, 0, "'t'"), -(2676, 0, "'a'"), -(2677, 0, "'t'"), -(2678, 0, "'e'"), -(2679, 0, "'''"), -(2680, 0, "','"), -(2681, 0, "' '"), -(2682, 0, "'i'"), -(2683, 0, "'n'"), -(2684, 0, "'t'"), -(2685, 0, "'e'"), -(2686, 0, "'r'"), -(2687, 0, "'n'"), -(2682, 6, "'internal_state'"), -(2696, 0, "')'"), -(288, 1, "''"), -(227, 1, "''"), -(197, 1, "''"), -(168, 1, "''"), -(149, 1, "''"), -(129, 1, "''"), -(108, 1, "''"), -(90, 1, "''"), -(67, 1, "''"), -(49, 1, "''"), -(26, 1, "''"), -(9, 1, "''"), -(277, 3, "'$'"), -(278, 0, "':'"), -(276, 0, "'n'"), -(277, 0, "'l'"), -(278, 0, "'e'"), -(279, 0, "'t'"), -(280, 0, "' '"), -(281, 0, "'i'"), -(282, 0, "'n'"), -(283, 0, "'t'"), -(284, 0, "'e'"), -(285, 0, "'r'"), -(286, 0, "'n'"), -(281, 6, "'internal_state'"), -(2494, 0, "'// '"), -(277, 0, "'// '"), -(277, 3, "''"), -(2494, 3, "''"), -(296, 0, "'// '"), -(277, 0, "'// '"), -(299, 3, "''"), -(277, 3, "''"), -(2559, 9, "''"), -(2204, 9, "''"), -(2240, 0, "' '"), -(2241, 0, "'&'"), -(2242, 0, "'&'"), -(2243, 0, "' '"), -(2244, 0, "'!'"), -(2245, 0, "'g'"), -(2246, 0, "'a'"), -(2247, 0, "'m'"), -(2248, 0, "'e'"), -(2249, 0, "'_'"), -(2245, 5, "'game_completed'"), -(2569, 0, "'('"), -(2589, 0, "' '"), -(2590, 0, "'&'"), -(2591, 0, "'&'"), -(2592, 0, "' '"), -(2592, 1, "''"), -(2591, 1, "''"), -(2590, 1, "''"), -(2590, 0, "'|'"), -(2591, 0, "'|'"), -(2592, 0, "' '"), -(2593, 0, "'g'"), -(2594, 0, "'a'"), -(2595, 0, "'m'"), -(2596, 0, "'e'"), -(2597, 0, "'_'"), -(2593, 5, "'game_completed'"), -(2607, 0, "')'"), -(2593, 14, "''"), -(2592, 1, "''"), -(2591, 1, "''"), -(2590, 1, "''"), -(2589, 1, "''"), -(2570, 0, "'game_completed'"), -(2584, 0, "' '"), -(2585, 0, "'|'"), -(2586, 0, "'|'"), -(2587, 0, "' '"), -(2198, 0, "'nt'"), -(2200, 0, "'/'"), -(2201, 0, "'/'"), -(2202, 0, "' '"), -(2203, 0, "'S'"), -(2204, 0, "'a'"), -(2205, 0, "'d'"), -(2206, 0, "'l'"), -(2207, 0, "'y'"), -(2208, 0, "' '"), -(2209, 0, "'w'"), -(2210, 0, "'e'"), -(2211, 0, "' '"), -(2212, 0, "'c'"), -(2213, 0, "'a'"), -(2214, 0, "'n'"), -(2215, 0, "'''"), -(2216, 0, "'t'"), -(2217, 0, "' '"), -(2218, 0, "'u'"), -(2219, 0, "'s'"), -(2220, 0, "'e'"), -(2221, 0, "' '"), -(2222, 0, "'i'"), -(2223, 0, "'n'"), -(2224, 0, "'t'"), -(2225, 0, "'e'"), -(2226, 0, "'r'"), -(2227, 0, "'n'"), -(2228, 0, "'a'"), -(2229, 0, "'l'"), -(2230, 0, "'_'"), -(2231, 0, "'s'"), -(2232, 0, "'t'"), -(2233, 0, "'a'"), -(2234, 0, "'t'"), -(2235, 0, "'e'"), -(2236, 0, "' '"), -(2237, 0, "'h'"), -(2238, 0, "'e'"), -(2239, 0, "'r'"), -(2240, 0, "'e'"), -(2241, 0, "' '"), -(2242, 0, "'b'"), -(2243, 0, "'e'"), -(2244, 0, "'c'"), -(2245, 0, "'a'"), -(2246, 0, "'u'"), -(2247, 0, "'s'"), -(2248, 0, "'e'"), -(2249, 0, "' '"), -(2250, 0, "'i'"), -(2251, 0, "'t'"), -(2252, 0, "' '"), -(2253, 0, "'g'"), -(2254, 0, "'e'"), -(2255, 0, "'n'"), -(2256, 0, "'e'"), -(2257, 0, "'r'"), -(2258, 0, "'a'"), -(2259, 0, "'t'"), -(2260, 0, "'e'"), -(2261, 0, "'s'"), -(2262, 0, "' '"), -(2263, 0, "'a'"), -(2264, 0, "' '"), -(2265, 0, "'c'"), -(2266, 0, "'y'"), -(2267, 0, "'c'"), -(2268, 0, "'l'"), -(2269, 0, "'i'"), -(2270, 0, "'g'"), -(2270, 1, "''"), -(2270, 0, "'c'"), -(2271, 0, "' '"), -(2272, 0, "'d'"), -(2273, 0, "'e'"), -(2274, 0, "'p'"), -(2275, 0, "'e'"), -(2276, 0, "'n'"), -(2277, 0, "'d'"), -(2278, 0, "'a'"), -(2279, 0, "'n'"), -(2280, 0, "'c'"), -(2281, 0, "'y'"), -(2282, 0, "'.'"), -(3770, 0, "'i'"), -(3677, 0, "'i'"), -(3585, 0, "'i'"), -(3492, 0, "'i'"), -(3774, 0, "'n'"), -(3680, 0, "'n'"), -(3587, 0, "'n'"), -(3493, 0, "'n'"), -(3778, 0, "'t'"), -(3683, 0, "'t'"), -(3589, 0, "'t'"), -(3494, 0, "'t'"), -(3782, 0, "'e'"), -(3686, 0, "'e'"), -(3591, 0, "'e'"), -(3495, 0, "'e'"), -(3786, 0, "'r'"), -(3689, 0, "'r'"), -(3593, 0, "'r'"), -(3496, 0, "'r'"), -(3790, 0, "'n'"), -(3692, 0, "'n'"), -(3595, 0, "'n'"), -(3497, 0, "'n'"), -(3794, 0, "'a'"), -(3695, 0, "'a'"), -(3597, 0, "'a'"), -(3498, 0, "'a'"), -(3798, 0, "'l'"), -(3698, 0, "'l'"), -(3599, 0, "'l'"), -(3499, 0, "'l'"), -(3802, 0, "'_'"), -(3701, 0, "'_'"), -(3601, 0, "'_'"), -(3500, 0, "'_'"), -(3816, 6, "'g'"), -(3817, 0, "'a'"), -(3818, 0, "'m'"), -(3819, 0, "'e'"), -(3820, 0, "'_'"), -(3821, 0, "'c'"), -(3822, 0, "'o'"), -(3823, 0, "'m'"), -(3824, 0, "'p'"), -(3825, 0, "'l'"), -(3826, 0, "'e'"), -(3827, 0, "'t'"), -(3828, 0, "'e'"), -(3829, 0, "'d'"), -(3879, 6, "'R'"), -(3880, 0, "'e'"), -(3881, 0, "'s'"), -(3882, 0, "'e'"), -(3883, 0, "'t'"), -(3868, 7, "'w'"), -(3869, 0, "'a'"), -(3870, 0, "'i'"), -(3871, 0, "'t'"), -(3872, 0, "'i'"), -(3873, 0, "'n'"), -(3874, 0, "'g'"), -(3816, 5, "''"), -(353, 0, "'n'"), -(353, 0, "'$'"), -(354, 0, "':'"), -(355, 0, "' '"), -(356, 0, "'{'"), -(357, 0, "'nt'"), -(359, 0, "'nt'"), -(358, 1, "''"), -(359, 1, "'}'"), -(358, 0, "'t'"), -(359, 0, "'i'"), -(360, 0, "'f'"), -(361, 0, "' '"), -(362, 0, "'('"), -(363, 0, "'s'"), -(364, 0, "'t'"), -(365, 0, "'a'"), -(366, 0, "'t'"), -(367, 0, "'e'"), -(368, 0, "' '"), -(369, 0, "'!'"), -(370, 0, "'='"), -(371, 0, "'='"), -(372, 0, "' '"), -(373, 0, "'''"), -(374, 0, "'p'"), -(375, 0, "'l'"), -(376, 0, "'a'"), -(377, 0, "'y'"), -(378, 0, "'i'"), -(379, 0, "'n'"), -(380, 0, "'g'"), -(381, 0, "'''"), -(382, 0, "')'"), -(383, 0, "' '"), -(384, 0, "'g'"), -(385, 0, "'a'"), -(386, 0, "'m'"), -(387, 0, "'e'"), -(388, 0, "'_'"), -(384, 5, "'game_completed'"), -(398, 0, "' '"), -(399, 0, "'='"), -(400, 0, "' '"), -(401, 0, "'f'"), -(402, 0, "'a'"), -(403, 0, "'l'"), -(404, 0, "'s'"), -(405, 0, "'e'"), -(5599, 0, "'nt'"), -(5601, 0, "'t'"), -(5602, 0, "'r'"), -(5603, 0, "'a'"), -(5604, 0, "'n'"), -(5605, 0, "'s'"), -(5606, 0, "'i'"), -(5607, 0, "'t'"), -(5608, 0, "'i'"), -(5609, 0, "'o'"), -(5610, 0, "'n'"), -(5611, 0, "':'"), -(5612, 0, "' '"), -(5613, 0, "'w'"), -(5614, 0, "'i'"), -(5615, 0, "'d'"), -(5616, 0, "'t'"), -(5617, 0, "'h'"), -(5618, 0, "' '"), -(5619, 0, "'1'"), -(5620, 0, "'s'"), -(5621, 0, "' '"), -(5621, 1, "''"), -(5621, 0, "' '"), -(5622, 0, "'l'"), -(5623, 0, "'i'"), -(5624, 0, "'n'"), -(5625, 0, "'e'"), -(5626, 0, "'a'"), -(5627, 0, "'r'"), -(5628, 0, "';'"), -(5619, 1, "''"), -(5619, 0, "'0'"), -(5620, 0, "'.'"), -(5621, 0, "'2'"), -(5621, 1, "''"), -(5620, 1, "''"), -(5619, 1, "''"), -(5619, 0, "'1'"), -(5629, 0, "' */'"), -(5601, 0, "'/* '"), -(2693, 3, "'1'"), -(2694, 0, "'0'"), -(2695, 0, "'0'"), -(2696, 0, "'0'"), -(357, 0, "'nt'"), -(358, 1, "''"), -(357, 1, "''"), -(384, 0, "'['"), -(385, 0, "'ntt'"), -(385, 3, "''"), -(384, 1, "''"), -(384, 0, "'nt'"), -(384, 0, "'{'"), -(387, 0, "'t'"), -(410, 0, "'ntt'"), -(411, 2, "'t}'"), -(385, 0, "'ntt'"), -(388, 0, "'c'"), -(389, 0, "'o'"), -(390, 0, "'n'"), -(391, 0, "'s'"), -(392, 0, "'o'"), -(393, 0, "'l'"), -(394, 0, "'e'"), -(388, 7, "'console'"), -(395, 0, "'.'"), -(396, 0, "'l'"), -(397, 0, "'o'"), -(398, 0, "'g'"), -(396, 3, "'log'"), -(399, 0, "'('"), -(400, 0, "'''"), -(401, 0, "'x'"), -(402, 0, "'x'"), -(403, 0, "'x'"), -(404, 0, "'''"), -(405, 0, "')'"), -(2836, 0, "'ntt'"), -(2839, 0, "'s'"), -(2840, 0, "'t'"), -(2841, 0, "'a'"), -(2842, 0, "'t'"), -(2843, 0, "'e'"), -(2844, 0, "'_'"), -(2845, 0, "'l'"), -(2846, 0, "'a'"), -(2847, 0, "'b'"), -(2848, 0, "'e'"), -(2849, 0, "'l'"), -(2850, 0, "'='"), -(2851, 0, "' '"), -(2851, 1, "''"), -(2850, 1, "''"), -(2839, 11, "''"), -(2220, 0, "' '"), -(2221, 0, "'='"), -(2222, 0, "' '"), -(2223, 0, "'''"), -(2224, 0, "'W'"), -(2225, 0, "'a'"), -(2226, 0, "'i'"), -(2227, 0, "'t'"), -(2228, 0, "'i'"), -(2229, 0, "'n'"), -(2230, 0, "'g'"), -(2231, 0, "' '"), -(2232, 0, "'f'"), -(2233, 0, "'o'"), -(2234, 0, "'r'"), -(2235, 0, "' '"), -(2236, 0, "'h'"), -(2237, 0, "'o'"), -(2238, 0, "'s'"), -(2239, 0, "'t'"), -(2240, 0, "' '"), -(2241, 0, "'t'"), -(2242, 0, "'o'"), -(2243, 0, "' '"), -(2244, 0, "'s'"), -(2245, 0, "'t'"), -(2246, 0, "'a'"), -(2247, 0, "'r'"), -(2248, 0, "'t'"), -(2236, 13, "'g'"), -(2237, 0, "'a'"), -(2238, 0, "'m'"), -(2239, 0, "'e'"), -(2240, 0, "' '"), -(2241, 0, "'o'"), -(2242, 0, "' '"), -(2242, 1, "''"), -(2241, 1, "''"), -(2241, 0, "'t'"), -(2242, 0, "'o'"), -(2243, 0, "' '"), -(2244, 0, "'s'"), -(2245, 0, "'t'"), -(2246, 0, "'a'"), -(2247, 0, "'r'"), -(2248, 0, "'t'"), -(2249, 0, "'''"), -(2250, 29, "''"), -(2840, 0, "'s'"), -(2841, 0, "'t'"), -(2842, 0, "'a'"), -(2843, 0, "'t'"), -(2844, 0, "'e'"), -(2845, 0, "'_'"), -(2840, 6, "'state_label'"), -(2851, 0, "' '"), -(2852, 0, "'='"), -(2853, 0, "' '"), -(2854, 0, "''Waiting for game to start''"), -(2220, 0, "'/'"), -(2221, 0, "'/'"), -(2220, 2, "''"), -(2192, 1, "''"), -(2191, 1, "''"), -(2191, 0, "'0'"), -(2880, 0, "'ntt'"), -(2883, 0, "'w'"), -(2884, 0, "'i'"), -(2885, 0, "'d'"), -(2886, 0, "'t'"), -(2887, 0, "'h'"), -(2888, 0, "' '"), -(2889, 0, "'='"), -(2890, 0, "' '"), -(2891, 0, "'0'"), -(2729, 6, "''"), -(2729, 0, "'nt'"), -(2731, 0, "'nt'"), -(2835, 56, "''"), -(2729, 0, "' '"), -(2730, 0, "'e'"), -(2731, 0, "'l'"), -(2732, 0, "'s'"), -(2733, 0, "'e'"), -(2734, 0, "' '"), -(2735, 0, "'{'"), -(2736, 0, "'ntt'"), -(2739, 0, "'ttstate_label = 'Waiting for game to start'nttwidth = 0n'"), -(2737, 4, "'tt'"), -(2793, 0, "'t}'"), -(2793, 2, "''"), -(2737, 2, "'tttt'"), -(2739, 56, "''"), -(2736, 3, "''"), -(2734, 2, "''"), -(2729, 5, "''"), -(2835, 0, "'ttstate_label = 'Waiting for game to start'nttwidth = 0n'"), -(2731, 2, "''"), -(2729, 2, "''"), -(2729, 0, "' else '"), -(2836, 0, "'ntt'"), -(2837, 2, "'t}'"), -(2839, 0, "'nt'"), -(2841, 0, "'nt'"), -(2840, 1, "''"), -(2842, 0, "'i'"), -(2843, 0, "'f'"), -(2844, 0, "' '"), -(2845, 0, "'('"), -(2840, 0, "'}'"), -(2841, 0, "'n'"), -(2842, 0, "'n'"), -(2843, 0, "'$'"), -(2844, 0, "':'"), -(2845, 0, "' '"), -(2846, 0, "'{'"), -(2853, 0, "'i'"), -(2854, 0, "'n'"), -(2855, 0, "'t'"), -(2856, 0, "'e'"), -(2857, 0, "'r'"), -(2858, 0, "'n'"), -(2853, 6, "'internal_state'"), -(2867, 0, "' '"), -(2868, 0, "'!'"), -(2869, 0, "'='"), -(2870, 0, "' '"), -(2871, 0, "'''"), -(2872, 0, "'p'"), -(2872, 1, "''"), -(2871, 1, "''"), -(2870, 1, "''"), -(2870, 0, "'='"), -(2871, 0, "' '"), -(2872, 0, "'''"), -(2873, 0, "'p'"), -(2874, 0, "'l'"), -(2875, 0, "'a'"), -(2876, 0, "'y'"), -(2877, 0, "'i'"), -(2878, 0, "'n'"), -(2879, 0, "'g'"), -(2880, 0, "'''"), -(2881, 0, "')'"), -(2882, 0, "' '"), -(2883, 0, "'{'"), -(2219, 30, "''"), -(2838, 1, "''"), -(2838, 0, "'='"), -(2843, 7, "'w'"), -(2844, 0, "'a'"), -(2845, 0, "'i'"), -(2846, 0, "'t'"), -(2847, 0, "'i'"), -(2848, 0, "'n'"), -(2849, 0, "'g'"), -(0, 6003, "''"), -(0, 0, "'nn
nt

Glass Bead Game Timer

nt

Room: {room}

nt

Topic: {topic}

nt
{connection} / {state}
nt
{_active_sessions} player(s) in room
nnt

{state_label}

nt
ntt
nt
nnt
ntt

Game structure

ntt{#if meditate}nttt
Meditation (1 min)
ntt{/if}ntt{#each Array(Math.max(rounds, 0)) as _, r}nttt
Round {r+1}:ntttt{#each Array(Math.max(players, 0)) as _, p}nttttt{p+1} ntttt{/each}nttt
ntt{/each}nt
nnt
ntt

Config

ntt{#if internal_state == 'waiting'}ntttntt{:else if internal_state == 'playing'}ntttntt{:else if internal_state == 'paused'}ntttntt{:else if internal_state == 'completed'}ntttntt{/if}nnttnnttnnttnnttnnttnntt
nttt(Total game length: {roundish(ntttt(rounds * players * seconds_per_bead + (meditate ? MEDITATION_SECONDS : 0)) / 60nttt)} minutes)ntt
ntt
nttt(Total game length: {roundish(nttttgame_stages.reduce((x, s) => x + s.duration, 0) / 60nttt)} minutes)ntt
nt
n
nn'"), -(0, 0, "'n'"), -(0, 1, "''"), -(9, 0, "'n'"), -(9, 0, "'e'"), -(10, 0, "'x'"), -(11, 0, "'p'"), -(12, 0, "'o'"), -(13, 0, "'r'"), -(14, 0, "'t'"), -(15, 0, "' '"), -(16, 0, "'l'"), -(17, 0, "'e'"), -(18, 0, "'t'"), -(19, 0, "' '"), -(20, 0, "'r'"), -(21, 0, "'e'"), -(22, 0, "'a'"), -(23, 0, "'d'"), -(24, 0, "'y'"), -(9, 16, "''"), -(8, 1, "''"), -(3025, 0, "'nt'"), -(3027, 0, "'{'"), -(3028, 0, "'#'"), -(3029, 0, "'i'"), -(3030, 0, "'f'"), -(3031, 0, "' '"), -(3032, 0, "'i'"), -(3033, 0, "'n'"), -(3034, 0, "'t'"), -(3035, 0, "'e'"), -(3036, 0, "'r'"), -(3037, 0, "'n'"), -(3032, 6, "'internal_state'"), -(3046, 0, "' '"), -(3047, 0, "'='"), -(3048, 0, "'='"), -(3049, 0, "'='"), -(3050, 0, "' '"), -(3051, 0, "'''"), -(3052, 0, "'l'"), -(3053, 0, "'o'"), -(3054, 0, "'a'"), -(3055, 0, "'d'"), -(3056, 0, "'i'"), -(3057, 0, "'n'"), -(3058, 0, "'g'"), -(3059, 0, "'''"), -(3060, 0, "'}'"), -(3061, 0, "'nt'"), -(3063, 0, "'nt'"), -(3062, 1, "''"), -(3064, 0, "'{'"), -(3065, 0, "':'"), -(3066, 0, "'e'"), -(3067, 0, "'l'"), -(3068, 0, "'s'"), -(3069, 0, "'e'"), -(3070, 0, "' '"), -(3071, 0, "'}'"), -(3071, 1, "''"), -(3070, 1, "''"), -(3070, 0, "'}'"), -(5480, 1, "'tt'"), -(5471, 2, "'ttt'"), -(5456, 3, "'tttt'"), -(5399, 4, "'ttttt'"), -(5365, 3, "'tttt'"), -(5357, 2, "'ttt'"), -(5348, 2, "'ttt'"), -(5333, 3, "'tttt'"), -(5248, 4, "'ttttt'"), -(5214, 3, "'tttt'"), -(5206, 2, "'ttt'"), -(5194, 2, "'ttt'"), -(5102, 3, "'tttt'"), -(5014, 3, "'tttt'"), -(4988, 2, "'ttt'"), -(4976, 2, "'ttt'"), -(4884, 3, "'tttt'"), -(4803, 3, "'tttt'"), -(4777, 2, "'ttt'"), -(4765, 2, "'ttt'"), -(4673, 3, "'tttt'"), -(4589, 3, "'tttt'"), -(4562, 2, "'ttt'"), -(4550, 2, "'ttt'"), -(4458, 3, "'tttt'"), -(4381, 3, "'tttt'"), -(4333, 2, "'ttt'"), -(4321, 2, "'ttt'"), -(4306, 3, "'tttt'"), -(4294, 4, "'ttttt'"), -(4266, 5, "'tttttt'"), -(4233, 4, "'ttttt'"), -(4202, 3, "'tttt'"), -(4118, 3, "'tttt'"), -(4103, 2, "'ttt'"), -(4094, 2, "'ttt'"), -(4033, 3, "'tttt'"), -(3990, 2, "'ttt'"), -(3928, 3, "'tttt'"), -(3888, 2, "'ttt'"), -(3828, 3, "'tttt'"), -(3787, 2, "'ttt'"), -(3726, 3, "'tttt'"), -(3690, 2, "'ttt'"), -(3672, 2, "'ttt'"), -(3653, 1, "'tt'"), -(3644, 1, "'tt'"), -(3634, 2, "'ttt'"), -(3624, 3, "'tttt'"), -(3612, 4, "'ttttt'"), -(3587, 5, "'tttttt'"), -(3539, 4, "'ttttt'"), -(3518, 3, "'tttt'"), -(3473, 2, "'ttt'"), -(3465, 2, "'ttt'"), -(3432, 3, "'tttt'"), -(3415, 2, "'ttt'"), -(3389, 2, "'ttt'"), -(3370, 1, "'tt'"), -(3361, 1, "'tt'"), -(3309, 2, "'ttt'"), -(3279, 1, "'tt'"), -(3255, 1, "'tt'"), -(3205, 1, "'tt'"), -(3170, 1, "'tt'"), -(3136, 1, "'tt'"), -(3104, 1, "'tt'"), -(3072, 1, "'tt'"), -(5555, 0, "'ntt'"), -(5558, 0, "'{'"), -(5559, 0, "'/'"), -(5560, 0, "'i'"), -(5561, 0, "'f'"), -(5562, 0, "'}'"), -(5556, 2, "'t'"), -(3062, 0, "'t'"), -(3063, 0, "'t'"), -(3064, 0, "'<'"), -(3065, 0, "'h'"), -(3066, 0, "'1'"), -(3067, 0, "'>'"), -(3068, 0, "'L'"), -(3069, 0, "'o'"), -(3070, 0, "'a'"), -(3071, 0, "'d'"), -(3072, 0, "'i'"), -(3073, 0, "'n'"), -(3074, 0, "'g'"), -(3075, 0, "' '"), -(3076, 0, "'i'"), -(3077, 0, "'n'"), -(3078, 0, "'t'"), -(3076, 3, "'g'"), -(3077, 0, "'a'"), -(3078, 0, "'m'"), -(3079, 0, "'e'"), -(3080, 0, "' '"), -(3081, 0, "'s'"), -(3082, 0, "'t'"), -(3083, 0, "'a'"), -(3084, 0, "'t'"), -(3085, 0, "'e'"), -(3086, 0, "' '"), -(3087, 0, "'f'"), -(3088, 0, "'r'"), -(3089, 0, "'o'"), -(3090, 0, "'m'"), -(3091, 0, "' '"), -(3092, 0, "'s'"), -(3093, 0, "'e'"), -(3094, 0, "'r'"), -(3095, 0, "'v'"), -(3096, 0, "'e'"), -(3097, 0, "'r'"), -(3098, 0, "'<'"), -(3099, 0, "'/'"), -(3100, 0, "'h'"), -(3101, 0, "'1'"), -(3102, 0, "'>'"), -(3086, 12, "''"), -(4163, 0, "'ntttt'"), -(4093, 62, "''"), -(4101, 0, "'nttt{:else if internal_state == 'completed'}'"), -(4093, 3, "'tttt'"), -(4049, 44, "''"), -(4049, 4, "'ttt'"), -(4063, 4, "''"), -(4063, 1, "''"), -(4095, 0, "' '"), -(4066, 0, "'internal_state == 'completed' '"), -(4096, 0, "'|'"), -(4097, 0, "'|'"), -(4098, 0, "' '"), -(4085, 9, "'p'"), -(4086, 0, "'a'"), -(4087, 0, "'u'"), -(4088, 0, "'s'"), -(4089, 0, "'e'"), -(4090, 0, "'d'"), -(4180, 0, "' '"), -(4181, 0, "'g'"), -(4182, 0, "'a'"), -(4183, 0, "'m'"), -(4184, 0, "'e'"), -(4194, 0, "'ntttt'"), -(4199, 0, "'{'"), -(4200, 0, "'/'"), -(4201, 0, "'i'"), -(4202, 0, "'f'"), -(4203, 0, "'}'"), -(4195, 4, "'ttt'"), -(4057, 0, "'nttt'"), -(4066, 1, "''"), -(4058, 3, "''"), -(4063, 0, "'#'"), -(5231, 88, "''"), -(5009, 88, "''"), -(4794, 88, "''"), -(4575, 88, "''"), -(4963, 4, "''"), -(4829, 4, "''"), -(4702, 4, "''"), -(4571, 4, "''"), -(4950, 1, "''"), -(4820, 1, "''"), -(4697, 1, "''"), -(4570, 1, "''"), -(4947, 0, "'n'"), -(4818, 0, "'n'"), -(4696, 0, "'n'"), -(4570, 0, "'n'"), -(4951, 0, "'tttt'"), -(4821, 0, "'tttt'"), -(4698, 0, "'tttt'"), -(4571, 0, "'tttt'"), -(4967, 0, "''"), -(4833, 0, "''"), -(4706, 0, "''"), -(4575, 0, "''"), -(5231, 88, "''"), -(5009, 88, "''"), -(4794, 88, "''"), -(4575, 88, "''"), -(4963, 4, "''"), -(4829, 4, "''"), -(4702, 4, "''"), -(4571, 4, "''"), -(4950, 1, "''"), -(4820, 1, "''"), -(4697, 1, "''"), -(4570, 1, "''"), -(2401, 0, "'ntt'"), -(2404, 0, "'l'"), -(2405, 0, "'e'"), -(2406, 0, "'t'"), -(2407, 0, "' '"), -(2408, 0, "'l'"), -(2409, 0, "'a'"), -(2410, 0, "'s'"), -(2411, 0, "'t'"), -(2412, 0, "'_'"), -(2413, 0, "'a'"), -(2414, 0, "'t'"), -(2415, 0, "'e'"), -(2415, 1, "''"), -(2414, 1, "''"), -(2413, 1, "''"), -(2413, 0, "'s'"), -(2414, 0, "'t'"), -(2415, 0, "'a'"), -(2416, 0, "'t'"), -(2417, 0, "'e'"), -(2418, 0, "' '"), -(2419, 0, "'='"), -(2420, 0, "' '"), -(2421, 0, "'n'"), -(2422, 0, "'u'"), -(2423, 0, "'l'"), -(2424, 0, "'l'"), -(2425, 0, "'ntt'"), -(2711, 0, "'nttt'"), -(2426, 2, "''"), -(2713, 0, "'nttt'"), -(2710, 3, "''"), -(2714, 0, "'i'"), -(2715, 0, "'f'"), -(2716, 0, "' '"), -(2717, 0, "'('"), -(2718, 0, "'l'"), -(2719, 0, "'a'"), -(2720, 0, "'s'"), -(2721, 0, "'t'"), -(2722, 0, "'_'"), -(2718, 5, "'last_state'"), -(2728, 0, "' '"), -(2729, 0, "'&'"), -(2730, 0, "'&'"), -(2731, 0, "' '"), -(2732, 0, "'l'"), -(2733, 0, "'a'"), -(2734, 0, "'s'"), -(2735, 0, "'t'"), -(2736, 0, "'_'"), -(2737, 0, "'s'"), -(2738, 0, "'t'"), -(2732, 7, "'last_state'"), -(2742, 0, "' '"), -(2743, 0, "'!'"), -(2744, 0, "'='"), -(2745, 0, "' '"), -(2745, 1, "''"), -(2744, 1, "''"), -(2743, 1, "''"), -(2743, 0, "'!'"), -(2744, 0, "'='"), -(2745, 0, "'='"), -(2746, 0, "' '"), -(2747, 0, "'s'"), -(2748, 0, "'t'"), -(2749, 0, "'a'"), -(2750, 0, "'t'"), -(2751, 0, "'e'"), -(2752, 0, "')'"), -(2753, 0, "' '"), -(2754, 0, "'{'"), -(2755, 0, "'ntttt'"), -(2760, 0, "'ntttt'"), -(2756, 4, "''"), -(2757, 4, "'ttt}'"), -(2756, 0, "'tttt'"), -(2760, 0, "'c'"), -(2761, 0, "'o'"), -(2762, 0, "'n'"), -(2763, 0, "'s'"), -(2764, 0, "'o'"), -(2765, 0, "'l'"), -(2766, 0, "'e'"), -(2760, 7, "'console'"), -(2767, 0, "'.'"), -(2768, 0, "'l'"), -(2769, 0, "'o'"), -(2770, 0, "'g'"), -(2768, 3, "'log'"), -(2771, 0, "'('"), -(2772, 0, "'''"), -(2773, 0, "'s'"), -(2774, 0, "'t'"), -(2775, 0, "'a'"), -(2776, 0, "'t'"), -(2777, 0, "'e'"), -(2778, 0, "' '"), -(2779, 0, "'c'"), -(2780, 0, "'h'"), -(2781, 0, "'a'"), -(2782, 0, "'n'"), -(2783, 0, "'g'"), -(2784, 0, "'e'"), -(2785, 0, "'d'"), -(2786, 0, "'''"), -(2787, 0, "')'"), -(2788, 0, "'ntttt'"), -(2793, 0, "'l'"), -(2794, 0, "'a'"), -(2795, 0, "'s'"), -(2796, 0, "'t'"), -(2797, 0, "'_'"), -(2793, 5, "'last_state'"), -(2803, 0, "' '"), -(2804, 0, "'='"), -(2805, 0, "' '"), -(2806, 0, "'s'"), -(2807, 0, "'t'"), -(2808, 0, "'a'"), -(2809, 0, "'t'"), -(2810, 0, "'e'"), -(2806, 5, "'state'"), -(2688, 0, "'{'"), -(2689, 0, "'ntttt'"), -(2715, 0, "'ntttt'"), -(2716, 4, "'ttt}'"), -(2689, 0, "'ntttt'"), -(2694, 0, "'/'"), -(2695, 0, "'/'"), -(2696, 0, "' '"), -(2697, 0, "'A'"), -(2698, 0, "'n'"), -(2699, 0, "'d'"), -(2700, 0, "' '"), -(2701, 0, "'p'"), -(2702, 0, "'l'"), -(2703, 0, "'a'"), -(2704, 0, "'y'"), -(2705, 0, "' '"), -(2706, 0, "'g'"), -(2707, 0, "'o'"), -(2708, 0, "'n'"), -(2709, 0, "'g'"), -(2750, 14, "''"), -(2743, 92, "''"), -(2664, 0, "'nttt'"), -(2668, 0, "'nttt'"), -(2665, 3, "''"), -(2666, 3, "''"), -(2665, 0, "'tttif (last_state !== state) {nttttconsole.log('state changed')nttttlast_state = statenttt}n'"), -(2756, 1, "''"), -(3176, 0, "'nt'"), -(3178, 0, "'n'"), -(3177, 1, "''"), -(3178, 0, "'t'"), -(3176, 1, "''"), -(3255, 0, "'nt'"), -(3256, 1, "''"), -(3205, 25, "'h'"), -(3206, 0, "'i'"), -(3207, 0, "'_'"), -(3207, 1, "''"), -(3207, 0, "'-'"), -(3208, 0, "'m'"), -(3209, 0, "'e'"), -(3210, 0, "'t'"), -(3211, 0, "'a'"), -(3212, 0, "'l'"), -(3213, 0, "'-'"), -(3214, 0, "'t'"), -(3215, 0, "'o'"), -(3216, 0, "'n'"), -(3217, 0, "'e'"), -(3218, 0, "'.'"), -(3219, 0, "'m'"), -(3220, 0, "'p'"), -(3221, 0, "'3'"), -(3178, 0, "''"), -(3201, 0, "'ntt'"), -(3273, 0, "'ntt'"), -(3276, 0, "'<'"), -(3277, 0, "'/'"), -(3278, 0, "'t'"), -(3279, 0, "'r'"), -(3280, 0, "'a'"), -(3281, 0, "'c'"), -(3282, 0, "'k'"), -(3274, 9, "'t'"), -(3274, 9, "''"), -(3273, 1, "''"), -(3178, 23, "''"), -(3177, 1, "''"), -(3176, 1, "''"), -(3240, 0, "''"), -(3177, 2, "'t'"), -(3189, 9, "'a'"), -(3190, 0, "'u'"), -(3191, 0, "'d'"), -(3192, 0, "'i'"), -(3193, 0, "'o'"), -(3194, 0, "'1'"), -(3196, 0, "' '"), -(3197, 0, "'b'"), -(3198, 0, "'i'"), -(3199, 0, "'n'"), -(3200, 0, "'d'"), -(3201, 0, "':'"), -(3202, 0, "'t'"), -(3203, 0, "'h'"), -(3204, 0, "'i'"), -(3205, 0, "'s'"), -(3206, 0, "'='"), -(3185, 11, "''"), -(3184, 1, "''"), -(3195, 0, "'{'"), -(3196, 0, "'a'"), -(3197, 0, "'u'"), -(3198, 0, "'d'"), -(3199, 0, "'i'"), -(3200, 0, "'o'"), -(3201, 0, "'1'"), -(3202, 0, "'}'"), -(437, 0, "'n'"), -(437, 0, "'n'"), -(438, 0, "'l'"), -(439, 0, "'e'"), -(440, 0, "'t'"), -(441, 0, "' '"), -(442, 0, "'a'"), -(443, 0, "'u'"), -(444, 0, "'d'"), -(445, 0, "'i'"), -(446, 0, "'o'"), -(447, 0, "'1'"), -(2413, 0, "'ntt'"), -(2416, 0, "'a'"), -(2417, 0, "'u'"), -(2418, 0, "'d'"), -(2416, 3, "'audio1'"), -(2422, 0, "'.'"), -(2423, 0, "'p'"), -(2424, 0, "'l'"), -(2425, 0, "'a'"), -(2426, 0, "'y'"), -(2427, 0, "'('"), -(2428, 0, "')'"), -(3237, 0, "'.'"), -(3238, 0, "'.'"), -(3239, 0, "'/'"), -(3305, 0, "'nt'"), -(3238, 1, "''"), -(3237, 1, "''"), -(3336, 1, "''"), -(3336, 1, "''"), -(3238, 2, "'l'"), -(3239, 0, "'o'"), -(3328, 1, "''"), -(3328, 0, "'2'"), -(438, 0, "'let audio1n'"), -(458, 1, "''"), -(458, 0, "'2'"), -(5505, 0, "' -->'"), -(5353, 0, "''"), -(6364, 165, "''"), -(6902, 163, "''"), -(6812, 1, "''"), -(6812, 1, "''"), -(6812, 1, "''"), -(6812, 1, "''"), -(6895, 1, "''"), -(6877, 2, "'t'"), -(6857, 2, "'t'"), -(6841, 2, "'t'"), -(6819, 2, "'t'"), -(6812, 0, "'n'"), -(6820, 21, "''"), -(6865, 4, "'2'"), -(6866, 0, "'e'"), -(6867, 0, "'m'"), -(6835, 18, "''"), -(6834, 1, "''"), -(1244, 0, "'ntttt'"), -(1249, 0, "'r'"), -(1250, 0, "','"), -(1251, 0, "' '"), -(1252, 0, "'p'"), -(4182, 0, "'n'"), -(4183, 0, "'n'"), -(4183, 0, "'c'"), -(4184, 0, "'o'"), -(4185, 0, "'n'"), -(4186, 0, "'s'"), -(4187, 0, "'t'"), -(4188, 0, "' '"), -(4189, 0, "'p'"), -(4190, 0, "'r'"), -(4191, 0, "'o'"), -(4192, 0, "'g'"), -(4193, 0, "'r'"), -(4194, 0, "'e'"), -(4195, 0, "'s'"), -(4196, 0, "'s'"), -(4197, 0, "'_'"), -(4198, 0, "'c'"), -(4199, 0, "'l'"), -(4200, 0, "'a'"), -(4201, 0, "'s'"), -(4202, 0, "'s'"), -(4203, 0, "' '"), -(4204, 0, "'='"), -(4205, 0, "' '"), -(4206, 0, "'('"), -(4207, 0, "'t'"), -(4208, 0, "'y'"), -(4209, 0, "'p'"), -(4210, 0, "'e'"), -(4207, 4, "'type'"), -(4211, 0, "','"), -(8, 0, "'nimport { type } from 'os';nn'"), -(4241, 0, "' '"), -(4242, 0, "'r'"), -(4243, 0, "','"), -(4244, 0, "' '"), -(4245, 0, "'p'"), -(4246, 0, "')'"), -(4247, 0, "' '"), -(4248, 0, "'='"), -(4249, 0, "'>'"), -(4250, 0, "' '"), -(4251, 0, "'{'"), -(4252, 0, "'nt'"), -(4254, 0, "'nt'"), -(4253, 1, "''"), -(4254, 1, "'}'"), -(4253, 0, "'t'"), -(4254, 0, "'i'"), -(4255, 0, "'f'"), -(4256, 0, "' '"), -(4257, 0, "'('"), -(4258, 0, "'s'"), -(4259, 0, "'t'"), -(4260, 0, "'a'"), -(4261, 0, "'t'"), -(4262, 0, "'e'"), -(4258, 5, "''"), -(4258, 0, "'c'"), -(4259, 0, "'u'"), -(4260, 0, "'r'"), -(4261, 0, "'r'"), -(4262, 0, "'e'"), -(4263, 0, "'n'"), -(4264, 0, "'t'"), -(4265, 0, "'_'"), -(4266, 0, "'g'"), -(4266, 1, "''"), -(4258, 8, "'current_stage'"), -(4271, 0, "' '"), -(4272, 0, "'='"), -(4273, 0, "'='"), -(4274, 0, "' '"), -(4275, 0, "'n'"), -(4276, 0, "'u'"), -(4277, 0, "'l'"), -(4278, 0, "'l'"), -(4279, 0, "')'"), -(4280, 0, "' '"), -(4281, 0, "'r'"), -(4282, 0, "'e'"), -(4283, 0, "'t'"), -(4284, 0, "'u'"), -(4285, 0, "'r'"), -(4286, 0, "'n'"), -(4287, 0, "' '"), -(4288, 0, "'''"), -(4289, 0, "'''"), -(4290, 0, "'nt'"), -(4292, 0, "'nt'"), -(4291, 1, "''"), -(4292, 1, "''"), -(1273, 0, "'ntttt'"), -(1278, 0, "'t'"), -(1279, 0, "'y'"), -(1280, 0, "'p'"), -(1281, 0, "'e'"), -(1282, 0, "':'"), -(1283, 0, "' '"), -(1284, 0, "'''"), -(1285, 0, "'b'"), -(1286, 0, "'e'"), -(1287, 0, "'a'"), -(1288, 0, "'d'"), -(1289, 0, "'''"), -(1290, 0, "','"), -(1274, 26, "'tttttype: 'bead', r, p'"), -(1068, 0, "'ntt'"), -(1071, 0, "'t'"), -(1072, 0, "'y'"), -(1073, 0, "'p'"), -(1074, 0, "'e'"), -(1075, 0, "':'"), -(1076, 0, "' '"), -(1077, 0, "'''"), -(1078, 0, "'m'"), -(1079, 0, "'e'"), -(1080, 0, "'d'"), -(1081, 0, "'i'"), -(1082, 0, "'t'"), -(1083, 0, "'a'"), -(1084, 0, "'t'"), -(1085, 0, "'e'"), -(1086, 0, "'''"), -(1087, 0, "','"), -(992, 0, "'ntt'"), -(995, 0, "'t'"), -(996, 0, "'y'"), -(997, 0, "'p'"), -(998, 0, "'e'"), -(999, 0, "'''"), -(999, 1, "''"), -(999, 0, "':'"), -(1000, 0, "' '"), -(1001, 0, "'''"), -(993, 9, "''"), -(992, 1, "''"), -(2060, 0, "' '"), -(2061, 0, "'t'"), -(2062, 0, "'y'"), -(2063, 0, "'p'"), -(2064, 0, "'e'"), -(2065, 0, "':'"), -(2066, 0, "' '"), -(2067, 0, "'''"), -(2068, 0, "'c'"), -(2069, 0, "'o'"), -(2070, 0, "'m'"), -(2071, 0, "'p'"), -(2072, 0, "'l'"), -(2073, 0, "'e'"), -(2074, 0, "'t'"), -(2075, 0, "'e'"), -(2076, 0, "'''"), -(2077, 0, "','"), -(2077, 16, "''"), -(2926, 9, "''"), -(2917, 9, "'new_stage'"), -(2926, 0, "'.'"), -(2927, 0, "'t'"), -(2928, 0, "'y'"), -(2929, 0, "'p'"), -(2930, 0, "'e'"), -(2931, 0, "' '"), -(2932, 0, "'='"), -(2933, 0, "'='"), -(2934, 0, "'='"), -(2935, 0, "' '"), -(2936, 0, "'''"), -(2937, 0, "'c'"), -(2938, 0, "'o'"), -(2939, 0, "'m'"), -(2940, 0, "'p'"), -(2941, 0, "'l'"), -(2942, 0, "'e'"), -(2943, 0, "'t'"), -(2944, 0, "'e'"), -(2945, 0, "'''"), -(3126, 9, "''"), -(3113, 13, "'current_stage'"), -(3126, 0, "'.'"), -(3127, 0, "'t'"), -(3128, 0, "'y'"), -(3129, 0, "'p'"), -(3130, 0, "'e'"), -(3131, 0, "' '"), -(3132, 0, "'='"), -(3133, 0, "'='"), -(3134, 0, "'='"), -(3135, 0, "' '"), -(3136, 0, "'''"), -(3137, 0, "'c'"), -(3138, 0, "'o'"), -(3139, 0, "'m'"), -(3140, 0, "'p'"), -(3141, 0, "'l'"), -(3142, 0, "'e'"), -(3143, 0, "'t'"), -(3144, 0, "'e'"), -(3145, 0, "'''"), -(3353, 9, "''"), -(3340, 13, "'current_stage'"), -(3353, 0, "'.'"), -(3354, 0, "'t'"), -(3355, 0, "'y'"), -(3356, 0, "'p'"), -(3357, 0, "'e'"), -(3358, 0, "' '"), -(3359, 0, "'='"), -(3360, 0, "'='"), -(3361, 0, "'='"), -(3362, 0, "' '"), -(3363, 0, "'c'"), -(3364, 0, "'o'"), -(3365, 0, "'m'"), -(3366, 0, "'p'"), -(3367, 0, "'l'"), -(3368, 0, "'e'"), -(3369, 0, "'t'"), -(3370, 0, "'e'"), -(3371, 0, "'''"), -(3363, 0, "'''"), -(4129, 9, "'.'"), -(4130, 0, "'t'"), -(4131, 0, "'y'"), -(4132, 0, "'p'"), -(4133, 0, "'e'"), -(4134, 0, "' '"), -(4135, 0, "'='"), -(4136, 0, "'='"), -(4137, 0, "'='"), -(4138, 0, "' '"), -(4139, 0, "'''"), -(4140, 0, "'c'"), -(4141, 0, "'o'"), -(4142, 0, "'m'"), -(4143, 0, "'p'"), -(4144, 0, "'e'"), -(4145, 0, "'l'"), -(4146, 0, "'t'"), -(4147, 0, "'e'"), -(4148, 0, "'''"), -(4144, 4, "'l'"), -(4145, 0, "'e'"), -(4146, 0, "'t'"), -(4147, 0, "'e'"), -(4031, 22, "''"), -(4030, 1, "''"), -(4029, 1, "''"), -(4029, 0, "'c'"), -(4030, 0, "'u'"), -(4031, 0, "'r'"), -(4032, 0, "'r'"), -(4033, 0, "'e'"), -(4034, 0, "'n'"), -(4035, 0, "'t'"), -(4029, 7, "'current_stage'"), -(4042, 0, "'.'"), -(4043, 0, "'t'"), -(4044, 0, "'y'"), -(4045, 0, "'p'"), -(4046, 0, "'e'"), -(4047, 0, "' '"), -(4048, 0, "'='"), -(4049, 0, "'='"), -(4050, 0, "'='"), -(4051, 0, "' '"), -(4052, 0, "'''"), -(4053, 0, "'c'"), -(4054, 0, "'o'"), -(4055, 0, "'m'"), -(4056, 0, "'p'"), -(4057, 0, "'l'"), -(4058, 0, "'e'"), -(4059, 0, "'t'"), -(4060, 0, "'e'"), -(4061, 0, "'''"), -(9, 27, "''"), -(9, 2, "''"), -(2499, 4, "'c'"), -(2500, 0, "'u'"), -(2501, 0, "'r'"), -(2502, 0, "'r'"), -(2503, 0, "'e'"), -(2504, 0, "'n'"), -(2505, 0, "'t'"), -(2512, 4, "''"), -(2841, 0, "'// '"), -(4354, 0, "'t'"), -(4355, 0, "'i'"), -(4356, 0, "'f'"), -(4357, 0, "' '"), -(4358, 0, "'c'"), -(4359, 0, "'u'"), -(4360, 0, "'r'"), -(4361, 0, "'r'"), -(4362, 0, "'e'"), -(4363, 0, "'n'"), -(4358, 6, "'current_stage'"), -(4273, 0, "'n'"), -(4274, 0, "'c'"), -(4275, 0, "'o'"), -(4276, 0, "'n'"), -(4277, 0, "'s'"), -(4278, 0, "'t'"), -(4279, 0, "' '"), -(4280, 0, "'o'"), -(4281, 0, "'r'"), -(4282, 0, "'d'"), -(4283, 0, "'e'"), -(4284, 0, "'r'"), -(4285, 0, "' '"), -(4286, 0, "'='"), -(4287, 0, "' '"), -(4288, 0, "'['"), -(4289, 0, "'''"), -(4290, 0, "'m'"), -(4291, 0, "'e'"), -(4292, 0, "'d'"), -(4293, 0, "'i'"), -(4294, 0, "'t'"), -(4295, 0, "'a'"), -(4296, 0, "'t'"), -(4297, 0, "'e'"), -(4298, 0, "','"), -(4299, 0, "' '"), -(4299, 1, "''"), -(4298, 1, "''"), -(4298, 0, "'''"), -(4299, 0, "','"), -(4300, 0, "' '"), -(4301, 0, "'''"), -(4302, 0, "'b'"), -(4303, 0, "'e'"), -(4304, 0, "'a'"), -(4305, 0, "'d'"), -(4306, 0, "'''"), -(4307, 0, "','"), -(4308, 0, "' '"), -(4309, 0, "'''"), -(4310, 0, "'c'"), -(4311, 0, "'o'"), -(4312, 0, "'m'"), -(4313, 0, "'p'"), -(4314, 0, "'l'"), -(4315, 0, "'e'"), -(4316, 0, "'t'"), -(4317, 0, "'e'"), -(4318, 0, "'''"), -(4319, 0, "']'"), -(4402, 16, "''"), -(4402, 0, "'i'"), -(4403, 0, "'f'"), -(4404, 0, "' '"), -(4404, 1, "''"), -(4403, 1, "''"), -(4402, 1, "''"), -(4402, 0, "'c'"), -(4403, 0, "'o'"), -(4404, 0, "'n'"), -(4405, 0, "'s'"), -(4406, 0, "'t'"), -(4407, 0, "' '"), -(4408, 0, "'c'"), -(4409, 0, "'u'"), -(4410, 0, "'r'"), -(4411, 0, "'r'"), -(4412, 0, "'e'"), -(4413, 0, "'n'"), -(4414, 0, "'t'"), -(4415, 0, "'_'"), -(4416, 0, "'i'"), -(4416, 1, "''"), -(4416, 0, "'o'"), -(4417, 0, "' '"), -(4418, 0, "'='"), -(4419, 0, "' '"), -(4420, 0, "'o'"), -(4421, 0, "'r'"), -(4422, 0, "'d'"), -(4423, 0, "'e'"), -(4424, 0, "'r'"), -(4420, 5, "'order'"), -(4425, 0, "'.'"), -(4426, 0, "'i'"), -(4427, 0, "'n'"), -(4428, 0, "'d'"), -(4429, 0, "'e'"), -(4426, 4, "'indexOf'"), -(4433, 0, "'('"), -(4434, 0, "'c'"), -(4435, 0, "'u'"), -(4436, 0, "'r'"), -(4437, 0, "'r'"), -(4438, 0, "'e'"), -(4439, 0, "'n'"), -(4434, 6, "'current_stage'"), -(4447, 0, "'.'"), -(4448, 0, "'t'"), -(4449, 0, "'y'"), -(4450, 0, "'p'"), -(4451, 0, "'e'"), -(4452, 0, "')'"), -(4401, 0, "'tconst current_o = order.indexOf(current_stage.type)n'"), -(4461, 9, "'e'"), -(4462, 0, "'l'"), -(4463, 0, "'e'"), -(4464, 0, "'m'"), -(4465, 0, "'e'"), -(4466, 0, "'n'"), -(4467, 0, "'t'"), -(4468, 0, "'_'"), -(4469, 0, "'o'"), -(4487, 18, "'t'"), -(4488, 0, "'y'"), -(4489, 0, "'p'"), -(4490, 0, "'e'"), -(4492, 0, "'nt'"), -(4494, 0, "'nt'"), -(4493, 1, "''"), -(4495, 0, "'i'"), -(4496, 0, "'f'"), -(4497, 0, "' '"), -(4498, 0, "'('"), -(4499, 0, "'c'"), -(4500, 0, "'u'"), -(4501, 0, "'r'"), -(4502, 0, "'r'"), -(4503, 0, "'e'"), -(4504, 0, "'n'"), -(4499, 6, "'current_o'"), -(4499, 0, "' '"), -(4499, 0, "'e'"), -(4500, 0, "'l'"), -(4501, 0, "'e'"), -(4502, 0, "'m'"), -(4503, 0, "'e'"), -(4504, 0, "'n'"), -(4505, 0, "'t'"), -(4506, 0, "'_'"), -(4507, 0, "'o'"), -(4508, 0, "' '"), -(4509, 0, "'<'"), -(4520, 0, "')'"), -(4521, 0, "' '"), -(4522, 0, "'r'"), -(4523, 0, "'e'"), -(4524, 0, "'t'"), -(4525, 0, "'u'"), -(4526, 0, "'r'"), -(4527, 0, "'n'"), -(4528, 0, "' '"), -(4529, 0, "'''"), -(4530, 0, "'d'"), -(4531, 0, "'o'"), -(4532, 0, "'n'"), -(4533, 0, "'e'"), -(4534, 0, "'''"), -(4535, 0, "'nt'"), -(4537, 0, "'e'"), -(4538, 0, "'l'"), -(4539, 0, "'s'"), -(4540, 0, "'e'"), -(4541, 0, "' '"), -(4542, 0, "'i'"), -(4543, 0, "'f'"), -(4544, 0, "' '"), -(4545, 0, "'('"), -(4546, 0, "'e'"), -(4547, 0, "'l'"), -(4548, 0, "'e'"), -(4549, 0, "'m'"), -(4546, 4, "'element_o'"), -(4555, 0, "' '"), -(4556, 0, "'>'"), -(4557, 0, "' '"), -(4558, 0, "'c'"), -(4559, 0, "'u'"), -(4560, 0, "'r'"), -(4561, 0, "'r'"), -(4562, 0, "'e'"), -(4563, 0, "'n'"), -(4564, 0, "'t'"), -(4558, 7, "'current_o'"), -(4567, 0, "')'"), -(4568, 0, "' '"), -(4569, 0, "'r'"), -(4570, 0, "'e'"), -(4571, 0, "'t'"), -(4572, 0, "'u'"), -(4573, 0, "'r'"), -(4574, 0, "'n'"), -(4575, 0, "' '"), -(4576, 0, "'''"), -(4577, 0, "'w'"), -(4578, 0, "'a'"), -(4579, 0, "'i'"), -(4580, 0, "'t'"), -(4581, 0, "'i'"), -(4582, 0, "'n'"), -(4583, 0, "'g'"), -(4584, 0, "'''"), -(4585, 0, "'nt'"), -(4587, 0, "'e'"), -(4588, 0, "'l'"), -(4589, 0, "'s'"), -(4590, 0, "'e'"), -(4591, 0, "' '"), -(4592, 0, "'r'"), -(4593, 0, "'e'"), -(4594, 0, "'t'"), -(4595, 0, "'u'"), -(4596, 0, "'r'"), -(4597, 0, "'n'"), -(4598, 0, "' '"), -(4599, 0, "'''"), -(4600, 0, "'i'"), -(4600, 1, "''"), -(4600, 0, "'p'"), -(4600, 1, "''"), -(4600, 0, "'a'"), -(4601, 0, "'c'"), -(4602, 0, "'t'"), -(4603, 0, "'i'"), -(4604, 0, "'v'"), -(4605, 0, "'e'"), -(4606, 0, "'''"), -(5300, 0, "' '"), -(5301, 0, "'c'"), -(5302, 0, "'l'"), -(5303, 0, "'a'"), -(5304, 0, "'s'"), -(5305, 0, "'s'"), -(5306, 0, "'='"), -(5307, 0, "'{'"), -(5308, 0, "'p'"), -(5309, 0, "'r'"), -(5310, 0, "'o'"), -(5311, 0, "'g'"), -(5312, 0, "'r'"), -(5313, 0, "'e'"), -(5314, 0, "'s'"), -(5315, 0, "'s'"), -(5316, 0, "'_'"), -(5317, 0, "'c'"), -(5318, 0, "'l'"), -(5319, 0, "'a'"), -(5320, 0, "'s'"), -(5321, 0, "'s'"), -(5322, 0, "'('"), -(5323, 0, "'''"), -(5324, 0, "'m'"), -(5325, 0, "'e'"), -(5326, 0, "'d'"), -(5327, 0, "'i'"), -(5328, 0, "'t'"), -(5329, 0, "'a'"), -(5330, 0, "'t'"), -(5331, 0, "'e'"), -(5332, 0, "'''"), -(5333, 0, "')'"), -(5334, 0, "'}'"), -(5498, 0, "' class={progress_class('meditate')}'"), -(5522, 8, "''"), -(5522, 0, "'b'"), -(5523, 0, "'e'"), -(5524, 0, "'a'"), -(5525, 0, "'d'"), -(5527, 0, "','"), -(5528, 0, "' '"), -(5529, 0, "'r'"), -(5530, 0, "','"), -(5531, 0, "' '"), -(5532, 0, "'p'"), -(7361, 0, "'n'"), -(7362, 0, "'n'"), -(7363, 0, "'.'"), -(7364, 0, "'d'"), -(7365, 0, "'o'"), -(7366, 0, "'n'"), -(7367, 0, "'e'"), -(7368, 0, "' '"), -(7369, 0, "'{'"), -(7370, 0, "' '"), -(7371, 0, "'c'"), -(7372, 0, "'o'"), -(7373, 0, "'l'"), -(7374, 0, "'o'"), -(7375, 0, "'r'"), -(7376, 0, "':'"), -(7377, 0, "' '"), -(7378, 0, "'b'"), -(7379, 0, "'l'"), -(7380, 0, "'u'"), -(7381, 0, "'e'"), -(7382, 0, "';'"), -(7383, 0, "' '"), -(7384, 0, "'}'"), -(7363, 0, "'.done { color: blue; }n'"), -(7387, 4, "'w'"), -(7388, 0, "'a'"), -(7389, 0, "'i'"), -(7390, 0, "'t'"), -(7391, 0, "'i'"), -(7392, 0, "'n'"), -(7393, 0, "'g'"), -(7404, 4, "'w'"), -(7405, 0, "'h'"), -(7406, 0, "'i'"), -(7407, 0, "'t'"), -(7408, 0, "'e'"), -(7386, 0, "'.waiting { color: white; }n'"), -(7414, 7, "'a'"), -(7415, 0, "'c'"), -(7416, 0, "'t'"), -(7417, 0, "'i'"), -(7418, 0, "'v'"), -(7419, 0, "'e'"), -(7430, 5, "'p'"), -(7431, 0, "'u'"), -(7432, 0, "'r'"), -(7433, 0, "'p'"), -(7434, 0, "'l'"), -(7435, 0, "'e'"), -(7430, 6, "'m'"), -(7431, 0, "'a'"), -(7432, 0, "'g'"), -(7430, 3, "'magenta'"), -(4345, 0, "'s'"), -(4346, 0, "'t'"), -(4347, 0, "'a'"), -(4348, 0, "'g'"), -(4349, 0, "'e'"), -(4350, 0, "','"), -(4351, 0, "' '"), -(4441, 13, "'s'"), -(4374, 13, "'s'"), -(4430, 0, "'t'"), -(4375, 0, "'t'"), -(4432, 0, "'a'"), -(4376, 0, "'a'"), -(4434, 0, "'g'"), -(4377, 0, "'g'"), -(4436, 0, "'e'"), -(4378, 0, "'e'"), -(5314, 0, "'c'"), -(5315, 0, "'u'"), -(5316, 0, "'r'"), -(5317, 0, "'r'"), -(5318, 0, "'e'"), -(5319, 0, "'n'"), -(5320, 0, "'t'"), -(5321, 0, "'_'"), -(5322, 0, "'s'"), -(5323, 0, "'t'"), -(5324, 0, "'a'"), -(5325, 0, "'g'"), -(5326, 0, "'e'"), -(5327, 0, "','"), -(5328, 0, "' '"), -(5527, 0, "'current_stage, '"), -(4582, 0, "' '"), -(4583, 0, "'i'"), -(4584, 0, "'f'"), -(4585, 0, "' '"), -(4586, 0, "'('"), -(4587, 0, "'t'"), -(4588, 0, "'y'"), -(4589, 0, "'o'"), -(4589, 1, "''"), -(4589, 0, "'p'"), -(4590, 0, "'e'"), -(4591, 0, "' '"), -(4592, 0, "'='"), -(4593, 0, "'='"), -(4594, 0, "'='"), -(4595, 0, "' '"), -(4596, 0, "'''"), -(4597, 0, "'b'"), -(4598, 0, "'e'"), -(4599, 0, "'a'"), -(4600, 0, "'d'"), -(4601, 0, "'''"), -(4602, 0, "')'"), -(4603, 0, "'nt'"), -(4605, 0, "'e'"), -(4606, 0, "'l'"), -(4607, 0, "'s'"), -(4608, 0, "'e'"), -(4603, 0, "' '"), -(4604, 0, "'r'"), -(4605, 0, "'e'"), -(4606, 0, "'t'"), -(4607, 0, "'u'"), -(4608, 0, "'r'"), -(4609, 0, "'n'"), -(4610, 0, "' '"), -(4610, 1, "''"), -(4610, 0, "'nt'"), -(4612, 0, "'t'"), -(4611, 2, "''"), -(4610, 1, "''"), -(4610, 0, "' '"), -(4611, 0, "'r'"), -(4612, 0, "'='"), -(4613, 0, "' '"), -(4613, 1, "''"), -(4612, 1, "''"), -(4612, 0, "' '"), -(4613, 0, "'='"), -(4614, 0, "'='"), -(4615, 0, "' '"), -(4616, 0, "'s'"), -(4617, 0, "'t'"), -(4618, 0, "'a'"), -(4619, 0, "'g'"), -(4620, 0, "'e'"), -(4621, 0, "'.'"), -(4622, 0, "'r'"), -(4623, 0, "' '"), -(4624, 0, "'?'"), -(4625, 0, "' '"), -(4615, 0, "'='"), -(4320, 0, "'n'"), -(4321, 0, "'c'"), -(4322, 0, "'o'"), -(4323, 0, "'n'"), -(4324, 0, "'s'"), -(4325, 0, "'t'"), -(4326, 0, "' '"), -(4327, 0, "'c'"), -(4328, 0, "'l'"), -(4329, 0, "'a'"), -(4330, 0, "'s'"), -(4331, 0, "'s'"), -(4332, 0, "'_'"), -(4333, 0, "'f'"), -(4334, 0, "'o'"), -(4335, 0, "'r'"), -(4336, 0, "'('"), -(4336, 1, "''"), -(4336, 0, "' '"), -(4337, 0, "'='"), -(4338, 0, "' '"), -(4339, 0, "'x'"), -(4340, 0, "' '"), -(4341, 0, "'='"), -(4342, 0, "'>'"), -(4343, 0, "' '"), -(4344, 0, "'x'"), -(4345, 0, "' '"), -(4346, 0, "'<'"), -(4347, 0, "' '"), -(4348, 0, "'0'"), -(4349, 0, "' '"), -(4350, 0, "'?'"), -(4351, 0, "' '"), -(4352, 0, "'''"), -(4353, 0, "'d'"), -(4354, 0, "'o'"), -(4355, 0, "'n'"), -(4356, 0, "'e'"), -(4357, 0, "'''"), -(4358, 0, "' '"), -(4359, 0, "':'"), -(4360, 0, "' '"), -(4358, 1, "''"), -(4358, 0, "'n'"), -(4359, 0, "'t'"), -(4362, 0, "'x'"), -(4363, 0, "' '"), -(4364, 0, "'>'"), -(4365, 0, "' '"), -(4366, 0, "'0'"), -(4367, 0, "' '"), -(4368, 0, "'?'"), -(4369, 0, "' '"), -(4370, 0, "'''"), -(4371, 0, "'w'"), -(4372, 0, "'a'"), -(4373, 0, "'i'"), -(4374, 0, "'t'"), -(4375, 0, "'i'"), -(4376, 0, "'n'"), -(4377, 0, "'g'"), -(4378, 0, "'''"), -(4379, 0, "'nt'"), -(4381, 0, "':'"), -(4382, 0, "' '"), -(4383, 0, "'''"), -(4384, 0, "'a'"), -(4385, 0, "'c'"), -(4386, 0, "'t'"), -(4387, 0, "'i'"), -(4388, 0, "'v'"), -(4389, 0, "'e'"), -(4390, 0, "'''"), -(4391, 0, "'nt'"), -(4557, 0, "'nt'"), -(4392, 1, "''"), -(4558, 0, "'c'"), -(4559, 0, "'o'"), -(4560, 0, "'n'"), -(4561, 0, "'s'"), -(4562, 0, "'t'"), -(4563, 0, "' '"), -(4564, 0, "'o'"), -(4565, 0, "'_'"), -(4566, 0, "'o'"), -(4566, 1, "''"), -(4566, 0, "'d'"), -(4567, 0, "'i'"), -(4568, 0, "'f'"), -(4569, 0, "'f'"), -(4570, 0, "' '"), -(4571, 0, "'='"), -(4572, 0, "' '"), -(4573, 0, "'element_o < current_o'"), -(4583, 1, "''"), -(4583, 0, "'-'"), -(4594, 0, "'nt'"), -(4596, 0, "'r'"), -(4597, 0, "'e'"), -(4598, 0, "'t'"), -(4599, 0, "'u'"), -(4600, 0, "'r'"), -(4601, 0, "'n'"), -(4602, 0, "' '"), -(4603, 0, "'o'"), -(4604, 0, "'_'"), -(4605, 0, "'d'"), -(4606, 0, "'i'"), -(4607, 0, "'f'"), -(4608, 0, "'f'"), -(4609, 0, "' '"), -(4610, 0, "'='"), -(4611, 0, "'='"), -(4612, 0, "'='"), -(4613, 0, "' '"), -(4614, 0, "'0'"), -(4615, 0, "' '"), -(4615, 1, "''"), -(4614, 1, "''"), -(4613, 1, "''"), -(4612, 1, "''"), -(4611, 1, "''"), -(4610, 1, "''"), -(4610, 0, "'!'"), -(4611, 0, "'='"), -(4612, 0, "'='"), -(4613, 0, "' '"), -(4614, 0, "'0'"), -(4615, 0, "' '"), -(4616, 0, "'?'"), -(4617, 0, "' '"), -(4618, 0, "'c'"), -(4619, 0, "'l'"), -(4620, 0, "'a'"), -(4621, 0, "'s'"), -(4622, 0, "'s'"), -(4623, 0, "'_'"), -(4624, 0, "'f'"), -(4625, 0, "'o'"), -(4626, 0, "'r'"), -(4618, 9, "'class_for'"), -(4627, 0, "'('"), -(4628, 0, "'o'"), -(4629, 0, "'_'"), -(4630, 0, "'d'"), -(4631, 0, "'i'"), -(4632, 0, "'f'"), -(4633, 0, "'f'"), -(4634, 0, "')'"), -(4635, 0, "'nt'"), -(4637, 0, "'t'"), -(4638, 0, "':'"), -(4639, 0, "' '"), -(4641, 100, "''"), -(4640, 1, "''"), -(4640, 1, "''"), -(4681, 0, "'ntt'"), -(4684, 0, "':'"), -(4685, 0, "' '"), -(4686, 0, "'c'"), -(4687, 0, "'l'"), -(4688, 0, "'a'"), -(4689, 0, "'s'"), -(4690, 0, "'s'"), -(4691, 0, "'_'"), -(4692, 0, "'f'"), -(4693, 0, "'o'"), -(4694, 0, "'r'"), -(4686, 9, "'class_for'"), -(4695, 0, "'('"), -(4696, 0, "'0'"), -(4697, 0, "')'"), -(4699, 22, "''"), -(4657, 0, "' '"), -(4658, 0, "'?'"), -(4659, 24, "''"), -(4656, 1, "''"), -(4640, 1, "''"), -(4657, 0, "'ntt'"), -(4660, 0, "'t'"), -(4660, 1, "''"), -(4657, 3, "''"), -(4640, 0, "'('"), -(4656, 0, "')'"), -(4659, 0, "' return r === stage.r ? '"), -(4659, 24, "''"), -(4656, 1, "''"), -(4640, 1, "''"), -(4657, 0, "'ntt'"), -(4660, 0, "'t'"), -(4661, 0, "' return r === stage.r ? '"), -(4658, 4, "'tt'"), -(4660, 7, "''"), -(4660, 0, "'t'"), -(4556, 0, "'nt'"), -(4558, 0, "'i'"), -(4559, 0, "'f'"), -(4560, 0, "' '"), -(4561, 0, "'('"), -(4557, 5, "''"), -(4556, 1, "''"), -(4558, 0, "'// '"), -(4606, 12, "'element_o - current_o'"), -(4616, 1, "''"), -(4616, 0, "'!'"), -(4617, 0, "'='"), -(4618, 0, "'='"), -(4642, 6, "'element_o - current_o'"), -(4605, 0, "'nt'"), -(4607, 1, "'nt'"), -(4605, 0, "' '"), -(4606, 0, "'t'"), -(4607, 0, "'y'"), -(4607, 1, "''"), -(4606, 1, "''"), -(4606, 0, "'t'"), -(4607, 0, "'y'"), -(4608, 0, "'p'"), -(4609, 0, "'e'"), -(4610, 0, "' '"), -(4611, 0, "'='"), -(4612, 0, "'='"), -(4613, 0, "'='"), -(4614, 0, "' '"), -(4615, 0, "'''"), -(4616, 0, "'b'"), -(4617, 0, "'e'"), -(4618, 0, "'a'"), -(4619, 0, "'d'"), -(4620, 0, "'''"), -(4621, 0, "' '"), -(4622, 0, "'&'"), -(4623, 0, "'&'"), -(4624, 0, "' '"), -(4625, 0, "'s'"), -(4626, 0, "'t'"), -(4627, 0, "'a'"), -(4628, 0, "'g'"), -(4629, 0, "'e'"), -(4630, 0, "'.'"), -(4631, 0, "'t'"), -(4632, 0, "'y'"), -(4633, 0, "'p'"), -(4634, 0, "'e'"), -(4635, 0, "' '"), -(4636, 0, "'='"), -(4637, 0, "'='"), -(4638, 0, "'='"), -(4639, 0, "' '"), -(4640, 0, "'''"), -(4641, 0, "'b'"), -(4642, 0, "'e'"), -(4643, 0, "'a'"), -(4644, 0, "'d'"), -(4645, 0, "'''"), -(4646, 0, "' '"), -(4647, 0, "'?'"), -(4648, 0, "'nt'"), -(4650, 0, "'t'"), -(4651, 0, "':'"), -(4652, 0, "' '"), -(4683, 32, "''"), -(4653, 0, "'class_for(element_o - current_o)'"), -(4686, 89, "''"), -(4646, 1, "''"), -(4646, 0, "'nt'"), -(4648, 0, "'t'"), -(4650, 0, "' '"), -(4651, 0, "'r'"), -(4652, 0, "' '"), -(4653, 0, "'='"), -(4654, 0, "'='"), -(4655, 0, "'='"), -(4656, 0, "' '"), -(4657, 0, "'s'"), -(4658, 0, "'t'"), -(4659, 0, "'a'"), -(4660, 0, "'g'"), -(4661, 0, "'e'"), -(4662, 0, "'.'"), -(4663, 0, "'r'"), -(4664, 0, "' '"), -(4665, 0, "'?'"), -(4666, 0, "' '"), -(4667, 0, "'c'"), -(4668, 0, "'l'"), -(4669, 0, "'a'"), -(4670, 0, "'s'"), -(4671, 0, "'s'"), -(4672, 0, "'_'"), -(4673, 0, "'f'"), -(4674, 0, "'o'"), -(4675, 0, "'r'"), -(4667, 9, "'class_for'"), -(4676, 0, "'('"), -(4677, 0, "'p'"), -(4678, 0, "' '"), -(4679, 0, "'-'"), -(4680, 0, "' '"), -(4681, 0, "'s'"), -(4682, 0, "'t'"), -(4683, 0, "'a'"), -(4684, 0, "'g'"), -(4685, 0, "'e'"), -(4686, 0, "'.'"), -(4687, 0, "'p'"), -(4688, 0, "')'"), -(4689, 0, "' '"), -(4690, 0, "':'"), -(4691, 0, "' '"), -(4651, 0, "'('"), -(4693, 0, "'c'"), -(4694, 0, "'l'"), -(4695, 0, "'a'"), -(4696, 0, "'s'"), -(4697, 0, "'s'"), -(4698, 0, "'_'"), -(4699, 0, "'f'"), -(4700, 0, "'o'"), -(4701, 0, "'r'"), -(4693, 9, "'class_for'"), -(4702, 0, "'('"), -(4703, 0, "'r'"), -(4704, 0, "' '"), -(4705, 0, "'-'"), -(4706, 0, "' '"), -(4707, 0, "'s'"), -(4708, 0, "'t'"), -(4709, 0, "'a'"), -(4710, 0, "'g'"), -(4711, 0, "'e'"), -(4712, 0, "'.'"), -(4713, 0, "'r'"), -(4714, 0, "')'"), -(4715, 0, "')'"), -(7547, 12, "''"), -(7547, 0, "'t'"), -(7548, 0, "'e'"), -(7549, 0, "'x'"), -(7550, 0, "'t'"), -(7551, 0, "'-'"), -(7552, 0, "'d'"), -(7553, 0, "'e'"), -(7554, 0, "'c'"), -(7547, 8, "'text-decoration: ;'"), -(7564, 0, "'s'"), -(7565, 0, "'t'"), -(7566, 0, "'r'"), -(7567, 0, "'i'"), -(7564, 4, "''"), -(7564, 0, "'l'"), -(7565, 0, "'i'"), -(7566, 0, "'n'"), -(7567, 0, "'e'"), -(7564, 4, "'line-through'"), -(7632, 0, "' '"), -(7633, 0, "'b'"), -(7634, 0, "'o'"), -(7635, 0, "'r'"), -(7636, 0, "'d'"), -(7637, 0, "'e'"), -(7638, 0, "'r'"), -(7639, 0, "':'"), -(7640, 0, "' '"), -(7641, 0, "'1'"), -(7642, 0, "'p'"), -(7643, 0, "'x'"), -(7644, 0, "' '"), -(7645, 0, "'s'"), -(7646, 0, "'o'"), -(7647, 0, "'l'"), -(7648, 0, "'i'"), -(7649, 0, "'d'"), -(7650, 0, "' '"), -(7651, 0, "'w'"), -(7652, 0, "'h'"), -(7653, 0, "'i'"), -(7654, 0, "'t'"), -(7655, 0, "'e'"), -(7656, 0, "';'"), -(7598, 5, "'#'"), -(7599, 0, "'e'"), -(7600, 0, "'e'"), -(7601, 0, "'e'"), -(7601, 1, "''"), -(7600, 1, "''"), -(7599, 1, "''"), -(7599, 0, "'8'"), -(7600, 0, "'8'"), -(7601, 0, "'8'"), -(4756, 0, "'n'"), -(4756, 0, "'n'"), -(4757, 0, "'l'"), -(4758, 0, "'e'"), -(4759, 0, "'t'"), -(4760, 0, "' '"), -(4761, 0, "'s'"), -(4762, 0, "'e'"), -(4763, 0, "'t'"), -(4764, 0, "'t'"), -(4765, 0, "'i'"), -(4766, 0, "'n'"), -(4767, 0, "'g'"), -(4768, 0, "'s'"), -(4769, 0, "'_'"), -(4770, 0, "'d'"), -(4771, 0, "'i'"), -(4772, 0, "'s'"), -(4773, 0, "'a'"), -(4774, 0, "'b'"), -(4775, 0, "'l'"), -(4776, 0, "'e'"), -(4777, 0, "'d'"), -(4778, 0, "' '"), -(4779, 0, "'='"), -(4780, 0, "' '"), -(4757, 3, "'$'"), -(4758, 0, "':'"), -(4780, 0, "'s'"), -(4781, 0, "'t'"), -(4782, 0, "'a'"), -(4783, 0, "'t'"), -(4784, 0, "'e'"), -(4785, 0, "' '"), -(4786, 0, "'='"), -(4787, 0, "'='"), -(4788, 0, "'='"), -(4789, 0, "' '"), -(4790, 0, "'''"), -(4791, 0, "'p'"), -(4792, 0, "'l'"), -(4793, 0, "'a'"), -(4794, 0, "'y'"), -(4795, 0, "'i'"), -(4796, 0, "'n'"), -(4797, 0, "'g'"), -(4798, 0, "'''"), -(4756, 0, "'n'"), -(4757, 0, "'/'"), -(4758, 0, "'/'"), -(4759, 0, "' '"), -(4760, 0, "'T'"), -(4761, 0, "'h'"), -(4762, 0, "'i'"), -(4763, 0, "'s'"), -(4764, 0, "' '"), -(4765, 0, "'w'"), -(4766, 0, "'i'"), -(4767, 0, "'l'"), -(4768, 0, "'l'"), -(4769, 0, "' '"), -(4770, 0, "'g'"), -(4771, 0, "'e'"), -(4772, 0, "'t'"), -(4773, 0, "' '"), -(4774, 0, "'m'"), -(4775, 0, "'o'"), -(4776, 0, "'r'"), -(4777, 0, "'e'"), -(4778, 0, "' '"), -(4779, 0, "'c'"), -(4780, 0, "'o'"), -(4781, 0, "'m'"), -(4782, 0, "'p'"), -(4783, 0, "'l'"), -(4784, 0, "'e'"), -(4785, 0, "'x'"), -(4786, 0, "' '"), -(4787, 0, "'i'"), -(4788, 0, "'n'"), -(4789, 0, "' '"), -(4790, 0, "'t'"), -(4791, 0, "'i'"), -(4792, 0, "'m'"), -(4793, 0, "'e'"), -(4794, 0, "'.'"), -(4795, 0, "' '"), -(4796, 0, "'F'"), -(4797, 0, "'o'"), -(4798, 0, "'r'"), -(4799, 0, "' '"), -(4800, 0, "'n'"), -(4801, 0, "'o'"), -(4802, 0, "'w'"), -(4803, 0, "','"), -(4804, 0, "' '"), -(4805, 0, "'p'"), -(4806, 0, "'a'"), -(4807, 0, "'u'"), -(4808, 0, "'s'"), -(4809, 0, "'e'"), -(4810, 0, "' '"), -(4811, 0, "'t'"), -(4812, 0, "'h'"), -(4813, 0, "'e'"), -(4814, 0, "' '"), -(4815, 0, "'g'"), -(4816, 0, "'a'"), -(4817, 0, "'m'"), -(4818, 0, "'e'"), -(4819, 0, "' '"), -(4820, 0, "'t'"), -(4821, 0, "'o'"), -(4822, 0, "' '"), -(4823, 0, "'f'"), -(4824, 0, "'i'"), -(4825, 0, "'d'"), -(4826, 0, "'d'"), -(4827, 0, "'l'"), -(4828, 0, "'e'"), -(4829, 0, "'.'"), -(6440, 0, "'d'"), -(6441, 0, "'i'"), -(6442, 0, "'s'"), -(6443, 0, "'a'"), -(6444, 0, "'b'"), -(6445, 0, "'l'"), -(6446, 0, "'e'"), -(6447, 0, "'d'"), -(6448, 0, "'='"), -(6449, 0, "'{'"), -(6450, 0, "' '"), -(6450, 0, "'s'"), -(6451, 0, "'e'"), -(6452, 0, "'t'"), -(6453, 0, "'t'"), -(6450, 4, "'settings_disabled'"), -(6467, 0, "'}'"), -(6739, 0, "' disabled={settings_disabled}'"), -(6887, 0, "' disabled={settings_disabled}'"), -(7041, 0, "' disabled={settings_disabled}'"), -(7192, 0, "' disabled={settings_disabled}'"), -(3949, 0, "'n'"), -(3950, 0, "'#'"), -(3951, 0, "':'"), -(3952, 0, "' '"), -(3952, 1, "''"), -(3951, 1, "''"), -(3950, 1, "''"), -(3950, 0, "'$'"), -(3951, 0, "':'"), -(3952, 0, "' '"), -(3953, 0, "'current_stage.type === 'complete''"), -(3953, 0, "'c'"), -(3954, 0, "'o'"), -(3955, 0, "'n'"), -(3956, 0, "'s'"), -(3957, 0, "'o'"), -(3958, 0, "'l'"), -(3959, 0, "'e'"), -(3960, 0, "'.'"), -(3961, 0, "'l'"), -(3962, 0, "'o'"), -(3963, 0, "'g'"), -(3961, 3, "'log'"), -(3964, 0, "'('"), -(3965, 0, "'''"), -(3966, 0, "'c'"), -(3967, 0, "'u'"), -(3968, 0, "'r'"), -(3969, 0, "'r'"), -(3970, 0, "'e'"), -(3971, 0, "'n'"), -(3972, 0, "' '"), -(3973, 0, "'t'"), -(3973, 1, "''"), -(3972, 1, "''"), -(3972, 0, "'t'"), -(3973, 0, "' '"), -(3974, 0, "'s'"), -(3975, 0, "'t'"), -(3976, 0, "'a'"), -(3977, 0, "'g'"), -(3978, 0, "'e'"), -(3979, 0, "' '"), -(3980, 0, "'t'"), -(3981, 0, "'y'"), -(3982, 0, "'p'"), -(3983, 0, "'e'"), -(3984, 0, "'''"), -(3985, 0, "','"), -(3986, 0, "' '"), -(4005, 15, "''"), -(4005, 0, "')'"), -(4000, 0, "' '"), -(4001, 0, "'&'"), -(4002, 0, "'&'"), -(4003, 0, "' '"), -(4004, 0, "'c'"), -(4005, 0, "'u'"), -(4006, 0, "'r'"), -(4007, 0, "'r'"), -(4008, 0, "'e'"), -(4009, 0, "'n'"), -(4010, 0, "'t'"), -(4011, 0, "'_'"), -(4004, 8, "'current_stage'"), -(4109, 0, "'n'"), -(4110, 0, "'#'"), -(4111, 0, "':'"), -(4112, 0, "' '"), -(4112, 1, "''"), -(4111, 1, "''"), -(4110, 1, "''"), -(4110, 0, "'$'"), -(4111, 0, "':'"), -(4112, 0, "' '"), -(4113, 0, "'c'"), -(4114, 0, "'o'"), -(4115, 0, "'n'"), -(4116, 0, "'s'"), -(4117, 0, "'o'"), -(4118, 0, "'l'"), -(4119, 0, "'e'"), -(4113, 7, "'console'"), -(4120, 0, "'.'"), -(4121, 0, "'l'"), -(4122, 0, "'o'"), -(4123, 0, "'g'"), -(4121, 3, "'log'"), -(4124, 0, "'('"), -(4125, 0, "'''"), -(4126, 0, "'g'"), -(4127, 0, "'a'"), -(4128, 0, "'m'"), -(4129, 0, "'e'"), -(4130, 0, "'_'"), -(4131, 0, "'c'"), -(4132, 0, "'o'"), -(4133, 0, "'m'"), -(4134, 0, "'p'"), -(4135, 0, "'l'"), -(4136, 0, "'e'"), -(4137, 0, "'t'"), -(4138, 0, "'e'"), -(4139, 0, "'d'"), -(4140, 0, "'''"), -(4141, 0, "','"), -(4142, 0, "' '"), -(4143, 0, "'g'"), -(4144, 0, "'a'"), -(4145, 0, "'m'"), -(4146, 0, "'e'"), -(4147, 0, "'_'"), -(4148, 0, "'c'"), -(4149, 0, "'o'"), -(4150, 0, "'m'"), -(4151, 0, "'p'"), -(4152, 0, "'l'"), -(4143, 10, "'game_completed'"), -(4157, 0, "')'"), -(4158, 0, "'n'"), -(4109, 0, "')'"), -(4076, 0, "'('"), -(4022, 0, "','"), -(4023, 0, "' '"), -(4024, 0, "'(current_stage.type === 'complete')'"), -(4025, 0, "'c'"), -(4026, 0, "'u'"), -(4027, 0, "'r'"), -(4028, 0, "'r'"), -(4029, 0, "'e'"), -(4030, 0, "'n'"), -(4031, 0, "'t'"), -(4032, 0, "'_'"), -(4033, 0, "'s'"), -(4034, 0, "'t'"), -(4035, 0, "'a'"), -(4036, 0, "'g'"), -(4037, 0, "'e'"), -(4038, 0, "' '"), -(4039, 0, "'&'"), -(4040, 0, "'&'"), -(4041, 0, "' '"), -(3950, 0, "'// '"), -(4081, 0, "'$: game_completed = current_stage == null ? false : (current_stage.type === 'complete')n'"), -(4081, 0, "'// '"), -(4206, 17, "'&'"), -(4207, 0, "'&'"), -(4172, 0, "'// '"), -(4081, 3, "''"), -(4084, 0, "'{'"), -(4085, 0, "'nt'"), -(4171, 0, "'nt'"), -(4172, 1, "'}'"), -(4085, 0, "'nt'"), -(4087, 0, "'c'"), -(4088, 0, "'o'"), -(4089, 0, "'n'"), -(4090, 0, "'s'"), -(4091, 0, "'o'"), -(4092, 0, "'l'"), -(4093, 0, "'e'"), -(4087, 7, "'console'"), -(4094, 0, "'.'"), -(4095, 0, "'l'"), -(4096, 0, "'o'"), -(4097, 0, "'g'"), -(4095, 3, "'log'"), -(4098, 0, "'('"), -(4099, 0, "'''"), -(4100, 0, "'u'"), -(4101, 0, "'p'"), -(4102, 0, "'d'"), -(4103, 0, "'a'"), -(4104, 0, "'t'"), -(4105, 0, "'e'"), -(4106, 0, "'i'"), -(4107, 0, "'n'"), -(4107, 1, "''"), -(4106, 1, "''"), -(4105, 1, "''"), -(4105, 0, "'i'"), -(4106, 0, "'n'"), -(4107, 0, "'g'"), -(4108, 0, "' '"), -(4109, 0, "'g'"), -(4110, 0, "'a'"), -(4111, 0, "'m'"), -(4112, 0, "'e'"), -(4113, 0, "'_'"), -(4114, 0, "'c'"), -(4115, 0, "'o'"), -(4116, 0, "'m'"), -(4117, 0, "'p'"), -(4118, 0, "'l'"), -(4119, 0, "'e'"), -(4120, 0, "'t'"), -(4121, 0, "'e'"), -(4122, 0, "'d'"), -(4123, 0, "'''"), -(4124, 0, "','"), -(4125, 0, "' '"), -(4126, 0, "'c'"), -(4127, 0, "'u'"), -(4128, 0, "'r'"), -(4129, 0, "'r'"), -(4130, 0, "'e'"), -(4131, 0, "'n'"), -(4126, 6, "'current_stage'"), -(4139, 0, "')'"), -(4305, 0, "'// '"), -(3950, 3, "''"), -(4022, 54, "''"), -(3950, 74, "''"), -(4098, 0, "'n'"), -(4099, 0, "'n'"), -(4099, 0, "'$: console.log('current stage type', current_stage && current_stage.type)n'"), -(452, 0, "'// '"), -(449, 0, "'// '"), -(424, 0, "'// '"), -(396, 0, "'// '"), -(391, 0, "'// '"), -(2856, 3, "''"), -(3530, 0, "' '"), -(3530, 0, "'s'"), -(3531, 0, "'e'"), -(3532, 0, "'t'"), -(3533, 0, "'T'"), -(3530, 4, "'setTimeout'"), -(3540, 1, "''"), -(3540, 0, "'('"), -(3541, 0, "'('"), -(3542, 0, "')'"), -(3543, 0, "' '"), -(3544, 0, "'='"), -(3545, 0, "'>'"), -(3546, 0, "' '"), -(3558, 0, "')'"), -(464, 3, "''"), -(458, 3, "''"), -(430, 3, "''"), -(399, 3, "''"), -(391, 3, "''"), -(315, 138, "''"), -(314, 1, "''"), -(3662, 0, "'n'"), -(3663, 0, "'let internal_staten$: internal_state = game_completed ? 'completed' : staten$: {ntif (state !== 'playing') {nttgame_completed = falsent}n}'"), -(3801, 0, "'n'"), -(255, 0, "'// '"), -(3968, 0, "'n'"), -(3969, 0, "'l'"), -(3970, 0, "'e'"), -(3971, 0, "'t'"), -(3972, 0, "' '"), -(3973, 0, "'g'"), -(3974, 0, "'a'"), -(3975, 0, "'m'"), -(3976, 0, "'e'"), -(3977, 0, "'_'"), -(3978, 0, "'c'"), -(3979, 0, "'o'"), -(3980, 0, "'m'"), -(3981, 0, "'p'"), -(3982, 0, "'l'"), -(3983, 0, "'e'"), -(3984, 0, "'t'"), -(3985, 0, "'e'"), -(3986, 0, "'d'"), -(3969, 167, "''"), -(3665, 0, "'n'"), -(3666, 0, "'let game_completedn$: {ntconsole.log('updating game_completed', current_stage)ntgame_completed = current_stage == null ? false : (current_stage.type === 'complete')n}n'"), -(3833, 0, "'n'"), -(3833, 1, "''"), -(3971, 0, "'// '"), -(3968, 0, "'// '"), -(3943, 0, "'// '"), -(3915, 0, "'// '"), -(3910, 0, "'// '"), -(3763, 0, "'s'"), -(3764, 0, "'t'"), -(3765, 0, "'a'"), -(3766, 0, "'t'"), -(3767, 0, "'e'"), -(3768, 0, "' '"), -(3769, 0, "'!'"), -(3770, 0, "'='"), -(3771, 0, "'='"), -(3772, 0, "' '"), -(3773, 0, "'''"), -(3774, 0, "'p'"), -(3775, 0, "'l'"), -(3776, 0, "'a'"), -(3777, 0, "'y'"), -(3778, 0, "'i'"), -(3779, 0, "'n'"), -(3780, 0, "'g'"), -(3781, 0, "'''"), -(3782, 0, "' '"), -(3783, 0, "'|'"), -(3784, 0, "'|'"), -(3785, 0, "' '"), -(3763, 0, "'('"), -(3808, 0, "')'"), -(3817, 1, "''"), -(3817, 0, "'nt'"), -(3936, 78, "''"), -(4101, 0, "'// '"), -(4097, 0, "'// '"), -(4050, 0, "'// '"), -(4045, 0, "'// '"), -(4188, 76, "''"), -(4241, 18, "''"), -(3936, 0, "'n'"), -(3937, 0, "'let bar_width = 0n'"), -(3954, 1, "''"), -(4043, 0, "'// '"), -(4043, 3, "''"), -(3954, 0, "'n'"), -(3937, 18, "''"), -(3936, 1, "''"), -(4241, 0, "'let bar_width = 0n'"), -(4188, 0, "'// $: game_completed = current_stage && (current_stage.type === 'complete')n'"), -(4110, 3, "''"), -(4103, 3, "''"), -(4053, 3, "''"), -(4045, 3, "''"), -(4101, 0, "'// '"), -(4097, 0, "'// '"), -(4050, 0, "'// '"), -(4045, 0, "'// '"), -(4025, 0, "'// '"), -(4045, 0, "'// '"), -(4042, 0, "'// '"), -(4023, 0, "'// '"), -(3979, 0, "'// '"), -(3942, 0, "'// '"), -(3937, 0, "'// '"), -(4519, 0, "'internal_state === 'waiting''"), -(4547, 0, "' '"), -(4548, 0, "'?'"), -(4549, 0, "' '"), -(4550, 0, "''Waiting for game to start''"), -(4577, 0, "'n'"), -(4578, 0, "':'"), -(4579, 0, "' '"), -(4578, 0, "'t'"), -(3936, 401, "''"), -(3691, 0, "'// '"), -(3408, 0, "' '"), -(3409, 0, "'/'"), -(3410, 0, "'/'"), -(3411, 0, "' '"), -(3412, 0, "'s'"), -(3413, 0, "'e'"), -(3414, 0, "'t'"), -(3415, 0, "'T'"), -(3416, 0, "'i'"), -(3417, 0, "'m'"), -(3418, 0, "'e'"), -(3419, 0, "'o'"), -(3420, 0, "'u'"), -(3421, 0, "'t'"), -(3422, 0, "' '"), -(3423, 0, "'n'"), -(3424, 0, "'e'"), -(3425, 0, "'e'"), -(3426, 0, "'d'"), -(3427, 0, "'e'"), -(3428, 0, "'d'"), -(3429, 0, "' '"), -(3430, 0, "'t'"), -(3431, 0, "'o'"), -(3432, 0, "' '"), -(3433, 0, "'g'"), -(3434, 0, "'e'"), -(3435, 0, "'t'"), -(3436, 0, "' '"), -(3437, 0, "'a'"), -(3438, 0, "'r'"), -(3439, 0, "'o'"), -(3440, 0, "'u'"), -(3441, 0, "'n'"), -(3442, 0, "'d'"), -(3443, 0, "' '"), -(3444, 0, "'s'"), -(3445, 0, "'o'"), -(3446, 0, "'m'"), -(3447, 0, "'e'"), -(3448, 0, "' '"), -(3449, 0, "'w'"), -(3450, 0, "'e'"), -(3451, 0, "'i'"), -(3452, 0, "'r'"), -(3453, 0, "'d'"), -(3454, 0, "' '"), -(3455, 0, "'r'"), -(3456, 0, "'a'"), -(3457, 0, "'c'"), -(3458, 0, "'e'"), -(3459, 0, "' '"), -(3460, 0, "'c'"), -(3461, 0, "'o'"), -(3462, 0, "'n'"), -(3463, 0, "'d'"), -(3464, 0, "'i'"), -(3465, 0, "'t'"), -(3466, 0, "'i'"), -(3467, 0, "'o'"), -(3468, 0, "'n'"), -(3469, 0, "'.'"), -(3408, 1, "''"), -(3408, 61, "''"), -(3376, 0, "'ntt'"), -(3379, 0, "'// setTimeout needed to get around some weird race condition.'"), -(3440, 0, "' '"), -(3441, 0, "'T'"), -(3442, 0, "'h'"), -(3443, 0, "'e'"), -(3444, 0, "'r'"), -(3445, 0, "'e'"), -(3446, 0, "'''"), -(3447, 0, "'s'"), -(3448, 0, "' '"), -(3449, 0, "'p'"), -(3450, 0, "'r'"), -(3451, 0, "'o'"), -(3452, 0, "'b'"), -(3453, 0, "'a'"), -(3454, 0, "'b'"), -(3455, 0, "'l'"), -(3456, 0, "'y'"), -(3457, 0, "' '"), -(3458, 0, "'o'"), -(3459, 0, "'t'"), -(3460, 0, "'h'"), -(3461, 0, "'e'"), -(3462, 0, "'r'"), -(3463, 0, "' '"), -(3464, 0, "'w'"), -(3465, 0, "'a'"), -(3466, 0, "'y'"), -(3467, 0, "'s'"), -(3468, 0, "' '"), -(3469, 0, "'t'"), -(3470, 0, "'o'"), -(3471, 0, "' '"), -(3458, 14, "'b'"), -(3459, 0, "'e'"), -(3460, 0, "'t'"), -(3461, 0, "'t'"), -(3462, 0, "'e'"), -(3463, 0, "'r'"), -(3464, 0, "' '"), -(3465, 0, "'w'"), -(3466, 0, "'a'"), -(3467, 0, "'y'"), -(3468, 0, "'s'"), -(3469, 0, "' '"), -(3470, 0, "'t'"), -(3471, 0, "'o'"), -(3472, 0, "' '"), -(3473, 0, "'s'"), -(3474, 0, "'t'"), -(3475, 0, "'r'"), -(3476, 0, "'u'"), -(3477, 0, "'c'"), -(3478, 0, "'t'"), -(3479, 0, "'u'"), -(3480, 0, "'r'"), -(3481, 0, "'e'"), -(3482, 0, "' '"), -(3483, 0, "'t'"), -(3484, 0, "'h'"), -(3485, 0, "'i'"), -(3486, 0, "'s'"), -(3487, 0, "' '"), -(3488, 0, "':'"), -(3489, 0, "'/'"), -(3440, 1, "''"), -(3440, 0, "'ntt'"), -(3443, 0, "'/'"), -(3444, 0, "'/'"), -(3445, 0, "' '"), -(4160, 0, "'nt'"), -(4162, 0, "':'"), -(4163, 0, "' '"), -(4164, 0, "'s'"), -(4165, 0, "'t'"), -(4166, 0, "'a'"), -(4167, 0, "'r'"), -(4167, 1, "''"), -(4166, 1, "''"), -(4165, 1, "''"), -(4164, 1, "''"), -(4164, 0, "'c'"), -(4165, 0, "'u'"), -(4166, 0, "'r'"), -(4167, 0, "'r'"), -(4168, 0, "'e'"), -(4169, 0, "'n'"), -(4164, 6, "'current_stage'"), -(4177, 0, "'.'"), -(4178, 0, "'t'"), -(4179, 0, "'y'"), -(4180, 0, "'p'"), -(4181, 0, "'e'"), -(4182, 0, "' '"), -(4183, 0, "'='"), -(4184, 0, "'='"), -(4185, 0, "'='"), -(4186, 0, "' '"), -(4187, 0, "'''"), -(4188, 0, "'w'"), -(4189, 0, "'a'"), -(4190, 0, "'i'"), -(4191, 0, "'t'"), -(4192, 0, "'i'"), -(4193, 0, "'n'"), -(4194, 0, "'g'"), -(4195, 0, "'''"), -(4196, 0, "' '"), -(4197, 0, "'?'"), -(4198, 0, "' '"), -(4199, 0, "'0'"), -(4164, 18, "'s'"), -(4165, 0, "'t'"), -(4166, 0, "'a'"), -(4167, 0, "'t'"), -(4168, 0, "'e'"), -(4187, 0, "'nt: current_stage.type === 'complete' ? 100'"), -(4161, 1, "''"), -(4118, 43, "''"), -(4118, 0, "'t'"), -(5535, 0, "'nttt'"), -(5539, 0, "'<'"), -(5540, 0, "'d'"), -(5541, 0, "'i'"), -(5542, 0, "'v'"), -(5543, 0, "' '"), -(5544, 0, "'i'"), -(5545, 0, "'d'"), -(5546, 0, "'='"), -(5544, 3, "''"), -(5543, 1, "''"), -(5543, 0, "'>'"), -(5544, 0, "'{'"), -(5545, 0, "'s'"), -(5546, 0, "'t'"), -(5547, 0, "'a'"), -(5548, 0, "'g'"), -(5549, 0, "'e'"), -(5550, 0, "'_'"), -(5551, 0, "'s'"), -(5552, 0, "'e'"), -(5553, 0, "'c'"), -(5554, 0, "'s'"), -(5555, 0, "'_'"), -(5556, 0, "'r'"), -(5557, 0, "'e'"), -(5558, 0, "'m'"), -(5559, 0, "'a'"), -(5560, 0, "'i'"), -(5561, 0, "'n'"), -(5562, 0, "'i'"), -(5563, 0, "'n'"), -(5564, 0, "'g'"), -(5565, 0, "'}'"), -(5566, 0, "'<'"), -(5567, 0, "'/'"), -(5568, 0, "'d'"), -(5569, 0, "'i'"), -(5570, 0, "'v'"), -(5571, 0, "'>'"), -(5545, 20, "'o'"), -(5546, 0, "'f'"), -(5547, 0, "'f'"), -(5548, 0, "'s'"), -(5549, 0, "'e'"), -(5550, 0, "'t'"), -(5545, 6, "'offset_sec'"), -(5562, 0, "'ntt
'"), -(5536, 3, "'tt'"), -(5505, 31, "''"), -(5513, 0, "'current_stage.duration'"), -(5535, 0, "' '"), -(5536, 0, "'-'"), -(5537, 0, "' '"), -(5526, 0, "' '"), -(5527, 0, "'?'"), -(5528, 0, "' '"), -(5529, 0, "'current_stage'"), -(5564, 0, "' '"), -(5565, 0, "':'"), -(5566, 0, "' '"), -(5567, 0, "'''"), -(5568, 0, "'''"), -(8062, 1, "''"), -(8062, 0, "'nt'"), -(8079, 1, "''"), -(8079, 0, "'nt'"), -(8105, 1, "''"), -(8105, 0, "'n'"), -(8079, 0, "' */'"), -(8064, 0, "'/* '"), -(5526, 0, "' '"), -(5527, 0, "'&'"), -(5528, 0, "'&'"), -(5529, 0, "' '"), -(5530, 0, "'!'"), -(5531, 0, "'c'"), -(5532, 0, "'o'"), -(5533, 0, "'m'"), -(5534, 0, "'p'"), -(5535, 0, "'l'"), -(5513, 23, "'i'"), -(5514, 0, "'n'"), -(5515, 0, "'t'"), -(5516, 0, "'e'"), -(5517, 0, "'r'"), -(5518, 0, "'n'"), -(5519, 0, "'a'"), -(5520, 0, "'l'"), -(5521, 0, "'_'"), -(5513, 9, "'internal_state'"), -(5513, 14, "'internal_'"), -(5513, 9, "'current_stage && !compl'"), -(5531, 5, "'g'"), -(5532, 0, "'a'"), -(5533, 0, "'m'"), -(5534, 0, "'e'"), -(5535, 0, "'_'"), -(5536, 0, "'c'"), -(5537, 0, "'o'"), -(5538, 0, "'m'"), -(5539, 0, "'p'"), -(5540, 0, "'l'"), -(5531, 10, "'game_completed'"), -(5545, 0, "')'"), -(5513, 0, "'('"), -(5514, 32, "''"), -(5514, 0, "'a'"), -(5514, 1, "''"), -(5514, 0, "'i'"), -(5515, 0, "'n'"), -(5516, 0, "'t'"), -(5517, 0, "'e'"), -(5518, 0, "'r'"), -(5519, 0, "'n'"), -(5514, 6, "'internal_state'"), -(5528, 0, "' '"), -(5529, 0, "'='"), -(5530, 0, "'='"), -(5531, 0, "'='"), -(5532, 0, "' '"), -(5533, 0, "'''"), -(5534, 0, "'p'"), -(5535, 0, "'l'"), -(5536, 0, "'a'"), -(5537, 0, "'y'"), -(5538, 0, "'i'"), -(5539, 0, "'n'"), -(5540, 0, "'g'"), -(5541, 0, "'''"), -(5542, 0, "' '"), -(5543, 0, "'|'"), -(5544, 0, "'|'"), -(5545, 0, "' '"), -(5546, 0, "'i'"), -(5547, 0, "'n'"), -(5548, 0, "'t'"), -(5549, 0, "'e'"), -(5550, 0, "'r'"), -(5551, 0, "'n'"), -(5546, 6, "'internal_state'"), -(5560, 0, "' '"), -(5561, 0, "'-'"), -(5562, 0, "'-'"), -(5562, 1, "''"), -(5561, 1, "''"), -(5561, 0, "'='"), -(5562, 0, "'='"), -(5563, 0, "'='"), -(5564, 0, "' '"), -(5565, 0, "'''"), -(5566, 0, "'p'"), -(5567, 0, "'a'"), -(5568, 0, "'u'"), -(5569, 0, "'s'"), -(5570, 0, "'e'"), -(5571, 0, "'d'"), -(5572, 0, "'''"), -(5573, 0, "' '"), -(5574, 0, "'&'"), -(5575, 0, "'&'"), -(5576, 0, "' '"), -(5577, 0, "'c'"), -(5578, 0, "'u'"), -(5579, 0, "'r'"), -(5580, 0, "'r'"), -(5581, 0, "'e'"), -(5582, 0, "'n'"), -(5583, 0, "'t'"), -(5584, 0, "'_'"), -(5577, 8, "'current_stage'"), -(5573, 0, "')'"), -(5514, 0, "'('"), -(8018, 31, "''"), -(5357, 0, "'ntt'"), -(5360, 0, "'<'"), -(5361, 0, "'a'"), -(5362, 0, "' '"), -(5363, 0, "'h'"), -(5364, 0, "'r'"), -(5365, 0, "'e'"), -(5366, 0, "'f'"), -(5367, 0, "'='"), -(5368, 0, "'''"), -(5369, 0, "'.'"), -(8, 0, "'nimport Game from './Game.svelte'n'"), -(5404, 0, "'Game'"), -(5408, 0, "'.'"), -(5409, 0, "'/'"), -(5410, 0, "'.'"), -(5411, 0, "'.'"), -(5412, 0, "'/'"), -(5408, 5, "''"), -(5404, 4, "''"), -(8, 34, "''"), -(5370, 0, "'.'"), -(5371, 0, "'/'"), -(5372, 0, "'.'"), -(5373, 0, "'.'"), -(5374, 0, "'''"), -(5368, 1, "''"), -(5368, 0, "'''"), -(5375, 0, "'>'"), -(5376, 0, "'J'"), -(5377, 0, "'o'"), -(5378, 0, "'i'"), -(5379, 0, "'n'"), -(5380, 0, "' '"), -(5381, 0, "'a'"), -(5382, 0, "'n'"), -(5383, 0, "'o'"), -(5384, 0, "'h'"), -(5385, 0, "'t'"), -(5386, 0, "'e'"), -(5387, 0, "'r'"), -(5388, 0, "' '"), -(5389, 0, "'r'"), -(5381, 9, "'a'"), -(5382, 0, "'n'"), -(5383, 0, "'o'"), -(5384, 0, "'t'"), -(5385, 0, "'h'"), -(5386, 0, "'e'"), -(5387, 0, "'r'"), -(5388, 0, "' '"), -(5389, 0, "'r'"), -(5390, 0, "'o'"), -(5391, 0, "'o'"), -(5392, 0, "'m'"), -(5393, 0, "'<'"), -(5394, 0, "'/'"), -(5395, 0, "'a'"), -(5396, 0, "'>'"), -(5360, 37, "''"), -(5352, 0, "' '"), -(5353, 0, "'Join another room'"), -(5396, 2, "''"), -(5395, 1, "''"), -(5395, 0, "'n'"), -(5396, 0, "'tt'"), -(5353, 37, "''"), -(5352, 1, "''"), -(5360, 0, "'Join another room'"), -(5376, 13, "'C'"), -(5377, 0, "'h'"), -(5378, 0, "'a'"), -(5379, 0, "'n'"), -(5380, 0, "'g'"), -(5381, 0, "'e'"), -(5382, 0, "' '"), -(8045, 9, "'='"), -(8045, 1, "''"), -(5677, 31, "''"), -(5539, 2, "'ttt'"), -(5539, 0, "'tt
n'"), -(5577, 0, "' '"), -(5578, 0, "'i'"), -(5579, 0, "'d'"), -(5580, 0, "'='"), -(5581, 0, "'t'"), -(5582, 0, "'i'"), -(5583, 0, "'m'"), -(5584, 0, "'e'"), -(5585, 0, "'''"), -(5581, 0, "'''"), -(5582, 0, "'p'"), -(5583, 0, "'r'"), -(5584, 0, "'o'"), -(5585, 0, "'g'"), -(5586, 0, "'r'"), -(5587, 0, "'e'"), -(5588, 0, "'s'"), -(5589, 0, "'s'"), -(5590, 0, "'_'"), -(7954, 0, "'n'"), -(7954, 0, "'n'"), -(7955, 0, "'#'"), -(7956, 0, "'p'"), -(7957, 0, "'r'"), -(7958, 0, "'o'"), -(7959, 0, "'g'"), -(7960, 0, "'r'"), -(7961, 0, "'e'"), -(7962, 0, "'s'"), -(7963, 0, "'s'"), -(7964, 0, "'-'"), -(7965, 0, "'t'"), -(7966, 0, "'i'"), -(7967, 0, "'m'"), -(7968, 0, "'e'"), -(7964, 1, "''"), -(7964, 0, "'_'"), -(7969, 0, "' '"), -(7970, 0, "'{'"), -(7971, 0, "'nt'"), -(7973, 0, "'nt'"), -(7972, 1, "''"), -(7973, 1, "'}'"), -(7972, 0, "'t'"), -(7973, 0, "'p'"), -(7974, 0, "'o'"), -(7975, 0, "'s'"), -(7976, 0, "'i'"), -(7977, 0, "'t'"), -(7978, 0, "'i'"), -(7979, 0, "'o'"), -(7980, 0, "'n'"), -(7981, 0, "':'"), -(7982, 0, "' '"), -(7983, 0, "'a'"), -(7984, 0, "'b'"), -(7985, 0, "'s'"), -(7986, 0, "'o'"), -(7987, 0, "'l'"), -(7988, 0, "'u'"), -(7989, 0, "'t'"), -(7990, 0, "'e'"), -(7991, 0, "';'"), -(7992, 0, "'nt'"), -(7994, 0, "'c'"), -(7995, 0, "'o'"), -(7996, 0, "'l'"), -(7997, 0, "'o'"), -(7998, 0, "'r'"), -(7999, 0, "':'"), -(8000, 0, "' '"), -(8001, 0, "'r'"), -(8002, 0, "'e'"), -(8003, 0, "'d'"), -(8004, 0, "';'"), -(3767, 11, "'setTimeout(() => tick(false))'"), -(3761, 0, "' '"), -(3762, 0, "'|'"), -(3763, 0, "'|'"), -(3764, 0, "' '"), -(3765, 0, "'s'"), -(3766, 0, "'t'"), -(3767, 0, "'a'"), -(3768, 0, "'t'"), -(3769, 0, "'e'"), -(3770, 0, "' '"), -(3771, 0, "'='"), -(3772, 0, "'='"), -(3773, 0, "'='"), -(3774, 0, "' '"), -(3775, 0, "'''"), -(3776, 0, "'p'"), -(3777, 0, "'a'"), -(3778, 0, "'i'"), -(3779, 0, "'s'"), -(3780, 0, "'e'"), -(3780, 1, "''"), -(3779, 1, "''"), -(3778, 1, "''"), -(3778, 0, "'u'"), -(3779, 0, "'s'"), -(3780, 0, "'e'"), -(3781, 0, "'d'"), -(3782, 0, "'''"), -(198, 0, "'export let seconds_per_beadn'"), -(237, 16, "'p'"), -(238, 0, "'a'"), -(239, 0, "'u'"), -(240, 0, "'s'"), -(241, 0, "'e'"), -(242, 0, "'d'"), -(243, 0, "'_'"), -(244, 0, "'p'"), -(245, 0, "'r'"), -(246, 0, "'o'"), -(247, 0, "'g'"), -(248, 0, "'r'"), -(249, 0, "'e'"), -(250, 0, "'s'"), -(251, 0, "'s'"), -(2637, 0, "' '"), -(2638, 0, "'+'"), -(2639, 0, "' '"), -(2640, 0, "'p'"), -(2641, 0, "'a'"), -(2642, 0, "'u'"), -(2643, 0, "'s'"), -(2644, 0, "'e'"), -(2640, 5, "'paused_progress'"), -(2638, 1, "''"), -(2638, 0, "'-'"), -(2637, 18, "''"), -(2545, 0, "'nt'"), -(2547, 0, "'l'"), -(2548, 0, "'e'"), -(2549, 0, "'t'"), -(2550, 0, "' '"), -(2547, 4, "'c'"), -(2548, 0, "'o'"), -(2549, 0, "'n'"), -(2550, 0, "'s'"), -(2551, 0, "'t'"), -(2552, 0, "' '"), -(2553, 0, "'t'"), -(2554, 0, "'i'"), -(2555, 0, "'m'"), -(2556, 0, "'e'"), -(2557, 0, "' '"), -(2558, 0, "'='"), -(2559, 0, "' '"), -(2560, 0, "'s'"), -(2561, 0, "'t'"), -(2562, 0, "'a'"), -(2563, 0, "'t'"), -(2564, 0, "'e'"), -(2565, 0, "' '"), -(2566, 0, "'='"), -(2567, 0, "'='"), -(2568, 0, "'='"), -(2569, 0, "' '"), -(2570, 0, "'''"), -(2571, 0, "'p'"), -(2572, 0, "'l'"), -(2573, 0, "'a'"), -(2574, 0, "'y'"), -(2575, 0, "'i'"), -(2576, 0, "'n'"), -(2577, 0, "'g'"), -(2578, 0, "'''"), -(2579, 0, "' '"), -(2580, 0, "'?'"), -(2581, 0, "' '"), -(2582, 0, "'Date.now() - start_time'"), -(2605, 0, "'nt'"), -(2607, 0, "'t'"), -(2608, 0, "':'"), -(2609, 0, "' '"), -(2610, 0, "'s'"), -(2611, 0, "'t'"), -(2612, 0, "'a'"), -(2613, 0, "'t'"), -(2614, 0, "'e'"), -(2615, 0, "' '"), -(2616, 0, "'='"), -(2617, 0, "'='"), -(2618, 0, "'='"), -(2619, 0, "' '"), -(2620, 0, "'''"), -(2621, 0, "'p'"), -(2622, 0, "'a'"), -(2623, 0, "'u'"), -(2624, 0, "'s'"), -(2625, 0, "'e'"), -(2626, 0, "'d'"), -(2627, 0, "'''"), -(2628, 0, "' '"), -(2629, 0, "'?'"), -(2630, 0, "' '"), -(2631, 0, "'p'"), -(2632, 0, "'a'"), -(2633, 0, "'u'"), -(2634, 0, "'s'"), -(2631, 4, "'paused_progress'"), -(2646, 0, "'ntt'"), -(2649, 0, "':'"), -(2650, 0, "' '"), -(2651, 0, "'0'"), -(2721, 23, "'t'"), -(2722, 0, "'i'"), -(2723, 0, "'m'"), -(2724, 0, "'e'"), -(8160, 0, "'nt'"), -(8162, 0, "'f'"), -(8163, 0, "'o'"), -(8164, 0, "'n'"), -(8165, 0, "'t'"), -(8166, 0, "'-'"), -(8167, 0, "'s'"), -(8168, 0, "'i'"), -(8169, 0, "'z'"), -(8170, 0, "'e'"), -(8171, 0, "':'"), -(8172, 0, "' '"), -(8173, 0, "'6'"), -(8174, 0, "'0'"), -(8175, 0, "'p'"), -(8176, 0, "'x'"), -(8177, 0, "';'"), -(8106, 0, "'nt'"), -(8108, 0, "'p'"), -(8109, 0, "'o'"), -(8110, 0, "'s'"), -(8111, 0, "'i'"), -(8112, 0, "'t'"), -(8113, 0, "'i'"), -(8114, 0, "'o'"), -(8115, 0, "'i'"), -(8116, 0, "'n'"), -(8117, 0, "':'"), -(8118, 0, "' '"), -(8107, 12, "'p'"), -(8107, 1, "''"), -(8107, 0, "'t'"), -(8108, 0, "'p'"), -(8109, 0, "'o'"), -(8110, 0, "'s'"), -(8111, 0, "'i'"), -(8112, 0, "'t'"), -(8113, 0, "'i'"), -(8114, 0, "'o'"), -(8115, 0, "'n'"), -(8116, 0, "':'"), -(8117, 0, "' '"), -(8118, 0, "'r'"), -(8119, 0, "'e'"), -(8120, 0, "'l'"), -(8121, 0, "'a'"), -(8122, 0, "'t'"), -(8123, 0, "'i'"), -(8124, 0, "'v'"), -(8125, 0, "'e'"), -(8126, 0, "';'"), -(8127, 0, "'ntborder: 2px solid white;'"), -(8081, 26, "''"), -(8101, 0, "'ntheight: 5em;'"), -(8067, 14, "''"), -(8087, 0, "'ntmargin: 25px;'"), -(8052, 15, "''"), -(8052, 1, "''"), -(8052, 0, "'t'"), -(8199, 0, "'nt'"), -(8201, 0, "'m'"), -(8202, 0, "'i'"), -(8203, 0, "'x'"), -(8204, 0, "'-'"), -(8205, 0, "'b'"), -(8206, 0, "'l'"), -(8207, 0, "'e'"), -(8208, 0, "'n'"), -(8201, 8, "'mix-blend-mode: ;'"), -(8217, 0, "'d'"), -(8218, 0, "'i'"), -(8219, 0, "'f'"), -(8220, 0, "'f'"), -(8221, 0, "'e'"), -(8222, 0, "'r'"), -(8223, 0, "'e'"), -(8217, 7, "'difference'"), -(8194, 4, "'330202'"), -(8194, 0, "'#'"), -(8195, 6, "''"), -(8194, 1, "''"), -(8194, 0, "'r'"), -(8195, 0, "'g'"), -(8196, 0, "'b'"), -(8197, 0, "'('"), -(8194, 4, "''"), -(8194, 0, "'#330202'"), -(8202, 0, "' */'"), -(8183, 0, "'/* '"), -(8182, 0, "'t/* font-size: #330202; */n'"), -(8232, 3, "''"), -(8210, 3, "''"), -(8221, 7, "''"), -(8221, 0, "'r'"), -(8222, 0, "'g'"), -(8223, 0, "'b'"), -(8224, 0, "'('"), -(8225, 0, "'2'"), -(8226, 0, "'0'"), -(8227, 0, "'4'"), -(8228, 0, "','"), -(8229, 0, "'2'"), -(8230, 0, "'5'"), -(8231, 0, "'4'"), -(8232, 0, "','"), -(8233, 0, "'2'"), -(8234, 0, "'5'"), -(8235, 0, "'4'"), -(8236, 0, "')'"), -(8210, 9, "'c'"), -(8211, 0, "'o'"), -(8212, 0, "'l'"), -(8213, 0, "'o'"), -(8214, 0, "'r'"), -(8209, 0, "'tcolor: rgb(204,254,254);n'"), -(8236, 5, "'f'"), -(8237, 0, "'o'"), -(8238, 0, "'n'"), -(8239, 0, "'t'"), -(8240, 0, "'-'"), -(8241, 0, "'s'"), -(8242, 0, "'i'"), -(8243, 0, "'z'"), -(8244, 0, "'e'"), -(8247, 17, "'6'"), -(8248, 0, "'0'"), -(8249, 0, "'p'"), -(8250, 0, "'x'"), -(8251, 0, "';'"), -(8209, 0, "'tcolor: rgb(204,254,254);n'"), -(8234, 0, "' */'"), -(8210, 0, "'/* '"), -(8181, 0, "' */'"), -(8170, 0, "'/* '"), -(8255, 16, "'w'"), -(8256, 0, "'h'"), -(8257, 0, "'i'"), -(8258, 0, "'t'"), -(8259, 0, "'e'"), -(8261, 0, "' */'"), -(8248, 0, "'/* '"), -(8243, 3, "''"), -(8216, 3, "''"), -(6245, 0, "'''"), -(6245, 1, "''"), -(6245, 0, "'''"), -(6246, 0, "'s'"), -(6247, 0, "'r'"), -(6248, 0, "'o'"), -(6249, 0, "'u'"), -(6250, 0, "'n'"), -(6251, 0, "'d'"), -(6246, 6, "'r'"), -(6247, 0, "'o'"), -(6248, 0, "'u'"), -(6249, 0, "'n'"), -(6250, 0, "'d'"), -(6246, 5, "'b'"), -(6247, 0, "'e'"), -(6248, 0, "'a'"), -(6249, 0, "'d'"), -(6250, 0, "'''"), -(6251, 0, "' '"), -(6252, 0, "'+'"), -(6253, 0, "' '"), -(6250, 0, "' '"), -(8433, 0, "'n'"), -(8434, 0, "'.'"), -(8435, 0, "'b'"), -(8436, 0, "'e'"), -(8437, 0, "'a'"), -(8438, 0, "'d'"), -(8439, 0, "' '"), -(8440, 0, "'{'"), -(8441, 0, "'nt'"), -(8443, 0, "'nt'"), -(8442, 1, "''"), -(8443, 1, "'}'"), -(8442, 0, "'t'"), -(8443, 0, "'d'"), -(8444, 0, "'i'"), -(8445, 0, "'s'"), -(8446, 0, "'p'"), -(8447, 0, "'l'"), -(8448, 0, "'a'"), -(8449, 0, "'y'"), -(8450, 0, "':'"), -(8451, 0, "' '"), -(8452, 0, "'b'"), -(8453, 0, "'l'"), -(8454, 0, "'o'"), -(8455, 0, "'c'"), -(8456, 0, "'k'"), -(8457, 0, "';'"), -(8443, 15, "''"), -(8443, 0, "'m'"), -(8444, 0, "'a'"), -(8445, 0, "'r'"), -(8446, 0, "'g'"), -(8447, 0, "'i'"), -(8448, 0, "'n'"), -(8449, 0, "'-'"), -(8450, 0, "'l'"), -(8451, 0, "'e'"), -(8452, 0, "'f'"), -(8453, 0, "'t'"), -(8450, 4, "'r'"), -(8451, 0, "'i'"), -(8452, 0, "'g'"), -(8453, 0, "'h'"), -(8454, 0, "'t'"), -(8455, 0, "':'"), -(8456, 0, "' '"), -(8457, 0, "'1'"), -(8458, 0, "'e'"), -(8459, 0, "'m'"), -(8460, 0, "';'"), -(8459, 1, "''"), -(8458, 1, "''"), -(8457, 1, "''"), -(8457, 0, "'2'"), -(8457, 1, "''"), -(8457, 0, "'3'"), -(8458, 0, "'p'"), -(8459, 0, "'x'"), -(8457, 1, "''"), -(8457, 0, "'4'"), -(8457, 3, "'2'"), -(8458, 0, "'e'"), -(8459, 0, "'m'"), -(8457, 1, "''"), -(8457, 0, "'1'"), -(8285, 1, "''"), -(8284, 1, "''"), -(8284, 0, "'5'"), -(8285, 0, "'4'"), -(8289, 0, "'nt'"), -(8291, 0, "'m'"), -(8292, 0, "'a'"), -(8293, 0, "'r'"), -(8294, 0, "'g'"), -(8295, 0, "'i'"), -(8296, 0, "'n'"), -(8297, 0, "'-'"), -(8298, 0, "'e'"), -(8299, 0, "'f'"), -(8299, 1, "''"), -(8298, 1, "''"), -(8298, 0, "'l'"), -(8299, 0, "'e'"), -(8300, 0, "'f'"), -(8301, 0, "'t'"), -(8302, 0, "':'"), -(8303, 0, "' '"), -(8304, 0, "'1'"), -(8305, 0, "'e'"), -(8306, 0, "'m'"), -(8307, 0, "';'"), -(8306, 1, "''"), -(8305, 1, "''"), -(8304, 1, "''"), -(8304, 0, "'5'"), -(8305, 0, "'p'"), -(8306, 0, "'x'"), -(8490, 1, "''"), -(8490, 0, "'nt'"), -(8522, 1, "''"), -(8522, 0, "'n'"), -(8535, 1, "''"), -(8535, 0, "'nt'"), -(8549, 1, "''"), -(8549, 0, "'n'"), -(8549, 0, "'ntcolor: #888;'"), -(8549, 0, "'n.waiting {'"), -(8536, 1, "''"), -(8525, 11, "''"), -(8537, 0, "'n}'"), -(8525, 0, "'t'"), -(8523, 2, "''"), -(8563, 0, "' */'"), -(8551, 0, "'/* '"), -(8630, 0, "'nt'"), -(8632, 0, "'p'"), -(8633, 0, "'a'"), -(8634, 0, "'d'"), -(8635, 0, "'d'"), -(8636, 0, "'i'"), -(8637, 0, "'n'"), -(8638, 0, "'g'"), -(8639, 0, "'-'"), -(8639, 1, "''"), -(8639, 0, "':'"), -(8640, 0, "' '"), -(8641, 0, "'0'"), -(8642, 0, "' '"), -(8643, 0, "'2'"), -(8644, 0, "'p'"), -(8645, 0, "'x'"), -(8646, 0, "';'"), -(8631, 16, "''"), -(8630, 1, "''"), -(8480, 0, "'nt'"), -(8482, 0, "'tpadding: 0 2px;'"), -(8481, 2, "'t'"), -(8493, 1, "''"), -(8493, 0, "'4'"), -(8631, 1, "''"), -(8631, 0, "'2'"), -(8631, 1, "''"), -(8631, 0, "'1'"), -(5515, 0, "'('"), -(5515, 1, "''"), -(5531, 0, "'('"), -(5543, 0, "')'"), -(5548, 35, "''"), -(5513, 0, "'tt

Topic: {topic}

n'"), -(5619, 0, "'ntt'"), -(5622, 0, "'{'"), -(5623, 0, "'#'"), -(5624, 0, "'i'"), -(5625, 0, "'f'"), -(5626, 0, "' '"), -(5627, 0, "'_active_sessions'"), -(5643, 0, "' '"), -(5644, 0, "'='"), -(5645, 0, "'='"), -(5646, 0, "' '"), -(5647, 0, "'1'"), -(5648, 0, "'}'"), -(5650, 0, "'tt
{_active_sessions} player(s) in room
n'"), -(5652, 0, "'t'"), -(5700, 0, "'nttt'"), -(5704, 0, "'{'"), -(5705, 0, "':'"), -(5706, 0, "'e'"), -(5707, 0, "'l'"), -(5708, 0, "'s'"), -(5709, 0, "'e'"), -(5710, 0, "'}'"), -(5701, 3, "'tt'"), -(5760, 0, "'ntt'"), -(5763, 0, "'{'"), -(5764, 0, "'/'"), -(5765, 0, "'i'"), -(5766, 0, "'f'"), -(5767, 0, "'}'"), -(5713, 0, "'t'"), -(5658, 36, "'Y'"), -(5659, 0, "'o'"), -(5660, 0, "'u'"), -(5661, 0, "' '"), -(5662, 0, "'a'"), -(5663, 0, "'r'"), -(5664, 0, "'e'"), -(5665, 0, "' '"), -(5666, 0, "'a'"), -(5667, 0, "'l'"), -(5668, 0, "'o'"), -(5669, 0, "'n'"), -(5670, 0, "'e'"), -(5671, 0, "' '"), -(5672, 0, "'i'"), -(5673, 0, "'n'"), -(5674, 0, "' '"), -(5675, 0, "'t'"), -(5676, 0, "'h'"), -(5677, 0, "'e'"), -(5678, 0, "' '"), -(5679, 0, "'r'"), -(5680, 0, "'o'"), -(5681, 0, "'o'"), -(5682, 0, "'m'"), -(5733, 1, "''"), -(5734, 1, "''"), -(5735, 7, "'j'"), -(5736, 0, "'o'"), -(5737, 0, "'i'"), -(5738, 0, "'n'"), -(5739, 0, "' '"), -(5740, 0, "'y'"), -(5741, 0, "'o'"), -(5742, 0, "'u'"), -(5735, 8, "'a'"), -(5736, 0, "'r'"), -(5737, 0, "'e'"), -(5738, 0, "' '"), -(5739, 0, "'w'"), -(5740, 0, "'i'"), -(5741, 0, "'t'"), -(5742, 0, "'h'"), -(5743, 0, "' '"), -(5744, 0, "'y'"), -(5745, 0, "'o'"), -(5746, 0, "'u'"), -(5735, 12, "'i'"), -(5736, 0, "'n'"), -(5736, 1, "''"), -(5735, 1, "''"), -(5735, 0, "'a'"), -(5736, 0, "'r'"), -(5737, 0, "'e'"), -(5738, 0, "' '"), -(5739, 0, "'i'"), -(5740, 0, "'n'"), -(5741, 0, "' '"), -(5742, 0, "'t'"), -(5743, 0, "'h'"), -(5744, 0, "'e'"), -(5745, 0, "' '"), -(5742, 4, "'t'"), -(5743, 0, "'h'"), -(5744, 0, "'i'"), -(5745, 0, "'s'"), -(5746, 0, "' '"), -(5747, 0, "'r'"), -(5748, 0, "'o'"), -(5749, 0, "'o'"), -(5750, 0, "'m'"), -(8105, 0, "'n'"), -(8106, 0, "'#'"), -(8106, 1, "''"), -(8106, 0, "'h'"), -(8107, 0, "'1'"), -(8108, 0, "' '"), -(8109, 0, "'{'"), -(8110, 0, "'nt'"), -(8112, 0, "'nt'"), -(8111, 1, "''"), -(8112, 1, "'}'"), -(8111, 0, "'t'"), -(8112, 0, "'m'"), -(8113, 0, "'a'"), -(8114, 0, "'r'"), -(8115, 0, "'i'"), -(8116, 0, "'n'"), -(8117, 0, "'g'"), -(8117, 1, "''"), -(8116, 1, "''"), -(8115, 1, "''"), -(8114, 1, "''"), -(8114, 0, "'r'"), -(8115, 0, "'g'"), -(8116, 0, "'i'"), -(8117, 0, "'n'"), -(8118, 0, "'-'"), -(8119, 0, "'t'"), -(8120, 0, "'o'"), -(8121, 0, "'p'"), -(8122, 0, "':'"), -(8123, 0, "' '"), -(8124, 0, "'2'"), -(8125, 0, "'e'"), -(8126, 0, "'m'"), -(8127, 0, "';'"), -(8130, 0, "'n'"), -(8124, 1, "''"), -(8124, 0, "'1'"), -(5550, 33, "''"), -(5507, 0, "'(Change room)'"), -(5507, 0, "' '"), -(5525, 11, "'l'"), -(5526, 0, "'e'"), -(5527, 0, "'a'"), -(5528, 0, "'v'"), -(5529, 0, "'e'"), -(5614, 0, "' -->'"), -(5581, 0, "''"), -(5626, 0, "''"), -(5581, 0, "''"), -(5449, 0, "''"), -(5526, 0, "''"), -(5491, 0, "''"), -(5556, 4, "''"), -(5519, 5, "''"), -(5549, 1, "''"), -(5521, 1, "''"), -(5548, 0, "'1'"), -(5521, 0, "'1'"), -(9547, 0, "'n'"), -(9548, 0, "'n'"), -(9549, 0, "'i'"), -(9550, 0, "'n'"), -(9551, 0, "'p'"), -(9552, 0, "'u'"), -(9553, 0, "'t'"), -(9554, 0, "':'"), -(9555, 0, "' '"), -(9555, 1, "''"), -(9554, 1, "''"), -(9554, 0, "' '"), -(9555, 0, "'{'"), -(9556, 0, "'nt'"), -(9558, 0, "'nt'"), -(9557, 1, "''"), -(9558, 1, "'}'"), -(9557, 0, "'t'"), -(9558, 0, "'h'"), -(9559, 0, "'e'"), -(9560, 0, "'i'"), -(9561, 0, "'g'"), -(9562, 0, "'h'"), -(9563, 0, "'t'"), -(9564, 0, "':'"), -(9565, 0, "' '"), -(9558, 8, "'w'"), -(9559, 0, "'i'"), -(9560, 0, "'d'"), -(9561, 0, "'t'"), -(9562, 0, "'h'"), -(9563, 0, "':'"), -(9564, 0, "' '"), -(9565, 0, "'2'"), -(9566, 0, "'e'"), -(9567, 0, "'m'"), -(9567, 1, "''"), -(9566, 1, "''"), -(9565, 1, "''"), -(9565, 0, "'3'"), -(9566, 0, "'e'"), -(9567, 0, "'m'"), -(9568, 0, "';'"), -(9565, 1, "''"), -(9565, 0, "'1'"), -(9566, 0, "'0'"), -(9570, 0, "'nt'"), -(9572, 0, "'h'"), -(9573, 0, "'e'"), -(9574, 0, "'i'"), -(9575, 0, "'g'"), -(9576, 0, "'h'"), -(9577, 0, "'t'"), -(9578, 0, "':'"), -(9579, 0, "' '"), -(9580, 0, "'1'"), -(9581, 0, "'.'"), -(9582, 0, "'3'"), -(9583, 0, "';'"), -(9580, 1, "''"), -(9580, 0, "'1'"), -(9581, 0, "'0'"), -(9584, 0, "'p'"), -(9585, 0, "'x'"), -(9572, 14, "'f'"), -(9573, 0, "'o'"), -(9574, 0, "'n'"), -(9575, 0, "'t'"), -(9576, 0, "'-'"), -(9577, 0, "'s'"), -(9578, 0, "'i'"), -(9579, 0, "'z'"), -(9580, 0, "'e'"), -(9581, 0, "':'"), -(9582, 0, "' '"), -(9583, 0, "'1'"), -(9584, 0, "'6'"), -(9585, 0, "'p'"), -(9586, 0, "'x'"), -(9480, 0, "'n'"), -(9481, 0, "'n'"), -(9482, 0, "'s'"), -(9483, 0, "'u'"), -(9484, 0, "'m'"), -(9485, 0, "'m'"), -(9486, 0, "'a'"), -(9487, 0, "'r'"), -(9488, 0, "'y'"), -(9489, 0, "' '"), -(9490, 0, "'>'"), -(9491, 0, "' '"), -(9492, 0, "'l'"), -(9493, 0, "'a'"), -(9494, 0, "'b'"), -(9495, 0, "'e'"), -(9496, 0, "'l'"), -(9497, 0, "'{'"), -(9498, 0, "' '"), -(9498, 1, "''"), -(9497, 1, "''"), -(9497, 0, "' '"), -(9498, 0, "'{'"), -(9499, 0, "'nt'"), -(9501, 0, "'nt'"), -(9500, 1, "''"), -(9501, 1, "'}'"), -(9500, 0, "'t'"), -(9501, 0, "'m'"), -(9502, 0, "'a'"), -(9503, 0, "'r'"), -(9504, 0, "'g'"), -(9505, 0, "'i'"), -(9506, 0, "'n'"), -(9501, 6, "'l'"), -(9501, 1, "''"), -(9501, 0, "'l'"), -(9502, 0, "'i'"), -(9503, 0, "'n'"), -(9504, 0, "'e'"), -(9505, 0, "'-'"), -(9506, 0, "'h'"), -(9507, 0, "'e'"), -(9508, 0, "'i'"), -(9509, 0, "'g'"), -(9510, 0, "'h'"), -(9511, 0, "'t'"), -(9512, 0, "':'"), -(9513, 0, "' '"), -(9514, 0, "'2'"), -(9515, 0, "';'"), -(9482, 10, "''"), -(9491, 11, "'m'"), -(9492, 0, "'a'"), -(9493, 0, "'r'"), -(9494, 0, "'g'"), -(9495, 0, "'i'"), -(9496, 0, "'n'"), -(9497, 0, "'t'"), -(9497, 1, "''"), -(9497, 0, "'-'"), -(9498, 0, "'t'"), -(9498, 1, "''"), -(9498, 0, "'b'"), -(9499, 0, "'o'"), -(9500, 0, "'t'"), -(9501, 0, "'t'"), -(9502, 0, "'o'"), -(9503, 0, "'m'"), -(9506, 1, "''"), -(9506, 0, "'3'"), -(9507, 0, "'p'"), -(9508, 0, "'x'"), -(6898, 18, "'e'"), -(6899, 0, "'f'"), -(6900, 0, "'f'"), -(6901, 0, "'e'"), -(6902, 0, "'c'"), -(6903, 0, "'t'"), -(7698, 20, "'P'"), -(7699, 0, "'r'"), -(7700, 0, "'e'"), -(7701, 0, "'-'"), -(7702, 0, "'g'"), -(7703, 0, "'a'"), -(7704, 0, "'m'"), -(7705, 0, "'e'"), -(7706, 0, "'m'"), -(7707, 0, "' '"), -(7707, 1, "''"), -(7706, 1, "''"), -(7706, 0, "' '"), -(7707, 0, "'m'"), -(7708, 0, "'e'"), -(7709, 0, "'d'"), -(7710, 0, "'i'"), -(7711, 0, "'t'"), -(7712, 0, "'a'"), -(7713, 0, "'t'"), -(7714, 0, "'i'"), -(7715, 0, "'o'"), -(7716, 0, "'n'"), -(9577, 0, "'m'"), -(9578, 0, "'i'"), -(9579, 0, "'n'"), -(9580, 0, "'-'"), -(9589, 1, "''"), -(9588, 1, "''"), -(9588, 0, "'6'"), -(9577, 4, "''"), -(9584, 1, "''"), -(9584, 0, "'7'"), -(9602, 1, "''"), -(9602, 0, "'5'"), -(9602, 1, "''"), -(9602, 0, "'4'"), -(9603, 0, "'3'"), -(9603, 1, "''"), -(9606, 0, "'nt'"), -(9608, 0, "'c'"), -(9609, 0, "'o'"), -(9610, 0, "'l'"), -(9611, 0, "'o'"), -(9612, 0, "'r'"), -(9613, 0, "':'"), -(9614, 0, "' '"), -(9615, 0, "'#330202'"), -(9622, 0, "';'"), -(8669, 46, "''"), -(8668, 1, "''"), -(9372, 0, "'nbutton {ntfont-size: 140%;ntmargin: 10px 0;n}'"), -(9418, 0, "'n'"), -(9416, 0, "'nt'"), -(9418, 0, "'color: #330202;'"), -(9433, 0, "' '"), -(9434, 0, "'/'"), -(9435, 0, "'*'"), -(9436, 0, "' '"), -(9437, 0, "'T'"), -(9438, 0, "'O'"), -(9439, 0, "'D'"), -(9440, 0, "'O'"), -(9441, 0, "':'"), -(9442, 0, "' '"), -(9443, 0, "'U'"), -(9444, 0, "'s'"), -(9445, 0, "'e'"), -(9446, 0, "' '"), -(9447, 0, "'C'"), -(9448, 0, "'A'"), -(9449, 0, "'S'"), -(9449, 1, "''"), -(9448, 1, "''"), -(9448, 0, "'S'"), -(9449, 0, "'S'"), -(9450, 0, "' '"), -(9451, 0, "'v'"), -(9452, 0, "'a'"), -(9453, 0, "'r'"), -(9454, 0, "'i'"), -(9455, 0, "'a'"), -(9456, 0, "'b'"), -(9457, 0, "'l'"), -(9458, 0, "'e'"), -(9459, 0, "' '"), -(9460, 0, "'f'"), -(9461, 0, "'o'"), -(9462, 0, "'r'"), -(9463, 0, "' '"), -(9464, 0, "'t'"), -(9465, 0, "'h'"), -(9466, 0, "'i'"), -(9467, 0, "'s'"), -(9468, 0, "' '"), -(9469, 0, "'*'"), -(9470, 0, "'/'"), -(1789, 1, "''"), -(1782, 1, "''"), -(8513, 0, "'nttt'"), -(8517, 0, "'nttt'"), -(8514, 3, "''"), -(8518, 0, "''"), -(8541, 5, "'_'"), -(8542, 0, "'x'"), -(8543, 0, "'x'"), -(8543, 1, "''"), -(8542, 1, "''"), -(8557, 6, "'B'"), -(8558, 0, "'e'"), -(8559, 0, "'c'"), -(8560, 0, "'o'"), -(8561, 0, "'m'"), -(8562, 0, "'e'"), -(8563, 0, "' '"), -(8564, 0, "'Magister Ludi'"), -(8542, 0, "'m'"), -(8543, 0, "'a'"), -(8544, 0, "'g'"), -(8545, 0, "'i'"), -(8546, 0, "'s'"), -(8547, 0, "'t'"), -(8548, 0, "'e'"), -(8549, 0, "'r'"), -(8554, 7, "'t'"), -(8555, 0, "'r'"), -(8556, 0, "'y'"), -(8556, 1, "''"), -(8556, 0, "'u'"), -(8557, 0, "'e'"), -(3330, 0, "'// '"), -(6874, 0, "'nttt'"), -(6878, 0, "'nttt'"), -(6875, 3, "''"), -(6879, 0, "'<'"), -(6880, 0, "'d'"), -(6881, 0, "'i'"), -(6882, 0, "'v'"), -(6883, 0, "'>'"), -(6884, 0, "'ntttt'"), -(6889, 0, "'M'"), -(6890, 0, "'a'"), -(6891, 0, "'g'"), -(6892, 0, "'i'"), -(6893, 0, "'s'"), -(6894, 0, "'t'"), -(6895, 0, "'e'"), -(6896, 0, "'r'"), -(6897, 0, "' '"), -(6898, 0, "'s'"), -(6899, 0, "'t'"), -(6900, 0, "'a'"), -(6901, 0, "'t'"), -(6902, 0, "'u'"), -(6903, 0, "'s'"), -(6904, 0, "':'"), -(6905, 0, "' '"), -(6906, 0, "'{'"), -(6907, 0, "'}'"), -(6908, 0, "'ntttt'"), -(6913, 0, "'<'"), -(6914, 0, "'/'"), -(6915, 0, "'d'"), -(6916, 0, "'i'"), -(6917, 0, "'v'"), -(6909, 9, "'ttt
'"), -(253, 0, "'export let _active_sessionsn'"), -(293, 15, "'m'"), -(294, 0, "'a'"), -(295, 0, "'g'"), -(296, 0, "'i'"), -(292, 5, "'_magister'"), -(6928, 0, "'m'"), -(6929, 0, "'a'"), -(6930, 0, "'g'"), -(6931, 0, "'i'"), -(6928, 4, "'_magister'"), -(6928, 0, "'J'"), -(6929, 0, "'S'"), -(6930, 0, "'O'"), -(6931, 0, "'N'"), -(6932, 0, "'.'"), -(6933, 0, "'s'"), -(6934, 0, "'t'"), -(6935, 0, "'r'"), -(6936, 0, "'i'"), -(6937, 0, "'n'"), -(6938, 0, "'g'"), -(6939, 0, "'i'"), -(6940, 0, "'f'"), -(6941, 0, "'y'"), -(6933, 9, "'stringify'"), -(6942, 0, "'('"), -(6952, 0, "')'"), -(6835, 0, "'ntt'"), -(6838, 0, "'{'"), -(6839, 0, "'#'"), -(6840, 0, "'if }ntttntt{/if'"), -(6843, 0, "'_magister'"), -(6852, 0, "' '"), -(6853, 0, "'='"), -(6854, 0, "'='"), -(6855, 0, "' '"), -(6856, 0, "'n'"), -(6857, 0, "'u'"), -(6858, 0, "'l'"), -(6859, 0, "'l'"), -(6860, 0, "' '"), -(6861, 0, "'|'"), -(6862, 0, "'|'"), -(6863, 0, "' '"), -(6864, 0, "'_'"), -(6865, 0, "'m'"), -(6866, 0, "'a'"), -(6867, 0, "'g'"), -(6864, 4, "'_magister'"), -(6873, 0, "' '"), -(6874, 0, "'='"), -(6875, 0, "'='"), -(6876, 0, "' '"), -(6877, 0, "'f'"), -(6878, 0, "'a'"), -(6879, 0, "'l'"), -(6879, 1, "''"), -(6878, 1, "''"), -(6877, 1, "''"), -(6877, 0, "'t'"), -(6878, 0, "'r'"), -(6879, 0, "'u'"), -(6880, 0, "'e'"), -(6893, 0, "'}'"), -(6886, 0, "'ntt'"), -(6889, 0, "'{'"), -(6890, 0, "':'"), -(6891, 0, "'e'"), -(6892, 0, "'l'"), -(6893, 0, "'s'"), -(6894, 0, "'e'"), -(6895, 0, "'}'"), -(6896, 0, "'ntt'"), -(6899, 0, "'t'"), -(6900, 0, "','"), -(6900, 1, "''"), -(6900, 0, "'<'"), -(6901, 0, "'d'"), -(6902, 0, "'i'"), -(6903, 0, "'v'"), -(6904, 0, "'>'"), -(6905, 0, "'a'"), -(6906, 0, "'m'"), -(6906, 1, "''"), -(6905, 1, "''"), -(6905, 0, "'G'"), -(6906, 0, "'a'"), -(6907, 0, "'m'"), -(6905, 3, "'W'"), -(6906, 0, "'a'"), -(6907, 0, "'i'"), -(6905, 3, "'G'"), -(6906, 0, "'a'"), -(6907, 0, "'m'"), -(6908, 0, "'e'"), -(6909, 0, "' '"), -(6910, 0, "'c'"), -(6911, 0, "'o'"), -(6912, 0, "'n'"), -(6913, 0, "'t'"), -(6914, 0, "'r'"), -(6915, 0, "'o'"), -(6916, 0, "'l'"), -(6917, 0, "'l'"), -(6918, 0, "'e'"), -(6919, 0, "'d'"), -(6920, 0, "' '"), -(6921, 0, "'b'"), -(6922, 0, "'y'"), -(6923, 0, "' '"), -(6905, 19, "'O'"), -(6906, 0, "'n'"), -(6907, 0, "'l'"), -(6908, 0, "'y'"), -(6909, 0, "' '"), -(6910, 0, "'t'"), -(6911, 0, "'h'"), -(6912, 0, "'e'"), -(6913, 0, "' '"), -(6914, 0, "'M'"), -(6915, 0, "'a'"), -(6916, 0, "'g'"), -(6917, 0, "'i'"), -(6918, 0, "'s'"), -(6919, 0, "'t'"), -(6920, 0, "'e'"), -(6921, 0, "'r'"), -(6922, 0, "' '"), -(6923, 0, "'L'"), -(6924, 0, "'u'"), -(6925, 0, "'d'"), -(6926, 0, "'i'"), -(6927, 0, "' '"), -(6928, 0, "'c'"), -(6929, 0, "'a'"), -(6930, 0, "'n'"), -(6931, 0, "' '"), -(6905, 6, "'T'"), -(6923, 4, "'i'"), -(6924, 0, "'s'"), -(6925, 0, "' '"), -(6926, 0, "'i'"), -(6927, 0, "'n'"), -(6928, 0, "' '"), -(6923, 6, "'i'"), -(6924, 0, "'s'"), -(6925, 0, "' '"), -(6926, 0, "'i'"), -(6927, 0, "'n'"), -(6928, 0, "' '"), -(6929, 0, "'c'"), -(6930, 0, "'o'"), -(6931, 0, "'n'"), -(6932, 0, "'t'"), -(6933, 0, "'r'"), -(6934, 0, "'o'"), -(6935, 0, "'l'"), -(6936, 0, "' '"), -(6937, 0, "'o'"), -(6938, 0, "'f'"), -(6939, 0, "' '"), -(6940, 0, "'t'"), -(6941, 0, "'h'"), -(6942, 0, "'i'"), -(6943, 0, "'s'"), -(6944, 0, "' '"), -(6945, 0, "'g'"), -(6946, 0, "'a'"), -(6947, 0, "'m'"), -(6948, 0, "'e'"), -(6949, 0, "'<'"), -(6950, 0, "'/'"), -(6951, 0, "'d'"), -(6952, 0, "'i'"), -(6953, 0, "'v'"), -(6954, 0, "'>'"), -(6964, 1861, "''"), -(6963, 1, "''"), -(6886, 0, "'tt
ntttGame controlsnnttt
nttttMagister status: {JSON.stringify(_magister)}nttt
nnttt
nttttThis will effect all players.nttt
nnttt{#if internal_state == 'waiting'}nttttnttt{:else if internal_state == 'playing'}nttttnttt{:else if internal_state == 'paused'}nttttnttt{/if}nnttt{#if internal_state == 'paused' || internal_state == 'completed' }nttttnttt{/if}nntttnntttnntttnntttnntttnnttt
ntttt(Total game length: {roundish(ntttttgame_stages.reduce((x, s) => x + s.duration, 0) / 60ntttt)} minutes)nttt
nntttntt
'"), -(6883, 5, "'tt'"), -(8732, 2, "'ttt'"), -(8655, 3, "'tttt'"), -(8644, 3, "'tttt'"), -(8628, 4, "'ttttt'"), -(8570, 5, "'tttttt'"), -(8535, 4, "'ttttt'"), -(8501, 3, "'tttt'"), -(8488, 3, "'tttt'"), -(8370, 4, "'ttttt'"), -(8336, 4, "'ttttt'"), -(8325, 3, "'tttt'"), -(8312, 3, "'tttt'"), -(8201, 4, "'ttttt'"), -(8167, 4, "'ttttt'"), -(8156, 3, "'tttt'"), -(8143, 3, "'tttt'"), -(8029, 4, "'ttttt'"), -(7994, 4, "'ttttt'"), -(7983, 3, "'tttt'"), -(7970, 3, "'tttt'"), -(7863, 4, "'ttttt'"), -(7826, 4, "'ttttt'"), -(7815, 3, "'tttt'"), -(7802, 3, "'tttt'"), -(7786, 4, "'ttttt'"), -(7773, 5, "'tttttt'"), -(7744, 6, "'ttttttt'"), -(7710, 5, "'tttttt'"), -(7678, 4, "'ttttt'"), -(7564, 4, "'ttttt'"), -(7541, 4, "'ttttt'"), -(7530, 3, "'tttt'"), -(7520, 3, "'tttt'"), -(7453, 4, "'ttttt'"), -(7383, 3, "'tttt'"), -(7373, 3, "'tttt'"), -(7310, 4, "'ttttt'"), -(7269, 3, "'tttt'"), -(7208, 4, "'ttttt'"), -(7166, 3, "'tttt'"), -(7104, 4, "'ttttt'"), -(7067, 3, "'tttt'"), -(7056, 3, "'tttt'"), -(7022, 4, "'ttttt'"), -(7013, 3, "'tttt'"), -(7002, 3, "'tttt'"), -(6953, 4, "'ttttt'"), -(6944, 3, "'tttt'"), -(6907, 3, "'tttt'"), -(6883, 2, "'ttt'"), -(6945, 72, "''"), -(6835, 0, "'ntt'"), -(6838, 0, "'ntttt
ntttttMagister status: {JSON.stringify(_magister)}ntttt
n'"), -(6836, 2, "''"), -(6897, 4, "'tt'"), -(6847, 5, "'ttt'"), -(6837, 4, "'tt'"), -(6902, 0, "'ntt'"), -(8700, 0, "'ntttt'"), -(6903, 2, "''"), -(8703, 0, "'<'"), -(8704, 0, "'d'"), -(8705, 0, "'i'"), -(8706, 0, "'v'"), -(8707, 0, "'>'"), -(8786, 0, "'ntttt'"), -(8791, 0, "'<'"), -(8792, 0, "'/'"), -(8793, 0, "'d'"), -(8794, 0, "'i'"), -(8795, 0, "'v'"), -(8796, 0, "'>'"), -(8713, 0, "'t'"), -(8707, 0, "' '"), -(8708, 0, "'i'"), -(8709, 0, "'d'"), -(8710, 0, "'='"), -(8711, 0, "'b'"), -(8712, 0, "'e'"), -(8713, 0, "'c'"), -(8714, 0, "'o'"), -(8715, 0, "'m'"), -(8716, 0, "'e'"), -(8711, 6, "'m'"), -(8712, 0, "'a'"), -(8713, 0, "'g'"), -(8714, 0, "'i'"), -(8715, 0, "'s'"), -(8716, 0, "'t'"), -(8717, 0, "'e'"), -(8718, 0, "'r'"), -(8719, 0, "'_'"), -(8720, 0, "'b'"), -(8721, 0, "'o'"), -(8722, 0, "'x'"), -(8723, 0, "'''"), -(8711, 0, "'''"), -(8726, 0, "'nttttt'"), -(8732, 0, "'T'"), -(8733, 0, "'h'"), -(8734, 0, "'e'"), -(8734, 1, "''"), -(8733, 1, "''"), -(8732, 1, "''"), -(8732, 0, "'O'"), -(8733, 0, "'n'"), -(8734, 0, "'c'"), -(8735, 0, "'e'"), -(8736, 0, "' '"), -(8737, 0, "'s'"), -(8738, 0, "'o'"), -(8739, 0, "'m'"), -(8740, 0, "'e'"), -(8741, 0, "'b'"), -(8742, 0, "'o'"), -(8743, 0, "'d'"), -(8744, 0, "'y'"), -(8745, 0, "' '"), -(8746, 0, "'b'"), -(8747, 0, "'e'"), -(8748, 0, "'c'"), -(8749, 0, "'o'"), -(8750, 0, "'m'"), -(8751, 0, "'e'"), -(8752, 0, "'s'"), -(8746, 7, "'a'"), -(8747, 0, "'s'"), -(8748, 0, "'c'"), -(8749, 0, "'e'"), -(8750, 0, "'n'"), -(8751, 0, "'d'"), -(8752, 0, "'s'"), -(8753, 0, "' '"), -(8754, 0, "'t'"), -(8755, 0, "'o'"), -(8756, 0, "' '"), -(8757, 0, "'m'"), -(8757, 1, "''"), -(8757, 0, "'M'"), -(8758, 0, "'a'"), -(8759, 0, "'g'"), -(8760, 0, "'i'"), -(8761, 0, "'s'"), -(8762, 0, "'t'"), -(8763, 0, "'e'"), -(8764, 0, "'r'"), -(8765, 0, "' '"), -(8766, 0, "'L'"), -(8767, 0, "'u'"), -(8768, 0, "'d'"), -(8769, 0, "'i'"), -(8770, 0, "' '"), -(8771, 0, "'o'"), -(8772, 0, "'f'"), -(8773, 0, "' '"), -(8774, 0, "'t'"), -(8775, 0, "'h'"), -(8776, 0, "'e'"), -(8777, 0, "' '"), -(8778, 0, "'g'"), -(8779, 0, "'a'"), -(8780, 0, "'m'"), -(8781, 0, "'e'"), -(8782, 0, "','"), -(8783, 0, "' '"), -(8784, 0, "'a'"), -(8785, 0, "'l'"), -(8786, 0, "'l'"), -(8787, 0, "' '"), -(8788, 0, "'o'"), -(8789, 0, "'t'"), -(8790, 0, "'h'"), -(8791, 0, "'e'"), -(8792, 0, "'r'"), -(8793, 0, "' '"), -(8794, 0, "'u'"), -(8795, 0, "'s'"), -(8796, 0, "'e'"), -(8797, 0, "'r'"), -(8798, 0, "'s'"), -(8799, 0, "' '"), -(8794, 6, "'p'"), -(8795, 0, "'l'"), -(8796, 0, "'a'"), -(8797, 0, "'y'"), -(8798, 0, "'e'"), -(8799, 0, "'r'"), -(8800, 0, "'s'"), -(8801, 0, "' '"), -(8802, 0, "'l'"), -(8803, 0, "'o'"), -(8803, 1, "''"), -(8802, 1, "''"), -(8802, 0, "'a'"), -(8803, 0, "'r'"), -(8804, 0, "'e'"), -(8805, 0, "' '"), -(8806, 0, "'l'"), -(8807, 0, "'o'"), -(8808, 0, "'c'"), -(8809, 0, "'k'"), -(8810, 0, "'e'"), -(8811, 0, "'d'"), -(8812, 0, "' '"), -(8813, 0, "'o'"), -(8814, 0, "'u'"), -(8815, 0, "'t'"), -(8816, 0, "' '"), -(8817, 0, "'o'"), -(8818, 0, "'f'"), -(8819, 0, "' '"), -(8784, 4, "''"), -(8770, 14, "','"), -(8771, 0, "' '"), -(8790, 14, "'c'"), -(8791, 0, "'a'"), -(8792, 0, "'n'"), -(8793, 0, "' '"), -(8794, 0, "'n'"), -(8795, 0, "'o'"), -(8796, 0, "' '"), -(8797, 0, "'l'"), -(8798, 0, "'o'"), -(8799, 0, "'n'"), -(8800, 0, "'g'"), -(8801, 0, "'e'"), -(8802, 0, "'r'"), -(8803, 0, "' '"), -(8804, 0, "'s'"), -(8805, 0, "'t'"), -(8806, 0, "'a'"), -(8807, 0, "'r'"), -(8808, 0, "'t'"), -(8809, 0, "' '"), -(8810, 0, "'o'"), -(8811, 0, "'r'"), -(8812, 0, "' '"), -(8813, 0, "'s'"), -(8814, 0, "'t'"), -(8815, 0, "'o'"), -(8816, 0, "'p'"), -(8817, 0, "' '"), -(8818, 0, "'t'"), -(8819, 0, "'h'"), -(8820, 0, "'e'"), -(8821, 0, "' '"), -(8822, 0, "'g'"), -(8823, 0, "'a'"), -(8824, 0, "'m'"), -(8825, 0, "'e'"), -(8826, 0, "'.'"), -(8827, 0, "' '"), -(8828, 0, "'M'"), -(8829, 0, "'a'"), -(8830, 0, "'g'"), -(8831, 0, "'i'"), -(8832, 0, "'s'"), -(8833, 0, "'t'"), -(8834, 0, "'e'"), -(8835, 0, "'r'"), -(8836, 0, "' '"), -(8837, 0, "'l'"), -(8838, 0, "'u'"), -(8839, 0, "'d'"), -(8837, 3, "''"), -(8828, 0, "'T'"), -(8829, 0, "'h'"), -(8830, 0, "'e'"), -(8831, 0, "' '"), -(8841, 0, "'L'"), -(8842, 0, "'u'"), -(8843, 0, "'d'"), -(8844, 0, "'i'"), -(8845, 0, "' '"), -(8846, 0, "'w'"), -(8847, 0, "'i'"), -(8848, 0, "'l'"), -(8849, 0, "'l'"), -(8850, 0, "' '"), -(8851, 0, "'l'"), -(8852, 0, "'o'"), -(8853, 0, "'s'"), -(8854, 0, "'e'"), -(8855, 0, "' '"), -(8856, 0, "'o'"), -(8856, 1, "''"), -(8851, 5, "'r'"), -(8852, 0, "'e'"), -(8853, 0, "'l'"), -(8854, 0, "'i'"), -(8855, 0, "'n'"), -(8856, 0, "'q'"), -(8857, 0, "'u'"), -(8858, 0, "'i'"), -(8859, 0, "'s'"), -(8860, 0, "'h'"), -(8861, 0, "' '"), -(8827, 35, "''"), -(8770, 0, "' '"), -(8771, 0, "'s'"), -(8772, 0, "'t'"), -(8773, 0, "'a'"), -(8774, 0, "'t'"), -(8775, 0, "'u'"), -(8776, 0, "'s'"), -(8793, 4, "''"), -(9066, 31, "''"), -(9066, 0, "'nn#config {ntmargin-top: 2em;n}'"), -(9067, 58, "''"), -(9066, 1, "''"), -(10104, 0, "'n'"), -(10105, 0, "'n#config {ntmargin-top: 2em;n}nnlabel {ntdisplay: block;n}'"), -(10105, 30, "''"), -(9898, 0, "'n#config {ntmargin-top: 2em;n}'"), -(9898, 0, "'n'"), -(9929, 0, "'n'"), -(9899, 0, "'/'"), -(9900, 0, "'*'"), -(9901, 0, "' '"), -(9902, 0, "'*'"), -(9903, 0, "'*'"), -(9904, 0, "'*'"), -(9905, 0, "'*'"), -(9906, 0, "' '"), -(9907, 0, "'C'"), -(9908, 0, "'o'"), -(9909, 0, "'f'"), -(9910, 0, "'i'"), -(9910, 1, "''"), -(9909, 1, "''"), -(9909, 0, "'n'"), -(9910, 0, "'f'"), -(9907, 4, "'G'"), -(9908, 0, "'a'"), -(9909, 0, "'m'"), -(9910, 0, "'e'"), -(9911, 0, "' '"), -(9912, 0, "'c'"), -(9913, 0, "'o'"), -(9914, 0, "'n'"), -(9915, 0, "'f'"), -(9916, 0, "'i'"), -(9917, 0, "'g'"), -(9918, 0, "' '"), -(9919, 0, "'*'"), -(9920, 0, "'*'"), -(9921, 0, "'*'"), -(9922, 0, "'*'"), -(9923, 0, "'*'"), -(9924, 0, "' '"), -(9924, 1, "''"), -(9924, 0, "'/'"), -(9901, 1, "''"), -(9899, 26, "''"), -(9737, 0, "'/***** Game config *****/n'"), -(9925, 31, "''"), -(9925, 0, "'#config {ntmargin-top: 2em;n}nn'"), -(9925, 31, "''"), -(9763, 0, "'#config {ntmargin-top: 2em;n}nn'"), -(10162, 1, "''"), -(10189, 0, "'n'"), -(10190, 0, "'n'"), -(10191, 0, "'.'"), -(10191, 1, "''"), -(10191, 0, "'#'"), -(10192, 0, "'m'"), -(10193, 0, "'a'"), -(10194, 0, "'g'"), -(10195, 0, "'i'"), -(10196, 0, "'s'"), -(10197, 0, "'t'"), -(10198, 0, "'e'"), -(10199, 0, "'r'"), -(10200, 0, "'_'"), -(10201, 0, "'b'"), -(10202, 0, "'o'"), -(10203, 0, "'x'"), -(10204, 0, "' '"), -(10205, 0, "'{'"), -(10206, 0, "'nt'"), -(10208, 0, "'nt'"), -(10207, 1, "''"), -(10208, 1, "'}'"), -(10207, 0, "'t'"), -(10208, 0, "'b'"), -(10209, 0, "'o'"), -(10210, 0, "'r'"), -(10211, 0, "'d'"), -(10212, 0, "'e'"), -(10213, 0, "'r'"), -(10214, 0, "':'"), -(10215, 0, "' '"), -(10216, 0, "'1'"), -(10217, 0, "'p'"), -(10218, 0, "'x'"), -(10219, 0, "' '"), -(10220, 0, "'d'"), -(10221, 0, "'a'"), -(10222, 0, "'s'"), -(10223, 0, "'h'"), -(10224, 0, "'e'"), -(10225, 0, "'d'"), -(10226, 0, "' '"), -(10226, 1, "''"), -(10226, 0, "' '"), -(10227, 0, "'w'"), -(10228, 0, "'h'"), -(10229, 0, "'i'"), -(10230, 0, "'t'"), -(10231, 0, "'e'"), -(10232, 0, "';'"), -(10233, 0, "'nt'"), -(10235, 0, "'m'"), -(10236, 0, "'a'"), -(10237, 0, "'r'"), -(10238, 0, "'g'"), -(10239, 0, "'i'"), -(10240, 0, "'n'"), -(10241, 0, "':'"), -(10242, 0, "' '"), -(10243, 0, "'2'"), -(10243, 1, "''"), -(10243, 0, "'1'"), -(10244, 0, "'e'"), -(10245, 0, "'m'"), -(10246, 0, "' '"), -(10247, 0, "'0'"), -(10248, 0, "';'"), -(10249, 0, "'nt'"), -(10251, 0, "'p'"), -(10252, 0, "'w'"), -(10253, 0, "'d'"), -(10254, 0, "'i'"), -(10254, 1, "''"), -(10253, 1, "''"), -(10252, 1, "''"), -(10252, 0, "'a'"), -(10253, 0, "'d'"), -(10254, 0, "'d'"), -(10255, 0, "'i'"), -(10256, 0, "'n'"), -(10257, 0, "'g'"), -(10258, 0, "':'"), -(10259, 0, "' '"), -(10260, 0, "'2'"), -(10261, 0, "'e'"), -(10262, 0, "'m'"), -(10263, 0, "';'"), -(10260, 1, "''"), -(10260, 0, "'0'"), -(10261, 0, "'.'"), -(10262, 0, "'5'"), -(8880, 6, "'A'"), -(8881, 0, "'s'"), -(8882, 0, "'c'"), -(8883, 0, "'e'"), -(8884, 0, "'n'"), -(8885, 0, "'d'"), -(8886, 0, "' '"), -(8887, 0, "'t'"), -(8888, 0, "'o'"), -(8889, 0, "' '"), -(8890, 0, "'t'"), -(8891, 0, "'h'"), -(8892, 0, "'e'"), -(8893, 0, "' '"), -(8894, 0, "'t'"), -(8895, 0, "'h'"), -(8896, 0, "'r'"), -(8897, 0, "'o'"), -(8898, 0, "'n'"), -(8899, 0, "'e'"), -(8900, 0, "' '"), -(8901, 0, "'o'"), -(8902, 0, "'f'"), -(10285, 0, "'n'"), -(10286, 0, "'n'"), -(10287, 0, "'#magister_box'"), -(10300, 0, "'>'"), -(10301, 0, "' '"), -(10302, 0, "'b'"), -(10303, 0, "'u'"), -(10304, 0, "'t'"), -(10304, 1, "''"), -(10303, 1, "''"), -(10302, 1, "''"), -(10301, 1, "''"), -(10300, 1, "''"), -(10300, 0, "' '"), -(10301, 0, "'>'"), -(10302, 0, "' '"), -(10303, 0, "'b'"), -(10304, 0, "'u'"), -(10305, 0, "'t'"), -(10306, 0, "'t'"), -(10307, 0, "'o'"), -(10308, 0, "'n'"), -(10309, 0, "' '"), -(10310, 0, "'{'"), -(10311, 0, "'nt'"), -(10313, 0, "'nt'"), -(10312, 1, "''"), -(10313, 1, "'}'"), -(10312, 0, "'t'"), -(10313, 0, "'d'"), -(10314, 0, "'i'"), -(10315, 0, "'s'"), -(10316, 0, "'p'"), -(10317, 0, "'l'"), -(10318, 0, "'a'"), -(10319, 0, "'y'"), -(10320, 0, "':'"), -(10321, 0, "' '"), -(10322, 0, "'b'"), -(10323, 0, "'l'"), -(10324, 0, "'o'"), -(10325, 0, "'c'"), -(10326, 0, "'k'"), -(10327, 0, "';'"), -(10328, 0, "'nt'"), -(10329, 1, "''"), -(10283, 0, "'nt'"), -(10285, 0, "'m'"), -(10286, 0, "'a'"), -(10287, 0, "'x'"), -(10288, 0, "'-'"), -(10289, 0, "'w'"), -(10290, 0, "'i'"), -(10291, 0, "'d'"), -(10292, 0, "'t'"), -(10293, 0, "'h'"), -(10294, 0, "':'"), -(10295, 0, "' '"), -(10296, 0, "'3'"), -(10297, 0, "'0'"), -(10298, 0, "'0'"), -(10299, 0, "'p'"), -(10300, 0, "'x'"), -(10301, 0, "';'"), -(10296, 1, "''"), -(10296, 0, "'5'"), -(8926, 0, "'ntttttOnce somebody ascends to Magister Ludi status, other players can no longer start or stop the game.'"), -(8727, 104, "''"), -(8776, 23, "'A'"), -(8777, 0, "'s'"), -(8778, 0, "'s'"), -(8779, 0, "'u'"), -(8780, 0, "'m'"), -(8781, 0, "'e'"), -(8782, 0, "' '"), -(8783, 0, "'t'"), -(8784, 0, "'h'"), -(8785, 0, "'e'"), -(8786, 0, "' '"), -(8787, 0, "'m'"), -(8788, 0, "'a'"), -(8789, 0, "'n'"), -(8790, 0, "'t'"), -(8791, 0, "'l'"), -(8792, 0, "'e'"), -(8793, 0, "' '"), -(8794, 0, "'o'"), -(8795, 0, "'f'"), -(8830, 8, "'a'"), -(8831, 0, "' '"), -(8832, 0, "'p'"), -(8833, 0, "'l'"), -(8834, 0, "'a'"), -(8835, 0, "'y'"), -(8836, 0, "'e'"), -(8837, 0, "'r'"), -(8900, 23, "'c'"), -(8901, 0, "'o'"), -(8902, 0, "'n'"), -(8903, 0, "'t'"), -(8904, 0, "'r'"), -(8905, 0, "'o'"), -(8906, 0, "'l'"), -(8907, 0, "' '"), -(8908, 0, "'t'"), -(8909, 0, "'h'"), -(8910, 0, "'e'"), -(8825, 86, "'I'"), -(8826, 0, "'F'"), -(8827, 0, "' '"), -(8828, 0, "'a'"), -(8829, 0, "' '"), -(8829, 1, "''"), -(8828, 1, "''"), -(8827, 1, "''"), -(8826, 1, "''"), -(8826, 0, "'f'"), -(8827, 0, "' '"), -(8828, 0, "'a'"), -(8829, 0, "' '"), -(8830, 0, "'m'"), -(8831, 0, "'a'"), -(8832, 0, "'s'"), -(8833, 0, "'t'"), -(8834, 0, "'e'"), -(8835, 0, "'r'"), -(8836, 0, "' '"), -(8837, 0, "'o'"), -(8838, 0, "'f'"), -(8839, 0, "' '"), -(8840, 0, "'t'"), -(8841, 0, "'h'"), -(8842, 0, "'e'"), -(8843, 0, "' '"), -(8844, 0, "'g'"), -(8845, 0, "'a'"), -(8846, 0, "'m'"), -(8847, 0, "'e'"), -(8848, 0, "'s'"), -(8849, 0, "' '"), -(8850, 0, "'i'"), -(8851, 0, "'s'"), -(8852, 0, "' '"), -(8853, 0, "'p'"), -(8854, 0, "'r'"), -(8855, 0, "'e'"), -(8856, 0, "'s'"), -(8857, 0, "'e'"), -(8858, 0, "'n'"), -(8859, 0, "'t'"), -(8860, 0, "','"), -(8861, 0, "' '"), -(8862, 0, "'o'"), -(8863, 0, "'t'"), -(8864, 0, "'h'"), -(8865, 0, "'e'"), -(8866, 0, "'r'"), -(8867, 0, "' '"), -(8868, 0, "'p'"), -(8869, 0, "'l'"), -(8870, 0, "'a'"), -(8871, 0, "'y'"), -(8872, 0, "'e'"), -(8873, 0, "'r'"), -(8874, 0, "'s'"), -(8875, 0, "' '"), -(8876, 0, "'c'"), -(8877, 0, "'a'"), -(8878, 0, "'n'"), -(8879, 0, "'n'"), -(8880, 0, "'o'"), -(8881, 0, "'t'"), -(8882, 0, "' '"), -(8883, 0, "'a'"), -(8884, 0, "'c'"), -(8885, 0, "'c'"), -(8886, 0, "'e'"), -(8887, 0, "'s'"), -(8888, 0, "'s'"), -(8889, 0, "' '"), -(8890, 0, "'t'"), -(8891, 0, "'h'"), -(8892, 0, "'e'"), -(8893, 0, "' '"), -(8894, 0, "'g'"), -(8895, 0, "'a'"), -(8896, 0, "'m'"), -(8897, 0, "'e'"), -(8898, 0, "'''"), -(8899, 0, "'s'"), -(8900, 0, "' '"), -(8901, 0, "'c'"), -(8902, 0, "'o'"), -(8903, 0, "'n'"), -(8904, 0, "'t'"), -(8905, 0, "'r'"), -(8906, 0, "'o'"), -(8907, 0, "'l'"), -(8908, 0, "'s'"), -(8909, 0, "'.'"), -(8876, 6, "'l'"), -(8877, 0, "'o'"), -(8878, 0, "'s'"), -(8879, 0, "'e'"), -(10330, 0, "'t'"), -(10331, 0, "'f'"), -(10332, 0, "'o'"), -(10333, 0, "'n'"), -(10334, 0, "'t'"), -(10335, 0, "'-'"), -(10336, 0, "'x'"), -(10336, 1, "''"), -(10336, 0, "'s'"), -(10337, 0, "'i'"), -(10338, 0, "'z'"), -(10339, 0, "'e'"), -(10340, 0, "':'"), -(10341, 0, "' '"), -(10342, 0, "'8'"), -(10343, 0, "'0'"), -(10344, 0, "'%'"), -(10345, 0, "';'"), -(10342, 1, "''"), -(10342, 0, "'1'"), -(10343, 0, "'0'"), -(10284, 0, "'nt'"), -(10286, 0, "'b'"), -(10287, 0, "'a'"), -(10288, 0, "'c'"), -(10289, 0, "'k'"), -(10290, 0, "'g'"), -(10291, 0, "'r'"), -(10292, 0, "'o'"), -(10293, 0, "'u'"), -(10294, 0, "'n'"), -(10295, 0, "'d'"), -(10296, 0, "'-'"), -(10297, 0, "'c'"), -(10298, 0, "'o'"), -(10299, 0, "'l'"), -(10300, 0, "'o'"), -(10301, 0, "'r'"), -(10302, 0, "':'"), -(10303, 0, "' '"), -(10304, 0, "'b'"), -(10305, 0, "'l'"), -(10306, 0, "'a'"), -(10307, 0, "'c'"), -(10308, 0, "'k'"), -(10309, 0, "';'"), -(10310, 0, "'nt'"), -(10312, 0, "'b'"), -(10313, 0, "'l'"), -(10314, 0, "'e'"), -(10315, 0, "'n'"), -(10316, 0, "'d'"), -(10317, 0, "'-'"), -(10318, 0, "'m'"), -(10319, 0, "'o'"), -(10320, 0, "'d'"), -(10321, 0, "'e'"), -(10312, 10, "'background-blend-mode: ;'"), -(10335, 0, "'darken'"), -(10304, 5, "'w'"), -(10305, 0, "'h'"), -(10306, 0, "'i'"), -(10307, 0, "'t'"), -(10308, 0, "'e'"), -(10342, 0, "'nt'"), -(10344, 0, "'b'"), -(10345, 0, "'l'"), -(10346, 0, "'e'"), -(10347, 0, "'n'"), -(10348, 0, "'d'"), -(10349, 0, "'-'"), -(10350, 0, "'m'"), -(10351, 0, "'o'"), -(10344, 8, "'mix-blend-mode: ;'"), -(10360, 0, "'d'"), -(10361, 0, "'a'"), -(10362, 0, "'r'"), -(10363, 0, "'k'"), -(10364, 0, "'e'"), -(10365, 0, "'n'"), -(10343, 24, "''"), -(10342, 1, "''"), -(10312, 30, "''"), -(10311, 1, "''"), -(10310, 1, "''"), -(10309, 1, "''"), -(10309, 0, "';'"), -(10310, 0, "' */'"), -(10286, 0, "'/* '"), -(10313, 3, "''"), -(10286, 3, "''"), -(10304, 5, "'#1c0303'"), -(10375, 0, "'nt'"), -(10377, 0, "'w'"), -(10378, 0, "'i'"), -(10379, 0, "'d'"), -(10380, 0, "'t'"), -(10381, 0, "'h'"), -(10382, 0, "':'"), -(10383, 0, "' '"), -(10384, 0, "'1'"), -(10385, 0, "'0'"), -(10386, 0, "'0'"), -(10387, 0, "'%'"), -(10388, 0, "';'"), -(10389, 0, "'nt'"), -(10391, 0, "'m'"), -(10392, 0, "'a'"), -(10393, 0, "'r'"), -(10394, 0, "'g'"), -(10395, 0, "'i'"), -(10396, 0, "'n'"), -(10397, 0, "':'"), -(10398, 0, "' '"), -(10399, 0, "'0'"), -(10400, 0, "' '"), -(10401, 0, "'2'"), -(10402, 0, "'e'"), -(10403, 0, "'m'"), -(10404, 0, "';'"), -(10390, 15, "''"), -(10389, 1, "''"), -(8825, 4, "'W'"), -(8826, 0, "'h'"), -(8827, 0, "'e'"), -(8828, 0, "'n'"), -(8829, 0, "' '"), -(8830, 0, "'t'"), -(8831, 0, "'h'"), -(8832, 0, "'e'"), -(8879, 24, "' '"), -(8880, 0, "'c'"), -(8881, 0, "'a'"), -(8882, 0, "'n'"), -(8883, 0, "'n'"), -(8884, 0, "'o'"), -(8885, 0, "'t'"), -(8886, 0, "' '"), -(8894, 1, "''"), -(8894, 0, "' '"), -(8895, 0, "'t'"), -(8896, 0, "'h'"), -(8897, 0, "'e'"), -(8898, 0, "' '"), -(8899, 0, "'g'"), -(8900, 0, "'a'"), -(8901, 0, "'m'"), -(8902, 0, "'e'"), -(8904, 0, "' -->'"), -(8825, 0, "''"), -(9231, 0, "''"), -(9231, 0, "''"), -(7164, 0, "''"), -(7164, 0, "''"), -(5647, 0, "''"), -(6627, 0, "'n
ntntnnt{#if internal_state === 'loading'}ntt

Loading game state

nt{:else}nttnttntt

Topic: {topic}

nttntt

Room: {room} (leave)

nntt{#if !audio_works}ntt
ntttAudio does not workntttntt
ntt{/if}n'"), -(746, 3, "''"), -(740, 3, "''"), -(733, 3, "''"), -(692, 3, "''"), -(666, 3, "''"), -(653, 3, "''"), -(645, 3, "''"), -(612, 3, "''"), -(587, 3, "''"), -(574, 3, "''"), -(555, 3, "''"), -(522, 3, "''"), -(503, 3, "''"), -(479, 3, "''"), -(452, 3, "''"), -(771, 3, "''"), -(729, 0, "'nt'"), -(754, 3, "''"), -(730, 1, "''"), -(514, 0, "'// '"), -(513, 0, "'t// a.src = '/lo-metal-tone.mp3'n'"), -(547, 3, "''"), -(556, 18, "''"), -(556, 0, "'/'"), -(557, 0, "'s'"), -(558, 0, "'i'"), -(559, 0, "'l'"), -(560, 0, "'e'"), -(561, 0, "'n'"), -(562, 0, "'c'"), -(563, 0, "'e'"), -(564, 0, "'.'"), -(565, 0, "'m'"), -(566, 0, "'l'"), -(566, 1, "''"), -(566, 0, "'p'"), -(567, 0, "'3'"), -(513, 33, "''"), -(428, 6245, "'t// export let statennconst ARCHETOPICS = [n 'Truth', 'Human', 'Energy', 'Beauty', 'Beginning', 'End', 'Birth', 'Death',n 'Ego', 'Attention', 'Art', 'Empathy', 'Eutopia', 'Future', 'Game', 'Gift',n 'History', 'Cosmos', 'Time', 'Life', 'Addiction', 'Paradox', 'Shadow', 'Society'n]nn// Could make configurable. Eh.nconst MEDITATION_SECONDS = 60nnlet game_stages = []n$: {ntgame_stages = [{nttlabel: `${meditate ? 'Meditation' : 'Game'} is about to start`,nttduration: 3,nttno_sound: truent}]ntif (meditate) game_stages.push({nttlabel: 'Meditate',ntttype: 'meditate',nttduration: MEDITATION_SECONDS,nt})ntfor (let r = 0; r < rounds; r++) {nttfor (let p = 0; p < players; p++) {ntttgame_stages.push({nttttlabel: `Round ${r+1} player ${p+1}`,nttttduration: seconds_per_bead,ntttttype: 'bead', r, pnttt})ntt}nt}n}nnnconst update_state = async patch => {ntawait fetch(`${room}/configure`, {nttmethod: 'POST',nttmode: 'same-origin',nttheaders: {nttt'content-type': 'application/json',ntt},nttbody: JSON.stringify(patch)nt})n}nnconst upd = (k, v) => () => update_state({[k]: v})nnconst config = k => e => {nt// console.log('k', k, e.data, e.value, e.target.value, e.target.type)ntconst raw_value = e.target.valuentconst value = e.target.type === 'number' ? raw_value|0ntt: e.target.type === 'checkbox' ? e.target.checkedntt: raw_valuentupdate_state({[k]: value})n}nnconst roundish = x => Math.round(x * 10) / 10nnnconst waiting_stage = { label: 'Waiting for game to start', duration: Infinity }nconst complete_stage = { label: 'Game complete', type: 'complete' }nconst get_current_stage = (offset_ms) => {ntif (state === 'waiting') return {stage: waiting_stage, offset_ms: 0}nntlet offset_sec = Math.round(offset_ms / 1000)ntfor (let s = 0; s < game_stages.length; s++) {nttlet stage = game_stages[s]nttif (stage.duration > offset_sec) {ntttreturn {stage, offset_sec}ntt}nttoffset_sec -= stage.durationnt}ntreturn {nttstage: complete_stage, offset_secnt}n}nnlet current_stage = null, offset_secn$: console.log('current stage', current_stage)nnnconst tick = (play_audio) => {ntconsole.log('tick')nt// console.log('state', state, 'completed', state && state.complete)nntconst time = state === 'playing' ? Date.now() + _clock_offset - start_timentt: state === 'paused' ? paused_progressntt: 0ntconst {stage: new_stage, offset_sec: new_offs} = get_current_stage(time)nt// state_label = state.labelntntoffset_sec = new_offsntif (new_stage !== current_stage) {nttconsole.log('state changed', new_stage.label, new_stage.type === 'complete')nttcurrent_stage = new_stagentt// completed = new_game_state.completentt// if (!state.complete) round_audio.play()nnttif (play_audio && !new_stage.no_sound) {ntttif (current_stage.type === 'complete') complete_audio.play()ntttelse round_audio.play()ntt}nt}n}nnlet timern$: {nt// Sadly we can't use internal_state here because it generates a cyclic dependancy.ntlet completed = current_stage ? current_stage.type === 'complete' : falsent// console.log('xx', state, timer, completed, current_stage)nnt// if (state !== 'loading') tick(false)nntif (state === 'playing' && timer == null && !completed) {ntt// setTimeout needed to get around some weird race condition.ntt// There's probably better ways to structure this :/nttsetTimeout(() => tick(false))ntttimer = setInterval(() => {nttttick(true)ntt}, 1000)nt} else if ((completed || state !== 'playing') && timer != null) {nttconsole.log('cancelled interval timer')nttclearInterval(timer)ntttimer = nullnt} else if (state === 'waiting' || state === 'paused') {nttsetTimeout(() => tick(false))nt}n}nnlet game_completedn$: {nt// console.log('updating game_completed', current_stage)ntgame_completed = (state !== 'playing' || current_stage == null) ? falsent: (current_stage.type === 'complete')n}nnlet internal_staten$: internal_state = game_completed ? 'completed' : statennlet bar_width = 0n$: bar_width = current_stage == null ? 0nt: state === 'waiting' ? 0nt: current_stage.type === 'complete' ? 100nt: 100 * offset_sec / current_stage.durationnnlet stage_labeln$: stage_label = internal_state === 'waiting' ? 'Waiting for game to start'nt: current_stage == null ? 'unknown' : current_stage.labelnnconst order = ['meditate', 'bead', 'complete']nconst class_for = x => x < 0 ? 'done'nt: x > 0 ? 'waiting'nt: 'active'nnconst progress_class = (stage, type, r, p) => {ntif (stage == null) return ''nntconst current_o = order.indexOf(stage.type)ntconst element_o = order.indexOf(type)nnt// const o_diff = element_o - current_ontreturn type === 'bead' && stage.type === 'bead'ntt? (r === stage.r ? class_for(p - stage.p) : class_for(r - stage.r))ntt: class_for(element_o - current_o)n}nn// This will get more complex in time. For now, pause the game to fiddle.n$: settings_disabled = state === 'playing'nnlet config_open = falsenn$: if (_magister === true) config_open = truenn// The first user has the config open by default.n$: if (_active_sessions === 1) config_open = truenn// The magister box is fully visible once there's a critical mass of players in the roomn$: magister_opaque = _magister === true || _active_sessions >= 6nnnnnnt{#if _magister}nttnt{/if}ntnnn
ntntnnt{#if internal_state === 'loading'}ntt

Loading game state

nt{:else}nttnttntt

Topic: {topic}

nttntt

Room: {room} (leave)

n'"), -(8, 0, "'nt'"), -(10, 0, "'i'"), -(11, 0, "'m'"), -(12, 0, "'p'"), -(13, 0, "'o'"), -(14, 0, "'r'"), -(15, 0, "'t'"), -(16, 0, "' '"), -(17, 0, "'*'"), -(18, 0, "' '"), -(19, 0, "'a'"), -(20, 0, "'s'"), -(21, 0, "' '"), -(22, 0, "'t'"), -(23, 0, "'o'"), -(24, 0, "'p'"), -(25, 0, "'i'"), -(26, 0, "'c'"), -(27, 0, "'s'"), -(28, 0, "' '"), -(29, 0, "'f'"), -(30, 0, "'r'"), -(31, 0, "'o'"), -(32, 0, "'m'"), -(33, 0, "' '"), -(34, 0, "'''"), -(35, 0, "'.'"), -(36, 0, "'/'"), -(37, 0, "'t'"), -(38, 0, "'o'"), -(39, 0, "'p'"), -(40, 0, "'i'"), -(41, 0, "'c'"), -(42, 0, "'s'"), -(43, 0, "'.'"), -(44, 0, "'j'"), -(45, 0, "'s'"), -(46, 0, "'o'"), -(47, 0, "'n'"), -(48, 0, "'''"), -(9, 1, "''"), -(431, 0, "'n'"), -(432, 0, "'c'"), -(433, 0, "'o'"), -(434, 0, "'n'"), -(435, 0, "'s'"), -(436, 0, "'o'"), -(437, 0, "'l'"), -(438, 0, "'e'"), -(439, 0, "'.'"), -(440, 0, "'l'"), -(441, 0, "'o'"), -(442, 0, "'g'"), -(440, 3, "'log'"), -(443, 0, "'('"), -(444, 0, "'t'"), -(445, 0, "'o'"), -(446, 0, "'p'"), -(447, 0, "'i'"), -(448, 0, "'c'"), -(449, 0, "'s'"), -(450, 0, "')'"), -(6171, 0, "'ntt'"), -(6174, 0, "'ntt'"), -(6172, 2, "''"), -(6175, 0, "'<'"), -(6176, 0, "'i'"), -(6177, 0, "'m'"), -(6178, 0, "'g'"), -(6179, 0, "'>'"), -(6180, 0, "'<'"), -(6181, 0, "'/'"), -(6182, 0, "'i'"), -(6183, 0, "'m'"), -(6184, 0, "'g'"), -(6185, 0, "'>'"), -(6180, 6, "''"), -(6179, 0, "' '"), -(6180, 0, "'i'"), -(6181, 0, "'d'"), -(6182, 0, "'='"), -(6183, 0, "' '"), -(6184, 0, "'/'"), -(6183, 0, "'''"), -(6184, 0, "'a'"), -(6185, 0, "'s'"), -(6186, 0, "'d'"), -(6187, 0, "'f'"), -(6184, 4, "'t'"), -(6185, 0, "'o'"), -(6186, 0, "'p'"), -(6187, 0, "'i'"), -(6188, 0, "'c'"), -(6189, 0, "'''"), -(6193, 0, "'ntt'"), -(6194, 2, "''"), -(6191, 1, "''"), -(6190, 1, "''"), -(772, 0, "'n'"), -(772, 0, "'n'"), -(773, 0, "'$'"), -(774, 0, "':'"), -(775, 0, "' '"), -(776, 0, "'{'"), -(777, 0, "'nt'"), -(779, 0, "'nt'"), -(778, 1, "''"), -(779, 1, "'}'"), -(778, 0, "'t'"), -(6190, 10, "'bind:this={round_audio}'"), -(778, 1, "''"), -(6200, 11, "'t'"), -(6201, 0, "'o'"), -(6202, 0, "'p'"), -(6203, 0, "'i'"), -(6204, 0, "'c'"), -(6205, 0, "'_'"), -(6206, 0, "'i'"), -(6207, 0, "'m'"), -(6208, 0, "'g'"), -(486, 0, "'n'"), -(487, 0, "'l'"), -(488, 0, "'e'"), -(489, 0, "'t'"), -(490, 0, "' '"), -(491, 0, "'t'"), -(492, 0, "'o'"), -(493, 0, "'p'"), -(494, 0, "'i'"), -(495, 0, "'c'"), -(496, 0, "'_'"), -(497, 0, "'i'"), -(498, 0, "'m'"), -(499, 0, "'g'"), -(792, 0, "'t'"), -(793, 0, "'t'"), -(794, 0, "'o'"), -(795, 0, "'p'"), -(796, 0, "'i'"), -(797, 0, "'c'"), -(798, 0, "'_'"), -(799, 0, "'i'"), -(800, 0, "'m'"), -(801, 0, "'g'"), -(6209, 3, "'d'"), -(6210, 0, "'i'"), -(6211, 0, "'v'"), -(6235, 0, "'<'"), -(6236, 0, "'/'"), -(6237, 0, "'d'"), -(6238, 0, "'i'"), -(6239, 0, "'v'"), -(6240, 0, "'>'"), -(802, 0, "'/'"), -(802, 1, "''"), -(802, 0, "'.'"), -(803, 0, "'i'"), -(804, 0, "'n'"), -(805, 0, "'n'"), -(806, 0, "'e'"), -(807, 0, "'r'"), -(808, 0, "'H'"), -(809, 0, "'T'"), -(810, 0, "'M'"), -(811, 0, "'L'"), -(812, 0, "' '"), -(813, 0, "'='"), -(814, 0, "' '"), -(815, 0, "'t'"), -(816, 0, "'o'"), -(817, 0, "'p'"), -(818, 0, "'i'"), -(819, 0, "'c'"), -(820, 0, "'s'"), -(821, 0, "'['"), -(822, 0, "'t'"), -(823, 0, "'o'"), -(824, 0, "'p'"), -(825, 0, "'i'"), -(826, 0, "'c'"), -(822, 5, "'topic'"), -(827, 0, "'.'"), -(828, 0, "'t'"), -(829, 0, "'o'"), -(830, 0, "'L'"), -(831, 0, "'o'"), -(831, 1, "''"), -(830, 1, "''"), -(828, 2, "'s.toLocaleLowerCase'"), -(829, 1, "''"), -(828, 1, "''"), -(845, 0, "'('"), -(846, 0, "')'"), -(847, 0, "')'"), -(847, 1, "''"), -(847, 0, "']'"), -(26, 1, "''"), -(26, 0, "'S'"), -(27, 0, "'V'"), -(28, 0, "'G'"), -(29, 0, "'s'"), -(29, 1, "''"), -(28, 1, "''"), -(27, 1, "''"), -(26, 1, "''"), -(26, 0, "'I'"), -(27, 0, "'c'"), -(28, 0, "'o'"), -(29, 0, "'n'"), -(30, 0, "'s'"), -(819, 6, "'topicIcons'"), -(436, 19, "''"), -(435, 1, "''"), -(777, 0, "'i'"), -(778, 0, "'f'"), -(779, 0, "' '"), -(780, 0, "'('"), -(781, 0, "'t'"), -(782, 0, "'o'"), -(783, 0, "'p'"), -(784, 0, "'i'"), -(785, 0, "'c'"), -(786, 0, "'_'"), -(787, 0, "'i'"), -(788, 0, "'m'"), -(789, 0, "'g'"), -(790, 0, "')'"), -(791, 0, "' '"), -(6261, 0, "' '"), -(6262, 0, "'i'"), -(6263, 0, "'d'"), -(6264, 0, "'='"), -(6265, 0, "'t'"), -(6266, 0, "'i'"), -(6267, 0, "'p'"), -(6267, 1, "''"), -(6266, 1, "''"), -(6266, 0, "'o'"), -(6267, 0, "'p'"), -(6268, 0, "'i'"), -(6269, 0, "'c'"), -(6270, 0, "'i'"), -(6271, 0, "'m'"), -(6272, 0, "'g'"), -(6273, 0, "'''"), -(6265, 0, "'''"), -(10504, 0, "'n'"), -(10505, 0, "'n'"), -(10506, 0, "'#'"), -(10507, 0, "'t'"), -(10508, 0, "'o'"), -(10509, 0, "'p'"), -(10510, 0, "'i'"), -(10511, 0, "'c'"), -(10512, 0, "'i'"), -(10513, 0, "'m'"), -(10514, 0, "'g'"), -(10515, 0, "' '"), -(10516, 0, "'{'"), -(10517, 0, "'nt'"), -(10518, 1, "'}'"), -(10517, 0, "'nt'"), -(10519, 0, "'w'"), -(10520, 0, "'i'"), -(10521, 0, "'d'"), -(10522, 0, "'t'"), -(10523, 0, "'h'"), -(10519, 5, "'m'"), -(10520, 0, "'a'"), -(10521, 0, "'x'"), -(10522, 0, "'-'"), -(10523, 0, "'w'"), -(10524, 0, "'i'"), -(10525, 0, "'d'"), -(10526, 0, "'t'"), -(10527, 0, "'h'"), -(10528, 0, "':'"), -(10529, 0, "' '"), -(10530, 0, "'2'"), -(10531, 0, "'0'"), -(10532, 0, "'0'"), -(10533, 0, "'p'"), -(10534, 0, "'x'"), -(10535, 0, "';'"), -(7658, 0, "'ntt'"), -(7659, 2, "''"), -(7658, 0, "'ntt'"), -(7661, 0, "'<'"), -(7662, 0, "'d'"), -(7663, 0, "'e'"), -(7664, 0, "'t'"), -(7665, 0, "'a'"), -(7666, 0, "'i'"), -(7667, 0, "'l'"), -(7668, 0, "'s'"), -(7662, 7, "'details'"), -(7669, 0, "'>'"), -(7670, 0, "''"), -(7670, 0, "'ntttntt'"), -(7674, 0, "'<'"), -(7675, 0, "'s'"), -(7676, 0, "'u'"), -(7677, 0, "'m'"), -(7678, 0, "'m'"), -(7679, 0, "'a'"), -(7680, 0, "'r'"), -(7681, 0, "'y'"), -(7682, 0, "'>'"), -(7683, 0, "'U'"), -(7684, 0, "'I'"), -(7684, 1, "''"), -(7683, 1, "''"), -(7683, 0, "'O'"), -(7684, 0, "'t'"), -(7685, 0, "'h'"), -(7686, 0, "'e'"), -(7687, 0, "'r'"), -(7688, 0, "' '"), -(7689, 0, "'s'"), -(7690, 0, "'t'"), -(7691, 0, "'u'"), -(7692, 0, "'f'"), -(7693, 0, "'f'"), -(7694, 0, "'<'"), -(7695, 0, "'/'"), -(7696, 0, "'s'"), -(7697, 0, "'u'"), -(7695, 3, "'/summary>'"), -(7704, 0, "'>'"), -(7704, 1, "''"), -(7704, 0, "'nttt'"), -(7705, 3, "''"), -(7159, 422, "''"), -(7283, 0, "'ntt
nttt

Game

nttt{#if meditate}ntttt
ntttttMeditation (1 min)ntttt
nttt{/if}nttt{#each Array(Math.max(rounds, 0)) as _, r}ntttt
Round {r+1}:nttttt{#each Array(Math.max(players, 0)) as _, p}ntttttt{p+1} nttttt{/each}ntttt
nttt{/each}ntt
n'"), -(7705, 0, "'t'"), -(7696, 2, "'ttt'"), -(7685, 3, "'tttt'"), -(7674, 4, "'ttttt'"), -(7661, 5, "'tttttt'"), -(7573, 6, "'ttttttt'"), -(7524, 5, "'tttttt'"), -(7502, 4, "'ttttt'"), -(7456, 3, "'tttt'"), -(7447, 3, "'tttt'"), -(7436, 4, "'ttttt'"), -(7349, 5, "'tttttt'"), -(7339, 4, "'ttttt'"), -(7321, 3, "'tttt'"), -(7304, 3, "'tttt'"), -(7284, 2, "'ttt'"), -(6459, 418, "''"), -(6865, 0, "'tt
nttt{state === 'waiting' ? 'Waiting for the game to start'nttt: state === 'paused' ? 'GAME PAUSED'nttt: state === 'playing' ? 'Game in progress'nttt: ''}ntt
ntt{#if connection !== 'connected'}nttt
DISCONNECTED FROM GAME SERVER
ntt{:else}nttt{#if _active_sessions == 1}ntttt
You are alone in the room
nttt{:else}ntttt
{_active_sessions} players are in this room
nttt{/if}ntt{/if}n'"), -(7283, 0, "'t'"), -(7275, 2, "'ttt'"), -(7266, 3, "'tttt'"), -(7207, 4, "'ttttt'"), -(7196, 3, "'tttt'"), -(7155, 4, "'ttttt'"), -(7124, 3, "'tttt'"), -(7114, 2, "'ttt'"), -(7070, 3, "'tttt'"), -(7035, 2, "'ttt'"), -(7026, 2, "'ttt'"), -(7017, 3, "'tttt'"), -(6971, 3, "'tttt'"), -(6931, 3, "'tttt'"), -(6873, 3, "'tttt'"), -(6865, 2, "'ttt'"), -(6864, 0, "'nttt'"), -(6865, 3, "''"), -(6830, 0, "'nttt'"), -(6834, 0, "'<'"), -(6835, 0, "'!'"), -(6836, 0, "'-'"), -(6837, 0, "'-'"), -(6838, 0, "' '"), -(6839, 0, "'I'"), -(6840, 0, "'''"), -(6841, 0, "'m'"), -(6842, 0, "' '"), -(6843, 0, "'n'"), -(6844, 0, "'o'"), -(6845, 0, "'t'"), -(6846, 0, "' '"), -(6847, 0, "'r'"), -(6848, 0, "'e'"), -(6849, 0, "'a'"), -(6850, 0, "'d'"), -(6851, 0, "'y'"), -(6852, 0, "' '"), -(6853, 0, "'t'"), -(6854, 0, "'o'"), -(6855, 0, "' '"), -(6856, 0, "'d'"), -(6857, 0, "'e'"), -(6858, 0, "'l'"), -(6859, 0, "'e'"), -(6860, 0, "'t'"), -(6861, 0, "'e'"), -(6862, 0, "' '"), -(6863, 0, "'t'"), -(6864, 0, "'h'"), -(6865, 0, "'e'"), -(6866, 0, "'s'"), -(6867, 0, "'e'"), -(6868, 0, "' '"), -(6869, 0, "'U'"), -(6870, 0, "'I'"), -(6871, 0, "' '"), -(6872, 0, "'e'"), -(6873, 0, "'l'"), -(6874, 0, "'e'"), -(6875, 0, "'m'"), -(6876, 0, "'e'"), -(6877, 0, "'n'"), -(6878, 0, "'t'"), -(6879, 0, "'s'"), -(6880, 0, "' '"), -(6881, 0, "'b'"), -(6882, 0, "'u'"), -(6883, 0, "'t'"), -(6884, 0, "' '"), -(6885, 0, "'w'"), -(6886, 0, "'e'"), -(6887, 0, "' '"), -(6888, 0, "'m'"), -(6889, 0, "'i'"), -(6890, 0, "'g'"), -(6891, 0, "'h'"), -(6892, 0, "'t'"), -(6893, 0, "' '"), -(6894, 0, "'n'"), -(6895, 0, "'o'"), -(6896, 0, "'t'"), -(6897, 0, "' '"), -(6898, 0, "'u'"), -(6899, 0, "'s'"), -(6900, 0, "'e'"), -(6901, 0, "' '"), -(6902, 0, "'t'"), -(6903, 0, "'h'"), -(6904, 0, "'e'"), -(6905, 0, "'m'"), -(6906, 0, "' '"), -(6907, 0, "'-'"), -(6908, 0, "'-'"), -(6909, 0, "'>'"), -(6350, 61, "''"), -(6884, 0, "'tt

Room: {room} (leave)

n'"), -(6884, 2, "'ttt'"), -(6306, 92, "''"), -(6305, 1, "''"), -(6588, 76, "''"), -(6587, 0, "'ntt'"), -(6590, 0, "'tttt{#if internal_state == 'waiting'}ntttttn'"), -(6628, 5, "'tt'"), -(6588, 6, "'tt'"), -(6595, 0, "'_magister == null || _magister == true'"), -(6633, 0, "' '"), -(6634, 0, "'&'"), -(6635, 0, "'&'"), -(6636, 0, "' '"), -(6633, 0, "')'"), -(6595, 0, "'('"), -(6670, 0, "'t'"), -(6728, 0, "'nttt'"), -(6732, 0, "'<'"), -(6732, 1, "''"), -(6732, 0, "'{'"), -(6733, 0, "'/'"), -(6734, 0, "'i'"), -(6735, 0, "'f'"), -(6736, 0, "'}'"), -(6729, 3, "'tt'"), -(6225, 11, "''"), -(6232, 5, "''"), -(7911, 4, "'A'"), -(7912, 0, "'d'"), -(7913, 0, "'v'"), -(7914, 0, "'a'"), -(7915, 0, "'n'"), -(7916, 0, "'c'"), -(7917, 0, "'e'"), -(7918, 0, "'d'"), -(5372, 0, "'// '"), -(5472, 0, "'// '"), -(5372, 3, "''"), -(10649, 0, "'nt'"), -(10651, 0, "'t'"), -(10652, 0, "'e'"), -(10653, 0, "'x'"), -(10654, 0, "'t'"), -(10655, 0, "'-'"), -(10656, 0, "'a'"), -(10657, 0, "'l'"), -(10658, 0, "'i'"), -(10659, 0, "'g'"), -(10660, 0, "'n'"), -(10661, 0, "':'"), -(10662, 0, "' '"), -(10663, 0, "'c'"), -(10664, 0, "'e'"), -(10665, 0, "'n'"), -(10663, 3, "'center'"), -(10669, 0, "';'"), -(6724, 0, "'ntt'"), -(6727, 0, "'<'"), -(6728, 0, "'v'"), -(6729, 0, "'s'"), -(6730, 0, "'p'"), -(6730, 1, "''"), -(6729, 1, "''"), -(6728, 1, "''"), -(6728, 0, "'d'"), -(6729, 0, "'i'"), -(6730, 0, "'v'"), -(6731, 0, "' '"), -(6732, 0, "'c'"), -(6733, 0, "'l'"), -(6734, 0, "'a'"), -(6735, 0, "'s'"), -(6736, 0, "'s'"), -(6732, 5, "'s'"), -(6733, 0, "'t'"), -(6734, 0, "'y'"), -(6735, 0, "'l'"), -(6736, 0, "'e'"), -(6737, 0, "'='"), -(6738, 0, "'''"), -(6739, 0, "'''"), -(6740, 0, "'>'"), -(6741, 0, "'<'"), -(6742, 0, "'/'"), -(6743, 0, "'d'"), -(6744, 0, "'i'"), -(6745, 0, "'v'"), -(6746, 0, "'>'"), -(6739, 0, "'h'"), -(6740, 0, "'e'"), -(6741, 0, "'o'"), -(6742, 0, "'g'"), -(6743, 0, "'h'"), -(6743, 1, "''"), -(6742, 1, "''"), -(6741, 1, "''"), -(6741, 0, "'i'"), -(6742, 0, "'g'"), -(6743, 0, "'h'"), -(6744, 0, "'t'"), -(6745, 0, "':'"), -(6746, 0, "' '"), -(6747, 0, "'4'"), -(6748, 0, "'0'"), -(6749, 0, "'0'"), -(6750, 0, "'p'"), -(6751, 0, "'x'"), -(6752, 0, "';'"), -(10741, 0, "'nt'"), -(10743, 0, "'d'"), -(10744, 0, "'i'"), -(10745, 0, "'s'"), -(10746, 0, "'p'"), -(10747, 0, "'l'"), -(10748, 0, "'a'"), -(10749, 0, "'y'"), -(10750, 0, "':'"), -(10751, 0, "' '"), -(10752, 0, "'i'"), -(10753, 0, "'n'"), -(10754, 0, "'l'"), -(10755, 0, "'i'"), -(10756, 0, "'n'"), -(10757, 0, "'e'"), -(10758, 0, "'-'"), -(10759, 0, "'b'"), -(10760, 0, "'l'"), -(10761, 0, "'o'"), -(10752, 10, "'inline-block'"), -(10764, 0, "';'"), -(10735, 1, "''"), -(10735, 0, "'3'"), -(6222, 18, "''"), -(6221, 1, "''"), -(6869, 0, "'nttt'"), -(6873, 0, "'nttt'"), -(6870, 3, "''"), -(6874, 0, "'tt

{topic}

'"), -(6871, 5, "'ttt'"), -(0, 12187, "'nnnt{#if _magister}nttnt{/if}nnnn
ntntnnt{#if internal_state === 'loading'}ntt

Loading game state

nt{:else}nttnttnntt
{game_config.topic}
nntt

{stage_label}

ntt
nttt
{((internal_state === 'playing' || internal_state === 'paused') && current_stage) ? current_stage.duration - offset_sec : ''}
nttt
ntt
nntt{#if (_magister == null || _magister == true)}nttt{#if internal_state == 'waiting'}nttttnttt{:else if internal_state == 'playing'}nttttnttt{:else if internal_state == 'paused'}nttttnttt{/if}ntt{/if}nntt
nntt
ntttntttInfonnttt

{game_config.topic}

nttt

Room: {room} (leave)

nnttt
ntttt{state === 'waiting' ? 'Waiting for the game to start'ntttt: state === 'paused' ? 'GAME PAUSED'ntttt: state === 'playing' ? 'Game in progress'ntttt: ''}nttt
nttt{#if connection !== 'connected'}ntttt
DISCONNECTED FROM GAME SERVER
nttt{:else}ntttt{#if _active_sessions == 1}nttttt
You are alone in the room
ntttt{:else}nttttt
{_active_sessions} players are in this room
ntttt{/if}nttt{/if}ntnttt
ntttt

Game

ntttt{#if game_config.meditate}nttttt
nttttttnttttttMeditation (1 min)nttttt
ntttt{/if}ntttt{#each Array(Math.max(game_config.rounds, 0)) as _, r}nttttt
Round {r+1}:ntttttt{#each Array(Math.max(game_config.players, 0)) as _, p}ntttttttnttttttt{p+1} ntttttt{/each}nttttt
ntttt{/each}nttt
ntntt
nntt{#if _magister == null || _magister == true}nttt
nttttGame controlsnntttt

nttttt{#if _magister == null}nttttttThis will effect all players. Will you borrow power? Will you steal it?nttttt{:else}nttttttYou are master of the games. These controls are yours alone.nttttt{/if}ntttt

nntttt{#if internal_state == 'waiting'}ntttttntttt{:else if internal_state == 'playing'}ntttttntttt{:else if internal_state == 'paused'}ntttttntttt{/if}nntttt{#if internal_state == 'paused' || internal_state == 'completed' }ntttttntttt{/if}nnttttnnttttnnttttnnttttnnttttnnttttnnttttnntttt
nttttt(Total game length: {roundish(nttttttgame_stages.reduce((x, s) => x + s.duration, 0) / 60nttttt)} minutes)ntttt
nntttt
nttttt{#if _magister == null}nttttttntttttt

Advanced - for large games

ntttttt

When present, the Magister Ludi (master of the games) has exclusive control of the game.

nttttt{:else if _magister == true}nttttttntttttt

You are the master of the games. You have exclusive control over playing, pausing and configuring this game.

ntttttt

Do not close this browser window or you will be dethroned.

nttttt{/if}ntttt
nttt
ntt{:else}nttt

Magister Ludi is managing this game.

ntt{/if}nt{/if}n
nnnt{/if}nnnn
ntntnnt{#if internal_state === 'loading'}ntt

Loading game state

nt{:else}nttnttnntt
{game_config.topic}
nntt

{stage_label}

ntt
nttt
{((internal_state === 'playing' || internal_state === 'paused') && current_stage) ? current_stage.duration - offset_sec : ''}
nttt
ntt
nntt
nttt{#each game_stages as s, i}ntttt{#if s.type === 'bead' || s.type === 'breath'}ntttttntttt{/if}nttt{/each}ntt
nntt{#if (_magister == null || _magister == true)}nttt{#if internal_state == 'waiting'}nttttnttt{:else if internal_state == 'playing'}nttttnttt{:else if internal_state == 'paused'}nttttnttt{/if}ntt{/if}nntt
nntt
ntttntttInfonnttt

{game_config.topic}

nttt

Room: {room} (leave)

nnttt
ntttt{state === 'waiting' ? 'Waiting for the game to start'ntttt: state === 'paused' ? 'GAME PAUSED'ntttt: state === 'playing' ? 'Game in progress'ntttt: ''}nttt
nttt{#if connection !== 'connected'}ntttt
DISCONNECTED FROM GAME SERVER
nttt{:else}ntttt{#if _active_sessions == 1}nttttt
You are alone in the room
ntttt{:else}nttttt
{_active_sessions} players are in this room
ntttt{/if}nttt{/if}nnttt
ntttt

Game

ntttt{#if game_config.meditate}nttttt
nttttttnttttttMeditation (1 min)nttttt
ntttt{/if}ntttt{#each Array(Math.max(game_config.rounds, 0)) as _, r}nttttt
Round {r+1}:ntttttt{#each Array(Math.max(game_config.players, 0)) as _, p}ntttttttnttttttt{p+1} ntttttt{/each}nttttt
ntttt{/each}nttt
nntt
nntt{#if _magister == null || _magister == true}nttt
nttttGame controlsnntttt

nttttt{#if _magister == null}nttttttThis will effect all players. Will you borrow power? Will you steal it?nttttt{:else}nttttttYou are master of the games. These controls are yours alone.nttttt{/if}ntttt

nntttt{#if internal_state == 'waiting'}ntttttntttt{:else if internal_state == 'playing'}ntttttntttt{:else if internal_state == 'paused'}ntttttntttt{/if}nntttt{#if internal_state == 'paused' || internal_state == 'completed' }ntttttntttt{/if}nnttttnnttttnnttttnnttttnnttttnnttttnnttttnntttt
nttttt(Total game length: {roundish(nttttttgame_stages.reduce((x, s) => x + s.duration, 0) / 60nttttt)} minutes)ntttt
nntttt
nttttt{#if _magister == null}nttttttntttttt

Advanced - for large games

ntttttt

When present, the Magister Ludi (master of the games) has exclusive control of the game.

nttttt{:else if _magister == true}nttttttntttttt

You are the master of the games. You have exclusive control over playing, pausing and configuring this game.

ntttttt

Do not close this browser window or you will be dethroned.

nttttt{/if}ntttt
nttt
ntt{:else}nttt

Magister Ludi is managing this game.

ntt{/if}nt{/if}n
nn'"), -(1642, 1, "''"), -(1642, 0, "'nt'"), -(1644, 0, "'/'"), -(1645, 0, "'/'"), -(1646, 0, "' '"), -(1647, 0, "'t'"), -(1647, 1, "''"), -(1647, 0, "'T'"), -(1695, 1, "''"), -(1695, 0, "'nt'"), -(1697, 0, "'/'"), -(1698, 0, "'/'"), -(1699, 0, "' '"), -(16369, 0, "' */'"), -(16355, 0, "'/* '"), -(16372, 3, "''"), -(16355, 3, "''"), -(16355, 0, "'m'"), -(16356, 0, "'i'"), -(16357, 0, "'n'"), -(16358, 0, "'-'"), -(16124, 0, "'nt'"), -(16126, 0, "'f'"), -(16127, 0, "'o'"), -(16128, 0, "'n'"), -(16129, 0, "'t'"), -(16130, 0, "'-'"), -(16131, 0, "'s'"), -(16132, 0, "'i'"), -(16133, 0, "'z'"), -(16134, 0, "'e'"), -(16135, 0, "':'"), -(16136, 0, "' '"), -(16137, 0, "'6'"), -(16138, 0, "'0'"), -(16139, 0, "'%'"), -(16140, 0, "';'"), -(16137, 1, "''"), -(16137, 0, "'1'"), -(16138, 0, "'0'"), -(16138, 1, "''"), -(16138, 0, "'2'"), -(16138, 1, "''"), -(16138, 0, "'5'"), -(16138, 1, "''"), -(16138, 0, "'2'"), -(16138, 1, "''"), -(16138, 0, "'3'"), -(16035, 0, "' */'"), -(16019, 0, "'/* '"), -(16038, 3, "''"), -(16019, 3, "''"), -(16029, 5, "'a'"), -(16030, 0, "'b'"), -(16031, 0, "'s'"), -(16032, 0, "'o'"), -(16033, 0, "'l'"), -(16034, 0, "'u'"), -(16029, 6, "'absolute'"), -(16226, 0, "'.'"), -(16227, 0, "'5'"), -(16227, 1, "''"), -(16226, 1, "''"), -(16225, 1, "''"), -(16225, 0, "'3'"), -(16230, 0, "' '"), -(16231, 0, "'2'"), -(16232, 0, "'e'"), -(16233, 0, "'m'"), -(16234, 0, "' '"), -(16235, 0, "'0'"), -(16212, 0, "':'"), -(16213, 0, "'n'"), -(16214, 0, "'o'"), -(16215, 0, "'t'"), -(16216, 0, "'('"), -(16217, 0, "':'"), -(16218, 0, "'e'"), -(16219, 0, "'m'"), -(16220, 0, "'p'"), -(16221, 0, "'t'"), -(16222, 0, "'y'"), -(16223, 0, "')'"), -(17451, 224, "''"), -(16390, 0, "':'"), -(16391, 0, "'e'"), -(16392, 0, "'m'"), -(16393, 0, "'p'"), -(16394, 0, "'t'"), -(16395, 0, "'y'"), -(16400, 4, "''"), -(16375, 0, "' */'"), -(16359, 0, "'/* '"), -(16378, 3, "''"), -(16359, 3, "''"), -(16377, 0, "' */'"), -(16353, 0, "'/* '"), -(16404, 0, "'nt'"), -(16406, 0, "'n'"), -(16406, 1, "''"), -(16405, 1, "''"), -(16404, 1, "''"), -(16416, 1, "''"), -(16416, 0, "'2'"), -(16040, 3, "'b'"), -(16041, 0, "'o'"), -(16042, 0, "'t'"), -(16043, 0, "'t'"), -(16044, 0, "'o'"), -(16045, 0, "'m'"), -(5676, 9, "''"), -(9300, 9, "''"), -(3409, 11, "'w'"), -(3410, 0, "'i'"), -(3411, 0, "'l'"), -(3412, 0, "'l'"), -(3409, 10, "'s'"), -(3410, 0, "'t'"), -(3411, 0, "'a'"), -(3412, 0, "'r'"), -(3413, 0, "'t'"), -(3414, 0, "'i'"), -(3415, 0, "'n'"), -(3416, 0, "'g'"), -(3417, 0, "'.'"), -(3418, 0, "'.'"), -(3419, 0, "'.'"), -(1535, 0, "'n'"), -(1536, 0, "'n'"), -(1537, 0, "'w'"), -(1538, 0, "'i'"), -(1539, 0, "'n'"), -(1540, 0, "'d'"), -(1541, 0, "'o'"), -(1542, 0, "'w'"), -(1543, 0, "'.'"), -(1544, 0, "'o'"), -(1545, 0, "'n'"), -(1546, 0, "'c'"), -(1547, 0, "'l'"), -(1548, 0, "'i'"), -(1549, 0, "'c'"), -(1550, 0, "'k'"), -(1551, 0, "' '"), -(1552, 0, "'='"), -(1553, 0, "' '"), -(1554, 0, "'('"), -(1555, 0, "')'"), -(1556, 0, "' '"), -(1557, 0, "'='"), -(1558, 0, "'>'"), -(1559, 0, "' '"), -(1560, 0, "'{'"), -(1561, 0, "'nt'"), -(1563, 0, "'nt'"), -(1562, 1, "''"), -(1563, 1, "'}'"), -(1562, 0, "'t'"), -(1563, 0, "'c'"), -(1564, 0, "'o'"), -(1565, 0, "'n'"), -(1566, 0, "'s'"), -(1567, 0, "'o'"), -(1568, 0, "'e'"), -(1569, 0, "'.'"), -(1569, 1, "''"), -(1568, 1, "''"), -(1568, 0, "'l'"), -(1569, 0, "'e'"), -(1570, 0, "'.'"), -(1571, 0, "'l'"), -(1572, 0, "'o'"), -(1573, 0, "'g'"), -(1574, 0, "'('"), -(1575, 0, "'''"), -(1576, 0, "'o'"), -(1577, 0, "'n'"), -(1578, 0, "'c'"), -(1579, 0, "'l'"), -(1580, 0, "'i'"), -(1581, 0, "'c'"), -(1582, 0, "'k'"), -(1583, 0, "'''"), -(1583, 1, "''"), -(1583, 0, "'''"), -(1584, 0, "')'"), -(1537, 6, "'d'"), -(1538, 0, "'o'"), -(1539, 0, "'c'"), -(1540, 0, "'u'"), -(1541, 0, "'m'"), -(1542, 0, "'e'"), -(1543, 0, "'n'"), -(1544, 0, "'t'"), -(1565, 22, "'t'"), -(1566, 0, "'e'"), -(1567, 0, "'s'"), -(1568, 0, "'t'"), -(1569, 0, "'_'"), -(1570, 0, "'a'"), -(1571, 0, "'u'"), -(1572, 0, "'d'"), -(1573, 0, "'i'"), -(1574, 0, "'o'"), -(1575, 0, "'('"), -(1576, 0, "')'"), -(1565, 0, "'i'"), -(1566, 0, "'f'"), -(1567, 0, "' '"), -(1568, 0, "'('"), -(1569, 0, "'!'"), -(1570, 0, "'a'"), -(1571, 0, "'u'"), -(1572, 0, "'d'"), -(1573, 0, "'i'"), -(1574, 0, "'o'"), -(1575, 0, "')'"), -(1575, 1, "''"), -(1575, 0, "'_'"), -(1576, 0, "'w'"), -(1577, 0, "'o'"), -(1578, 0, "'r'"), -(1579, 0, "'k'"), -(1580, 0, "'s'"), -(1581, 0, "')'"), -(1582, 0, "' '"), -(1563, 0, "'nt'"), -(1565, 0, "'/'"), -(1566, 0, "'/'"), -(1567, 0, "' '"), -(1564, 4, "''"), -(1563, 1, "''"), -(1536, 61, "''"), -(2297, 1, "''"), -(2362, 0, "'ndocument.onclick = () => {ntif (!audio_works) test_audio()n}'"), -(2361, 1, "''")] +structure SvelteComponent = +struct + val txns = + #[ ( 0 + , 0 + , "\n\n\n\n
\n
\n \"logo\"\n

Edit src/App.svelte and save to reload.

\n

Page has been open for {count} seconds.

\n

\n \n Learn Svelte\n \n

\n
\n
\n" + ) + , (7, 0, " ") + , (8, 0, "l") + , (9, 0, "a") + , (10, 0, "n") + , (11, 0, "g") + , (12, 0, "=") + , (13, 0, "\"") + , (14, 0, "t") + , (15, 0, "s") + , (16, 0, "\"") + , ( 0 + , 1416 + , "\n \n \n \n
\n\t
\n\t \"logo\"\n\t

Edit src/App.svelte and save to reload.

\n\t

Page has been open for {count} seconds.

\n\t

\n\t\t\n\t\t Learn Svelte\n\t\t\n\t

\n\t
\n
\n " + ) + , (7, 0, " ") + , (8, 0, " lang=\"ts\"") + , (8, 1, "") + , ( 0 + , 1364 + , "\n\n
\n\t

Hello {name}!

\n\t

Visit the Svelte tutorial to learn how to build Svelte apps.

\n
\n\n" + ) + , (26, 0, "\n\t") + , (27, 1, "") + , (9, 0, "\texport let name;\n") + , (39, 4, "s") + , (40, 0, "t") + , (41, 0, "a") + , (42, 0, "t") + , (43, 0, "e") + , (90, 109, "") + , (90, 0, "<") + , (91, 0, "p") + , (92, 0, ">") + , (93, 0, "{") + , (94, 0, "J") + , (95, 0, "S") + , (96, 0, "O") + , (97, 0, "N") + , (94, 4, "JSON") + , (98, 0, ".") + , (99, 0, "s") + , (100, 0, "t") + , (101, 0, "r") + , (102, 0, "i") + , (103, 0, "n") + , (104, 0, "g") + , (105, 0, "i") + , (106, 0, "f") + , (107, 0, "y") + , (8, 0, "\nimport { stringify } from \"querystring\";\n") + , (141, 9, "stringify") + , (150, 0, "(") + , (151, 0, "s") + , (152, 0, "t") + , (153, 0, "a") + , (154, 0, "t") + , (155, 0, "e") + , (156, 0, ")") + , (157, 0, "}") + , (158, 0, "<") + , (159, 0, "/") + , (160, 0, "p") + , (161, 0, ">") + , (134, 0, "r") + , (135, 0, "e") + , (163, 0, "r") + , (164, 0, "e") + , (9, 40, "") + , (8, 1, "") + , (10, 17, "") + , (9, 1, "") + , (48, 23, "") + , (47, 1, "") + , (28, 0, "\n\texport let state;") + , (28, 0, "\n\texport let state;") + , (28, 0, "\n\texport let state;") + , (22, 5, "r") + , (23, 0, "o") + , (24, 0, "o") + , (25, 0, "m") + , (40, 5, "c") + , (41, 0, "o") + , (42, 0, "n") + , (43, 0, "n") + , (44, 0, "e") + , (45, 0, "c") + , (46, 0, "t") + , (47, 0, "e") + , (48, 0, "d") + , (63, 5, "v") + , (64, 0, "a") + , (65, 0, "l") + , (66, 0, "u") + , (67, 0, "e") + , (71, 0, "// ") + , (90, 1, "") + , (68, 1, "") + , (49, 1, "") + , (26, 1, "") + , (49, 0, "\texport let value\n") + , (67, 0, "\texport let value\n") + , (85, 0, "\texport let value\n") + , (49, 17, "") + , (48, 1, "") + , (61, 5, "p") + , (62, 0, "l") + , (63, 0, "a") + , (64, 0, "y") + , (65, 0, "e") + , (66, 0, "r") + , (67, 0, "s") + , (81, 5, "r") + , (82, 0, "o") + , (83, 0, "u") + , (84, 0, "n") + , (85, 0, "d") + , (86, 0, "s") + , (100, 5, "s") + , (101, 0, "e") + , (102, 0, "c") + , (103, 0, "s") + , (104, 0, "_") + , (105, 0, "p") + , (106, 0, "e") + , (107, 0, "r") + , (108, 0, "_") + , (109, 0, "r") + , (110, 0, "o") + , (111, 0, "u") + , (112, 0, "n") + , (113, 0, "d") + , (88, 0, "\texport let secs_per_round\n") + , (103, 0, "o") + , (104, 0, "n") + , (105, 0, "d") + , (130, 14, "_active_sessions") + , (186, 0, "\n\t") + , (188, 0, "<") + , (189, 0, "h") + , (190, 0, "1") + , (191, 0, ">") + , (192, 0, "R") + , (193, 0, "o") + , (194, 0, "o") + , (195, 0, "m") + , (196, 0, " ") + , (197, 0, "{") + , (198, 0, "r") + , (199, 0, "o") + , (200, 0, "o") + , (201, 0, "m") + , (202, 0, "}") + , (203, 0, "<") + , (204, 0, "/") + , (205, 0, "h") + , (206, 0, "1") + , (207, 0, ">") + , (203, 0, " ") + , (204, 0, "c") + , (205, 0, "o") + , (206, 0, "n") + , (207, 0, "n") + , (208, 0, "e") + , (209, 0, "c") + , (210, 0, "t") + , (211, 0, "e") + , (212, 0, "d") + , (213, 0, " ") + , (214, 0, "{") + , (215, 0, "c") + , (216, 0, "o") + , (217, 0, "n") + , (218, 0, "n") + , (219, 0, "e") + , (220, 0, "c") + , (221, 0, "t") + , (222, 0, "e") + , (223, 0, "d") + , (224, 0, "}") + , (48, 0, "\n\texport let connected") + , (39, 9, "s") + , (40, 0, "t") + , (41, 0, "a") + , (42, 0, "t") + , (43, 0, "e") + , (44, 22, "") + , (27, 0, "\texport let connected\n") + , (243, 0, " ") + , (244, 0, "s") + , (245, 0, "t") + , (246, 0, "a") + , (247, 0, "t") + , (248, 0, "e") + , (249, 0, " ") + , (250, 0, "{") + , (251, 0, "s") + , (252, 0, "t") + , (253, 0, "a") + , (254, 0, "t") + , (255, 0, "e") + , (256, 0, "}") + , (263, 35, "") + , (262, 1, "") + , (39, 9, "c") + , (40, 0, "o") + , (41, 0, "n") + , (42, 0, "n") + , (43, 0, "e") + , (44, 0, "c") + , (45, 0, "t") + , (46, 0, "i") + , (47, 0, "o") + , (48, 0, "n") + , (234, 9, "c") + , (235, 0, "o") + , (236, 0, "n") + , (237, 0, "n") + , (238, 0, "e") + , (239, 0, "c") + , (240, 0, "t") + , (241, 0, "i") + , (242, 0, "o") + , (243, 0, "n") + , (529, 0, " */") + , (283, 0, "/* ") + , (281, 0, "\n\t") + , (283, 0, "\n\t") + , (282, 1, "") + , (283, 1, "") + , (282, 0, "\t") + , (283, 0, "b") + , (284, 0, "o") + , (285, 0, "d") + , (286, 0, " ") + , (286, 1, "") + , (286, 0, "y") + , (287, 0, " ") + , (288, 0, "{") + , (289, 0, "\n\t\t") + , (292, 0, "\n\t\t") + , (290, 2, "") + , (291, 2, "\t}") + , (290, 0, "\t\t") + , (292, 0, "b") + , (293, 0, "a") + , (294, 0, "c") + , (295, 0, "k") + , (296, 0, "g") + , (297, 0, "r") + , (298, 0, "o") + , (299, 0, "u") + , (300, 0, "n") + , (301, 0, "d") + , (302, 0, "-") + , (303, 0, "c") + , (304, 0, "o") + , (305, 0, "l") + , (306, 0, "o") + , (307, 0, "r") + , (308, 0, ":") + , (309, 0, " ") + , (310, 0, "b") + , (311, 0, "l") + , (312, 0, "a") + , (313, 0, "c") + , (314, 0, "k") + , (315, 0, ";") + , (282, 37, "") + , (205, 0, "\n\t") + , (207, 0, "<") + , (208, 0, "h") + , (209, 0, "1") + , (210, 0, ">") + , (211, 0, "G") + , (212, 0, "l") + , (213, 0, "a") + , (214, 0, "s") + , (215, 0, "s") + , (216, 0, " ") + , (217, 0, "B") + , (218, 0, "e") + , (219, 0, "a") + , (220, 0, "d") + , (221, 0, " ") + , (222, 0, "G") + , (223, 0, "a") + , (224, 0, "m") + , (225, 0, "e") + , (226, 0, "s") + , (227, 0, "<") + , (228, 0, "/") + , (229, 0, "h") + , (230, 0, "1") + , (231, 0, ">") + , (226, 1, "") + , (226, 0, " ") + , (227, 0, "T") + , (228, 0, "i") + , (229, 0, "m") + , (230, 0, "e") + , (231, 0, "r") + , (293, 2, "4") + , (240, 2, "4") + , (292, 0, "h") + , (240, 0, "h") + , (254, 37, "") + , (247, 0, ":") + , (249, 0, "<") + , (250, 0, "e") + , (251, 0, "m") + , (252, 0, ">") + , (259, 0, "<") + , (260, 0, "/") + , (261, 0, "e") + , (262, 0, "m") + , (263, 0, ">") + , (269, 0, "\n\t") + , (271, 0, "<") + , (272, 0, "s") + , (273, 0, "p") + , (274, 0, "a") + , (274, 1, "") + , (273, 1, "") + , (272, 1, "") + , (272, 0, "d") + , (273, 0, "i") + , (274, 0, "v") + , (275, 0, ">") + , (276, 0, " connected {connection} state {state}") + , (276, 1, "") + , (312, 0, "<") + , (313, 0, "/") + , (314, 0, "d") + , (315, 0, "i") + , (316, 0, ">") + , (316, 1, "") + , (316, 0, "v") + , (317, 0, ">") + , (276, 10, "") + , (289, 5, "") + , (289, 0, "/") + , (304, 0, "\n\t") + , (306, 0, "\n\t") + , (305, 1, "") + , (307, 0, "<") + , (308, 0, "d") + , (309, 0, "i") + , (310, 0, "v") + , (311, 0, " ") + , (312, 0, "i") + , (313, 0, "d") + , (314, 0, "=") + , (315, 0, "b") + , (316, 0, "a") + , (317, 0, "r") + , (307, 11, "") + , (307, 0, "<") + , (308, 0, "d") + , (309, 0, "i") + , (310, 0, "v") + , (311, 0, " ") + , (312, 0, "i") + , (313, 0, "d") + , (314, 0, "=") + , (315, 0, "c") + , (316, 0, "o") + , (317, 0, "n") + , (318, 0, "f") + , (319, 0, "i") + , (320, 0, "g") + , (321, 0, "'") + , (315, 0, "'") + , (323, 0, ">") + , (324, 0, "<") + , (325, 0, "/") + , (326, 0, "d") + , (327, 0, "i") + , (328, 0, "v") + , (329, 0, ">") + , (324, 0, "\n\t\t\n\t") + , (327, 0, "<") + , (328, 0, "h") + , (329, 0, "2") + , (330, 0, ">") + , (331, 0, "C") + , (332, 0, "o") + , (333, 0, "n") + , (334, 0, "f") + , (335, 0, "i") + , (336, 0, "g") + , (337, 0, "<") + , (338, 0, "/") + , (339, 0, "h") + , (340, 0, "2") + , (341, 0, ">") + , (368, 0, "\n") + , (369, 0, "#") + , (370, 0, "c") + , (371, 0, "o") + , (372, 0, "n") + , (373, 0, "f") + , (374, 0, "i") + , (375, 0, "g") + , (376, 0, " ") + , (377, 0, "{") + , (378, 0, "\n\t") + , (380, 0, "\n\t") + , (379, 1, "") + , (380, 1, "}") + , (379, 0, "\t") + , (380, 0, "m") + , (380, 1, "") + , (380, 0, "m") + , (381, 0, "a") + , (382, 0, "r") + , (383, 0, "g") + , (384, 0, "i") + , (385, 0, "n") + , (386, 0, "-") + , (387, 0, "t") + , (388, 0, "o") + , (389, 0, "p") + , (390, 0, ":") + , (391, 0, " ") + , (392, 0, "1") + , (392, 1, "") + , (392, 0, "2") + , (393, 0, "e") + , (394, 0, "m") + , (395, 0, ";") + , (342, 0, "\n\t\t") + , (345, 0, "<") + , (346, 0, "u") + , (346, 1, "") + , (346, 0, "b") + , (347, 0, "u") + , (348, 0, "t") + , (349, 0, "t") + , (350, 0, "o") + , (351, 0, "n") + , (352, 0, " ") + , (353, 0, "o") + , (354, 0, "n") + , (355, 0, ":") + , (356, 0, "c") + , (357, 0, "l") + , (358, 0, "i") + , (353, 6, "on:click=\"\"") + , (363, 1, "") + , (362, 1, "") + , (362, 0, "{") + , (363, 0, "}") + , (363, 0, "s") + , (364, 0, "t") + , (365, 0, "a") + , (366, 0, "r") + , (367, 0, "t") + , (369, 0, ">") + , (370, 0, "S") + , (371, 0, "t") + , (372, 0, "a") + , (373, 0, "r") + , (374, 0, "t") + , (375, 0, "<") + , (376, 0, "/") + , (376, 1, "/button>") + , (187, 0, "\n") + , (188, 0, "\n") + , (188, 0, "c") + , (189, 0, "o") + , (190, 0, "n") + , (191, 0, "s") + , (192, 0, "t") + , (193, 0, " ") + , (194, 0, "s") + , (195, 0, "t") + , (196, 0, "a") + , (197, 0, "r") + , (198, 0, "t") + , (199, 0, " ") + , (200, 0, "=") + , (201, 0, " ") + , (202, 0, "(") + , (203, 0, ")") + , (204, 0, " ") + , (205, 0, "=") + , (206, 0, ">") + , (207, 0, " ") + , (208, 0, "{") + , (209, 0, "\n\t") + , (211, 0, "\n\t") + , (210, 1, "") + , (211, 1, "}") + , (210, 0, "\t") + , (211, 0, "c") + , (212, 0, "o") + , (213, 0, "n") + , (214, 0, "s") + , (215, 0, "o") + , (216, 0, "l") + , (217, 0, "e") + , (211, 7, "console") + , (218, 0, ".") + , (219, 0, "l") + , (220, 0, "o") + , (221, 0, "g") + , (219, 3, "log") + , (222, 0, "(") + , (223, 0, "'") + , (224, 0, "s") + , (225, 0, "t") + , (226, 0, "a") + , (227, 0, "r") + , (228, 0, "t") + , (229, 0, "!") + , (230, 0, "'") + , (231, 0, ")") + , (187, 0, "\n\t") + , (189, 0, "\n\t") + , (188, 1, "") + , (189, 1, "") + , (188, 0, "c") + , (189, 0, "o") + , (190, 0, "n") + , (191, 0, "s") + , (192, 0, "t") + , (193, 0, " ") + , (194, 0, "u") + , (195, 0, "p") + , (196, 0, "d") + , (197, 0, "a") + , (198, 0, "t") + , (199, 0, "e") + , (200, 0, "_") + , (201, 0, "s") + , (202, 0, "t") + , (203, 0, "a") + , (204, 0, "t") + , (205, 0, "e") + , (206, 0, "=") + , (207, 0, " ") + , (207, 1, "") + , (206, 1, "") + , (206, 0, " ") + , (207, 0, "=") + , (208, 0, " ") + , (209, 0, "(") + , (210, 0, "p") + , (211, 0, "a") + , (212, 0, "t") + , (213, 0, "c") + , (214, 0, "h") + , (215, 0, ")") + , (216, 0, " ") + , (209, 8, "p") + , (210, 0, "a") + , (211, 0, "t") + , (212, 0, "c") + , (213, 0, "h") + , (214, 0, " ") + , (215, 0, "=") + , (216, 0, ">") + , (217, 0, " ") + , (218, 0, "{") + , (219, 0, "\n\t") + , (221, 0, "\n\t") + , (220, 1, "") + , (221, 1, "}") + , (220, 0, "\t") + , (221, 0, "f") + , (222, 0, "e") + , (223, 0, "t") + , (224, 0, "c") + , (225, 0, "h") + , (226, 0, "(") + , (209, 0, "a") + , (210, 0, "s") + , (211, 0, "y") + , (212, 0, "n") + , (213, 0, "c") + , (214, 0, " ") + , (227, 0, "a") + , (228, 0, "w") + , (229, 0, "a") + , (230, 0, "i") + , (231, 0, "t") + , (232, 0, " ") + , (232, 1, "") + , (227, 5, "") + , (227, 0, "await") + , (232, 0, " ") + , (239, 0, "{") + , (240, 0, "\n\t\t") + , (243, 0, "m") + , (244, 0, "e") + , (245, 0, "t") + , (246, 0, "h") + , (247, 0, "d") + , (248, 0, ":") + , (249, 0, " ") + , (243, 7, "m") + , (244, 0, "e") + , (245, 0, "t") + , (246, 0, "h") + , (247, 0, "o") + , (248, 0, "d") + , (249, 0, ":") + , (250, 0, " ") + , (251, 0, "'") + , (252, 0, "P") + , (253, 0, "O") + , (254, 0, "S") + , (255, 0, "T") + , (256, 0, "'") + , (257, 0, ",") + , (258, 0, "\n\t\t") + , (261, 0, "m") + , (262, 0, "d") + , (263, 0, "e") + , (263, 1, "") + , (262, 1, "") + , (262, 0, "o") + , (263, 0, "d") + , (264, 0, "e") + , (265, 0, ":") + , (266, 0, " ") + , (267, 0, "'") + , (268, 0, "s") + , (269, 0, "a") + , (268, 2, "same-origin") + , (279, 0, "'") + , (280, 0, ",") + , (281, 0, "\n\t\t") + , (284, 0, "h") + , (285, 0, "e") + , (286, 0, "a") + , (287, 0, "d") + , (288, 0, "e") + , (289, 0, "r") + , (290, 0, "s") + , (291, 0, ":") + , (292, 0, " ") + , (293, 0, "{") + , (294, 0, "\n\t\t\t") + , (298, 0, "'") + , (299, 0, "c") + , (300, 0, "o") + , (301, 0, "n") + , (302, 0, "t") + , (303, 0, "e") + , (304, 0, "n") + , (305, 0, "t") + , (306, 0, "-") + , (307, 0, "t") + , (308, 0, "y") + , (309, 0, "p") + , (310, 0, "e") + , (311, 0, "'") + , (312, 0, ",") + , (312, 1, "") + , (312, 0, ":") + , (313, 0, " ") + , (314, 0, "'") + , (315, 0, "a") + , (316, 0, "p") + , (317, 0, "p") + , (318, 0, "l") + , (319, 0, "i") + , (320, 0, "c") + , (321, 0, "a") + , (322, 0, "t") + , (323, 0, "i") + , (324, 0, "o") + , (325, 0, "n") + , (326, 0, "/") + , (327, 0, "j") + , (328, 0, "s") + , (329, 0, "o") + , (330, 0, "n") + , (331, 0, "'") + , (332, 0, ",") + , (333, 0, "\n\t\t\t") + , (334, 3, "\t\t}") + , (337, 0, ",") + , (338, 0, "\n\t\t") + , (341, 0, "b") + , (342, 0, "d") + , (342, 1, "") + , (342, 0, "o") + , (343, 0, "d") + , (344, 0, "y") + , (345, 0, ":") + , (346, 0, " ") + , (347, 0, "J") + , (348, 0, "S") + , (349, 0, "O") + , (350, 0, "N") + , (347, 4, "JSON") + , (351, 0, ".") + , (352, 0, "s") + , (353, 0, "t") + , (354, 0, "r") + , (355, 0, "i") + , (356, 0, "n") + , (357, 0, "g") + , (358, 0, "i") + , (359, 0, "f") + , (360, 0, "h") + , (360, 1, "") + , (360, 0, "y") + , (352, 9, "stringify") + , (361, 0, "(") + , (362, 0, "p") + , (363, 0, "a") + , (364, 0, "t") + , (365, 0, "c") + , (366, 0, "h") + , (367, 0, ")") + , (368, 0, "\n\t\t") + , (369, 2, "\t}") + , (239, 0, "'") + , (240, 0, "/") + , (240, 1, "") + , (239, 1, "") + , (239, 0, "`") + , (240, 0, "$") + , (241, 0, "{") + , (242, 0, "r") + , (243, 0, "o") + , (244, 0, "o") + , (245, 0, "m") + , (246, 0, "}") + , (247, 0, "/") + , (248, 0, "c") + , (249, 0, "o") + , (250, 0, "n") + , (251, 0, "f") + , (252, 0, "i") + , (253, 0, "g") + , (254, 0, "u") + , (255, 0, "r") + , (256, 0, "e") + , (257, 0, "`") + , (258, 0, ",") + , (259, 0, " ") + , (392, 0, ")") + , (441, 0, "\n\t") + , (443, 0, "u") + , (444, 0, "p") + , (445, 0, "d") + , (446, 0, "a") + , (443, 4, "update_state") + , (455, 0, "(") + , (456, 0, "{") + , (457, 0, "s") + , (458, 0, "t") + , (459, 0, "a") + , (460, 0, "t") + , (461, 0, "e") + , (462, 0, ":") + , (463, 0, " ") + , (464, 0, "'") + , (465, 0, "p") + , (466, 0, "l") + , (467, 0, "a") + , (468, 0, "y") + , (469, 0, "i") + , (470, 0, "n") + , (471, 0, "g") + , (472, 0, "'") + , (473, 0, "}") + , (474, 0, ")") + , (165, 0, " ") + , (166, 0, "=") + , (167, 0, " ") + , (168, 0, "n") + , (169, 0, "u") + , (170, 0, "l") + , (171, 0, "l") + , (165, 7, "") + , (595, 0, "\n\t") + , (596, 1, "") + , (595, 1, "") + , (633, 0, "\n\t\t") + , (636, 0, "{") + , (637, 0, "#") + , (638, 0, "i") + , (639, 0, "f") + , (639, 1, "") + , (638, 1, "") + , (637, 1, "") + , (637, 0, "i") + , (638, 0, "f") + , (637, 2, "if") + , (638, 1, "") + , (637, 1, "") + , (637, 0, "#") + , (638, 0, "i") + , (638, 1, "if }\n\t\t\t\n\t\t{/if") + , (641, 0, "s") + , (642, 0, "t") + , (643, 0, "a") + , (644, 0, "t") + , (645, 0, "e") + , (646, 0, " ") + , (647, 0, "=") + , (648, 0, "=") + , (649, 0, " ") + , (650, 0, "'") + , (651, 0, "w") + , (652, 0, "a") + , (653, 0, "i") + , (654, 0, "t") + , (655, 0, "i") + , (656, 0, "n") + , (657, 0, "g") + , (658, 0, "'") + , (713, 0, "\n\t\t{/if") + , (665, 7, "") + , (667, 0, "\t") + , (714, 0, "}") + , (663, 1, "") + , (661, 2, "") + , (660, 1, "") + , (703, 0, "\n\t\t\t") + , (707, 0, "{") + , (708, 0, "#") + , (708, 1, "") + , (708, 0, "e") + , (709, 0, "l") + , (709, 1, "") + , (708, 1, "") + , (708, 0, "e") + , (709, 0, "l") + , (708, 2, "else") + , (712, 0, "}") + , (704, 3, "\t\t") + , (707, 4, "") + , (707, 0, "#") + , (708, 0, "e") + , (709, 0, "l") + , (710, 0, "i") + , (711, 0, "f") + , (707, 1, "") + , (707, 0, ":") + , (708, 4, "e") + , (709, 0, "l") + , (710, 0, "s") + , (711, 0, "e") + , (712, 0, " ") + , (713, 0, "i") + , (714, 0, "f") + , (715, 0, " ") + , (716, 0, "s") + , (717, 0, "t") + , (718, 0, "a") + , (719, 0, "t") + , (720, 0, "e") + , (721, 0, " ") + , (722, 0, "=") + , (723, 0, "=") + , (724, 0, " ") + , (725, 0, "'") + , (726, 0, "p") + , (727, 0, "l") + , (728, 0, "a") + , (729, 0, "y") + , (730, 0, "i") + , (731, 0, "n") + , (732, 0, "g") + , (733, 0, "'") + , (661, 0, "\t\t\t\n") + , (746, 32, "") + , (704, 0, "\t\t\t{:else if state == 'playing'}\n") + , (704, 3, "\t\t") + , (682, 5, "") + , (682, 0, "(") + , (683, 0, ")") + , (684, 0, " ") + , (685, 0, "=") + , (686, 0, ">") + , (687, 0, " ") + , (688, 0, "update_state({state: 'playing'})") + , (476, 0, "// ") + , (442, 0, "// ") + , (419, 0, "// ") + , (397, 0, "// ") + , (802, 5, "update_state({state: 'playing'})") + , (802, 0, "(") + , (803, 0, ")") + , (804, 0, " ") + , (805, 0, "=") + , (806, 0, ">") + , (807, 0, " ") + , (830, 7, "p") + , (831, 0, "a") + , (832, 0, "u") + , (833, 0, "s") + , (834, 0, "e") + , (835, 0, "d") + , (841, 5, "P") + , (842, 0, "a") + , (843, 0, "u") + , (844, 0, "s") + , (845, 0, "e") + , (749, 0, "\t\t{:else if state == 'playing'}\n") + , (749, 32, "") + , ( 749 + , 0 + , "\t\t{:else if state == 'playing'}\n\t\t\t\n" + ) + , (878, 7, "p") + , (879, 0, "a") + , (880, 0, "u") + , (881, 0, "s") + , (882, 0, "e") + , (883, 0, "d") + , (936, 6, "r") + , (937, 0, "e") + , (938, 0, "s") + , (939, 0, "u") + , (940, 0, "m") + , (941, 0, "e") + , (936, 6, "p") + , (937, 0, "l") + , (938, 0, "a") + , (939, 0, "y") + , (940, 0, "i") + , (941, 0, "n") + , (942, 0, "g") + , (948, 5, "R") + , (949, 0, "e") + , (950, 0, "s") + , (951, 0, "u") + , (952, 0, "m") + , (953, 0, "e") + , (971, 0, "\n\t\t") + , (974, 0, "\n\t\t") + , (972, 2, "") + , (975, 0, "<") + , (976, 0, "l") + , (977, 0, "a") + , (978, 0, "b") + , (979, 0, "e") + , (980, 0, "l") + , (981, 0, ">") + , (982, 0, "N") + , (983, 0, "u") + , (984, 0, "m") + , (985, 0, "b") + , (986, 0, "e") + , (987, 0, "r") + , (988, 0, " ") + , (989, 0, "o") + , (990, 0, "f") + , (991, 0, " ") + , (992, 0, "p") + , (993, 0, "l") + , (994, 0, "a") + , (995, 0, "y") + , (996, 0, "e") + , (997, 0, "r") + , (998, 0, "s") + , (999, 0, "<") + , (1000, 0, "i") + , (1001, 0, "n") + , (1002, 0, "p") + , (1003, 0, "u") + , (1004, 0, "t") + , (1005, 0, " ") + , (1006, 0, "t") + , (1007, 0, "y") + , (1008, 0, "p") + , (1009, 0, "e") + , (1010, 0, "=") + , (1011, 0, "n") + , (1012, 0, "u") + , (1013, 0, "m") + , (1014, 0, "b") + , (1011, 0, "'") + , (1016, 0, "e") + , (1017, 0, "r") + , (1018, 0, "'") + , (1019, 0, ">") + , (1020, 0, "<") + , (1021, 0, "/") + , (1022, 0, "l") + , (1021, 2, "/label>") + , (1028, 0, ">") + , (1028, 1, "") + , (975, 0, "<") + , (976, 0, "d") + , (977, 0, "i") + , (978, 0, "v") + , (979, 0, ">") + , (980, 0, "
") + , (980, 6, "") + , (980, 0, "\n\t\t\t") + , (1037, 0, "\n\t\t\t") + , (1041, 0, "") + , (1038, 3, "\t\t") + , (1028, 0, " ") + , (1029, 0, "v") + , (1030, 0, "a") + , (1031, 0, "l") + , (1032, 0, "u") + , (1029, 4, "") + , (1029, 0, "b") + , (1030, 0, "i") + , (1031, 0, "n") + , (1032, 0, "d") + , (1033, 0, ":") + , (1029, 5, "") + , (1029, 0, "o") + , (1030, 0, "n") + , (1031, 0, ":") + , (1032, 0, "i") + , (1033, 0, "n") + , (1034, 0, "p") + , (1029, 6, "on:input=\"\"") + , (1039, 1, "") + , (1038, 1, "") + , (395, 0, "\n") + , (396, 0, "\n") + , (397, 0, "c") + , (398, 0, "o") + , (399, 0, "n") + , (400, 0, "s") + , (401, 0, "t") + , (402, 0, " ") + , (403, 0, "p") + , (404, 0, "a") + , (405, 0, "t") + , (406, 0, "c") + , (407, 0, "h") + , (408, 0, " ") + , (409, 0, "=") + , (410, 0, " ") + , (403, 8, "u") + , (404, 0, "p") + , (405, 0, "d") + , (406, 0, " ") + , (407, 0, "=") + , (408, 0, " ") + , (409, 0, "(") + , (410, 0, "p") + , (411, 0, "a") + , (412, 0, "t") + , (413, 0, "c") + , (414, 0, "h") + , (409, 1, "") + , (414, 0, " ") + , (414, 1, "") + , (414, 0, ">") + , (415, 0, " ") + , (415, 1, "") + , (414, 1, "") + , (414, 0, " ") + , (415, 0, "=") + , (416, 0, ">") + , (417, 0, " ") + , (418, 0, "(") + , (419, 0, ")") + , (420, 0, " ") + , (421, 0, "=") + , (422, 0, ">") + , (423, 0, " ") + , (424, 0, "u") + , (425, 0, "p") + , (426, 0, "d") + , (427, 0, "a") + , (428, 0, "t") + , (429, 0, "e") + , (424, 6, "update_state") + , (436, 0, "(") + , (437, 0, "p") + , (438, 0, "a") + , (439, 0, "t") + , (440, 0, "c") + , (441, 0, "h") + , (442, 0, ")") + , (956, 18, "u") + , (850, 18, "u") + , (742, 18, "u") + , (923, 0, "p") + , (834, 0, "p") + , (743, 0, "p") + , (926, 0, "d") + , (836, 0, "d") + , (744, 0, "d") + , (1041, 0, "{") + , (1042, 0, "u") + , (1043, 0, "p") + , (1044, 0, "d") + , (1042, 3, "upd") + , (1045, 0, "(") + , (409, 5, "") + , (409, 0, "(") + , (410, 0, "k") + , (8, 0, "\nimport { kMaxLength } from \"buffer\"\n") + , (447, 1, "kMaxLength") + , (457, 0, ",") + , (458, 0, " ") + , (459, 0, "v") + , (460, 0, ")") + , (458, 3, "") + , (457, 1, "") + , (447, 10, "k") + , (8, 37, "") + , (411, 0, ",") + , (412, 0, " ") + , (413, 0, "v") + , (414, 0, ")") + , (438, 5, "") + , (438, 0, "{") + , (439, 0, "[") + , (440, 0, "k") + , (441, 0, "]") + , (442, 0, ":") + , (443, 0, " ") + , (444, 0, "v") + , (445, 0, "}") + , (934, 1, "") + , (843, 1, "") + , (750, 1, "") + , (932, 0, "'") + , (842, 0, "'") + , (750, 0, "'") + , (940, 0, "'") + , (849, 0, "'") + , (756, 0, "'") + , (943, 1, "") + , (851, 1, "") + , (757, 1, "") + , (941, 0, ",") + , (850, 0, ",") + , (757, 0, ",") + , (768, 1, "") + , (860, 1, "") + , (952, 1, "") + , (1046, 4, "") + , (1036, 10, "") + , (1035, 1, "") + , (1035, 0, " on:input={") + , (1046, 0, "}") + , (1046, 0, "(") + , (1047, 0, ")") + , (448, 0, "\n") + , (449, 0, "c") + , (450, 0, "o") + , (451, 0, "n") + , (452, 0, "s") + , (453, 0, "t") + , (454, 0, " ") + , (455, 0, "c") + , (456, 0, "o") + , (457, 0, "n") + , (458, 0, "f") + , (459, 0, "i") + , (460, 0, "g") + , (461, 0, " ") + , (462, 0, "=") + , (463, 0, " ") + , (464, 0, "k") + , (465, 0, " ") + , (466, 0, "=") + , (467, 0, ">") + , (468, 0, " ") + , (469, 0, "(") + , (470, 0, "e") + , (471, 0, ")") + , (471, 1, "") + , (470, 1, "") + , (469, 1, "") + , (469, 0, "e") + , (470, 0, " ") + , (471, 0, "=") + , (472, 0, ">") + , (473, 0, " ") + , (474, 0, "{") + , (475, 0, "\n\t") + , (477, 0, "\n\t") + , (476, 1, "") + , (477, 1, "}") + , (476, 0, "\t") + , (477, 0, "c") + , (478, 0, "o") + , (479, 0, "n") + , (480, 0, "s") + , (481, 0, "o") + , (482, 0, "l") + , (483, 0, "e") + , (477, 7, "console") + , (484, 0, ".") + , (485, 0, "l") + , (486, 0, "o") + , (487, 0, "g") + , (485, 3, "log") + , (488, 0, "(") + , (489, 0, "'") + , (490, 0, "k") + , (491, 0, "'") + , (492, 0, ",") + , (493, 0, " ") + , (494, 0, "k") + , (495, 0, ",") + , (496, 0, " ") + , (497, 0, "e") + , (498, 0, ")") + , (1100, 1, "") + , (1099, 1, "") + , (1099, 0, "c") + , (1100, 0, "o") + , (1101, 0, "n") + , (1102, 0, "f") + , (1103, 0, "i") + , (1104, 0, "g") + , (1099, 6, "config") + , (1105, 0, "(") + , (1106, 0, "'") + , (1107, 0, "p") + , (1108, 0, "l") + , (1109, 0, "a") + , (1110, 0, "y") + , (1111, 0, "i") + , (1112, 0, "n") + , (1112, 1, "") + , (1111, 1, "") + , (1111, 0, "e") + , (1112, 0, "r") + , (1113, 0, "s") + , (1114, 0, "'") + , (1115, 0, ")") + , (1068, 0, "\n\t\t\t\t") + , (1123, 0, "\n\t\t\t") + , (498, 0, ".") + , (499, 0, "v") + , (500, 0, "a") + , (501, 0, "l") + , (502, 0, "u") + , (503, 0, "e") + , (499, 5, "d") + , (500, 0, "a") + , (501, 0, "t") + , (502, 0, "a") + , (504, 0, "\n\t") + , (506, 0, "u") + , (507, 0, "p") + , (508, 0, "d") + , (509, 0, "a") + , (506, 4, "update_state") + , (518, 0, "(") + , (519, 0, "k") + , (520, 0, ",") + , (521, 0, " ") + , (521, 1, "") + , (520, 1, "") + , (519, 1, "") + , (519, 0, "{") + , (520, 0, "[") + , (521, 0, "k") + , (522, 0, "]") + , (523, 0, ":") + , (524, 0, " ") + , (525, 0, "e") + , (526, 0, ".") + , (527, 0, "d") + , (528, 0, "a") + , (529, 0, "t") + , (530, 0, "a") + , (531, 0, "}") + , (532, 0, ")") + , (1127, 0, " ") + , (1128, 0, "v") + , (1129, 0, "a") + , (1130, 0, "l") + , (1131, 0, "u") + , (1132, 0, "e") + , (1133, 0, "=") + , (1134, 0, "{") + , (1135, 0, "p") + , (1136, 0, "l") + , (1137, 0, "a") + , (1138, 0, "y") + , (1139, 0, "e") + , (1140, 0, "r") + , (1141, 0, "s") + , (1142, 0, "}") + , (1173, 0, " -->") + , (1107, 0, "\n" + ) + , (1258, 4, "") + , (1187, 5, "") + , (1200, 6, "r") + , (1201, 0, "a") + , (1202, 0, "n") + , (1203, 0, "g") + , (1204, 0, "e") + , (1251, 0, " ") + , (1252, 0, "m") + , (1253, 0, "o") + , (1254, 0, "i") + , (1255, 0, "n") + , (1255, 1, "") + , (1254, 1, "") + , (1253, 1, "") + , (1253, 0, "i") + , (1254, 0, "n") + , (1255, 0, "=") + , (1256, 0, "1") + , (1257, 0, " ") + , (1258, 0, "m") + , (1259, 0, "a") + , (1260, 0, "x") + , (1261, 0, "=") + , (1262, 0, "1") + , (1263, 0, "2") + , (497, 0, "e") + , (498, 0, ",") + , (499, 0, " ") + , (506, 0, ",") + , (507, 0, " ") + , (508, 0, "e") + , (509, 0, ".") + , (510, 0, "d") + , (510, 1, "") + , (510, 0, "v") + , (511, 0, "a") + , (512, 0, "l") + , (513, 0, "u") + , (514, 0, "e") + , (1238, 5, "s") + , (1239, 0, "u") + , (1240, 0, "b") + , (1241, 0, "m") + , (1242, 0, "i") + , (1243, 0, "t") + , (1278, 0, " -->") + , (1199, 0, "\n\t\t\t\n\t\t\n" + ) + , (1311, 0, "\n\t\t") + , (1343, 7, "r") + , (1312, 2, "") + , (1341, 1, "") + , (1341, 0, "r") + , (1342, 0, "o") + , (1343, 0, "u") + , (1344, 0, "n") + , (1345, 0, "d") + , (1346, 0, "s") + , (1406, 7, "r") + , (1380, 7, "r") + , (1401, 0, "o") + , (1381, 0, "o") + , (1403, 0, "u") + , (1382, 0, "u") + , (1405, 0, "n") + , (1383, 0, "n") + , (1407, 0, "d") + , (1384, 0, "d") + , (1409, 0, "s") + , (1385, 0, "s") + , (1391, 4, "i") + , (1159, 4, "i") + , (1389, 0, "n") + , (1160, 0, "n") + , (1391, 0, "p") + , (1161, 0, "p") + , (1393, 0, "u") + , (1162, 0, "u") + , (1395, 0, "t") + , (1163, 0, "t") + , (499, 1, "") + , (498, 1, "") + , (497, 1, "") + , (1182, 12, "") + , (512, 0, ",") + , (513, 0, " ") + , (514, 0, "e") + , (515, 0, ".") + , (516, 0, "t") + , (517, 0, "a") + , (518, 0, "r") + , (519, 0, "g") + , (520, 0, "e") + , (521, 0, "t") + , (522, 0, ".") + , (523, 0, "v") + , (524, 0, "a") + , (525, 0, "l") + , (526, 0, "u") + , (527, 0, "e") + , (552, 4, "t") + , (553, 0, "a") + , (554, 0, "r") + , (555, 0, "g") + , (556, 0, "e") + , (557, 0, "t") + , (558, 0, ".") + , (559, 0, "v") + , (560, 0, "a") + , (561, 0, "l") + , (562, 0, "u") + , (563, 0, "e") + , (1205, 0, " ") + , (1206, 0, "min=1 max=12") + , (528, 0, ",") + , (529, 0, " ") + , (530, 0, "e") + , (531, 0, ".") + , (532, 0, "t") + , (533, 0, "a") + , (534, 0, "r") + , (535, 0, "g") + , (536, 0, "e") + , (537, 0, "t") + , (538, 0, ".") + , (539, 0, "t") + , (540, 0, "y") + , (541, 0, "p") + , (542, 0, "e") + , (544, 0, "\n\t") + , (546, 0, "c") + , (547, 0, "o") + , (548, 0, "n") + , (549, 0, "s") + , (550, 0, "t") + , (551, 0, " ") + , (552, 0, "v") + , (553, 0, "a") + , (554, 0, "l") + , (555, 0, "u") + , (556, 0, "e") + , (557, 0, " ") + , (558, 0, "=") + , (559, 0, " ") + , (560, 0, "e.target.type") + , (573, 0, " ") + , (574, 0, "=") + , (575, 0, "=") + , (576, 0, "=") + , (577, 0, " ") + , (578, 0, "'") + , (579, 0, "n") + , (580, 0, "u") + , (581, 0, "m") + , (582, 0, "b") + , (583, 0, "e") + , (584, 0, "r") + , (585, 0, "'") + , (586, 0, " ") + , (587, 0, "?") + , (588, 0, " ") + , (589, 0, "e.target.value") + , (603, 0, "|") + , (604, 0, "0") + , (605, 0, " ") + , (606, 0, ":") + , (607, 0, " ") + , (608, 0, "e.target.value") + , (544, 0, "\n\t") + , (546, 0, "c") + , (547, 0, "o") + , (548, 0, "n") + , (549, 0, "s") + , (550, 0, "t") + , (551, 0, " ") + , (552, 0, "r") + , (553, 0, "a") + , (554, 0, "w") + , (555, 0, "+") + , (555, 1, "") + , (555, 0, "_") + , (556, 0, "v") + , (557, 0, "a") + , (558, 0, "l") + , (559, 0, "u") + , (560, 0, "e") + , (561, 0, " ") + , (562, 0, "=") + , (563, 0, " ") + , (564, 0, "e.target.value") + , (642, 14, "r") + , (623, 14, "r") + , (630, 0, "a") + , (624, 0, "a") + , (632, 0, "w") + , (625, 0, "w") + , (634, 0, "_") + , (626, 0, "_") + , (636, 0, "v") + , (627, 0, "v") + , (638, 0, "a") + , (628, 0, "a") + , (640, 0, "l") + , (629, 0, "l") + , (642, 0, "u") + , (630, 0, "u") + , (644, 0, "e") + , (631, 0, "e") + , (667, 14, "v") + , (668, 0, "a") + , (669, 0, "l") + , (670, 0, "u") + , (671, 0, "e") + , (887, 0, "\n\t") + , (889, 0, "\n\t") + , (888, 1, "") + , (890, 0, "<") + , (891, 0, "d") + , (892, 0, "i") + , (893, 0, "v") + , (894, 0, " ") + , (895, 0, "i") + , (896, 0, "d") + , (897, 0, "=") + , (898, 0, "r") + , (899, 0, "o") + , (900, 0, "u") + , (901, 0, "n") + , (902, 0, "d") + , (903, 0, "s") + , (904, 0, ">") + , (904, 0, "'") + , (898, 0, "'") + , (907, 0, "\n\t\t") + , (910, 0, "<") + , (911, 0, "/") + , (912, 0, "d") + , (913, 0, "i") + , (914, 0, "v") + , (908, 7, "\t") + , (907, 0, "\n\t\t") + , (910, 0, "{") + , (911, 0, "#") + , (912, 0, "f") + , (770, 0, "\n") + , (771, 0, "\n") + , (771, 0, "c") + , (772, 0, "o") + , (773, 0, "n") + , (774, 0, "t") + , (774, 1, "") + , (774, 0, "s") + , (775, 0, "t") + , (776, 0, " ") + , (777, 0, "r") + , (778, 0, "o") + , (779, 0, "u") + , (780, 0, "n") + , (781, 0, "d") + , (782, 0, "s") + , (783, 0, " ") + , (784, 0, "=") + , (785, 0, " ") + , (786, 0, "n") + , (787, 0, "e") + , (788, 0, "w") + , (789, 0, " ") + , (790, 0, "A") + , (791, 0, "r") + , (792, 0, "r") + , (793, 0, "a") + , (794, 0, "y") + , (790, 5, "Array") + , (795, 0, "(") + , (771, 5, "l") + , (772, 0, "e") + , (773, 0, "t") + , (780, 1, "") + , (780, 0, "_") + , (781, 0, "a") + , (782, 0, "r") + , (783, 0, "r") + , (797, 0, "r") + , (798, 0, "o") + , (799, 0, "u") + , (800, 0, "n") + , (801, 0, "d") + , (802, 0, "s") + , (803, 0, ")") + , (804, 0, ".") + , (805, 0, "f") + , (806, 0, "i") + , (807, 0, "l") + , (808, 0, "l") + , (805, 4, "fill") + , (809, 0, "(") + , (810, 0, ")") + , (811, 0, ".") + , (812, 0, "m") + , (813, 0, "a") + , (814, 0, "p") + , (804, 11, "") + , (804, 0, ".") + , (805, 0, "f") + , (806, 0, "i") + , (807, 0, "l") + , (808, 0, "l") + , (805, 4, "fill") + , (809, 0, "(") + , (810, 0, ")") + , (954, 1, "") + , (954, 0, "e") + , (955, 0, "a") + , (956, 0, "c") + , (957, 0, "h") + , (958, 0, " ") + , (959, 0, "r") + , (960, 0, "o") + , (961, 0, "u") + , (962, 0, "n") + , (963, 0, "d") + , (964, 0, "_") + , (965, 0, "a") + , (966, 0, "r") + , (967, 0, "r") + , (968, 0, " ") + , (969, 0, "a") + , (970, 0, "s") + , (971, 0, " ") + , (972, 0, "_") + , (973, 0, ",") + , (974, 0, " ") + , (975, 0, "i") + , (976, 0, "}") + , (977, 0, "\n\t\t") + , (980, 0, "\n\t\t") + , (978, 2, "") + , (981, 0, "{") + , (982, 0, "/") + , (983, 0, "e") + , (984, 0, "a") + , (983, 2, "each") + , (987, 0, "}") + , (978, 0, "\t\t") + , (980, 0, "\t") + , (981, 0, "<") + , (982, 0, "d") + , (983, 0, "i") + , (984, 0, "v") + , (985, 0, ">") + , (986, 0, "R") + , (987, 0, "o") + , (988, 0, "u") + , (989, 0, "n") + , (990, 0, "d") + , (991, 0, " ") + , (992, 0, "{") + , (993, 0, "i") + , (994, 0, "}") + , (995, 0, "<") + , (996, 0, "/") + , (997, 0, "d") + , (998, 0, "i") + , (999, 0, "v") + , (1000, 0, ">") + , (797, 0, "M") + , (798, 0, "a") + , (799, 0, "t") + , (800, 0, "h") + , (801, 0, ".") + , (802, 0, "m") + , (803, 0, "i") + , (804, 0, "n") + , (804, 1, "") + , (803, 1, "") + , (803, 0, "a") + , (804, 0, "x") + , (802, 3, "max") + , (805, 0, "(") + , (812, 0, ",") + , (813, 0, " ") + , (814, 0, "0") + , (815, 0, ")") + , (784, 0, "\n") + , (785, 0, "$") + , (786, 0, ":") + , (786, 1, "") + , (785, 1, "") + , (785, 0, ":") + , (786, 0, "$") + , (786, 1, "") + , (785, 1, "") + , (785, 0, "$") + , (786, 0, ":") + , (787, 0, " ") + , (788, 0, "r") + , (789, 0, "o") + , (790, 0, "u") + , (791, 0, "n") + , (792, 0, "d") + , (793, 0, "_") + , (788, 6, "round_arr") + , (1020, 0, "+") + , (1021, 0, "1") + , (1023, 0, ":") + , (1024, 0, "\n\t\t\t\t\n\t\t\t") + , (1025, 4, "") + , (985, 9, "A") + , (986, 0, "r") + , (987, 0, "r") + , (988, 0, "a") + , (989, 0, "y") + , (985, 5, "Array") + , (990, 0, "(") + , (991, 0, "r") + , (992, 0, "o") + , (993, 0, "u") + , (994, 0, "n") + , (995, 0, "d") + , (996, 0, "s") + , (997, 0, ")") + , (785, 0, "// ") + , (771, 0, "// ") + , (997, 0, "M") + , (998, 0, "a") + , (999, 0, "t") + , (1000, 0, "h") + , (1001, 0, ".") + , (1002, 0, "m") + , (1003, 0, "a") + , (1004, 0, "x") + , (1002, 3, "max") + , (1005, 0, "(") + , (1012, 0, ",") + , (1013, 0, " ") + , (1014, 0, "0") + , (1015, 0, ")") + , (1048, 0, "\t\t\t\t") + , (1052, 0, "{#each Array(Math.max(rounds, 0)) as _, i}") + , (1074, 6, "p") + , (1075, 0, "l") + , (1076, 0, "a") + , (1077, 0, "y") + , (1078, 0, "e") + , (1079, 0, "r") + , (1080, 0, "s") + , (1095, 0, "\n\t\t\t\t") + , (1100, 0, "<") + , (1100, 1, "") + , (1100, 0, "{") + , (1101, 0, "/") + , (1102, 0, "e") + , (1103, 0, "a") + , (1104, 0, "c") + , (1105, 0, "h") + , (1106, 0, ">") + , (1106, 1, "") + , (1106, 0, "}") + , (1095, 0, "\n\t\t\t\t") + , (1100, 0, "\t") + , (1101, 0, "<") + , (1102, 0, "s") + , (1103, 0, "p") + , (1104, 0, "a") + , (1105, 0, "n") + , (1106, 0, ">") + , (1107, 0, "") + , (1107, 0, "{") + , (1093, 1, "") + , (1024, 1, "") + , (1024, 0, "r") + , (1042, 1, "") + , (1042, 0, "r") + , (1093, 0, "p") + , (1108, 0, "p") + , (1109, 0, "+") + , (1110, 0, "1") + , (1111, 0, "}") + , (1119, 0, " ") + , (1119, 1, "") + , (1112, 0, " ") + , (2004, 0, "\n") + , (2005, 0, "l") + , (2006, 0, "a") + , (2007, 0, "b") + , (2008, 0, "e") + , (2009, 0, "l") + , (2010, 0, " ") + , (2011, 0, "{") + , (2012, 0, "\n\t") + , (2014, 0, "\n\t") + , (2013, 1, "") + , (2014, 1, "}") + , (2013, 0, "\t") + , (2014, 0, "d") + , (2015, 0, "i") + , (2016, 0, "s") + , (2017, 0, "p") + , (2018, 0, "l") + , (2019, 0, "a") + , (2020, 0, "y") + , (2021, 0, ":") + , (2022, 0, " ") + , (2023, 0, "b") + , (2024, 0, "l") + , (2025, 0, "o") + , (2026, 0, "c") + , (2027, 0, "k") + , (2028, 0, ";") + , (1719, 5, "") + , (1483, 5, "") + , (1917, 3, "\t\t") + , (1824, 4, "\t\t\t") + , (1742, 4, "\t\t\t") + , (1715, 3, "\t\t") + , (1712, 2, "\t") + , (1690, 3, "\t\t") + , (1597, 4, "\t\t\t") + , (1512, 4, "\t\t\t") + , (1484, 3, "\t\t") + , (1481, 2, "\t") + , (1919, 8, "") + , (1697, 8, "") + , (1910, 1, "") + , (1696, 1, "") + , (1698, 1, "") + , (1697, 1, "") + , (1480, 1, "") + , (1480, 1, "\n\t\t") + , (1480, 0, "\n\t\t") + , ( 1700 + , 0 + , "\n\t\t" + ) + , (1481, 2, "") + , (1481, 1, "") + , (1697, 0, "\n\t\t") + , (1698, 2, "") + , (1482, 1, "") + , (1481, 1, "") + , (1480, 1, "") + , (1490, 17, "M") + , (1491, 0, "e") + , (1492, 0, "d") + , (1493, 0, "i") + , (1494, 0, "t") + , (1495, 0, "a") + , (1496, 0, "t") + , (1497, 0, "e") + , (1498, 0, " ") + , (1499, 0, "b") + , (1500, 0, "e") + , (1501, 0, "f") + , (1502, 0, "o") + , (1503, 0, "r") + , (1504, 0, "e") + , (1505, 0, " ") + , (1506, 0, "g") + , (1507, 0, "a") + , (1508, 0, "m") + , (1509, 0, "e") + , (1510, 0, " ") + , (1511, 0, "s") + , (1512, 0, "t") + , (1513, 0, "a") + , (1514, 0, "r") + , (1515, 0, "t") + , (1490, 0, "1") + , (1491, 0, " ") + , (1492, 0, "m") + , (1493, 0, "i") + , (1494, 0, "n") + , (1495, 0, "u") + , (1496, 0, "t") + , (1497, 0, "e") + , (1498, 0, " ") + , (1499, 1, "") + , (1499, 0, "m") + , (1506, 1, "") + , (1506, 0, "a") + , (1506, 1, "") + , (1506, 0, "i") + , (1507, 0, "o") + , (1508, 0, "n") + , (1527, 0, "s") + , (1544, 8, "c") + , (1545, 0, "h") + , (1546, 0, "e") + , (1547, 0, "c") + , (1548, 0, "k") + , (1549, 0, "b") + , (1550, 0, "o") + , (1551, 0, "x") + , (1552, 0, "'") + , (1544, 0, "'") + , (87, 0, "\n\texport let players") + , (80, 7, "m") + , (81, 0, "e") + , (82, 0, "d") + , (83, 0, "i") + , (84, 0, "t") + , (85, 0, "a") + , (86, 0, "t") + , (87, 0, "e") + , (1583, 7, "") + , (1583, 0, "m") + , (1584, 0, "e") + , (1585, 0, "d") + , (1586, 0, "i") + , (1587, 0, "t") + , (1588, 0, "a") + , (1589, 0, "t") + , (1590, 0, "e") + , (1611, 7, "m") + , (1612, 0, "e") + , (1613, 0, "d") + , (1614, 0, "i") + , (1615, 0, "t") + , (1616, 0, "a") + , (1617, 0, "t") + , (1618, 0, "e") + , (1623, 13, "") + , (641, 1, "") + , (641, 0, " ") + , (655, 1, "") + , (655, 0, "\n\t") + , (657, 0, "\t") + , (660, 0, "\n\t\t") + , (663, 0, ":") + , (664, 0, " ") + , (660, 0, "e") + , (661, 0, ".") + , (662, 0, "t") + , (663, 0, "a") + , (664, 0, "r") + , (665, 0, "g") + , (666, 0, "e") + , (667, 0, "t") + , (668, 0, ".") + , (669, 0, "t") + , (670, 0, "y") + , (671, 0, "p") + , (672, 0, "e") + , (673, 0, " ") + , (674, 0, "=") + , (675, 0, "=") + , (676, 0, "=") + , (677, 0, " ") + , (678, 0, "'") + , (679, 0, "c") + , (680, 0, "h") + , (681, 0, "e") + , (682, 0, "c") + , (683, 0, "k") + , (684, 0, "b") + , (685, 0, "o") + , (686, 0, "x") + , (687, 0, "'") + , (688, 0, " ") + , (689, 0, "?") + , (690, 0, " ") + , (691, 0, "e") + , (692, 0, ".") + , (693, 0, "t") + , (694, 0, "a") + , (695, 0, "r") + , (696, 0, "g") + , (697, 0, "e") + , (698, 0, "t") + , (699, 0, ".") + , (700, 0, "c") + , (701, 0, "h") + , (702, 0, "e") + , (703, 0, "c") + , (704, 0, "k") + , (705, 0, "e") + , (706, 0, "d") + , (1056, 0, "\n\t\t") + , (1059, 0, "<") + , (1060, 0, "h") + , (1061, 0, "2") + , (1062, 0, ">") + , (1063, 0, "G") + , (1064, 0, "a") + , (1065, 0, "m") + , (1066, 0, "e") + , (1067, 0, " ") + , (1068, 0, "s") + , (1069, 0, "t") + , (1070, 0, "r") + , (1071, 0, "u") + , (1072, 0, "c") + , (1073, 0, "t") + , (1074, 0, "u") + , (1075, 0, "r") + , (1076, 0, "e") + , (1077, 0, "<") + , (1078, 0, "/") + , (1079, 0, "h") + , (1080, 0, "2") + , (1081, 0, ">") + , (1082, 0, "\n\t\t") + , (1085, 0, "{") + , (1086, 0, "i") + , (1087, 0, "f") + , (1088, 0, " ") + , (1089, 0, "m") + , (1090, 0, "e") + , (1091, 0, "d") + , (1092, 0, "i") + , (1089, 4, "meditate") + , (1097, 0, "}") + , (1098, 0, "\n\t\t") + , (1101, 0, "\t") + , (1102, 0, "<") + , (1103, 0, "d") + , (1104, 0, "i") + , (1105, 0, "v") + , (1106, 0, ">") + , (1107, 0, "M") + , (1108, 0, "e") + , (1109, 0, "d") + , (1110, 0, "i") + , (1111, 0, "t") + , (1112, 0, "a") + , (1113, 0, "t") + , (1114, 0, "i") + , (1115, 0, "o") + , (1116, 0, "n") + , (1117, 0, "<") + , (1118, 0, "/") + , (1119, 0, "d") + , (1120, 0, "i") + , (1121, 0, "v") + , (1122, 0, ">") + , (1123, 0, "\n\t\t\t") + , (1127, 0, "<") + , (1127, 1, "") + , (1127, 0, "[") + , (1127, 1, "") + , (1127, 0, "{") + , (1128, 0, "/") + , (1129, 0, "i") + , (1130, 0, "f") + , (1131, 0, "}") + , (1124, 3, "\t\t") + , (1086, 0, "#") + , (1036, 0, "\n\t") + , (1038, 0, "\n\t") + , (1037, 1, "") + , (1039, 0, "<") + , (1040, 0, "d") + , (1041, 0, "i") + , (1042, 0, "v") + , (1043, 0, ">") + , (1043, 0, " ") + , (1044, 0, "i") + , (1045, 0, "d") + , (1046, 0, "=") + , (1047, 0, "p") + , (1048, 0, "r") + , (1049, 0, "o") + , (1050, 0, "g") + , (1051, 0, "r") + , (1052, 0, "e") + , (1053, 0, "s") + , (1054, 0, "s") + , (1055, 0, "'") + , (1047, 0, "'") + , (1058, 0, "<") + , (1059, 0, "/") + , (1060, 0, "d") + , (1061, 0, "i") + , (1062, 0, "c") + , (1063, 0, ">") + , (1063, 1, "") + , (1062, 1, "") + , (1062, 0, "v") + , (1063, 0, ">") + , (2395, 0, "\n") + , (2396, 0, "\n") + , (2397, 0, "#") + , (2398, 0, "p") + , (2399, 0, "r") + , (2400, 0, "o") + , (2401, 0, "g") + , (2402, 0, "r") + , (2403, 0, "e") + , (2404, 0, "s") + , (2405, 0, "s") + , (2406, 0, " ") + , (2407, 0, "{") + , (2408, 0, "\n\t") + , (2410, 0, "\n\t") + , (2409, 1, "") + , (2410, 1, "}") + , (2409, 0, "\t") + , (2410, 0, "w") + , (2411, 0, "i") + , (2412, 0, "d") + , (2413, 0, "t") + , (2414, 0, "h") + , (2415, 0, ":") + , (2416, 0, " ") + , (2417, 0, "1") + , (2418, 0, "0") + , (2419, 0, "0") + , (2420, 0, "%") + , (2421, 0, ";") + , (2422, 0, "\n\t") + , (2424, 0, "h") + , (2425, 0, "e") + , (2426, 0, "i") + , (2427, 0, "g") + , (2428, 0, "h") + , (2429, 0, "t") + , (2430, 0, ":") + , (2431, 0, " ") + , (2432, 0, "3") + , (2433, 0, "e") + , (2434, 0, "m") + , (2435, 0, ":") + , (2435, 1, "") + , (2435, 0, ";") + , (2436, 0, "\n\t") + , (2438, 0, "b") + , (2439, 0, "o") + , (2440, 0, "r") + , (2441, 0, "d") + , (2442, 0, "e") + , (2443, 0, "r") + , (2444, 0, ":") + , (2445, 0, " ") + , (2446, 0, "1") + , (2447, 0, "p") + , (2448, 0, "x") + , (2449, 0, " ") + , (2450, 0, "s") + , (2451, 0, "o") + , (2452, 0, "l") + , (2453, 0, "i") + , (2454, 0, "d") + , (2455, 0, " ") + , (2456, 0, "w") + , (2457, 0, "h") + , (2458, 0, "i") + , (2459, 0, "t") + , (2460, 0, "e") + , (2461, 0, ";") + , (2462, 0, "\n\t") + , (2464, 0, "m") + , (2465, 0, "a") + , (2466, 0, "r") + , (2467, 0, "g") + , (2468, 0, "i") + , (2469, 0, "n") + , (2470, 0, ":") + , (2471, 0, " ") + , (2472, 0, "1") + , (2473, 0, "0") + , (2474, 0, "p") + , (2475, 0, "x") + , (2476, 0, ";") + , (2464, 6, "p") + , (2465, 0, "a") + , (2466, 0, "d") + , (2467, 0, "d") + , (2468, 0, "i") + , (2469, 0, "n") + , (2470, 0, "g") + , (2417, 0, "c") + , (2418, 0, "a") + , (2419, 0, "l") + , (2420, 0, "c") + , (2421, 0, "(") + , (2426, 0, " ") + , (2427, 0, "-") + , (2428, 0, " ") + , (2429, 0, "2") + , (2430, 0, "0") + , (2431, 0, "p") + , (2432, 0, "x") + , (2433, 0, ")") + , (2477, 7, "m") + , (2478, 0, "a") + , (2479, 0, "r") + , (2480, 0, "g") + , (2481, 0, "i") + , (2482, 0, "n") + , (2490, 0, "\n\tborder: 1px solid white;") + , (2450, 26, "") + , (2464, 0, "\n\theight: 3em;") + , (2436, 14, "") + , (2429, 1, "") + , (2429, 0, "5") + , (2445, 1, "") + , (2445, 1, "") + , (2445, 0, "2") + , (2446, 0, "5") + , (2462, 1, "") + , (2461, 1, "") + , (2460, 1, "") + , (2460, 0, "4") + , (2461, 0, "e") + , (2462, 0, "m") + , (2460, 1, "") + , (2460, 0, "5") + , (2474, 1, "") + , (2474, 0, "2") + , (2406, 0, "c") + , (2407, 0, "o") + , (2408, 0, "n") + , (2409, 0, "t") + , (2410, 0, "a") + , (2411, 0, "i") + , (2412, 0, "n") + , (2413, 0, "e") + , (2414, 0, "r") + , (1048, 8, "progresscontainer") + , (1067, 0, "\n\t\t\n\t") + , (1070, 0, "<") + , (1071, 0, "d") + , (1072, 0, "i") + , (1073, 0, "v") + , (1074, 0, " ") + , (1075, 0, "i") + , (1076, 0, "d") + , (1077, 0, "=") + , (1078, 0, "'") + , (1079, 0, "p") + , (1080, 0, "r") + , (1081, 0, "o") + , (1082, 0, "g") + , (1083, 0, "r") + , (1084, 0, "e") + , (1085, 0, "s") + , (1086, 0, "s") + , (1087, 0, "'") + , (1088, 0, "<") + , (1089, 0, "/") + , (1090, 0, "d") + , (1091, 0, "i") + , (1092, 0, "v") + , (1093, 0, ">") + , (1088, 0, ">") + , (1088, 0, " ") + , (1089, 0, "s") + , (1090, 0, "t") + , (1091, 0, "y") + , (1092, 0, "l") + , (1093, 0, "e") + , (1094, 0, "=") + , (1095, 0, "\"") + , (1095, 1, "") + , (1095, 0, "{") + , (1096, 0, "}") + , (1096, 0, "{") + , (1097, 0, "}") + , (1097, 0, "w") + , (1098, 0, "i") + , (1099, 0, "d") + , (1100, 0, "t") + , (1101, 0, "h") + , (1102, 0, ":") + , (1103, 0, " ") + , (1104, 0, "5") + , (1105, 0, "0") + , (1106, 0, "%") + , (1107, 0, "'") + , (1104, 0, "'") + , (2563, 0, "\n") + , (2564, 0, "\n") + , (2565, 0, "#") + , (2566, 0, "p") + , (2567, 0, "r") + , (2568, 0, "o") + , (2569, 0, "g") + , (2570, 0, "r") + , (2571, 0, "e") + , (2572, 0, "s") + , (2573, 0, "s") + , (2574, 0, " ") + , (2575, 0, "{") + , (2576, 0, "\n\t") + , (2578, 0, "\n\t") + , (2577, 1, "") + , (2578, 1, "}") + , (2506, 0, " */") + , (2481, 0, "/* ") + , (2583, 0, "\t") + , (2584, 0, "w") + , (2585, 0, "i") + , (2586, 0, "d") + , (2587, 0, "t") + , (2588, 0, "h") + , (2589, 0, ":") + , (2590, 0, " ") + , (2584, 7, "b") + , (2585, 0, "o") + , (2586, 0, "r") + , (2587, 0, "d") + , (2588, 0, "e") + , (2589, 0, "r") + , (2584, 6, "b") + , (2585, 0, "a") + , (2586, 0, "c") + , (2587, 0, "k") + , (2588, 0, "g") + , (2589, 0, "r") + , (2590, 0, "o") + , (2591, 0, "u") + , (2592, 0, "n") + , (2593, 0, "d") + , (2594, 0, "-") + , (2595, 0, "c") + , (2596, 0, "o") + , (2597, 0, "l") + , (2598, 0, "o") + , (2599, 0, "r") + , (2600, 0, ":") + , (2601, 0, " ") + , (2602, 0, "w") + , (2603, 0, "h") + , (2604, 0, "i") + , (2605, 0, "t") + , (2606, 0, "e") + , (2607, 0, ";") + , (2608, 0, "\n\t") + , (2610, 0, "w") + , (2611, 0, "i") + , (2612, 0, "d") + , (2613, 0, "t") + , (2614, 0, "h") + , (2615, 0, ":") + , (2616, 0, " ") + , (2617, 0, "5") + , (2618, 0, "0") + , (2619, 0, "%") + , (2620, 0, ";") + , (2608, 0, "\n\tbackground-color: white;") + , (2584, 11, "") + , (2636, 0, "\n\t") + , (2638, 0, "h") + , (2639, 0, "e") + , (2640, 0, "i") + , (2641, 0, "g") + , (2642, 0, "h") + , (2643, 0, "t") + , (2644, 0, ":") + , (2645, 0, " ") + , (2646, 0, "1") + , (2647, 0, "0") + , (2648, 0, "0") + , (2649, 0, "%") + , (2650, 0, ";") + , (2583, 14, "") + , (2582, 1, "") + , (2621, 0, " */") + , (2610, 0, "/* ") + , (1096, 1, "") + , (1108, 1, "") + , (1095, 1, "") + , (1094, 1, "") + , (1094, 0, ":") + , (1107, 1, "") + , (1101, 1, "") + , (1100, 1, "") + , (1100, 0, "=") + , (1094, 0, "=") + , (1095, 0, "'") + , (1096, 1, "") + , (1102, 1, "") + , (1101, 1, "") + , (1101, 0, ":") + , (1102, 0, " ") + , (919, 0, "\n") + , (920, 0, "c") + , (921, 0, "o") + , (922, 0, "n") + , (923, 0, "s") + , (924, 0, "t") + , (925, 0, " ") + , (926, 0, "w") + , (927, 0, "i") + , (928, 0, "d") + , (929, 0, "t") + , (930, 0, "h") + , (931, 0, " ") + , (932, 0, "=") + , (933, 0, " ") + , (934, 0, "5") + , (935, 0, "0") + , (1120, 2, "") + , (1120, 0, "{") + , (1121, 0, "w") + , (1122, 0, "i") + , (1123, 0, "d") + , (1124, 0, "t") + , (1125, 0, "h") + , (1126, 0, "}") + , (920, 5, "l") + , (921, 0, "e") + , (922, 0, "t") + , (934, 0, "\n") + , (935, 0, "s") + , (936, 0, "e") + , (937, 0, "t") + , (938, 0, "I") + , (939, 0, "n") + , (935, 5, "setInterval") + , (946, 0, "(") + , (947, 0, "(") + , (948, 0, ")") + , (949, 0, " ") + , (950, 0, "=") + , (951, 0, ">") + , (952, 0, " ") + , (953, 0, "w") + , (954, 0, "i") + , (955, 0, "d") + , (956, 0, "t") + , (957, 0, "h") + , (958, 0, "+") + , (959, 0, "+") + , (960, 0, ",") + , (961, 0, " ") + , (962, 0, "1") + , (963, 0, "0") + , (964, 0, "0") + , (965, 0, "0") + , (966, 0, ")") + , (919, 48, "") + , (919, 0, "\nlet width = 50\nsetInterval(() => width++, 1000)") + , (935, 0, "// ") + , (109, 0, "\texport let rounds\n") + , (140, 6, "r") + , (141, 0, "o") + , (142, 0, "u") + , (143, 0, "n") + , (140, 4, "") + , (140, 0, "b") + , (141, 0, "e") + , (142, 0, "a") + , (143, 0, "d") + , (144, 0, "_") + , (128, 17, "") + , (127, 1, "") + , (156, 1, "") + , (155, 1, "") + , (154, 1, "") + , (153, 1, "") + , (152, 1, "") + , (152, 0, "b") + , (153, 0, "e") + , (154, 0, "a") + , (155, 0, "d") + , ( 2215 + , 0 + , "\t\t\n" + ) + , (2424, 0, "\n\t\t") + , (2437, 16, "S") + , (2425, 2, "") + , (2436, 0, "e") + , (2437, 0, "c") + , (2438, 0, "o") + , (2439, 0, "n") + , (2440, 0, "s") + , (2440, 1, "") + , (2440, 0, "d") + , (2441, 0, "s") + , (2442, 0, " ") + , (2443, 0, "p") + , (2444, 0, "e") + , (2445, 0, "r") + , (2446, 0, " ") + , (2447, 0, "b") + , (2448, 0, "e") + , (2449, 0, "a") + , (2450, 0, "d") + , (2319, 1, "") + , (2318, 1, "") + , (2318, 0, "2") + , (2319, 0, "0") + , (2530, 1, "") + , (2529, 1, "") + , (2518, 11, "") + , (2483, 6, "s") + , (2484, 0, "e") + , (2485, 0, "c") + , (2486, 0, "o") + , (2487, 0, "n") + , (2483, 5, "seconds_per_bead") + , (2519, 6, "s") + , (2520, 0, "e") + , (2521, 0, "c") + , (2522, 0, "o") + , (2523, 0, "n") + , (2524, 0, "d") + , (2525, 0, "s") + , (2526, 0, "_") + , (2527, 0, "p") + , (2528, 0, "e") + , (2529, 0, "r") + , (2530, 0, "_") + , (2531, 0, "b") + , (2532, 0, "e") + , (2533, 0, "a") + , (2534, 0, "d") + , (1259, 0, " ") + , (1260, 0, "(") + , (1261, 0, "1") + , (1262, 0, " ") + , (1263, 0, "m") + , (1264, 0, "i") + , (1265, 0, "n") + , (1266, 0, ")") + , (1052, 0, "\t
{connection} / {state}
\n") + , (1094, 20, "") + , (1094, 0, "_") + , (1094, 1, "_") + , (1095, 0, "a") + , (1096, 0, "c") + , (1097, 0, "t") + , (1098, 0, "i") + , (1094, 5, "_active_sessions") + , (1111, 0, " ") + , (1112, 0, "s") + , (1113, 0, "e") + , (1114, 0, "s") + , (1112, 3, "p") + , (1113, 0, "l") + , (1114, 0, "a") + , (1115, 0, "y") + , (1116, 0, "e") + , (1117, 0, "r") + , (1118, 0, "s") + , (1119, 0, " ") + , (1120, 0, "i") + , (1121, 0, "n") + , (1122, 0, " ") + , (1123, 0, "r") + , (1124, 0, "o") + , (1125, 0, "o") + , (1126, 0, "m") + , (1118, 0, "(") + , (1120, 0, ")") + , (88, 0, "\n\texport let meditate") + , (80, 8, "a") + , (81, 0, "r") + , (82, 0, "c") + , (83, 0, "h") + , (84, 0, "e") + , (85, 0, "t") + , (86, 0, "o") + , (87, 0, "p") + , (88, 0, "i") + , (89, 0, "c") + , (1074, 0, "\n\t

Room: {room}

") + , (1080, 4, "T") + , (1081, 0, "o") + , (1082, 0, "p") + , (1083, 0, "i") + , (1084, 0, "c") + , (1092, 4, "a") + , (1093, 0, "r") + , (1094, 0, "c") + , (1095, 0, "h") + , (1096, 0, "i") + , (1092, 5, "archetopic") + , ( 2117 + , 0 + , "\n\t\t" + ) + , (2117, 0, "\n\t\t") + , (2118, 2, "") + , (1956, 8, "t") + , (1957, 0, "e") + , (1958, 0, "x") + , (1959, 0, "t") + , (1969, 8, "a") + , (1970, 0, "r") + , (1971, 0, "c") + , (1972, 0, "h") + , (8, 0, "\nimport { arch } from \"os\";\n\n") + , (1998, 4, "arch") + , (2002, 0, "e") + , (2003, 0, "t") + , (1998, 6, "archetopic") + , (2028, 8, "a") + , (2029, 0, "r") + , (2030, 0, "c") + , (2031, 0, "h") + , (2032, 0, "e") + , (2033, 0, "t") + , (2034, 0, "p") + , (2034, 1, "") + , (2034, 0, "o") + , (2035, 0, "p") + , (2036, 0, "i") + , (2037, 0, "c") + , (2044, 92, "") + , (1930, 38, "A") + , (1931, 0, "r") + , (1932, 0, "c") + , (1933, 0, "h") + , (1934, 0, "e") + , (1935, 0, "t") + , (1936, 0, "o") + , (1937, 0, "p") + , (1938, 0, "i") + , (1939, 0, "c") + , (9, 29, "") + , (230, 0, "\n\t") + , (232, 0, "\n\t") + , (231, 1, "") + , (232, 1, "") + , ( 231 + , 0 + , "const ARCHETOPICS = [\n 'Truth', 'Human', 'Energy', 'Beauty', 'Beginning', 'End', 'Birth', 'Death',\n 'Ego', 'Attention', 'Art', 'Empathy', 'Eutopia', 'Future', 'Game', 'Gift',\n 'History', 'Cosmos', 'Time', 'Life', 'Addiction', 'Paradox', 'Shadow', 'Society'\n]\n" + ) + , (231, 0, "\t") + , (231, 1, "") + , (2250, 0, "\n\t\t\t") + , (2254, 0, "<") + , (2255, 0, "d") + , (2256, 0, "a") + , (2257, 0, "t") + , (2258, 0, "a") + , (2259, 0, "l") + , (2260, 0, "i") + , (2261, 0, "s") + , (2262, 0, "t") + , (2263, 0, " ") + , (2264, 0, "i") + , (2265, 0, "d") + , (2266, 0, "=") + , (2267, 0, "a") + , (2268, 0, "r") + , (2269, 0, "c") + , (2270, 0, "h") + , (2271, 0, "e") + , (2272, 0, "t") + , (2273, 0, "o") + , (2274, 0, "p") + , (2275, 0, "c") + , (2276, 0, "i") + , (2277, 0, "s") + , (2277, 1, "") + , (2276, 1, "") + , (2275, 1, "") + , (2275, 0, "i") + , (2276, 0, "c") + , (2277, 0, "s") + , (2278, 0, "'") + , (2267, 0, "'") + , (2280, 0, ">") + , (2281, 0, "") + , (2281, 0, "\n\t\t\t\t\n\t\t\t") + , (2286, 0, "<") + , (2287, 0, "o") + , (2288, 0, "p") + , (2288, 1, "") + , (2287, 1, "") + , (2286, 1, "") + , (2286, 0, "{") + , (2287, 0, "#") + , (2288, 0, "e") + , (2289, 0, "a") + , (2290, 0, "c") + , (2291, 0, "h") + , (2292, 0, " ") + , (2293, 0, "A") + , (2294, 0, "R") + , (2295, 0, "C") + , (2296, 0, "H") + , (2293, 4, "ARCHETOPICS") + , (2304, 0, " ") + , (2305, 0, "a") + , (2306, 0, "s") + , (2307, 0, " ") + , (2308, 0, "t") + , (2309, 0, "o") + , (2310, 0, "p") + , (2311, 0, "i") + , (2312, 0, "c") + , (2313, 0, "}") + , (2314, 0, "\n\t\t\t\t") + , (2319, 0, "\t") + , (2320, 0, "<") + , (2321, 0, "o") + , (2322, 0, "p") + , (2323, 0, "t") + , (2324, 0, "i") + , (2325, 0, "o") + , (2326, 0, "n") + , (2327, 0, " ") + , (2328, 0, "v") + , (2329, 0, "a") + , (2330, 0, "l") + , (2331, 0, "u") + , (2332, 0, "e") + , (2333, 0, "=") + , (2334, 0, "{") + , (2335, 0, "t") + , (2336, 0, "o") + , (2337, 0, "p") + , (2338, 0, "i") + , (2339, 0, "c") + , (2340, 0, "}") + , (2341, 0, "/") + , (2342, 0, "?") + , (2342, 1, "") + , (2341, 1, "") + , (2341, 0, ">") + , (2342, 0, "\n\t\t\t\t\t\t") + , (2349, 0, "{") + , (2350, 0, "/") + , (2351, 0, "e") + , (2352, 0, "a") + , (2353, 0, "c") + , (2354, 0, "h") + , (2355, 0, ">") + , (2355, 1, "") + , (2355, 0, "}") + , (2343, 6, "\t\t\t\t\t") + , (2343, 5, "\t\t\t\t") + , (2248, 0, " ") + , (2249, 0, "l") + , (2250, 0, "i") + , (2251, 0, "s") + , (2252, 0, "t") + , (2253, 0, "=") + , (2254, 0, "a") + , (2255, 0, "r") + , (2256, 0, "c") + , (2257, 0, "h") + , (2254, 4, "archetopic") + , (2264, 0, "s") + , (2265, 0, "'") + , (2254, 0, "'") + , (1827, 0, "\n\t\t") + , (1830, 0, "<") + , (1831, 0, "d") + , (1832, 0, "i") + , (1833, 0, "v") + , (1834, 0, ">") + , (1835, 0, "") + , (1835, 0, "\n\t\t\t\n\t\t") + , (1839, 0, "T") + , (1840, 0, "o") + , (1841, 0, "t") + , (1842, 0, "a") + , (1843, 0, "l") + , (1844, 0, " ") + , (1845, 0, "g") + , (1846, 0, "a") + , (1847, 0, "m") + , (1848, 0, "e") + , (1849, 0, " ") + , (1850, 0, "l") + , (1851, 0, "e") + , (1852, 0, "n") + , (1853, 0, "g") + , (1854, 0, "t") + , (1855, 0, "h") + , (1856, 0, " ") + , (1857, 0, "(") + , (1858, 0, "i") + , (1859, 0, "n") + , (1860, 0, "c") + , (1861, 0, "l") + , (1862, 0, "u") + , (1863, 0, "d") + , (1864, 0, "i") + , (1865, 0, "n") + , (1857, 9, "") + , (1856, 1, "") + , (1856, 0, ":") + , (1857, 0, " ") + , (1858, 0, "$") + , (1859, 0, "{") + , (1859, 1, "") + , (1858, 1, "") + , (1858, 0, "{") + , (1859, 0, "r") + , (1860, 0, "o") + , (1861, 0, "u") + , (1862, 0, "n") + , (1863, 0, "d") + , (1864, 0, "s") + , (1865, 0, " ") + , (1866, 0, "*") + , (1867, 0, " ") + , (1868, 0, "p") + , (1869, 0, "l") + , (1870, 0, "a") + , (1871, 0, "y") + , (1872, 0, "e") + , (1873, 0, "r") + , (1874, 0, "s") + , (1875, 0, " ") + , (1876, 0, "*") + , (1877, 0, " ") + , (1877, 1, "") + , (1876, 1, "") + , (1875, 1, "") + , (1875, 0, " ") + , (1876, 0, "+") + , (1877, 0, " ") + , (1859, 0, "(") + , (1859, 1, "") + , (1878, 0, "(") + , (1879, 0, "m") + , (1880, 0, "e") + , (1881, 0, "d") + , (1882, 0, "i") + , (1883, 0, "t") + , (1879, 5, "meditate") + , (1887, 0, " ") + , (1888, 0, "?") + , (1889, 0, " ") + , (1890, 0, "1") + , (1891, 0, " ") + , (1892, 0, ":") + , (1893, 0, " ") + , (1894, 0, "0") + , (1895, 0, ")") + , (1896, 0, ")") + , (1859, 0, "(") + , (1898, 0, " ") + , (1899, 0, "*") + , (1900, 0, " ") + , (1901, 0, "s") + , (1902, 0, "e") + , (1903, 0, "c") + , (1904, 0, "o") + , (1905, 0, "n") + , (1906, 0, "d") + , (1901, 6, "seconds_per_bead") + , (1917, 0, " ") + , (1918, 0, "/") + , (1919, 0, " ") + , (1920, 0, "6") + , (1921, 0, "0") + , (1922, 0, "}") + , (1923, 0, " ") + , (1924, 0, "m") + , (1925, 0, "i") + , (1926, 0, "n") + , (1927, 0, "u") + , (1928, 0, "t") + , (1929, 0, "e") + , (1930, 0, "s") + , (1037, 0, "\n") + , (1038, 0, "\n") + , (1039, 0, "c") + , (1040, 0, "o") + , (1041, 0, "n") + , (1042, 0, "s") + , (1043, 0, "t") + , (1044, 0, " ") + , (1045, 0, "r") + , (1046, 0, "o") + , (1047, 0, "u") + , (1048, 0, "n") + , (1049, 0, "d") + , (1050, 0, "_") + , (1051, 0, "t") + , (1052, 0, "o") + , (1053, 0, " ") + , (1054, 0, " ") + , (1054, 1, "") + , (1054, 0, "=") + , (1055, 0, " ") + , (1056, 0, "(") + , (1052, 1, "") + , (1051, 1, "") + , (1050, 1, "") + , (1050, 0, "i") + , (1051, 0, "s") + , (1052, 0, "h") + , (1056, 1, "") + , (1056, 0, "x") + , (1057, 0, " ") + , (1058, 0, "=") + , (1059, 0, ">") + , (1060, 0, " ") + , (1061, 0, "x") + , (1062, 0, " ") + , (1063, 0, "*") + , (1064, 0, " ") + , (1065, 0, "1") + , (1066, 0, "0") + , (1067, 0, "0") + , (1061, 0, "M") + , (1062, 0, "a") + , (1063, 0, "t") + , (1064, 0, "h") + , (1065, 0, ".") + , (1066, 0, "r") + , (1067, 0, "o") + , (1068, 0, "u") + , (1069, 0, "n") + , (1070, 0, "d") + , (1066, 5, "round") + , (1071, 0, "(") + , (1079, 0, "(") + , (1079, 1, "") + , (1079, 0, ")") + , (1080, 0, " ") + , (1081, 0, "/") + , (1082, 0, " ") + , (1083, 0, "2") + , (1084, 0, "0") + , (1084, 1, "") + , (1083, 1, "") + , (1083, 0, "1") + , (1084, 0, "0") + , (1085, 0, "0") + , (1086, 0, "\n") + , (1909, 0, "r") + , (1910, 0, "o") + , (1911, 0, "u") + , (1912, 0, "n") + , (1913, 0, "d") + , (1914, 0, "i") + , (1915, 0, "s") + , (1916, 0, "h") + , (1909, 8, "roundish") + , (1917, 0, "(") + , (1981, 0, ")") + , (1878, 123, "") + , (3328, 0, "\n\t") + , (3328, 2, "") + , (3320, 0, "\n\t\t") + , (3323, 0, "\n\t\t") + , (3321, 2, "") + , ( 3324 + , 0 + , "\t\t
\n\t\t\tTotal game length: {roundish((rounds * players + (meditate ? 1 : 0)) * seconds_per_bead / 60)} minutes\n\t\t
\n" + ) + , (3322, 4, "\t\t") + , (3444, 1, "") + , (3333, 0, "(") + , (3436, 0, ")") + , (2541, 0, " ") + , (2541, 1, "") + , (2525, 5, "c") + , (2526, 0, "h") + , (2527, 0, "e") + , (2528, 0, "c") + , (2529, 0, "k") + , (2530, 0, "e") + , (2531, 0, "d") + , (2255, 5, "") + , (1406, 5, "") + , (80, 5, "") + , (2205, 1, "") + , (2205, 1, "") + , (2205, 1, "") + , (2205, 1, "") + , (2205, 1, "") + , (2205, 1, "") + , (2205, 0, "T") + , (2265, 1, "") + , (2265, 1, "") + , (2265, 1, "") + , (2265, 1, "") + , (2265, 1, "") + , (225, 263, "") + , ( 225 + , 0 + , "\nconst ARCHETOPICS = [\n 'Truth', 'Human', 'Energy', 'Beauty', 'Beginning', 'End', 'Birth', 'Death',\n 'Ego', 'Attention', 'Art', 'Empathy', 'Eutopia', 'Future', 'Game', 'Gift',\n 'History', 'Cosmos', 'Time', 'Life', 'Addiction', 'Paradox', 'Shadow', 'Society'\n]\n" + ) + , (488, 0, "\n") + , (489, 0, "c") + , (490, 0, "o") + , (491, 0, "n") + , (492, 0, "s") + , (493, 0, "t") + , (494, 0, " ") + , (495, 0, "g") + , (496, 0, "e") + , (497, 0, "t") + , (498, 0, "_") + , (489, 10, "") + , (489, 0, "$") + , (490, 0, ":") + , (491, 0, " ") + , (492, 0, "{") + , (493, 0, "\n\t") + , (495, 0, "\n\t") + , (494, 1, "") + , (495, 1, "}") + , (494, 0, "\t") + , (494, 1, "") + , (488, 0, "\n") + , (489, 0, "l") + , (490, 0, "e") + , (491, 0, "t") + , (492, 0, " ") + , (493, 0, "g") + , (494, 0, "a") + , (495, 0, "m") + , (496, 0, "e") + , (497, 0, "_") + , (498, 0, "s") + , (499, 0, "a") + , (500, 0, "t") + , (501, 0, "a") + , (501, 1, "") + , (500, 1, "") + , (499, 1, "") + , (498, 1, "") + , (498, 0, "s") + , (499, 0, "t") + , (500, 0, "a") + , (501, 0, "g") + , (502, 0, "e") + , (503, 0, "s") + , (510, 0, "\t") + , (511, 0, "g") + , (512, 0, "a") + , (513, 0, "m") + , (514, 0, "e") + , (515, 0, "_") + , (511, 5, "game_stages") + , (522, 0, " ") + , (523, 0, "=") + , (524, 0, " ") + , (525, 0, "[") + , (526, 0, "]") + , (527, 0, "\n\t") + , (529, 0, "i") + , (530, 0, "f") + , (531, 0, " ") + , (532, 0, "(") + , (533, 0, "m") + , (534, 0, "e") + , (535, 0, "d") + , (536, 0, "i") + , (533, 4, "meditate") + , (541, 0, ")") + , (542, 0, " ") + , (543, 0, "g") + , (544, 0, "a") + , (545, 0, "m") + , (546, 0, "e") + , (543, 4, "game_stages") + , (554, 0, ".") + , (555, 0, "p") + , (556, 0, "u") + , (557, 0, "s") + , (558, 0, "h") + , (555, 4, "push") + , (559, 0, "(") + , (487, 0, "\n") + , (488, 0, "\n") + , (489, 0, "c") + , (490, 0, "o") + , (491, 0, "n") + , (492, 0, "s") + , (493, 0, "t") + , (494, 0, " ") + , (495, 0, "M") + , (496, 0, "E") + , (497, 0, "D") + , (498, 0, "I") + , (499, 0, "T") + , (500, 0, "A") + , (501, 0, "T") + , (502, 0, "I") + , (503, 0, "O") + , (504, 0, "N") + , (505, 0, "_") + , (506, 0, "S") + , (507, 0, "E") + , (508, 0, "C") + , (509, 0, "O") + , (510, 0, "N") + , (511, 0, "D") + , (512, 0, "S") + , (513, 0, " ") + , (514, 0, "=") + , (515, 0, " ") + , (516, 0, "6") + , (517, 0, "0") + , (488, 0, "\n") + , (489, 0, "/") + , (490, 0, "/") + , (491, 0, " ") + , (492, 0, "C") + , (493, 0, "o") + , (494, 0, "u") + , (495, 0, "l") + , (496, 0, "d") + , (497, 0, " ") + , (498, 0, "m") + , (499, 0, "a") + , (500, 0, "k") + , (501, 0, "e") + , (502, 0, " ") + , (503, 0, "c") + , (504, 0, "o") + , (505, 0, "n") + , (506, 0, "f") + , (507, 0, "i") + , (508, 0, "g") + , (509, 0, "u") + , (510, 0, "r") + , (511, 0, "a") + , (512, 0, "b") + , (513, 0, "l") + , (514, 0, "e") + , (515, 0, "?") + , (515, 1, "") + , (515, 0, ".") + , (516, 0, " ") + , (517, 0, "E") + , (518, 0, "h") + , (519, 0, ".") + , (3494, 22, "") + , (3513, 0, " ") + , (3514, 0, "+") + , (3515, 0, " ") + , (3516, 0, "M") + , (3517, 0, "E") + , (3518, 0, "D") + , (3519, 0, "I") + , (3515, 5, "") + , (3513, 2, "") + , (3494, 0, " + (meditate ? 1 : 0))") + , (3494, 22, "") + , (3513, 0, " ") + , (3514, 0, "+") + , (3515, 0, " ") + , (3516, 0, " + (meditate ? 1 : 0))") + , (3518, 1, "") + , (3517, 1, "") + , (3516, 1, "") + , (3528, 1, "") + , (3528, 0, "M") + , (3529, 0, "E") + , (3530, 0, "D") + , (3531, 0, "I") + , (3528, 4, "MEDITATION_SECONDS") + , (3477, 0, "\n\t\t\t\t") + , (3562, 0, "\n\t\t\t\t") + , (3563, 4, "\t\t\t") + , (623, 0, "{") + , (624, 0, "\n\t\t") + , (627, 0, "l") + , (628, 0, "e") + , (629, 0, "b") + , (630, 0, "l") + , (630, 1, "") + , (629, 1, "") + , (628, 1, "") + , (628, 0, "a") + , (629, 0, "b") + , (630, 0, "e") + , (631, 0, "l") + , (632, 0, ":") + , (633, 0, " ") + , (634, 0, "'") + , (635, 0, "M") + , (636, 0, "e") + , (637, 0, "d") + , (638, 0, "i") + , (639, 0, "t") + , (640, 0, "a") + , (641, 0, "t") + , (642, 0, "e") + , (643, 0, "'") + , (644, 0, ",") + , (645, 0, "\n\t\t") + , (648, 0, "d") + , (649, 0, "u") + , (650, 0, "r") + , (651, 0, "a") + , (652, 0, "t") + , (653, 0, "i") + , (654, 0, "o") + , (655, 0, "n") + , (656, 0, ":") + , (657, 0, " ") + , (658, 0, "M") + , (659, 0, "E") + , (660, 0, "D") + , (661, 0, "I") + , (658, 4, "MEDITATION_SECONDS") + , (676, 0, ",") + , (677, 0, "\n\t\t") + , (678, 2, "\t}") + , (680, 0, ")") + , (681, 0, "\n\t") + , (683, 0, "f") + , (684, 0, "o") + , (685, 0, "r") + , (686, 0, " ") + , (687, 0, "(") + , (688, 0, "l") + , (689, 0, "e") + , (690, 0, "t") + , (691, 0, " ") + , (692, 0, "i") + , (693, 0, " ") + , (694, 0, "=") + , (695, 0, " ") + , (696, 0, "0") + , (697, 0, ";") + , (698, 0, " ") + , (699, 0, "i") + , (700, 0, " ") + , (701, 0, "<") + , (702, 0, " ") + , (703, 0, "r") + , (704, 0, "o") + , (705, 0, "u") + , (703, 3, "rounds") + , (709, 0, ";") + , (710, 0, " ") + , (711, 0, "i") + , (712, 0, "+") + , (713, 0, "+") + , (714, 0, ")") + , (715, 0, " ") + , (716, 0, "{") + , (717, 0, "\n\t\t") + , (718, 2, "\t}") + , (720, 0, "}") + , (720, 1, "") + , (720, 0, "\n\t") + , (722, 0, "f") + , (723, 0, "o") + , (724, 0, "r") + , (725, 0, " ") + , (726, 0, "(") + , (727, 0, "l") + , (728, 0, "e") + , (729, 0, "t") + , (730, 0, " ") + , (731, 0, "i") + , (732, 0, " ") + , (733, 0, "=") + , (734, 0, " ") + , (735, 0, "0") + , (722, 14, "") + , (721, 1, "") + , (711, 1, "r") + , (699, 1, "r") + , (692, 1, "r") + , (682, 0, "\tfor (let r = 0; r < rounds; r++) {\n") + , (719, 0, "\t") + , (729, 1, "") + , (729, 0, "r") + , (748, 1, "p") + , (736, 1, "p") + , (729, 1, "p") + , (740, 6, "p") + , (741, 0, "l") + , (742, 0, "a") + , (743, 0, "y") + , (744, 0, "e") + , (745, 0, "r") + , (746, 0, "s") + , (755, 0, "\n\t\t\t") + , (756, 3, "\t\t}") + , (755, 0, "\n\t\t\t") + , (759, 0, "g") + , (760, 0, "a") + , (761, 0, "m") + , (762, 0, "e") + , (763, 0, "_") + , (759, 5, "game_stages") + , (770, 0, ".") + , (771, 0, "p") + , (772, 0, "i") + , (773, 0, "s") + , (773, 1, "") + , (772, 1, "") + , (772, 0, "u") + , (773, 0, "s") + , (774, 0, "h") + , (771, 4, "push") + , (775, 0, "(") + , (776, 0, "{") + , (777, 0, "\n\t\t\t\t") + , (782, 0, "\n\t\t\t\t") + , (778, 4, "") + , (779, 4, "\t\t\t}") + , (783, 0, ")") + , (778, 0, "\t\t\t\t") + , (782, 0, "d") + , (783, 0, "u") + , (784, 0, "r") + , (785, 0, "a") + , (786, 0, "t") + , (787, 0, "i") + , (788, 0, "o") + , (789, 0, "n") + , (790, 0, ":") + , (791, 0, " ") + , (792, 0, "s") + , (793, 0, "e") + , (794, 0, "c") + , (795, 0, "o") + , (796, 0, "n") + , (797, 0, "d") + , (792, 6, "seconds_per_bead") + , (808, 0, ",") + , (777, 0, "\n\t\t\t\t") + , (782, 0, "l") + , (783, 0, "a") + , (784, 0, "b") + , (785, 0, "e") + , (786, 0, "l") + , (787, 0, ":") + , (788, 0, " ") + , (789, 0, "'") + , (789, 1, "") + , (789, 0, "`") + , (790, 0, "R") + , (791, 0, "o") + , (792, 0, "u") + , (793, 0, "n") + , (794, 0, "d") + , (795, 0, " ") + , (796, 0, "#") + , (797, 0, "{") + , (798, 0, "r") + , (799, 0, "}") + , (800, 0, " ") + , (801, 0, "p") + , (802, 0, "l") + , (803, 0, "a") + , (804, 0, "y") + , (805, 0, "e") + , (806, 0, "r") + , (807, 0, " ") + , (808, 0, "#") + , (809, 0, "{") + , (796, 1, "") + , (796, 0, "$") + , (808, 1, "") + , (808, 0, "$") + , (810, 0, "p") + , (811, 0, "}") + , (812, 0, "`") + , (813, 0, ",") + , (859, 1, "") + , ( 3680 + , 0 + , "\t\t\t(Total game length: {roundish(\n\t\t\t\t(rounds * players * seconds_per_bead + (meditate ? MEDITATION_SECONDS : 0)) / 60\n\t\t\t)} minutes)\n" + ) + , (3680, 134, "") + , ( 3672 + , 0 + , "\t\t
\n\t\t\t(Total game length: {roundish(\n\t\t\t\t(rounds * players * seconds_per_bead + (meditate ? MEDITATION_SECONDS : 0)) / 60\n\t\t\t)} minutes)\n\t\t
\n" + ) + , (3869, 75, "") + , (3869, 0, "g") + , (3870, 0, "a") + , (3871, 0, "m") + , (3872, 0, "e") + , (3869, 4, "game_stages") + , (3880, 0, ".") + , (3881, 0, "r") + , (3882, 0, "e") + , (3883, 0, "d") + , (3884, 0, "u") + , (3885, 0, "c") + , (3886, 0, "e") + , (3887, 0, "(") + , (3888, 0, "s") + , (3889, 0, " ") + , (3890, 0, "=") + , (3891, 0, ">") + , (3892, 0, " ") + , (3893, 0, "s") + , (3894, 0, ".") + , (3895, 0, "d") + , (3896, 0, "u") + , (3897, 0, "r") + , (3898, 0, "a") + , (3899, 0, "t") + , (3900, 0, "i") + , (3901, 0, "o") + , (3902, 0, "n") + , (3888, 0, "x") + , (3889, 0, ",") + , (3890, 0, " ") + , (3896, 0, "x") + , (3897, 0, " ") + , (3898, 0, "+") + , (3899, 0, " ") + , (3910, 0, ",") + , (3911, 0, " ") + , (3912, 0, "0") + , (3913, 0, ")") + , (3892, 0, ")") + , (3888, 0, "(") + , (861, 0, "\n") + , (862, 0, "\n") + , (863, 0, "c") + , (864, 0, "o") + , (865, 0, "n") + , (866, 0, "s") + , (867, 0, "t") + , (868, 0, " ") + , (869, 0, "g") + , (870, 0, "e") + , (871, 0, "t") + , (872, 0, "_") + , (873, 0, "c") + , (874, 0, "u") + , (875, 0, "r") + , (876, 0, "r") + , (877, 0, "e") + , (878, 0, "n") + , (879, 0, "t") + , (880, 0, "_") + , (881, 0, "s") + , (882, 0, "t") + , (883, 0, "a") + , (884, 0, "t") + , (885, 0, "e") + , (886, 0, " ") + , (887, 0, "=") + , (888, 0, " ") + , (889, 0, "(") + , (890, 0, ")") + , (891, 0, " ") + , (892, 0, "=") + , (893, 0, ">") + , (894, 0, " ") + , (895, 0, "{") + , (896, 0, "\n\t") + , (898, 0, "\n\t") + , (897, 1, "") + , (898, 1, "}") + , (50, 0, "\texport let state\n") + , (80, 5, "s") + , (81, 0, "t") + , (82, 0, "a") + , (83, 0, "r") + , (84, 0, "t") + , (85, 0, "_") + , (86, 0, "t") + , (87, 0, "i") + , (88, 0, "m") + , (89, 0, "e") + , (920, 0, "\t") + , (921, 0, "f") + , (922, 0, "o") + , (923, 0, "r") + , (924, 0, " ") + , (925, 0, "(") + , (926, 0, "l") + , (927, 0, "e") + , (928, 0, "t") + , (929, 0, " ") + , (930, 0, "s") + , (931, 0, " ") + , (932, 0, "=") + , (933, 0, " ") + , (934, 0, "0") + , (935, 0, ";") + , (936, 0, " ") + , (937, 0, "i") + , (937, 1, "") + , (937, 0, "s") + , (938, 0, " ") + , (939, 0, "<") + , (940, 0, " ") + , (941, 0, "g") + , (942, 0, "a") + , (943, 0, "m") + , (944, 0, "e") + , (941, 4, "game_stages") + , (952, 0, ".") + , (953, 0, "l") + , (954, 0, "e") + , (955, 0, "n") + , (956, 0, "g") + , (957, 0, "t") + , (958, 0, "h") + , (959, 0, ";") + , (960, 0, " ") + , (961, 0, "i") + , (961, 1, "") + , (961, 0, "s") + , (962, 0, "+") + , (963, 0, "+") + , (964, 0, ")") + , (965, 0, " ") + , (966, 0, "{") + , (967, 0, "\n\t\t") + , (970, 0, "\n\t\t") + , (968, 2, "") + , (969, 2, "\t}") + , (968, 0, "\t\t") + , (968, 2, "") + , (919, 0, "\n\t") + , (921, 0, "l") + , (922, 0, "e") + , (923, 0, "t") + , (921, 3, "") + , (913, 0, "o") + , (914, 0, "f") + , (915, 0, "f") + , (916, 0, "s") + , (917, 0, "e") + , (918, 0, "t") + , (913, 0, "t") + , (914, 0, "i") + , (915, 0, "m") + , (916, 0, "e") + , (917, 0, "_") + , (913, 4, "s") + , (914, 0, "t") + , (915, 0, "a") + , (916, 0, "r") + , (917, 0, "t") + , (925, 0, "_") + , (926, 0, "m") + , (927, 0, "s") + , (936, 0, "l") + , (937, 0, "e") + , (938, 0, "t") + , (939, 0, " ") + , (940, 0, "s") + , (941, 0, " ") + , (942, 0, "=") + , (943, 0, " ") + , (944, 0, "0") + , (945, 0, ";") + , (945, 1, "") + , (945, 0, "\n\t") + , (947, 0, "w") + , (948, 0, "h") + , (949, 0, "i") + , (950, 0, "l") + , (951, 0, "e") + , (952, 0, " ") + , (953, 0, "s") + , (954, 0, "t") + , (955, 0, "a") + , (956, 0, "r") + , (957, 0, "t") + , (8, 0, "\nimport { start } from \"repl\";\n\n") + , (985, 5, "start") + , (990, 0, "_") + , (991, 0, "o") + , (992, 0, "f") + , (985, 8, "start_offset_ms") + , (978, 22, "") + , (977, 1, "") + , (972, 1, "") + , (972, 0, "g") + , (973, 0, "a") + , (974, 0, "m") + , (975, 0, "e") + , (976, 0, "_") + , (977, 0, "d") + , (978, 0, "u") + , (979, 0, "r") + , (980, 0, "a") + , (981, 0, "t") + , (982, 0, "i") + , (983, 0, "o") + , (984, 0, "n") + , (1038, 0, "\t\t") + , (1040, 0, "l") + , (1041, 0, "e") + , (1042, 0, "t") + , (1043, 0, " ") + , (1044, 0, "s") + , (1045, 0, "t") + , (1046, 0, "a") + , (1047, 0, "t") + , (1048, 0, "e") + , (1049, 0, " ") + , (1050, 0, "=") + , (1051, 0, " ") + , (1052, 0, "g") + , (1053, 0, "a") + , (1054, 0, "m") + , (1055, 0, "e") + , (1056, 0, "_") + , (1057, 0, "s") + , (1058, 0, "t") + , (1052, 7, "game_stages") + , (1063, 0, "[") + , (1064, 0, "s") + , (1065, 0, "]") + , (1066, 0, "\n\t\t") + , (1069, 0, "i") + , (1070, 0, "f") + , (1071, 0, " ") + , (1072, 0, "(") + , (945, 1, "") + , (945, 1, "") + , (945, 1, "") + , (945, 1, "") + , (945, 1, "") + , (945, 1, "") + , (961, 22, "") + , (960, 1, "") + , (1044, 0, "s") + , (1045, 0, "t") + , (1046, 0, "a") + , (1047, 0, "t") + , (1048, 0, "e") + , (1044, 5, "state") + , (1049, 0, ".") + , (1050, 0, "d") + , (1051, 0, "u") + , (1052, 0, "r") + , (1053, 0, "a") + , (1054, 0, "t") + , (1055, 0, "i") + , (1056, 0, "o") + , (1057, 0, "n") + , (1058, 0, " ") + , (1059, 0, "*") + , (1060, 0, " ") + , (1061, 0, "1") + , (1062, 0, "0") + , (1063, 0, "0") + , (1064, 0, "0") + , (1065, 0, " ") + , (1066, 0, ">") + , (1067, 0, " ") + , (1068, 0, "o") + , (1069, 0, "f") + , (1070, 0, "f") + , (1071, 0, "s") + , (1072, 0, "e") + , (1068, 5, "offset_ms") + , (1077, 0, ")") + , (1078, 0, " ") + , (1079, 0, "{") + , (1080, 0, "\n\t\t\t") + , (1081, 3, "\t\t}") + , (1080, 0, "\n\t\t\t") + , (1084, 0, "r") + , (1085, 0, "e") + , (1086, 0, "t") + , (1087, 0, "u") + , (1088, 0, "r") + , (1089, 0, "n") + , (1090, 0, " ") + , (1091, 0, "{") + , (1092, 0, "s") + , (1093, 0, "t") + , (1094, 0, "a") + , (1095, 0, "t") + , (1096, 0, "e") + , (1097, 0, ",") + , (1098, 0, " ") + , (1099, 0, "o") + , (1100, 0, "f") + , (1101, 0, "f") + , (1102, 0, "s") + , (1103, 0, "e") + , (1104, 0, "t") + , (1099, 6, "offset_ms") + , (1108, 0, "}") + , (1113, 0, "\n\t\t") + , (1116, 0, "o") + , (1117, 0, "f") + , (1118, 0, "f") + , (1116, 3, "offset_ms") + , (1125, 0, " ") + , (1126, 0, "-") + , (1127, 0, "=") + , (1128, 0, " ") + , (1129, 0, "state.duration * 1000") + , (1153, 0, "\n\t") + , (1155, 0, "r") + , (1156, 0, "e") + , (1157, 0, "t") + , (1158, 0, "u") + , (1159, 0, "r") + , (1160, 0, "n") + , (1161, 0, " ") + , (1162, 0, "{") + , (1163, 0, "\n\t\t") + , (1166, 0, "s") + , (1167, 0, "t") + , (1168, 0, "a") + , (1169, 0, "t") + , (1170, 0, "e") + , (1171, 0, ":") + , (1172, 0, " ") + , (1173, 0, "{") + , (1174, 0, "\n\t\t\t") + , (1178, 0, "l") + , (1179, 0, "a") + , (1180, 0, "b") + , (1181, 0, "e") + , (1182, 0, "l") + , (1183, 0, ":") + , (1184, 0, " ") + , (1185, 0, "'") + , (1186, 0, "G") + , (1187, 0, "a") + , (1188, 0, "m") + , (1189, 0, "e") + , (1190, 0, " ") + , (1191, 0, "c") + , (1192, 0, "o") + , (1193, 0, "m") + , (1194, 0, "p") + , (1195, 0, "l") + , (1196, 0, "e") + , (1197, 0, "t") + , (1198, 0, "e") + , (1199, 0, "'") + , (1200, 0, ",") + , (1200, 1, "") + , (1164, 36, "\t\tstate: { label: 'Game complete'") + , (1197, 0, " ") + , (1198, 0, "}") + , (1199, 0, ",") + , (1200, 0, " ") + , (1201, 0, "o") + , (1202, 0, "f") + , (1203, 0, "f") + , (1201, 3, "offset_ms") + , (1210, 0, "\n\t\t") + , (1211, 2, "\t}") + , (101, 0, "// ") + , (101, 3, "") + , (9, 30, "") + , (10, 1, "") + , (9, 1, "") + , (8, 1, "") + , (1959, 0, "\n") + , (1960, 0, "\n") + , (1961, 0, "4") + , (1962, 0, ":") + , (1962, 1, "") + , (1961, 1, "") + , (1961, 0, "l") + , (1962, 0, "e") + , (1963, 0, "t") + , (1964, 0, " ") + , (1965, 0, "t") + , (1966, 0, "i") + , (1967, 0, "m") + , (1968, 0, "e") + , (1969, 0, "r") + , (1970, 0, "\n") + , (1971, 0, "$") + , (1972, 0, ":") + , (1973, 0, " ") + , (1974, 0, "{") + , (1975, 0, "\n\t") + , (1977, 0, "\n\t") + , (1976, 1, "") + , (1977, 1, "}") + , (1978, 0, "\n") + , (1976, 0, "\t") + , (1977, 0, "i") + , (1978, 0, "f") + , (1979, 0, " ") + , (1980, 0, "(") + , (1981, 0, "s") + , (1982, 0, "t") + , (1983, 0, "a") + , (1984, 0, "t") + , (1985, 0, "e") + , (1986, 0, " ") + , (1987, 0, "=") + , (1988, 0, "=") + , (1989, 0, "=") + , (1990, 0, " ") + , (1991, 0, "'") + , (1992, 0, "p") + , (1993, 0, "l") + , (1994, 0, "a") + , (1995, 0, "y") + , (1996, 0, "i") + , (1997, 0, "n") + , (1998, 0, "g") + , (1999, 0, "'") + , (2000, 0, ")") + , (2001, 0, " ") + , (2002, 0, "{") + , (2003, 0, "\n\t\t") + , (2006, 0, "\n\t\t") + , (2004, 2, "") + , (2005, 2, "\t}") + , (2004, 0, "\t\t") + , (2004, 2, "") + , (2000, 0, " ") + , (2001, 0, "&") + , (2002, 0, "&") + , (2003, 0, " ") + , (2004, 0, "t") + , (2005, 0, "i") + , (2006, 0, "m") + , (2007, 0, "e") + , (2008, 0, "r") + , (2009, 0, " ") + , (2010, 0, "=") + , (2011, 0, "=") + , (2012, 0, " ") + , (2013, 0, "n") + , (2014, 0, "u") + , (2015, 0, "l") + , (2016, 0, "l") + , (2021, 0, "\t\t") + , (2023, 0, "/") + , (2024, 0, "/") + , (2023, 2, "") + , (2023, 0, "t") + , (2024, 0, "i") + , (2025, 0, "m") + , (2026, 0, "e") + , (2027, 0, "r") + , (2028, 0, " ") + , (2029, 0, "=") + , (2030, 0, " ") + , (2031, 0, "s") + , (2032, 0, "e") + , (2033, 0, "t") + , (2034, 0, "I") + , (2035, 0, "n") + , (2036, 0, "t") + , (2031, 6, "setInterval") + , (2042, 0, "(") + , (2043, 0, "(") + , (2044, 0, ")") + , (2045, 0, " ") + , (2046, 0, "=") + , (2047, 0, ">") + , (2048, 0, " ") + , (2049, 0, "{") + , (2050, 0, "\n\t\t\t") + , (2054, 0, "\n\t\t\t") + , (2051, 3, "") + , (2052, 3, "\t\t}") + , (2055, 0, ",") + , (2056, 0, " ") + , (2057, 0, "0") + , (2058, 0, "0") + , (2058, 1, "") + , (2057, 1, "") + , (2057, 0, "1") + , (2058, 0, "0") + , (2059, 0, "0") + , (2060, 0, "0") + , (2061, 0, ")") + , (2051, 0, "\t\t\t") + , (2054, 0, "/") + , (2055, 0, "/") + , (2055, 1, "") + , (2054, 1, "") + , (2054, 0, "c") + , (2055, 0, "o") + , (2056, 0, "n") + , (2057, 0, "s") + , (2058, 0, "o") + , (2059, 0, "l") + , (2060, 0, "e") + , (2054, 7, "console") + , (2061, 0, ".") + , (2062, 0, "l") + , (2063, 0, "o") + , (2064, 0, "g") + , (2062, 3, "log") + , (2065, 0, "(") + , (2066, 0, "'") + , (2067, 0, "t") + , (2068, 0, "i") + , (2069, 0, "c") + , (2070, 0, "k") + , (2071, 0, "'") + , (2072, 0, ")") + , (2087, 0, " ") + , (2088, 0, "e") + , (2089, 0, "l") + , (2090, 0, "s") + , (2091, 0, "e") + , (2092, 0, " ") + , (2093, 0, "i") + , (2094, 0, "f") + , (2095, 0, " ") + , (2096, 0, "(") + , (2097, 0, "s") + , (2098, 0, "t") + , (2099, 0, "a") + , (2100, 0, "t") + , (2101, 0, "e") + , (2102, 0, " ") + , (2103, 0, "!") + , (2104, 0, "=") + , (2105, 0, "=") + , (2106, 0, " ") + , (2107, 0, "'") + , (2108, 0, "p") + , (2109, 0, "l") + , (2110, 0, "a") + , (2111, 0, "y") + , (2112, 0, "i") + , (2113, 0, "n") + , (2114, 0, "g") + , (2115, 0, "'") + , (2116, 0, " ") + , (2117, 0, "&") + , (2118, 0, "&") + , (2119, 0, " ") + , (2120, 0, "t") + , (2121, 0, "i") + , (2122, 0, "m") + , (2123, 0, "e") + , (2124, 0, "r") + , (2125, 0, " ") + , (2126, 0, "!") + , (2127, 0, "=") + , (2128, 0, " ") + , (2129, 0, "n") + , (2130, 0, "u") + , (2131, 0, "l") + , (2132, 0, "l") + , (2133, 0, ")") + , (2134, 0, " ") + , (2135, 0, "{") + , (2136, 0, "\n\t\t") + , (2139, 0, "\n\t\t") + , (2137, 2, "") + , (2138, 2, "\t}") + , (2137, 0, "\t\t") + , (2139, 0, "c") + , (2140, 0, "l") + , (2141, 0, "e") + , (2142, 0, "a") + , (2143, 0, "r") + , (2144, 0, "I") + , (2145, 0, "n") + , (2146, 0, "t") + , (2139, 8, "clearInterval") + , (2152, 0, "(") + , (2153, 0, "t") + , (2154, 0, "i") + , (2155, 0, "m") + , (2156, 0, "e") + , (2157, 0, "r") + , (2158, 0, ")") + , (2159, 0, "\n\t\t") + , (2162, 0, "t") + , (2163, 0, "i") + , (2164, 0, "m") + , (2165, 0, "e") + , (2166, 0, "r") + , (2167, 0, " ") + , (2168, 0, "=") + , (2169, 0, " ") + , (2170, 0, "n") + , (2171, 0, "u") + , (2172, 0, "l") + , (2173, 0, "l") + , (1975, 0, "\n\t") + , (1977, 0, "c") + , (1978, 0, "o") + , (1979, 0, "n") + , (1980, 0, "s") + , (1981, 0, "o") + , (1982, 0, "l") + , (1983, 0, "e") + , (1977, 7, "console") + , (1984, 0, ".") + , (1985, 0, "l") + , (1986, 0, "o") + , (1987, 0, "g") + , (1985, 3, "log") + , (1988, 0, "(") + , (1989, 0, "s") + , (1990, 0, "t") + , (1991, 0, "a") + , (1992, 0, "t") + , (1993, 0, "e") + , (1989, 5, "state") + , (1994, 0, ",") + , (1995, 0, " ") + , (1996, 0, "t") + , (1997, 0, "i") + , (1998, 0, "m") + , (1999, 0, "e") + , (2000, 0, "r") + , (2001, 0, ")") + , (2081, 19, "") + , (2081, 0, "console.log('tick')") + , (2100, 0, "\n\t\t\t") + , (2104, 0, "\n\t\t\t") + , (2101, 3, "") + , (2102, 3, "") + , (2101, 0, "\n\t\t\t") + , (2105, 0, "l") + , (2106, 0, "e") + , (2107, 0, "t") + , (2108, 0, " ") + , (884, 298, "") + , (1646, 0, "\n") + , (1647, 0, "\n") + , ( 1647 + , 0 + , "\nconst get_current_state = (offset_ms) => {\n\tfor (let s = 0; s < game_stages.length; s++) {\n\t\tlet state = game_stages[s]\n\t\tif (state.duration * 1000 > offset_ms) {\n\t\t\treturn {state, offset_ms}\n\t\t}\n\t\toffset_ms -= state.duration * 1000\n\t}\n\treturn {\n\t\tstate: { label: 'Game complete' }, offset_ms\n\t}\n}" + ) + , (2111, 0, "{") + , (2112, 0, "s") + , (2113, 0, "t") + , (2114, 0, "a") + , (2115, 0, "t") + , (2116, 0, "e") + , (2117, 0, ",") + , (2118, 0, " ") + , (2119, 0, "o") + , (2120, 0, "f") + , (2121, 0, "f") + , (2122, 0, "s") + , (2123, 0, "e") + , (2124, 0, "t") + , (2125, 0, "_") + , (2126, 0, "m") + , (2127, 0, "s") + , (2128, 0, "}") + , (2129, 0, " ") + , (2130, 0, "=") + , (2131, 0, " ") + , (2132, 0, "g") + , (2133, 0, "e") + , (2134, 0, "t") + , (2135, 0, "_") + , (2136, 0, "c") + , (2137, 0, "u") + , (2138, 0, "r") + , (2132, 7, "get_current_state") + , (2149, 0, "(") + , (2150, 0, "D") + , (2151, 0, "a") + , (2152, 0, "t") + , (2153, 0, "e") + , (2150, 4, "Date") + , (2154, 0, ".") + , (2155, 0, "n") + , (2156, 0, "o") + , (2157, 0, "w") + , (2155, 3, "now") + , (2158, 0, "(") + , (2159, 0, ")") + , (2160, 0, " ") + , (2161, 0, "-") + , (2162, 0, " ") + , (2163, 0, "s") + , (2164, 0, "t") + , (2165, 0, "a") + , (2166, 0, "r") + , (2167, 0, "t") + , (2168, 0, "_") + , (2169, 0, "t") + , (2163, 7, "start_time") + , (2173, 0, ")") + , (2174, 0, "\n\t\t\t") + , (2175, 3, "") + , (1972, 0, "\n") + , (1973, 0, "l") + , (1974, 0, "e") + , (1975, 0, "t") + , (1976, 0, " ") + , (1977, 0, "l") + , (1978, 0, "a") + , (1979, 0, "b") + , (1980, 0, "e") + , (1981, 0, "l") + , (1977, 5, "") + , (1977, 0, "g") + , (1978, 0, "a") + , (1979, 0, "m") + , (1980, 0, "e") + , (1981, 0, "_") + , (1982, 0, "s") + , (1983, 0, "t") + , (1984, 0, "a") + , (1985, 0, "t") + , (1986, 0, "e") + , (1987, 0, ",") + , (1988, 0, " ") + , (1989, 0, "l") + , (1990, 0, "a") + , (1991, 0, "b") + , (1992, 0, "e") + , (1987, 6, "") + , (1987, 0, ",") + , (1988, 0, " ") + , (1989, 0, "g") + , (1990, 0, "a") + , (1991, 0, "m") + , (1992, 0, "e") + , (1993, 0, "_") + , (1989, 5, "s") + , (1990, 0, "t") + , (1991, 0, "a") + , (1992, 0, "t") + , (1993, 0, "e") + , (1994, 0, "_") + , (1995, 0, "o") + , (1996, 0, "f") + , (1997, 0, "f") + , (1998, 0, "s") + , (1999, 0, "e") + , (2000, 0, "t") + , (2001, 0, "_") + , (2002, 0, "m") + , (2003, 0, "s") + , (2207, 0, "\t\t\t") + , (2207, 3, "") + , (2149, 0, ":") + , (2150, 0, " ") + , (2151, 0, "g") + , (2152, 0, "a") + , (2153, 0, "m") + , (2154, 0, "e") + , (2155, 0, "_") + , (2151, 5, "game_stages") + , (2161, 1, "") + , (2160, 1, "") + , (2159, 1, "") + , (2159, 0, "t") + , (2160, 0, "e") + , (2172, 0, ":") + , (2173, 0, " ") + , (2174, 0, "s") + , (2175, 0, "t") + , (2176, 0, "a") + , (2177, 0, "t") + , (2178, 0, "e") + , (2179, 0, "_") + , (2180, 0, "o") + , (2181, 0, "f") + , (2182, 0, "f") + , (2174, 9, "state_offset_ms") + , (2139, 4, "") + , (2232, 1, "") + , (2231, 1, "") + , (2139, 0, ";") + , (2139, 1, "") + , (2139, 0, "l") + , (2140, 0, "e") + , (2141, 0, "t") + , (2142, 0, " ") + , (2149, 12, "") + , (2160, 17, "") + , (2206, 0, "\n\t\t\t") + , (2210, 0, "g") + , (2211, 0, "a") + , (2212, 0, "m") + , (2213, 0, "e") + , (2214, 0, "_") + , (2215, 0, "s") + , (2216, 0, "t") + , (2217, 0, "a") + , (2218, 0, "t") + , (2219, 0, "e") + , (2220, 0, " ") + , (2221, 0, "=") + , (2222, 0, " ") + , (2223, 0, "s") + , (2224, 0, "t") + , (2225, 0, "a") + , (2226, 0, "t") + , (2227, 0, "t") + , (2227, 1, "") + , (2227, 0, "e") + , (2228, 0, ";") + , (2229, 0, " ") + , (2230, 0, "s") + , (2231, 0, "t") + , (2232, 0, "a") + , (2233, 0, "t") + , (2234, 0, "e") + , (2235, 0, "_") + , (2236, 0, "o") + , (2237, 0, "f") + , (2230, 8, "state_offset_ms") + , (2245, 0, " ") + , (2246, 0, "=") + , (2247, 0, " ") + , (2248, 0, "o") + , (2249, 0, "f") + , (2250, 0, "f") + , (2248, 3, "offset_ms") + , (2257, 0, "\n\t\t\t") + , (2258, 3, "") + , (2210, 10, "s") + , (1977, 10, "s") + , (2202, 0, "t") + , (1978, 0, "t") + , (2204, 0, "a") + , (1979, 0, "a") + , (2206, 0, "t") + , (1980, 0, "t") + , (2208, 0, "e") + , (1981, 0, "e") + , (2210, 0, "_") + , (1982, 0, "_") + , (2212, 0, "l") + , (1983, 0, "l") + , (2214, 0, "a") + , (1984, 0, "a") + , (2216, 0, "b") + , (1985, 0, "b") + , (2218, 0, "e") + , (1986, 0, "e") + , (2220, 0, "l") + , (1987, 0, "l") + , (1990, 15, "s") + , (1991, 0, "t") + , (1992, 0, "a") + , (1993, 0, "t") + , (1994, 0, "e") + , (1995, 0, "_") + , (1996, 0, "p") + , (1997, 0, "r") + , (1998, 0, "o") + , (1999, 0, "g") + , (2000, 0, "r") + , (2001, 0, "e") + , (2002, 0, "s") + , (2003, 0, "s") + , (2004, 0, " ") + , (2005, 0, "/") + , (2006, 0, "/") + , (2007, 0, " ") + , (2008, 0, "0") + , (2009, 0, " ") + , (2010, 0, "t") + , (2011, 0, "o") + , (2012, 0, " ") + , (2013, 0, "1") + , (1988, 0, " ") + , (1989, 0, "/") + , (1990, 0, "/") + , (2242, 29, "") + , (2237, 5, "state") + , (2242, 0, ".") + , (2243, 0, "l") + , (2244, 0, "a") + , (2245, 0, "b") + , (2246, 0, "e") + , (2247, 0, "l") + , (2248, 0, "\n\t\t\t") + , (2252, 0, "w") + , (2253, 0, "i") + , (2254, 0, "d") + , (2255, 0, "t") + , (2256, 0, "h") + , (2257, 0, " ") + , (2258, 0, "=") + , (2259, 0, " ") + , (2260, 0, "o") + , (2261, 0, "f") + , (2262, 0, "f") + , (2260, 3, "offset_ms") + , (2260, 0, "s") + , (2261, 0, "t") + , (2262, 0, "a") + , (2263, 0, "t") + , (2264, 0, "e") + , (2265, 0, ".") + , (2266, 0, "d") + , (2267, 0, "u") + , (2268, 0, "r") + , (2269, 0, "a") + , (2270, 0, "t") + , (2271, 0, "i") + , (2272, 0, "o") + , (2273, 0, "n") + , (2274, 0, " ") + , (2275, 0, "*") + , (2276, 0, " ") + , (2277, 0, "1") + , (2278, 0, "0") + , (2279, 0, "0") + , (2280, 0, "0") + , (2281, 0, " ") + , (2282, 9, "") + , (2281, 1, "") + , (2260, 0, "offset_ms") + , (2269, 0, " ") + , (2270, 0, "/") + , (2271, 0, " ") + , (2272, 0, "(") + , (2294, 0, ")") + , (2259, 0, " ") + , (2260, 0, "1") + , (2261, 0, "0") + , (2262, 0, "0") + , (2263, 0, " ") + , (2264, 0, "*") + , (2646, 0, "\n\t") + , (2648, 0, "<") + , (2649, 0, "h") + , (2650, 0, "4") + , (2651, 0, ">") + , (2652, 0, "g") + , (2652, 1, "") + , (2652, 0, "s") + , (2653, 0, "t") + , (2654, 0, "a") + , (2655, 0, "t") + , (2656, 0, "e") + , (2657, 0, "_") + , (2652, 6, "state_label") + , (2652, 0, "{") + , (2664, 0, "}") + , (2665, 0, "<") + , (2666, 0, "/") + , (2667, 0, "h") + , (2668, 0, "2") + , (2668, 1, "") + , (2668, 0, "4") + , (2669, 0, ">") + , (2308, 4, "3") + , (2309, 0, "5") + , (2309, 1, "") + , (2308, 1, "") + , (2308, 0, "2") + , (2309, 0, "5") + , (2310, 0, "0") + , (821, 0, "+") + , (822, 0, "1") + , (835, 0, "+") + , (836, 0, "1") + , (1931, 0, ",") + , (1932, 0, " ") + , (1933, 0, "c") + , (1934, 0, "o") + , (1935, 0, "m") + , (1936, 0, "p") + , (1937, 0, "l") + , (1938, 0, "e") + , (1939, 0, "t") + , (1940, 0, "e") + , (1941, 0, ":") + , (1942, 0, " ") + , (1943, 0, "t") + , (1944, 0, "r") + , (1945, 0, "u") + , (1946, 0, "e") + , (2268, 0, "\n\t\t\t") + , (2272, 0, "i") + , (2273, 0, "f") + , (2274, 0, " ") + , (2275, 0, "(") + , (2276, 0, "s") + , (2277, 0, "t") + , (2278, 0, "a") + , (2279, 0, "t") + , (2280, 0, "e") + , (2276, 5, "state") + , (2281, 0, ".") + , (2282, 0, "c") + , (2283, 0, "o") + , (2284, 0, "m") + , (2285, 0, "p") + , (2286, 0, "l") + , (2287, 0, "e") + , (2288, 0, "t") + , (2289, 0, "e") + , (2290, 0, ")") + , (2291, 0, " ") + , (2272, 20, "") + , (2283, 0, " ") + , (2284, 0, "s") + , (2285, 0, "t") + , (2286, 0, "a") + , (2287, 0, "t") + , (2288, 0, "e") + , (2284, 5, "state") + , (2289, 0, ".") + , (2290, 0, "c") + , (2291, 0, "o") + , (2292, 0, "m") + , (2293, 0, "p") + , (2294, 0, "l") + , (2295, 0, "e") + , (2296, 0, "t") + , (2297, 0, "e") + , (2298, 0, " ") + , (2299, 0, "?") + , (2300, 0, " ") + , (2301, 0, "1") + , (2302, 0, "0") + , (2303, 0, "0") + , (2304, 0, "\n\t\t\t") + , (2308, 0, ":") + , (2037, 0, "\n") + , (2038, 0, "l") + , (2039, 0, "e") + , (2040, 0, "t") + , (2041, 0, " ") + , (2042, 0, "x") + , (2043, 0, "x") + , (2044, 0, "x") + , (2045, 0, " ") + , (2046, 0, "=") + , (2047, 0, " ") + , (2048, 0, "a") + , (2049, 0, "l") + , (2049, 1, "") + , (2048, 1, "") + , (2048, 0, "f") + , (2049, 0, "a") + , (2050, 0, "l") + , (2051, 0, "s") + , (2052, 0, "e") + , (2367, 0, "\n\t\t\t") + , (2371, 0, "\n\t\t\t") + , (2368, 3, "") + , (2372, 0, "i") + , (2373, 0, "f") + , (2374, 0, " ") + , (2375, 0, "(") + , (2376, 0, "s") + , (2377, 0, "t") + , (2378, 0, "a") + , (2379, 0, "t") + , (2380, 0, "e") + , (2376, 5, "state") + , (2381, 0, ".") + , (2382, 0, "c") + , (2383, 0, "o") + , (2384, 0, "m") + , (2385, 0, "p") + , (2386, 0, "l") + , (2387, 0, "e") + , (2388, 0, "t") + , (2389, 0, "e") + , (2390, 0, ")") + , (2391, 0, " ") + , (2392, 0, "x") + , (2393, 0, "x") + , (2394, 0, "x") + , (2395, 0, " ") + , (2396, 0, "=") + , (2397, 0, " ") + , (2398, 0, "t") + , (2399, 0, "r") + , (2400, 0, "u") + , (2401, 0, "e") + , (2127, 0, " ") + , (2128, 0, "&") + , (2129, 0, "&") + , (2130, 0, "&") + , (2131, 0, " ") + , (2131, 1, "") + , (2130, 1, "") + , (2130, 0, " ") + , (2131, 0, "x") + , (2132, 0, "x") + , (2133, 0, "x") + , (2134, 0, " ") + , (2135, 0, "=") + , (2136, 0, "=") + , (2137, 0, "=") + , (2138, 0, " ") + , (2139, 0, "f") + , (2140, 0, "a") + , (2141, 0, "l") + , (2142, 0, "s") + , (2143, 0, "e") + , (2462, 0, ")") + , (2443, 0, "(") + , (2463, 0, " ") + , (2464, 0, "|") + , (2465, 0, "|") + , (2466, 0, " ") + , (2467, 0, "x") + , (2468, 0, "x") + , (2469, 0, "x") + , (2470, 0, " ") + , (2470, 1, "") + , (3480, 8, "") + , (3419, 3, "\t\t\t\t") + , (3388, 2, "\t\t\t") + , (3388, 0, "\t\t\t{/if}\n") + , (3491, 0, "\n\t\t{/if}") + , (3429, 4, "\t\t\t") + , (3397, 3, "\t\t") + , (3388, 9, "") + , ( 3388 + , 0 + , "\t\t{:else if state == 'paused'}\n\t\t\t\n" + ) + , (2038, 15, "") + , (225, 0, "\n\t") + , (227, 0, "let xxx = false") + , (242, 0, "\n\t") + , (243, 1, "") + , (231, 3, "g") + , (232, 0, "a") + , (233, 0, "m") + , (234, 0, "e") + , (235, 0, "_") + , (236, 0, "c") + , (237, 0, "o") + , (238, 0, "m") + , (239, 0, "p") + , (240, 0, "l") + , (241, 0, "e") + , (242, 0, "t") + , (243, 0, "e") + , (244, 0, "d") + , (253, 0, " ") + , (254, 0, "/") + , (255, 0, "/") + , (225, 0, "\n\t") + , (258, 0, " ") + , (226, 1, "") + , (258, 0, "D") + , (259, 0, "e") + , (260, 0, "r") + , (261, 0, "i") + , (262, 0, "v") + , (263, 0, "e") + , (264, 0, "d") + , (265, 0, " ") + , (266, 0, "f") + , (267, 0, "r") + , (268, 0, "o") + , (269, 0, "m") + , (270, 0, " ") + , (271, 0, "o") + , (272, 0, "t") + , (273, 0, "h") + , (274, 0, "e") + , (275, 0, "r") + , (276, 0, " ") + , (277, 0, "p") + , (278, 0, "o") + , (279, 0, "r") + , (279, 1, "") + , (278, 1, "") + , (278, 0, "r") + , (279, 0, "o") + , (280, 0, "p") + , (281, 0, "e") + , (282, 0, "r") + , (283, 0, "t") + , (284, 0, "i") + , (285, 0, "e") + , (286, 0, "s") + , (2515, 3, "g") + , (2457, 3, "g") + , (2179, 3, "g") + , (2512, 0, "a") + , (2456, 0, "a") + , (2180, 0, "a") + , (2515, 0, "m") + , (2458, 0, "m") + , (2181, 0, "m") + , (2518, 0, "e") + , (2460, 0, "e") + , (2182, 0, "e") + , (2521, 0, "_") + , (2462, 0, "_") + , (2183, 0, "_") + , (2524, 0, "c") + , (2464, 0, "c") + , (2184, 0, "c") + , (2527, 0, "o") + , (2466, 0, "o") + , (2185, 0, "o") + , (2530, 0, "m") + , (2468, 0, "m") + , (2186, 0, "m") + , (2533, 0, "p") + , (2470, 0, "p") + , (2187, 0, "p") + , (2536, 0, "l") + , (2472, 0, "l") + , (2188, 0, "l") + , (2529, 10, "game_completed") + , (2464, 10, "game_completed") + , (2179, 10, "game_completed") + , (2179, 0, "!") + , (2194, 10, "") + , (287, 0, "\n\t") + , (289, 0, "l") + , (290, 0, "e") + , (291, 0, "t") + , (292, 0, " ") + , (293, 0, "i") + , (294, 0, "n") + , (295, 0, "t") + , (296, 0, "e") + , (297, 0, "r") + , (298, 0, "n") + , (299, 0, "a") + , (300, 0, "l") + , (301, 0, "_") + , (302, 0, "s") + , (303, 0, "t") + , (304, 0, "a") + , (305, 0, "t") + , (306, 0, "e") + , (307, 0, " ") + , (308, 0, "=") + , (309, 0, " ") + , (310, 0, "g") + , (311, 0, "a") + , (312, 0, "m") + , (313, 0, "e") + , (314, 0, "_") + , (310, 5, "game_completed") + , (324, 0, " ") + , (325, 0, "?") + , (326, 0, " ") + , (327, 0, "'") + , (328, 0, "c") + , (329, 0, "o") + , (330, 0, "m") + , (331, 0, "p") + , (332, 0, "l") + , (333, 0, "e") + , (334, 0, "t") + , (335, 0, "e") + , (336, 0, "d") + , (337, 0, "'") + , (338, 0, " ") + , (339, 0, ":") + , (340, 0, " ") + , (341, 0, "s") + , (342, 0, "t") + , (343, 0, "a") + , (344, 0, "t") + , (345, 0, "e") + , (2234, 19, "") + , (2198, 5, "i") + , (2199, 0, "n") + , (2200, 0, "t") + , (2201, 0, "e") + , (2202, 0, "r") + , (2203, 0, "n") + , (2198, 6, "internal_state") + , (2554, 5, "i") + , (2555, 0, "n") + , (2556, 0, "t") + , (2557, 0, "e") + , (2558, 0, "r") + , (2559, 0, "n") + , (2560, 0, "a") + , (2561, 0, "l") + , (2554, 8, "internal_state") + , (2553, 1, "") + , (2581, 19, "") + , (2644, 0, "\n") + , (2645, 0, "\n") + , (2646, 0, "$") + , (2647, 0, ":") + , (2648, 0, " ") + , (2649, 0, "{") + , (2650, 0, "\n\t") + , (2651, 1, "}") + , (2650, 0, "\n\t") + , (2652, 0, "c") + , (2653, 0, "o") + , (2654, 0, "n") + , (2655, 0, "s") + , (2656, 0, "o") + , (2657, 0, "l") + , (2658, 0, "e") + , (2652, 7, "console") + , (2659, 0, ".") + , (2660, 0, "l") + , (2661, 0, "o") + , (2662, 0, "g") + , (2660, 3, "log") + , (2663, 0, "(") + , (2664, 0, "'") + , (2665, 0, "i") + , (2666, 0, "n") + , (2667, 0, "t") + , (2668, 0, "e") + , (2669, 0, "r") + , (2670, 0, "n") + , (2671, 0, "a") + , (2672, 0, "l") + , (2673, 0, " ") + , (2674, 0, "s") + , (2675, 0, "t") + , (2676, 0, "a") + , (2677, 0, "t") + , (2678, 0, "e") + , (2679, 0, "'") + , (2680, 0, ",") + , (2681, 0, " ") + , (2682, 0, "i") + , (2683, 0, "n") + , (2684, 0, "t") + , (2685, 0, "e") + , (2686, 0, "r") + , (2687, 0, "n") + , (2682, 6, "internal_state") + , (2696, 0, ")") + , (288, 1, "") + , (227, 1, "") + , (197, 1, "") + , (168, 1, "") + , (149, 1, "") + , (129, 1, "") + , (108, 1, "") + , (90, 1, "") + , (67, 1, "") + , (49, 1, "") + , (26, 1, "") + , (9, 1, "") + , (277, 3, "$") + , (278, 0, ":") + , (276, 0, "\n") + , (277, 0, "l") + , (278, 0, "e") + , (279, 0, "t") + , (280, 0, " ") + , (281, 0, "i") + , (282, 0, "n") + , (283, 0, "t") + , (284, 0, "e") + , (285, 0, "r") + , (286, 0, "n") + , (281, 6, "internal_state") + , (2494, 0, "// ") + , (277, 0, "// ") + , (277, 3, "") + , (2494, 3, "") + , (296, 0, "// ") + , (277, 0, "// ") + , (299, 3, "") + , (277, 3, "") + , (2559, 9, "") + , (2204, 9, "") + , (2240, 0, " ") + , (2241, 0, "&") + , (2242, 0, "&") + , (2243, 0, " ") + , (2244, 0, "!") + , (2245, 0, "g") + , (2246, 0, "a") + , (2247, 0, "m") + , (2248, 0, "e") + , (2249, 0, "_") + , (2245, 5, "game_completed") + , (2569, 0, "(") + , (2589, 0, " ") + , (2590, 0, "&") + , (2591, 0, "&") + , (2592, 0, " ") + , (2592, 1, "") + , (2591, 1, "") + , (2590, 1, "") + , (2590, 0, "|") + , (2591, 0, "|") + , (2592, 0, " ") + , (2593, 0, "g") + , (2594, 0, "a") + , (2595, 0, "m") + , (2596, 0, "e") + , (2597, 0, "_") + , (2593, 5, "game_completed") + , (2607, 0, ")") + , (2593, 14, "") + , (2592, 1, "") + , (2591, 1, "") + , (2590, 1, "") + , (2589, 1, "") + , (2570, 0, "game_completed") + , (2584, 0, " ") + , (2585, 0, "|") + , (2586, 0, "|") + , (2587, 0, " ") + , (2198, 0, "\n\t") + , (2200, 0, "/") + , (2201, 0, "/") + , (2202, 0, " ") + , (2203, 0, "S") + , (2204, 0, "a") + , (2205, 0, "d") + , (2206, 0, "l") + , (2207, 0, "y") + , (2208, 0, " ") + , (2209, 0, "w") + , (2210, 0, "e") + , (2211, 0, " ") + , (2212, 0, "c") + , (2213, 0, "a") + , (2214, 0, "n") + , (2215, 0, "'") + , (2216, 0, "t") + , (2217, 0, " ") + , (2218, 0, "u") + , (2219, 0, "s") + , (2220, 0, "e") + , (2221, 0, " ") + , (2222, 0, "i") + , (2223, 0, "n") + , (2224, 0, "t") + , (2225, 0, "e") + , (2226, 0, "r") + , (2227, 0, "n") + , (2228, 0, "a") + , (2229, 0, "l") + , (2230, 0, "_") + , (2231, 0, "s") + , (2232, 0, "t") + , (2233, 0, "a") + , (2234, 0, "t") + , (2235, 0, "e") + , (2236, 0, " ") + , (2237, 0, "h") + , (2238, 0, "e") + , (2239, 0, "r") + , (2240, 0, "e") + , (2241, 0, " ") + , (2242, 0, "b") + , (2243, 0, "e") + , (2244, 0, "c") + , (2245, 0, "a") + , (2246, 0, "u") + , (2247, 0, "s") + , (2248, 0, "e") + , (2249, 0, " ") + , (2250, 0, "i") + , (2251, 0, "t") + , (2252, 0, " ") + , (2253, 0, "g") + , (2254, 0, "e") + , (2255, 0, "n") + , (2256, 0, "e") + , (2257, 0, "r") + , (2258, 0, "a") + , (2259, 0, "t") + , (2260, 0, "e") + , (2261, 0, "s") + , (2262, 0, " ") + , (2263, 0, "a") + , (2264, 0, " ") + , (2265, 0, "c") + , (2266, 0, "y") + , (2267, 0, "c") + , (2268, 0, "l") + , (2269, 0, "i") + , (2270, 0, "g") + , (2270, 1, "") + , (2270, 0, "c") + , (2271, 0, " ") + , (2272, 0, "d") + , (2273, 0, "e") + , (2274, 0, "p") + , (2275, 0, "e") + , (2276, 0, "n") + , (2277, 0, "d") + , (2278, 0, "a") + , (2279, 0, "n") + , (2280, 0, "c") + , (2281, 0, "y") + , (2282, 0, ".") + , (3770, 0, "i") + , (3677, 0, "i") + , (3585, 0, "i") + , (3492, 0, "i") + , (3774, 0, "n") + , (3680, 0, "n") + , (3587, 0, "n") + , (3493, 0, "n") + , (3778, 0, "t") + , (3683, 0, "t") + , (3589, 0, "t") + , (3494, 0, "t") + , (3782, 0, "e") + , (3686, 0, "e") + , (3591, 0, "e") + , (3495, 0, "e") + , (3786, 0, "r") + , (3689, 0, "r") + , (3593, 0, "r") + , (3496, 0, "r") + , (3790, 0, "n") + , (3692, 0, "n") + , (3595, 0, "n") + , (3497, 0, "n") + , (3794, 0, "a") + , (3695, 0, "a") + , (3597, 0, "a") + , (3498, 0, "a") + , (3798, 0, "l") + , (3698, 0, "l") + , (3599, 0, "l") + , (3499, 0, "l") + , (3802, 0, "_") + , (3701, 0, "_") + , (3601, 0, "_") + , (3500, 0, "_") + , (3816, 6, "g") + , (3817, 0, "a") + , (3818, 0, "m") + , (3819, 0, "e") + , (3820, 0, "_") + , (3821, 0, "c") + , (3822, 0, "o") + , (3823, 0, "m") + , (3824, 0, "p") + , (3825, 0, "l") + , (3826, 0, "e") + , (3827, 0, "t") + , (3828, 0, "e") + , (3829, 0, "d") + , (3879, 6, "R") + , (3880, 0, "e") + , (3881, 0, "s") + , (3882, 0, "e") + , (3883, 0, "t") + , (3868, 7, "w") + , (3869, 0, "a") + , (3870, 0, "i") + , (3871, 0, "t") + , (3872, 0, "i") + , (3873, 0, "n") + , (3874, 0, "g") + , (3816, 5, "") + , (353, 0, "\n") + , (353, 0, "$") + , (354, 0, ":") + , (355, 0, " ") + , (356, 0, "{") + , (357, 0, "\n\t") + , (359, 0, "\n\t") + , (358, 1, "") + , (359, 1, "}") + , (358, 0, "\t") + , (359, 0, "i") + , (360, 0, "f") + , (361, 0, " ") + , (362, 0, "(") + , (363, 0, "s") + , (364, 0, "t") + , (365, 0, "a") + , (366, 0, "t") + , (367, 0, "e") + , (368, 0, " ") + , (369, 0, "!") + , (370, 0, "=") + , (371, 0, "=") + , (372, 0, " ") + , (373, 0, "'") + , (374, 0, "p") + , (375, 0, "l") + , (376, 0, "a") + , (377, 0, "y") + , (378, 0, "i") + , (379, 0, "n") + , (380, 0, "g") + , (381, 0, "'") + , (382, 0, ")") + , (383, 0, " ") + , (384, 0, "g") + , (385, 0, "a") + , (386, 0, "m") + , (387, 0, "e") + , (388, 0, "_") + , (384, 5, "game_completed") + , (398, 0, " ") + , (399, 0, "=") + , (400, 0, " ") + , (401, 0, "f") + , (402, 0, "a") + , (403, 0, "l") + , (404, 0, "s") + , (405, 0, "e") + , (5599, 0, "\n\t") + , (5601, 0, "t") + , (5602, 0, "r") + , (5603, 0, "a") + , (5604, 0, "n") + , (5605, 0, "s") + , (5606, 0, "i") + , (5607, 0, "t") + , (5608, 0, "i") + , (5609, 0, "o") + , (5610, 0, "n") + , (5611, 0, ":") + , (5612, 0, " ") + , (5613, 0, "w") + , (5614, 0, "i") + , (5615, 0, "d") + , (5616, 0, "t") + , (5617, 0, "h") + , (5618, 0, " ") + , (5619, 0, "1") + , (5620, 0, "s") + , (5621, 0, " ") + , (5621, 1, "") + , (5621, 0, " ") + , (5622, 0, "l") + , (5623, 0, "i") + , (5624, 0, "n") + , (5625, 0, "e") + , (5626, 0, "a") + , (5627, 0, "r") + , (5628, 0, ";") + , (5619, 1, "") + , (5619, 0, "0") + , (5620, 0, ".") + , (5621, 0, "2") + , (5621, 1, "") + , (5620, 1, "") + , (5619, 1, "") + , (5619, 0, "1") + , (5629, 0, " */") + , (5601, 0, "/* ") + , (2693, 3, "1") + , (2694, 0, "0") + , (2695, 0, "0") + , (2696, 0, "0") + , (357, 0, "\n\t") + , (358, 1, "") + , (357, 1, "") + , (384, 0, "[") + , (385, 0, "\n\t\t") + , (385, 3, "") + , (384, 1, "") + , (384, 0, "\n\t") + , (384, 0, "{") + , (387, 0, "\t") + , (410, 0, "\n\t\t") + , (411, 2, "\t}") + , (385, 0, "\n\t\t") + , (388, 0, "c") + , (389, 0, "o") + , (390, 0, "n") + , (391, 0, "s") + , (392, 0, "o") + , (393, 0, "l") + , (394, 0, "e") + , (388, 7, "console") + , (395, 0, ".") + , (396, 0, "l") + , (397, 0, "o") + , (398, 0, "g") + , (396, 3, "log") + , (399, 0, "(") + , (400, 0, "'") + , (401, 0, "x") + , (402, 0, "x") + , (403, 0, "x") + , (404, 0, "'") + , (405, 0, ")") + , (2836, 0, "\n\t\t") + , (2839, 0, "s") + , (2840, 0, "t") + , (2841, 0, "a") + , (2842, 0, "t") + , (2843, 0, "e") + , (2844, 0, "_") + , (2845, 0, "l") + , (2846, 0, "a") + , (2847, 0, "b") + , (2848, 0, "e") + , (2849, 0, "l") + , (2850, 0, "=") + , (2851, 0, " ") + , (2851, 1, "") + , (2850, 1, "") + , (2839, 11, "") + , (2220, 0, " ") + , (2221, 0, "=") + , (2222, 0, " ") + , (2223, 0, "'") + , (2224, 0, "W") + , (2225, 0, "a") + , (2226, 0, "i") + , (2227, 0, "t") + , (2228, 0, "i") + , (2229, 0, "n") + , (2230, 0, "g") + , (2231, 0, " ") + , (2232, 0, "f") + , (2233, 0, "o") + , (2234, 0, "r") + , (2235, 0, " ") + , (2236, 0, "h") + , (2237, 0, "o") + , (2238, 0, "s") + , (2239, 0, "t") + , (2240, 0, " ") + , (2241, 0, "t") + , (2242, 0, "o") + , (2243, 0, " ") + , (2244, 0, "s") + , (2245, 0, "t") + , (2246, 0, "a") + , (2247, 0, "r") + , (2248, 0, "t") + , (2236, 13, "g") + , (2237, 0, "a") + , (2238, 0, "m") + , (2239, 0, "e") + , (2240, 0, " ") + , (2241, 0, "o") + , (2242, 0, " ") + , (2242, 1, "") + , (2241, 1, "") + , (2241, 0, "t") + , (2242, 0, "o") + , (2243, 0, " ") + , (2244, 0, "s") + , (2245, 0, "t") + , (2246, 0, "a") + , (2247, 0, "r") + , (2248, 0, "t") + , (2249, 0, "'") + , (2250, 29, "") + , (2840, 0, "s") + , (2841, 0, "t") + , (2842, 0, "a") + , (2843, 0, "t") + , (2844, 0, "e") + , (2845, 0, "_") + , (2840, 6, "state_label") + , (2851, 0, " ") + , (2852, 0, "=") + , (2853, 0, " ") + , (2854, 0, "'Waiting for game to start'") + , (2220, 0, "/") + , (2221, 0, "/") + , (2220, 2, "") + , (2192, 1, "") + , (2191, 1, "") + , (2191, 0, "0") + , (2880, 0, "\n\t\t") + , (2883, 0, "w") + , (2884, 0, "i") + , (2885, 0, "d") + , (2886, 0, "t") + , (2887, 0, "h") + , (2888, 0, " ") + , (2889, 0, "=") + , (2890, 0, " ") + , (2891, 0, "0") + , (2729, 6, "") + , (2729, 0, "\n\t") + , (2731, 0, "\n\t") + , (2835, 56, "") + , (2729, 0, " ") + , (2730, 0, "e") + , (2731, 0, "l") + , (2732, 0, "s") + , (2733, 0, "e") + , (2734, 0, " ") + , (2735, 0, "{") + , (2736, 0, "\n\t\t") + , ( 2739 + , 0 + , "\t\tstate_label = 'Waiting for game to start'\n\t\twidth = 0\n" + ) + , (2737, 4, "\t\t") + , (2793, 0, "\t}") + , (2793, 2, "") + , (2737, 2, "\t\t\t\t") + , (2739, 56, "") + , (2736, 3, "") + , (2734, 2, "") + , (2729, 5, "") + , ( 2835 + , 0 + , "\t\tstate_label = 'Waiting for game to start'\n\t\twidth = 0\n" + ) + , (2731, 2, "") + , (2729, 2, "") + , (2729, 0, " else ") + , (2836, 0, "\n\t\t") + , (2837, 2, "\t}") + , (2839, 0, "\n\t") + , (2841, 0, "\n\t") + , (2840, 1, "") + , (2842, 0, "i") + , (2843, 0, "f") + , (2844, 0, " ") + , (2845, 0, "(") + , (2840, 0, "}") + , (2841, 0, "\n") + , (2842, 0, "\n") + , (2843, 0, "$") + , (2844, 0, ":") + , (2845, 0, " ") + , (2846, 0, "{") + , (2853, 0, "i") + , (2854, 0, "n") + , (2855, 0, "t") + , (2856, 0, "e") + , (2857, 0, "r") + , (2858, 0, "n") + , (2853, 6, "internal_state") + , (2867, 0, " ") + , (2868, 0, "!") + , (2869, 0, "=") + , (2870, 0, " ") + , (2871, 0, "'") + , (2872, 0, "p") + , (2872, 1, "") + , (2871, 1, "") + , (2870, 1, "") + , (2870, 0, "=") + , (2871, 0, " ") + , (2872, 0, "'") + , (2873, 0, "p") + , (2874, 0, "l") + , (2875, 0, "a") + , (2876, 0, "y") + , (2877, 0, "i") + , (2878, 0, "n") + , (2879, 0, "g") + , (2880, 0, "'") + , (2881, 0, ")") + , (2882, 0, " ") + , (2883, 0, "{") + , (2219, 30, "") + , (2838, 1, "") + , (2838, 0, "=") + , (2843, 7, "w") + , (2844, 0, "a") + , (2845, 0, "i") + , (2846, 0, "t") + , (2847, 0, "i") + , (2848, 0, "n") + , (2849, 0, "g") + , (0, 6003, "") + , ( 0 + , 0 + , "\n\n
\n\t

Glass Bead Game Timer

\n\t

Room: {room}

\n\t

Topic: {topic}

\n\t
{connection} / {state}
\n\t
{_active_sessions} player(s) in room
\n\n\t

{state_label}

\n\t
\n\t\t
\n\t
\n\n\t
\n\t\t

Game structure

\n\t\t{#if meditate}\n\t\t\t
Meditation (1 min)
\n\t\t{/if}\n\t\t{#each Array(Math.max(rounds, 0)) as _, r}\n\t\t\t
Round {r+1}:\n\t\t\t\t{#each Array(Math.max(players, 0)) as _, p}\n\t\t\t\t\t{p+1} \n\t\t\t\t{/each}\n\t\t\t
\n\t\t{/each}\n\t
\n\n\t
\n\t\t

Config

\n\t\t{#if internal_state == 'waiting'}\n\t\t\t\n\t\t{:else if internal_state == 'playing'}\n\t\t\t\n\t\t{:else if internal_state == 'paused'}\n\t\t\t\n\t\t{:else if internal_state == 'completed'}\n\t\t\t\n\t\t{/if}\n\n\t\t\n\n\t\t\n\n\t\t\n\n\t\t\n\n\t\t\n\n\t\t
\n\t\t\t(Total game length: {roundish(\n\t\t\t\t(rounds * players * seconds_per_bead + (meditate ? MEDITATION_SECONDS : 0)) / 60\n\t\t\t)} minutes)\n\t\t
\n\t\t
\n\t\t\t(Total game length: {roundish(\n\t\t\t\tgame_stages.reduce((x, s) => x + s.duration, 0) / 60\n\t\t\t)} minutes)\n\t\t
\n\t
\n
\n\n" + ) + , (0, 0, "\n") + , (0, 1, "") + , (9, 0, "\n") + , (9, 0, "e") + , (10, 0, "x") + , (11, 0, "p") + , (12, 0, "o") + , (13, 0, "r") + , (14, 0, "t") + , (15, 0, " ") + , (16, 0, "l") + , (17, 0, "e") + , (18, 0, "t") + , (19, 0, " ") + , (20, 0, "r") + , (21, 0, "e") + , (22, 0, "a") + , (23, 0, "d") + , (24, 0, "y") + , (9, 16, "") + , (8, 1, "") + , (3025, 0, "\n\t") + , (3027, 0, "{") + , (3028, 0, "#") + , (3029, 0, "i") + , (3030, 0, "f") + , (3031, 0, " ") + , (3032, 0, "i") + , (3033, 0, "n") + , (3034, 0, "t") + , (3035, 0, "e") + , (3036, 0, "r") + , (3037, 0, "n") + , (3032, 6, "internal_state") + , (3046, 0, " ") + , (3047, 0, "=") + , (3048, 0, "=") + , (3049, 0, "=") + , (3050, 0, " ") + , (3051, 0, "'") + , (3052, 0, "l") + , (3053, 0, "o") + , (3054, 0, "a") + , (3055, 0, "d") + , (3056, 0, "i") + , (3057, 0, "n") + , (3058, 0, "g") + , (3059, 0, "'") + , (3060, 0, "}") + , (3061, 0, "\n\t") + , (3063, 0, "\n\t") + , (3062, 1, "") + , (3064, 0, "{") + , (3065, 0, ":") + , (3066, 0, "e") + , (3067, 0, "l") + , (3068, 0, "s") + , (3069, 0, "e") + , (3070, 0, " ") + , (3071, 0, "}") + , (3071, 1, "") + , (3070, 1, "") + , (3070, 0, "}") + , (5480, 1, "\t\t") + , (5471, 2, "\t\t\t") + , (5456, 3, "\t\t\t\t") + , (5399, 4, "\t\t\t\t\t") + , (5365, 3, "\t\t\t\t") + , (5357, 2, "\t\t\t") + , (5348, 2, "\t\t\t") + , (5333, 3, "\t\t\t\t") + , (5248, 4, "\t\t\t\t\t") + , (5214, 3, "\t\t\t\t") + , (5206, 2, "\t\t\t") + , (5194, 2, "\t\t\t") + , (5102, 3, "\t\t\t\t") + , (5014, 3, "\t\t\t\t") + , (4988, 2, "\t\t\t") + , (4976, 2, "\t\t\t") + , (4884, 3, "\t\t\t\t") + , (4803, 3, "\t\t\t\t") + , (4777, 2, "\t\t\t") + , (4765, 2, "\t\t\t") + , (4673, 3, "\t\t\t\t") + , (4589, 3, "\t\t\t\t") + , (4562, 2, "\t\t\t") + , (4550, 2, "\t\t\t") + , (4458, 3, "\t\t\t\t") + , (4381, 3, "\t\t\t\t") + , (4333, 2, "\t\t\t") + , (4321, 2, "\t\t\t") + , (4306, 3, "\t\t\t\t") + , (4294, 4, "\t\t\t\t\t") + , (4266, 5, "\t\t\t\t\t\t") + , (4233, 4, "\t\t\t\t\t") + , (4202, 3, "\t\t\t\t") + , (4118, 3, "\t\t\t\t") + , (4103, 2, "\t\t\t") + , (4094, 2, "\t\t\t") + , (4033, 3, "\t\t\t\t") + , (3990, 2, "\t\t\t") + , (3928, 3, "\t\t\t\t") + , (3888, 2, "\t\t\t") + , (3828, 3, "\t\t\t\t") + , (3787, 2, "\t\t\t") + , (3726, 3, "\t\t\t\t") + , (3690, 2, "\t\t\t") + , (3672, 2, "\t\t\t") + , (3653, 1, "\t\t") + , (3644, 1, "\t\t") + , (3634, 2, "\t\t\t") + , (3624, 3, "\t\t\t\t") + , (3612, 4, "\t\t\t\t\t") + , (3587, 5, "\t\t\t\t\t\t") + , (3539, 4, "\t\t\t\t\t") + , (3518, 3, "\t\t\t\t") + , (3473, 2, "\t\t\t") + , (3465, 2, "\t\t\t") + , (3432, 3, "\t\t\t\t") + , (3415, 2, "\t\t\t") + , (3389, 2, "\t\t\t") + , (3370, 1, "\t\t") + , (3361, 1, "\t\t") + , (3309, 2, "\t\t\t") + , (3279, 1, "\t\t") + , (3255, 1, "\t\t") + , (3205, 1, "\t\t") + , (3170, 1, "\t\t") + , (3136, 1, "\t\t") + , (3104, 1, "\t\t") + , (3072, 1, "\t\t") + , (5555, 0, "\n\t\t") + , (5558, 0, "{") + , (5559, 0, "/") + , (5560, 0, "i") + , (5561, 0, "f") + , (5562, 0, "}") + , (5556, 2, "\t") + , (3062, 0, "\t") + , (3063, 0, "\t") + , (3064, 0, "<") + , (3065, 0, "h") + , (3066, 0, "1") + , (3067, 0, ">") + , (3068, 0, "L") + , (3069, 0, "o") + , (3070, 0, "a") + , (3071, 0, "d") + , (3072, 0, "i") + , (3073, 0, "n") + , (3074, 0, "g") + , (3075, 0, " ") + , (3076, 0, "i") + , (3077, 0, "n") + , (3078, 0, "t") + , (3076, 3, "g") + , (3077, 0, "a") + , (3078, 0, "m") + , (3079, 0, "e") + , (3080, 0, " ") + , (3081, 0, "s") + , (3082, 0, "t") + , (3083, 0, "a") + , (3084, 0, "t") + , (3085, 0, "e") + , (3086, 0, " ") + , (3087, 0, "f") + , (3088, 0, "r") + , (3089, 0, "o") + , (3090, 0, "m") + , (3091, 0, " ") + , (3092, 0, "s") + , (3093, 0, "e") + , (3094, 0, "r") + , (3095, 0, "v") + , (3096, 0, "e") + , (3097, 0, "r") + , (3098, 0, "<") + , (3099, 0, "/") + , (3100, 0, "h") + , (3101, 0, "1") + , (3102, 0, ">") + , (3086, 12, "") + , ( 4163 + , 0 + , "\n\t\t\t\t" + ) + , (4093, 62, "") + , (4101, 0, "\n\t\t\t{:else if internal_state == 'completed'}") + , (4093, 3, "\t\t\t\t") + , (4049, 44, "") + , (4049, 4, "\t\t\t") + , (4063, 4, "") + , (4063, 1, "") + , (4095, 0, " ") + , (4066, 0, "internal_state == 'completed' ") + , (4096, 0, "|") + , (4097, 0, "|") + , (4098, 0, " ") + , (4085, 9, "p") + , (4086, 0, "a") + , (4087, 0, "u") + , (4088, 0, "s") + , (4089, 0, "e") + , (4090, 0, "d") + , (4180, 0, " ") + , (4181, 0, "g") + , (4182, 0, "a") + , (4183, 0, "m") + , (4184, 0, "e") + , (4194, 0, "\n\t\t\t\t") + , (4199, 0, "{") + , (4200, 0, "/") + , (4201, 0, "i") + , (4202, 0, "f") + , (4203, 0, "}") + , (4195, 4, "\t\t\t") + , (4057, 0, "\n\t\t\t") + , (4066, 1, "") + , (4058, 3, "") + , (4063, 0, "#") + , (5231, 88, "") + , (5009, 88, "") + , (4794, 88, "") + , (4575, 88, "") + , (4963, 4, "") + , (4829, 4, "") + , (4702, 4, "") + , (4571, 4, "") + , (4950, 1, "") + , (4820, 1, "") + , (4697, 1, "") + , (4570, 1, "") + , (4947, 0, "\n") + , (4818, 0, "\n") + , (4696, 0, "\n") + , (4570, 0, "\n") + , (4951, 0, "\t\t\t\t") + , (4821, 0, "\t\t\t\t") + , (4698, 0, "\t\t\t\t") + , (4571, 0, "\t\t\t\t") + , ( 4967 + , 0 + , "" + ) + , ( 4833 + , 0 + , "" + ) + , ( 4706 + , 0 + , "" + ) + , ( 4575 + , 0 + , "" + ) + , (5231, 88, "") + , (5009, 88, "") + , (4794, 88, "") + , (4575, 88, "") + , (4963, 4, "") + , (4829, 4, "") + , (4702, 4, "") + , (4571, 4, "") + , (4950, 1, "") + , (4820, 1, "") + , (4697, 1, "") + , (4570, 1, "") + , (2401, 0, "\n\t\t") + , (2404, 0, "l") + , (2405, 0, "e") + , (2406, 0, "t") + , (2407, 0, " ") + , (2408, 0, "l") + , (2409, 0, "a") + , (2410, 0, "s") + , (2411, 0, "t") + , (2412, 0, "_") + , (2413, 0, "a") + , (2414, 0, "t") + , (2415, 0, "e") + , (2415, 1, "") + , (2414, 1, "") + , (2413, 1, "") + , (2413, 0, "s") + , (2414, 0, "t") + , (2415, 0, "a") + , (2416, 0, "t") + , (2417, 0, "e") + , (2418, 0, " ") + , (2419, 0, "=") + , (2420, 0, " ") + , (2421, 0, "n") + , (2422, 0, "u") + , (2423, 0, "l") + , (2424, 0, "l") + , (2425, 0, "\n\t\t") + , (2711, 0, "\n\t\t\t") + , (2426, 2, "") + , (2713, 0, "\n\t\t\t") + , (2710, 3, "") + , (2714, 0, "i") + , (2715, 0, "f") + , (2716, 0, " ") + , (2717, 0, "(") + , (2718, 0, "l") + , (2719, 0, "a") + , (2720, 0, "s") + , (2721, 0, "t") + , (2722, 0, "_") + , (2718, 5, "last_state") + , (2728, 0, " ") + , (2729, 0, "&") + , (2730, 0, "&") + , (2731, 0, " ") + , (2732, 0, "l") + , (2733, 0, "a") + , (2734, 0, "s") + , (2735, 0, "t") + , (2736, 0, "_") + , (2737, 0, "s") + , (2738, 0, "t") + , (2732, 7, "last_state") + , (2742, 0, " ") + , (2743, 0, "!") + , (2744, 0, "=") + , (2745, 0, " ") + , (2745, 1, "") + , (2744, 1, "") + , (2743, 1, "") + , (2743, 0, "!") + , (2744, 0, "=") + , (2745, 0, "=") + , (2746, 0, " ") + , (2747, 0, "s") + , (2748, 0, "t") + , (2749, 0, "a") + , (2750, 0, "t") + , (2751, 0, "e") + , (2752, 0, ")") + , (2753, 0, " ") + , (2754, 0, "{") + , (2755, 0, "\n\t\t\t\t") + , (2760, 0, "\n\t\t\t\t") + , (2756, 4, "") + , (2757, 4, "\t\t\t}") + , (2756, 0, "\t\t\t\t") + , (2760, 0, "c") + , (2761, 0, "o") + , (2762, 0, "n") + , (2763, 0, "s") + , (2764, 0, "o") + , (2765, 0, "l") + , (2766, 0, "e") + , (2760, 7, "console") + , (2767, 0, ".") + , (2768, 0, "l") + , (2769, 0, "o") + , (2770, 0, "g") + , (2768, 3, "log") + , (2771, 0, "(") + , (2772, 0, "'") + , (2773, 0, "s") + , (2774, 0, "t") + , (2775, 0, "a") + , (2776, 0, "t") + , (2777, 0, "e") + , (2778, 0, " ") + , (2779, 0, "c") + , (2780, 0, "h") + , (2781, 0, "a") + , (2782, 0, "n") + , (2783, 0, "g") + , (2784, 0, "e") + , (2785, 0, "d") + , (2786, 0, "'") + , (2787, 0, ")") + , (2788, 0, "\n\t\t\t\t") + , (2793, 0, "l") + , (2794, 0, "a") + , (2795, 0, "s") + , (2796, 0, "t") + , (2797, 0, "_") + , (2793, 5, "last_state") + , (2803, 0, " ") + , (2804, 0, "=") + , (2805, 0, " ") + , (2806, 0, "s") + , (2807, 0, "t") + , (2808, 0, "a") + , (2809, 0, "t") + , (2810, 0, "e") + , (2806, 5, "state") + , (2688, 0, "{") + , (2689, 0, "\n\t\t\t\t") + , (2715, 0, "\n\t\t\t\t") + , (2716, 4, "\t\t\t}") + , (2689, 0, "\n\t\t\t\t") + , (2694, 0, "/") + , (2695, 0, "/") + , (2696, 0, " ") + , (2697, 0, "A") + , (2698, 0, "n") + , (2699, 0, "d") + , (2700, 0, " ") + , (2701, 0, "p") + , (2702, 0, "l") + , (2703, 0, "a") + , (2704, 0, "y") + , (2705, 0, " ") + , (2706, 0, "g") + , (2707, 0, "o") + , (2708, 0, "n") + , (2709, 0, "g") + , (2750, 14, "") + , (2743, 92, "") + , (2664, 0, "\n\t\t\t") + , (2668, 0, "\n\t\t\t") + , (2665, 3, "") + , (2666, 3, "") + , ( 2665 + , 0 + , "\t\t\tif (last_state !== state) {\n\t\t\t\tconsole.log('state changed')\n\t\t\t\tlast_state = state\n\t\t\t}\n" + ) + , (2756, 1, "") + , (3176, 0, "\n\t") + , ( 3178 + , 0 + , "\n" + ) + , (3177, 1, "") + , (3178, 0, "\t") + , (3176, 1, "") + , (3255, 0, "\n\t") + , (3256, 1, "") + , (3205, 25, "h") + , (3206, 0, "i") + , (3207, 0, "_") + , (3207, 1, "") + , (3207, 0, "-") + , (3208, 0, "m") + , (3209, 0, "e") + , (3210, 0, "t") + , (3211, 0, "a") + , (3212, 0, "l") + , (3213, 0, "-") + , (3214, 0, "t") + , (3215, 0, "o") + , (3216, 0, "n") + , (3217, 0, "e") + , (3218, 0, ".") + , (3219, 0, "m") + , (3220, 0, "p") + , (3221, 0, "3") + , (3178, 0, "") + , (3201, 0, "\n\t\t") + , (3273, 0, "\n\t\t") + , (3276, 0, "<") + , (3277, 0, "/") + , (3278, 0, "t") + , (3279, 0, "r") + , (3280, 0, "a") + , (3281, 0, "c") + , (3282, 0, "k") + , (3274, 9, "\t") + , (3274, 9, "") + , (3273, 1, "") + , (3178, 23, "") + , (3177, 1, "") + , (3176, 1, "") + , (3240, 0, "") + , (3177, 2, "\t") + , (3189, 9, "a") + , (3190, 0, "u") + , (3191, 0, "d") + , (3192, 0, "i") + , (3193, 0, "o") + , (3194, 0, "1") + , (3196, 0, " ") + , (3197, 0, "b") + , (3198, 0, "i") + , (3199, 0, "n") + , (3200, 0, "d") + , (3201, 0, ":") + , (3202, 0, "t") + , (3203, 0, "h") + , (3204, 0, "i") + , (3205, 0, "s") + , (3206, 0, "=") + , (3185, 11, "") + , (3184, 1, "") + , (3195, 0, "{") + , (3196, 0, "a") + , (3197, 0, "u") + , (3198, 0, "d") + , (3199, 0, "i") + , (3200, 0, "o") + , (3201, 0, "1") + , (3202, 0, "}") + , (437, 0, "\n") + , (437, 0, "\n") + , (438, 0, "l") + , (439, 0, "e") + , (440, 0, "t") + , (441, 0, " ") + , (442, 0, "a") + , (443, 0, "u") + , (444, 0, "d") + , (445, 0, "i") + , (446, 0, "o") + , (447, 0, "1") + , (2413, 0, "\n\t\t") + , (2416, 0, "a") + , (2417, 0, "u") + , (2418, 0, "d") + , (2416, 3, "audio1") + , (2422, 0, ".") + , (2423, 0, "p") + , (2424, 0, "l") + , (2425, 0, "a") + , (2426, 0, "y") + , (2427, 0, "(") + , (2428, 0, ")") + , (3237, 0, ".") + , (3238, 0, ".") + , (3239, 0, "/") + , ( 3305 + , 0 + , "\n\t" + ) + , (3238, 1, "") + , (3237, 1, "") + , (3336, 1, "") + , (3336, 1, "") + , (3238, 2, "l") + , (3239, 0, "o") + , (3328, 1, "") + , (3328, 0, "2") + , (438, 0, "let audio1\n") + , (458, 1, "") + , (458, 0, "2") + , (5505, 0, " -->") + , (5353, 0, "" + ) + , (6364, 165, "") + , (6902, 163, "") + , (6812, 1, "") + , (6812, 1, "") + , (6812, 1, "") + , (6812, 1, "") + , (6895, 1, "") + , (6877, 2, "\t") + , (6857, 2, "\t") + , (6841, 2, "\t") + , (6819, 2, "\t") + , (6812, 0, "\n") + , (6820, 21, "") + , (6865, 4, "2") + , (6866, 0, "e") + , (6867, 0, "m") + , (6835, 18, "") + , (6834, 1, "") + , (1244, 0, "\n\t\t\t\t") + , (1249, 0, "r") + , (1250, 0, ",") + , (1251, 0, " ") + , (1252, 0, "p") + , (4182, 0, "\n") + , (4183, 0, "\n") + , (4183, 0, "c") + , (4184, 0, "o") + , (4185, 0, "n") + , (4186, 0, "s") + , (4187, 0, "t") + , (4188, 0, " ") + , (4189, 0, "p") + , (4190, 0, "r") + , (4191, 0, "o") + , (4192, 0, "g") + , (4193, 0, "r") + , (4194, 0, "e") + , (4195, 0, "s") + , (4196, 0, "s") + , (4197, 0, "_") + , (4198, 0, "c") + , (4199, 0, "l") + , (4200, 0, "a") + , (4201, 0, "s") + , (4202, 0, "s") + , (4203, 0, " ") + , (4204, 0, "=") + , (4205, 0, " ") + , (4206, 0, "(") + , (4207, 0, "t") + , (4208, 0, "y") + , (4209, 0, "p") + , (4210, 0, "e") + , (4207, 4, "type") + , (4211, 0, ",") + , (8, 0, "\nimport { type } from \"os\";\n\n") + , (4241, 0, " ") + , (4242, 0, "r") + , (4243, 0, ",") + , (4244, 0, " ") + , (4245, 0, "p") + , (4246, 0, ")") + , (4247, 0, " ") + , (4248, 0, "=") + , (4249, 0, ">") + , (4250, 0, " ") + , (4251, 0, "{") + , (4252, 0, "\n\t") + , (4254, 0, "\n\t") + , (4253, 1, "") + , (4254, 1, "}") + , (4253, 0, "\t") + , (4254, 0, "i") + , (4255, 0, "f") + , (4256, 0, " ") + , (4257, 0, "(") + , (4258, 0, "s") + , (4259, 0, "t") + , (4260, 0, "a") + , (4261, 0, "t") + , (4262, 0, "e") + , (4258, 5, "") + , (4258, 0, "c") + , (4259, 0, "u") + , (4260, 0, "r") + , (4261, 0, "r") + , (4262, 0, "e") + , (4263, 0, "n") + , (4264, 0, "t") + , (4265, 0, "_") + , (4266, 0, "g") + , (4266, 1, "") + , (4258, 8, "current_stage") + , (4271, 0, " ") + , (4272, 0, "=") + , (4273, 0, "=") + , (4274, 0, " ") + , (4275, 0, "n") + , (4276, 0, "u") + , (4277, 0, "l") + , (4278, 0, "l") + , (4279, 0, ")") + , (4280, 0, " ") + , (4281, 0, "r") + , (4282, 0, "e") + , (4283, 0, "t") + , (4284, 0, "u") + , (4285, 0, "r") + , (4286, 0, "n") + , (4287, 0, " ") + , (4288, 0, "'") + , (4289, 0, "'") + , (4290, 0, "\n\t") + , (4292, 0, "\n\t") + , (4291, 1, "") + , (4292, 1, "") + , (1273, 0, "\n\t\t\t\t") + , (1278, 0, "t") + , (1279, 0, "y") + , (1280, 0, "p") + , (1281, 0, "e") + , (1282, 0, ":") + , (1283, 0, " ") + , (1284, 0, "'") + , (1285, 0, "b") + , (1286, 0, "e") + , (1287, 0, "a") + , (1288, 0, "d") + , (1289, 0, "'") + , (1290, 0, ",") + , (1274, 26, "\t\t\t\ttype: 'bead', r, p") + , (1068, 0, "\n\t\t") + , (1071, 0, "t") + , (1072, 0, "y") + , (1073, 0, "p") + , (1074, 0, "e") + , (1075, 0, ":") + , (1076, 0, " ") + , (1077, 0, "'") + , (1078, 0, "m") + , (1079, 0, "e") + , (1080, 0, "d") + , (1081, 0, "i") + , (1082, 0, "t") + , (1083, 0, "a") + , (1084, 0, "t") + , (1085, 0, "e") + , (1086, 0, "'") + , (1087, 0, ",") + , (992, 0, "\n\t\t") + , (995, 0, "t") + , (996, 0, "y") + , (997, 0, "p") + , (998, 0, "e") + , (999, 0, "'") + , (999, 1, "") + , (999, 0, ":") + , (1000, 0, " ") + , (1001, 0, "'") + , (993, 9, "") + , (992, 1, "") + , (2060, 0, " ") + , (2061, 0, "t") + , (2062, 0, "y") + , (2063, 0, "p") + , (2064, 0, "e") + , (2065, 0, ":") + , (2066, 0, " ") + , (2067, 0, "'") + , (2068, 0, "c") + , (2069, 0, "o") + , (2070, 0, "m") + , (2071, 0, "p") + , (2072, 0, "l") + , (2073, 0, "e") + , (2074, 0, "t") + , (2075, 0, "e") + , (2076, 0, "'") + , (2077, 0, ",") + , (2077, 16, "") + , (2926, 9, "") + , (2917, 9, "new_stage") + , (2926, 0, ".") + , (2927, 0, "t") + , (2928, 0, "y") + , (2929, 0, "p") + , (2930, 0, "e") + , (2931, 0, " ") + , (2932, 0, "=") + , (2933, 0, "=") + , (2934, 0, "=") + , (2935, 0, " ") + , (2936, 0, "'") + , (2937, 0, "c") + , (2938, 0, "o") + , (2939, 0, "m") + , (2940, 0, "p") + , (2941, 0, "l") + , (2942, 0, "e") + , (2943, 0, "t") + , (2944, 0, "e") + , (2945, 0, "'") + , (3126, 9, "") + , (3113, 13, "current_stage") + , (3126, 0, ".") + , (3127, 0, "t") + , (3128, 0, "y") + , (3129, 0, "p") + , (3130, 0, "e") + , (3131, 0, " ") + , (3132, 0, "=") + , (3133, 0, "=") + , (3134, 0, "=") + , (3135, 0, " ") + , (3136, 0, "'") + , (3137, 0, "c") + , (3138, 0, "o") + , (3139, 0, "m") + , (3140, 0, "p") + , (3141, 0, "l") + , (3142, 0, "e") + , (3143, 0, "t") + , (3144, 0, "e") + , (3145, 0, "'") + , (3353, 9, "") + , (3340, 13, "current_stage") + , (3353, 0, ".") + , (3354, 0, "t") + , (3355, 0, "y") + , (3356, 0, "p") + , (3357, 0, "e") + , (3358, 0, " ") + , (3359, 0, "=") + , (3360, 0, "=") + , (3361, 0, "=") + , (3362, 0, " ") + , (3363, 0, "c") + , (3364, 0, "o") + , (3365, 0, "m") + , (3366, 0, "p") + , (3367, 0, "l") + , (3368, 0, "e") + , (3369, 0, "t") + , (3370, 0, "e") + , (3371, 0, "'") + , (3363, 0, "'") + , (4129, 9, ".") + , (4130, 0, "t") + , (4131, 0, "y") + , (4132, 0, "p") + , (4133, 0, "e") + , (4134, 0, " ") + , (4135, 0, "=") + , (4136, 0, "=") + , (4137, 0, "=") + , (4138, 0, " ") + , (4139, 0, "'") + , (4140, 0, "c") + , (4141, 0, "o") + , (4142, 0, "m") + , (4143, 0, "p") + , (4144, 0, "e") + , (4145, 0, "l") + , (4146, 0, "t") + , (4147, 0, "e") + , (4148, 0, "'") + , (4144, 4, "l") + , (4145, 0, "e") + , (4146, 0, "t") + , (4147, 0, "e") + , (4031, 22, "") + , (4030, 1, "") + , (4029, 1, "") + , (4029, 0, "c") + , (4030, 0, "u") + , (4031, 0, "r") + , (4032, 0, "r") + , (4033, 0, "e") + , (4034, 0, "n") + , (4035, 0, "t") + , (4029, 7, "current_stage") + , (4042, 0, ".") + , (4043, 0, "t") + , (4044, 0, "y") + , (4045, 0, "p") + , (4046, 0, "e") + , (4047, 0, " ") + , (4048, 0, "=") + , (4049, 0, "=") + , (4050, 0, "=") + , (4051, 0, " ") + , (4052, 0, "'") + , (4053, 0, "c") + , (4054, 0, "o") + , (4055, 0, "m") + , (4056, 0, "p") + , (4057, 0, "l") + , (4058, 0, "e") + , (4059, 0, "t") + , (4060, 0, "e") + , (4061, 0, "'") + , (9, 27, "") + , (9, 2, "") + , (2499, 4, "c") + , (2500, 0, "u") + , (2501, 0, "r") + , (2502, 0, "r") + , (2503, 0, "e") + , (2504, 0, "n") + , (2505, 0, "t") + , (2512, 4, "") + , (2841, 0, "// ") + , (4354, 0, "\t") + , (4355, 0, "i") + , (4356, 0, "f") + , (4357, 0, " ") + , (4358, 0, "c") + , (4359, 0, "u") + , (4360, 0, "r") + , (4361, 0, "r") + , (4362, 0, "e") + , (4363, 0, "n") + , (4358, 6, "current_stage") + , (4273, 0, "\n") + , (4274, 0, "c") + , (4275, 0, "o") + , (4276, 0, "n") + , (4277, 0, "s") + , (4278, 0, "t") + , (4279, 0, " ") + , (4280, 0, "o") + , (4281, 0, "r") + , (4282, 0, "d") + , (4283, 0, "e") + , (4284, 0, "r") + , (4285, 0, " ") + , (4286, 0, "=") + , (4287, 0, " ") + , (4288, 0, "[") + , (4289, 0, "'") + , (4290, 0, "m") + , (4291, 0, "e") + , (4292, 0, "d") + , (4293, 0, "i") + , (4294, 0, "t") + , (4295, 0, "a") + , (4296, 0, "t") + , (4297, 0, "e") + , (4298, 0, ",") + , (4299, 0, " ") + , (4299, 1, "") + , (4298, 1, "") + , (4298, 0, "'") + , (4299, 0, ",") + , (4300, 0, " ") + , (4301, 0, "'") + , (4302, 0, "b") + , (4303, 0, "e") + , (4304, 0, "a") + , (4305, 0, "d") + , (4306, 0, "'") + , (4307, 0, ",") + , (4308, 0, " ") + , (4309, 0, "'") + , (4310, 0, "c") + , (4311, 0, "o") + , (4312, 0, "m") + , (4313, 0, "p") + , (4314, 0, "l") + , (4315, 0, "e") + , (4316, 0, "t") + , (4317, 0, "e") + , (4318, 0, "'") + , (4319, 0, "]") + , (4402, 16, "") + , (4402, 0, "i") + , (4403, 0, "f") + , (4404, 0, " ") + , (4404, 1, "") + , (4403, 1, "") + , (4402, 1, "") + , (4402, 0, "c") + , (4403, 0, "o") + , (4404, 0, "n") + , (4405, 0, "s") + , (4406, 0, "t") + , (4407, 0, " ") + , (4408, 0, "c") + , (4409, 0, "u") + , (4410, 0, "r") + , (4411, 0, "r") + , (4412, 0, "e") + , (4413, 0, "n") + , (4414, 0, "t") + , (4415, 0, "_") + , (4416, 0, "i") + , (4416, 1, "") + , (4416, 0, "o") + , (4417, 0, " ") + , (4418, 0, "=") + , (4419, 0, " ") + , (4420, 0, "o") + , (4421, 0, "r") + , (4422, 0, "d") + , (4423, 0, "e") + , (4424, 0, "r") + , (4420, 5, "order") + , (4425, 0, ".") + , (4426, 0, "i") + , (4427, 0, "n") + , (4428, 0, "d") + , (4429, 0, "e") + , (4426, 4, "indexOf") + , (4433, 0, "(") + , (4434, 0, "c") + , (4435, 0, "u") + , (4436, 0, "r") + , (4437, 0, "r") + , (4438, 0, "e") + , (4439, 0, "n") + , (4434, 6, "current_stage") + , (4447, 0, ".") + , (4448, 0, "t") + , (4449, 0, "y") + , (4450, 0, "p") + , (4451, 0, "e") + , (4452, 0, ")") + , (4401, 0, "\tconst current_o = order.indexOf(current_stage.type)\n") + , (4461, 9, "e") + , (4462, 0, "l") + , (4463, 0, "e") + , (4464, 0, "m") + , (4465, 0, "e") + , (4466, 0, "n") + , (4467, 0, "t") + , (4468, 0, "_") + , (4469, 0, "o") + , (4487, 18, "t") + , (4488, 0, "y") + , (4489, 0, "p") + , (4490, 0, "e") + , (4492, 0, "\n\t") + , (4494, 0, "\n\t") + , (4493, 1, "") + , (4495, 0, "i") + , (4496, 0, "f") + , (4497, 0, " ") + , (4498, 0, "(") + , (4499, 0, "c") + , (4500, 0, "u") + , (4501, 0, "r") + , (4502, 0, "r") + , (4503, 0, "e") + , (4504, 0, "n") + , (4499, 6, "current_o") + , (4499, 0, " ") + , (4499, 0, "e") + , (4500, 0, "l") + , (4501, 0, "e") + , (4502, 0, "m") + , (4503, 0, "e") + , (4504, 0, "n") + , (4505, 0, "t") + , (4506, 0, "_") + , (4507, 0, "o") + , (4508, 0, " ") + , (4509, 0, "<") + , (4520, 0, ")") + , (4521, 0, " ") + , (4522, 0, "r") + , (4523, 0, "e") + , (4524, 0, "t") + , (4525, 0, "u") + , (4526, 0, "r") + , (4527, 0, "n") + , (4528, 0, " ") + , (4529, 0, "'") + , (4530, 0, "d") + , (4531, 0, "o") + , (4532, 0, "n") + , (4533, 0, "e") + , (4534, 0, "'") + , (4535, 0, "\n\t") + , (4537, 0, "e") + , (4538, 0, "l") + , (4539, 0, "s") + , (4540, 0, "e") + , (4541, 0, " ") + , (4542, 0, "i") + , (4543, 0, "f") + , (4544, 0, " ") + , (4545, 0, "(") + , (4546, 0, "e") + , (4547, 0, "l") + , (4548, 0, "e") + , (4549, 0, "m") + , (4546, 4, "element_o") + , (4555, 0, " ") + , (4556, 0, ">") + , (4557, 0, " ") + , (4558, 0, "c") + , (4559, 0, "u") + , (4560, 0, "r") + , (4561, 0, "r") + , (4562, 0, "e") + , (4563, 0, "n") + , (4564, 0, "t") + , (4558, 7, "current_o") + , (4567, 0, ")") + , (4568, 0, " ") + , (4569, 0, "r") + , (4570, 0, "e") + , (4571, 0, "t") + , (4572, 0, "u") + , (4573, 0, "r") + , (4574, 0, "n") + , (4575, 0, " ") + , (4576, 0, "'") + , (4577, 0, "w") + , (4578, 0, "a") + , (4579, 0, "i") + , (4580, 0, "t") + , (4581, 0, "i") + , (4582, 0, "n") + , (4583, 0, "g") + , (4584, 0, "'") + , (4585, 0, "\n\t") + , (4587, 0, "e") + , (4588, 0, "l") + , (4589, 0, "s") + , (4590, 0, "e") + , (4591, 0, " ") + , (4592, 0, "r") + , (4593, 0, "e") + , (4594, 0, "t") + , (4595, 0, "u") + , (4596, 0, "r") + , (4597, 0, "n") + , (4598, 0, " ") + , (4599, 0, "'") + , (4600, 0, "i") + , (4600, 1, "") + , (4600, 0, "p") + , (4600, 1, "") + , (4600, 0, "a") + , (4601, 0, "c") + , (4602, 0, "t") + , (4603, 0, "i") + , (4604, 0, "v") + , (4605, 0, "e") + , (4606, 0, "'") + , (5300, 0, " ") + , (5301, 0, "c") + , (5302, 0, "l") + , (5303, 0, "a") + , (5304, 0, "s") + , (5305, 0, "s") + , (5306, 0, "=") + , (5307, 0, "{") + , (5308, 0, "p") + , (5309, 0, "r") + , (5310, 0, "o") + , (5311, 0, "g") + , (5312, 0, "r") + , (5313, 0, "e") + , (5314, 0, "s") + , (5315, 0, "s") + , (5316, 0, "_") + , (5317, 0, "c") + , (5318, 0, "l") + , (5319, 0, "a") + , (5320, 0, "s") + , (5321, 0, "s") + , (5322, 0, "(") + , (5323, 0, "'") + , (5324, 0, "m") + , (5325, 0, "e") + , (5326, 0, "d") + , (5327, 0, "i") + , (5328, 0, "t") + , (5329, 0, "a") + , (5330, 0, "t") + , (5331, 0, "e") + , (5332, 0, "'") + , (5333, 0, ")") + , (5334, 0, "}") + , (5498, 0, " class={progress_class('meditate')}") + , (5522, 8, "") + , (5522, 0, "b") + , (5523, 0, "e") + , (5524, 0, "a") + , (5525, 0, "d") + , (5527, 0, ",") + , (5528, 0, " ") + , (5529, 0, "r") + , (5530, 0, ",") + , (5531, 0, " ") + , (5532, 0, "p") + , (7361, 0, "\n") + , (7362, 0, "\n") + , (7363, 0, ".") + , (7364, 0, "d") + , (7365, 0, "o") + , (7366, 0, "n") + , (7367, 0, "e") + , (7368, 0, " ") + , (7369, 0, "{") + , (7370, 0, " ") + , (7371, 0, "c") + , (7372, 0, "o") + , (7373, 0, "l") + , (7374, 0, "o") + , (7375, 0, "r") + , (7376, 0, ":") + , (7377, 0, " ") + , (7378, 0, "b") + , (7379, 0, "l") + , (7380, 0, "u") + , (7381, 0, "e") + , (7382, 0, ";") + , (7383, 0, " ") + , (7384, 0, "}") + , (7363, 0, ".done { color: blue; }\n") + , (7387, 4, "w") + , (7388, 0, "a") + , (7389, 0, "i") + , (7390, 0, "t") + , (7391, 0, "i") + , (7392, 0, "n") + , (7393, 0, "g") + , (7404, 4, "w") + , (7405, 0, "h") + , (7406, 0, "i") + , (7407, 0, "t") + , (7408, 0, "e") + , (7386, 0, ".waiting { color: white; }\n") + , (7414, 7, "a") + , (7415, 0, "c") + , (7416, 0, "t") + , (7417, 0, "i") + , (7418, 0, "v") + , (7419, 0, "e") + , (7430, 5, "p") + , (7431, 0, "u") + , (7432, 0, "r") + , (7433, 0, "p") + , (7434, 0, "l") + , (7435, 0, "e") + , (7430, 6, "m") + , (7431, 0, "a") + , (7432, 0, "g") + , (7430, 3, "magenta") + , (4345, 0, "s") + , (4346, 0, "t") + , (4347, 0, "a") + , (4348, 0, "g") + , (4349, 0, "e") + , (4350, 0, ",") + , (4351, 0, " ") + , (4441, 13, "s") + , (4374, 13, "s") + , (4430, 0, "t") + , (4375, 0, "t") + , (4432, 0, "a") + , (4376, 0, "a") + , (4434, 0, "g") + , (4377, 0, "g") + , (4436, 0, "e") + , (4378, 0, "e") + , (5314, 0, "c") + , (5315, 0, "u") + , (5316, 0, "r") + , (5317, 0, "r") + , (5318, 0, "e") + , (5319, 0, "n") + , (5320, 0, "t") + , (5321, 0, "_") + , (5322, 0, "s") + , (5323, 0, "t") + , (5324, 0, "a") + , (5325, 0, "g") + , (5326, 0, "e") + , (5327, 0, ",") + , (5328, 0, " ") + , (5527, 0, "current_stage, ") + , (4582, 0, " ") + , (4583, 0, "i") + , (4584, 0, "f") + , (4585, 0, " ") + , (4586, 0, "(") + , (4587, 0, "t") + , (4588, 0, "y") + , (4589, 0, "o") + , (4589, 1, "") + , (4589, 0, "p") + , (4590, 0, "e") + , (4591, 0, " ") + , (4592, 0, "=") + , (4593, 0, "=") + , (4594, 0, "=") + , (4595, 0, " ") + , (4596, 0, "'") + , (4597, 0, "b") + , (4598, 0, "e") + , (4599, 0, "a") + , (4600, 0, "d") + , (4601, 0, "'") + , (4602, 0, ")") + , (4603, 0, "\n\t") + , (4605, 0, "e") + , (4606, 0, "l") + , (4607, 0, "s") + , (4608, 0, "e") + , (4603, 0, " ") + , (4604, 0, "r") + , (4605, 0, "e") + , (4606, 0, "t") + , (4607, 0, "u") + , (4608, 0, "r") + , (4609, 0, "n") + , (4610, 0, " ") + , (4610, 1, "") + , (4610, 0, "\n\t") + , (4612, 0, "\t") + , (4611, 2, "") + , (4610, 1, "") + , (4610, 0, " ") + , (4611, 0, "r") + , (4612, 0, "=") + , (4613, 0, " ") + , (4613, 1, "") + , (4612, 1, "") + , (4612, 0, " ") + , (4613, 0, "=") + , (4614, 0, "=") + , (4615, 0, " ") + , (4616, 0, "s") + , (4617, 0, "t") + , (4618, 0, "a") + , (4619, 0, "g") + , (4620, 0, "e") + , (4621, 0, ".") + , (4622, 0, "r") + , (4623, 0, " ") + , (4624, 0, "?") + , (4625, 0, " ") + , (4615, 0, "=") + , (4320, 0, "\n") + , (4321, 0, "c") + , (4322, 0, "o") + , (4323, 0, "n") + , (4324, 0, "s") + , (4325, 0, "t") + , (4326, 0, " ") + , (4327, 0, "c") + , (4328, 0, "l") + , (4329, 0, "a") + , (4330, 0, "s") + , (4331, 0, "s") + , (4332, 0, "_") + , (4333, 0, "f") + , (4334, 0, "o") + , (4335, 0, "r") + , (4336, 0, "(") + , (4336, 1, "") + , (4336, 0, " ") + , (4337, 0, "=") + , (4338, 0, " ") + , (4339, 0, "x") + , (4340, 0, " ") + , (4341, 0, "=") + , (4342, 0, ">") + , (4343, 0, " ") + , (4344, 0, "x") + , (4345, 0, " ") + , (4346, 0, "<") + , (4347, 0, " ") + , (4348, 0, "0") + , (4349, 0, " ") + , (4350, 0, "?") + , (4351, 0, " ") + , (4352, 0, "'") + , (4353, 0, "d") + , (4354, 0, "o") + , (4355, 0, "n") + , (4356, 0, "e") + , (4357, 0, "'") + , (4358, 0, " ") + , (4359, 0, ":") + , (4360, 0, " ") + , (4358, 1, "") + , (4358, 0, "\n") + , (4359, 0, "\t") + , (4362, 0, "x") + , (4363, 0, " ") + , (4364, 0, ">") + , (4365, 0, " ") + , (4366, 0, "0") + , (4367, 0, " ") + , (4368, 0, "?") + , (4369, 0, " ") + , (4370, 0, "'") + , (4371, 0, "w") + , (4372, 0, "a") + , (4373, 0, "i") + , (4374, 0, "t") + , (4375, 0, "i") + , (4376, 0, "n") + , (4377, 0, "g") + , (4378, 0, "'") + , (4379, 0, "\n\t") + , (4381, 0, ":") + , (4382, 0, " ") + , (4383, 0, "'") + , (4384, 0, "a") + , (4385, 0, "c") + , (4386, 0, "t") + , (4387, 0, "i") + , (4388, 0, "v") + , (4389, 0, "e") + , (4390, 0, "'") + , (4391, 0, "\n\t") + , (4557, 0, "\n\t") + , (4392, 1, "") + , (4558, 0, "c") + , (4559, 0, "o") + , (4560, 0, "n") + , (4561, 0, "s") + , (4562, 0, "t") + , (4563, 0, " ") + , (4564, 0, "o") + , (4565, 0, "_") + , (4566, 0, "o") + , (4566, 1, "") + , (4566, 0, "d") + , (4567, 0, "i") + , (4568, 0, "f") + , (4569, 0, "f") + , (4570, 0, " ") + , (4571, 0, "=") + , (4572, 0, " ") + , (4573, 0, "element_o < current_o") + , (4583, 1, "") + , (4583, 0, "-") + , (4594, 0, "\n\t") + , (4596, 0, "r") + , (4597, 0, "e") + , (4598, 0, "t") + , (4599, 0, "u") + , (4600, 0, "r") + , (4601, 0, "n") + , (4602, 0, " ") + , (4603, 0, "o") + , (4604, 0, "_") + , (4605, 0, "d") + , (4606, 0, "i") + , (4607, 0, "f") + , (4608, 0, "f") + , (4609, 0, " ") + , (4610, 0, "=") + , (4611, 0, "=") + , (4612, 0, "=") + , (4613, 0, " ") + , (4614, 0, "0") + , (4615, 0, " ") + , (4615, 1, "") + , (4614, 1, "") + , (4613, 1, "") + , (4612, 1, "") + , (4611, 1, "") + , (4610, 1, "") + , (4610, 0, "!") + , (4611, 0, "=") + , (4612, 0, "=") + , (4613, 0, " ") + , (4614, 0, "0") + , (4615, 0, " ") + , (4616, 0, "?") + , (4617, 0, " ") + , (4618, 0, "c") + , (4619, 0, "l") + , (4620, 0, "a") + , (4621, 0, "s") + , (4622, 0, "s") + , (4623, 0, "_") + , (4624, 0, "f") + , (4625, 0, "o") + , (4626, 0, "r") + , (4618, 9, "class_for") + , (4627, 0, "(") + , (4628, 0, "o") + , (4629, 0, "_") + , (4630, 0, "d") + , (4631, 0, "i") + , (4632, 0, "f") + , (4633, 0, "f") + , (4634, 0, ")") + , (4635, 0, "\n\t") + , (4637, 0, "\t") + , (4638, 0, ":") + , (4639, 0, " ") + , (4641, 100, "") + , (4640, 1, "") + , (4640, 1, "") + , (4681, 0, "\n\t\t") + , (4684, 0, ":") + , (4685, 0, " ") + , (4686, 0, "c") + , (4687, 0, "l") + , (4688, 0, "a") + , (4689, 0, "s") + , (4690, 0, "s") + , (4691, 0, "_") + , (4692, 0, "f") + , (4693, 0, "o") + , (4694, 0, "r") + , (4686, 9, "class_for") + , (4695, 0, "(") + , (4696, 0, "0") + , (4697, 0, ")") + , (4699, 22, "") + , (4657, 0, " ") + , (4658, 0, "?") + , (4659, 24, "") + , (4656, 1, "") + , (4640, 1, "") + , (4657, 0, "\n\t\t") + , (4660, 0, "\t") + , (4660, 1, "") + , (4657, 3, "") + , (4640, 0, "(") + , (4656, 0, ")") + , (4659, 0, " return r === stage.r ? ") + , (4659, 24, "") + , (4656, 1, "") + , (4640, 1, "") + , (4657, 0, "\n\t\t") + , (4660, 0, "\t") + , (4661, 0, " return r === stage.r ? ") + , (4658, 4, "\t\t") + , (4660, 7, "") + , (4660, 0, "\t") + , (4556, 0, "\n\t") + , (4558, 0, "i") + , (4559, 0, "f") + , (4560, 0, " ") + , (4561, 0, "(") + , (4557, 5, "") + , (4556, 1, "") + , (4558, 0, "// ") + , (4606, 12, "element_o - current_o") + , (4616, 1, "") + , (4616, 0, "!") + , (4617, 0, "=") + , (4618, 0, "=") + , (4642, 6, "element_o - current_o") + , (4605, 0, "\n\t") + , (4607, 1, "\n\t") + , (4605, 0, " ") + , (4606, 0, "t") + , (4607, 0, "y") + , (4607, 1, "") + , (4606, 1, "") + , (4606, 0, "t") + , (4607, 0, "y") + , (4608, 0, "p") + , (4609, 0, "e") + , (4610, 0, " ") + , (4611, 0, "=") + , (4612, 0, "=") + , (4613, 0, "=") + , (4614, 0, " ") + , (4615, 0, "'") + , (4616, 0, "b") + , (4617, 0, "e") + , (4618, 0, "a") + , (4619, 0, "d") + , (4620, 0, "'") + , (4621, 0, " ") + , (4622, 0, "&") + , (4623, 0, "&") + , (4624, 0, " ") + , (4625, 0, "s") + , (4626, 0, "t") + , (4627, 0, "a") + , (4628, 0, "g") + , (4629, 0, "e") + , (4630, 0, ".") + , (4631, 0, "t") + , (4632, 0, "y") + , (4633, 0, "p") + , (4634, 0, "e") + , (4635, 0, " ") + , (4636, 0, "=") + , (4637, 0, "=") + , (4638, 0, "=") + , (4639, 0, " ") + , (4640, 0, "'") + , (4641, 0, "b") + , (4642, 0, "e") + , (4643, 0, "a") + , (4644, 0, "d") + , (4645, 0, "'") + , (4646, 0, " ") + , (4647, 0, "?") + , (4648, 0, "\n\t") + , (4650, 0, "\t") + , (4651, 0, ":") + , (4652, 0, " ") + , (4683, 32, "") + , (4653, 0, "class_for(element_o - current_o)") + , (4686, 89, "") + , (4646, 1, "") + , (4646, 0, "\n\t") + , (4648, 0, "\t") + , (4650, 0, " ") + , (4651, 0, "r") + , (4652, 0, " ") + , (4653, 0, "=") + , (4654, 0, "=") + , (4655, 0, "=") + , (4656, 0, " ") + , (4657, 0, "s") + , (4658, 0, "t") + , (4659, 0, "a") + , (4660, 0, "g") + , (4661, 0, "e") + , (4662, 0, ".") + , (4663, 0, "r") + , (4664, 0, " ") + , (4665, 0, "?") + , (4666, 0, " ") + , (4667, 0, "c") + , (4668, 0, "l") + , (4669, 0, "a") + , (4670, 0, "s") + , (4671, 0, "s") + , (4672, 0, "_") + , (4673, 0, "f") + , (4674, 0, "o") + , (4675, 0, "r") + , (4667, 9, "class_for") + , (4676, 0, "(") + , (4677, 0, "p") + , (4678, 0, " ") + , (4679, 0, "-") + , (4680, 0, " ") + , (4681, 0, "s") + , (4682, 0, "t") + , (4683, 0, "a") + , (4684, 0, "g") + , (4685, 0, "e") + , (4686, 0, ".") + , (4687, 0, "p") + , (4688, 0, ")") + , (4689, 0, " ") + , (4690, 0, ":") + , (4691, 0, " ") + , (4651, 0, "(") + , (4693, 0, "c") + , (4694, 0, "l") + , (4695, 0, "a") + , (4696, 0, "s") + , (4697, 0, "s") + , (4698, 0, "_") + , (4699, 0, "f") + , (4700, 0, "o") + , (4701, 0, "r") + , (4693, 9, "class_for") + , (4702, 0, "(") + , (4703, 0, "r") + , (4704, 0, " ") + , (4705, 0, "-") + , (4706, 0, " ") + , (4707, 0, "s") + , (4708, 0, "t") + , (4709, 0, "a") + , (4710, 0, "g") + , (4711, 0, "e") + , (4712, 0, ".") + , (4713, 0, "r") + , (4714, 0, ")") + , (4715, 0, ")") + , (7547, 12, "") + , (7547, 0, "t") + , (7548, 0, "e") + , (7549, 0, "x") + , (7550, 0, "t") + , (7551, 0, "-") + , (7552, 0, "d") + , (7553, 0, "e") + , (7554, 0, "c") + , (7547, 8, "text-decoration: ;") + , (7564, 0, "s") + , (7565, 0, "t") + , (7566, 0, "r") + , (7567, 0, "i") + , (7564, 4, "") + , (7564, 0, "l") + , (7565, 0, "i") + , (7566, 0, "n") + , (7567, 0, "e") + , (7564, 4, "line-through") + , (7632, 0, " ") + , (7633, 0, "b") + , (7634, 0, "o") + , (7635, 0, "r") + , (7636, 0, "d") + , (7637, 0, "e") + , (7638, 0, "r") + , (7639, 0, ":") + , (7640, 0, " ") + , (7641, 0, "1") + , (7642, 0, "p") + , (7643, 0, "x") + , (7644, 0, " ") + , (7645, 0, "s") + , (7646, 0, "o") + , (7647, 0, "l") + , (7648, 0, "i") + , (7649, 0, "d") + , (7650, 0, " ") + , (7651, 0, "w") + , (7652, 0, "h") + , (7653, 0, "i") + , (7654, 0, "t") + , (7655, 0, "e") + , (7656, 0, ";") + , (7598, 5, "#") + , (7599, 0, "e") + , (7600, 0, "e") + , (7601, 0, "e") + , (7601, 1, "") + , (7600, 1, "") + , (7599, 1, "") + , (7599, 0, "8") + , (7600, 0, "8") + , (7601, 0, "8") + , (4756, 0, "\n") + , (4756, 0, "\n") + , (4757, 0, "l") + , (4758, 0, "e") + , (4759, 0, "t") + , (4760, 0, " ") + , (4761, 0, "s") + , (4762, 0, "e") + , (4763, 0, "t") + , (4764, 0, "t") + , (4765, 0, "i") + , (4766, 0, "n") + , (4767, 0, "g") + , (4768, 0, "s") + , (4769, 0, "_") + , (4770, 0, "d") + , (4771, 0, "i") + , (4772, 0, "s") + , (4773, 0, "a") + , (4774, 0, "b") + , (4775, 0, "l") + , (4776, 0, "e") + , (4777, 0, "d") + , (4778, 0, " ") + , (4779, 0, "=") + , (4780, 0, " ") + , (4757, 3, "$") + , (4758, 0, ":") + , (4780, 0, "s") + , (4781, 0, "t") + , (4782, 0, "a") + , (4783, 0, "t") + , (4784, 0, "e") + , (4785, 0, " ") + , (4786, 0, "=") + , (4787, 0, "=") + , (4788, 0, "=") + , (4789, 0, " ") + , (4790, 0, "'") + , (4791, 0, "p") + , (4792, 0, "l") + , (4793, 0, "a") + , (4794, 0, "y") + , (4795, 0, "i") + , (4796, 0, "n") + , (4797, 0, "g") + , (4798, 0, "'") + , (4756, 0, "\n") + , (4757, 0, "/") + , (4758, 0, "/") + , (4759, 0, " ") + , (4760, 0, "T") + , (4761, 0, "h") + , (4762, 0, "i") + , (4763, 0, "s") + , (4764, 0, " ") + , (4765, 0, "w") + , (4766, 0, "i") + , (4767, 0, "l") + , (4768, 0, "l") + , (4769, 0, " ") + , (4770, 0, "g") + , (4771, 0, "e") + , (4772, 0, "t") + , (4773, 0, " ") + , (4774, 0, "m") + , (4775, 0, "o") + , (4776, 0, "r") + , (4777, 0, "e") + , (4778, 0, " ") + , (4779, 0, "c") + , (4780, 0, "o") + , (4781, 0, "m") + , (4782, 0, "p") + , (4783, 0, "l") + , (4784, 0, "e") + , (4785, 0, "x") + , (4786, 0, " ") + , (4787, 0, "i") + , (4788, 0, "n") + , (4789, 0, " ") + , (4790, 0, "t") + , (4791, 0, "i") + , (4792, 0, "m") + , (4793, 0, "e") + , (4794, 0, ".") + , (4795, 0, " ") + , (4796, 0, "F") + , (4797, 0, "o") + , (4798, 0, "r") + , (4799, 0, " ") + , (4800, 0, "n") + , (4801, 0, "o") + , (4802, 0, "w") + , (4803, 0, ",") + , (4804, 0, " ") + , (4805, 0, "p") + , (4806, 0, "a") + , (4807, 0, "u") + , (4808, 0, "s") + , (4809, 0, "e") + , (4810, 0, " ") + , (4811, 0, "t") + , (4812, 0, "h") + , (4813, 0, "e") + , (4814, 0, " ") + , (4815, 0, "g") + , (4816, 0, "a") + , (4817, 0, "m") + , (4818, 0, "e") + , (4819, 0, " ") + , (4820, 0, "t") + , (4821, 0, "o") + , (4822, 0, " ") + , (4823, 0, "f") + , (4824, 0, "i") + , (4825, 0, "d") + , (4826, 0, "d") + , (4827, 0, "l") + , (4828, 0, "e") + , (4829, 0, ".") + , (6440, 0, "d") + , (6441, 0, "i") + , (6442, 0, "s") + , (6443, 0, "a") + , (6444, 0, "b") + , (6445, 0, "l") + , (6446, 0, "e") + , (6447, 0, "d") + , (6448, 0, "=") + , (6449, 0, "{") + , (6450, 0, " ") + , (6450, 0, "s") + , (6451, 0, "e") + , (6452, 0, "t") + , (6453, 0, "t") + , (6450, 4, "settings_disabled") + , (6467, 0, "}") + , (6739, 0, " disabled={settings_disabled}") + , (6887, 0, " disabled={settings_disabled}") + , (7041, 0, " disabled={settings_disabled}") + , (7192, 0, " disabled={settings_disabled}") + , (3949, 0, "\n") + , (3950, 0, "#") + , (3951, 0, ":") + , (3952, 0, " ") + , (3952, 1, "") + , (3951, 1, "") + , (3950, 1, "") + , (3950, 0, "$") + , (3951, 0, ":") + , (3952, 0, " ") + , (3953, 0, "current_stage.type === 'complete'") + , (3953, 0, "c") + , (3954, 0, "o") + , (3955, 0, "n") + , (3956, 0, "s") + , (3957, 0, "o") + , (3958, 0, "l") + , (3959, 0, "e") + , (3960, 0, ".") + , (3961, 0, "l") + , (3962, 0, "o") + , (3963, 0, "g") + , (3961, 3, "log") + , (3964, 0, "(") + , (3965, 0, "'") + , (3966, 0, "c") + , (3967, 0, "u") + , (3968, 0, "r") + , (3969, 0, "r") + , (3970, 0, "e") + , (3971, 0, "n") + , (3972, 0, " ") + , (3973, 0, "t") + , (3973, 1, "") + , (3972, 1, "") + , (3972, 0, "t") + , (3973, 0, " ") + , (3974, 0, "s") + , (3975, 0, "t") + , (3976, 0, "a") + , (3977, 0, "g") + , (3978, 0, "e") + , (3979, 0, " ") + , (3980, 0, "t") + , (3981, 0, "y") + , (3982, 0, "p") + , (3983, 0, "e") + , (3984, 0, "'") + , (3985, 0, ",") + , (3986, 0, " ") + , (4005, 15, "") + , (4005, 0, ")") + , (4000, 0, " ") + , (4001, 0, "&") + , (4002, 0, "&") + , (4003, 0, " ") + , (4004, 0, "c") + , (4005, 0, "u") + , (4006, 0, "r") + , (4007, 0, "r") + , (4008, 0, "e") + , (4009, 0, "n") + , (4010, 0, "t") + , (4011, 0, "_") + , (4004, 8, "current_stage") + , (4109, 0, "\n") + , (4110, 0, "#") + , (4111, 0, ":") + , (4112, 0, " ") + , (4112, 1, "") + , (4111, 1, "") + , (4110, 1, "") + , (4110, 0, "$") + , (4111, 0, ":") + , (4112, 0, " ") + , (4113, 0, "c") + , (4114, 0, "o") + , (4115, 0, "n") + , (4116, 0, "s") + , (4117, 0, "o") + , (4118, 0, "l") + , (4119, 0, "e") + , (4113, 7, "console") + , (4120, 0, ".") + , (4121, 0, "l") + , (4122, 0, "o") + , (4123, 0, "g") + , (4121, 3, "log") + , (4124, 0, "(") + , (4125, 0, "'") + , (4126, 0, "g") + , (4127, 0, "a") + , (4128, 0, "m") + , (4129, 0, "e") + , (4130, 0, "_") + , (4131, 0, "c") + , (4132, 0, "o") + , (4133, 0, "m") + , (4134, 0, "p") + , (4135, 0, "l") + , (4136, 0, "e") + , (4137, 0, "t") + , (4138, 0, "e") + , (4139, 0, "d") + , (4140, 0, "'") + , (4141, 0, ",") + , (4142, 0, " ") + , (4143, 0, "g") + , (4144, 0, "a") + , (4145, 0, "m") + , (4146, 0, "e") + , (4147, 0, "_") + , (4148, 0, "c") + , (4149, 0, "o") + , (4150, 0, "m") + , (4151, 0, "p") + , (4152, 0, "l") + , (4143, 10, "game_completed") + , (4157, 0, ")") + , (4158, 0, "\n") + , (4109, 0, ")") + , (4076, 0, "(") + , (4022, 0, ",") + , (4023, 0, " ") + , (4024, 0, "(current_stage.type === 'complete')") + , (4025, 0, "c") + , (4026, 0, "u") + , (4027, 0, "r") + , (4028, 0, "r") + , (4029, 0, "e") + , (4030, 0, "n") + , (4031, 0, "t") + , (4032, 0, "_") + , (4033, 0, "s") + , (4034, 0, "t") + , (4035, 0, "a") + , (4036, 0, "g") + , (4037, 0, "e") + , (4038, 0, " ") + , (4039, 0, "&") + , (4040, 0, "&") + , (4041, 0, " ") + , (3950, 0, "// ") + , ( 4081 + , 0 + , "$: game_completed = current_stage == null ? false : (current_stage.type === 'complete')\n" + ) + , (4081, 0, "// ") + , (4206, 17, "&") + , (4207, 0, "&") + , (4172, 0, "// ") + , (4081, 3, "") + , (4084, 0, "{") + , (4085, 0, "\n\t") + , (4171, 0, "\n\t") + , (4172, 1, "}") + , (4085, 0, "\n\t") + , (4087, 0, "c") + , (4088, 0, "o") + , (4089, 0, "n") + , (4090, 0, "s") + , (4091, 0, "o") + , (4092, 0, "l") + , (4093, 0, "e") + , (4087, 7, "console") + , (4094, 0, ".") + , (4095, 0, "l") + , (4096, 0, "o") + , (4097, 0, "g") + , (4095, 3, "log") + , (4098, 0, "(") + , (4099, 0, "'") + , (4100, 0, "u") + , (4101, 0, "p") + , (4102, 0, "d") + , (4103, 0, "a") + , (4104, 0, "t") + , (4105, 0, "e") + , (4106, 0, "i") + , (4107, 0, "n") + , (4107, 1, "") + , (4106, 1, "") + , (4105, 1, "") + , (4105, 0, "i") + , (4106, 0, "n") + , (4107, 0, "g") + , (4108, 0, " ") + , (4109, 0, "g") + , (4110, 0, "a") + , (4111, 0, "m") + , (4112, 0, "e") + , (4113, 0, "_") + , (4114, 0, "c") + , (4115, 0, "o") + , (4116, 0, "m") + , (4117, 0, "p") + , (4118, 0, "l") + , (4119, 0, "e") + , (4120, 0, "t") + , (4121, 0, "e") + , (4122, 0, "d") + , (4123, 0, "'") + , (4124, 0, ",") + , (4125, 0, " ") + , (4126, 0, "c") + , (4127, 0, "u") + , (4128, 0, "r") + , (4129, 0, "r") + , (4130, 0, "e") + , (4131, 0, "n") + , (4126, 6, "current_stage") + , (4139, 0, ")") + , (4305, 0, "// ") + , (3950, 3, "") + , (4022, 54, "") + , (3950, 74, "") + , (4098, 0, "\n") + , (4099, 0, "\n") + , ( 4099 + , 0 + , "$: console.log('current stage type', current_stage && current_stage.type)\n" + ) + , (452, 0, "// ") + , (449, 0, "// ") + , (424, 0, "// ") + , (396, 0, "// ") + , (391, 0, "// ") + , (2856, 3, "") + , (3530, 0, " ") + , (3530, 0, "s") + , (3531, 0, "e") + , (3532, 0, "t") + , (3533, 0, "T") + , (3530, 4, "setTimeout") + , (3540, 1, "") + , (3540, 0, "(") + , (3541, 0, "(") + , (3542, 0, ")") + , (3543, 0, " ") + , (3544, 0, "=") + , (3545, 0, ">") + , (3546, 0, " ") + , (3558, 0, ")") + , (464, 3, "") + , (458, 3, "") + , (430, 3, "") + , (399, 3, "") + , (391, 3, "") + , (315, 138, "") + , (314, 1, "") + , (3662, 0, "\n") + , ( 3663 + , 0 + , "let internal_state\n$: internal_state = game_completed ? 'completed' : state\n$: {\n\tif (state !== 'playing') {\n\t\tgame_completed = false\n\t}\n}" + ) + , (3801, 0, "\n") + , (255, 0, "// ") + , (3968, 0, "\n") + , (3969, 0, "l") + , (3970, 0, "e") + , (3971, 0, "t") + , (3972, 0, " ") + , (3973, 0, "g") + , (3974, 0, "a") + , (3975, 0, "m") + , (3976, 0, "e") + , (3977, 0, "_") + , (3978, 0, "c") + , (3979, 0, "o") + , (3980, 0, "m") + , (3981, 0, "p") + , (3982, 0, "l") + , (3983, 0, "e") + , (3984, 0, "t") + , (3985, 0, "e") + , (3986, 0, "d") + , (3969, 167, "") + , (3665, 0, "\n") + , ( 3666 + , 0 + , "let game_completed\n$: {\n\tconsole.log('updating game_completed', current_stage)\n\tgame_completed = current_stage == null ? false : (current_stage.type === 'complete')\n}\n" + ) + , (3833, 0, "\n") + , (3833, 1, "") + , (3971, 0, "// ") + , (3968, 0, "// ") + , (3943, 0, "// ") + , (3915, 0, "// ") + , (3910, 0, "// ") + , (3763, 0, "s") + , (3764, 0, "t") + , (3765, 0, "a") + , (3766, 0, "t") + , (3767, 0, "e") + , (3768, 0, " ") + , (3769, 0, "!") + , (3770, 0, "=") + , (3771, 0, "=") + , (3772, 0, " ") + , (3773, 0, "'") + , (3774, 0, "p") + , (3775, 0, "l") + , (3776, 0, "a") + , (3777, 0, "y") + , (3778, 0, "i") + , (3779, 0, "n") + , (3780, 0, "g") + , (3781, 0, "'") + , (3782, 0, " ") + , (3783, 0, "|") + , (3784, 0, "|") + , (3785, 0, " ") + , (3763, 0, "(") + , (3808, 0, ")") + , (3817, 1, "") + , (3817, 0, "\n\t") + , (3936, 78, "") + , (4101, 0, "// ") + , (4097, 0, "// ") + , (4050, 0, "// ") + , (4045, 0, "// ") + , (4188, 76, "") + , (4241, 18, "") + , (3936, 0, "\n") + , (3937, 0, "let bar_width = 0\n") + , (3954, 1, "") + , (4043, 0, "// ") + , (4043, 3, "") + , (3954, 0, "\n") + , (3937, 18, "") + , (3936, 1, "") + , (4241, 0, "let bar_width = 0\n") + , ( 4188 + , 0 + , "// $: game_completed = current_stage && (current_stage.type === 'complete')\n" + ) + , (4110, 3, "") + , (4103, 3, "") + , (4053, 3, "") + , (4045, 3, "") + , (4101, 0, "// ") + , (4097, 0, "// ") + , (4050, 0, "// ") + , (4045, 0, "// ") + , (4025, 0, "// ") + , (4045, 0, "// ") + , (4042, 0, "// ") + , (4023, 0, "// ") + , (3979, 0, "// ") + , (3942, 0, "// ") + , (3937, 0, "// ") + , (4519, 0, "internal_state === 'waiting'") + , (4547, 0, " ") + , (4548, 0, "?") + , (4549, 0, " ") + , (4550, 0, "'Waiting for game to start'") + , (4577, 0, "\n") + , (4578, 0, ":") + , (4579, 0, " ") + , (4578, 0, "\t") + , (3936, 401, "") + , (3691, 0, "// ") + , (3408, 0, " ") + , (3409, 0, "/") + , (3410, 0, "/") + , (3411, 0, " ") + , (3412, 0, "s") + , (3413, 0, "e") + , (3414, 0, "t") + , (3415, 0, "T") + , (3416, 0, "i") + , (3417, 0, "m") + , (3418, 0, "e") + , (3419, 0, "o") + , (3420, 0, "u") + , (3421, 0, "t") + , (3422, 0, " ") + , (3423, 0, "n") + , (3424, 0, "e") + , (3425, 0, "e") + , (3426, 0, "d") + , (3427, 0, "e") + , (3428, 0, "d") + , (3429, 0, " ") + , (3430, 0, "t") + , (3431, 0, "o") + , (3432, 0, " ") + , (3433, 0, "g") + , (3434, 0, "e") + , (3435, 0, "t") + , (3436, 0, " ") + , (3437, 0, "a") + , (3438, 0, "r") + , (3439, 0, "o") + , (3440, 0, "u") + , (3441, 0, "n") + , (3442, 0, "d") + , (3443, 0, " ") + , (3444, 0, "s") + , (3445, 0, "o") + , (3446, 0, "m") + , (3447, 0, "e") + , (3448, 0, " ") + , (3449, 0, "w") + , (3450, 0, "e") + , (3451, 0, "i") + , (3452, 0, "r") + , (3453, 0, "d") + , (3454, 0, " ") + , (3455, 0, "r") + , (3456, 0, "a") + , (3457, 0, "c") + , (3458, 0, "e") + , (3459, 0, " ") + , (3460, 0, "c") + , (3461, 0, "o") + , (3462, 0, "n") + , (3463, 0, "d") + , (3464, 0, "i") + , (3465, 0, "t") + , (3466, 0, "i") + , (3467, 0, "o") + , (3468, 0, "n") + , (3469, 0, ".") + , (3408, 1, "") + , (3408, 61, "") + , (3376, 0, "\n\t\t") + , (3379, 0, "// setTimeout needed to get around some weird race condition.") + , (3440, 0, " ") + , (3441, 0, "T") + , (3442, 0, "h") + , (3443, 0, "e") + , (3444, 0, "r") + , (3445, 0, "e") + , (3446, 0, "'") + , (3447, 0, "s") + , (3448, 0, " ") + , (3449, 0, "p") + , (3450, 0, "r") + , (3451, 0, "o") + , (3452, 0, "b") + , (3453, 0, "a") + , (3454, 0, "b") + , (3455, 0, "l") + , (3456, 0, "y") + , (3457, 0, " ") + , (3458, 0, "o") + , (3459, 0, "t") + , (3460, 0, "h") + , (3461, 0, "e") + , (3462, 0, "r") + , (3463, 0, " ") + , (3464, 0, "w") + , (3465, 0, "a") + , (3466, 0, "y") + , (3467, 0, "s") + , (3468, 0, " ") + , (3469, 0, "t") + , (3470, 0, "o") + , (3471, 0, " ") + , (3458, 14, "b") + , (3459, 0, "e") + , (3460, 0, "t") + , (3461, 0, "t") + , (3462, 0, "e") + , (3463, 0, "r") + , (3464, 0, " ") + , (3465, 0, "w") + , (3466, 0, "a") + , (3467, 0, "y") + , (3468, 0, "s") + , (3469, 0, " ") + , (3470, 0, "t") + , (3471, 0, "o") + , (3472, 0, " ") + , (3473, 0, "s") + , (3474, 0, "t") + , (3475, 0, "r") + , (3476, 0, "u") + , (3477, 0, "c") + , (3478, 0, "t") + , (3479, 0, "u") + , (3480, 0, "r") + , (3481, 0, "e") + , (3482, 0, " ") + , (3483, 0, "t") + , (3484, 0, "h") + , (3485, 0, "i") + , (3486, 0, "s") + , (3487, 0, " ") + , (3488, 0, ":") + , (3489, 0, "/") + , (3440, 1, "") + , (3440, 0, "\n\t\t") + , (3443, 0, "/") + , (3444, 0, "/") + , (3445, 0, " ") + , (4160, 0, "\n\t") + , (4162, 0, ":") + , (4163, 0, " ") + , (4164, 0, "s") + , (4165, 0, "t") + , (4166, 0, "a") + , (4167, 0, "r") + , (4167, 1, "") + , (4166, 1, "") + , (4165, 1, "") + , (4164, 1, "") + , (4164, 0, "c") + , (4165, 0, "u") + , (4166, 0, "r") + , (4167, 0, "r") + , (4168, 0, "e") + , (4169, 0, "n") + , (4164, 6, "current_stage") + , (4177, 0, ".") + , (4178, 0, "t") + , (4179, 0, "y") + , (4180, 0, "p") + , (4181, 0, "e") + , (4182, 0, " ") + , (4183, 0, "=") + , (4184, 0, "=") + , (4185, 0, "=") + , (4186, 0, " ") + , (4187, 0, "'") + , (4188, 0, "w") + , (4189, 0, "a") + , (4190, 0, "i") + , (4191, 0, "t") + , (4192, 0, "i") + , (4193, 0, "n") + , (4194, 0, "g") + , (4195, 0, "'") + , (4196, 0, " ") + , (4197, 0, "?") + , (4198, 0, " ") + , (4199, 0, "0") + , (4164, 18, "s") + , (4165, 0, "t") + , (4166, 0, "a") + , (4167, 0, "t") + , (4168, 0, "e") + , (4187, 0, "\n\t: current_stage.type === 'complete' ? 100") + , (4161, 1, "") + , (4118, 43, "") + , (4118, 0, "\t") + , (5535, 0, "\n\t\t\t") + , (5539, 0, "<") + , (5540, 0, "d") + , (5541, 0, "i") + , (5542, 0, "v") + , (5543, 0, " ") + , (5544, 0, "i") + , (5545, 0, "d") + , (5546, 0, "=") + , (5544, 3, "") + , (5543, 1, "") + , (5543, 0, ">") + , (5544, 0, "{") + , (5545, 0, "s") + , (5546, 0, "t") + , (5547, 0, "a") + , (5548, 0, "g") + , (5549, 0, "e") + , (5550, 0, "_") + , (5551, 0, "s") + , (5552, 0, "e") + , (5553, 0, "c") + , (5554, 0, "s") + , (5555, 0, "_") + , (5556, 0, "r") + , (5557, 0, "e") + , (5558, 0, "m") + , (5559, 0, "a") + , (5560, 0, "i") + , (5561, 0, "n") + , (5562, 0, "i") + , (5563, 0, "n") + , (5564, 0, "g") + , (5565, 0, "}") + , (5566, 0, "<") + , (5567, 0, "/") + , (5568, 0, "d") + , (5569, 0, "i") + , (5570, 0, "v") + , (5571, 0, ">") + , (5545, 20, "o") + , (5546, 0, "f") + , (5547, 0, "f") + , (5548, 0, "s") + , (5549, 0, "e") + , (5550, 0, "t") + , (5545, 6, "offset_sec") + , (5562, 0, "\n\t\t
") + , (5536, 3, "\t\t") + , (5505, 31, "") + , (5513, 0, "current_stage.duration") + , (5535, 0, " ") + , (5536, 0, "-") + , (5537, 0, " ") + , (5526, 0, " ") + , (5527, 0, "?") + , (5528, 0, " ") + , (5529, 0, "current_stage") + , (5564, 0, " ") + , (5565, 0, ":") + , (5566, 0, " ") + , (5567, 0, "'") + , (5568, 0, "'") + , (8062, 1, "") + , (8062, 0, "\n\t") + , (8079, 1, "") + , (8079, 0, "\n\t") + , (8105, 1, "") + , (8105, 0, "\n") + , (8079, 0, " */") + , (8064, 0, "/* ") + , (5526, 0, " ") + , (5527, 0, "&") + , (5528, 0, "&") + , (5529, 0, " ") + , (5530, 0, "!") + , (5531, 0, "c") + , (5532, 0, "o") + , (5533, 0, "m") + , (5534, 0, "p") + , (5535, 0, "l") + , (5513, 23, "i") + , (5514, 0, "n") + , (5515, 0, "t") + , (5516, 0, "e") + , (5517, 0, "r") + , (5518, 0, "n") + , (5519, 0, "a") + , (5520, 0, "l") + , (5521, 0, "_") + , (5513, 9, "internal_state") + , (5513, 14, "internal_") + , (5513, 9, "current_stage && !compl") + , (5531, 5, "g") + , (5532, 0, "a") + , (5533, 0, "m") + , (5534, 0, "e") + , (5535, 0, "_") + , (5536, 0, "c") + , (5537, 0, "o") + , (5538, 0, "m") + , (5539, 0, "p") + , (5540, 0, "l") + , (5531, 10, "game_completed") + , (5545, 0, ")") + , (5513, 0, "(") + , (5514, 32, "") + , (5514, 0, "a") + , (5514, 1, "") + , (5514, 0, "i") + , (5515, 0, "n") + , (5516, 0, "t") + , (5517, 0, "e") + , (5518, 0, "r") + , (5519, 0, "n") + , (5514, 6, "internal_state") + , (5528, 0, " ") + , (5529, 0, "=") + , (5530, 0, "=") + , (5531, 0, "=") + , (5532, 0, " ") + , (5533, 0, "'") + , (5534, 0, "p") + , (5535, 0, "l") + , (5536, 0, "a") + , (5537, 0, "y") + , (5538, 0, "i") + , (5539, 0, "n") + , (5540, 0, "g") + , (5541, 0, "'") + , (5542, 0, " ") + , (5543, 0, "|") + , (5544, 0, "|") + , (5545, 0, " ") + , (5546, 0, "i") + , (5547, 0, "n") + , (5548, 0, "t") + , (5549, 0, "e") + , (5550, 0, "r") + , (5551, 0, "n") + , (5546, 6, "internal_state") + , (5560, 0, " ") + , (5561, 0, "-") + , (5562, 0, "-") + , (5562, 1, "") + , (5561, 1, "") + , (5561, 0, "=") + , (5562, 0, "=") + , (5563, 0, "=") + , (5564, 0, " ") + , (5565, 0, "'") + , (5566, 0, "p") + , (5567, 0, "a") + , (5568, 0, "u") + , (5569, 0, "s") + , (5570, 0, "e") + , (5571, 0, "d") + , (5572, 0, "'") + , (5573, 0, " ") + , (5574, 0, "&") + , (5575, 0, "&") + , (5576, 0, " ") + , (5577, 0, "c") + , (5578, 0, "u") + , (5579, 0, "r") + , (5580, 0, "r") + , (5581, 0, "e") + , (5582, 0, "n") + , (5583, 0, "t") + , (5584, 0, "_") + , (5577, 8, "current_stage") + , (5573, 0, ")") + , (5514, 0, "(") + , (8018, 31, "") + , (5357, 0, "\n\t\t") + , (5360, 0, "<") + , (5361, 0, "a") + , (5362, 0, " ") + , (5363, 0, "h") + , (5364, 0, "r") + , (5365, 0, "e") + , (5366, 0, "f") + , (5367, 0, "=") + , (5368, 0, "'") + , (5369, 0, ".") + , (8, 0, "\nimport Game from \"./Game.svelte\"\n") + , (5404, 0, "Game") + , (5408, 0, ".") + , (5409, 0, "/") + , (5410, 0, ".") + , (5411, 0, ".") + , (5412, 0, "/") + , (5408, 5, "") + , (5404, 4, "") + , (8, 34, "") + , (5370, 0, ".") + , (5371, 0, "/") + , (5372, 0, ".") + , (5373, 0, ".") + , (5374, 0, "\"") + , (5368, 1, "") + , (5368, 0, "\"") + , (5375, 0, ">") + , (5376, 0, "J") + , (5377, 0, "o") + , (5378, 0, "i") + , (5379, 0, "n") + , (5380, 0, " ") + , (5381, 0, "a") + , (5382, 0, "n") + , (5383, 0, "o") + , (5384, 0, "h") + , (5385, 0, "t") + , (5386, 0, "e") + , (5387, 0, "r") + , (5388, 0, " ") + , (5389, 0, "r") + , (5381, 9, "a") + , (5382, 0, "n") + , (5383, 0, "o") + , (5384, 0, "t") + , (5385, 0, "h") + , (5386, 0, "e") + , (5387, 0, "r") + , (5388, 0, " ") + , (5389, 0, "r") + , (5390, 0, "o") + , (5391, 0, "o") + , (5392, 0, "m") + , (5393, 0, "<") + , (5394, 0, "/") + , (5395, 0, "a") + , (5396, 0, ">") + , (5360, 37, "") + , (5352, 0, " ") + , (5353, 0, "Join another room") + , (5396, 2, "") + , (5395, 1, "") + , (5395, 0, "\n") + , (5396, 0, "\t\t") + , (5353, 37, "") + , (5352, 1, "") + , (5360, 0, "Join another room") + , (5376, 13, "C") + , (5377, 0, "h") + , (5378, 0, "a") + , (5379, 0, "n") + , (5380, 0, "g") + , (5381, 0, "e") + , (5382, 0, " ") + , (8045, 9, "=") + , (8045, 1, "") + , (5677, 31, "") + , (5539, 2, "\t\t\t") + , (5539, 0, "\t\t
\n") + , (5577, 0, " ") + , (5578, 0, "i") + , (5579, 0, "d") + , (5580, 0, "=") + , (5581, 0, "t") + , (5582, 0, "i") + , (5583, 0, "m") + , (5584, 0, "e") + , (5585, 0, "'") + , (5581, 0, "'") + , (5582, 0, "p") + , (5583, 0, "r") + , (5584, 0, "o") + , (5585, 0, "g") + , (5586, 0, "r") + , (5587, 0, "e") + , (5588, 0, "s") + , (5589, 0, "s") + , (5590, 0, "_") + , (7954, 0, "\n") + , (7954, 0, "\n") + , (7955, 0, "#") + , (7956, 0, "p") + , (7957, 0, "r") + , (7958, 0, "o") + , (7959, 0, "g") + , (7960, 0, "r") + , (7961, 0, "e") + , (7962, 0, "s") + , (7963, 0, "s") + , (7964, 0, "-") + , (7965, 0, "t") + , (7966, 0, "i") + , (7967, 0, "m") + , (7968, 0, "e") + , (7964, 1, "") + , (7964, 0, "_") + , (7969, 0, " ") + , (7970, 0, "{") + , (7971, 0, "\n\t") + , (7973, 0, "\n\t") + , (7972, 1, "") + , (7973, 1, "}") + , (7972, 0, "\t") + , (7973, 0, "p") + , (7974, 0, "o") + , (7975, 0, "s") + , (7976, 0, "i") + , (7977, 0, "t") + , (7978, 0, "i") + , (7979, 0, "o") + , (7980, 0, "n") + , (7981, 0, ":") + , (7982, 0, " ") + , (7983, 0, "a") + , (7984, 0, "b") + , (7985, 0, "s") + , (7986, 0, "o") + , (7987, 0, "l") + , (7988, 0, "u") + , (7989, 0, "t") + , (7990, 0, "e") + , (7991, 0, ";") + , (7992, 0, "\n\t") + , (7994, 0, "c") + , (7995, 0, "o") + , (7996, 0, "l") + , (7997, 0, "o") + , (7998, 0, "r") + , (7999, 0, ":") + , (8000, 0, " ") + , (8001, 0, "r") + , (8002, 0, "e") + , (8003, 0, "d") + , (8004, 0, ";") + , (3767, 11, "setTimeout(() => tick(false))") + , (3761, 0, " ") + , (3762, 0, "|") + , (3763, 0, "|") + , (3764, 0, " ") + , (3765, 0, "s") + , (3766, 0, "t") + , (3767, 0, "a") + , (3768, 0, "t") + , (3769, 0, "e") + , (3770, 0, " ") + , (3771, 0, "=") + , (3772, 0, "=") + , (3773, 0, "=") + , (3774, 0, " ") + , (3775, 0, "'") + , (3776, 0, "p") + , (3777, 0, "a") + , (3778, 0, "i") + , (3779, 0, "s") + , (3780, 0, "e") + , (3780, 1, "") + , (3779, 1, "") + , (3778, 1, "") + , (3778, 0, "u") + , (3779, 0, "s") + , (3780, 0, "e") + , (3781, 0, "d") + , (3782, 0, "'") + , (198, 0, "export let seconds_per_bead\n") + , (237, 16, "p") + , (238, 0, "a") + , (239, 0, "u") + , (240, 0, "s") + , (241, 0, "e") + , (242, 0, "d") + , (243, 0, "_") + , (244, 0, "p") + , (245, 0, "r") + , (246, 0, "o") + , (247, 0, "g") + , (248, 0, "r") + , (249, 0, "e") + , (250, 0, "s") + , (251, 0, "s") + , (2637, 0, " ") + , (2638, 0, "+") + , (2639, 0, " ") + , (2640, 0, "p") + , (2641, 0, "a") + , (2642, 0, "u") + , (2643, 0, "s") + , (2644, 0, "e") + , (2640, 5, "paused_progress") + , (2638, 1, "") + , (2638, 0, "-") + , (2637, 18, "") + , (2545, 0, "\n\t") + , (2547, 0, "l") + , (2548, 0, "e") + , (2549, 0, "t") + , (2550, 0, " ") + , (2547, 4, "c") + , (2548, 0, "o") + , (2549, 0, "n") + , (2550, 0, "s") + , (2551, 0, "t") + , (2552, 0, " ") + , (2553, 0, "t") + , (2554, 0, "i") + , (2555, 0, "m") + , (2556, 0, "e") + , (2557, 0, " ") + , (2558, 0, "=") + , (2559, 0, " ") + , (2560, 0, "s") + , (2561, 0, "t") + , (2562, 0, "a") + , (2563, 0, "t") + , (2564, 0, "e") + , (2565, 0, " ") + , (2566, 0, "=") + , (2567, 0, "=") + , (2568, 0, "=") + , (2569, 0, " ") + , (2570, 0, "'") + , (2571, 0, "p") + , (2572, 0, "l") + , (2573, 0, "a") + , (2574, 0, "y") + , (2575, 0, "i") + , (2576, 0, "n") + , (2577, 0, "g") + , (2578, 0, "'") + , (2579, 0, " ") + , (2580, 0, "?") + , (2581, 0, " ") + , (2582, 0, "Date.now() - start_time") + , (2605, 0, "\n\t") + , (2607, 0, "\t") + , (2608, 0, ":") + , (2609, 0, " ") + , (2610, 0, "s") + , (2611, 0, "t") + , (2612, 0, "a") + , (2613, 0, "t") + , (2614, 0, "e") + , (2615, 0, " ") + , (2616, 0, "=") + , (2617, 0, "=") + , (2618, 0, "=") + , (2619, 0, " ") + , (2620, 0, "'") + , (2621, 0, "p") + , (2622, 0, "a") + , (2623, 0, "u") + , (2624, 0, "s") + , (2625, 0, "e") + , (2626, 0, "d") + , (2627, 0, "'") + , (2628, 0, " ") + , (2629, 0, "?") + , (2630, 0, " ") + , (2631, 0, "p") + , (2632, 0, "a") + , (2633, 0, "u") + , (2634, 0, "s") + , (2631, 4, "paused_progress") + , (2646, 0, "\n\t\t") + , (2649, 0, ":") + , (2650, 0, " ") + , (2651, 0, "0") + , (2721, 23, "t") + , (2722, 0, "i") + , (2723, 0, "m") + , (2724, 0, "e") + , (8160, 0, "\n\t") + , (8162, 0, "f") + , (8163, 0, "o") + , (8164, 0, "n") + , (8165, 0, "t") + , (8166, 0, "-") + , (8167, 0, "s") + , (8168, 0, "i") + , (8169, 0, "z") + , (8170, 0, "e") + , (8171, 0, ":") + , (8172, 0, " ") + , (8173, 0, "6") + , (8174, 0, "0") + , (8175, 0, "p") + , (8176, 0, "x") + , (8177, 0, ";") + , (8106, 0, "\n\t") + , (8108, 0, "p") + , (8109, 0, "o") + , (8110, 0, "s") + , (8111, 0, "i") + , (8112, 0, "t") + , (8113, 0, "i") + , (8114, 0, "o") + , (8115, 0, "i") + , (8116, 0, "n") + , (8117, 0, ":") + , (8118, 0, " ") + , (8107, 12, "p") + , (8107, 1, "") + , (8107, 0, "\t") + , (8108, 0, "p") + , (8109, 0, "o") + , (8110, 0, "s") + , (8111, 0, "i") + , (8112, 0, "t") + , (8113, 0, "i") + , (8114, 0, "o") + , (8115, 0, "n") + , (8116, 0, ":") + , (8117, 0, " ") + , (8118, 0, "r") + , (8119, 0, "e") + , (8120, 0, "l") + , (8121, 0, "a") + , (8122, 0, "t") + , (8123, 0, "i") + , (8124, 0, "v") + , (8125, 0, "e") + , (8126, 0, ";") + , (8127, 0, "\n\tborder: 2px solid white;") + , (8081, 26, "") + , (8101, 0, "\n\theight: 5em;") + , (8067, 14, "") + , (8087, 0, "\n\tmargin: 25px;") + , (8052, 15, "") + , (8052, 1, "") + , (8052, 0, "\t") + , (8199, 0, "\n\t") + , (8201, 0, "m") + , (8202, 0, "i") + , (8203, 0, "x") + , (8204, 0, "-") + , (8205, 0, "b") + , (8206, 0, "l") + , (8207, 0, "e") + , (8208, 0, "n") + , (8201, 8, "mix-blend-mode: ;") + , (8217, 0, "d") + , (8218, 0, "i") + , (8219, 0, "f") + , (8220, 0, "f") + , (8221, 0, "e") + , (8222, 0, "r") + , (8223, 0, "e") + , (8217, 7, "difference") + , (8194, 4, "330202") + , (8194, 0, "#") + , (8195, 6, "") + , (8194, 1, "") + , (8194, 0, "r") + , (8195, 0, "g") + , (8196, 0, "b") + , (8197, 0, "(") + , (8194, 4, "") + , (8194, 0, "#330202") + , (8202, 0, " */") + , (8183, 0, "/* ") + , (8182, 0, "\t/* font-size: #330202; */\n") + , (8232, 3, "") + , (8210, 3, "") + , (8221, 7, "") + , (8221, 0, "r") + , (8222, 0, "g") + , (8223, 0, "b") + , (8224, 0, "(") + , (8225, 0, "2") + , (8226, 0, "0") + , (8227, 0, "4") + , (8228, 0, ",") + , (8229, 0, "2") + , (8230, 0, "5") + , (8231, 0, "4") + , (8232, 0, ",") + , (8233, 0, "2") + , (8234, 0, "5") + , (8235, 0, "4") + , (8236, 0, ")") + , (8210, 9, "c") + , (8211, 0, "o") + , (8212, 0, "l") + , (8213, 0, "o") + , (8214, 0, "r") + , (8209, 0, "\tcolor: rgb(204,254,254);\n") + , (8236, 5, "f") + , (8237, 0, "o") + , (8238, 0, "n") + , (8239, 0, "t") + , (8240, 0, "-") + , (8241, 0, "s") + , (8242, 0, "i") + , (8243, 0, "z") + , (8244, 0, "e") + , (8247, 17, "6") + , (8248, 0, "0") + , (8249, 0, "p") + , (8250, 0, "x") + , (8251, 0, ";") + , (8209, 0, "\tcolor: rgb(204,254,254);\n") + , (8234, 0, " */") + , (8210, 0, "/* ") + , (8181, 0, " */") + , (8170, 0, "/* ") + , (8255, 16, "w") + , (8256, 0, "h") + , (8257, 0, "i") + , (8258, 0, "t") + , (8259, 0, "e") + , (8261, 0, " */") + , (8248, 0, "/* ") + , (8243, 3, "") + , (8216, 3, "") + , (6245, 0, "'") + , (6245, 1, "") + , (6245, 0, "'") + , (6246, 0, "s") + , (6247, 0, "r") + , (6248, 0, "o") + , (6249, 0, "u") + , (6250, 0, "n") + , (6251, 0, "d") + , (6246, 6, "r") + , (6247, 0, "o") + , (6248, 0, "u") + , (6249, 0, "n") + , (6250, 0, "d") + , (6246, 5, "b") + , (6247, 0, "e") + , (6248, 0, "a") + , (6249, 0, "d") + , (6250, 0, "'") + , (6251, 0, " ") + , (6252, 0, "+") + , (6253, 0, " ") + , (6250, 0, " ") + , (8433, 0, "\n") + , (8434, 0, ".") + , (8435, 0, "b") + , (8436, 0, "e") + , (8437, 0, "a") + , (8438, 0, "d") + , (8439, 0, " ") + , (8440, 0, "{") + , (8441, 0, "\n\t") + , (8443, 0, "\n\t") + , (8442, 1, "") + , (8443, 1, "}") + , (8442, 0, "\t") + , (8443, 0, "d") + , (8444, 0, "i") + , (8445, 0, "s") + , (8446, 0, "p") + , (8447, 0, "l") + , (8448, 0, "a") + , (8449, 0, "y") + , (8450, 0, ":") + , (8451, 0, " ") + , (8452, 0, "b") + , (8453, 0, "l") + , (8454, 0, "o") + , (8455, 0, "c") + , (8456, 0, "k") + , (8457, 0, ";") + , (8443, 15, "") + , (8443, 0, "m") + , (8444, 0, "a") + , (8445, 0, "r") + , (8446, 0, "g") + , (8447, 0, "i") + , (8448, 0, "n") + , (8449, 0, "-") + , (8450, 0, "l") + , (8451, 0, "e") + , (8452, 0, "f") + , (8453, 0, "t") + , (8450, 4, "r") + , (8451, 0, "i") + , (8452, 0, "g") + , (8453, 0, "h") + , (8454, 0, "t") + , (8455, 0, ":") + , (8456, 0, " ") + , (8457, 0, "1") + , (8458, 0, "e") + , (8459, 0, "m") + , (8460, 0, ";") + , (8459, 1, "") + , (8458, 1, "") + , (8457, 1, "") + , (8457, 0, "2") + , (8457, 1, "") + , (8457, 0, "3") + , (8458, 0, "p") + , (8459, 0, "x") + , (8457, 1, "") + , (8457, 0, "4") + , (8457, 3, "2") + , (8458, 0, "e") + , (8459, 0, "m") + , (8457, 1, "") + , (8457, 0, "1") + , (8285, 1, "") + , (8284, 1, "") + , (8284, 0, "5") + , (8285, 0, "4") + , (8289, 0, "\n\t") + , (8291, 0, "m") + , (8292, 0, "a") + , (8293, 0, "r") + , (8294, 0, "g") + , (8295, 0, "i") + , (8296, 0, "n") + , (8297, 0, "-") + , (8298, 0, "e") + , (8299, 0, "f") + , (8299, 1, "") + , (8298, 1, "") + , (8298, 0, "l") + , (8299, 0, "e") + , (8300, 0, "f") + , (8301, 0, "t") + , (8302, 0, ":") + , (8303, 0, " ") + , (8304, 0, "1") + , (8305, 0, "e") + , (8306, 0, "m") + , (8307, 0, ";") + , (8306, 1, "") + , (8305, 1, "") + , (8304, 1, "") + , (8304, 0, "5") + , (8305, 0, "p") + , (8306, 0, "x") + , (8490, 1, "") + , (8490, 0, "\n\t") + , (8522, 1, "") + , (8522, 0, "\n") + , (8535, 1, "") + , (8535, 0, "\n\t") + , (8549, 1, "") + , (8549, 0, "\n") + , (8549, 0, "\n\tcolor: #888;") + , (8549, 0, "\n.waiting {") + , (8536, 1, "") + , (8525, 11, "") + , (8537, 0, "\n}") + , (8525, 0, "\t") + , (8523, 2, "") + , (8563, 0, " */") + , (8551, 0, "/* ") + , (8630, 0, "\n\t") + , (8632, 0, "p") + , (8633, 0, "a") + , (8634, 0, "d") + , (8635, 0, "d") + , (8636, 0, "i") + , (8637, 0, "n") + , (8638, 0, "g") + , (8639, 0, "-") + , (8639, 1, "") + , (8639, 0, ":") + , (8640, 0, " ") + , (8641, 0, "0") + , (8642, 0, " ") + , (8643, 0, "2") + , (8644, 0, "p") + , (8645, 0, "x") + , (8646, 0, ";") + , (8631, 16, "") + , (8630, 1, "") + , (8480, 0, "\n\t") + , (8482, 0, "\tpadding: 0 2px;") + , (8481, 2, "\t") + , (8493, 1, "") + , (8493, 0, "4") + , (8631, 1, "") + , (8631, 0, "2") + , (8631, 1, "") + , (8631, 0, "1") + , (5515, 0, "(") + , (5515, 1, "") + , (5531, 0, "(") + , (5543, 0, ")") + , (5548, 35, "") + , (5513, 0, "\t\t

Topic: {topic}

\n") + , (5619, 0, "\n\t\t") + , (5622, 0, "{") + , (5623, 0, "#") + , (5624, 0, "i") + , (5625, 0, "f") + , (5626, 0, " ") + , (5627, 0, "_active_sessions") + , (5643, 0, " ") + , (5644, 0, "=") + , (5645, 0, "=") + , (5646, 0, " ") + , (5647, 0, "1") + , (5648, 0, "}") + , (5650, 0, "\t\t
{_active_sessions} player(s) in room
\n") + , (5652, 0, "\t") + , (5700, 0, "\n\t\t\t") + , (5704, 0, "{") + , (5705, 0, ":") + , (5706, 0, "e") + , (5707, 0, "l") + , (5708, 0, "s") + , (5709, 0, "e") + , (5710, 0, "}") + , (5701, 3, "\t\t") + , (5760, 0, "\n\t\t") + , (5763, 0, "{") + , (5764, 0, "/") + , (5765, 0, "i") + , (5766, 0, "f") + , (5767, 0, "}") + , (5713, 0, "\t") + , (5658, 36, "Y") + , (5659, 0, "o") + , (5660, 0, "u") + , (5661, 0, " ") + , (5662, 0, "a") + , (5663, 0, "r") + , (5664, 0, "e") + , (5665, 0, " ") + , (5666, 0, "a") + , (5667, 0, "l") + , (5668, 0, "o") + , (5669, 0, "n") + , (5670, 0, "e") + , (5671, 0, " ") + , (5672, 0, "i") + , (5673, 0, "n") + , (5674, 0, " ") + , (5675, 0, "t") + , (5676, 0, "h") + , (5677, 0, "e") + , (5678, 0, " ") + , (5679, 0, "r") + , (5680, 0, "o") + , (5681, 0, "o") + , (5682, 0, "m") + , (5733, 1, "") + , (5734, 1, "") + , (5735, 7, "j") + , (5736, 0, "o") + , (5737, 0, "i") + , (5738, 0, "n") + , (5739, 0, " ") + , (5740, 0, "y") + , (5741, 0, "o") + , (5742, 0, "u") + , (5735, 8, "a") + , (5736, 0, "r") + , (5737, 0, "e") + , (5738, 0, " ") + , (5739, 0, "w") + , (5740, 0, "i") + , (5741, 0, "t") + , (5742, 0, "h") + , (5743, 0, " ") + , (5744, 0, "y") + , (5745, 0, "o") + , (5746, 0, "u") + , (5735, 12, "i") + , (5736, 0, "n") + , (5736, 1, "") + , (5735, 1, "") + , (5735, 0, "a") + , (5736, 0, "r") + , (5737, 0, "e") + , (5738, 0, " ") + , (5739, 0, "i") + , (5740, 0, "n") + , (5741, 0, " ") + , (5742, 0, "t") + , (5743, 0, "h") + , (5744, 0, "e") + , (5745, 0, " ") + , (5742, 4, "t") + , (5743, 0, "h") + , (5744, 0, "i") + , (5745, 0, "s") + , (5746, 0, " ") + , (5747, 0, "r") + , (5748, 0, "o") + , (5749, 0, "o") + , (5750, 0, "m") + , (8105, 0, "\n") + , (8106, 0, "#") + , (8106, 1, "") + , (8106, 0, "h") + , (8107, 0, "1") + , (8108, 0, " ") + , (8109, 0, "{") + , (8110, 0, "\n\t") + , (8112, 0, "\n\t") + , (8111, 1, "") + , (8112, 1, "}") + , (8111, 0, "\t") + , (8112, 0, "m") + , (8113, 0, "a") + , (8114, 0, "r") + , (8115, 0, "i") + , (8116, 0, "n") + , (8117, 0, "g") + , (8117, 1, "") + , (8116, 1, "") + , (8115, 1, "") + , (8114, 1, "") + , (8114, 0, "r") + , (8115, 0, "g") + , (8116, 0, "i") + , (8117, 0, "n") + , (8118, 0, "-") + , (8119, 0, "t") + , (8120, 0, "o") + , (8121, 0, "p") + , (8122, 0, ":") + , (8123, 0, " ") + , (8124, 0, "2") + , (8125, 0, "e") + , (8126, 0, "m") + , (8127, 0, ";") + , (8130, 0, "\n") + , (8124, 1, "") + , (8124, 0, "1") + , (5550, 33, "") + , (5507, 0, "(Change room)") + , (5507, 0, " ") + , (5525, 11, "l") + , (5526, 0, "e") + , (5527, 0, "a") + , (5528, 0, "v") + , (5529, 0, "e") + , (5614, 0, " -->") + , (5581, 0, "") + , (5626, 0, "") + , (5581, 0, "") + , (5449, 0, "") + , (5526, 0, "") + , (5491, 0, "") + , (5556, 4, "") + , (5519, 5, "") + , (5549, 1, "") + , (5521, 1, "") + , (5548, 0, "1") + , (5521, 0, "1") + , (9547, 0, "\n") + , (9548, 0, "\n") + , (9549, 0, "i") + , (9550, 0, "n") + , (9551, 0, "p") + , (9552, 0, "u") + , (9553, 0, "t") + , (9554, 0, ":") + , (9555, 0, " ") + , (9555, 1, "") + , (9554, 1, "") + , (9554, 0, " ") + , (9555, 0, "{") + , (9556, 0, "\n\t") + , (9558, 0, "\n\t") + , (9557, 1, "") + , (9558, 1, "}") + , (9557, 0, "\t") + , (9558, 0, "h") + , (9559, 0, "e") + , (9560, 0, "i") + , (9561, 0, "g") + , (9562, 0, "h") + , (9563, 0, "t") + , (9564, 0, ":") + , (9565, 0, " ") + , (9558, 8, "w") + , (9559, 0, "i") + , (9560, 0, "d") + , (9561, 0, "t") + , (9562, 0, "h") + , (9563, 0, ":") + , (9564, 0, " ") + , (9565, 0, "2") + , (9566, 0, "e") + , (9567, 0, "m") + , (9567, 1, "") + , (9566, 1, "") + , (9565, 1, "") + , (9565, 0, "3") + , (9566, 0, "e") + , (9567, 0, "m") + , (9568, 0, ";") + , (9565, 1, "") + , (9565, 0, "1") + , (9566, 0, "0") + , (9570, 0, "\n\t") + , (9572, 0, "h") + , (9573, 0, "e") + , (9574, 0, "i") + , (9575, 0, "g") + , (9576, 0, "h") + , (9577, 0, "t") + , (9578, 0, ":") + , (9579, 0, " ") + , (9580, 0, "1") + , (9581, 0, ".") + , (9582, 0, "3") + , (9583, 0, ";") + , (9580, 1, "") + , (9580, 0, "1") + , (9581, 0, "0") + , (9584, 0, "p") + , (9585, 0, "x") + , (9572, 14, "f") + , (9573, 0, "o") + , (9574, 0, "n") + , (9575, 0, "t") + , (9576, 0, "-") + , (9577, 0, "s") + , (9578, 0, "i") + , (9579, 0, "z") + , (9580, 0, "e") + , (9581, 0, ":") + , (9582, 0, " ") + , (9583, 0, "1") + , (9584, 0, "6") + , (9585, 0, "p") + , (9586, 0, "x") + , (9480, 0, "\n") + , (9481, 0, "\n") + , (9482, 0, "s") + , (9483, 0, "u") + , (9484, 0, "m") + , (9485, 0, "m") + , (9486, 0, "a") + , (9487, 0, "r") + , (9488, 0, "y") + , (9489, 0, " ") + , (9490, 0, ">") + , (9491, 0, " ") + , (9492, 0, "l") + , (9493, 0, "a") + , (9494, 0, "b") + , (9495, 0, "e") + , (9496, 0, "l") + , (9497, 0, "{") + , (9498, 0, " ") + , (9498, 1, "") + , (9497, 1, "") + , (9497, 0, " ") + , (9498, 0, "{") + , (9499, 0, "\n\t") + , (9501, 0, "\n\t") + , (9500, 1, "") + , (9501, 1, "}") + , (9500, 0, "\t") + , (9501, 0, "m") + , (9502, 0, "a") + , (9503, 0, "r") + , (9504, 0, "g") + , (9505, 0, "i") + , (9506, 0, "n") + , (9501, 6, "l") + , (9501, 1, "") + , (9501, 0, "l") + , (9502, 0, "i") + , (9503, 0, "n") + , (9504, 0, "e") + , (9505, 0, "-") + , (9506, 0, "h") + , (9507, 0, "e") + , (9508, 0, "i") + , (9509, 0, "g") + , (9510, 0, "h") + , (9511, 0, "t") + , (9512, 0, ":") + , (9513, 0, " ") + , (9514, 0, "2") + , (9515, 0, ";") + , (9482, 10, "") + , (9491, 11, "m") + , (9492, 0, "a") + , (9493, 0, "r") + , (9494, 0, "g") + , (9495, 0, "i") + , (9496, 0, "n") + , (9497, 0, "t") + , (9497, 1, "") + , (9497, 0, "-") + , (9498, 0, "t") + , (9498, 1, "") + , (9498, 0, "b") + , (9499, 0, "o") + , (9500, 0, "t") + , (9501, 0, "t") + , (9502, 0, "o") + , (9503, 0, "m") + , (9506, 1, "") + , (9506, 0, "3") + , (9507, 0, "p") + , (9508, 0, "x") + , (6898, 18, "e") + , (6899, 0, "f") + , (6900, 0, "f") + , (6901, 0, "e") + , (6902, 0, "c") + , (6903, 0, "t") + , (7698, 20, "P") + , (7699, 0, "r") + , (7700, 0, "e") + , (7701, 0, "-") + , (7702, 0, "g") + , (7703, 0, "a") + , (7704, 0, "m") + , (7705, 0, "e") + , (7706, 0, "m") + , (7707, 0, " ") + , (7707, 1, "") + , (7706, 1, "") + , (7706, 0, " ") + , (7707, 0, "m") + , (7708, 0, "e") + , (7709, 0, "d") + , (7710, 0, "i") + , (7711, 0, "t") + , (7712, 0, "a") + , (7713, 0, "t") + , (7714, 0, "i") + , (7715, 0, "o") + , (7716, 0, "n") + , (9577, 0, "m") + , (9578, 0, "i") + , (9579, 0, "n") + , (9580, 0, "-") + , (9589, 1, "") + , (9588, 1, "") + , (9588, 0, "6") + , (9577, 4, "") + , (9584, 1, "") + , (9584, 0, "7") + , (9602, 1, "") + , (9602, 0, "5") + , (9602, 1, "") + , (9602, 0, "4") + , (9603, 0, "3") + , (9603, 1, "") + , (9606, 0, "\n\t") + , (9608, 0, "c") + , (9609, 0, "o") + , (9610, 0, "l") + , (9611, 0, "o") + , (9612, 0, "r") + , (9613, 0, ":") + , (9614, 0, " ") + , (9615, 0, "#330202") + , (9622, 0, ";") + , (8669, 46, "") + , (8668, 1, "") + , (9372, 0, "\nbutton {\n\tfont-size: 140%;\n\tmargin: 10px 0;\n}") + , (9418, 0, "\n") + , (9416, 0, "\n\t") + , (9418, 0, "color: #330202;") + , (9433, 0, " ") + , (9434, 0, "/") + , (9435, 0, "*") + , (9436, 0, " ") + , (9437, 0, "T") + , (9438, 0, "O") + , (9439, 0, "D") + , (9440, 0, "O") + , (9441, 0, ":") + , (9442, 0, " ") + , (9443, 0, "U") + , (9444, 0, "s") + , (9445, 0, "e") + , (9446, 0, " ") + , (9447, 0, "C") + , (9448, 0, "A") + , (9449, 0, "S") + , (9449, 1, "") + , (9448, 1, "") + , (9448, 0, "S") + , (9449, 0, "S") + , (9450, 0, " ") + , (9451, 0, "v") + , (9452, 0, "a") + , (9453, 0, "r") + , (9454, 0, "i") + , (9455, 0, "a") + , (9456, 0, "b") + , (9457, 0, "l") + , (9458, 0, "e") + , (9459, 0, " ") + , (9460, 0, "f") + , (9461, 0, "o") + , (9462, 0, "r") + , (9463, 0, " ") + , (9464, 0, "t") + , (9465, 0, "h") + , (9466, 0, "i") + , (9467, 0, "s") + , (9468, 0, " ") + , (9469, 0, "*") + , (9470, 0, "/") + , (1789, 1, "") + , (1782, 1, "") + , (8513, 0, "\n\t\t\t") + , (8517, 0, "\n\t\t\t") + , (8514, 3, "") + , (8518, 0, "") + , (8541, 5, "_") + , (8542, 0, "x") + , (8543, 0, "x") + , (8543, 1, "") + , (8542, 1, "") + , (8557, 6, "B") + , (8558, 0, "e") + , (8559, 0, "c") + , (8560, 0, "o") + , (8561, 0, "m") + , (8562, 0, "e") + , (8563, 0, " ") + , (8564, 0, "Magister Ludi") + , (8542, 0, "m") + , (8543, 0, "a") + , (8544, 0, "g") + , (8545, 0, "i") + , (8546, 0, "s") + , (8547, 0, "t") + , (8548, 0, "e") + , (8549, 0, "r") + , (8554, 7, "t") + , (8555, 0, "r") + , (8556, 0, "y") + , (8556, 1, "") + , (8556, 0, "u") + , (8557, 0, "e") + , (3330, 0, "// ") + , (6874, 0, "\n\t\t\t") + , (6878, 0, "\n\t\t\t") + , (6875, 3, "") + , (6879, 0, "<") + , (6880, 0, "d") + , (6881, 0, "i") + , (6882, 0, "v") + , (6883, 0, ">") + , (6884, 0, "\n\t\t\t\t") + , (6889, 0, "M") + , (6890, 0, "a") + , (6891, 0, "g") + , (6892, 0, "i") + , (6893, 0, "s") + , (6894, 0, "t") + , (6895, 0, "e") + , (6896, 0, "r") + , (6897, 0, " ") + , (6898, 0, "s") + , (6899, 0, "t") + , (6900, 0, "a") + , (6901, 0, "t") + , (6902, 0, "u") + , (6903, 0, "s") + , (6904, 0, ":") + , (6905, 0, " ") + , (6906, 0, "{") + , (6907, 0, "}") + , (6908, 0, "\n\t\t\t\t") + , (6913, 0, "<") + , (6914, 0, "/") + , (6915, 0, "d") + , (6916, 0, "i") + , (6917, 0, "v") + , (6909, 9, "\t\t\t
") + , (253, 0, "export let _active_sessions\n") + , (293, 15, "m") + , (294, 0, "a") + , (295, 0, "g") + , (296, 0, "i") + , (292, 5, "_magister") + , (6928, 0, "m") + , (6929, 0, "a") + , (6930, 0, "g") + , (6931, 0, "i") + , (6928, 4, "_magister") + , (6928, 0, "J") + , (6929, 0, "S") + , (6930, 0, "O") + , (6931, 0, "N") + , (6932, 0, ".") + , (6933, 0, "s") + , (6934, 0, "t") + , (6935, 0, "r") + , (6936, 0, "i") + , (6937, 0, "n") + , (6938, 0, "g") + , (6939, 0, "i") + , (6940, 0, "f") + , (6941, 0, "y") + , (6933, 9, "stringify") + , (6942, 0, "(") + , (6952, 0, ")") + , (6835, 0, "\n\t\t") + , (6838, 0, "{") + , (6839, 0, "#") + , (6840, 0, "if }\n\t\t\t\n\t\t{/if") + , (6843, 0, "_magister") + , (6852, 0, " ") + , (6853, 0, "=") + , (6854, 0, "=") + , (6855, 0, " ") + , (6856, 0, "n") + , (6857, 0, "u") + , (6858, 0, "l") + , (6859, 0, "l") + , (6860, 0, " ") + , (6861, 0, "|") + , (6862, 0, "|") + , (6863, 0, " ") + , (6864, 0, "_") + , (6865, 0, "m") + , (6866, 0, "a") + , (6867, 0, "g") + , (6864, 4, "_magister") + , (6873, 0, " ") + , (6874, 0, "=") + , (6875, 0, "=") + , (6876, 0, " ") + , (6877, 0, "f") + , (6878, 0, "a") + , (6879, 0, "l") + , (6879, 1, "") + , (6878, 1, "") + , (6877, 1, "") + , (6877, 0, "t") + , (6878, 0, "r") + , (6879, 0, "u") + , (6880, 0, "e") + , (6893, 0, "}") + , (6886, 0, "\n\t\t") + , (6889, 0, "{") + , (6890, 0, ":") + , (6891, 0, "e") + , (6892, 0, "l") + , (6893, 0, "s") + , (6894, 0, "e") + , (6895, 0, "}") + , (6896, 0, "\n\t\t") + , (6899, 0, "\t") + , (6900, 0, ",") + , (6900, 1, "") + , (6900, 0, "<") + , (6901, 0, "d") + , (6902, 0, "i") + , (6903, 0, "v") + , (6904, 0, ">") + , (6905, 0, "a") + , (6906, 0, "m") + , (6906, 1, "") + , (6905, 1, "") + , (6905, 0, "G") + , (6906, 0, "a") + , (6907, 0, "m") + , (6905, 3, "W") + , (6906, 0, "a") + , (6907, 0, "i") + , (6905, 3, "G") + , (6906, 0, "a") + , (6907, 0, "m") + , (6908, 0, "e") + , (6909, 0, " ") + , (6910, 0, "c") + , (6911, 0, "o") + , (6912, 0, "n") + , (6913, 0, "t") + , (6914, 0, "r") + , (6915, 0, "o") + , (6916, 0, "l") + , (6917, 0, "l") + , (6918, 0, "e") + , (6919, 0, "d") + , (6920, 0, " ") + , (6921, 0, "b") + , (6922, 0, "y") + , (6923, 0, " ") + , (6905, 19, "O") + , (6906, 0, "n") + , (6907, 0, "l") + , (6908, 0, "y") + , (6909, 0, " ") + , (6910, 0, "t") + , (6911, 0, "h") + , (6912, 0, "e") + , (6913, 0, " ") + , (6914, 0, "M") + , (6915, 0, "a") + , (6916, 0, "g") + , (6917, 0, "i") + , (6918, 0, "s") + , (6919, 0, "t") + , (6920, 0, "e") + , (6921, 0, "r") + , (6922, 0, " ") + , (6923, 0, "L") + , (6924, 0, "u") + , (6925, 0, "d") + , (6926, 0, "i") + , (6927, 0, " ") + , (6928, 0, "c") + , (6929, 0, "a") + , (6930, 0, "n") + , (6931, 0, " ") + , (6905, 6, "T") + , (6923, 4, "i") + , (6924, 0, "s") + , (6925, 0, " ") + , (6926, 0, "i") + , (6927, 0, "n") + , (6928, 0, " ") + , (6923, 6, "i") + , (6924, 0, "s") + , (6925, 0, " ") + , (6926, 0, "i") + , (6927, 0, "n") + , (6928, 0, " ") + , (6929, 0, "c") + , (6930, 0, "o") + , (6931, 0, "n") + , (6932, 0, "t") + , (6933, 0, "r") + , (6934, 0, "o") + , (6935, 0, "l") + , (6936, 0, " ") + , (6937, 0, "o") + , (6938, 0, "f") + , (6939, 0, " ") + , (6940, 0, "t") + , (6941, 0, "h") + , (6942, 0, "i") + , (6943, 0, "s") + , (6944, 0, " ") + , (6945, 0, "g") + , (6946, 0, "a") + , (6947, 0, "m") + , (6948, 0, "e") + , (6949, 0, "<") + , (6950, 0, "/") + , (6951, 0, "d") + , (6952, 0, "i") + , (6953, 0, "v") + , (6954, 0, ">") + , (6964, 1861, "") + , (6963, 1, "") + , ( 6886 + , 0 + , "\t\t
\n\t\t\tGame controls\n\n\t\t\t
\n\t\t\t\tMagister status: {JSON.stringify(_magister)}\n\t\t\t
\n\n\t\t\t
\n\t\t\t\tThis will effect all players.\n\t\t\t
\n\n\t\t\t{#if internal_state == 'waiting'}\n\t\t\t\t\n\t\t\t{:else if internal_state == 'playing'}\n\t\t\t\t\n\t\t\t{:else if internal_state == 'paused'}\n\t\t\t\t\n\t\t\t{/if}\n\n\t\t\t{#if internal_state == 'paused' || internal_state == 'completed' }\n\t\t\t\t\n\t\t\t{/if}\n\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\n\t\t\t
\n\t\t\t\t(Total game length: {roundish(\n\t\t\t\t\tgame_stages.reduce((x, s) => x + s.duration, 0) / 60\n\t\t\t\t)} minutes)\n\t\t\t
\n\n\t\t\t\n\t\t
" + ) + , (6883, 5, "\t\t") + , (8732, 2, "\t\t\t") + , (8655, 3, "\t\t\t\t") + , (8644, 3, "\t\t\t\t") + , (8628, 4, "\t\t\t\t\t") + , (8570, 5, "\t\t\t\t\t\t") + , (8535, 4, "\t\t\t\t\t") + , (8501, 3, "\t\t\t\t") + , (8488, 3, "\t\t\t\t") + , (8370, 4, "\t\t\t\t\t") + , (8336, 4, "\t\t\t\t\t") + , (8325, 3, "\t\t\t\t") + , (8312, 3, "\t\t\t\t") + , (8201, 4, "\t\t\t\t\t") + , (8167, 4, "\t\t\t\t\t") + , (8156, 3, "\t\t\t\t") + , (8143, 3, "\t\t\t\t") + , (8029, 4, "\t\t\t\t\t") + , (7994, 4, "\t\t\t\t\t") + , (7983, 3, "\t\t\t\t") + , (7970, 3, "\t\t\t\t") + , (7863, 4, "\t\t\t\t\t") + , (7826, 4, "\t\t\t\t\t") + , (7815, 3, "\t\t\t\t") + , (7802, 3, "\t\t\t\t") + , (7786, 4, "\t\t\t\t\t") + , (7773, 5, "\t\t\t\t\t\t") + , (7744, 6, "\t\t\t\t\t\t\t") + , (7710, 5, "\t\t\t\t\t\t") + , (7678, 4, "\t\t\t\t\t") + , (7564, 4, "\t\t\t\t\t") + , (7541, 4, "\t\t\t\t\t") + , (7530, 3, "\t\t\t\t") + , (7520, 3, "\t\t\t\t") + , (7453, 4, "\t\t\t\t\t") + , (7383, 3, "\t\t\t\t") + , (7373, 3, "\t\t\t\t") + , (7310, 4, "\t\t\t\t\t") + , (7269, 3, "\t\t\t\t") + , (7208, 4, "\t\t\t\t\t") + , (7166, 3, "\t\t\t\t") + , (7104, 4, "\t\t\t\t\t") + , (7067, 3, "\t\t\t\t") + , (7056, 3, "\t\t\t\t") + , (7022, 4, "\t\t\t\t\t") + , (7013, 3, "\t\t\t\t") + , (7002, 3, "\t\t\t\t") + , (6953, 4, "\t\t\t\t\t") + , (6944, 3, "\t\t\t\t") + , (6907, 3, "\t\t\t\t") + , (6883, 2, "\t\t\t") + , (6945, 72, "") + , (6835, 0, "\n\t\t") + , ( 6838 + , 0 + , "\n\t\t\t\t
\n\t\t\t\t\tMagister status: {JSON.stringify(_magister)}\n\t\t\t\t
\n" + ) + , (6836, 2, "") + , (6897, 4, "\t\t") + , (6847, 5, "\t\t\t") + , (6837, 4, "\t\t") + , (6902, 0, "\n\t\t") + , (8700, 0, "\n\t\t\t\t") + , (6903, 2, "") + , (8703, 0, "<") + , (8704, 0, "d") + , (8705, 0, "i") + , (8706, 0, "v") + , (8707, 0, ">") + , (8786, 0, "\n\t\t\t\t") + , (8791, 0, "<") + , (8792, 0, "/") + , (8793, 0, "d") + , (8794, 0, "i") + , (8795, 0, "v") + , (8796, 0, ">") + , (8713, 0, "\t") + , (8707, 0, " ") + , (8708, 0, "i") + , (8709, 0, "d") + , (8710, 0, "=") + , (8711, 0, "b") + , (8712, 0, "e") + , (8713, 0, "c") + , (8714, 0, "o") + , (8715, 0, "m") + , (8716, 0, "e") + , (8711, 6, "m") + , (8712, 0, "a") + , (8713, 0, "g") + , (8714, 0, "i") + , (8715, 0, "s") + , (8716, 0, "t") + , (8717, 0, "e") + , (8718, 0, "r") + , (8719, 0, "_") + , (8720, 0, "b") + , (8721, 0, "o") + , (8722, 0, "x") + , (8723, 0, "'") + , (8711, 0, "'") + , (8726, 0, "\n\t\t\t\t\t") + , (8732, 0, "T") + , (8733, 0, "h") + , (8734, 0, "e") + , (8734, 1, "") + , (8733, 1, "") + , (8732, 1, "") + , (8732, 0, "O") + , (8733, 0, "n") + , (8734, 0, "c") + , (8735, 0, "e") + , (8736, 0, " ") + , (8737, 0, "s") + , (8738, 0, "o") + , (8739, 0, "m") + , (8740, 0, "e") + , (8741, 0, "b") + , (8742, 0, "o") + , (8743, 0, "d") + , (8744, 0, "y") + , (8745, 0, " ") + , (8746, 0, "b") + , (8747, 0, "e") + , (8748, 0, "c") + , (8749, 0, "o") + , (8750, 0, "m") + , (8751, 0, "e") + , (8752, 0, "s") + , (8746, 7, "a") + , (8747, 0, "s") + , (8748, 0, "c") + , (8749, 0, "e") + , (8750, 0, "n") + , (8751, 0, "d") + , (8752, 0, "s") + , (8753, 0, " ") + , (8754, 0, "t") + , (8755, 0, "o") + , (8756, 0, " ") + , (8757, 0, "m") + , (8757, 1, "") + , (8757, 0, "M") + , (8758, 0, "a") + , (8759, 0, "g") + , (8760, 0, "i") + , (8761, 0, "s") + , (8762, 0, "t") + , (8763, 0, "e") + , (8764, 0, "r") + , (8765, 0, " ") + , (8766, 0, "L") + , (8767, 0, "u") + , (8768, 0, "d") + , (8769, 0, "i") + , (8770, 0, " ") + , (8771, 0, "o") + , (8772, 0, "f") + , (8773, 0, " ") + , (8774, 0, "t") + , (8775, 0, "h") + , (8776, 0, "e") + , (8777, 0, " ") + , (8778, 0, "g") + , (8779, 0, "a") + , (8780, 0, "m") + , (8781, 0, "e") + , (8782, 0, ",") + , (8783, 0, " ") + , (8784, 0, "a") + , (8785, 0, "l") + , (8786, 0, "l") + , (8787, 0, " ") + , (8788, 0, "o") + , (8789, 0, "t") + , (8790, 0, "h") + , (8791, 0, "e") + , (8792, 0, "r") + , (8793, 0, " ") + , (8794, 0, "u") + , (8795, 0, "s") + , (8796, 0, "e") + , (8797, 0, "r") + , (8798, 0, "s") + , (8799, 0, " ") + , (8794, 6, "p") + , (8795, 0, "l") + , (8796, 0, "a") + , (8797, 0, "y") + , (8798, 0, "e") + , (8799, 0, "r") + , (8800, 0, "s") + , (8801, 0, " ") + , (8802, 0, "l") + , (8803, 0, "o") + , (8803, 1, "") + , (8802, 1, "") + , (8802, 0, "a") + , (8803, 0, "r") + , (8804, 0, "e") + , (8805, 0, " ") + , (8806, 0, "l") + , (8807, 0, "o") + , (8808, 0, "c") + , (8809, 0, "k") + , (8810, 0, "e") + , (8811, 0, "d") + , (8812, 0, " ") + , (8813, 0, "o") + , (8814, 0, "u") + , (8815, 0, "t") + , (8816, 0, " ") + , (8817, 0, "o") + , (8818, 0, "f") + , (8819, 0, " ") + , (8784, 4, "") + , (8770, 14, ",") + , (8771, 0, " ") + , (8790, 14, "c") + , (8791, 0, "a") + , (8792, 0, "n") + , (8793, 0, " ") + , (8794, 0, "n") + , (8795, 0, "o") + , (8796, 0, " ") + , (8797, 0, "l") + , (8798, 0, "o") + , (8799, 0, "n") + , (8800, 0, "g") + , (8801, 0, "e") + , (8802, 0, "r") + , (8803, 0, " ") + , (8804, 0, "s") + , (8805, 0, "t") + , (8806, 0, "a") + , (8807, 0, "r") + , (8808, 0, "t") + , (8809, 0, " ") + , (8810, 0, "o") + , (8811, 0, "r") + , (8812, 0, " ") + , (8813, 0, "s") + , (8814, 0, "t") + , (8815, 0, "o") + , (8816, 0, "p") + , (8817, 0, " ") + , (8818, 0, "t") + , (8819, 0, "h") + , (8820, 0, "e") + , (8821, 0, " ") + , (8822, 0, "g") + , (8823, 0, "a") + , (8824, 0, "m") + , (8825, 0, "e") + , (8826, 0, ".") + , (8827, 0, " ") + , (8828, 0, "M") + , (8829, 0, "a") + , (8830, 0, "g") + , (8831, 0, "i") + , (8832, 0, "s") + , (8833, 0, "t") + , (8834, 0, "e") + , (8835, 0, "r") + , (8836, 0, " ") + , (8837, 0, "l") + , (8838, 0, "u") + , (8839, 0, "d") + , (8837, 3, "") + , (8828, 0, "T") + , (8829, 0, "h") + , (8830, 0, "e") + , (8831, 0, " ") + , (8841, 0, "L") + , (8842, 0, "u") + , (8843, 0, "d") + , (8844, 0, "i") + , (8845, 0, " ") + , (8846, 0, "w") + , (8847, 0, "i") + , (8848, 0, "l") + , (8849, 0, "l") + , (8850, 0, " ") + , (8851, 0, "l") + , (8852, 0, "o") + , (8853, 0, "s") + , (8854, 0, "e") + , (8855, 0, " ") + , (8856, 0, "o") + , (8856, 1, "") + , (8851, 5, "r") + , (8852, 0, "e") + , (8853, 0, "l") + , (8854, 0, "i") + , (8855, 0, "n") + , (8856, 0, "q") + , (8857, 0, "u") + , (8858, 0, "i") + , (8859, 0, "s") + , (8860, 0, "h") + , (8861, 0, " ") + , (8827, 35, "") + , (8770, 0, " ") + , (8771, 0, "s") + , (8772, 0, "t") + , (8773, 0, "a") + , (8774, 0, "t") + , (8775, 0, "u") + , (8776, 0, "s") + , (8793, 4, "") + , (9066, 31, "") + , (9066, 0, "\n\n#config {\n\tmargin-top: 2em;\n}") + , (9067, 58, "") + , (9066, 1, "") + , (10104, 0, "\n") + , ( 10105 + , 0 + , "\n#config {\n\tmargin-top: 2em;\n}\n\nlabel {\n\tdisplay: block;\n}" + ) + , (10105, 30, "") + , (9898, 0, "\n#config {\n\tmargin-top: 2em;\n}") + , (9898, 0, "\n") + , (9929, 0, "\n") + , (9899, 0, "/") + , (9900, 0, "*") + , (9901, 0, " ") + , (9902, 0, "*") + , (9903, 0, "*") + , (9904, 0, "*") + , (9905, 0, "*") + , (9906, 0, " ") + , (9907, 0, "C") + , (9908, 0, "o") + , (9909, 0, "f") + , (9910, 0, "i") + , (9910, 1, "") + , (9909, 1, "") + , (9909, 0, "n") + , (9910, 0, "f") + , (9907, 4, "G") + , (9908, 0, "a") + , (9909, 0, "m") + , (9910, 0, "e") + , (9911, 0, " ") + , (9912, 0, "c") + , (9913, 0, "o") + , (9914, 0, "n") + , (9915, 0, "f") + , (9916, 0, "i") + , (9917, 0, "g") + , (9918, 0, " ") + , (9919, 0, "*") + , (9920, 0, "*") + , (9921, 0, "*") + , (9922, 0, "*") + , (9923, 0, "*") + , (9924, 0, " ") + , (9924, 1, "") + , (9924, 0, "/") + , (9901, 1, "") + , (9899, 26, "") + , (9737, 0, "/***** Game config *****/\n") + , (9925, 31, "") + , (9925, 0, "#config {\n\tmargin-top: 2em;\n}\n\n") + , (9925, 31, "") + , (9763, 0, "#config {\n\tmargin-top: 2em;\n}\n\n") + , (10162, 1, "") + , (10189, 0, "\n") + , (10190, 0, "\n") + , (10191, 0, ".") + , (10191, 1, "") + , (10191, 0, "#") + , (10192, 0, "m") + , (10193, 0, "a") + , (10194, 0, "g") + , (10195, 0, "i") + , (10196, 0, "s") + , (10197, 0, "t") + , (10198, 0, "e") + , (10199, 0, "r") + , (10200, 0, "_") + , (10201, 0, "b") + , (10202, 0, "o") + , (10203, 0, "x") + , (10204, 0, " ") + , (10205, 0, "{") + , (10206, 0, "\n\t") + , (10208, 0, "\n\t") + , (10207, 1, "") + , (10208, 1, "}") + , (10207, 0, "\t") + , (10208, 0, "b") + , (10209, 0, "o") + , (10210, 0, "r") + , (10211, 0, "d") + , (10212, 0, "e") + , (10213, 0, "r") + , (10214, 0, ":") + , (10215, 0, " ") + , (10216, 0, "1") + , (10217, 0, "p") + , (10218, 0, "x") + , (10219, 0, " ") + , (10220, 0, "d") + , (10221, 0, "a") + , (10222, 0, "s") + , (10223, 0, "h") + , (10224, 0, "e") + , (10225, 0, "d") + , (10226, 0, " ") + , (10226, 1, "") + , (10226, 0, " ") + , (10227, 0, "w") + , (10228, 0, "h") + , (10229, 0, "i") + , (10230, 0, "t") + , (10231, 0, "e") + , (10232, 0, ";") + , (10233, 0, "\n\t") + , (10235, 0, "m") + , (10236, 0, "a") + , (10237, 0, "r") + , (10238, 0, "g") + , (10239, 0, "i") + , (10240, 0, "n") + , (10241, 0, ":") + , (10242, 0, " ") + , (10243, 0, "2") + , (10243, 1, "") + , (10243, 0, "1") + , (10244, 0, "e") + , (10245, 0, "m") + , (10246, 0, " ") + , (10247, 0, "0") + , (10248, 0, ";") + , (10249, 0, "\n\t") + , (10251, 0, "p") + , (10252, 0, "w") + , (10253, 0, "d") + , (10254, 0, "i") + , (10254, 1, "") + , (10253, 1, "") + , (10252, 1, "") + , (10252, 0, "a") + , (10253, 0, "d") + , (10254, 0, "d") + , (10255, 0, "i") + , (10256, 0, "n") + , (10257, 0, "g") + , (10258, 0, ":") + , (10259, 0, " ") + , (10260, 0, "2") + , (10261, 0, "e") + , (10262, 0, "m") + , (10263, 0, ";") + , (10260, 1, "") + , (10260, 0, "0") + , (10261, 0, ".") + , (10262, 0, "5") + , (8880, 6, "A") + , (8881, 0, "s") + , (8882, 0, "c") + , (8883, 0, "e") + , (8884, 0, "n") + , (8885, 0, "d") + , (8886, 0, " ") + , (8887, 0, "t") + , (8888, 0, "o") + , (8889, 0, " ") + , (8890, 0, "t") + , (8891, 0, "h") + , (8892, 0, "e") + , (8893, 0, " ") + , (8894, 0, "t") + , (8895, 0, "h") + , (8896, 0, "r") + , (8897, 0, "o") + , (8898, 0, "n") + , (8899, 0, "e") + , (8900, 0, " ") + , (8901, 0, "o") + , (8902, 0, "f") + , (10285, 0, "\n") + , (10286, 0, "\n") + , (10287, 0, "#magister_box") + , (10300, 0, ">") + , (10301, 0, " ") + , (10302, 0, "b") + , (10303, 0, "u") + , (10304, 0, "t") + , (10304, 1, "") + , (10303, 1, "") + , (10302, 1, "") + , (10301, 1, "") + , (10300, 1, "") + , (10300, 0, " ") + , (10301, 0, ">") + , (10302, 0, " ") + , (10303, 0, "b") + , (10304, 0, "u") + , (10305, 0, "t") + , (10306, 0, "t") + , (10307, 0, "o") + , (10308, 0, "n") + , (10309, 0, " ") + , (10310, 0, "{") + , (10311, 0, "\n\t") + , (10313, 0, "\n\t") + , (10312, 1, "") + , (10313, 1, "}") + , (10312, 0, "\t") + , (10313, 0, "d") + , (10314, 0, "i") + , (10315, 0, "s") + , (10316, 0, "p") + , (10317, 0, "l") + , (10318, 0, "a") + , (10319, 0, "y") + , (10320, 0, ":") + , (10321, 0, " ") + , (10322, 0, "b") + , (10323, 0, "l") + , (10324, 0, "o") + , (10325, 0, "c") + , (10326, 0, "k") + , (10327, 0, ";") + , (10328, 0, "\n\t") + , (10329, 1, "") + , (10283, 0, "\n\t") + , (10285, 0, "m") + , (10286, 0, "a") + , (10287, 0, "x") + , (10288, 0, "-") + , (10289, 0, "w") + , (10290, 0, "i") + , (10291, 0, "d") + , (10292, 0, "t") + , (10293, 0, "h") + , (10294, 0, ":") + , (10295, 0, " ") + , (10296, 0, "3") + , (10297, 0, "0") + , (10298, 0, "0") + , (10299, 0, "p") + , (10300, 0, "x") + , (10301, 0, ";") + , (10296, 1, "") + , (10296, 0, "5") + , ( 8926 + , 0 + , "\n\t\t\t\t\tOnce somebody ascends to Magister Ludi status, other players can no longer start or stop the game." + ) + , (8727, 104, "") + , (8776, 23, "A") + , (8777, 0, "s") + , (8778, 0, "s") + , (8779, 0, "u") + , (8780, 0, "m") + , (8781, 0, "e") + , (8782, 0, " ") + , (8783, 0, "t") + , (8784, 0, "h") + , (8785, 0, "e") + , (8786, 0, " ") + , (8787, 0, "m") + , (8788, 0, "a") + , (8789, 0, "n") + , (8790, 0, "t") + , (8791, 0, "l") + , (8792, 0, "e") + , (8793, 0, " ") + , (8794, 0, "o") + , (8795, 0, "f") + , (8830, 8, "a") + , (8831, 0, " ") + , (8832, 0, "p") + , (8833, 0, "l") + , (8834, 0, "a") + , (8835, 0, "y") + , (8836, 0, "e") + , (8837, 0, "r") + , (8900, 23, "c") + , (8901, 0, "o") + , (8902, 0, "n") + , (8903, 0, "t") + , (8904, 0, "r") + , (8905, 0, "o") + , (8906, 0, "l") + , (8907, 0, " ") + , (8908, 0, "t") + , (8909, 0, "h") + , (8910, 0, "e") + , (8825, 86, "I") + , (8826, 0, "F") + , (8827, 0, " ") + , (8828, 0, "a") + , (8829, 0, " ") + , (8829, 1, "") + , (8828, 1, "") + , (8827, 1, "") + , (8826, 1, "") + , (8826, 0, "f") + , (8827, 0, " ") + , (8828, 0, "a") + , (8829, 0, " ") + , (8830, 0, "m") + , (8831, 0, "a") + , (8832, 0, "s") + , (8833, 0, "t") + , (8834, 0, "e") + , (8835, 0, "r") + , (8836, 0, " ") + , (8837, 0, "o") + , (8838, 0, "f") + , (8839, 0, " ") + , (8840, 0, "t") + , (8841, 0, "h") + , (8842, 0, "e") + , (8843, 0, " ") + , (8844, 0, "g") + , (8845, 0, "a") + , (8846, 0, "m") + , (8847, 0, "e") + , (8848, 0, "s") + , (8849, 0, " ") + , (8850, 0, "i") + , (8851, 0, "s") + , (8852, 0, " ") + , (8853, 0, "p") + , (8854, 0, "r") + , (8855, 0, "e") + , (8856, 0, "s") + , (8857, 0, "e") + , (8858, 0, "n") + , (8859, 0, "t") + , (8860, 0, ",") + , (8861, 0, " ") + , (8862, 0, "o") + , (8863, 0, "t") + , (8864, 0, "h") + , (8865, 0, "e") + , (8866, 0, "r") + , (8867, 0, " ") + , (8868, 0, "p") + , (8869, 0, "l") + , (8870, 0, "a") + , (8871, 0, "y") + , (8872, 0, "e") + , (8873, 0, "r") + , (8874, 0, "s") + , (8875, 0, " ") + , (8876, 0, "c") + , (8877, 0, "a") + , (8878, 0, "n") + , (8879, 0, "n") + , (8880, 0, "o") + , (8881, 0, "t") + , (8882, 0, " ") + , (8883, 0, "a") + , (8884, 0, "c") + , (8885, 0, "c") + , (8886, 0, "e") + , (8887, 0, "s") + , (8888, 0, "s") + , (8889, 0, " ") + , (8890, 0, "t") + , (8891, 0, "h") + , (8892, 0, "e") + , (8893, 0, " ") + , (8894, 0, "g") + , (8895, 0, "a") + , (8896, 0, "m") + , (8897, 0, "e") + , (8898, 0, "'") + , (8899, 0, "s") + , (8900, 0, " ") + , (8901, 0, "c") + , (8902, 0, "o") + , (8903, 0, "n") + , (8904, 0, "t") + , (8905, 0, "r") + , (8906, 0, "o") + , (8907, 0, "l") + , (8908, 0, "s") + , (8909, 0, ".") + , (8876, 6, "l") + , (8877, 0, "o") + , (8878, 0, "s") + , (8879, 0, "e") + , (10330, 0, "\t") + , (10331, 0, "f") + , (10332, 0, "o") + , (10333, 0, "n") + , (10334, 0, "t") + , (10335, 0, "-") + , (10336, 0, "x") + , (10336, 1, "") + , (10336, 0, "s") + , (10337, 0, "i") + , (10338, 0, "z") + , (10339, 0, "e") + , (10340, 0, ":") + , (10341, 0, " ") + , (10342, 0, "8") + , (10343, 0, "0") + , (10344, 0, "%") + , (10345, 0, ";") + , (10342, 1, "") + , (10342, 0, "1") + , (10343, 0, "0") + , (10284, 0, "\n\t") + , (10286, 0, "b") + , (10287, 0, "a") + , (10288, 0, "c") + , (10289, 0, "k") + , (10290, 0, "g") + , (10291, 0, "r") + , (10292, 0, "o") + , (10293, 0, "u") + , (10294, 0, "n") + , (10295, 0, "d") + , (10296, 0, "-") + , (10297, 0, "c") + , (10298, 0, "o") + , (10299, 0, "l") + , (10300, 0, "o") + , (10301, 0, "r") + , (10302, 0, ":") + , (10303, 0, " ") + , (10304, 0, "b") + , (10305, 0, "l") + , (10306, 0, "a") + , (10307, 0, "c") + , (10308, 0, "k") + , (10309, 0, ";") + , (10310, 0, "\n\t") + , (10312, 0, "b") + , (10313, 0, "l") + , (10314, 0, "e") + , (10315, 0, "n") + , (10316, 0, "d") + , (10317, 0, "-") + , (10318, 0, "m") + , (10319, 0, "o") + , (10320, 0, "d") + , (10321, 0, "e") + , (10312, 10, "background-blend-mode: ;") + , (10335, 0, "darken") + , (10304, 5, "w") + , (10305, 0, "h") + , (10306, 0, "i") + , (10307, 0, "t") + , (10308, 0, "e") + , (10342, 0, "\n\t") + , (10344, 0, "b") + , (10345, 0, "l") + , (10346, 0, "e") + , (10347, 0, "n") + , (10348, 0, "d") + , (10349, 0, "-") + , (10350, 0, "m") + , (10351, 0, "o") + , (10344, 8, "mix-blend-mode: ;") + , (10360, 0, "d") + , (10361, 0, "a") + , (10362, 0, "r") + , (10363, 0, "k") + , (10364, 0, "e") + , (10365, 0, "n") + , (10343, 24, "") + , (10342, 1, "") + , (10312, 30, "") + , (10311, 1, "") + , (10310, 1, "") + , (10309, 1, "") + , (10309, 0, ";") + , (10310, 0, " */") + , (10286, 0, "/* ") + , (10313, 3, "") + , (10286, 3, "") + , (10304, 5, "#1c0303") + , (10375, 0, "\n\t") + , (10377, 0, "w") + , (10378, 0, "i") + , (10379, 0, "d") + , (10380, 0, "t") + , (10381, 0, "h") + , (10382, 0, ":") + , (10383, 0, " ") + , (10384, 0, "1") + , (10385, 0, "0") + , (10386, 0, "0") + , (10387, 0, "%") + , (10388, 0, ";") + , (10389, 0, "\n\t") + , (10391, 0, "m") + , (10392, 0, "a") + , (10393, 0, "r") + , (10394, 0, "g") + , (10395, 0, "i") + , (10396, 0, "n") + , (10397, 0, ":") + , (10398, 0, " ") + , (10399, 0, "0") + , (10400, 0, " ") + , (10401, 0, "2") + , (10402, 0, "e") + , (10403, 0, "m") + , (10404, 0, ";") + , (10390, 15, "") + , (10389, 1, "") + , (8825, 4, "W") + , (8826, 0, "h") + , (8827, 0, "e") + , (8828, 0, "n") + , (8829, 0, " ") + , (8830, 0, "t") + , (8831, 0, "h") + , (8832, 0, "e") + , (8879, 24, " ") + , (8880, 0, "c") + , (8881, 0, "a") + , (8882, 0, "n") + , (8883, 0, "n") + , (8884, 0, "o") + , (8885, 0, "t") + , (8886, 0, " ") + , (8894, 1, "") + , (8894, 0, " ") + , (8895, 0, "t") + , (8896, 0, "h") + , (8897, 0, "e") + , (8898, 0, " ") + , (8899, 0, "g") + , (8900, 0, "a") + , (8901, 0, "m") + , (8902, 0, "e") + , (8904, 0, " -->") + , (8825, 0, "") + , (9231, 0, "") + , (9231, 0, "") + , (7164, 0, "") + , (7164, 0, "") + , (5647, 0, "") + , (6627, 0, "\n
\n\t\n\t\n\n\t{#if internal_state === 'loading'}\n\t\t

Loading game state

\n\t{:else}\n\t\t\n\t\t\n\t\t

Topic: {topic}

\n\t\t\n\t\t

Room: {room} (leave)

\n\n\t\t{#if !audio_works}\n\t\t
\n\t\t\tAudio does not work\n\t\t\t\n\t\t
\n\t\t{/if}\n" + ) + , (746, 3, "") + , (740, 3, "") + , (733, 3, "") + , (692, 3, "") + , (666, 3, "") + , (653, 3, "") + , (645, 3, "") + , (612, 3, "") + , (587, 3, "") + , (574, 3, "") + , (555, 3, "") + , (522, 3, "") + , (503, 3, "") + , (479, 3, "") + , (452, 3, "") + , (771, 3, "") + , (729, 0, "\n\t") + , (754, 3, "") + , (730, 1, "") + , (514, 0, "// ") + , (513, 0, "\t// a.src = '/lo-metal-tone.mp3'\n") + , (547, 3, "") + , (556, 18, "") + , (556, 0, "/") + , (557, 0, "s") + , (558, 0, "i") + , (559, 0, "l") + , (560, 0, "e") + , (561, 0, "n") + , (562, 0, "c") + , (563, 0, "e") + , (564, 0, ".") + , (565, 0, "m") + , (566, 0, "l") + , (566, 1, "") + , (566, 0, "p") + , (567, 0, "3") + , (513, 33, "") + , ( 428 + , 6245 + , "\t// export let state\n\nconst ARCHETOPICS = [\n 'Truth', 'Human', 'Energy', 'Beauty', 'Beginning', 'End', 'Birth', 'Death',\n 'Ego', 'Attention', 'Art', 'Empathy', 'Eutopia', 'Future', 'Game', 'Gift',\n 'History', 'Cosmos', 'Time', 'Life', 'Addiction', 'Paradox', 'Shadow', 'Society'\n]\n\n// Could make configurable. Eh.\nconst MEDITATION_SECONDS = 60\n\nlet game_stages = []\n$: {\n\tgame_stages = [{\n\t\tlabel: `${meditate ? 'Meditation' : 'Game'} is about to start`,\n\t\tduration: 3,\n\t\tno_sound: true\n\t}]\n\tif (meditate) game_stages.push({\n\t\tlabel: 'Meditate',\n\t\ttype: 'meditate',\n\t\tduration: MEDITATION_SECONDS,\n\t})\n\tfor (let r = 0; r < rounds; r++) {\n\t\tfor (let p = 0; p < players; p++) {\n\t\t\tgame_stages.push({\n\t\t\t\tlabel: `Round ${r+1} player ${p+1}`,\n\t\t\t\tduration: seconds_per_bead,\n\t\t\t\ttype: 'bead', r, p\n\t\t\t})\n\t\t}\n\t}\n}\n\n\nconst update_state = async patch => {\n\tawait fetch(`${room}/configure`, {\n\t\tmethod: 'POST',\n\t\tmode: 'same-origin',\n\t\theaders: {\n\t\t\t'content-type': 'application/json',\n\t\t},\n\t\tbody: JSON.stringify(patch)\n\t})\n}\n\nconst upd = (k, v) => () => update_state({[k]: v})\n\nconst config = k => e => {\n\t// console.log('k', k, e.data, e.value, e.target.value, e.target.type)\n\tconst raw_value = e.target.value\n\tconst value = e.target.type === 'number' ? raw_value|0\n\t\t: e.target.type === 'checkbox' ? e.target.checked\n\t\t: raw_value\n\tupdate_state({[k]: value})\n}\n\nconst roundish = x => Math.round(x * 10) / 10\n\n\nconst waiting_stage = { label: 'Waiting for game to start', duration: Infinity }\nconst complete_stage = { label: 'Game complete', type: 'complete' }\nconst get_current_stage = (offset_ms) => {\n\tif (state === 'waiting') return {stage: waiting_stage, offset_ms: 0}\n\n\tlet offset_sec = Math.round(offset_ms / 1000)\n\tfor (let s = 0; s < game_stages.length; s++) {\n\t\tlet stage = game_stages[s]\n\t\tif (stage.duration > offset_sec) {\n\t\t\treturn {stage, offset_sec}\n\t\t}\n\t\toffset_sec -= stage.duration\n\t}\n\treturn {\n\t\tstage: complete_stage, offset_sec\n\t}\n}\n\nlet current_stage = null, offset_sec\n$: console.log('current stage', current_stage)\n\n\nconst tick = (play_audio) => {\n\tconsole.log('tick')\n\t// console.log('state', state, 'completed', state && state.complete)\n\n\tconst time = state === 'playing' ? Date.now() + _clock_offset - start_time\n\t\t: state === 'paused' ? paused_progress\n\t\t: 0\n\tconst {stage: new_stage, offset_sec: new_offs} = get_current_stage(time)\n\t// state_label = state.label\n\t\n\toffset_sec = new_offs\n\tif (new_stage !== current_stage) {\n\t\tconsole.log('state changed', new_stage.label, new_stage.type === 'complete')\n\t\tcurrent_stage = new_stage\n\t\t// completed = new_game_state.complete\n\t\t// if (!state.complete) round_audio.play()\n\n\t\tif (play_audio && !new_stage.no_sound) {\n\t\t\tif (current_stage.type === 'complete') complete_audio.play()\n\t\t\telse round_audio.play()\n\t\t}\n\t}\n}\n\nlet timer\n$: {\n\t// Sadly we can't use internal_state here because it generates a cyclic dependancy.\n\tlet completed = current_stage ? current_stage.type === 'complete' : false\n\t// console.log('xx', state, timer, completed, current_stage)\n\n\t// if (state !== 'loading') tick(false)\n\n\tif (state === 'playing' && timer == null && !completed) {\n\t\t// setTimeout needed to get around some weird race condition.\n\t\t// There's probably better ways to structure this :/\n\t\tsetTimeout(() => tick(false))\n\t\ttimer = setInterval(() => {\n\t\t\ttick(true)\n\t\t}, 1000)\n\t} else if ((completed || state !== 'playing') && timer != null) {\n\t\tconsole.log('cancelled interval timer')\n\t\tclearInterval(timer)\n\t\ttimer = null\n\t} else if (state === 'waiting' || state === 'paused') {\n\t\tsetTimeout(() => tick(false))\n\t}\n}\n\nlet game_completed\n$: {\n\t// console.log('updating game_completed', current_stage)\n\tgame_completed = (state !== 'playing' || current_stage == null) ? false\n\t: (current_stage.type === 'complete')\n}\n\nlet internal_state\n$: internal_state = game_completed ? 'completed' : state\n\nlet bar_width = 0\n$: bar_width = current_stage == null ? 0\n\t: state === 'waiting' ? 0\n\t: current_stage.type === 'complete' ? 100\n\t: 100 * offset_sec / current_stage.duration\n\nlet stage_label\n$: stage_label = internal_state === 'waiting' ? 'Waiting for game to start'\n\t: current_stage == null ? 'unknown' : current_stage.label\n\nconst order = ['meditate', 'bead', 'complete']\nconst class_for = x => x < 0 ? 'done'\n\t: x > 0 ? 'waiting'\n\t: 'active'\n\nconst progress_class = (stage, type, r, p) => {\n\tif (stage == null) return ''\n\n\tconst current_o = order.indexOf(stage.type)\n\tconst element_o = order.indexOf(type)\n\n\t// const o_diff = element_o - current_o\n\treturn type === 'bead' && stage.type === 'bead'\n\t\t? (r === stage.r ? class_for(p - stage.p) : class_for(r - stage.r))\n\t\t: class_for(element_o - current_o)\n}\n\n// This will get more complex in time. For now, pause the game to fiddle.\n$: settings_disabled = state === 'playing'\n\nlet config_open = false\n\n$: if (_magister === true) config_open = true\n\n// The first user has the config open by default.\n$: if (_active_sessions === 1) config_open = true\n\n// The magister box is fully visible once there's a critical mass of players in the room\n$: magister_opaque = _magister === true || _active_sessions >= 6\n\n\n\n\n\n\t{#if _magister}\n\t\t\n\t{/if}\n\t\n\n\n
\n\t\n\t\n\n\t{#if internal_state === 'loading'}\n\t\t

Loading game state

\n\t{:else}\n\t\t\n\t\t\n\t\t

Topic: {topic}

\n\t\t\n\t\t

Room: {room} (leave)

\n" + ) + , (8, 0, "\n\t") + , (10, 0, "i") + , (11, 0, "m") + , (12, 0, "p") + , (13, 0, "o") + , (14, 0, "r") + , (15, 0, "t") + , (16, 0, " ") + , (17, 0, "*") + , (18, 0, " ") + , (19, 0, "a") + , (20, 0, "s") + , (21, 0, " ") + , (22, 0, "t") + , (23, 0, "o") + , (24, 0, "p") + , (25, 0, "i") + , (26, 0, "c") + , (27, 0, "s") + , (28, 0, " ") + , (29, 0, "f") + , (30, 0, "r") + , (31, 0, "o") + , (32, 0, "m") + , (33, 0, " ") + , (34, 0, "'") + , (35, 0, ".") + , (36, 0, "/") + , (37, 0, "t") + , (38, 0, "o") + , (39, 0, "p") + , (40, 0, "i") + , (41, 0, "c") + , (42, 0, "s") + , (43, 0, ".") + , (44, 0, "j") + , (45, 0, "s") + , (46, 0, "o") + , (47, 0, "n") + , (48, 0, "'") + , (9, 1, "") + , (431, 0, "\n") + , (432, 0, "c") + , (433, 0, "o") + , (434, 0, "n") + , (435, 0, "s") + , (436, 0, "o") + , (437, 0, "l") + , (438, 0, "e") + , (439, 0, ".") + , (440, 0, "l") + , (441, 0, "o") + , (442, 0, "g") + , (440, 3, "log") + , (443, 0, "(") + , (444, 0, "t") + , (445, 0, "o") + , (446, 0, "p") + , (447, 0, "i") + , (448, 0, "c") + , (449, 0, "s") + , (450, 0, ")") + , (6171, 0, "\n\t\t") + , (6174, 0, "\n\t\t") + , (6172, 2, "") + , (6175, 0, "<") + , (6176, 0, "i") + , (6177, 0, "m") + , (6178, 0, "g") + , (6179, 0, ">") + , (6180, 0, "<") + , (6181, 0, "/") + , (6182, 0, "i") + , (6183, 0, "m") + , (6184, 0, "g") + , (6185, 0, ">") + , (6180, 6, "") + , (6179, 0, " ") + , (6180, 0, "i") + , (6181, 0, "d") + , (6182, 0, "=") + , (6183, 0, " ") + , (6184, 0, "/") + , (6183, 0, "'") + , (6184, 0, "a") + , (6185, 0, "s") + , (6186, 0, "d") + , (6187, 0, "f") + , (6184, 4, "t") + , (6185, 0, "o") + , (6186, 0, "p") + , (6187, 0, "i") + , (6188, 0, "c") + , (6189, 0, "'") + , (6193, 0, "\n\t\t") + , (6194, 2, "") + , (6191, 1, "") + , (6190, 1, "") + , (772, 0, "\n") + , (772, 0, "\n") + , (773, 0, "$") + , (774, 0, ":") + , (775, 0, " ") + , (776, 0, "{") + , (777, 0, "\n\t") + , (779, 0, "\n\t") + , (778, 1, "") + , (779, 1, "}") + , (778, 0, "\t") + , (6190, 10, "bind:this={round_audio}") + , (778, 1, "") + , (6200, 11, "t") + , (6201, 0, "o") + , (6202, 0, "p") + , (6203, 0, "i") + , (6204, 0, "c") + , (6205, 0, "_") + , (6206, 0, "i") + , (6207, 0, "m") + , (6208, 0, "g") + , (486, 0, "\n") + , (487, 0, "l") + , (488, 0, "e") + , (489, 0, "t") + , (490, 0, " ") + , (491, 0, "t") + , (492, 0, "o") + , (493, 0, "p") + , (494, 0, "i") + , (495, 0, "c") + , (496, 0, "_") + , (497, 0, "i") + , (498, 0, "m") + , (499, 0, "g") + , (792, 0, "\t") + , (793, 0, "t") + , (794, 0, "o") + , (795, 0, "p") + , (796, 0, "i") + , (797, 0, "c") + , (798, 0, "_") + , (799, 0, "i") + , (800, 0, "m") + , (801, 0, "g") + , (6209, 3, "d") + , (6210, 0, "i") + , (6211, 0, "v") + , (6235, 0, "<") + , (6236, 0, "/") + , (6237, 0, "d") + , (6238, 0, "i") + , (6239, 0, "v") + , (6240, 0, ">") + , (802, 0, "/") + , (802, 1, "") + , (802, 0, ".") + , (803, 0, "i") + , (804, 0, "n") + , (805, 0, "n") + , (806, 0, "e") + , (807, 0, "r") + , (808, 0, "H") + , (809, 0, "T") + , (810, 0, "M") + , (811, 0, "L") + , (812, 0, " ") + , (813, 0, "=") + , (814, 0, " ") + , (815, 0, "t") + , (816, 0, "o") + , (817, 0, "p") + , (818, 0, "i") + , (819, 0, "c") + , (820, 0, "s") + , (821, 0, "[") + , (822, 0, "t") + , (823, 0, "o") + , (824, 0, "p") + , (825, 0, "i") + , (826, 0, "c") + , (822, 5, "topic") + , (827, 0, ".") + , (828, 0, "t") + , (829, 0, "o") + , (830, 0, "L") + , (831, 0, "o") + , (831, 1, "") + , (830, 1, "") + , (828, 2, "s.toLocaleLowerCase") + , (829, 1, "") + , (828, 1, "") + , (845, 0, "(") + , (846, 0, ")") + , (847, 0, ")") + , (847, 1, "") + , (847, 0, "]") + , (26, 1, "") + , (26, 0, "S") + , (27, 0, "V") + , (28, 0, "G") + , (29, 0, "s") + , (29, 1, "") + , (28, 1, "") + , (27, 1, "") + , (26, 1, "") + , (26, 0, "I") + , (27, 0, "c") + , (28, 0, "o") + , (29, 0, "n") + , (30, 0, "s") + , (819, 6, "topicIcons") + , (436, 19, "") + , (435, 1, "") + , (777, 0, "i") + , (778, 0, "f") + , (779, 0, " ") + , (780, 0, "(") + , (781, 0, "t") + , (782, 0, "o") + , (783, 0, "p") + , (784, 0, "i") + , (785, 0, "c") + , (786, 0, "_") + , (787, 0, "i") + , (788, 0, "m") + , (789, 0, "g") + , (790, 0, ")") + , (791, 0, " ") + , (6261, 0, " ") + , (6262, 0, "i") + , (6263, 0, "d") + , (6264, 0, "=") + , (6265, 0, "t") + , (6266, 0, "i") + , (6267, 0, "p") + , (6267, 1, "") + , (6266, 1, "") + , (6266, 0, "o") + , (6267, 0, "p") + , (6268, 0, "i") + , (6269, 0, "c") + , (6270, 0, "i") + , (6271, 0, "m") + , (6272, 0, "g") + , (6273, 0, "'") + , (6265, 0, "'") + , (10504, 0, "\n") + , (10505, 0, "\n") + , (10506, 0, "#") + , (10507, 0, "t") + , (10508, 0, "o") + , (10509, 0, "p") + , (10510, 0, "i") + , (10511, 0, "c") + , (10512, 0, "i") + , (10513, 0, "m") + , (10514, 0, "g") + , (10515, 0, " ") + , (10516, 0, "{") + , (10517, 0, "\n\t") + , (10518, 1, "}") + , (10517, 0, "\n\t") + , (10519, 0, "w") + , (10520, 0, "i") + , (10521, 0, "d") + , (10522, 0, "t") + , (10523, 0, "h") + , (10519, 5, "m") + , (10520, 0, "a") + , (10521, 0, "x") + , (10522, 0, "-") + , (10523, 0, "w") + , (10524, 0, "i") + , (10525, 0, "d") + , (10526, 0, "t") + , (10527, 0, "h") + , (10528, 0, ":") + , (10529, 0, " ") + , (10530, 0, "2") + , (10531, 0, "0") + , (10532, 0, "0") + , (10533, 0, "p") + , (10534, 0, "x") + , (10535, 0, ";") + , (7658, 0, "\n\t\t") + , (7659, 2, "") + , (7658, 0, "\n\t\t") + , (7661, 0, "<") + , (7662, 0, "d") + , (7663, 0, "e") + , (7664, 0, "t") + , (7665, 0, "a") + , (7666, 0, "i") + , (7667, 0, "l") + , (7668, 0, "s") + , (7662, 7, "details") + , (7669, 0, ">") + , (7670, 0, "") + , (7670, 0, "\n\t\t\t\n\t\t") + , (7674, 0, "<") + , (7675, 0, "s") + , (7676, 0, "u") + , (7677, 0, "m") + , (7678, 0, "m") + , (7679, 0, "a") + , (7680, 0, "r") + , (7681, 0, "y") + , (7682, 0, ">") + , (7683, 0, "U") + , (7684, 0, "I") + , (7684, 1, "") + , (7683, 1, "") + , (7683, 0, "O") + , (7684, 0, "t") + , (7685, 0, "h") + , (7686, 0, "e") + , (7687, 0, "r") + , (7688, 0, " ") + , (7689, 0, "s") + , (7690, 0, "t") + , (7691, 0, "u") + , (7692, 0, "f") + , (7693, 0, "f") + , (7694, 0, "<") + , (7695, 0, "/") + , (7696, 0, "s") + , (7697, 0, "u") + , (7695, 3, "/summary>") + , (7704, 0, ">") + , (7704, 1, "") + , (7704, 0, "\n\t\t\t") + , (7705, 3, "") + , (7159, 422, "") + , ( 7283 + , 0 + , "\n\t\t
\n\t\t\t

Game

\n\t\t\t{#if meditate}\n\t\t\t\t
\n\t\t\t\t\tMeditation (1 min)\n\t\t\t\t
\n\t\t\t{/if}\n\t\t\t{#each Array(Math.max(rounds, 0)) as _, r}\n\t\t\t\t
Round {r+1}:\n\t\t\t\t\t{#each Array(Math.max(players, 0)) as _, p}\n\t\t\t\t\t\t{p+1} \n\t\t\t\t\t{/each}\n\t\t\t\t
\n\t\t\t{/each}\n\t\t
\n" + ) + , (7705, 0, "\t") + , (7696, 2, "\t\t\t") + , (7685, 3, "\t\t\t\t") + , (7674, 4, "\t\t\t\t\t") + , (7661, 5, "\t\t\t\t\t\t") + , (7573, 6, "\t\t\t\t\t\t\t") + , (7524, 5, "\t\t\t\t\t\t") + , (7502, 4, "\t\t\t\t\t") + , (7456, 3, "\t\t\t\t") + , (7447, 3, "\t\t\t\t") + , (7436, 4, "\t\t\t\t\t") + , (7349, 5, "\t\t\t\t\t\t") + , (7339, 4, "\t\t\t\t\t") + , (7321, 3, "\t\t\t\t") + , (7304, 3, "\t\t\t\t") + , (7284, 2, "\t\t\t") + , (6459, 418, "") + , ( 6865 + , 0 + , "\t\t
\n\t\t\t{state === 'waiting' ? 'Waiting for the game to start'\n\t\t\t: state === 'paused' ? 'GAME PAUSED'\n\t\t\t: state === 'playing' ? 'Game in progress'\n\t\t\t: ''}\n\t\t
\n\t\t{#if connection !== 'connected'}\n\t\t\t
DISCONNECTED FROM GAME SERVER
\n\t\t{:else}\n\t\t\t{#if _active_sessions == 1}\n\t\t\t\t
You are alone in the room
\n\t\t\t{:else}\n\t\t\t\t
{_active_sessions} players are in this room
\n\t\t\t{/if}\n\t\t{/if}\n" + ) + , (7283, 0, "\t") + , (7275, 2, "\t\t\t") + , (7266, 3, "\t\t\t\t") + , (7207, 4, "\t\t\t\t\t") + , (7196, 3, "\t\t\t\t") + , (7155, 4, "\t\t\t\t\t") + , (7124, 3, "\t\t\t\t") + , (7114, 2, "\t\t\t") + , (7070, 3, "\t\t\t\t") + , (7035, 2, "\t\t\t") + , (7026, 2, "\t\t\t") + , (7017, 3, "\t\t\t\t") + , (6971, 3, "\t\t\t\t") + , (6931, 3, "\t\t\t\t") + , (6873, 3, "\t\t\t\t") + , (6865, 2, "\t\t\t") + , (6864, 0, "\n\t\t\t") + , (6865, 3, "") + , (6830, 0, "\n\t\t\t") + , (6834, 0, "<") + , (6835, 0, "!") + , (6836, 0, "-") + , (6837, 0, "-") + , (6838, 0, " ") + , (6839, 0, "I") + , (6840, 0, "'") + , (6841, 0, "m") + , (6842, 0, " ") + , (6843, 0, "n") + , (6844, 0, "o") + , (6845, 0, "t") + , (6846, 0, " ") + , (6847, 0, "r") + , (6848, 0, "e") + , (6849, 0, "a") + , (6850, 0, "d") + , (6851, 0, "y") + , (6852, 0, " ") + , (6853, 0, "t") + , (6854, 0, "o") + , (6855, 0, " ") + , (6856, 0, "d") + , (6857, 0, "e") + , (6858, 0, "l") + , (6859, 0, "e") + , (6860, 0, "t") + , (6861, 0, "e") + , (6862, 0, " ") + , (6863, 0, "t") + , (6864, 0, "h") + , (6865, 0, "e") + , (6866, 0, "s") + , (6867, 0, "e") + , (6868, 0, " ") + , (6869, 0, "U") + , (6870, 0, "I") + , (6871, 0, " ") + , (6872, 0, "e") + , (6873, 0, "l") + , (6874, 0, "e") + , (6875, 0, "m") + , (6876, 0, "e") + , (6877, 0, "n") + , (6878, 0, "t") + , (6879, 0, "s") + , (6880, 0, " ") + , (6881, 0, "b") + , (6882, 0, "u") + , (6883, 0, "t") + , (6884, 0, " ") + , (6885, 0, "w") + , (6886, 0, "e") + , (6887, 0, " ") + , (6888, 0, "m") + , (6889, 0, "i") + , (6890, 0, "g") + , (6891, 0, "h") + , (6892, 0, "t") + , (6893, 0, " ") + , (6894, 0, "n") + , (6895, 0, "o") + , (6896, 0, "t") + , (6897, 0, " ") + , (6898, 0, "u") + , (6899, 0, "s") + , (6900, 0, "e") + , (6901, 0, " ") + , (6902, 0, "t") + , (6903, 0, "h") + , (6904, 0, "e") + , (6905, 0, "m") + , (6906, 0, " ") + , (6907, 0, "-") + , (6908, 0, "-") + , (6909, 0, ">") + , (6350, 61, "") + , ( 6884 + , 0 + , "\t\t

Room: {room} (leave)

\n" + ) + , (6884, 2, "\t\t\t") + , (6306, 92, "") + , (6305, 1, "") + , (6588, 76, "") + , (6587, 0, "\n\t\t") + , ( 6590 + , 0 + , "\t\t\t\t{#if internal_state == 'waiting'}\n\t\t\t\t\t\n" + ) + , (6628, 5, "\t\t") + , (6588, 6, "\t\t") + , (6595, 0, "_magister == null || _magister == true") + , (6633, 0, " ") + , (6634, 0, "&") + , (6635, 0, "&") + , (6636, 0, " ") + , (6633, 0, ")") + , (6595, 0, "(") + , (6670, 0, "\t") + , (6728, 0, "\n\t\t\t") + , (6732, 0, "<") + , (6732, 1, "") + , (6732, 0, "{") + , (6733, 0, "/") + , (6734, 0, "i") + , (6735, 0, "f") + , (6736, 0, "}") + , (6729, 3, "\t\t") + , (6225, 11, "") + , (6232, 5, "") + , (7911, 4, "A") + , (7912, 0, "d") + , (7913, 0, "v") + , (7914, 0, "a") + , (7915, 0, "n") + , (7916, 0, "c") + , (7917, 0, "e") + , (7918, 0, "d") + , (5372, 0, "// ") + , (5472, 0, "// ") + , (5372, 3, "") + , (10649, 0, "\n\t") + , (10651, 0, "t") + , (10652, 0, "e") + , (10653, 0, "x") + , (10654, 0, "t") + , (10655, 0, "-") + , (10656, 0, "a") + , (10657, 0, "l") + , (10658, 0, "i") + , (10659, 0, "g") + , (10660, 0, "n") + , (10661, 0, ":") + , (10662, 0, " ") + , (10663, 0, "c") + , (10664, 0, "e") + , (10665, 0, "n") + , (10663, 3, "center") + , (10669, 0, ";") + , (6724, 0, "\n\t\t") + , (6727, 0, "<") + , (6728, 0, "v") + , (6729, 0, "s") + , (6730, 0, "p") + , (6730, 1, "") + , (6729, 1, "") + , (6728, 1, "") + , (6728, 0, "d") + , (6729, 0, "i") + , (6730, 0, "v") + , (6731, 0, " ") + , (6732, 0, "c") + , (6733, 0, "l") + , (6734, 0, "a") + , (6735, 0, "s") + , (6736, 0, "s") + , (6732, 5, "s") + , (6733, 0, "t") + , (6734, 0, "y") + , (6735, 0, "l") + , (6736, 0, "e") + , (6737, 0, "=") + , (6738, 0, "'") + , (6739, 0, "'") + , (6740, 0, ">") + , (6741, 0, "<") + , (6742, 0, "/") + , (6743, 0, "d") + , (6744, 0, "i") + , (6745, 0, "v") + , (6746, 0, ">") + , (6739, 0, "h") + , (6740, 0, "e") + , (6741, 0, "o") + , (6742, 0, "g") + , (6743, 0, "h") + , (6743, 1, "") + , (6742, 1, "") + , (6741, 1, "") + , (6741, 0, "i") + , (6742, 0, "g") + , (6743, 0, "h") + , (6744, 0, "t") + , (6745, 0, ":") + , (6746, 0, " ") + , (6747, 0, "4") + , (6748, 0, "0") + , (6749, 0, "0") + , (6750, 0, "p") + , (6751, 0, "x") + , (6752, 0, ";") + , (10741, 0, "\n\t") + , (10743, 0, "d") + , (10744, 0, "i") + , (10745, 0, "s") + , (10746, 0, "p") + , (10747, 0, "l") + , (10748, 0, "a") + , (10749, 0, "y") + , (10750, 0, ":") + , (10751, 0, " ") + , (10752, 0, "i") + , (10753, 0, "n") + , (10754, 0, "l") + , (10755, 0, "i") + , (10756, 0, "n") + , (10757, 0, "e") + , (10758, 0, "-") + , (10759, 0, "b") + , (10760, 0, "l") + , (10761, 0, "o") + , (10752, 10, "inline-block") + , (10764, 0, ";") + , (10735, 1, "") + , (10735, 0, "3") + , (6222, 18, "") + , (6221, 1, "") + , (6869, 0, "\n\t\t\t") + , (6873, 0, "\n\t\t\t") + , (6870, 3, "") + , (6874, 0, "\t\t

{topic}

") + , (6871, 5, "\t\t\t") + , ( 0 + , 12187 + , "\n\n\n\t{#if _magister}\n\t\t\n\t{/if}\n\n\n\n
\n\t\n\t\n\n\t{#if internal_state === 'loading'}\n\t\t

Loading game state

\n\t{:else}\n\t\t\n\t\t\n\n\t\t
{game_config.topic}
\n\n\t\t

{stage_label}

\n\t\t
\n\t\t\t
{((internal_state === 'playing' || internal_state === 'paused') && current_stage) ? current_stage.duration - offset_sec : ''}
\n\t\t\t
\n\t\t
\n\n\t\t{#if (_magister == null || _magister == true)}\n\t\t\t{#if internal_state == 'waiting'}\n\t\t\t\t\n\t\t\t{:else if internal_state == 'playing'}\n\t\t\t\t\n\t\t\t{:else if internal_state == 'paused'}\n\t\t\t\t\n\t\t\t{/if}\n\t\t{/if}\n\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\tInfo\n\n\t\t\t

{game_config.topic}

\n\t\t\t

Room: {room} (leave)

\n\n\t\t\t
\n\t\t\t\t{state === 'waiting' ? 'Waiting for the game to start'\n\t\t\t\t: state === 'paused' ? 'GAME PAUSED'\n\t\t\t\t: state === 'playing' ? 'Game in progress'\n\t\t\t\t: ''}\n\t\t\t
\n\t\t\t{#if connection !== 'connected'}\n\t\t\t\t
DISCONNECTED FROM GAME SERVER
\n\t\t\t{:else}\n\t\t\t\t{#if _active_sessions == 1}\n\t\t\t\t\t
You are alone in the room
\n\t\t\t\t{:else}\n\t\t\t\t\t
{_active_sessions} players are in this room
\n\t\t\t\t{/if}\n\t\t\t{/if}\n\t\n\t\t\t
\n\t\t\t\t

Game

\n\t\t\t\t{#if game_config.meditate}\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\tMeditation (1 min)\n\t\t\t\t\t
\n\t\t\t\t{/if}\n\t\t\t\t{#each Array(Math.max(game_config.rounds, 0)) as _, r}\n\t\t\t\t\t
Round {r+1}:\n\t\t\t\t\t\t{#each Array(Math.max(game_config.players, 0)) as _, p}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{p+1} \n\t\t\t\t\t\t{/each}\n\t\t\t\t\t
\n\t\t\t\t{/each}\n\t\t\t
\n\t\n\t\t
\n\n\t\t{#if _magister == null || _magister == true}\n\t\t\t
\n\t\t\t\tGame controls\n\n\t\t\t\t

\n\t\t\t\t\t{#if _magister == null}\n\t\t\t\t\t\tThis will effect all players. Will you borrow power? Will you steal it?\n\t\t\t\t\t{:else}\n\t\t\t\t\t\tYou are master of the games. These controls are yours alone.\n\t\t\t\t\t{/if}\n\t\t\t\t

\n\n\t\t\t\t{#if internal_state == 'waiting'}\n\t\t\t\t\t\n\t\t\t\t{:else if internal_state == 'playing'}\n\t\t\t\t\t\n\t\t\t\t{:else if internal_state == 'paused'}\n\t\t\t\t\t\n\t\t\t\t{/if}\n\n\t\t\t\t{#if internal_state == 'paused' || internal_state == 'completed' }\n\t\t\t\t\t\n\t\t\t\t{/if}\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t(Total game length: {roundish(\n\t\t\t\t\t\tgame_stages.reduce((x, s) => x + s.duration, 0) / 60\n\t\t\t\t\t)} minutes)\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{#if _magister == null}\n\t\t\t\t\t\t\n\t\t\t\t\t\t

Advanced - for large games

\n\t\t\t\t\t\t

When present, the Magister Ludi (master of the games) has exclusive control of the game.

\n\t\t\t\t\t{:else if _magister == true}\n\t\t\t\t\t\t\n\t\t\t\t\t\t

You are the master of the games. You have exclusive control over playing, pausing and configuring this game.

\n\t\t\t\t\t\t

Do not close this browser window or you will be dethroned.

\n\t\t\t\t\t{/if}\n\t\t\t\t
\n\t\t\t
\n\t\t{:else}\n\t\t\t

Magister Ludi is managing this game.

\n\t\t{/if}\n\t{/if}\n
\n\n\n\t{/if}\n\n\n\n
\n\t\n\t\n\n\t{#if internal_state === 'loading'}\n\t\t

Loading game state

\n\t{:else}\n\t\t\n\t\t\n\n\t\t
{game_config.topic}
\n\n\t\t

{stage_label}

\n\t\t
\n\t\t\t
{((internal_state === 'playing' || internal_state === 'paused') && current_stage) ? current_stage.duration - offset_sec : ''}
\n\t\t\t
\n\t\t
\n\n\t\t
\n\t\t\t{#each game_stages as s, i}\n\t\t\t\t{#if s.type === 'bead' || s.type === 'breath'}\n\t\t\t\t\t\n\t\t\t\t{/if}\n\t\t\t{/each}\n\t\t
\n\n\t\t{#if (_magister == null || _magister == true)}\n\t\t\t{#if internal_state == 'waiting'}\n\t\t\t\t\n\t\t\t{:else if internal_state == 'playing'}\n\t\t\t\t\n\t\t\t{:else if internal_state == 'paused'}\n\t\t\t\t\n\t\t\t{/if}\n\t\t{/if}\n\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t\tInfo\n\n\t\t\t

{game_config.topic}

\n\t\t\t

Room: {room} (leave)

\n\n\t\t\t
\n\t\t\t\t{state === 'waiting' ? 'Waiting for the game to start'\n\t\t\t\t: state === 'paused' ? 'GAME PAUSED'\n\t\t\t\t: state === 'playing' ? 'Game in progress'\n\t\t\t\t: ''}\n\t\t\t
\n\t\t\t{#if connection !== 'connected'}\n\t\t\t\t
DISCONNECTED FROM GAME SERVER
\n\t\t\t{:else}\n\t\t\t\t{#if _active_sessions == 1}\n\t\t\t\t\t
You are alone in the room
\n\t\t\t\t{:else}\n\t\t\t\t\t
{_active_sessions} players are in this room
\n\t\t\t\t{/if}\n\t\t\t{/if}\n\n\t\t\t
\n\t\t\t\t

Game

\n\t\t\t\t{#if game_config.meditate}\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\tMeditation (1 min)\n\t\t\t\t\t
\n\t\t\t\t{/if}\n\t\t\t\t{#each Array(Math.max(game_config.rounds, 0)) as _, r}\n\t\t\t\t\t
Round {r+1}:\n\t\t\t\t\t\t{#each Array(Math.max(game_config.players, 0)) as _, p}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{p+1} \n\t\t\t\t\t\t{/each}\n\t\t\t\t\t
\n\t\t\t\t{/each}\n\t\t\t
\n\n\t\t
\n\n\t\t{#if _magister == null || _magister == true}\n\t\t\t
\n\t\t\t\tGame controls\n\n\t\t\t\t

\n\t\t\t\t\t{#if _magister == null}\n\t\t\t\t\t\tThis will effect all players. Will you borrow power? Will you steal it?\n\t\t\t\t\t{:else}\n\t\t\t\t\t\tYou are master of the games. These controls are yours alone.\n\t\t\t\t\t{/if}\n\t\t\t\t

\n\n\t\t\t\t{#if internal_state == 'waiting'}\n\t\t\t\t\t\n\t\t\t\t{:else if internal_state == 'playing'}\n\t\t\t\t\t\n\t\t\t\t{:else if internal_state == 'paused'}\n\t\t\t\t\t\n\t\t\t\t{/if}\n\n\t\t\t\t{#if internal_state == 'paused' || internal_state == 'completed' }\n\t\t\t\t\t\n\t\t\t\t{/if}\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t(Total game length: {roundish(\n\t\t\t\t\t\tgame_stages.reduce((x, s) => x + s.duration, 0) / 60\n\t\t\t\t\t)} minutes)\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{#if _magister == null}\n\t\t\t\t\t\t\n\t\t\t\t\t\t

Advanced - for large games

\n\t\t\t\t\t\t

When present, the Magister Ludi (master of the games) has exclusive control of the game.

\n\t\t\t\t\t{:else if _magister == true}\n\t\t\t\t\t\t\n\t\t\t\t\t\t

You are the master of the games. You have exclusive control over playing, pausing and configuring this game.

\n\t\t\t\t\t\t

Do not close this browser window or you will be dethroned.

\n\t\t\t\t\t{/if}\n\t\t\t\t
\n\t\t\t
\n\t\t{:else}\n\t\t\t

Magister Ludi is managing this game.

\n\t\t{/if}\n\t{/if}\n
\n\n") + , (1642, 1, "") + , (1642, 0, "\n\t") + , (1644, 0, "/") + , (1645, 0, "/") + , (1646, 0, " ") + , (1647, 0, "t") + , (1647, 1, "") + , (1647, 0, "T") + , (1695, 1, "") + , (1695, 0, "\n\t") + , (1697, 0, "/") + , (1698, 0, "/") + , (1699, 0, " ") + , (16369, 0, " */") + , (16355, 0, "/* ") + , (16372, 3, "") + , (16355, 3, "") + , (16355, 0, "m") + , (16356, 0, "i") + , (16357, 0, "n") + , (16358, 0, "-") + , (16124, 0, "\n\t") + , (16126, 0, "f") + , (16127, 0, "o") + , (16128, 0, "n") + , (16129, 0, "t") + , (16130, 0, "-") + , (16131, 0, "s") + , (16132, 0, "i") + , (16133, 0, "z") + , (16134, 0, "e") + , (16135, 0, ":") + , (16136, 0, " ") + , (16137, 0, "6") + , (16138, 0, "0") + , (16139, 0, "%") + , (16140, 0, ";") + , (16137, 1, "") + , (16137, 0, "1") + , (16138, 0, "0") + , (16138, 1, "") + , (16138, 0, "2") + , (16138, 1, "") + , (16138, 0, "5") + , (16138, 1, "") + , (16138, 0, "2") + , (16138, 1, "") + , (16138, 0, "3") + , (16035, 0, " */") + , (16019, 0, "/* ") + , (16038, 3, "") + , (16019, 3, "") + , (16029, 5, "a") + , (16030, 0, "b") + , (16031, 0, "s") + , (16032, 0, "o") + , (16033, 0, "l") + , (16034, 0, "u") + , (16029, 6, "absolute") + , (16226, 0, ".") + , (16227, 0, "5") + , (16227, 1, "") + , (16226, 1, "") + , (16225, 1, "") + , (16225, 0, "3") + , (16230, 0, " ") + , (16231, 0, "2") + , (16232, 0, "e") + , (16233, 0, "m") + , (16234, 0, " ") + , (16235, 0, "0") + , (16212, 0, ":") + , (16213, 0, "n") + , (16214, 0, "o") + , (16215, 0, "t") + , (16216, 0, "(") + , (16217, 0, ":") + , (16218, 0, "e") + , (16219, 0, "m") + , (16220, 0, "p") + , (16221, 0, "t") + , (16222, 0, "y") + , (16223, 0, ")") + , (17451, 224, "") + , (16390, 0, ":") + , (16391, 0, "e") + , (16392, 0, "m") + , (16393, 0, "p") + , (16394, 0, "t") + , (16395, 0, "y") + , (16400, 4, "") + , (16375, 0, " */") + , (16359, 0, "/* ") + , (16378, 3, "") + , (16359, 3, "") + , (16377, 0, " */") + , (16353, 0, "/* ") + , (16404, 0, "\n\t") + , (16406, 0, "n") + , (16406, 1, "") + , (16405, 1, "") + , (16404, 1, "") + , (16416, 1, "") + , (16416, 0, "2") + , (16040, 3, "b") + , (16041, 0, "o") + , (16042, 0, "t") + , (16043, 0, "t") + , (16044, 0, "o") + , (16045, 0, "m") + , (5676, 9, "") + , (9300, 9, "") + , (3409, 11, "w") + , (3410, 0, "i") + , (3411, 0, "l") + , (3412, 0, "l") + , (3409, 10, "s") + , (3410, 0, "t") + , (3411, 0, "a") + , (3412, 0, "r") + , (3413, 0, "t") + , (3414, 0, "i") + , (3415, 0, "n") + , (3416, 0, "g") + , (3417, 0, ".") + , (3418, 0, ".") + , (3419, 0, ".") + , (1535, 0, "\n") + , (1536, 0, "\n") + , (1537, 0, "w") + , (1538, 0, "i") + , (1539, 0, "n") + , (1540, 0, "d") + , (1541, 0, "o") + , (1542, 0, "w") + , (1543, 0, ".") + , (1544, 0, "o") + , (1545, 0, "n") + , (1546, 0, "c") + , (1547, 0, "l") + , (1548, 0, "i") + , (1549, 0, "c") + , (1550, 0, "k") + , (1551, 0, " ") + , (1552, 0, "=") + , (1553, 0, " ") + , (1554, 0, "(") + , (1555, 0, ")") + , (1556, 0, " ") + , (1557, 0, "=") + , (1558, 0, ">") + , (1559, 0, " ") + , (1560, 0, "{") + , (1561, 0, "\n\t") + , (1563, 0, "\n\t") + , (1562, 1, "") + , (1563, 1, "}") + , (1562, 0, "\t") + , (1563, 0, "c") + , (1564, 0, "o") + , (1565, 0, "n") + , (1566, 0, "s") + , (1567, 0, "o") + , (1568, 0, "e") + , (1569, 0, ".") + , (1569, 1, "") + , (1568, 1, "") + , (1568, 0, "l") + , (1569, 0, "e") + , (1570, 0, ".") + , (1571, 0, "l") + , (1572, 0, "o") + , (1573, 0, "g") + , (1574, 0, "(") + , (1575, 0, "'") + , (1576, 0, "o") + , (1577, 0, "n") + , (1578, 0, "c") + , (1579, 0, "l") + , (1580, 0, "i") + , (1581, 0, "c") + , (1582, 0, "k") + , (1583, 0, "\"") + , (1583, 1, "") + , (1583, 0, "'") + , (1584, 0, ")") + , (1537, 6, "d") + , (1538, 0, "o") + , (1539, 0, "c") + , (1540, 0, "u") + , (1541, 0, "m") + , (1542, 0, "e") + , (1543, 0, "n") + , (1544, 0, "t") + , (1565, 22, "t") + , (1566, 0, "e") + , (1567, 0, "s") + , (1568, 0, "t") + , (1569, 0, "_") + , (1570, 0, "a") + , (1571, 0, "u") + , (1572, 0, "d") + , (1573, 0, "i") + , (1574, 0, "o") + , (1575, 0, "(") + , (1576, 0, ")") + , (1565, 0, "i") + , (1566, 0, "f") + , (1567, 0, " ") + , (1568, 0, "(") + , (1569, 0, "!") + , (1570, 0, "a") + , (1571, 0, "u") + , (1572, 0, "d") + , (1573, 0, "i") + , (1574, 0, "o") + , (1575, 0, ")") + , (1575, 1, "") + , (1575, 0, "_") + , (1576, 0, "w") + , (1577, 0, "o") + , (1578, 0, "r") + , (1579, 0, "k") + , (1580, 0, "s") + , (1581, 0, ")") + , (1582, 0, " ") + , (1563, 0, "\n\t") + , (1565, 0, "/") + , (1566, 0, "/") + , (1567, 0, " ") + , (1564, 4, "") + , (1563, 1, "") + , (1536, 61, "") + , (2297, 1, "") + , ( 2362 + , 0 + , "\ndocument.onclick = () => {\n\tif (!audio_works) test_audio()\n}" + ) + , (2361, 1, "") + ] +end diff --git a/svelte_gap.txt b/svelte_gap.txt new file mode 100644 index 0000000..6f4536d --- /dev/null +++ b/svelte_gap.txt @@ -0,0 +1,3172 @@ + + + + {#if _magister} + + {/if} + + + +
+ +
+eload="auto">lem}k +
img"topic' + ineled="captions">< + /audio> + + {#if internal_state === 'loading'} +

Loading game state

+ {:else} + + + +
{game_config.topic}
+ +

{stage_label}

+
+
{((internal_state === 'playing' || internal_state === 'paused') && current_stage) ? current_stage.duration - offset_sec : ''}
+
+
+ +
+ {#each game_stages as s, i} + {#if s.type === 'bead' || s.type === 'breath'} + + {/if} + {/each} +
+ + {#if (_magister == null || _magister == true)} + {#if internal_state == 'waiting'} + + {:else if internal_state == 'playing'} + + {:else if internal_state == 'paused'} + + {/if} + {/if} + +
+ +
+ + Info + +

{game_config.topic}

+

Room: {room} (leave)

+ +
+ {state === 'waiting' ? 'Waiting for the game to start' + : state === 'paused' ? 'GAME PAUSED' + : state === 'playing' ? 'Game in progress' + : ''} +
+ {#if connection !== 'connected'} +
DISCONNECTED FROM GAME SERVER
+ {:else} + {#if _active_sessions == 1} +
You are alone in the room
+ {:else} +
{_active_sessions} players are in this room
+ {/if} + {/if} + +
+

Game

+ {#if game_config.meditate} +
+ + Meditation (1 min) +
+ {/if} + {#each Array(Math.max(game_config.rounds, 0)) as _, r} +
Round {r+1}: + {#each Array(Math.max(game_config.players, 0)) as _, p} + p)}>{p+1} --> + {p+1} + {/each} +
+ {/each} +
+ +
+ + {#if _magister == null || _magister == true} +
+ Game controls + +

+ {#if _magister == null} + This will effect all players. Will you borrow power? Will you steal it? + {:else} + You are master of the games. These controls are yours alone. + {/if} +

+ + {#if internal_state == 'waiting'} + + {:else if internal_state == 'playing'} + + {:else if i/* nternalabsoluteabsbottomolu_state == */ 'paused'} + + {/if} + + + font-size: 13252060%; {#if internal_state == 'paused' || internal_:not(:empty)state == 'com3p.5l 2em 0eted' } + + {/if} + + + +
+ {:else} +

Magister Ludi is managing this game.

+ {/i > :global(svg) > > svgf} + {/if} + + + + {/if} + + + +
+ + + + {#if internal_state === 'loading'} +

Loading game state

+ {:else} + + + +
{game_config.topic}
+ +

{stage_label}

+
+
{((internal_state === 'playing' || internal_state === 'paused') && current_stage) ? current_stage.duration - offset_sec : ''}
+
+
+ + {#if (_magister == null || _magister == true)} + {#if internal_state == 'waiting'} + + {:else if internal_state == 'playing'} + + {:else if internal_state == 'paused'} + + {/if} + {/if} + +
+ +
+ + Info + +

{game_config.topic}

+

Room: {room} (leave)

+ +
+ {state === 'waiting' ? 'Waiting for the game to start' + : state === 'paused' ? 'GAME PAUSED' + : state === 'playing' ? 'Game in progress' + : ''} +
+ {#if connection !== 'connected'} +
DISCONNECTED FROM GAME SERVER
+ {:else} + {#if _active_sessions == 1} +
You are alone in the room
+ {:else} +
{_active_sessions} players are in this room
+ {/if} + {/if} + +
+

Game

+ {#if game_config.meditate} +
+ + Meditation (1 min) +
+ {/if} + {#each Array(Math.max(game_config.rounds, 0)) as _, r} +
Round {r+1}: + {#each Array(Math.max(game_config.players, 0)) as _, p} + + {p+1} + {/each} +
+ {/each} +
+ +
+ + {#if _magister == null || _magister == true} +
+ Game controls + +

+ {#if _magister == null} + This will effect all players. Will you borrow power? Will you steal it? + {:else} + You are master of the games. These controls are yours alone. + {/if} +

+ + {#if internal_state == 'waiting'} + + {:else if internal_state == 'playing'} + + {:else if internal_state == 'paused'} + + {/if} + + {#if internal_state == 'paused' || internal_state == 'completed' } + + {/if} + + + + + + + + + + + + + + + +
+ (Total game length: {roundish( + game_stages.reduce((x, s) => x + s.duration, 0) / 60 + )} minutes) +
+ +
+ {#if _magister == null} + +

Advanced - for large games

+

When present, the Magister Ludi (master of the games) has exclusive control of the game.

+ {:else if _magister == true} + +

You are the master of the games. You have exclusive control over playing, pausing and configuring this game.

+

Do not close this browser window or you will be dethroned.

+ {/if} +
+
+ {:else} +

Magister Ludi is managing this game.

+ {/if} + {/if} +
+ + + {/if} + + + +
+ + + + {#if internal_state === 'loading'} +

Loading game state

+ {:else} + + +

Topic: {topic}< + div +g{round_audio}g id='topic'asd + f /> /h1> + +

Room: {room} (leave)

+let audio_works = true + +// function test_audio() { +// let a = new Audio() +// a.vo + (_magister == null || _magister == true) && {#if internal_state == 'waitin g'} + + + {/if} +// let audio_workstrue =// fals// e + +// function test_audi// o() { +// } + +$::$ // let a = +// a.v// olume = 0.1v// o + a.src = '/xlo// -metal-tone.mp3/// / 'anew A// udio() + // a.play ()/// / .t + hen ( + () => {a// ud +// co// nsole.log(// 'Audio works// does // // not work')// + io_work s = + audi//// o_w// ork// s // = falsetrue true} , + // () =>// {// + // // c// onsole// .l// og('Aud +function// f + console.log('xx// ') + console.lo// g(// setTimeout('xx')logco, 100 +0)nsoleix_audio(e) { + test_audio())test_ }] + { io + test_audio()t +est_au doe s +} not work' )log. + +$: { ) consol + audio_works = true}, + audio_wothenplayAudio= { + } + $$"$falseort let _active_sessions + +let game_completed = false // Derived from other properties +let internal_state +$: interna// l_sta// te = game_completed ? 'compl// eted' : state +$: { + if (s// tat// e !== 'playing') { + console.log('xxx') + game_compl +let round_audio1 +letcompletend_ audio21 +eted = false + } +} + + // export let state + +const ARCHETOPICS = [ + 'Truth', 'Human', 'Energy', 'Beauty', 'Beginning', 'End', 'Birth', 'Death', + 'Ego', 'Attention', 'Art', 'Empathy', 'Eutopia', 'Future', 'Game', 'Gift', + 'History', 'Cosmos', 'Time', 'Life', 'Addiction', 'Paradox', 'Shadow', 'Society' +] + +// Could make configurable. Eh. +co = []nst MEDITATION_SECONDS = 60 + +let game_stages +$:{ + + } `${meditate ? 'Meditation' : 'Game'} is about + type: '' + no_sound: true_to start`will start { + 3game_stages = [] + if (meditate) + type: 'meditate', game_sta + ges.pu + }]sh({ + label: 'Meditate', + duration: + if (meditate) game_stages.push({ + label: 'Meditate', + duration: MEDITATION_SECONDS, MEDITATION_SECONDS, + }) + for (let r = 0; r < rounds; r++) + type: 'bead', r, p type: 'bead', + r, p { + for (let p = 0; p < players; p++) { + game_stages.push({ + label: `Round ${r+1} player ${p+1}`, + duration: seconds_per_bead, + }) + } + } +} + + +const update_state = async patch => { + await fetch(`${room}/configure`, { + method: 'POST', + mode: 'same-origin', + headers: { + 'content-type': 'application/json', + }, + body: // JSON.stringify(patch) + }) +} + +const upd = (k, v) => () => update_state({[k]: v}) + +const config = k => e => { + console.log('k', k, e.data, e.value, e.target.value, e.target.type) + const raw_value = e.target.value + const value = e.target.type === 'number' ? raw_value|0 + : e.target.type =waiting== 'checkboxg' +co'Waiting for game to start', duration: Infinityinst complete type: 'complete',_state = { label: 'Game compl +const complete_stage = { const get_current_stage = (offset_ms) => { + if (state === 'waiting') return {stage: waiting_stage, offset_ms: 0} + + let offset_secondMath.round(rounds = offse /) 1000t_msoffset + for (let s = 0; s < game_stages.length; s++) { + let stage = game_stages[s] + if (stage.dursecation * 1000 > offset_ms) { + sec : offset_sec + const time = state + _clock_offset_cloooff=== 'playing' ? Date.now() - start_time + : state === 'paused' ? paused_progress + : 0pauslet * 1000return {stage, secoffset_ms} + } + offset_currentms -=time stage.duratiosecn * 1000 + } + r -+ paused_progresspauseeturn { + stage: complete_secstage, offset_ms + } +} +// label: 'Game complete', complete: true }ete// ' + if (state === 'waiting' || state{stage: === 'loading, offset_ms: 0}// '!== 'playing' && state + !== ') return waiting_// stagewaitinsecg, complete: trues// ac age}ivi? ye.target.checked + : raw_v// alue// + update_state({[k]: value}) +/sec/ } + +c// onst roundgisx_h = x => Math.roundnew_stage.type === 'complete'(xg// ame// _ * 1g00) // x_/ 100 + +// const startgame_ = () =// > {// +// consolge.log(x_x_'start!': xcurr_gamntex = null, +let _ggame_s// tatex_gagme) +// upstagedatege_current_stage.type === 'complete'game_statge({currstatnte: 'gpx_laying'}) +// } + +// legcurrame_ntt rogund_arr +// $: round_arrcurr = nntew Agrrg = null{}nullame_ay(Mathcomplete_stateconst {stage: new_stage, ne: new_offs: w_offs: current_ + // setTimeout needed to get around some weird race condition. + // There's probably better ways to structure this :/other ways to stage.type === 'complete'offset_ // setTimeout needed to get around some weird race condition.ms}oenew_stage: stag.max(rounds, 0)).fill()$: console.log('game state xxx', game_state)logconsnew_offsole + + +new_stage_const || state === 'paused'ise gsetTsetTimeout(() => tick(false))imeout(() => setT et_cur)rebar_nt_scurrtatent = (gobar_ffset + +letgw_stagee_ame_ {stw_stageae_cunrrte, ntoffsget_m + +$n: gaw_stage +let game_completed +$: { + // console.log('updating game_completed', current_stage) + game_completed = (state !== 'playing' || current_stage == null) ? false + : (current_stage.type === 'complete') +} + + +let internal_state +$: internal_state = game_completed ? ' completed' : stat +// let b// ar_width = 0 + + : statecurrent_stage.type + : current_stage.type === 'complete' ? 100 === 'waiting' ? 0currenstar +e// +$: {// + if (state// !== 'playing') {// + game_completed = fals// e/// / + }// +} +mee// __c// om/// / ple// ted = game_state =// = nul// l ? fnalse + if (p// lay_// audi && !new_stage.no_sou// ndno// _new_stage!! o) { + if (current_stage.complete) com// $: game_completed = current_stage && (current_stage.type === 'complete') +plete_audio.play() + else +let game_completed round_let bar_width = 0 +audio.play( + } ) : !!game_state.completegame_s tategame_ +$: width = state.complete ? 100 : 100 * offset_ms / (state.duration * 1000)$: widtinternal_state === 'waiting' +let config_open = false + + +$: if (_magister === true) config_open = tru + +// The first user has the config open by default. ysere +$: if (_active_ses=sio1ns_acti_magister == tr// TMaAke themagist iser box fully visible once there's a critical mass of players in the roomenouhg pl ue) +// let magister_opaque = false +$: magister_opa + + {#if _magist e r_ m a g isM oda l } + + body { + bac kgroun d-color: var(--bg- highlight); over flow: hidden; + } + + {/if} + +d +> + {#if isModal} + n put={config('meditate')} > + -> + + + + + + + + +
+ (Tot al game length: {roundish( + (rounds * players * seconds_per_bead + (meditate ? MED ITATION_SECOND + {/if}S : 0)) / 60 + )} minutes) +
+
+ (Tot al game length: {roundish( + game_stages.reduce((x, s) => x + s.durati on, 0) / 60 + )} minutes) +
+ +

+ + + +
+

Hello {name}!{JSON.stringify(state)}stringifyJSONh1> +

Visit the */Svelte tutorial to learn how to build Svelte apps.

+

+ + + + + +
+
+ +

Edit src/App.svelte and save to reload.

+

Page has been open for {count} seconds.

+

+ + Learn Svelte + +

+
+
+ + + + +
+
+ +

Edit src/App.svelte and save to reload.

+

Page has been open for {count} seconds.

+

+ + Learn Svelte + +

+
+
diff --git a/utils.sml b/utils.sml index 639bc0b..759a566 100644 --- a/utils.sml +++ b/utils.sml @@ -21,17 +21,46 @@ fun runTxns arr = let val strSize = String.size insStr val rope = - if strSize > 0 then TinyRope23.insert (pos, insStr, rope) else rope + if strSize > 0 then GapBuffer.insert (pos, insStr, rope) else rope in rope - end) TinyRope23.empty arr + end) GapBuffer.empty arr + +fun compareTxns arr = + Vector.foldli (fn (idx, (pos, delNum, insStr), (rope, gapBuffer)) => + let + val strSize = String.size insStr + + val rope = if strSize > 0 then TinyRope.insert (pos, insStr, rope) else + rope + val gapBuffer = if strSize > 0 then GapBuffer.insert (pos, insStr, + gapBuffer) else gapBuffer + + val ropeString = TinyRope.toString rope + val gapBufferString = GapBuffer.toString gapBuffer + in + if ropeString = gapBufferString then + (rope, gapBuffer) + else + let + val _ = print ("difference detected at txn number: " ^ (Int.toString idx) ^ "\n") + val _ = print "rope string: \n" + val _ = print (ropeString ^ "\n") + val _ = print "gap string: \n" + val _ = print (gapBufferString ^ "\n") + val _ = raise Empty + in + (rope, gapBuffer) + end + end + ) (TinyRope.empty, GapBuffer.empty) arr fun runTxnsTime title arr = let val f = (fn () => runTxns arr) in timeFun title f end -fun runToString rope = TinyRope23.toString rope +fun runToString rope = GapBuffer.toString rope fun runToStringTime title rope = let val f = (fn () => runToString rope) @@ -75,7 +104,7 @@ fun writeFile filename acc = fun write (fileName, rope) = let - val str = TinyRope23.toString rope + val str = GapBuffer.toString rope val io = TextIO.openOut fileName val _ = TextIO.output (io, str) val _ = TextIO.closeOut io @@ -83,17 +112,21 @@ fun write (fileName, rope) = () end +fun loop () = loop() + fun main () = let (* Timing benchmarks. *) + val _ = compareTxns SvelteComponent.txns + val startTime = LargeInt.fromInt 0 - val _ = runTxns1000Times (999, svelte_arr, startTime) + val _ = runTxns1000Times (999, SvelteComponent.txns, startTime) val _ = runTxns1000Times (999, rust_arr, startTime) val _ = runTxns1000Times (999, seph_arr, startTime) val _ = runTxns1000Times (999, automerge_arr, startTime) (* Tests that line metadata is correct; will fail if incorrect. *) - val svelte = runTxns svelte_arr + val svelte = runTxns SvelteComponent.txns val rust = runTxns rust_arr val seph = runTxns seph_arr val automerge = runTxns automerge_arr @@ -105,12 +138,12 @@ fun main () = val _ = Rope.verifyLines automerge *) - val _ = write ("svelte23.txt", svelte) - val _ = write ("rust23.txt", rust) - val _ = write ("seph23.txt", seph) - val _ = write ("automerge23.txt", automerge) + val _ = write ("svelte_gap.txt", svelte) + val _ = write ("rust23_gap.txt", rust) + val _ = write ("seph23_gap.txt", seph) + val _ = write ("automerge_gap.txt", automerge) in - () + loop () end val _ = main ()