var zip_WSIZE=32768;
var zip_STORED_BLOCK=0;
var zip_STATIC_TREES=1;
var zip_DYN_TREES=2;
var zip_lbits=9;
var zip_dbits=6;
var zip_INBUFSIZ=32768;
var zip_INBUF_EXTRA=64;
var zip_slide;
var zip_wp;
var zip_fixed_tl=null;
var zip_fixed_td;
var zip_fixed_bl,fixed_bd;
var zip_bit_buf;
var zip_bit_len;
var zip_method;
var zip_eof;
var zip_copy_leng;
var zip_copy_dist;
var zip_tl,zip_td;
var zip_bl,zip_bd;
var zip_inflate_data;
var zip_inflate_pos;
var zip_MASK_BITS=new Array(0x0000,0x0001,0x0003,0x0007,0x000f,0x001f,0x003f,0x007f,0x00ff,0x01ff,0x03ff,0x07ff,0x0fff,0x1fff,0x3fff,0x7fff,0xffff);
var zip_cplens=new Array(3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0);
var zip_cplext=new Array(0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99);
var zip_cpdist=new Array(1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577);
var zip_cpdext=new Array(0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13);
var zip_border=new Array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);
function zip_HuftList()
{
	this.next=null;
	this.list=null
}
function zip_HuftNode()
{
	this.e=0;
	this.b=0;
	this.n=0;
	this.t=null
}
function zip_HuftBuild(b,n,s,d,e,mm)
{
	this.BMAX=16;
	this.N_MAX=288;
	this.status=0;
	this.root=null;
	this.m=0;
	{
		var a;
		var c=new Array(this.BMAX+1);
		var el;
		var f;
		var g;
		var h;
		var i;
		var j;
		var k;
		var lx=new Array(this.BMAX+1);
		var p;
		var pidx;
		var q;
		var r=new zip_HuftNode();
		var u=new Array(this.BMAX);
		var v=new Array(this.N_MAX);
		var w;
		var x=new Array(this.BMAX+1);
		var xp;
		var y;
		var z;
		var o;
		var tail;
		tail=this.root=null;
		for(i=0;i<c.length;i++)c[i]=0;
		for(i=0;i<lx.length;i++)lx[i]=0;
		for(i=0;i<u.length;i++)u[i]=null;
		for(i=0;i<v.length;i++)v[i]=0;
		for(i=0;i<x.length;i++)x[i]=0;
		el=n>256?b[256]:this.BMAX;
		p=b;
		pidx=0;
		i=n;
		do
		{
			c[p[pidx]]++;
			pidx++
		}
		while(--i>0);
		if(c[0]==n)
		{
			this.root=null;
			this.m=0;
			this.status=0;
			return
		}
		for(j=1;j<=this.BMAX;j++)if(c[j]!=0)break;
		k=j;
		if(mm<j)mm=j;
		for(i=this.BMAX;i!=0;i--)if(c[i]!=0)break;
		g=i;
		if(mm>i)mm=i;
		for(y=1<<j;j<i;j++,y<<=1)if((y-=c[j])<0)
		{
			this.status=2;
			this.m=mm;
			return
		}
		if((y-=c[i])<0)
		{
			this.status=2;
			this.m=mm;
			return
		}
		c[i]+=y;
		x[1]=j=0;
		p=c;
		pidx=1;
		xp=2;
		while(--i>0)x[xp++]=(j+=p[pidx++]);
		p=b;
		pidx=0;
		i=0;
		do
		{
			if((j=p[pidx++])!=0)v[x[j]++]=i
		}
		while(++i<n);
		n=x[g];
		x[0]=i=0;
		p=v;
		pidx=0;
		h=-1;
		w=lx[0]=0;
		q=null;
		z=0;
		for(;k<=g;k++)
		{
			a=c[k];
			while(a-->0)
			{
				while(k>w+lx[1+h])
				{
					w+=lx[1+h];
					h++;
					z=(z=g-w)>mm?mm:z;
					if((f=1<<(j=k-w))>a+1)
					{
						f-=a+1;
						xp=k;
						while(++j<z)
						{
							if((f<<=1)<=c[++xp])break;
							f-=c[xp]
						}
					}
					if(w+j>el&&w<el)j=el-w;
					z=1<<j;
					lx[1+h]=j;
					q=new Array(z);
					for(o=0;o<z;o++)
					{
						q[o]=new zip_HuftNode()
					}
					if(tail==null)tail=this.root=new zip_HuftList();
					else tail=tail.next=new zip_HuftList();
					tail.next=null;
					tail.list=q;
					u[h]=q;
					if(h>0)
					{
						x[h]=i;
						r.b=lx[h];
						r.e=16+j;
						r.t=q;
						j=(i&((1<<w)-1))>>(w-lx[h]);
						u[h-1][j].e=r.e;
						u[h-1][j].b=r.b;
						u[h-1][j].n=r.n;
						u[h-1][j].t=r.t
					}
				}
				r.b=k-w;
				if(pidx>=n)r.e=99;
				else if(p[pidx]<s)
				{
					r.e=(p[pidx]<256?16:15);
					r.n=p[pidx++]
				}
				else
				{
					r.e=e[p[pidx]-s];
					r.n=d[p[pidx++]-s]
				}
				f=1<<(k-w);
				for(j=i>>w;j<z;j+=f)
				{
					q[j].e=r.e;
					q[j].b=r.b;
					q[j].n=r.n;
					q[j].t=r.t
				}
				for(j=1<<(k-1);(i&j)!=0;j>>=1)i^=j;
				i^=j;
				while((i&((1<<w)-1))!=x[h])
				{
					w-=lx[h];
					h--
				}
			}
		}
		this.m=lx[1];
		this.status=((y!=0&&g!=1)?1:0)
	}
}
function zip_GET_BYTE()
{
	if(zip_inflate_data.length==zip_inflate_pos)return-1;
	return zip_inflate_data.charCodeAt(zip_inflate_pos++)&0xff
}
function zip_NEEDBITS(n)
{
	while(zip_bit_len<n)
	{
		zip_bit_buf|=zip_GET_BYTE()<<zip_bit_len;
		zip_bit_len+=8
	}
}
function zip_GETBITS(n)
{
	return zip_bit_buf&zip_MASK_BITS[n]
}
function zip_DUMPBITS(n)
{
	zip_bit_buf>>=n;
	zip_bit_len-=n
}
function zip_inflate_codes(buff,off,size)
{
	var e;
	var t;
	var n;
	if(size==0)return 0;
	n=0;
	for(;;)
	{
		zip_NEEDBITS(zip_bl);
		t=zip_tl.list[zip_GETBITS(zip_bl)];
		e=t.e;
		while(e>16)
		{
			if(e==99)return-1;
			zip_DUMPBITS(t.b);
			e-=16;
			zip_NEEDBITS(e);
			t=t.t[zip_GETBITS(e)];
			e=t.e
		}
		zip_DUMPBITS(t.b);
		if(e==16)
		{
			zip_wp&=zip_WSIZE-1;
			buff[off+n++]=zip_slide[zip_wp++]=t.n;
			if(n==size)return size;
			continue
		}
		if(e==15)break;
		zip_NEEDBITS(e);
		zip_copy_leng=t.n+zip_GETBITS(e);
		zip_DUMPBITS(e);
		zip_NEEDBITS(zip_bd);
		t=zip_td.list[zip_GETBITS(zip_bd)];
		e=t.e;
		while(e>16)
		{
			if(e==99)return-1;
			zip_DUMPBITS(t.b);
			e-=16;
			zip_NEEDBITS(e);
			t=t.t[zip_GETBITS(e)];
			e=t.e
		}
		zip_DUMPBITS(t.b);
		zip_NEEDBITS(e);
		zip_copy_dist=zip_wp-t.n-zip_GETBITS(e);
		zip_DUMPBITS(e);
		while(zip_copy_leng>0&&n<size)
		{
			zip_copy_leng--;
			zip_copy_dist&=zip_WSIZE-1;
			zip_wp&=zip_WSIZE-1;
			buff[off+n++]=zip_slide[zip_wp++]=zip_slide[zip_copy_dist++]
		}
		if(n==size)return size
	}
	zip_method=-1;
	return n
}
function zip_inflate_stored(buff,off,size)
{
	var n;
	n=zip_bit_len&7;
	zip_DUMPBITS(n);
	zip_NEEDBITS(16);
	n=zip_GETBITS(16);
	zip_DUMPBITS(16);
	zip_NEEDBITS(16);
	if(n!=((~zip_bit_buf)&0xffff))return-1;
	zip_DUMPBITS(16);
	zip_copy_leng=n;
	n=0;
	while(zip_copy_leng>0&&n<size)
	{
		zip_copy_leng--;
		zip_wp&=zip_WSIZE-1;
		zip_NEEDBITS(8);
		buff[off+n++]=zip_slide[zip_wp++]=zip_GETBITS(8);
		zip_DUMPBITS(8)
	}
	if(zip_copy_leng==0)zip_method=-1;
	return n
}
function zip_inflate_fixed(buff,off,size)
{
	if(zip_fixed_tl==null)
	{
		var i;
		var l=new Array(288);
		var h;
		for(i=0;i<144;i++)l[i]=8;
		for(;i<256;i++)l[i]=9;
		for(;i<280;i++)l[i]=7;
		for(;i<288;i++)l[i]=8;
		zip_fixed_bl=7;
		h=new zip_HuftBuild(l,288,257,zip_cplens,zip_cplext,zip_fixed_bl);
		if(h.status!=0)
		{
			alert("HufBuild error: "+h.status);
			return-1
		}
		zip_fixed_tl=h.root;
		zip_fixed_bl=h.m;
		for(i=0;i<30;i++)l[i]=5;
		zip_fixed_bd=5;
		h=new zip_HuftBuild(l,30,0,zip_cpdist,zip_cpdext,zip_fixed_bd);
		if(h.status>1)
		{
			zip_fixed_tl=null;
			alert("HufBuild error: "+h.status);
			return-1
		}
		zip_fixed_td=h.root;
		zip_fixed_bd=h.m
	}
	zip_tl=zip_fixed_tl;
	zip_td=zip_fixed_td;
	zip_bl=zip_fixed_bl;
	zip_bd=zip_fixed_bd;
	return zip_inflate_codes(buff,off,size)
}
function zip_inflate_dynamic(buff,off,size)
{
	var i;
	var j;
	var l;
	var n;
	var t;
	var nb;
	var nl;
	var nd;
	var ll=new Array(286+30);
	var h;
	for(i=0;i<ll.length;i++)ll[i]=0;
	zip_NEEDBITS(5);
	nl=257+zip_GETBITS(5);
	zip_DUMPBITS(5);
	zip_NEEDBITS(5);
	nd=1+zip_GETBITS(5);
	zip_DUMPBITS(5);
	zip_NEEDBITS(4);
	nb=4+zip_GETBITS(4);
	zip_DUMPBITS(4);
	if(nl>286||nd>30)return-1;
	for(j=0;j<nb;j++)
	{
		zip_NEEDBITS(3);
		ll[zip_border[j]]=zip_GETBITS(3);
		zip_DUMPBITS(3)
	}
	for(;j<19;j++)ll[zip_border[j]]=0;
	zip_bl=7;
	h=new zip_HuftBuild(ll,19,19,null,null,zip_bl);
	if(h.status!=0)return-1;
	zip_tl=h.root;
	zip_bl=h.m;
	n=nl+nd;
	i=l=0;
	while(i<n)
	{
		zip_NEEDBITS(zip_bl);
		t=zip_tl.list[zip_GETBITS(zip_bl)];
		j=t.b;
		zip_DUMPBITS(j);
		j=t.n;
		if(j<16)ll[i++]=l=j;
		else if(j==16)
		{
			zip_NEEDBITS(2);
			j=3+zip_GETBITS(2);
			zip_DUMPBITS(2);
			if(i+j>n)return-1;
			while(j-->0)ll[i++]=l
		}
		else if(j==17)
		{
			zip_NEEDBITS(3);
			j=3+zip_GETBITS(3);
			zip_DUMPBITS(3);
			if(i+j>n)return-1;
			while(j-->0)ll[i++]=0;
			l=0
		}
		else
		{
			zip_NEEDBITS(7);
			j=11+zip_GETBITS(7);
			zip_DUMPBITS(7);
			if(i+j>n)return-1;
			while(j-->0)ll[i++]=0;
			l=0
		}
	}
	zip_bl=zip_lbits;
	h=new zip_HuftBuild(ll,nl,257,zip_cplens,zip_cplext,zip_bl);
	if(zip_bl==0)h.status=1;
	if(h.status!=0)
	{
		if(h.status==1);
		return-1
	}
	zip_tl=h.root;
	zip_bl=h.m;
	for(i=0;i<nd;i++)ll[i]=ll[i+nl];
	zip_bd=zip_dbits;
	h=new zip_HuftBuild(ll,nd,0,zip_cpdist,zip_cpdext,zip_bd);
	zip_td=h.root;
	zip_bd=h.m;
	if(zip_bd==0&&nl>257)
	{
		return-1
	}
	if(h.status==1)
	{
	}
	if(h.status!=0)return-1;
	return zip_inflate_codes(buff,off,size)
}
function zip_inflate_start()
{
	var i;
	if(zip_slide==null)zip_slide=new Array(2*zip_WSIZE);
	zip_wp=0;
	zip_bit_buf=0;
	zip_bit_len=0;
	zip_method=-1;
	zip_eof=false;
	zip_copy_leng=zip_copy_dist=0;
	zip_tl=null
}
function zip_inflate_internal(buff,off,size)
{
	var n,i;
	n=0;
	while(n<size)
	{
		if(zip_eof&&zip_method==-1)return n;
		if(zip_copy_leng>0)
		{
			if(zip_method!=zip_STORED_BLOCK)
			{
				while(zip_copy_leng>0&&n<size)
				{
					zip_copy_leng--;
					zip_copy_dist&=zip_WSIZE-1;
					zip_wp&=zip_WSIZE-1;
					buff[off+n++]=zip_slide[zip_wp++]=zip_slide[zip_copy_dist++]
				}
			}
			else
			{
				while(zip_copy_leng>0&&n<size)
				{
					zip_copy_leng--;
					zip_wp&=zip_WSIZE-1;
					zip_NEEDBITS(8);
					buff[off+n++]=zip_slide[zip_wp++]=zip_GETBITS(8);
					zip_DUMPBITS(8)
				}
				if(zip_copy_leng==0)zip_method=-1
			}
			if(n==size)return n
		}
		if(zip_method==-1)
		{
			if(zip_eof)break;
			zip_NEEDBITS(1);
			if(zip_GETBITS(1)!=0)zip_eof=true;
			zip_DUMPBITS(1);
			zip_NEEDBITS(2);
			zip_method=zip_GETBITS(2);
			zip_DUMPBITS(2);
			zip_tl=null;
			zip_copy_leng=0
		}
		switch(zip_method)
		{
			case 0:i=zip_inflate_stored(buff,off+n,size-n);
			break;
			case 1:if(zip_tl!=null)i=zip_inflate_codes(buff,off+n,size-n);
			else i=zip_inflate_fixed(buff,off+n,size-n);
			break;
			case 2:if(zip_tl!=null)i=zip_inflate_codes(buff,off+n,size-n);
			else i=zip_inflate_dynamic(buff,off+n,size-n);
			break;
			default:i=-1;
			break
		}
		if(i==-1)
		{
			if(zip_eof)return 0;
			return-1
		}
		n+=i
	}
	return n
}
function zip_depress(str)
{
	var out,buff;
	var i,j;
	zip_inflate_start();
	zip_inflate_data=str;
	zip_inflate_pos=0;
	buff=new Array(1024);
	out="";
	while((i=zip_inflate_internal(buff,0,buff.length))>0)
	{
		for(j=0;j<i;j++)out+=String.fromCharCode(buff[j])
	}
	zip_inflate_data=null;
	return out
}

