/* decompress.c - Don Yang (uguu.org) 04/26/08 */ /*@ -aliasunique @*/ #include #include /* Initial dictionary */ static const char InitDict[] = "/)(b9`.d,'P\n\"o8 "; /* Compressed data */ static char *Data = "~~~&&|||uz.)t}y{{}}5&?***L*vK+L&u*({{{}r^*&H-wvy{pqK+L&^+.{{s^F&" "P'wv{x~~K.~tr^X2^E&&&x^*&|}K.~sL*_%.U+^H&_S,N,wu{`C6~tsr|O/~}x|}" "_E&M3w}{}aM&{}^D0t}vyb'78'sq_,(R-w||^D7aZ*vqw|bW(T*bG'`*)cT&&&^'" "&a*+{c8&^N&v{{rU'}}&&}r^S+{scU*c@+pb0(ty_-&{{|v^?'_M'''|}{Z+^<&`" ")'Z-2*`H)_;(|}^Z'r|X)|v}{{w}`=+_T)`*+g*&-)yxpaL&w}xzw}g;&_@'b8,f" "Y'aU'^4(aY*f3(_,'p}^O'eW'}}_;+pyf0)e%4w^>'U)L)U,g8-fK0_I&J(hQ6i@" "'c-(_D+a:)_%(`@'g@-^<,d%&_@1b8+`C'iS.dV,hU)e4,^U.v{gI.c#&jJ4g+0d" "&&h?/h=7`<1h@/R(wvkF5`:)d(&_U&^K/vyw|}{fZ&9&o=-`:*d;,tcS-}}n9(rh" "$(dO*`<(cD-e4+c%.g('mF(+&nM-d%*^Q&c('aY&<(c6-_V,_&&^P)s}_W&z~w|F" "&gO'jU'`P&iN,c4-{sruza0'^#+a&&m=6O(bH0o7&c:<}un'-d0?^`A&i''P/O:c" "K'h4(lR'P+lN+_Z6m#'`?(sqQ+^&'h(,v}^R(sjJ(hS-prQ*m='^e+(l>(_F7l+&" "lB,c&(_'(kB(M2v9(Q-^`G7^c$)mS)_$(Q-_$._8)K(o1&kK'e.*n(,l3.hD(aF&" "g8'v_$(t_**n$,^c:(^Q,c0(ts^a+)`6-^E+^h=.s}a$4dQ*c:+^gQ+m$;eU&eN," "O@^e,&k%.o73mH/l'.c[+c-2f7(^i.0^bT)s}^f0*eK'D3^hV4^b6-^i;8^]Q&^k" "M1^_&-f@._(&^oK'K0m<(v}|w^h%(6+e,'m8(jI/^`I+txcU+b-&prnC(m:-n%9s" "rf<&t{^^E'ruk%+n(*p}i:(P'iP&_%-^dT*b0&^hI0Q(jL(^Y'o7(bK/u{_J*^G)Q(^c4)^f-+^I*^Z'" "^gH-F(_;&k$&^#'_dI$$$$$`S3u~_^;-^F(pqw}P(c=)`./^m:(^^X0}x^D'G+oP" "*_dX*^W.m?(_^W&`Z&jW.^9'c<4^^G(w}lC'l=BM*_^3(c+1L7_/&jE)^m63iE._" "W,^m-+e1._`?2pypymW._i2)^mZ.bX,_^0)iX&kE4__74d<&_aB(h6&mEB^`U,_b" "C&^oI0O;d.(^]72^S'uwulQ-`S(}q_hU&<&l<-`Z*b#'l4&a&+^3/_:&oA*R&_cY" "(dN*mN'^nG-_`&(_jE*_]&&oK'_4&_hS)lH'||^d'+^m&2nN+_hF'zw^m2&J,p}^" "i*.a<d0'y}|aD'nQ&^b(0^h*" ")_gC,h8:^_B'cD)^mC-_kQ,_f#/`.6_b?-_k8(hI&utj/:_Z(S,j<'j@(^iP-^mT" ")S1_B,n[(^_='^b2.t{^dJ(T9iV&i52_h[(`d23_k#-T'^_(4[(^a#/a2-^1+l9&" "`g&-eX&_jY/_mC0^nK.^g@*bX@cG3g:*_T/_n60d>@Q4^bX)f9>o62n-&R:^jQ'o" "53^_B8^n[6`k%+^_D-`b#(z"; /* Decode a variable length number */ static int Decode(char **cursor) { int number = 0; for(; (int)**cursor >= 93; ++*cursor) number = number * 19 + (int)**cursor - 93; number = number * 57 + (int)**cursor - 35; ++*cursor; return number; } int main(void) { char output[0x10000]; char *r, *w; int offset, size; strcpy(output, InitDict); w = output + sizeof(InitDict) - 1; for(r = Data; *r != '\0';) { if( (int)*r >= 112 ) { *w = InitDict[(int)*r - 111]; ++w; ++r; } else { offset = Decode(&r); size = Decode(&r); memcpy(w, w - offset, (size_t)size); w += size; } } *w = '\0'; (void)puts(output + sizeof(InitDict) - 1); return 0; }